From bb73b1f9b6257ac1f6909b2e0d17a19c018f2ddb Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Wed, 5 Feb 2025 21:41:22 +0100 Subject: [PATCH 001/164] GO-4844: Add analytics event broadcast for ObjectCreate --- core/api/internal/object/service.go | 14 +++++++-- core/api/server/server.go | 5 ++-- core/api/service.go | 5 +++- core/api/util/analytics.go | 45 +++++++++++++++++++++++++++++ 4 files changed, 64 insertions(+), 5 deletions(-) create mode 100644 core/api/util/analytics.go diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go index 91efda7b2..f8c988340 100644 --- a/core/api/internal/object/service.go +++ b/core/api/internal/object/service.go @@ -10,6 +10,7 @@ import ( "github.com/anyproto/anytype-heart/core/api/internal/space" "github.com/anyproto/anytype-heart/core/api/pagination" "github.com/anyproto/anytype-heart/core/api/util" + "github.com/anyproto/anytype-heart/core/event" "github.com/anyproto/anytype-heart/pb" "github.com/anyproto/anytype-heart/pb/service" "github.com/anyproto/anytype-heart/pkg/lib/bundle" @@ -54,11 +55,12 @@ type Service interface { type ObjectService struct { mw service.ClientCommandsServer spaceService *space.SpaceService + eventService event.Sender AccountInfo *model.AccountInfo } -func NewService(mw service.ClientCommandsServer, spaceService *space.SpaceService) *ObjectService { - return &ObjectService{mw: mw, spaceService: spaceService} +func NewService(mw service.ClientCommandsServer, spaceService *space.SpaceService, eventService event.Sender) *ObjectService { + return &ObjectService{mw: mw, spaceService: spaceService, eventService: eventService} } // ListObjects retrieves a paginated list of objects in a specific space. @@ -261,6 +263,14 @@ func (s *ObjectService) CreateObject(ctx context.Context, spaceId string, reques } } + // broadcast event: ObjectCreate + eventPayload := util.NewAnalyticsEventForApi(ctx, "ObjectCreate") + s.eventService.Broadcast(event.NewEventSingleMessage("", &pb.EventMessageValueOfPayloadBroadcast{ + PayloadBroadcast: &pb.EventPayloadBroadcast{ + Payload: eventPayload, + }, + })) + return s.GetObject(ctx, spaceId, resp.ObjectId) } diff --git a/core/api/server/server.go b/core/api/server/server.go index 78fb46793..16d40a436 100644 --- a/core/api/server/server.go +++ b/core/api/server/server.go @@ -11,6 +11,7 @@ import ( "github.com/anyproto/anytype-heart/core/api/internal/object" "github.com/anyproto/anytype-heart/core/api/internal/search" "github.com/anyproto/anytype-heart/core/api/internal/space" + "github.com/anyproto/anytype-heart/core/event" "github.com/anyproto/anytype-heart/pb/service" ) @@ -29,14 +30,14 @@ type Server struct { } // NewServer constructs a new Server with default config and sets up the routes. -func NewServer(accountService account.Service, mw service.ClientCommandsServer) *Server { +func NewServer(mw service.ClientCommandsServer, accountService account.Service, eventService event.Sender) *Server { s := &Server{ authService: auth.NewService(mw), exportService: export.NewService(mw), spaceService: space.NewService(mw), } - s.objectService = object.NewService(mw, s.spaceService) + s.objectService = object.NewService(mw, s.spaceService, eventService) s.searchService = search.NewService(mw, s.spaceService, s.objectService) s.engine = s.NewRouter(accountService, mw) s.KeyToToken = make(map[string]string) diff --git a/core/api/service.go b/core/api/service.go index 6027337b6..97b93fba8 100644 --- a/core/api/service.go +++ b/core/api/service.go @@ -13,6 +13,7 @@ import ( "github.com/anyproto/anytype-heart/core/anytype/account" "github.com/anyproto/anytype-heart/core/anytype/config" "github.com/anyproto/anytype-heart/core/api/server" + "github.com/anyproto/anytype-heart/core/event" "github.com/anyproto/anytype-heart/pb/service" ) @@ -35,6 +36,7 @@ type apiService struct { httpSrv *http.Server mw service.ClientCommandsServer accountService account.Service + eventService event.Sender listenAddr string lock sync.Mutex } @@ -66,6 +68,7 @@ func (s *apiService) Name() (name string) { func (s *apiService) Init(a *app.App) (err error) { s.listenAddr = a.MustComponent(config.CName).(*config.Config).JsonApiListenAddr s.accountService = a.MustComponent(account.CName).(account.Service) + s.eventService = a.MustComponent(event.CName).(event.Sender) return nil } @@ -86,7 +89,7 @@ func (s *apiService) runServer() { return } - s.srv = server.NewServer(s.accountService, s.mw) + s.srv = server.NewServer(s.mw, s.accountService, s.eventService) s.httpSrv = &http.Server{ Addr: s.listenAddr, Handler: s.srv.Engine(), diff --git a/core/api/util/analytics.go b/core/api/util/analytics.go new file mode 100644 index 000000000..5f32cf730 --- /dev/null +++ b/core/api/util/analytics.go @@ -0,0 +1,45 @@ +package util + +import ( + "encoding/json" + "log" + + "golang.org/x/net/context" +) + +type AnalyticsBroadcastEvent struct { + Type string `json:"type"` + Code string `json:"code"` + Param struct { + Origin string `json:"origin"` + ApiAppName string `json:"apiAppName"` + } +} + +func (e *AnalyticsBroadcastEvent) ToJSON() string { + eventJSON, err := json.Marshal(e) + if err != nil { + log.Println("Error marshaling event:", err) + return "{}" + } + return string(eventJSON) +} + +func NewAnalyticsEvent(code, origin, apiAppName string) *AnalyticsBroadcastEvent { + return &AnalyticsBroadcastEvent{ + Type: "analyticsEvent", + Code: code, + Param: struct { + Origin string `json:"origin"` + ApiAppName string `json:"apiAppName"` + }{ + Origin: origin, + ApiAppName: apiAppName, + }, + } +} + +func NewAnalyticsEventForApi(ctx context.Context, code string) string { + apiAppName := ctx.Value("apiAppName").(string) + return NewAnalyticsEvent(code, "api", apiAppName).ToJSON() +} From 7f0dc481993cb44f9d48b8421abe8a7bf7cbc407 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Wed, 5 Feb 2025 22:04:16 +0100 Subject: [PATCH 002/164] GO-4844: Set apiAppName to downstream context --- core/api/server/middleware.go | 13 +++++++++---- core/api/server/server.go | 9 +++++++-- core/api/util/analytics.go | 3 +++ 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/core/api/server/middleware.go b/core/api/server/middleware.go index da05740b8..dd4b285c7 100644 --- a/core/api/server/middleware.go +++ b/core/api/server/middleware.go @@ -51,7 +51,7 @@ func (s *Server) ensureAuthenticated(mw service.ClientCommandsServer) gin.Handle // Validate the key - if the key exists in the KeyToToken map, it is considered valid. // Otherwise, attempt to create a new session using the key and add it to the map upon successful validation. s.mu.Lock() - token, exists := s.KeyToToken[key] + apiSession, exists := s.KeyToToken[key] s.mu.Unlock() if !exists { @@ -60,15 +60,20 @@ func (s *Server) ensureAuthenticated(mw service.ClientCommandsServer) gin.Handle c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"error": "Invalid token"}) return } - token = response.Token + apiSession = ApiSessionEntry{ + Token: response.Token, + // TODO: enable once app name is returned + // AppName: response.AppName, + } s.mu.Lock() - s.KeyToToken[key] = token + s.KeyToToken[key] = apiSession s.mu.Unlock() } // Add token to request context for downstream services (subscriptions, events, etc.) - c.Set("token", token) + c.Set("token", apiSession.Token) + c.Set("apiAppName", apiSession.AppName) c.Next() } } diff --git a/core/api/server/server.go b/core/api/server/server.go index 16d40a436..998010b57 100644 --- a/core/api/server/server.go +++ b/core/api/server/server.go @@ -15,6 +15,11 @@ import ( "github.com/anyproto/anytype-heart/pb/service" ) +type ApiSessionEntry struct { + Token string `json:"token"` + AppName string `json:"appName"` +} + // Server wraps the HTTP server and service logic. type Server struct { engine *gin.Engine @@ -26,7 +31,7 @@ type Server struct { searchService *search.SearchService mu sync.Mutex - KeyToToken map[string]string // appKey -> token + KeyToToken map[string]ApiSessionEntry // appKey -> token } // NewServer constructs a new Server with default config and sets up the routes. @@ -40,7 +45,7 @@ func NewServer(mw service.ClientCommandsServer, accountService account.Service, s.objectService = object.NewService(mw, s.spaceService, eventService) s.searchService = search.NewService(mw, s.spaceService, s.objectService) s.engine = s.NewRouter(accountService, mw) - s.KeyToToken = make(map[string]string) + s.KeyToToken = make(map[string]ApiSessionEntry) return s } diff --git a/core/api/util/analytics.go b/core/api/util/analytics.go index 5f32cf730..5cea98fe3 100644 --- a/core/api/util/analytics.go +++ b/core/api/util/analytics.go @@ -16,6 +16,7 @@ type AnalyticsBroadcastEvent struct { } } +// ToJSON returns the event as a JSON string func (e *AnalyticsBroadcastEvent) ToJSON() string { eventJSON, err := json.Marshal(e) if err != nil { @@ -25,6 +26,7 @@ func (e *AnalyticsBroadcastEvent) ToJSON() string { return string(eventJSON) } +// NewAnalyticsEvent creates a new analytics event with the given code, origin and apiAppName func NewAnalyticsEvent(code, origin, apiAppName string) *AnalyticsBroadcastEvent { return &AnalyticsBroadcastEvent{ Type: "analyticsEvent", @@ -39,6 +41,7 @@ func NewAnalyticsEvent(code, origin, apiAppName string) *AnalyticsBroadcastEvent } } +// NewAnalyticsEventForApi creates a new analytics event for api with app name from the context func NewAnalyticsEventForApi(ctx context.Context, code string) string { apiAppName := ctx.Value("apiAppName").(string) return NewAnalyticsEvent(code, "api", apiAppName).ToJSON() From ba65f1289e27c9ab636011c76db982dafbdb450e Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Sun, 9 Feb 2025 20:34:53 +0100 Subject: [PATCH 003/164] GO-4844: Fix tests by adding eventSender to mock --- core/api/internal/object/service_test.go | 8 ++++++-- core/api/internal/search/service_test.go | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/core/api/internal/object/service_test.go b/core/api/internal/object/service_test.go index 10ba7e1c4..1d703a61c 100644 --- a/core/api/internal/object/service_test.go +++ b/core/api/internal/object/service_test.go @@ -9,6 +9,7 @@ import ( "github.com/stretchr/testify/require" "github.com/anyproto/anytype-heart/core/api/internal/space" + "github.com/anyproto/anytype-heart/core/event/mock_event" "github.com/anyproto/anytype-heart/pb" "github.com/anyproto/anytype-heart/pb/service/mock_service" "github.com/anyproto/anytype-heart/pkg/lib/bundle" @@ -40,14 +41,16 @@ const ( type fixture struct { *ObjectService - mwMock *mock_service.MockClientCommandsServer + mwMock *mock_service.MockClientCommandsServer + eventSender *mock_event.MockSender } func newFixture(t *testing.T) *fixture { mw := mock_service.NewMockClientCommandsServer(t) + eventService := mock_event.NewMockSender(t) spaceService := space.NewService(mw) - objectService := NewService(mw, spaceService) + objectService := NewService(mw, spaceService, eventService) objectService.AccountInfo = &model.AccountInfo{ TechSpaceId: mockedTechSpaceId, GatewayUrl: gatewayUrl, @@ -56,6 +59,7 @@ func newFixture(t *testing.T) *fixture { return &fixture{ ObjectService: objectService, mwMock: mw, + eventSender: eventService, } } diff --git a/core/api/internal/search/service_test.go b/core/api/internal/search/service_test.go index 1f248690f..244e500ba 100644 --- a/core/api/internal/search/service_test.go +++ b/core/api/internal/search/service_test.go @@ -10,6 +10,7 @@ import ( "github.com/anyproto/anytype-heart/core/api/internal/object" "github.com/anyproto/anytype-heart/core/api/internal/space" + "github.com/anyproto/anytype-heart/core/event/mock_event" "github.com/anyproto/anytype-heart/pb" "github.com/anyproto/anytype-heart/pb/service/mock_service" "github.com/anyproto/anytype-heart/pkg/lib/bundle" @@ -45,15 +46,17 @@ const ( type fixture struct { *SearchService - mwMock *mock_service.MockClientCommandsServer + mwMock *mock_service.MockClientCommandsServer + eventSender *mock_event.MockSender } func newFixture(t *testing.T) *fixture { mw := mock_service.NewMockClientCommandsServer(t) + eventService := mock_event.NewMockSender(t) spaceService := space.NewService(mw) spaceService.AccountInfo = &model.AccountInfo{TechSpaceId: techSpaceId, GatewayUrl: gatewayUrl} - objectService := object.NewService(mw, spaceService) + objectService := object.NewService(mw, spaceService, eventService) objectService.AccountInfo = &model.AccountInfo{TechSpaceId: techSpaceId} searchService := NewService(mw, spaceService, objectService) searchService.AccountInfo = &model.AccountInfo{ @@ -64,6 +67,7 @@ func newFixture(t *testing.T) *fixture { return &fixture{ SearchService: searchService, mwMock: mw, + eventSender: eventService, } } From f2c5b1091e2067c9ca6101a349175d55b45acfe5 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Sun, 9 Feb 2025 20:35:26 +0100 Subject: [PATCH 004/164] GO-4844: Fix apiAppName interface temporarily --- core/api/util/analytics.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/api/util/analytics.go b/core/api/util/analytics.go index 5cea98fe3..46eef82bd 100644 --- a/core/api/util/analytics.go +++ b/core/api/util/analytics.go @@ -43,6 +43,8 @@ func NewAnalyticsEvent(code, origin, apiAppName string) *AnalyticsBroadcastEvent // NewAnalyticsEventForApi creates a new analytics event for api with app name from the context func NewAnalyticsEventForApi(ctx context.Context, code string) string { - apiAppName := ctx.Value("apiAppName").(string) + // TODO: enable when apiAppName is available in context + // apiAppName := ctx.Value("apiAppName").(string) + apiAppName := "api-app" return NewAnalyticsEvent(code, "api", apiAppName).ToJSON() } From a3099276f4e84a2990b198ac096ef02e5bc2b180 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Sun, 9 Feb 2025 21:16:34 +0100 Subject: [PATCH 005/164] GO-4844: Refactor event broadcasting into unified analytics middleware --- core/api/internal/object/service.go | 14 ++--------- core/api/internal/object/service_test.go | 8 ++---- core/api/internal/search/service_test.go | 8 ++---- core/api/server/middleware.go | 20 +++++++++++++++ core/api/server/router.go | 31 ++++++++++++------------ core/api/server/server.go | 4 +-- 6 files changed, 44 insertions(+), 41 deletions(-) diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go index f8c988340..91efda7b2 100644 --- a/core/api/internal/object/service.go +++ b/core/api/internal/object/service.go @@ -10,7 +10,6 @@ import ( "github.com/anyproto/anytype-heart/core/api/internal/space" "github.com/anyproto/anytype-heart/core/api/pagination" "github.com/anyproto/anytype-heart/core/api/util" - "github.com/anyproto/anytype-heart/core/event" "github.com/anyproto/anytype-heart/pb" "github.com/anyproto/anytype-heart/pb/service" "github.com/anyproto/anytype-heart/pkg/lib/bundle" @@ -55,12 +54,11 @@ type Service interface { type ObjectService struct { mw service.ClientCommandsServer spaceService *space.SpaceService - eventService event.Sender AccountInfo *model.AccountInfo } -func NewService(mw service.ClientCommandsServer, spaceService *space.SpaceService, eventService event.Sender) *ObjectService { - return &ObjectService{mw: mw, spaceService: spaceService, eventService: eventService} +func NewService(mw service.ClientCommandsServer, spaceService *space.SpaceService) *ObjectService { + return &ObjectService{mw: mw, spaceService: spaceService} } // ListObjects retrieves a paginated list of objects in a specific space. @@ -263,14 +261,6 @@ func (s *ObjectService) CreateObject(ctx context.Context, spaceId string, reques } } - // broadcast event: ObjectCreate - eventPayload := util.NewAnalyticsEventForApi(ctx, "ObjectCreate") - s.eventService.Broadcast(event.NewEventSingleMessage("", &pb.EventMessageValueOfPayloadBroadcast{ - PayloadBroadcast: &pb.EventPayloadBroadcast{ - Payload: eventPayload, - }, - })) - return s.GetObject(ctx, spaceId, resp.ObjectId) } diff --git a/core/api/internal/object/service_test.go b/core/api/internal/object/service_test.go index 1d703a61c..10ba7e1c4 100644 --- a/core/api/internal/object/service_test.go +++ b/core/api/internal/object/service_test.go @@ -9,7 +9,6 @@ import ( "github.com/stretchr/testify/require" "github.com/anyproto/anytype-heart/core/api/internal/space" - "github.com/anyproto/anytype-heart/core/event/mock_event" "github.com/anyproto/anytype-heart/pb" "github.com/anyproto/anytype-heart/pb/service/mock_service" "github.com/anyproto/anytype-heart/pkg/lib/bundle" @@ -41,16 +40,14 @@ const ( type fixture struct { *ObjectService - mwMock *mock_service.MockClientCommandsServer - eventSender *mock_event.MockSender + mwMock *mock_service.MockClientCommandsServer } func newFixture(t *testing.T) *fixture { mw := mock_service.NewMockClientCommandsServer(t) - eventService := mock_event.NewMockSender(t) spaceService := space.NewService(mw) - objectService := NewService(mw, spaceService, eventService) + objectService := NewService(mw, spaceService) objectService.AccountInfo = &model.AccountInfo{ TechSpaceId: mockedTechSpaceId, GatewayUrl: gatewayUrl, @@ -59,7 +56,6 @@ func newFixture(t *testing.T) *fixture { return &fixture{ ObjectService: objectService, mwMock: mw, - eventSender: eventService, } } diff --git a/core/api/internal/search/service_test.go b/core/api/internal/search/service_test.go index 244e500ba..1f248690f 100644 --- a/core/api/internal/search/service_test.go +++ b/core/api/internal/search/service_test.go @@ -10,7 +10,6 @@ import ( "github.com/anyproto/anytype-heart/core/api/internal/object" "github.com/anyproto/anytype-heart/core/api/internal/space" - "github.com/anyproto/anytype-heart/core/event/mock_event" "github.com/anyproto/anytype-heart/pb" "github.com/anyproto/anytype-heart/pb/service/mock_service" "github.com/anyproto/anytype-heart/pkg/lib/bundle" @@ -46,17 +45,15 @@ const ( type fixture struct { *SearchService - mwMock *mock_service.MockClientCommandsServer - eventSender *mock_event.MockSender + mwMock *mock_service.MockClientCommandsServer } func newFixture(t *testing.T) *fixture { mw := mock_service.NewMockClientCommandsServer(t) - eventService := mock_event.NewMockSender(t) spaceService := space.NewService(mw) spaceService.AccountInfo = &model.AccountInfo{TechSpaceId: techSpaceId, GatewayUrl: gatewayUrl} - objectService := object.NewService(mw, spaceService, eventService) + objectService := object.NewService(mw, spaceService) objectService.AccountInfo = &model.AccountInfo{TechSpaceId: techSpaceId} searchService := NewService(mw, spaceService, objectService) searchService.AccountInfo = &model.AccountInfo{ @@ -67,7 +64,6 @@ func newFixture(t *testing.T) *fixture { return &fixture{ SearchService: searchService, mwMock: mw, - eventSender: eventService, } } diff --git a/core/api/server/middleware.go b/core/api/server/middleware.go index dd4b285c7..4a14153e4 100644 --- a/core/api/server/middleware.go +++ b/core/api/server/middleware.go @@ -11,6 +11,8 @@ import ( "github.com/gin-gonic/gin" "github.com/anyproto/anytype-heart/core/anytype/account" + "github.com/anyproto/anytype-heart/core/api/util" + "github.com/anyproto/anytype-heart/core/event" "github.com/anyproto/anytype-heart/pb" "github.com/anyproto/anytype-heart/pb/service" ) @@ -95,3 +97,21 @@ func (s *Server) ensureAccountInfo(accountService account.Service) gin.HandlerFu c.Next() } } + +// ensureAnalyticsEvent is a middleware that ensures broadcasting an analytics event after a successful request. +func (s *Server) ensureAnalyticsEvent(code string, eventService event.Sender) gin.HandlerFunc { + return func(c *gin.Context) { + c.Next() + + if c.Writer.Status() != http.StatusOK { + return + } + + payload := util.NewAnalyticsEventForApi(c.Request.Context(), code) + eventService.Broadcast(event.NewEventSingleMessage("", &pb.EventMessageValueOfPayloadBroadcast{ + PayloadBroadcast: &pb.EventPayloadBroadcast{ + Payload: payload, + }, + })) + } +} diff --git a/core/api/server/router.go b/core/api/server/router.go index e33206a32..2f673eba7 100644 --- a/core/api/server/router.go +++ b/core/api/server/router.go @@ -8,6 +8,7 @@ import ( ginSwagger "github.com/swaggo/gin-swagger" _ "github.com/anyproto/anytype-heart/core/api/docs" + "github.com/anyproto/anytype-heart/core/event" "github.com/anyproto/anytype-heart/core/anytype/account" "github.com/anyproto/anytype-heart/core/api/internal/auth" @@ -28,7 +29,7 @@ const ( ) // NewRouter builds and returns a *gin.Engine with all routes configured. -func (s *Server) NewRouter(accountService account.Service, mw service.ClientCommandsServer) *gin.Engine { +func (s *Server) NewRouter(mw service.ClientCommandsServer, accountService account.Service, eventService event.Sender) *gin.Engine { debug := os.Getenv("ANYTYPE_API_DEBUG") == "1" if !debug { gin.SetMode(gin.ReleaseMode) @@ -64,28 +65,28 @@ func (s *Server) NewRouter(accountService account.Service, mw service.ClientComm v1.Use(s.ensureAccountInfo(accountService)) { // Export - v1.POST("/spaces/:space_id/objects/:object_id/export/:format", export.GetObjectExportHandler(s.exportService)) + v1.POST("/spaces/:space_id/objects/:object_id/export/:format", s.ensureAnalyticsEvent("ObjectExport", eventService), export.GetObjectExportHandler(s.exportService)) // Object - v1.GET("/spaces/:space_id/objects", object.GetObjectsHandler(s.objectService)) - v1.GET("/spaces/:space_id/objects/:object_id", object.GetObjectHandler(s.objectService)) - v1.DELETE("/spaces/:space_id/objects/:object_id", s.rateLimit(maxWriteRequestsPerSecond), object.DeleteObjectHandler(s.objectService)) - v1.POST("/spaces/:space_id/objects", s.rateLimit(maxWriteRequestsPerSecond), object.CreateObjectHandler(s.objectService)) + v1.GET("/spaces/:space_id/objects", s.ensureAnalyticsEvent("ObjectList", eventService), object.GetObjectsHandler(s.objectService)) + v1.GET("/spaces/:space_id/objects/:object_id", s.ensureAnalyticsEvent("ObjectOpen", eventService), object.GetObjectHandler(s.objectService)) + v1.DELETE("/spaces/:space_id/objects/:object_id", s.rateLimit(maxWriteRequestsPerSecond), s.ensureAnalyticsEvent("ObjectDelete", eventService), object.DeleteObjectHandler(s.objectService)) + v1.POST("/spaces/:space_id/objects", s.rateLimit(maxWriteRequestsPerSecond), s.ensureAnalyticsEvent("ObjectCreate", eventService), object.CreateObjectHandler(s.objectService)) // Search - v1.POST("/search", search.GlobalSearchHandler(s.searchService)) - v1.POST("/spaces/:space_id/search", search.SearchHandler(s.searchService)) + v1.POST("/search", s.ensureAnalyticsEvent("GlobalSearch", eventService), search.GlobalSearchHandler(s.searchService)) + v1.POST("/spaces/:space_id/search", s.ensureAnalyticsEvent("Search", eventService), search.SearchHandler(s.searchService)) // Space - v1.GET("/spaces", space.GetSpacesHandler(s.spaceService)) - v1.GET("/spaces/:space_id/members", space.GetMembersHandler(s.spaceService)) - v1.POST("/spaces", s.rateLimit(maxWriteRequestsPerSecond), space.CreateSpaceHandler(s.spaceService)) + v1.GET("/spaces", s.ensureAnalyticsEvent("SpaceOpen", eventService), space.GetSpacesHandler(s.spaceService)) + v1.GET("/spaces/:space_id/members", s.ensureAnalyticsEvent("MemberList", eventService), space.GetMembersHandler(s.spaceService)) + v1.POST("/spaces", s.ensureAnalyticsEvent("SpaceCreate", eventService), s.rateLimit(maxWriteRequestsPerSecond), space.CreateSpaceHandler(s.spaceService)) // Type - v1.GET("/spaces/:space_id/types", object.GetTypesHandler(s.objectService)) - v1.GET("/spaces/:space_id/types/:type_id", object.GetTypeHandler(s.objectService)) - v1.GET("/spaces/:space_id/types/:type_id/templates", object.GetTemplatesHandler(s.objectService)) - v1.GET("/spaces/:space_id/types/:type_id/templates/:template_id", object.GetTemplateHandler(s.objectService)) + v1.GET("/spaces/:space_id/types", s.ensureAnalyticsEvent("TypeList", eventService), object.GetTypesHandler(s.objectService)) + v1.GET("/spaces/:space_id/types/:type_id", s.ensureAnalyticsEvent("TypeOpen", eventService), object.GetTypeHandler(s.objectService)) + v1.GET("/spaces/:space_id/types/:type_id/templates", s.ensureAnalyticsEvent("TemplateList", eventService), object.GetTemplatesHandler(s.objectService)) + v1.GET("/spaces/:space_id/types/:type_id/templates/:template_id", s.ensureAnalyticsEvent("TemplateOpen", eventService), object.GetTemplateHandler(s.objectService)) } return router diff --git a/core/api/server/server.go b/core/api/server/server.go index 998010b57..8e656feb1 100644 --- a/core/api/server/server.go +++ b/core/api/server/server.go @@ -42,9 +42,9 @@ func NewServer(mw service.ClientCommandsServer, accountService account.Service, spaceService: space.NewService(mw), } - s.objectService = object.NewService(mw, s.spaceService, eventService) + s.objectService = object.NewService(mw, s.spaceService) s.searchService = search.NewService(mw, s.spaceService, s.objectService) - s.engine = s.NewRouter(accountService, mw) + s.engine = s.NewRouter(mw, accountService, eventService) s.KeyToToken = make(map[string]ApiSessionEntry) return s From 2bb7b83bf305221578b7ba4b2c325730ed066c5f Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Fri, 28 Feb 2025 15:10:09 +0100 Subject: [PATCH 006/164] GO-4844: Change context import --- core/api/util/analytics.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core/api/util/analytics.go b/core/api/util/analytics.go index 46eef82bd..ed96ccedb 100644 --- a/core/api/util/analytics.go +++ b/core/api/util/analytics.go @@ -1,10 +1,9 @@ package util import ( + "context" "encoding/json" "log" - - "golang.org/x/net/context" ) type AnalyticsBroadcastEvent struct { From 3225cb62e717d6de540619e2839e86058a124948 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Sun, 6 Apr 2025 22:11:22 +0200 Subject: [PATCH 007/164] GO-4844: Fix event service interface after merge --- .mockery.yaml | 1 + core/api/apicore/apicore.go | 4 ++ .../apicore/mock_apicore/mock_EventService.go | 68 +++++++++++++++++++ core/api/server/middleware.go | 2 +- core/api/server/middleware_test.go | 8 +-- core/api/server/router.go | 4 +- core/api/server/router_test.go | 8 +-- core/api/server/server.go | 4 +- core/api/server/server_test.go | 4 +- core/api/service.go | 4 +- 10 files changed, 89 insertions(+), 18 deletions(-) create mode 100644 core/api/apicore/mock_apicore/mock_EventService.go diff --git a/.mockery.yaml b/.mockery.yaml index e73c1de56..d5eefbabb 100644 --- a/.mockery.yaml +++ b/.mockery.yaml @@ -240,6 +240,7 @@ packages: github.com/anyproto/anytype-heart/core/api/apicore: interfaces: AccountService: + EventService: ExportService: ClientCommands: github.com/anyproto/anytype-heart/core/block/template: diff --git a/core/api/apicore/apicore.go b/core/api/apicore/apicore.go index 288a5e03b..b270b34c4 100644 --- a/core/api/apicore/apicore.go +++ b/core/api/apicore/apicore.go @@ -11,6 +11,10 @@ type AccountService interface { GetInfo(ctx context.Context) (*model.AccountInfo, error) } +type EventService interface { + Broadcast(event *pb.Event) +} + type ExportService interface { ExportSingleInMemory(ctx context.Context, spaceId string, objectId string, format model.ExportFormat) (res string, err error) } diff --git a/core/api/apicore/mock_apicore/mock_EventService.go b/core/api/apicore/mock_apicore/mock_EventService.go new file mode 100644 index 000000000..c342114ba --- /dev/null +++ b/core/api/apicore/mock_apicore/mock_EventService.go @@ -0,0 +1,68 @@ +// Code generated by mockery. DO NOT EDIT. + +package mock_apicore + +import ( + pb "github.com/anyproto/anytype-heart/pb" + mock "github.com/stretchr/testify/mock" +) + +// MockEventService is an autogenerated mock type for the EventService type +type MockEventService struct { + mock.Mock +} + +type MockEventService_Expecter struct { + mock *mock.Mock +} + +func (_m *MockEventService) EXPECT() *MockEventService_Expecter { + return &MockEventService_Expecter{mock: &_m.Mock} +} + +// Broadcast provides a mock function with given fields: event +func (_m *MockEventService) Broadcast(event *pb.Event) { + _m.Called(event) +} + +// MockEventService_Broadcast_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Broadcast' +type MockEventService_Broadcast_Call struct { + *mock.Call +} + +// Broadcast is a helper method to define mock.On call +// - event *pb.Event +func (_e *MockEventService_Expecter) Broadcast(event interface{}) *MockEventService_Broadcast_Call { + return &MockEventService_Broadcast_Call{Call: _e.mock.On("Broadcast", event)} +} + +func (_c *MockEventService_Broadcast_Call) Run(run func(event *pb.Event)) *MockEventService_Broadcast_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(*pb.Event)) + }) + return _c +} + +func (_c *MockEventService_Broadcast_Call) Return() *MockEventService_Broadcast_Call { + _c.Call.Return() + return _c +} + +func (_c *MockEventService_Broadcast_Call) RunAndReturn(run func(*pb.Event)) *MockEventService_Broadcast_Call { + _c.Call.Return(run) + return _c +} + +// NewMockEventService creates a new instance of MockEventService. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewMockEventService(t interface { + mock.TestingT + Cleanup(func()) +}) *MockEventService { + mock := &MockEventService{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/core/api/server/middleware.go b/core/api/server/middleware.go index 3b9661fc0..a2f6f6228 100644 --- a/core/api/server/middleware.go +++ b/core/api/server/middleware.go @@ -109,7 +109,7 @@ func (s *Server) ensureAccountInfo(accountService apicore.AccountService) gin.Ha } // ensureAnalyticsEvent is a middleware that ensures broadcasting an analytics event after a successful request. -func (s *Server) ensureAnalyticsEvent(code string, eventService event.Sender) gin.HandlerFunc { +func (s *Server) ensureAnalyticsEvent(code string, eventService apicore.EventService) gin.HandlerFunc { return func(c *gin.Context) { c.Next() diff --git a/core/api/server/middleware_test.go b/core/api/server/middleware_test.go index 509d5f370..787c576dd 100644 --- a/core/api/server/middleware_test.go +++ b/core/api/server/middleware_test.go @@ -36,7 +36,7 @@ func TestEnsureAuthenticated(t *testing.T) { t.Run("missing auth header", func(t *testing.T) { // given fx := newFixture(t) - fx.KeyToToken = make(map[string]string) + fx.KeyToToken = make(map[string]ApiSessionEntry) middleware := fx.ensureAuthenticated(fx.mwMock) w := httptest.NewRecorder() c, _ := gin.CreateTestContext(w) @@ -56,7 +56,7 @@ func TestEnsureAuthenticated(t *testing.T) { t.Run("invalid auth header format", func(t *testing.T) { // given fx := newFixture(t) - fx.KeyToToken = make(map[string]string) + fx.KeyToToken = make(map[string]ApiSessionEntry) middleware := fx.ensureAuthenticated(fx.mwMock) w := httptest.NewRecorder() c, _ := gin.CreateTestContext(w) @@ -77,7 +77,7 @@ func TestEnsureAuthenticated(t *testing.T) { t.Run("valid token creation", func(t *testing.T) { // given fx := newFixture(t) - fx.KeyToToken = make(map[string]string) + fx.KeyToToken = make(map[string]ApiSessionEntry) tokenExpected := "valid-token" fx.mwMock. @@ -110,7 +110,7 @@ func TestEnsureAuthenticated(t *testing.T) { t.Run("invalid token", func(t *testing.T) { // given fx := newFixture(t) - fx.KeyToToken = make(map[string]string) + fx.KeyToToken = make(map[string]ApiSessionEntry) middleware := fx.ensureAuthenticated(fx.mwMock) w := httptest.NewRecorder() c, _ := gin.CreateTestContext(w) diff --git a/core/api/server/router.go b/core/api/server/router.go index b659d2d30..6f8bf5820 100644 --- a/core/api/server/router.go +++ b/core/api/server/router.go @@ -9,8 +9,6 @@ import ( "github.com/anyproto/anytype-heart/core/api/apicore" _ "github.com/anyproto/anytype-heart/core/api/docs" - "github.com/anyproto/anytype-heart/core/event" - "github.com/anyproto/anytype-heart/core/api/internal/auth" "github.com/anyproto/anytype-heart/core/api/internal/export" "github.com/anyproto/anytype-heart/core/api/internal/list" @@ -29,7 +27,7 @@ const ( ) // NewRouter builds and returns a *gin.Engine with all routes configured. -func (s *Server) NewRouter(mw apicore.ClientCommands, accountService apicore.AccountService, eventService event.Sender) *gin.Engine { +func (s *Server) NewRouter(mw apicore.ClientCommands, accountService apicore.AccountService, eventService apicore.EventService) *gin.Engine { debug := os.Getenv("ANYTYPE_API_DEBUG") == "1" if !debug { gin.SetMode(gin.ReleaseMode) diff --git a/core/api/server/router_test.go b/core/api/server/router_test.go index cadc1a8c0..8ff7bdc52 100644 --- a/core/api/server/router_test.go +++ b/core/api/server/router_test.go @@ -17,7 +17,7 @@ func TestRouter_Unauthenticated(t *testing.T) { t.Run("GET /v1/spaces without auth returns 401", func(t *testing.T) { // given fx := newFixture(t) - engine := fx.NewRouter(fx.mwMock, &fx.accountService) + engine := fx.NewRouter(fx.mwMock, &fx.accountService, &fx.eventService) w := httptest.NewRecorder() req := httptest.NewRequest("GET", "/v1/spaces", nil) @@ -33,7 +33,7 @@ func TestRouter_AuthRoute(t *testing.T) { t.Run("POST /v1/auth/token is accessible without auth", func(t *testing.T) { // given fx := newFixture(t) - engine := fx.NewRouter(fx.mwMock, &fx.accountService) + engine := fx.NewRouter(fx.mwMock, &fx.accountService, &fx.eventService) w := httptest.NewRecorder() req := httptest.NewRequest("POST", "/v1/auth/token", nil) @@ -49,8 +49,8 @@ func TestRouter_MetadataHeader(t *testing.T) { t.Run("Response includes Anytype-Version header", func(t *testing.T) { // given fx := newFixture(t) - engine := fx.NewRouter(fx.mwMock, &fx.accountService) - fx.KeyToToken = map[string]string{"validKey": "dummyToken"} + engine := fx.NewRouter(fx.mwMock, &fx.accountService, &fx.eventService) + fx.KeyToToken = map[string]ApiSessionEntry{"validKey": {Token: "dummyToken", AppName: "dummyApp"}} fx.accountService.On("GetInfo", mock.Anything). Return(&model.AccountInfo{ GatewayUrl: "http://localhost:31006", diff --git a/core/api/server/server.go b/core/api/server/server.go index 11ba3b9ca..1b6ca648c 100644 --- a/core/api/server/server.go +++ b/core/api/server/server.go @@ -12,8 +12,6 @@ import ( "github.com/anyproto/anytype-heart/core/api/internal/object" "github.com/anyproto/anytype-heart/core/api/internal/search" "github.com/anyproto/anytype-heart/core/api/internal/space" - - "github.com/anyproto/anytype-heart/core/event" ) type ApiSessionEntry struct { @@ -37,7 +35,7 @@ type Server struct { } // NewServer constructs a new Server with default config and sets up the routes. -func NewServer(mw apicore.ClientCommands, accountService apicore.AccountService, eventService event.Sender, exportService apicore.ExportService) *Server { +func NewServer(mw apicore.ClientCommands, accountService apicore.AccountService, eventService apicore.EventService, exportService apicore.ExportService) *Server { s := &Server{ authService: auth.NewService(mw), exportService: export.NewService(mw, exportService), diff --git a/core/api/server/server_test.go b/core/api/server/server_test.go index c31c118c2..7bf18a52d 100644 --- a/core/api/server/server_test.go +++ b/core/api/server/server_test.go @@ -11,6 +11,7 @@ import ( type fixture struct { *Server accountService mock_apicore.MockAccountService + eventService mock_apicore.MockEventService exportService mock_apicore.MockExportService mwMock *mock_apicore.MockClientCommands } @@ -18,8 +19,9 @@ type fixture struct { func newFixture(t *testing.T) *fixture { mwMock := mock_apicore.NewMockClientCommands(t) accountService := mock_apicore.NewMockAccountService(t) + eventService := mock_apicore.NewMockEventService(t) exportService := mock_apicore.NewMockExportService(t) - server := NewServer(mwMock, accountService, exportService) + server := NewServer(mwMock, accountService, eventService, exportService) return &fixture{ Server: server, diff --git a/core/api/service.go b/core/api/service.go index fee490aa7..1e67331a1 100644 --- a/core/api/service.go +++ b/core/api/service.go @@ -37,7 +37,7 @@ type apiService struct { httpSrv *http.Server mw apicore.ClientCommands accountService apicore.AccountService - eventService event.Sender + eventService apicore.EventService exportService apicore.ExportService listenAddr string lock sync.Mutex @@ -70,7 +70,7 @@ func (s *apiService) Name() (name string) { func (s *apiService) Init(a *app.App) (err error) { s.listenAddr = a.MustComponent(config.CName).(*config.Config).JsonApiListenAddr s.accountService = a.MustComponent(account.CName).(account.Service) - s.eventService = a.MustComponent(event.CName).(event.Sender) + s.eventService = a.MustComponent(event.CName).(apicore.EventService) s.exportService = a.MustComponent(export.CName).(apicore.ExportService) return nil } From cb3cf00673478610aa826d9eb7e95477dbd0487b Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Mon, 7 Apr 2025 10:00:03 +0200 Subject: [PATCH 008/164] GO-4844: Fix panic for broadcast in router tests --- core/api/server/router_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/core/api/server/router_test.go b/core/api/server/router_test.go index 8ff7bdc52..41587b8f6 100644 --- a/core/api/server/router_test.go +++ b/core/api/server/router_test.go @@ -60,6 +60,7 @@ func TestRouter_MetadataHeader(t *testing.T) { Records: []*types.Struct{}, Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL}, }, nil).Once() + fx.eventService.On("Broadcast", mock.Anything).Return(nil).Maybe() w := httptest.NewRecorder() req := httptest.NewRequest("GET", "/v1/spaces", nil) From 2479bbedffc7f77cf713385a37a7c4b3a2a7683c Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Wed, 7 May 2025 12:08:29 +0200 Subject: [PATCH 009/164] GO-4969: Fix lint --- core/api/service/property.go | 1 + core/api/service/type.go | 38 ------------------------------------ core/block/export/export.go | 2 ++ 3 files changed, 3 insertions(+), 38 deletions(-) diff --git a/core/api/service/property.go b/core/api/service/property.go index 7dfbcb17e..f48cb0c4b 100644 --- a/core/api/service/property.go +++ b/core/api/service/property.go @@ -657,6 +657,7 @@ func (s *Service) convertPropertyValue(key string, value *types.Value, format ap } // buildPropertyWithValue creates a Property based on the format and converted value. +// nolint:funlen func (s *Service) buildPropertyWithValue(id string, key string, name string, format apimodel.PropertyFormat, val interface{}) apimodel.PropertyWithValue { base := apimodel.PropertyBase{ Object: "property", diff --git a/core/api/service/type.go b/core/api/service/type.go index d1b33fec5..319645769 100644 --- a/core/api/service/type.go +++ b/core/api/service/type.go @@ -398,29 +398,6 @@ func (s *Service) buildRelationIds(ctx context.Context, spaceId string, props [] return relationIds, nil } -func (s *Service) objectLayoutToObjectTypeLayout(objectLayout apimodel.ObjectLayout) model.ObjectTypeLayout { - switch objectLayout { - case apimodel.ObjectLayoutBasic: - return model.ObjectType_basic - case apimodel.ObjectLayoutProfile: - return model.ObjectType_profile - case apimodel.ObjectLayoutAction: - return model.ObjectType_todo - case apimodel.ObjectLayoutNote: - return model.ObjectType_note - case apimodel.ObjectLayoutBookmark: - return model.ObjectType_bookmark - case apimodel.ObjectLayoutSet: - return model.ObjectType_set - case apimodel.ObjectLayoutCollection: - return model.ObjectType_collection - case apimodel.ObjectLayoutParticipant: - return model.ObjectType_participant - default: - return model.ObjectType_basic - } -} - func (s *Service) otLayoutToObjectLayout(objectTypeLayout model.ObjectTypeLayout) apimodel.ObjectLayout { switch objectTypeLayout { case model.ObjectType_basic: @@ -458,18 +435,3 @@ func (s *Service) typeLayoutToObjectTypeLayout(typeLayout apimodel.TypeLayout) m return model.ObjectType_basic } } - -func (s *Service) otLayoutToTypeLayout(objectTypeLayout model.ObjectTypeLayout) apimodel.TypeLayout { - switch objectTypeLayout { - case model.ObjectType_basic: - return apimodel.TypeLayoutBasic - case model.ObjectType_profile: - return apimodel.TypeLayoutProfile - case model.ObjectType_todo: - return apimodel.TypeLayoutAction - case model.ObjectType_note: - return apimodel.TypeLayoutNote - default: - return apimodel.TypeLayoutBasic - } -} diff --git a/core/block/export/export.go b/core/block/export/export.go index 0c2b7789e..a206461f0 100644 --- a/core/block/export/export.go +++ b/core/block/export/export.go @@ -273,7 +273,9 @@ func (e *exportContext) exportObject(ctx context.Context, objectId string) (stri if err != nil { return "", err } + // do not allow file export for in-memory writer + // nolint: gosec switch model.ObjectTypeLayout(details.GetInt64(bundle.RelationKeyLayout)) { case model.ObjectType_file, model.ObjectType_image, model.ObjectType_video, model.ObjectType_audio, model.ObjectType_pdf: return "", fmt.Errorf("file export is not allowed for in-memory writer") From 20516da15e727c84dcffd3faea597602d9342a39 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Fri, 9 May 2025 15:30:29 +0200 Subject: [PATCH 010/164] GO-5589: Refactor custom key validation logic --- core/api/util/key.go | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/core/api/util/key.go b/core/api/util/key.go index 8a7ded422..93ca4423d 100644 --- a/core/api/util/key.go +++ b/core/api/util/key.go @@ -1,6 +1,7 @@ package util import ( + "regexp" "strings" "github.com/iancoleman/strcase" @@ -22,6 +23,11 @@ const ( internalRelationOptionPrefix = "opt-" ) +var ( + hex24Pattern = regexp.MustCompile("^[a-f\\d]{24}$") + digitPattern = regexp.MustCompile("\\d") +) + func ToPropertyApiKey(internalKey string) string { return toApiKey(propPrefix, internalRelationPrefix, internalKey) } @@ -46,20 +52,17 @@ func FromTagApiKey(apiKey string) string { return fromApiKey(tagPrefix, internalRelationOptionPrefix, apiKey) } -// IsCustomPropertyKey returns true if key is exactly 24 letters and contains at least a digit. +// IsCustomKey returns true if key is exactly 24 letters and contains at least a digit. // Non-custom properties never contain a digit. -func IsCustomPropertyKey(key string) bool { - if len(key) != 24 && !strings.ContainsAny(key, "0123456789") { - return false - } - return true +func IsCustomKey(key string) bool { + return len(key) == 24 && hex24Pattern.MatchString(key) && digitPattern.MatchString(key) } // toApiKey converts an internal key into API format by stripping any existing internal prefixes and adding the API prefix. func toApiKey(prefix, internalPrefix, internalKey string) string { var k string internalKey = strings.TrimPrefix(internalKey, internalPrefix) - if IsCustomPropertyKey(internalKey) { + if IsCustomKey(internalKey) { k = internalKey } else { k = strcase.ToSnake(internalKey) @@ -70,7 +73,7 @@ func toApiKey(prefix, internalPrefix, internalKey string) string { // fromApiKey converts an API key back into internal format by stripping the API prefix and re-adding the internal prefix. func fromApiKey(prefix, internalPrefix, apiKey string) string { k := strings.TrimPrefix(apiKey, prefix) - if IsCustomPropertyKey(k) { + if IsCustomKey(k) { return internalPrefix + k } return internalPrefix + strcase.ToLowerCamel(k) From 42519172c8bf070b750b0ddf0dae98c1cdfe689a Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Fri, 9 May 2025 16:26:43 +0200 Subject: [PATCH 011/164] GO-5589: Make property id keying optional in GetPropertyMapFromStore --- core/api/service/list.go | 2 +- core/api/service/object.go | 4 ++-- core/api/service/property.go | 14 ++++++++------ core/api/service/search.go | 2 +- core/api/service/template.go | 4 ++-- core/api/service/type.go | 8 ++++---- 6 files changed, 18 insertions(+), 16 deletions(-) diff --git a/core/api/service/list.go b/core/api/service/list.go index 8f9e40a00..2bd070273 100644 --- a/core/api/service/list.go +++ b/core/api/service/list.go @@ -197,7 +197,7 @@ func (s *Service) GetObjectsInList(ctx context.Context, spaceId string, listId s total := int(searchResp.Counters.Total) hasMore := searchResp.Counters.Total > int64(offset+limit) - propertyMap, err := s.GetPropertyMapFromStore(spaceId) + propertyMap, err := s.GetPropertyMapFromStore(spaceId, true) if err != nil { return nil, 0, false, err } diff --git a/core/api/service/object.go b/core/api/service/object.go index b930a8063..c0d44e5b5 100644 --- a/core/api/service/object.go +++ b/core/api/service/object.go @@ -71,7 +71,7 @@ func (s *Service) ListObjects(ctx context.Context, spaceId string, offset int, l objects = make([]apimodel.Object, 0, len(paginatedObjects)) // pre-fetch properties, types and tags to fill the objects - propertyMap, err := s.GetPropertyMapFromStore(spaceId) + propertyMap, err := s.GetPropertyMapFromStore(spaceId, true) if err != nil { return nil, 0, false, err } @@ -111,7 +111,7 @@ func (s *Service) GetObject(ctx context.Context, spaceId string, objectId string } } - propertyMap, err := s.GetPropertyMapFromStore(spaceId) + propertyMap, err := s.GetPropertyMapFromStore(spaceId, true) if err != nil { return apimodel.ObjectWithBody{}, err } diff --git a/core/api/service/property.go b/core/api/service/property.go index f48cb0c4b..6e0a457f0 100644 --- a/core/api/service/property.go +++ b/core/api/service/property.go @@ -267,7 +267,7 @@ func (s *Service) processProperties(ctx context.Context, spaceId string, entries if len(entries) == 0 { return fields, nil } - propertyMap, err := s.GetPropertyMapFromStore(spaceId) + propertyMap, err := s.GetPropertyMapFromStore(spaceId, false) if err != nil { return nil, err } @@ -346,7 +346,7 @@ func (s *Service) processProperties(ctx context.Context, spaceId string, entries } prop, ok := propertyMap[rk] if !ok { - return nil, errors.New("unknown property '" + key + "'") + return nil, util.ErrBadInput(fmt.Sprintf("unknown property key: %q", rk)) } sanitized, err := s.sanitizeAndValidatePropertyValue(ctx, spaceId, key, prop.Format, raw, prop) @@ -504,7 +504,7 @@ func (s *Service) GetPropertyMapsFromStore(spaceIds []string) (map[string]map[st spacesToProperties := make(map[string]map[string]apimodel.Property, len(spaceIds)) for _, spaceId := range spaceIds { - propertyMap, err := s.GetPropertyMapFromStore(spaceId) + propertyMap, err := s.GetPropertyMapFromStore(spaceId, true) if err != nil { return nil, err } @@ -515,8 +515,8 @@ func (s *Service) GetPropertyMapsFromStore(spaceIds []string) (map[string]map[st } // GetPropertyMapFromStore retrieves all properties for a specific space -// Property entries are also keyed by property id. Required for filling types with properties, as recommended properties are referenced by id and not key. -func (s *Service) GetPropertyMapFromStore(spaceId string) (map[string]apimodel.Property, error) { +// Property entries can also be keyed by property id. Required for filling types with properties, as recommended properties are referenced by id and not key. +func (s *Service) GetPropertyMapFromStore(spaceId string, keyByPropertyId bool) (map[string]apimodel.Property, error) { resp := s.mw.ObjectSearch(context.Background(), &pb.RpcObjectSearchRequest{ SpaceId: spaceId, Filters: []*model.BlockContentDataviewFilter{ @@ -547,7 +547,9 @@ func (s *Service) GetPropertyMapFromStore(spaceId string) (map[string]apimodel.P for _, record := range resp.Records { rk, p := s.mapPropertyFromRecord(record) propertyMap[rk] = p - propertyMap[p.Id] = p // add property under id as key to map as well + if keyByPropertyId { + propertyMap[p.Id] = p // add property under id as key to map as well + } } return propertyMap, nil diff --git a/core/api/service/search.go b/core/api/service/search.go index 3e80f1f95..b9abccf67 100644 --- a/core/api/service/search.go +++ b/core/api/service/search.go @@ -121,7 +121,7 @@ func (s *Service) Search(ctx context.Context, spaceId string, request apimodel.S paginatedRecords, hasMore := pagination.Paginate(resp.Records, offset, limit) // pre-fetch properties and types to fill the objects - propertyMap, err := s.GetPropertyMapFromStore(spaceId) + propertyMap, err := s.GetPropertyMapFromStore(spaceId, true) if err != nil { return nil, 0, false, err } diff --git a/core/api/service/template.go b/core/api/service/template.go index b3431039d..3c082b86f 100644 --- a/core/api/service/template.go +++ b/core/api/service/template.go @@ -68,7 +68,7 @@ func (s *Service) ListTemplates(ctx context.Context, spaceId string, typeId stri paginatedTemplates, hasMore := pagination.Paginate(templateObjectsResp.Records, offset, limit) templates = make([]apimodel.Object, 0, len(paginatedTemplates)) - propertyMap, err := s.GetPropertyMapFromStore(spaceId) + propertyMap, err := s.GetPropertyMapFromStore(spaceId, true) if err != nil { return nil, 0, false, err } @@ -109,7 +109,7 @@ func (s *Service) GetTemplate(ctx context.Context, spaceId string, _ string, tem } } - propertyMap, err := s.GetPropertyMapFromStore(spaceId) + propertyMap, err := s.GetPropertyMapFromStore(spaceId, true) if err != nil { return apimodel.ObjectWithBody{}, err } diff --git a/core/api/service/type.go b/core/api/service/type.go index 319645769..93d9bbdd1 100644 --- a/core/api/service/type.go +++ b/core/api/service/type.go @@ -72,7 +72,7 @@ func (s *Service) ListTypes(ctx context.Context, spaceId string, offset int, lim paginatedTypes, hasMore := pagination.Paginate(resp.Records, offset, limit) types = make([]apimodel.Type, 0, len(paginatedTypes)) - propertyMap, err := s.GetPropertyMapFromStore(spaceId) + propertyMap, err := s.GetPropertyMapFromStore(spaceId, true) if err != nil { return nil, 0, false, err } @@ -105,7 +105,7 @@ func (s *Service) GetType(ctx context.Context, spaceId string, typeId string) (a } // pre-fetch properties to fill the type - propertyMap, err := s.GetPropertyMapFromStore(spaceId) + propertyMap, err := s.GetPropertyMapFromStore(spaceId, true) if err != nil { return apimodel.Type{}, err } @@ -268,7 +268,7 @@ func (s *Service) buildTypeDetails(ctx context.Context, spaceId string, request fields[k] = v } - propertyMap, err := s.GetPropertyMapFromStore(spaceId) + propertyMap, err := s.GetPropertyMapFromStore(spaceId, true) if err != nil { return nil, err } @@ -335,7 +335,7 @@ func (s *Service) buildUpdatedTypeDetails(ctx context.Context, spaceId string, t return &types.Struct{Fields: fields}, nil } - propertyMap, err := s.GetPropertyMapFromStore(spaceId) + propertyMap, err := s.GetPropertyMapFromStore(spaceId, true) if err != nil { return nil, err } From b328b89cd41c4aabe54c811688d621aa748b6272 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Fri, 9 May 2025 20:21:41 +0200 Subject: [PATCH 012/164] GO-5589: Allow GetObjectsInList for built-in type queries --- core/api/service/list.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/api/service/list.go b/core/api/service/list.go index 2bd070273..9463a0ec4 100644 --- a/core/api/service/list.go +++ b/core/api/service/list.go @@ -152,7 +152,7 @@ func (s *Service) GetObjectsInList(ctx context.Context, spaceId string, listId s var collectionId string var source []string switch model.ObjectTypeLayout(typeDetail.Fields[bundle.RelationKeyRecommendedLayout.String()].GetNumberValue()) { - case model.ObjectType_set: + case model.ObjectType_set, model.ObjectType_objectType: // for queries, we search within the space for objects of the setOf type setOfValues := resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeySetOf.String()].GetListValue().Values for _, value := range setOfValues { From 090908ebc37b8927ad01bb02cc368797d3abbf8e Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Fri, 9 May 2025 20:50:34 +0200 Subject: [PATCH 013/164] GO-5589: Add missing subresource to path for retrieving objects in a list view --- core/api/docs/docs.go | 2 +- core/api/docs/swagger.json | 2 +- core/api/docs/swagger.yaml | 154 ++++++++++++++++++------------------- core/api/handler/list.go | 2 +- core/api/server/router.go | 2 +- 5 files changed, 81 insertions(+), 81 deletions(-) diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go index ba601807b..a5d052c11 100644 --- a/core/api/docs/docs.go +++ b/core/api/docs/docs.go @@ -9,7 +9,7 @@ const docTemplate = `{ "components": {"schemas":{"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"creator","type":"string"},"objects":{"description":"The object values of the property","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to search for, specified by key or ID","example":["page","678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"status","type":"string"},"select":{"description":"The selected tag value of the property","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TokenResponse":{"properties":{"app_key":{"description":"The app key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, "info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-api/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"}, "externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"}, - "paths": {"/auth/display_code":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid ` + "`" + `app_name` + "`" + `, the server issues a unique ` + "`" + `challenge_id` + "`" + ` and displays a short code within the Anytype Desktop On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"createAuthChallenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.DisplayCodeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["Auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent app key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.","operationId":"solveAuthChallenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TokenResponse"}}},"description":"The app key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Solve challenge","tags":["Auth"]}},"/search":{"post":{"description":"Executes a global search over every space accessible by the authenticated user. The request body must specify the ` + "`" + `query` + "`" + ` text, optional filters on object types (e.g., \"page\", \"task\"), and sort directives (default: descending by last updated timestamp). Pagination is controlled via ` + "`" + `offset` + "`" + ` and ` + "`" + `limit` + "`" + ` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"searchGlobal","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"listSpaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"createSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"getSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to retrieve","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"updateSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to update","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"addListObjects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"The list of object IDs to add to the list","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"removeListObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"getListViews","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"getListObjects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"listMembers","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to list members for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"getMember","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to get the member from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"listObjects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which to list objects","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"createObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which to create the object","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"getObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"updateObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"listProperties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to list properties for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"createProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to create the property in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"getProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"updateProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"listTags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to list tags for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"createTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to create the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to delete the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"getTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to retrieve the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"updateTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to update the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/spaces/{space_id}/search":{"post":{"description":"Performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"searchSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to search in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"listTypes","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to retrieve types from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new object type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"createType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which to create the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an object type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space from which to delete the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"getType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space from which to retrieve the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing object type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"updateType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which the type exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"listTemplates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the type belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to retrieve templates for","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"getTemplate","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the template belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to which the template belongs","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, + "paths": {"/auth/display_code":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid ` + "`" + `app_name` + "`" + `, the server issues a unique ` + "`" + `challenge_id` + "`" + ` and displays a short code within the Anytype Desktop On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"createAuthChallenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.DisplayCodeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["Auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent app key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.","operationId":"solveAuthChallenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TokenResponse"}}},"description":"The app key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Solve challenge","tags":["Auth"]}},"/search":{"post":{"description":"Executes a global search over every space accessible by the authenticated user. The request body must specify the ` + "`" + `query` + "`" + ` text, optional filters on object types (e.g., \"page\", \"task\"), and sort directives (default: descending by last updated timestamp). Pagination is controlled via ` + "`" + `offset` + "`" + ` and ` + "`" + `limit` + "`" + ` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"searchGlobal","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"listSpaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"createSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"getSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to retrieve","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"updateSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to update","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"addListObjects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"The list of object IDs to add to the list","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"removeListObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"getListViews","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"getListObjects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"listMembers","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to list members for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"getMember","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to get the member from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"listObjects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which to list objects","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"createObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which to create the object","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"getObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"updateObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"listProperties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to list properties for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"createProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to create the property in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"getProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"updateProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"listTags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to list tags for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"createTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to create the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to delete the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"getTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to retrieve the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"updateTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to update the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/spaces/{space_id}/search":{"post":{"description":"Performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"searchSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to search in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"listTypes","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to retrieve types from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new object type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"createType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which to create the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an object type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space from which to delete the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"getType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space from which to retrieve the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing object type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"updateType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which the type exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"listTemplates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the type belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to retrieve templates for","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"getTemplate","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the template belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to which the template belongs","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, "openapi": "3.1.0", "servers": [ {"url":"http://localhost:31009/v1"} diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json index 6809ef2d4..28465b644 100644 --- a/core/api/docs/swagger.json +++ b/core/api/docs/swagger.json @@ -2,7 +2,7 @@ "components": {"schemas":{"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"creator","type":"string"},"objects":{"description":"The object values of the property","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to search for, specified by key or ID","example":["page","678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"status","type":"string"},"select":{"description":"The selected tag value of the property","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TokenResponse":{"properties":{"app_key":{"description":"The app key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, "info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"This API empowers seamless interaction with Anytype's resources—spaces, objects, properties, types, templates, and beyond.","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-api/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"Anytype API","version":"2025-04-22"}, "externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"}, - "paths": {"/auth/display_code":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid `app_name`, the server issues a unique `challenge_id` and displays a short code within the Anytype Desktop On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"createAuthChallenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.DisplayCodeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["Auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent app key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.","operationId":"solveAuthChallenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TokenResponse"}}},"description":"The app key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Solve challenge","tags":["Auth"]}},"/search":{"post":{"description":"Executes a global search over every space accessible by the authenticated user. The request body must specify the `query` text, optional filters on object types (e.g., \"page\", \"task\"), and sort directives (default: descending by last updated timestamp). Pagination is controlled via `offset` and `limit` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"searchGlobal","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"listSpaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"createSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"getSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to retrieve","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"updateSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to update","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"addListObjects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"The list of object IDs to add to the list","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"removeListObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"getListViews","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"getListObjects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"listMembers","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to list members for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with `_participant`) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"getMember","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to get the member from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"listObjects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which to list objects","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"createObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which to create the object","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"getObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"updateObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"listProperties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to list properties for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"createProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to create the property in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"getProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"updateProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"listTags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to list tags for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"createTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to create the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to delete the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"getTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to retrieve the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"updateTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to update the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/spaces/{space_id}/search":{"post":{"description":"Performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"searchSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to search in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"listTypes","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to retrieve types from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new object type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"createType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which to create the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an object type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space from which to delete the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"getType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space from which to retrieve the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing object type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"updateType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which the type exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"listTemplates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the type belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to retrieve templates for","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"getTemplate","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the template belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to which the template belongs","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, + "paths": {"/auth/display_code":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid `app_name`, the server issues a unique `challenge_id` and displays a short code within the Anytype Desktop On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"createAuthChallenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.DisplayCodeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["Auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent app key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.","operationId":"solveAuthChallenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TokenResponse"}}},"description":"The app key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Solve challenge","tags":["Auth"]}},"/search":{"post":{"description":"Executes a global search over every space accessible by the authenticated user. The request body must specify the `query` text, optional filters on object types (e.g., \"page\", \"task\"), and sort directives (default: descending by last updated timestamp). Pagination is controlled via `offset` and `limit` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"searchGlobal","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"listSpaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"createSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"getSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to retrieve","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"updateSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to update","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"addListObjects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"The list of object IDs to add to the list","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"removeListObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"getListViews","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"getListObjects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"listMembers","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to list members for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with `_participant`) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"getMember","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to get the member from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"listObjects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which to list objects","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"createObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which to create the object","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"getObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"updateObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"listProperties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to list properties for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"createProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to create the property in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"getProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"updateProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"listTags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to list tags for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"createTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to create the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to delete the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"getTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to retrieve the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"updateTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to update the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/spaces/{space_id}/search":{"post":{"description":"Performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"searchSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to search in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"listTypes","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to retrieve types from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new object type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"createType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which to create the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an object type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space from which to delete the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"getType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space from which to retrieve the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing object type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"updateType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which the type exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"listTemplates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the type belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to retrieve templates for","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"getTemplate","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the template belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to which the template belongs","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, "openapi": "3.1.0", "servers": [ {"url":"http://localhost:31009/v1"} diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml index bcc088d0b..725218be9 100644 --- a/core/api/docs/swagger.yaml +++ b/core/api/docs/swagger.yaml @@ -1850,83 +1850,6 @@ paths: summary: Update space tags: - Spaces - /spaces/{space_id}/lists/{list_id}/{view_id}/objects: - get: - description: Returns a paginated list of objects associated with a specific - list (query or collection) within a space. When a view ID is provided, the - objects are filtered and sorted according to the view's configuration. If - no view ID is specified, all list objects are returned without filtering and - sorting. This endpoint helps clients to manage grouped objects (for example, - tasks within a list) by returning information for each item of the list. - operationId: getListObjects - parameters: - - description: The version of the API to use - in: header - name: Anytype-Version - required: true - schema: - default: "2025-04-22" - type: string - - description: The ID of the space to which the list belongs - in: path - name: space_id - required: true - schema: - type: string - - description: The ID of the list to retrieve objects for - in: path - name: list_id - required: true - schema: - type: string - - description: The ID of the view to retrieve objects for - in: path - name: view_id - required: true - schema: - type: string - - description: The number of items to skip before starting to collect the result - set - in: query - name: offset - schema: - default: 0 - type: integer - - description: The number of items to return - in: query - name: limit - schema: - type: integer - responses: - "200": - content: - application/json: - schema: - $ref: '#/components/schemas/pagination.PaginatedResponse-apimodel_Object' - description: The list of objects associated with the specified list - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/util.UnauthorizedError' - description: Unauthorized - "404": - content: - application/json: - schema: - $ref: '#/components/schemas/util.NotFoundError' - description: Not found - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/util.ServerError' - description: Internal server error - security: - - bearerauth: [] - summary: Get objects in list - tags: - - Lists /spaces/{space_id}/lists/{list_id}/objects: post: description: Adds one or more objects to a specific list (collection only) by @@ -2153,6 +2076,83 @@ paths: summary: Get list views tags: - Lists + /spaces/{space_id}/lists/{list_id}/views/{view_id}/objects: + get: + description: Returns a paginated list of objects associated with a specific + list (query or collection) within a space. When a view ID is provided, the + objects are filtered and sorted according to the view's configuration. If + no view ID is specified, all list objects are returned without filtering and + sorting. This endpoint helps clients to manage grouped objects (for example, + tasks within a list) by returning information for each item of the list. + operationId: getListObjects + parameters: + - description: The version of the API to use + in: header + name: Anytype-Version + required: true + schema: + default: "2025-04-22" + type: string + - description: The ID of the space to which the list belongs + in: path + name: space_id + required: true + schema: + type: string + - description: The ID of the list to retrieve objects for + in: path + name: list_id + required: true + schema: + type: string + - description: The ID of the view to retrieve objects for + in: path + name: view_id + required: true + schema: + type: string + - description: The number of items to skip before starting to collect the result + set + in: query + name: offset + schema: + default: 0 + type: integer + - description: The number of items to return + in: query + name: limit + schema: + type: integer + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/pagination.PaginatedResponse-apimodel_Object' + description: The list of objects associated with the specified list + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/util.UnauthorizedError' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/util.NotFoundError' + description: Not found + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/util.ServerError' + description: Internal server error + security: + - bearerauth: [] + summary: Get objects in list + tags: + - Lists /spaces/{space_id}/members: get: description: Returns a paginated list of members belonging to the specified diff --git a/core/api/handler/list.go b/core/api/handler/list.go index 5395b5a22..6c530cb8b 100644 --- a/core/api/handler/list.go +++ b/core/api/handler/list.go @@ -69,7 +69,7 @@ func GetListViewsHandler(s *service.Service) gin.HandlerFunc { // @Failure 404 {object} util.NotFoundError "Not found" // @Failure 500 {object} util.ServerError "Internal server error" // @Security bearerauth -// @Router /spaces/{space_id}/lists/{list_id}/{view_id}/objects [get] +// @Router /spaces/{space_id}/lists/{list_id}/views/{view_id}/objects [get] func GetObjectsInListHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { spaceId := c.Param("space_id") diff --git a/core/api/server/router.go b/core/api/server/router.go index 59323025b..c4a20c843 100644 --- a/core/api/server/router.go +++ b/core/api/server/router.go @@ -68,7 +68,7 @@ func (s *Server) NewRouter(mw apicore.ClientCommands) *gin.Engine { // List v1.GET("/spaces/:space_id/lists/:list_id/views", handler.GetListViewsHandler(s.service)) - v1.GET("/spaces/:space_id/lists/:list_id/:view_id/objects", handler.GetObjectsInListHandler(s.service)) + v1.GET("/spaces/:space_id/lists/:list_id/views/:view_id/objects", handler.GetObjectsInListHandler(s.service)) v1.POST("/spaces/:space_id/lists/:list_id/objects", s.rateLimit(maxWriteRequestsPerSecond), handler.AddObjectsToListHandler(s.service)) v1.DELETE("/spaces/:space_id/lists/:list_id/objects/:object_id", s.rateLimit(maxWriteRequestsPerSecond), handler.RemoveObjectFromListHandler(s.service)) From e6b047217c4102aec1eb044409a57383ed117113 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Fri, 9 May 2025 20:51:28 +0200 Subject: [PATCH 014/164] GO-5589: Update API version to 2025-05-20 --- core/api/docs/docs.go | 4 +- core/api/docs/swagger.json | 4 +- core/api/docs/swagger.yaml | 74 +++++++++++++++++----------------- core/api/handler/auth.go | 4 +- core/api/handler/list.go | 8 ++-- core/api/handler/member.go | 6 +-- core/api/handler/object.go | 10 ++--- core/api/handler/property.go | 10 ++--- core/api/handler/search.go | 4 +- core/api/handler/space.go | 8 ++-- core/api/handler/tag.go | 10 ++--- core/api/handler/template.go | 4 +- core/api/handler/type.go | 10 ++--- core/api/server/middleware.go | 2 +- core/api/server/router_test.go | 2 +- core/api/service.go | 2 +- 16 files changed, 81 insertions(+), 81 deletions(-) diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go index a5d052c11..f3f868923 100644 --- a/core/api/docs/docs.go +++ b/core/api/docs/docs.go @@ -9,7 +9,7 @@ const docTemplate = `{ "components": {"schemas":{"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"creator","type":"string"},"objects":{"description":"The object values of the property","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to search for, specified by key or ID","example":["page","678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"status","type":"string"},"select":{"description":"The selected tag value of the property","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TokenResponse":{"properties":{"app_key":{"description":"The app key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, "info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-api/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"}, "externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"}, - "paths": {"/auth/display_code":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid ` + "`" + `app_name` + "`" + `, the server issues a unique ` + "`" + `challenge_id` + "`" + ` and displays a short code within the Anytype Desktop On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"createAuthChallenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.DisplayCodeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["Auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent app key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.","operationId":"solveAuthChallenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TokenResponse"}}},"description":"The app key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Solve challenge","tags":["Auth"]}},"/search":{"post":{"description":"Executes a global search over every space accessible by the authenticated user. The request body must specify the ` + "`" + `query` + "`" + ` text, optional filters on object types (e.g., \"page\", \"task\"), and sort directives (default: descending by last updated timestamp). Pagination is controlled via ` + "`" + `offset` + "`" + ` and ` + "`" + `limit` + "`" + ` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"searchGlobal","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"listSpaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"createSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"getSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to retrieve","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"updateSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to update","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"addListObjects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"The list of object IDs to add to the list","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"removeListObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"getListViews","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"getListObjects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"listMembers","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to list members for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"getMember","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to get the member from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"listObjects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which to list objects","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"createObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which to create the object","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"getObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"updateObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"listProperties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to list properties for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"createProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to create the property in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"getProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"updateProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"listTags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to list tags for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"createTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to create the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to delete the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"getTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to retrieve the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"updateTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to update the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/spaces/{space_id}/search":{"post":{"description":"Performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"searchSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to search in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"listTypes","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to retrieve types from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new object type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"createType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which to create the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an object type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space from which to delete the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"getType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space from which to retrieve the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing object type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"updateType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which the type exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"listTemplates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the type belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to retrieve templates for","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"getTemplate","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the template belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to which the template belongs","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, + "paths": {"/auth/display_code":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid ` + "`" + `app_name` + "`" + `, the server issues a unique ` + "`" + `challenge_id` + "`" + ` and displays a short code within the Anytype Desktop On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"createAuthChallenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.DisplayCodeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["Auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent app key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.","operationId":"solveAuthChallenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TokenResponse"}}},"description":"The app key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Solve challenge","tags":["Auth"]}},"/search":{"post":{"description":"Executes a global search over every space accessible by the authenticated user. The request body must specify the ` + "`" + `query` + "`" + ` text, optional filters on object types (e.g., \"page\", \"task\"), and sort directives (default: descending by last updated timestamp). Pagination is controlled via ` + "`" + `offset` + "`" + ` and ` + "`" + `limit` + "`" + ` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"searchGlobal","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"listSpaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"createSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"getSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"updateSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"addListObjects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"The list of object IDs to add to the list","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"removeListObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"getListViews","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"getListObjects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"listMembers","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"getMember","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"listObjects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"createObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"getObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"updateObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"listProperties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"createProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"getProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"updateProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"listTags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"createTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"getTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"updateTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/spaces/{space_id}/search":{"post":{"description":"Performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"searchSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"listTypes","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new object type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"createType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an object type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"getType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing object type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"updateType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"listTemplates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to retrieve templates for","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"getTemplate","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to which the template belongs","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, "openapi": "3.1.0", "servers": [ {"url":"http://localhost:31009/v1"} @@ -18,7 +18,7 @@ const docTemplate = `{ // SwaggerInfo holds exported Swagger Info so clients can modify it var SwaggerInfo = &swag.Spec{ - Version: "2025-04-22", + Version: "2025-05-20", Title: "Anytype API", Description: "This API empowers seamless interaction with Anytype's resources—spaces, objects, properties, types, templates, and beyond.", InfoInstanceName: "swagger", diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json index 28465b644..c11af80c4 100644 --- a/core/api/docs/swagger.json +++ b/core/api/docs/swagger.json @@ -1,8 +1,8 @@ { "components": {"schemas":{"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"creator","type":"string"},"objects":{"description":"The object values of the property","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to search for, specified by key or ID","example":["page","678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"status","type":"string"},"select":{"description":"The selected tag value of the property","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TokenResponse":{"properties":{"app_key":{"description":"The app key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, - "info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"This API empowers seamless interaction with Anytype's resources—spaces, objects, properties, types, templates, and beyond.","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-api/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"Anytype API","version":"2025-04-22"}, + "info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"This API empowers seamless interaction with Anytype's resources—spaces, objects, properties, types, templates, and beyond.","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-api/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"Anytype API","version":"2025-05-20"}, "externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"}, - "paths": {"/auth/display_code":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid `app_name`, the server issues a unique `challenge_id` and displays a short code within the Anytype Desktop On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"createAuthChallenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.DisplayCodeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["Auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent app key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.","operationId":"solveAuthChallenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TokenResponse"}}},"description":"The app key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Solve challenge","tags":["Auth"]}},"/search":{"post":{"description":"Executes a global search over every space accessible by the authenticated user. The request body must specify the `query` text, optional filters on object types (e.g., \"page\", \"task\"), and sort directives (default: descending by last updated timestamp). Pagination is controlled via `offset` and `limit` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"searchGlobal","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"listSpaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"createSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"getSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to retrieve","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"updateSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to update","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"addListObjects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"The list of object IDs to add to the list","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"removeListObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"getListViews","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"getListObjects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"listMembers","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to list members for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with `_participant`) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"getMember","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to get the member from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"listObjects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which to list objects","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"createObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which to create the object","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"getObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"updateObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"listProperties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to list properties for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"createProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to create the property in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"getProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"updateProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"listTags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to list tags for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"createTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to create the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to delete the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"getTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to retrieve the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"updateTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to update the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/spaces/{space_id}/search":{"post":{"description":"Performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"searchSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to search in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"listTypes","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to retrieve types from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new object type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"createType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which to create the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an object type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space from which to delete the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"getType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space from which to retrieve the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing object type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"updateType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space in which the type exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"listTemplates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the type belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to retrieve templates for","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"getTemplate","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-04-22","type":"string"}},{"description":"The ID of the space to which the template belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to which the template belongs","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, + "paths": {"/auth/display_code":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid `app_name`, the server issues a unique `challenge_id` and displays a short code within the Anytype Desktop On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"createAuthChallenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.DisplayCodeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["Auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent app key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.","operationId":"solveAuthChallenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TokenResponse"}}},"description":"The app key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Solve challenge","tags":["Auth"]}},"/search":{"post":{"description":"Executes a global search over every space accessible by the authenticated user. The request body must specify the `query` text, optional filters on object types (e.g., \"page\", \"task\"), and sort directives (default: descending by last updated timestamp). Pagination is controlled via `offset` and `limit` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"searchGlobal","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"listSpaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"createSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"getSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"updateSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"addListObjects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"The list of object IDs to add to the list","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"removeListObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"getListViews","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"getListObjects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"listMembers","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with `_participant`) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"getMember","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"listObjects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"createObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"getObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"updateObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"listProperties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"createProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"getProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"updateProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"listTags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"createTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"getTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"updateTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/spaces/{space_id}/search":{"post":{"description":"Performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"searchSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"listTypes","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new object type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"createType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an object type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"getType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing object type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"updateType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"listTemplates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to retrieve templates for","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"getTemplate","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to which the template belongs","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, "openapi": "3.1.0", "servers": [ {"url":"http://localhost:31009/v1"} diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml index 725218be9..74dfa03aa 100644 --- a/core/api/docs/swagger.yaml +++ b/core/api/docs/swagger.yaml @@ -1438,7 +1438,7 @@ info: url: https://github.com/anyproto/anytype-api/blob/main/LICENSE.md termsOfService: https://anytype.io/terms_of_use title: Anytype API - version: "2025-04-22" + version: "2025-05-20" openapi: 3.1.0 paths: /auth/display_code: @@ -1457,7 +1457,7 @@ paths: name: Anytype-Version required: true schema: - default: "2025-04-22" + default: "2025-05-20" type: string - description: The name of the app requesting API access in: query @@ -1508,7 +1508,7 @@ paths: name: Anytype-Version required: true schema: - default: "2025-04-22" + default: "2025-05-20" type: string - description: The ID of the challenge to solve in: query @@ -1565,7 +1565,7 @@ paths: name: Anytype-Version required: true schema: - default: "2025-04-22" + default: "2025-05-20" type: string - description: The number of items to skip before starting to collect the result set @@ -1625,7 +1625,7 @@ paths: name: Anytype-Version required: true schema: - default: "2025-04-22" + default: "2025-05-20" type: string - description: The number of items to skip before starting to collect the result set @@ -1679,7 +1679,7 @@ paths: name: Anytype-Version required: true schema: - default: "2025-04-22" + default: "2025-05-20" type: string requestBody: content: @@ -1737,7 +1737,7 @@ paths: name: Anytype-Version required: true schema: - default: "2025-04-22" + default: "2025-05-20" type: string - description: The ID of the space to retrieve in: path @@ -1787,7 +1787,7 @@ paths: name: Anytype-Version required: true schema: - default: "2025-04-22" + default: "2025-05-20" type: string - description: The ID of the space to update in: path @@ -1865,7 +1865,7 @@ paths: name: Anytype-Version required: true schema: - default: "2025-04-22" + default: "2025-05-20" type: string - description: The ID of the space to which the list belongs in: path @@ -1943,7 +1943,7 @@ paths: name: Anytype-Version required: true schema: - default: "2025-04-22" + default: "2025-05-20" type: string - description: The ID of the space to which the list belongs in: path @@ -2020,7 +2020,7 @@ paths: name: Anytype-Version required: true schema: - default: "2025-04-22" + default: "2025-05-20" type: string - description: The ID of the space to which the list belongs in: path @@ -2091,7 +2091,7 @@ paths: name: Anytype-Version required: true schema: - default: "2025-04-22" + default: "2025-05-20" type: string - description: The ID of the space to which the list belongs in: path @@ -2168,7 +2168,7 @@ paths: name: Anytype-Version required: true schema: - default: "2025-04-22" + default: "2025-05-20" type: string - description: The ID of the space to list members for in: path @@ -2229,7 +2229,7 @@ paths: name: Anytype-Version required: true schema: - default: "2025-04-22" + default: "2025-05-20" type: string - description: The ID of the space to get the member from in: path @@ -2288,7 +2288,7 @@ paths: name: Anytype-Version required: true schema: - default: "2025-04-22" + default: "2025-05-20" type: string - description: The ID of the space in which to list objects in: path @@ -2350,7 +2350,7 @@ paths: name: Anytype-Version required: true schema: - default: "2025-04-22" + default: "2025-05-20" type: string - description: The ID of the space in which to create the object in: path @@ -2415,7 +2415,7 @@ paths: name: Anytype-Version required: true schema: - default: "2025-04-22" + default: "2025-05-20" type: string - description: The ID of the space in which the object exists in: path @@ -2491,7 +2491,7 @@ paths: name: Anytype-Version required: true schema: - default: "2025-04-22" + default: "2025-05-20" type: string - description: The ID of the space in which the object exists in: path @@ -2561,7 +2561,7 @@ paths: name: Anytype-Version required: true schema: - default: "2025-04-22" + default: "2025-05-20" type: string - description: The ID of the space in which the object exists in: path @@ -2644,7 +2644,7 @@ paths: name: Anytype-Version required: true schema: - default: "2025-04-22" + default: "2025-05-20" type: string - description: The ID of the space to list properties for in: path @@ -2703,7 +2703,7 @@ paths: name: Anytype-Version required: true schema: - default: "2025-04-22" + default: "2025-05-20" type: string - description: The ID of the space to create the property in in: path @@ -2769,7 +2769,7 @@ paths: name: Anytype-Version required: true schema: - default: "2025-04-22" + default: "2025-05-20" type: string - description: The ID of the space to which the property belongs in: path @@ -2845,7 +2845,7 @@ paths: name: Anytype-Version required: true schema: - default: "2025-04-22" + default: "2025-05-20" type: string - description: The ID of the space to which the property belongs in: path @@ -2908,7 +2908,7 @@ paths: name: Anytype-Version required: true schema: - default: "2025-04-22" + default: "2025-05-20" type: string - description: The ID of the space to which the property belongs in: path @@ -2997,7 +2997,7 @@ paths: name: Anytype-Version required: true schema: - default: "2025-04-22" + default: "2025-05-20" type: string - description: The ID of the space to list tags for in: path @@ -3055,7 +3055,7 @@ paths: name: Anytype-Version required: true schema: - default: "2025-04-22" + default: "2025-05-20" type: string - description: The ID of the space to create the tag in in: path @@ -3126,7 +3126,7 @@ paths: name: Anytype-Version required: true schema: - default: "2025-04-22" + default: "2025-05-20" type: string - description: The ID of the space to delete the tag from in: path @@ -3206,7 +3206,7 @@ paths: name: Anytype-Version required: true schema: - default: "2025-04-22" + default: "2025-05-20" type: string - description: The ID of the space to retrieve the tag from in: path @@ -3276,7 +3276,7 @@ paths: name: Anytype-Version required: true schema: - default: "2025-04-22" + default: "2025-05-20" type: string - description: The ID of the space to update the tag in in: path @@ -3372,7 +3372,7 @@ paths: name: Anytype-Version required: true schema: - default: "2025-04-22" + default: "2025-05-20" type: string - description: The ID of the space to search in in: path @@ -3441,7 +3441,7 @@ paths: name: Anytype-Version required: true schema: - default: "2025-04-22" + default: "2025-05-20" type: string - description: The ID of the space to retrieve types from in: path @@ -3499,7 +3499,7 @@ paths: name: Anytype-Version required: true schema: - default: "2025-04-22" + default: "2025-05-20" type: string - description: The ID of the space in which to create the type in: path @@ -3564,7 +3564,7 @@ paths: name: Anytype-Version required: true schema: - default: "2025-04-22" + default: "2025-05-20" type: string - description: The ID of the space from which to delete the type in: path @@ -3639,7 +3639,7 @@ paths: name: Anytype-Version required: true schema: - default: "2025-04-22" + default: "2025-05-20" type: string - description: The ID of the space from which to retrieve the type in: path @@ -3701,7 +3701,7 @@ paths: name: Anytype-Version required: true schema: - default: "2025-04-22" + default: "2025-05-20" type: string - description: The ID of the space in which the type exists in: path @@ -3784,7 +3784,7 @@ paths: name: Anytype-Version required: true schema: - default: "2025-04-22" + default: "2025-05-20" type: string - description: The ID of the space to which the type belongs in: path @@ -3849,7 +3849,7 @@ paths: name: Anytype-Version required: true schema: - default: "2025-04-22" + default: "2025-05-20" type: string - description: The ID of the space to which the template belongs in: path diff --git a/core/api/handler/auth.go b/core/api/handler/auth.go index 3e92b1008..c31072882 100644 --- a/core/api/handler/auth.go +++ b/core/api/handler/auth.go @@ -18,7 +18,7 @@ import ( // @Tags Auth // @Accept json // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-04-22) +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param app_name query string true "The name of the app requesting API access" // @Success 200 {object} apimodel.DisplayCodeResponse "The challenge ID associated with the started challenge" // @Failure 400 {object} util.ValidationError "Invalid input" @@ -51,7 +51,7 @@ func DisplayCodeHandler(s *service.Service) gin.HandlerFunc { // @Tags Auth // @Accept json // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-04-22) +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param challenge_id query string true "The ID of the challenge to solve" // @Param code query string true "4-digit code retrieved from Anytype Desktop app" // @Success 200 {object} apimodel.TokenResponse "The app key that can be used in the Authorization header for subsequent requests" diff --git a/core/api/handler/list.go b/core/api/handler/list.go index 6c530cb8b..fd19e35e2 100644 --- a/core/api/handler/list.go +++ b/core/api/handler/list.go @@ -17,7 +17,7 @@ import ( // @Id getListViews // @Tags Lists // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-04-22) +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to which the list belongs" // @Param list_id path string true "The ID of the list to retrieve views for" // @Param offset query int false "The number of items to skip before starting to collect the result set" default(0) @@ -58,7 +58,7 @@ func GetListViewsHandler(s *service.Service) gin.HandlerFunc { // @Id getListObjects // @Tags Lists // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-04-22) +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to which the list belongs" // @Param list_id path string true "The ID of the list to retrieve objects for" // @Param view_id path string true "The ID of the view to retrieve objects for" @@ -106,7 +106,7 @@ func GetObjectsInListHandler(s *service.Service) gin.HandlerFunc { // @Tags Lists // @Accept json // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-04-22) +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to which the list belongs" // @Param list_id path string true "The ID of the list to which objects will be added" // @Param objects body []string true "The list of object IDs to add to the list" @@ -152,7 +152,7 @@ func AddObjectsToListHandler(s *service.Service) gin.HandlerFunc { // @Id removeListObject // @Tags Lists // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-04-22) +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to which the list belongs" // @Param list_id path string true "The ID of the list from which the object will be removed" // @Param object_id path string true "The ID of the object to remove from the list" diff --git a/core/api/handler/member.go b/core/api/handler/member.go index b91e17495..dc0d13e28 100644 --- a/core/api/handler/member.go +++ b/core/api/handler/member.go @@ -18,7 +18,7 @@ import ( // @Id listMembers // @Tags Members // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-04-22) +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to list members for" // @Param offset query int false "The number of items to skip before starting to collect the result set" default(0) // @Param limit query int false "The number of items to return" default(100) maximum(1000) @@ -55,7 +55,7 @@ func ListMembersHandler(s *service.Service) gin.HandlerFunc { // @Id getMember // @Tags Members // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-04-22) +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to get the member from" // @Param member_id path string true "Member ID or Identity" // @Success 200 {object} apimodel.MemberResponse "The member details" @@ -94,7 +94,7 @@ func GetMemberHandler(s *service.Service) gin.HandlerFunc { // @Tags Members // @Accept json // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-04-22) +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to update the member in" // @Param member_id path string true "The ID of the member to update" // @Param body body apimodel.UpdateMemberRequest true "The request body containing the member's new status and role" diff --git a/core/api/handler/object.go b/core/api/handler/object.go index 1f491d6de..1e0d752dc 100644 --- a/core/api/handler/object.go +++ b/core/api/handler/object.go @@ -18,7 +18,7 @@ import ( // @Id listObjects // @Tags Objects // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-04-22) +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space in which to list objects" // @Param offset query int false "The number of items to skip before starting to collect the result set" default(0) // @Param limit query int false "The number of items to return" default(100) maximum(1000) @@ -57,7 +57,7 @@ func ListObjectsHandler(s *service.Service) gin.HandlerFunc { // @Id getObject // @Tags Objects // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-04-22) +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space in which the object exists" // @Param object_id path string true "The ID of the object to retrieve" // @Param format query apimodel.BodyFormat false "The format to return the object body in" default("md") @@ -100,7 +100,7 @@ func GetObjectHandler(s *service.Service) gin.HandlerFunc { // @Tags Objects // @Accept json // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-04-22) +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space in which to create the object" // @Param object body apimodel.CreateObjectRequest true "The object to create" // @Success 200 {object} apimodel.ObjectResponse "The created object" @@ -151,7 +151,7 @@ func CreateObjectHandler(s *service.Service) gin.HandlerFunc { // @Tags Objects // @Accept json // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-04-22) +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space in which the object exists" // @Param object_id path string true "The ID of the object to update" // @Param object body apimodel.UpdateObjectRequest true "The details of the object to update" @@ -202,7 +202,7 @@ func UpdateObjectHandler(s *service.Service) gin.HandlerFunc { // @Id deleteObject // @Tags Objects // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-04-22) +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space in which the object exists" // @Param object_id path string true "The ID of the object to delete" // @Success 200 {object} apimodel.ObjectResponse "The deleted object" diff --git a/core/api/handler/property.go b/core/api/handler/property.go index 271a93675..cc7caa648 100644 --- a/core/api/handler/property.go +++ b/core/api/handler/property.go @@ -18,7 +18,7 @@ import ( // @Id listProperties // @Tags Properties // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-04-22) +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to list properties for" // @Param offset query int false "The number of items to skip before starting to collect the result set" default(0) // @Param limit query int false "The number of items to return" default(100) maximum(1000) @@ -55,7 +55,7 @@ func ListPropertiesHandler(s *service.Service) gin.HandlerFunc { // @Id getProperty // @Tags Properties // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-04-22) +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to which the property belongs" // @Param property_id path string true "The ID of the property to retrieve" // @Success 200 {object} apimodel.PropertyResponse "The requested property" @@ -95,7 +95,7 @@ func GetPropertyHandler(s *service.Service) gin.HandlerFunc { // @Tags Properties // @Accept json // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-04-22) +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to create the property in" // @Param property body apimodel.CreatePropertyRequest true "The property to create" // @Success 200 {object} apimodel.PropertyResponse "The created property" @@ -141,7 +141,7 @@ func CreatePropertyHandler(s *service.Service) gin.HandlerFunc { // @Tags Properties // @Accept json // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-04-22) +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to which the property belongs" // @Param property_id path string true "The ID of the property to update" // @Param property body apimodel.UpdatePropertyRequest true "The property to update" @@ -194,7 +194,7 @@ func UpdatePropertyHandler(s *service.Service) gin.HandlerFunc { // @Id deleteProperty // @Tags Properties // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-04-22) +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to which the property belongs" // @Param property_id path string true "The ID of the property to delete" // @Success 200 {object} apimodel.PropertyResponse "The deleted property" diff --git a/core/api/handler/search.go b/core/api/handler/search.go index 408f80c9e..f4d5d92e0 100644 --- a/core/api/handler/search.go +++ b/core/api/handler/search.go @@ -19,7 +19,7 @@ import ( // @Tags Search // @Accept json // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-04-22) +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param offset query int false "The number of items to skip before starting to collect the result set" default(0) // @Param limit query int false "The number of items to return" default(100) maximum(1000) // @Param request body apimodel.SearchRequest true "The search parameters used to filter and sort the results" @@ -63,7 +63,7 @@ func GlobalSearchHandler(s *service.Service) gin.HandlerFunc { // @Tags Search // @Accept json // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-04-22) +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to search in" // @Param offset query int false "The number of items to skip before starting to collect the result set" default(0) // @Param limit query int false "The number of items to return" default(100) maximum(1000) diff --git a/core/api/handler/space.go b/core/api/handler/space.go index 767f07a73..21fdb3a6a 100644 --- a/core/api/handler/space.go +++ b/core/api/handler/space.go @@ -18,7 +18,7 @@ import ( // @Id listSpaces // @Tags Spaces // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-04-22) +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param offset query int false "The number of items to skip before starting to collect the result set" default(0) // @Param limit query int false "The number of items to return" default(100) maximum(1000) // @Success 200 {object} pagination.PaginatedResponse[apimodel.Space] "The list of spaces accessible by the authenticated user" @@ -55,7 +55,7 @@ func ListSpacesHandler(s *service.Service) gin.HandlerFunc { // @Id getSpace // @Tags Spaces // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-04-22) +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to retrieve" // @Success 200 {object} apimodel.SpaceResponse "The space details" // @Failure 401 {object} util.UnauthorizedError "Unauthorized" @@ -92,7 +92,7 @@ func GetSpaceHandler(s *service.Service) gin.HandlerFunc { // @Tags Spaces // @Accept json // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-04-22) +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param name body apimodel.CreateSpaceRequest true "The space to create" // @Success 200 {object} apimodel.SpaceResponse "The created space" // @Failure 400 {object} util.ValidationError "Bad request" @@ -136,7 +136,7 @@ func CreateSpaceHandler(s *service.Service) gin.HandlerFunc { // @Tags Spaces // @Accept json // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-04-22) +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to update" // @Param name body apimodel.UpdateSpaceRequest true "The space details to update" // @Success 200 {object} apimodel.SpaceResponse "The updated space" diff --git a/core/api/handler/tag.go b/core/api/handler/tag.go index 4d43cbb61..5b7865eb2 100644 --- a/core/api/handler/tag.go +++ b/core/api/handler/tag.go @@ -18,7 +18,7 @@ import ( // @Id listTags // @Tags Tags // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-04-22) +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to list tags for" // @Param property_id path string true "The ID of the property to list tags for" // @Success 200 {object} pagination.PaginatedResponse[apimodel.Tag] "The list of tags" @@ -57,7 +57,7 @@ func ListTagsHandler(s *service.Service) gin.HandlerFunc { // @Id getTag // @Tags Tags // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-04-22) +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to retrieve the tag from" // @Param property_id path string true "The ID of the property to retrieve the tag for" // @Param tag_id path string true "The ID of the tag to retrieve" @@ -99,7 +99,7 @@ func GetTagHandler(s *service.Service) gin.HandlerFunc { // @Tags Tags // @Accept json // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-04-22) +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to create the tag in" // @Param property_id path string true "The ID of the property to create the tag for" // @Param tag body apimodel.CreateTagRequest true "The tag to create" @@ -147,7 +147,7 @@ func CreateTagHandler(s *service.Service) gin.HandlerFunc { // @Tags Tags // @Accept json // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-04-22) +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to update the tag in" // @Param property_id path string true "The ID of the property to update the tag for" // @Param tag_id path string true "The ID of the tag to update" @@ -201,7 +201,7 @@ func UpdateTagHandler(s *service.Service) gin.HandlerFunc { // @Id deleteTag // @Tags Tags // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-04-22) +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to delete the tag from" // @Param property_id path string true "The ID of the property to delete the tag for" // @Param tag_id path string true "The ID of the tag to delete" diff --git a/core/api/handler/template.go b/core/api/handler/template.go index e72209c57..dbeec9a4d 100644 --- a/core/api/handler/template.go +++ b/core/api/handler/template.go @@ -18,7 +18,7 @@ import ( // @Id listTemplates // @Tags Templates // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-04-22) +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to which the type belongs" // @Param type_id path string true "The ID of the object type to retrieve templates for" // @Param offset query int false "The number of items to skip before starting to collect the result set" default(0) @@ -60,7 +60,7 @@ func ListTemplatesHandler(s *service.Service) gin.HandlerFunc { // @Id getTemplate // @Tags Templates // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-04-22) +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to which the template belongs" // @Param type_id path string true "The ID of the object type to which the template belongs" // @Param template_id path string true "The ID of the template to retrieve" diff --git a/core/api/handler/type.go b/core/api/handler/type.go index 19978da04..d4fb56cc8 100644 --- a/core/api/handler/type.go +++ b/core/api/handler/type.go @@ -18,7 +18,7 @@ import ( // @Id listTypes // @Tags Types // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-04-22) +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to retrieve types from" // @Param offset query int false "The number of items to skip before starting to collect the result set" default(0) // @Param limit query int false "The number of items to return" default(100) maximum(1000) @@ -55,7 +55,7 @@ func ListTypesHandler(s *service.Service) gin.HandlerFunc { // @Id getType // @Tags Types // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-04-22) +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space from which to retrieve the type" // @Param type_id path string true "The ID of the type to retrieve" // @Success 200 {object} apimodel.TypeResponse "The requested type" @@ -95,7 +95,7 @@ func GetTypeHandler(s *service.Service) gin.HandlerFunc { // @Tags Types // @Accept json // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-04-22) +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space in which to create the type" // @Param type body apimodel.CreateTypeRequest true "The type to create" // @Success 200 {object} apimodel.TypeResponse "The created type" @@ -141,7 +141,7 @@ func CreateTypeHandler(s *service.Service) gin.HandlerFunc { // @Tags Types // @Accept json // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-04-22) +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space in which the type exists" // @Param type_id path string true "The ID of the type to update" // @Param type body apimodel.UpdateTypeRequest true "The type details to update" @@ -192,7 +192,7 @@ func UpdateTypeHandler(s *service.Service) gin.HandlerFunc { // @Id deleteType // @Tags Types // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-04-22) +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space from which to delete the type" // @Param type_id path string true "The ID of the type to delete" // @Success 200 {object} apimodel.TypeResponse "The deleted type" diff --git a/core/api/server/middleware.go b/core/api/server/middleware.go index 880fef86e..f7cf530f6 100644 --- a/core/api/server/middleware.go +++ b/core/api/server/middleware.go @@ -15,7 +15,7 @@ import ( "github.com/anyproto/anytype-heart/pb" ) -const ApiVersion = "2025-04-22" +const ApiVersion = "2025-05-20" var ( ErrMissingAuthorizationHeader = errors.New("missing authorization header") diff --git a/core/api/server/router_test.go b/core/api/server/router_test.go index cbea76934..1e27f9e8d 100644 --- a/core/api/server/router_test.go +++ b/core/api/server/router_test.go @@ -64,6 +64,6 @@ func TestRouter_MetadataHeader(t *testing.T) { engine.ServeHTTP(w, req) // then - require.Equal(t, "2025-04-22", w.Header().Get("Anytype-Version")) + require.Equal(t, "2025-05-20", w.Header().Get("Anytype-Version")) }) } diff --git a/core/api/service.go b/core/api/service.go index 9f43eb7b7..455e753ed 100644 --- a/core/api/service.go +++ b/core/api/service.go @@ -52,7 +52,7 @@ func (s *apiService) Name() (name string) { // Init initializes the API service. // // @title Anytype API -// @version 2025-04-22 +// @version 2025-05-20 // @description This API empowers seamless interaction with Anytype's resources—spaces, objects, properties, types, templates, and beyond. // @termsOfService https://anytype.io/terms_of_use // @contact.name Anytype Support From a654d69a7988f368614562c36bc789e25965e678 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Sat, 10 May 2025 00:06:17 +0200 Subject: [PATCH 015/164] GO-5589: Require fields for SortOptions and add custom JSON unmarshalling for SortDirection and SortProperty --- core/api/docs/docs.go | 2 +- core/api/docs/swagger.json | 2 +- core/api/docs/swagger.yaml | 3 +++ core/api/model/search.go | 39 ++++++++++++++++++++++++++++++++++++-- 4 files changed, 42 insertions(+), 4 deletions(-) diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go index f3f868923..0157e15f5 100644 --- a/core/api/docs/docs.go +++ b/core/api/docs/docs.go @@ -6,7 +6,7 @@ import "github.com/swaggo/swag/v2" const docTemplate = `{ "schemes": {{ marshal .Schemes }}, - "components": {"schemas":{"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"creator","type":"string"},"objects":{"description":"The object values of the property","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to search for, specified by key or ID","example":["page","678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"status","type":"string"},"select":{"description":"The selected tag value of the property","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TokenResponse":{"properties":{"app_key":{"description":"The app key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, + "components": {"schemas":{"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"creator","type":"string"},"objects":{"description":"The object values of the property","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to search for, specified by key or ID","example":["page","678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"status","type":"string"},"select":{"description":"The selected tag value of the property","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"required":["direction","property_key"],"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TokenResponse":{"properties":{"app_key":{"description":"The app key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, "info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-api/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"}, "externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"}, "paths": {"/auth/display_code":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid ` + "`" + `app_name` + "`" + `, the server issues a unique ` + "`" + `challenge_id` + "`" + ` and displays a short code within the Anytype Desktop On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"createAuthChallenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.DisplayCodeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["Auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent app key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.","operationId":"solveAuthChallenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TokenResponse"}}},"description":"The app key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Solve challenge","tags":["Auth"]}},"/search":{"post":{"description":"Executes a global search over every space accessible by the authenticated user. The request body must specify the ` + "`" + `query` + "`" + ` text, optional filters on object types (e.g., \"page\", \"task\"), and sort directives (default: descending by last updated timestamp). Pagination is controlled via ` + "`" + `offset` + "`" + ` and ` + "`" + `limit` + "`" + ` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"searchGlobal","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"listSpaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"createSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"getSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"updateSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"addListObjects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"The list of object IDs to add to the list","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"removeListObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"getListViews","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"getListObjects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"listMembers","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"getMember","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"listObjects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"createObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"getObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"updateObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"listProperties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"createProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"getProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"updateProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"listTags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"createTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"getTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"updateTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/spaces/{space_id}/search":{"post":{"description":"Performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"searchSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"listTypes","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new object type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"createType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an object type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"getType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing object type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"updateType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"listTemplates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to retrieve templates for","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"getTemplate","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to which the template belongs","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json index c11af80c4..14058da09 100644 --- a/core/api/docs/swagger.json +++ b/core/api/docs/swagger.json @@ -1,5 +1,5 @@ { - "components": {"schemas":{"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"creator","type":"string"},"objects":{"description":"The object values of the property","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to search for, specified by key or ID","example":["page","678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"status","type":"string"},"select":{"description":"The selected tag value of the property","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TokenResponse":{"properties":{"app_key":{"description":"The app key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, + "components": {"schemas":{"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"creator","type":"string"},"objects":{"description":"The object values of the property","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to search for, specified by key or ID","example":["page","678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"status","type":"string"},"select":{"description":"The selected tag value of the property","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"required":["direction","property_key"],"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TokenResponse":{"properties":{"app_key":{"description":"The app key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, "info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"This API empowers seamless interaction with Anytype's resources—spaces, objects, properties, types, templates, and beyond.","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-api/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"Anytype API","version":"2025-05-20"}, "externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"}, "paths": {"/auth/display_code":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid `app_name`, the server issues a unique `challenge_id` and displays a short code within the Anytype Desktop On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"createAuthChallenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.DisplayCodeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["Auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent app key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.","operationId":"solveAuthChallenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TokenResponse"}}},"description":"The app key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Solve challenge","tags":["Auth"]}},"/search":{"post":{"description":"Executes a global search over every space accessible by the authenticated user. The request body must specify the `query` text, optional filters on object types (e.g., \"page\", \"task\"), and sort directives (default: descending by last updated timestamp). Pagination is controlled via `offset` and `limit` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"searchGlobal","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"listSpaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"createSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"getSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"updateSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"addListObjects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"The list of object IDs to add to the list","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"removeListObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"getListViews","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"getListObjects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"listMembers","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with `_participant`) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"getMember","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"listObjects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"createObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"getObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"updateObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"listProperties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"createProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"getProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"updateProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"listTags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"createTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"getTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"updateTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/spaces/{space_id}/search":{"post":{"description":"Performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"searchSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"listTypes","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new object type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"createType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an object type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"getType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing object type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"updateType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"listTemplates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to retrieve templates for","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"getTemplate","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to which the template belongs","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml index 74dfa03aa..62e75191f 100644 --- a/core/api/docs/swagger.yaml +++ b/core/api/docs/swagger.yaml @@ -883,6 +883,9 @@ components: $ref: '#/components/schemas/apimodel.SortDirection' property_key: $ref: '#/components/schemas/apimodel.SortProperty' + required: + - direction + - property_key type: object apimodel.SortProperty: default: last_modified_date diff --git a/core/api/model/search.go b/core/api/model/search.go index 717752586..ae25b1d2a 100644 --- a/core/api/model/search.go +++ b/core/api/model/search.go @@ -1,5 +1,12 @@ package apimodel +import ( + "encoding/json" + "fmt" + + "github.com/anyproto/anytype-heart/core/api/util" +) + type SortDirection string const ( @@ -7,6 +14,20 @@ const ( Desc SortDirection = "desc" ) +func (sd *SortDirection) UnmarshalJSON(data []byte) error { + var s string + if err := json.Unmarshal(data, &s); err != nil { + return err + } + switch SortDirection(s) { + case Asc, Desc: + *sd = SortDirection(s) + return nil + default: + return util.ErrBadInput(fmt.Sprintf("invalid sort direction: %q", s)) + } +} + type SortProperty string const ( @@ -16,6 +37,20 @@ const ( Name SortProperty = "name" ) +func (sp *SortProperty) UnmarshalJSON(data []byte) error { + var s string + if err := json.Unmarshal(data, &s); err != nil { + return err + } + switch SortProperty(s) { + case CreatedDate, LastModifiedDate, LastOpenedDate, Name: + *sp = SortProperty(s) + return nil + default: + return util.ErrBadInput(fmt.Sprintf("invalid sort property: %q", s)) + } +} + type SearchRequest struct { Query string `json:"query" example:"test"` // The search term to look for in object names and snippets Types []string `json:"types" example:"page,678043f0cda9133be777049f,bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"` // The types of objects to search for, specified by key or ID @@ -23,6 +58,6 @@ type SearchRequest struct { } type SortOptions struct { - PropertyKey SortProperty `json:"property_key" enums:"created_date,last_modified_date,last_opened_date,name" default:"last_modified_date"` // The property to sort the search results by - Direction SortDirection `json:"direction" enums:"asc,desc" default:"desc"` // The direction to sort the search results + PropertyKey SortProperty `json:"property_key" binding:"required" enums:"created_date,last_modified_date,last_opened_date,name" default:"last_modified_date"` // The property to sort the search results by + Direction SortDirection `json:"direction" binding:"required" enums:"asc,desc" default:"desc"` // The direction to sort the search results } From 3e257b7d66bc6fa8b1517019d4e4c668377ac98f Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Sat, 10 May 2025 00:10:30 +0200 Subject: [PATCH 016/164] GO-5589: Use raw string literals for regexp --- core/api/util/key.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/api/util/key.go b/core/api/util/key.go index 93ca4423d..82084d3c1 100644 --- a/core/api/util/key.go +++ b/core/api/util/key.go @@ -24,8 +24,8 @@ const ( ) var ( - hex24Pattern = regexp.MustCompile("^[a-f\\d]{24}$") - digitPattern = regexp.MustCompile("\\d") + hex24Pattern = regexp.MustCompile(`^[a-f\d]{24}$`) + digitPattern = regexp.MustCompile(`\d`) ) func ToPropertyApiKey(internalKey string) string { From d27ac7d825d12768991a96044f4683a72e160b7d Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Sat, 10 May 2025 00:30:56 +0200 Subject: [PATCH 017/164] GO-5589: Add burst for rate limiter --- core/api/server/middleware.go | 7 ++--- core/api/server/middleware_test.go | 30 ++++++++++++++++++++- core/api/server/router.go | 43 +++++++++++++++--------------- 3 files changed, 55 insertions(+), 25 deletions(-) diff --git a/core/api/server/middleware.go b/core/api/server/middleware.go index f7cf530f6..2777011f7 100644 --- a/core/api/server/middleware.go +++ b/core/api/server/middleware.go @@ -23,9 +23,10 @@ var ( ErrInvalidToken = errors.New("invalid token") ) -// rateLimit is a middleware that limits the number of requests per second. -func (s *Server) rateLimit(max float64) gin.HandlerFunc { - lmt := tollbooth.NewLimiter(max, nil) +// rateLimit is a middleware that applies a token-bucket rate limiter with rate and burst. +func (s *Server) rateLimit(rate float64, burst int) gin.HandlerFunc { + lmt := tollbooth.NewLimiter(rate, nil) + lmt.SetBurst(burst) lmt.SetIPLookup(limiter.IPLookup{ Name: "RemoteAddr", IndexFromRight: 0, diff --git a/core/api/server/middleware_test.go b/core/api/server/middleware_test.go index c62968bd4..f7bf54c9b 100644 --- a/core/api/server/middleware_test.go +++ b/core/api/server/middleware_test.go @@ -141,7 +141,7 @@ func TestEnsureAuthenticated(t *testing.T) { func TestRateLimit(t *testing.T) { fx := newFixture(t) router := gin.New() - router.GET("/", fx.rateLimit(1), func(c *gin.Context) { + router.GET("/", fx.rateLimit(1, 1), func(c *gin.Context) { c.String(http.StatusOK, "OK") }) @@ -170,4 +170,32 @@ func TestRateLimit(t *testing.T) { // then require.Equal(t, http.StatusTooManyRequests, w.Code) }) + + t.Run("burst of size 2 allows two requests", func(t *testing.T) { + burstRouter := gin.New() + burstRouter.GET("/", fx.rateLimit(1, 2), func(c *gin.Context) { + c.String(http.StatusOK, "OK") + }) + + // first request (within burst) + w1 := httptest.NewRecorder() + req1 := httptest.NewRequest("GET", "/", nil) + req1.RemoteAddr = "1.2.3.4:5678" + burstRouter.ServeHTTP(w1, req1) + require.Equal(t, http.StatusOK, w1.Code) + + // second request (within burst) + w2 := httptest.NewRecorder() + req2 := httptest.NewRequest("GET", "/", nil) + req2.RemoteAddr = "1.2.3.4:5678" + burstRouter.ServeHTTP(w2, req2) + require.Equal(t, http.StatusOK, w2.Code) + + // third request should be rate-limited + w3 := httptest.NewRecorder() + req3 := httptest.NewRequest("GET", "/", nil) + req3.RemoteAddr = "1.2.3.4:5678" + burstRouter.ServeHTTP(w3, req3) + require.Equal(t, http.StatusTooManyRequests, w3.Code) + }) } diff --git a/core/api/server/router.go b/core/api/server/router.go index c4a20c843..3fdf7099a 100644 --- a/core/api/server/router.go +++ b/core/api/server/router.go @@ -18,7 +18,8 @@ const ( defaultPageSize = 100 minPageSize = 1 maxPageSize = 1000 - maxWriteRequestsPerSecond = 1 + maxWriteRequestsPerSecond = 1 // allow sustained 1 request per second + maxBurstRequests = 60 // allow all requests in the first second ) // NewRouter builds and returns a *gin.Engine with all routes configured. @@ -62,35 +63,35 @@ func (s *Server) NewRouter(mw apicore.ClientCommands) *gin.Engine { { // Block // TODO: implement create, update and delete block endpoints - // v1.POST("/spaces/:space_id/objects/:object_id/blocks", s.rateLimit(maxWriteRequestsPerSecond), object.CreateBlockHandler(s.service)) - // v1.PATCH("/spaces/:space_id/objects/:object_id/blocks/:block_id", s.rateLimit(maxWriteRequestsPerSecond), object.UpdateBlockHandler(s.service)) - // v1.DELETE("/spaces/:space_id/objects/:object_id/blocks/:block_id", s.rateLimit(maxWriteRequestsPerSecond), object.DeleteBlockHandler(s.service)) + // v1.POST("/spaces/:space_id/objects/:object_id/blocks", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), object.CreateBlockHandler(s.service)) + // v1.PATCH("/spaces/:space_id/objects/:object_id/blocks/:block_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), object.UpdateBlockHandler(s.service)) + // v1.DELETE("/spaces/:space_id/objects/:object_id/blocks/:block_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), object.DeleteBlockHandler(s.service)) // List v1.GET("/spaces/:space_id/lists/:list_id/views", handler.GetListViewsHandler(s.service)) v1.GET("/spaces/:space_id/lists/:list_id/views/:view_id/objects", handler.GetObjectsInListHandler(s.service)) - v1.POST("/spaces/:space_id/lists/:list_id/objects", s.rateLimit(maxWriteRequestsPerSecond), handler.AddObjectsToListHandler(s.service)) - v1.DELETE("/spaces/:space_id/lists/:list_id/objects/:object_id", s.rateLimit(maxWriteRequestsPerSecond), handler.RemoveObjectFromListHandler(s.service)) + v1.POST("/spaces/:space_id/lists/:list_id/objects", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.AddObjectsToListHandler(s.service)) + v1.DELETE("/spaces/:space_id/lists/:list_id/objects/:object_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.RemoveObjectFromListHandler(s.service)) // Member v1.GET("/spaces/:space_id/members", handler.ListMembersHandler(s.service)) v1.GET("/spaces/:space_id/members/:member_id", handler.GetMemberHandler(s.service)) // TODO: renable when granular permissions are implementeds - // v1.PATCH("/spaces/:space_id/members/:member_id", s.rateLimit(maxWriteRequestsPerSecond), space.UpdateMemberHandler(s.service)) + // v1.PATCH("/spaces/:space_id/members/:member_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), space.UpdateMemberHandler(s.service)) // Object v1.GET("/spaces/:space_id/objects", handler.ListObjectsHandler(s.service)) v1.GET("/spaces/:space_id/objects/:object_id", handler.GetObjectHandler(s.service)) - v1.POST("/spaces/:space_id/objects", s.rateLimit(maxWriteRequestsPerSecond), handler.CreateObjectHandler(s.service)) - v1.PATCH("/spaces/:space_id/objects/:object_id", s.rateLimit(maxWriteRequestsPerSecond), handler.UpdateObjectHandler(s.service)) - v1.DELETE("/spaces/:space_id/objects/:object_id", s.rateLimit(maxWriteRequestsPerSecond), handler.DeleteObjectHandler(s.service)) + v1.POST("/spaces/:space_id/objects", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.CreateObjectHandler(s.service)) + v1.PATCH("/spaces/:space_id/objects/:object_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.UpdateObjectHandler(s.service)) + v1.DELETE("/spaces/:space_id/objects/:object_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.DeleteObjectHandler(s.service)) // Property v1.GET("/spaces/:space_id/properties", handler.ListPropertiesHandler(s.service)) v1.GET("/spaces/:space_id/properties/:property_id", handler.GetPropertyHandler(s.service)) - v1.POST("/spaces/:space_id/properties", s.rateLimit(maxWriteRequestsPerSecond), handler.CreatePropertyHandler(s.service)) - v1.PATCH("/spaces/:space_id/properties/:property_id", s.rateLimit(maxWriteRequestsPerSecond), handler.UpdatePropertyHandler(s.service)) - v1.DELETE("/spaces/:space_id/properties/:property_id", s.rateLimit(maxWriteRequestsPerSecond), handler.DeletePropertyHandler(s.service)) + v1.POST("/spaces/:space_id/properties", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.CreatePropertyHandler(s.service)) + v1.PATCH("/spaces/:space_id/properties/:property_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.UpdatePropertyHandler(s.service)) + v1.DELETE("/spaces/:space_id/properties/:property_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.DeletePropertyHandler(s.service)) // Search v1.POST("/search", handler.GlobalSearchHandler(s.service)) @@ -99,15 +100,15 @@ func (s *Server) NewRouter(mw apicore.ClientCommands) *gin.Engine { // Space v1.GET("/spaces", handler.ListSpacesHandler(s.service)) v1.GET("/spaces/:space_id", handler.GetSpaceHandler(s.service)) - v1.POST("/spaces", s.rateLimit(maxWriteRequestsPerSecond), handler.CreateSpaceHandler(s.service)) - v1.PATCH("/spaces/:space_id", s.rateLimit(maxWriteRequestsPerSecond), handler.UpdateSpaceHandler(s.service)) + v1.POST("/spaces", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.CreateSpaceHandler(s.service)) + v1.PATCH("/spaces/:space_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.UpdateSpaceHandler(s.service)) // Tag v1.GET("/spaces/:space_id/properties/:property_id/tags", handler.ListTagsHandler(s.service)) v1.GET("/spaces/:space_id/properties/:property_id/tags/:tag_id", handler.GetTagHandler(s.service)) - v1.POST("/spaces/:space_id/properties/:property_id/tags", s.rateLimit(maxWriteRequestsPerSecond), handler.CreateTagHandler(s.service)) - v1.PATCH("/spaces/:space_id/properties/:property_id/tags/:tag_id", s.rateLimit(maxWriteRequestsPerSecond), handler.UpdateTagHandler(s.service)) - v1.DELETE("/spaces/:space_id/properties/:property_id/tags/:tag_id", s.rateLimit(maxWriteRequestsPerSecond), handler.DeleteTagHandler(s.service)) + v1.POST("/spaces/:space_id/properties/:property_id/tags", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.CreateTagHandler(s.service)) + v1.PATCH("/spaces/:space_id/properties/:property_id/tags/:tag_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.UpdateTagHandler(s.service)) + v1.DELETE("/spaces/:space_id/properties/:property_id/tags/:tag_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.DeleteTagHandler(s.service)) // Template v1.GET("/spaces/:space_id/types/:type_id/templates", handler.ListTemplatesHandler(s.service)) @@ -116,9 +117,9 @@ func (s *Server) NewRouter(mw apicore.ClientCommands) *gin.Engine { // Type v1.GET("/spaces/:space_id/types", handler.ListTypesHandler(s.service)) v1.GET("/spaces/:space_id/types/:type_id", handler.GetTypeHandler(s.service)) - v1.POST("/spaces/:space_id/types", s.rateLimit(maxWriteRequestsPerSecond), handler.CreateTypeHandler(s.service)) - v1.PATCH("/spaces/:space_id/types/:type_id", s.rateLimit(maxWriteRequestsPerSecond), handler.UpdateTypeHandler(s.service)) - v1.DELETE("/spaces/:space_id/types/:type_id", s.rateLimit(maxWriteRequestsPerSecond), handler.DeleteTypeHandler(s.service)) + v1.POST("/spaces/:space_id/types", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.CreateTypeHandler(s.service)) + v1.PATCH("/spaces/:space_id/types/:type_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.UpdateTypeHandler(s.service)) + v1.DELETE("/spaces/:space_id/types/:type_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.DeleteTypeHandler(s.service)) } return router From 3097b3855b5529fc01adde455a21169e3fd79804 Mon Sep 17 00:00:00 2001 From: Mikhail Rakhmanov Date: Mon, 12 May 2025 15:06:43 +0200 Subject: [PATCH 018/164] GO-4400 Implement new acls --- core/acl/aclservice.go | 5 +++-- core/debug/exporter/exporter.go | 3 ++- core/debug/exporter/importer.go | 3 ++- go.mod | 2 +- go.sum | 4 ++++ 5 files changed, 12 insertions(+), 5 deletions(-) diff --git a/core/acl/aclservice.go b/core/acl/aclservice.go index 30df9d270..beac8819b 100644 --- a/core/acl/aclservice.go +++ b/core/acl/aclservice.go @@ -10,6 +10,7 @@ import ( "github.com/anyproto/any-sync/app" "github.com/anyproto/any-sync/commonspace/acl/aclclient" "github.com/anyproto/any-sync/commonspace/object/acl/list" + "github.com/anyproto/any-sync/commonspace/object/acl/recordverifier" "github.com/anyproto/any-sync/coordinator/coordinatorclient" "github.com/anyproto/any-sync/coordinator/coordinatorproto" "github.com/anyproto/any-sync/identityrepo/identityrepoproto" @@ -472,12 +473,12 @@ func (a *aclService) ViewInvite(ctx context.Context, inviteCid cid.Cid, inviteFi if err != nil { return domain.InviteView{}, convertedOrAclRequestError(err) } - lst, err := list.BuildAclListWithIdentity(a.accountService.Keys(), store, list.NoOpAcceptorVerifier{}) + lst, err := list.BuildAclListWithIdentity(a.accountService.Keys(), store, recordverifier.NewValidateFull()) if err != nil { return domain.InviteView{}, convertedOrAclRequestError(err) } for _, inv := range lst.AclState().Invites() { - if inviteKey.GetPublic().Equals(inv) { + if inviteKey.GetPublic().Equals(inv.Key) { return res, nil } } diff --git a/core/debug/exporter/exporter.go b/core/debug/exporter/exporter.go index c4665cb69..c5d079cb3 100644 --- a/core/debug/exporter/exporter.go +++ b/core/debug/exporter/exporter.go @@ -8,6 +8,7 @@ import ( "github.com/anyproto/any-sync/commonspace/headsync/headstorage" "github.com/anyproto/any-sync/commonspace/object/accountdata" "github.com/anyproto/any-sync/commonspace/object/acl/list" + "github.com/anyproto/any-sync/commonspace/object/acl/recordverifier" "github.com/anyproto/any-sync/commonspace/object/tree/objecttree" "github.com/anyproto/any-sync/commonspace/object/tree/treechangeproto" "github.com/anyproto/any-sync/util/crypto" @@ -34,7 +35,7 @@ func prepareExport(ctx context.Context, readable objecttree.ReadableObjectTree, if err != nil { return nil, err } - newAcl, err := list.BuildAclListWithIdentity(keys, listStorage, list.NoOpAcceptorVerifier{}) + newAcl, err := list.BuildAclListWithIdentity(keys, listStorage, recordverifier.NewValidateFull()) if err != nil { return nil, err } diff --git a/core/debug/exporter/importer.go b/core/debug/exporter/importer.go index a01b18a29..c198d3a01 100644 --- a/core/debug/exporter/importer.go +++ b/core/debug/exporter/importer.go @@ -10,6 +10,7 @@ import ( "github.com/anyproto/any-sync/commonspace/headsync/headstorage" "github.com/anyproto/any-sync/commonspace/object/accountdata" "github.com/anyproto/any-sync/commonspace/object/acl/list" + "github.com/anyproto/any-sync/commonspace/object/acl/recordverifier" "github.com/anyproto/any-sync/commonspace/object/tree/objecttree" "github.com/anyproto/anytype-heart/util/ziputil" @@ -80,7 +81,7 @@ func ImportStorage(ctx context.Context, path string) (res ImportResult, err erro if err != nil { return } - acl, err := list.BuildAclListWithIdentity(randomKeys, listStorage, list.NoOpAcceptorVerifier{}) + acl, err := list.BuildAclListWithIdentity(randomKeys, listStorage, recordverifier.NewValidateFull()) if err != nil { return } diff --git a/go.mod b/go.mod index 409fe3818..ba4ddfde7 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/VividCortex/ewma v1.2.0 github.com/adrium/goheif v0.0.0-20230113233934-ca402e77a786 github.com/anyproto/any-store v0.1.13 - github.com/anyproto/any-sync v0.7.5 + github.com/anyproto/any-sync v0.7.6-0.20250512130421-216a06119435 github.com/anyproto/anytype-publish-server/publishclient v0.0.0-20250131145601-de288583ff2a github.com/anyproto/anytype-push-server/pushclient v0.0.0-20250402124745-6451298047f7 github.com/anyproto/go-chash v0.1.0 diff --git a/go.sum b/go.sum index e1603a425..13779d111 100644 --- a/go.sum +++ b/go.sum @@ -88,6 +88,10 @@ github.com/anyproto/any-sync v0.7.4 h1:pEkPn1fxJGvSGlsnAOy0lWVaqRgymyddmNy7T9toU github.com/anyproto/any-sync v0.7.4/go.mod h1:TSKgCoTV40Bt8AfCh3RxPUUAfYGrhc8Mzh8/AiVlvX4= github.com/anyproto/any-sync v0.7.5 h1:VHayuacVpa2eRu5ubxCwrL3l0f/OSN7p45L8TxnaJEw= github.com/anyproto/any-sync v0.7.5/go.mod h1:02tMeQ6s/tneWLhoyzvy/ocGswICtvI48kdwTU8hQf8= +github.com/anyproto/any-sync v0.7.6-0.20250512115929-ae90afb97d1c h1:eBuoWi/lgqxRLEh26ksWzSx3CTU1RdrWptLZWBPTRhA= +github.com/anyproto/any-sync v0.7.6-0.20250512115929-ae90afb97d1c/go.mod h1:02tMeQ6s/tneWLhoyzvy/ocGswICtvI48kdwTU8hQf8= +github.com/anyproto/any-sync v0.7.6-0.20250512130421-216a06119435 h1:pABYN1hf08R/GgUQMhzsyDjEVcvtx2zsqgYmpyZZNT4= +github.com/anyproto/any-sync v0.7.6-0.20250512130421-216a06119435/go.mod h1:02tMeQ6s/tneWLhoyzvy/ocGswICtvI48kdwTU8hQf8= github.com/anyproto/anytype-publish-server/publishclient v0.0.0-20250131145601-de288583ff2a h1:ZZM+0OUCQMWSLSflpkf0ZMVo3V76qEDDIXPpQOClNs0= github.com/anyproto/anytype-publish-server/publishclient v0.0.0-20250131145601-de288583ff2a/go.mod h1:4fkueCZcGniSMXkrwESO8zzERrh/L7WHimRNWecfGM0= github.com/anyproto/anytype-push-server/pushclient v0.0.0-20250402124745-6451298047f7 h1:oKkEnxnN1jeB1Ty20CTMH3w4WkCrV8dOQy1Myetg7XA= From 6a2a4d23487ddbe80b5a45e33ca1c5f8674aac8f Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Mon, 12 May 2025 17:30:11 +0200 Subject: [PATCH 019/164] GO-5589: Add route to serve OpenAPI specification --- core/api/server/router.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/core/api/server/router.go b/core/api/server/router.go index 3fdf7099a..811be89b7 100644 --- a/core/api/server/router.go +++ b/core/api/server/router.go @@ -49,6 +49,16 @@ func (s *Server) NewRouter(mw apicore.ClientCommands) *gin.Engine { c.Redirect(http.StatusMovedPermanently, target) }) + // OpenAPI spec route + router.GET("/openapi.yaml", func(c *gin.Context) { + data, err := os.ReadFile("./core/api/docs/swagger.yaml") + if err != nil { + c.String(http.StatusInternalServerError, "Failed to read OpenAPI spec") + return + } + c.Data(http.StatusOK, "application/x-yaml", data) + }) + // Auth routes (no authentication required) authGroup := router.Group("/v1/auth") { From 33fed62091e4f947f7c14c76d311389ccf7554c5 Mon Sep 17 00:00:00 2001 From: kirillston Date: Mon, 12 May 2025 21:36:14 +0200 Subject: [PATCH 020/164] GO-5424 Do migration for empty rec layout on import --- core/block/editor/objecttype.go | 1 + core/block/import/common/objectcreator/objectcreator.go | 3 +++ 2 files changed, 4 insertions(+) diff --git a/core/block/editor/objecttype.go b/core/block/editor/objecttype.go index c1de6d519..1120e5a9f 100644 --- a/core/block/editor/objecttype.go +++ b/core/block/editor/objecttype.go @@ -99,6 +99,7 @@ func (ot *ObjectType) CreationStateMigration(ctx *smartblock.InitContext) migrat template.WithObjectTypes(ctx.State.ObjectTypeKeys()), template.WithTitle, template.WithLayout(model.ObjectType_objectType), + template.WithDetail(bundle.RelationKeyRecommendedLayout, domain.Int64(model.ObjectType_basic)), } templates = append(templates, ot.dataviewTemplates()...) diff --git a/core/block/import/common/objectcreator/objectcreator.go b/core/block/import/common/objectcreator/objectcreator.go index fef90192a..084ad6ebd 100644 --- a/core/block/import/common/objectcreator/objectcreator.go +++ b/core/block/import/common/objectcreator/objectcreator.go @@ -374,6 +374,9 @@ func (oc *ObjectCreator) resetState(newID string, st *state.State) *domain.Detai // we use revision for bundled objects like relations and object types return nil } + if st.ObjectTypeKey() == bundle.TypeKeyObjectType { + template.InitTemplate(st, template.WithDetail(bundle.RelationKeyRecommendedLayout, domain.Int64(model.ObjectType_basic))) + } err := history.ResetToVersion(b, st) if err != nil { log.With(zap.String("object id", newID)).Errorf("failed to set state %s: %s", newID, err) From e85bc49a5b11bdd882b0a19405fe3f62456b97a5 Mon Sep 17 00:00:00 2001 From: Sergey Date: Tue, 13 May 2025 11:02:05 +0200 Subject: [PATCH 021/164] Refactor chats: restructure --- core/anytype/bootstrap.go | 2 + .../chatmodel/chatmodel.go} | 95 ++++++---- .../block/chats/chatrepository/readhandler.go | 92 ++++++++++ .../chatrepository}/repository.go | 157 ++++++++++++---- core/block/chats/service.go | 30 ++-- core/block/editor/chatobject/chathandler.go | 16 +- core/block/editor/chatobject/chatobject.go | 76 ++++---- core/block/editor/chatobject/reading.go | 169 ++---------------- core/block/editor/chatobject/subscription.go | 50 +++++- core/chats.go | 15 +- 10 files changed, 408 insertions(+), 294 deletions(-) rename core/block/{editor/chatobject/message.go => chats/chatmodel/chatmodel.go} (75%) create mode 100644 core/block/chats/chatrepository/readhandler.go rename core/block/{editor/chatobject => chats/chatrepository}/repository.go (58%) diff --git a/core/anytype/bootstrap.go b/core/anytype/bootstrap.go index 0ec5d9456..3326af801 100644 --- a/core/anytype/bootstrap.go +++ b/core/anytype/bootstrap.go @@ -41,6 +41,7 @@ import ( "github.com/anyproto/anytype-heart/core/block/bookmark" decorator "github.com/anyproto/anytype-heart/core/block/bookmark/bookmarkimporter" "github.com/anyproto/anytype-heart/core/block/chats" + "github.com/anyproto/anytype-heart/core/block/chats/chatrepository" "github.com/anyproto/anytype-heart/core/block/collection" "github.com/anyproto/anytype-heart/core/block/dataviewservice" "github.com/anyproto/anytype-heart/core/block/detailservice" @@ -264,6 +265,7 @@ func Bootstrap(a *app.App, components ...app.Component) { Register(files.New()). Register(fileoffloader.New()). Register(fileacl.New()). + Register(chatrepository.New()). Register(chats.New()). Register(sourceimpl.New()). Register(spacefactory.New()). diff --git a/core/block/editor/chatobject/message.go b/core/block/chats/chatmodel/chatmodel.go similarity index 75% rename from core/block/editor/chatobject/message.go rename to core/block/chats/chatmodel/chatmodel.go index e5a6e41de..20f417365 100644 --- a/core/block/editor/chatobject/message.go +++ b/core/block/chats/chatmodel/chatmodel.go @@ -1,4 +1,4 @@ -package chatobject +package chatmodel import ( "context" @@ -9,17 +9,40 @@ import ( "github.com/anyproto/anytype-heart/pkg/lib/pb/model" ) +type CounterType int + const ( - creatorKey = "creator" - createdAtKey = "createdAt" - modifiedAtKey = "modifiedAt" - reactionsKey = "reactions" - contentKey = "content" - readKey = "read" - mentionReadKey = "mentionRead" - hasMentionKey = "hasMention" - stateIdKey = "stateId" - orderKey = "_o" + CounterTypeMessage = CounterType(iota) + CounterTypeMention +) + +const ( + DiffManagerMessages = "messages" + DiffManagerMentions = "mentions" +) + +func (t CounterType) DiffManagerName() string { + switch t { + case CounterTypeMessage: + return DiffManagerMessages + case CounterTypeMention: + return DiffManagerMentions + default: + return "unknown" + } +} + +const ( + CreatorKey = "creator" + CreatedAtKey = "createdAt" + ModifiedAtKey = "modifiedAt" + ReactionsKey = "reactions" + ContentKey = "content" + ReadKey = "read" + MentionReadKey = "mentionRead" + HasMentionKey = "hasMention" + StateIdKey = "stateId" + OrderKey = "_o" ) type Message struct { @@ -29,7 +52,11 @@ type Message struct { CurrentUserMentioned bool } -func (m *Message) IsCurrentUserMentioned(ctx context.Context, myParticipantId string, myIdentity string, repo *repository) (bool, error) { +type MessagesGetter interface { + GetMessagesByIds(ctx context.Context, messageIds []string) ([]*Message, error) +} + +func (m *Message) IsCurrentUserMentioned(ctx context.Context, myParticipantId string, myIdentity string, repo MessagesGetter) (bool, error) { for _, mark := range m.Message.Marks { if mark.Type == model.BlockContentTextMark_Mention && mark.Param == myParticipantId { return true, nil @@ -37,7 +64,7 @@ func (m *Message) IsCurrentUserMentioned(ctx context.Context, myParticipantId st } if m.ReplyToMessageId != "" { - msgs, err := repo.getMessagesByIds(ctx, []string{m.ReplyToMessageId}) + msgs, err := repo.GetMessagesByIds(ctx, []string{m.ReplyToMessageId}) if err != nil { return false, fmt.Errorf("get messages by id: %w", err) } @@ -52,7 +79,7 @@ func (m *Message) IsCurrentUserMentioned(ctx context.Context, myParticipantId st return false, nil } -func unmarshalMessage(val *anyenc.Value) (*Message, error) { +func UnmarshalMessage(val *anyenc.Value) (*Message, error) { return newMessageWrapper(val).toModel() } @@ -137,16 +164,16 @@ func (m *Message) MarshalAnyenc(marshalTo *anyenc.Value, arena *anyenc.Arena) { } marshalTo.Set("id", arena.NewString(m.Id)) - marshalTo.Set(creatorKey, arena.NewString(m.Creator)) - marshalTo.Set(createdAtKey, arena.NewNumberInt(int(m.CreatedAt))) - marshalTo.Set(modifiedAtKey, arena.NewNumberInt(int(m.ModifiedAt))) + marshalTo.Set(CreatorKey, arena.NewString(m.Creator)) + marshalTo.Set(CreatedAtKey, arena.NewNumberInt(int(m.CreatedAt))) + marshalTo.Set(ModifiedAtKey, arena.NewNumberInt(int(m.ModifiedAt))) marshalTo.Set("replyToMessageId", arena.NewString(m.ReplyToMessageId)) - marshalTo.Set(contentKey, content) - marshalTo.Set(readKey, arenaNewBool(arena, m.Read)) - marshalTo.Set(mentionReadKey, arenaNewBool(arena, m.MentionRead)) - marshalTo.Set(hasMentionKey, arenaNewBool(arena, m.CurrentUserMentioned)) - marshalTo.Set(stateIdKey, arena.NewString(m.StateId)) - marshalTo.Set(reactionsKey, reactions) + marshalTo.Set(ContentKey, content) + marshalTo.Set(ReadKey, arenaNewBool(arena, m.Read)) + marshalTo.Set(MentionReadKey, arenaNewBool(arena, m.MentionRead)) + marshalTo.Set(HasMentionKey, arenaNewBool(arena, m.CurrentUserMentioned)) + marshalTo.Set(StateIdKey, arena.NewString(m.StateId)) + marshalTo.Set(ReactionsKey, reactions) } func arenaNewBool(a *anyenc.Arena, value bool) *anyenc.Value { @@ -161,24 +188,24 @@ func (m *messageUnmarshaller) toModel() (*Message, error) { return &Message{ ChatMessage: &model.ChatMessage{ Id: string(m.val.GetStringBytes("id")), - Creator: string(m.val.GetStringBytes(creatorKey)), - CreatedAt: int64(m.val.GetInt(createdAtKey)), - ModifiedAt: int64(m.val.GetInt(modifiedAtKey)), - StateId: m.val.GetString(stateIdKey), + Creator: string(m.val.GetStringBytes(CreatorKey)), + CreatedAt: int64(m.val.GetInt(CreatedAtKey)), + ModifiedAt: int64(m.val.GetInt(ModifiedAtKey)), + StateId: m.val.GetString(StateIdKey), OrderId: string(m.val.GetStringBytes("_o", "id")), ReplyToMessageId: string(m.val.GetStringBytes("replyToMessageId")), Message: m.contentToModel(), - Read: m.val.GetBool(readKey), - MentionRead: m.val.GetBool(mentionReadKey), + Read: m.val.GetBool(ReadKey), + MentionRead: m.val.GetBool(MentionReadKey), Attachments: m.attachmentsToModel(), Reactions: m.reactionsToModel(), }, - CurrentUserMentioned: m.val.GetBool(hasMentionKey), + CurrentUserMentioned: m.val.GetBool(HasMentionKey), }, nil } func (m *messageUnmarshaller) contentToModel() *model.ChatMessageMessageContent { - inMarks := m.val.GetArray(contentKey, "message", "marks") + inMarks := m.val.GetArray(ContentKey, "message", "marks") marks := make([]*model.BlockContentTextMark, 0, len(inMarks)) for _, inMark := range inMarks { mark := &model.BlockContentTextMark{ @@ -192,14 +219,14 @@ func (m *messageUnmarshaller) contentToModel() *model.ChatMessageMessageContent marks = append(marks, mark) } return &model.ChatMessageMessageContent{ - Text: string(m.val.GetStringBytes(contentKey, "message", "text")), + Text: string(m.val.GetStringBytes(ContentKey, "message", "text")), Style: model.BlockContentTextStyle(m.val.GetInt("content", "message", "style")), Marks: marks, } } func (m *messageUnmarshaller) attachmentsToModel() []*model.ChatMessageAttachment { - inAttachments := m.val.GetObject(contentKey, "attachments") + inAttachments := m.val.GetObject(ContentKey, "attachments") var attachments []*model.ChatMessageAttachment if inAttachments != nil { attachments = make([]*model.ChatMessageAttachment, 0, inAttachments.Len()) @@ -214,7 +241,7 @@ func (m *messageUnmarshaller) attachmentsToModel() []*model.ChatMessageAttachmen } func (m *messageUnmarshaller) reactionsToModel() *model.ChatMessageReactions { - inReactions := m.val.GetObject(reactionsKey) + inReactions := m.val.GetObject(ReactionsKey) reactions := &model.ChatMessageReactions{ Reactions: map[string]*model.ChatMessageReactionsIdentityList{}, } diff --git a/core/block/chats/chatrepository/readhandler.go b/core/block/chats/chatrepository/readhandler.go new file mode 100644 index 000000000..b6182e393 --- /dev/null +++ b/core/block/chats/chatrepository/readhandler.go @@ -0,0 +1,92 @@ +package chatrepository + +import ( + "github.com/anyproto/any-store/anyenc" + "github.com/anyproto/any-store/query" + + "github.com/anyproto/anytype-heart/core/block/chats/chatmodel" +) + +type readHandler interface { + getUnreadFilter() query.Filter + getMessagesFilter() query.Filter + getReadKey() string + readModifier(value bool) query.Modifier +} + +type readMessagesHandler struct{} + +func (h readMessagesHandler) getUnreadFilter() query.Filter { + return query.Not{ + Filter: query.Key{Path: []string{readKey}, Filter: query.NewComp(query.CompOpEq, true)}, + } +} + +func (h readMessagesHandler) getMessagesFilter() query.Filter { + return nil +} + +func (h readMessagesHandler) getReadKey() string { + return readKey +} + +func (h readMessagesHandler) readModifier(value bool) query.Modifier { + return query.ModifyFunc(func(a *anyenc.Arena, v *anyenc.Value) (result *anyenc.Value, modified bool, err error) { + oldValue := v.GetBool(h.getReadKey()) + if oldValue != value { + v.Set(h.getReadKey(), arenaNewBool(a, value)) + return v, true, nil + } + return v, false, nil + }) +} + +type readMentionsHandler struct { +} + +func (h readMentionsHandler) getUnreadFilter() query.Filter { + return query.And{ + query.Key{Path: []string{hasMentionKey}, Filter: query.NewComp(query.CompOpEq, true)}, + query.Key{Path: []string{mentionReadKey}, Filter: query.NewComp(query.CompOpEq, false)}, + } +} + +func (h readMentionsHandler) getMessagesFilter() query.Filter { + return query.Key{Path: []string{hasMentionKey}, Filter: query.NewComp(query.CompOpEq, true)} +} + +func (h readMentionsHandler) getReadKey() string { + return mentionReadKey +} + +func (h readMentionsHandler) readModifier(value bool) query.Modifier { + return query.ModifyFunc(func(a *anyenc.Arena, v *anyenc.Value) (result *anyenc.Value, modified bool, err error) { + if v.GetBool(hasMentionKey) { + oldValue := v.GetBool(h.getReadKey()) + if oldValue != value { + v.Set(h.getReadKey(), arenaNewBool(a, value)) + return v, true, nil + } + } + return v, false, nil + }) +} + +func newReadHandler(counterType chatmodel.CounterType) readHandler { + switch counterType { + case chatmodel.CounterTypeMessage: + return readMessagesHandler{} + case chatmodel.CounterTypeMention: + return readMentionsHandler{} + default: + panic("unknown counter type") + } +} + +func arenaNewBool(a *anyenc.Arena, value bool) *anyenc.Value { + if value { + return a.NewTrue() + } else { + return a.NewFalse() + } +} diff --git a/core/block/editor/chatobject/repository.go b/core/block/chats/chatrepository/repository.go similarity index 58% rename from core/block/editor/chatobject/repository.go rename to core/block/chats/chatrepository/repository.go index 64e3c67c1..2502627c0 100644 --- a/core/block/editor/chatobject/repository.go +++ b/core/block/chats/chatrepository/repository.go @@ -1,4 +1,4 @@ -package chatobject +package chatrepository import ( "context" @@ -10,25 +10,108 @@ import ( anystore "github.com/anyproto/any-store" "github.com/anyproto/any-store/anyenc" "github.com/anyproto/any-store/query" + "github.com/anyproto/any-sync/app" "go.uber.org/zap" + "github.com/anyproto/anytype-heart/core/block/chats/chatmodel" + "github.com/anyproto/anytype-heart/pkg/lib/localstore/objectstore" + "github.com/anyproto/anytype-heart/pkg/lib/logging" "github.com/anyproto/anytype-heart/pkg/lib/pb/model" ) +const CName = "chatrepository" + +var log = logging.Logger(CName).Desugar() + +const ( + descOrder = "-_o.id" + ascOrder = "_o.id" + descStateId = "-stateId" +) + +const ( + creatorKey = "creator" + createdAtKey = "createdAt" + modifiedAtKey = "modifiedAt" + reactionsKey = "reactions" + contentKey = "content" + readKey = "read" + mentionReadKey = "mentionRead" + hasMentionKey = "hasMention" + stateIdKey = "stateId" + orderKey = "_o" +) + +type Service interface { + app.Component + + Repository(chatObjectId string) (Repository, error) + // RepositoryForCollection is useful when you already have the chat object collection + RepositoryForCollection(col anystore.Collection) (Repository, error) +} + +type service struct { + objectStore objectstore.ObjectStore + arenaPool *anyenc.ArenaPool +} + +func New() Service { + return &service{ + arenaPool: &anyenc.ArenaPool{}, + } +} + +func (s *service) Repository(chatObjectId string) (Repository, error) { + // TODO implement me + panic("implement me") +} + +func (s *service) RepositoryForCollection(col anystore.Collection) (Repository, error) { + return &repository{ + collection: col, + arenaPool: s.arenaPool, + }, nil +} + +func (s *service) Init(a *app.App) (err error) { + s.objectStore = app.MustComponent[objectstore.ObjectStore](a) + return nil +} + +func (s *service) Name() (name string) { + return CName +} + +type Repository interface { + WriteTx(ctx context.Context) (anystore.WriteTx, error) + ReadTx(ctx context.Context) (anystore.ReadTx, error) + GetLastStateId(ctx context.Context) (string, error) + GetPrevOrderId(ctx context.Context, orderId string) (string, error) + LoadChatState(ctx context.Context) (*model.ChatState, error) + GetOldestOrderId(ctx context.Context, counterType chatmodel.CounterType) (string, error) + GetReadMessagesAfter(ctx context.Context, afterOrderId string, counterType chatmodel.CounterType) ([]string, error) + GetUnreadMessageIdsInRange(ctx context.Context, afterOrderId, beforeOrderId string, lastStateId string, counterType chatmodel.CounterType) ([]string, error) + SetReadFlag(ctx context.Context, chatObjectId string, msgIds []string, counterType chatmodel.CounterType, value bool) []string + GetMessages(ctx context.Context, req GetMessagesRequest) ([]*chatmodel.Message, error) + HasMyReaction(ctx context.Context, myIdentity string, messageId string, emoji string) (bool, error) + GetMessagesByIds(ctx context.Context, messageIds []string) ([]*chatmodel.Message, error) + GetLastMessages(ctx context.Context, limit uint) ([]*chatmodel.Message, error) +} + type repository struct { collection anystore.Collection arenaPool *anyenc.ArenaPool } -func (s *repository) writeTx(ctx context.Context) (anystore.WriteTx, error) { +func (s *repository) WriteTx(ctx context.Context) (anystore.WriteTx, error) { return s.collection.WriteTx(ctx) } -func (s *repository) readTx(ctx context.Context) (anystore.ReadTx, error) { +func (s *repository) ReadTx(ctx context.Context) (anystore.ReadTx, error) { return s.collection.ReadTx(ctx) } -func (s *repository) getLastStateId(ctx context.Context) (string, error) { +func (s *repository) GetLastStateId(ctx context.Context) (string, error) { lastAddedDate := s.collection.Find(nil).Sort(descStateId).Limit(1) iter, err := lastAddedDate.Iter(ctx) if err != nil { @@ -41,7 +124,7 @@ func (s *repository) getLastStateId(ctx context.Context) (string, error) { if err != nil { return "", fmt.Errorf("get doc: %w", err) } - msg, err := unmarshalMessage(doc.Value()) + msg, err := chatmodel.UnmarshalMessage(doc.Value()) if err != nil { return "", fmt.Errorf("unmarshal message: %w", err) } @@ -50,7 +133,7 @@ func (s *repository) getLastStateId(ctx context.Context) (string, error) { return "", nil } -func (s *repository) getPrevOrderId(ctx context.Context, orderId string) (string, error) { +func (s *repository) GetPrevOrderId(ctx context.Context, orderId string) (string, error) { iter, err := s.collection.Find(query.Key{Path: []string{orderKey, "id"}, Filter: query.NewComp(query.CompOpLt, orderId)}). Sort(descOrder). Limit(1). @@ -73,23 +156,23 @@ func (s *repository) getPrevOrderId(ctx context.Context, orderId string) (string } // initialChatState returns the initial chat state for the chat object from the DB -func (s *repository) loadChatState(ctx context.Context) (*model.ChatState, error) { - txn, err := s.readTx(ctx) +func (s *repository) LoadChatState(ctx context.Context) (*model.ChatState, error) { + txn, err := s.ReadTx(ctx) if err != nil { return nil, fmt.Errorf("start read tx: %w", err) } defer txn.Commit() - messagesState, err := s.loadChatStateByType(txn.Context(), CounterTypeMessage) + messagesState, err := s.loadChatStateByType(txn.Context(), chatmodel.CounterTypeMessage) if err != nil { return nil, fmt.Errorf("get messages state: %w", err) } - mentionsState, err := s.loadChatStateByType(txn.Context(), CounterTypeMention) + mentionsState, err := s.loadChatStateByType(txn.Context(), chatmodel.CounterTypeMention) if err != nil { return nil, fmt.Errorf("get mentions state: %w", err) } - lastStateId, err := s.getLastStateId(txn.Context()) + lastStateId, err := s.GetLastStateId(txn.Context()) if err != nil { return nil, fmt.Errorf("get last added date: %w", err) } @@ -101,15 +184,15 @@ func (s *repository) loadChatState(ctx context.Context) (*model.ChatState, error }, nil } -func (s *repository) loadChatStateByType(ctx context.Context, counterType CounterType) (*model.ChatStateUnreadState, error) { - opts := newReadHandler(counterType, nil) +func (s *repository) loadChatStateByType(ctx context.Context, counterType chatmodel.CounterType) (*model.ChatStateUnreadState, error) { + handler := newReadHandler(counterType) - oldestOrderId, err := s.getOldestOrderId(ctx, opts) + oldestOrderId, err := s.GetOldestOrderId(ctx, counterType) if err != nil { return nil, fmt.Errorf("get oldest order id: %w", err) } - count, err := s.countUnreadMessages(ctx, opts) + count, err := s.countUnreadMessages(ctx, handler) if err != nil { return nil, fmt.Errorf("update messages: %w", err) } @@ -120,7 +203,8 @@ func (s *repository) loadChatStateByType(ctx context.Context, counterType Counte }, nil } -func (s *repository) getOldestOrderId(ctx context.Context, handler readHandler) (string, error) { +func (s *repository) GetOldestOrderId(ctx context.Context, counterType chatmodel.CounterType) (string, error) { + handler := newReadHandler(counterType) unreadQuery := s.collection.Find(handler.getUnreadFilter()).Sort(ascOrder) iter, err := unreadQuery.Limit(1).Iter(ctx) @@ -148,7 +232,9 @@ func (s *repository) countUnreadMessages(ctx context.Context, handler readHandle return unreadQuery.Count(ctx) } -func (s *repository) getReadMessagesAfter(ctx context.Context, afterOrderId string, handler readHandler) ([]string, error) { +func (s *repository) GetReadMessagesAfter(ctx context.Context, afterOrderId string, counterType chatmodel.CounterType) ([]string, error) { + handler := newReadHandler(counterType) + filter := query.And{ query.Key{Path: []string{orderKey, "id"}, Filter: query.NewComp(query.CompOpGte, afterOrderId)}, query.Key{Path: []string{handler.getReadKey()}, Filter: query.NewComp(query.CompOpEq, true)}, @@ -174,7 +260,9 @@ func (s *repository) getReadMessagesAfter(ctx context.Context, afterOrderId stri return msgIds, iter.Err() } -func (s *repository) getUnreadMessageIdsInRange(ctx context.Context, afterOrderId, beforeOrderId string, lastStateId string, handler readHandler) ([]string, error) { +func (s *repository) GetUnreadMessageIdsInRange(ctx context.Context, afterOrderId, beforeOrderId string, lastStateId string, counterType chatmodel.CounterType) ([]string, error) { + handler := newReadHandler(counterType) + qry := query.And{ query.Key{Path: []string{orderKey, "id"}, Filter: query.NewComp(query.CompOpGte, afterOrderId)}, query.Key{Path: []string{orderKey, "id"}, Filter: query.NewComp(query.CompOpLte, beforeOrderId)}, @@ -201,7 +289,9 @@ func (s *repository) getUnreadMessageIdsInRange(ctx context.Context, afterOrderI return msgIds, iter.Err() } -func (r *repository) setReadFlag(ctx context.Context, chatObjectId string, msgIds []string, handler readHandler, value bool) []string { +func (r *repository) SetReadFlag(ctx context.Context, chatObjectId string, msgIds []string, counterType chatmodel.CounterType, value bool) []string { + handler := newReadHandler(counterType) + var idsModified []string for _, id := range msgIds { if id == chatObjectId { @@ -224,7 +314,14 @@ func (r *repository) setReadFlag(ctx context.Context, chatObjectId string, msgId return idsModified } -func (s *repository) getMessages(ctx context.Context, req GetMessagesRequest) ([]*Message, error) { +type GetMessagesRequest struct { + AfterOrderId string + BeforeOrderId string + Limit int + IncludeBoundary bool +} + +func (s *repository) GetMessages(ctx context.Context, req GetMessagesRequest) ([]*chatmodel.Message, error) { var qry anystore.Query if req.AfterOrderId != "" { operator := query.CompOpGt @@ -249,7 +346,7 @@ func (s *repository) getMessages(ctx context.Context, req GetMessagesRequest) ([ return msgs, nil } -func (s *repository) queryMessages(ctx context.Context, query anystore.Query) ([]*Message, error) { +func (s *repository) queryMessages(ctx context.Context, query anystore.Query) ([]*chatmodel.Message, error) { arena := s.arenaPool.Get() defer func() { arena.Reset() @@ -262,14 +359,14 @@ func (s *repository) queryMessages(ctx context.Context, query anystore.Query) ([ } defer iter.Close() - var res []*Message + var res []*chatmodel.Message for iter.Next() { doc, err := iter.Doc() if err != nil { return nil, fmt.Errorf("get doc: %w", err) } - msg, err := unmarshalMessage(doc.Value()) + msg, err := chatmodel.UnmarshalMessage(doc.Value()) if err != nil { return nil, fmt.Errorf("unmarshal message: %w", err) } @@ -282,13 +379,13 @@ func (s *repository) queryMessages(ctx context.Context, query anystore.Query) ([ return res, nil } -func (s *repository) hasMyReaction(ctx context.Context, myIdentity string, messageId string, emoji string) (bool, error) { +func (s *repository) HasMyReaction(ctx context.Context, myIdentity string, messageId string, emoji string) (bool, error) { doc, err := s.collection.FindId(ctx, messageId) if err != nil { return false, fmt.Errorf("find message: %w", err) } - msg, err := unmarshalMessage(doc.Value()) + msg, err := chatmodel.UnmarshalMessage(doc.Value()) if err != nil { return false, fmt.Errorf("unmarshal message: %w", err) } @@ -300,14 +397,14 @@ func (s *repository) hasMyReaction(ctx context.Context, myIdentity string, messa return false, nil } -func (s *repository) getMessagesByIds(ctx context.Context, messageIds []string) ([]*Message, error) { - txn, err := s.readTx(ctx) +func (s *repository) GetMessagesByIds(ctx context.Context, messageIds []string) ([]*chatmodel.Message, error) { + txn, err := s.ReadTx(ctx) if err != nil { return nil, fmt.Errorf("start read tx: %w", err) } defer txn.Commit() - messages := make([]*Message, 0, len(messageIds)) + messages := make([]*chatmodel.Message, 0, len(messageIds)) for _, messageId := range messageIds { obj, err := s.collection.FindId(txn.Context(), messageId) if errors.Is(err, anystore.ErrDocNotFound) { @@ -316,7 +413,7 @@ func (s *repository) getMessagesByIds(ctx context.Context, messageIds []string) if err != nil { return nil, errors.Join(txn.Commit(), fmt.Errorf("find id: %w", err)) } - msg, err := unmarshalMessage(obj.Value()) + msg, err := chatmodel.UnmarshalMessage(obj.Value()) if err != nil { return nil, errors.Join(txn.Commit(), fmt.Errorf("unmarshal message: %w", err)) } @@ -325,7 +422,7 @@ func (s *repository) getMessagesByIds(ctx context.Context, messageIds []string) return messages, nil } -func (s *repository) getLastMessages(ctx context.Context, limit uint) ([]*Message, error) { +func (s *repository) GetLastMessages(ctx context.Context, limit uint) ([]*chatmodel.Message, error) { qry := s.collection.Find(nil).Sort(descOrder).Limit(limit) return s.queryMessages(ctx, qry) } diff --git a/core/block/chats/service.go b/core/block/chats/service.go index 96a60e138..3dd142a2f 100644 --- a/core/block/chats/service.go +++ b/core/block/chats/service.go @@ -14,7 +14,9 @@ import ( "go.uber.org/zap" "github.com/anyproto/anytype-heart/core/block/cache" + "github.com/anyproto/anytype-heart/core/block/chats/chatmodel" "github.com/anyproto/anytype-heart/core/block/chats/chatpush" + "github.com/anyproto/anytype-heart/core/block/chats/chatrepository" "github.com/anyproto/anytype-heart/core/block/editor/chatobject" "github.com/anyproto/anytype-heart/core/domain" "github.com/anyproto/anytype-heart/core/session" @@ -33,15 +35,15 @@ const CName = "core.block.chats" var log = logging.Logger(CName).Desugar() type Service interface { - AddMessage(ctx context.Context, sessionCtx session.Context, chatObjectId string, message *chatobject.Message) (string, error) - EditMessage(ctx context.Context, chatObjectId string, messageId string, newMessage *chatobject.Message) error + AddMessage(ctx context.Context, sessionCtx session.Context, chatObjectId string, message *chatmodel.Message) (string, error) + EditMessage(ctx context.Context, chatObjectId string, messageId string, newMessage *chatmodel.Message) error ToggleMessageReaction(ctx context.Context, chatObjectId string, messageId string, emoji string) error DeleteMessage(ctx context.Context, chatObjectId string, messageId string) error - GetMessages(ctx context.Context, chatObjectId string, req chatobject.GetMessagesRequest) (*chatobject.GetMessagesResponse, error) - GetMessagesByIds(ctx context.Context, chatObjectId string, messageIds []string) ([]*chatobject.Message, error) + GetMessages(ctx context.Context, chatObjectId string, req chatrepository.GetMessagesRequest) (*chatobject.GetMessagesResponse, error) + GetMessagesByIds(ctx context.Context, chatObjectId string, messageIds []string) ([]*chatmodel.Message, error) SubscribeLastMessages(ctx context.Context, chatObjectId string, limit int, subId string) (*chatobject.SubscribeLastMessagesResponse, error) ReadMessages(ctx context.Context, req ReadMessagesRequest) error - UnreadMessages(ctx context.Context, chatObjectId string, afterOrderId string, counterType chatobject.CounterType) error + UnreadMessages(ctx context.Context, chatObjectId string, afterOrderId string, counterType chatmodel.CounterType) error Unsubscribe(chatObjectId string, subId string) error SubscribeToMessagePreviews(ctx context.Context, subId string) (*SubscribeToMessagePreviewsResponse, error) @@ -111,7 +113,7 @@ type ChatPreview struct { SpaceId string ChatObjectId string State *model.ChatState - Message *chatobject.Message + Message *chatmodel.Message Dependencies []*domain.Details } @@ -143,7 +145,7 @@ func (s *service) SubscribeToMessagePreviews(ctx context.Context, subId string) continue } var ( - message *chatobject.Message + message *chatmodel.Message dependencies []*domain.Details ) if len(chatAddResp.Messages) > 0 { @@ -302,7 +304,7 @@ func (s *service) Close(ctx context.Context) error { return err } -func (s *service) AddMessage(ctx context.Context, sessionCtx session.Context, chatObjectId string, message *chatobject.Message) (string, error) { +func (s *service) AddMessage(ctx context.Context, sessionCtx session.Context, chatObjectId string, message *chatmodel.Message) (string, error) { var messageId, spaceId string err := s.chatObjectDo(ctx, chatObjectId, func(sb chatobject.StoreObject) error { var err error @@ -362,7 +364,7 @@ func (s *service) sendPushNotification(spaceId, chatObjectId string, messageId s return } -func (s *service) EditMessage(ctx context.Context, chatObjectId string, messageId string, newMessage *chatobject.Message) error { +func (s *service) EditMessage(ctx context.Context, chatObjectId string, messageId string, newMessage *chatmodel.Message) error { return s.chatObjectDo(ctx, chatObjectId, func(sb chatobject.StoreObject) error { return sb.EditMessage(ctx, messageId, newMessage) }) @@ -380,7 +382,7 @@ func (s *service) DeleteMessage(ctx context.Context, chatObjectId string, messag }) } -func (s *service) GetMessages(ctx context.Context, chatObjectId string, req chatobject.GetMessagesRequest) (*chatobject.GetMessagesResponse, error) { +func (s *service) GetMessages(ctx context.Context, chatObjectId string, req chatrepository.GetMessagesRequest) (*chatobject.GetMessagesResponse, error) { var resp *chatobject.GetMessagesResponse err := s.chatObjectDo(ctx, chatObjectId, func(sb chatobject.StoreObject) error { var err error @@ -393,8 +395,8 @@ func (s *service) GetMessages(ctx context.Context, chatObjectId string, req chat return resp, err } -func (s *service) GetMessagesByIds(ctx context.Context, chatObjectId string, messageIds []string) ([]*chatobject.Message, error) { - var res []*chatobject.Message +func (s *service) GetMessagesByIds(ctx context.Context, chatObjectId string, messageIds []string) ([]*chatmodel.Message, error) { + var res []*chatmodel.Message err := s.chatObjectDo(ctx, chatObjectId, func(sb chatobject.StoreObject) error { msg, err := sb.GetMessagesByIds(ctx, messageIds) if err != nil { @@ -435,7 +437,7 @@ type ReadMessagesRequest struct { AfterOrderId string BeforeOrderId string LastStateId string - CounterType chatobject.CounterType + CounterType chatmodel.CounterType } func (s *service) ReadMessages(ctx context.Context, req ReadMessagesRequest) error { @@ -444,7 +446,7 @@ func (s *service) ReadMessages(ctx context.Context, req ReadMessagesRequest) err }) } -func (s *service) UnreadMessages(ctx context.Context, chatObjectId string, afterOrderId string, counterType chatobject.CounterType) error { +func (s *service) UnreadMessages(ctx context.Context, chatObjectId string, afterOrderId string, counterType chatmodel.CounterType) error { return s.chatObjectDo(ctx, chatObjectId, func(sb chatobject.StoreObject) error { return sb.MarkMessagesAsUnread(ctx, afterOrderId, counterType) }) diff --git a/core/block/editor/chatobject/chathandler.go b/core/block/editor/chatobject/chathandler.go index 1dbe96607..0c9b5b886 100644 --- a/core/block/editor/chatobject/chathandler.go +++ b/core/block/editor/chatobject/chathandler.go @@ -11,13 +11,15 @@ import ( "github.com/anyproto/any-store/query" "github.com/globalsign/mgo/bson" + "github.com/anyproto/anytype-heart/core/block/chats/chatmodel" + "github.com/anyproto/anytype-heart/core/block/chats/chatrepository" "github.com/anyproto/anytype-heart/core/block/editor/storestate" "github.com/anyproto/anytype-heart/pb" "github.com/anyproto/anytype-heart/pkg/lib/pb/model" ) type ChatHandler struct { - repository *repository + repository chatrepository.Repository subscription *subscriptionManager currentIdentity string myParticipantId string @@ -44,7 +46,7 @@ func (d *ChatHandler) Init(ctx context.Context, s *storestate.StoreState) (err e } func (d *ChatHandler) BeforeCreate(ctx context.Context, ch storestate.ChangeOp) error { - msg, err := unmarshalMessage(ch.Value) + msg, err := chatmodel.UnmarshalMessage(ch.Value) if err != nil { return fmt.Errorf("unmarshal message: %w", err) } @@ -72,7 +74,7 @@ func (d *ChatHandler) BeforeCreate(ctx context.Context, ch storestate.ChangeOp) msg.CurrentUserMentioned = isMentioned msg.OrderId = ch.Change.Order - prevOrderId, err := d.repository.getPrevOrderId(ctx, ch.Change.Order) + prevOrderId, err := d.repository.GetPrevOrderId(ctx, ch.Change.Order) if err != nil { return fmt.Errorf("get prev order id: %w", err) } @@ -122,7 +124,7 @@ func (d *ChatHandler) BeforeDelete(ctx context.Context, ch storestate.ChangeOp) return storestate.DeleteModeDelete, fmt.Errorf("get message: %w", err) } - message, err := unmarshalMessage(doc.Value()) + message, err := chatmodel.UnmarshalMessage(doc.Value()) if err != nil { return storestate.DeleteModeDelete, fmt.Errorf("unmarshal message: %w", err) } @@ -149,13 +151,13 @@ func (d *ChatHandler) UpgradeKeyModifier(ch storestate.ChangeOp, key *pb.KeyModi } if modified { - msg, err := unmarshalMessage(result) + msg, err := chatmodel.UnmarshalMessage(result) if err != nil { return nil, false, fmt.Errorf("unmarshal message: %w", err) } switch path { - case reactionsKey: + case chatmodel.ReactionsKey: // Do not parse json, just trim " identity := strings.Trim(key.ModifyValue, `"`) if identity != ch.Change.Creator { @@ -164,7 +166,7 @@ func (d *ChatHandler) UpgradeKeyModifier(ch storestate.ChangeOp, key *pb.KeyModi // TODO Count validation d.subscription.updateReactions(msg) - case contentKey: + case chatmodel.ContentKey: creator := msg.Creator if creator != ch.Change.Creator { return v, false, errors.Join(storestate.ErrValidation, fmt.Errorf("can't modify someone else's message")) diff --git a/core/block/editor/chatobject/chatobject.go b/core/block/editor/chatobject/chatobject.go index 9d9589512..8a9916216 100644 --- a/core/block/editor/chatobject/chatobject.go +++ b/core/block/editor/chatobject/chatobject.go @@ -13,6 +13,8 @@ import ( "go.uber.org/zap" "golang.org/x/exp/slices" + "github.com/anyproto/anytype-heart/core/block/chats/chatmodel" + "github.com/anyproto/anytype-heart/core/block/chats/chatrepository" "github.com/anyproto/anytype-heart/core/block/editor/anystoredebug" "github.com/anyproto/anytype-heart/core/block/editor/smartblock" "github.com/anyproto/anytype-heart/core/block/editor/storestate" @@ -41,25 +43,18 @@ type StoreObject interface { smartblock.SmartBlock anystoredebug.AnystoreDebug - AddMessage(ctx context.Context, sessionCtx session.Context, message *Message) (string, error) - GetMessages(ctx context.Context, req GetMessagesRequest) (*GetMessagesResponse, error) - GetMessagesByIds(ctx context.Context, messageIds []string) ([]*Message, error) - EditMessage(ctx context.Context, messageId string, newMessage *Message) error + AddMessage(ctx context.Context, sessionCtx session.Context, message *chatmodel.Message) (string, error) + GetMessages(ctx context.Context, req chatrepository.GetMessagesRequest) (*GetMessagesResponse, error) + GetMessagesByIds(ctx context.Context, messageIds []string) ([]*chatmodel.Message, error) + EditMessage(ctx context.Context, messageId string, newMessage *chatmodel.Message) error ToggleMessageReaction(ctx context.Context, messageId string, emoji string) error DeleteMessage(ctx context.Context, messageId string) error SubscribeLastMessages(ctx context.Context, req SubscribeLastMessagesRequest) (*SubscribeLastMessagesResponse, error) - MarkReadMessages(ctx context.Context, afterOrderId string, beforeOrderId string, lastStateId string, counterType CounterType) error - MarkMessagesAsUnread(ctx context.Context, afterOrderId string, counterType CounterType) error + MarkReadMessages(ctx context.Context, afterOrderId string, beforeOrderId string, lastStateId string, counterType chatmodel.CounterType) error + MarkMessagesAsUnread(ctx context.Context, afterOrderId string, counterType chatmodel.CounterType) error Unsubscribe(subId string) error } -type GetMessagesRequest struct { - AfterOrderId string - BeforeOrderId string - Limit int - IncludeBoundary bool -} - type AccountService interface { AccountID() string } @@ -76,13 +71,14 @@ type storeObject struct { seenHeadsCollector seenHeadsCollector accountService AccountService storeSource source.Store + repositoryService chatrepository.Service store *storestate.StoreState eventSender event.Sender subscription *subscriptionManager crdtDb anystore.DB spaceIndex spaceindex.Store chatHandler *ChatHandler - repository *repository + repository chatrepository.Repository arenaPool *anyenc.ArenaPool componentCtx context.Context @@ -122,10 +118,11 @@ func (s *storeObject) Init(ctx *smartblock.InitContext) error { return fmt.Errorf("get collection: %w", err) } - s.repository = &repository{ - collection: collection, - arenaPool: s.arenaPool, + s.repository, err = s.repositoryService.RepositoryForCollection(collection) + if err != nil { + return fmt.Errorf("get repository: %w", err) } + // Use Object and Space IDs from source, because object is not initialized yet myParticipantId := domain.NewParticipantId(ctx.Source.SpaceID(), s.accountService.AccountID()) s.subscription = s.newSubscriptionManager( @@ -134,18 +131,15 @@ func (s *storeObject) Init(ctx *smartblock.InitContext) error { myParticipantId, ) - messagesOpts := newReadHandler(CounterTypeMessage, s.subscription) - mentionsOpts := newReadHandler(CounterTypeMention, s.subscription) - // Diff managers should be added before SmartBlock.Init, because they have to be initialized in source.ReadStoreDoc storeSource.RegisterDiffManager(diffManagerMessages, func(removed []string) { - markErr := s.markReadMessages(removed, messagesOpts) + markErr := s.markReadMessages(removed, chatmodel.CounterTypeMessage) if markErr != nil { log.Error("mark read messages", zap.Error(markErr)) } }) storeSource.RegisterDiffManager(diffManagerMentions, func(removed []string) { - markErr := s.markReadMessages(removed, mentionsOpts) + markErr := s.markReadMessages(removed, chatmodel.CounterTypeMention) if markErr != nil { log.Error("mark read mentions", zap.Error(markErr)) } @@ -191,7 +185,7 @@ func (s *storeObject) onUpdate() { s.subscription.flush() } -func (s *storeObject) GetMessageById(ctx context.Context, id string) (*Message, error) { +func (s *storeObject) GetMessageById(ctx context.Context, id string) (*chatmodel.Message, error) { messages, err := s.GetMessagesByIds(ctx, []string{id}) if err != nil { return nil, err @@ -202,17 +196,17 @@ func (s *storeObject) GetMessageById(ctx context.Context, id string) (*Message, return messages[0], nil } -func (s *storeObject) GetMessagesByIds(ctx context.Context, messageIds []string) ([]*Message, error) { - return s.repository.getMessagesByIds(ctx, messageIds) +func (s *storeObject) GetMessagesByIds(ctx context.Context, messageIds []string) ([]*chatmodel.Message, error) { + return s.repository.GetMessagesByIds(ctx, messageIds) } type GetMessagesResponse struct { - Messages []*Message + Messages []*chatmodel.Message ChatState *model.ChatState } -func (s *storeObject) GetMessages(ctx context.Context, req GetMessagesRequest) (*GetMessagesResponse, error) { - msgs, err := s.repository.getMessages(ctx, req) +func (s *storeObject) GetMessages(ctx context.Context, req chatrepository.GetMessagesRequest) (*GetMessagesResponse, error) { + msgs, err := s.repository.GetMessages(ctx, req) if err != nil { return nil, err } @@ -222,7 +216,7 @@ func (s *storeObject) GetMessages(ctx context.Context, req GetMessagesRequest) ( }, nil } -func (s *storeObject) AddMessage(ctx context.Context, sessionCtx session.Context, message *Message) (string, error) { +func (s *storeObject) AddMessage(ctx context.Context, sessionCtx session.Context, message *chatmodel.Message) (string, error) { arena := s.arenaPool.Get() defer func() { arena.Reset() @@ -253,10 +247,8 @@ func (s *storeObject) AddMessage(ctx context.Context, sessionCtx session.Context } if !s.chatHandler.forceNotRead { - for _, counterType := range []CounterType{CounterTypeMessage, CounterTypeMention} { - handler := newReadHandler(counterType, s.subscription) - - err = s.storeSource.MarkSeenHeads(ctx, handler.getDiffManagerName(), []string{messageId}) + for _, counterType := range []chatmodel.CounterType{chatmodel.CounterTypeMessage, chatmodel.CounterTypeMention} { + err = s.storeSource.MarkSeenHeads(ctx, counterType.DiffManagerName(), []string{messageId}) if err != nil { return "", fmt.Errorf("mark read: %w", err) } @@ -280,7 +272,7 @@ func (s *storeObject) DeleteMessage(ctx context.Context, messageId string) error return nil } -func (s *storeObject) EditMessage(ctx context.Context, messageId string, newMessage *Message) error { +func (s *storeObject) EditMessage(ctx context.Context, messageId string, newMessage *chatmodel.Message) error { arena := s.arenaPool.Get() defer func() { arena.Reset() @@ -291,7 +283,7 @@ func (s *storeObject) EditMessage(ctx context.Context, messageId string, newMess newMessage.MarshalAnyenc(obj, arena) builder := storestate.Builder{} - err := builder.Modify(CollectionName, messageId, []string{contentKey}, pb.ModifyOp_Set, obj.Get(contentKey)) + err := builder.Modify(CollectionName, messageId, []string{chatmodel.ContentKey}, pb.ModifyOp_Set, obj.Get(chatmodel.ContentKey)) if err != nil { return fmt.Errorf("modify content: %w", err) } @@ -313,7 +305,7 @@ func (s *storeObject) ToggleMessageReaction(ctx context.Context, messageId strin s.arenaPool.Put(arena) }() - hasReaction, err := s.repository.hasMyReaction(ctx, s.accountService.AccountID(), messageId, emoji) + hasReaction, err := s.repository.HasMyReaction(ctx, s.accountService.AccountID(), messageId, emoji) if err != nil { return fmt.Errorf("check reaction: %w", err) } @@ -321,12 +313,12 @@ func (s *storeObject) ToggleMessageReaction(ctx context.Context, messageId strin builder := storestate.Builder{} if hasReaction { - err = builder.Modify(CollectionName, messageId, []string{reactionsKey, emoji}, pb.ModifyOp_Pull, arena.NewString(s.accountService.AccountID())) + err = builder.Modify(CollectionName, messageId, []string{chatmodel.ReactionsKey, emoji}, pb.ModifyOp_Pull, arena.NewString(s.accountService.AccountID())) if err != nil { return fmt.Errorf("modify content: %w", err) } } else { - err = builder.Modify(CollectionName, messageId, []string{reactionsKey, emoji}, pb.ModifyOp_AddToSet, arena.NewString(s.accountService.AccountID())) + err = builder.Modify(CollectionName, messageId, []string{chatmodel.ReactionsKey, emoji}, pb.ModifyOp_AddToSet, arena.NewString(s.accountService.AccountID())) if err != nil { return fmt.Errorf("modify content: %w", err) } @@ -352,20 +344,20 @@ type SubscribeLastMessagesRequest struct { } type SubscribeLastMessagesResponse struct { - Messages []*Message + Messages []*chatmodel.Message ChatState *model.ChatState // Dependencies per message id Dependencies map[string][]*domain.Details } func (s *storeObject) SubscribeLastMessages(ctx context.Context, req SubscribeLastMessagesRequest) (*SubscribeLastMessagesResponse, error) { - txn, err := s.repository.readTx(ctx) + txn, err := s.repository.ReadTx(ctx) if err != nil { return nil, fmt.Errorf("init read transaction: %w", err) } defer txn.Commit() - messages, err := s.repository.getLastMessages(txn.Context(), uint(req.Limit)) + messages, err := s.repository.GetLastMessages(txn.Context(), uint(req.Limit)) if err != nil { return nil, fmt.Errorf("query messages: %w", err) } @@ -375,7 +367,7 @@ func (s *storeObject) SubscribeLastMessages(ctx context.Context, req SubscribeLa if req.AsyncInit { var previousOrderId string if len(messages) > 0 { - previousOrderId, err = s.repository.getPrevOrderId(txn.Context(), messages[0].OrderId) + previousOrderId, err = s.repository.GetPrevOrderId(txn.Context(), messages[0].OrderId) if err != nil { return nil, fmt.Errorf("get previous order id: %w", err) } diff --git a/core/block/editor/chatobject/reading.go b/core/block/editor/chatobject/reading.go index 13c2e35aa..6aed37c2e 100644 --- a/core/block/editor/chatobject/reading.go +++ b/core/block/editor/chatobject/reading.go @@ -4,162 +4,26 @@ import ( "context" "fmt" - "github.com/anyproto/any-store/anyenc" - "github.com/anyproto/any-store/query" - - "github.com/anyproto/anytype-heart/pkg/lib/pb/model" + "github.com/anyproto/anytype-heart/core/block/chats/chatmodel" ) -type CounterType int - -const ( - CounterTypeMessage = CounterType(iota) - CounterTypeMention -) - -type readHandler interface { - getUnreadFilter() query.Filter - getMessagesFilter() query.Filter - getDiffManagerName() string - getReadKey() string - readModifier(value bool) query.Modifier - - readMessages(newOldestOrderId string, idsModified []string) - unreadMessages(newOldestOrderId string, lastStateId string, msgIds []string) -} - -type readMessagesHandler struct { - subscription *subscriptionManager -} - -func (h *readMessagesHandler) getUnreadFilter() query.Filter { - return query.Not{ - Filter: query.Key{Path: []string{readKey}, Filter: query.NewComp(query.CompOpEq, true)}, - } -} - -func (h *readMessagesHandler) getMessagesFilter() query.Filter { - return nil -} - -func (h *readMessagesHandler) getDiffManagerName() string { - return diffManagerMessages -} - -func (h *readMessagesHandler) getReadKey() string { - return readKey -} - -func (h *readMessagesHandler) readMessages(newOldestOrderId string, idsModified []string) { - h.subscription.updateChatState(func(state *model.ChatState) *model.ChatState { - state.Messages.OldestOrderId = newOldestOrderId - return state - }) - h.subscription.updateMessageRead(idsModified, true) -} - -func (h *readMessagesHandler) unreadMessages(newOldestOrderId string, lastStateId string, msgIds []string) { - h.subscription.updateChatState(func(state *model.ChatState) *model.ChatState { - state.Messages.OldestOrderId = newOldestOrderId - state.LastStateId = lastStateId - return state - }) - h.subscription.updateMessageRead(msgIds, false) -} - -func (h *readMessagesHandler) readModifier(value bool) query.Modifier { - return query.ModifyFunc(func(a *anyenc.Arena, v *anyenc.Value) (result *anyenc.Value, modified bool, err error) { - oldValue := v.GetBool(h.getReadKey()) - if oldValue != value { - v.Set(h.getReadKey(), arenaNewBool(a, value)) - return v, true, nil - } - return v, false, nil - }) -} - -type readMentionsHandler struct { - subscription *subscriptionManager -} - -func (h *readMentionsHandler) getUnreadFilter() query.Filter { - return query.And{ - query.Key{Path: []string{hasMentionKey}, Filter: query.NewComp(query.CompOpEq, true)}, - query.Key{Path: []string{mentionReadKey}, Filter: query.NewComp(query.CompOpEq, false)}, - } -} - -func (h *readMentionsHandler) getMessagesFilter() query.Filter { - return query.Key{Path: []string{hasMentionKey}, Filter: query.NewComp(query.CompOpEq, true)} -} - -func (h *readMentionsHandler) getDiffManagerName() string { - return diffManagerMentions -} - -func (h *readMentionsHandler) getReadKey() string { - return mentionReadKey -} - -func (h *readMentionsHandler) readMessages(newOldestOrderId string, idsModified []string) { - h.subscription.updateChatState(func(state *model.ChatState) *model.ChatState { - state.Mentions.OldestOrderId = newOldestOrderId - return state - }) - h.subscription.updateMentionRead(idsModified, true) -} - -func (h *readMentionsHandler) unreadMessages(newOldestOrderId string, lastStateId string, msgIds []string) { - h.subscription.updateChatState(func(state *model.ChatState) *model.ChatState { - state.Mentions.OldestOrderId = newOldestOrderId - state.LastStateId = lastStateId - return state - }) - h.subscription.updateMentionRead(msgIds, false) -} - -func (h *readMentionsHandler) readModifier(value bool) query.Modifier { - return query.ModifyFunc(func(a *anyenc.Arena, v *anyenc.Value) (result *anyenc.Value, modified bool, err error) { - if v.GetBool(hasMentionKey) { - oldValue := v.GetBool(h.getReadKey()) - if oldValue != value { - v.Set(h.getReadKey(), arenaNewBool(a, value)) - return v, true, nil - } - } - return v, false, nil - }) -} - -func newReadHandler(counterType CounterType, subscription *subscriptionManager) readHandler { - switch counterType { - case CounterTypeMessage: - return &readMessagesHandler{subscription: subscription} - case CounterTypeMention: - return &readMentionsHandler{subscription: subscription} - default: - panic("unknown counter type") - } -} - -func (s *storeObject) MarkReadMessages(ctx context.Context, afterOrderId, beforeOrderId string, lastStateId string, counterType CounterType) error { - handler := newReadHandler(counterType, s.subscription) +func (s *storeObject) MarkReadMessages(ctx context.Context, afterOrderId, beforeOrderId string, lastStateId string, counterType chatmodel.CounterType) error { // 1. select all messages with orderId < beforeOrderId and addedTime < lastDbState // 2. use the last(by orderId) message id as lastHead // 3. update the MarkSeenHeads // 2. mark messages as read in the DB - msgs, err := s.repository.getUnreadMessageIdsInRange(ctx, afterOrderId, beforeOrderId, lastStateId, handler) + msgs, err := s.repository.GetUnreadMessageIdsInRange(ctx, afterOrderId, beforeOrderId, lastStateId, counterType) if err != nil { return fmt.Errorf("get message: %w", err) } // mark the whole tree as seen from the current message - return s.storeSource.MarkSeenHeads(ctx, handler.getDiffManagerName(), msgs) + return s.storeSource.MarkSeenHeads(ctx, counterType.DiffManagerName(), msgs) } -func (s *storeObject) MarkMessagesAsUnread(ctx context.Context, afterOrderId string, counterType CounterType) error { - txn, err := s.repository.writeTx(ctx) +func (s *storeObject) MarkMessagesAsUnread(ctx context.Context, afterOrderId string, counterType chatmodel.CounterType) error { + txn, err := s.repository.WriteTx(ctx) if err != nil { return fmt.Errorf("create tx: %w", err) } @@ -169,8 +33,7 @@ func (s *storeObject) MarkMessagesAsUnread(ctx context.Context, afterOrderId str _ = txn.Rollback() } }() - handler := newReadHandler(counterType, s.subscription) - messageIds, err := s.repository.getReadMessagesAfter(txn.Context(), afterOrderId, handler) + messageIds, err := s.repository.GetReadMessagesAfter(txn.Context(), afterOrderId, counterType) if err != nil { return fmt.Errorf("get read messages: %w", err) } @@ -179,22 +42,22 @@ func (s *storeObject) MarkMessagesAsUnread(ctx context.Context, afterOrderId str return nil } - idsModified := s.repository.setReadFlag(txn.Context(), s.Id(), messageIds, handler, false) + idsModified := s.repository.SetReadFlag(txn.Context(), s.Id(), messageIds, counterType, false) if len(idsModified) == 0 { return nil } - newOldestOrderId, err := s.repository.getOldestOrderId(txn.Context(), handler) + newOldestOrderId, err := s.repository.GetOldestOrderId(txn.Context(), counterType) if err != nil { return fmt.Errorf("get oldest order id: %w", err) } - lastAdded, err := s.repository.getLastStateId(txn.Context()) + lastAdded, err := s.repository.GetLastStateId(txn.Context()) if err != nil { return fmt.Errorf("get last added date: %w", err) } - handler.unreadMessages(newOldestOrderId, lastAdded, idsModified) + s.subscription.unreadMessages(newOldestOrderId, lastAdded, idsModified, counterType) s.subscription.flush() seenHeads, err := s.seenHeadsCollector.collectSeenHeads(ctx, afterOrderId) @@ -214,12 +77,12 @@ func (s *storeObject) MarkMessagesAsUnread(ctx context.Context, afterOrderId str return txn.Commit() } -func (s *storeObject) markReadMessages(changeIds []string, handler readHandler) error { +func (s *storeObject) markReadMessages(changeIds []string, counterType chatmodel.CounterType) error { if len(changeIds) == 0 { return nil } - txn, err := s.repository.writeTx(s.componentCtx) + txn, err := s.repository.WriteTx(s.componentCtx) if err != nil { return fmt.Errorf("start write tx: %w", err) } @@ -230,10 +93,10 @@ func (s *storeObject) markReadMessages(changeIds []string, handler readHandler) } }() - idsModified := s.repository.setReadFlag(txn.Context(), s.Id(), changeIds, handler, true) + idsModified := s.repository.SetReadFlag(txn.Context(), s.Id(), changeIds, counterType, true) if len(idsModified) > 0 { - newOldestOrderId, err := s.repository.getOldestOrderId(txn.Context(), handler) + newOldestOrderId, err := s.repository.GetOldestOrderId(txn.Context(), counterType) if err != nil { return fmt.Errorf("get oldest order id: %w", err) } @@ -244,7 +107,7 @@ func (s *storeObject) markReadMessages(changeIds []string, handler readHandler) return fmt.Errorf("commit: %w", err) } - handler.readMessages(newOldestOrderId, idsModified) + s.subscription.readMessages(newOldestOrderId, idsModified, counterType) s.subscription.flush() } return nil diff --git a/core/block/editor/chatobject/subscription.go b/core/block/editor/chatobject/subscription.go index 751e65084..a95726d7d 100644 --- a/core/block/editor/chatobject/subscription.go +++ b/core/block/editor/chatobject/subscription.go @@ -9,6 +9,8 @@ import ( "github.com/hashicorp/golang-lru/v2/expirable" "go.uber.org/zap" + "github.com/anyproto/anytype-heart/core/block/chats/chatmodel" + "github.com/anyproto/anytype-heart/core/block/chats/chatrepository" "github.com/anyproto/anytype-heart/core/domain" "github.com/anyproto/anytype-heart/core/event" "github.com/anyproto/anytype-heart/core/session" @@ -38,7 +40,7 @@ type subscriptionManager struct { // Deps spaceIndex spaceindex.Store eventSender event.Sender - repository *repository + repository chatrepository.Repository } type subscription struct { @@ -106,7 +108,7 @@ func (s *subscriptionManager) setSessionContext(ctx session.Context) { } func (s *subscriptionManager) loadChatState(ctx context.Context) error { - state, err := s.repository.loadChatState(ctx) + state, err := s.repository.LoadChatState(ctx) if err != nil { return err } @@ -132,7 +134,7 @@ func (s *subscriptionManager) flush() { // Reload ChatState after commit if s.needReloadState { s.updateChatState(func(state *model.ChatState) *model.ChatState { - newState, err := s.repository.loadChatState(s.componentCtx) + newState, err := s.repository.LoadChatState(s.componentCtx) if err != nil { log.Error("failed to reload chat state", zap.Error(err)) return state @@ -179,7 +181,7 @@ func (s *subscriptionManager) getIdentityDetails(identity string) (*domain.Detai return details, nil } -func (s *subscriptionManager) add(prevOrderId string, message *Message) { +func (s *subscriptionManager) add(prevOrderId string, message *chatmodel.Message) { if !s.canSend() { return } @@ -203,7 +205,7 @@ func (s *subscriptionManager) add(prevOrderId string, message *Message) { })) } -func (s *subscriptionManager) collectMessageDependencies(message *Message) []*domain.Details { +func (s *subscriptionManager) collectMessageDependencies(message *chatmodel.Message) []*domain.Details { var result []*domain.Details identityDetails, err := s.getIdentityDetails(message.Creator) @@ -237,7 +239,7 @@ func (s *subscriptionManager) delete(messageId string) { s.needReloadState = true } -func (s *subscriptionManager) updateFull(message *Message) { +func (s *subscriptionManager) updateFull(message *chatmodel.Message) { if !s.canSend() { return } @@ -251,7 +253,7 @@ func (s *subscriptionManager) updateFull(message *Message) { })) } -func (s *subscriptionManager) updateReactions(message *Message) { +func (s *subscriptionManager) updateReactions(message *chatmodel.Message) { if !s.canSend() { return } @@ -321,6 +323,40 @@ func (s *subscriptionManager) canSend() bool { return true } +func (s *subscriptionManager) readMessages(newOldestOrderId string, idsModified []string, counterType chatmodel.CounterType) { + if counterType == chatmodel.CounterTypeMessage { + s.updateChatState(func(state *model.ChatState) *model.ChatState { + state.Messages.OldestOrderId = newOldestOrderId + return state + }) + s.updateMessageRead(idsModified, true) + } else { + s.updateChatState(func(state *model.ChatState) *model.ChatState { + state.Mentions.OldestOrderId = newOldestOrderId + return state + }) + s.updateMentionRead(idsModified, true) + } +} + +func (s *subscriptionManager) unreadMessages(newOldestOrderId string, lastStateId string, msgIds []string, counterType chatmodel.CounterType) { + if counterType == chatmodel.CounterTypeMessage { + s.updateChatState(func(state *model.ChatState) *model.ChatState { + state.Messages.OldestOrderId = newOldestOrderId + state.LastStateId = lastStateId + return state + }) + s.updateMessageRead(msgIds, false) + } else { + s.updateChatState(func(state *model.ChatState) *model.ChatState { + state.Mentions.OldestOrderId = newOldestOrderId + state.LastStateId = lastStateId + return state + }) + s.updateMentionRead(msgIds, false) + } +} + func copyChatState(state *model.ChatState) *model.ChatState { if state == nil { return nil diff --git a/core/chats.go b/core/chats.go index de8329891..764135c73 100644 --- a/core/chats.go +++ b/core/chats.go @@ -8,7 +8,8 @@ import ( "github.com/gogo/protobuf/types" "github.com/anyproto/anytype-heart/core/block/chats" - "github.com/anyproto/anytype-heart/core/block/editor/chatobject" + "github.com/anyproto/anytype-heart/core/block/chats/chatmodel" + "github.com/anyproto/anytype-heart/core/block/chats/chatrepository" "github.com/anyproto/anytype-heart/pb" "github.com/anyproto/anytype-heart/pkg/lib/pb/model" ) @@ -17,7 +18,7 @@ func (mw *Middleware) ChatAddMessage(cctx context.Context, req *pb.RpcChatAddMes ctx := mw.newContext(cctx) chatService := mustService[chats.Service](mw) - messageId, err := chatService.AddMessage(cctx, ctx, req.ChatObjectId, &chatobject.Message{ChatMessage: req.Message}) + messageId, err := chatService.AddMessage(cctx, ctx, req.ChatObjectId, &chatmodel.Message{ChatMessage: req.Message}) if err != nil { code := mapErrorCode[pb.RpcChatAddMessageResponseErrorCode](err) return &pb.RpcChatAddMessageResponse{ @@ -36,7 +37,7 @@ func (mw *Middleware) ChatAddMessage(cctx context.Context, req *pb.RpcChatAddMes func (mw *Middleware) ChatEditMessageContent(cctx context.Context, req *pb.RpcChatEditMessageContentRequest) *pb.RpcChatEditMessageContentResponse { chatService := mustService[chats.Service](mw) - err := chatService.EditMessage(cctx, req.ChatObjectId, req.MessageId, &chatobject.Message{ChatMessage: req.EditedMessage}) + err := chatService.EditMessage(cctx, req.ChatObjectId, req.MessageId, &chatmodel.Message{ChatMessage: req.EditedMessage}) if err != nil { code := mapErrorCode[pb.RpcChatEditMessageContentResponseErrorCode](err) return &pb.RpcChatEditMessageContentResponse{ @@ -84,7 +85,7 @@ func (mw *Middleware) ChatDeleteMessage(cctx context.Context, req *pb.RpcChatDel func (mw *Middleware) ChatGetMessages(cctx context.Context, req *pb.RpcChatGetMessagesRequest) *pb.RpcChatGetMessagesResponse { chatService := mustService[chats.Service](mw) - resp, err := chatService.GetMessages(cctx, req.ChatObjectId, chatobject.GetMessagesRequest{ + resp, err := chatService.GetMessages(cctx, req.ChatObjectId, chatrepository.GetMessagesRequest{ AfterOrderId: req.AfterOrderId, BeforeOrderId: req.BeforeOrderId, Limit: int(req.Limit), @@ -226,7 +227,7 @@ func (mw *Middleware) ChatReadMessages(cctx context.Context, request *pb.RpcChat AfterOrderId: request.AfterOrderId, BeforeOrderId: request.BeforeOrderId, LastStateId: request.LastStateId, - CounterType: chatobject.CounterType(request.Type), + CounterType: chatmodel.CounterType(request.Type), }) if err != nil { code := mapErrorCode(err, @@ -244,7 +245,7 @@ func (mw *Middleware) ChatReadMessages(cctx context.Context, request *pb.RpcChat func (mw *Middleware) ChatUnreadMessages(cctx context.Context, request *pb.RpcChatUnreadRequest) *pb.RpcChatUnreadResponse { chatService := mustService[chats.Service](mw) - err := chatService.UnreadMessages(cctx, request.ChatObjectId, request.AfterOrderId, chatobject.CounterType(request.Type)) + err := chatService.UnreadMessages(cctx, request.ChatObjectId, request.AfterOrderId, chatmodel.CounterType(request.Type)) if err != nil { code := mapErrorCode[pb.RpcChatUnreadResponseErrorCode](err) return &pb.RpcChatUnreadResponse{ @@ -257,7 +258,7 @@ func (mw *Middleware) ChatUnreadMessages(cctx context.Context, request *pb.RpcCh return &pb.RpcChatUnreadResponse{} } -func messagesToProto(msgs []*chatobject.Message) []*model.ChatMessage { +func messagesToProto(msgs []*chatmodel.Message) []*model.ChatMessage { res := make([]*model.ChatMessage, 0, len(msgs)) for _, msg := range msgs { res = append(res, msg.ChatMessage) From 8370ef8458821850e31c660b4e828e42a7673b9b Mon Sep 17 00:00:00 2001 From: Sergey Date: Tue, 13 May 2025 11:19:36 +0200 Subject: [PATCH 022/164] Refactor chats: fix build --- core/block/chats/chatrepository/repository.go | 66 +++++++++++++++---- core/block/editor/chatobject/chatobject.go | 19 ++---- core/block/editor/factory.go | 47 ++++++------- 3 files changed, 81 insertions(+), 51 deletions(-) diff --git a/core/block/chats/chatrepository/repository.go b/core/block/chats/chatrepository/repository.go index 2502627c0..0c48e5e32 100644 --- a/core/block/chats/chatrepository/repository.go +++ b/core/block/chats/chatrepository/repository.go @@ -14,6 +14,7 @@ import ( "go.uber.org/zap" "github.com/anyproto/anytype-heart/core/block/chats/chatmodel" + "github.com/anyproto/anytype-heart/core/block/object/idresolver" "github.com/anyproto/anytype-heart/pkg/lib/localstore/objectstore" "github.com/anyproto/anytype-heart/pkg/lib/logging" "github.com/anyproto/anytype-heart/pkg/lib/pb/model" @@ -43,7 +44,7 @@ const ( ) type Service interface { - app.Component + app.ComponentRunnable Repository(chatObjectId string) (Repository, error) // RepositoryForCollection is useful when you already have the chat object collection @@ -51,8 +52,12 @@ type Service interface { } type service struct { - objectStore objectstore.ObjectStore - arenaPool *anyenc.ArenaPool + componentCtx context.Context + componentCtxCancel context.CancelFunc + + objectStore objectstore.ObjectStore + spaceIdResolver idresolver.Resolver + arenaPool *anyenc.ArenaPool } func New() Service { @@ -61,9 +66,51 @@ func New() Service { } } +func (s *service) Run(ctx context.Context) error { + s.componentCtx, s.componentCtxCancel = context.WithCancel(ctx) + return nil +} + +func (s *service) Close(ctx context.Context) error { + if s.componentCtxCancel != nil { + s.componentCtxCancel() + } + return nil +} + +func (s *service) Init(a *app.App) (err error) { + s.objectStore = app.MustComponent[objectstore.ObjectStore](a) + s.spaceIdResolver = app.MustComponent[idresolver.Resolver](a) + return nil +} + +func (s *service) Name() (name string) { + return CName +} + func (s *service) Repository(chatObjectId string) (Repository, error) { - // TODO implement me - panic("implement me") + spaceId, err := s.spaceIdResolver.ResolveSpaceID(chatObjectId) + if err != nil { + return nil, fmt.Errorf("resolve space id: %w", err) + } + + crdtDb := s.objectStore.GetCrdtDb(spaceId) + collectionName := chatObjectId + "chats" + collection, err := crdtDb.OpenCollection(s.componentCtx, collectionName) + if errors.Is(err, anystore.ErrCollectionNotFound) { + collection, err = crdtDb.CreateCollection(s.componentCtx, collectionName) + if err != nil { + return nil, fmt.Errorf("create collection: %w", err) + } + } + if err != nil { + return nil, fmt.Errorf("get collection: %w", err) + } + + return &repository{ + collection: collection, + arenaPool: s.arenaPool, + }, nil } func (s *service) RepositoryForCollection(col anystore.Collection) (Repository, error) { @@ -73,15 +120,6 @@ func (s *service) RepositoryForCollection(col anystore.Collection) (Repository, }, nil } -func (s *service) Init(a *app.App) (err error) { - s.objectStore = app.MustComponent[objectstore.ObjectStore](a) - return nil -} - -func (s *service) Name() (name string) { - return CName -} - type Repository interface { WriteTx(ctx context.Context) (anystore.WriteTx, error) ReadTx(ctx context.Context) (anystore.ReadTx, error) diff --git a/core/block/editor/chatobject/chatobject.go b/core/block/editor/chatobject/chatobject.go index 8a9916216..7c59e1d90 100644 --- a/core/block/editor/chatobject/chatobject.go +++ b/core/block/editor/chatobject/chatobject.go @@ -2,7 +2,6 @@ package chatobject import ( "context" - "errors" "fmt" "time" @@ -85,7 +84,7 @@ type storeObject struct { componentCtxCancel context.CancelFunc } -func New(sb smartblock.SmartBlock, accountService AccountService, eventSender event.Sender, crdtDb anystore.DB, spaceIndex spaceindex.Store) StoreObject { +func New(sb smartblock.SmartBlock, accountService AccountService, eventSender event.Sender, crdtDb anystore.DB, repositoryService chatrepository.Service, spaceIndex spaceindex.Store) StoreObject { ctx, cancel := context.WithCancel(context.Background()) return &storeObject{ SmartBlock: sb, @@ -94,6 +93,7 @@ func New(sb smartblock.SmartBlock, accountService AccountService, eventSender ev arenaPool: &anyenc.ArenaPool{}, eventSender: eventSender, crdtDb: crdtDb, + repositoryService: repositoryService, componentCtx: ctx, componentCtxCancel: cancel, spaceIndex: spaceIndex, @@ -106,19 +106,8 @@ func (s *storeObject) Init(ctx *smartblock.InitContext) error { return fmt.Errorf("source is not a store") } - collectionName := storeSource.Id() + CollectionName - collection, err := s.crdtDb.OpenCollection(ctx.Ctx, collectionName) - if errors.Is(err, anystore.ErrCollectionNotFound) { - collection, err = s.crdtDb.CreateCollection(ctx.Ctx, collectionName) - if err != nil { - return fmt.Errorf("create collection: %w", err) - } - } - if err != nil { - return fmt.Errorf("get collection: %w", err) - } - - s.repository, err = s.repositoryService.RepositoryForCollection(collection) + var err error + s.repository, err = s.repositoryService.Repository(storeSource.Id()) if err != nil { return fmt.Errorf("get repository: %w", err) } diff --git a/core/block/editor/factory.go b/core/block/editor/factory.go index a65c898c3..c946b3005 100644 --- a/core/block/editor/factory.go +++ b/core/block/editor/factory.go @@ -10,6 +10,7 @@ import ( "github.com/anyproto/anytype-heart/core/anytype/config" "github.com/anyproto/anytype-heart/core/block/cache" + "github.com/anyproto/anytype-heart/core/block/chats/chatrepository" "github.com/anyproto/anytype-heart/core/block/editor/accountobject" "github.com/anyproto/anytype-heart/core/block/editor/bookmark" "github.com/anyproto/anytype-heart/core/block/editor/chatobject" @@ -52,27 +53,28 @@ type deviceService interface { } type ObjectFactory struct { - bookmarkService bookmark.BookmarkService - fileBlockService file.BlockService - layoutConverter converter.LayoutConverter - objectStore objectstore.ObjectStore - sourceService source.Service - tempDirProvider core.TempDirProvider - fileStore filestore.FileStore - fileService files.Service - config *config.Config - picker cache.ObjectGetter - eventSender event.Sender - indexer smartblock.Indexer - spaceService spaceService - accountService accountService - fileObjectService fileobject.Service - processService process.Service - fileUploaderService fileuploader.Service - fileReconciler reconciler.Reconciler - objectDeleter ObjectDeleter - deviceService deviceService - spaceIdResolver idresolver.Resolver + bookmarkService bookmark.BookmarkService + fileBlockService file.BlockService + layoutConverter converter.LayoutConverter + objectStore objectstore.ObjectStore + sourceService source.Service + tempDirProvider core.TempDirProvider + fileStore filestore.FileStore + fileService files.Service + config *config.Config + picker cache.ObjectGetter + eventSender event.Sender + indexer smartblock.Indexer + spaceService spaceService + accountService accountService + fileObjectService fileobject.Service + processService process.Service + fileUploaderService fileuploader.Service + fileReconciler reconciler.Reconciler + objectDeleter ObjectDeleter + deviceService deviceService + spaceIdResolver idresolver.Resolver + chatRepositoryService chatrepository.Service } func NewObjectFactory() *ObjectFactory { @@ -104,6 +106,7 @@ func (f *ObjectFactory) Init(a *app.App) (err error) { f.fileReconciler = app.MustComponent[reconciler.Reconciler](a) f.deviceService = app.MustComponent[deviceService](a) f.spaceIdResolver = app.MustComponent[idresolver.Resolver](a) + f.chatRepositoryService = app.MustComponent[chatrepository.Service](a) return nil } @@ -217,7 +220,7 @@ func (f *ObjectFactory) New(space smartblock.Space, sbType coresb.SmartBlockType case coresb.SmartBlockTypeDevicesObject: return NewDevicesObject(sb, f.deviceService), nil case coresb.SmartBlockTypeChatDerivedObject: - return chatobject.New(sb, f.accountService, f.eventSender, f.objectStore.GetCrdtDb(space.Id()), spaceIndex), nil + return chatobject.New(sb, f.accountService, f.eventSender, f.objectStore.GetCrdtDb(space.Id()), f.chatRepositoryService, spaceIndex), nil case coresb.SmartBlockTypeAccountObject: return accountobject.New(sb, f.accountService.Keys(), spaceIndex, f.layoutConverter, f.fileObjectService, f.objectStore.GetCrdtDb(space.Id()), f.config), nil default: From 331957a4b545eff864eb14d834b7834357c171af Mon Sep 17 00:00:00 2001 From: Sergey Date: Tue, 13 May 2025 12:57:27 +0200 Subject: [PATCH 023/164] Refactor chats: extract subscriptions --- core/anytype/bootstrap.go | 2 + core/block/chats/chatrepository/repository.go | 3 +- .../chatsubscription/manager.go} | 71 +++--- core/block/chats/chatsubscription/service.go | 230 ++++++++++++++++++ core/block/chats/service.go | 63 ++--- core/block/editor/chatobject/chathandler.go | 20 +- core/block/editor/chatobject/chatobject.go | 143 +++-------- core/block/editor/chatobject/reading.go | 12 +- core/block/editor/factory.go | 49 ++-- 9 files changed, 377 insertions(+), 216 deletions(-) rename core/block/{editor/chatobject/subscription.go => chats/chatsubscription/manager.go} (81%) create mode 100644 core/block/chats/chatsubscription/service.go diff --git a/core/anytype/bootstrap.go b/core/anytype/bootstrap.go index 3326af801..ca10ee62a 100644 --- a/core/anytype/bootstrap.go +++ b/core/anytype/bootstrap.go @@ -42,6 +42,7 @@ import ( decorator "github.com/anyproto/anytype-heart/core/block/bookmark/bookmarkimporter" "github.com/anyproto/anytype-heart/core/block/chats" "github.com/anyproto/anytype-heart/core/block/chats/chatrepository" + "github.com/anyproto/anytype-heart/core/block/chats/chatsubscription" "github.com/anyproto/anytype-heart/core/block/collection" "github.com/anyproto/anytype-heart/core/block/dataviewservice" "github.com/anyproto/anytype-heart/core/block/detailservice" @@ -266,6 +267,7 @@ func Bootstrap(a *app.App, components ...app.Component) { Register(fileoffloader.New()). Register(fileacl.New()). Register(chatrepository.New()). + Register(chatsubscription.New()). Register(chats.New()). Register(sourceimpl.New()). Register(spacefactory.New()). diff --git a/core/block/chats/chatrepository/repository.go b/core/block/chats/chatrepository/repository.go index 0c48e5e32..325a4758a 100644 --- a/core/block/chats/chatrepository/repository.go +++ b/core/block/chats/chatrepository/repository.go @@ -67,7 +67,6 @@ func New() Service { } func (s *service) Run(ctx context.Context) error { - s.componentCtx, s.componentCtxCancel = context.WithCancel(ctx) return nil } @@ -79,6 +78,8 @@ func (s *service) Close(ctx context.Context) error { } func (s *service) Init(a *app.App) (err error) { + s.componentCtx, s.componentCtxCancel = context.WithCancel(context.Background()) + s.objectStore = app.MustComponent[objectstore.ObjectStore](a) s.spaceIdResolver = app.MustComponent[idresolver.Resolver](a) return nil diff --git a/core/block/editor/chatobject/subscription.go b/core/block/chats/chatsubscription/manager.go similarity index 81% rename from core/block/editor/chatobject/subscription.go rename to core/block/chats/chatsubscription/manager.go index a95726d7d..2236c8083 100644 --- a/core/block/editor/chatobject/subscription.go +++ b/core/block/chats/chatsubscription/manager.go @@ -1,10 +1,10 @@ -package chatobject +package chatsubscription import ( "context" "slices" "sort" - "time" + "sync" "github.com/hashicorp/golang-lru/v2/expirable" "go.uber.org/zap" @@ -20,6 +20,8 @@ import ( ) type subscriptionManager struct { + lock sync.Mutex + componentCtx context.Context spaceId string @@ -48,19 +50,12 @@ type subscription struct { withDependencies bool } -func (s *storeObject) newSubscriptionManager(fullId domain.FullID, myIdentity string, myParticipantId string) *subscriptionManager { - return &subscriptionManager{ - componentCtx: s.componentCtx, - spaceId: fullId.SpaceID, - chatId: fullId.ObjectID, - eventSender: s.eventSender, - spaceIndex: s.spaceIndex, - myIdentity: myIdentity, - myParticipantId: myParticipantId, - identityCache: expirable.NewLRU[string, *domain.Details](50, nil, time.Minute), - repository: s.repository, - subscriptions: map[string]*subscription{}, - } +func (s *subscriptionManager) Lock() { + s.lock.Lock() +} + +func (s *subscriptionManager) Unlock() { + s.lock.Unlock() } // subscribe subscribes to messages. It returns true if there was no subscriptionManager with provided id @@ -80,7 +75,7 @@ func (s *subscriptionManager) unsubscribe(subId string) { delete(s.subscriptions, subId) } -func (s *subscriptionManager) isActive() bool { +func (s *subscriptionManager) IsActive() bool { return len(s.subscriptions) > 0 } @@ -102,8 +97,8 @@ func (s *subscriptionManager) listSubIds() []string { return subIds } -// setSessionContext sets the session context for the current operation -func (s *subscriptionManager) setSessionContext(ctx session.Context) { +// SetSessionContext sets the session context for the current operation +func (s *subscriptionManager) SetSessionContext(ctx session.Context) { s.sessionContext = ctx } @@ -116,24 +111,24 @@ func (s *subscriptionManager) loadChatState(ctx context.Context) error { return nil } -func (s *subscriptionManager) getChatState() *model.ChatState { +func (s *subscriptionManager) GetChatState() *model.ChatState { return copyChatState(s.chatState) } -func (s *subscriptionManager) updateChatState(updater func(*model.ChatState) *model.ChatState) { +func (s *subscriptionManager) UpdateChatState(updater func(*model.ChatState) *model.ChatState) { s.chatState = updater(s.chatState) s.chatStateUpdated = true } -// flush is called after commiting changes -func (s *subscriptionManager) flush() { +// Flush is called after commiting changes +func (s *subscriptionManager) Flush() { if !s.canSend() { return } // Reload ChatState after commit if s.needReloadState { - s.updateChatState(func(state *model.ChatState) *model.ChatState { + s.UpdateChatState(func(state *model.ChatState) *model.ChatState { newState, err := s.repository.LoadChatState(s.componentCtx) if err != nil { log.Error("failed to reload chat state", zap.Error(err)) @@ -149,7 +144,7 @@ func (s *subscriptionManager) flush() { if s.chatStateUpdated { events = append(events, event.NewMessage(s.spaceId, &pb.EventMessageValueOfChatStateUpdate{ChatStateUpdate: &pb.EventChatUpdateState{ - State: s.getChatState(), + State: s.GetChatState(), SubIds: s.listSubIds(), }})) s.chatStateUpdated = false @@ -163,7 +158,7 @@ func (s *subscriptionManager) flush() { s.sessionContext.SetMessages(s.chatId, events) s.eventSender.BroadcastToOtherSessions(s.sessionContext.ID(), ev) s.sessionContext = nil - } else if s.isActive() { + } else if s.IsActive() { s.eventSender.Broadcast(ev) } } @@ -181,7 +176,7 @@ func (s *subscriptionManager) getIdentityDetails(identity string) (*domain.Detai return details, nil } -func (s *subscriptionManager) add(prevOrderId string, message *chatmodel.Message) { +func (s *subscriptionManager) Add(prevOrderId string, message *chatmodel.Message) { if !s.canSend() { return } @@ -226,7 +221,7 @@ func (s *subscriptionManager) collectMessageDependencies(message *chatmodel.Mess return result } -func (s *subscriptionManager) delete(messageId string) { +func (s *subscriptionManager) Delete(messageId string) { ev := &pb.EventChatDelete{ Id: messageId, SubIds: s.listSubIds(), @@ -239,7 +234,7 @@ func (s *subscriptionManager) delete(messageId string) { s.needReloadState = true } -func (s *subscriptionManager) updateFull(message *chatmodel.Message) { +func (s *subscriptionManager) UpdateFull(message *chatmodel.Message) { if !s.canSend() { return } @@ -253,7 +248,7 @@ func (s *subscriptionManager) updateFull(message *chatmodel.Message) { })) } -func (s *subscriptionManager) updateReactions(message *chatmodel.Message) { +func (s *subscriptionManager) UpdateReactions(message *chatmodel.Message) { if !s.canSend() { return } @@ -270,7 +265,7 @@ func (s *subscriptionManager) updateReactions(message *chatmodel.Message) { // updateMessageRead updates the read status of the messages with the given ids // read ids should ONLY contain ids if they were actually modified in the DB func (s *subscriptionManager) updateMessageRead(ids []string, read bool) { - s.updateChatState(func(state *model.ChatState) *model.ChatState { + s.UpdateChatState(func(state *model.ChatState) *model.ChatState { if read { state.Messages.Counter -= int32(len(ids)) } else { @@ -292,7 +287,7 @@ func (s *subscriptionManager) updateMessageRead(ids []string, read bool) { } func (s *subscriptionManager) updateMentionRead(ids []string, read bool) { - s.updateChatState(func(state *model.ChatState) *model.ChatState { + s.UpdateChatState(func(state *model.ChatState) *model.ChatState { if read { state.Mentions.Counter -= int32(len(ids)) } else { @@ -317,21 +312,21 @@ func (s *subscriptionManager) canSend() bool { if s.sessionContext != nil { return true } - if !s.isActive() { + if !s.IsActive() { return false } return true } -func (s *subscriptionManager) readMessages(newOldestOrderId string, idsModified []string, counterType chatmodel.CounterType) { +func (s *subscriptionManager) ReadMessages(newOldestOrderId string, idsModified []string, counterType chatmodel.CounterType) { if counterType == chatmodel.CounterTypeMessage { - s.updateChatState(func(state *model.ChatState) *model.ChatState { + s.UpdateChatState(func(state *model.ChatState) *model.ChatState { state.Messages.OldestOrderId = newOldestOrderId return state }) s.updateMessageRead(idsModified, true) } else { - s.updateChatState(func(state *model.ChatState) *model.ChatState { + s.UpdateChatState(func(state *model.ChatState) *model.ChatState { state.Mentions.OldestOrderId = newOldestOrderId return state }) @@ -339,16 +334,16 @@ func (s *subscriptionManager) readMessages(newOldestOrderId string, idsModified } } -func (s *subscriptionManager) unreadMessages(newOldestOrderId string, lastStateId string, msgIds []string, counterType chatmodel.CounterType) { +func (s *subscriptionManager) UnreadMessages(newOldestOrderId string, lastStateId string, msgIds []string, counterType chatmodel.CounterType) { if counterType == chatmodel.CounterTypeMessage { - s.updateChatState(func(state *model.ChatState) *model.ChatState { + s.UpdateChatState(func(state *model.ChatState) *model.ChatState { state.Messages.OldestOrderId = newOldestOrderId state.LastStateId = lastStateId return state }) s.updateMessageRead(msgIds, false) } else { - s.updateChatState(func(state *model.ChatState) *model.ChatState { + s.UpdateChatState(func(state *model.ChatState) *model.ChatState { state.Mentions.OldestOrderId = newOldestOrderId state.LastStateId = lastStateId return state diff --git a/core/block/chats/chatsubscription/service.go b/core/block/chats/chatsubscription/service.go new file mode 100644 index 000000000..bcdd122e8 --- /dev/null +++ b/core/block/chats/chatsubscription/service.go @@ -0,0 +1,230 @@ +package chatsubscription + +import ( + "context" + "fmt" + "sync" + "time" + + "github.com/anyproto/any-sync/app" + "github.com/hashicorp/golang-lru/v2/expirable" + + "github.com/anyproto/anytype-heart/core/block/chats/chatmodel" + "github.com/anyproto/anytype-heart/core/block/chats/chatrepository" + "github.com/anyproto/anytype-heart/core/block/object/idresolver" + "github.com/anyproto/anytype-heart/core/domain" + "github.com/anyproto/anytype-heart/core/event" + "github.com/anyproto/anytype-heart/core/session" + "github.com/anyproto/anytype-heart/pkg/lib/localstore/objectstore" + "github.com/anyproto/anytype-heart/pkg/lib/logging" + "github.com/anyproto/anytype-heart/pkg/lib/pb/model" +) + +const CName = "chatsubscription" + +var log = logging.Logger(CName).Desugar() + +type Manager interface { + sync.Locker + + IsActive() bool + GetChatState() *model.ChatState + SetSessionContext(ctx session.Context) + UpdateReactions(message *chatmodel.Message) + UpdateFull(message *chatmodel.Message) + UpdateChatState(updater func(*model.ChatState) *model.ChatState) + Add(prevOrderId string, message *chatmodel.Message) + Delete(messageId string) + Flush() + ReadMessages(newOldestOrderId string, idsModified []string, counterType chatmodel.CounterType) + UnreadMessages(newOldestOrderId string, lastStateId string, msgIds []string, counterType chatmodel.CounterType) +} + +type Service interface { + app.ComponentRunnable + GetManager(chatObjectId string) (Manager, error) + + SubscribeLastMessages(ctx context.Context, req SubscribeLastMessagesRequest) (*SubscribeLastMessagesResponse, error) + Unsubscribe(chatObjectId string, subId string) error +} + +type AccountService interface { + AccountID() string +} + +type service struct { + componentCtx context.Context + componentCtxCancel context.CancelFunc + + spaceIdResolver idresolver.Resolver + objectStore objectstore.ObjectStore + eventSender event.Sender + repositoryService chatrepository.Service + accountService AccountService + + identityCache *expirable.LRU[string, *domain.Details] + lock sync.Mutex + managers map[string]*subscriptionManager +} + +func New() Service { + return &service{ + managers: make(map[string]*subscriptionManager), + } +} + +func (s *service) Init(a *app.App) (err error) { + s.componentCtx, s.componentCtxCancel = context.WithCancel(context.Background()) + + s.spaceIdResolver = app.MustComponent[idresolver.Resolver](a) + s.objectStore = app.MustComponent[objectstore.ObjectStore](a) + s.eventSender = app.MustComponent[event.Sender](a) + s.repositoryService = app.MustComponent[chatrepository.Service](a) + s.accountService = app.MustComponent[AccountService](a) + s.identityCache = expirable.NewLRU[string, *domain.Details](50, nil, time.Minute) + return nil +} + +func (s *service) Name() (name string) { + return CName +} + +func (s *service) Run(ctx context.Context) (err error) { + return nil +} + +func (s *service) Close(ctx context.Context) (err error) { + if s.componentCtxCancel != nil { + s.componentCtxCancel() + } + return nil +} + +func (s *service) GetManager(chatObjectId string) (Manager, error) { + return s.getManager(chatObjectId) +} + +func (s *service) getManager(chatObjectId string) (*subscriptionManager, error) { + s.lock.Lock() + defer s.lock.Unlock() + + mngr, ok := s.managers[chatObjectId] + if ok { + return mngr, nil + } + + spaceId, err := s.spaceIdResolver.ResolveSpaceID(chatObjectId) + if err != nil { + return nil, fmt.Errorf("resolve space id: %w", err) + } + + currentIdentity := s.accountService.AccountID() + currentParticipantId := domain.NewParticipantId(spaceId, currentIdentity) + + repository, err := s.repositoryService.Repository(chatObjectId) + if err != nil { + return nil, fmt.Errorf("get repository: %w", err) + } + mngr = &subscriptionManager{ + componentCtx: s.componentCtx, + spaceId: spaceId, + chatId: chatObjectId, + myIdentity: currentIdentity, + myParticipantId: currentParticipantId, + identityCache: s.identityCache, + subscriptions: make(map[string]*subscription), + spaceIndex: s.objectStore.SpaceIndex(spaceId), + eventSender: s.eventSender, + repository: repository, + } + + err = mngr.loadChatState(s.componentCtx) + if err != nil { + return nil, fmt.Errorf("init chat state: %w", err) + } + + s.managers[chatObjectId] = mngr + return mngr, nil +} + +type SubscribeLastMessagesRequest struct { + ChatObjectId string + SubId string + Limit int + // If AsyncInit is true, initial messages will be broadcast via events + AsyncInit bool + WithDependencies bool +} + +type SubscribeLastMessagesResponse struct { + Messages []*chatmodel.Message + ChatState *model.ChatState + // Dependencies per message id + Dependencies map[string][]*domain.Details +} + +func (s *service) SubscribeLastMessages(ctx context.Context, req SubscribeLastMessagesRequest) (*SubscribeLastMessagesResponse, error) { + mngr, err := s.getManager(req.ChatObjectId) + if err != nil { + return nil, fmt.Errorf("get manager: %w", err) + } + mngr.Lock() + defer mngr.Unlock() + + txn, err := mngr.repository.ReadTx(ctx) + if err != nil { + return nil, fmt.Errorf("init read transaction: %w", err) + } + defer txn.Commit() + + messages, err := mngr.repository.GetLastMessages(txn.Context(), uint(req.Limit)) + if err != nil { + return nil, fmt.Errorf("query messages: %w", err) + } + + mngr.subscribe(req.SubId, req.WithDependencies) + + if req.AsyncInit { + var previousOrderId string + if len(messages) > 0 { + previousOrderId, err = mngr.repository.GetPrevOrderId(txn.Context(), messages[0].OrderId) + if err != nil { + return nil, fmt.Errorf("get previous order id: %w", err) + } + } + for _, message := range messages { + mngr.Add(previousOrderId, message) + previousOrderId = message.OrderId + } + + // Force chatState to be sent + mngr.chatStateUpdated = true + mngr.Flush() + return nil, nil + } else { + depsPerMessage := map[string][]*domain.Details{} + if req.WithDependencies { + for _, message := range messages { + deps := mngr.collectMessageDependencies(message) + depsPerMessage[message.Id] = deps + } + } + return &SubscribeLastMessagesResponse{ + Messages: messages, + ChatState: mngr.GetChatState(), + Dependencies: depsPerMessage, + }, nil + } +} + +func (s *service) Unsubscribe(chatObjectId string, subId string) error { + mngr, err := s.getManager(chatObjectId) + if err != nil { + return fmt.Errorf("get manager: %w", err) + } + mngr.lock.Lock() + defer mngr.lock.Unlock() + + mngr.unsubscribe(subId) + return nil +} diff --git a/core/block/chats/service.go b/core/block/chats/service.go index 3dd142a2f..2686154b5 100644 --- a/core/block/chats/service.go +++ b/core/block/chats/service.go @@ -17,6 +17,7 @@ import ( "github.com/anyproto/anytype-heart/core/block/chats/chatmodel" "github.com/anyproto/anytype-heart/core/block/chats/chatpush" "github.com/anyproto/anytype-heart/core/block/chats/chatrepository" + "github.com/anyproto/anytype-heart/core/block/chats/chatsubscription" "github.com/anyproto/anytype-heart/core/block/editor/chatobject" "github.com/anyproto/anytype-heart/core/domain" "github.com/anyproto/anytype-heart/core/session" @@ -41,7 +42,7 @@ type Service interface { DeleteMessage(ctx context.Context, chatObjectId string, messageId string) error GetMessages(ctx context.Context, chatObjectId string, req chatrepository.GetMessagesRequest) (*chatobject.GetMessagesResponse, error) GetMessagesByIds(ctx context.Context, chatObjectId string, messageIds []string) ([]*chatmodel.Message, error) - SubscribeLastMessages(ctx context.Context, chatObjectId string, limit int, subId string) (*chatobject.SubscribeLastMessagesResponse, error) + SubscribeLastMessages(ctx context.Context, chatObjectId string, limit int, subId string) (*chatsubscription.SubscribeLastMessagesResponse, error) ReadMessages(ctx context.Context, req ReadMessagesRequest) error UnreadMessages(ctx context.Context, chatObjectId string, afterOrderId string, counterType chatmodel.CounterType) error Unsubscribe(chatObjectId string, subId string) error @@ -63,11 +64,12 @@ type accountService interface { } type service struct { - objectGetter cache.ObjectWaitGetter - crossSpaceSubService crossspacesub.Service - pushService pushService - accountService accountService - objectStore objectstore.ObjectStore + objectGetter cache.ObjectWaitGetter + crossSpaceSubService crossspacesub.Service + pushService pushService + accountService accountService + objectStore objectstore.ObjectStore + chatSubscriptionService chatsubscription.Service componentCtx context.Context componentCtxCancel context.CancelFunc @@ -101,6 +103,7 @@ func (s *service) Init(a *app.App) error { s.accountService = app.MustComponent[accountService](a) s.objectStore = app.MustComponent[objectstore.ObjectStore](a) s.objectGetter = app.MustComponent[cache.ObjectWaitGetter](a) + s.chatSubscriptionService = app.MustComponent[chatsubscription.Service](a) return nil } @@ -262,22 +265,14 @@ func (s *service) monitorMessagePreviews() { } } -func (s *service) onChatAdded(chatObjectId string, subId string, asyncInit bool) (*chatobject.SubscribeLastMessagesResponse, error) { - var resp *chatobject.SubscribeLastMessagesResponse - err := s.chatObjectDo(s.componentCtx, chatObjectId, func(sb chatobject.StoreObject) error { - var err error - resp, err = sb.SubscribeLastMessages(s.componentCtx, chatobject.SubscribeLastMessagesRequest{ - SubId: subId, - Limit: 1, - AsyncInit: asyncInit, - WithDependencies: true, - }) - if err != nil { - return err - } - return nil +func (s *service) onChatAdded(chatObjectId string, subId string, asyncInit bool) (*chatsubscription.SubscribeLastMessagesResponse, error) { + return s.chatSubscriptionService.SubscribeLastMessages(s.componentCtx, chatsubscription.SubscribeLastMessagesRequest{ + ChatObjectId: chatObjectId, + SubId: subId, + Limit: 1, + AsyncInit: asyncInit, + WithDependencies: true, }) - return resp, err } func (s *service) onChatRemoved(chatObjectId string, subId string) error { @@ -408,28 +403,18 @@ func (s *service) GetMessagesByIds(ctx context.Context, chatObjectId string, mes return res, err } -func (s *service) SubscribeLastMessages(ctx context.Context, chatObjectId string, limit int, subId string) (*chatobject.SubscribeLastMessagesResponse, error) { - var resp *chatobject.SubscribeLastMessagesResponse - err := s.chatObjectDo(ctx, chatObjectId, func(sb chatobject.StoreObject) error { - var err error - resp, err = sb.SubscribeLastMessages(ctx, chatobject.SubscribeLastMessagesRequest{ - SubId: subId, - Limit: limit, - AsyncInit: false, - WithDependencies: false, - }) - if err != nil { - return err - } - return nil +func (s *service) SubscribeLastMessages(ctx context.Context, chatObjectId string, limit int, subId string) (*chatsubscription.SubscribeLastMessagesResponse, error) { + return s.chatSubscriptionService.SubscribeLastMessages(s.componentCtx, chatsubscription.SubscribeLastMessagesRequest{ + ChatObjectId: chatObjectId, + SubId: subId, + Limit: limit, + AsyncInit: false, + WithDependencies: false, }) - return resp, err } func (s *service) Unsubscribe(chatObjectId string, subId string) error { - return s.chatObjectDo(s.componentCtx, chatObjectId, func(sb chatobject.StoreObject) error { - return sb.Unsubscribe(subId) - }) + return s.chatSubscriptionService.Unsubscribe(chatObjectId, subId) } type ReadMessagesRequest struct { diff --git a/core/block/editor/chatobject/chathandler.go b/core/block/editor/chatobject/chathandler.go index 0c9b5b886..249cdc546 100644 --- a/core/block/editor/chatobject/chathandler.go +++ b/core/block/editor/chatobject/chathandler.go @@ -13,6 +13,7 @@ import ( "github.com/anyproto/anytype-heart/core/block/chats/chatmodel" "github.com/anyproto/anytype-heart/core/block/chats/chatrepository" + "github.com/anyproto/anytype-heart/core/block/chats/chatsubscription" "github.com/anyproto/anytype-heart/core/block/editor/storestate" "github.com/anyproto/anytype-heart/pb" "github.com/anyproto/anytype-heart/pkg/lib/pb/model" @@ -20,7 +21,7 @@ import ( type ChatHandler struct { repository chatrepository.Repository - subscription *subscriptionManager + subscription chatsubscription.Manager currentIdentity string myParticipantId string // forceNotRead forces handler to mark all messages as not read. It's useful for unit testing @@ -79,7 +80,9 @@ func (d *ChatHandler) BeforeCreate(ctx context.Context, ch storestate.ChangeOp) return fmt.Errorf("get prev order id: %w", err) } - d.subscription.updateChatState(func(state *model.ChatState) *model.ChatState { + d.subscription.Lock() + defer d.subscription.Unlock() + d.subscription.UpdateChatState(func(state *model.ChatState) *model.ChatState { if !msg.Read { if msg.OrderId < state.Messages.OldestOrderId || state.Messages.OldestOrderId == "" { state.Messages.OldestOrderId = msg.OrderId @@ -100,7 +103,7 @@ func (d *ChatHandler) BeforeCreate(ctx context.Context, ch storestate.ChangeOp) return state }) - d.subscription.add(prevOrderId, msg) + d.subscription.Add(prevOrderId, msg) msg.MarshalAnyenc(ch.Value, ch.Arena) @@ -132,7 +135,9 @@ func (d *ChatHandler) BeforeDelete(ctx context.Context, ch storestate.ChangeOp) return storestate.DeleteModeDelete, errors.New("can't delete not own message") } - d.subscription.delete(messageId) + d.subscription.Lock() + defer d.subscription.Unlock() + d.subscription.Delete(messageId) return storestate.DeleteModeDelete, nil } @@ -156,6 +161,9 @@ func (d *ChatHandler) UpgradeKeyModifier(ch storestate.ChangeOp, key *pb.KeyModi return nil, false, fmt.Errorf("unmarshal message: %w", err) } + d.subscription.Lock() + defer d.subscription.Unlock() + switch path { case chatmodel.ReactionsKey: // Do not parse json, just trim " @@ -165,7 +173,7 @@ func (d *ChatHandler) UpgradeKeyModifier(ch storestate.ChangeOp, key *pb.KeyModi } // TODO Count validation - d.subscription.updateReactions(msg) + d.subscription.UpdateReactions(msg) case chatmodel.ContentKey: creator := msg.Creator if creator != ch.Change.Creator { @@ -173,7 +181,7 @@ func (d *ChatHandler) UpgradeKeyModifier(ch storestate.ChangeOp, key *pb.KeyModi } msg.ModifiedAt = ch.Change.Timestamp msg.MarshalAnyenc(result, a) - d.subscription.updateFull(msg) + d.subscription.UpdateFull(msg) default: return nil, false, fmt.Errorf("invalid key path %s", key.KeyPath) } diff --git a/core/block/editor/chatobject/chatobject.go b/core/block/editor/chatobject/chatobject.go index 7c59e1d90..58ebcdedd 100644 --- a/core/block/editor/chatobject/chatobject.go +++ b/core/block/editor/chatobject/chatobject.go @@ -14,6 +14,7 @@ import ( "github.com/anyproto/anytype-heart/core/block/chats/chatmodel" "github.com/anyproto/anytype-heart/core/block/chats/chatrepository" + "github.com/anyproto/anytype-heart/core/block/chats/chatsubscription" "github.com/anyproto/anytype-heart/core/block/editor/anystoredebug" "github.com/anyproto/anytype-heart/core/block/editor/smartblock" "github.com/anyproto/anytype-heart/core/block/editor/storestate" @@ -48,10 +49,8 @@ type StoreObject interface { EditMessage(ctx context.Context, messageId string, newMessage *chatmodel.Message) error ToggleMessageReaction(ctx context.Context, messageId string, emoji string) error DeleteMessage(ctx context.Context, messageId string) error - SubscribeLastMessages(ctx context.Context, req SubscribeLastMessagesRequest) (*SubscribeLastMessagesResponse, error) MarkReadMessages(ctx context.Context, afterOrderId string, beforeOrderId string, lastStateId string, counterType chatmodel.CounterType) error MarkMessagesAsUnread(ctx context.Context, afterOrderId string, counterType chatmodel.CounterType) error - Unsubscribe(subId string) error } type AccountService interface { @@ -67,36 +66,38 @@ type storeObject struct { smartblock.SmartBlock locker smartblock.Locker - seenHeadsCollector seenHeadsCollector - accountService AccountService - storeSource source.Store - repositoryService chatrepository.Service - store *storestate.StoreState - eventSender event.Sender - subscription *subscriptionManager - crdtDb anystore.DB - spaceIndex spaceindex.Store - chatHandler *ChatHandler - repository chatrepository.Repository + seenHeadsCollector seenHeadsCollector + accountService AccountService + storeSource source.Store + repositoryService chatrepository.Service + store *storestate.StoreState + eventSender event.Sender + chatSubscriptionService chatsubscription.Service + subscription chatsubscription.Manager + crdtDb anystore.DB + spaceIndex spaceindex.Store + chatHandler *ChatHandler + repository chatrepository.Repository arenaPool *anyenc.ArenaPool componentCtx context.Context componentCtxCancel context.CancelFunc } -func New(sb smartblock.SmartBlock, accountService AccountService, eventSender event.Sender, crdtDb anystore.DB, repositoryService chatrepository.Service, spaceIndex spaceindex.Store) StoreObject { +func New(sb smartblock.SmartBlock, accountService AccountService, eventSender event.Sender, crdtDb anystore.DB, repositoryService chatrepository.Service, spaceIndex spaceindex.Store, chatSubscriptionService chatsubscription.Service) StoreObject { ctx, cancel := context.WithCancel(context.Background()) return &storeObject{ - SmartBlock: sb, - locker: sb.(smartblock.Locker), - accountService: accountService, - arenaPool: &anyenc.ArenaPool{}, - eventSender: eventSender, - crdtDb: crdtDb, - repositoryService: repositoryService, - componentCtx: ctx, - componentCtxCancel: cancel, - spaceIndex: spaceIndex, + SmartBlock: sb, + locker: sb.(smartblock.Locker), + accountService: accountService, + arenaPool: &anyenc.ArenaPool{}, + eventSender: eventSender, + crdtDb: crdtDb, + repositoryService: repositoryService, + componentCtx: ctx, + componentCtxCancel: cancel, + spaceIndex: spaceIndex, + chatSubscriptionService: chatSubscriptionService, } } @@ -114,11 +115,6 @@ func (s *storeObject) Init(ctx *smartblock.InitContext) error { // Use Object and Space IDs from source, because object is not initialized yet myParticipantId := domain.NewParticipantId(ctx.Source.SpaceID(), s.accountService.AccountID()) - s.subscription = s.newSubscriptionManager( - domain.FullID{ObjectID: ctx.Source.Id(), SpaceID: ctx.Source.SpaceID()}, - s.accountService.AccountID(), - myParticipantId, - ) // Diff managers should be added before SmartBlock.Init, because they have to be initialized in source.ReadStoreDoc storeSource.RegisterDiffManager(diffManagerMessages, func(removed []string) { @@ -140,6 +136,11 @@ func (s *storeObject) Init(ctx *smartblock.InitContext) error { } s.storeSource = storeSource + s.subscription, err = s.chatSubscriptionService.GetManager(storeSource.Id()) + if err != nil { + return fmt.Errorf("get subscription manager: %w", err) + } + s.chatHandler = &ChatHandler{ repository: s.repository, subscription: s.subscription, @@ -153,11 +154,6 @@ func (s *storeObject) Init(ctx *smartblock.InitContext) error { } s.store = stateStore - err = s.subscription.loadChatState(s.componentCtx) - if err != nil { - return fmt.Errorf("init chat state: %w", err) - } - err = storeSource.ReadStoreDoc(ctx.Ctx, stateStore, s.onUpdate) if err != nil { return fmt.Errorf("read store doc: %w", err) @@ -171,7 +167,9 @@ func (s *storeObject) Init(ctx *smartblock.InitContext) error { } func (s *storeObject) onUpdate() { - s.subscription.flush() + s.subscription.Lock() + defer s.subscription.Unlock() + s.subscription.Flush() } func (s *storeObject) GetMessageById(ctx context.Context, id string) (*chatmodel.Message, error) { @@ -201,7 +199,7 @@ func (s *storeObject) GetMessages(ctx context.Context, req chatrepository.GetMes } return &GetMessagesResponse{ Messages: msgs, - ChatState: s.subscription.getChatState(), + ChatState: s.subscription.GetChatState(), }, nil } @@ -225,7 +223,7 @@ func (s *storeObject) AddMessage(ctx context.Context, sessionCtx session.Context return "", fmt.Errorf("create chat: %w", err) } - s.subscription.setSessionContext(sessionCtx) + s.subscription.SetSessionContext(sessionCtx) messageId, err := s.storeSource.PushStoreChange(ctx, source.PushStoreChangeParams{ Changes: builder.ChangeSet, State: s.store, @@ -324,78 +322,13 @@ func (s *storeObject) ToggleMessageReaction(ctx context.Context, messageId strin return nil } -type SubscribeLastMessagesRequest struct { - SubId string - Limit int - // If AsyncInit is true, initial messages will be broadcast via events - AsyncInit bool - WithDependencies bool -} - -type SubscribeLastMessagesResponse struct { - Messages []*chatmodel.Message - ChatState *model.ChatState - // Dependencies per message id - Dependencies map[string][]*domain.Details -} - -func (s *storeObject) SubscribeLastMessages(ctx context.Context, req SubscribeLastMessagesRequest) (*SubscribeLastMessagesResponse, error) { - txn, err := s.repository.ReadTx(ctx) - if err != nil { - return nil, fmt.Errorf("init read transaction: %w", err) - } - defer txn.Commit() - - messages, err := s.repository.GetLastMessages(txn.Context(), uint(req.Limit)) - if err != nil { - return nil, fmt.Errorf("query messages: %w", err) - } - - s.subscription.subscribe(req.SubId, req.WithDependencies) - - if req.AsyncInit { - var previousOrderId string - if len(messages) > 0 { - previousOrderId, err = s.repository.GetPrevOrderId(txn.Context(), messages[0].OrderId) - if err != nil { - return nil, fmt.Errorf("get previous order id: %w", err) - } - } - for _, message := range messages { - s.subscription.add(previousOrderId, message) - previousOrderId = message.OrderId - } - - // Force chatState to be sent - s.subscription.chatStateUpdated = true - s.subscription.flush() - return nil, nil - } else { - depsPerMessage := map[string][]*domain.Details{} - if req.WithDependencies { - for _, message := range messages { - deps := s.subscription.collectMessageDependencies(message) - depsPerMessage[message.Id] = deps - } - } - return &SubscribeLastMessagesResponse{ - Messages: messages, - ChatState: s.subscription.getChatState(), - Dependencies: depsPerMessage, - }, nil - } -} - -func (s *storeObject) Unsubscribe(subId string) error { - s.subscription.unsubscribe(subId) - return nil -} - func (s *storeObject) TryClose(objectTTL time.Duration) (res bool, err error) { if !s.locker.TryLock() { return false, nil } - isActive := s.subscription.isActive() + s.subscription.Lock() + defer s.subscription.Unlock() + isActive := s.subscription.IsActive() s.Unlock() if isActive { diff --git a/core/block/editor/chatobject/reading.go b/core/block/editor/chatobject/reading.go index 6aed37c2e..36fcbabaf 100644 --- a/core/block/editor/chatobject/reading.go +++ b/core/block/editor/chatobject/reading.go @@ -57,8 +57,10 @@ func (s *storeObject) MarkMessagesAsUnread(ctx context.Context, afterOrderId str return fmt.Errorf("get last added date: %w", err) } - s.subscription.unreadMessages(newOldestOrderId, lastAdded, idsModified, counterType) - s.subscription.flush() + s.subscription.Lock() + defer s.subscription.Unlock() + s.subscription.UnreadMessages(newOldestOrderId, lastAdded, idsModified, counterType) + s.subscription.Flush() seenHeads, err := s.seenHeadsCollector.collectSeenHeads(ctx, afterOrderId) if err != nil { @@ -107,8 +109,10 @@ func (s *storeObject) markReadMessages(changeIds []string, counterType chatmodel return fmt.Errorf("commit: %w", err) } - s.subscription.readMessages(newOldestOrderId, idsModified, counterType) - s.subscription.flush() + s.subscription.Lock() + defer s.subscription.Unlock() + s.subscription.ReadMessages(newOldestOrderId, idsModified, counterType) + s.subscription.Flush() } return nil } diff --git a/core/block/editor/factory.go b/core/block/editor/factory.go index c946b3005..f03532f38 100644 --- a/core/block/editor/factory.go +++ b/core/block/editor/factory.go @@ -11,6 +11,7 @@ import ( "github.com/anyproto/anytype-heart/core/anytype/config" "github.com/anyproto/anytype-heart/core/block/cache" "github.com/anyproto/anytype-heart/core/block/chats/chatrepository" + "github.com/anyproto/anytype-heart/core/block/chats/chatsubscription" "github.com/anyproto/anytype-heart/core/block/editor/accountobject" "github.com/anyproto/anytype-heart/core/block/editor/bookmark" "github.com/anyproto/anytype-heart/core/block/editor/chatobject" @@ -53,28 +54,29 @@ type deviceService interface { } type ObjectFactory struct { - bookmarkService bookmark.BookmarkService - fileBlockService file.BlockService - layoutConverter converter.LayoutConverter - objectStore objectstore.ObjectStore - sourceService source.Service - tempDirProvider core.TempDirProvider - fileStore filestore.FileStore - fileService files.Service - config *config.Config - picker cache.ObjectGetter - eventSender event.Sender - indexer smartblock.Indexer - spaceService spaceService - accountService accountService - fileObjectService fileobject.Service - processService process.Service - fileUploaderService fileuploader.Service - fileReconciler reconciler.Reconciler - objectDeleter ObjectDeleter - deviceService deviceService - spaceIdResolver idresolver.Resolver - chatRepositoryService chatrepository.Service + bookmarkService bookmark.BookmarkService + fileBlockService file.BlockService + layoutConverter converter.LayoutConverter + objectStore objectstore.ObjectStore + sourceService source.Service + tempDirProvider core.TempDirProvider + fileStore filestore.FileStore + fileService files.Service + config *config.Config + picker cache.ObjectGetter + eventSender event.Sender + indexer smartblock.Indexer + spaceService spaceService + accountService accountService + fileObjectService fileobject.Service + processService process.Service + fileUploaderService fileuploader.Service + fileReconciler reconciler.Reconciler + objectDeleter ObjectDeleter + deviceService deviceService + spaceIdResolver idresolver.Resolver + chatRepositoryService chatrepository.Service + chatSubscriptionService chatsubscription.Service } func NewObjectFactory() *ObjectFactory { @@ -107,6 +109,7 @@ func (f *ObjectFactory) Init(a *app.App) (err error) { f.deviceService = app.MustComponent[deviceService](a) f.spaceIdResolver = app.MustComponent[idresolver.Resolver](a) f.chatRepositoryService = app.MustComponent[chatrepository.Service](a) + f.chatSubscriptionService = app.MustComponent[chatsubscription.Service](a) return nil } @@ -220,7 +223,7 @@ func (f *ObjectFactory) New(space smartblock.Space, sbType coresb.SmartBlockType case coresb.SmartBlockTypeDevicesObject: return NewDevicesObject(sb, f.deviceService), nil case coresb.SmartBlockTypeChatDerivedObject: - return chatobject.New(sb, f.accountService, f.eventSender, f.objectStore.GetCrdtDb(space.Id()), f.chatRepositoryService, spaceIndex), nil + return chatobject.New(sb, f.accountService, f.eventSender, f.objectStore.GetCrdtDb(space.Id()), f.chatRepositoryService, spaceIndex, f.chatSubscriptionService), nil case coresb.SmartBlockTypeAccountObject: return accountobject.New(sb, f.accountService.Keys(), spaceIndex, f.layoutConverter, f.fileObjectService, f.objectStore.GetCrdtDb(space.Id()), f.config), nil default: From a6935338b8c352e62687e367a2ca6628c7d34ad5 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Tue, 13 May 2025 13:04:15 +0200 Subject: [PATCH 024/164] GO-5589: Remove ExportService dependency for export, call rpc instead --- .mockery.yaml | 1 - core/api/core/core.go | 6 +- .../core/mock_apicore/mock_ClientCommands.go | 32 +++---- .../core/mock_apicore/mock_ExportService.go | 96 ------------------- core/api/server/server.go | 6 +- core/api/server/server_test.go | 3 +- core/api/service.go | 5 +- core/api/service/object.go | 12 ++- core/api/service/object_test.go | 22 +++-- core/api/service/service.go | 11 +-- core/api/service/service_test.go | 13 +-- core/api/service/template_test.go | 11 ++- 12 files changed, 65 insertions(+), 153 deletions(-) delete mode 100644 core/api/core/mock_apicore/mock_ExportService.go diff --git a/.mockery.yaml b/.mockery.yaml index f6cffe642..f69181336 100644 --- a/.mockery.yaml +++ b/.mockery.yaml @@ -240,7 +240,6 @@ packages: github.com/anyproto/anytype-heart/core/api/core: interfaces: AccountService: - ExportService: ClientCommands: github.com/anyproto/anytype-heart/core/block/template: interfaces: diff --git a/core/api/core/core.go b/core/api/core/core.go index 3c3ef1099..dcb022642 100644 --- a/core/api/core/core.go +++ b/core/api/core/core.go @@ -11,10 +11,6 @@ type AccountService interface { GetInfo(ctx context.Context) (*model.AccountInfo, error) } -type ExportService interface { - ExportSingleInMemory(ctx context.Context, spaceId string, objectId string, format model.ExportFormat) (res string, err error) -} - type ClientCommands interface { // Wallet AccountLocalLinkNewChallenge(context.Context, *pb.RpcAccountLocalLinkNewChallengeRequest) *pb.RpcAccountLocalLinkNewChallengeResponse @@ -39,7 +35,7 @@ type ClientCommands interface { ObjectSearchUnsubscribe(context.Context, *pb.RpcObjectSearchUnsubscribeRequest) *pb.RpcObjectSearchUnsubscribeResponse ObjectSetDetails(context.Context, *pb.RpcObjectSetDetailsRequest) *pb.RpcObjectSetDetailsResponse ObjectSetIsArchived(context.Context, *pb.RpcObjectSetIsArchivedRequest) *pb.RpcObjectSetIsArchivedResponse - ObjectListExport(context.Context, *pb.RpcObjectListExportRequest) *pb.RpcObjectListExportResponse + ObjectExport(context.Context, *pb.RpcObjectExportRequest) *pb.RpcObjectExportResponse // Type ObjectCreateObjectType(context.Context, *pb.RpcObjectCreateObjectTypeRequest) *pb.RpcObjectCreateObjectTypeResponse diff --git a/core/api/core/mock_apicore/mock_ClientCommands.go b/core/api/core/mock_apicore/mock_ClientCommands.go index f25a2e232..dba9a67b8 100644 --- a/core/api/core/mock_apicore/mock_ClientCommands.go +++ b/core/api/core/mock_apicore/mock_ClientCommands.go @@ -561,51 +561,51 @@ func (_c *MockClientCommands_ObjectCreateRelationOption_Call) RunAndReturn(run f return _c } -// ObjectListExport provides a mock function with given fields: _a0, _a1 -func (_m *MockClientCommands) ObjectListExport(_a0 context.Context, _a1 *pb.RpcObjectListExportRequest) *pb.RpcObjectListExportResponse { +// ObjectExport provides a mock function with given fields: _a0, _a1 +func (_m *MockClientCommands) ObjectExport(_a0 context.Context, _a1 *pb.RpcObjectExportRequest) *pb.RpcObjectExportResponse { ret := _m.Called(_a0, _a1) if len(ret) == 0 { - panic("no return value specified for ObjectListExport") + panic("no return value specified for ObjectExport") } - var r0 *pb.RpcObjectListExportResponse - if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectListExportRequest) *pb.RpcObjectListExportResponse); ok { + var r0 *pb.RpcObjectExportResponse + if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectExportRequest) *pb.RpcObjectExportResponse); ok { r0 = rf(_a0, _a1) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*pb.RpcObjectListExportResponse) + r0 = ret.Get(0).(*pb.RpcObjectExportResponse) } } return r0 } -// MockClientCommands_ObjectListExport_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectListExport' -type MockClientCommands_ObjectListExport_Call struct { +// MockClientCommands_ObjectExport_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectExport' +type MockClientCommands_ObjectExport_Call struct { *mock.Call } -// ObjectListExport is a helper method to define mock.On call +// ObjectExport is a helper method to define mock.On call // - _a0 context.Context -// - _a1 *pb.RpcObjectListExportRequest -func (_e *MockClientCommands_Expecter) ObjectListExport(_a0 interface{}, _a1 interface{}) *MockClientCommands_ObjectListExport_Call { - return &MockClientCommands_ObjectListExport_Call{Call: _e.mock.On("ObjectListExport", _a0, _a1)} +// - _a1 *pb.RpcObjectExportRequest +func (_e *MockClientCommands_Expecter) ObjectExport(_a0 interface{}, _a1 interface{}) *MockClientCommands_ObjectExport_Call { + return &MockClientCommands_ObjectExport_Call{Call: _e.mock.On("ObjectExport", _a0, _a1)} } -func (_c *MockClientCommands_ObjectListExport_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectListExportRequest)) *MockClientCommands_ObjectListExport_Call { +func (_c *MockClientCommands_ObjectExport_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectExportRequest)) *MockClientCommands_ObjectExport_Call { _c.Call.Run(func(args mock.Arguments) { - run(args[0].(context.Context), args[1].(*pb.RpcObjectListExportRequest)) + run(args[0].(context.Context), args[1].(*pb.RpcObjectExportRequest)) }) return _c } -func (_c *MockClientCommands_ObjectListExport_Call) Return(_a0 *pb.RpcObjectListExportResponse) *MockClientCommands_ObjectListExport_Call { +func (_c *MockClientCommands_ObjectExport_Call) Return(_a0 *pb.RpcObjectExportResponse) *MockClientCommands_ObjectExport_Call { _c.Call.Return(_a0) return _c } -func (_c *MockClientCommands_ObjectListExport_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectListExportRequest) *pb.RpcObjectListExportResponse) *MockClientCommands_ObjectListExport_Call { +func (_c *MockClientCommands_ObjectExport_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectExportRequest) *pb.RpcObjectExportResponse) *MockClientCommands_ObjectExport_Call { _c.Call.Return(run) return _c } diff --git a/core/api/core/mock_apicore/mock_ExportService.go b/core/api/core/mock_apicore/mock_ExportService.go deleted file mode 100644 index 03c40c5a5..000000000 --- a/core/api/core/mock_apicore/mock_ExportService.go +++ /dev/null @@ -1,96 +0,0 @@ -// Code generated by mockery. DO NOT EDIT. - -package mock_apicore - -import ( - context "context" - - model "github.com/anyproto/anytype-heart/pkg/lib/pb/model" - mock "github.com/stretchr/testify/mock" -) - -// MockExportService is an autogenerated mock type for the ExportService type -type MockExportService struct { - mock.Mock -} - -type MockExportService_Expecter struct { - mock *mock.Mock -} - -func (_m *MockExportService) EXPECT() *MockExportService_Expecter { - return &MockExportService_Expecter{mock: &_m.Mock} -} - -// ExportSingleInMemory provides a mock function with given fields: ctx, spaceId, objectId, format -func (_m *MockExportService) ExportSingleInMemory(ctx context.Context, spaceId string, objectId string, format model.ExportFormat) (string, error) { - ret := _m.Called(ctx, spaceId, objectId, format) - - if len(ret) == 0 { - panic("no return value specified for ExportSingleInMemory") - } - - var r0 string - var r1 error - if rf, ok := ret.Get(0).(func(context.Context, string, string, model.ExportFormat) (string, error)); ok { - return rf(ctx, spaceId, objectId, format) - } - if rf, ok := ret.Get(0).(func(context.Context, string, string, model.ExportFormat) string); ok { - r0 = rf(ctx, spaceId, objectId, format) - } else { - r0 = ret.Get(0).(string) - } - - if rf, ok := ret.Get(1).(func(context.Context, string, string, model.ExportFormat) error); ok { - r1 = rf(ctx, spaceId, objectId, format) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// MockExportService_ExportSingleInMemory_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ExportSingleInMemory' -type MockExportService_ExportSingleInMemory_Call struct { - *mock.Call -} - -// ExportSingleInMemory is a helper method to define mock.On call -// - ctx context.Context -// - spaceId string -// - objectId string -// - format model.ExportFormat -func (_e *MockExportService_Expecter) ExportSingleInMemory(ctx interface{}, spaceId interface{}, objectId interface{}, format interface{}) *MockExportService_ExportSingleInMemory_Call { - return &MockExportService_ExportSingleInMemory_Call{Call: _e.mock.On("ExportSingleInMemory", ctx, spaceId, objectId, format)} -} - -func (_c *MockExportService_ExportSingleInMemory_Call) Run(run func(ctx context.Context, spaceId string, objectId string, format model.ExportFormat)) *MockExportService_ExportSingleInMemory_Call { - _c.Call.Run(func(args mock.Arguments) { - run(args[0].(context.Context), args[1].(string), args[2].(string), args[3].(model.ExportFormat)) - }) - return _c -} - -func (_c *MockExportService_ExportSingleInMemory_Call) Return(res string, err error) *MockExportService_ExportSingleInMemory_Call { - _c.Call.Return(res, err) - return _c -} - -func (_c *MockExportService_ExportSingleInMemory_Call) RunAndReturn(run func(context.Context, string, string, model.ExportFormat) (string, error)) *MockExportService_ExportSingleInMemory_Call { - _c.Call.Return(run) - return _c -} - -// NewMockExportService creates a new instance of MockExportService. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. -// The first argument is typically a *testing.T value. -func NewMockExportService(t interface { - mock.TestingT - Cleanup(func()) -}) *MockExportService { - mock := &MockExportService{} - mock.Mock.Test(t) - - t.Cleanup(func() { mock.AssertExpectations(t) }) - - return mock -} diff --git a/core/api/server/server.go b/core/api/server/server.go index 8eb3a8b40..595d9a43a 100644 --- a/core/api/server/server.go +++ b/core/api/server/server.go @@ -19,14 +19,14 @@ type Server struct { KeyToToken map[string]string // appKey -> token } -// NewServer constructs a new Server with default config and sets up the routes. -func NewServer(mw apicore.ClientCommands, accountService apicore.AccountService, exportService apicore.ExportService) *Server { +// NewServer constructs a new Server with the default config and sets up the routes. +func NewServer(mw apicore.ClientCommands, accountService apicore.AccountService) *Server { gatewayUrl, techSpaceId, err := getAccountInfo(accountService) if err != nil { panic(err) } - s := &Server{service: service.NewService(mw, exportService, gatewayUrl, techSpaceId)} + s := &Server{service: service.NewService(mw, gatewayUrl, techSpaceId)} s.engine = s.NewRouter(mw) s.KeyToToken = make(map[string]string) diff --git a/core/api/server/server_test.go b/core/api/server/server_test.go index 7f28fdb6f..15bf3ee48 100644 --- a/core/api/server/server_test.go +++ b/core/api/server/server_test.go @@ -24,12 +24,11 @@ type fixture struct { func newFixture(t *testing.T) *fixture { mwMock := mock_apicore.NewMockClientCommands(t) accountService := mock_apicore.NewMockAccountService(t) - exportService := mock_apicore.NewMockExportService(t) accountService.On("GetInfo", mock.Anything).Return(&model.AccountInfo{ GatewayUrl: mockedGatewayUrl, TechSpaceId: mockedTechSpaceId, }, nil).Once() - server := NewServer(mwMock, accountService, exportService) + server := NewServer(mwMock, accountService) return &fixture{ Server: server, diff --git a/core/api/service.go b/core/api/service.go index 455e753ed..28a54feda 100644 --- a/core/api/service.go +++ b/core/api/service.go @@ -14,7 +14,6 @@ import ( "github.com/anyproto/anytype-heart/core/anytype/config" apicore "github.com/anyproto/anytype-heart/core/api/core" "github.com/anyproto/anytype-heart/core/api/server" - "github.com/anyproto/anytype-heart/core/block/export" ) const ( @@ -36,7 +35,6 @@ type apiService struct { httpSrv *http.Server mw apicore.ClientCommands accountService apicore.AccountService - exportService apicore.ExportService listenAddr string lock sync.Mutex } @@ -68,7 +66,6 @@ func (s *apiService) Name() (name string) { func (s *apiService) Init(a *app.App) (err error) { s.listenAddr = a.MustComponent(config.CName).(*config.Config).JsonApiListenAddr s.accountService = a.MustComponent(account.CName).(account.Service) - s.exportService = a.MustComponent(export.CName).(apicore.ExportService) return nil } @@ -89,7 +86,7 @@ func (s *apiService) runServer() { return } - s.srv = server.NewServer(s.mw, s.accountService, s.exportService) + s.srv = server.NewServer(s.mw, s.accountService) s.httpSrv = &http.Server{ Addr: s.listenAddr, Handler: s.srv.Engine(), diff --git a/core/api/service/object.go b/core/api/service/object.go index c0d44e5b5..07e450e07 100644 --- a/core/api/service/object.go +++ b/core/api/service/object.go @@ -437,11 +437,17 @@ func (s *Service) GetObjectWithBlocksFromStruct(details *types.Struct, markdown // getMarkdownExport retrieves the Markdown export of an object. func (s *Service) getMarkdownExport(ctx context.Context, spaceId string, objectId string, layout model.ObjectTypeLayout) (string, error) { if util.IsObjectLayout(layout) { - md, err := s.exportService.ExportSingleInMemory(ctx, spaceId, objectId, model.Export_Markdown) - if err != nil { + resp := s.mw.ObjectExport(ctx, &pb.RpcObjectExportRequest{ + SpaceId: spaceId, + ObjectId: objectId, + Format: model.Export_Markdown, + }) + + if resp.Error != nil && resp.Error.Code != pb.RpcObjectExportResponseError_NULL { return "", ErrFailedExportMarkdown } - return md, nil + + return resp.Result, nil } return "", nil } diff --git a/core/api/service/object_test.go b/core/api/service/object_test.go index 702f9c85e..1df3cbbda 100644 --- a/core/api/service/object_test.go +++ b/core/api/service/object_test.go @@ -501,9 +501,14 @@ func TestObjectService_GetObject(t *testing.T) { }, nil).Once() // Mock ExportMarkdown - fx.exportService. - On("ExportSingleInMemory", mock.Anything, mockedSpaceId, mockedObjectId, model.Export_Markdown). - Return("dummy markdown", nil).Once() + fx.mwMock.On("ObjectExport", mock.Anything, &pb.RpcObjectExportRequest{ + SpaceId: mockedSpaceId, + ObjectId: mockedObjectId, + Format: model.Export_Markdown, + }).Return(&pb.RpcObjectExportResponse{ + Result: "dummy markdown", + Error: &pb.RpcObjectExportResponseError{Code: pb.RpcObjectExportResponseError_NULL}, + }, nil).Once() // when object, err := fx.service.GetObject(ctx, mockedSpaceId, mockedObjectId) @@ -651,9 +656,14 @@ func TestObjectService_CreateObject(t *testing.T) { }).Times(3) // Mock ExportMarkdown - fx.exportService. - On("ExportSingleInMemory", mock.Anything, mockedSpaceId, mockedNewObjectId, model.Export_Markdown). - Return("dummy markdown", nil).Once() + fx.mwMock.On("ObjectExport", mock.Anything, &pb.RpcObjectExportRequest{ + SpaceId: mockedSpaceId, + ObjectId: mockedNewObjectId, + Format: model.Export_Markdown, + }).Return(&pb.RpcObjectExportResponse{ + Result: "dummy markdown", + Error: &pb.RpcObjectExportResponseError{Code: pb.RpcObjectExportResponseError_NULL}, + }, nil).Once() // when object, err := fx.service.CreateObject(ctx, mockedSpaceId, apimodel.CreateObjectRequest{ diff --git a/core/api/service/service.go b/core/api/service/service.go index 05f559a8f..8f37aebfa 100644 --- a/core/api/service/service.go +++ b/core/api/service/service.go @@ -5,12 +5,11 @@ import ( ) type Service struct { - mw apicore.ClientCommands - exportService apicore.ExportService - gatewayUrl string - techSpaceId string + mw apicore.ClientCommands + gatewayUrl string + techSpaceId string } -func NewService(mw apicore.ClientCommands, exportService apicore.ExportService, gatewayUrl string, techspaceId string) *Service { - return &Service{mw: mw, exportService: exportService, gatewayUrl: gatewayUrl, techSpaceId: techspaceId} +func NewService(mw apicore.ClientCommands, gatewayUrl string, techspaceId string) *Service { + return &Service{mw: mw, gatewayUrl: gatewayUrl, techSpaceId: techspaceId} } diff --git a/core/api/service/service_test.go b/core/api/service/service_test.go index 9ab3d438b..ee3cfe756 100644 --- a/core/api/service/service_test.go +++ b/core/api/service/service_test.go @@ -28,19 +28,16 @@ const ( ) type fixture struct { - service *Service - mwMock *mock_apicore.MockClientCommands - exportService *mock_apicore.MockExportService + service *Service + mwMock *mock_apicore.MockClientCommands } func newFixture(t *testing.T) *fixture { mwMock := mock_apicore.NewMockClientCommands(t) - exportMock := mock_apicore.NewMockExportService(t) - service := NewService(mwMock, exportMock, gatewayUrl, techSpaceId) + service := NewService(mwMock, gatewayUrl, techSpaceId) return &fixture{ - service: service, - mwMock: mwMock, - exportService: exportMock, + service: service, + mwMock: mwMock, } } diff --git a/core/api/service/template_test.go b/core/api/service/template_test.go index ea85d5a81..b2cca7239 100644 --- a/core/api/service/template_test.go +++ b/core/api/service/template_test.go @@ -128,9 +128,14 @@ func TestObjectService_GetTemplate(t *testing.T) { }).Times(3) // Mock ExportMarkdown - fx.exportService. - On("ExportSingleInMemory", mock.Anything, mockedSpaceId, mockedTemplateId, model.Export_Markdown). - Return("dummy markdown", nil).Once() + fx.mwMock.On("ObjectExport", mock.Anything, &pb.RpcObjectExportRequest{ + SpaceId: mockedSpaceId, + ObjectId: mockedTemplateId, + Format: model.Export_Markdown, + }).Return(&pb.RpcObjectExportResponse{ + Result: "dummy markdown", + Error: &pb.RpcObjectExportResponseError{Code: pb.RpcObjectExportResponseError_NULL}, + }, nil).Once() // when template, err := fx.service.GetTemplate(ctx, mockedSpaceId, mockedTypeId, mockedTemplateId) From b5528eb0fd49e84ca368cf1eaab12e143cece9e8 Mon Sep 17 00:00:00 2001 From: kirillston Date: Tue, 13 May 2025 13:40:40 +0200 Subject: [PATCH 025/164] GO-5487 Fix revision of non system types --- .../migration/systemobjectreviser/systemobjectreviser.go | 1 + 1 file changed, 1 insertion(+) diff --git a/space/internal/components/migration/systemobjectreviser/systemobjectreviser.go b/space/internal/components/migration/systemobjectreviser/systemobjectreviser.go index fff61b49e..f7f766471 100644 --- a/space/internal/components/migration/systemobjectreviser/systemobjectreviser.go +++ b/space/internal/components/migration/systemobjectreviser/systemobjectreviser.go @@ -42,6 +42,7 @@ var ( } customObjectFilterKeys = []domain.RelationKey{ + bundle.RelationKeyRevision, bundle.RelationKeyIconOption, bundle.RelationKeyIconName, bundle.RelationKeyPluralName, From 23bea7469990c515b34b7f2656242027ab041cd1 Mon Sep 17 00:00:00 2001 From: Sergey Date: Tue, 13 May 2025 14:12:11 +0200 Subject: [PATCH 026/164] Message previews: init asynchronously --- core/block/chats/chatsubscription/service.go | 53 ++++++++++++-------- core/block/chats/service.go | 53 ++++++++++++-------- 2 files changed, 65 insertions(+), 41 deletions(-) diff --git a/core/block/chats/chatsubscription/service.go b/core/block/chats/chatsubscription/service.go index bcdd122e8..cb8617458 100644 --- a/core/block/chats/chatsubscription/service.go +++ b/core/block/chats/chatsubscription/service.go @@ -75,7 +75,7 @@ func New() Service { func (s *service) Init(a *app.App) (err error) { s.componentCtx, s.componentCtxCancel = context.WithCancel(context.Background()) - + s.spaceIdResolver = app.MustComponent[idresolver.Resolver](a) s.objectStore = app.MustComponent[objectstore.ObjectStore](a) s.eventSender = app.MustComponent[event.Sender](a) @@ -106,16 +106,30 @@ func (s *service) GetManager(chatObjectId string) (Manager, error) { func (s *service) getManager(chatObjectId string) (*subscriptionManager, error) { s.lock.Lock() - defer s.lock.Unlock() - mngr, ok := s.managers[chatObjectId] if ok { + s.lock.Unlock() return mngr, nil } + mngr = &subscriptionManager{} + mngr.Lock() + defer mngr.Unlock() + s.managers[chatObjectId] = mngr + s.lock.Unlock() + + err := s.initManager(chatObjectId, mngr) + if err != nil { + return nil, fmt.Errorf("init manager: %w", err) + } + + return mngr, nil +} + +func (s *service) initManager(chatObjectId string, mngr *subscriptionManager) error { spaceId, err := s.spaceIdResolver.ResolveSpaceID(chatObjectId) if err != nil { - return nil, fmt.Errorf("resolve space id: %w", err) + return fmt.Errorf("resolve space id: %w", err) } currentIdentity := s.accountService.AccountID() @@ -123,28 +137,27 @@ func (s *service) getManager(chatObjectId string) (*subscriptionManager, error) repository, err := s.repositoryService.Repository(chatObjectId) if err != nil { - return nil, fmt.Errorf("get repository: %w", err) - } - mngr = &subscriptionManager{ - componentCtx: s.componentCtx, - spaceId: spaceId, - chatId: chatObjectId, - myIdentity: currentIdentity, - myParticipantId: currentParticipantId, - identityCache: s.identityCache, - subscriptions: make(map[string]*subscription), - spaceIndex: s.objectStore.SpaceIndex(spaceId), - eventSender: s.eventSender, - repository: repository, + return fmt.Errorf("get repository: %w", err) } + mngr.componentCtx = s.componentCtx + mngr.spaceId = spaceId + mngr.chatId = chatObjectId + mngr.myIdentity = currentIdentity + mngr.myParticipantId = currentParticipantId + mngr.identityCache = s.identityCache + mngr.subscriptions = make(map[string]*subscription) + mngr.spaceIndex = s.objectStore.SpaceIndex(spaceId) + mngr.eventSender = s.eventSender + mngr.repository = repository + + s.managers[chatObjectId] = mngr err = mngr.loadChatState(s.componentCtx) if err != nil { - return nil, fmt.Errorf("init chat state: %w", err) + return fmt.Errorf("init chat state: %w", err) } - s.managers[chatObjectId] = mngr - return mngr, nil + return nil } type SubscribeLastMessagesRequest struct { diff --git a/core/block/chats/service.go b/core/block/chats/service.go index 2686154b5..61bef172f 100644 --- a/core/block/chats/service.go +++ b/core/block/chats/service.go @@ -137,32 +137,43 @@ func (s *service) SubscribeToMessagePreviews(ctx context.Context, subId string) s.subscriptionIds[subId] = struct{}{} + lock := &sync.Mutex{} result := &SubscribeToMessagePreviewsResponse{ Previews: make([]*ChatPreview, 0, len(s.allChatObjectIds)), } - + var wg sync.WaitGroup for chatObjectId, spaceId := range s.allChatObjectIds { - chatAddResp, err := s.onChatAdded(chatObjectId, subId, false) - if err != nil { - log.Error("init lastMessage subscription", zap.Error(err)) - continue - } - var ( - message *chatmodel.Message - dependencies []*domain.Details - ) - if len(chatAddResp.Messages) > 0 { - message = chatAddResp.Messages[0] - dependencies = chatAddResp.Dependencies[message.Id] - } - result.Previews = append(result.Previews, &ChatPreview{ - SpaceId: spaceId, - ChatObjectId: chatObjectId, - State: chatAddResp.ChatState, - Message: message, - Dependencies: dependencies, - }) + wg.Add(1) + go func() { + defer wg.Done() + + chatAddResp, err := s.onChatAdded(chatObjectId, subId, false) + if err != nil { + log.Error("init lastMessage subscription", zap.Error(err)) + return + } + var ( + message *chatmodel.Message + dependencies []*domain.Details + ) + if len(chatAddResp.Messages) > 0 { + message = chatAddResp.Messages[0] + dependencies = chatAddResp.Dependencies[message.Id] + } + + lock.Lock() + defer lock.Unlock() + result.Previews = append(result.Previews, &ChatPreview{ + SpaceId: spaceId, + ChatObjectId: chatObjectId, + State: chatAddResp.ChatState, + Message: message, + Dependencies: dependencies, + }) + }() } + wg.Wait() + return result, nil } From 70c7cf7e80029414a3d0716ae8a9bc690afaf1a3 Mon Sep 17 00:00:00 2001 From: kirillston Date: Tue, 13 May 2025 15:29:24 +0200 Subject: [PATCH 027/164] Fix featuredRelations block in Empty usecase --- util/builtinobjects/data/empty.zip | Bin 186212 -> 186196 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/util/builtinobjects/data/empty.zip b/util/builtinobjects/data/empty.zip index 40a3fa6c99628beabed601f5491d074167c4e3b2..da2d1aa7fd4a0d7c06651ce244044e6744e4674b 100644 GIT binary patch delta 159734 zcmYJ4V`F9OmW6|gRdFh;7!})gQn78@-mz_?V%xTpif!9g?{jY7?tieptoe@ljA!mw z!Od5}#hL(QZE@O>m&U@WXOjD^P)Ihw5ca^#HGT$>p2^mUAVnJ%i>?-hDYl#pZqu5Q zO12kBJCIh|P7<2UJf%1Yrq8*cuh`DW7?TeJ8)jXKS*)DnSrKI3 z{IZX!r5mK5O`Jgz{Z>0RE(C=0YZlHM34%2>vvlSyYkeVu$d?Uf++}-UWuKur1={gM zV%jQ}%vlLfd#*oNv^M#F?&R7E z&R79#bDjd%;AG1kd*?XsnCaZo9rqj7xMDiil#u>zs8SI#vIviVgEo%TjASNrTwWbU zsGcwLdc98R{=+xLpqorkT@Xyc=}$oUlOC=WRFtSxoJ`SxWG0x(5J4oEQ5meR-H6~P zSsYjmC_PTVE)29#i5|(Wf82>LHe-@SfdmL(m3r!}R8{bscO|}#L{cZpt$d#En~)P` zB_0!f;_&MaqpG#Ol2hexzk5EJD0|8=%1U8%9wd*Uj-^&G2nn)KUZ;tWQ^fa^=C|eFh4>80B3Nt`%FeEJZ|$dTVJ8 z(EnaqL7rzZu&)&R)_Uch%dw{v>nWTLO7XGxzHiJ?C|NSoa@krEOw~xUK8RTMhp{VM z^>6povzNM>j)b?}Urke6*62bo14#btS$4>z7bCXA9W(c^YdKgVy=11*hsESNGKGD6 z2H{|{sh_!H!S}u2Y420ZxhFYn#;KDN0dYz~i9>g*Ajo~DV6NAl9DX=%5Z>?7+Yzr% zlBb;ko9ykdC7`!dH~~7MpI>}mJKU$Z^tA{2G-FuE^rS5pR94t}x>0g^@H zHVOxVOIaCrifanM{9vHt#UV`PZ1imrjS;F_zN&J$D6Zh2l3nMz5Li>CTYtpj#i@%z z6AwJ_W{D3Xv>5N^mY3L|y2bwGZE1QsH5>ffrD>D&_h}{=jAjp}Mt4@aXsA;6*CfCU zGl|0yaOs^Pwt*P5!2O`m3UKIX229cicfk`t!N-DAPsbUu8B0%+Q%k zKR&vV=sp#j&u&3J-VWMkh^?i?kCDKCObXyIEF7xF--LpDW_lNIYtsp@0i^b0+m)+t zPx{{ge|VH?vFW53BM)*1D(>-wb1c{f@kWsFdm+$MlTG;>-Jm3I+nYs_5Suggu)t$VWOk^ z9KK;9U~s4_Vkt6LOFj=$1z5H`Ec8tSfbSfH)l9kysJb5Y@5 z!_aFrx*p}9L@uz*Z}<74FmJ|~>+aRX%(Q`7qaocP`;UKemYqlk=3Lb*=H-z!ZbFu6 zddgCk+O1UQFUZO8rja*R{l_{*qFcz%cFBQ)8w#ec?Va;Lht zEs@>hH8jb8>zXie4Icf#=N+p!S(#j}=8h0S?#q-&xILCE$-PehXd7H@ zIz8y!X1`)9+zv`oVk89SG*b1VO!%ux*6=}ze)C`iu|$wPup?d6%-b4Z%3dQ1*N*Su zyqY;u!i4O7;2dn9&x?x)>GU__9{cr=*a83Gu_4nnyOJI;qB~k%oirB|o1W%WIj6vw z@Ud)nv5$YUI@30!m2rxgAf%Fd;dtu`!AgKNg(U7xYJ{DA=6J8FoC#KYyx1$#S=C2c zRTt}}p_-z1Mc5RGwlWT2t_5Rat^7pCG8_u}oA0nXVLi4FgI<4g z%lVjA-R`B$FR(X4K6bqEqiX!~92Tz4{L#IBp-uGSPJ5Jl>=7A2c6Y~98AFm_nQ!6p zKpz32r(iLWx`Esi)u4@IBYjJ^?`aCfV-6||EX zQg<64L1~)V@r5sd8T|FY6$MS@HIF|htv`RwvFrH3BB77PzKZc)3?{2jpOn5?Dz!k6 z;EXA9x>Lm4xqn>pS_#Ar$FLh>X_(MJ5%il-qnzy4uVkyOJtnz`>13`H8|Ph`m}fCs z4In$;q#_@pF(*JfhMRv3*ijv^&X)3rwG(l}5BQ>vtnc{(9%Hp;bIg+nCtmmxO+8b( z#BX2IUWiZ*m6pPUZ=;>#cms`1r-|S(?KM3nV~)ket76d<0J?47yn>>zuNSqkn|0;m znAc=QLQ@HTsZ(TVd*;WqTYopRjQ7)W2&X;GJ~>JId_A+xTC%*X9{33A zS-Likc{D}gxX6v>(xz@>Gs}kFz;EDeXS^h72XLDt_;t+4#tLfEa&^5hCNttOFnWERe+WyN(@?n%1=}8X0P`A3=D?K-Xid-FKZeg^O1nF4WdPoP{=d{ZKZ*VeiJ(k<6*w#}#E3j&eR=g5wTfUmm|09Zd6 zd@4dhM0C@|6-^+DS{=#e_Hp@e_aqCNrwjmBV~TO`TN?EA)LKCweRkIIQUSoed=lOLqT!#^>MI&E^z9zR|A3SOJ7 z!#U_xo`8E<=}#;nZ+icU{}Jwk5unu-LfrX~Fl!S-q^YAoC7`}$kSU5We{>^IbgWU+ zq?VQ><~hD65uuwZV@}k1wAW33qwAEES?$~LMSN(}L2_Wgguquf> z;;>kHw8&u%>QXsCOs~mvz~1#1Rg+^QMa5t@hBbiDEFNN6_J>3gafuBlB$sP_Qp6@y zXB&ohg@OA-ntZWKa*kthoHSU4hI84Z$*O?3T(kOFq2ZZm=z`L0t>%>y9kh=v(Ru%5 z%)V`CRA6(N4gG_zobwKY7!ZaRJGUxvu7`@tGTwK9H{@AXN;`3h!5j(rSr|Kjh+Tsm z&M@{iAv`r%O!&JdGV^T<=jS;{F0ZR@#d3&ou!xkuS6>cT^pbv5ev}J-%fUFd<#4qD5nuEO3#h85c~)S?6=l~M3iF?c|D7qR zXo>mk3ARW!0HsNrwINi@7gZy3qnB=zb0YnC75i`^ir4_s6$^E=TGX}1jBf&&MPZJ} zD(i6#D5HhRQr^#te<)(1jw_eCgtrQwc=>HQF{Hwisf$yx%OVaV>Y2JDHqMvI|4t=|1>4y|4;NVINCOBNoRq3*%(ppM)w1`K1QQN^MJ+A9ha3A&rx0yulxVz0H^BT_dFd;1#yISXF-^G zU7cF)IsJVOZzq=@6$ZbCI-?lyNME)T-0zd~*q&gc&DEy#s2qsT`VJcM`=2Nz4p3Fm zm?rIhLdrubMU9*`mk46r@CarWc)@Ls*MH=J`v(moa%hgXY7ccTso3H`v5NaeJJ~ z6zpfL;%EoANFv&YL+B}4Or)~d2f(Tl>TNgZ05_`b1}~#`{!;%ui}7wjM8~H{1bv9+ zUX7xzPoCQ{3UC)Cj}gHw5s4-dDYzsi^yYNUCKZ7mZTFfgTl2I-QXxi`!ptF8YOY#4 zt8CK39we8Wnmu(#_B5x@NeS|Z6=6443lluug(04xG;8{Ph&FdX60F$T0PvK7kX%Ra z&7*tGqljOco~Zh+KQ*LGEwNdf{6kpH#1r4Z4!OC= zb{!cHW)wYMujT%el=!-4+F!rPp6z-i>*fuyJ&cF+vF<&Lf4Q9&Nv(iTEe zgD+7*+<=o*&3+L20A?;O4DdW#h+h;J_L&9Q=L7;9_G%))E5$S+lUe`bS1*&Q=x>RS z1gTNMU;2APpr}f4X832sFFI<|a1oa?ae=2+ajd=u5#m>>wjM`kpI!yry5EElQD4U4 zD08jgY;uoy?%ObBQ>U3B9up(nN2Al-m&t4pCUppQN{-4|%azqA2q_kBIoZrUO z7I&JZI$pW{J0e&Nj6)HDu>y1_d4olJLDyT?IiVBH6ae}dat+G-3fv3?Zn2owY*1@5Erf;Uzodna z)n4-IBv~_I*8}g0F$lY{(cg-(tpuXT|A~+*Cgor`f&u!w68L9k?FZ{#eW(j4{VF}g zeCF;%`!gkl!cy>L$CNEF8DZjuA=4OLod;HrP!9Y&fE!Tu8sd~zg6-HMzt?O4B;~3} zCD@W)`LZX4k$94Jx0?EUw95`;tS{MVsh-zJ98WIn-31>G;HwELC3loKi1ANvzi%|k znw9FdDL5;4m=cV6H%lf#l#g`bE`E%8!Rt6aBdsa9KfzWMc(gXhMG0*;m%i210mVJ< znTOA62IBMl(|dw_dy3>H!dniY*;B`sRmSaa*WA_{*f27{&WSpwyRF%E7VkOcFy`s$ zMGiMAdd_ZMz~%Y$FFVJLhcOp2w)cF&;& zCMC|hYfQT2yr9C*6qo$s>H?ge``;;1ygmuZ(esQyn+sEz6bs!JSKIh=C4mjENEX-NHti1NQ*Piv+Rewf=h8}c% zT`mdkB~HT|Sd?YrX>i29fDoGK?6w8ok;x5(uH53(#aT+|l)a5ve{!R3%kg4!O6 z;J+ct+yQN|FEpyOvSrm`w|97wZufkBYvbdn9>26b+R&Zq$GkrAMNEO^5V1(zp5vz_ zHz#S!XAdvhsZ>uKDL@@1EV7^n$cBu!koP?b7ua)WZI(pFF)D3o)DBJ>PKX3>KE5E^ya1SPlyc>;GMIQ0$=z7^-|D?Dq0QR=A6WiaWM zhP|h9S5PKXp7wv*wpt|GUy48Yl!w4nfzi6o1h0G%|Jf&E=AbVJgUu5PI2LbrSp!3I zS&)c+V=pi_>ME2EuewmP!xI;7bf^A7;9&GrD$wlGTUWt%2Ke#;N$HVi-%FQ@BhXBK zSUR#pcR{oGF&XPElETPxHogITbr5J2(YF(Nzk%{@(AehBTXRxZGW zFYy#bcrv1ASS3TK=IUqxOh^2VDwyyDSEx~)`0ik%)r&*=zxT6V&?+&ijnu+GDQ=j{ z7AL@DMPlU3xG?;&Fklv4juOgdOHg(DsVvQQ5c9NigmP{L?&NyXMeEL&{0gHS48@(- zcOP-8HK`-P+npth+itPSpzY(?x9ndokGp;fssGQ2VTSKh-E#rZDRjvY}3X*d6?~0U&4~lv9zcqS4mwsE|CuC9hsMc$NO@W2YAv9JH9#25FRky=Dg?G+% zi{EI+v%RuZ(g+7EdQod?HKUyh!%jjWHw7y+PNbeC=W$v|EX0@p2qsf%+?MbkYUF{d z5~M-*N;hDQ=h6|2lj}{Lj*XL4@uXF5 zIXUgaxfQX>$rMdk_5sK3MC&aQJ>+4VFIcfgwMYY$Bq|L&TFN2p!!IC@6R95F`HH5B zRlVCX{#i`k8Mvqxl>sLD<7?FM#+EPC|Bi)sPy8;(Zz;%?pe!kW z)4|vP6H2`fI3lRYkE$vPQgy>PZ`DSq0Sy1lh#C^2I<%myWiqk?1$*dTEv5XlMT>@V zJaZS7WUqaGP}(>Bk;x1#Q<4q6VrYA(Ji;EXVj zc|3xJh%yOh)P)MKoid^bp^o%Q|CZm94+W^ysW6?~fq(Ono%IPBoLqFH-)e*s=P0{^ zt$~7DtBl>P+?BcM-@QbjaSCn6@h;$$ACYA!&={fk>@rjSgu*uhoqD^*pKrruLDzr( zb`(8FqSsy+8vXaZHS%v`{hu=7F&ofLKeqBi!fp(>DO+Q=Z^_$JrkCBI(A{YIGzEZK zAF9@4xP7Ffsk1+CLbY5)l5k{0%(EMVpjss-L1;%$!+AYT=?zYr>jVzGsAB}RF>BP~ zoC(>f->6%#n7P7GF65sQOhTNC0@MO0J1={|afNrU&$V~}57*m&HsJ85vvKjly14JA z6XLc6eO})WHp>^aBnriFvE`zP8Snx5F4WB+u6j~5%j_a!#%NRBdHVj*jf%cG;c_Oh zrOBs!K|9(d!;JFqIS;`j4fU6-Z9EGpk-^1~uvXye-u^;mGo?0Yuy26*&({wS*4!Zm z6Uj(~%ft|tlF;YcZQOjcS3I?GcaCHWVdwN5pEo;HY@*o`B5eGS`53(N))AXfV|I~G z^sI5Cv|4jUtI|NaKjVY#Z`*w)K0}0$<|wBS4@qEFLM&keBm#5m11u@6&0yDv^S4T< za<2Nuj&M}4#YC*jw6@y5s3pH58&Rk)ypIIx!CzdAzh*lcnb}efHws^Rd2t0KriWXI z&=YF$aRIDeWx1K-B~Dx4acqnQ7>0S=L0>HDzGU%qJB+ZvE)*vMn;P|P(bfrj)uO9+oUpsC)wHJ zS(IYc`4EvhP6*-!dS=)*;ZnL!J*e}$bv;@|&H#+pv3)~hPL!zf;+E3@xy$_0aj0vV z-n7a!!j1No5Mc*#_(2bM8wdt76F?Oh z6Kn~&0RIN^=q1{<_N-AzQX!PIAaKDkeQWYy0g6o{Hj+RJNx_jlgT~@<7f*a^*Qe)N zF+}m5sVLn(zMarSf><2YdHm^USGLTS?TGR=i_;tDg{6aLk)w_1yCp;~sIB`GJ<2%6 z6?J^s`~&fC9-G+&F@NG7Ygc}d?f5ns)&BsLHNp04%Hs|-bLy8f?YF366B<)&q3IDU z)@hP0qL=G?>tAU9)e32Gwf9vbM_FNlFFhnu;nQ?^A-?|UY{wfQo40CMLW#6Mti>sl zz&}be#4LC>EgWe>i9i)$G)~ilz)ry8_|i|s-kq$EsREjr4u?d{IUw3&2)X1JsB{7t z_P+rYa}j6ZOo|8+eA0fn;zQbIOeCFZ*(K7!E9PqfWg$g5*-QAu^1iTYZ`9FsKz)o0 zdxgL@o>bl#I}BM%yXcBVUT|Ne)$)&z^%}WTsB+!` zzLy+ZZC?kQz94o<%BRZ+aHlne2E2f@ToQS!*B9iDmzB{rxSAH-Xu-#~0@7fIa#81o6#i z4_y{6A5&HZZmY{D#I7Ov2_)U=gSiw}r0BJe?cUv)8DxUcrG9r51kI6b9&bSHS6ySG z;Avu^15!6?_JRgEMv{s2I`F@?d9Qaqm~x{iq&^oI6flBbq6}!gQFMWT)jLX z03?9Snr^?K`#Uk-eR0`Brp&M*Cq8X3jUko-$0Dqdl^AGt*yJfZhRlUl@@*~?Q^X?V$L(Clnvw05Z zCOhM0f7zIi6?%g852$XD%KL9uJ)lSRtbs%U1xe+7PLL_ru1&S7ParHA_ zl-VB12Z@Lo6&Ss3P+0U22Y$W^W^JpFbMOul8geQyKIa@78h9@4oSxJ(H<`23xFl?L zmVe!%#m4^#sQ;DzC((wiwljvWV|$3)8zwX>xn=bG38~yr9U^A;G(jo=?7tZR5`D}A z61cOU{yQJeN!fvTFMe$RHRay*eWr;G)%dPjm}L7KBARk3QC*k-+Mvy2fVLo25(43h zmKO1EO?=JS<@~s%O=2bae-?#=YZ5svcMuz`(%OnfS2p0Hpa3W>ep~uDJI#pycvF5` zD!)eex}5veA}Wrbl#eDKfyz5=`%z}&#)(B%Y;XwI3@CS7O$oyq@?noW@)^!*(Ld60 z_XQS<);-{AV=_spY?H|^dG1%?yHtIiORwU}WN~=A20^o=x2 zzQ5G~MvXX#=i&vh>f<^6ct4SUFQEPdqt^;yFIHLl=|4-p9@bdjjRZ;m&IqpBN*{^U zvlS`a_{Nz3@sN7QN|{samBo)Hj>h9KFGmEh8(9q*V?pIO`O7b6J$o_2iWY-6XGm;@ zdFHfjjumm34X zK)22Hb<}Kxh|$yFuS@v`_)iv2Uh2eMpv2?OVX`hlspTIv@(6^o^s&Wx7m**ek2(XW zizLpBdIAJ~sa54-UpJ6qob>ul67A4Fnq!n2+be@t332>!jH}FEUiT+cnhlH@F0mSC z&_j~6;1zv?E7oJRbgkv`+@-iisb{6=La=wKhdj#zh%APkeZ2FcBP|C94TRL{YJp8fcsZUo_pR^P*p!!2uXG`ncZFksx z0rz7r>CWvezfJB5u39xjlCuaDpRuo_&L)PwI(-Y=z+=)e;Wk}v&rkf(fMFl-4fcV) zh%o-wD;ol%{-$yXU2#b@B;|=|auDjFwGJ=l5g_lWtX2{LGW&_K_@p1vu z?}~{bKyWZ{1R4bd2gh3$KLON8xgB!4m7~M%!3Q25Y?}@ZFn1Pqq`RZy5x+}bn6c0; zz{?oOM6|r4<~T4QWF^#}TBj8LWqL$B{q?o09k?O8+;Me7U+?(H&dv=dKG zoo*qQm5hPg?Mb+yA}ZN$|AP-i%O50N*zE-{on@aMr2!w_+FmKmKDzZjngP{25g698 zBo5f_T9N9mjE6$aYh_T#wvintPDC1j4;i^FOSZsJ91FRAkSDQCqt%rNS6I9P_=7dv z^SXXoA2B^geOJTR zB-#$5)fh+Uk$4*P$EfRk%nV~Qf?5z!48G$KedY@vPR;3@I1g%MGe=!W!WUYsc8Pdo z;{IhM>f+iej`$4~zD{~Gqa!iXmC0d_u6BCsd7{zba0tK-%$?+o=)M;Dp4|(&kbOS@%XGduO!%vJcE7v^C8%Rd z%s9;jvB|e!&qH)LMi`gMa%V+TPNu(YyG&c1$^}Yg?z%JJ`yyt6WY zXsPM!Cx(s*&4r$<**qXWq$K%_bK>#}jYPZOASU!wS3Ofz!Dqm$tAH}#M5ho<_&a&| zcT-A4xguYg!u(74AAFdoH;68jXewB2lRz_f1PH_g|%;{1|0gQndYBh*K?4 zDFCQr3^+AyKi;Yg&`LF*g|5_pPPQo6*6Rx^gQc5!aAqC1(w*QuZu4d*&Z{7Om%=+>Ezh|Lf zN%%oy%tgYbXi_|$mxcVid^cYuG;+7{j~fYcn{^^ce@jJc z=kn7nh%nXnr)6!~nl!z7jD7|!^PxV&@?Om9k;TnPY(LHQPns{H3v^Iw{4R(p*uVxf z%oXs6Fl57EN4`nWpOERt;|~1>xNV#g1BC+RZA9ErnIxA`Zxn;5#7!LfD8!`(@m z7K9h$i>J&CE~xe@Xf6DhRzbFH1T8Fv7SLh|*k$g+O+&R3s!7-hYW>DoY z!)ym+f{b72Ent=?ipWuM-a@8C8G!mO2*ipMLRW@d^@8jf3ZbVgCjzg_JN+47}ps9%QL`Fn6XhVM0DpE866z{&MvxxUt zoDwNtSd$d`A&c#Y&ez?Nbqnajtz?_^A|6-B z)6Zd_9I=*ubw7=r2D<&&Y<|Ei6nL`tzfA{g=2eu8VBs#WtXT!8F{M^C5=4#_8S-#4 zE{k%6Eh1Ki!wSwTLE}5UWlWnF+Ut&f_skTDEdmz-+p3S}x~%(r%iPN6w>O3@Z;rT_ z?5z!6E9ZXCxi?Qw?(cM-30BLNM4s=*Cs{|6X=n-vKeRxk#5eaG0iV@2z2GHG(%z$} z+L0eYcPo76O>38a4vM5Cj48vHsMelC_Fz~2l2nW*d;OOn-p1VrR!(iV@ZVrSWTmDY zb!dC2V$jD@McrH6pa-s1WMdC21*6`GHgUp1$>qwR zgjR(dWB^6Oq4ZZ@a?@{hW*&6~bGR&2`kSvnM@lODgUl>2sVM|zXxPUxecGE7BmNhO zN}jD$_w?{cXrZHQApDVX79haJz+->kg|w&{Y{3cR?G9H1;Q6Oy?EZvmzM+d8=nvdm z)SO2!jDZ*NINpTG5>sYB}iMbs^Y6`pC~qWl{qn0baAjk~JgaL4dOsiVF|FNCD8u(f#2e;J(l zM~u_juy9U3WY|J5bdCe+qrwX1fwP;TGs3hRcC|Q_(*Q$N%S#0og~HG{NH?ce^$YgD zyGDIb&J$$<50foG*A_@2rhgn6#O&4Z_@hNP`S*YWl){#yWAFtfB~h_q%hDB+u2C*7 zqAwn@T&F!fo9JSo{a!)c_K2@xp2@rrNwQ~Ncb5t8!!X}>x6UV~&fk3;6+P7-d~7`U zSa+nJssD5e=I7RT@SvvFc%L^Zvt2n)CQ9NC+5d@*)0hN!DE|2NR*~R5T*t#SC{lZd z80#>GiZoI zOh_c2XQ&UTWova)oj_mksiJr{OP7@!_3H+-+cBLH?Yo*zzB%Hh*ThN06`6H}cSGv( zi`ZQ`esu%x;l$)vM8bcWyK(jCMA}EVm~cj!Sm^DVWj1Q=-2ij%hkCa)o_ARYS^qb# ze6^mnnnDJ}(QhwH4RWnFr_GDNR2wj>-sDtqA4;3G53&iu)@r|}3e|*?o@R@N$>aAf zu+!=Eo|Ac(XhEDRUdntF@dV4$Drd0z8`Tew#|DrQeT>MF1G7O;`+*p7r-vJ6Kd~Dj z@N1;;IC6^58iG0%o-wZBaSG{bk3T%bRPp0}FrYs|28}PBhnEwD$9Xa5Fy9B~8B9%Ffvd%zORA+ausP-W1N`|rHe4@_P*?Yz zq{}6UI{GT35~ASknl1p>XI}1blSp~lH;TFtUY30)&$2k@x<+MIDzgR#A^OK0QI;56 z9&Kv87%>alH;lv4(8sunHA|OE7$n`0AuT|39ee32W6JAye48yVg3{nkzTt%H!IcEG z1LbuL-;wAOVRQZ1mO}566@KYh)TPC2Dm=ROHi+MZ2o@3vdx4Kk3NWM2+Tx_^ff_2} zO%?i;rorj!9vO1Yk8z8V36g3d2t{NivMo`W{icy*YNAsYwlv5|-+Qt$wko&l8T$bT zt1w&dDWoE9Y9SB8Bg=hc^TcDjL9H;2$YUZ}h6nAGtv~>rBn`W}%FC2w87%vUkWr|G zr#6yzy6Sm7FnuU&Bru*7iO7?LT}(o2{Of^6h-wGV?d(-OZH*P^_c+T~&mB-vwdQ43 z!}@r4$Bn60Lv^v?5qePJMZH&2FMLnwM0b9T+GBJyOIoJT@PT$`IP+v#O(AJIR zh@(L>qL=i0KXH&bsyD7dJSthGR{u7JYUq z+4{(@!99v<59Y7R)ZdW082Z?`(CT*h%(q-?bne|G0EK4^)2zFKtx{qx?;DFFXK$jQ zd2dKQ^%^vBU=Q@AqE?9;$a67(KvXhcG z0**}ZC^7;AFuIh;afw~0&qN$i#QqD zjVZ9dfUgs{wH3UJqt%6#4W@lPMvlh$T?cwW!kU-{=ek+W0b810!Rbjfi#dQVUvp;AnUj$jMf}@wmfaWTtYb)j7&wEw-|u;-N?ML1o{y4DAA{xRGdv z-0%qc&r$k_D_?MPKW8W#q1H(`dHjJGdkb|IFbFP!SqXoL)ga+A@B#mmR~4`RsU@yhj*7Y$%8+eOU3E!g#K>QBg$|1 zApFk_0={(RQt(H_OmvCT`T;V6vL_<;o`VzFbIT71TpR~ARfNrRpbI#Q)AEE}mD3Q6 z$9u2+RiSE08qWrKF>OiH%yK%&U2@Uz)YYRi@+3QayAlEAX&M#%Wp?|#?F(=nEM=2{ z)WKW1sXyYPJ5{7Cz@~43MgIp)ARvOD0>%3AUS)~`Yqi43^>bH8RVZ*y^e|2&n~T1; z8p0!AJXnt02qRjkrCbX80mG;zg;bF1XDmuoefocFMx@^TiPy1Dx_!SjIY~iYX}K7$ z@g@>TSHn1Q%!k~r{4yv2fgp!xB`wk8kYq2-&++=zV%WKqFXhj-X`W?Yq8I|83Z2>6 z4rXaTk`J9^yvp&s;LD;)q%8PZZDQ3Q`Ic;)kf7eZU?aNW>ZS0way@If)8wKX`}hH(Ck|-peBlg z_~yO(M5d!n&Q0}3H3WhKo@41_q{^L_5JCil>DJl$rLJDmuD(gxuYoI%8H1%SBfykN zUz{54k0o>9pUn#kIa479X3LAhlKx8{Z6kW{-gSB@nFpAIyJTu;R97a5!UZ>>LCW)2pfZV zt6cI*q@0?5@sCKr-XK*5W>Jel(0#z^V1nBoVD4*vF!7}WuFnY)l=kK@%KKY3^{T+} zf~M>r)$bQ5lDD-=?tETVPV1Q*u3qXwQpz{dL83ie%46OX)c|_DnNZ%C=^HKGW8H8e zGW>$vn{JBC0VkW@sEFEos|~x?W#fn0-^E1#+!!e9pv<{nUBKmaODAQfPDKG$O3rb^ z#%E&@fk43dc{1GR^Z(R=Ri77PgalfCTfpxapfQl0wv^U5{%B)b=bj|Z`>*0BY-Ni9 zndg>ZB@Qj07#JH9v5-x>#-nTfbpLD^gByDb9?O0$^-R9rifX?TzFNO`W78Le+SO9l z-d6rvTAW?lRmu*yWCxrB?+OlpS`o@iE>kGEm^S>HPcmXcODBAtUX1I(W(5ET+8J$k zlR5j=#uPBdMCC8T6;{1s2;_p6;5I$A7b;=yy;f-i8B0?XRYV;wE}=@sC@YGQCA< z0Q$<)ubu$zo|o^uz8*Pwf4C(Hc4zHZzgacM|HXRXLxpK`@hPo{1=a%P*O!$dBh^Ja z?^;2>_=(cX#Qbjv#avRToB$T42>DN*AJtokxiFgMedMT0(FfRe(CCesxpzsLAbp%~ z?C=a$bC-fLkZ=qtJ9_CZt8?bx|LQehIo}V3j`0J@HX9;`R*>jFtLmPBZ%CysV*eXQQzTRkLK)BZ zCxVMeYHW3L6AaTO;-a0sK)oPZsvO%6F`ZkU0u_5B;+Vp@q6rj~nWRY40kFVu&4!Xg8HSx=D1jX{+4 zMrGEib(gE`NNTcN9R9mO-y<2GEnOB{(OdpXj$CQWG&!^Uhrc_p^!%2yl?k+%99HGE zeVFvDdJiZbpW1vPj;RY{sZ6dDU^Kgg%L3nJ7eqkZG_HL_UNq%Q zQ(xm{ng0S+kYeojMXyK+si<0(edMM?irU6g=?HSk3RbhadDKq{?UFN*oDNQ_Le$ee zaM4s#%OSw`L*+a5pG8aDaTAvRto|I4B0Vr@mjVBHMl-`sV0|5UCDlC>VFFZ~lMHQv z?(J8wsHJXG=04w5DtNN>>Y~>cL)Y_}2wMdWjz0bFhk+I2GUt=lNR8LRiei8`bxbC% z(7z4B_y8SHJxu#UH3w7=&Hqgm2McjIYhg33@4sUr4oJFN`|g4u&aPb>Mmibu?%L8|ZpNFrTrU4q4pDB1Va6YT*9s3((zh zn)=QqP|-0ki6prh*hm#O##VUe`hWIeF;n&rEMTa3{x?)y3$p|MmmU7+fI$D8d%58E z+)rrO`|lF98Wtae17F$Q=AL<{ZjMX; zA%JAS{#V~51CDgb+L?=JMitk^jA!9LsX`kRzgN0xe4xdAodqBJsfwZsti!c2K#3G( z1sPJw9(j=Ohsg_IoBvSH8!|_*@!wc64U84eV5IF>Gv6OF!k{k{FqAMx!?k^5b`0j% z50LWpK6HXDE{kD$YTP+Fe*Jx)$eWmL|b1W2UrcUTp&ct9}pCrca2aOwua&RrV zyT?}umjhC`1!qs8yTYsf#>ppS12TUh`noY!0_W8Fb4J*ImO zV1sb9APZ;P?=jU&>tcpdqOO<-R|9E`&$kz;pZHqzK175?`1aZ7whmgi&fl)2@6qv~ z3baO=^})wb#JCqJFqL0AsOCG=v#2Ttz)yETf%gI@H{=tPru~xe#V*0WiXqW2!_4T= zyk&l>A_=aFH~>TdMZl|q7e1xA+DQi@5${Q>Xc)&ux}x9V(at{D(Bsx2;E{*_A%ZAC zB3LNBm8=sJ6B`%blo*U6z&udf-FB8sL%>DDgLm5O; zr09n(8!3lRe~}hm&5f;hn0Cr%Mg%Ms63c8;_5pj;eO5GFI4M>xeVMRYFmC&nwUFp3 z9zIo7f*b=BPvx|geGE__IE{tyr}B!B}Z0N>T!*z$ngyPEj}^xECuOz^6ss#kw|Xj0d#k}mHh`Q z$oKy}Fa|*xoA>~_NhrX30mcMf37~uMJ7G;2wdvlb!Ns$atK3Q<>{k8_5-1`iq!H)V%^gBGW zouS<_%QJYXg`dq;&G**M8ErT`l86)l#g@*6aE9>cJDP&l{}Q}e6Nh4ldR5t(Ge{zR z#eQr+jG31_lnzG@4G5j>m(%aeC2m4ZZ`X@Ojx->}ul*tr5w$zIbifpe$X%o(Kc#$< zU)KGTj^sq#%<@n$q;w;=Jgv1YUNCkCROch z|JqVA+sv6GTGpE9@U?E06Shs@cGpB%k-{yE|RHvqU z&PO3yaoRrIX36e#GJ5!``poih|0lRzdt?b2r)vo&{@Rm0Q`Tkj0}Fr8;BE}) zaDtG|fUtnzeE0mxV--Jv`kK%-coo7QQ@=YVXzDn)K+9Z46D>K?y1&$i9}sS}Jv~6v z4q)%%jp3clZVAwYWxq@?!=qhv#{Y#Zo3*+dY0y;WPF$8UDq0EpS?%^#UH^+A;|6?{ z-3s8HHBcD~sS+Jt{#h>;N}agVmFZeyUxv{Raz%z{-kj388}K{kF0J2vDR!WG!&{Lu z5#zIjeV}rzOTc~^33KO%wxg+a8|X3O=o_}~G8(h#lG6hfn?-Ke4X<(%5Ev{mx<6Lq z2~HukB=~Y|8iRzBHIIRfp~cNake&C@1{c0`l-MjKtJmf*_+&f`+)t2t(SQ-=|13tY z<3(#+b7FbRAQ!eDTOCJMP!B!godt7-)=({d`RA@ z_UqLUV|=n>dshIf&#;`#_Nba_z&5=SbbDmg`5QX}6ybqyQ4PhA4Wqbi`;Hi|Ak@#VVfxi14|F|Z9{HLi}JhL1INYG(j z>f4OffZS`e;P&cj_;zHr)ynQ4C(2EK}8Twhx1PL4QmElH#t7X zV*o5fIY%!8KVj{G7S*I0j~c@`mbUD^oB@zI^2`j-X{cF7uVgQ`ImEEqP1@n^&a5R? z%A_`?!c`ji5eoWsG~u=OISsVt{gy=NN0)*!aj(4n4yOwwG{?t1xDkPP$Ymidm2JuK zkq+21*J=7~9J<}Vs)1P4=XcCzNI^z+Uzh?*IyLA{#;P-CuhkWFhekj@TIigd41Rtb z23q!G6+efU$fU4$`n=BItVc6GF24vdHYmuwC808>E^fpMT7TmF&QA*$H`5de0>^Z9j>toQ) zn+8-IVOJ+Iye9>HyH*}>kN&`ugFjgXQh9#%A@Qx#H}QB{ANDY66wt~Hr5*7hR?OwW zqtTXSBp0v~CG9J~=Wvd%4~~>=Jc#}aD=Q$eu*paQ>ub+kRFBbr8?R5QjyXz^!l*66Z$I-pt>!J*l75RW{Of?45J8HEaPEhgeUSpqX_*3*2 zIa+8Tny5L8<-rv9FFYK_eJCjeDqePp3T_HmlwpDei24M70e*?|o=+L?ACpFntJ>>ZVHwNJ z)=+ytQHqT%OXR^`0Tm#g z>}5jz;OKvlk~-YzaWMIAa=7s&leF{Z4T96{bevC;S_2{4N-vKotAQ?_ZIJfc-m=e) z(ogT5N)_;P`!8svH$QHZrHkh4+cS<~cgl1#J&?6-R5$%G7! zvu{FR0mj~Qe*3G*%EQi?bg_hsr1j}&8i{LebEEs4d?&~HC_H=^f%?_&l{vY=FvM2(ot9J&mbTP; zn{%6$2czW&AEH+OvBfC@=`EY?cI5aps^3w#50CJ>PYrlcAAed#-~F)2_y zhDD7N*&VA%tU+C@KShsfCna(t%{8ut4*Ki~XuVw>zoP2 zGeGNjF3dw?(Td17I5U()M|%*bf|y7S|9EX+Z~vSbblV*SO1=8aT~&?q@m6=bPf23h z=oeyXr9^(j*dmZUGMUexPLjTdf>=ApQ=$1?ka*+Fx!^+@^G#27|5Zt*ICl7A$cO_W!qBR5`5I;Zckx5)-%%RZpZk1 zPeGrb90oLu-QSRW28*^Uvv!)N^Ivw0N;*p~wmXX3fwHnM30RbLN1`;F!MSOhr~hTZ zB76zQmlkLl?92=cWTEQdmh#R)maJ}mAmd_zyu3cLu&E75Vqx8Hj}33$m2!+DG8K*Y zO57}d7+3u4^={TG;B&on^K*a2A!7F6&v52$v5#x^B!lyGo+-1(+uK1vZTSw~4Cw=3 zR(1l=A?5;ih##kVl*Lk%|2&Zm(-aH~A{ACmxfeoGoP_T+Pys=sf~=dO=&dA>>*V#j zoibq$DXe|!_}{*!y+nar=^TZbK+wpO4t{792pTn2eVJ_b777t^49br=2$?uOBmJcG z$4(CcZ@6@!q1O};7B5Z!VKK;%H)`pgK#NCRh2o(OlA@eMnueS?6TPg#F!Un9VyM{t zWa6FjQ1Ns5YlT?(`r6+c6f2g(5MF(a0tq}_I?7|jzhcuVSSoY$PpMMhFby6JB8ns# z#-gFq>~Z5X#xnVQNAtncTW{ok;m+qY?h-=4e=(u_P*4r!mNYgo*R;ku-(xW)TIeh; zvpXsfLrG&^ov}2sX;04+H;$PG2@TuGG7bdvfk~iGDxr1mu!XyaZO;EHcjS}+le7BBITD_G(aw} zfv#KEs5|U#Fs=DE_N`nxy!1`|Oo)UkZ7g4(A1&ketxSU%fj6*@u!q>*NF)3}(kOh?9h%(5J(|k9yR_%JXy(c z+w{<$=U9f0^b6;K5GelJG(x$t9JT;lg)1ZQgp>I&{gH9a(UTl>XHA8|d9#&Y>gjDZ zJeMK;(fRaBTVOd8>8{)DDNoUiBk?!z^FBIiYMxZ=3>b9=laKsCh#B}fhJc5$*wli@z%A8aQ=}3;7HJCC4mP$w%s)L$_WrSKD)})xI)9dkw>UDsYBKX;Fc$L z>}As0%kH!!Q`$F_W3ZZRognFVvR(|P?CMVBox#!ka%1?gXepwaPIb)sd4?EaUX6>- zeamMY^T0JWbuuuKynvD4Fp!IFS+_I8Q;yD%vs`%{l!?vSK=(aBA(HE>kPoI3>Hx)4 z>dqU3Q4@1Ut+Ie68@CV4Z2n)g>$&TR$$N zWs`ki^SPCgXe+aPLh=dQkD25NPZ_11il=uR;;Fe2QcOIU#AdDW1tUp-*U?5e&7io9 z7h^XFhY^|SR(r1rvD^8LCF1o+oOg;i=L+%Y4)m8yrb38hNaA}f>(54lI&BK-xx|Jl zcWlY7j!~k_YWW3++Qel4fCF3|PPI#6Tqr%bacR9TtmmQoOM!=lHruQ_1B`8gO?%$R zyKlC-sS2E~H`MzZpFft7vhlH-)w42R5@9Ceh_3*=0mb#(-IezLD=%Pvs18Mnf7Y@C z0Z0~y zh$Hd}`Vl{ndw_EcE!SFQ)LLla5T>dLFiHDQ*iMG&Q)P1J#fA5Fk2OfmJaO zA14lCgmTq80jmz8_l{Y;0B(ysPC`?9bv4M+c4k|r)(VM-6@E&7l9U*DH+)Y+8Go1= zZSKJLn!{VmkxR$mx}yAE2(vLa=v1gnaoG8^VPS=yim0Uw%OV zD%nn?fiWmG3Su^=_mzd9DA-(SGJ|N3_;Z(7F6I*&^klY0OpXaR^e+QC4r1f|F`I43 zDSd{hJNrz$zg!eZ~|gY{?4Ndn$1UM}7(B8LUp_+N{Ht`~o|M@xHEzz_xC5#({rQbbrp zjz&UJly*O{oeMP;J3n{$oe}+|saGMYkS-upIa%tT z%buV5o^e!jPqyPv)C?Gil}MuTKnAvwv+^llMj_F=%F8h~XL34y(1?P+kHK#pI7l>0 z{M;LJ)(vb_&*e^kqUWSJV7fGUKfK(OK|<3s(=+~_UcigJd++Z`F!9=l*9;<{I41i> zN5{s-MP(vzX{gkCd_@S|k5j!MFK9;DcE`Vuz}51~Et0CKg~2K(k)i>SGcO~Q-5W+; zr0l1&oCnE64cm@7w{UekLrAe)U&nc;d8A;3dp$vE1OLgdbP&-1pyYE;-t&9)*<3=y zgw;|;8@pi9)}{RXLv2dh&Z{snpbHtb`(W6}Lg+|LLGkT{b{l=N1&Tv`?9*z~8vXos zpCC@A!&_#T)sOri@aUQ5;V>p!?mxbjl{)DoDcGg&F=-u06T};$`|Eqn_3*#fhCHG6 z5)oiU5WgypgL+(`F)+&r`(F9VjC|gz_nFinqus@e8evOcvhE9DMRdDv7JPo!Y_Xvo zh~-9JF5ytTt%U7!lq*P_Q_n9+k|&7Tatq;jn44@UI-YP0M4)`mhmY)Cchl|oRadae zSCh*1lGm;7s-(TbL{^AUyi*k@A)|0@Ve`)2(}M=stw2pHqFd6WCSJ{l(fjZBPPEFOgB#-PGLg9}O1{PCr6adeG zK9_eXD4vLqF;$jPevQ*X+Jn0WQ9{;8TPSLhn>4>cT{8uX4}ce;8tnCpa#x(H=PSwypne^m$XMlu9v)D_9p1J6ywsfk2**(Rnfm+CuWX^*1A^i z=Fa9H7b7(*Gb`x25!R;tR|5Hg`k;cM8pvNKP8{+m=#5{z3-Uh)ULAs11w>DZkC(ST z8bNqiWlhM1l54hWW%n=%d43_Jv_mzB_NYmpGNJ+r6-^j^KeH!zr-gE&{yh1iC(@by z{_&qOUH0RnT?zLdjaj?jX0e=ET(b*o28BzdVC9xnMdZqKZ zs9WgIs-z>&LJ%EJ$lTgjAv}eb{=%pJPwCJa0pZ>7(GC4(U#QJ+FrTB9BIQFTqH zH;6B@7B!U3Kn~0Hp7*R~-p?|*Nq1)^_fzNlp;CsjFX5t;z)*P9USjNY76DU>x~sE3 zDu)Z#W#{Lgx6u-GJD+qdmsZx)*>d_EeJ49CP_~hTkbq828GR8bd!I%y>z0x-x(vFj z9n5MdQU+(9G(%RmsvrN$EJA?835X=V1)dv=uhJv0F$d_skBur{tt7q`&KPT7skbOJ zC61xwWE$b&{}>3B@L^7hBPW0a34DfK)dcu=1XYRs2;@7{6;vDmYT~BUH#Mt)|2Cam zCIqduWb9fSHo=G2LXS}?s#g$MQb)8*hGBjFg>c0L+Hmsv1EXMbHc?gni zdvLeN>(?(;B2jgjb{MqCqu=G4Wr^wqyimxLf4pe}kamAWfS%DUXO%e1D=p0#*y?ZH zfvsNW%Fls|AItmVJql;tcF~W8za3zt;nSbTs^fbLklEHn?CE`BfGJhtZz9(=OV{6{ z?lEUM9&OE!Y$#-{Zl7X5>hdk{*)%`L?@vDYtYA<*N#fsp>5tO={rjba?RBkJEs`L- z42;+-`z{3G%bas0nJ?Aw^6;i~~+pc~CIPxIm5| zZqhZ&4ek&fgQAgxs`h@H ziB7#hDypP#gYcC~SC62`Q-1E-BVol6kfF8(gq6#$-Mm#`h(#_J<5I5@QIzkPvl31i zfEMg5gtG^8rI^}X_naCaU5IHC(2!9e7v$-yHT_`9sK^qD`LhdaLtDmOwk_>!AqE_L z#0sND@fkh?Oty$LghsU4%Z>kLenw4NoP_@q|=O~XCY6C|kNd&AqiH*6>DwB`q34-q73Cf$B; zfU$@9P8EKiQ>tAcL=CyOc&$SB%Y-RXMOQwB%tT?S7T3+>mR$S1T9iRmRK3)wsW%xB zeE>G;GUHI-wf6*KRoAQNr_v1UY3EiK_*D(>RPqb^tbf*!sD$zQueMHzRH)*K`j`1X zc-Z&eF>ybg66yY-RJV}EuD45u?E81q5?G&isS;8~85(?_=_AS!M;V)&*fS1aE|y~A zdOv)@!(*SX!I-?i>lzC#7!lRNU}@esKull*a!%@ZXiu~x&+z|MBXVQzuj0MU?Lq&K z0>QGvsRDGN9ROdVky^Sl_{aPIfB!K~?2%>S=t$}!7D_ang@gDj)vE&0_*#D)lxnaS z!f_e9lDP$Y6x*|+hd72$GHYM%N`#x0!+w8g$f$AuWOH`jFy8gKKR&cLkmHZ6XD7%g z+(Fc>dE`W&-bfUKAE{2t2go>;LLRj*f%6KsQ{Utx%jv@DNa|;rB~Sj!A`t6L|F<3KQNY}i8rRI@WBs^{C_D(>HQy75^6_~-f(uS0BzX-vut$;?0)mD zMH-l=UPB`3s~YB$yMfHcXG(jei^_0J+b*7iJoq>`952;uTN}L$urE~O(n(Ic*r=st z+`C21b>8BveJC3AsKuwOoCQ9zRKiHHL`p&SZ$;UNzF*g7@*!HC7|aS+eEx#LbtEIA z=aH#6^`D9oWlO;dxT1viFo(d4!m+NEv>ODeHJ35u9)Gw9nvM@C2!pMF|x^s-CFv4Tgw!in?4(O1sRC^03$~g?nk{JrYW34>jD+)cv6Ft4B=3|GzeDhwkPiuzHU|uUK5;K#nyxk}b4yZ^g z9gs-Wk70mEM0C)VqspN)gOp4NP>}0(R?8)n73LVrZ7~Zk(KrQS3{M~a6Jt;(r}a|CY%yxW*il&v9}|{OXDf0pIy5< zie$n(NDj>Z36^z$VChxmP-Gmh5Fcst9#sAhs3wMW+L3O*3*qR$A@*&iG;z~@!=LfN zv!D>vc4E__>G-Vc_N*OZw_fUpQh@I9K5#hBI=|apd+VIqFeC_xDV6d!uDMT9^=DT6 zt6q-<<@x-W&*P_h7E!>KP=WsozHiP3?eO=u=4=_=P}(7GMF!sc=|+(oTq96Pqr`M{ z((=O_Z)&Uz`8A_GLZ+#Nz5{+aqC)YUea0WGp8=LixNS8nZE}D3qF?k{&9u}uN9p?C z1^)!B|$5U~kfsN1G|} zz73Kw*O@BiIg5a{Vpe_ls_)$%yPU>tM}JFo_&!hRGRBN`8n!R@6Jx}zKgmkJVU!Qo z{DhCM(eNBvau@mE-y~x9H{@&a)RDT;o{NoJPg`pdE3OSXk(kk5>9Eau8`Rrwy2OLx zV|K@_C$Qtoc|fDl`#ne(1@+RnA?WBl&n$hczCcMLlj&~WKT&~f8i-79ECf*Sjo9Z# zTU!wTF$=y0fjCWjaxrcMO3PA?)W|+(US53L)CkfC8I@4Y>JrPt3lY;JJW}%!d3dtkU9ljnt zDt`o;8`DSJb!Hv-H4RNecwNqvdN5V}MLa4-7HiR?dTpovh?(J0!7W7fd}b$RM7b5} z$-b~^Dq_OF``|9qO|9WBzigwwPg><;PV~jG+KydDR3?c2ezciINWgd>-gSSQQyNVpDg^zjAu%^L-2sJHQS z=XCL-4qX4)CJ;<0YRS!h*U^~8EA;-ODHwJrsT|$GrUTD!Qu0wzHlE2ivF3$DQ!|S4 zXu|){6yBD&zd7L*WW-drtkIIL>k7hXD)K5QEPPBqJ!EKM&}dt&^KC|6ZC7VJCPxpV zbBk|ao40A=43G2WMcB|`$LqNU;l^`1%tJd-Tt19oN02o6s9y(H&arz*a1C;B&3$dO zNe->Fu*S>ATdYq|;J2-CjR9~90>as}XfWf^Vy#yYoG~yO+3kG_7EUTEcjFi`^rdp` zHHZ*IInTQWes!soiO@mxmDH{ZjYlzE|x1G_Dm$(si6tlo?bcvEcCa6 zB4!dExOZWRtDp1I-wBbW@Az7?1pvxFWeS zch0$;F;J^etz9>E*f4_%mmyQlty#gpkr(rl_<=5iWRbJrwAUE38KEHK8q(TcK**+| ze00N=jWAF2D@1mur#u!!Cq{h92xK4WMVr>eBLU9A>;LaaArpLF^ zX5O?ia5XR9o?N=y)2tlTnB#e-#PwR*q>d={sapGjL_s#K* zWC@&Uzp{JN2xCeus!l(#v>2d=q;YPMpB1d_{Pv=6;HBjL19cI|ICN&#Rm^wA+@Mdm zLM~mI%el}%-s6PY@;{pEq^+=>bMa9roR2jMF9d81jyKH!NKs*M0`q)R0c8(zX@qYs zP^zvNPrWVzZ}CAP5toK$F7ja}{lTgqCFw?=rf=d4LyLlGtCzFI4tA-r0RUpAQ$Ppe zpo9TF6IiC`v+&8vekvI-#0H83o_#?1s7)6 z_f1uZHYiKEfJ2a?=W@t{{y`n%?~f26Q@yxBIXdL^SIi@LotcXYsWjZ>$(UDcPGJ}) zWvkXb)mj)5jiH} zlb@>OVp2c=A;=b-f7?SDussM%UdZ8v(-Y?LZgV@Dw(3vyu{!R6D!%sfyxAEB`Lq~k z7vk+iA6fr4lfgJiSWo&032YD4%?TcFA`12;>DKb|~J zku}|uBJI#0DkJmlMRhy&w-d>UwvM#ZVeq73^7Y=*eX@n5jBLOmzNDfQmAPeMK>SuF z>gvbTn(l3R4PbS+EbFqX4m*=a{ojNjE0Di>fr>|UwFRHCQhm3oL->N%H!xK9`8Y|8 z(q2$P6>G8k7aZGb{$U~^t^nuIV|C7V<+}BHvHm&!18ja4r^9CanQViTkkG+5I?okr zYpU%|cs<@r)0>fD;C5BT9i`bzt?f%Aie6W;4LBBUGauPo$+3U$%V1C`r7?2oxRAkq zs0ecN4^3c$abD85CUdnQe=_BnAH4-H6v%U55$9>pFOxLc1eoj9G1Vb#?VMx47hO64 zle63oQBb0h@@0&vlVDqEMKzckSJFfBWoOmhZQ`cNP z??mNMNwv#h>Vc|g;UH{H#I1NnZqdar{Bw91X6w(Ix?AOlx^A>aPaO_-I+kv0rltbz zD6){(P{`;t<=-JV-je`IeL_pj9qHB-tI#7Il@)aNC(vtoNCX^6}8TJviT8+OGEc}za7i=703 zPOp@*fiMOL0%mq=3uXzg0pr3|>rqet;})!$(f!}6^=FT~V}bt|7c)du0k%Z*1DDA> zh1bB#0vUJ7@Ac9Oj5x$`Z=EX3#DVfubRgj$kL%v7U>%8-?c5f@xMo2}{L(`IbCg%P zb4Oqh^wNqN-M(R+OZ8&XzlLHBGS$p{Z$gGtfMZ;Qe^v@_6@kZ_@m!%#`G$A2s;<1G z7;UJ;Ly9U|1btM|_wmh)0sD<>hi2-xcPhCFf!--OS@8s;!QE>spSIa^!DTZ(kL0IM zIgmk|TZ(~$b%dJ$c;&XL-4+kQL4=RjG_cWQnY?q!5I-%&*2E%X86g1#fPuTd?m0oG zdX~Yam+g&RZK3V_6!s9iPJksZ?9#T+X1d*RDT&Fj(z77}_-xg1UD9oA$XoxA>fQiS zy#kC>*X<)l+#dtt5JL8bjm91y(1&z@I0SNw2U2;9f(pfg*4MZh)E}5}8n*BVS-82p zrVGHzaAxjT4BC|e_pBP<+^0TR0!Vec2J^7y`zUC+lrR2?ej%-|afq=oAP#}TH2ilE zu}q?}UqbAnX|#t=G=+aWv^DbMxprneWe@417J0?Fo-S0k<7wydcJ-C5j(ytE2LEhJ ztJDQ%xN|_hV^eq7_R4cI1eM3_lUo~tdJ^MC*$*$$?%afzT~(~I`VSsP&}6>|o5Hx`NUluw(3Oxbu!Nl5uI#eu6zZazG!!6096~OI1X-(xI&{sk z^Ru1kDr!T!-&&FsOHur@Ii-AAhX=jZ1Wo@L6+=KanmpRUR8#gpr3nEHw1pqT#q@Di zI)12YRkKT5>VQ$96a3{DDKlCJ?!22brILwi1@=x`xlRMrH0wql2-Ahr&`tvBTYEm8q-#r*Mu>qS^@o!~G!k1_`OAxiNKgQ{|v1_n=IXDn~HYmxkkoCodv{a@yaVDiLfI}ZSQl}Apc>~^ zug(;}y?ttcp1sVF2Yaa1q7#eI?r(t{)9ek16hvYz7(^uw=#=zMi+-e26qHhqZgQ}P zE|*wa@6}wBH@+n{)S}x}bl0OM85+1qscld->vv>iV$UU-h=Z8*KfESKPMwTV&0b1_ z2?Z5L47G(bYq{rc$L%I=RC-$g&9RL`N^4}?oHJk8?x6N6NPJrXV7&8OHSXBhTYxft zehzp|esuYHhMBM<&c885;>7%vUy8$V^(M}x?54Q$=wWO@4|LSQP_%7#9XMm7L68ZP z5Fgsd47O7M$0^Q9hGo4P5F{^lf!#n-MhBP)Tokgrof%Ry0*0L5oT`sr%?hGG!~Rzn z6WqOI`9=zsBtbjM$v@=6xrYsr;GOCi)x`m?B9~Pt(s%#kV7l0HbG(?0#{zof;(5383g{MP zR;BT-cpzrDATmWW{E(!o3_hXqccHcB^PeD~l3z$6$>W)9(37u$nehJv zq-rcRM~%Zs)zGDIQ7}c7wiD4il#2VqYz%=@B_T1KIMe2Z6yI*l^5-?5me>B{Sy(BE zV!08&2guFlwMo_?KvCP_*4e6{t>W>pc4g~WfN`-+FW7GF5aoE3{6bEfgd=bNz2%i^ zb;Uu{=C~qN)-A}a(_r(Q=ssNyjZ8aFt#pzE zG7zJQj7o_T#(lU7J))Q|#wjyiYeH%IAV`w`6}3$lQN9YXkpPV9Utt^}D$GU(?PHpuQ&80)9$y3f%BxdON)yjbH1>?3iZ z(dbh>g41!hOB14k(BTfb^uL1!-! z!2soL6?J4^xAwV&A>F-Y3wPfMLYKS#+rJ*G7L;)uoj1vHlU7lW%%~a5pqmx-x#+v+ z0TF($dwsi=y}RgwXjBw;^^7Y@$+^-GJia%Ew#UTa0p$zc z831t->97v_ofL4J+xeQJFc9>rwBdgE^-jBCM;&N^;FnVQpEHWz=-;$`UjyJ~y;)nr z$WyI4PlkFT8lcOEy?Y|&ath|EG<3EwG-1uWEV?Zv&U~6(h)d;A+gW@p zG_?h0$W9@{oWG-5Xx9CYJ#gciy_;>VY^D2WbgM9kKp9YSMfL786}8>O@;dxbJSTN^ zU_Dh(RDjTkP<9u#26`XwOr}PuB?dP7Y{mZ09v231la6*@OnS)OXBZe4q7B#T_oo8D zfh~4JpaPcd3bRMktin*oqlEL~p;`0=kGdX6H8|4@LL_dSVLpL9ea_g!<9xxAqLEUUwJcPYmvMX4b9GYNc#xA%#{rTK?|hs890~jn+^9zO z#SQH*8=|*Y_U&%0rgu zOvg(94#SwIYXW3fAm?z}d0pnwf7;`J{RQttkPof+>MWH|92RbtUCPGhO!LO>34yTjp*YKep)f1v?(+%DLV9i*@7b|BiY4Jd#wEG_P-gE4C1 z%;EPZqe_B9(3|K!R;6W+bKK-jr;f3cJ_sOBQLB=^O7aOf6-DCNY%?a$^C3CfdrW|Y zm8W>?_}8Ok^`=X2Kp^Z$=E*a_lK;DQCBqN8wtxA3{18ng{~D*b8JqaED)cYKH1nEb zD%FRXJ^Ly2@B5tRcY`rxj=e@yv<*74z^AR_5^q2#i1|I17lG+^t4~A={4U4yw}zl) zFFmui-U5eOm@okt zkkjRKEW$`3+B?a(K&WAW^#a@M-_aL60)^? z8I7w9^M#thjn7<%b_!aZ8MI4q-~j-k3IYn2Co{R|h6#PsNtjHVWF&fqmKj6nvMIXb zk*zX}cV!>1-fxm-I~!U)e;mVR&XApJ_?@&p<5xYz2owg+KUN9JjEGa(cmH8XQE9#yoMatzo4XZ*9b-CI%b|*cZzJgpx;J2AY@?b1w~^9i3!S-jqj)@xWVTiQ-A2j)ay?ui`G(M_ zs$?mE&;b1@vu%Bf-RZ?rkOdeP^tdDr#%^jiU%KuGaJzv^vF9mbmI^98+kXYmddfN1 z<`S!;4lceZ_a*%EN_2lUIkrfp1oXvzQ!E!pw5Cfw0Mr@ zKxSSBjym3H`PRW?;52jjEJwUt48N1UjO9=tmF15K-OmEOtW8vL&98M2OD}ncUPu!F zh-bLA<&2jXuqp9+<#`x8yBQAn*U_uOpkDCrH33Gz*I%u=AJ?_;C|12lCA<|`6I4tT zwzfn1UUWp+eE&XB1zm`r@n#`~>~W1&>R0gl$i?=riB+@A$A+&y(X$n zE=BLZtU$5+folko*f3779C!vNR9M;*sZ}k%?}hGS=4bnvrKla`etiU2JV;&z6f%26 zGoJNRzP)@!6!p7i_I_JV3e1TV{`RG+rnd(-Vlp3q8*<&|vk}7EF!ME5XAr-=Eb%T% z6{~$M+Q(q5g8&99^yY`CBQ=n13;PktH-rB`O@m8!@RBc$I-+gKN&8weu2r&E;c&m$ zb4C4KZWS1TVTm3qc)oIO7vW z0U1yi)Nk4hKxBl15e5g+S$qEFI?aVVuHF5T`MBrrh}d!m6)~KvFn?@D&>KgE$OTr8 z3huabX@51vzSIoH=P|UCM5<6ddmQkS)dPRt3mc}sj?*%LL$1Y~o?{hlb znNKYGQoytvLxD8Mxv$%TUx=Dr+~A9=Gfo-I&#s8gkc@_$k@#>-Xi)bz>iRd7d*-Zzg7LIW^MFIXg;#u^2So^X=n9R1uCay1OwyQ^kPhAEGPZRAa5RGd!*IEk z7&>T&Jv=UK-BoUU=vWZQY4Asiw8JMHJcWXXh6O%T=aP*%!@bfl$NZn!GB}YGujgef zL3ZuK<62P-3$FxyZ}j>f1Wm%b;Fgx|-s42}8P_MJSvL}RE*&?QoAS?81=4cST+GYt ztP{L9vu@_c#Q@V~1%WjQe}+)H{;Sosd*rE8JDO`lnotKuy~MqE@%>fCBB7X(^Fh+S!V`kQ&R zC?FC_X~i}5zFc{~n`{A?E{oySE?uIP)1qbRjHYoZCoijG1|uQ$#d_^@s`NI7O*k)K z*G8{J)7D9h4F8l{&St>a}$DIry0tz9ED>&7x9&50$lJ&EdHg11QEM~&RC{>{i1dK zSiG;2MR|Rq+N{ zB&eTY+pRqqQ-9?vYR-Z|5%n!-vyhW*1m^2^RX7X32LTLHtsd4Q`k1)HfZKJ;DWnT& zezRv)e=O=ta9K}yvS@b=E{UQS5Yd9!N!S+@G>1l>2b*_yc9yiW)9ZJ3LYfrvdNh3p*zh4?I1EG$>HnftRqU&f4{B4pxu#BdP#X*G zCO7J61Zav6hpU1-DT)uLPur1;&J}Wzia~pmy4LvL2$x{upkJ?|qK|g{y@&Qj0-z~$ z9{FfH3_}l;@Pr920!sI^eoWoDH(mC_h`KGIKbW%GEw`U)#ODREC7jUQDE z9!5!~fo)+@=ez>b9fwx3KLp+~b-AXF{NdK3vtjNMlu4eFm}m-htIvfU=6v4BBB-94 zR6Fmmbv@UoZ*S^r`;@HdpMCkON@FZ<|3!v_K$9ve_7mE}WVPB9U>mDcOUoX4&GcT2 z*a&KFg!VO^?+y-jKwwU>c0$8wR)5n$ZGo|oHQoY;$3~fK*@L^ll0&?%vfdTY-oW*- z20;_Isbd}ZCI#yRDg6VxxhismGBsyNrEDE9Kw~Yi71;w^x3B+1gFnP^6i+OfBnCIM zDrUl&gWoW(Sj?2=Qd)dfWApXXlOLr3(SWz}jIbWEeN&hl%w*{SL<8GwfXVXR7htk* zR9GHQT%mPQ;v^F?ADK{t`X>Kmw&k`Y15lP#aGD7U$Sefwe2oJik53W%M|u|>{i~h^ z*9Aj8x^#+t6wlf@Z&}0fbACK<9!ulGW6z=*1}g*zLo*6M_$XwA2B`4oYOt3mIc82rBsgX5qInqS%W19noDm$OJR!Mp2@YfU1 zbZHOv6Vme6JuKCE_je<9!L{{tqa^90r|Dqwx5wAEpIQFQ)R?rLC9lc(f;dbj0D!8=z6u>-WW;vYE|Lm-Tj7e&i4bQ=L?I^?+0r zNH-A*0~zRQ5}DE)fwNp^d;YIhfA*MwF7~_;Jz=3_yQ{h(e(p1HDC(yUOd_4}G~3z- zcLB@oi&6_tftfWpHI-N}udTNKH~WnkC&+SQMuc)X47W&;W8}AK8cK-sT=o^;)1N}e zqEASbSl>9cq0uK~_|U-d=0}xW<<(D-0l-PvCs#PeqyB2h6Qk%I@OOuc`~RcrEWDzQ z*0zm;gfs|9cS?67jWh_--Q6t=9n#$;-QC>{(hbtx()ImD&wI}L{)1TzYtP=#bKlqX zZOq$Abxc2ltPpR6?Kcf8jmqkFV9VSVG5-dtmkJpyl()$Q@Sh(PU~rObi%dI?dHBjf z>I=%0QAH#J3g1_Ajv!_pxcDD{wE+?GVq)$1iDJ00=c`uk!I)If)}vMn*=s%HiG0T^61Z zd%PU)l&NSF2PmOVH-0k((1;!+pvc(|D$lp4NS1zdWM@~d#;x`c%a!8>0nGUueo;3p z1LipAOfy$W1zfVpTZe@liQcQ;I1}LVV@5Z(KU+w03~$m@zuWY8MCF*JF6mZIESKHQ z_@=wlacS1wZ_HRWc%2Lsmb6oQ))$#L-E68OBJ_~om+2)?r{_*NhYq#pYwe96V{bxr1pYDbow4^jQpQ3i!aC6wvado zHJ>j-%tHB=aY z-467ohOdvfXX?DjfS>!zqe`4$CUDPEwh!wKV%49t!xYM1(B+%sq6c?DetOchbV1N9 zq)94c2NISLL1b+s(ltGzSbQ^d9qiU{MOEb?;C?p?E_>A6X4YE*O4-R{=bEXpO}*LN z2)%Q63@jlUU5oVWdo(Km?Ew{5%{1^!gI$5plD>S!J_DVV!zllf3odZ5pU>^1H^p!cN z??W^c;~C`leul@kvTBxa`We;H>79~#x2#`u$zV$qTK@w18hFSgE+dK}&{br_1{-%0 z9~@}<0$3yIO|WO)tJT4uLtuVYZTQ`PiN$^_`r5ta1Zsh3_^l=3HaGzc8=rAzh{vq8 z>KFvRcB7*r9!l%sXzVGGKB@Yve>Qklvfp^W9hpCu`tw=q!u4}JrZj?SZlsBbL$(;D zV%W0ZXI&}8)MoM}&v8m2H{xY$CV>Nl7X5ve*WCGiGRfNRty^6DIqYkFRMu1cv$X+j zvKyVqSB~#;-im%deio{8##5#!X94 z-T`m-w^;j|q@` zyb-(UB|BeUEMKxnfiCFvmr_()ijMZG&nE~HJc&F37VaVZczoAd-V&L|wePv3WV3l1 z69gm`BOlaOm6=Nin0wu!KUy{>K`x0WQut&HOubVu0 z#=%|bZT#lq?eqOb|G~u#(i7HPj06G*o%PdBil?Za?JaGywJ@8w2?@g@*7%QRB({Jm z1hGK@w}RIqmdD;~C1O6OnDpCX#r3f^*+mH-TN5ko`kJb^^{TZsX@8!0OD{MV^O3K+ zrJ2_66`kobWojJ=ijQkCt2bBtEk?Xq6q0ub{CN_`7dZTRu+}j!skxxc)iRMmqTZQ` zt1K9Fru|tQM@b*jEkISDB^Kk_!h+-Q22H}_(hk4l8-8BP;HZvaxwZ73d^+V-8c@8y z@Mh-Sr1l}&< z0@T!5MM%auDH$g;6Sr{BEWm4H=qns%kD+EGheqxBeQxj>`#&erJ6OBi4+*gq88#s0 ziJ0kr02-&!>b$(RPK5csH&sptb&*cMASs#9USIBr&i z4iXsiN_Hc$xirWz9t7SRA`bNzG*(4+uNc`;}JKhG#%LQkUH0i|_Ox`~IGW-l=Z{Eh1xz*_rtFhfs-Es^ATsQS|@Bw)7QGq{5V78@ymvd*7nzzmJ5 zMZ>q>^d~M;+|_7!6m4%5UalDrqBD!5jSaA!(jjP)%N+jSIv2 z=)`IwP5#lCBHXy38V&z%{W@18Ldyady4+!ft?!g75-$;%n#zx_Ui ztCyAD48NN3UV2{`TE*wXJ;C&W&uB0ARtt|U0S!Pv+EKK`w8tLDDgexviXt_Hrg7N@ z9^|eTUCvoi=0#~736C|iAeq7`-rsN-%`L|?TjtD(Pj}8}c9tb}QVsVfs0Lrlq3zDy zcwlSB8wUpTP{xDCWb<8lPQ50Nq0)yKcNDI^xx7l@z4toXSLO3`a{;ZL1|a800;>%j z0>p?K*Iz<6#|NPr3>qxt@e$aX{^|;~2S&52^q+0@8Wx&@JX1v7LH8+=Ll7S(l>`#P zZn>&Gl(yc6vW$Jduv%f<%N0|P6(feoI?U0`QVKU0(ho<-Pnq8k|!+&fzlB;%^ z%m}*mvKAtt@bF%=WPk?q$T@-wxlKs0aL^Eju5{#rZhp+PVzU=m_(<9vB zpncrVeDz*I-&NU=2D(CEB`zy0c;@+06jf#U*AKiRa4esoC$SFRPdun+ zI^eyRjjrx`-7fH70IoBR_H-S~yqpZqUrCXmyMe<4 zkMJ=-q?OYHgCj1wZ9q~LKz3#$D04D`;qL=_M zX4AC1Uwg)YeJ7z<*FzbChP=_omYAT2IrX|S^wSNo(B@~dm0%3zF9;ntjC+!~k`mw+ zramjU@Z=@|Ih!Wm(}<@D%fEui7lDX9tL%4n^AXo>@nSVSa9Qr=CuZb>_3KZKWhpX{ z&D~gqxyR{R7Oq1@{VMMrPRknsZbASbg^Wy(Q}z-&IlX1DhPjunx9M^?IIi8gWi0 zpGnur^kJ4$CijK& zN4(RnpS`NCkO1|eN+OQUZ#8hXwVBj%y7#Mq0)yZPEtWSx*GHg6_u-H|XhSB8^b!+~ z6h)JcZ396aMV+otIvc&ibj^~7p5eJLrK}%Se?tH?*burwq@>v0rKRY^p4@cBmB_cc zbRDBr(nQAI#`D|3G}54s)z^}TjR{D;q&27E_ENx4IkB&#M~_q#S`fxqkP8Uu;#dfR zH)u6cQBB^^tYCCiF}MS((2R##zwLw<>06+a1y@{DY={92D~w54!1eA>3ekb)_6r~~ zH6e^ZzlG_fBDen;c)-LlzkY7k;{Plr`EZgQ^-Nv7W8n!R%@-~&$7V`*qZ-)iOmEL_ zvuq71@-cr^1?%gSbjL9u;|iq3^LM2Z-IGM~Um{arr{7TJou*y^;S1rZHs6T7MWTbMK#+m|arb@vu~BK_F7~awmCI)zseFJ1Uu`90blx z;ceVY&Rz4T}r+$%uDW0I7@VCtQrI6eYkL7uT+#Di1z(tr!UTF{2k{464Zr-k`vI%v%?Q6?tyQDJPsQe@UDPlCXOOKzmoRRNh7O?u|@i?nB}6hAuHQz-?3eG|A3;jwNX`P1kOoPL?hew zcbXX@y%rEY=8i{B#z#?FZlq<8Cbab2M>CJelW<|W&6}~)E-Qquc4s>xd~SAozZ<7R z38V=L2!6DG=Stch(uKJP!{pl+lBtWNySx0vGJYsT)VI-1I6sQPeMdhO5UeOod;UPT?w zr7-4_h0JpwbeOos%Z+%&Uf9xyo<3Z{%ZEL%J>6k&`m?c&*apzG z*91Mo=CGegE6=44{}O47UNegn>mkNR%J;)>VahT$W$j=1LZXK*MGmdMm|OBl$dT8i zU<^V^sVrw1J`YAGn6V6kMLz61jy3X7l-}_C& z`i7cb%gDRoAj}7jDh-aSK}$faye~;HPp3nDtUiYGPmiQ2@F5g%UVI?!ohq z#Hb>$0#j)OfYM_sRkw!5msCA=Y=qkPu?h`!U!KIWPV0pyKv(Cgv5?HBjA-@Hc2h@Rbwp1N#1;*b znD4FL5OjXGQjx#VpQK)+wN9JVgt5#KOD2gKNC`FFvW(PAmk`sbgh)ldHmFj%Cv0S_ zsW0#GkY6s4HXtaZv@};kgfjA=?j~jd(U2G?nxJl@sRP6a!b{>(3tOYfp5pY52|n#A z5WFp-Y<^twlQykt$F~g{BCZbiAK-R?S&4gnlo!bB{W?P+$XdW-hiM3pHaTaY8}*>c zUSy)npE1uh5k^yPtV>lwr!R?duO3~BzdMDCL!fyF_MrC*$M4=Iw>``>ziMzysizXF zK^G%Ixpyncti%utfU{9WOLS*A!GOX{k9^zO*W-)MWcg`$IrDUZ^)fVVw_)Ynbdunz zwk-mCsgbE=4T0?2XEr1><9M2Pv8LVyBwXDlR`3LZAzzQsAJ-WX>3iHUuiy13iF7#< z%u#nvh^kV==+Wg~mz#Fboerp)%esbw`0EgS7bngn)jtEro2C*}iUxrPhjPYzl6Td+iZik+eS>(`I&fEpVASJrBfE^6<1$ zuKgMKvS7pfuz9cIqRmmDD1oo&`u-D1R=TOV_sa6P-mlQ7jodtS|MyEb9|?M^Nc4CK zBHu>%1)37x<%}8QZOIhD;+KH5(U3QoXIK!N0}w7yhXd&DAd0{A2Enm}b(m%*(l&ZZ z-ZDU(Gh!-sr1T%3dm4>I@peiIV8q>W<}9mDl!NY08#-S0I~ha^_s$4qU%yJsXLrvU z$Wn)v#(ee1ml#SFPGes#-DBzS(Ll#`q3oXaaw$v+->_xu^aGM!tXLpVS{U^z?>Zpe zNl+@0U%PF{PH~H4HK>=6+K;zhvlE}Q^Qd8qZ?1MF9W-Zo6nC17|Bd7$(?eefSM&QK zSoNcuro{)RpRFE|Jy4Y>CFi7d>D3MJ+BN zS@omW8m?^@J5+S%^?^88P8id^1~vxrMyVy~ZV_^Do1blL%tGDS^V z37Ej5b_iJ1(r6D5At=ii0RnIR=sYR_boDnOjxs9Bwq#Z&wzL{;Y;wH?#6K?~Rye=* zeL6>3Y5E7zoK?5r(d6s{*!q8DZ*Q;X%QjQf?w3>Uk8pSc8MteCVh7VR4mmVV4F^p- z`ZT?=Q#|MP0jvFrQ=6^M!)<`TS|%fhB{Pi~Ou?8b$GY&a{7aM%pX$Q5XhRzli^YlR z7Jy=b>@p8fEXbnMv&Av61n&&ysM=xJd*AF1oTJ7q0}V6nyALM$YLrn8_HV8gUQI|o zeTB}$erliwv#0dBtxlQk5}#^X5k*hw}&1lJunOKca!%b?XJ(~ z=RX&*LA=TQeEhpwcBir=>sCZO9v9|kP6j|AoZnBUy7F*R9w6no07mW_m*Q4~!J8(U)TZR52iC`)9pM?xDVZV)fGa2Di4r3Erq$vBEE_A z`6}&M3u;T8UjDAuaY1tAnXbiC2)H`(>ll6oJ-NYRT9P3X=p~9}JVdyorid{?S}@M1 zs8xQ8fl?-*ihFY{%X=7@uQ1U`@d3cy4fZkHP(bp?|9H#)Lw^2CDex?7Qz|Qw-`+qU z{|KG0Fw)6hDv1!lA$Eh99%5S56b@M^M2rAt`mvTGqzQ@Y7m~T`zU3gC(TEbkLZ%0e zElW8Vn60U$Wa4$QTT+~ZgLtkr?_SiQPXXoHz6Afw?QVUYQ{kH#GH#)2xt^4g?3vvw zSNO}d@Mc1vF16yFSCi!4(O&Wl*n_X}`uEmqg&sp?T7g2Gxkwqz-N&utGD%utsS?%B z*YELK-jkmO|6afXj2m`6503^J4vJ-1YS(?WdAUjz~*oz(3T(`#Ni$ggdkMJ?nHX_}G9eFzMYrz07Doi@ zopsL5*4$Yka?-Q6S+VY`ZZW;NC?^h_>%7)M&|f&~@T^(TcxAE&dM4y3901FP=!v`T z>;(}#^+1%Df`NT{&i;J|PB4T| z_!$+;N#?I4AtaF&YF<079)2?+0Yt)c|D6f0XawFg1U~3k0QE}6+_^5sa)6S4|L5t! z+QF%g%WM7<&?*xv)q(r|F7wtDL=oMR_Oqqo>~vyzW9|Ej`NS;=H(@g;$OWdAGT_L~ zaxQ1>h3pTEBd4Vw3ALkSl#JS%n+w^lWFcl)(%>&#K32uD{4DBPyx1 z^Q2JIWb14QfMoeM>B=%viYxCI&bgU`3a(vMz5{rj0M{ojrJ`#GFZl^nb7mH$YrgUZ z?UyPa=D+Ew9!}|%$@SSf@^6$M&1M#>`eW=jo_}y_+2V87ln~<9aR zJhDwD_MotX6FMBLMn_It7~90d>3Ob30++gtUpxD9o!kP>AyfGsS0dVuWwE%MF z-_BVNu-KsApJ4sw&-EH)-aNA?9s3ihX2HHY?WD#)4(Ob@*TRlWWP~xQKUf`Lw8~L7 z%ScEjdlCKP;$WGmZu1IDHjiJs5ld&9issE3QQT!FZMUN zBfUn)5co}N#%9O0(c1vUGq*>6i%iSJkmS6^mu5o%VzGna<>}S_zl7);W~U82;5s4q zcYN}*nH%&Ewi}Qy7E_~_#;zA5B;)s!DoU8F&s^<8H2QLQDzso)eux9=x0UExw4uBN zspq=|;Wq;RvLVRt-1i~3=PasznhrU;|7Wr)us+IRk@+EAfPn|38ECU{M1L|yZl76T zm&CqU*}`XaUp=`~jd3?NS9RtB1By0$KB(-#zm4O}2-t9)OUfO3ieUQ;koxI5JynOx zWx|fc#_m=c|CY_tKmDzeAc3u*RQE%SC&-$) z1I}d7TvJCFgFOb^Zya!hx5X&+9v3Z6n~Lw=Y?uv<%%V+HaB8l%xYzf+gauI7;KVnO zrLr@O+#L_uc(HWU2hez6;I-P@@y0Yfc>dK0$OsuO>q3fk0%rEDYQhKPlou+i@Rskq zm*N8;Kle}Zt=P`(r43JWh5#DRtE1)$13=?>u*NfJ3oLP2JB!O1%iZ1p8IS7%vjrO> zp6?fjFGu}A*i;CbBP&kqd)m+O=1pI4Tl=a+e&;`)vFBc zqppzv*-z+P!z<0}^CQx+pu(7eW4oQhW~CUs2PxjHnFGbvsWie&A&)H1^@S^EZqG~U z`Y$X`njo4kh}4bX9+`#F=oP>UR&qg8yTO!{RwjDKFyn8b3mkDG6QGx(Ga*b)RN%n9 z#oB$KQ5Cx6*YUI~L7dkU6bWifjbsxkfO?Bne@Wt8B|iO`uAqy)6NLs0=j-^Le^vhi zZC~L0sMOky*6?k!EdK74xRf|H)R275>L_8yjW?%efF%5za+}AUC~(KPZ&L{jC(Gw2 zVC?3Vf|N-zF(F3-^^|0&;b>z>u3$}SgIg!%^f$0gxdPKQpOaj$heHJ?b^|^*CGBjZ z?^5*_h_s(RfyyIQ-{&5>o{^{d=)2Qx{gqZYMe+R9Sz8fJ? zd!{B(P=y-*N7%K7d;DMTj4|~j1TFTo{X57qO@}-+2`vy(G}@26&o{4d;a>|i^}j9D zivN#lgH%ifKy9p7sQy*d!7|X60+;;9qce;6b- zPD_)eXAwMhG-@rg&Pk@%Ij+2VEszm>8DjRJ6v;JA*&oaOfWGSj0C87VmN8FSTOgjG zTRo<1PxYMOdgd~t4$A(@i3t*X^2<+rg<&^@+XWaFN-YTFJK9elzD`@BF_!9o_EdUR z`c1 zV{b{;PaN+9+60P0FYU;<^1By*ug+_~ep4b!Mtr6b)@z?FC9Ja+3D`!8G$m?*hrq^) zy^4}^A&oT92-Bz@a}fu$ULWtq{pzawA(k5u2QDtFZ6(L`kBo}p$mGh+VT#e z7{NgNTp~S1V{UaC7Jp3+w{;!XgVfQ`Zy;PR!4phvRzkRoXJUDcGDuiHyEVYIYCzIJGSVDyirtd5Aod`QBvJ&AUL`}=cYIm_7Rm2 z%PW2@@?YNa%gWET>CHm9-zL^YW>GLE`0`verP!oY5Wm*9Hn7@MjE=>-*%-BZG_t~% zP^l#omIztzpkxpk>HW@wPhouzZmkCGNxLF&n^-VDl+cG3{Xm zs_)Hjk8cQ`O1t{GjR-+`uhbL(|Iz{^W)j&$rmFmUn!Wj%>dw33p{)VNiK_2SBuQMp zHQiFAu#NBW@~7{MzUp`s-CcVQhbc}aOD7@Z2C$=v0c!POw3lXVakp1Lj%ngHgSlNt zVQUcCgu0LIZxAPsAKsNMI2GDbA|O56_QGwSR>{Fglow6JDZzqjDukWdKU6;p{y0qT zOCTCuYi-t-m}F;=i>~Aa!lb&%4cSR9B9z&`(L$o{AG@(H;h6Oc8w#>*RkT(c$@qRQ zZ~qJnww}+zEAXjt7j`R%85T*O%l`Q!Oe`em*z%T~GA)bKn8v|6gL|fj*5MRX;Qh-A z!r-)ByJn&q7ZVaxZ_{R?gKn(yJ7oY;CD{qMG;Hl!BM$RJyJ39tsgKbN6qd!;r+Q*IjM%@yTxt3^a{3L?q_3Pod)BdjGuV3lJ}5v4K{RB9 zWC&%XR?zYB_3U+QSW$rAf+}1ct7vG*WBrT+3dsoA#^{3 z`OnqioBLs2tF5u~&B^#^>f%#N={0VZ7x_8>qTlcVv zSuC&dN_wY#7%CzZ#F`@$leD+N$-J(Af}UEvUkY&bq_-aH({Q+WeuigaX^3e8xfVd{ zbgGl-A8gbZWAPbj)imJ9G~s0+YMAvKtGxJt0h|1gKyB-ET7nNFtbwx{#sIuAHe`JO z*U|V9l?}u=`gd$e?(V(T_f+HkeiUCm(;JY|FZ(p8T)SU%WevgbRd5`{A?pv72yPu+ z`nWJ2i>xr5u_JYK$qq(>#>aQA=8=&oXN}J$_b)D(Y(i>o-0*5Y4a#PAEO}~S1Lncb z-zJdXz_tAQj%F3OZ#hx7j{vN9yptl%wNO5AM&QDXr+T#7`2CmZm$(RmADn4dN6(%z z+{A9F6N^qI`M0#+wt{KW=;vQ(0O+S)_p`*Eu%TQ6>?70<1X7UPWjp`W!(6+HfW63w z0ySS-L@=YH>Gmk+X05+tjDJ6Wd_>aapu!e^w=g5uG|{WxTqlzu+rnFf5!Khhv82>#LDb#dSPF_jjpjJk2B>$ZA?KVZTCzmSM{lf1)h3r6 zIsKamh3zCqaz)5WB9kxT7+oxyevlohtMG(Z&fJtnZUn41BklVmfw8;vlgN4V8^VTU z1rz*O)f|!LTkjtMQvZlSaMCHxc8=Zt*u<|Tcv0n26_AwtuZOBQA+%|_&SJ_ys-wS= zQ-W)zi?l-qClYBaA`azs+CdYz?oz>(6Xa3P?v=Ntcf7}DRZsyG*X~8l(Dx8MGZl@D z-LaaveH2{ydz-Li(i)CpI-*$jnyJW_WXK2bg7)06iG=9-%?%sJ@OJ_mK-reEy94MmPY*43b+EwkvlF0W@!FK3)k-z>Iy~}+isYnLA zJLvzuJGcgc_N2qI$cF}h(&Y)~YUQu_%CFK?cpr`33oXr2dTPOhEbjFDIQBNzxg`@1 zI<-#~-y+gUVT>Q%G+unUgBU$WZFDH$C?8c%*dYTGvYysXmp#v(Z*IMc+v%1&Y!*AL zx;W02BX9Q5nlgWSaGMU4^Wf?W@W%_1>35v{7@`7UnicvEec{1&;yx|hX~@5&LeBqF z&jv)j+Nrw$%7twFN0o5=t*=`*K!?3|Iq?B(0>ammz`#(87n%U@Htkbt1G3uSrByT@rEE-Bdd$1x8#R+0M7f)|8F<^EVXC$1V@V%K{H5w1$Q z#I_T?%>3*JpFrv*<2ooAz=;tFGEk~Ni2IEST*u>|bO_MB*t0gJfRX8A*~XLMU%EH= z2{YCOID2UBhT1r{7ZPF<%&$C1`;9e``d{{}1SEK32{NI)Y`Go51$Vn!_=YW){2u?H z)78_{M9#3gwTlq2rsLGC1&cR>Z*hIk(~g((%YYwdbQr2 z<>QH;kK>rrYQ`Xm2mT=VCU&94AiG|4au9UN5E0AFeC=}0BwfyVUvnaG1bVH4Ps|pVHCw_?IZTXjG{^epF_v=4Qu;g5E!aYD=io7N6OY#l511 zJs3VH7p++d$vi$PzW*X!0ga&}tw6wx-^8eM$J$G4zX7oF82KP9Hh>F7WDRaY@wOJo zE%Gz^?yN59wnEkz#f@?(Is8@@kc7+{hke+$5G zyh8FW1WK@b|5$g|)mSX9HgA+JTvK0_KZlZ`N^M1d;bLMVA0L5YYC~SHIC?P5{{{p( zG+)0PMgsj5o~L@Ega1A*-ocXZuYHKM8MOs#JH*fv@3?ANtJB%6KoUv$x~q6U-cqA{ z2?4YnCuFj*`GQf6W}BK}7%n1ZcP2%vd9?q8KQ^8bZ%D@bk#d?G zwRd*j<>*K@YgM!JA|0=QYWHFAs1=AG^!r{Mq((dbfS>FrE3RoWM5NrDZbS;Q0=l-MbmTPf?3o2z@LFeW3!`rv+V{Xgd zTBf_yggd6Zr;QqDTd5$LY{grBRFQQ#79~cYZy_l~@PQz0{zT>1N-0K1|4Wmr5j|ka zL*CuY)X5C3yQfYL<+$;Iu)W5kMmOViqOCw8sNJS@Mc>NzaN}yHs|?sCmP-#1Z|ICT zP}*KngEfbs3#5tSWjReVxZR1yL`$B>nnG_QhF+SUMi96<4FQ2UymCSNeVS%+f7`WbXWN%LBcA&7C11rq z+7vJHF%n#{IV58JsDQK0973 zf(qQwoTC8i*XG>FIMAR&ho09J{)u)0pvBIV`T|bgmpm>MxRsj7vjP2L3F&w*l8*oz z>$a$W^YDeRtYeM98~)uZ{s6hSRG*KqDpU8{Tu|wMau>3ObE&~T5$>e3|8f_Bv6Tk= z{z^!7-Cz;29{xAw;TnWGgC@4dHx>W_xwAktJKbuY>tM)8QX57w?~lLiX$Wt+iDpR` z5-V9m6Em46C%rt44bXPUhIhHyNaVJp6|!@A$SgjGW^HsI#O|4~eVR`A1>z_%e8Ma( z1{}k|sJqL7`~LUg)y}!66*{I;Ap8_wlmk5yU@nozFKHUQ9n)kyESUttRyW$hs3rQe zn~Z%Ach#_Ngrs(nZiE6ThBJ(lGM259xc-1i{x~68hcL_^&zYF@Qyb(0!gkfH=&xC; zzT4YbqmAhJ1*YV8Jt2Z}@Xd-HuAJ~w#Qu&j?}55f@5dcdV_NtNsw}32gaGS7FhgBe0-Ap^ zy5By$Q^ej<+66fhhFY-Id546D{{8&MVPDOZ%cPcQWvEmaKbe*_gnn`}Ljyt8Q^_l1 zWQY}gVyds|%j>$pk6{$7Jryg>V(Fd5)7uu}i2 zx6zO_47b0|;YSHdg_Touu@Z2YfX$;rfO+(u&@~E1^{ksmp2xV53OP22vyL|C^P+a> z{@;1#(hhHtCh3tg+*)9b8osv5MY3CVyQ5ujiWwz4!`?ZErE|EZe9cgT~9YZt#yqzn_`X0%yoP zza5VsOl;8OW9z2~UpsCDVBaF}csVx$Zs7(Zfb9c{4KIid8zc~f{X)eIjz@_PhCR+c zV+77-IK>sFNk5IgN!k(&3tf7P&na?D^iV{87!D4EAx1rvXSVx7utPp;q2kOL@$}Kv zRCo_p>Tf;(W*|o~V z5U$=;vx(sRhu)aCa{}-@zofyTREG|_XM%~S=<0GlO#8~ljXB({&(e`;-^BFYapk|{ zM|TwdMgJ;+R{e`_ZUMMwk~YSiXLL5NAsGF8ZWipeJvuKeEsZ!l`s_Z$Kg=@vZhcuz zkg*%oN|TnV5X$J8gSY5B=og%X)5$R#leDJX_}#tRVRn{sQjHxGO?DW^$H;8FioY#A zX)R!OD#rn%2C$xA3c$XjwxFkLL&x#eEDuh;EeobJs;Fn}XzrAcw2tVbpcM-rWz?bC zDNVh8qKDz_El|2{eK2#Hf}=7RQQ~=4LchYgQbt}_|1Y%b!kI?G2RNV_|Gs$m=Kwv~ zzthQ~)qZ(RI&Q22E#Mt$As{|g>T`A${1CrNhFc9}%mSkXu;x{#69y8*E={-VZU=pe z)2KNw$j-@D+`IwtsexKOJMP~~K3`eJJ%H>Pa96Ga5#Pu`wfizWI5H*!z$G4beRj_-uAPjnpP|;%#9Anee@;A$$ zfAj@8I#Z7OS07=~gsvZH*rJ*frw=T0H`c*GN$y}Ni~WjAq8WPbJ2*}}*^~dSdr~$! zV&Pz6)n3D{v#y>T?-W-$hJ4!@_)d+TbM8H`r-;fw)Em9?CT)?zphs%GHQA~VxY?kw zl$72AUPq}cAXD|q==VT**K)dOyNQeVRv&xP>2!y$5tfergQQ@O2Qi}JvZV?@*~?hl z3(HoG63p&mye5}(M135*zmaD={Tfi@!7IWha!^d%YzOjhw|6^~%sp;~zASn~DU#4C z*UbD88MiEsg{?BENs}a%C$Rn1@IhUF2$KF7EySf0v_1MVbr7knb& z9RHc+cf5ZwjXS~ZfGvf=WUE^u-=&53i&kkQp^C;9jyB|L#^H!oQQg~R`3a~@!$O`Y zPIb|Fsn%!9&OnCfV%3+#D6gsD+3UB(^WNbg)@*(P=I+*%Idr{@cn&S8~P&mo7799(qKMG`O-`F zYuaYBcJdoC>goey>kMc z5K3T6>AO2EoNrMN3+J<7?V@J}CYjI!9y8Q@7h z*fqKEM=UHl@AXEIV{cy@8saHPGfn7wXWU({M28QC2}$(bRbDm(KSii!{JAHW?|<*F zlgN4he;zYf0pGI?!r1I38_l9T$ZTRf3A{y%7xL9}stl#SEsEf#PkTOSc3jCE ztOnld4Ln-Fv&%Q9VZ4mtQB$1rHajNpd<-XOK!JWA(=HvrnYpEx2fhUj52l}gZI*fFTtzk)r_lzE`6Ma z8_R;80?I$R4!@z)U@ANt7kI+JRJoqJ7iR#!{$9(+fsw`l##2PD{ZwvRp~L6t zz6Og!hkaL)hGo+hj>bH>x~%R{#oxMS-}EzveIq0WIQtG#g*90&r%r_ zI)x7{P+`xKWXs6xr;KN4`#Usk?MXC+<=jWIN=`ahAZhy8(m_zHS=?^N{8 zBB80V0gVAv)_dy`+1Gs-SK7;`6UUbb-!sp0QKR}w>+O0m+Ty8|N zqd;UkEYPAjU>1|G7wY5ig_-IAesP|65V;AS%EMzNSOP0;sMcPvH(b{i!I;L#K#cGsx#Ng|>Y#r2?3ZY(yx%~3$(AflX)Xzap_`@?Ho z^6?uF^Gxnd{d=PlLMn0$J3nSiW-dXe!Ll8Y5U)OK_o#jLt1j*aG(=y(gSm`Xx|`}- zZq8dcX5gdtBun&WW0c6BDq`*)V#bMm+;fg+Gaqq}-b(slm42j4w34w9(f(`Tc}3k$ zXD$e@JlFIQ6w?xns~HGS3BZHv0sX0yZ-c1GvVh{#c~R+hL% zl+-$5lN-xWI4f-r!>i#X& z^u--gO!>^pLrO|R*^2skQ3QSB3v<<$UH=wYyA-B`Cxo+v1TQoia(4#Iegs_#r>s3_ zp;ABI!FU{R!e#fdJ#IZNZ9VwvlaI|tD*cHO8rPAF=*LRn+b~uDhU4z@Fm@^Uh3UDG zpwhbOs8zdAImo$)yC`RB3kUZ;0zi7IgKLY3S*1a->sDj!Wvx5Z#P`$e{Q=> z+rCis7=g!uq+PC&q%Fc2-0{<(K)omB=f?@YyG4IQFszE(M*5br2K{SM88D3 zu=lJrWtft|`UJnWxvOo_4=gCGc$jvau_5tz*uJmB8j}W`ryzuJZ~Q6gT$+wjy^qT+ zwvfet6DFii?T#I;gE?8{(5jJn`xhujKY2uSX5$MfnI2jPo*z5|qc>^%JgJIk#r6VQ zzMmN5dc1)~TuK>g;EI`Ex4+T+O=&Fq(i#95s>cg?vyU+ z?p%U&NJ&U{H`3h=lG2^h-SFLuXYc*IV|>41jWzE%uj@RIV^uGBPjlmjuJt$k+Ny4F zzg0q6ceLB3BL!I+iMK~&Ye#ZbT}7|X!mFGE`x}e!H28NWmqyQBE8WcOW^5~+4F&TX z<*Sw*v;%iJ%zYSoFpC^ET`C;(NVZ5EMoO)ecPk0-Lw^bs;L0T5GOF#p#Ot8b9!$_9 zhB4VcHhRa#?GdC?01uQcoLsY&M2&xXJg5K+$Svbk8q`TW7+T)JkIABy&Esnd+j}u+ z^zw0JDbOiS{N*1$k9Pq88@EHE<5^1rGG8E1%=xoEu}fvm@g8#lB<9Mry|qJOEuwGy ziUt*Zl^4he{9fjYRo>mL@M-X#82eSw35?g@$yNd{qz*|cODim?GR3nkjIGlSZ$trp zD7tS3{a#bkl(9faw_0fV9%vpubVn~3A>{AHDxQPif-B6QEN4yfME4B?-H`bdG|5l4 zL0YR#@r3f6W3Q5-2?maO8TaJiOT}9HzVLseUuASVgM{&2TlV19i`vJeK=Ki5UQcDT z0%g1cC}c!dejqmfv4`#dS-oUj&)w9T4*7XqWD;;QO`~*1DRw8|wnMsCj9&F8cqW?h zN^?7Iw{Egwn5pZIxT2!I1E>ws5Np=*13Qo(V7$KK+>`4>C zgxvfg68PY^h+TUg-sws~9s#;D8V($p;qP~F3N|ewoi0wK$Jq}xG-3mC#F*T1?re9k zb{&APsKollz;hnpMp1V6n2#}fO)>KJfh1HNg0r`s-gC&UHFQ;vvo0~leCxlk?DdEs z=gmet?rtuy1Yy0tY~c|3cl~;xuMjkGsqeMl>P?o4EZ~38pR4ltVNh<6UAMqgA@z-x2Sfj0hq=Wj z)JTf;;i_KyH?9aA2tnIKr_)LtHC|0P`rQx?3$*jQ}Gtafio{A(1 zv3G*=6rmefB&Xt{ z7<+Q!0Qm>tgGQzOTl++Uh~1f1Qkk?pautN@x?FynW)5D%LV@_M610Lv;=TL|5SywCP6?#uqH)U{%$1i_1awJkdH{V{F9$Qg(--|uZX7H_ zE&ZjfeSr!tzODC1HLQaRv~M!hy6sGWB>sJ-ZDnctdF-|>{Pbd6XY)yB-TSUye2F|P z?b@TI^278}p(xRfdKzMjZ)Ltu$0{gv6dV1gT~Jxe?Ag*W)|!BcOYR?WU|oLqrACdmzznVCj9P3!-*N|JIHsIvi1eo6Y26XWv{P}i>Fc5W|y zNjfk>-35wiICUn`-gxduWg4GC_&QyQmJ3CR9(zCZ|TFFRlk}Q7#ZCB%V=O{9ax?m z1IXZ*=VrUJVI_u4?D*2oec!bFJGtPI1e3D-bT6UnZqi{v)T&L&m)_1PSL%#d&X~y06aYi*ndI z-Y)B=rX&=5dRw)F-m&Hl%CWEut_7_zXu%gvDSp_p{c*Ih5BkuDhSB6TirZu1lWwy3 z2^BHsSxS=Z*Hn8A0%sNp#pxL>uia@kAxZ7!v1*j%9WY!20YJ3==t7q}DT>M8+mA2> zrVcx4kb{7zDzf%{>8at8WQPR4C~iY=PU*9T!L0SOU!|mXx>2FsdqO(zFGk;@{_F|8 zYaGVm%{W2OQX-2b60pAhGd)f{oA6auKR2*NX}p;uu2?O-RN5dRs6ErH$t+ou`T7jl zr(lixk&H4Fq);WccnG(hko|0=&iSr%#pOTB4{r%G1WNN98&ynxWd1quUdEBq(|J@( zIj||A^iO>2p)M7H(Lyb-jNS8;h0YM=`50$S@#YsuLWzkD;C@t-0`bgVVLBfv`{AB_P*OeW&LGx86*iQ$2#z$2o1aRfhKb0FYAr; z7m!hn*h+$RB9DDLWZiSY8TSA-D^R;SfLSHVf3_*|*l5iUz|nyCHmn>!;s(h(<4K}_z3qd= zBaNE7!1sPu78@en2}gNP5$BpuuT5ON*{GYiHGdI==Z1&lw&1^@ZRk2ms{R7eLukerto(Y6Yd*#%hZ zD`+cxmKXO))MLfm!UfcIp*B#0wV#N&V)&{A{G+p%jRAgWPa%$uMwC$3IE>4;hg1N# zA%dp1I~1P&-P?iP>S0@x-27Q3kghD4ERIpY{&rFwtNQO3ThM__9{d8SI;F%p!#~e3dHv1Kbm3al7#M_ojcvLp_4y*^D(*2R%a^$CaR1rknV*WUdqlhyW|ts zfJ0isAYu*5V1S`Yg>z_ojFcA}?u~G{JGHEv z;-0wsD2c$@z(*;2InA&2oeU+@p`WR0)CyT3;8#YuYl~Bs&K6k_%gVAIi8kuL;P@NA z&#(7O?GieGyUagQ+FS#gK^Mk65}fwC?V|#NgLWjc@V9=MMkpQTO|j$iF(T zRzpFH4tUgeK1%;Eq@{B+4hf8rp?ou+f@`S%b9ML+S)30pS_l)RGaUw&8ZZ^L#o2@) zP`fDK$|=738Q34&F5LU}+}lF7`&R-Rjrc)rF6CndYMj0nnX1U(1JjS@U!t!VFS0>+ zMS56~kIYDq!o1<+32x@+W5Yl~{JsFHVMEQ$y0_W*SSwST^Rs0Id2185Pzh_;5x0bz zb8HbYL(2_>M+`m}pgsMw&ph)}@*nd!L7{loW+FOX?!7sga6=q#f|-h|tOF#Y7lWK% zoy@p_x`UByhCbo?x394;{t~!6Zsj1Tq--(@6pzgrPT9+~I{x`!PqD%S4rHbKxWe7? z>ZpA=Q!k^IIvC!n0xb&$SUAVS0V{ zao8&{=d!LPS*9i8`^O%vV>z?M%DBFb9cu!w)B)q+${9|6IdeS zk&@$P(*V_>RYjznp9$L!L$J{H>vGNsRO3aPkn+fvA9jK{>%`5C`gEs&=Xf;esN;SI ztP@ljzt687-xim*!@LcCH~YD>sPS2?oE(F~dIE_F2uI8-PmVKP z9yWRowg6E2N69WnEErqU31AibT*4nO@-G?4P?^IKn_D4pcJVSW9jbvl zJ?S>HxDd;gv$!J3@pn4XfIImMNR!^bINAP26( zTpb;Rn51r-Va->~@07ULdo!0+@HMOh5IJF|{2N{7$hNx@1#6HsLrOkV(GWA6aAO0p zt?p%~3XnaXk@vfVrUx%^fnol%xV0s}iEygX(w_WK>TJ|hkkYBDApHz`QC~8KTNI}8 zZW~REG+n{??6oYQK_>Jq#(LJ(Ihk)o`Jg4$clCPYL{;xjSdqa$;+q<9X{rfl8b00u z-+NQ>g5WLHC$!1u9(wG1_o5i@m;y=+O)qS0_P8Kb>JNwS&bINR0flco>v02D{=2>gdDg!;bsqqev8{dz)ZCorHfm2a;Ry zbT@<`eXd&Gw3Yj>?a@2#;)kcDa|W6l_;)2CkE+7B8IS9g`! zlo~0dEiJgpzPwU{xD%H_i&D0%WTo@^cS{a-OJ=6aYp$a{!^>020+DSF?$t5Voe z?#F1fI)1t;IJUEoSmrMC_s3K7g<&iQkNF%28h7U!K0qR)S^bK74_Nl(O{{!vCrGVa zE!GPC&>N`9PUP=|?%QH**d=o}KBBaR{hh)m!V;yl6k5ujSXV8Q&VWr4I7KQhEt3a5 zdNojMRMfzk39C}!MwboObsu@Y!g3e}2dLL>;3(o1x2FdlDs2XM+Ms%wV*~3x{!SG_ z=kABdxB=C-6t{~BJ%+P(B#_ViWJJclW%I;@jAI+2EL*qGLrRKH)%s_}vc+!-_j>++ zq=m3^|B)6_6G~yRHGo>Y4W@*9ZxjbM`wj=Z&5tu)T`rE+zg^!Kb1H~biVqD%Xf9Ri zsCEUx!_8O4Vz((ia>31T&+NP>c}I1Lto60$8&BC#XdknBq9yjafLdH=6j}+dXV2U( zqB5boS_tckEG@_Lj*=&ivORbHZL(gg)w*uGdRosIl?%d*3sX>aQ+4ShK^c98=&zx| z$d7nqSzhndMe;vsl_^%8EVw&KusM7@tF{T0&e9U#6)l3JOE5f%WSd*s#UHFqa^Kq> z3u>xnI;9`IjW#TfToyyPjMr;Ku<#_it+~fgH!-v$7 zbUmtGbS7Nw-E9ykrhKAQcWhvwxH~1XS~eP%OhLL(vX|DpRWw+&<6Wg{2)r}UeYqeN zjcJi2y`gE&5u8r(4|T>Ysns4Wkr4MCy>}qnv?+W49q5hz>I~hs2IkCTTXXDs$d1Dw zR521*05=R|qDp|w!x1y~OHPS((l?2M?~FenSkm!+?ts{wumJ~AemC7@i))d^s}L+> z41nGm+o8pj6aySYNsP!ASiqP6FZj!Ex!bN?qgac$hv?2BNU|Hsh1rN!HTd@{AszqG zLzB*TC#hV%ie?IAT&$*_S#cH4+J2~$fZkZs>4&*(b{j4-cZZVn7AUrL(B-7NJi=NV z@Rtg@E$k3SJ8$)L?=3$hWunj>oHvg8Beuz1v+}A!n|{^QO^hjnOO9#nw%43`M*rW$ zRrX(Ffk)tf|K79W=5;ZONd zD3lT^F=94@aq0Me-%&BT;|I6cCJf0=3@BFTMf&6(qG<=OZotI53wS0N=+3I^>0Mu4 z%3&MWF9@PPA_2RH(zm!3*5fKg36cti=v*>e!3$z4zblgfC|R1vt~W}%kQXj)xBSaz zLV}s8hsg6o4PxLDQ1T9-Z}Ey7>#~*fQ}X3;VyMXl^-Ol@(Y+34R~b-|H&Uc z?EkeeA=?@kyGmHYrMg~p;KKPMY(G_cC=@;HFT>O+vG0u2`J-1%`eZD%-e6W=#80NW zj_q^BXj_7(nc2(z*c5%4#?bInRX!=KMGg@{Kd6OZL9fI?K>0BG!k~k=`!n=W#eluy z@!#Of_{kr|YRg;9QEI%I2_utoXXnBM4mN{EdhB;y->Tt~+Wr6om#5#{M`zim_qBfI zzhqWnmkef7^qprEJ(OA&1fI|yQ9Ha@5&^xCKpH#G%kxlAF8L}Zb(7$?xHiP>_`iT&slA~9M&HiA*sv{-OoN-AlM_$-vHqAZIIQbHPc?JZ`XpL zgkm761fn+kp5^-%rR^bKu+T}H9iX7@b-j5LUAi`{AOrwObZHqdoV&PmML(*23EtTm$h4}>TX;M6W#nBjiIQJ@#R!grhzL#kJNkoN(owt7xn zY6}FV1CrPt>U0RN;r4A^3-|5*Va$02GNJ(>1VY;>06axJatd`-@1CB-pvX<5SCuch z0T&W~`=Vq1wYGK^s^kk(1N22w$t|}PhC_+g9So{KuA7=!Vx(0s>VW^vI-s#j zEK@ll2}p=00LyV@0ncM%H_-N&&ZIVO=2em_h;85z^_~EN-9I$4@&E~X5JiDbfURPr zl7JzPvz@@D#W#@l?lM?&-285C*|+IyrYR;F-XOvaV^^0J3+<} zjl5{Rz{>=J-R-Ed6HVhB-B;lfSDrP!&gOlkfE~@dcj_*a3h*D5IviYm(a=FjV{c)^ zznv1aNYYAywindvb(ygDt7h}UO<<*{O^Qg?jyQZGoL~gV6pD8%5*si7$K#YFt>*$e zh=|^Tnagj-gxddT05L1xb@*^rcq-<&48_Nw|V>9{^8GF(bqc zxO~+{e&53=$(8pn^DJ~x;-!ct7pVn`xHGj9i?qX<@(>%{PLyGz_-xZ zK;38viPcq!XX6oIJQQ>-Qwy4FX2y#1r0x_fF>b1Jpcn! zHZcLcXUS!u;&gGfaC5mU=Rhh7dha?fMTRw?_N7@b0CfgRKF?4;_>b2?>$l-Ll^fRE z#NDxkraG22gI^%uS~l6zN((c;R+v*^b^0PTekNO!E_IlaK&lMGYMxqx$II!+ztE?g z9{sjchRV6(1?R`J)B{NiV^Y4PhH3 zp!xwrT(E08gfA+ut{=n_AXgXOw#9cU`Uh8g;(>S<(XQuf>~&1U$4aNfn{^&~9+ zftJ`aLy@6dkN)Y|sB->!sCdd~98$KLD+xHiX+!7qIhfklS*7_Z^{ll*-!y2aZ1h?v z*l(0UJ}f)BFyxJqchhu9w-KDn;Kk(4KB{mpyBg@D<5;V+6v+7y`wFlHcJmPt2Kw}V z#5hq7g~8BM{`<4+qhqBA`w~qPow9bmb{US?aye&E#Bhb{FL$wU`vK;tM8{P49nuVk zE(&pp6Zb$)Q*@b_Y^O};jY=iG7B&Yd_sKrJ0G9^nuPhO*>c~6kGW4phUqZq!Py*NA zAJ~21;1kH+3GN`DY=~g>owKo%8qDu_wsspZ0@Mn$38N!TM}Fg{=7a7 zRv$ZIaY9f2UbU*x(7fw{#H#V%55)yla!Lwxz;+)r;@&fGhd$IwyK@*#(kw7PO5qNl zI#nScELBUr*tI9V(sVe>0^*`^uQzcK>zlZ!V*-EfwKIsV(+_1e$SE~DXE{1^eYE}% zO0MwZ)H?u2LCW(rMGZ@8a;S^ffz=x8!dk%mRU^>0s24oWK1BSZ3UXVZt>c}_g^+=F z&l(mDV##|6Qv}SxfJMiIC_F=~B=EPvUOMr`ai~lmKhdO89cxA-fdQ<*LWB>%m#_l( z68KCUJ2luIC@HHs))&XS3 zl=O|QgLr`Xi@67ClSaG38ywH*SoWPw28@E8>p1XMSlQ3NoEOR@5L!eD<}97*a>v!K zW~*4k@vkQ>n6kdF{{H(1hMx|GPJ%eKE2f8^#Hnjmm4_cgy69-i%kJgz(s@3ZJ*@g{ zV6Z)hHI^QQ^QOx`>gWX3&2qEUz9=)xR*Sn4vH-NzO{)f?0GKfLtN4#bZ66k@>p+&P zdMWs_m&f_{F9HMsT?=$~Am(DFAmcZA6TSj+eb&!FpPyMo4dIYz&yNw4T96R~(cC6D zixLblOI5#w1x1I&_9w9Bt(}iVE{IT$6Bci?MwxCXqOT|)Mfbkeo>MqWy*d})y< z+0YNU2Dq5DERke8LIeFWLP9F=NI z^5Jj00-n)AgE?w&lB4xI;7@Hr+9YCJ@Zx{<0L&MYACALfdMHb-t?|QwEoBL5zVPIl`HCq+_z#J-;l0K;BP>n*NrPeW0tP^ITAG^5^eoQ$z|y{5TQegA zgekQF(P<@J0L}^jeDedtSUE&tUqwmx^K0tgbSiQ^S6b%ctFR5b=bj%V1w^TbI!QQ| zVWlG+w(rg8MelY*lHTMb$ZrnApDAau;8jE!cuC2YG+gtZ9l&#rfq{2(j2ALi(l;Kq zs^?S%ksE-+5I7iu|Nk%wx4PPt^x5d>H^}dnvbb|8es{( z!&ZTLM8CrsmIv#O{ld|gDp0G^e54+WUVp((R!?QID8efMy$PO9!++3O1?iD_XR0_awqdXP_F@Se)f(>g+?GZ#=|AXGh(_MmF--bK7Wu_2qY9J<>*G zV#3Jldn(*>8UHLCf#NgKaWr>>K7{|gi(Thy51NniR9dnn@(WvuA=ZoBjsVW5&-e_l zL!i3@pkW>nF-~*vA1L{qH0&aUDhQ}WA1S9(nUKiXKe^K z#Ou=zeT$q0AH=n-95~ED7*&M%CroOWTubmr`ZZ>frf za18z##+0nfFkTN~&D6%-a`bcD9P}N8NM(NWcN|0t59F`L(G;8sMfK&$bP;ve2I`~z zqB#0ltfIs<@5_aCE0LhVtnvQzW)7F4qhcILn=4=B5v6S~FC>`fXwNMB#2l&FjHVa$ z`s^q0sAxv%UN&B&U|#-LSMFY_w3z`L{g^WVXZp`F(=CSnV8W#>unF`@DdPwK4o2Kx z%Zi(COzzJd$1$zeYkWlAH4S^H!K@u-QPXgQ@L&$jEYKj|5d}CjO_CxHmlYcJ%RJ0_ zPU-of2O5U;Czi7Po_Y|BNY4+p?aQJ}G|h^U;wa?Fi6!H;M7k9!t8bzuC)u5R#o z5Zf}abjy)*wFfjE*hHxX@3C)P4WEy7{Ulc|R2^-!tEo>?juBxK5}N<0%jemB1^5Zg z_a{sN#z@(qnYPg$rDSLH|F0ua5TUEWHqaNa~Dy!C3< zd_?!%fTL(XO+a$x+4nhJai>B2P}BHXZr%E>MzlrMKdpF|D;ZIepKs?`gY}0xLBD** zU#sgjzs?lLPRkYb?;0!dQR^?D#zRHN(izENrB>Qbj)4ph=3k@-XffHjnACFarg}BkR0Y9E`gLr`L|?ku+R$@G$s3S`RU13tHg%H=0%V1j zMT@x1x{(Ux0)8JK2~v&cmE>OxJLdx<^w(GIoAsyg-0uE3w@v%CCBUvCE@uAKv9q2@ zTCTKjaPR2!8@yHM-|Q=uY$+W3acg?v0?KsHjbG)0^FlI}{H$-+VI?O{q1I{mF5-PY z+HyKX?dpty=nm+s(GBfsS_r;pV@k;B-bPEvo)M`5rRUuS@{uSoAN}24Gm-Ge!sxGP zr9vt?symgkfoFQQ%}mJu2>wK|y#NNC7;&oqzy>uWmae~=_@xc4A()3qtfpETA#4wi&!_%kPmwrJok zFIqyH`6|nS)|oit3X&1?}=mDkQfe#>9i?`I4- zu;+r?{K{fyOri6sROyLDDdFy!gpua!IiVhID?Z4-YvdCd&iRu$ZYT&HU+YQxgrNG3 zQY!{T8f~HmOh65hhTlu-UeHMD(sVLtjYy4FIB;a*K3krXph1jT(jEyBmLTST@+do; z(|a6ujAT4jux`~+^(`CgoNF8{_E$7gmI!k=_cZ@jQNwY3yGZCr_$gDJ-1Rf>a&dQe z*+C5I?oT#efNFOI2WSEG8pCU$Fi#{l{62z^xcuq)5iL-Lke*rjEx}y7e>NH_jxjj` zyEY!M&Ki~fLNEvqYfMlR%lV_3`A&7_qP>J9W7pxOX~*1ymiEX^^YSK$B)dnHS6cH} zjCr1|yFa$`1bT>hEfKvUzHxvp_R9fkc3E;qk4H$bQ9yRAmE?E@>*gEE8HkbG~I9+HB& zezQZ;g4%nO+MjxktAkULK)4AOyQ66i^%ePl&x!il);Tm_?m+%Fclh-Y0zgc}ql;rq zM3SbqK4s&&GvEkGUVXzNkRpq%rg!rf*T|#6LQRw{VSSEs*;Q2Z@~RoiphwX-hiLV@ zmc5g2eS~QAtQr3IYm}-bg8K7r+->t(t6;}Vo58jG!b7YUC^N)#= zba@LK;m;O>NWrn_M=%ZZ=aXsj>}_WdU*`jqK(JRP7;Hzh)m^g)Md$WEg7n{?JXN%* z@ZI190{^!Ns)Gr9gnQzp5@P1?dtMgy2h`|5;1E%Xf!x^6ka#)h}*>BSU()fV#5Qky92>F3{1$y!iYDov|1jRQvkC$ z`e{agq*U=$7_L0aEWa$_@I-BfE_ISa9R4i$+V@MKxz`617=Zu@u<(7l3yR+?y&?74 zU)TCjAUO>f61)bjH~_mkbP(!jjIaCG{!%4bashc|6Op6D-u2xtkV!_RI2G@lx%GlA zN*jG>Or*2j4aWljph$YqG;J4o5vv@K8q-^9 zHn~lNQi{N_=duhKRqh_TK_iT9%W&pL<9P^1X9o=W z-L=c0}JTR%OyFr=dT z#u98TXxXa$5EZslnY_!?{bJm#xiK|V%hy1}W$&iPy(0UX1DBU`KA4n|d;)ViCr(Ho zFU!EpZmVDq!+eSL_roU;P$OsFXs}*<{;vzbqV?zd0J+1K^ zzV)4bcRI{q6!6+8r_}k+YvY-Dy5q&w{$76a;g^;m>K$JD(H}dySk~FK{y(RP$=ycQ zXr9Xv@oX;CZ6HTQ&#p7SKlaMAg!a(^gNN=3QmXCh|Hy$t1@=18sA-EFfW%z6o0)IU z0qz;rZ4qjeKq&G-%@MU<5a;VXXkBR6&=;0isBTP2`D8$msjdtfY#RdH$(domJp*hT z3fKE~Ys77Ra?zq(<@c$F>L)M<9~HMypF^l61|b@%8<$bI7YffE_J0~2+gWiwf6!e{ zj%e83T!Ps%Hu96%-AvbOMC$$DmoeZFzWFIw3P`$OtN}2d32@O()aL9AM&kbTmAHlN zeD-!m@ej)guoy_7*zSR17dTx=1#noNX9CfB%p$+KIn;3bE4E`5jD3wkE@+_akrvBz z_rn~(Gd!z(qPOSRCMf@oL$0fyJ~fSc#Fn_niXQD?v(~cJb!-)w=wGa8W^Yde^5ie? zPOu?0bOGR$Wg9d2Ui3c_=SA-8MuK!Wfz=;AKNz@eO0d?5{-bcd)u~82Lge+?Z(7yv zsE(IfgSIyaKr14xdK%xqlwf)QZT+9-3)4{nCG|$$0%< zHdjZ!(gmqOOh;qJ-QK0)H542VpMzw;;)HQ)&&PLm-CyhkFj%sjx32YocY}ZgFpnsl zw$l&7L%|%5c?c0W?n_*t=_F_3u5GV*9h(8H$m)2Y4dawuWH&G)9BkJk zTftJhl;UU5Jia!opECrWjTqTAaxG`t>P0P{k*YxnTse$H%-v~mCpbn5-1w-*Ty+Sd zyE9oJfSF4K1zv0XQx@`;s@P{*`P7~ED(cDuw?IT9?mK3~2J6g`sQH1GXKn`>H8GPv zf{E`|XZnaY51`(Qs0?56AKcu-;?f?p42XDLmdt&QjZa2yYQzCP=px(-qV9ena|#&h zVfBDY`5F?u)ldauVZYy`spv@$$skXK>r=Lm1&~T9C6!p))AT)Ml;gX+bG$|hA1dzn zu6}EMmjP7D6%`_YO8K^wk$wa*B273i?@)KyJn#TLYCqzRU}E;ZfxL&5`Xj*1{agV7 z+%7iy`)cVM7`eQU$Vk(zPggJTB5i0&pml#1ceBk6qs)(Mb_{4oam$Kvd(W~iEyIwkOBNu84iV{TU-b}(C3qk zljDPzhewJ02G6Yqq^%WbA4r3nb3;ZNa;IjTkng)Mp-?8?sB%5Y_vgI_6MRdSoZ?*Y z-5x)}YH`AEbjqq0y*_5=_FGT*-UNlDD)+OC;7 zK=F{5ioZZcIuO$ZO4J)>|Cp`Kd&Br6<;B91fpJhG-(HA?3by z4xu_`^eZW{>F2|5N!a)hdZ0V;?>P)KiMmgf4_@zPLkGGGK0lCK$(l?r?_USKzo7B2 zmt9AmVNFbP+SsC$bmC?*`h)<84uA09^WPX-?dKB!CB#2)5i{Ky0!?rq7?XPvLwI4r z!%LTV`{SrKz6*W=z52m&X7|6B7XQ|!iozS4&FO4uf_h8!lds2_=rag^N#(;QZ4;T# zuC>h^YJ@WMUfr8L>0b&f=aStF-8@Bn(|q>k+f8}I9RTJ zNzsvYHn;Tid6y}aqqCLKRI9KFP0Y3(!{JebP$bL@uZ5#xx&JjF)!lZKw<wfsgC_K9qEDxgwe{ z+^%S1X5?FF9YjLl+`+JtzMgZJvshXAp^mucNMnhbSWPW9DH7x5zjyRJedvtIc}2iM z(oIwYM_H70lHs($Sh(2Qjh3fl;cF|^P@)vR>)+NY>RCyVSRD?U%PM<9Cv6mJRu9e@ zqgHbX8X6hZlA>C`h8wR+g0$Hc#M6z}Kbyc=r+ zJY^=dw!T?V4lUL~zq0UHQ;CV#Oqj@(t4o-9#1~?R5=RA+ACdAn%aX@gWW5Fv$F8y?!QyCsc9_DoeV|@^f>vuXMa!9q#;mNARz)i&0|0C2GGrSqqS)gUA;%Y+|0j3%!grUUvvq{u_&9)edVP3 zVdlyCqpdybYxB3S!It|68;6MmWcLtGBcv0toJ0I5>pFJIGpxLwjN_Dr4%sCw1p*j^u6=kq?bI%HnscFS#3Io4w4cSV zS;Qj%P5CoKx2$%!xA?(@l&p@2o^yi{Bj=kUh-?P6V!-m%5Qx@A` zx5%k*C7Cd*iHYi6_FKnLl-pJr!JF-3cEMtswF<_QNMI+@=;NdBdn$8$)^mF-N=tFH zGby0y*s%E13kt+*)Hwit^P2;Mm>VCwlD&X)BFP(%^Gqwi17evy zaqtut8sJ(Cgqc6Of#cJh`r3!K*GPGP?{{Td+p$Kh&*#4QyjoCxohvkD@LQfKws}9B z1HYw~0>XHGdS2I8E_$>qQ9yOuM73t^PD?xCGExvYKwwUrYFcoTQCbI8z#>Z;55nbH zd5b+tF&<2?MSa}W4K{8ymUf7nH5zyO!Bp6qPCUdj*LQ=Kn9+t~QdP4wjo=_wDB=`E zk+cspMR-Qb5;t9KF5-1qQlYy}06hAA07mtZh=4BC2~RNi!yMbrAS`?s0-g>QzT>S( z&aq*&#f_i_(#X}I$p3tqVblH*D(DpHY~2j1(Xk@A=MtYXyiTHS3q0i1-Bx zTWKzn^g>1aB#=`0+cZS`_GK=02--VI@kJ+4K_lUgdc8jeLdW=aX@asohXL`XoWu}& z{epZF6ouzfcl=#co{6Ccx{pkf2h~lDM!j+>%iDMlc|dvLcej0gM)rRVIZ1fA;{Xk? z2tddx*M*$s-R_f-L-_06)f~F^tFgK(-B37S~h@Z z??=-qs_BJGB>v}+ZL74?}R&Y8xo6PFo zBp8ywt|0UeW4^dqY}vwxMwq11ue2Sw9}f3e*s`%A#Juhn33CeRjXAw4K!^vr6js#R zeo&%C(vb<jOGlF(#4Jhz5o&+zG{i3}Vi)5@ zw`Qe>u7%%|L&`%yZRwQ`AJ5Gt2QJ21sClUgIXwitt6N4MHwOh3B>eCfx>6fZ*6Q|D zq}YueAhDQqkXmk>Amrm2t4M(>vJe;q$xv%4L^!t@8vQm35W)xW)`}O^&=bw}_C!A> zx1K$nhqnTQEz=A3IcMLc(jGbBSB&g5)+`GCVGFm#-MZn%U!T6iI!l=Xn;L4^4!he z2j!$hPd@aI-wiG59l_xIwlJp}08sa8>k6B0)-1Tl2Y)i}Z3)kc2}*E8k0ReA|IMa% z1Pz<;XR|T^+5njYp|WM;weK=$=h6Ww{`fb|y=TH14DMMe{F>%7$5sMf*iuBV=4u-` zcQ?ed9e!*6&_6w&(pZBhjelhX3~5)ifN}*6x_ime$hYg?@IRu5=zXpyad?i{teESBqedK-{MXR{qaGYoUnI zBg0rI{2_(%9L~8yFE|Vs4{lzdC8h(58JEPrfAW@dRl!$ynPtsegfu>*MpBVCfXruJKPWdEiE9MBW)rity4kxfsX5iDMEW+eLV>cw?6X+M1; z*Z=(&4lRgDn&)`Pl&`?Ve%JLXSaL_}Z7jvT9FX$Hwq-m^ka58OXW2_lYXx#~ZJ}fK zC_;Tv3Dyuozt&|E*d8P@pKGakR&62%Umt+e$Im}xV$LB9ImslU{tM!gQB5o&h8}N7P?*gG<1dnO99S zn|In&o|$xMJ*&^T=eMWc4lo+%u`<{Oi2eI?rC))Gh;$2lBX!yL=31 zrdDc{B)yI)+c#wJ}*#v24CXtEPGAxQH~b($bfT)@Jt04mhcrI<4-)&cXsF#qz0f`VUp~1$ zcMNSgiRlvr062)AmcWQ!S?BtkYR1&UfK#OMrLG7KCeCK6xn%xBq6n>s5G{R@#gV5p zl_TG{N1D9Two(|%A00tyLCO4*TfcX9Z5k$(@$`RW6~`z~GuJZL9$9Y=Yc2=0_ik&? z2z|DuUqr|T#tr?w3B?zjqQ^pxJO&-@OYT-f<$cFQP3kyKN9^~Z4Byy zfdo+!Wg`UjZ)^0efJvqbT+IoZ3XxW?ifHhE9UXiDkkQ92c>Yf-she8qkXh|#$PlD1 zmqPrvokVgTVQ?V1A_3e=a+Ez|Zau7H0@@1Pl{Sq~Ef-?fP=MH_@h&VF5WDnz14U=0 zNcg1WAj4EJFt=7OkQRwqo#>|68`D)ex1b3(>v)-Bm8 z24>U^#03-=Qk5OGiG-T9aleXD$YtQY@pm}amkT8^#-}qk;p{@dCA*&qjw1S6a-9A4 zGG{v&Pi0o>XG}8N%tw5(k)4RVSkR6mtoFrtgWaU*+&^Pb2| zA<$z&+WnrWfmlRP3?*u#*sn{C*{<3TTMvMmFGzY;Jr{f+f)-Z|VzKA8$5UEcsn(Wt zWAp2NmJLnZY{19FQ2om`Y@LW*$%emFdntK--h)UB;d$dRx{LBi5!8aT19*T|!kfNF zc2V5_L6oP1Vah^pEH!n#TOqssyDtDcF;zQ4I|^WM>_?A!rkh1u23C7W7Ox{O0Onck zJupN(XysVWjMA6O--L*^%<~eTZcJnNAb8SCI#8chua@dA0p6m>1+=*_DYU3&Dh_mc zaND@44lTv6YJ$e>{-h(J6LHvIA-DG%^_~KKsDTN4Li(kbyVa+z4bszy+%88R+}|<$ zo=->pmvbWU#Z-tu&%+!2LMP%?-D}D4a+}B;k$k{rAIq$vySSy!2fz0IwT5cuI;UJ8 ziB4J$vULLXl75A+n~(Q321oySCeG8f=t4*=1f6*k3Iu=i5{L{Wk~0t91$vriCtiQf zlu?;8Qoxf*Zn!*IkE_{hjbbngI#Q0D9JbS0OKWkVqR^BoOB0OgikXN(l^qbka%!#k zx2zKZMl8QdNx`p?(n1B|Hsx@xK+7@Z(2m@ z?nb&hq*1y{x*O^4*dX2ACDL8eDcwkSmvn>le4BITcV_0Ai+_Q=zO~->x$j5IbbHD- zC`HTkF&YnM3ItijdeaN#o#4r}AZ&Zf|1q7p63$GBD3U`XxJ2IH{+Ep(|F5E|QtON( zg78fubm_S!_ej_&w8%fT#({gY9Ip-Sf_cR+B*-R)DDW^L}4#sOVu{SlWxtQnhJtxaE>vg4y*tgDng^=!9JX{eNvcj2_vZX!P7ee)S;5|U#$QDA zRxMHybYfF~N9NnU19t&ePv3veha%v7@L?Z0@Lc~yr0@NfSh%fUL6L|YnYp$M%P&kP z>T3uvM1VP#%2G}m4AS`)t5P}&@?8pr$F53>=pR+KN~<{xTioLk}zy8LH# zPuJ-P#2!ydLB(E=n`i5JQ@3E%AmO>6+m7tiZ%Z=Ii@$fP;VwXtCW*hi0UK(u)43uj zprVFxiMOp?8K)0I#Vv!N02Myw7sq^DN{IfqBhR!@zFgA<+c56D|DH-}hVzlL9%c_X5TP-nM{#_;I-9DTuK*VgsMs5mi{RDzKZV<lca!oZB>9ndRV1~-S()PWEz*UV!OJ+r0%$_kfpgfHg4A`#3H0d zgHJV{YV@@@EbXaGGFQfgrHi6S3MjXt;$l#Li|+!r?rQ%DsIF>mFS*@iGtmHXYOsI0 zT=)^@bEIDmdEz^mdL8+sC-TZqP;&~5R+X~lB)C7*QM8mR`UcYFca2He7 zlkpyfyC?g}e^5|&w#xF4eBc^@H@rFH*ZSCJ#FGnzv0~DnY;C(4r^Bti)5C9W7G(u0 z;hk$?91f~td!~Dh#8SS1CY*r&IY*+<4fZjl zj(J9#xoI;0P#`=u_Le0RxJqhlGg^KhI;4{CONp5y^*lcbFnv z!nGTtgS8R2oj~cYbT58Ai%r>#GCcCYZ`& z*Vq!kOdo`*qD{UaA7l=CM}z?}=G+KZ2R5rE@OKq&vBRjJs0x8AD#-t6iYhgU)~~>6 z``y+ik#yi=?qTDP`B9Lcp7#`=sO@%0i=U-Kc%qI@8~t)iCTn4HUd1~Z7o!5@E1mlm zvMXl3CyRLHiptqH=i|ByEY7t^jL;c9?d|5_pxizGTyA{88M%*iVRWZE@mlx_eXJT&h3+Ux#e?7VCTnMj5xGvlnnZ3TbNzB2S^VG3+z1ZuP~*&5*~&Bi{S zfSNG=&iEdG0=#a|m1(>nKL!q2`*QwSDz>H2>v-V;1?kL>p=A{m5lqb#W-{G^L(XWjpy`>>7V-k=df4A@JgRkLs__p#k@5%qn~ zIK!HVrKxu-h2Z_4A?8gr!o62Og!=tab&S7?+5>(wNrAYWWk$*>()umW7Z93lXJId_2GD&>$%=fIr`HrWJ~2sWv{A`;`|z#%Ws2*q#+s!jn4rX$)9lP zcpq(YgZ~R5LMPjeJOayz8|dVEE(i;dG;j`J*InU8dhru^^qgVBz(CbVT zo0m@ix9iKkmI|k=$_e5NWEtFY;l4Ynfc5|wCVZZw#eQ`9$a+=Pl-cAgIbw%ktyBzzLI&~T=kYG zAE#m{^&(UV=`iA08uqMcl3mkGd?=Rn8KJhVj3+R zc<&()p{71-f#ea25R`*}L46FQUlRqvQXQPsSvUlKJHTi>%JWaUR{@Tb0^;vKRrBBO zegB0X$eJ_ZAA-c%Z>0igNse%pDC55FrpQ9tbed8+>~F>E`nEfaH7%`VX?yO{eUfS; zp4#V+rIN<(Xn{nWANc3jUfxLo+bmO zB*?_JCwqvQPd_koB?UG_fsW7l1 z4c@eO8Z0vTPb9=-WJv;^q{fZLb#10xKwIXvCEC=|JKl7P=L>{Pel_JCk9r7> zOkxQda+WqctG|X37cu7Bd|oG0Fd+DCz87711CKYeeBO0v9gHsOTvNO+S&VWiYW{4f z@!a!M*4cj}#=ft~V&I6t-9IZ!bAE`AAmt7qB7iYVIHchbcQo2-8Yhj=m8YK~i7FYp zjzj5Un4W?nL?E=uo;GtF|8sKX*xXiLP+N&PJ}M}xBj6<<>l<#G)6bCurzET3FenZW z+uN0;+qT=b$}>vampX%&CJ4P>*o2FjlG`C0d4&lP>53oHIP^C1aHnS5j0vXiL0QpL z=2W47%KUwpEI8$!?x_)6$^-y%!5QhKtIGuryt0gxkI1A8qa${$aEUDuA>|dzre*B< zE8b1t3eA`YanpZ>ny`p~x#RPQV^*(2rq6vB1NAStkjE-Nn?d09Cb`y>qyv}xVec)F zNokfhx)xzx-5DSnIr<2CMUjhujRGp7iYG*tJ+}a+*JOlO6e4#?DU>Y|PP)Sae5)s- zZOTtELIFIF?kS)0M2S_H#q1ePUCZU@CcT!W)dzwHk~P890W&7zqfAbo?pM;Wl}^qh zp8U^DETN#M{jG^N@N9ta*F#Xh1QW+EB^Agy1i)Sd^!F#*C;0_@x%`#b*ldXdP${$n z`s~h+onRp-<%QnTre3DD2(T9jXudagZ)$=+R9HVJ0}@OCmE7q!NqLvYb#nu` zxLIP?=cIr^B~v1M_D0^l^`x2vp6^GULpxX)vJY`(hs^pku#6Cqyf zTOHRAA|OemEsY$^+z=BNhGVlsfYb0+6zIbH078M3``{S;7Pv`>f(ojEjNvEq_DLE& zNnOF(dHb&A(cuJ2_qp~Wr2rE%c`}6Y%~_5@r2W@JqPT;qO#pmI_;`|T+l3w+y!Su> z>Lr$BWf~9y-LO1{KmNQ0%D4Y4!C};aK7jQ};Z?h#EJI`kWP7`g(f280V^60bXEGV= z&a{?F)uVX!?r*<<$RS1sa|4W;7ZFmOhM!@uNB0PWFi9tKI9<7w^zJtn!K zg@^Vuqha%DhZflsnpz+y;ae;);B+0P@SjG(M9JbkRC4uaU`#n`Lnew+58W?l!n-en z_7j(r`W+ICIdXL-2QN&lmCt-tnQFR;Mpv(ed~*Nsoq0=P|M~U+gt@$g#IhTz8~O>~ zn~xPm{6tHVN#Lp)6<2518MQUFFFs$GLAq=pO@F41TE=4vH13=9l5Bm~qZU6LdD4!L zadV2@`8x7M`k)RfqzW{=DwbPu*uFj!VY3xnuK6Z2|oN`hij)O+j6 zdIYPKf zFC&FE#(0qg8A6{agxLifSl?Cw{$?T%z~4Mz;0g}yMg1@}V#h=H)0x>Q+qR*^t$=zz z566eJ#C#mrWK&K!^@akpk_qXB#1R@Bx18$I?=}5ZILYbG&Sq6BB_00qx$E%{O4P4) zE1H>?E|nr-8n`>VkRkRmf->M~vn?Soy)T=*>R%p#hAoi_^JLr?s?*k#W}O8KV2R6q zh}8G&sON_Emnii)X_>$Cpi24rcjx%Z7#oi4FFH0CkYeaB&743E^qY2y^Ll!D3L;&^ zWDoapGx!P^aV=iIem?|P!I=>81H1(nWGz~-7e+3W=}d{_6|wQUmlEc|=bKiYKqdA( zq%5|sqaV8v1}@wtgo8`h_&Pri6*i(^$^ zMCL4DA>H*_1g;+B-eMA9VmTg+Gq$A);pQaP55yGmQtrhk_b*vkm8Na=VD}kHG&}O; z4d=HDTtWFf_lnQ+{a2;vmf&V=pK73}dS_hsFDbR1;C`d!T!*~M&{3WmILr^Av z5`z!`VQkec9h#`p)1buQ43H$!BF&qARHO~WR@WD%4g>pBEX&N7jGiL+@D^r?93?Q3 zW3(8HhrVoQ1rP8ecQVXPOUy1>4p0>S-Lx4k+&`)8uu)k{Dqjn^rt=d&bIwLm3MCL% zOmq3+j#qf>^fA?b0{1)zAIj-ybkmnLnW6^?xNf85}i_I$k`y!$e2fm$@b^Y8tj zVmo<=b)ic747L?y330bVtpQTrc&i++Eli|YcdT^NvKVOjY5VO>B#_NA-=_oh5aut;%d+5J4QJCHmh*zRZ2JKjgVbhHn zSug@ikzP?CLT>X?q%}e|&OHa5Mpqsn7c6`4wb`^fSX7rRu?p*;h7aq^7CBLj`Fe0ZEX8t7m^b`F#U>EHpxgnJ&HSmHdt^rbG(_zSXbJqA-`TKIjWXeNbW zHXZ;Se5E8=tydbLUgOEg-aHWuwJP6+V-WM}tg{7aHyLz0kSWdR{4e!xV3z|% z)yXG&%`{GC-+Q*qC0j-kcNg@iOP-h-*|wRt1%2DJxSekO$qx7;XY%h(7|UdI4dU|e zG;YJ26&m1hd7S4%$PPA1$VQ6)c))@jOSma|?C{Jqx7fe;z2=Wc08qi;Q!oH3%sG+4 zIF1SP$J?)30!s|6X3CKTcRi%MBlSbAZ&jNMwJ_aZmXnf}gn2LleS6~aTJlMVd~9r3 z6hHc;mTFzwtTT{ZpkL{6;>^J-%xQ^ut(OwX=KNmpy4x)H;*SVY1J`9nj*MUfF(+}; z=i4-xDTpHDlS9l0t_}kdnY~TuSpfq%#IZXdf4tzUncb|rVI#!RS=BkCHY+zK$`Y3M z<4}8s$lyNI^vc9*Xm8h{ADBkwO4Fvj)Ou#7jBzx2-Dvm#`D1w(=l=a4mjpa`G}zW<#eF?3W@$(d5XwIPw;7GE6Q z*Zp=9gF9h+M#IA(yIdsc%R30|5Mon@&-z127<5qv>S0F1h}Erxanh?RaV?&Y3aO;N zrONvk(iifRh43hi()jezR7wd-`LOt7M`L40e7tPQpls*o*8N9&bRf`>4#dv~s!J*T zUAzPoAm(%^zltOD<)UK$q*~bz*ix+<68||vpxXcWx>Xw+V)l5x50 zX|_IAPp+1RAOJy)K{g`yLJ7;df6v~J2-}ZNu{8(ffD#us{18g zuRP-N3lY$sJ;Me_fuh=setiL}nH^qayUxPjA3~_y2kN)>#`33foif~tmrfKaIcDFQ z=i%4Bi5T8!TF(`K@--4g8fxw$cE-hbTtIrV=soSN1AUH1_V77v{Zi5!r`FZCm!GDG z?}C9WEq)zptV`XAJ*-HyD(Tf=V?2H4z?sWR?(Po zAytWPeFDk*;}G&@`?XYMoe;v}Djj2RvJO@vHGH5Vx4ryhc&Tt%yBKKMkVx2Lnu zkhgRPx({^oWV9LU^>jS%Hd2R43^Qi*Q3~czS42I%RphNt_seEbKL>jbL2zd}^HL;P zA52K$DA~Grv6h2{2+lu86a;V@RX6nQQ#;86{7{6s~X)xB2c4?m^kN{~!& z{>F8h{K8e)K_C7CEm+&01(YTORqvN~>-HJcFE2_k%J1Wb5F9fTFTkkGOE*_F)2$n- z+E=qi5FT~H0bQbvhtRCEXdS&|Qae#lQ;G?t4(mxk)LDX7eRXb98{Y0>(}W*c&>A<1 z_iDWshp?vWXEXr>`~|mc%poo9P8RqBhQx#lkyGyuI(3`|93QX1SjjN+~{cHD*3n{R5OCjwWRAsj@4 z0qY_Va(tLPJtJX_W2+Vyy4lqLS<~~w1KP!=?9k(Kq187T{R-GjB3AK5K-D%z+`KM? zsuzoh`$)u>*hiZ|IKl%b0H!zwffLcgu%t3L;b46Kfr|PS{I0JF<1f@eoUeuSy-s zC8aUQEKr;gAi*fVUJuzqx!)hP~0$y(4leA_+P-W zaXww>F&Rl7!T}_Tl7uCySx4^KT1{hSPi+LYt?En04k%$b0F#6msa}$Ij*5{knv-8a zrX0Mb9b}@P0XNDy(z5$MuLVH0nsgNKs#Wzf7p;Rv$ zw>EmZCpbpDtOVQ>s%FGX&_a(0z|rR|;)|d=B(4}9b>c2)g?(V?_;8M%p#`wd6N~`> z`#dfZ;=+PR3!i7ax9;u6X0dzWDPZ=b`VF1B$UR_o&qbBg@@MsFj#}YpYJ>*}=)u;t zCHQ!-b^cXE+<)PF4kEY*8&Hq<_5b=tfdp@L$@R-y46}=jnM(`)QLoWo??S-=s5i{J z=COTAI28lB(k?=RO42{?I@F+eErx-`DKFvmyH6${K?FgMe+_A~J3QQee!Xe!uce}*YGq=Cnj*(xkI57Sx&JL; zNfs*c{RNf6=L7iBf3w~=R>5PsOIDxAE-+TVi{?P&v@%OFI+_BIZY2QeW_Gm04->k8 zKrX*fwYgh5?8H^303;}`3(SX~+YnP1jZVaToMJ~rMM143T+m&0R6d-}*F)e?E(;~r#Ai7ItDOYyj_9Mrue z(WJ`K`mP|qGPYu!qy=7(>htp!j7w(%*G6>(8DyeX`_P48eyunutXj&;z0i0Ns5VBP zR%m6Ih#Ql-7uESZ0(BSTx*l~mWuG#x^-D|N_b>jeuA**eA*fU_#bywMADZ&B_jy01 z)WRn2bmcq8e3Nr*@(bWzvQ3hLi*j~MfEjKFI3rN&#nPMgbDB(;LCiSA5@Jc$0jdEB z#l0-J{qmB<<_RuCuI+mdlrQ8Q>&}abvi7gP-Zn4|DZ(y%yg7modkTK6}j|54@snsIznOEIVTflvy`rjC{+t)XH%fM41@}C)E zcJpgqK^7PyqR*a`mgOgzM1OQKw2fQH!%e^zsYI3sBTMZx_p5YJ_fX1-x;5~AD2_0yQ04=Wx&U>$Lf7As+C^R?&Z!uD#MgXf+#?kKVFs_dQ*8CIQpY2AgE zY&$*oS%=;`mg0|XowfE-EPlBD%)4t~(qMl^QBUUM#+ksRE6BrD>HaHzVhRu*Vwja1 zfF`X~Vl&&_>K>YTl7vba{pIz!u|luTo8~_2EohCc1W{pkoxhPV1&N7Ai=xrAG$y4# zG7@#cVYod8um#0h+u++FtJa(uk+e8rWeod4!jm+N3L%~R65Hh!1>(+8g=5DAkA|Ib zOyJnz7cQGmpErH`wM8z!F9)%LQ%#^C;7izBuQB)wF9D~oeVbn=*P5pZqf9*j(s*s6 zTEbMn{InZ&d!{kiQO0i)la*OM|xrDZ1&!i ztJ$I0$V|P;#l86q0-BO^-vl%TVn7-;?$DJx0*;jSkf`P# z-GKW4TnB>Xjwo{Iik}MN7oN!Vi76gd z_+yyRo4D(iY#6JUrQSStXDyym|5Ze_2QIC z3qLXc$^N;=O^Pr%(T4^;$t*IZ1WzJgFb72xeY`@EoUs{RT4Gt!>~mduFx2wnddcK) zZW!1=a)0kuCKYFi&B3Rz=?tFmnpN57?^wx{sXp`sG1z)_9Lg0MEE36WYVcaG;6HT1 z+a&e@bAyKWjquV76)0QHz}$e%MhAQ!I2=MLmLh+3p^!!ZE|ej_g);IBY&XyZ>;`}* z&Co)F;VnfA&Oe^C#eDiA`nVb$-{^J2>E#{lT>U4Np!84M7k_Xw1<@pn$__w@U7NSh z5WqlDaF*s*g+#`AN;nF=dfse(?y?Ie9-lI`@B#5(Ck!pq(l>MZ*Aui(Id3?v_Hu}~ zVkq11v+iLvP4nNV<&cvTpI<|N^!W6~%_|@w^tU_!9(0aFS>3(LmxQB^3@qB%0Fv0} zUy}HKc#MV7tngblXgS&|ijdp76sbedz-nxV+V0d@n`vJT+UuZcb-!^&mi+YH)3}yS z122C6vhB+8skh%&jG%x(EO59i^ByC#Qe754Ja|z@iBm~3TafX3oFAMVy1b&q^ERs| zEGmsfg}36z<7>C;oYOd9IJ&QMvCh>2>~)ElQa1qo#_)%2hI84_L{g3FL@O_VKrfO8 zSdWt*-Lp%x_yhK(SE`%Wb&YLUwq?Dy$f|}0))bcKQ$$BX9I$unpJjs?S{NrfYJc>| zLnY_{gVwujiyi@hJF0hW2>$pXJN)gbm1PHEEFhSiVRdLpDfOwDa}E}aJe zlgR-vdAtS~49L!NTMio@eybg}5g=;*69EX5T%HZGW8(^X?yy5s#$E&;HUE5Hkp4V! z1RSZ!9Dr|C?e8c`N&A1#15TI;>ttDN2s@B0kV-(Wzrw3r(e*Uzy}$~I#)%WARZ)gp zS{EtC(A9^1M-2zFv9*b3xp<*YOcpJs>lw|R7e?I40FEWxE(`C(Sz3@=TA#*A%boYG zu<`Rh@vU4I-B(yWH5olsL$3Y$D9ocNv5ixjbs>W1vb&|ee1)ahA5V+0CAo}`1lltH zy^H?wEbDiY#? zPxNIJDJfgDp?NsI-e`l+ssL*fS8;E~`#uyX*(dk2EBRA=i5OmpT@P;9^fgkG<1HDs zmBmSS+z&h%tvD=f+mDg=o)g4t@GRb5u{%>~*}E~_3V=Sw_kXIiCph=CMcS!VbG?af z7Jm8lIPnXDIP~MH0hlcq&jz)%o|n|dfR)H9^Kv4zI$k^(-%HDMJk6LB@ZGHD>DE`f zQDq^o$q zqpgXqW-74_aeDp?tww70^#-4Dtr2QVs=?$=Lki>hn<2b}>vEkD{=+M~?cBA3m8OVb z;J5y4m*%wi`deRJKKz3iJroLPscrsT5}3=~c#{Y>3rXGEVd3#9QIp{JrGW!l38fIS zy$Ig9O@F$$TNUjKHZf~gMi^r2hAu2}fh z1Gsq=#>vSmlM=2uq-9A)7I+au5(p2CsbJ}5v-)rd`#CtiKfLCjX`4EjR#>u0$S}Qc zb7G$1W==vi$P0uyiAh;9t&1qb2Xt2csir^uKW2vvY9k5)#yqTSdW|6VPCnL4&~Fhy zj6~t6SGiz&fiO(Ty(d7r1tb}{(Emv?3WJl3i2o!R3naL)MQbHRx3uSEx~_(rbz^Jf z)c9I5f(_FoL@zt;`a<`CqS$mxcN;`5CYPu9E$zR-bHGp$=q?qO;YXv&2dZRV1S|IL zjVpF~MhK*}v6ou`Lh|j#Eq=&`Pwh-T zbC13$MC0B~k?C_XqgIkS-IY8MC%lq-%*@JOTS;_d{r*&s7x@+||MQ7>Q=U_)0664a z{EIMU(8V7|4YB|4{CqPIa<)GN83G|Ca^Nsf>J`oKu}z75@q^FzzXnQS%NfC?umXL> zCUvmW$B8LoU<`7iB3W_=PNUB9On~03T-%2OsI5k9eCJGZ=i9G(X;}VuWqztJMozRq zE;8NIj*xL!BW_P3HKcprm3`zlVBkl2lcj1p?1a$xew2PU7s0t0bh^NEbECvkg;Z)j z68{cJ4s$dj;iG*)-5qGxrCrDW$|A!*h)!sEymTA&LqtN{h^vbpA=F{tMRHxZLAHuh6GB2(6`uKiMccEn6m+et_-=^5SLKNwheeXZ0 zuLZ(U*e}HpJ`#ZlhSqnekJ(;Bc>DOZvxEwaY&Qfw`A>jk!2u1}NREv%LN^;$Xv)xKmBYwJl^e22tMXrc^bFFxeV?% zx;vVAdWx50a$|S*vg>@ee<%fp`dzty)&2PAa{3NZxWGGpy=5uaXA1<1|xnw zyFxWX*fPuu-={Z14vhGdk<#y({WG9h$J<$}Dvffwn@lW4Yi^ok#5$o4rCUdkZSaJL zy@_hmU*d1Zr+gw&C*SRFNK@}9N1gaglvLq+SBC3S9_8i!z}up<8qUtx^baT7}u&{D=W_r1_Z zhwQHgSejXz*sR!T9Bl?1v`>l~?=n?1{Waxn>+t=Ono4EQH(b_k$K%I_&-b>pimM zn0%f(DtrDr;8y~~5OlxM%C*8m+wgs|`De-ia1nogoTRR1-L;=o_Iqjl^wFvF(Fm;E z7zWxL-aBN-s4r*gI;D@sc;>pH^$QuI9D%BnPB)m%Ywmj+r@q34A_ui)o%Iu~uy{z| zhJ6HXm`&E{A}zVrmf04(4dlrJCuPpDL&_g`MYE-d0tb=PY@U$`2HuuMZ;%!J#FZL) z+NP0XD3$B13MWBSc&eoqSsI87Bc)k*{};u^bX3@93T~Dd*l=WpZ~UEO7b7qZZY8*y|*yjrneJ&ZB3?Q>>UU4ht*$Z01ZtPy#=xa^>@ z+dSwn!CL0ZhUM9!WII613=;VJ){{h#k2oB=l88{7o!6f#zEE7e6+hE+i~S65Ku)g} ztYr?981SX}ARxQ_DuHy7pfLUPT=sbV0CAN=%N+Zyg>AL$I5c}lMV0+{z_;UTw>P<@U?iT%+0B?uG;I1)3M zF}c~sf#D*!z~zg`A0%HEM?I#6J&mBIgv`j>2&1kHR_B@EjXtF z!5^i~dLS}ZO;!^0mAe<32bCSG=Wh1l%Em`p6VdMxJ1`xor4Rp25-t}$#vB8Kgyw%n zi^r|t(W3Hj+>!`({gpi5&AHoTZt7zqbuyaYdr_bUF%zf9nsPAUwZv_^#=dT*-$koN z^TcLhmYxQV7P&J@ZT-C)`VHS3K&q;hv?JLShPe87+38-p{d8K_mRk^Y5Bja%uR?F0 z0dfbv{jd*T77TeZ6=zONrRXZeFYhGLmQz6V%mnm27VI(p2#mIxNl-`Z$ive;eK)Z=8Vb`pJ8I zX^s;>m8<$Ov6XG#d-(urWkKS+$hpn+3O35nXKzPaz{ltCPu>*rDFYD!@ui;|cSd2n z0scaK|9FL5YC)TBTm~KdFGOckI7EvE<;-AoG9LVGR zVPBlYi(Tz#x1)Vj5850EfaGj!?#JzRTX?bt)}sQhFQZ)>IQ33R>tcAbCz~I7sziC= zQ?IZM^SYmv>wtH=n@oRqZ#z_ts5SIvDkVI$R>zdrPfSh0iwWp5c~7}6ULa~Vh5L%OkKUC(DbTu!z}V5 z!X+J*?7e2X?SO;GSpf?e@A9*I#Cct%KLTVUm3WINyK@)Mppc!9^5@gGLYdH{0$Cvd zQeAXQ+Y(1ie7tn|70C$bT;r1ch!bQmlvC!bc1cR*m)>qTcU4X+T1Upl*f91p=~fIY|uFL00ipK*`dRy zR~P%MihbS|2ZRdbnGs(RD0dr(AVe_kc#@ix`rKaGGLwv83t_Wh1FG4l9QQ0O&wiGIP{a9-_X6=yUGMX|Yn4xL0nZZ~jae+sL&Zp(f zk&u)BHSJfTB{+kO2DXO_897(|2(ae{(fr-iL~|e*(9lEtTSsFQtbHHr>b(Ab!H#pY zwi8}gF2evsdG~?m?+C6(_Z|68POW3rEw`MZ&*7brfR~5S>5e|eGIwi3$9Vr{Q^x>l zNA%G|Hx;k^LlcIQC_=qK=;D#O-Io!?MOt|jIbpKArU6=*r4~C_p5lSLU}Ui`R|!of z&PZaDQ-$p_!Oc~veSDG%sX;1`@b%I>HXA9XIrmYZAlx*uTBwh|)<+&E@0se}eEB0G z187&25HABS5r&-7Tf}!4hL$Tv;1loedCFi_((+gZ7a4xaigJkq|M5K;!E6+h;^6m* z*ZY}@Urf&PaONc^@O}LR3z3hY{FnD%O<1x`ik8;%W)g93XeHnO#4X6$4uvv%*7xq1 z+Cl|gpNAb^@u9-G_nzE(N#gda>r_LxiEL7D<t5$(fL;H6aEdpBCE|KPeo^RJ zD!~Syb1J~YEg5x}(`gB1movP8!nwgy=0gKK!%3){AletX?@p%{V}r2XGVz~NJkb_G z!v@NqNbv7dXPih!R($Xo7VJhp9;Q?|9Dn|HuDF~;xy6|Y53CEtHclmNyY>bogge?$ zSc?=gJ%qUo8@Jso(Yud7v5gv4dI)<)W2&UC9t%l7Jb-hB4e!%SzfHzUUsj6?)00L^ z1>rD$GTIl=s?Em!SZ12)xl0(I&D;QbPbEYIy?7*KDbn`ciT8H|Gvn5xC8DaGA{Lza z*Nj85MCP_1xZZI@=L^MB#p^lrSd+gWiC?x+y4zs(qAD?6EjvYP4jJ<5d}=q~Xv6O0 z5pI_|WIj&Xt$}Vs=K8}~sl;M8@3-kizDFd&bW~v6{m-fpe%6nV^<8||7Dw`Y+uM(r z|F$F~VQ2_43=&mZ(`sZWGbh_SLNJ5y%4g}8Ho9nwtQ0+zN#Ao4FVLGhz-QEi z&EKDDzz&-*V))4$U=ZJZO^VB_kr*;XBI-OYGan$n%Q*MMt^}XOk?s$j7#3P z3s-j&sKgrb-e!Z0dn<(OLF=%*=4ej=y~!FwU4oOfW_WmZ3?p ztvkL?6_O$)DC&%lfqUC2U3y%J+iIAv_ z;;Bh!q(m~zoM7v1kI9^=oo`rG!q^=yW%6F?hEyCW) zXh)=m9VE(zmt`Fsl% z)~!N!Uut{K-WxC(EQymaR}AAcXEssZOb$zLVH6lw2WRE0gw!b;SElwS!@ zodyade_sk`q9vo?k_sqH%s8)^Lo*)MEIz@$Hw!kAgtR-u?ox&~fUlcw@hd=I+IHNn>1wO{>8;PDj!RLD<@mQEC>%e`ps>^FX}@nc16teyU0@GN;sBaEhTg zc8^*82@VC%0Z(SSrDBw=8eqA{ZlkN99q8sbCtjiydPEZh2#6^F0r3u@9SL&P8gMP2 z1?!69gHsk<0KzcgUxi6jB2}VE%}&BPRK~bwz@tUN5iy-Ya5?#=eZ&xFCYp8tAo2hW zg#_IS^T=2M>C;j>$%-gJ@SfasZHifR$tr0bWe9K(Jx|gw8y+*>LqIVsY7Dqlp^#xB z6iBvkWJdKn@o6J0c^FB69Yls^Xm*Y7Fhkk0>`)hGRwfUijpmb5s0Z6j&TkH9rK#)b z+R!gA7MHcs=Vo{H^fFWOuW2BLun;SY~QcAD&0BOn?XJo*Ucn4Kk)nA0*MDtpY>?dcmTvH6A}kGL3Ap<_i1Nk@m4IOVfp%jWz8~Q&q>%}2 z6RV;?DWPzC(5a?8QxH4)K955sG-A=&HiQ{M?#?^Hc{;Q;;p~DOP1y#eZ&37iCR%cL zxPoFjJ(ME1MO`Kbs{l9*;suaTIwkX<*-Xu@=yU4kcp8~?#*_?el${Pf%D*@k2T8C2t`!GeptLUAd%hm|zX3?qgSorKduU%(t6IU2{HB3~RB*bTaWLTK=T12rIlR8B(w*pc>SeA*z|r-^~TPr-uj zS|%)F@Ehh99=cD%j0k)2+zN@++G?4oVKnReEurW?Jl__yB?duRV_tY^6 zD3eYc;{nkjW+WgacsG7rhqcFr;qaM0^2MA8b*c?XO|EhWK#+mE_>XnnyW~n(pa-Q% z8}-YV&9Y_GDev23&3yUY1M!j89{kad*~kE2==68Afc`&n2tz2=6d~Rghco%n6UYF( zW`dG#RIVoCj?VksC9x2~AXP9_xYg0HG{U;%tkBVwin#*x|6fb_5b}B-(}oCU$2Z>I zRD3mypPJG&-J$T{n?c9!exc`3CH!t>`Yu!Y*?X_W+$RyzQ%_~7w094iU6>j+TS~5YsbtJ%JJ<7KOdjjdsbcpfjUSx`XpK=aUGeq+kzvfs|wogjV(YR z&@l7}fgcD2{y4o9y94P9Tj;O)wJuAY8=iO zwWHHgA2Y^NK?(ZMB@Xs^MmFjkp+u7~3;&C%w``~~TD!JI8VM(y1To(-fQ9B_kP}Az!&DV<~+|aj)Ox1gm^4KfqKK<>mnE;esNTe z+l*4j^vs+q4WoUAa;e7>CW<;IZ}^@gI^b^Mp}jHR18}xR{ z8zWDnNBpNwtpX9!cvRk$y1|7iwk94IKRA4KOG?2z2X*zMSDs*@{wP2d@mwf7m4yY% zjr=vqKh8&=s(`#3yGE_p#{*{(KsFi7qy%NzxvdvW5=4lRapHmDK6@}^+U1g7R2(*O zgZxM_mSAR8r*|r#fU3||s4hcBWQzRuPeEMy2Sp&W$ZsdqWC}(ARe#CiJhn|v#d1g%8Aq(HE1woas&#SviwHyo z-!RtK07=17#Q!D*C5`_tDM)Ai+YwepZ^ppmZO}`l=w~%J>o*SMwlI~IeW?#g3Tpj~ zCi_SwmsFb?LQk-#YsN9%HpTy*jo-G+vxzh#AN`$0HORU}mmbqdb;Z9AS~bM6;G$sN z$P8tG7cNQ5(U3Y{&7e2|>yk$`APz94k=-#hc30Pus|5@7N+?X+l*=(O9uU@7KYb1> zr3b`Fcm6w4`5{!W9~OhU{}R+Uwgu`g-v+?@VjVuWC7l4OG|YH5VDrCtGWc8d;6DRB zWGQ$A*lDlkTVSHspTHOdxYDe=pu}I>QYF-TL2;tI9O*n`*Yy0RjL!+rUQj|H(|HO# z3;ZTPhrEQ+6Bpr@;*m=e|3`K-KRATpu7g4985(}<)jrwHTN*9@U^_ln?;yiTM63gM zacJPS?rVZGCS{n8bqMr*r>%zsJsIt$GDPa%)NR`BV^L#fWw^^dzW;1L?L}B1N*Yhc zyC3#fS!L4SO75y5BCWxDUOpPczKM>LrMv|G45~m0p;Yf)V&CFDTGP}m@L8d=FlY$( zLoU$ZQ}NNmIy;5ndpLdoX^|<_t2Pp%BdC51-e2cpq^PRY%RH}Mx91>VzCMwI!-Aw& zOkXreM~OhMhc_>4k1nGVDE7SJH4pOu(!Hkt(!KUTx)(H(T!vFe$-{f9dF-xc-534E z=V<$~c0L`I>}dMBDd77G!-kkK^XA2gu6d^eS_EOQgJ#!xM#VVtg8J*0C180<;X6T7?!sG z5Pf{626f}huZ_Ow5gJl_(3L1efu!$f&s55t`Jc#mR66h>M8oQ=veg8SV`TMPQe~?T zz5)^3KkC!1+O|eb4$3C`M$CKGN7iqu>z*p!s2j>my}ykN!`QBPF7|3T64sYAk>jRQ zgv0I(nD9nNb$Cs7!k{4UjEJH3b(=Rxpr_wROWyz71AV-N!tv@OyW+sow7l19oB#UG zl_R2{v*)UVIIhi;@1cft;;{rL6$vYc(ecz5Nbg?c0wSWZ1`2=0Cg0^kfuttV0~oz- zM1vyymS|dss*)z@|yF>*0+OoEY4Z?jhObkFkgs=YtgkF~=c9|&a z2lzyQF7q$04Ml_8O#2bv3zY)4^0#8r0h(4MdO+$%L}I7R&g9rHn`WwsmCC%03{vhL zkay_8+C&_WdUNh4kJ z#1Ftpd;^@sXqbJX1wVz5mv-&SM3otgofBIo!_7N*!tf+Ag8rD z@+aA!BGbUBX(uGy;+XGi_#m7{r7LA$UN$(Q02HcUsyiyxwf(pgncWO_6ljhMjmFC! z1JLC~!g2d)X(Pquqz1}FO1R23GGw7Tm`1PE4e?RE3+YN-?GW(gS0TRy&olXpf0)d1 zcZAd-KWE1L>elAgA7Fn~fOMDCAU)TsPWR`PPB3k@fv#s28XpKZ()lH?KU@J~(IANn zZsN}UY4+=nEe9tKuu;1sz_(LVMS0n%89J{Vv1!s)e+AzN5@##kYDEe_=^$|Of!#-r8Hs_+1AxSdn)gdMyE=;TC zzH|i2DK2Sl88ed_UU^p{8S2X?cy+^|0FdZTkvsjExW%dH_+QlL{4n`lq%wsm*k^+<+2Ez|8#*WC8 z2J85P>J49xq100IEf!r_bQO1^A9E%Al`>lNj)U^=bt1Ro;>8nnqIlW*cX<=AWfH?p zgfB}{uQjwIsXIs}p{4r)V~1i=;xJ*o3rBn^@RknNB3imDEtd^|3Et?6nL#uU+I@Jw ziwLnlCpJioujfvQ25ex!TiV?2>VG5-&Jk2{WSAIRFl)lc_7`&3h}C>A=Eqxm15*Po z^SLJy-Dqz|dnzOt5%M0hS-#2`c9~>2f#|IWd&c;MsG7B4sm}?~n*bF2>{Scwj@!l9 z_D%~>x-IVs&Zd~({guC$os_nEFkH9n{>`Il<4JPC8K%{zTyQRlYJ)H;KnO30&=Jgn z-y5bqWp%W%2&%~l|G^$?-A^QQuY0djJ&NZz=9B|S7UGB${P)6OzvvpdDeHZ&^0-%Y zyZ7GGSh;eAFC50MGNvlnV(Ry-O51z>;6>W;2qb3jNQ7h>{t&HpJL1F8EGY=Wn>-~+ z|1HK6nZ!`PqP;;FR{gB#S^fF?nnn{k+bFB=Vy6s@2|ApbD&0MPw4Ct@R%#xMiRmeB zvLRGqN-9Rk@bw6-Y1(ZF$kLn1YWPdf5e`btMc|zn9N4PaU+SsGo%TXV-tCKqd`Ke9 zQmv}*jUUVTu5_^Dt9|pS&8AOje;9Yo>D{FT-A`S4)}kpEu|)ik#Pncq`q(?Uqjq*G zOT%6Zny4uJ=AJ(?gRZ(L;82X+Pih(dtXw@jv#@^@pZ3f4dl3jyWTKx55e|SWl1Y(n_-7NG@(XQ@$#5O6W>#kV>s@ggV8ew3k`sY^CTNU~E0s>0 zi!Yf!yruk*pZ}A+0|}&5ErBs~&9G!I<7ky#EYJMZs-S>QS=Lq6vM%qA*Q4g z#c>(t^p^5ff%M|^n=65@x_L1jQ}8eu6`622FmihOWrCk`ziKvqk|)$r*qX#)DQVB% zKrc+>#Zk^+sMdSy5tX*mz(gGXIv`pgSMP+6r=%OPtYdTBT*Oj%+{SjMhm!o}Ie^-t zor;Kh4JP4P7f!rKe)B+4^@F-i273=WPETGv@QXdWdTmTx`M>zAfRK39M_|cC@v`K4 z2>U++Si%*3dG1sICI0>QQ%*Sj0&huW)OcT!`0NUd7Xuh7Nn(f@q;7MipF6AW@t-8j zu+k|KH;nTOo8$j!+c{XvU6+Fv6&+!F|<#7yj+ygVj~9+ZMz$0=%w)x}6j`h_WpO(2&>V0g%vR z6*Ne^o*5Z{ga!i|@?Sufw$SI2w;4VT5}$j^*U@0eije3;l1;J)^lod0SPEz(v(tQ> zSB46b2Fq_#FTbHXdHsK0;xx!PzPJgfi>*kW>34h)=;BMhn`gi*T0eM)(`vKn~3$BNK zEeD-uu)-dAZSO&aO)5f&8gA@$+S`Y~Ya2Z-*v(y-Y;q`i%g&DE=0XR{24vB1tN8n- zBeD`V;qmW%{pPKN+re4o@hy&zC|6W7wiBOeP0N+R+w;uItKKn!~Ndb@v(nkoqKpk2R1sU>2Wi}cXqY{odI?Fsw!!I zf*Yhe%&GLwCYPHW)?pER<#5B>?>|`D zC+xF8r9T-6UfE~;ds@?d0Yz8e#y?6WD*FHS5^H^DF7H&hZES`uNg|r`-O%t`u9|_q zsI=BL4e%JC#2ZaG#ZI5x20a7HwmYNzk2ugo^pIP7%t zh`sPLeC0ZjDUaN}(pLsb3`Cp&f52YIG9ORNwOiY@lBXievl=VtyPx&yKHX7|cU5}i zdfD{Fg49ArMdG0hy??Y;E!-Hf+y)DguOQnVh%SQ-&Yk`Ut?54IN8fvS>4G0xURsI$ zD!8U~HI|3=mc|lHyQ68piF%kYVpA2+q-w(@PziUZ++rss(!GyY+W05uT;Du zZ~3-r$xb6i;7{|N)%MCKPK24&TfZMqXR95C)%(2Zyd0c*Jf2H!fe)TO(c{}7dZ+Jf zdL4cjhy(&(d&$f^^$jN|!rmP=Oq8x~DTOvF@YW4g<{Z|-eUl$bMM}dq*A4xy)X6PU!;)EWvA)N>?y<$|mrC@w=7nxbj& zU$O3`dI>zGnxXwqe&R-MY}p;k3&F3~-^h*} zC>kP$ynDqI+r@5k=1g@ct%pl(jY1>IhvEGucOILH!yRyge2ohFv85A{7Zvp6^IEVD zDpc5ml`^o9^yg1`%D^`qh88b7BNA8p8L`3Gz!&tOwH@R_DCCL(dEF%F`kzED(Hv?*QtLBA8uQ)U8oyufQ)^+RW>|CK)UBG|WCJqtpk}T~^z+9>!lMj| z)rz=O=e2&>zw@{uo*=n!la^mTxvls&;|8%i_GQ8|3sv{Pl8zYQ)Y;E|j(TW$FnSt) znEE{A82HV(QQVODk8chLyTmJ@u#?n9eOrEE!aD4)C#)>3ch~-&Y zcxTR3Uj2i}7kJ`M$Q9xEHud})IOrS&Mq)|iw>wkxl8T5QZUWjs9;NsK;C+e#borVca>avZ&jg*O*#-C1&xj=krx zRs{fU32J>Xa76R$7aC0v{~b9jvh+y399}rFu+13e;I@R{yLqE|QoRVQ+G2D3tB zehg6b0+4}j#{Cu3{7z?QLs#>?0Hh}X`KT*cn4*)h%G#Rz@s+s$ian>Rwc80 zQV}4YR3oEhW#%)|`5A`2bAm<&26|Dpfc=wmCsZki7Y_x_;cv3S1k?m<#NUEn2_-t? z(=d1bYKZi1FdF9XY@STnjrQIKX%d@s0y08I(FD&=uQUlqDIF5h4)SjLX^yVI0sm;x=CUl;NM~ zI(#t=hcF0TVZ3)Ob!LjEyM$qVNN66

u{~;EI+AGzdL@P%M_m(*wocD#uer=|$NF z&*Tjo;$axcB4=AqP^3@xq|4a;@lTt9doDI0kH3C3Ri6H&P=_xsC}+GG|CkVNbKx1FE6_7-D18}G121>pKl9+c4D zz69sti+*4LIss<|&3c8LNy#dGS|q<-JV@IgNX_#Sg30aL#)D&Y zqWh_$MlY7YT!fc(V&e>Z3LwzTDJ9dcGu(XPNpBWL|A#l77EVq7F$!p@{RtNVe8J;4 z6ZIYvfO72c6Lc<3%%5Kn*J7-clVC_*jQHP#?;#1gT8$_^@+Q=dQzY*Eis_*tb(rd z!t&#Wz%xTse*uFpHvpXN8coUB*}7drjOr&|+0TRi1zwPC@@}v~9R$kaj3xb1NwYX? zmnkq}BsMPSYuTNk@OO4_T;7dZ_R{$2?c}5XSqnnjlE{@5zYkk|Fu3?n7IE@hY=3=f zDiSb=@deVr3o3-IJbD%bzldF~Ikh7}j(r}ysLd-5GkZqS&e==brDfA;$cjX@M^{d5 z?YiLWaJh}@1T-f(uE&+pi_<4w;z0dp@{k9%svKkbqgIQN+(;Tdn>Txq$f4Xl*+uN4 zjaf^pX1oUqZ4hSqUSVnJl>4y)x@@F}8_~%atNsIdHn@ai_=K71OcVxk80c= z-9Re1>{v*B#NE;ra0Uo?34}Q1G40Cr$iqI`&i!)++$y$}67t58#pwm6QLWfuZyB3R zr|xBGSKZ1ynY9~9{ zfZJ8N<3S1jeU=vlT4fv7Or7^CO5gP)7ft2QA`+btvy*t17LrYL!!Rpa(bcJ< z(sigRoFOgBsHFfB*l-T`J5$#$esOF-FD~Hn#{smV>3%f&_WV!7QwvcK#4X-Ab{>G9`KSq&$ zIcd4Yj%6%NgZErb45!yvx6-Tr?WxuZDBqR)NB7?LI3$w(Eg@no@H06 zx)or=ip!=EQIGzt25jy1Vj^=DY!QN9C_crbPhc}A6+T|OOdxI_M!5=Gu!h2Jvkvug zafmaZyy=A1npm7?9)G<2vK+gN^^f>xy)sC5C_`aa&MKjG;Vjn~E9>lBxx6vXaN1me z3yN@dJFJ0%icS#*H$_T*kZ3t^$;n< zNg9a#>*?wwZeF+lr0uvvuoC#)1rd-$*qEuKK&tzrZ!h^U(dT|yD5{g2J3(1>&NppQ zx4nnmk6_aDK?w>%5dA|mUML<1Qf^R7d}O;`!HD&)^S*B10N)Kf(MNirq}XYXdK`?h z$S;q75E-P!SuuuYd!1ZB2~li1Ih(yGy=4I#4;^6R;XLocO~}FQ=xYM(U=#r|lWR>7 z5-4B?8@GF`;W;?VI=-U>NT6}Ruz=UPX7Q>Z<0P|karXK3JqW!G#2pVb(iZtl9UtLi z0GfC+Wq6A%o~w+3*od}8n}zJJNE!nh#DC9k0=Nk&+Ul=fgYxn0Ylt|buZsntfT2_K z5LvFYaEHT^amy6(Rwa)k4@(QiE2gyR5*tfndZEwm9HG~h;TDV9;g`t6k#_E zB4OR}rD*l`ba>2q#={UVncd9~Q42tk0!rv=Y=sB9cU%9Uf~#zq;23xyfNMnC0A+CL zx{!}#YsYF8MC^~aL&ak`)I)}8tnD+dbm-1hBu#`L8|Kw; zadeK43t9nofnU>AwHmx}-!=S*iaxTBBlO)36ul6sYPa{Gj>bjhD1`_L?;0`28=zF> z`l?zSyVNU-&k9n8i9P{9zvg=v+p?z+qL}Es0re|maU&8z0dPt8WIhxAYeU-OlX-jC zyNv&PWWaUytY9Xf73(}R$-c*FnQBFIXORI01*PEi2H z5AZqIB7xw5`K=bH%xbiyYPr?9x7azvd%YOx z`kuw@+feRq1lf1iOJO;GyOKT!#R&3cf*uJLiHA`TE}EEUmC6pOVZqXd4)m~Pop=eC z%Fx|{MpIS;s_mf)e4#8>72qw~Qt0MWcRGbW`G8`>>nE4FpjSYRww}-Kn9BLnI|awV zYb!(Irxl4z(V0R2P=}ZekNLZ^rZ{`gPo2;oNWw0e`+o$G&FAB#jg@LzZI7IN2OV@m zQ&D(>&@fqGgPKYhG`Cx^`l2M@;3KEU5z@*Rkv~k$^vV+7JIHG+j#bRxl62T zoZ7m}R_^olFCQk?7psk$o(;|}R=k`yOc`Y11fXa8&lB*=@f0cIh#1uTvOCcu8nBoR z#);jLY5X+T37U^jA>8^iJWU2zwf<8`^-n zkiRT84qe12Y_uDK+Yvecq)yl1}(`ms*b zJJtLFYl_yoI(EEXM-IYo{iX)`0flm7*k&f$9`wu8K=dta@HhqdQ=UlRCPz`u5 zev4b34{oXaTSO=(UK{?mU<3r+B^jy_ZR;Wda_fOqKI6{jxP2y(vvkP8G&Jr*4-Tm} z6zUP;j1D#@_nTN&_DqO~jPfqzi7(>I*qe&06R?QTTw<+kLBd)uJlSRqy%tnVOPr^P z4FzS!Ds^8;R%{HS7m*o(NR7AN01pyTV6}+?FuLUv8_IDG##y>3=~$R1^t9Vux;bm))2!WtQ@EuQq*Me~PD!;9~h@IifPv)atat})sSvYZxd8}5|LLO{u% zO$XFiQy!ZSG8M<|eezb!O0n>#`l)kH zY5c9pA%Mv&Aqb)Pwx$3aB{&H%fXpUoH@}QmJkvn_Z>beNX6u-JW5uk^q{ZoP1W8S; zvPF9J?gc>}>4XY?PNrQ9p?re?sryx1Vnr(+h~f8g;$#N+$_tVX%8W9j=Qq#{H}a0S zhJ)(MBVbdCIljbAu>s&8EqVKtrMdxV9@80@d!@o>Mv!@e-M1WVu+N><{mPpIk%tot z+Kd)=8wPWy2eFtwpqu*%G~8^9;fi9AKcaomY9ak{b9ggF(M$TCLz`UL{+4}6-**2ftsy=TDvLGCIG zDFrt%VCI)Z<~x2I6n5{_WYoV;Mah-`MzLZ)=X?H85P`$T?EHse2CIpHF3*gsmZ0gs zP!R*I!Hn%jJNEU^hW?eGZuy-nzZ73Nvveo#Oevw6XOD}i3cw=ScEdv})he^H&VXky;2FUt4r(&|(1B02h=drO!27cCGAa9cvbwYtJHrE5PR*o%mycDn^k= zP{*RnX5!`|t{=efbTDY(dnuknhtQ$1l*+)Iuag@;Gwub!D}`M=<0k$_h*8 z+d+}%zos|}-l4+s09*ocf_o$ld3@t&LW%Z-paFZ0{5gKR#v$)*Uyc;jO`i>d`zn*S zz@CCo$05D0OnEOc9P+;4y+q5MUneslFL#UZyGT&9)STniZZ zz`h(5_3t2P4_HaUy}P6)xSqFw(zvTS$)ygE&v9t zLTpQlx&7aDfsh~Co%kZ*Z7IP1fy5gqZ&gi9$!GCAGe2Ul{0D_J7`7~sLL-I%t#m=ExBXUgHKiE=oV0xpmBPxQnq^uWgQ%)By zMN>~yR_@38zHLS73HF$yIIU>b4vM#xez}OaEX9xRkF;7Okf&7?=to4UG~kx?{2O)# z!GX2kL0ke6@(t;zvP9Q?DcGzUXicmgs8Jb=becnF z@p{0=GuYUTJ1iu1iPsmJs{b}nDG^f`j#+Ln=D1iERs6Sk>yivctC_>ohoUAT5T1nu(znA{H zB8v9ygG2zfsyuB&#nR4IgsZi$p8*~Is@m1rPGVxJEt>}e60T*4tyJwSbVejDruN2? zb(6px?)5CY4alcjw>k!CD%=%lI9VApNvq8)>>hf`1~AU^r3C}xl*9Dj_Z{oAF+R|2 zEBQ+-Va@L-D1nbwv&9fB4ijkwJRF(StH%^sFPVZ|M*MswM)=ucZ~u9z13>7DQ9T+c zIatAZgH+`Eu}p`|ui&z<#iKbA&o0ogYqPSOR+ec2gy;VEk4~)6oDTXG)kAidSs>nSa@C?UZO}Z)I?m?Z!5Q<~!?UXfm-CZuE~(;b>~ArD^{Y@4q0udh zy%I6ecWY-U@z_w9(Z)AJ3Vu(h|J_~SToOlM0#k^Gmnp<>C9u4BVSOwuW{^q&RYB_m z;{K1Q;j8>#<9sM)y?+(_39{6SR-!@eu>DVa;5%?}h=`CEQ6}=jm+MTi$qa^uC{X{O z@<3z0@z(zFK0p*r0+l4Sm3MqOQ3iN4uU)>_#MG|?9AYtc6P?hqgGP70B`GRU?RByB5WC(5pGTR&e*4VGC%ISw~fpshLjy2 zOcH)EMV@nC;XD#4pA&~Ezb~aPLdj=5=vgQ}szq(>)&|;!Vr!eTIX)pE*Le>nPgjR- zu2mQ3*qcQ>NZrtR#0(Q1X_xs2GMw?&^i-QEi93v9>JV$O-N$-ibZfVTZ48q)CV2VPi zADofInY^23Exk3~Ee9>5t{~XiVXVIXTQb!i9%2Li= zL{)ypC>J+RctvC-!njASC<(tq-{Db{tVg_+KcUMYwyP@yy=yVY*%MONp@ntMn`2s5 zS>}I7$3j2!&E8($YAG${m{>b`&OHu1B$tBpe4sqCdt;jjb6(sGLU7h$eq%h4CgJc+ z?yHPXU)IU4d;ZizGu8mS`UG8vB*9mB;P&98EfK)b6j_zA<761r>;xOUfapWUcVPcI z$!%?%E*jqql#&gjdxaO97b|NjWVe@y+lN^FrHnab!{U5TiG=o>8@jGdQeBb%BqO1J zkso=+9en5RDL@rhH3ph^!{2{<8g8I>eH`=vngafU+=!{SxC3q!h0;njuSGVA5z&$K zW<=C%J4u2u^O*9tJ_WcY8p%E$W4-l9iOguUes^#Vs_C={ok<~nKj%9uQonlIu51Jw zY`IsT^v&NpLLgpML&q6-NWe#{9%~ZF`4(dP?d;!RjGSp2P@@8>67AJCFqz)WHyc2h zURp|&s_pbOv}jsYT^jlRiZ3!@16#82y<)cl3P#t{b3mK;E;bIlI0Q9()oGp3+p!EZ z4w3&=4(r@Ku^*sgj$2t1cxr*K!hiM{;k3UkjGJo<4TPw4?J}tZ<9^8?0|1~Hc5+`O z8b%U6oJkW%?8#V#x%!R^m`#cmt@P^KtjW}$ziRlm(xlL2&kAWYc6HslzuR9L*k|3w zS$mLP!M`bz;ld1RP8mS>h1|lZ>LcqDyel(H1bc|DXic63B7$AA@%?)5pI+3is5O=0 z>d>|Tc}~!DK!Gjm1WTk;7Vo;}+AHMbv-J59@N6D5v%O6l_GRaHUGcNx z`v|nj-7nhKnX&=#?BAUTE$kaM*nz3lXMy3zfwbz8CtL3(vQ#YaYwH$6XnsKv!9&qp zK9Y;vOnP7PlTHHS)Eisfx*xY%2Y+eD`2JD}^_9g!$f8C3XA>4&GS@2;nMLEcC7{OD z%j!nK68-3&OErd2UOugk7Q}s;Rny?P%EjnaTXkCJ!d~16G0^1G)A{=&uc29m(kH1m z0>o_OG@o4v~o&EH7{}ONA&`F_aT_V9$KoaSM(OB2Nb2 z7AHuzA@nzK+s0RY|5>`$%>x(+|AM~mA~@;9P~sU1=D49B()3xyuHacvMfJZTuDgG4 zVm$4rVc9@a!BZekU}s3<7+(nk@LbkR!?o&k-q2_+ZinhJonL1qQ@BTFeLYHVB4cc9 zO@2TEiw0D$TeVUAB#6QoeLL%1yuLb~{CE0IvnR@waS|~@=R;K?tF9--hzy7pbe_8O zAOnch$tf#$>|gucf5_7!#{o0ibLl>b6bx~GO2AZSo(6vlV*p)S_C&ERs}pMYVw*=O zN)NBqB70o#$OABtSo>!+I38YM(Sfa_sL0jVlUI_kL5DHtuH?0CP}r;z-aUl9T$4)1 zM$VW;y?jv$;(GVWYG~bWH$l)wz}Vph24dV=h+gU8bq4mRG-v}egWdivyYZM%Lg%1ubD|{^fyrDiVVPQSIHtWfASwS-U}TG^OLkELZXhYT77mm zemmcWlrRGH4^dVgDhGj*&M=>R_Z2`G&^f1nmgcd-M&Fx`KrG-IftP@u3uL1D8zFi_IeVb0T<5z#GvZXGjG3qW4dFAqe-e>d z6KkMua*d2Bb($=uWQsPo`C)bQR7RZYr@rB!)plvVS6_G$GhqBb5odlW18b<{l5cjy zet%dx8o$53KP-Q$HG6E(eQbqVZdZLljxJ67^5l%KY~Mw`k5Z`IFE%(T^kkRu0WEPG zoa@hGuX`G^94?)1J;=J|u!%x2gYA}TvrcL66T&Rlnb&(^dz8Jt(1k}9DUr_idC|~i zZ%}rXfL@^*KuyWqz$8Qa2cLa#34SxU_qJemGSDAF8T?yjC}9{^GK&pls*M3+7&FaO zgyW32;p<|{FKF+gn$oC>#$bp&8Fhx@fF|A4x2~tz_uUY`K%%Hwg$CTZofGZNXu?1< z6h0`TFU^z2g&z2^-feoEWnUH8zS6mtA`p96U5#=--FrH+wcg=N=UW6GsJ1(Vzp|!9 zYM<8ti_oGUB)G`yuL2pdpRdAb8CuR9cE|%HN}fM>8T?WZ@MprfhBaq-mThI#!=$q; zc+jswJ#iZ8e6aB(6@j4;%-CsZPIOQVg zS3jyEVuPsE)V6AYXZdzNP-_sCTK1P|=sY3`H^D0)Hi^tOocd&goqU^Sm1QVY_yEno zQQcbm{Kj#WreqtN2oZNI`*uLqDJf9L|Dee}M(f2fj~N=l4yp=J(sg=NJwN7iTK&lK zVo@Kqw477%-*HmVTct2L7tabcIibqb)=Nr5IuKC)tVb);+vq`XyW?zPO}Dbr4S*$@!O)qSyoIJK%cF>( z$9|}o$YE(>qblr{m1y(2;hsE~DEiGEGYY2eFdR#QLUfdul4DX_EkGMi-$pFtoKnX^ z7#slrVrku_``71zFSOy$=gz-gXv2Bt#300797Qc|A!@)wRAcaV+*CkoyrSSM_b0tQ zf!}SEka81V#a1xx0Hw4T-4JvFT%riwx>V`?(X+G=Tmph8po`2B9M2JI&WIAA%E zaWan){|ub>e|H5Y$-9Tkgr`<0Ym6btumR^b!PL}%!+dU-Pd7OM)CNTeN`Ooi^0Nb8 zyLc@H^NKI$Ui0!>@nBQMV||{Llxwsim0Q=h&a=*<5RNXcQxeX}tyibE}Qn)ix}A+8i- z)XMbR-1gj6^u}1<;cpO|LJ|T%A5rYjVR(`l2kMOYOz`K5H!w7x{iE&pJiRf;OVAlg z^u(c+o@tRrnX1G@qG-PX$;Wr!hqOGWk+!TU)ci0ai0ykBSS~-Kc#i7KVv8G+gX@wn ztEcu9Ng4+4Sz=46kwQaOMY_e@JTml!koT%Ou3baJ8g^igtUz6t(Od1S&?A?0jlYdZ ze~_7YsGBzq>3-Srw9I!r!FCez{K1Psug$|#ckAbNp@^CDjK zs7Oe?FwhjS=*rRj^O3^OgAzHd(2O%LDYXC^G>YKJyFT8-?mX>J?L1VJB*f$eWsl2q zSUbz#o9}QzCEZ_1fnE5;-?%Lq^PJ5<5x#%V9Hd7Hq!}%7E*&e4edEG=mDD@y+g(4g zOnW0w{YU)Q9p!i>cP#NEq`mV5vt9k5qAz0du`#^E%KdvX7H&I}Ci=8@!|Z#KBe>m{ zb2@+bN41R?3O@-21gD3N_KB|8)JCe~8I^XwezhgINtzUNeYJ{eu{FE-`26z@QC5QAZk?Ia z6N_S%cElMi)}_@WKuOPR>ACuBniw9)hI-z=oo6}Syx3GAfu;z5AgRiKb6M_#j<~d% z1>#Vh_!tYkNx(U?wgN)}e!2%pORBcK!qYUgeI$TxDY;SkCK~_;x|lh^#w#vkiY8i8 zX=55CFx_Dem1!gDsAho|sko7{i6|qBDWMKOs4Glk86s3$^HVH-!KKYD=#<8Jt9#W; zYL{!0GTryH;^DxBxJ#-{nYFaf;XNW9DC&KZ=Z6J4Vp1~yV4h&#FU4kub8sY$GG%t5 zJ6A}tYZ5!ddO-G3A&JTydjQBjl41zg4OSe83Sm)7yX37UNqK;|6(8MTeXXG17v8zb z@{VXH)^;zskML50>AIo;B}tGn71zY2og=Iylz+o_Ln~|}wGHWy{zdkl&=`5TvRK*l z>r&jRMiT=zfA|QyHX=l$nuU<`7A6P2e#2-A!s)`s}d~Ec%haMM2775y~jwgvf zgwLM;vdkx^9(-OM`;RcbxTd=Kzd0jY^_=q)5P*V9SiJy#_{+MWxIjIa30LJMx$%Y( zQ&(+kGOxq`kwOJYrM?cP50tDZjS?~ zMA4fzYn|G)Zh859o{#%uu+A;_YiI>N59*;>$>g z)>!C8YaG!0^^TZ55>E|ng;$C5MO%oRAFoWQGv^1<76LWrltM)y`^W`P+%8j|)Nc*c zBizuBgaGpnmB69xAYkc3^B{5s{b`NY3oHv>g(~SGjiPHk*n>77FLP|P>oLKUCUMCK zP-%!y@o+|4+2$^}XHlVtS?38qIGu1!r~`qWNdcj$i?GmS64_uq!FMFj(H9Sq8PHTl z0d^6yXbW;FWeGK6TD)hP$9D48lt58=*cd1(6QSt=MP;sl2%EQ{vz+rcw|j@{U4y_p zjnl=+9qhK&42ptzgsZAnwZ2+r%Yz6_D|DrXbvZhTWZW-5Ut-pTDxgkfb+6|GEdI~> zU*PirO0i0G6Ejw+*d?1mTs&%7_xu}MbCM;kKw`pn0K{D&??1tJYRXp|>Wb<)AT$cO z={!@193q>F#AVa1(5CLMHn>qhmJia9?x)}7Hs+=nr|8mp> zQbWmI{)^*56Yx(8wJKC#z<42#;pSmDRhva_3)V+DAUy@lL_A<3PHd`Pz)TbiNQv;+ zI#U(q=%byBrsvj`vcOvCMDTil01=5P|Gl`?u5lw>XDUhoSUlM&0?Q$h!yM5bRBOeS zh(%!T2oLNUT0$9`tG+=x5rhC~4Cq7v-R2d2gYJn+df$t8%9AQvf$vcpcz<=DE`{3xAaBD~zK`lIZ#TJ&1vA+w&@ zL-}~(`(d7$2G97rDcJmex@rZSw4-}0F9)TdRiNa|H9315P)M4WH?+r%K_+ACa+)iX z8ES~_`I`yne=NXx)v@(G;2Ti!F9aC_uRxpd<_}PoQj)U<1m|@)#+H2Z{RSzSM)R3( z*+1kG=`}HG`HCm=vBVacNm8%sg*m4mo<1dA9+c>B|A8u`Bqz6WN5A>FaQkYZKKsr(9L?OZTUWK39ID$R7uA4%BP!Vp(bEvu#Bhq+q<73eBFxD7PD=iX%)7W zxJr!&v~aEb$E}9<0*}a!=u}=a%)iM9l4TMCFeD%6DWcm_mis}`%UWMGZ|j?uME)Ny z*}3R0u!D50;Ppn!8Z#=Ox&~4Ul_i`|?v{!g78nwspoNoTww-kG} z0BUn&KyCib%6tM)n=hLa^LBdviJ+$gD#{UP<;jG{{WrV7fFL+z$q?fL@6Rw$QFdEQ z6em$`UqMaeO$!uO-@IJ7sIz@F&%aR;VeH^e4vMzXeY%&L@i&7k;LeAE9M0r{WD}XG zuR_EtHsD{rTc57eMTrjnT8G)~f&c(D@ZE+30+e1^RN2hTkLViTXK-Ju<@jl#wQyR7 z8&2Scw4QNx)qf>Mg@@+c33EfS+ySyhjCV80+^FB=`|WmyerhGF{)Qb#(b&J5Lq`G0 zkEJ#262-o`Y5z>`gbnnk0A{gG z;~*Z^dZgG(nal=GIjAyvAq}+TcUiFHP21?efOAaO9p?7~MB?cV*j@|_3G@>_wkDGl z#QH#VaGfL1x^LA2{(YM`9BwmId|e|c9BJf30S_rI8JN*g6!-`P(?&a+O?N^7!k;>0 z_>tLxV$>TGwEke!@kmOry3ar?o`OS^w=DBIQfF$|{3~)0Y+oZHS7(*=|Hs!^g;m+D z;aWmkQbJO?8|el?x{>adZX_lk-Cfe%-6`E5(%s!4UHhB-|5|Gw>}wy(p>uri81M7k z_c$riu2;z$Uj95%FoY=oKFjd|AP6UM-{eJsOVxNm!~r7ZHc>dTn3CsYj@Vqa*NO`9 zX5ZcoX}rDxa2iuJ8~9y>nU5ENZ6o>VN>7@6aNQ701>h+3=ld=sg|QvY!UU!QBwBtH zKKhx=rL6MAB9IEzTO1Rw_&g;!(`Y+1W~YqdR=Zw4T>z{v+0{;@dLe9)aW_`iRoO-kBMZnFH=W38k&XD2N3_Kam ztj{_OJ#zf#5}@CKbhZhc0{;^k$08_FC!+TM)3LV45C`l6rbb1^4|rIyzP<7Y>rs9e z5bBvmvC2ljkOBP&2ILNqg8nO+vz(?rIyMv&0r*E?2k22^Bv(ipmVo!e?G)UyuQ660 zgVgN+HfRy#wcN2k)PlLovGFJjydP#u{RkFbDX1+lilXod3oJ?ssGc3ASQg?90u{If z+86g{p=Nj5#;sU=rt&qJX;nWV1p-V7YsmP+*8XZ=OPjB%oGyKLxVwI0L*;TS4IndR zr$|LV>&?f%_`o*(xJ2`St3w7{rE&b7!JBMwam$!OhHNj%@AnceGcEi}o5>p?Omnap zIyA_4ZxEIOEGTZ7L@>?+TJo3{K&pGgoMN3($Cq%s8NP@=57gX(AVx`^_`+Enk0jyQ zGrK0mUn4#ZYZ!%??G&|#I$Rt_pXR8vZt_BkoQtugYC5{vwS23UTl;&L8m9xC)MVbu zp-)8|CtSQK3KJVh{}Vid1;M^(i)ez%rCIJ?S(r(926t$o)9v&TP38&&M5%s7^X1~2 z3N3(UfYd)WAP)d1g(kd2-HQx4Br9QQzsF==#%q?sE}HA38q8&mR!KG+&d=(*B%QDY zba#3qf8Sh*xXTis7A(NgXGLz3(4IOEiy#`1raNGaUo%ByPmpR6uv<|-iBzS`l61(R zRNj+~&M28szQ}Qx0QFQA1@JTvp1#AubC?c&YLO8b(dcF%3h?4Q=Fmvq7;U^%&)IGe zdx{ee=Sf>0uVTFI?k2t3xO!SPufgNT6_{V#^x-`sFt)RSo$n0&>Y{Th9jDA~!sPwQ zzX-@6LF~6$wfbb=OS&`Ys0aN7&neGWS6X!RrAEXn7Tt*;ATxd+LP?QWbG+g;q@#&Rry;?@QZSwOw=fHqg7_+`qnUY|Zb`QjYV(ziR8 zx6E>DJ29XzihN!VDu7wcd)o?=h=__3#X_Au$b5WA{_zbj{Yb!V#!T)C!($t6X+Heb zIWy@9EnX=I{*s1^G;5k3VRp=;0Z?>E{K5J)_Y<}fT3n|ZOlzlRXWA+ z5&n{WTrs)Sb<7+KO?57v5|B&d7$VN} z;3xSVQ>5)9|M$dI2PnA9Vq4-361EL)<(4TFM5lK&%pqMB^^QdLbRqh&)%y-^9dN8z zKlVx-fxLo2kv)D0t8h}CVLlir_<@%D@p`HITJFCAN6^My3=Z(5AoR~o;^;R7ClTXDW7w;*x(-nu+AF3TgAtckFkpksMVRj-m)#~9&dzW=l?T=sP%{D!iu77XqY0G!?G7?}LC>61 zixLM)+-_vqAIlz3hylYNMcR1Eir>Wm!(q{A`^gkf5IUR2l0>H6&2trM# zvPJ;I&U=qmfitd|?aKTEkBQ;^63LINr zP8Dvqn9fjM9?S{jx&#C|Gny-#gR!v~D_GcRc2lQQV1H`UO))#53E_vrW5*bXsFESo z9i@&Q{{;^+ns)S_;czB_SN*29C{iJLh{0thBl^{?Okb@8Ik1iJ*oh)7Wo1u(UWxc# z?bIFLi&f9+ZYCn1=sjdZ<_MHOOXhQt98Z?9D(fqA1@}du=8d(`SclLl{eTqyxjd^m zahx<=@GYUNKM?XWeGtS(k8yELsd9M3BOe6G4+@hnFUF9ZG$(^|xTsPNT92z3=%g0$0az{j zp}+$}qp9bDP<8esTOgdnOcp1GAf0B+bpHsZP*RPX(mdIr+HA6jTJ^Q1cPELp42bq2 z?ls25aE+3;xDCXZ3dRW$_w%%^v|1d2SH*)jWcf$t!>U-hlM>IO7X7 z8FLzB>FZdrKahOamB-%~&H4fhmY8jsoE(xrkd!lZpqn1@b*C~FyaC1vUaN$x-`VAf zjpPG|O{|f$3<{)uB+1_`$O;~`OkeAV2Gjm8rjt$_-Z%kH4+%v{KR(=lstbU@c z0uh6=Oa(uhMENgBGV1zRli3T3);2l0xN{{w8m7o^FK-xZ$nAi-mB${^yzrMIQgTeb zFXIv$Q|TtIQQ$Ai`r~{J3plT`d-C0&`E>~FR#j-Cj|~L@-RVV}zAB(QHG;T?J>#GH z4!kZ1UBK@|p;<5jr8tV}P{fdsXeNm6JXc z4X@k42T=C_J08rEw*~IGLw8kJm{6U7`DT z%k=eQE$jYe@adg+jtOOaE5S9tjdSamV;tx#)2*h#0ahF+OxRLow6(T4Or1QSm_|Cg z+zH|%p-kG&3D>_I^^PW%z48?pgwn(jj75LILJ&~Y&(j%uvpAyoA(=z$Wg-dy&)Yz$ zYT)I4%(xyOTG8J#b5K}%^{PX?yQkY&-7*wV(vsR;H6u8vOc3RbP?*opNp1n9vNnJ> z5=kKOAMdSd6nrD~h;<%PYU*_3rg7*GEC!7A6MrF$?d>TQZlh_$YeqOAvqAofZT0rg zC71(9Tm29+P)=H3^Pm&6NbH6%7(&Xa;@60$a46EZs#c6w?YMzL1FpeuwLz`8WqHzK zTxA2~An|Y{m?L5JQA4fu6i^*E=h=kKpKIy9r(_)J4gm>`(Lp2L{LOXCxj#e!$`LBQ z5cMJ%-8eJk6q5Ef(Z9Wb44GS7{K=nI#iXD9O)5zsuR1oVUK;8Vl$OeOWa8I;V<*9E ziX}^yQ0i6(56bHs4mURox*f+J04rIneYva?SVf@RfN`jw#gjBagSB8Ds;>!nmOk`=b6YNlwl+Ws8%^FB>?Io)7NShUkF%c(uYI8$zJP0_`4`d zi@1sfB>tV0|Falf+JpR;4ne2$srSVBQnET&%*#%NWS0Z90Bfx&n`T<~P=5Nk94tmH z>q?;nJ?MHrvt&yl-H0iLZ^@%($ph{hW>}Sv?mjg;DXRB*I zt(DGAD`X0p%Hc9EyR5A2a8n$9Hfa9(LZL5)CN;cMdk~x)-+13{oCr`F(7YVRnC|~8 zFY0=`q@6f655%CAf#gCjaP`oQR;3^OU~?pJE-c8552;er6;r7Plqdd`qmzw&{_9joEI7~vZcn(+pX{fnpXk0cm(998G#p-6%mRJvYLOP! z;MQ?on+9f!N{PU5-*Yy!8U>L)84&*I*uhi6QN)Ai$*F91;I~v7JoOr1yrW;wXTIv zYw~v~%M=15J;ntNXEg!odF7K^+jd>wQxfb|+VwN`T;y%%z9_$^9q6TW{+vjbh=A~- zoby;F=Cw%u_iik-4v9@6Fh7ehb+wd@~b?9P;@mAALLMoedVJy(pE=LrZNW^{24x z%4mV!r22x$jJ_mBZC$THB&C+Uxv;^4DD~;x3a5Xp*2g)Bcv#g3A?lC|LovI`y;Em91$&zvI0i*+g|d#|=L<5RI;BF{bJh zIamko8uWV>@D62hLOr%6*c78>!olt&Aa0~yZ;XMdO#q6nH95-$f^(=4aU1h?tchy% zG7*CBS_&^24&2gyxELa)<8f!{*;}%aiM|wu-q6-NnoZ}Mt{%8Eao;+yQ}4~Gx0`g9Mtp-Zc{-Z zI9zRqc%+D_{heR-7_O%nq3?V}xRl5r$d8XtA*g{7E^hwP)L0*sz6i}WH9Nt95iYyu zTRY z87S!oUGMZ$61xu;OM=SnD9MliQJoUqo@-zL#{~r7HIoA5=|DTXnvh{;1*B&4SKp0!UQyXWQx; zj1Lj;()2QsaqsKwr38~PeE0(k$*xHb< zHpxub=8KWQR#eH#ci7e1qXjN$@cI)3kg zFC73UnXW`4(;!g4SDQ6ahnrGTEvQEFZ%6%$V?M|8{y0MTh+EcV4rr)K}3ln(OBe_q-y#GOQiZ zfVURuEeH;ZSLslZ1eLTf`F;+Lj#-i^sa|2z74gzqY-8?C{nu+)GeMwK)Hn?4XH#BI zCD)Q2e=D%~;Q@cq{*R(nJF9_Z-}XmaqFQan6Y1|B8%-;BmGi;mHn7W#KM5LG3B;Cc ztX*!}yYvTc0_CgZ&LV z8^7}EU*%5jf8>a);ENRo`VEyq3Fe7w$ZYm;e{+?O{YR__4(tXfnJvC`mjl-cQ%XF+ z3%v2Yqv)XS4IwG=TO3>@(ytd)*OftS9{43bYwLQfEiWYy!OB4K*K1 zUSfLI;ldni-4~QIw&0G%sxM2xl8&BlcwKn7eLyk=iR94Hhab*LcL70xxxD+Bgqlwe zu$(5y(?fe@hiwNq2#d@fE3BmqxbbXnis?hk@Ww*Yh&YxV>(7FVR-f**&?cK67&XI` zQ+ZBbVgN%jJDG{<#^cE-AyAicx%GtE68KlFfCvj`U`V$Hrm}XwUM_S7Avp*}ROB3h ziD4SB9RdmH^wL;e@}JP6-oDv1fnTZ_-{cH#Y zs1qI>nGy${AZ~ndc4j4gAQlz2{5?QZTExJEl=QGfQ0HYW{ywZg0O8|?3 zt^j`$?g~U<;88-V(41-9s$udMb{_C{YigG2I`==YQ zc6=XNvBhm`rz6wy59y(nYYaL**#2{YV*Ts8&R@ZSpyHafIs(@>6sFf-$2xr8UuTu> z7}CY*A2T3BB5BmJ#wL1f1Cb6(U(7#EU%tN6nfH+~J9~8kq5jb~0MH7SBH{WQ68tk2 z)dF_>E5>x@G(B-dlOATW)7S35n%in`Ew9gIuhx;2BS6l zzzq@}62%`&4F4om36EI6_^BX8DXNqH;~jS7{*lj@&1tsPr5~E|GKTyT3X?xMQ<7W| zkXE3jzVL6+KCdiIkc*@g0uvg9c)d8L$@=Oy&{I8P2Tr9<*lNa0ftb`A*O(s-IC@Ys zF-ejAg_e`*<)$QE)YUeO)h{)G3*DY~85dMaZum-DsQbHtzN1=AjoNLMs)^750bB_H z84^H5cR?Wqt^^XG{I3a2E>ISs@dHuh#-5}0;=l;d`i`Hv<@)mgJP=O`W9A>$4D|Iz zqXm*lyO-1~2Kz0*QdPC0*+YL3AT3;aQ08j}O0q<@O%p7DKle_x5Gu!@Q@~Zmyi8N- zW)N}_wLjv2HJ5w@{iHb?QZLM2Ks^R2#N!nf{#%`uC!w_q<%)HSLPGNP$`(g7VG<7%zJqZ91m;+PMOu|d^n>{JTh)E{oY&vdOF-+I3(Y7*?1INBlK9# zYYP@#L4gbh92eY;ol48n1%ch7{uW7L4V$j-LGZoI?OD~fbEnR+$NP?@xA7L>#bhz$ ztUg1_Cxf&G_Ay40nbvi*TPZ&(&o79iox74nD>`rPs735xA@vYt#g z!Kp~rLQ{Am6EijE2`6%~uX1_|j98`g&CQ?g)KdD zLaY_LLL&JK*uZ(#ajt*TQ_q{~_Y_O|`e|7<>Fe+Wh$5lkdudgxN}+=;nR^wEEu?=l z(d3&!YKIYdZ>H0i-$`g3j8N(<`a9ATBbuNFMWaE76_~V2gJXq|!RX}_i9H4Yx9};( zqWn~{1B_dk?%{vWLRZ86gryyP9KES6ZE5q?!XoC@7%7MEHO`EAAhsF{#F^cl)UJEs zK->JR39RQua=?|v^!^40ZV{?*YziCkVtA>$HDG1_ChTojD|c#$D>|+n=7IJ>pno%D z9ZqaldDX8&{Lt*VT#E~>R7$^O%pZHKPJX+R^LAXwz3$@0FfW^=0dp(lbDZr75A5)} ziP|3HGJo!r2O$Rfk*nGqPC=vZI95zpsjAw-G4j>zdVAMnumPKj(d{uj#{ZRSDkXe# z1l~m`{^>&3+5e;&cs|hy%Pf$+rWwp8LqDy!>5PAW znX9RZ;1Eat^7Llumh8(Hk9Q|pjaPk`;j?%==1sQ6j9xY-kI#=@9XDED+5qg48Kmn2 zhCLqVLAtHJL*HTc!FIPAr0`n!Mj;c~-)#p1*?(ws?rTkuEkmgtane)`+pp8c7V+%A^X)plEyf)hyCMwDR zWfmnOo|V81^M`N81_9ue>yMvwzs-zmn11o!LMHkn?`-mmiJ>nMt)r3SFIRm}A+_dX zI`H(5$YFb}G4|0sve|>p7A6rOub{PJI<{NZrd>A@IdoJla@`_40B++B)NvhN&PGco z*hq@V$OuSUsHO#nfgjY+!i^|vxnBW|w zD$|-R>=&I=3~o0Z^7YmYVF*Isv3cQ$7gERD&p%>FqlUh;ewCc})4(V1>MYPkAuv}h zlPsV$i2^}SPFXbx&rY?u^HWIu)58O3K9QOO~S~hyNGOafQa-6!?<<-{0VW7ooSoBRL|U?Ll2xl7 zc~6F+G$yBPRKC!Pv(i!Wxb>(CAz*1%QNa#G9`!cw)v+``rDC>liWcu%8lr2TdpVpN zRT>Td+`H}rS(+Kl5w$;@Qq$Tg9DD$@=&jwSCWem~|6530F`U7GGmm|*^Te;A|3T!j zuD}rahX(y4HUJ_oqftv01sRP~qOZ^+YrtWR3oVh-f$h>uAVI6xGG$Ml++O#ZhrS0E zn1qO15cY?4YKpZ+{cW|02iZ2xrh%-hV;-8I8lw*KYa-}&pNi(%MCz>{oopj>wKddA z2jSBu1)omb0||UUI@Q4*-)rz17VXGBTviv3qVVW^pKQ^<`)FLK^K}hoq*94;=IwAD ze@%J%gqFDLl_g4%EM_$&j>2f(7q9B#s}~;>{~w<3_o#hx_$W36V9@lDFylwlcbamUCb}UkXw<6$LS<~%)p#n;YxVL)!5T9qKQ5XFU>cpLL zv(I1!1(1wiB18pI+-DiJ_D3)0;2!tQOBx?qU5>9dtYetv`bH|TDQnw~(T0^%GQYEx zlWy$OCQK&4_&i$Z_66l+NO_Mp+sBFHvX~cU=*GLaFE%s_J_Rjq{H- zoB-L5JZ|x-jMP;hd3N{g0>8b*6Por?g(Z;4rjuNaw!-FXF&dwno8mcthN+92GfDIW z^t{XI@)0uKK3(5i1GSbPZK&N?SIEjsd{IyY&i#PKju0i#aZX^bVN@)mI7^mE*yg=G zs1X{^SasWsuRtNhZPg2bHdtE4JF-~>srJdIrfOBCpmyhzS%QKzN(Ij~wd`UPqPOSp z{!x%1ixESJpm7z~PC!yq_3p)E(BdXqGhfltM->Er=S$Z!D4>zyvvK#~q3UvvNbJ6A zdD1#NPk6_Eo&VFfaW2_TpR4K^_qiN%P_C)t6m14aUb~Lolw-yV)g^@aXTwP*U_oW{Uh4wJ1;~jO_`V^0A$|O1VKEhJzvwCz%+_oxs+D}S-iCYh(uq?Pnk?yQGWjD(?irl!q|yR$1! zyvZJ)G}X@_iTzo-Sq=L#^9t=ssq`|JAqw~~7uaI6$5LUk^B=zZoe*HIb9yc6weEUy z{i7L{L!XudUyLMkSgYJ+4f|caN6J6}+NNg&=xBY)wIo@abgJunIcqBq+=!Cdw~_+0Azo$$Xi=H$l=<(j$4> zV7h70YTg>~m}U>F%3Tw)E=kgKdjjedrlXS^RBT=L`6iFWxe<(8?e72q_eSob6sfJe z6D!W`B8fF%UAhB)cE&`2)f#FrTyB3$Aud3QZI#bkE-U3HCJs@`p@t+0+vuo$ z=TZ_4G^J=0<8; zc*2s!V=BIs(rHwpx)g}K9ElHU>rsr%)YOmTG5ix{R*iPoLUf^J2xBqY%UXwh?q9s) zN>OG`%e$y^WV1^Yxa2TC#LVAB?Wu>9?)^cgh) z3vewD6Ed>LTjEP{%6|p}6u5v2#Oqo?nMPKa3Fu1azjmc-YO1%uYlSyUobtVzXOO&5 zE&xp76`>FTY#iGg0bZN?{b7Yb{ObE7-PvQ^8887_%3aCdfQi@ixa~{BRO9#)94rR& zQs|;De1|(T2u_3klq5SxZwWKpnuJn6JI1JhQ*cPZGvkML(xPngmd)1To!li4t%ezq z3;XvkPT5fz*>ZJJ`i~+jG##)Exe(U`w{XP-5h(})USUd$)~Hn6KncR^+2KRBl5}h_ zBsCY;Eo!+bfQ294JzABL51dw`2wAT=K~1g?u9?{f(WKZCXGq8EF>_WH?GO=3&H4RnU`)kqYIlt zbdP-?0NT!vENtiMT%O+HWotWe@cs2#Au5-CH6EL}D(ZFrIDK-sqb!jJh1>wRTDb=32-*uuayW@(b;kZZzFyCW3QQBv=olse`i{-3GAwR@=O=|ru z!acz8v;;aUpQu7_qu2077K?wXE62!#!qC}r7HwxR?_Co0+uv$_7%BMDg!HtJzxy2- zZlupLF>Qm_191qUp9G7g)x(1Uc2Rz`I*I#JL9RHm`X4Adl(QMJJgrZ=MJl0naVJ3Y!*MX?hW(0fl^IFZe<buX|?6G^|wg*}(jTrHPkHz4G3W+TaQu3Jxh{M@K1OD%d~eT;y(gsTi4yRPst z&{uFL9lAEssMo`!-pAI3ptwd`7BrjsUOM^C9^=GX=PRV5?Qw$;DKC#ZmcHwU2AGc< zhTI8~W@Non0`it0`vxQ?ruY+wG#%?8KA~AC6JJGoE<^@z$CSj8CbS@IyW&=Vez)27 zTbXjF9tLxhh?*R;Y6&4O2|tH>oxnYO;C+N&~C@8!6+l|!wx9Su3?3^ z)vpCp?fmoJ2QaeHSZAkPm{cNAT`}Fo7aI3pL5- zA1^917{hJvH~=rp@dJne(`d0Go7&F82H3{zOm+ox9NfienqRie&OF?%ieAj zmmeGySF{&bMGlW;?4}8ffm4o=*QV%qOi9vGYdXszp&EgC#Ot$wPoh98n!eLYZKzx(Y*?)OcB#=$7T`gLBYJ{)(CLO>FtP3K zWAzt^yum?eY7fY1uskM-zb|={4PMO}%!3B+Aj)`w9Rxi9Qs|y9^dGhn8|13j$1X-v z(!CJXOdDVN35q1){?%7YeE;-bMdUA@MNqhC2)yY4uGY_W1m)_aNY<&~DXl1+m5W~J z?QgdF;tWJBk)A332jaLUdr8jl48Xo2c_2=yNnYd8ncEi5_>IgFWOyMIft@^5a%yV8ErZ&MqlC3@Rk4x+M>D4f~HfYQJHO@OOay3 zwth<{2YONO@-KL=(Qk=ki*~@PN(C~+<%iq<=rm$NZ6iv!?h}Qk&5=Fjb0{dBQVg(k z`Nf?xXta`eKq@cKPl7)~TjcisrVngf9lN-!(M%~uOAuvTi|x@C9H=()H5pA*z*yS! zwevjauFC+dX~AaEar79JTilm#X^h3f%QPR)iYwzOruxOhn8yDo2`8EELV?7PD!dHL zU7ZSTb$bG%aqNIs$2roi)b{-TpG>E`%GiD*>y*Y%BQaTiZak(uqC@EpxSCxdH3jf} zv>jI3+fc85chz#DFCf6!8kD!nkItg@)oJ~`f6#t(Y`3Iz1&lLy=+hODNysW3s;xuD z{3nyphG0pLa~@<48u!2LDj?oTM|=Y393kj9eg`~KL{_Hio&IrG<hZBXgv)AD{hq#m`S+KE)deTn@cCVk4S#pRaJ zKl65X(7Igjbf^P~2M{>lQTisOpcfRdh|?7?GPj|uetfAKR9ey+asxo}pZ!%9+MSPlgNgyBM6C;!NOAiAsi%J>}5KR5I zKtOnGz7Kv;R3R07ou@HB}Kc8TyrZ%$x-1(+6MIO#TVaT{P5M_MR*O! zD~Ufi1ba}SbA79m-8v@3;~>A5a}BcOJ!J#++hyj*3a#3FcHp*>+e8D{r3(js?lY*s zf+8QfL64XR(?E+Ix38dY1&mH`Ujz<`cmNs?&MVz@GSR+3VcSDJ0Qv|E?N@Yyufw7> zdS$A;s0iSv6x~y6Qc|bDlZEH^bE@zk1P%#cjQhHtt))fqj~8hY^bs(*$F05nCyv+N zfRg$kz84HeC4YlY)6#{9i?yzLR`I#X42 zO67=i(SHB$;s|A!o)W-9xT#J(<`|uoUuH1w7-~~GzffG#4w+5ZXlW@hFn5zo*a&yG z#jFqUAVl~8QZ%mcuzy$mywDQSro*lE$|}GNyWy&aDrS1P1sl_!=K_I5zafC4+-U z2Y|7;{%)OKet`@GloaVhyA>y=pp07g=bZW2Zjlx2{vYPJ$QlC?=^d?C#h(&|i=#Tn zVJypbJVDPHl8ks?NPHzAVBL)ekdLq?xqtD?K-GDF%Y){~OcC=)&F-6qjexlxb+SD6 zCI`|J13C~R$ZDM$bU+f)7qfnzNe}kmRU^fVwD+-U)C8X2XB5012AO`?IhGo;ZlIin z(uGybeU2L=3}Vv|b9cc;1{T503%Xpr)%s<~*PefW*7C)^=0{G$V^tk^3IENH^n%Y^ zreDqgG7=6GIGxP8(jl9mHRaa_!9YiKa+F_NmgF-X>X!0>;ba?jVMFX`e*lEMH5Miq zArCS*SO@GA-}cS?n&MMsdu$I)RYNrcX>LRvaYE3*tqBpp^DG3)*Az*502LaC4GoG7 zagX>K_%*d0dXRw`^3K4aVahC4;H>$531wdtFj=ZKwKKL6XM7}0h~UHgqpMoyiTn-- zGR^mXmUh9Q8RWf4V6MFuR){}X!%}S?C7JbJMDGaW~nSkifA~l0+$; zu@})UE&I^aBx>Lwk6MY&N^>ZeEM{^0TUGg>JesZ`Q z9Z(lYTw_o+jQ)b1;S9S+Q(_@fKnvOoLJ2I?BM3?b-TKKAhL9<$x_#n!Xlp`YFE!rb z`)h^{CYEFxC)l5%N&_9^;}>82sZ37BUY2A0Qo-QY-GREvvNwb>c^_b5o=LeXK1Z*< zkmT9jDD!WuM+K^c95>^=OB-=?Jt!_~Fz@}g_z2adAS|gU(TKm@wCF!Zky)+oS>|Q$XO4nhn)kMm%LLLz&S`b zAO|@jhI~z2kuRbJ!X^J!KXEx>^Ls`Vxdmh5tC!1r4!oQRJwezuiHf3kd^E5$eQz|g z#@CTcjnsi4c2Tq1X~;j>$UjA2u=?rWwQZKu@fJFwCFI97ELQ< zW9T>a&9Fv+ilFDRD8^bPWMW^h#%{jRD9->l(?J*7FQuzylrarmW2WIiHT}krkgcA( zCBsl)!=19=Vm=hM#k8#a#q7crl;OUS>yqNvMga&f#v63l3V>!h%WbcBHaMyE^3`eC zTiEvPu+zt3`4a_y*2}Ss_zuwOQ!dGr2|IZKWUuQNZC)ckuD70P@D7sus_5NC+H*Fb z0vO|y5Ho>SRSk*=P_dE$tP|(B&96? z$Z8OnhaPF9j^YfWqampG_!EOOm^`!5JP9*4)wL_704IEVZsvK1Yew*XX*ZY%Yq@Nz zal~@YdD{MT^_$1`ZbE`s@{S{Za+(6DROl8m(Ap&vsQe)YfUw9NgPG6&1vG6|AX|Ym z5J#`K5x>!YZX^FDqtzwKP$D_TI%3EnD8X`?&i~12wnId|r2c2r_;Xas@3AHL59v`; zzSkdkaMUaZf)EKtfrymgF+&dYct6|L+u-&P`R?K7-7Qx8$?p?sl2f@@37p7gnYzVD zW?3`R^T+gAI1nXDBhdy^MBgTi4cXPX-_2u$w6o@@yDB&dK>^EC8I?xDY>m6vx7*kD zEu`elsg-jynAOk=W;ESWcGEqhXnlEiB)85Gw+L=iJia%r*QV6ty8BO?La~5F4nY=~ zKcGa1HFh;D^{M^MY$tlmjjK^2yTj!w=$H@qZ>}L|cqPrWvOPdJdejhbS@VB|qJb2_ zdDH(R6fHD)89P(hE#AJHadY?&4Z3>eLSxelph3&JztA3uKdxDlWORJ51+5(2%H_+U zptyZay`qqq`}UE?^Vxn^#gM{ZnHcmVGLr((L*mTeI8vZHML*0C;tT7H2AF|1jra`z zKau0TP{Md9K&3efs5C<%-o82=`z<<%vCDWr1GcFVuUsMD`X;Mi1Rv+OS-CywV$9%2 zTLJ+gOlq43FO?|@TaJb7XJ|{1K#DnZB+42Fn88fWS@1I_ZB>`G5n0tX4{A0GIILK* zI~4@otE^@m)_$pC?Z0VZgP$TfHbA!SO6_5{v!H}n)M;Gh=l7POVh!UP47|^>;^xxc zr1^wW*yVQC)-iPYvJ}`NAN-kwk9QyGx6*Zf&BVz-U9OFw0+5YfFa#wyGr+1)^`HS; z&C$&fi3AD{ASOLsd~C?XrI|I?p^nJp4V+36C!?^FUP_>M>R}rz{;m$x*7UuLQs>Lv zh|CSV-S-Z5P62+1K7o9+L>G%34Gt=xbt>1K4cmQTRrAQdVkwwa& z`0Ke)s=S)0lMxw>Ce{C%hF)mxkuYdBBJeV326z!Q1DbuW3CL`l68S&(S>Un+y-+8H zVH_|*jP+s@zGJFOJrpqeD2@FqrKI93Xsc$b+t>Ca9EHxJYYANo5l~B1A><)nJxZ4e zGWSr`&{m9?hkRz=?)l?XE(`q{j{+m(tMP;12Zqu0{JE__fn;9hvHkW$cU6Wc8>_8N zd-5W{`*2bQnllCp7I_)u1{TFyD;Cr-`v=4(fX@<^*b0C*m7KNI^5=s#}^2&Ml~i|+yHHrY7G`~hdTMq4T6@pI%LC1Q)J;3?;2^!9w^|Cask3vcYdl(E2)um zo#rylc8BNfpl=-*nb>SYcPd`Os$sM@0%52ns{>r{c|w5hRAb(vhs(fR+^`qE);C!F zW{#5!I~>0X*wHrS3+JV~)+X#D85kgGRFd|C(KhOAkuh>>bC&}}r=ewidH)HR_c0hB z#Lbs%h}}UKxAW7xWk7Yp5QcCnG~31yP#-?0i%~Z_=Rpf-R(=42LU7=q(CCqX3OB^s z0pM(ip>jA5cpE4`GY_|Xs3Rmav(T**q#s*fU_X@>;)C2`IBgNp-%U(#UGS7}_q)Kp z5L0X}LIhbvEwQk6t1}Gxq+|z?N=$uTfPI_+G;-h73J@AsyvbqSQ>Z5;UaxBwGAsLR zkvb%}cek_;mC^z-JL;A2N@nJ61us%8BvL11>T7e^E=@g$dgxyr6CYCpC*M*dcon%RP)~m3fkMqyn^s{jTaU9OLnfBXbBU8ov)9zPvwaO9J+mEQ?4l z@Ru(rb@NuSPyog;>F!D-NmsWwF3$5tyADIOln-Cu9>2ld(IpVDSK$W7KESfz02bVh zq?$-SBy4S~Hdaf6hppV6pyLXW&&Cp!oZYTmUOnvLxG!Mq-SJm_dQ=Qh+)Yw&YO)*@ zu0A2xWe2O^9KScKgD%}X<0aB%^liba!#T#z*LCHd*xyNb^2dKZ(k(d^_9VTxt0U(F z+*K*W5&I6w2LI-x!glX{)3}h|W(6Cb3EbrayhpfQ+461RY16H0*zfQ7(~pE;L$kAT zF^4#NO!P&8%ja3r&YmqAQfHlwYVHeQmIy)a(24H>!(sp7z2(tF=wl}8y@zxLjm9jB zqUvx(%vx6vlnK*lLJBj%epD_tkf_Hv$EKWrPm#+mAWv*-8*bWnq4pmf-j9XZao*>dB@6{jGT^b>T(GN1~7*z5&r=2bGAR_c)RKyK; zHdZ95z!3Evs@yve2`69C$Km_(CaA@IFLxq~KBl<%4ctwSKl?J#X>()daC~Rj z$N&DwRPj-%puGvdYWbm2VgneOQYuIz&RyOD7wzgGT*~;MJ$34cxLR|RyL4mv@6;+m zlT|tI3HsBJ(G(J*3JpowK*wq;e~{OCm3u6hrpTeES(1~mA)R_$ z#x~LpPNw+@0HaDG49|a0>k2zIeASktvSWn?XRbUN5*6hB-fKGZL#Em?wqN)M@&=Yo z%F#y!Jh3k{0qTB@xYm6J_U-TKj>RByB2wpv^p~lL5h>bGUGR@6L2dIvqaH_$l&Xx; zBk+N``FduZ=JT}Z)lm)WCyorLoz^GN}G;a z5n$GGHp_D^nk8LN$ymhko+MZcQ&76IEcwYJ(n3u-Nj}V=%+z?wp@k{Ty?Y{LFE?IQ?ls94P z?BDVd_vc{TbkV9xQl4-XR`k#({TXJkT^K0|2ZDHckr98{)7Q>4=R_U{Cq=o zzo(37QJnGwkFg{tkz+Q3WGHg{KvTHs6DJuBG7RfOu8$mo$YXo z%Fy1_A&9~AQbHob_rD>#Y508_5IUB>do>f1wukNrvwXe+NGq6s1Ug$#-t}R|2tAO~UsA^Cy>*@y_fhyDkC!Xg!w`D&v%_H?qukTP z1LJ>=iOgnH=fo2nNEgs3cTE(Os{W1)(&3FSN$<ZQD+E%pE(~vHra0ocFu>tL9?nW@@UYrl(i; z>SvvP`3`(OfDpY{hKqL;Mn{_lcIJ4c##!RnB!*$bj?kfi$cdc*+KY~K!G^ph#d&be zx#k`WmD|S9kSou9w$;0q#ES^*cdcVOIjt_l507hbgMYVy!)tEeOUJfY^w{+{tjyVz za@X9%QY}^#{zX2LWTj3dtQJ1QGvsQ@-wcG%6$QD|WzEK;#$XC~A$H=wnJ$i*B@blF zWXT*Ds~6qxg}wO&F#A<59!>ddb=@fkX=( z4gv3%(h2i66{~sX1s?gKc@?VhmW+7@R#`_jvoIR;pkpvPz`V$w1Jxv&r*mipOd!~q zW{s>Q^q^`-hh_E8910vm;EWQ3%2ldI8%CZ@+dho0Ds63?@q@31bA|3EtuuyF`Jg+A zCZ5U_MmN1D5N~2q?>PL+&?o$hP<|(?sE%^Wi4!ML4pN(sQhJLclEv5pS`jqmtL~^L zN<%n=kVE<)fDyyiL@Xh7@^j+euNi__InxM(v;fk^FC%l7e5#Y#qPd2Ge%pN8MA%#w z9QnH0DgB8;gag`%i;&Z&!uZP4v1xs%=Zwp!dmZba!$O1My8`Ru?L^L3H$R+U-nJl@ zA?YjI_#&01(*5Z^XAEVHu2cyrh=Z`)g6KUpxk2wBV6CjIefcy0l|Z!zrT|*qcA&_q z!wA}XN1o*8Y;55+-55TtpwWD*T>V}hg8glL(*1svjp3tf@{doPk@B3YWkO8!wDpeX_H{D0j$q;qzQmiqJ{8yE&ZKFZxLw3YGkh`J8f+%fh8Yvpw zL5W;;puy%}7iJ-Bb_Ah$aywr zGriWi3r6~=+1jYH^a?RE7Dikg^8qbflqWcJzkcwpJ)fYSkivCAg{rK|7zaH|#o&pj zN5N!psWg#aToIAh$vukut0**V%j#r!b>?+esshxtEL+WCx& zE)8!@iECxL=RqS{v$MZhcb}z7@;Gbyo~s3)f0_xsvj2`tzOY-A>;m z*S<}E9=gWML@PY3KhcQM8>z;TOB;T1Bq>tT1S+v;s7`M|N>qA4a3>hey5&P+Xr#Hc zp-ZR}AQ+^6vUHmQ&x_h8C_*qXSolMfOcF*tkbs*(`7p&0ECs^(twuc5$S3n?l1jmd z@G~p$4lDajTt{?$NC(UlY5*4Q?V!I})zVZSHe6(dFpW$N0+!pmaMpu1vUyLfU^B)I z!emS91NU$1K4|V$1F?2EUgrRLMD<2Y_&q2NwOqxEX0dTJ4Q^?XF*`UW`;sIlJoAop zCV(&*G(-?VYWid5p%k9+vLZY~*eyajUded@QS}%Vw`ipH(PvBy=I-~`ji6n5zdKG7 zS-~XD8m=R@zgR^4d4+w=!#{&Fgx_FCbml|R*6|uwv?NNLvxg|xLIKDZGwz^>MjDQb zu`WF!heMD2(MbuI$^u7Z!|j+TXYQ0zO@JHlq1-HS`DD2qqcpcAuDH>qc1G5LJxtKn zhGI!*t54H4L7W^gsSzd_#cH0Y$>50v)p{q^{b+CJQ<^yT_h8v{IFhZ~TOu3yE?cht zAgj}6mWl3imnp0LRVrC*kMo=-JDkzW+gD8iZ}&F-$Ic)|3dGo0O$9#0Q7yFgWB{Mv zKe^A0te-0}(LESl-Frad>Gv}j=Hf;pBa`et3EIfCAT0yJ^{Gg#b3(<+{^L&`9`K4= z;mz@P74vRrWpTwGsdTS5{QJ(9-fC;lqpB`1+U+{_YKwsDPFQ4*h-D;sR*kfdK^17_ zlRXVf#FU5}1*9HQ-q@z!`IY zpwSV0HDbX58{}@*O%oDG`KU2rs?t#9A8`iam#nyzm@IKv=uW5`D%ZX=IIRP<*#QQzHJSS~vg{95%<% z%Ty&&^YFt;QHPb5RGqx3K)~w7q?%VS>Q#7S5+GhTi_b=|X8EK^6Y#9fB_nvi`Oz$I zdajHb!hVPMT-x=C)N<3+6B;u5Xva6B(Z)X2m#v6B9CJP#_w2s+jGd>MUA)U(bjiJx zf&rW((xm^YMuX_UQS?~azLx`xH*sIt20ZsDI--#f6=Pj)VacUu*kdgtZq5sn%*gad*&ar zq7%Jj1m*-gC|OaS3xI9p=h3)eSn| z1-nyoTGjGQ)eh|j{zE{j)G*w6drnh|wz58=Q(sTe$QNc%E*%Qc*<~1_P!-+5U!4q1 z_-;kmp}D7jp-p~$wSObmgZXA0U`df|j$Z}Hw0tMa zlajEP@sSh=@IOqq%Tff!Z6wS!P=~eJ-@E5EFsE(%w`RH`@rtA&Lb@`Yv1e=En>%*? zaV$^zhxTJCEeiv@ufe`9Wc?U3-oEyW&kzV=3GoSC6uQr15AtnDeZDRUyXvk~VJbi& zII5*owVg9QRWpmJOUVcdl=3*|4NqVJWAzlj z-LXn}Vs8JQX7i>wkb_VG96wp*98z#0@P-m|5&zgBQ-H}xG~bvQP(-sFtqnbK;qizt z*uhDdAfqneR~W8YI<0t^v;)76Pc(lvm&@aik%j*bhSxOndM&(EqrE6*l&<&7J$*l` zldAX72~g8({3y=(B*J%Oqz>Q=uY7o> zbGH3v1lGyKcZ4s+RnyMLdmn2P9;>ivi0yF-5!Y_3CtY+VljN>UkDV}6ga$f6mC_>K zsnAuna+caHjS2Li30|DJYrxA02FsJFw|7VM%E)$0Wis$+vAn$2YuXRmqR?flbVJDsuvt2r6 zH+QvhB_FlBF{&eOIu*_qBRLh`93wdv?iv$rCu)zIU`Hw(6K*5QM>-e{g@bG_+`d3) z|1S*pb6*_r|M&Fz1bi*<5D?8-S?t;2+4AD<?9R$lnY}^o8~0%Ro(@bYLl*r@1sYr zG7nYP`&Ql(jdTbTf5?s;!@3Z2 zNy8e2EoH-15^U10NAJG2)*{%ur<-g3wlAyXgD607=wOMV0~Z#x9kMDdWSa10~rMjNEXm z;yC%`ss-6dCr$+L)|L8_&B9F!TaskKTOK<`$*Tg|&;ZP7Z#iDILVm8!?Ph+TWf{@6 zEuM|_QGK#&e*CJjFb@xNJI)u&dqWQm$Jb@TGSI$|%ZWpUHUypjNl<=4k`AmvxHSNL zSOosr%N`W{2@ob+s*r7I$(AVqx)COi5XCEMt>vucPez{J1#*lh!6OL@(ueVp?iX08 z&l9hQwRsa$*+wu^ZaiDN2wT%2J#HAbhwn2TxFMr9rhL?e#LaF2!L}E^p5TK^3axp>sH}ljWsOS>7--w&?kB z@s=sL0dt5JD~Yjf!B*tOCyMBAWfuR<4zXs5>0TnxYN@M`XLSX&*6OMHIgI(coPRKZ zT=`CCGMn~J0Pi%A{bxNwSQ_D%m%d+XqhDwHkW+S!%(r7C^6|1EKblfJJ!k&0GNWdy zMFCI0e2+${6#{(cwh|7YXiyLD8wP?-eiS1YI&T16LAnflwkU%`XlRlFs>@X zc6_E9zNNmS^IlMNrWjh^)#X5xpK^nn~Pi~CU72Qh1+d`}y zYi+T4#>25GHg)XVwM$Ts;Pxpr=H$_u!_mZ(Bb0^k)-`Pp=<40P*#!N=^PqW+K4)){ z5Ytv?>T=KO*LBm*adXwl(8e2Wvg=W^xMZ?D+i&FRzuY+Amc#J;>4MnxcfkF9YpBkX zhfpma)M8B=-q;rRIi?Srx2Y%@nZjB#c zii3ZFaVl5bA7Xyl1nb`!6t&#?C@xwG1Vh%lPfso88kuKe1Zdlk7otvocSP5#(N<{C z7VH1*o&6;F>r-U>r5i+FJ|Vn!d~ROyVs|spgP6?l2U$=BFE@Y_AODv{H(FA# zx7cz_w>l}F77IGX<8)GP73`;B^KVH%Zi*}GzTHBF=Ui)`f%_vUPML6svl)GlOE>2 zF{c)4)OD==2Qp7d2zXvXe7^-+RpC~Ho2pF*WYzGFp(d1)z{Hx}!Su4^>rW@C_EFbA z0}YdK;cB59JTZ#DN}`ba81fjTLduWo-HYX{b9f)ceilU(iJZKQu z2TNg4vbG-HG!8ngyVY58VNbs!wTT1(`dl{;cQE5lPdGDA-1{~p2Gsrz51Z(ls$(p2 zg_j&q!Zj@i8tdQUR7_Qp9Yist1Z$=E>;j&H;qfBaL-r!#MC;hndRUf9ZoQD#?~)Ub z;`5r^XC?)Yrwk%mFWFamqPF`+%gjik!R*z-YD!m%lzB;Of(|~t;FFNq5}YysvzceI zhatLs7zxe^5~q=fD2|%w5G66ZvhoZnolJ)6L+sIJr{oS@k{~kiSJ-*MpYCd-I)pYh z_;GCn&tL1FP7658j4+yE;+bNXa5|_&ZTe|HS+~ybiqsX--jgW`mE>z0k{!{5(aZOv z^rAm-@LX{|I_)Ne7-;b*4vsXUu-0h>ZUc;oqa&Fgq}_i@rArM)KFm)im;Ha896bvN zxABa_mMEG*SJtOzRxv7V3e7_S+mSzwnDnJy77j5xc}2LkY6(5fK1z&*c~6s#PxoQN z^Pwg*nY`}aD(E*D$^oOlU;ypGYz%8-&n8*$QGZ0wrO(&r@yw5T&&szB*T5bpZGr`a zjfDdOPKCn5ftO)qdHY7oZS{^QH@OeA>#qggT}z8=oPS3? zOK$~L(j78v1^emI}X;o ztVu4JEVi6W%_VR*cvfNw$uzcapaqGFxKC9p;3WY5BC$l;Svi#TTHC`A+Ck9Mq}SJ| z_Zesh80|pSmxk)bMLe$FSZz8F@bd6Sge$Z&lYIJRT=#tG#)t+iM{b<-TCbQ2AfX@_VsSf@yK=*)=G{R0*yVgi&8k2p>iV-o`9CZ1Wy3QDV}6oMB^FjY=@_L zQA?KLnyUK*rmFfEXTILcm@-U+j%yvf9Emf9g5?0+%n4XnwQ;H+vr(}RP|V`zN20H~ zm}WQMP7T1b4C!&B9^>9qH63^Ui5Z)I+s#spPXE5Oj<(8rYefU@4Dj>A``p}(YNh>0`9w|Fg27EwX>vq70%Z!A;YACO; zCdnr5v^yKs&7Qg3co01E8qoWi{2|P(7UY8N)4VlL1Md)CIO$Pmc((^k5AsD(CgpC1 zf9|;QWVp+1oRb+d!8cT~*g_}BmKl*o&sW&0zK?TN#yq-*v2NMci*ug7Y`d4OI|so| zyCITZ6(xvQMZaWi=W|EdaxivWkC@LNxR7#jqD)6MGyc{LV68VOYZ9$?i_&(`#H9o= zH7}0e9Sp}NM*U1MW5fppMg822l@;P~xrIbfl|`^gf>x9#WFHMX)7*x^yJXd9EGuw) zSni&|%7v76;8AB5F0vRQe~d*V zpJX#zHp~{E-h;S`jZTnqlKU|SXOZMlCqx%F{3RKmO3pO%bX7Kv{6Gq?=0W$wJzgx= zccM8*FJHJ&CLaMHg&!elf@WzJAFC4jI(@eh3ItWT0M~I_XqKu_SvvWPld<(jpe)U)MPu zSzv+}#xL5vDa3^zY@O21Y2}R=<(U$-M!Q#M*aO#8DK|?d2IL(%o1R0OIoJ+pU{s6A zW?g_Qf!zb9ygpH@ke zN?R@oyPaMh54l;i6|&R&WYri|Dwhu{;g7D{_NstA7g!A6kZH-sI+|99F}RBqa)D+e zB}x*xh2_4soSVy&GrW&7gSn+TiRZqMG=IK{N!n?{iH(}`Jiuo+{Ea{T3#!kZLT{Tz zY6-W8;%J7L)hv45A$@9`WNMF@<}&re9S-GI6$Ui)bE+Y+5i`n^PKa6Th6V}!=s}IJ z+zWtZJ>uvW5|?A$NOjm>Pp29r$ibfP0cWXgEd|p8$)-88!5)>lRymCBwGf>hHB{n+3~dfbOYGT9y9Fd$&Q}GlbwS z?zc6|*AZCmK$|a%9opeA-04;-Sem+S6pMnUfJ-G{jT&>!Bc&N-)0!k9i7ls5dvPOK z%CC-)SvaGUGhZ|*vgu8N*AY_xN*-dIi{%<;m+e|_L6`EKW^l1M2Yutuox2wj z3ei74I;xg8FZn^R3x}WRjSF{PnlEz32n5xDLhdh~-|*rV$yS3&2PUi0V^~6f#^(0V zGUa+HKnk!m;+2B?D4-nzz-(BkNwkyjS6(hM4OW~A??^2mLosM=?UoFsrl5knm*coourCz zxy4Y!wFW~f?p;S4O4K4v(#XtIlo$JfFEIlxu$K;ZOd-Dz5zuK(m6_l87sr+3!v1)q z3c7;qh7gn;+EaZ;*>-^k6(S2|?M}4;?oSlHUhmO%Aoc>#6w+S1mAqXS37P@-g7czj zBgcjokO)TcEDbQCh&TN$YF4q&lp47yvh26tbs9V8Uxb7$I0pTG2?_rErH7PB5*JX; zYV>4vIduEe${iK-*V9xvKbYD8J8-A7V}ZFtB7M;{di1tMkG_!Y{+hx-$`}52@FC^f zZc{s8cnaT&UF!5uWL+(cI~2e zA9N50k4#IDRG*C07;|1z8t&6q+x}>wp3h9%@;rmzNAogsPX~aZKO;v=#NQz zjPrbb-S6P-*o9gU7JaJxlagxy@g>oApMlCT?ao#Jn>9i4# zR(60@i@C|F9kBbJo*JQVB+-WEO+O9*)~~~r{vb=(3tT%FYp-yPUq`) zezGb)1Ghl@8$O_;`k_^_XCV|G`SFc@f%M$26#wR%QuAllPqASWO0?a^yZCbHZGFR_j3IoMg&#$csTezNTuv##V|^;qgq zlnc2jzpr=IN{hJ4Z%zGJ>5{LHyZJy0dG0l&v5lhS(2lLx{V?QsQTqr~pRCgYDyq{V z_b%$A;EoJi`i=kJ_It>tG9@&PUl_y&FcY^WiB9+|Ywlgi+Jt@*RGJhc{0l0kxoZ0! z($;xD|wR1%05esw@pXeG>~0t+x+s&U6i@t{wv)u#6~=e(80fJ&(?z@bVIeP z%vYuhAjX`sm}gaVNAWU6p^5(;^K>HjnTNABYz5P@eyo(a1HkP^OFM@QtoK*C2UbV3 zwzTF2Gci{A3m$v39&3fo<{3r=U<1~{vp}<6GKiiBvrQ{Z6v*+bCB~Qi{S$QLXZq#? ze-)Io#7|tn@hK|;WJ`l5Z1=_se-%i-a@4%LYTyPUR4=&YGf(f4dz74)li{z2_%1c+ zsa(jg<0)^sIi zHBR5ox;YO(7}#ZJN?OL$66Y@Xi%c4PkI6RDlUDMT5&Bgga5KBga2#{Ej)j@9aNpi~ z$wX}S1CG^mtuWvUC?w+mkR)r!Stf6(!y(S#7gUDpRI+e+)GHb0Ekn?VRh_R+Mos=| zCG>W~_DpUp{Xxrsx+pNMXI5V;elrv^TewN7&LBNrD3XaHm)7HB32lv6GCuKvz7+zw zGT{m$kxbOf_M14WEhF&%(9{Qyl>*KW!b%eAN;JTU1S$%^!`t9l&t*93>6K@XXRizE|VGswvbhYxj5n7it zpCica;O@-C zB2i0(?Fdg;8mi9O0 zxM*oM+U9m_NtShJfqEguqv4XC`q(ZsfDC*0=H$5z!@uO1u0i#Jp4-a!t33ux?OhgJ zG0(H4&yZ?OED;PZT{39hzW-#|@QE3I`=( z&KdN+C;Z&Ksr>-SFcL#-;jeN;9ATq{4d`HM4WQeToy+CPD8*OBRi}jz_RphUSm)IHRL^w(2L16_%;%!%`yJ$rM5lqpY$OkG$tg#tUM>s2Ebki)W zQox{jfft%)MG)^gv+_wH^KY`E4F=x4G3vumy2f;3l?ga<1o^63l6KI(RfgF4@2Z2> zFo|7NHmvddMm6y{P4nG&*98^z^lFOMg=&Ygr z8+=6cwmE3?vn}ipJ<+c$?!c@ga{oLt0mFmw70bSBX-W$k<#{J9jh^g!n=#2VzTKnW z^#we2aep%_ZJOxkZTm=E_fFZ)SAGYPVpezj>EX$yWYAQ8JgZ>k2a&kG&QR1Ue(lcJ z@^3_gif`|ty*eVvP22vokcT8C`^-uK3eZtd2i@!Ye8f-X%139|4j-GTcfWS z8jaoF8i3K}Y$)8%50`BMm;(4j;xt=Lw1mX*`W%kXZ7iXUAf~@?6YJy_lXs3Yx)lP(+0XOYW_ss7pofwVX^z)wWWr4Z$}0MU+*i>TcP+2Y$}0dh$ugw z>{HMdvr!e;=O9iif2L=DHe)$J76pTic*rUX@BpA3irR}nu_Y6Zu87JQY{WA&`QMIN z0D4)}Y~M0byhFNdfJ#<6b5N&VZJC5iO}di&xP{#l@_*X;ImyZCoc+DSqXqDfZT|w} z09h3Zsv<=05?MYIXsvDz1DqEdP@ev3+w=b@I@_7yb{y`7V2lX7nW}F2z%6)oK#>XU zs1|ojwJ=v^(zUb3ISU4vu8Dzcv2TGukQ z<{Wj_TisD>nzxntod@aQYGjoEk#wlq`<|7Pp`%(bJ~=*ZCHrFFNjuPjD z?vV|koUj8;(N;~Ixe8E4WX<}`KeVqCy*{`@JFDXu`$R%F=tR(-|xs@l?*wcQWn?hT(PSV@CSje75 zS5d)>yE9R5Z=Jl7rB9n&rbcd_t;f~lwyWvhg7pF1?}4MhzyD5Ec)yJRBq&`r^Z2rT zy}c(zUd`C(m&T3%tuLM20E||oX>yd?K|dj$6Y=`qHZ9<}uYVadL}KbjnlXKvcp`8{ zMT1=;vlAi`_5z=Kbd~ShwTo#s8th*5-T$z*^ z>F?`Xz0F%cx@A_c;L{teEF-sy4fSVZIKn|NXX;5WLMFe^~AHnOq1fcM zh#OKmNYq}*R?h%rYXhr09ih1qjY4ClPA)NzwW?F+wv$m`BqriKZO&TRBN~yH+#+1k zsE-$S3fsAEDP}+_^J)ESx1U60aN9~{==)ge)6eN2n?GFsEi&N++X_{ZGqY(x%1(`H zCx#=p73LS@ut5AaRC>p()_)Ui_Wo^vl3pa zyD%_aBf4*n>#?G^xCI0vg7+FXLqzAZwvR9l3so=6a#VSvdQFYSDYHrIO#=t?5=Sc3NQCq-|^Ow!Cfdm z4z#&)Yo|lK;($$BIOtn!-Plg!6UU7+GSmD*1%ms(WyM0L(xPV?a2yCrT7)79F92U+ zCD(_aU~bv-a@Os`+%<`lITRd+8oA;tP@F0kNkSf^!5Bp>AVf`1ZCh_!k5EtVQ>iDA zE`F`SD9r!}HdQh|{{tFr5F|KwI2GJDEci`-u804L47SmTW9iv7N8qHwdzM?_>if6H z-7_Wzzz4V+v=_f<*m}}&yOOOc3_x)ky=+AmBXjEEEID7n_)<2fkZ~n??(bwDj zatNm@Y<4!CnkGMW|0L5-tz_5B2rYv}UPmmFgUyE^9Eb!>6`h1MCUpAB0FdiN_PIs6 zgc+`2<^6I*z}!Q!iJZ>Zy%V&!#c6MBl)9RZ{pJe-(q*A?Gat*F-UD7^S6{eux-->1 z^|w*kta_SuHc+~=oFV24M`nzGBz z?ezxouZ!}B&*3jqo zvZWY z$aB=s`%}tC98-__++NhNB6%D=Ha;fI zLU35QKZwh=3S9;ciylEe%c35vc9?dod*4m3w7Nfv73UUhLk~!p*F)wMQf6C@0=E!4 zO$B-CzE@Q2l46$=VC}#x%^{&el$wM%JQ|*PPcO03g3NqRY!i}L+#r=KN`KOKu|G*z z9gqBlKt3mm3cd z#hTr2l)fU8^$S35IZZ#eF&I_0(9}ItP#0acnVcMH&Oi0ZW160F7w=ld8=4_J$oGMgbFts-!q4}KF$3mv6(ryH@Kse7go*k5 z)^@#P7V$xJg_GNv%;$O1llJ43O5Jb-iJhC7P^15NkpT3){jn(9`_9WwxKMr_>Hz@U zVPgAJw3$lEwWiZ}4`0e_`aN1wy?F!>298#;b*J|c+JR%!nN(p_d-V%l?S4PqL3ha? z6hWFKXBh%ME>}Ow+Wwg5Pl^{gvvbwbG3IduOWpE$S}XU&&9oo#?k#b9dN&&CZ1m*~ z?aq{~>;p!1;R)!8?9W9VEgvYJGs-?!r%JG4&NaG?b8*$Hg;+ca_E0^PnPJdnlbvDf zq*&=c0^q!sAcYJ}etDY;F%b}NurvM{F@0x@2^*js0$9(cG_9lqxOgWtv z5eA{-)>D#IrYFYbO&sO)7+w>>RkXRRr`R(_$c2p!@In~61~TpjGz3`wuvOkzTI-L{@GQH?gzHVi>foK8w9CLoW_qenU8>Gezp2H9c<3*(X=o8ePBh zcLAGai^H6Mka&G%LD4ekl&_V(Zr_XL6QG^vGw+=APrpE!v2VLeyNff~Oq4UY1DgH9 zzIZt|*#_=Wib!FMecUYV$te_G^usGd8n;XT`Wz>hbcGA|M)=36Qv#u!n4fFGcpL-L z>jF55U?&7nm4QUf^0cCb!{@u|VRTC}mygM%{JC+|dBs>}7HeGg1I$c@ghtz^EdbwS z3duqMWSdRNf&gE>y*~EapM*rrDyQdeQw4?Fv^kn;r-~D+)?VzH=Ly>=r|0zLK>alS zbQKf!SD5G=K*^4m%=`L5Em@>63)9ugf?(TI_=@)d{X9n5D^}kbA zvfq&jOlg;zKT3A)XUh6W`0VQaGi6PRb$jT@~E+En{xO+TR{5{@LNXzW{X)U0mPO`t(8TNCC&P14Ri*sgu z-hBc$5BlGjdJk0zuW87hz`gi;*DbY#uJTASsY50@ zGos@q5~%GnVe+FMePQN;bNxKS7+P@)!3_|PfwQx6#Fzpn!{1Zw9&)TXi+MOXUmP!+ z9GZYHo5Q%x<2<pq1fv#`KbF!bpDa}S<)H%qe!7rI zI0R4Nu6^ilY_3h@k$O<3AqaLNCygkkjHq#8;?vM_c|KlURq*@B0`v-i1T7V3;x~i$ zvh+(XD4Jp)1t*S0BTX7CqH(rRPcy>*<1IRZY5hA5s~i0=ocSPi)P9$YR^f=Dre9`s zEtZ)WkwT<3Yh1NgYu;XS4XsD9wNNqw=m@L93oC9^BtGuU7N@czF@bgFK-a8kK4LM^bdLjwg&ti#k6mpOThFFa-5=BuP&8h@ zC`2=OX32Zwx1duZI3F32e^$SO~!o*5!*T&u9!ue>5$pFyi4ZkM97 zVSXJP&#mHw!Q;+F-@|A4%9hQ5@;4=NeSHG-Z-{;h8lBj)LM*{zaFarBdIe@4;CFL< z(AnW@+1MBziotLbOBB7dey^t+;M=82UHB~8-*?& z(W9C4-+QA~@H3Dl9KS*1&|7Jc$gPaYjNG>h_HW34!N$y+Ts|jA-5mWj0CoK@7m0)l zi?RT@W3Z4xXT7po?pCvSs2G)KT0ARr=GOF*=^D^sG`CB432J2(a+k?OO`r1OjVR2C zV8&rSr17Qda5T&$x^PM@{52{GCmsHX?B$`BO6-c_bS+|KsUr-xaZ2jL)X64jkydr= zOm8mwi^M&gEr?GD5?uXPz(W(DM*yU*U!K@$ZTb1^^iF5_Fvy+1AJtKBL6{b!7Uc!W z>*5KApmszD_ik4FV@$&4E-MUvRjZ+ptI4H4n24fyB;IB^kfNW^x_YYc^MJZtUGbBz zQ*!=$hOZs|EmFPOvZxyX)$8tcT$}h2HYS(&ZSBuXughPknRYG*cqz2kRT*1Jr^91W z7^gE@o?v&OAVb7DOxl1q-J|%8!l*of8KAp%vfPuMyfb*nQ=UVXB7JQoBF?>2-*Da?p{_&v~D7$R9E^8t!D<|Ew4m`VfB`yRwD zNqpxsqZ>AC;2{3>x;?xL+69k^Z(%%0#O3olaX)>~=F2#Ks)ocqK4h@1dC?!(T(hW*?Nej}_Eg*T6 z?uJbxodSY%mq?>@gOt)8Qg0u)?|tuHuKXdK{hPJctTVZ1){H!&lGUWujx7;#%vw(H zFZC}GOMj6!8E4FFP(7~qEVKMNMc#9aQtt0ITeyAfY(WUvCef0ev9r@>t2gL|uKxr# zgqn_S79t7=Plk!zxO;HzwN3GAc{_)g2u|+1PF(1}T08upm)lsy%)`e|(ie4>B27Eq;mliJHKO=;Ff0W>-Z z1W$cwD~emTUOsb)33uU%qDcwQ^6Mz7FRE|&n_bjUUvK8F7=(a}i;EgfLR$BM*FjPz z82VAp@#Q57DYmGnbb*;5hfuXPb|^NAr-SpDhkDDY_pVjF$j0xC#-f`u^*!>lDAcz z|Gvj;gbccR=zVq`t{?j=yLl2|#E`dOQ`NA!I5E*GdP(#-Lw^K13Ge#g_lue1FnHST zomN3XzDG}1>JTo@64SMYvpQYeNg|P6j%`nTAcSV?dcDG4W0Rd14Y6c?Zyz?On0)J1=Y9~fuEE{&5G=@1oN~__mvfypiP?)*aqf=c%GoO){9&x!=+7K-j1Vm?uNSjB{$bqYoqywWpl{G?yBMrvREXkE_ycBnE-L998L#*` zoQ=JAo5s7Vrv933E=K%G<2}Rv@iDk*`6KjCYi!#WkKdTq4?B!g+B@((f6jPQpv2*` z(F{d|P%T49zKy9YrRqiSm=W|BaK1cAA6U%L(PGXmJtWr&m-S#Ge ziS})O{Y>w3mjb<`-=1cF6l+KJXl4`nE4*`;x~?J8P%OWrvd?fo_^;BC@WYSv8{0<} z^;=M-s1BQGo_rozuzK-R8fv96uaF4k#iX`oi8;_7wVOkC2o z!OD3^*ksbw;-y$1xp?@_{W)SKc_|dl6K6}1QjL;ueRo)PA`_Y0oDN8GvyJaE#>qFK;0y*OpB;+lQpRTZo^a4Dkf84g|-f2WUj*XYmS ztXJvVkA#0v9PJDkKG#-6B$=}4FQDfTOX|l$d&KdFZj#+WjW?;U0#zy&j^E$p?ZGtL zyYg4ae4$G??~!!vo}Xf>1&cDL>j@ySB1CDDwupq+uC_fs%c+v4ySn&1f2yMdRi!5A zV3N=ka>MdeNn^*J=SpNqC(kptqj?l5ipTNz zsx*jOsrj9wZLA-+A7AOw`&;`gWQ<{WRZbM@VV%6>$@C=rTs7afST7aLKuy#4y!7Eo ztHz*qvTAOPhZXqd>U*L4?>}aH&d|No9}W~-vdN4+ds}sQzd!J;_>OcPbgdq&Ii7b< z5cLVOV>A7D7dYndeRxXVw$xH6Xz=_|IBkuF=pv&Ox9PUbo zh{K#r@=2E+&FbQ(@d|ze;DzD%w8$r^(nfTY4h2z>(XBg)alFj(r1=BwE9xP5VK$*l zDmZkCYz`w|2+lR=A^LAo`572Kku4Q{N9QuE3mSMkED`ajf%XwzkiX%KhPs1Ep6wI- z5FCc+{KU3N6MT*aN6Oey%OWZn28NNaidIc5rUJ)H8SH~#;sywR$Z9%t<*B@`h&;oD z-=m|HjgMwsSVbmX(n%rFA2T1w3Y0y6X#5Q`iH6cQF9t1)6rV`_rLuZH-P0T#mi0g9 zxRWfreds!_pSI@{lo8bP|E#w)=hOxD$;HbGAc@%MS zD-p{O<;Ze=OM@l_6l-fO3mTOu{BHAFUtl>{`IT8CV!d;<;%k)O&JHgeRzld$#4u*9 zSEgrxjma(-d7GB3gwNPXS|+4XDy;?a^l$yCogOV4nl^y9tO_2{IrP%m^0R4@bnG^Su zM>rh1KszX`X4CDj?g*{iF6W!UDoeEq)CB)zd^@uw495f|i3g9nsv4L&P3nYar2oOa zStBJXDOX(TD+D|Es>`nX`%u-1^6PC=9go_E2RBnBeTAY{69G_`zhB46cQ_BAC)ZRV zL5mK#Hsh{5uSBVi6>Yju&f5d#OnsA^gzWUE*Y*}SG;*SsKAX`+NCuP%S`ChU-=pO< zpKmpq7Ho3pD#@)1WYx9o*YU7C&LXnfrqp_SVPC_?jn(F#J! z>5kR1z@?3c$xA2Cjrt4y^QZ`vv~-RJwM3FtoNp@Ca~mE{_ynQLsuQQ0c3v#2rr z{a!P6HzYH?ANE2{20fH9CCrx zVpcO`jKBm&4WWCfn9Rs;ir+?$jRUNo5WKecmr?$!?!#+ApoCP@ShOF_MityB5 zk)4fTSy$i8pS|n8EQS}LRtOZJvvA+Fc|lKqbV>tT#zufGW4AicQ;r%=KAdZHo&93- zWshtFx`;4IKyCb;xbe3U9@aBPNSD( z*i}!*dEn{pp|UsWKrd4TvDeAbc>{%ZRgA0|J~Et}4nxfKCmAf_lcAXG4^R^OPXD*E zQAaOjv&J~)KcuS({+b!B_j;iJ!AtZ{QR*}sboIDMmxbbHDHhty|FNwu=1uA4R({6i z@)#Ov+Z)RF=^QpLfn;Z)@M2w%BvW~1NeV~Vr1#%cE8I%~WN*V4jKQBh*T6;mk;&xH zoQgDa(NMMNP)nWswoy#3>|iLta$~B51|{i$%tbAu^COJcKms<)mptlE@%|Wm6JxW3 z`MLgSPY#No9z9yFd_>!5OLj`5dB_GX;+IG;;WRQ7l=8lPNzj8f7H9R#Pb0BkZ3^2X zy-lxH!$jOdB))B>+j$WE5S79jcQehn7RjrN;mz0LdZ!0ajzt%YWRx)IZ*bRiOPish z8pq5JKNf5L$UjVL{ppsrbniBtSYoF4ofd*6aG8JVGF^JI3A@gw{rss{D|%5yW>)v6 zfQhIQT*@|1?KcINvL8q0XFgF>aNeG74F4QyEQz=AOenp+zpTrI@U_o+g^`Ay6OXE) z(9m9cuZ4D(IG#pF6`>F-G!OFjK6s^N8H1||jaGIFJ?vsyRopf% zO`P)<%rYNP6E+o$_!=sgH)oDR_pdGL5(R$p>>{!i(-h0}5!2nv!-{&U#mOTK00(0$ zLuqOjmUxV#VWCBWz2G=Q2Of}Ps;8>jq41mM%Dji=%8->-`QwTxj(JD(6CVED<_G(nokRURjX|xBA2Jdv3W!XMqN5@Pi@WKQ6Il{oN7!_J;mbI z!&E7oIFb=>3P(N|EXLkNJt29qYsS8WI-U{9j?4D0YX+5eH_PB)+NY;M?YSEO{)OAN zqKCBDg`g_a#U<7>b{dRs^oA|OJ$yS!E!IYDg7pX&I(j^Oo)=m_zeLy+A8tb@F-JSB z(EF*>b+~9I{>m&&nf~YF6>6usQesv&g3%_KomSF};V?xoc$AGxaD|{?)V2<87LW z)qZ6)1kY>duk#RihD+jS8OR0?pKNfiCwPXLJ1tA1f12y|Fw_0J@PFq$J%SoBBmK$KhsC$()yYFs7$Ht(pQa9UV@8JPY2M7~% z_f%B!S?uXW+%vHEId?>u4}7)xDe|k=cKV6X_O*JKdcSw3^Iy%yGCi%jn>QD)G;ick zN~3rsrx$w-Nf&OgmF3ZoW8=W9X#b+AJg|7bP*Hf=dhEINw|ZUYSyOCW z7_D05I1v{tB1j2@udRRJR^oMD^*->*)F@d6;qi~9Dvm@I*V-nZu-|)YG=;lZ$I!zM zIC|6L@4-)Jd_sTQJ4F!MJairUKsN8yN8r5QFpNX0g{^RdSbn@Bv?47*MowJ1FLyh(CM!T;g)FstPf*C{{G&86MY_2C+}ErLBO z!O;3??ZE=?hbxW}9j5as3NRKL+ZNu$fnMe^j9PwyRM#tkL8H~~>tX6oXfCFAVVa3J z!_Iyfs&j=r3oypCipLnrN76H^Ol2ERpXT_8I-Tzz%l7A>Ub@s9PK+;lvcj^8&5<@k zrR_f5XG=XxQcU=lv8=QQUF(rpW>h@<>E7<|IA(;)>j62T>8#80-G0K|6D{@69*>lB2W=>}!J~{>iub((UXyM-gQs95k zzPY%*KS7#Yw#`V^Oz+i|)gAg98KkL-o@sU-U_u3>O<(0zBDxq>Vhi>qCL_%Idbf8% z^ib?tU)Ab7Kc1ar2E=- zO(&BWrIHtqgC`|?kg3K=XPV>nvl{LW>Q@{|CPuh!lDzH978^@XN+h#qi8_l4i=Z~K zH9gzEqJFSdHcCx}z5Ea{F`kbgTF^iR>uY@Pa0dAe5RPh_zBe%wpeciRr$)jW- zRUs;~!~DtH&qm98UPKGit~Ahf0^B*(_}Kdt&Kr?T@z^!zg!#7|7+Iqybb+#m&K(-| zUV+PvpVu3u-D{GTbk^5OLNv#5c@!EdT+E^IyWzbD(ncHn7BiyHJjuJ1irJMflvB}h zh1To)I>ldxrp_=Y>3^!aZ`BFBP5)VgoI+QKs}N@QCJy^hx$MSs_G=VLd7r$%OF_4%Q2>o@i+zk6L^vWx;Vy-PW)rx@a-+%X?a?QWiYd zEG14N=L^35Z7;8+-8S0I6^DunncX;g`4u?rZmXlHtY6g}%ZsNqlrKcI8joMQZ^l#v z@(+e%q)MgnZNyu@BtsdWo13!O#6wAFGTU*UW>n6vo2fLih+a>a24}6s$DXy;2@3TI z;f_ljcCn#{`op+E+%GlbA2?^Yq?qmf(-|PI2GSHE!@&U^t`KwR?Hp!zC+X;D)Py!7 zb_=VC68$5>V+&2|a|+_jG&GsGfp$r>U=55wl_~Y=J}4L{GPQGn=J4XzH-C~0xHH5j z!`{IJI*2;^n7j_J(dyE6T`jw03%|YJvP|70OS!N)F1{E{r z`>!g6j@k#1cqnegUdgCvQSbZK?4mBW#rF>Ywu-Iq?73u1zXmy@DY_t@B(Ssmb-hv-Q$~;yo6@U_5gbJGa9D@i^7yW#+8culDW_7IgzjOJ8mRvD zS&MOWscxs8%aZ$qJR$PkRB=T$a$ZFY&4bZFz*PPzzS!!j)%-A|kCrbrG z>lShrTcJo^^v8C-b{~D6( z+?ZcW3VZS)JH7NwH}y00p->G&^N>{?_1E0U2w&3gHZVqbW*~hGPu6D8z0_#KR)A@R+HXtjzijQvxY>7CZXN^7IE9{qOFEs}iO!W*#=x zKM)i(A9*1@_F`^XjY(dIaWc)H`t4ViFD3NU-ed=ea`H442vk8ND$aV*W{a?i0a~1Q z7<<<40ISd^dipj2RwBKH7XHWKot0(Hya<5?WhR_M!J~ACIJNL^eMZ0Lq#oBuX8$;T zWseD!ulqzfhiaGZW7mw{aD8?dI0xJaA@iV|d%uV(L2N4<;{75f!Swp+tj>F!CEBb` z2I?v!T`+1zYwFF;6i#Rd_ki~1>gT%L9sF8Hoj@5SZIy&R4HG^q+=U={V%FM+9R=J2 zPYu3nXfbqWb@;eFf6Dus}b`K~*3aaH+D|vJKu_Xv!naf7Eb-uL7WeCHsMaH6!6@MNl zEUluofyWD(XbbzB%Dg0$q7)tXJ(9m4nh>-%TQr05pOf9rphfpeEK&%&UEJai_GQvY&vQ=Ddrc4LM#iI=CZ9V-xl9b zLO5y40-;f~&eKuK4g`h-l$I#konNGF;swfs#pSL2Nb?EGzlH{pXmfYkVRKfqLPKH< zV*;yQd@o&of|}KC_N>6k>7&mmy=f+|nt#4*woK8-db?Ma2NG>$9p#uGF@8F7bZ3Tm zu5~ur6Vpo@5(k(PGxS4r*^s<>-jq>Z@hqR0b+7Z`#{A`!l20#dm6DiqoSt-(4W>sI zOCF72d!vl=w%PQr%ql)PGp>jQ)o-YpPx93HY38zkv)WJmW~lcG0xp~T?uew|`O1#A zm3vP|m(=O*$Oq_SZgs-Ph$3DGmsd&;XlkP#A=k8yy_|+t=#?$M+C$Z42=*lXZMKK7 z7httYW=}2MGxC=}Y?_`I!l84LBAGEu{&8keHi?q5Dej_&BR*DDWGko*Bm5GI?}?zx z;zr|nFc})mD!`fMR3|CIb;uEHqF&lW5#H)luDSM|j>72b$K?`9++mX;UmJYw*We}Q z^2q1pwvqEEIEkiy$7w(3F0Rf@q5OwX|JoY(-?SskG@6fDdX|~j#)tCtFZWyYQ$J>> zum2f2x8)(Omw#tk%Zfm)$ThJu6neaPBO! z%r@4#aoq91U%X+Z6fN(9z3p8f;z(1JK|K++{3*oe4>|mcK9qtrAK5I03+O4wlGImP ztrVAP5|$VRHBJ5GtLe_M>cBc~2Ufd0Z#!dOLz|yS^@@4i4iAwL>T7P|p7d)MeYH5< zHte&gjeVyg$U4EMJHMATe^T_hs?fue4Q068<6`qsRKVP8{cahqt$EKY$d7W5WgotL zg;}dI`A0StVea9|HotrZSe&I<9|mV*Xqec!ZFbdfX1}R2(f_ku2ZC2zN$*beIqL%E zwnd2NdK}MA=r-3TTqw3(jCY{_7uDjpN7TrI0taV`b$28{02Dl;tuKMS#>jzYS3dxCiPAA*-= zU_S(BTxk9nzdm5|C`R)>$=pf*Q<^ll@`9z`be2WLJELXy!mGvZBsT55?BRL~FXHY; zJ4xOz$rbOO)doTnZ5_B;zh!GZ&m^%ePL~~#ll%!8lc&>>Dsp|zE8gU4$CI6?>}4le z-o~6gcgpgSsP)g5(V9FKZD4Gf!j2wWzy05io_8*fF8A3dnQm5BT!D3H#)rN{C$sum z&-U{s;6sOlO*0j2Be9)2B)WvJRmER|? z(v8;5y>XzQ#0J-@vD4DBH>skq`0DEe>Y(q)sV<+w!-IDX%XA@ z#3Czi(9&+aRLc1jI_J#$n{0jK*Uw8H*H$OEQH{<8u1U^g&)p=seCQ%_V!RsD{@5XX z<5%79M)c&RPwWW2kBLcrQk;XUf@{M(tgXqI5a4D`f7 zo(kxqXj-+!WxW;F(}fKAk|dAE)Wms`yq-$Le6~(}X#?4@eB4)&W9n~di(BcD|sBeI?vguFezI_2|8KTbmBBV?P8?J9J zQ|M%3)W5XK6gQI7k&fk6;7&7CRLu|!Okw~VF%T+6$r-9}HO+1>4g7M-Dht%GR{_xy zrLrEf^t5k+1tO!~AZz`BNG#7Re_&HOi5D*=sZCaU7nT0BaKPxJqc-JBMxDCS&4yBi zK0nU(i0W8CCl>M)x;zt$imXsfqW+!pW#>qct8RW%sR~-?tnbT3QySF}fR{_6m%2TB z`%y27+H_IrCbi|S06Mm4iJrPARr?6Gh;nQt=ry0h=xJAmBQhf1mi91(>!c@CY+I$P zxfd9QWQ$&K%H=F*>&7JP_l9e4<(87!b!ScRDk@|y6RX$tLycKfXYozL<<}&u{us`W zP=`}1D(i}Ani2|PoFt4o>su9e_d8>39nhgJorfMZ{yp1A0RvTg(9ZstbetbjC=rSz z3u$Hng?WZEL4SDi0jJMgbv__54*7{(TVK)xxY1>sIN_IRyXv>ZEH1o-?_*Jc}% zAh0U$*L&9MAgB>0iiDRt+ivw!9s~MBZ2m~^V{%whOD=IY8NLWa> zXvIv@;@wM8QgYuEs{LyIMZ(GWVa8s%M4B)(KX&t zggI+JDW-c5YDI%Hsa-h=l3ARsaEQ6zT7>1??FWV!*0i(zzwN*;QzdQE#N#STeG|jw zps_&reLz_p|w6r9rJ;Xa>IBN&b zj;e#Lg*aX`NEGL0M$N}yIK0ow-v=af z%r1xnV(oLLCw$bizpwU0HSNi^m|vZH(>twwsLWu5J|B#?A0hQ4O7XRyCG}IX!D`Rv zL|J;3?7N2ySK^IVqsk$cHg~*>M`l)%+c~8-KPRJS{n>p@l*>LZ)9KAV-^ku{0?D|m z^;i>!-s5`uq(RPE3Zb39*QfNfs`i^(EJNgU31SHxa*X6-BqXIaQ+8gb+5vnGOKl^4 zaboQq(4mPnEHwSI#vDiK_otOKg<|ajN@<9+j?t#b^Ndo=T{-YzcA*s)ZvO3t2dSGVu z&0wg*JBB?y&K$*>p7beM7#g!zk7E~N;PgJU1;s2oS8BV+86~DN8`Ey_Wa|CuLu#{{ zvS7ChdFVWybb^Of8TjeTAy(-@7ozmG{i(J9yWi^Un7YHO$~XLHkBRkhik{2$Jv7hW zMDz;$PXo*bYW$ zrXv%

{+aq|8@HUYaPo+4b;SrO4hGQKpXP^)J@bo5LeWkCD7!orXr2IxfEPJKes1`bhQxsAQ&1LX)LLosqk+J!t+OH;5d62~(wH^3I51BmI znqMN3t7$Xc!0~NG{mbo|sBfubG%8$Tqh(^z*b<5DE(VDEY8p0-tB-1t0_bhUb2ZG{ z4hg#|macQ-L{C&ai$2Z>@m}*_!-DIrtdP#z%WaA+c)6WeanbXMCwP_n4XlNs3Q2SC zgJdj|yq-{76!c^CW-0R(Wc8x0tMsoMt)Z#A$}C4R@GX>YNvd!P*Tp>r{%;bwZD(E&heq#47aAufA+vHmThLT7{wyFi{yWclO!3Y z<8P!Pj~>ZJ&QlF|xO6Vtr>}YLtU5uRmg`?d^(G1Ex`h*%)+P5bt&eo_JjLtcSjv80 zq)>^b-4X^5@(O>YQoiEj%s%X3QV-FQ7*mUCR z)3V=AQj-+C7^N9wKH}M{z13o1CGbATrp?dw9+veoJ3q}x^VPRx{0zNTg?EQ@ksCZn zW$=1#QH-!+LE}(gu$bNRQXfuk&+EB?IJ62~SO9xN;Y-vOA-!v(k(%_Zp%omiE7x^x z3PO+v+{rX@L%(?c6Rm4ckq%0KfgMW?$Bc~l+3S*(Hv)`x6aBI~T$M2%lY~n`x)?q9 z{vA7~{zp_AuONY+w+o?BJ^V!}LqB*)Ywcs>7F*}^D>coG=UVKCk?U~{dF{KKSa!Bp zQy^F~H5a}()Z2>Ko8+ zL%p^iTlgZJj$>>ip@bG_;$ot(XuT?HSYS0KVnT9o*qHJgF`Q;kahq#WXZ)(YKpl;h zy?R#1+gRB=@kM}oJGA&Co~;P+sr%(WM=6kV9gaJ|0#~h|3Sggel@3ld(+a1ic+(Wv zH*T(DO_x4M%8K{0B1t}Lpd_)u{mwv1iB2kMsyW5dpsUUT==ak3A>#6|%-$YCN3E>v zhnN9J-%9g~#Qs-+->lHc_7s_;0c*c$@0j{^lgQBWRmKj>_1Ujq4_SR&+a{<|wG_0! zB@Jjt$N}4t5OV0wmMK17(e4(WwSAxYX%pEVgm*@7N1$?fYI_PWb1i-RmiKDOx*3Y( z>4{_=apQQh$r#$w-%8M5$D#kGuKPR<_z0U>%m~8sA2y{@a8ywoDwG+(+-D+y)qd z${C1aFrg(8DU#HN#2d!dwRQ<5=x#~uAX%KYRI)U4xyF1P+7&n zWeuBDoR@_cPXZIZ*2sRNUou;2F>089T>cSlSI>2w-LmDoeo8tey(23yG<6f7ug*;d z7Md#M<@o)4ew@+lbjAD^0LHF<77`Gw`%UN>lkAIKQe1cT^bEo)NCO=;__kS7sK@jP z;Uu9rsQX47y?*w!>xX&gQf61ej5$Qs5BXf-rrN46pPds{SFnZp=DTV@yItFGb<0e% zjsHIHwXh~MsDm;n^r6NtYM1N3#))hzExlZ{+r8W@J8ivkwk2B7N=FH(x(!xERmC)2 zE>3-!Y5oG?dk7e-3Z?N@$%|)cm{fW%CTovcT8dkf*g>{;6FFgMdJrojLaZQM#j^El z`e4IVvsCCI*5kIKfQVo?Sj?Bs#pU5tcGc@klj_U;Ej2?Mt$uvMwWEHU_ICo(<47SK z8-IGa$T1v6-SbA+Pnv4Yl?lES1%ctJ1wZ;3m0HkM!lp~!LP?t)-FK}x@wSd5`LA{Y z%jQTL3*Ha6c-;ugtw>o+#1+c*c*dLu%w$6VdCyDU- zML^>p-%n*wV*oWSrMV|y9CfRqJXFno$^D}sxmyn1^8{P$vvKsT!e_C_PGPT8iPzY< z-=!jP`^djqKp63Ul3=N>l8}qs7VtO@OPd9GN(%RB$A&mY5}=X{a32^Tjr=)g+UIN6 zcrB?zBft~DZ{<7v?diIFZ9Rh%vQW01){}mc8Eoq|s2N9js>umFm0yUBH&`qq&0Z1d zjb%P-t?iwCv+|iD2dS{`D6qOhuvFRTSqqCB}d9mIg8KhD$&v1kjNrP!zq1Q9Zu z?K&rU+g|EiEDwHhT5eKj#W|C8_A3@M-VXG6umAfvpTnmH%FyPtXh7P1p(EGyXeo`% z9aKdltZ~T{5yRpi15AksS;GJ-* z&7PW`k>k3EYlQ?dYGq{o z=4nffMuR@N)|9>xgfsSPF)p{*uvm>?Ri1nt0!}TUrS=YTFN*t{kV?l#1?34(7mF9s zuH3M;B7Zb-CdF?TZX*ezy`p4sz*ahLN*O`bkh8`s@gB%W4pnXbR# z#%-|R2`$^e})5NZfB1X%NhP$AI2wFDmcL8K7qjc#8=NFgZvp#?tqL1dtoTbvqY7Vp?v znmDj3Mwv`!GFzNaSEQ4H6gJbqoOC3@)p1kpUOS!nhjpFTrfb`kzYzyIbw$*feD0Da5BC&B*C7LNn_x3AK zb^EQG`pyhW{$_z;y(*l!T;Pyx7&BVnaL+!=bmC+oJ5jprb0tr+N6`=&`%ajOr?Q<< zZ8OqJ)%IaMpU2Yvs{07#()LiGL7*S2XL=Sm+1eBlixg`&V?95xUt8jcl!2Hvhq#NC z3<@H?-aso;a-%_9e^{4*$DmIDFto5=002 z(u2Gi84+MhhTua!5Z|VJoeZWlJvJa+1b3dM-b;B&dTR*@88?8E0$PGh(Cdy2>e#qP zs#4yP_LSU!7f2#PYuz$|=oAPcWRT`oQ&S44sV?(R@G+=q?Ou9G29S~kEK)%&mHrv0 z^q>~;d-?ssax1Ga6_ka`r6KGB$_fV;mj6A!${e>8MH)nsAITa?bm2>_i>pk{ok%Af~emND+x=c#c^4Z|oUQr%fHkRrcF zUF!gBnGhW$BHu9bQy?l6%zm^!%n+a<6ZCs#)cFwvOt^B-h->3pa|KPf0kbU7T*Vt* zH*Ao^xu?R#{8nCm7AP+kg4#w5QaAVHU0UB#WZ4i&q^EgGM>l|SIcQ9XLoAyMLF}*t z7toUpstMg)OoA2s`(C+m21!{!BnPC7Ukv8JzO~tVYM|~gdBBGp&?_2GU*8t+`_zFq zu#^LOr6y>EdmVU@3mRhUdz;@9Uv7Y)1XR&an9+a=8nSgyMPJ}8i5$cY5aog7gnghm ztd)S=^NdW`ZJssrK+hcZW&S+{O`g9eZ!9X-As#;#JDM9XEdb@wN~_Jm>gDfyq-Z=y z$^vfrAmxyQpWp&g$M>{0Cjrp~5Q5mtBraeVhE^s1M5hB$l6z=T`Yj4PFMvppyk3n% zg_Q-^dnxIEnmX_|DIlr->Lti^jJ3FdR(#0NmyN?`d^Q zZpri#ZlJpmH0JUubMXxHL)pFD>3@Nd07?<)EqHe4B~nnH(mh)Ss&3_BSO2TRJx|#V z#s$gyt&o2Gt-M2+JW)LB8$^(ryQg)%IToiy7RV?DZR0zR96`vM#!TmnC4a8duARWCT8yfQ~ZnhkZl<^p}7Ia^HnP`Xea6_MUvSAGf)Z z{lN{meg-WO@!4IX07=q&B-}W#Uk1UC6&dFSwqYn$#kMZY0ay3TiJ!hj0p?QB>Jo<4 z@31D~**%G53wILD7Px__Qc$9{qCDjen8E&g63dtGBt9wwB`Of%*8c^u2lpi6|GvW_ zL5$?)m&ON}efOILKVYv6ELLWMX2@H2t-*tRSV988vmEqR=7f>(1t|Z1y|O*NlfPdM znjuA5%?qoj_uIaO^E=G!3k<7I3B&=h`@Nms^&K_`!{ULt z$Jv7zKx;cFsErIzsR8r!gdEJ1LKP?o%M9}u257~}Jwc*R@7VAvSe~*6aA!e%@9$w9 zw09U09Vn8o8Wf2yxhV?kweQzG0>(Smtr`^Bjd(K;%RlA4{713gVY?tkf&$q0UxJ$N z8%O~t*MM&NW)4U`xND`NdG8X=)PV9$RV|TV&FcO=lktS^Fbg5jo6aN-($BF?^ybJh$QkR^)dSa0URc{k#r(7j6++5kFYAzg_037C%Uo};r2?l43{&_Jwang<$3bZwXE=jSt`*<7tm=t6DqaZt|>3*B@)E4;C3>G|hTToL{6R0Vp zZ;)di)D(43Q?KJ4JJke=#21Zz3mXsJ9~hIn-eF43pl^^SJ~W<#(t7Sm`vjCX!%E4B zJK`yT-2#5Y4?n;X5&*Uzz#4Mf_wx^7QNxtnZ{a=t?$|{?kX>&9?S3gH9Zd_eH21uD z9dyS&YXuuKxY*p0|K9B-hu_(q)(U1%id07&*5*y!vl}($4zq{>JtorzYW80EQ41UC z$J}Gx67JaGHgK?YrNpog$9WymP* znu)n=SUP-QvmKO2_QI3m2zZ_hdd{)n?(@k4&?cY*w2A1LA`&L`{s?`xvDRB6X-5LhjCXhvJ zN1D|GesqI%4QuS~nf(~}?ABL++jS+Zjk{lba;ENB@!-pei6)%1YAI%e5JzP_t)Nt-}h4_M*k zd%=o<*N(l#0w%P)mk@LBPQL9PX!2<{P)-|M|UhwA87Ig=4Vn^B`UmU zGB0=v66{<048v+;YXcvG((V_+!mB%ssvpFji#t(Jff(mKr7RG@VE~kt1jClgux$SO ze4!ip4tqEN`U%zI(_h%kW%{0N5`g^x=%-wU2txv3cmS+kwGZzSVq!zMfn4zA0m-L& zY!}#2ViioS^lw9SF+g_^VuVDy;+%j2ychyg|0D+V1|g3DrbiGSfN==y)$XoszkR4d zcK6U>2qH!L&ppQfIe7m?35*UwbV&ZWO7uSoD?nx#@|xtI3-taIcmuS603z&aFM#|9 zgb-n#4FZs`Lu7yt;Iy3VpG$H6Ga&*u1bD#>aWa0H%L}PPjX^bN45N0RA5?x;v1|a0EhtAfXHaJd{DS zc?7iW_M8(?r0G48>sk;1TN~t_kAmDk;l2N98@vGoU^4)@xM464w_#MEJh6N7{DFZ{ zh$hMZZms`(4~Pat#z5eo{eu6g=`-*J1jzpXHiLh6lL8b1yoZ9OSdN2UxLX5)c>#eq j2m%NPfe&V34{l$a0sG@%0lJ6)P$wW7$RPj(bol=Ok>^M} delta 160072 zcmYhiQ(zoy)UF-dwryLDZQFJlV`AG*nxwI9n{Ch}jcwa|`hNen_kT8-gE`8x)^%eo z*23@C!Y5h+=A7`AFrWBp&6IY(cYbIxu8Ea>ql2uV@pvyb7$#LnLBphRh!*V-Z{l~l zXz;Yk&C*%R!535~*+fVGB)mCY zW%5+Oy#ZJkCnmTL36#tNQ*=LLu%l0s0HYv2VM(z99Ca0jhse-7c({b1 zlSfK@Z-TE61a}&*UX+~TzhV8PK!bF~5n0e=B-pah$fLN_aq(%`QY+9BH>e{(Sfelk z83R{wFqA}aL?Ovhv18?-7ZWSg$rZqUSvG6}o_f&8j)h-$($rV!Nr^F$+P5U1evi_E zi+NWYi5zw^##S0i{DL?aP66w--N~-pcCQP)EUI(ROD*hUR&O69t}FRGE<~PHVN0J( z^ruCD*-JT^cNHL7KpAJn8ImwM65t$0!DFlAPKJn%5!wk39ciObWg`_%!vas5v_z`} zNXjchdS@OPLS?f9KZumz2F`EIXc<1JR)*rmo#n^amaDD}7@QZ<(e0giA%3_|9G%tP z%ATf#Z1O`lxiDa&u!G#@jx|@smbZ6WiDZ+6kdJEEO3F+K#Ho}D^9)KQKMQN^4IP2vwKOvNA*091l=?4Mf6q)!S?dD4UUM1to|Hn)B6CCO_i#dOQ`!)NzS! zSuqd4yI@222X9=mM0HjCPT6c<$Z75p%XXjBq4`#Vt27jeXxT$@sfv037gW%H{WPp+ zLgcP}Nnpbl41A!VC$CbATImTeyEbqv)r1WVEs*T=w!m?61?Ky4dNh-=AunTr7LKGm zLU;c8OAjg3gaMi{{X5isY&g4wRk0hF9r9dwH~%6BVrkc){15*>W(%Q+rAJMQ!KcM+TNj0cnt>$&V1GZFjl23W;Gw4 ziJ>Sub)Er<?kP(puybaXQC-Ms(;62|c*xSnB=&dG;*4wt!-eFMlV4 zY$>z9&;UVfY^P^@Yr(62^6)I979Q3+yRglb8+_}KAS6uUHMxGLYU6%u)I-Loy4AUA z{LGi--;yrJE9|x)TIXDVJI#^lFQ^@jrbEh03wTz&ZeL!ghUzulpRrXE-DQKI1t3Ej zU7kW2>D7*fP}oqZg*PVhZ+IF0v0Rwe#a@|n$oh}mDhgI)?~M_0@raxiGhE6WqtLQ4 zVN(HwH4(00r;)3Z?>9UptQcwD_D<~jkEoT0JItE-TUhkg17l`}ET1*>P8JOM`UH4KP@UndG=Y~W3z+$!niD^52cQdb(oBW z_6{@g%N23;jz6wIKtR5}l;xmdNK?cRq#;2-c3?BUp@0&ktU?}xPeRM33_~%a{7J5H z-U(&C%s;s}IXWrRO96-G2RQynNd4iL65^1#=8=TM9h-d<+)g`S#mXueh zgo$nP9%6#^1&ve!`bY2?Wzr!$+Eq9pR&A;hoo3}F5vu%)9ks|nI%QHor^)RawAyk; zG=SUnkCQ|@B))5aJB7JOnnq`K&PS5qGu$MCnbxiJmY&|D6|}mE17LluzVuZaJrA_A zlB?8(5hd1>w=rAEOhZjTq#d#8Z*`@E;O~ed(pb7sUu9WQA$eu74o5A@SH0J@vOAg& zwDsVb>Q3|$`OwdM-&1PqEKcy+Zv$m&Ner^JmjiWB_6%j-EG?UOj|r0eMXD|tQXJ|R z-t4#;#q0xPT}g8dw15c2rTs4OQ7ZjMFwe3R9~rxq9kIEG+1Ce6GH-TkfT2@Ijf(JL zfPYud7v!T@fHPnEoRQ#)u$@P@RLWRHL^r*n?;gc5XJVcJpyQ*GHBGcKaA2&SC`P>V z*~-=CVNcSZhXCQYko$!5ULs*KDEjx9<+e*Z6ebZ}D(ORl z-`^O}Ol1!`(Z;T&}^8C>F%KJCuvpC`DI#Va!Xvt5{qONUEfgsmBIf8;71?gdbCyjY5v}4Fm zcUj4&X^+WZ-J(yn(T6JZwMi5qW!EuxOh}+|MGlFen*kB~(Vy~9VJt^q%K1?o2SNJ} z>~2eFhw54tWZq+)0#Bh9R&!(sb9-DIh2(r_$@COqi(46v1qq2s!2!MuC2b<^52^)G zCy6n(l%-8bBVKr&G2G2hqAF>}YjCN}0GgkP!{24=52H~h%}U9w4&gIiGbLx=uQ*Uk z!Id*R>Hrz%3mik;DYJ*Z9s(wcu(i(u_su#%su7)rhqYp?{VXx`%r!fyG1aRjg)U4^ z^n>?NmiHEZvq!I{8b1Zhv&kT5zD9_#P5C^x4@a6f+Msf=y1Iurj=ztgt37?(K9ZNZ z-4O?nNe^^hj<*l(2pi03D8rvG zQ*OUGhVS%|@~x3thc06S$}3p|8~Imc7V6)YwEKTpf58)!zR&Kc3k3w&eYLM8T+R>?5L^fGAe4Edc_a#Y zzn{O}&FaHdphGd)(XXJW-|?Hn-J->4VM+xT&p{%}3L zz$56-mht*oqg@se0#nR&F>C&(AnHf_tJ#uG!dNjXVOUeW83Jh zUgk-!{s$Z0w!dWN7K?#grW1AoMS7omv?2gLTL9(c8<}LTNX4d-b)@-*pXH`h<`=-4 zv7ec)pgPMg-5%xes(X#Ve8zLr(PMD3NeZ`=I$*7o<7z%CQJ>rf;0(J^09SX#x`Iz>x$oKno{Dllxx$_qvX=)Jpxff$i=-IlR|lP5}}XQ^6wVt|H6Ra$XggEaG)^! z8z>ouSzz3NX^lBobSd=ZOKS59ix+%mDoA(=FjZPQ4T8kbG<&)*#8xwC8aQ;Y!y>$k z=8_~2E6t{+*F8Pe3iTV1j)Uxs@tpm9=!jsytzr?SKW1^hlRJ&(E3lb5Ap9M=+JUfEC^|C2=6=jHz8?q69lPYN8@KUmTS05Gcy z@Cm(0T5Q{FseNVNg4xRrRwiS8SANJ89<`bxJ(AXyp)$EAFXgP@ZWl`8qhq#EHdL8Ug|n_Mm?^vdjZrJ2 zvJ*L`AAL~KiGaz(LH8{rB+$cb3{ZP8O~JIaS&X;94@m!dHNzGPa@9;;CEj(c-hW*R zPAmSx$ZRW2g%Ohf)g3V9jsf+gNtd~km+nQPA&u=-a4v!l1W2Qs@s+%;ORESOX$klB zlqCvNb@HlHBFzJY_)1uVC4u3&Db=m1L7)E+WDk{mnm#j*Y?{85LlnSJ=gJhN6@>Qm za|PL=0DXM1IME|XpKW=X1oiNPc(Un3Muprv#j;m9)LRcbh|+sbM_;K9(4_Rv)5JBkPC6J1H7S*Xob%TX92N@ zsW11=-#&8Q{I|kb z3(SBnHZ1`3{|*dhzpfNC;J|?Uk3g6)ctF)ttT70|?UM~sA~Bd@mJ9?R?v|c3Qu;Bh z0LbUaJK)y$xO9^t`>d9&8&t-;OOfH_Us;jA8g2_4Ww~n5<51E8!6CgkCn5W13pQW-FOw%9VQB zMq}V>z*qbbdUy|%3IOZFsmJ^!E{GY64B%~i%li1^9Ki9)nilOVP?~hgEH%`gn+Fr% z$Bo3}anM}c`F#h3i#m0$mTW#x3Y4pO7&YSxjuzBg-v&ysc?M)Hz1WzFK zzVo}m@ALHYQpR&zI9qsgZBNXFgHLft1$uSoF2mE%osG5x4)^?- z9MQDLviOQU2-mb6I8^!j4IXQZM~CS7<>@%BSfAf3CK6tiAMYc%ekGGgUx5(sUe_%iZ>0>+^o=|m_dj*QFHtm}ugEbCN@ z9n?iV%JMuxyIv^ssLAlJ?2M>`>kifo$63otm3%YFb)g;nM|u<*%R=;k!RRh4R>>+) zJ-kbQK6Ib}&+ZjqqAG3L>ArG3jBo(Dz>Iwep8%EFr=Q!mAd<-x*uv9m*pzS!GbPiJvDMHH>vraB zGQd6feHv2`cHw6@4(1h}UGh`|jn_AZjiXL&m<4XU-x(8db2G`58oWqhevvXB{Q3i0{V8DlWl!AK9mQsf!02oGZd)Rs|c5tG4bt)I1P^EG%ET1%Spr$IK z@kp^BM^hz*C1t=~)?R2GOSat4N)mS67ttUJ#AgN@iE$2x-X2ZEn`-P?b>0mI3Vz^@ z{&as*N?Yc?ti#?YU>-cWmMK8Og5#C2&D>5AVH≤2YwJrrN2oNgXdCoB%BaR0_*M z$F$QA{?RUR5y)DniA!Wt-@@Dm(QMQr9ibnwycyb!gAdPvani>l;j9pSL?E|q$9R1! zQhOnOPULOB8uC>>W93MddPQZ@Z<8q8zktCj{;*Ol)S3*gBvgHbyJpHw$nJVqWoYlq z*ugumOgjluXXSK!P&Iks7YywJD4UgokD%Lmu5Auzl{aI|tV(lrIMOXfVPrp%+as0O zW}_}Eh`Fz%R?@ziAt1bKhq@Lf;#I6KOI$^mGXI#o4y0Dk+=SB{UAj-(Z(5TXZYZX5 zSlDSBi=FAf8y%=oL@C{nDNq_D@#D00R~zAXx!Tj@K30^+3W;+uBhRP%+v6E`2 z=N3O&P+*~KgR79_FN4jtA=2Urv%Kv}bcw4zg`CI|h zg}QXuVE#|L7`&HVZ$USHbiOSbYpxQv^abz-`))fQ2AqE6jD*-JD?k>MSo3$EEn!M> zFB=Gj6E;aZ(?i>Nx}cb@6yXKt}79p z=@oF-6Rw*Z;aX=8OMG(Rle*Uw-}d-6UD1l%n%uzL!~W6`F>o*TES!ou))Lf?(Br!} zksEGB5)%Z&%L&!*`8E3tN^#ma9;)pw7gnR=ZNrjJGwUS6-qEizs@~&Uacw$@q(Q3^ zjJZz3?w`uYM@R#hR_w684Zg=H>s@;Nk!mzss7}vk0bKc2O~haI^5%ygSSg`l*!3BJ z)Dr)yP+upZwRlZ}lk|&@O|`$wQr{`9lyhQ0bMbS3cpzTk0PJ$XTPYOA9$*GE zSl;%5gMc9akDUh+&=B$k{B!W%T*&Cp{*U05+}6Y~+QR79<~$lz&`UL7Li>YEN+VWE zOHFZ-xnL20F4)M@?(FJZ2~F8e==!#}o)hr0EU<%93&HxKUHXAI>SwhSY0C^n!S_D* z_&aSCZ1p~=9k@@tSS-ERVD^U2`7{e_(O7e+rM~bf$GTIA@tT|LFHqo&5DHp9089n# zkgQgoe3Kvf85~3j5De*a^rR2kb)|hy1SwI#bAYL_|~@byUOz(bKW`C5C>yMV?WhE8nrF?FhOV z;=_PGa;@VODbHW!SiGj@KVj`??cLq9{-QFJn1XQYMA9WN14*+>mca*-EHxc#%taS0ei+0E)kxlw`tD z;AfK*TU7dCUvD5(>YjA$SUGl6eL3TUP_nIfMsJwlN?`P0MdZx3J`wizGFkQhH*X$K zL+lOWmy>cxBg=%%+lWn(=B-A=|!WZnYUgM<}o2P}#_86|lztX$;m zJn^W<@;95NA-;ug41fkJ>%F5$AZuBFWaS&M_^pCf2NEnd&4a>I<_7^w?NA7*`xf2<83^5(U z$lzjE0&No-Nz~2&%D5(}FH5ezIi^Vs1PuxW-rF}Ir3D+;6!9)hi@-G;px%WeBTb0VsLZLLPe{ahXpErCW!FP z@x9YYX?y|K{r^02LO7C;E#M>11#-Bu95@692nm&n2M>A7KyfGo+^@rCk*npbic z+Ifoe6c>5V0w~v?cPlSXef%}H)D4|@ojmgTJa+h>Ekz>eqjD!NPtCDvM#+A~%UT++ZsGy@p*YLwm8aW*4&S$cmXu5F->eca;EioH}qK-Z^lz%?-GD4fCDedQkV z4S(E;mGC8v=Nn6NVmG|5HqsLZL1zWs;rhX~2m$4KInnl{i!Q|ErKUVN$Cv!@aXNdM zYm9vtWjmBr&mk2+oAPKGZXGm-{YdYr4+Dnje4^!x96&Hnu_*kT<=a?o>NZ_sBHf2F zi_rdfe7R(qPp|rEPsPW_5$U_-Kr3^SEot6z`diFWfoes^Tp7oo4|mnrsh6njn4E<~ zGpX6XokLEFIC`$U(eL<#!qS~hpaqZt&TNkE=o9=ZUsamRSF>Z$5j7#7JIg%rFTbb4 z{NCRmcK|Y0DC>GcJVJ+JH?GanMJo8KDPwa;`E6RN(uAzf5FWS5mvFc$c~p6yKK0Nx z%XyvfPvm@qmi=Z>*o6f1Y0_{DJw*DU(Zjr2`om!ns)vSA&hh6F>`t{JoKY_f-$HI{ z*Aj6IkEmwB(GPK2?`@;;GaEdxBS4`T|LRPh7z1cW`EaJyyEt}B4J$S1e)(z{?OZEb-d&S}_LLhT@k zL;$-~R>Z6D?#wUn7e7Be!lQrhm6=Vqyd}Y z*tXuImddt{Eg+{Lwg_p=FN^y8Z;p2~8qnq0W)0S-tXeaR-4hz@D&xJ?u>OKiM@zuL zRFUw6Yht+S3}IqOiSKLb9jA5)92XtTfZaW5piBO+<1tE8c&C9 zG7K2(?rD<$)+%uHK}*IU?8`CooVO7Vdd!puKf#&oT1qSnm_8bpUL7`s!Nt(X10V~V z`tEc13_qSKt5mHpo8nwll=88*A(rEPXv>mDU1*rBVY{V1Wi`l;lnEiSHpxE#h!x1~ zkqdJxnYs2evLYS=ys?G*H$uHNc(8AISWLky!B3$(bR%R#T^zO6wiBzdU#^oIE8N^> zVA-ili{}=*0{+17PQE5O!PDk^7Eno<`fBamo-|Fj(elW7xM}xHeGL+n*pF_1NKAL8 zCeZ`My6}4kD;MrhRDL;^6k~P*6dE({ur2JfTc!US@=ZnJNkRk1$LW7+;e(O~pfTf$ zFM;xhDVm{$!m6=>)+!~?lt)?pCtRI4gq%vl9aZVlzy&LFJOy5QQv!q)Of%cN8EpMvF@t-2xZ>oln@wWwTK zE(u-&(ksZyi<0uc13GoY1yNDdfZWzy8LiPGV()Ll**=U``w%rVs>r}0(Fvl*(ssed z$`u=a6V>3Y;DWh(7{{cVCTl*1qdFpy`)-|i@YEm1(Ekc^`K@J0S%ruy!NpbwDJa<> z)+Y2-7@hU+PlgJHWXvuQ;{K&-?{O!|f!7LzH)Zt&QeC4pUhzNnW}boIfQVKq*JA~7 zCB$x(`R|g&0R@jCGQSpy!RX%T22k{V2M#%CXWU`OC$XVMED&2~7Flp1Xou(|Y0iWj zM5&Y7d8yU^NFMb|EgDsAt3n%k>-}V)SPuv0dz%1(mET;1A+i%N^V;{K18ro0&;1<1|0~-NlewQ#}tQ{N0{I zJ9vwD$^2LuJ4E(ZJhfZAgZ9+Txk*Opk8ICs{Xo8I3RYqy6`fK8z^|3ieb9uOpR$gk zd1G)E@7WtM-8 z#W3))6u5N2kx=>vf9P}d7y*dXM`CzYibA#e@pBNu{wxT*t^4H_y6@i#8i3LAK49|} z+QxVP=664F?n5rXgU*}&)NiNx)?8_CZ35SFFFhB`YYsWyL-8_(ePW+u^Skm!x!T>$ONaq!WGuw`k8W` zoU9TA?WxtFI?7?K0U@61_nIko5$%A-?~ym&>y>|iJ|6r8X0qzxm2}_O*toPzpFiEc zanR}L&jHF(Ii||wOh?4Y364i>C+n+@BDy7`Gv(i(y{V#T3pM@G%%e03nen+W?xKq?4cxx5OsgK2#QCtt9@RILGMiofP)twp8gbX32dYM6STu>y z$2Cgx+$TRoko^PKeHha*7$+2!depIJrje`;xrzIBySg97vLD{?{#pIjzGO)Y<9nvl zohhuuog12hkzQu|3T5cOPXV66uZ~@$;_J#Gcu?)!w^R$Wj@<^wBo;JVhsMyBjRq8> z3T9K!(<{BD?YAzzJ#p$IXsfud>Mp2~!Z?;UfNhaeV}G!x!gcdIbEs($5AorBnOh(F&M2KZR52;+{rtF0waIzh}Z+rC|X z)}y=hwJr#}qw$jp^AS&A*AWvb;@52M-K6Z9ZDJj5(jay7H8x?_c^EEJ1OJs-$_HgJ zZUczZEdKJYK#*C90P=s|kfTOS($yR#Z@ocZ!^qE8*IfYE8F|9Hv+rF<5vs1tx*~e; z9AYi{II#$q>=28599WJ$Y?kqT-9NTfRy9yxS73YyYQ+Z1&{5~$*LeapXl{>Ltq{bf z*4d2FCvk}ce`|D+r94FD-v-jRL#Ig(&yO6{Fm+Dqwk>Bf0y_3x!K2Y41a`@~rBkQA zVbh_JQ+DJaZ1@24i&eLqZP9LCZ0^I|ypHG3fw0URy$SvIdk~>ubLbk*E}!)D)&uI6 zjc|Niz7G;nz^&kenS3ES2$99%uq(bM`x81TINz22C5TYCD#7iy*onh6AH+*$&Rr{T zP5mf!*q4I8fbBEogCC-}s$auphUQr<`f!|RpD3#f^m3*{l7Aw|?H5+GnrboKe5ykC zi3*V4W`la8N6>|e;1-UArvM)wFrGiASzIZv&Jwjo@4a=(-*iOF5a?A3I=v=g+~8jG zVSufI(5M~t3{zeW8W*k5v7lpDuq+=uW#kFYkE~t_z+f&X4Rw=D47qonB^SeBZd}zv zO1GH-71bcy+MQ51c0iR+lH#$lbZsJr>W6YCp^&&F9N&}l_$I;9>(3~Z1=6V_QTZ~k z5o@&0I|5zbit^|OJ4{(!;dG#-$VaK|GJ-E;I;=|qL8T;Y$t^5t6MEvA+cdts#%C*ocWT5jYN4N;bH!-RDcF&^0$cpm9F#H z%3_wrhL~-X407Y^03Fz8fNe{6u(3zvVf0Aa1$GL8qE6Odp#w-DFVY*SSs#4#sr*g( zzP_&0N+_A~HTfVWwZpI1D3d?<|3_KCK*O+6t~5M@r|k4{rff5b0DzOg{H4$2oWmqJ zSYaL-jzWZD$#zxh{P}mg4GM)L(X52FOT>IMMusla!*xRh*b7L{LrSwqpVV(VVG+k3 zEc)#9cN*n;bpsCe+>O6B-So&}?KXYJ`*A91c zC_!8yOWA1k4-r!RoH7r-g5Y(6-QhPwY;%4T3CI)eEH<7($a=6AfiHf^i(6+jDp({j ztU`KW&t7Jiz1w3{Z%sLaO9NM*Hp``(`I`Cdsn!*;|b4Pjm{UYY(2?`>PpGEl$ z=_n;9vo2hgSJf1YLd6fS$5)pdunESlh1BOGk<|c;m~|@|l;NJU6+YOO)lEY6PG2dm z^So1TLf$)3=N2j7dCxq9rI zi;xDt*V}!yfjjvNc>0_|(2kwR41@JZ9 z-rIhc*_6lc|ImMKr(4W>FV+kD39#>tWoav6rUOF69xChlUs$3p&T?lZaenaMM-Z-_ zP9j~>Ove_wo-l4-$V;og*mlSy3=XZMLp!RhTH-Ja&NvD~4;rXhCC9w!vwge1Q&4D0 z%Vzb__7D-1l2aP^GMKYmo$k^aqApNUkA!AkvZbcj?9bR)I~l2@oz`)d1FQj3K$UT# zX*_{Wp6V-aH9PH}5T0rAuaAUM3a^~qQHOONVjod_wp*Kbhl6scxh*<5!flCqmfF94354sQ&o`dmRGU7YGshXwou!fLmCSQeW`e{8$U$ zv+$-Nrpe;`2OCo0ciaz7`OK>GG#1G4tQ%8DP1;B1x8J7EBV%;)5P=-w`8>l5_M!EE zWyX#2kN`bUW{Cfn1_Ic50UM6^BiK)`SN7+7JYN%NCH2ji5KPa?l&1WKoiMbt3f45` zwz3+7ah&{a_6eSXW^=Qz$aZ4O!mN1f zp`}a5iYK%*@9CACGlK4l&MSI_Zm@Qk}I{~_FXz~fNV#lj645{b! zW{BsH%>(Ol>3OO4>uxI0J&2}mp6h0(l^_tr3C_g0Ke7v-H1CWYU-jgrq?F>MWAN~xIN$Y zw)>IBMV^nH*W^`sA6XksC3Rf|zIHaeVf0>R`vo=`T&Hlcb&NA>EN5ohY%E9V{ge%g zfuWvIyR!)gxUAi-!Swrr5enC(8le!Q-{=2ijGNd{?6>)j;y)kj0~*8k?X5nnC&UsO zuRcqbm8ke;G5}U6)Q1(?ckSuP(Dx3}IVI!aLB$}eOCqoyDd!}UO<*rHqShknx;~p3 z(q#~8k+)Pn=4QSNlye|e0Jq`?iE^eD`Cq9Nq^_3rr%&Oyr-SD>`giMowRVta>w^{R+`68iFCJ}qHg=ii|4M5vaM2^-Nj zTH1*HLkbz*^=vbF&Fs`6JbN}y3IEZWBQzlkj)8SI8-QID zO$5j#VE)|^(P$sFRuZrG1vvp@#{`iJjnoVtUpa;*2Hp+6k~}rc$X`K*7yC%MBY7gY zy>(9AB70}gI&vDtQHh~=Zr)C)t+3LCPW6ZRY=|^5+^h=P@-4vaK!&#)(P=|q%4{wC z&UAUnCTA8i(@l)mi1>L%DlxUsrzZ6a3Aodd|Eu_B43A^@0qw##sDBk-))YH#UclTx z(#Lv9v9K{;wfp-?s*)?}?)s1PqZ)vuUp?$`@&8Dlf>Fi=Nc!o1=RZV<3I!izUa5MX zK*2Dq>qe4`D5p*;GG2FI#`0F3dOy_t3feyPn?AKeoVKgDF61d(`6?D}c+O)l!l`>| zd$1R#Xy6`+d>jB1_HANm*xc524&;9yi0}n9)`#iEqvTZ$OBDU%`XJ$Wb(RL-&Y#_Wz-1_p%^JB`;UpRgJ zvaPrLs_U)Ta5&`EvFe5LQ8d6SfYhkhd%e4P?Q`P!p>b(NidS*`M;wg(=>GFC;>Up^`K$flFsnaXj1=R9PY@~ znOKtyRSw&zS@3&Wi%yHK1Fmvdl5OVztg6T4HWLc($Q>`CFscg=|Jx9`7Z{b*pXDWh z7+(1|-m@PWJ%$E)xu*EZ8)vu$lofdHA=!XKtvL2}aJ|(hT=lI5l2M2{I(y3rvGZR% z$_x6e(3slsqCz-@jnlSBnm@*i(Sgm~i86lWXfdH!6{Qx9jYJ#)?c8&sR9wm0eeewv z$Nt0hK%#2t*wlT;LAf)74@PqmEacj0J$5%YOUJosMkbp~0>!;erf(Oag13m?Fn zh?7hHeuTP7ve0wS`?8b5^F*M97MX_VXW2@Dv*5-?L!y7>;fpVXHz)2k!Hc#TF~88O zyKTZjp&*vvL0g1Mu@Hd|(L?8+qZoCkx)0qT$VKm*Ff;rEiQR6h2``>9wi2$1;y1S( zma@#`1RTYKzm0itsla%;xc8bTXc{1RvA~o}`H_{Mz+#0s3EN3~O;NWdze6>>+TDSl z>{%_LL&gx(gJbNa(N+n$n;9Rv4<|$VkTZXAgUY7*tA{!C-l|R4Nco#7-#(vU)Je4n zYj)^mb;P3~ZKY{mjfl*flq#Hzd>O=4EzS=Ci%vFHqYjS#X11GuEdnGFQh>|W?CQ}8 z?1Ja9y}$Svteb2-#`UjdOGsIV)7Pvnuo0nf9Ru&niBfIzXc3@txr>&{jJFmylG5_3 zogQWzAytD={q<~AM$Veo<^1NuAgE`=L+D}n_x|U?SQc2KEhlT<+E<}*N#RKYP5UQO+Q+?HR^d|QpDyyx z-}#%%=xqcd;ey?KCAz@>J=MKhx}Fay>dGb^ZWYF zP|)Ys?)m5VIe}UU3CT+<*Jsasdnt)f7|?LnCNR8T=g-(@QyJtJaq}+8BMKhRkQ?)=;KUU#)oNtG<^~s>6coxrZMIJ_V_(b zII*I>->g0_~WiaS88D=zyGQA255-Du`%f^n2?idV#h&E58p#TfsxV7iT&yr@Y+F| zVn;Nr4cQo+PC%VT437Y65qN-*9wJmN8=JO&X-`(O+@h73M|+t+bOztv5!i-xeG%f8 zspmBT7SImwS(qB?msz-plhaDc+U^;(0rcb33PU1$JXp6E8kL_KVSv7Xi@1S+X(%t` z#%Cz+NUD=5PZ|Ke=UlyT*Z`FXK^$21n=S@@NYq~#yZ?@U_ztZ4St>k`c>B+E`@*_$ z)yYcU#=CpFp{Bp&OW@>>)!0ZNpGf~_4EQQ_3JQrz!o6NLBz_iEKFAfJE|6kVl9x8Y z{daA^-|SvgE_=TWyf*MB`JZcpUEs9=c_}%->U#JmXlWAr8^6LoXTb8XiqbFJGBY8r z=^?&G@t-jOitLX_uY9V!JU6XDgTykuJ1Iw)DO*#D}*&iVfZjWhAU5aAIaewk^lE6*e( zc_Kl6J1{Xg@*>UzWzsPjQAZTRLQI+qyGqcY)%Wx7<;l$)5iiLBXd=%wMK`SHrMP~3 zQU2<{zqIPe0Ip{gh7C=+c%2tO2^}VKs<^cVkV=vue=R!}x|)()^0l zv1PkHx?pP%mIY<8_La$^O4`W#%=)_3Lmf&;fRvthEfm}bM(4wos5t9G?T60%o%7AEWnsDZ5 z9^mo&srMp2qawoP*A`XgCSyyg}L7$BPNbjYkjWq8LmNxi1U6bCPE;hLl zI@;+3&w+3UZ?G3|U{IR#I_djKj~n+=hFQ zC<+^V$Z&{nW93dBFNq)e09zqd&a_H-DK{nbjNta=M>*Lk?p>PKtUVlSzBK02F>(`3 z>w%ICXeYZ1K@qi$To;l6l9-`By!wvMO5dq3jgU6dG?XfnAw#~NSi1LSrp20W^D-p- zo6t_Lei%2p&Iv#$@6tH|YwjVfw{y1gUTx%~*p3TWhwuM16f^TJ26Gw9%R=Xj$t?V5 zCLmA_?F*bJY5D)?(7;YD=PR=4jyTv3cuQM}x`ve`zxd7*-r=&T{`Q;;yN{`4%HLsU zC3Mwgiag;c#A7CJYZvpK!_HovlwyI}-qKcFEZ#2}iRF%2qrv-V z$$N?J!6ub*k#Mn3e-g~Nuag~;Qa8fdT*E2Xv*4z&+PQ4E1Ea%abq>VY%5UMSrG>-a zsf4`R=1()vrzEG(qt1$wI88W+@n>=s?Nvrco3bI%fTr4H3D!{5Rq`# zE}q*`uDU4dUk{uLKYRyld{nrqwgM<0VS}!=@e@3(&^ne0>eKCs63k*>86xq!0akx- zI4pb0IpYA%^YJd8gW+nY555~WwMR3r_u)%YK&qe}aLAle48zfiCEQDQ*$dvK8^*^5 zo-xuT5t>S4V!PZnnP>`uVBdngu|H$j5{5_LvUmrxuQ{UB=eo+1FBSkh3EJMOI#hOw zutMRUO<1G=Jj%BOI24e40x}CSB&*gAvwnXTUO-cy`={KLGht+I-*c+sRSbuw$Ac;D zo3Af6*N<7VFt*a2p~OeDHT%?UtZHhqG$ElosAKxKXt#>J39^}{AD;lDP|?97Wd$=K zS(PE@r49zx_uKb&yrJO?fu_}rybG{!!lW#ZcLqoF>cm;`&T1DsWT<*3R+Z#8T*t?p zQGgxIdRkAImj$gOPc!GwhnO*Il6a zRZAN=A9eNofsNUSE(ex6O>r9_Ay5tq2fuQnd*OhIuzjp#2q@uwX-}!geK|ongqXbq z=v*5k>JH8-vQ^zqOtx|ix|>~nIzmN40)M8nPA7>D5t%-CrrX5ki4f#YH zh!ENxz04m%#N_1Z0lsAB_2;L%xZz}_a*F6+tQ+p-6iq8ey+2y8qbt>Y&y<&5gZ@hy z2eW}GBQZN+Rur=zo+(k*iLfn+Ja+%&;xhfMN2PhluZ3y}`6oVoL5C@~ zGoas~)gjNFcgM>5us-*hykEc1ttkI=>N_5&efje)fsfh6ed&%=c{CcSPdGv03-RAD zK>T-Uj1g9G`U>O;wEqY~zu-TDP;gq41o{ws%^Z#AoO=+kcc6VX$Pz(BqEjkUMUi>K zHuD@X$s99dBigP~i_ye#j2W+dkIE$fhpDq*s47~!wTRLoB@NQu-AFe`h?GcocP^w; zx}>`sq`Rf0yGy#e?gGy_-~A7J&o$?GpYgl`>9vnhkCB;tSI`?%8lQ?O)$P|(T?^=4 z4V}OjFfU8hP_5bJk;Y}2#xWaMpLmoZzJdhSP8kPD@ccjW+T2yuCpGX%0W1O%TW3q2 z+FeqA9zN_NGs@gQnA>;aJP#aMSIB8A#z}j~^ro-7>TKj}FxJBk_!U(o^hX$TgF{%K z+8L9cAd#h@??|o%s>8tt$ND|Wu=zaMH!d?OS%oK-$V|Ohu&=1*gkz1*AF5t|ugkjM zI<*R?88J{|B#|hwK6?eQ(*I$1LY(mn(?n-(qj-D=X@F*QHWMHFM3UT&F%y#z;v5Q= z^w9h&HRi**t+rp`%@nvF>7>1{Q1`cFU%`n;*xIf5)-)2im<5NKMsPp+cvdS6()nem z>Kmug5PRRja&YxB&Tx2-jabea#E5a>kN8tY`d+(sirUHqJyqbxrE>f-4m0~EvyAtH z{SGx+wI!cKyxCxA{l~zIT4d;6g0f+0mmUtKBqB3a+@?wU6r@0>ha+R+mRF7XKaZDv+Bn1UB!JcIn9IN9q{#g;Y^F zaI7)rYToSsP~ymd+;jO|g%E4O4L?-0*lX{qioQcV)i`gBIEQd1cq-#IlQb-*Qr(C$ zyu$nC1e(n8jhShj&cP4!vVaE|l6c2F=CeHAbYdXps2<1~wU!82WnCD@C5jb})eBuD zU9(1cZ(-k)h@VOwLlt(^%Q|Q=ZqfGESPJh`dDD$bk`{Dgo z<)*Y>e%w?a$`JQl#30@KV9sc@xP4uQqOf(HQoIamOCeJRQU@Cp?v};WjT;$1$-Bnx(+D8D&P&@j$IT4PJyw}#Z(0AS zw=O?+ozp*cLW4ao`um7eNRd`mMiRg#o?Ada;8O)~Nu6}6*oQbL4OH#zCBC|F#U%+eZ?sH&>m zAb~DCeYN0>`qhhi$%_X$Vyz<4ZA`Y{J^M0Lnzo%6cJE&T!lRTAZgA2Jv?JVH=hbQE05D5 znfiNj5{A9k7HC6R)KpY9kX#yS6SuB1{drmxYxDTq2eRrlQk~y8(S^<3^{d0S+@E=A z9{>YIUl2FK%F?sa06T{<{zj4isRUyFSb10J%H5U2Ts+k!=k+mmio$dzwJ#NEE-U{t ze%P(Y+>u-Zo86zB!ZH$s3Vs+)TnjVUB0ynf6b$=7ohNkE?WJU!o8~YlVB>N1OHwqDgj|IMmiWkzKwK;N($d_{ulenqTWf5uFF>6i7xIwolSEgdI=U zHV=#DlqGYZ5q_n|v@GV={oNuFzGL#yh=>k$s<)1#Y<&AtEbIgud?dZ4hAT$!r!7K- zIk(z6^S<64OyQxa06lKO;@91w+q#tg1l$-+X^ z!k8|10)i@!{mYMpxS}flQ)&E7Up;5~*uPCyaFkbeA{9|7pAgUDBa@&i;rP0u>31y3 z3AMsT3wi+L?DiYQD`#+e_<7LC&=>Y>DxGyt&f5>rA7VRmMA@=f@RhDiwbQEh&8gTH zMvr$XGJL`ttx(n^=_h+^IdyXn4c!=A+*W)Gue>+?M#MZ^6JJl)&45xwX_euSaS22e z+4C?cah?>Y3IY!>h>ixB3iS+`jkXHpg=LtH9HPV%{M*8f)%n49~=f0u+k;Yq@>p*>Li?4`mvJ-ggy+4AY?IQN%IfD_mlHx!-sDm zJgH72R5ZI;--ZGLpwdOs79EGc~nQPGUN+=>`YL2q@P z4I5K|zFJ$*@dW$dhl0Hc9nS@L5JbOGGza9Zz|jQ8jgs-d(FB{$qo6}bCS`;$X}75w zdQCKESQ6C7{oEisl+O!9HN@SqanfpIAbY@dF`*$K*(!O&he7#AqpUkPlWcY;C+~JG zadC8i(2XTLr&jbXT=wot_8N}=NC6;@bb2SuAhp+W+^CDbpO=gr^_dm>?G^B#vq3WU zVTmv-Q-=mMdWSWcHE)QoC**c+T%+!2rh6d|&_cmfL9T^k zaO~+BPJDc|6d?6X9!RCGb^Y3VLz{;+&cFLiFn>`~R3kN$gE)MF6B)$XA1mI}e($@P zWa0Lt9Q!i6Spsz2BU^S@dU|-r1aba!7tcbss4{GmhbneKEkGUfG~*P&I)DKCi|&GY zlc^*x*mlWz z3zy9ZJ^dFG1h{$P!M_q`GCR*|^vQS@$ze#<3hx0lfT&Nw@O8;;GC_h!C9Rzu{NQ=@ zVx}x`dm&PuY`_{JtgD?&>-Z)J+6YlMUkCgX|EfJ zq8V_XDGa9K@vSdN+l9rwo{NEm&#z$ryTwKw$fJDK4)g&PjkH-sPkbk-#K|AfyRaW&@Un|73) z#Lhlt6HhEQq1V1P>-TbX9)z)@(}L2mq?*Uot(%NZw#4|ofOhgp`<(Op0^i{{0Ah&` zEJO49p0Pw~p@c>|he3(a8U`y;otxP+h#pKETvrZ)@yG~Gq6+3G1y?OF zbEJK^tdCgDEGm(nKpQ73>OvdW3Q%MYYVO9J<55x0x%~xaaPV?JSY$4C(e*t|*y&4j z*&T(c>Pvhof$Fe_C{DZsT>JS4myZPM=MF&-!3WJ(j%B$!Cve!->X=63GY5 z5`LZdRXBXK!C0BPef7*GZDT2bTv8LuV9!(AcjER2*fhbSUNCbc4QHwIR^t^B!HbMNFqX!(jNgfFAYjW}#V^12frB$y1Yzef<2c#Gd17eSao z$WEZOUwe@>CaE1E-Wg?KDizcX=;0JBCBN<2-1u_5V~J}?mvY|^PlELhX;GB zg>5}x`64_ZrCAva`tAy=whv|fVUfA#n|;b`uuks8m2UPg7Jb$&mjO;UcjrFnwZ5d> zj9Q=ln<~}$GN+e9^n$M;&WTMh&dtE3f7eP}=9utBwSbW7X1ckM@R~1$rgHg&sWpr= zb;#)L6um*0lOB=6hztd9o%XiBWjf+UC~iT&oa_-DHu3h@O= z(oeL26e}kNgO5h8imCZwTuLX4{j>yCYP&4vGS#gB9ty(}b+Xu-9nX(i#NM!#gvR7! z!3|-_m!eyTN`5ZRPa{*>0A3q=H5Pg4Mg@OfjlnjYX%Uf%MQZi<8#T8N`hW%o>Uv~e zEC^1iHpmX^Sagad+7d#uB2H-5hT(v@PmJwwMZ=q-e-S23e*721Jg6&h3iCY{7+*LJ zff)E_Y=XUH`64MotwqaN#eN{&+`0Gn+@_2~lRVILFhP}I2s{apK^mJEMT z>kRj}e2*mS<>q08p_xwY!AjXEF=69PM3Ud3x{?cYa21k6&r4s{j1&j zJHvKr6Bm4#D#8h0M*~}= z89ay7pTbHz$%tpl#$c~uXgDqp5@N`urmvv)hz-KqFWAwM!`sP0bBQ(s{4{xK;!6O6yg+Zdz-~!q$=f&P(sENjj z#Z?(56N4n91IRSL5hdjUkBd08dGI=6lKgy~h+BxPM(qc$6Q53>QAV#?8`I9NHL}HdbzWf;6R4V7TM?1h_ra&a_oA{)xCW$yf}Xz zEAL)5DQQw}xPL*|z>-}8v#^@0!AuYs;Q9nK!io=c2w6|eau{A}vT zJ~_tp;1J5kNyY&}kYe<@0NYTL?82g;yrieVU=lWFUspurbhg~lgMNSQ89vfQrj()f?A@5$z0e8#a7}lWk z3cw*i`=i=8F7HoXe%=jyn>pF&@_9kW)BWz|_^<+WML&d6VYRh{UQLnhT6*+vkiU67 zyRbWrKi|;J^to`OGG~XN%4__LTe$I+BM2r{uUkH9XUjj4$OtvIM*m}Jo_O*4{*8)% z#dFWX@L=A}?h$|WVpR19@Dpitb?_5kVR8)g_w@|4EZZ1sVi~s3)>F}U=>lfOhT0NK zn<3nmwJYR^+3*GOP_V6(K z7ll5lBJ%lWmj1aN9*&P=bF5%#`ybJwR+`$orRhtgtsPzsd%K|C zHV=R8d4%`=eV#sqfK@wtaW8QsKYvPCq`_?VLI30)-<#+vGVjNbLJu{JT}wG{4Zj*^ z2@hVt(6^o}C6%!@d58cc7=M>P6O7s-0U2NoqTU5>j6RCymT6J2W1&bPMfOWBYj(ai z3n5p>Ldk%xNN}mcCkvQ?kyIom?(q3PYmOql&(n&S*}Ji$6DDTGu_HM@Jlev!rt)sk zr(mibv{Nd~l`8hQhCk<8nlDvd3x#0;5K4i8#3Eer4H!s(7Y=Oq!|_+(g`)&lOa?QZ zl|`Fwb)2@-eRyGy@Q-W90-PqSGwYvnD2(u1p9ReT+rUo*s#>T%p&{aKt%l5YHilnPP&=TeR)8X z>vpE?7$36$mZh2pO6zDH)X<)5QUb+?*8>03A8r5g`}_esI|yFRjy7#BKwfEH482x) zU0{Tr_BD6VYiudEzxL$N=8z@aDT1$AS%>sr%c9wy6xWPgs#kvgS`s=`5iq;~c|IjS z7CxFt;CckzR}%1*+f1!b&~=wg(^>xR-VtbBo?nhz+A0xDVb15^0ap2UZRvIf5FFqk4ejGHUi2Rh>LKK7qZI7fwC8ZuqS_{Nq?I37CBRL zg#Zks%wI`zxQq3Mi{eohH6kh4jn)A>q`Ir{BNLBm&+9~fjw@YoOaWK=kr5n z(yN_Xrlz8hJz4g(6Iz~^YWm8u&?y!G7BH;#pI8j72@4|wb3#VuJwW=(SXIL!@l!Jt zSr7?<4T|PL$^aQU1soncSNd$b?cFzFGOdYIm3>fW`4$eOokki;jyf5j(81mq?9Im@ z8<1#%wfUhpHPiVc;A;wdFSB{LsJzR8&O|=)i!iBo(f{jT#aUIb%7F(s;~loE{}y*e zGsM&%_oB;Z4AtxxZni9$83;m6`b7Q&6>$^Emkoz@`&fAYunlpZLCvHX)i^$2+Fa1; zAG0|2sNzfkuUciz2fxhc%Y`u>p}%T$r>*Sk8sTk2tq>}-y9SCCsQ%iJ4pNb!$spu8 zBK}nJVRjO=W_{-&_dynrhpGhCir#jHHQu@IDiR4>QDltLX-tv*Y@&7-8; z?OFphdyh6wB|M5j5y&Itdh7IVwC*MPI^&Oy(VnyUmh9Xagx?gY-< z#UJZswHRcJ6mY&pOsQ;{v#%24D=7Zq+%Eaf_#n!1%iOS5^>bFZL)i2nJN>5h5T(nW zedX}NO416ElWV`p&iGHz0ofbUo{uuy>sJDtuI!dA@Ll$YkG&Vt;hay3q{Iq6ioVMR za}T&+IDz!SPo|`FwBCW~#Qe)ES)gGL1(aU3Us7 zhOG^aoLX+SikfKDfKm;hxYOx4EX0lFVD+CiTvb^oO4qbD<1h~Q~#Bmq!73JAAagOuTSV^JZ zv_+u>!-jh&8nD{eK~lB_x%a^CF-aknXMc7O9oxx3_!-t7XUuH+~l+lKXZ|J+2E(Qxa?x zatvm0c%ghEU#mP0T()cF=c3@|D7RPXl)>XHFbLU04zA2?c#dZ5!v>RKKGC%ON+1SH}hLEf??fTcvfty-N^YiA#b#D@(Q^%-^N8CoQI8)!TMtt6UKcYXKZMN zgwt-kZ+n4otP3wU0&o*S)VH|)?uttNQ}09}$y%|n1(G2-bbfZJT6#!em5UaWLVram zDrV&U@>zlyri+=>_aDaz@Z?m?EP%E%Bzx|g#NES=Y7`sxQc415JbN|9h}B{tvP99P zQ>4ulDOx3r5@D5_03qw|2zhV@;o$|GqPAxi4Qpo1CTSswzz2pl{F>qB)Y0Wk-{NX9& zc2jqD5+7U2G-^07?u>MwL{@OGE5+~Zf|@Amk{z7ctxk5T+1fr0R{0i$*8UlR0*Jo_ z+lX3S%s-4O=LQ?P<7pKkMS_hf#5!2%`2v))%$=WvNz=nrr9w@=7R3t{gZAGE7uE$v z6Ur1_3LJkxE-&j;F}4RsnVlOb!xoLA>AT9hI2n)3C|OEF(ZAtltr4zY4I9#du4cr$ zS{zLX)G-l0l+Y`#N;l;Utz~uuV11-V8`$@ONLKYr(U@ zBpXB1gGFM8t&%_femnKgtX5h|>d7~*JXyO0!=0p}W>z4%i`jD#C!5Xz#N zDcv?3^;xZeCst0y1c1B+yzTyUiK@bi@;na{L)?~}NsIPRE332wv3e<~vn;+k1PxR) z6vIA(@p=hqF~`dlGh;>>_x|2nqRYHtM6FyNeBJ#*qJ~TkA?8!E2oV$lS@zR#yFu7e#4-o}4DaYQB*L6MB8U0CI&F{;)vi*0 zqq8(Tt0PLC+RQHvLo+26DA7GXR=1Rw2u7L(TaPX00ldOug|~+V5g*kiFL8!IZ_AD+ zSzIk_jXuHMCjOio_{6xdMBAMchyeSQE)Fxmv8X>d^NfT)tCtrZB*A=i!hsop%%@*a zrMdi+s#Cyx)WMU>qw^Ji*pC;fde+x9{PyFjr4U_5U7%SpLOouH5O;Rro+bvhj;koi zEiqTSU6r!r58+Xg?7|a)5-wdA)s?ZG8s1uZPGG;V&tcT%>D_?a(IP-}G$zoOs$4^( zJOv1HMb*y*#R}Ls;BA41)nK?*t?@tqXIP~rwxPfRpBN}F5ClTjYYz0me=df&_il7G zv~HC)`TCNI(T)}$fE+w7g;?knF^r>sV72#}SlHBF>^eB#q~C2l*tu!AOPWd|+dgvG z9&xyS-vamd8+jzOP#ifodWp$!*`f=GYXvCIw6@+q zT;KAk!Y4hFx#YsV4(M}OKc0<%Z$vHfSZV!ki#7w!lp463l38m{i*~XPpeOnJizhh) zC*?9xEbBykyKLDh1D=L@Q_X*_VgV}IC$7tzhJK9M^pQn!CxAKokvo?!zPP-PH zrvchdoa(xU0qjouuiXT+J8J&$CbLuQNW`I_JS$d>5rYK(En3ZFl1z^tH-TJ$Mh_E^ zZCi}dGb2xogqe|&=N^^S4lEu>g_ce8eF?aU;h{OSHMy>brO6N}^s`@LT}=B4jUD?l zfH$jvKOb(j(wXjhH4GF{$4ApGZgcd6%GTqNuWmmu{;s8fNE6XHcb%9YCOe{l);|B$ zd7zu^yfDu@^MEQ&)p~ZS!0!r*VjTd1z(cvCql1(0&Ro2M(W~z(d&5&L_?Lf55;=6N z#FH1(m5!IpJ{2}qeS_~0X!^PoVz@u7Vy8SbJ^H~VY=m1#yR69*`m?f_a8obLnFWii z?@dW1NA`}Bym|1lpKAyVDC6-(ilj{%8C-a`RVHk-^gGJEFN$j`zt;B#H}3`rqP-bz zWJLQsOJJBl&|8vNGMncI+LtS&JyiWkzJ4J2#dW99m)|m(==46|3qO~nNY|-qMvkG$ zmo%Mf3Q)f6-1vw6HWkF92CO=zDB)tR5`vOLeEn88lk{HgOw zNl$H!xHAq^x2bU4m!{7CpV5)$h=T|dJQ<$;D|L#-{!1NQZ}Y#dmeRQqDHmvEXxB** zdQLDwD?^1kXl1yTKgj)$m0|NxLOqfg>}sKUymYl{`6UT61PRlx_yy@jUnZjS;6!vc zGjVZtb&zAZR>L)^*0a&#!4xu(QaUp z7(J-@@+cgep!WQxF5BK}1;Y4d{NZ{7C7H&=i+L_@S)9CNChu4a$GP{E-m;tbi4F_z zkIkqqD+!1V&~Dm~DFmm&&_`Pyw97-GCyEpbnKZNQ6NU{3N|7aCjS4!vzqTc!z|2TE z{Netcj?1zzZU*0)AFYx@A6a8CWL{4-ly6Jx9QWW$@KpJkOV-d_G~h{k-y>)A1iufx zcI-}_*6P{>jM_Fw&qimFj3SP>jXTen5ev9I+HR|`L}n-pBY_O{*0=;8V*OvZjqvCv zWf$=X)qa?gvi(q>rrDm-fUiEk3~e`tJ6cW`Y$nV@d!JE5!{*$jzn{1iz*j$x>+3@y z$u$uX*VI`BTdr~-0}omkFN<7xs8r&d@Z7{cor2e^uuDR+eXFZtiS?_nV|BHYi6#9| zSWbNn>oQ*htKEP~C9A-!4_&^P4lQ=BNL3-by=J0{?W^1s8kl=rjMotFMzIwMpgeUG z9U!ODNi)&fxuEQxkS0XZ6`&>rE=?FJ2gQ*1y=p?Ydo%EWu^a{Vt8b87r{kNcv^h)y zsD6)cZfZHIYhYt((|VfBF{|j0Ak{WkiBu8@?z2v(kM0zFbkPGxVL*btp|nvgwYb3V z)tdxkzsE>)DmM;@CW%)v6;8C`iB+v@)n^%S1$bKVGuNEL9d=nE8<93YSJDCCFh&eL^kYd|CQ{vA2j5Qv;A1 zPzLS9Wb}2w{#Gg_+1`Q|^N=Cge!f18Lr?;Pi_KH=eOgfmv1S=K5*3Sg{v7Wl94wp*_uSRW5nxKWvp(8Y z|Ea+N?tJ)dy}cyxE*6~?v2>hOl*%JYk;g+aaOeK%fk94vt#DzCNMX1NsTFj}p#9%G zlrTjG^%ZzVjK2U=^p4=!V1+A+eo6lW;O*_#k4|?qp+@8UkX;yTq5H-6XSJj;rHYA^ z&^nVcqeAt{;lw76g-3vYZ#J5eIs*4t9Y33&ofI zMM1y9r$cdhYh5*!*IYcffB1K;$X{36_2)86pE^Pvb_~6wlc5)O5RP7bYP(eU0;o3W z#cN`Qw=TflD^I2mNB?UqunJRSIJrnbP9{fo)Zu-Fo$lx==jK6mmQFvVf zrXlk&gn3@P+yId785*ZHnjJfqZRoN{AI_n5BDSkuY91jaDQtZg!d3v4C@Fo+Mc8%7Wd4yfF8Oyg)R&7UfQ@K1 zO_My2Gth?}42MjuGd7R(E=_E=;9JvBB>pEqSQa4W@$uo^RC-(1b5AT+f4{?&RCi~s z>NB#Iff~EXuZ>d&iy0|co(}df4>ppj^u({yb`(OFJDQq_kbEL(aw5FiAo@W7)~;eU z4wXx%_I7C`#{GO~oXwDGw~m2fycUmF@ZvcUgR8yJl1`Dw0evmaqkT;JlcZgKT$SpO z^8~Ic>VyO3Z11%;YoI=raATdjR!?I)nR1V2ROS(%S1es|#t;#{CBarf)%;*{u7h~2Ka2^O_ z4P)LaWSZHI;P^Z3mk*`c@vR*|VZ% zlT|H`%h3vvU);RW0>D1TowiKUM)KA2fuLka$Po|rYXcnG=2eb?t;hdUy+M?QjXbN~ zUXY3CQddzx4Uc;E9piUMQ5B>(-?uL{&KX~2Y9t~X`od9A?lzaEHZ;83D~_bR2~l@K z+61MdZ1Y^>Z1ck@`3%yOFB_l^4^kgnQb8fK=-!p=Uac%hQ|^v}SoKlAvF+j6=SDtQ zr+Hz3^9LV?7(nWOQi}NpThDziCgsN|&}F>Kp5-~yqVddCYh%1z7>GcT)BN>Bof{~4 zTUp%m$fl0%lVf_Gd)|yP(j0j~s(D{9xxc9a{m3p6yd8-KZ2z5mg0gse15ty>n1k2u zuT+b+s9JH}?j12N_#*}d!SwXCWU)k27r8bwKF!a8@`iR2KY%&2{gYsG7jx2EEFmq> zDDSj=QLH)?9|0)MYW(C--J1IC4j8o5x3a<)DOEBHjABy4_VW>_nY{%y1jLFvYtc*Z zvJ=EP|&&gG!J^`>`R9Hc85hMOdDTno{KVOLJr3tegFY!$UGOTYr=k;4oDMgTljO$k;b6|MXiI^{ecP3J{d|HFP0A$s5@cniBU^fmWCHP3E z&y8?!I+A7chw2BQ020wf!;j=T!&8&9lA{&$Rtz9N6^)f;u;jm#MZ*0a6vXEYju1jn z?JS`YJxnT3GZbKh)vHeffjbi!QG>)zlVJ4-;Bhh537n6ksoEtb&QaDc`sG>64NDB?lag$S!M)6vhTH8~tO*V>S&icgi zGTY6yMHOFT2bdFx68ou`s%T1|A`HNw;S{!2Yd-w{o)g;GMHx5X&|)E83I8>IbcFHy z_|5Fs?BG6^|CToS=*u`#B;TV(e*muxBE$zXK{^UCi~3IesF{?wLY4Jj4t6RRQ`3IA zx!ybZKq`W&c=-;q4@56#L$GU4)#af-8m9Y+>f+?2infQAUNhAkpji#H!YsEOiFBE&o$UexrN*A$)Ape&Rb`VQ?HtMIvu^}#dLZr%|l zX1Dv_9*Od=zrBAGQ%%DkqrAxC4bk@r>FN;3h+NXd9XAz;9<+ev??mPjV1@XrYnSIi zlehc)9M^ZSn(!O$t9Ey?DAPU@*?)xBE$mwW(|^<2jM_~l&m$3aM= z#;Q9EB;pn)-q?|^{4-kB4Ubu~>kl4FXuS_6sFz87KT?}#JZF=oiB$SlglB&5a0-F2 z$6&lWE1WfCpX;uhvd-K{N^2qTR1dGAFa(U4#>MM?mzC(wI^eU=_QwfF{~ZVg4RO%> zYX`kr@HIDPQ027iLkNU{{Bz7WA~E;evGfKzmXe^#ZF^zXu+z(fvhW6G+PCYc#s1A- zo@%z}tV0=um}UH4StDKoq@8ksJ&p^pwBH%QOl_b4+ReNP=?&-9!^&Blc`dyL`1WcR zf1RAaQ?pgWMDj)0p{_6Du|{Oqjg&x6a}4-P)u_ne)WB>pj`-oGp2Gf8fizMb*$uf6 zK~MfP^0M4&y7kYHxijSXeQ5$)6qcHBkbhTThWVd!S&quoB}@0O7`vYdmP&-U2tFYr zW9wK-3NUwQ(nQ08;6p*t0*-PWK#}>NfWY;AffvDqu>Y-xOtf@@8%klp7iOKP%of7} zf{q26?HcLeQjbd})VMM}d>#9>+JYokL5hFiL*p3kF)Ro^ILZ5+tEy;mli2DuY@FAT z3 z-%V26+9jq+SUZ{*W=aQFz8>Op;HN`Xt)yIR%=(pQ@S&6mtZ5pai@JAg_eeEj zBiC0-N}d7gpxnW#t!CUz&0NbmZvS?}23#T`GmXPZa}t^sH92w z3S=JMKf7UbtB%tC*TPUUE5mvlFOUD4==qR{PW9mcV&$J-6>SIIYM?Qmd6x8#IcSWB zAi8)rU$8?gGDe<}0d7&q@eN^XJTni!8kwo8`jJ8c4Yr1p>rOttTlVE4^ukqT{c5#O zy4jTjD&t)M!!3@ZX1ZqTFRjI21j^dtj}xUq=3$|^?NLN=bUQ=(s#)Ur&xOAv78^qj z1;9ge+r;*b-nE(FN~2R>K*4=_pU8j`=xZk!)Nd3ybvos_2|sI;4la7-q{{QMb5chT z1M}0p-V$Z=Tcm8Hseoe$a@+G(yfIHb3NUQs3R2D2P6R`42pUj% zyg7UK>l=x*i~sX?+Fjh|4V@kZ^pUWi&OV4HJBG{*EdP1uBw}RbzvO>Gdkgc7i_zA_ z_yl~jHuSK30@A#FanRQTk)iTwJBJ~@o1pCU3dqP?BfJG&EFJvCqa8oOJwbB8cIAht z{LLYw=kcmJ68Pvc0D4_9W%!_HE z?&qm7d%Hc6KFEiHACNf$tG{a^(I^pTpWx}*k&KZqQ<1$X3+I}IP0^8jF^?|@!2NKr zGkzCW!iWFOezO*#Z5{1pk)&ZEp;Q^T#VN4hs^#5S+Op|I&j3m%(X{w0rex}vHOY;k zt3PvgqAHmsY?Nj%dg#@djK4uBzm;w_IB@dKJ#Mx*To$>=z~T4YfTl2yrra#WZjVb=D=|;p>a*F7PsNA z=p#_8xc3o+`hpRg_oWs%o`7FTy z@BZ01aR016#FY3kkbeozG#{>E>FJ6@)Acchanc`+h(#J>@To)e2k6@zoS!CmH&nB} zJt#xHZUYsZ;Bwe8<|HUhz^_pA?H;W|eW>dqu+>ne&folJDPE)$o$o>#;UpK z3H%)dE?AXYvAIS7KW*TC+q_@qcZ%xrN(f21j2~4!P&ul&S6>4$WW&zI>(o4clgOoQ zeod!M%PKoVuNR=BtHN-ehLTs|SWgj<{Sfli^N!kGC=D)BXb&$}xRs+K`v*p zQTZuDjHko&i@WpX7xCqHe#Sec6apVY5cEP)HbpwqKx%Fn$F|8fBIVgNiV;F*Of49# zZh~P?-;;9qwAV(lvl!-;C~7Iy@gcoTIyuwlsK%X(>ZR(h!Yx{dDGBjYTZeN^4eZN{ z;FiKoaSnR+Q?j5;@SXE2@7 zb^h-w1MJEFX&xySnbJVbV~QJncI~0*cBne&fyp!aD3b@Z>5Sd5hc^cbVx`V4@u}yQ zpRWqs7&Err2%F&6S*5caX^%l-CE$q%5sVjN6t6D)Jz`SIGh6IdA?H9r>~}kUWIl_j z4CeIG_(nELXsj)pNkoJG@;=e<82hxON}(6LI#~X=xI~4ulc?1^JNra{&c4h3rL#FZ z+ptTbRw6J-~qBq>~{$cWCxbbg;Nfw$KPmI6ZU|-?Q3Aak9^|iFcAeo@WzX!)duD5!oh>n!aRC zq;#UT1)GZR|1+ETdW+)`y>$1g9^34U z1s?`J?%!m#N0cjdotf=_`;M5n;Gvp%aTFpq0rwSAO;RaZ?-T{HMPaUi*95vz+C}ou znpiVy$R8GsA45YxO{}RVPadd=ox4F%jFr@vXUYx^;e2Rk#C?Lq{QYK6?;1v3_*w1X z5m;~F06TF|lOXoIp*l;8A>=n(rRDSrB&SA=)XikRS}W_yt10Ew^ov-nkNV9JKY(1$ zgRw^;@+BdeiHW3~=0o%MZ&kYV}79gUlVk@8g zxvt;M74&6?hd00S0JDXZ42s^2W8>?R9uI7G(p=(Xk~{w`Vx`Y#?j_grb96pr`;9_k z_SoRg1bRU&3I45<{?%Bmx>xuF0L{N;3(4w+wIIom*zF#dL7p;G-M|(*x|^}X{#0{j zi&F6>*iyTDZmB(Mv~W6orMf**|9n9#@>{p{B)wi8BHfsYuS(rLOM(E8klx7F@vFSq zZ(Ap`6KMpp4L&lbo~-vxJjc*ylD|6-!&a9tIfHH@Q#MdUT z8AE#b^yNWkdgaLKe$=W&!D-w2G1mS9>V;x-kE z%_9G+PbJlhsn&;woC2fw@RqrEVATkcUFc__xc3Q)xFgS#yw0*0l>Cuh43)v0{++WluG{0>eT)&1F$##|e)^?J~)ZZ@nzIe8RbK2#J+% zSDvO8F>L){;;WhHfD}D-{|ARKI~5Dqaf+X#ppY)@U~_=VCEqbTcaWA$@25Omy!m`r*Ys z`2tUJBz>#Fj2@0~gcB8@8^E?QFP~J?^Rg^S;6`C{KZ1ZjvVP+X=yCB( z^TFq=Dq-#~+uplryg9%PrXj3VZFsp3WWB7T7ha-lg=Ei$*aBbn&(VP`AmACSG;aQm zQr+)A`{-3<2xH$WR@xr(YkIK3-;kxTJW;nppii(0o!Qa&^ntHk*S~DWX2c{$;KFn} zf14^MJR~UlKS}35Z!^U=1-t+1(HwIw_(`Fj>UcMl%bJ0aej0gb2;Z`#w`x?w5{KkU zy07e)I4pR;ci)T~zzAZdp{bu;-nDd1eD6xBFSs3FuT}S!?PcFOvd3JAY*wVtv%A@m zEc{%2%VI$4Y(liQ^!AG?w?j(6+;@^MQCKwni`W=jonp9^Z#Eb0>^v+>hll3v&N{Vb zUPr0ihRP9ykS0&xZev;_$AJ%Q%rqWI`&bjTJ$&)6BS0T>jLW?*i+_g6gdHfF6gnk9 z9`c(I*v!~?o~E2xEZs6K2jzqKH435%g&BT)mQs5!GI5%oG*VJwHz5L6lJzY7g1mZZ ze02a4p=+troK-bizsASyaj|)e@LQ%UT%MHXfEnbQ$Nn!Z&S%C))tk=p$=@?LM2&$&sH)rbKF-zDCy@-s+0KMR0TafovUNND_$~Nk zFo!^)GJRzD&BP?WPd8KN9M@6;k=ITCqxIqNBBab{rP4hYJ?D4)+>YnF&ZX;kzX2)D zdoIZ&P#XEp)8XOuzM*|B<6CfW90Iva%34&Yc6NMYK*BD#p-SMAq<{FTCYbR%W^Vx9z)dG7)({(Qy^l> zU9T~o{xi7xiSMUa4%bGGO#z7CFq%Ar5dhenVVPyle0)PM8UUAU|?t-8No7wq( zmVALXArlH)tVe_hFqxuu_-L|&Zaus;Q=pFAv2smP^T1EMNr=z?4$xR*7_}b67a zqP!fvqGBe7q{R^iA813nq-~YzBSwE+(ULHN{trf->yrs><)|WbEDciyLTOUkWx;$y0YA6q3FXr&1di zm&cTwiRP!4pkwMUzNfEXnC70uH{JStWRm+2AQMc9jS>Gv?f$Wz2$&W|l^y|^7U0um zSRw+T?V$T0;bQIrrfoY9n!CkL@{NVK%94~PoerQRrggAx`Osa1=Ip|C6}bN_Oc~#T zS;uQ$^EB6xagk|T;CaP$Yd|73rsR7Wp7KW0VI=DiAP^{4hOL26{sE|VD4db1X_3E#MSHpj+tMN> zUb^utUUwCsWm)YjmxE&u20h#*ec4lMLhWjiXW8qyFf;GDHIvpI#2;aLa8KA zj8{fv^cRT?PtqM5Am!+vOqMS)=Zs9>N)Z=hxQ>5{_V0);kX_k&aMy$9sziAehUZ$%2wX-!=-n zUh(nqiPwbfwt9ygDk@02KXW)A7}Tz+n^u0R;r|;Ip;~=){E0lh9B6*rL{&!v_@=Iz zCxnd0Vdz_LX+c&@_%v3$dT#SC{@p!OeAPbRj1snva17p%vXoCoXs6r{|CfjchZR12 z3o0DE2Nh0}*+CNa00Az+k7$@$9n(5(J|@>sj4zWSP_#;rMW|vMnw|hH<^zF^O}Np| zl1Uz6fGgWg76PHvXtUkNyMccpbBCnZ8O+Gs{F58me$$WUXblKPH$5JgUzznj*iS#` zqwx5BImpQC8w*1(~s zOpY~OpohqCn9;nhV1VT!k!+0$KUU`bK7(L$l94Q>!R%Nkx2mM>s<-(tt;IsH#4Ci`z)-qPi5%;5nv<2+S8Qjg z?)io98=RA+^zQR2qUiVW{Sxvj1I1S+Na&V#I-cRB7`lyS%oE)k+Yt4{}Q{dVxc+Zlf zKJ%EB=rqFK~;K>sWXCU8~6kdfwb5<4(z_( zPkoHJ8UZgm=0Ir;t@s{QpZJ;JA87ngu+KhBz1ary$4AeitHb~o_*S=1$5Z?6n>{}` zc~m!uL+LoeU8;{y8@OpxW`uFe7Y(izCQDB@$b-1gilsA6Bpis%89`jRMkz1YgP=hH z!)S0M(pSp1GXcJf-mX{Qx=vq1rJ`kLqhV{OHVV#JhYtfK49WJjIR>)f1|aWQho=j? z(%!7EJtj#mvu&jl?Vjie77IfrHr_zR&TZ(IJR*fG@}xi~dq4mhenMVbIwYr%!uQRw zB@2P{aFQ3!x#L*EmG60WLJbOPq@mS3GQuHadDXh?`&lD<2ZJF1t&zrBLEJ-NG{|Ou z3-eL1q53+XH0qZ?W{lIhDCq7Ea#mAevWxhW8&N;;xyEziDS?o}4FjRP&9@we?`*rt zQ~5u%Fqo=h9M8n?yBF&(W%0yzg*=BYlE@G~elZ*rn`D~NSUR7Y=+!@qGSnr4G)5S^ zC%lq`V9_a)N=|GvP-B5%4N_=|;*T+{yU5j{Q5Z8G7^>h9QPSE-hXtWZ1_b(?z=9{c zD>fA0#N=&TZ)N7%SwJO1@M0_@TGw*{IWtT?h+zGE0#^Rn4L+ z0EW3Z>Oq9ZF^9@Prt;5MLNcN5W)tKpQ);vi+uZYt{czeatc*w0B)EEH@NN5Xa zGV#0xLp5*$R7k%ITid>rI_?A}qDWz_<$fIbUS_40e-iTX_%ZHYAL=!LOlKX&07=2! z*4d%*?G>X8@9ez#8TQr-KhW1G7I|d!=gNI{{Z)eo+qqZ8J8B%pvOg*fDpd#lE$p=l z*0A((65r6^@U-k2;2_$lOLBX%M*oqMy|W zIUyVV^MV9Uj=U1NNmS^JX*RTd0yd^mFV^w5?xWPi6XW*@`;ct2Pz!go2JmwgY6Y)q zinDX2hEK%#$zJ4`=k^B9g~C8xqDg-7wfbcqANryMvN`qdGUILS?z4rXLNODPtGNFe zO{K1e)Lsn!x}<)DC9~BbOFO%s#n9|GSYGQuxi!q&J2tqS`-;UuG;6X|+LZJPMoc3v ztF;3>k6?k$^A;}U$c%NKq;^I^8O=@-Pw=Qw5glw6avW!4}CZ5~{H9H)|@iRcH<8X6U-Ri#e#h6xQ>l z%bFa~A?C!=oA`w`17rh1`fm6VXk`T)&xnk{xKXijgdnF1h*=BLE=Qzo?peis(k1Vd zzmah3%opTtph+*5yNx?$r?Nv-nXa z(p~7_oSBkIetCp#r=}w({>64AEmd41iJd-(XIRC`BTK`4>+6%uRK!B3VS~-T z(n3op8XC^#!RC#XKoa7H3nT^!9A5>#eei02n_x?m%Rj1Lnj5zA7ce4!U{aDj)p?Zu zkA%HY=)gk}`y(#GzxDh8f@V=6isKadM1FPAz1|2649|^IaDB!-C`jj)e#b6FDEKpPTw3jDYbjx9Vd+~V#XO7oM>w}T|t@#PG$EyLAcH81I zx202n4B7ZQBmb%|c-{OPr`NsPrIbFf8Q}3nC?p1pM4qWwsWL}y712D~)LI%TDNTfy zjc5EUe`R6!eU~(jivumVih>pHuzc><`z9eNbc0HRyhBqp9`qI7+V3P#!W}WQFrVP9 zZfdKl58W()GiPc~*gYnAHCutw8}5dR@V?5ya(kN=dJlA`@$FRo86q?6`sgY~93h}8 zsNSy&TY?upYv1XTNVJ^#QXuSw zF$Z|z@rVowFY33O7;Z-E_& z%&06m#s*JRFBm|wIh>o*o{a>Z9RVBiV|xx)!WbQ`%fNnZWq-H0a!w`H5P_quFF^DA z&d)cNipm<>(Qx|4#!F z81!@rNy1-U&j6eZlBn}oe^s?(w_0VW-pR^+k2xtxxJdpW(CtJ44j#v5d*(|Txy8NUC^QHefi{Ch)CeRyX=oD~2}h*%UMRGB^!kQR%?`3Lk*I^hSM zRXaaehKE!WnmY(7tgPnOlDB-pIOdpJ* z3dNAwi@Duvoi7KqyPmU#Ct{yz8?UMuZ%W*i%0S!u|Dq@5$PtUdA6^VXcoSo^uq?KJEQX`lHr zL@ueyK!%QFcvR6#(Gk;{&xeqYw-7G)Ke;0ULR5J>8jqb|W?I7INKIZFB_~VJ0*evk zZz(SD(s*hm?^^)|Bv9;X$V|v06K#~-zISE-RnO7b3YWqQ?qDU5-WFb42%h?LFJv?41t!^+mHXgYi8RR{-m>sm(Et-`{x8Kw=l#FjX0}XMi-d33 zAhd-5NPny85>R#NOCFqKeiT;GN}|&Fz8P)K5DY0pO3IoYYJ+U7{`Y*=YE>PTaA!%C z6&zb06tkp?RhrO$t+v`>MCiBx#7ZOBYU;73y8nhW3*B~K_U=}MZ6GBB?Y+h=nqQW~o?fYP8Gq{K7Jk#qT zzg=;2M2mkVuI=KLr9ws7$u)A9$qP{~tXuzzwDoZ(H|Y!6f?vSz0*l#hHxS_7Y7DQ- zGJO`v%O#Ya@Z*R@Q50D*q8TX&>r*wLd9tSdBK<*Dy%BF+<;PNt!^JoQV{x~{1 zAG$_c0E^|pcIuEpTWEApxH8Z$>xl&#X~X6;uJoz5CAB?yoh_#k(I%%$R&G##RH(+b z&R38Oc@h3o5W5`j9(>-b4>Y6sBS#B#yk|hl#SiYzV9R+bat?_vu#-=WU$PX^TE8Wh z8j?ZZ5E}Qp5LcEn`6=lDB)?H!eJs?CXVkJwNtym zQ4;EunPijEpII(vuzk--AHWa8F6K+t8O4k7!lA_K%bBFxATA8v^Wj}7?WbRi3#p1e zBL4efj86`rIZaMtW7Ka@NNz44k2NOJXB{Am%Y9$l1Di*2v4Q*esC)_qq5@|w z;3AD)lR4b9bNP06008+c27rCe-71g1K20;hs)a1CDdLjHhQe#6iaBWvYu9t6xzrNQ z4JwkE^NsrLn*@`U=>F-tdyX&XloyY8ad8v(Z$77Zmlf_}=srk$)m1Y?l)!Od1A?6F z3qG+)L(4&0;@1@(|8aZSPtrfyz~J4MG19J|>$rN|k(7xksM*tJCt81^OtIxr4=5Ut zx;3>hXt%XPChBr4y+R_BX6yW8hDEM{w?gz96kw+8>K+7z9G_$C58Cf9mf(py1PiJ} z`cdZZ522;^3NwMAi3py*SD#t3CU}T4HL>zG?ZO@QiE(bsw7Tx2vsENiRfproe0+#X zlOIDhal4HR!w)7-3BBJhumST9tc-eyH(hMxz*qKbOXqMCnifI791`I^)O>&zD$TBE zIOi`pD5L4PJ=vZfr*L@<9I6pBde*1L%#f^h2mUi>kC%e}Ne&I^X_>N&m$o>+I1qA) z9xqV1n3KU)!u_sQovAJ~3R4>?!MU#J4SW0>P@nLL!v2A(@8E8+g@SsoEQ3Lv+6abC z-fjG|CgcXi?kt6yAsfoY0BhZxo{Ab|IUMC)mIybpqiv*Xi7Zf1FF=g)g2>OuY%HiK zVO(hD>YxP$pC#)oB1ORpf8_*M^4WDwh#x_v4@e6!Aw%`F;%i!k7sDuHgxZw!QSN9a zjb)%xpciaph2+$1%O$20E8}-<;vM;t$+qehtJcomlkGGJIEkee)BTn3Oyj=5Izdb+ z6^Thq;o%deD&?mLUVWB8>p0Oe%SK^#pFeTVMV%s{_`3Z$N0IRHPNjpw!)u7_;Qapr zp|tmSml42==M$i9f71m|pazM}{Q%N#r2>iPmy9<()k(7Yf=>EvMcm-q$vcRTP zl&8=>AxPe6SDEIe48Mcrb7a6#qfSfzTf6G-O(*_ryBDt?M_iY8q;R2R_fY5e8R7tO zJF>O`j|CHflu{2H(>1k}V~NYNsi%VvXMFLx2ckSvMI+Samvnj>C!!912Ka%TG*HOS zTXO&hSjc|-@T4;6mmw0!3+!Bg8a3MCLde-06u~fG>Q+EmBz-GL=7WDJYey_kl6%i$ z{Ty{32Ha>jiLeUCwpK9{V}W$}BT=NjL>@2UN;em zsec+P2(O#|eI;(=ydb%dMy>S z2cR-Mpm=w6nL}T4?m@*ZNo=quWc&{fux>Qa>atR-%nIh{1|QlH9N$@B(p*OY`I7@a zkjIC?L?@F23hT18{L|$78!V`;*eff)!mm0ocBCoj2W<6xCRPav zCUkCQx!OP=o%{1%&o{{BmNA2_sag!8Pc+-gU@k8F?=B&9DmqR;TJ_2s==*s({EIiWa%GX+` zt_rY_%16sS9vKD@RepBs--vsOBuyW*NN52d`Zbj|M(1cQdqXd}U5wdBtePuHCbVko z^yf>y3R8A@w*;5D#0x1~?k5tV@K>d00KIUv|qTWNp2^ zoKc_Cdfzbn`@GkI=gJ0jhTtLtH-5WVD)Rg+hWhEiW}(BtN%7? z$u;t^q$6ttvT6gc8+!2@d_y)r1ZM24XMcqn;0Xyjf&R*5Voo8_TJ*IrlT|t;{I3gJ zt^nwW_1a(Nt=6PR3CH&403vvI0I9KVkU_9;1N=ABc7`w->KJBw$R@8TRN6&-b&iUu+R!FWw}?IE6i z+`C2Z(@svI%UPuo!>;H7Ncv|1rneD1l})pUztX zdIgr;?+$T%Q{t2S>c=wB4!>RR{=iX)IKGl5BT><0&9R)W2f=!PtG^+>**$I?_s#0b#)WUdRr&2Q$_H#~A($5= z^?0zds-y}&F3au>dX9bVQ@chyK}A~Y<&hGoJtzfiNSQHx9% z2Xtm<@8|cVB@@#~spwa!$;ql0)ORP=6o6Z>wK+(3@+IqC`_qw6MoNxPhnt)%!~LfH zxyLfoYxd5MAE?L^zQi{wLB55CWj2fb9vmnYJiX;YtxqpQ)QG;frlFGrUF zK)fCG{?kK?A^ELNSq4~tOhl-{Urq78Ot(TAn+q$SG<7v3jxUJnnPRojD6xyvHvUGQ z_S`>Bo2S2j`OHXbtBLgQKgJ)P=C%K=PAt9+x8nj237PlRNkkJzB3mjL0_aDT7`d)I z>RTNZ6+R(5Y8zjVp8_o~iVb7d1h9YAG{0FzBO`GN{{g`eF&7j>McWM^7?LMk5^un% z!Il-;DV42!~immw$;hiW5 z38j0Pq$|7a@So{?`O5Q49sv5UL}maV3-ga~(mc6fz{i5$0nSu5nG9PRk;kt@jxkX? zJk8UplT?+Xh05SWS&73S&uH*TX z;GOWyXVGRjg zs33XBPiOq>=)qSPuEyTKt0bf=SEGN^yr4qKCIEr5R(715vq6zAx@@xRCr~1`Ic+!Y+ziOLnmH_2Ax8I`3ZNcLKs^C z(=q=oh#{v@9{yjKR+HBo;DR3XumBT)bJkTxCB#xI6k&#FQy zE{yQwz+z6sTmQ*}fEjf6P?~N;jxr>rh8FcO4hcw;Tk%B((9Mendw;ds1y8bq z3|T?h)cpoLDe}iae@W)A#;>wb_Ot@0(rBjQiCoi-I`RD))m7?ab~GOudi)IQ_P+#3 zv`dYui@e7~;ELMFTHl0Vkm>G(J2tbk;S%3IPm^F2`6O9kmb#$3mEin*&yt%%hWzA> zd#jxZEhIsBjMVIFcpS>%D~vb3w7%i}r{r4HK(R8@Frk!o)~&uxu=b%gqx+k(p=jhz zg{&hp460xO$=ar;$nsPSPTwF`_c?fx^Qo~WRsJH6{|n)e$EgCrzOgJ?tn`|0H^+q3 zvEEr0ZJ|wvaRNa_`(DXb@~ZMN-}2q}wb>$2S8mrwD@=orol}8eXoBP2DfkTt{9Oq4 z<^y|PmE`*ryV2$WI-$+qV$SyiNO^Be8=dcPoRw0NqIr5K$ott?r!~2gFS945x!2JU zO0FNQxM0Wm(0bE>r$l)6|9ukj-QC>t+g~11|D|T%A6s4~E?=N|tmQl_esg|;#^p^P z$(QC#xn8v;lO{2*UqVDF^FoazvjBBe_D_pSgA@jryTokgzY-dfYhmahp_`XT*0}!^ zcobc3C272}xs}E*lKcpeD++gXKZD8-cVB%F)V%M(T99UG1jHIKcspm9Qa^qw`6`P) z%L@-t6Gl};9uuSFeY;@NRkrI>EG3PKFbT@^n3OF z0)pe&=v*oCI>+lElQsOx`AdW%r%~TBL*(GXYiZ+IcmX?$2%F356TAM`LX@7Zivoum za!K$;$(#N}oz7K{N0>*ZzdOz|5)(7SkPF@nk@(}&Np1oVz^Q>Tm+DiC!`Z!@Zwyh? zkZh7Q(=l`zwj4oYHxbsrS+;3d=%C?10q8NhzmmF-dU5ZOsLx2_lgB>avTf{GLx2CD zZ7syqbis?d_2-&JTaH-Wk=8w}+Y3eutF(;KKpyFQY=f#`yu<9xusoSk)jous@5H?*>7t+W^h$_DAh(^Cnk7wj>c# zdxc$HwKDW0O_S8p@8CjK_`s>t@NH##F1+vq6FTggnLh83=&;G|x^ufbG2d`Uac;?1 zg>=`C9LDC%FR8%+mJ1{9(bKk_OCVveBiRrLJRx$aRf-N6GjRRy4U8GQmyVZcJB5iz zI%UD;t*WVYwQ6cry1OJLyMe{!j(DP|VAs-I96?g8Y5U#oaJf!Rlj`{Ix#<{+zltCxJxL-&kclIeyqlc;+_zO8Fx?&dSs1d1UCN^ zH`ycLXD{!Vxd&OzXW|t2RC5TZ?Z*rWp3Y@upXd|t^EotwlaQrlvKdm?wQ)HY2CD6> zyeNZZEq~}+@u;n98(^S1&;wbw36;ZEQ`!t~`;;U&7G4!@?-?Ns@j$t1I7&G%P}$ib z3(PjsaQJekEMav+_5b4Y0sq@;4fq{xfVoNDt|7qzePel7)r35xVu9F`EcqpvCr^TYW*+7b& zZ^F=7ns;GnOPxR!@r>Soo(u-q3E6~Xb-|**z5zDaUM}3}=agtO=hR6l)!~3ou?H|# zDE>w8`0(11jx+!)9DbIOEN=q)(HZX5WybUCW15!H<@PU+D&Xs#tkg@tMR(eYrIva2 z_0g&e=T4<_Y;EdP(56AQ?yR!>fNH#!@}{r3)+TNMQKpZ6y{-w^H?XoV_%xoP2HAGo zgwuwdngcD=`uXMe7OKvB3pGafqKsK&*)>16}#&fU%fYg9Rrz}=(y!dh9OuwDqTpz@45-y~2 zt=`@66BE&$d+9igQwjG#b`g*atHM9xSV6$PH)NM_773J0Fy`$WAG85G78hU$x_syH z<4j0fq{ib|c%w}Oi_TCfys{i$d;kA2Pbl0PF7dv@(*Xp|&$iD)nH6RP2w| z4x7)i{s_P)Bj(ZzbSP}icC2D=)m?gdlTdA&1hqMTHW2r~+BU zgYJi6D)6%pC<~iL$(0oB+=0d-Hc9=1_{XqQAK-47Je%Tz>N3CC_UJ$7pRgrDK(ka^ z?;#}3Q|@F!mmuqtH1ejhKT7Q~8)Tp#?eB&AH#X8)Q;#^`j*YHt#ZirLIsyj9v2Tm{ z<|dQIwC?=m^aDGFs9IeDJa>BRCg^< zHs!R)AxKP1n^9ZC&oxzLKW&Hm@!zM<3F&Vg*5CE{-?`q|+AJ3hjjjwm#`cf&^yKjvNWMs1f^27k4p#$GF~+BsuxuU{b{z}(3Ys~5lbX&G z^Q0xu_u5A|DzEwv?a1<-pPy0Ecx=^`C%v2|`~uD_0v#KlhlXuwm%-;)+qqYnV00k>InOjRJTc0mopL+{;$w0#guSiU= z<2n)cCr8?RP8a7zjb^p!aliou6U)9_<)TD3YZ|ZIELB?$J!7txh5^kqYhbl#T&GC{ zAaJ_xW)?JnIC_JtrMDsp^5U1bIC>v1meDDM4FP<`8#8ZGzmObhi>#r7D)2`yO`yZC zhm7FQr{W2U31YJ}o!kv6%t$~ST@9q9i)O~46L6T5aU7KG=kZs54G|S>gzt9 z*GJR$P7fa6D;i%gc*Ch8Mk#qwDKtmz((l zFJ|l8dIJwMDSQ17t1&Gd&Z`O+5{J`nNg20|+sI;U*JjIe?e9}A=jmn9`F#OVL8|Cl z@>QEnla@0}i0g*MwNrbK+`w&w%+93>lCun_=j-36!51FTy9X~b#ZGH ze=)4D`$U)!A-BgIeojHDQuE@m#98o#4SyhvzKJ;Kjqx$$f8FPbz&=)+ZhvW{`v+q$ zz02cvV}%N>B$tkN(Pz1WVqBE>vmHMzo%jbA55KrzI@R2sb;y`N-n>f@LfBA$z`F_GAg2yv)fz<%0?uA&cDcG`ngzr4qSl@v) z3#gb3NXxvc>?}9JpSTjj&`}D&{*oR46K9U+s5CK=+gX#d;+e`jcD8=m{HrdPb-%EmcMlI=2ee!K83d2iwd>dtA)Z$Q({df{$>9?nmx;a^UoTr$mEIk2%3Ji z+2(lbXM#E}8>N#g|BCu618Q#e-vJ)Ro*8OeHP@g+uRE{KNixPt0wd+Esy>4^01k$i zI@96*1wJ8RBtLTA$LfsO{D1j)1XZntaZ6>9L9A@(pief1qL93vYDky#R@7(tq8`7V z#s*=|vRM<55i=vD#D8xW`momh6_;_Z!sn83aBP2P?%|xjr#BFqFQ@Cd))0YBmAPVH({88sW2N`hH8*yv%yKkAyqumqWU#3 zJq`MVrs0neEZ(DUus&ThP&>U+iq>AneUV9G%p*mYdM4!P^cuMJ;P^)D1=K)*O}GFH z9@-sL_u|!z#Hu3|tO0db!wQ6?)&JP9#12cdWOmL9jD5|II91!|QocU%JelU29?BMK%Vj6A&?p0YN<0u+;;xe4$Wc=8k;`@`JnyjazY!j&y~#m>wq3=+{wa39MQO? zhbL7A)vj8BC7SzFbU%Fe#RAt@(G2e*EdRj;9RaA4P}~is0~Fi%oQSi3oC1BM8UbQ9 z&DetXX8_1b?sGcgQgh?Z>dsy0ja3CF9ywmUHSRem*f(ySmm_*yYi*VH^d=h=7~2mG z-9j7D70U(7Iq;j;-S*hfn8JSs)>oT)LG|PD*%b(F4XpI5IL)^{j^>3(IRPM*5slN8upIK?{o!6}KF{W9+lliU(c^N)T@&x2^>-bL)|9WZL1GTCW zCc*`f`6^G{BO0-e%L!C{d1xHEJD%9_5k*3#-}y*!EypiFj4{F-%d7h$WD?(qQSD!v zWNb7ll+=EGc1J+jRy|_hRa{+wnQ!cb9YBF}0LaRtXCyqep#UhF@X_8W3PFyma;gL~ zS)I&SZ0N!Z7Sjw9!XC)_>#3|ldTROc1k<~%eA&9o>>FS!r`J~t3Iq$Utf6x7#j5o5 zcFSt}85Jpx#Mtt5dRq$K^+c)>J*wIac_O>x7 zM$(c(+J)6_e@6Fp)dJ0mW1EUzUGcswwJski}h zQe=#K95t*(H}gJeoV{H>T3Yg7*}AGU*u zJB<%Qd^?3^Y0|_Dp;ehBZnR%G&AASg3lBb2!Ua~40!qC{(6rKV+w`v^Vbh0_liw-J z@b>n)FUGoSOa6g?vfI<(6}L1K5$(NrW{`{kVb%Q;;OA{uOXC9__hpp`&KSlpRF!-C z?@e4iWL#JsN*{Q_{1r2H>3>QvYxsN@R$kRg?PcX}-Gqt)ZWI8*au|4HC|Nx29cR4U zl_8vKf0Q z_%$*sV;hq@e_wdcLvnP|5PeCj5@~tbADfaT2xg-?c_fE5j%dv5DmXiQ1XhE?I8i1Q ze8jA7G9elZdY>bxUX#d^?C`=h9Lr|hKK&RVP%3c5KkcF} z9L2c)VZE40OL${Q4nGLd=567w0{Uc1GbPkEs@Z_3e(6CAzzO{C!*me@rajy4;sCiC z)6bLVXMGnqb3y|~4W!!y4qU-2Ery#_kk*D?sG$Q+#C=dL!=6G$FU3GgG72ou;^Lu< za8BFEVKDsp59aVYav{wH=Evfmi!q^IslQ@^Nd)e8ZNHt(`B#(I7fU+LkQMNeFm<)m z%z@D+FUeBR<=B{Qr%WLJk#Gq=goljI87YwIhn<-9v?20dCyt1o+iSp59KSz0C<@JU zCrkktaIA+R)&7=V>Psvtr@!x0S{@V@sbQ&zI1PfI?3AV9R3j*S~TP^UZ8XP`d+Nh z-Kv%V0iUM^;Pb>7OE<>``cM5<@MvJ%wn<4LUrGJ5Kjv4XAxTSCFnY<@y6*^i3Mujr z`!QQ`7(ss^rIz}`@I+QE2AZRf zr0;4UJ^)>oDkxSRD|f_7nxAdg!H%b4dmMe{`wyayf1*zHC7BZmA1ABQoxgb#c0PaR z@!kV|8m?*F9Yx1=ursY_d?-w>$*2djp%SxjYS(5!D76g;rLGn?g4k@paNdg`D}9Yi zPe@||q41!$#)Ot+&PeSt^WEsL>m;LxEQ7b_%CdvL*t^!wf@|8ZeuziVklvyy_sj9g|#bZYDH z*>KjzDefP)I>&K#&v_IRjjMB59Y2R*8U`@~K+(?~KRsnfv-FY@a|e{Us7~A#|Y!_Ydu{qkpb@l({EO zMTd;91oF}M8jl2M_~z|_JPd!L?-l7XifuZ`1~xF@l?D72C9d1CR$U7vdWp1bFNRn& zAge~|niaRHTAo!d&v~6UD46Uz``J@Kn%~x%y6zsP;>HBHc_8V*3gwNun;}??hvV*% z;1LtE)FM_;tM{l|!D&X6XCTMb(hzi|bo0@Wj5!b6EO-N}B#qs5wMs|Ahg#&5%Yl{3 zPe*Zz%N)!wLtCW7N!;X6xS08RIC1n%cX^T;IIWd{VVkT^3AN*cC+Zn2d2L!CVPDcx zqwff|kzdef5DNVur6)Nmf6c*KK~tMt$cC&6BC`8TtxA~q?S$QrP%-Fss+o)({FKZ9 z-Z*~Z6|5IThv|hE@#7h_LWsY&%JRf28pBY^aln*cdGuE0F+=DnU z$d1gZ3PF|{QsLI^BEvM>2nw#t)P2$fLa9y@-m^fD>6AVeSef`S^%2?wk09>~2=9jx z&o+a0a;qeB8JkUNJsH&rZ$^3yBK^9|$(+qXhxraM**MqHJV%NOa=`wRKW->RJd*ZR zFvAF*Yra@J20T!nSZs9z6l2hX_@^r`*0^^ye=~bwHysX0q82k?(ZTJ0tJ~~Om89LE z@bg~i%mZ!Ot8G;=VE`PTcwDb)zrp_-k6`qN)+UHzBbKaz@d!YC&7Z9g$PZWbhu%Xc zM9PaIqAKA;eMC$ZCjcX5^ULla@X%1qNlsu|njJGUQpU%z7ezygQus&g8oP4&;jIw& zwrAD18~ol>=-yQC{xHAV{=Ieig6G5qblOpW;Rpn~;2_T_yx^@J3p7R_!aoWX&QA1H z+aM#6fvWc$rf{SJ5b}sEBa9_k<@+woY`x=h+!VZ1E8?D!ZO1s7_fzbzfi!zpNi%mY zsnS4(zF>G%<;$S0#H;TI2IzD6I~)pJAk8ky+t;{13yb<3o)j_hVvm`lJ@TsEhrTOU$wMARP=1bk|)Rk=U7iKNj`ii@BkaedJTOxJ_(Jn*89`6*n(0Cbp1p-MH zKI|C1)&cXv6ob+yfJ`|MCh~MDtpdAhG&$)_v15ZM{uTho#5ewqx`C+3W|l9ghvGW_ zY%T)JFqt|pST2kyP-ZUKCp=h)4r^(~KktBU3!@HKEBA}q>~d{Jn-8yX=2xw}ovk&9 zMC)hp`8i&w|Lk|QVC_1F+?p`bf%XFXS&1ky_^^tw|I5NHJR_C^# zPBYswC?;_n+ltStp9g=07J5}rxB2>lRJmNZm4IQ%yxr2NTcjG8m9ojSZwn3!*MGb` zErzDjV%w9%W7@KLBQVNLJofSazUbq*;s118!>%CaObShU65*J`gNGF8u#j<$JvUKc zX2K-Afa4E7#xF-PiBZy~WyXib;z$+qF?|04@)#w(>y#lX$m~+kZW3hxU)C1{Z+|>K z6v(^u{pnu?wfywe0*7RWUX1 z!>G^cwZuy5Yr#(k^kPDmLOm?*FcWQet5zM`VR%n|<6A?lave_)#+fhWotwfdq@`xL zs6CMkvZ9UxS==T885jA|g&#C1@00x2$5|9k9K|fEq%b65J93zvqs^e3=(Ng=#VjJO z1)m{3%BrzggjAzOQa@<-f(Q`-VD02< z8Vlt8ONyO%!BZN**avBQ5b82>_vzJlE0&_ONNeXP;>x@-;}m-khAIX@J0E8W>VL!k z1%wHV%g@E;2tE6MhL)F6D2OP)jONm&MXedsLeH zO3_WYPAOmG_{W}g^QMRJfggXnu~zRKxXwI_O>Tkyp%GZwVA7;<4eKrcsviDBTSd*G z|9NYv4aBw5gYfctxQa+a_0&xy6vAR6%-%Elr$KrhfQ0S?jLs)3^-3y(4HTqzN(zFH5mN!uB|+H0pS)ky4AD4u998 zazLlj#hwzu2@c6KcE+Ev1&)wHk zW%mEIsFEK|FyspuWD-trT97bWjY!+E*^eU$HGF@`pnRb$abRYBF0<<90R0!T-yMA_ z?|*o$z1#k}0*0N>M?Fl+$(J4Txdi$XM6VJ!nrg^@ZK|F9vI*4#9J|;zX5>PFk1lM8 zvcJ8qtHC7Rbl^2>UvFfDDRbp*69buK%SvxFBBVd!Tl@3$2jI*p`C4CN0U-8EXjXe_|$kHyp;iY5&n@0)yA0}TmVUb%vrGE@ucFU*>QA(wh^FQdU zZk)7i&gD`%^pHN=>|P)Htf&)vB#$B6*+D_9e+e>%+r)xW#q@gqc(3PugLjA zq35gS+k4oAO+RF#>28xHcJc=|dYg{V#b*M!2*vHEQ?|ybb@)7Q<5>=~p7oOOtkp-D zmwS-_O+k7L$dKN~%d?(g+b`?4&$}=lPrwwdzZl8~Fh>DRfwTP2xjMC&RIGaW-gGAi z7y8w#aJ$p&u*Q3;)Nmr3Zo=*BMS8;u_Nu>_g;0bg;60}6g*{`{Z2-K-RwV1o8NeLV z06sQo!q*ns=}d$irJ(PCg@BN;E5n~2z;%L{zQY-EB(f--DChL(pd2BJWTOpCe}gzC zY0TrFx<}b(d-gu|6D>D40ux7_*2Ge!yf~OC9P@{J z^7tHuS#i9oU&zx*S#3-f1>leW0yOMNx!B}ixubLI_QFcl*Hm)~u6e;4b|rsukXpo5 zj^$9v-ST(7!X%|tX1D$W(?*`$adxML4d1mtKF1+9?q;=z=<&rJgg?7P zdJ^6A_%o*o>(+3AsE(nKDbqEG`yMPOiG*mjw`gW#vP-`m9vjXC)axPKhc@8U*C=B_ z7zl8$Pt+bEcYI^*yno9Vq!$9`GRX9TVEPSHNUmT|q@xDbtM@RQVD{6HBF6SBtUsz5S zX5agGl&SP{C4s)e_v=vn+D~~u{AU@3SEga`pj69a33k7MF>P_^sFSb3 zvK90U7zUDSw9yJF>c*z>?IEM+pImuV6G09p)GI(Cl_jqxVP)zI=uQLzH;zx~T z8bM-01tNK1V4*ve%{V6KAt+Pf7>K9~gu1XM9Q3ZhSg_+Mq&SS{bX}pYmd}(UZ)7E< z93Rr817I)NY%fx_dG?w*z^hn1ebzCp8BG@<@E4yf`yqJp^a6!BZq6+_5CK!?r`{HR z6^|nbL&MO+q;d;@|D24k0`Q-_d<;sN*z*a39t(_Q;eIS(&K1z-zZN5y!sd%iILL0on{@`wbP7PqJ5 zICJZ_9v99X)ZUMB=BIxr1it^W5Wn;-mrM-HaPa!D`gSvbJHiN{PEV9DrU0wcv0trI zfQT2Ag})0HU!dh*b$a&tJfKdOa%BQipL(B!YNai{XpmjHLhyY(1QHzl5&qX+IKC|U zzl*9osj*M(jgk9jxk25&R<$HxACZXg%wUHTClA(>HN^!d+fGhyns?FIe8`aPx-Gj7 z!vaC=J)k4H)b(MHZNaGp?&nR--MYii52{wLR!4zPf4NxK_OC4qH-yny_=Fcx9LHJY zg7sg)T&$mJkyYs6NT(ns~%-(9QH%yM{s=|En+tP z!K#=R>r?i{YG7khdfjqMeEKPoc1j?Rl;dR$?;Up1cET_zF;r<;Dk%++2j6DGG9aYy zsDK`B24lDRMNf&*XE=lowH^&S@S5k($A3)iN{AiD?o(CphTvUy=ByPxpA;{RgPco_ zKtHg3tf2{m#|(%uL!Hkxnxo6B`Kr}4Z9IgtKP~rm5s^H8jS`J>Qk&{2H}1&-r)2y2 zzwiqVEi>v93>>8pDg+)Z{1q1<*XL~O(KNg@A>;?TbsQyvZ`?ByvqUfr_>er%bE{>V z-$Zw8TPH<;a$PHPlR7y%kYv3-i-Nw)`ezKxXx3SYFZUzzeK#YOyKj6K&ZA5z{DE&JMzf=5DB1j&mZ8gy)|y)r zmEy+*;v%?92N4|}Q$Ry9f@L7b87PWic0Q?_v0-|W2Urmf(r`JzP6EE*Hn z$4O({340J(q%JL;51@KUmog$*Ky&(YC5*AMm|;_H)XXwd4$#ch6c*nOst27t;ssm+w*Z8H2bJG!3HP4jeU9va0p+3? zx;S;;8RLy+)slz<^Yn3Uyaf`pwWbMI)fRtbx+$|m+NaS#jap=Nvf4^bh>NP=(QQDP z?i=e1kb)r`EsN?$N#4!_px{9G(__BY_V%@kW^bR*NCMJ^W+t$uu%j zqZebQwRMF9$^7Tq(R)!JsbEm;clX50@Yu22P18W><)1ctT;Mzx&ivOB>%CBiDM~y& z>?LV1I&@A;LWL|gGZ#RI3f{#V?D9jxph6u2d9E--03FKj?O$c0@_zfsTEMILHTC`Y zD7lZTA@E|rIjrYd_Cp0j93Ck6Y=V@a+=Ey#W2@l~Q-9kT5uLn= zRicnTxKj}6e0o?BZa_>wxCU3E_+MflP&7>!{F)U)Ao)TR_F8Q#B(F|^Z=aB>2u2qs z`c!nC=x=)ZRYGCaUZ2{wDl?;8YDfZ5}X)CqZOd!N@S&9p=d!sum zpvxXul>x#aUDVN+C&BM?ff%8=am$%+<~)@=5D&~R9$C(JwU<-EwEzb~cWO#%c3k7# zJ)buu8X#$MJy4Jj3(py5y?OrzSxG>?(z;tLY=+c&Vn9tPV~?T-C9eJ+UtjC->`fQ~ zNLcNn?WONwvaRTg4xtMpS%NIT?n;|2Vd>1O@2W$)MJqW!p!{mBVpL2 zZok{dV%n)u^C0>tC2`5JSK627euy%mtYGl%PTiCf%0wMjluXB)O|paJ#xkD@E5xmW za{8IINhx5bQeKD0B!H811imZ7dy*Yw$njlTg^QfhUhQo^@5Ihq#p_z}C5fafv$Tl- zPOC}@m$(^<%#Vg$7-e-(0gQ^QcK#yoW}NHCi(@+_}QUjY4tKS5OD8cOP(mAIy^y zw|b}?swEKvM+8nlkF)AWqQ1Yc1+1`AiM6DhoNJ@MuLVC7HH0r&%r=}L6upM&{vOA? z*Bm?pt~ZUL51xX2@;owTN7ij-nP|J{`oH(S7WJZ{r%higy1cvKMNn+s>_V0EjNMGz zcFqjf|0t8aAJv9n_N<-CFkXO6l_4Q_`^qdAda(ReD|rlct!bTXq4#@5xEvvY;h#o5 zAFGgq<%ejBpzVz4HF>FHa#mt8rg(HLEFWgzoY35G3s-+)|KB=ecDHQ^6?iPX{v9#! zoO6Kw2iKvrFkY})1kmC~9sj--{y~eoZv9Vt3f{EdsSSOny`LBU$|GRs6UQg?l~3T* z$M0&|sw$6a;=csfUivAX>RRH+n(DBg+BzUN6n|9un&GikFk{=?t|9C**HB4{~`R95$iReypITf0_4_Ijcj4j{+p{0_yGW)AezAjTMPMXL~^-;ov zIwmtuo;t2S?P=TH}hodtu6;6rX-rM zl|2xDidwJogtCS>w;;(D1*_YIshPO1#h)wIkoEDB;wUkY_)ZZgVn0BslkV-pwldx&#t(eb}5iIh<7%5rRfY${mcS00f4zKFx1`C@>_jc|G8=x>J4$ z0Cc4#=_#HyZvmTmk%R{NgOU;u&12fnz<9i2kU+#!z~I;oZEEfaqx;Bdk~Q&rixLq_ zy&d%aHYX{_J0XwcthA0~yj{w#*NdNsha4O9}vUPkiftOj~W)Riag zrD%~ofc$GH`f}>;aqlH>C{D(i=SB}NgK~!9k-+I^L4y(8p>0 zNlAkVSfEkJh6Pb7QBwV|qQ?+TY4ug=DX>nTOBYvfyW#1xC#)}<_m=68T}KU#y@%<- zIb&irEN&hn-JmPgY%PQZ2f}GWY#9VUrv{B~BJH#$C>L7RLww#Lf<*!T__>&40=pMh zDVF8(yD*>`Fne)>d%ptBXnK050mFd*_V|FH7%8mv(kXR3#gXC_bU+gAMvNN>TlQz_n^{$B}QApu4z z;|f@If>oz1@mbgW)PYIB)S&SAqrs+ti{@X*7N?~KdKKDIWIC>3Mq#KEis~{(-R79$ zP&~{H0Z50nhC3tMt}T_Wl_m{TkqY|R$$qASb^FPmxoavRV09qUef&ZPf9hPIaC$-7 z#HmY&GlYa{`BON-HP%!s8_o%~PZ%tQ9egExaF1AxY7Y zXCn|%b5#jD+!>X!QP%rlzEh-P(h)kV{3#3%$RhWr0E*lII!f5I>XdVjjN9mSGelK< z!K&>p?;;I;i_G`%zwt3Q6kHwI7-Mzq**vlDBYyQ%QfVD+_{A`x*{&be;WJnuH(T#> zu8Ou#$i20Cm&t%@QdJAecl6W{DT?1#bnS$^yMbhICGeb>k>1z9io zdm&t{xgs5{GZ5judSz;|y@VIX`3`x&cSwA}FLET7zBVKKi`G+F;;qoOk)qQCmu*)~ z-3<%aNH9=5_Wia>It}Uw#xg#Oa6Hhrxfuc0DGH+1=}BR?`mn!LD68(MNCSeVOnD(d znX$bCuLcV1YKW>n_(Mu^>d{{=+%MX@eDTH&U4zvpBbY(TFHg^J2n7Pi=TT@CB~ow8 zn(xPFs!lJzXd|QQReP4=Vs;a#W3cY}O8s_|j#!0uCb$rFm1`d8LAu*moWGh@>s>kFdlW{fBbD6!BMgRjD#^RQXxYa&M%5-)Mce2^s@i7S=U zH`Zp?@2<_zCc9^6lK(}&#i^K5kY z-jm!fT!sX(G^^ApL^%w;i$}*v_5GN^Cru?76vn&Rm9AFjYZLx)MNF-pbn=)w0kkQ( zKWs#K{Jn?yOZ{g`nrDgk^f9){2E7|p7!)EJa=pn&Hx{OxGwo^u`)qzpDr>X@d#S-g zN%LAn>boKHCJh@k<4T5zgE~jQMxv*L^sMN_pjU-PFJ+ERDCu`+!N2@}V+|;k)bvkK@nbQciabk~5KNd862sjlIiDIacp5Set&`zG- z*lL$dc#*LDi}@tJAZR#EW<0Q1 zUr(R7yL~zUHQ=zDWuA~pXuADrb*|Ks$7AWU)AT7o*g1q;4nkY{3l(PpL&X&UsQ9HJ zR*4jOH7PiKGAl#V#b@-OH2z%ngH9r~(muiwS=I3qLn z#D!5(J%j~+xpqUyQJE>e+D|VFbq$56SUaLf%$;(~`+>P&=v%)Rqn~VOXxwu8nqhl+ zyT5mHZ9QWJ{mAk6dw@rAnI5R2ULN=TeuGdOl7>U=p1d+(o0o8bMuR_aM5JJ{yC@R` z;W^m0t8L-74M#6dQ+c$#LIA7{;0h^z&cRi_0~q7m0P80GGZbHtBks9Dm}gj&lZv6e zmCfv-0AyM*h5tFdxNA0b#$5fa_)f*z?Z%rhOWgeDx|$rb{6HO|XD%B#O60UyNYFQwZ|zh7O``YVM1V3wbYOc_HsLIAAui>$rl zXTy$J%LTWh8$6&iW8SY!eR7^6R+@=5ykq|9&Yc~JgKei0n6%8S%eEgGH1-xWfS4<;jUCXb+CVXEbE(?k)IB{SNPHyhU{LytDX%F8I z&1Lmr({27@H6R*~jnO8qVg~7X`tS*f(fZt~OMn(;dRf4&(W2|Hl#@?jxHugk6ajQ) zrEWhIX8+;w(RBw=h*2V^MgeA1ULe^GK<&Y5Q+mJ8ZhAlG`!#~l=o`4LM6wv`5wHMX z*&?ux6z1i3W6wo5Oz2lp?V;=@c})rZ{-~`Y0N4t}u0*RloSaJFagZ8kQKYv(npdF* zy1`aObJfdW1Ch#S$BO4~m8jBF>$GmbUvyugEv}dY$6|)F-WZyam-Cq~;D4Yr@(5o0 zIn(_gfAdydRvHdCF9`px6(V0aK!Q$7BIv&Y4hP0uf#8$5%3w-YE~9hMfEAIthFJviz>dU&G@VibLfOxe9DKjip$;zHjTgs5b>+)=W`!u@D}7tWkrJWW?(* z$uFDl`zZuxwNOz414ZBsEoWZJdqO#z8ru$=24bul(Dokx2IKe3br^-;-*AbC zs9=9TM0DGzk3l^OiK#E_SOp%{LkSm4rBVKV;uN}}xh3B=u-Y4LX=G(j+6|VzJcd#) zNlQ1k@NI&!DgKal7uVaAe9Was7_R(KOYiA2L7=Ed?$UQ?!>2NpGJASY9Nr8meIc4D zS{3t$r2!(T0A!T3e>(Pnv5u7E-BaX#AyMGXxxEDAr$34w`FjKIQ|SBtgeO0M@n2|n zv~T&NcD^@kw42+G8uYplB(BeF2s(U9c7v$T0qkE=C95hk5R%=G;XcQLU&h)Ob0_jz z{h;Y>fpaP|a8@IW>CE zvTwa{{ShAqZEAG=))3S$$$NoC#SC5p5pjuGa#F5 zgQpbevVv5`Rl20L$~!f?H1L&xrrO437*PIz)O|M_hy8fv_i;1vstx75EJAeP%yKW} zXeMVEfvA>FjmHYK3;yb%o*BIDW6=#Ok?{|ZmUtC zN@+fzAOOir5yt`wf)OkuYUB{Wf85W9WRV2oyai1Qq!0>#1;|zM)o|g7?(D0?Ya#9? z4XDh7<~7he^f%v@fBIv5$=Xv<%~A^zrB5j?*wgmG3E4-B+`rsL82h7W4)j0v`~m;* zrGJ>rDbg|*=wJUah8eH3n3b{TX?uFZ>Q4}gm-1w`nYUPB;fUygu&HaW3a-ykk{|4E ziYH%({}0@$eLuqhpS%JIVH-aKbgan|7!?$hcYuER0B~`55(fI^n;-lei^aILDyU{#Te1p^RKn8pvP z5o_*U(>?D{^2)9ZW5Rto0Id*j9}ze{dww(^-Ao-sYEm zS@~=6HowO+vmP|;29Q16JS3oIK)?SuadKjLH{p5y%evtb+>*eEj?4rmj&@&Fcpk2!5XQL12z}oL%3P-(N!^F5W^h`Y<(r${w4^ z2OcA)N)RWG>BA2?bo4X*>91J)IMIBnNJJipi=OWnOiVpg=~M|1!U&3`@hH}+2dat1q+9WMJ62^6FL3AiIOOcW5mwln&431I1mR`Cr25$QhYPZa;@Kzd-dJPL7 zP0TC7w7cJFhEFGJ@E~DEqGz(#Y=yXK zuyh`L7|5Zf41pB(q+)|yiqFB>2DhULUt^p|{0zYRQULhq6>ACE7Gn}Ak9AV&lXv?j zTbfz<=fBBPN@ko%w4YuiWh)0XWnZr==U@j;_o9iV7+J=m?j}tBh-*=5?m;brHUY4` z16aaxAD!e`g$EFQWN2a-_dY4_;!Ey9QtdOtPkz`1S!)v!6s)VO1&XTwx}oh^C$UBJ z6YqB>0V31G(`(5me)2IWN^@CooSLpKhj7C^_5&s{p&QD%=;U9U%W_+RnWFmXY);uT zDKJwEQUX5Yp8x|oa8Cdh4+gk^0ewOM8_AE;tzD~XY!U&Ui7VX>yCZ-Tct)J-7mVO0 zfSRWXOl&cv_@FhkO+?SBFc-|p3QwF8V*(B^BKL>(A;itAED*AcRLNZ_HxXje-dW#gM^y1C3J8ITfYT!`t%UG9+RBetswg+oSP7aQS;q`JEim(%rl z!2^?bnPIvzV`5*=oUi)Wjd8(T$tDYACB9m7ts~AG=?YO$d=Xzr>kQS%A8u>Pt<~e5 zc%mwWjr5)cp0Vj_627SbAAJz;*#~Wcb3NDi)?HE$ouM&MP5T-6KyqRNy!-%JrY=F3 z2}^Ec})v6_Wv zYk>(+;$Lx57P|qji69qXD)@!yj_}EB$o?r<76MN}lEr-0UuTd*>zg6^8KVdwLPh%J zM_VJ@OlJL1b8$-){J?>D1(v#TsK*?ybdS*pt;mmM!lCEKG`SDHcYZ6D(x5_+g?Z+#t!2a$$iOlZu$JY3t!0=xD~+xtp$9QP9>Y@PFqmuO@in>ClzSg) zp-p}gNmG$AWiq4dFbR1K*6zvhxRpeQ?#aCBLIG=rz|;p%$uC5PWFF{Gdn6x#E+&(c2!xg@rvXgP%gk?GTwVflk-2c+})uOYo9m zaif00_!aiw;R4)yzMcbu8{klw0Z$c^8EPQeK*K6Sz@dOOJ6tg^8GGE$;^5Chmar+{ zP%_vRhuW#2yxqgbM4T8VE0Gad`q_u9ZnyM=P^ZOMPz9(4zdIE?|8(TxcQmiayA`_) zkEiOs<gd*{&`Ei*I@bT@#ky@ z2=8qf4ot?Z&S&cx-i7xk@}4gU^-{n+p*J1Uy1T?CIkd`RIzm3;Ck=QpS$-2!D)NzA zB%7Kr@B*fr_7xd_0J5yv9_FvpP>-)S6*v%aa)DA31K`U;6e$Oi3EZTQwkYPhpVp3$C*kw>@Q9yo2$1|=^ap@zf$#dN zU6bx4uFL&^Q)|3nYvTJ=1g`8kEn6#|nB@vPH=qrd8PQ(*awcP=&6s9QKVkI;U z^R`38AhQjD7jK0}NP=iCKR2Bwi$1}iHs3~sLCOP>Fc6BM6l|qhT1DSqi)V5^fDyx&s^gy@01bF;jxoq`8{ISZ7;?QJnJi;N9?=YzPEairAF z)aR;C7Tux@ojvSSw_4M1_34f)`%Gkab-Icwsq;k|?pnA-)HK+SZ@F|F4k+8PD^HY4 zvVa8(N40p(EBg1FoMKZZO}&N7xn*;MG2sfibR`tGq6q(u3zFd$BwPg%zyM1Oh_~qRs=0iOS=`(45DZ?%C^2ksM zOk~~nL)lGm2DJxp?jTSYa#)#}@0AG#Hh*cr5&^CfZpe^};*O%PGIpVid#?(ziB#VL z&|OlMN=Sh9WC$)5*Q^ILYEm|DG*d?Z&qIvkDF?C!A;rNbf(@iQY#geC#drz#@RIT@ zGz>$o?V};`!WuXePWTm3#A6db6eZ-+XI^3wK!pqmqOoNabLen3wgeLK{j|*2?Nb6k zgn`NhNHhTh2PGfJa=pAOAi>bEc{x6{i>ur;eeLLmF$fU^&}k%p0(6>(xVS7Q4T$$s z6hM{SF>3FRkS?GAU?Kw)02&v70sxVHEX${4f0s$+1?22@D)alfU3VuqGGQKz;@dE04uZ z^#ST27R_cGhHvxF81E&}b2PYhU{QY8wP zy8A6Vj!19II*viv4^gR<#Fo|l;|{Ww9do{&(*xDbsXW3MzPjK7=SHw|ZNfk*uAJEy zM(f9fG4le$PSH(xTxdbi^vyjhjvE$yf+2pCtxPj9KW@~WiIqQal~DP5SXrHk%QT8p z?$F!dE#-i*xx+$QKpj7jr7wYj=zwhqrrLqA%|_y>h-rWcDxIXbr|t@SBCf&Jj6Eh+ox6UxQj|3 zpGr403a0kQ3k5!3U$4_*ZiEvC!lTp6Sa(jo;XDVJh4}ula{f~QkViL6p510d!& zvjmEQ^WT8Ju^rPJGi!&0!UfgTPGyZ0Dsd4o^bzMl+Ya0n?H{{i0mMD!3;c6(j^liz^&d;=O&OC9b0bFj7jq^{s1#|8WHH+9=`_WbnzhsE1SGBzl4BF~+gLTN{249L=BG=fs32NKD_jXo^Mo7+U6_uFd52J2bO%I%YgsnhVsCcKssG9atTp_Et(}t zpNY27x3+hfJJhJsw~dmNT~}C<`!!eCW4oHf@c4r|6iI!r1qmOfn&0lp`_in=B4YL0 z!WFo^5cMRe<3Dq-diQYmLj$|fk1RR)yQ4u--1K19T3(%RxQ zFQ@Xe2qm}3;Y$@oF=$*{AQ?K+EB7F(jij$5#N$BfRf2dcOSi7K8B@0zf6}Y3S*m_;@Qh2B4y zMF77LeJ24&ch#D2 zsa-jNa3lx_N7CE_nLO1aRG>g1Pp9e2E;VbXg56o#qb_-3s&eRZ2*Q}2m0qau1QF`$ z1>l9BwTj-|tnz@@=OisIM6)@ATm8VMpRUG2018;8iK9>t)k^CN2lZB4SN9vK$tV<# z7|a4z_5NV6>z8%Ox;u!cw>H@4f0u|E)aAFEQ|i1J;CKUX>G)vV*4Tp{=%@<_8qv)W z70iP0x?d*t#ei+WMMzMo77s^qJX&YbQtVh2X}`_P#u6BUhXi?R+kYLG=@1>wJI9Ul z%N6xEx8UvNY*aG~PT#WK%E5{6*Y2280{NZGWMo%)F5c7gBY;wK8ot%Z3JYyx96YAC z?6DvR99{aAh%P}@G#&+=8rkzi1fu&FAm7F9=feHSaTQrMije+y;#vv}*b`e0GrA1( zSyQlTxg=ynXXBcl-Ll0}8E5KiY@i-g?LcT`jKP?PXm73%x*8RKJp^?J@TdY5R;#5T zEd)UJghBnQ3Hxhp?_YJ);{nMu&;(5j6VZ@X%EWMbAq3c%qUR4jvKb(Qevs_P-Y5Vf zs6e)n_jE(}w_!o^xRwHQB&_irg`Q|?wX-c)H{8{f`Oip?f=8>vvTbC4J_-S%>9=3> z2*vm%*gi*Z34@~zKL5>ivI)$7_R3$1PiCss5TM?6E&Wk=uAx)BBsx>lErtID3mMx$ zPE?qDxMUaiQ_vI#OD{+c%5oWF!}p_DhCnRgTW7!Ru+>6A)ZHhdKMU?VrQ{|)BL^)g zyVlz1Y*gH{9-L^ZWxU~x8Mi+z&^$!`61L;^nkNY^0K)bJK-j**ES?>s@=HPDJWK{s zP`S88xy=p2X5c%X8lJ+`{okXaq*F@l3Suf#!+l#3M07by`znV9JWdj6ed^GO_9!ya z3Tr$*Tcqy<%1E6uZs^c4ycu(5W?FY;*1^X!>}kYBAq;R0b)(s1lD=R*i4|^ zHV^ui2zA)6Pj&?&d}Jb-(|GU4a45z4s^xu0lJ8k(MV8=s^WxAqkd>f|89$1 zXetPQvl?eR8aOIG_&QAp{&!T=!RBSbC(GhMc)tynVslL%!GYib(f`Rhcs6}FtniYu zyX>>W>uW~5gKj(8>eN;c+jeF`f*E;6f$h5?NeN=Q+zOq__V_hr8)lClaE^~=#)N8= z?D^7mc#0W>jz;Y}+)1cCZwhNsUl(*!^2V{N$W3*xOcF*B^Fwp=ccG4yuI1eYMugy~FN)1~*9o=7M}$@_IJcrnj^3bR zX^ov9h4g=A9ZYZBzMY%1$NJ+hww$hTfiULLvb@aYm#%PDPWO^0IDv^SO&?L8c3(3K zUllWKN{nR8kRO}OfCr%iYIsL3NI`4J)6il|592~vwGT@g03EbCJ{h3IC)apZrH$zO zW+tS+tB~P=)Kc1LYI*-UFqqVXwdbpF^IMtu!8ZOvD15IAucO}SacR!Gw{eCzx5LL~ z9C3);_r(*uwr7IENEY8HD$jmEyS#hIKx5NS;K_QeNI4Qx8JB=F1yT4j6Mp87iB;xm zV6|fy`T4!Em6cx(z2}|Nd^On;j6D%`fY>kn+%EPQ4LvjX6JbuId5%I!tQ4sZe^hFjtHn`s=Enx-HS zqz5N*$$6p&Czd7wSMo3}1P%xhCOkHxSbV8%Ncr?<(ml3x+L`^C+0N-2^2U2-G1aj< zJVig|c&K zn9Q&m+l@JH>fIU@i8FjoOap(}{2oQDjTl0MeWsakH$*kALRmGXe;}Yhk<8hlY8tWNu;1iPwjO+V|24WQ*Pd0>2p`Ta*aS7C{Rh{gW+< zttIJAOp<PH_EYUfIx+6wnv7W$p=Q9%TbVW!NQ_T@fzcqedk#- zqQKAaNGIR0QISAIb6@#+Rh65t1IGI5Pd4z5zzkaf=qNnvrv$!!g}3B}e#Pg`VFKZgOnsnzERLV&awh^jpqpgc#Je*4<%O+5sg~Xy&h~YoHN;lhmUfc zxRnl!>b5O{bTWY@dbS|)EICL_%8>zQ*jLK~s#mLVTg{xdt9i)Y3CEV9o4-vvpmB#< zBZ!F2@6Fjh0u`D8W8H`jl&ha{4{uRC1qo7OtA7LH@6P%3D4%lJ6&=PVFVD9o>fu6s z*ucG*0;awbZeO`aI$#8PIXJQm7&ZDdEw`BaL8UM3qWrSJFFrN@kPouKWYtU!hBJ}) z7VqauvQ)OM4-bbb&a+9Py}s=TWQH9Ef|>qww{Mw`i_g71`yhotDu40y#B9y&M2A4K z)^neVcfke-O%SvlRj>F_01zC|##6f1TYkJslyM1OtcZHf>i((M1YCaqYhWqRjRlK! zljPLA5I5Jb3{lP1142Zz1p)2wny;zOt228R;JniE7~`3_LJjyT1feYR(J8g z3{Dv?mDY*e>LL<^%Gq1a<=~$(gsJ9x5A!3P(CF@02`oVddD|l9vG2tO+8Rr{g2{6U zO%!ZlXXC!g;TV*EM^0p{kD<=Qw!M#&TV_UYr0Cje+Xp#7YIrUd5s0)V zEj4;%02;So7IIK7Oq>?9S{*z(ilI`q3Q#2X`oR>*`uA2@*tt9=P0X<1Xn|(x_L?OL zNCvAzYLcDiTr`Z)4c_gLH%cx=D*z7y*@qx0cRnvG`}?87zER3dqH4L?1xI?oRcw=aUfdM3RKFjF1l zJrS5zxKG)I=+b}O$P8a$sC~~O1Rnb7*k^}UYwiC<3uGdi;obq4b(p`%C-1ty$ftin zlA=js{JJ%gF^v2QEBF9NQbe%~43Z38X^{NTV+#gJ{wDYWfFv#c1xb2&9mazXh&n&J zR!o{OOq-&=uqW4`8kRM07OfYBTDiHO?Xw%)cYWWV8%3gyqmIHVyX$w4a+fkQ6tdxV z;VM|NH$kfF59P|ozf#_3-RT~YYx(-8e}@1%Og<2V9g4q(dKwH^0SfI1P1uhQ?CcL< z3M~QnmH*`_-XMt|0!9($(CH4Lloz1TGWte24Oya4F7$>(Df}fpNqrk6(Wrs9$D$V> z(e`DBn`JO*fHnzLB6LF0NQ~^dfB|r>pgSBh1kxdETzi-hZ83LAGkFoz5|-O3aeH{& zR1f(96dfG+CB}d>@a3KkwQ{w7RnU~)E<2Q6b#o@s-HSYn&tH35h73T+vn~5uX^_B3 zq=t0eN3+U|GpE11oALWBPog5ENrdodmd{?O2;8=FVSL`&mAhiDXFli|`64KnwO{6A}!~*%6&) zI4`d+9NnMLpN5mZa^T$C7{gSo@whK#0Ys({K{U%MiGtvYWn#}k64(5_!I)9eJXfI; z@w2xwqh)r-uR_8N@QGxb@ozz&J=l(1LN}hD$m?^{42pRFxPG>KM*qX3NJ)x&5;z?V zT*mzlD|51EDy0y8Sv~5lw+sp^%rA0HTL0h?15$TWTWv1dcvoI-qnw6CHbkgmf#aAqpo_Y52Zou){%zE72e)Zk#E~=7o$lGBUQ!tJhPJO7&yUdrcO!mct1s>^?IaV1 zZ;epoVp|&mU?A2V*gk}R{k35^dsH-EBw3u~q)6|r0f=x+ol7e*qf3GxBN&ScJS0+- z1J`t|LxqWlaxjXiq$7=@kn%S5Mmr>!5RvIx8??`F{!s=dr&eKYXFH#@D{g1B zF523mD+5j&+;FTy!btWMES$~Z>7u;+vD?SjOF{}sb-;D`BN!++qWGX?Z)j-oq5zA< zApvl-AUr!|l%T=mg*Nghyj=W91&)q07pQ02r~PiQpt4{nAZ7GAdTO@up23S>nu#CV z0u2vXEC#OaVXgc}PPxD5t%n8K4U5}=Z$Jk$?D61+XGhE4B(Tf~nml$KgZ z!(v&rT(%INW^0U%a;@TXe!PaV7xwFlmNFpG_L5CIIJx;nZ;4ASx9*{28(K7_c-@rB!cF+W3^hCo7s) z_D9U%W$CCBdK$YgYCD$C5N8B(IWP#MUBH3LoHKMM?`4nn=ih?ebR=EA%6MwvHa#)} z$?0_t(hkS=mjKHw7c@%`RhmGJoe>4Cq+xz$;o0>D=qtK zeUBu804&XErC|e6-;e@H0(YQEsmGe=z{v|#DH$#}UAGH?k|qFo-ao`ya3OY`#|vKG_N#d zedN*hPI_kju`*l@m;6Y(WOIANEyG(sA z-UPFr&ur>{e*UU{5f!Y9oH|#&(Du-tD|4N%g)aSC5-rRql=eWT7+vA($GRRi;(-sp!GfVwXc5Ui@YB3`2ul>0Y z7=-*g5eCItuO70+!S^)BxCvV!T<*i~Yh)1#4P41dQK=TMrG>5Lat8@e2%!y!VYg2l z1a!!(9#VW63~pc)(vc;CK2RN4VWJ7Aw0aPTC|3Xc(LzG2=Y?Y6jxzUV{Tw9|?l%T1 z%O&XcJIkh$anH0{HtYf2kHrQOGQf9b!t^ny6)BMeF>{At(d&D$)Riqk>Ed5K#k>k7 zw_(^t%E3S*;Je~8jdl9RcQxGj_#EbwW}+^UK%swV#ijTy z_O3%6#)Yx^cDJ02&K`9vEEpiG!G8WO>rh(Jlw;eN7|0J)3!rtkA-mC6m^8X{E*PoJ z%(XrHQdONkg>#@NZ6)~dhUAtwy5umE)l|G;s-`H1)0hQzg}NK;ny>%2D}4XN?)ZB# z8HonM4%8VpCHA2%K{RRU(Bwli?0X4LvP6ZFO~2zhwC{>XkkTIm^87xi)0f8rqkcLo z@TmV00PuMW0Cz2K@lwUcJ*bAAG~D0Stpak5Jy^MOgF24Nm0E(XP zc!b>1`gX5jO*Mh;X2H5c4jTWKBJ31-p=S@ogFCw9dsGiIQQ7`}%Y36hd{)H@43O3E z$E!@xNyo;DXmS{7@Du|^{WDI0`7ZIFQU8~VLB?Z%W3b$LkIwh?U)R<8vIFj0S~r?J zqrV)3pMdL1bkG)-FUU=gPTQA7YLo_#zB8&vBtXfSf4os5QHfIxH0aw5Gyavjn=FQB zRxQ)&WUrUS<#SGH79}xL2_Sw7FD-MbS3mIR0P6BpvQrpQrI?(+Dz@{#lU`UgsyPYfn7)>+G25eC~S*QnY7$07yH9m~H<8g|MVSk$mwcTlsr z=kqO!ee(>$q5!}(T#T&1i9(>q8Mu1v@xH!u8#H`B`^>;IXBd_r3$HSBS;Hp zQ9QV7=w~BP%UHcFKK0^x_G#= z5e(hyl;Asm2nNECaN&j%gD4b=Z~JSbwIPouMzt49|BtG(V8|+Hx3-9YfPj=VNK1o+G%5{Br*wC>#DhqKbf-vnH%NDP zw{%K3-#qxf=bZ0H?AbH-z1DS&6x2#)1HwUj@0lRpi%TrC-uD`qM@Tl+lg7)TaE0Bk-wmx<%g z+N}?zQ$yp$o_T8nQWByI+o&!IEkBBgPaVoRZhC8R9m@vSs}3P_$*J1f`sZV>z)WA? zXY)Kkl?%1woE*&bPrXR9oZuK!s@AP`y-xJsbv54{-ODkmDuOu9pgaqnppB z*v6VzKX1ptLwN(xRp9<=J!Dn7{~yA^r$`$J^p&vicmZf)f&spY{{)KwW160Iahg;W zLn01KST_1QC3=gTf<84Wh!FIW{L@wBkKFg0Ix3A`16>906GerVpyovDO&HrXkSj9l zapbi506ij3r66}_$}Z)GcM=6!&)txQ0SwxIr4smrx7&J&+e z2C8P6>S? zVFo&K7<-ByE`kCn!T*}czR9@WV;1k?YTD^8Ql}hz_^7U096XjrZ$CK?&+qO-eA@h%cv5<) znb6LqXWbuK_EuI%N&NM!5_~n0XU3?R&NZvv(qtgvxjly@+Kx=PlM3b)>?oPs*U!R% zFDo0oG`#xX62O~(^r1%M1Sl4Ff~uh13+wk|@9*A!e+0tz$-Ihi<>h8@X+%bl(Tl5z z=(-M>D7#4M*fQ0R=(P7Y^)E|%HO=lk>Yo{B?OQN1gwNKi@QQri+Z6w=P2g8gl4%}{ z?`j>%kaT?(7yx~DPzJA=`=OUhG_UD?YG_X~FT;ne9-${MV4GABb^}oga^@>wLF*QS3oU`-i-{yG{OiH~=~#xM`v%57rjc{RLuyyV{MGzr9xDqZtcia+pCf z@GSG{d@xt_i%8FC!;BAi0X4L40EO~H)q)_zW-5vAp7d6PZO5*yaRv?Qf{yn|dM4kACPN7kSF zXY?a@IT+d{aVyl){c4j5=KR*mhm`C0C*pS&0cF1niRlSLcl`UwQ=?aAAL7d0!|C-0 zN(Uuh=?L%H1do_3W=;CtJSGx*YnzxBNK;>v8{F;ZhTWIt7upGuW(f|;1;h=)D@4%S z#x4ynvV!V@G!){R76pMm9a`%^CNVS)q>_i!@wHR9E>Z!N9^ohNV|BsB2d*h8*-4B~ zM+%z}j`z3{(4tf8JXS2<uU;g)JPO{>WVHU5si3 z@RFk>I$%>qg&bbd>!^nqdWBkLqj$v+awrBZp+W&{LEqbyn7ii$Q_&Dwv?r}9?0VE} zHiJZXj6<*SLh-A)yR>u#RxXx;*UOciLX8+8N7l!ef4rSK5*Il`T|es&r8YL4<#9!S z%!@ObCgaAwLhAcYj&gP#eF%~FvAY-{sRSlrUsrA04Y&P!0^2r3^IVfaGZU5a9}6(3 z_!aEoxdQ0!>_>j8fwbbgX7YE9ls8d`KZu1O6|r1~=}+rRk|}vV z%W`F@eKV68z~t|j4c+;+D;8{N8Jv%dkh#w9XhNI|C+7%f*(^n6i?=Kfu6$p+Zo%I0w4!^TN57`wj8{M+U~VDBg8A5Nu28s5p1U~- zase6*{bY)Jks2u!RuS&R&5Ek}iKaigA`HrUsb;r$+__>8lkPh`lpXGQ4+)d~idXuG z_lGEK_5bEz(sh4M7M=W!3+M8g%mH445@HO%F}va>gth-r*?pV!FOHn=(zz2CjN5mRIgZ*2CbWsKMpZL4?ynIeQFHEY-%4KQtdM_D@1UOEDVX9W6gs&<|0A z@IXaTNyYOJc|LVdcxkL&Z;?BJ;H;QTeW*o<&mJ=iR?fVlGZJCE0mE!;izLxeaphYx8jE%EK0wswtCLtI@Om{8#( zd5J5+8=dcWfLY=bQm!sMPD>2u1|Ck&FKTR!;xM;noFHYVW}m`{bie6rmy8gaYPu2_ zjv;8ZBfk2zr$az|#C&RK+DX+JyoB=kAYwy>ry8=e15D^a%VNY1ZL2Whi3Orh{WxUVPa$CI?1a=^IzmZcvChKfSrkHjn5geT9vL*gn`oluB zOszL4!{##jDQIN&dtO3j&8e=cD?#i$H&|d=y~uf?;EV3K8U|6v*>RjvE=Dy|m2jUo z0;j^OXRW;T&W!Cx_}LMs_%dt1#m;rnt)FJr7MD|Qp0X#C=q$SA4DrY*e9q(Uw+VWF zQZ6DQRx__^*EmfF%VePS=l;90T&f_B1AGo3LUc9g^^;&?HET zlJ3`CZKLvbt@hzbNnynzClCTSPk98rwP0+1mmiZmzK)HpC8RijneU02zftLO5)P+_(G2|DUXFTse$@Ae#)W2AHSQ6Tsbh!} z6?>=*!&i@Sij0AFqTnboy7>R34O#25jgg93 zyvnLJA51`K&dL@@Iq-O7t=8(?mBMJXZfeXXO8)V0sVI&L{*uP@#X)+d0(<0q!FhEG zf>7jFuKEsjyCFzZz?^-kp_B8-2^m^s+9lj;k*f*stCfpln2?_9+c>BEzM ziUM-d>35x14+y9f@ROoPq)|NJ#-MqMyBVWMEmLv=a|X3d{L~Oj>g81}w>#ojKTAls zHT_eN8p!M&*e)i1z-U=Gbq0`9kbVY_j+@QZAJH|H7)xpaR)@(!wNO-Y^}F*^e4p0U{H6o5u?hw{HmbOph^_T=?zl)Oh`T+^P?4f!T>9|4T%g1G3eXG*#5t@ zB-N@A8!j$Pw^<}U&>67Ip|V23OSGA}Sg8N(gjL<8!B1QZNiYA}Q79Qlg#d?N&ABFO3To$56<~pS(2V&7nj!<0Ex1(V;_e^5nyJ1^MX?Fv>S5oqyi!o&_*{DM3-zwpnXigW0oVHoFM^DFV*Ul4op*JHz~ z!a=@z?B{j~lTOjPHqn1@tfeqK@5?TUWPHSZn_?fXEl8>W{-c$AVXfa3M2^Zo%|7_% z^V1+ZP=6k$Y5RgDhZBmYBlV%4x}S#XGqtaLBeSIxw!}O(q$Q0BY#{Q8Z@>g1!6QqD zvVX?&SXVW&RZP=Q)sjhPaB^Z6bQl<=v2?a)#$JB6t9KZn5`BC}AO-wpT7UuX2sk2F z+CRpM6C0T*6j_3da%3#f-h|6?k*@K6?JwHNYQ;AucQVj>LzMOaHfB`UCpE_QO~y0k zQm}zoGJ(D$N@TPQ{*1M^+1e-VJ27+WNFf%v@Zy@3B4si@eiXD=oGVGR3QV5MOlVIDJUKhlHnEpBiC zqViI1*bs3OQ$Dn7eVsDv;rB1T1lZV%{ldN z0{@jeeDVDE){Ud{8h!yu6}h_>J>ZI361f{kDdanLoy%s%kyTbUw~iRX1< zz{^5g$6WgGK&VppywIiFs>AEb3@#)sWAypJP(g#xtYb@$`iN7dgt7Q7;fg2K?`z*{!~~JbCyCZfU4vn7(XY3$YcxCo zA?Pwm3QZV;w!BIy&i(#Yy^a6Jgk8&}CpphAB-YE&Ypo`dW~%Xsuu#l#w*nOuFqKad zA(NtLh3~I{uuK(92;%?Dn6ooR#s}NQ?;xdQA2n04)A&27EwLm*U`MFilQBi%O*4{$ z%Pm;fuM~I*GIOe}9xjPJJNTfu>fNR8-B&A>MhZ}kJmrh=p=ui4D?9h|4Nc5bI2+%6 zu2%SO)x87B!H;^NT6ot_m+6%I)sx){n3{-zWy% zi0rNJF1-7<5phbRr*OLZb%1bVjg#=W-$}h3|M3~@cf!G1sBEkAnjgZJhT+E>C=>6i z=&2Q0Qbr#~y$#8mX3t>_Ch8$y7@7$(`V!bu=VYw_j|9}mnB3?QbQJ6T0%3z;(qZ9cgYKjm)j6j7 zz7+mCk-K9bUev=(fYpRB>VBh~0wuo1$Imy=oWhHGcx=&6GAVC~xLCEgKq0|)15y~k zZ0>p7f9Kf4KV(^hk?MX(lpn)f5AWng{B_p+W1%z=lM?|%28FqQZAUVQevM2kI-_7$ zeNoAK8*^Z5*Ll!Luk`&};$tG=-h_wU-C*4FSLW&heFu|pMxh$7Qtlp{ik&`-a745Z zf32zQVXZ6sOXb`67Y*|43NtqQwHXL16d(1~p8ju8kP`0DbQJ`d;vTDwu+OlbJbx0q zFAQS{iRv(`p6V-5k$e3bJxq{Rk+5XI@|OYO+abX}DG1BZQG(ez`=2ODH=B!3(nF_HOH+A`3nd=plf}=7o2T5lyD4l5 zJ5(nFHdP}k%Ny-Gg^k+%G_giY1tdTA^2QthcJ5J(fE8l@?UnvytrB2`yaALoDte20 zkzizBJvU2rp7a`|quIeHP)>^8e}|B>qRStNwKe?mhqqW1q7Zt>`|0zAf0|keu?gJ` z33)rROVhsV&eHfMy?j?7+&!O*(E-E?aM|C?@ zt6+__fiQ~n9!f_zn!Uvf-FD_AsXFTn>n#PtKB+A`<5okAznmhVZwNOi_<1#oT0Lq$ zN5M90UB8Y=UraJfu`c0ri|gsljOS-)TI0TW)(vqGCz_BPkYLI(83|!EKYrI)6(`~wc=e-)lV9tdMn!5ftK_w(q1)L@5I-U>|AE&zIJjvgCn&1qr+-d2nbMA%+-|WOcsP~|=qb4yz?3WE z78tB>w!lhySC*H|PKpWWDF%|CoRCe$U%5b+nprs#XO@^d|CX9{4%3j+cC2;uv2f&* zcv0AXa-91M{O4nEIgInMbm#fJZF1fRS7^cRt@GSTh|Yh^$`PSn%+>|3FaEOVQz|QB zA;K;2auW_k5n;@YVC0aJv|Ou*>PhIQ+Z>(;mKRvBvs}UQLbJ~fEHAo>Mx}9*k-g#$ zIv}!SxjQAdH$tE2KZiQVz8t%|Y}2Z~4amP81Xy-D+FM74<<$QntBKn1UFceoYA-*GKSbyXc`@AoX=Gd@_omp_7!{q{=o(m z&gz6W{T-0mdVt5-l;}76Bz(G zS+s>z;JeeZU$~@-)Ul8c)exp2^M4&j<5c?dvw-eaHWnzi_lJv>ZZ*{j*sgwVUJUYN zexY}vGLig zi!9#ok2_&4?yqf?u8_GsXjjE}e17ypPES@?_TH0*T)q}b@5}&ynG_Fw_Y?KBKi`0}YilpW0nr zqOF(R{H#RzSM)#ltn0ux+SvcXXJ>AQv&!zvPq>*i130S|A@|_^IO^ z*rDRpz}0$62{k}oSE>53tH`1sUdZxPCBoovjLjoV|FZdM)Y)T%@h$4PZ};!Uh|O08 zf5p;+jjgeUt8Dj1PlZWc5}A5yl>HD&@`UK!-DdWF6(_45h@{gn$z2w_Ic=+W3Cz`b z((VA%?7}sM*xKMW3ej~j!>QW`=It9Y?ia$bm|~$_q!tkJTAh2tukYiWFazbasL9`# zZN$fq0Csz^6k^ZU!F5Vum9H0Np(DJO3pKk?QZv3dBiEs1Q=4D6*kA)6Mp?CXrHweh zuIr!G*4I_lNG^IS9R#L~xTPqvcKlItV!EzyDt|j(uCuU)%RBFkJ&EkzzTzSG-iP^< z)m1HdNe}5^F88f=7gRBV2NPe>NB;IVKj;_>yM%)5kHrR$)X!mc zHag#2e;GJa*WlzHA=QwjFgk7GtZqL)XiE-q61NoOq;YidYIxAH`nvY5Pcn6SF&Uy# zL}4^8d7JVk{u4nds76y$n}9oo!R0_E-aQYPMWQ}}*AN!ua<0Lp;`H%JK_Csf2OXHP z=fwpXG5VoX=S@jJKI63kZ7zajpis=OFwD7s@b;_XjC#PvMh#v_m4}e9L`X|H85u z57VZ8>iWUu)O7;kx0-BNY#4b#(6Az6$;SKk2Al|oZ>?WQ&M=1UX`VCR$ewS7fPzwb zAtN*y9Sbcey>w4yM|yyT@|t0tNhB5dKknHKq z(&FD~9>FoP-OYN;oaOxG51;#%iTAQ#7=g6$vfRMC?S)FolZB`C*7$3rV|W&VJ_tw# z@9*qV&&m37440qyOOu~{VqRSDw%<{*p^G%RlfB-(z`UeHCfL0QHGIf@rSO^rj`xME zs&Dc)4(MYJ8MpZ&Ub#qtYV(^sqb11g098fcBQg%D|j>G;6k$K2^T zN<=^4p>Q}?c6TToj_kCQ|CDoDCK#4KP_|8`l%4iM{!LZOsTK8u4RAJ?C`ln6%Zh0< zXnS*IWr39+DJgXicQgSz7xo)lTrYq(ucCcks_qsLd^Baa&A6u0p#&lu` zyqJwPEhHk7^cEmgZ^1<2dK55U8Y>0Y0v60Wp*nY21Ef{&k5xVv6A_}I&&&*yS9lb^Uu1i6XY$1j)uFtH@T*0`R~{{@l82#r+9h26O}u@{>M0tF(v+z*h8FOyr8 z>C&JM?;iEPi-^!V?Z`Fo?f>{c4~pkcB8j&sV?*j5L(reC z=0reIg0_OKY>$1-jim?qoy7>+PXx)liLy73!Y353N8uBFEmZhK#}IpcRO1%*6txO6L_1rS3dO6&OMy zOkpXL@=qI+Lj#Y&q>Ac7e?xs$uSsgcu%{2(TxCqa`@-+9eA2Ar56^Wh@>x;n`ywQo zJzBVI6>Isyy3$PZI8n9)!q~zfMliiA;R(zS1+z}vHCubyOJ}2(w&vYB8tj)+p{0ni z$-f_5+R!34hS%Df(WL4t4ar>6m#%+Jo+hSS_P5PCnjK2+iMT!J(`z+&R5;BZc~M7Z zBR~)u7^Jw@GL~||!{M*#je|R_kAgeAlg?*d`d0L^!z~4hUPddd(WMQ>Q*A}v0*VWH z?!D^DcVPmI`ze0an=2c<4e!u~h*SK0u4v=^NcLL64W#pimD`0r!q_9K+)u_Q8me2# ziyExACNJg}=@r6~f($F`B&xyHz)%K&3xe4J&X)|Cawk-uy)l=Ek1$1o(T};JwlGKC zxdLn`dtgS3=Rst|`iU^8F?=LYveM;g{wYF$$#n#DGf%B>r+{6lSkyIHJiCa*K4&i% zSJ3jt#n=>XI2^3xf8G5Fc8iM(9G?(qzbmY37Lt5a?W2&gI=HKwqpG`Ac=1BSb_z! z0CmM}UM&Pk;Cr#-T9~`5ARE7etHD+YKp5`=;RQ33nU@DCT0T^scV*hQSXZ*d2-QL83@hAxI@z+U24s#03P2`m)RuI7ua z6)Z!{q7m;4_7b{E@f%BKWYB8F*gNFE;*&a%4Wxq~l=q+G)O^iIL!S~UrR~WIbdM>% zIb-SFrA1zgwh5>6RKed|6+_QbW=k(#wc}Ub%!>RQ20{1FylUFwZMQ!J*8?+ED-=$i zypTdoGv1C7gqmLk&V*lX*^YU1T}{)Ss7Lx7a89< zPF$bSLRGWducNzVgAKMs0tk*iuq8SwUN>7gbz$yZYeM=6_U#vXC_c@7x8b$OE<_;L za&Ac;eGXkzKDp2#ox|3hXG`cb>P&_*Qx4S$UO%1&kMUxyL=qp5Nzn>-DqC-z%pf?H zu;IuzM)v0_6lq^H0ZjZ=|MxH2$^gr&$M|vD>&tz>Aj)1~fAPV`A3A#y#M^3SbBn!A zrhy+=rSyD0$e(s?(c%hffbZ04v*(MIn$_!2^%;%8cgm|95)EL-A)p@k=z>f=@Ipy+ z>Am6n8BqK?+rukHm8N+J-ux26rZn_y4HnoEOdDAN!$ngF0FXkBbG`72E+T`mWIli77neDy)R_V_sF=>Fv=%|1w;A_o(tf1|RY)Z$1Q>cN(&6r| zG}j#S-6OoO~LpVBT3AEf~T@Fgy5PN*cTG`hTwu z^O#!?u>TW=lu`$qi2oF(RI@~48VvVZbygK@T;Cu)^P!{!oyu@%r}EkV&ujm$xWUpr z;&Tj_tRjPDyQ?<-LSnw|LOQ;~X&DdtAk#fOt# zkaOQ$_F@vzQ5Av+NPZ>MZZc7dI30t-=D3+;jJf z#Hifs>PNCwsJtRDcl3IkaUXtdcTzvDAyBK+Mky6^H@ZT%$Jq#;ODM6l!zexgkh>z3 zr}U)~2?!Jo2LwH)kT!UrmivCpm0_bsQiqIMokAy9NNZQA8=kzaCnX#*N5|e7%>G(? ztbm?CT9zf2HiC@D1(r1NF-4T2OM2LSV-wmTn~KA;jtJzFLc_Z}2XcA}I~8xinPeS_ zINVe_M@Ob(Jc|HX`KswgQc_H+`R3X=+lCCjozn14=gsdTJm>}3_Dv=g$>+{5S({3y z79L_yfjGhXD^*I<*AmF$j!P(2C>ok-YHFR4_%a6#m&?8Fp`smaO&AOa`K)@?(l;2N z8zSVD;QP@B=CCl{cO$sH9W?lzHhlRJ^CzS(;PJq+7vpOKJ~B%FC>8s7VPZ z*$k%TwiZ?M>fwBU>b+tmW+Zb5=n>14EJJ$81Upa$CyCgny&E+j`wiu|e-;`~Jorq9(SWB zk+Mu9y)neW6NvcGyMp?f{R9BrQw{90r;-Ke9&Ss~v;_ZA+zaCzAiGLmWXn7!UFtd= z*e&l~beRwwCBj#Bc%x;JOmIv#YyTw|d5$7qSM(v;CnE6WjVQmPp1c*7_H#3@PB~`k zJG?|I{9;nS{w?*mIXgQ$%f+O`!$Yk&pDUV#L@oQ@dDbq}MzclDri40v#F#>R5wkWz z=Hz+=CXNmPFY1vDHXuhw%*%qlubo0+_v9*mrO+6@ES*Y=Koaa^q|JNFn)$wcv7zos zj&WkFst|>M>#LC?vZ5@H1X1UH0CkTB&}L3pj;v?V3j3^#4Oa>Tu}?(ne#ESZ)HTA3 z@S-HUpsY8BsZi}yAsMWbAhp1a?!PVIcKg)9A{(B2)!M>8Kn9V2poa6dgpHEBIP(H! zin!eH#xoc^(RRkRz@d-Q@rrLQO4im7@Nr>KPHK9+GC-LE>6?VVt>LP(FW-9|DS1B620vewWSi2Q>`=Y+pJvmv+})2=4Ks=lB|IX5ZJ^lc04P*r(m zLrSwy1rNpu%Ir08taG`TYk@2Hskn1EAnj-g7$Kz4xFgoTxZ{iRdsJr`_-T?Bzu`S* zg(%S(!K7)&AkXyz3N{h&Ztx0Gq>84~pU7=NC`qbB0+^(krYRlFNta(TRBYUV#scL7 zN+^qdC;{>QNcu~|0o~CHH7besRbUpURPLQkLpx`0zemZ{cZWrTDb9A4BEkik&Ek<% zumrG(w|A_w<(K_^Qj^hz=fG`p_T(b)LudMA;b6-qr`Y9PWVqY$>OqT1Jpn(i z059(!zyh7|Ll{h6Ko-rYScLyG zUuY+AaU5&mi96i8pW)PQap?!&F9-*k2Pm^vs9}}d0~8>LS4|(!xx@1IMD5+A|MWC4 znX=a)P#K-a4njr<)xGN4y^QdWeC89i5qoajemh%`py~*JmQ&}9*x%D(YA+F<(~EcP z(*4Oj*2=Vb-W_&}apF=9SQJVEDVd>lv@78le+2S1>j0|GV*PMZm7NQx>IkH(|2mP`%IwNRzoUF9iN#ydEL8r};3@|j zi)h75u+CK4CJ}=)BkQ-18ijhl*i_VT)3e4HBj22PomCBgW*%{Q!dh|hNj7?S!NJ)0 z;W5v^u04SR*Q=LBp1r}EDxxAHb$7`2667F1FT^6Bi^uD5Bs5A|;oW(=pwzsC{G}M* z;AX2EN27B>*Pxatvuo+3q*B;B>!E zt?XP?z6C+ZhP_`^Y*SWJVHkmO^B^F3-&Za~e|S8HPDyojh%a|KKNN(8t zItz+{D?edp#}?V@+THZ#G*+9h`SBgU9wuW$bK{gff{EGmO4~P{nym@7+~t9vcfyV9 zRS=Oz@0+v6^AMGvqOt2XdP=8&}YJTrn1N0L{DNkR{!i23?R$6FO_a=AKitUekQ-{PtE&9TmH>^ z6bbR}HQdb1Ik*xX!Tv61e~pCeV*m-wHr_Ub3Ld1w%if%3$NWxj;a0$ZHGXX!)m9A||>Mm8>)>_oGbW#(nmJN>dPym-hPY z2a?1VPdeK5OI{#%mBnWagSe7Z>9C`bh?4!ZjrT3r#<+rlX5(f!%r_uf8!v~#muQ+_ zMU91_$txrj%)TCO;-P->EuNcUjAO7Y676S%vfOr-MZdgq%by;-L0sSRywLZX=7?br zWzPJ?LdTXK$@1UiFywKhadkq{dNDWRW{?9m#*2nKpj1{_XDlIi09cfMxM0A6u$Lr-$Og&t>Mqf4 z|Fi>QQQeX))4PN!{{ui}{jnv5-LH>d7sM0gM3wtV5pY@m`JQ+T-qemf2fn9x)|38B ze#3ay2Uj@ngD1GG7ZVZgDT;As(=%>e+*JKE;Cj&Z?JdMi=0L_NtX`2B_QgpOwoNeMPruyxoLJ7b|?AWNq3jc=klT z%LMaHJr8>FuPavcG_^smUZS$ym}R5}B6g>%0a~smrDcxkB(Bu@hphK;?=^mnLLzSR zu?F+ck#i2Bm9*Ba$y1oxzkh5{@P~NRqD%TjW33|i9R$@A- z=~6H~IEfRfYhnZh7XfrP8&*^<$Mu5r`r8ffQp(u$TuAyZg18mOayghlcJ6DExj4-} z)GVC1o|LZY+SfOAepz70iXjWVqWic8}m`!UOe3KWC2t7NnDw9(6C1zD{#P8TVKZ!6oiy?$Fl;Nn`bbLhgw zNJt9JrN#;`5XziK_@jLOkZTGx*gr>0>y){Q=-S8}#5pk9ZHCDz6e2Y<8EF-xw2h<- z!cCJagqzYMt~|w6qs`*?LauBu{Vp-U@cJnZ>Tx*_XNGuAQ@V~YyjBg}pQxQNhzuJgE&5=%yP$kHmLGzjHTvNCyOWqgyGr`8_?bQ2 zLWr}1W!UF@_}JxrWy#p3UG|eusw6*#TJAaqeWBtLi zTf~$$alS=49gejnk_F{UXleN|nrE>{V<=?lOf2&z(KM0(^AhUGp>bTA$uxTnBD|4V zhsF_vILP(iP*D~?BQo06EkgBCOYMz`gkjr_VZ`McL?fT=>wri4K01yLW=Li$}3 z<4uTQJE;uoVbMEH8td^#gUI;F|2q}2I7e(MJLOd+Kh*!zI>aL$9?9@hS5gZWg_;X z8g_s!w2{_VlTS&(;JN~tp>Z)5>=A1irqvxjx-t%Q5u=nI@yfl`t$Ffe{dgwfuEAM{ zQuiR<>5YJnC9;$^FKWe%&!qp?54C&mSzBvP&5CKW zmoLp|PW$uH#P~K8V(Y)6>223_5m@ceB3!oHTkLw56^A2(6(RBBV!r7)r%4U?i*KBs zt%4vQS;rX*V*&^k(cRYVbpJ0GMH!4|IKUVA=JAWXvW4Nq`uEI_!BQ1q=pnWuq@B4{ zcpfWk2g3|W&?r={Y70RAUE^9;ZS=eN#%y9S=11zg;8c!f$xCxFQRDzOHuJ-FRy@BV zYZ1Q5XuiY#$U$`xzNUSty8YzjgXu$`v`u-@T2vgq>zubDAZM)QX`wP}_yfxdhvbz2 zE&msJb(c$HJ8y*!j2V`%3O49M0$7rj1lk`GwB4RS4h8j^LC{#3$yx{3;wg4HArPxT zsGhRX0kJ!kV)+xa<*yU;>leB$mxV}9D>3T6Az9Su{JYOk1szuWEUoBHr zIRBJ^ALlvE!NkjSgz=#HI1vLd|DAKcuJmkPg6H~xAbw6u1V`ukp88RF^6=Vp^jHXF z=QtTr&yJC3=|01(-o}dikNlM5P}jaDy~`Ad+w8$i;|%AjrmJho#j`G$B>}$3;zeFS zutHtfJi$RgaHEh)E}wSd2BZ1LMUOF6sQ+XchK(Fuk|5L=Hc%M6KQ$6GHpZ)(-*4@4|6qimbquO^yj}jXY#;dldqANj$#h zDXlkNUaC_?@io-0rurw9O(!{{?I*Z}(Lg7ZJNMT!pBgewjL1-rkF>O!xyPMPlURK} zyroPW*2bNQ@VgGum%AR0!lmii*WU=H-Y3?_Hm%3m*q@*89dNC^T4Ahs9S^bA8)z62 z;ChOQKQqTR=&RZ^I?CqwCPVr}83#iqe*lc?BaaSJe>6Qze>aj@?Z2GAW%}p``zBx5 zpUyxf+m9S)fn$HrfHNtm)Yfk-XDmgE8k5^*LrN5Zkd_)~Y3hIXwRji4=;9AC-pkFT zF!Ko|_{cZtr39NND`v6B+6pNM6nP(~D2YfeobQm!qJ+FN|ElF16IIgtjdS;%*Q#Tw z+trwc7VpW??Ikd1cFkgtsQYK@2FYpEIu%V`#v~K@;Hv*Aggx2{8}tU^cFMDh489Fk z{fu8war=O*h2{)bhJJWoo3Mlurs)V-$q7$|)32OBhYC1{eG)Mm3J8s=L(Z(OZ`qK& zp>E3bcpDq*-=-0vD0)wcRgY@j)GX{6vyr;95ERKcML+gXgdz?#84|gk(jAfLcXz@39;K{*sUqnk3$Bn~IHJewzmjZj>!GJ3)!hz&KonO+-ta%#{P%>TJ z9ndorGWu95$L>Bz&`r7?607YFHr=-CORHUTd+f`@{cG4)nwBrslz|JnS(K z#Q*#Mve1Bv6^!K@T#{a zfDzEJTxmSz(b?`4-f4)T}NpV7RMIhM)2~9=_3!##Vg*T`nie}7eJvv zsL1RKcys6@*|VQjFE8Zy^jV4Y+~+=>0%?5o6|5O2Hq6{INPc2wM|CCayKmi*?$X=0 z-^9{0ulD(j-}_KQW#BWQWDg|7kA$;+jzoAiZ5zHh+g`t0+?H>JWXpo5CirCrF4N610j?7p{_#{Hkjo*)8VSy{dC5PxcjfX%e zQo_h03yE+IvfrO7RF;{qEwiK5)Cg3Q{M#w#=6a|=&!F5RcWaEm?}Ojg9?3gtH1jTb zm%A_PD3KrSFDri*tod=y%n%lpj9=v=U4$bUgZD{fd9?Wha^*6&I?WRXPk|2=s$P9E zo8cevMvi2~5CSZ!B#we$%u2xiDsTc@0&qh3Sb(&E~aL ziv|zW5(YO80X~}}*fSzFEIUu{WJNf2HZpzDDCQxe;x%8`-}eY;^B3Sv=-FgCJS29y zZdtpEY~(u#N^hYjLYwVIO=+sRDN7b7orr5O08m9(V501(d5Rq%pJHq;ou7sYDQ^wx z#vc^|Wak^g8NobjoyDvC^NYj!qkNbjiZ^$Akm!4coGkRzj2s@g?I%I}}^8DM6Q?Di>!63Ecy{L~vyp3QR@*{nSa57VpjE~+>Y|D40)Gf~*` z1w$SU+{KGB#Uddfq`}~rP0GeL+EIyo7NSdf%KOfHZW2m^~ z)lNS4)tgZ3w?y-FIKdXJ^R((nk3_Ty{xh$S8h*V{B1+ZAOu`^twwIEdwY}v3l#I54 zo7ZK#wuFH+()7TPK#V@th&VM^v|j4adS##tG>kW~;llJkL>H&p$D=qO&R>qXKdd4M z9rkBaAh4X!74e(60NawV?-D3U|L@QL3*8fgWLT#SR| z4XT1H)WD_!?IVHK;{P$QRS1AS(nM$|VNNfs^_n=RY=^vcHmBVq5=9&!Q39YCs##SpsXoHB^iSsj^h0_$o%OzbQsJ@9Pi{ek9WUJ53&)uDl{X{;mr3u_xD$*VfEt zisy`G=>PwyItzv>w=P->NSA;}gLES)Al)D-p`>(oOKuuzDe07wZcw@#RJywxr0cHD zIp00^{)fHSJJ(!eJkKC{k^5^!<&+&J?#zC;K=#aq5Gjvn^Dz#+w)dJ>NDZ9lW3FRi zzd1t*reIb;jSn~6mA8_zkd^+{^eRILBMT*vZb|=hKW8x-v6zCqm^LKa5A4O9f0vAI zhzF&GY%$hxgcF`E+p%W)FXT-AA`)Og1Ru(j=7Hts4A_*^KR66$J(X-lLTf+SnJ;K3 zYN4JEx8EK;vFUIL-3RnlU+y&jqM_E@6vgee=+FM}MGy$GYZi8h`kTvQ4q>UJlnKcO z$`3Z{n@rD%q0qKw$grl6@hmXs@bTyPTI3Vk@&0_~*+}M2oZ>L0B;PEg2WYY*u7cKY zZ04X&R_D1e?TiUI?)qSU8V(IADTD<$;h>=Zd-4o`O(y|ZZ9;8!jW&ui8`OG z!?7*ttux{Re`YwCBxF4c9BWgNOiY`+rX6IVsif3s_^I4hDjLE^!E@f_gCjk!l5zf} zczdK8Vu4h}oyotOCvHZSKQK5O#_F;A^M%at>#~oi`r9*A&-@4Kok6Vd5pd8)d!OZW z?HLfh=Dc6=6-q9K^W0d8@b8|N z5sa_ssg^0yFsaJySr{`w+kn7}K<7k5gHyX*?2WI?$J3TV7K151J4(v2 zLZ?4<$S@(qAz2BEWMpx$%IK!w{4&3p ze8HXB`R!4S;K+?AMDXY;%sHDVhj9Kh1gxd2#Gt|y>dy7Q+D96edyZE9GGbhAmYq|n z10qY_6HZO_0^7$So9>$(?tEVx37mw=>gLa#@aOYt*VK<P5_I_$j9K>N$WMmxyT0l0bueP%mO0@FJdTx8kv! z0etDyqB#Y$JItzEwp{f$z*r`A_AqJi(TfOdM&$_Wq|Qx)#iI1BtfxiA5cI*gu;N&0 zkZoQJv>CNt6DS8>a;j`O3(R8m>;6Zn3l1+PPc`*NFlrsX$ zmd5vRbo9l~MYe~I&3RTkUVv@%*<`+*Cdll3UFJ?w_%E`fo{%O3<)C-}e`((*Phwwg zQ6^-zfKA#;0E`00{@*_;&cC@Esv0;J2R#!617XA=#Ix`QbF78k`Q7JGGsylK#{d0? zKKlnr4j1C@jCmmXy$jr~r4;QfG`L`S`G|f&%^J{gwM@tVxN)ODeV%dn5ge*&*2ZMTllso&Lk81 zn?rx~bhoZ17sZ8}g62kNn_vG0<`NbVbTu8@5+d2Oy}$0JhZ+yB1OXyLl_x@K5Zv9I+@qe@lekBM%9|O6KXR^*8VdbX?wBx4 z@rK-c4QIk$Jx&hn`)F1oBEY@)CjGA+4O|K<(UT&p4iVOI_>y$uozfREu2=16=Yrq_ z*l~bp38miW6V_lFheXHBr44;Qt35~fvxRztchn7Q!?Lsw@A3$st5@w>+f9m#PblQY&| zTu}PG5XU59d+N|Gidbc&bB%C7uH}dr1dZkPz4HgMQE1|}kNVu#$piZF{5xw%-X!sU z_d{}OBE}CnZm5(n+kA;-;gJMV?8>M#b{-8SfzXRC;8MoX%6SYg$tGMUej468w}zR#S>D@{l?rbA>Wy%K@5p{NpP?D6QJwIWmhBLCI zJwVhYQ&S!?ea$})pd>yA>ur%m=>?c zW|}j9yr^$l5GiyF+#^6K{2^DF!PIaqgp|o@C*&KI<=v|Uwii-7_VWlZJz8(Ko(u`a zBD*Urt1?F$m%);?xs~Pi*}m_(YeFe1PlY0>8friIGD6C86__%}joGnc6I9o>X1w7& z3ldT`Zk-P)IxvO;z5DEMSE(fGVMp!e&~5KNR;)+yM0)91mC_I9;FI6@Dj1c{&$t_3 z&&~x}3cp>9+WxJRL|e6gQKyeuh$6+m%Fe4(s;UP^Y(G5itlno-O5urp&i3aZZ<930 zf^E!8ogLxbkHt^xvk5=Lz+1wQWI|!{u#%qTGe?}d%p`9nfQy>?j~-o=P0j#O4SH$h+dLky9Gf852e>>dCob; zrZ=OX!-h4q^Px^`OwT3N+cF=T?y}~-J^h@|`8$}}qg1jdCdyU0ts*x_etw0|t2?rO z2P0dngl>4Y;|u00o!|l2%#W3lwq?8smod^ab{0Zz%!}sEkL`yf;p3wpT+bu5^lz88 zegm~pum1rLnNvz{x_}qN{#4B|JLeA^0#SKCP6R{NN^|D?U=0y2;4(3CEY^6T@=q~+ zPyfY3|Jec_2%V}BQ`zM5YF*nltXRI?%h&nnGO0&CS7siEgeOqq9-e5xe4M{4W;u(% zR#XaJXUfGAGzx%^)E7}#V%CJM@EhmY#w`|&kYb-E>lLI`D#U~!R)?+mT@9`g>9Pri%+Z|JQ};7!aCvvYAHZ zhMLxC>PizDAg)=3;P9#YTD+D483#!K)Egc;U>FN;E{jv`#IPtQ?!zh!9#mK8+Qh88OfcI3{rA)^wBp7PB2X0mu& zHWU0xqQ`KZTKixq`85UK`VV%?QTX6W{?CS&8P{BNSH3tPaGPtU z_dH2vZ|Ot`jddkaRfCufzRw`wSp$;2wu8f1HUhr7~y18wd-7WV>GFx@D@Q9=E< zcMos<=j9wK7>nPCJ#(acnXJnEJW#|>NROM1**!H6-Awog$IN)Jx%#kCT$lXxrrJJD`oIolQrh zIN&~SNDJmcy83;k+WhIR!11?3BW+cFPY=+K-;DBX0sVN>r<#YKya}R(K5bqF?BUvd zQa{}sXJ;Tgo#A0RA*EmTI?NKT6^Qp(cL^6MbZhYL(sUtV046c}mjDoy zoQ_Z(Wh8Gqx$<=WL9Svf-vCp-J_!Sca}#HY z2yZKENs&o-yj`?K%yX{c;u54$UC`FamKC%t3Q0Wr5*qlN>)}J7B$@|eZK=2H@PtpS zN!2$Ie}y0zw!IR_5jy=&W#>reuakPgun_%+hyBsl=4`uTYhWEm-~NiDWBc%bC4WSu zP!D3Y^8}a}7#9fR?1+8kI~+4LSo5V;)=@DlS_C#UnUsK_KiiyH)!SWF6N0mreVQIM z4#mX0tfL@1qu8FW7lh*~_=L8eol&A9Ee@5|^Vs8N;ohy~;zl5T@%jGZ`#k{mu)NF` zYX}ivh_{$SPWFX}c;KWTrEOmcABVlyMeo7klE02tjez`ol^4-GCFAZtd_Xl_c@0)@ zlkihPva|F!tC1Dvo(5L)%G&VtH8T>01|fS-;Q$fn8yQ;FEk^wpYLLD4DyRjL0{<;! znpz!NJ>IS_7*KFnwxMxwKLtH6{N)py^yGZd(%EZyTaE^PG#laiW+^G~1tRn)S7rhI zuhSr~XnHaRIaC*ahR%1d84HSE{Lytg>~G}Ym^9hA;W!;BD;;dNiXR+|x>$M^%0Q5H zmmB+Sh>&^jdTY|$kwFTq6B%1LBB1~*=<2L`@|Q1ZJRGjR&rsHgKHTRz)_UU&P+bdekCb=m}t^15_DW%%S~ z05ap(UF+!dHslc^+z02I2lRX!X4`OZAiumipj(=XTMe=}nTIh{Vet^N&4+AX*;~#n z8!n!{x;}f)M&;J6ojyR@e*2)VL*$eunXQ_LVHJt^hcP3!6S z2shn#iZ}a;CguFO1|Vmog1czH zRLWt-iEYy=_n4Ri7X4KT&LN>HeDagr5-;k}-wWeljl5~7O{fvT21wyLZodotWiyX) z4RhDEcI#cGuRP1qrJJE!@Rxl)F|?qJ{h&y4SVl_DD87KDGXE+lg$cR z?I$&+lxSrqU%9j*x5R;?L_MkHRg)kfgnezk(Uyk1AK&4+!y2Uyi;YM;z>fPy_1DDJ z>`)af-ptS${>6OY(zzM<0e8XR82_1>kA?|IEc&wQJYjU!9hx?sMox&G(18r3(hQcg zmiPoWzXo}_ZKaWsd1^XLw!zavN9Dfq-gt2ksO49Alo#Or#!Z*yI0x>6jHd?Xw|IyY zZ1d>#4fS8sKre@suT1XZphZsJz?{EwTSD$)zHUS@Ep|ITG5PhRDIZ%E?Qj_PKZKwZ zc(i-u|IGw#i+RK+;EF$u_#_r*i#4I(D_F=YI?jqeuM1=x7;*Ut&V#r(WM8-rIn0W* z#87>^87j^=g?y;AWJL4Es*KuleZ0TIajjL(q~2lG(ry_b%E4y7zu34-L0LijsOxY) zqwer-;qcB#=fz&e;Y@<-^5b!!64J=0Mt<6OCvcEP+g6^W?Udb@zBo%1<_%GdG%NXj zn^Sw}F=`Z7fJz#cSz&k{%^oMTriZstYZ!fdck6OLdOJ+grRKv|q?5xC-K)Ts85+iV z&t|KB=!?1yb7Odk)DJ5CCojE&RAx)DSkpwML8U(l={MVGW~Feb0)}9~?7J$;mQBZV zTZyTFw@ldE%VEP$1dJ2Xlpzh2h7xMn9RjR@YXYP*x#M$tb>n`B!mxxzn|{YEQZCZC z!?jwFuMhXDPYy)lAFW`kKIaCr1%PSC6kh% z18-CnF>@*F)DQv)IQT$qdlT>R-X32vMD zo_v7b6$R*B`))l139G1WBNyL%48UM)}m@Vq)dZj<=7DwM|0_hv=Meu7Uis0pkx5^P--C!nhg zBc(tC;uAVih%u3Z0$h65-&BS4&s3@(Uf!R@+b9d?Q)n=i*7&rBQ3*g}*QXyb&5-$YAqcs_V+CEI|xF0heN4P*AWs~iP zv=d9ho7vMMjAG*tm=&_I!b8*M>q|%|7KF>nE0E%a&eACFh}SgiJ96T>S84CG%OWKG zVMzYcH2qxIddI88hA@SH%|FEQq78q#t}gi!Ca&tjS?8-^UWnKG7d!g3t6#J5rN%mN zKxfwin1@QLAE*xBm&I?r&*~JwB1H%5_ujc!@_q6j-^#WNksJ?2-MYUzwaSPHapYs_ zA3$cT(O<$(HuI_l7+b!gKr0(Ad2)1__y`kCx<>r7dkSEpJ9Q(0fAQ2x7JfZ9s9*c} z=2=IH53Zt^?Qzh#@(GR@Uf~@jSo8&H`DN2~gGHYppoF<`w*Flkgp~NQYCmz@@NO~6 z$i>m**_G7ZmT`UR^9dx%yzhUEY-=3tB zV8>-P$f0K$5uO2CzW2-Ajw}DY-!Je*-LHcqAm)Etz66a77^bf&fGGMeP?T|?=n?Iq zb^InTU|ASyE134nEton+WFya6d4|22O}HQa{@Y#R_+D}GSu~v56%28~O2Uz1y(4W` zAV39{090Tnyv~^J?C71-2nRIsvRQc5!{7<8>tz25H||G?B);1>@u$&9-8bJI1-3}h zy1jpO+dx{@BgMz8&oB%Q(7gJ-eO$Sc`Kh&|B3JNO(d!2lJr7Nt8}V747`baF*Al4; zxu?{4V?8m)toI_L5f8rT8a`LhM*xg0Yz`rBQI%1vmvkCk&k$Aba7dMl;;3;Ys;zLB z;ObMjFt5}Y6Tt@)gPJU#Kib5tg!RgrxE;a<%51ut4|$gA!Gx&Pxa8*}o_pPS3v{g* zFWE}g=t;>=sZz;q56H*#cri4dzcb%?47tLt>YW#*x zBWg!U&kQ%X&)-O8jC%Jfu#|P4eu#=J)zUdUzU49?e^!BQ{ecd0Rfl!!w zuw1ryMLJpNU4$W>uPaBsm`vIT>rG}BC%-|z^davZKYh~hoca5R>f-0ABBi7~iCX=F zg2*Hm6pHiid1`Tq*+wrBtUl`z3c}%)_hTRmj)ezQsr`Q`m;X+G##U7})wN$9YS3(u z_#j>PdnoDUe5oH+einz2nE5NJuOTNumHJl&s!G)fGKK_474Xn9I8Zd(l`B^DhTNyY ziq^rr#W_3k^Gq^M{FBvmMalrJ>&1Y&UI-VRYsKoi1#Y-ckejx#FBYiv-h{m^9Fd3- z7T0*5{c4pUeVkVX^!11WKwmGVI=~5BA8ckS=L(mLrzB2l>+XHG-pQ1-?c-63(R zv3a0*xC6m4f4@Q@Vl37Q1eV?c9)kb95QvMZ<>5Wn^^Ds8-`r2|SIOE2eQ55d zuwDY|ITDI&CBT1J&{m{yBL9Q`D6Xfp=*q|in$*iFF<*XRTTtm0_H7oy1QkU0-5O}; zpY|*(eetFoFtmRJKyUO4}a!(f-06<*KTq&Y&hU_==%RR7-ohlo`nh-L?ze5gt zB8;j>=il9>O(^_1yz2YJnIp%A7y)CW0cttxyVzD8OfLPM^#)_%v)vQ$U231T@EWAm zXrf8#-!7^z58_#E-+GNTW`l)Os z_eXY_%eeM(`HOAqE?QbY4jz(4tyLwsUMMD~Ewx?#Zi6`tHH5@Tc*8-ae^)`ra2)!a zP<&5>c%}`1G%i{#1$l!{QrWcGNQOasM@%qw1pNTOxo+TFrs`)|PR@qA{A}9r4OUXJ zt<6Cj`b!6wR-8A@w3X`2LLN^TEn+h7;#H6WK|%nXwP18ZohGef>w6}LG|^dG=3>4V zWRLrAkfO0}F1`T=3WTS)!-DXXO2jxt0a;VYIMF?Z_Gg*b?A02ZqME#urR=3e7g1>+ zZ##V)Kksw)>@W>*mBLUBlOLLr-@N`|H6Qf7eJ|PZbnCX%OFcG`p|8o@rUi7JvTfaL zNk3`?q=X$^Q{3+Ex~Xdx$4FcrlY%D(NokccaVWUxK;a(pA-NGD0rg`fAhia^9-1d+ zSx>wzhcQkUTng8>O5uX5)n|rAsm=4F(kpFw$!hsd<`Nt*<%YkGo$Fd56HhS(HAd+q z2U@%~{E>6kEO+QtXjhokBvb@>XvTc%lMi1>|5;Wq(A0J)UoGq4IrAJtaUSy75jo{x z4d;{gIR{87i$VQve&<1{SfB@m;AiksLH8#Z>nvLPSJd{6Wa5pWYJOhai1d4>lq6ZK z4Vz|k|Kj>{js0i9TQ1L6lOG*>;>p}GAZfs8|HO7^=-?F z$ho5TZ&RJW5O6xzeiy$D!a!TM!cZLXd%bZSh*%tEQfX=s@TMAkgtdiT`3IkrsgvPZz_7dyF0Ux7ThrS*s!C&`S6l$9&>@&`eLVLPS(Kudn$wT zWoqB8tn{E~=Q^hNJvN;oe7o&P&7c1oJOZn>vbbOcsr0ylM9YDZgxD7t;rJr~0I}z1 zsvdoM1{Y{=&!LN)YFL76#=JyQbEw$F^lX*rpTy6g*b&W~o6lVRyD_tx7^`3$yz|O= z0fEtZUC4Y_o!h3=%B>e}vv1ihK#QbxtHpCUvi3n)Y3^&(!k;S z;j0p)7R_?fKk7oU;jTQDQYxDz>-SbQ6os4@ZsLJ95P*2rju@sQTZ|Hol;^VAqG?$K z{$w@Qqq-Dtp=pBJtMbE(k)LO2;>R1AXPM2bhv7fjFn2FBJ#-B|9NmppxZm&mUeKtT zhp@Z3+qLqYaN^VYXZr4~T@84Y5vowfld{%hsIhP|h;(#(L8vgCbUb2HHAtc(i<%Yq zTjMwmDXEh53g+a`hO2Ulfe9)Be=V?afXF zG8A|DNnu&^xH#H9H4dsMyJRX|{eem9nj2n013zJuPlKZt_T0uE%aSmt*MjD%z8kws zLW%E%mbDD-Dus{yON)h{;H6WY#(>~*UMw~OqRPKypx;=9%3@{YdR`$GtMnk;@sy+? z(chWw9Wg@OP73H`L2v`(Lc0Zo$+8qeYf#@OHgs=%7JL(kLTQ9SJHAX z50*s-nM;i5y=zhH^aVP0l?q{WC{k0%y4i_=$wYb4wj*M116i3yf+tN(X8;DMPEFDw zzD>xv;z#;^CY~Xd*)}D=TyT1K=nhmOs`MJb6%V}7*og6>njC!4=8?L}ZpVs3UwkpW zx%A}3op2dtTf-2M&ub5?f3maB#a*0R1j32VmdhuImnB+#dS)f96f`m+?`iN zKV9_qpUqNkBFk8n!FGLOxHU%m*7Qr2cB2}F`WqP?HEu-{cJY-%z|LoaktE1vdp>zy zI>(&{w72uzWM>!miqlKK*|3r5aC$eujk+G&;WxJd?py1f3yvDtE*OBTX%y{v9u}UP zqqn22QyM@JCi2&~v9+p_N-I>XR$01j3F4jjdEdId4}U~#OkSE6BqaCnMj*JbC_ z<7-9TxMU$k$R05iUfvE?l}AE$FOka++NG2%*a1*z87EcqeZ27SFxW?53*o@bJQ7G7 z(|j?P-6uGKh~4lmDOg7xQ-Vszb7CjEs5mJWtpfPOd+^MU~x=u=1L1z_zsOFZ52{V@-e z3@q-hS3U@Zyr#+jTHG&*cOBGKoV|Y;Teas-x*kr>e;mWFy)556H%YUAP{uSa*m}RW zu8(*}yXNiO;`W!<1=ib>?dyoH0DtnhR#Q(bEiG*$GfSiW*o8&!a7N1~FEk^x=XyBK-iWmAeNni(jLE>o?V|<1w7)!QSyyIi>;Uk0N}tA${mxE?m`~{o&q~(&ZodRH zD`DSYXbybK{(4JvG&a1waU~*w|7}sGE3=p%6k^uixuWl~0Qm z1%PlBVyfvHz?-5J%B#5HZ*<0WN&{d*x@6=r&c#JHKIMP+rl0sr%mppH%6FmybA&^P z7u7rl8961d7eI_HR2G&nQcBAOYrlBOmgYgS}5%?00Ivo{{bTx#Rg{x`(ruW|j7qu2Lj5O`ps%D-x94EqcM5Ay@2GB!GPCsS%VyVrE1N_4sD-4}sK~kU;MWY%JOn z-etgWB%qamon<6Z7tY1t;_-~JM;*uX9b=MF+fxiAdeMqBd;}4fSSx9ycX8go!!*JrFevB4TracWrEU8CbYC7ZNYAx4l@@MkX*Ny|% zhN#U!uMnK-zw|bly;ymviMGv5IMhxa=FwLXXF#W(=m61mi%p-6#4F`~A?F0U_(8Dg zBLNg@p0GqyY}D{Jd_Z#Ga;n~21ejOP!o;BFRSdSA&@i5>Hr65lA!SG01$BcRFQ|Uq zEgW^g0;gbVJy8;DEIKLC)e`QM| ztijxE=4HOAUa5c?41-`jlQwXy$0EsqFBhZW!G7$unw@29X9<(}POyUFRFzwT+#HkWW9J)uA41k~cRw zQhW_nQT|NEjDs{{T!Ts#e2JX4h-0puxVYe}i#CO3o}G@=9ZWnuA9&UcB8u1lL=?LV zGsL>r|EeEN@7woQFw&BYuh)5XZ)m$mdlc;=nA@^1#kQhHO6`ASaO2*AOh68PG;Px@ z>))6_9vq3gZts7~33|A>KGgFekq(oQ5g%pooS2xeIe#G$^sqlQHYJBP5#+O3iXI>px* zbKk)Ic+J!xJV9@t!Jw^da(Dqu5&Io#Q+)*S{^iLt?~zMI1-N%)tftCe)FTtg4E8)~ z8!OHGJ;{&=e)}cnHYx6i&i9rmki3ooQARLId^f{*wxL=Dffqr`cPq?Nz_FOaJr<$z zRCxJ;Y{?sE)QcFD@gr&Qg%{FhWGm$k6gw7>1|sczAL*LlTts7QzVS3kd~C(M=kL=3Rc7jjp+vLp{wZ zJ`Jo1`|NC`1bl!>xDTZg+S;CfDHNyRlgwaXX}?75V0yqL?j;n=EFH(7(mdnST;NmV1na@#j}h1O~~)8_uC$_sHhH4k8Y2G1dC6Vve3Rm zwnn|Jk|JQiY9JYkX?`%=*BP?iz^BK_5=zk>iiCkUtA~k^N)#}SvTWJh$v(@uG=jkh zMB8dtpYksPFN+&&c&Gs=@F1WxJer#nq!f$K*f;M)Rl*%H`30i1z=v1H+*uO%$&kFc z0aJF{F`B7U@j{PC`r|Rj8!x&TyLYDzH|6N#bHzPw^Q9%>C-NZfq0>jXuWvnd7CYFu znh!Y-)^jlNvVKUpdxEH>T7{I*UT#9<&3~<8JW^o|uWnU+K7fAoq1M(i&k{(VAm0TUrQo+3p%lR1i4dR@@h_KGY z&X#(OLaOkXdk}%<9!g2!ffy+iaxZrwkyr&Y9*3dfpgd;2ar<&``lmJ-{hNs{2@xPh z;cq{hv(<^3Bqu?g=b$&fZU(W3@bEaNgOD!^*+oOB;naCz?-8MY{QhGmCp_NjbLDsO zW|kxjnnGVd{rC;8x?>kUkQ=0bhhmIP(!bxQA+$R^c?+UYGEnN+;EzphuaQ4AgWp?m zfwTR^uF|&hhH3l2-}8YJjx;-wVZVukwIPwAreIWBClEVvRlFFz z`>VQ8$|HocNeipnkzhTOB)vATDoJO&74d`6iBMJUu=kwKY%$%P64LjV?kI>de5US9 z6+V5Z@_y`F!#XJd7Rw`_FR8jPcK$RNFNrFdmrdS9a^>cecBX;46fIb=fzsf^J)+J72*Y2YwCf)jWWQsAXbsxw#t| z*!)aTdke>p1`AQ$X^;uELw}7D7A)GW$~Qiwe9z~jQ(%HjW@MJ?I>#LHyJY>zZh0Yg zdR_s^EOVPc0h_At+IQq_&iN+8Ri%86sGsRMm*zU;6Ks7e?o9ZS86>*B=J~zb@X9nX zW+ws>>`r^`$fa#)IHm*hjn4=o^}25Pbbm<5YB-Ydkq1H0cOr~uNW;=GX5q%I&=Bqf z_g#DD^LV$ErzcS;|E_%LD0^WguDYG?cZ?zBV!P5vFs3B#(|MgKzsfI-1Dk@Am`j3Fsm!fsw)kI0zF_};HeKgLQF&D}izxi0o?&Kd z%6WhaTZeVl&pF);s!^4!E+TGt=Z9WkclMbhs1GuDiii3hE<_deD#M}|{bktdiH}9< zxXY30ewh%)GEFgkbl;PVnj3sG(^+Rt>mPDCg2ghbnkRbQMw{}hT+g4VVGMUNI@)`% ze9QI?~|x=2Mh2d$|T_76NWDh4$M4rIZ@B;LzekONE=ai7j4O@|7!m z194Qvm*-4fYlAi&gR^39p2t{Ht!oR#iGYP=bmb2ZDkGjU3rF*l&-<~bB`<4R5OBF< z{H{nO`6g6NH=IZcC52+ZF>#}&j^6of-OvQWWV&K6OgYGG`g5D7!prAG&a3HV#u}DF zLSf5kI1?SfCNQC`L#0(295p(SV82z>2S1e zwsIf_qS(r|huc*Vs|N&afd}R&zz&Jk@r;)HeZ}&!_Tk|IGZ%73mJX-<`rryICFlrJ z*3YE&_`AC12J?V|bL0`rEW2sC|8LRN&;NPUPD+hc|8*Z<*;?dtF?w_R|Da{BKI1m@5M1(4Ip0KpmF+TF+B9l5bTO6 zBQ7~5(xRt!fyNxtN8x~pt7Z*LZ>zUy!qj|wd&%b=t+zH2aEZzNN3b8h(Z_?zpI#WD!nwH=3 zzC%WsLiNJw) z%fE{AN50bl;-_6<*yI9mQea7)e_~kR^sl z-7f#G@Vq~{KajEA5=s}Eo?WH1Un9xSnv`%ky6xIem=Aoe9Eb+SrJ;C0cz7uK$s&>h zrJ(yu!JJ_a?5QrnB&NpG9qW$8zoWovLz{MWBLCxuox)cRFYBdl-QcF~eu7+0MFUz< z-;sBnH*weUclh!**4yWp1}y`xAm^lUmkB93tU~j@J^SfzK&k38Cj*102WF`#$KnLG z)wEK~V$ZL)K=eLnW@$aO-=_2x)@o`{QK%D3922oipv#O0y37jlLKylA0{&m{6>h?lQ(tq|GiEm_$${k5JSK3o`#}Wr;1$6HF+@$t z!5m%KY$EXv)Gl1tB?}{+KNhIhy~~m`#fk zF9A_d9JrJTdX3Nvseq<1}DDMp}`ix*caM&?GmmNUbz z^mp2w{j=%5fTRRq8CU$nGTzGzam4yM7hS!g3$zETD!(5eJ|)O+If0j%yp6o z@>ffsVZqUDZ0@u|*OlkvuL(MZZrCfA@4<0dASywUIAfAzR#(Hk?`VA!wDzZCe;h+O z2?_Ki-}QC8yq6grcz{E#e6p%?`LxhFD8}KHw;xVN0S;YKm(O*^Mo$$Qw$|O(mEE}0h z3@bg{driV^j&3DrM{<$>kOi%3ZEr8+irv}mf zn;`z*o9aapS0amVvJ$%8Tl%A}ykmOw7@wYJaXM8!@lt<*FWZ(Dr@acQiEBo27q5n9 zIUK!Ayg4}*1?o9bK{fKytU$zf5=ya&WC+fZ*yI(A^Sgi@?OKaeNiX|&ZSmJ~vyv05e@hfzG zur2Jpu}>b-NFE&JOyDXw7S2X0aNYZDW3_b#YbD0jqZT|lINs&|)TigFWIK?icrzcP zLJUVyA(kF*i9&1HF zRTdw5Yb}(P74V6#^fPcEz4JI3F41#JJ*wQ;Ci4LnZ&)giMMHOzx53>)Q#VyO$BbZ- z$hX{c-z}iccrKJ;JrP5!jXFjdFbeZ~fE-C?UH~PK&jVyCuS0C2i%1llED8FLsq9Q# z=?>+TlM3buRpTI3;&h*F)b#q0gXt6!L*<4zg547(^6oD}ks$N1bh!t+yf^$}i3-G) zs{*H~tVOWg{G|2$#UfpKktq!WO6P37tA&o(gY~`eVsCfSPGermmC#A*b|-kUj5uW+ ze{m(Er@t?A!TMbyU+?J5-0>cBI3{hf#@%VcLcH$4Gc#UVMrP$2trvfwSwg(drb+io zBlL9fXE9P-#Vvl|BD2fHe~bg;sykOG>Kq{p1ACNU%~nWpY9`Y*!tBX zqB~~2+`#|!&$^r8JKp?5`X)y878}hLtM-H=H_VItm}8M5+=kKjif$H8)SCM2^~4D1 ze{4Nss^K6zn7A&;FLJoE46&)@SENSa99vn9Pi}~b+vjR!=^(T%84o;=^1S+!X_1nV z^0!pqHV1p4iAr+YxO+s59GD3}tczzcMsXDK?#}zFCZ#tM_zY3*K?RF_RxY+5mSKh$ zB&7f?#tI7pU37u6C zX-Nto5-F`5t0>T;G8+mZl8I6eWJZgg2MIBH>Rhnw8NqC#sbF1?+E!$gPfxzKGEL|y zj)LIm4jsPb1=KyNwQm92jkC4XNe_0^7b9*{>fL{j$J`U@AcL-yOt`fC?O8j+$2r=O zWlvkIBm_<6c`cx}XZkd|ZG^Q^n&X)Bf*vW-<5Gk(7Ya9yE${cXv4E-W*y24U;NFQq zF4SBfSGFK1_|xLNF+bK6yoJ1CnH!*j*b#*T(z@eiEn7TjfwaS^11$ow$Moo(rj|>| zY%C+k9!&qsPrkH@;@B+Gz3a+B2Fp>wxoiBp&LN}DN|!9>s!fi#!{wCvu;#7+xpMD0MVd-Gm7 zmk#lvI(q0YXeE+4XCmPC8&J6Ar~svtKM9@8>y3)@gePU9Y#46O*|@@HU{$0KP9z4K zhG}uLNKJBp5vd!CW-pv#C(%6&%lYj#MRub~)4S>KqDeSd=}!%Mv5XEhd~|{){+bf< zh^NUH3?|A4!s0q5@s59fGg}9#d5TMH=}h!&X!xTfQ)A@plci&NQUEv;Gua`NVP7(o zjQ(z^i?Yp}S6D&^!%plJOJu~es}!0~t}*s&!7@-S+qOt);vPIvP;}6XMSo_CHC2@w z9-Mr7!xWKvwP^Md4Y4)#$0GAIo_P?j;_$FXC*He!G)wo%YK=e#Oq^E`$H}bc<*Z>v zOvv(~5;Us4V~#9`tl3cUGEH;0qt|haGBJCgIEYl{wNrFV`_HGCn%fB2&Fod?>|~AN zCBl9Qw*3$l(8241p{Ppq&#_aq5E)DOfNYS>y3q|?= zGL^9eTMP*!Jf#+=)aKSU%zfhfcB?qalVC5;M`i&VqtX*Y@EgT+ix z(0OV>b|?|#DX_GALs6w>O(6X6xNVSA6ly*wtGmt9duX(Hs7BFkHwBLNw`>0AN0lTB zQg6S1gMTGY#vA2E#nSUF?Xhj;h2gUN)}@~c@~S26 zfv3e$%8_JgSQGQR0#zjkTEPZ|vd~(|3Ez^ag&qWnOt_{4WFHFhd203%e6v+Pn|fGQa^fLq`taV5xqv=e8Z*N+c+0%uK$TAiB4Zf0LC}Z_tb7?# zF2>B_mb%{Ynw=tKV4CWi^eikYx#v9cb6Xb>(Je$ZD5)rk#(5>DIF=N3m;;X-Lqq;7J21t)qmjqBs78HIq0#{ z2#F53qp7R{9dTW55UeI)2LW^J<9B{}6^sfHd4nUp^uIcEvc!&E64huMG;>2rJYqnk zB-fHF;#XUf<}X&xqt$-Zg2pnIl|w<=Q(!&N*H-4Hj$H5u*jxl6_m2NU0+&(Zez><2 zbeJKuA*gbAq7^R1C3FMsSOj}^n~d;He=Q-eot{9I5Ln;Bdcm9Wn$p<(IH4@GpMZqk zLGw)ZdS=*j2JM8Z1PqENQ}wCjpFmsdt?a>2y_t|jHMz&Tg^aL^7c1AIjV;fFW*%}F z{`xcN)S*!0s$ha{mCf(!bk@4mKR#>o*EMo;Z&d4PvsabSczxvr(9OyENKOas;#ggA z3pq-2&SLzK9VJNH=g$5QS7+H!<<>@P5lN9o8kFvoPU%p(L%O@0rAW7QcQ?`{64D_l z9n!5JU1u)bd%x$LAK)h!^O^I$$GEQf=x9GHfS<EtKjkAo?z+q>hl0JVCZ1SDK*#-h?BfRU8BuCP9Fq9u+5-RF;;adI33(pH;$R zAbjJE_s-ZO<-z2;2$)Vsm{9i97RpQhQ~Pgd=ZD&Aj0U!FhfnyABQ%0!51!!5(94YFLU z?q+1mZ|2fK>}Mo9xPBU@6t;&ZhD}Fp>FS#%G6aVCv`i4C@xS?nl$!JZ8B|L&ogG%e zDe(X6m#Gta|2`U^dx+^nd9a7rST+VhsI@$?J{YM>ed$R351n$>Sg}wOdx(=_gsW%% z*j+M+S2OJVBR%lvlU9A~*SmMlb+^9PT}E92`Ae9T!4c+kA0TqZQVgsccB===OV3&0p5%E3_c*<;EU zJTOK8khEG^O+`%#dRG|Ru5SQf&MeV!RgR)39B=SbhGegDy1?fMf+Vk^>+TX#fhZb| z_qn+jcHxbob5rkP^N>}CAodi6#GWi4buh>L_T@I0xfR3Op~j#1Wn!w~9(!)Q@2~9^ ztaj0$WTK8o+S#M4R62uJBmjGgOtn1rLVU0ccZDF1GSWR~Rkh-|-2I9G4V*KX5(iqv z(O0T6DxetvVP?p8)oI3S(?a@0UY-@0k>dBMRaC4P9f-5BPwT8TMqeLfOHK%<8`9yf zFb$bEa9Uq)6TOw)M}L&D{!G(!@x7OVG`Zj##nGeswwJ6kt=Nmb3d2@A&huaHMk9sD*`>74%X03qI|xTXk)i(_Qr6f-yx*SApg4YuKJ1oih=)mW?Y5ubBpLsz#DC2PQMteJ!G*7)V^xf4VGn&+e4MB+C8q+p z{8i_IMiRuAgX?J+jb@UYTNXUMboUxwyvZC~1ViSgGOsVqxD=z^ojiOQBRPcSlKJi>Y>WC`-Glm}XjD`Z{0~lf?0AEqsJd$Y`l?0E7 zOdqnm_U+x>rc|*vL1~M`hPtpEIIlvYt$-$}VutG#U`kXh1 zyjRB`)eI%yms3G^6zu1xF+ORk+`2Sdb9_sWI@6GK9t6zr@k}na3%UW0!HOB`x=Ll? zVLIQXq|cie8vJ*HLCAq^%gN>CGCo>UXLQWweVH}JL=zm>NYCfF=2eva&osLQ>^6gl zeea$a@*cHox1QRjwQEsyJKO3U->su3W(He>S43-<9aH>9J2)=>wzUoZ%ywfXzW)w3 z6r=x~6PmJ&{TbH#dX%Z$l>got7{m?u>O+uVlNdEbj$*H^MBF}3Mz^^ z#bcI?vq;oT+c`TKhZ%=Kg{GAL0kxC3*NCGbv4S`9#`9HtL_@CfM)Uj`la`y{O6)?J@PVEhFq+k5HXWZz@$K^4F9Cn77fL6 zFe99=E|zHaF{_Q-7C%a5VO~iP;8s-)#IQ8BM}$xY(nWilJ1#Ugq;9CYMD5Z=;iDBv zsG5*T!Q<^&MwM6+vVJM6Mun>&0ZUHTgA%xT;q{z8WnLeO7>$;1sZEzh=gg~2WoGl# zBBt%!sJ>UDm-vKMJZ3f-d zFC|?TSG;_B3Upi%I=Up#sfHC(qdH%-ZcjnmV6XQkwAjrf!Rn)Kak|57CJYqS#RMTP z?)GEmK~aVBkx?F!X>Qd0S=y4WXEz&%rB`o|ixE(+6cUPR*E`a_Kn_#qtonrM_Pda! z)xO*!htgxW7>|t0CJaWMt&(8JCPiVs@}K=hhnb5Y+X|`GXN;Dri@vAzM|`A?U%2Uf ztk1qShv90DxdS(a%+m;mLt+)j8X-qEr&^)QE=S$$`$3Qv>GlQvTB82jXBO`Z!&#PD zas61@qeBs@Zw7EWenIFJ);|PCA>@oA8E@{q2ZII{i@-+zOG1Sd@|1V4W4L-5UQi7! zd!Hx7v>v@Hq&G-Dnnhn5Y;=JgL?V9L&w)u@hi3eJ%?Ju~koQMPR9wXJ$R|2pAt#SAtq9=$J!5OaTv^@Y3XM+VoAMi#u= zJ`2jzGsN{RdqyQ;ZQ`yiq~jIzaaRsJ-(zuM%tL&o6;5XhF}e(X0bCf zzRx6LL=-z7Ij|l}OhA0e3Kw0ujvG3AvObk1LIp~o!|l%wy-XB<%LM0iC2fVbPWzH* z31-MXA~YDecJ!>~1_UGFG)TW*D;xlS()Dk05RCjN+|LyFN*MT)f?a8!(S;fJGkw)< zB;xpZV~t%VH1G>!=&^>|K^?iXIJ$mc^b`PxpzN_hu92-ZhSPNS$GX**6@^|8GT^RA z!X`kO2o`Ou`=sG=|0oc7&4yT+dJFwB!4tnXfrvvj%oYc2M511xDPWaUblzrL$+tb zh7*U2v6bLZmOjKpw~mUII<~P~m)mp^zYvU=!UE6<^7(vZv-$aUb+EigILiVYQZ2nX z&3?_A2m!PGzlj*@9j+_5cpz-d@U%hP``(Fs)K+!3kFp7PuiCU=4FH-pl({uQaRXauz1dh3&U24Yg!N@_~S zX8|bYBLlxV7Xk@qH!+~p22ZLhPZ+hVp|x5_Xo4nJ?aYmA>ol06dSGXNe$(g+Qy}Nahb$#e1wrBxd0jj)KL=b)Sg0R19b%i^77!Sqk&wC6kopAY16H zX>&aNd>lpg>i%9I@Eji}d*OW-1aemP#R`9(`=DKG_XavPQ$lMa|pkCnN)9%#B`~NvEtI+#Sz)I}+<*eH|A)82EluJm| zYZON{1Tfviuf3FzrQZ}jmaTx`yN2J8`*)TR{#L40K!OqJ3lP7cVvI;QWctNn? zev2WkV*4W{NAxRMgY_>l^mR9Yk!Psr#$O+|OI+ zazNqBNXK&q>t3>+XSt>eteniW6^|EM$HgBG4FG-!{z>|5!V^tL3U)tgl{0Q01fgEv zAesU2gM$4r#xp4RAzN9BIo?Cb+40v)omP&gms5SS5L^S&V@po4YeEo(A$f?%dC zx5}CxA_nRMzrn9RN8c0_i{KSLfuDFA5AU_hEsn9e2H4g`XRbj5eI z4;Cw{NPoAjL60}E+^ks>N)w!0-qLkgNTo2S{ICyBxAMe@Wax6U;v=QQkdbcB4%WIp ztdztV7O&5X81w%9c`s;-{P!w)ybUkU#kco$?|XJb^nrhBG4r<4QYVNbq#CiOk3 zA3~tP@7o7P7)(28S!t>j^OKIxJ0Bxdm=Jo+sjIP0gZ~*$VAI zL;gGx@bp;ln-(yrh<9aSUD(BMYlf)OILM1#XXDvJ&j^5okiAMuU^6&0p&8{!^`r7g zH+^Z?xnPC6N9OTEkQuJ?b6ue*bg%h`g(vIbh>*I~-8sDkN5u95*2`NHRrL`LGFDwj z*BkT+&;=hQvrGQ>h!By!zJ?wV4Nt`7!xc%`h{)TFIhng4A*EyzT2Lka#g8KR+t<|GG??dWAM(G`@@3obKF8g!8=Pgi5MBL zbx01z{s1D3CRkpe-~2~&KXG7BM+SF_*@ruY{1TX0s{HG8zrwpT>YDk`MPaAg5R@Z~ znt)wuqNpNg&1H*;=a51*BCg>eIUY(X%b56i+XxNr7}j%-8RPoeT{rd#Ts^>eek)b~gM{%|ulKA_wxjSkm{^0qc?PtTCctF6)8UA*S-DnSrf-O&lh2kJ0#|oj# zi!m0fzu{`E3p@gWz)(ja-_T+c4kVR*M=4mqau=zk*Hi!+hn6SzL3@f$iRTjiSGmZ0 z3bEW9thm{#?V2f&IwlB%D91mavM1*sE`U=R4mg#q!EeyZ4Ptk5I?u!pAIrXHb-kRG zw;a7CEm&C7ONKNhE|HJ95D>rM{lZxI>6$dIpdWnKOg#U%YuF6EWC#H=2`ZNli6`q! zRl@R87Yqnl!a_rqT1cE(8UEfeS?~`|WVFxP4Up_l%j5MWKIDAua5yh7qj94b_a1}8 zhZTH!h3bahind(7!jb;8tA%@(T{e!0``xe{6_x)_O07VwB7{m}U{C(1niCs-)Q&qh zVSTN^Un4RffXe!rkkG}wJVo>74QH&;^vir!)Qnk-IqqpTBZS`;Eb~p5WK7}ocni{) zmVxBkjCDyg?>Mex^M&2ix@UvMp0r+$1iEz^60D3`1Z(&6#zhu%r$4Z~bjEcH!|iosR^?v?2GH=801IE8uW zLIW}paPm>cRIYvT5z*_AEFbT zryG)!rDjy{DubRDl^OmnfJFJe=z)eM;hlrm1HTmXCPP@va0pIj2e&_f`1DqnR8oy= z`fI7#>Iy$84PRGm1NYU29JjrH*>lr9qsBG@0!d+5?*^fYqN3IZplUWK; z@jK89jG*r3UChbHAS~JQ*vLdW{XfJc zGGcC8YQh;9Omsb*33C09xrm2U^@|i!4AXb1epX4;6fnM>f`YqI+A=D2u70BLU^Vd zkQI@HhxJ5xuYw|kgeuCxcAoKZf^wvVKcKPW5!2Jt4H^&Ac6ixWTV@=WDt?BPd=+Kk zscCn-8-C9Mtf6Akhm2Y?mD-hAo=vqEs`c{2R`gCzCQCZWc1M{h`BSu-$)q-2&l>3x zYlz5zWNB-8f<=7ZIw1?j>LIINzZ16tU$)hBEh3=;nGGn_`2gqaI$V4>Q4Df09|;u( z+rOj#AYPFs3D8z}Ya}SG7!;gqwM^@eyNLPFtk@#cb(x=BBzSO39R@ik&6t)xQO_oW zHaUJyEGQw_!XQ1=B@l>anN*VkAeFbL^Qbq5Up-mx^ljT&(?}zhl4QOK2o_ZDLKrh+ z9e4yVZrrVi9QXUAwOuZzgRAiqyZTyw{PwHm+c}Y5fur^?9N8;~yu0F+(u&iod-V0KLqS%kW9 zYa1v?Q(q3wnohhIpeen?d-|BdIFVx=h6O+mwBR&uy^w?8k^zGS9cilJZ)xR_fUPjZ)Nm?aJ%#=iGuUbV2cn(G@`qufTV0~> zuT%yPisJN%>G(am@w?n%Zg7ADLi7vS^6^o^oGc4Ppb6}TQ^Jod{y&5xRZkYNm7 zrLO(|5;DL-3fOTsouUGhOqgzuE)%z@X*c zhnm6Xr&G80Ewd#ZeM!kMu?HNii+lGk?z+coc_^9rx`!$>CfE1D$NtiP8T;b+e|t)w zjglUC@U=gF_{-+qg5ifqqEFj~Gt^m|&EWarO5w+p+~BCZe9AYgf{f3yf{qOP@&+1& zp0 z9{0=6_>vge5yFQaDmijuovmWqf{8AJ91)H;J@XFyq5hDcczWuZ-1}}V{b$a+YB!E` zQQ%9j`N4{%VUeJEL^E~TYB-x9wxDoMZEk-4*ig;^>2 z%JcDpvW(`FG%2Yo!nV~`Ys=Wq02~bhjZsBhHYU^KkfL$4hgBix6!+lLUFq-9%ocli zOH9dy?t~z<6=id5E;bYXtqg&ex0TP!7&qH_F7;SjkO%2jEg+$D)r+AobKjr7kF*P6 zpe^?Gfo19_Q%-+&-u3bLDs|`al4fySFi=z!VttBVu54HZ*p+_RcS;`F&tSnCw|4!m ztRX#dcuT?h$DG}eQ-0IC6kM5;(`Opnp`8@@m(qlSL7oY}3<3+xadp%Uoj3eD4?1Ep z^0vMAo;P>YyF#jP4QKMotKYO3jr}liE2>ZFS_QAN4(=H?LYR2ia+XdtB1c#r-oPN$ zhdA}2*eiv|#j>wX<}4~-){9p=X5Ef5zW$yXhRw!4l4#^%%Pnmk)?f*rocg$yz3@1- z2JXeZH~{S+`s8mvtArV(%NIOk?`$oRmQPY2Z271GS=z;*S)!Y4VvcFk0JONy#VCvS z>v5Mu=x>wG1z(x&#>&6cWa}N;2xhUnU3^U`n{jgHjsXA;Z&*FB8cbDwqJpgiM~vm+ zkxV;uD>0SkLu0Iw!+Wb15q$6|H(kcs4$jgt=3)cC$1A6JWC$>1BOcC+v)!uwFpL3+ zk13hiCRV0IlH|w@DGEkCfE!A6!Tf#1sU#WYnz$(5fX6jYbd9rB=g_d~+wzV?mAB}+d zK_R>|6E+Xb|^`Td0_VlnR{MB^hKZR`=XG(2B`+6 z!(Mq-j$wG1E;=xLJk1n;sU?x1f-T)o_ch3#&x+(YOpWE9p@RTV@NKSGO8ivkABdd~ zDdM9jd8mX~S$TOHm>#72B#}xwIi5bbI`>-W#ezS7fAK0|l&r^#X!d1%(#91OW(qJ8 zZ}l1A+zK{^q0OR1x+A@0x6RF~g@u&VBa(N?0hhGNshRs-@&s{2A5kO)2qq_9q&D50y^ihngRb@X}tB8@V6Y8~3^9LRQMN zPCRlCYI|>!t|JylI&fzI4DK?({rB!zhe;`)JIE|JcYBRBd3}0fiv@C%HH+%Q53=Uz ztdW0&%!@OVgmCUCyk?u~)9u;MHL93QV+FcFFYFTZ!d^j69bwe62UuL6kd{~}Hz3>N zCcyQ40yV9J@?yJ=IN8l+lZ*hAfXw6Xi)zYCn<&21`W_A=QRDa6-4i2hFCxh?zI&J* zk#xex!9{wM={J&n5-}pbr=q?_X|s7I_}XBNF=3ca8qu}2>P!t+jIkz`14RR zSURmmF+Q=hqzz}9yWSEw?Ss4nR)FN|b%)1IUYHOC-2RxWHv*X~UT`JKrzW!Ru~n0k ziI8f3*c~A$)efhYkueB)33mUYv(+rmGvbYWk|-5EB!n)P8TAQ6bm~iRxBk-9?z3Tx zMXDd_7-I(naci%fH#y?Yl|b-up7$a6ND*wSp0zG!giZZMTy8iK^^`R%?P{6!g)`yT zBuH~5?*0iwS2*QakCz&|fh$~sHwkK-CP+N+eq4Bf$wrkj?XRJPrFC>G_%MBrU~$Po z7YM8TRW?ldX*K#J9uN6`Pm8SC2aU5b)1*nYYt{&NDko*+m54LPd1~vBe!s6*r6h!M}QD(}EvZ{~IlO*}s^*1Mh^MhucKez(dI4FHG{y?#!t4Oo_CG z>Ok;w_`qZ~W$lP!yn?s$P`YewK4e^0!z%NjZe7=-?sM+K%GWnSkGKSpmi@`uZy&We zn5ca=q<)6mxDvLk-R9HMzU+0>aQZ{`jL`62dPV!9S=K9AL=f*ySNL1LRJQyj4I5Xj zwJ&Zn7~2ra)V@NlW``DH$rx7Vu(_M6wS2Bt`Z^e;z+F|iimoBo-R@@nrs=Kecpzs+ ztV}z2IaMrj_5|E1u=_{V>h4G`6rRkeuNs*jvQNfI_QMWYw}@wLG9dAaoQ&oP7phUH z${NoWf0g`YJI%K4R%&=Z`F>QN@>4PLFGaWD5A_fsd(N{Kx)6)^Ery*OhrbX>_2ES| z6qC%qedLe0Ejh&`Fr&Y$^u6wDW#Rgd8?*7UvTNrWreocz9J>0LPs@dAl4T+`*RQG&?1f)`EC=B&-bC=Lt65Xh zIOh`AdUd?7&Df;eC!4>tyI>*sEzhTx^fDh>6MHWHy6gCOV6znKb!)-9+we)i<7WRV z%(WnIoE#q9|K+3EXmf@tnxE_VaRh{fQ}sc<6eho^YZKm~oS|_@Of~(g`&2MMg6@Kw z1E+?WdkaV6hg|Un!K8;{CVL>+ay^Vo09J-Qk6EkIhe6?iT$1sREo?X^sjY2rZrKCL zw-G0LrhwrjZN|!!XK;XeCW4|p$*16OE{y6tLri@z?amM4VE0+eoTOJO&s_X4JaZw@ zU8?2@>KxyH5MN`@@KlO_k5nP|L>Yd*9&5bp%sWpOjglNjrl4uvxrolLex{SL<>bXL z(m)+gm?x9{-PSj0l|CoLmj)jcUIDcK#(&-}1#(*r*REMre{m~!*1p?Cn%&QWgguHe zAC)e79}~p9sCz)AMQ6-}d#GGrdMGs?eA0q zHSTt+>90z^uYACsC+AszBID*Jb}coMWK&Rsc(NR1DtI9--50}STJXgGa_>kjg5mP4 zUkgL6LLgL;=v#U6&SExJaifG1{S6}y%Ec4>;^dk_r2r=tGkJ5Y;;Z$>+89Vl`{Ppz ztd1L$HGwIW!p%LpSK;mDaVmMcT>3oGSSl?;Vw;;2?>E%lxJ$s^o7Ge8K-NzW<7W` zz6l$LKTbs4GVp%wM7HG4q|sg6yS&fl5pJUHB;5T^p<+)Sp8<6H zIpxxIjX!goamBO3;}P5W#FPKG-ps{4f64+b8vyMNjZsq%KIYUOQhktH;9jbOrp0Bu zK@4ZXnuyCsGDL-}gt#ITMKS0!lHkd|)5!JEOf9CAhm?bHZ|4asLx19?L+qONY z2UQDtXw_oV%FNaGI@KW2=@drtg>tEtTWvahj4Y{J#o4C;l^39SEkhE}AC>a%j#MKW zE^+P@XdS?npg%?PebkEMH2=C=x&DnJJXS?mlNIUptJ4j%N%^twgK!t(AD?AX9b0s} zXOeqyb1YeI%4=~Ih&ZP9zKUDqVF?c#v*_+UH_9{u81c{Fj?nN@?N^_iwIv+n9~eZT z3C#1k5FV)fQu}_JGgd!O&b8`m)X;KH+5B=@2p{jncmm!jm-90<5U zTN=O|zgWtNQy72Eg13_HTf@uGPKCR`F7cp7PDdLiZ1N0`6VDb(cY){1VzBSVA_)Xr&PP#O;@Rie}J@WYck=W*>!T?4M-GT3W1lAoAhy3AU!W)`* zsSsk-$-)U5UA#)S&sfsyQPDnb{T`3Rc_PLx=7wndQ*8FVwmHnL$bK$SIOhK#{3o>a zf!!fxU{!%N8tG~VnIAPuc*~l$zkQVhMPFB+46ea!h;0dQ8-1r75fZL+EcKBVb$|fs z4Ff}&@yn&dukdjm$4Tsgt0>bpFCc@H3x$|wEG~B?ceh(43jwDTG64~zp0Ks~1}R)E z0@W$#;52HoNVq{&8IML&RuP+HliKF+iG~%6-o(RZ(OVdgiYQ_K#&J z`@_fVlp|_ji*Db5EsBN?JLJXl{jrrO+2kzNQdIC=jvY@L=i9O!hK3 z7C4N)k}LEaqqgh%eEhFFh1f5ssDPTtdI{qQ`G%GF zC-HRb^ZxHU8@kzU+Erm3aaGiW^Hx!ru5QEWJ&kVaoVx z8+wp3>s%PGA5x_og!Rw7%{f_~5o8=|_#H#x>$0Ejg|Ea06nzpwtf|j6VBKz=@KXMm zk6z0h&5iR)%B3tiGe@#6`t={5FAA5W+|k?`ZmXh2E~s!|8~mE;Bie=sDHkC}0Pdw8(fx^;iKp6> z2=l`H1UqIiVPAxOr8u;vB6Mu;qvrJ5NxveM(S_GyT4zjoe&2u3nyP1Vuhd$N4fIQ|22fh;|FTPhrD5-+zClG)Pzl;_E&Cs zn6MZc$t6b+VGh)8ZVC3xXI{G5Zc#lteTD3l8c(bgFvg5Jc;KDhH)Q45laaklG;ri; zd{+0W4oRiKYW9WDh5_T#+pgqOPP_Z)qd*ml4lya%MP2=G0Vz6C4!%Nvp43k@=Fk7U z3qC1UfCYEDWJ0$d0an*!FIH<;L&`bd^BU727pg8Pi2Ly3VFxS`{Lf$eI&JPJzgBV< zouF8G;*c-=glWBZSpheHzU?h?l_$r@Tod^Yi6+zLX_efo=t?R~)}XV8b!!vvw`_A- zc$IW6si4-)6H1nEy7Lo^jp_56<9EF;`4suRtNsYNNR$Uz3@@i1*_COw)L5lg=~BgP zYbKBY(i=>RLC|tq?Q=ebPDoJLygF<)8+{u{V%QZ$-a&wztU^RkMbNLo>b*qxa^iXQ zk7j}R#Yc}%)a_LFl^l;P-tKx?5CaH;q7;6HeP?=%hk!p{{5ons-zmK+k4q6U)kku@ z$R{6E1b**4>JM!)RUlu`44U&U>({0hk2PgAgLI}3?>P&HMxGuPU}j_pps_ao(S}7I zV@;Q$d=;aVLrTMmjkTU@m|Oj!DRJ|kiN!tg@=WwNL<_9yQze=x>U?#!cs_9FT@ z8N|Ou3I+c^8Am{20Ovs@QPD9}1M7~3s^YNnw^VJ_4>Yi^ab4uk&z$eCeh5r^jNPpj z++M%Efd8`l{SeF^uX7!&hU$$n(O4DhqRVX}NfK}uY{;kY~&$7ckqTRLTZC5OnDl{syvmYbvI~X9z zoCfp~$W%3D5LSH-NLC0G?BZw~MSa$^dShG*Fihv}Z^)-I^!gi#-ogpZN5TRjj&;fN zWfB(7&Cj@=+Ki*}Zh^#te*_?NcKdlT4V`DW5yW<8lk)E0XRMEWLT-ae(=z&TD@l*u zY7^i0U+k>DJPMsy(u5|E<=(ZXP2V+eDZw;D>!V=IhFv z#Y07a<=u|(dTRs4zJqEwvJWb3kqlr>Erk=G&G!)YDK@w=ck?}Uuz9(p7kot0feGsf zkSqu-zaTV7{a)TlI~SwlaEACHF55(Kjy{Q z@k_C4!5_xL2nQFS;ft3lj#_&#)oJ7W9huKGeuGrTIwX|se8n}xe&o+()sLr{>i(Wd z+Kb3#6s)Jek}x(C{&-_-YRx{u>?+rV_|25RPWB?>MS;@kr|@^z1Ml8o#j~7KshCz7 z3y_QZ3=>fULB*a8B@k5b`ulH~jT(gmx!vgv$rw~_2S_a$f1qaAxIc?#B3EH0wz{jt zAdcYiJa|W~Lx$>8L!+n_GmdI;JwQyKib5@v+JW)-Fpa!GHJvBO>4tv1H`+ROUB<gm;p#cWyZooQ|E-h&OFXFU9B;X9+>xmnsH2xi3pYJi;8_{;_oMXF77=68M;j zGGqU5d*Kx?)TYIslfBD;__dKJ6G_km{SxS$Cl%h_>G#dV4f?Ju*)_i#Cvds!b84%3 z-4-vkgu(#aV=?&hSk+RBtNG{>bhn#NKs8cMn+$~3Yta`Qq z5@h`EluS*WCPLt7WNVsV*)a~gp&4vU4^haT$PuExs5Hf> z2=51uACK)R;P`>$9;%?k{UH7parL))HfOgjoH>vkI@W8t;sB6Qf)WE_+oKFMreB|9 zd))Yg=gLAmoKw8E>b%yLN2nyjjYC0=YQ}*EOFN+-fKaAt;0nV!Gh9!2|aes4fk85n0m);NbXh zXdKl25&otfu|e9A{>qHNyff`y)PrfvSw6azspdO_ft-s^d~~akt{Sqz?Cc3**GVhm zEozW61K>m=7q?R{!jO`a!|8gF+Fi*)&C*Api1<6kLe9+ti_U7Rp&h@J{gWuMmg;_6TAcs_O!T+aL^Mg`i z^Se!35!SCPgY=bUcYq)(oR_twvv}dZgB7toctJEeobL@1(sHqWJ@+|*AfFIOh&wvo za{ASxrW9pTv~U@d!;qKj?!$Us)`U_ry7I)@aYJO%NZonZ3mXSjwH@%<_>9!9`Qz(< z(FMf*M>uv=iC^I#+d&>`m(xt4B#iy|c0_cu+;J=_uN60PK<|@Tn z1TZ>+t`)R*snh7N222**q7EYwP?H7aKe2|WjKj+I%7#C@cDF8zS8Kf9&-9#&x#B_n z-i^=tcQta`MMj~BM9`{*sQYVW52GKDOv4&_1#z2Eqmr>m9WIOU2oX{sxuZkSW@!L6 zYg>GmH6x?7l%I58BUI6fWhg$AqX5TzDCE`9INyq}=hv%8OF=S0**W~dq-&F(37|IX zoR`3rOIG{TLLr%2oDbosW2$KO({gy)sS}d524L?9{4vLb-Yv3B5*+Ozu*g7R9#wX1 zX?v!<{NaH?W^s=zrcYb~Juc*1U>}6i6Y&n+L82;E$Tc}-pLO{&m>1zNziS9!goE7$ zi7L0O<<{uHa{E!|v!eeBO@Owhc?AQSo9Tt^^{@afASsm`>{o0u{R~f775Z0ZcA-&8 z0AYUFqASj*e%>x}>4yX_^bCf{)qaCW%e*7)Y8OD!SuWpd2fdM!kGe4p9f z_l>*_K1xp;Fk>d!&!_{{r+#Sl2@(>!WP$n6eG*vq97_X8+P)R4IEqM*p>H`GO+;nF zA-xZcEcEMd?{gl=aq2q|IGn(0`b!13@vF(D8>XxjTrAbzkeEr;zTFIL1KrbVCewv$ znhH1A)hh>LONBJ$?`#KYn>thx)Xt!_J?1BEci1JkKII%Ns|3*>=JXW20&9pq12?j( zfuqQurbe#_P`0zUb~sKYq6R*MvO@c-jj;5XMi}9re7pk6-BwH!M0#eM`1jx!{AB8j zdtc9ve3myV-~$0i6-Kv-Ku2h+^hybMs5!TAg^CgDk{6xn6vBfhzllmDDS!V=Jw%&7 zM-iyp^1dFT{E_Y7qE*vF(W;=*q6*QeLe!)uU8S3%GBY_ggvIQjWJG$YnyEAp1fqA) zb5ES;wH6TmJtOEB1)*oe?O8Fjq&X$)^byE&xlx0mmTP%(H=w?W{F{i@{2O;HL=jhq z#vOeeO-Udv5B8h;cd!P$j{=gf9s32P$%p1w7rX~=sD@~}>fTF!0g32Cr5~dUba5c= z=oFtXSEyl3K?bM0b&N>$rqWz2vvI$eEl>b0TDM+h)SRK8m7dc)*Xb&4C*v;t{zlgBWSW$4`iSrsqxWKdTa%bz z(zl5h1m{|oZs-Qs6Q=u~J`MPgH>CE=UlpMiXnoOv3XD(4lB;m=%S3@UWpBirh?;nm?dJVN)d-(4w#d?NE#{s^02VFUEx&??2Q!p||R5xl^JCY!I+3X!6Mk*ptVuz-_#wdU5o zVw0R-5LkBl;M5kC8cMA;w4;Z5$Xsu`&E~^8&wj%!1Xx0KmD2wKFDnGR5q2@jSLLI9 z}em}Z`cwR+M`=lkNYjb$t=78?^hxw$*!ojBGNzo zC3P6M`Zrd19|U}pLdO{oQ7f*;t6%!Qa5@sptLR0-{Ixn#?4D2Q(x(f{JUF%%wq zKuFQjVm=}<(ZI?{RWQJ7iivtPX{@C!%m!F8`_;i+`6NpMZ*bxgqWn>cwD5Ouak3B1 zR0|(}GY6LiQ*c=jAn8m~DtTwfU00WzP7v2b-`OP$+S&{PsOF^o9Jfg%C4PwA$ffEtro?|fraeZ8dw}R#T0V4M0FhInvU>WCSjb;E~gI%46 zbZ577U-JpZM6n2MO3>jk3YfO3d~4SF_<02Fp>K&FT9K5+Z`#a`q}MpvTg%=L`Thdf z?xXW6)qmDF2Yu_^T7a~679lwe*bi@I7j_ZEwM?FVu0_s&)Kymb`KJnP*c-mQtfMAN zP9VX0`^Ut&qo(=hmojQHMvUKPdj+{6ueQCH596Y?9=Fe|s*&>@q>hlg;l4ve>a~;1 zaCnjyU7|}y%o~B|q#gQ-6cb+X&T#EInlAebm3{z1!ik0%kent~qdm3IX{OI0 z1jYVt@Fn!7KpUDvSNu6|rb=bN5%eO^fBr+5C%32-A|Du78vy@K&E z2DyJ=f+j~6nyjA;WfC9ltf#IQoJEh}iAZZkNc@|HzV3z=TtlXsoHwnD{z3X|hKmjN zqyDQ9sC|NpK)B4E)p`qy4L4t=egJl~lxUkQ4UswO^^fa0gA}q(((3;Rf z#L9IV8L3AQ%zegMRti6Vh{a}_L)dsuP=R}ZGH<=zwB%7)kA*aisHHdUx{$6Y&(>Z) zHFq6)CQ=WoOBrq6Rc=e>UQst|1;Z(yu`|;zpp7Jy9>@Tfe{OW&T)>Zkl*e4)V zr^Iu=i`2U!s_|-jTMJvy6sE1Z4BDfv7abZZgq*9l>7{+<5cvzZ1P^YJNQBlElUy!b zaeX=TP0q+jx{s#(F&@QIV`GtA{a#~0+rk|(XB=y|(}?}7AcJ9FpL z%b(te8~q&=*dLF1hyVDYJJ6jl_#a2QxL^k7)fd7Nyt^nje}nov_-O$R9mQ3Ky_dBZ z65aNKnU1@rda1fCK{9Id8?8R)ge;o1@57Gfj4&w4&5Gruh#hcj>6i@7-eTV{AY&O= zznj8*QrzYKkb=Y{tU^*zrRn+vMQ7YV`l%bb5Sbj(bMNP#S~`JBge~t%m|nAH8SJWO zBzyRYH{%v%U8k8Kiq(pfUx~b1X^JEE@Dr6eDgxJqq4+*$+m49AdWw2mZd%u~XAZVE zyT-A- zR1H6hqLILhbT_=B@Rnmt(~|f@wN>Vh#F!k8Xt%l`>pVYdB+F96%6LHxTH}I5L3P{Cd3_0rsdEVBnos0D>KHel@7e9q z{oQOp*duu2n(nfnXQ$?64cAQ~19bBo0t{BH?c{ z%#Re^cz5K}TJb`6%=5%!YW$zuV-V~nEjqGrTqnJ7$I?Pp#*g^qbEtB)Ax4kOM}b0QHr}s@ z^}$EpYQOM+GgkUjb>0Ccn>Am@WW;Kxcc0pXEm80wS{w>?0qu>YuvPqycED+@!M!;V zrI>}BhlszR*5rmIe?0%PELmg*LDSrtmnevQ!LizSy&B?$*VLYn zE={wtA^6uUeXXI-b}QQ3mJXKu(9r@F%W`7^tus?PcJbd;Tw*1wxUif>B02e2LZ6&W zWOqwPnN#!_A(w2)dU}>amBR>j1a|@IhbB7;ot(*#RUEP8At8ha{F^4!VHeWpF&y;1 zCp;k+D=5uIAaf@X-B1HmC%=uEPu7=M}&zXUU56+CYK(vb& zsiR)4*ISV@ZXxjv_BKe`N6Z2;|uk7jKx30ztS1EujMmy@esQ6y0p zF5rHlT@a!S{gUKnKUPnp;yLwWo^ByMx^5jkX;oU?YP~(@xE{57zmh9RkQd6v7L8%q zP$12lJ1=wP)!R13DIz7YqLRZ}!eKS6XS|J< zS*+&Eg%MtL*Jy_r$BXcj`VIrM8vlo}e+-VS4WmZkiEVpg+n(6AZQJSCwlm=*nb^j} zw(W^CQO7y`yg29mzB)fn)voT|RlB?T&wXiKYps!lf35#|ReGwjPntUge@c(Wq*$eq zPnSjovbcuR2kkF}c|zDa6TuCsO*^}nW{pA~zzlij$uZYxFrk*tXU#(jMexGE8F<6U z0t7`lO$B^KK@Poo#(X}(;5i={w0~`&)7!Z6k=l_?2l!9k$4Ew?yE%+C&L8fapdr{7 zq(_stAxcj4&s+^TO*AiNih9;IX*IhZXZJ8pJ%$>-*!EFdDX0yS&pAqAx}Iz#XVtFY zijgXF7VEE)GZJ(2`<3w55K>c(z%F)u<3^#sYhg}(YJd&-7MYB#XxO{R@? z2E{aCjcc3uE(sTD4>CjBn@S{SOnindlXj0+t;(3eKme$f5Gc9Hu% z-VpUR;sexvIc_OQidojRap>MA(?6Df#xq7}#f)z@_1+O>5)&u{qd(PLF(Ph4j)_WY zDa}=hVi6qkW)N#gtnUNJ>qk6ti?mMGWBLUPm|!yuhJN!|>dcwvvZ|cS&ctH+LzQ7x zg)ALm^7Kqd-rLU-i<9(iO6U1%jN?1_Gt4^@Bsw6Bz45-mrpxaykEJ>E&bZY<}m4)WVqM}_EdQLVRuPW&f{>2 zLZcd8dc=Ax%?g4)ti$i1`kk+XBajr@qeO?)hMoP%vPVUS5~EFWPN^K!nJ`M{!scoH z!4WV={B8kE>V9E#L*DN}V0Pzq!X&Np_$X@7=da-CTsgh1e4)xTd)Ek?o%vzoZ{35! z*(7TnM;Y7LQ7xA)iFtnF$bcSwCIgUe2#Hn3?UK8r=**Z%)DfFt!>igZlUaDP5x5+r@>HY}9FFUsl9KRJ z4TJQMi7E443ge}`Ie;~aWZ4)GjygnJ+0U$pnoX-c3LhX>nnDm2wGnDkqb-Gp?S|l!YVf6jC18<7PA=xX#QC3xv>gUYGLE|osvWUE zL|XchBmQqr+8xoeM(C^MW7pYNOfJ2%3KOMUO6*a=o+v*52~-5_(of7thL{RA_!De_ zFoOXZZh3YrA`(aE6Qz>qLp7n(p;2$Z9)=CjO2zN5_hB#*jAqhQjZ5L8gzBG8_}9eZ>;dN|pyW*ZgZ5H6kRuF{4NqO|Xbz#!6llB{xIL zn5+ynE5IoksMLv55tW4eK{mb!h(7-C%qV@^xWY!QXuDDvq}j#3tn{o{uI@2jB(@Cd z>Jd@9r(=38#9ow7>tX0Uf3HP(6~($QTal9_lw6}3gUtUWr-`12+q?ZB985=z(<0ID zxjpXqKO@A_DO(HDe-VN-)tC-4gA80209uKhz$#al%19)NEXNp9SyXrFqydMlmyl^* z#;#Z6k57hvaaeFSL$pFJOO{6FWG@x331Nb7e!K3Z=^PVtUo_Yy-DH4&0J}b^Ws;VS z!IJWF(b6LLH|2Hm?tf}k^~Ip~wcGmHhV(@{P^W)ThR%ys(vKY~!;HTvRJHa5kQ7p2 zA#RsRrLI{bHDE0lz7xY@GLns58k88&cx@b)J1>K#cwsr_)zCeMx55;m(b&_6}ooxk#=WD?h!AvW)gioRqc4i zc-9WNY3b}*+_`^39xoWxg-IB^44Al`bITi19V#IE%YlO?nL&1~8g?Qb%atEGy!N!= z7Umz!qvL4t_eXNK2g>!IS6(rN_PPRNTOA|}x|Z}L$gB@`G}9VYR4T10z;X_l*B+Z0 zdpaN!@tKo>a)j-OXpL7yg3_y@AVzzIoc2}v@fVO}%5^%Zkh#Y}Z)8^%daXW9Y%+=4 z_`)IaFQ1l2?L|RS;SQhz&lzw=xyp6~tq!1$s)IMMs$^v2r zEAD*Y3I14(n!r{q!pY*+eoT_PlSEO^^Ah2*I8!Sm!opc90{VC=k z22#1Bn_-TK@&<}Z+U%WCN$L63aLMT@s__Zr^Vn33ZeTzLf_%=>Z!ygKs4Jr$yHO*+ z+P?3KtV0SgcXlS2p^FRsp{@Qa0d$OIA=Tz94j_4BGfATzC2k$vpTl#tG2_7p#AZcZ zOG6Dx#{TXl801n1`QU=~+z1Dpil&%_@&=g2ObSq{(fsQrWgi%bAXyfBvq zV-|ct;$9Y8djEXwbbF5BG&l+paE!+;m#+|{?=2CXXvy1^H|c|U%rK+>ei(k^B{5|* zlhCoy(5nwgm76aZ%aV7o{X9X(s$&IFr7w6AXJW0{IM&XW(L9P_ZdumEWfTGR5Je&C z8gE%<##F1CY9W&tMpzN0EHF8y7fLUL0+XG~*ghc^&qnb{Ug(~#GlQrP(2sfs*`ZbIgZQL z;m)s&bQyaW03uaD{fs6ZWdugQQgP)nLaOdN z0PUo|dg{Kb2F$DVyxL58yvMruMSt53e$$yYiwS=+3w`En+1AYXenwFb2zUVBy@{=r zx1WZ=gve`_G-W#cd4b|Qu{l^H3j%*zJUXn{C+sg<^d0>iXRqBi-&c@#*vK{|OD)7V zBumZ2J0(l4#O=vlH={0b(QL)_$q(?*EXC)doH72ye>#^4Z~aB#ejWUO`RFCg*w2** zFz?nOAD$fkJ@rgB%UU6mi)*8j}2Me_!4RfTLtJQ0Ort;4qCJy{`+r*h>Y+csuelRDk>+FC*GTC)Pu+~Z*-FTLX4D)zKGRr{tHYm`1F3O5L8n=BMtrP=M9fW932xX zWzV+#9a!Xi7wi-RaAqn6kw>!kz}L6eg=Ik$c=RdXx)-m{?*l#+2uhN`$R#QI*iGWJ zM~0D>w@!nJQuC&0ZdjL}BU5J4+r*FM^JBzt%Oloo>9pye6nF``2FZw9m`np?tSgpH zE@8M~O}{}SpAZ1^<`vTM5A8?G$F@@=z{>^D=m*h^^|>CPOcQJ;!WKQ6N7BK-$+DqH6zp{7)n+EGk_%Cp3Wz-wXU|`EKvi;k&+Hlib(+UqRLU zeu=jFJYVGgz&GZuTimGf38{}UqMyG|jEG?|?1_hW>IIQ7@-m7(e!xV~3dP%toF-L>MoQ5fL~o z|4N~l(%N~O6ssh&_vttBMx{|zxcJh>YOnNF95Zu3Y06`PG*;gAIky+y;)+h+yKrO+#IryEdgM58_AD;FJ z`wi`XO^g9s(U`uV>CZM|CKwkuYi2wHX!IlEv?+;=jU|;*=wKmlg(lXeLosu0ie?NJ zohBU{3w2pdG&BaiPO+n~NE|mmMb3#nOd3f({!sb1=!YNUh8ju_FvILi1|Z1{s`yNpsmm*oQM&E zG@oZC>*tCNVKnY$b}o_+iJ7I&hw*pT@=)1ZkSO$;RY<-f^X@iFAmY0_ww{gB;yg>wTmHB@tNMs3pKbC~M9*n08v`O2WbuLMx+YJmh!gzoW zR9FEA8dH_Lz!Lx2fGbRYB4l4|hE>O>MI|1j=j$+UDNA5)1D z3BF0!;GxF@F{2a?FIl~4IoOc_*Ri)8c7l!~C@~`Vfhk$D<19eASUb#j$p-aT zp4fT)Z3e8q4Pt-0AA+TofutR`PyqbtcPtaq{ z9qa9GZ0I(0#e3q|b$d|NlSwyH*)ygBeA>N><)(fhbDT%iRu%IWX0Z>n4f$PIg@Uoma$TC_1^0DTF&NLVAKXmyBtM=F}ByUrKKFMtWV(;F&_n>ofa1 z{Y%bzThP|TWU&oh2&|hmR|1i2Kl$ zpS~*nd`k-qrl(uy-+Ue{N9vO35>e7qY^i3a%u5Bx-|%TORkD(0ciLZ+iOZBm&`@Gm zs>K|_=DXv`9*_CmG74RL1t>D}#V7jyZ-s$7OGN@iP(_yq_dkOr5*s+L*?$6Ls91Q} zDUz*CRD|D^h4**_F~JbmO2xSt;D;)SmZW3)Wnz|ka3{C1TF}SKGUUz=aeqSjo|p9; z&k3vi{L5?&5UrEA>3P&oN;B=M^*t-=w3fWNnz{62w+*bzHFC_!tY8D@V8e%qpiS*+ zBg!;AzXme&-JtKfbP0C#0d`$9$*$3P*ZN}GpJYqB(9Z%?LLs!>7j4Kgk=els0n-Ha zDD(uGo5tO!ep03|ocszbKct`+OstOKv{qD_)VhrI0c#=uu4N^)&c9-SvRk3&IwuD0 z5La#!m?tK$S<~{1qQ>s$tO?rx6eOnjBq_tIOC)`O9*h}jh0QrHZ}`o75r2X!^*Fs@ zl%v!hD}Q#+;tBqV$*!recgZAxF>sS+&w8 z{h6MJWJG5=UG0A}c}1itb|8{1T%@R+Bm@W%C(rvEcVr)J|9yv;q;wRL_OT|)BiXSE z%_7NHI69k*jJ&TEel>r6e$E08>#&R$_gg-!pIN~$Ux8!*B`{ly()#s5R3eLgi~_o6 zTzAFkM7}SJy@4=E{Cf(M348aIiOqe+wKN7SlbOF50vOp<9CX6Y7`k~;&lG>a*b#sU zMYWc2T}x5BgX*w+xk)Bt5p2K0%4-EZ%m1wrx!E*%vti+34^YI9XeRy=6NVsIp_EHM zDt(yiw%ZQ2SigdC`qRez2LL4Qw?pD$CU|vz>btwrEL(P=h}g3CjN3H?yp1OA_S1e3 zx9DF|1B^xax@ZVaoCzpOn=1{bl_4XEZxtS%EhPt775oYn!9`7>?9ED0E#xWbAT$SV zh+ffRQ<7?48j4l)K*CJfrKKir7!u&yguw9^Mfpmya!2`2+g2r=033egHl|4zU~c#k zWNt{-%gc?<>$+6m5~$ozHBUNJV#6)Rvc*1%EN%Ao+ErX<1Go|AkDZh-u>1BMz;7SW zX2Op^k}DG^lz6v!D(09i)S?MYhAmJ80-Ew8JpPym-z7RDYZEXRdOWPlo3iwmXc|x9 ze^>wD{;6>^stOk$Q{ zh33nsjo>3d_Xo-PB`YrDjE{pHo7rb`RjM5Q`n;IzqwfDktbiFC2X!FK8v%q^k%ERy zXqk2MppNQNy(^J$7-I*o5a@V8-1oF0e8$n8GblRN$hbQrbSV~exXMY63?M)F|>OL zJ*{Kjus;Z&7yRMHCpV|u}r*54ynOsau z$B2PFA52&oCP8*Kug6@*vc&Nh_BMJ$b=!uek(%lM09XeY30TELfJlas>=Z8 zAx(K9SNf^2D|wftjJCe6B4_u`^}jKI8Ad+($z~Nhy?vmu6$PkE!|})|L*-Uu5a7GH zgrNUIrtbrMoMpOG4<4{mnkmk9E%qw!=zQN(-?Q+}_^s$6c?hFf_IW{e*&i~lR^4|@ z__t%z6qMZ)KSaVH(p?HK68PXwCy%9e-H@O4V6mcj4yfF4 z;@@4LUF3iNb$ELAJpbXe52dYEVUb1(C_HvGKX1WEzuR03$qW)0ucMzb#@ng-d|92{ zyzPLB?G?2webqvn4aW-KpaH1F7_A!Fb;HAGU+m+zP4|B+D;dAgpkN3!kUZOdw(a+P#IN1_;n`Mx7t2Hib z(@x1`@SCi!P&+x~RBYE`bQfuFgG7LfP1fF_V{lvQMYmB2Z-eLDp9GjwXF!PT_4i;m z5vLpux0sfoUVoruOlD7wNMOfsyor%*@jqUQkB4Xhd=pUvZ*L@H#`ilozZKOr%3~8` zs9Sxu-o25DDT1ow2KD{JDn)@7@c&ei21#4nz~%Uq-bZ=iZ(2<()y1`nG@topWhCtD zpksTdlnoAt#}~Sz6zVF;DENy0_ZZ@S-+Jp z*n|a~wTx+ZGEb|smDDU(+Dl@{p8g+JKrP8Rdk3f?8-&XgK?NhsG*Sk|Hv@ifkdk#3 zJ3AKjOQ4>Dc6dKneDiPn7aY4VPs{b_6bAdWAI-WvaTB$T2A?VxnUkJfO4caSTkYRT z2ZGrNd0cgEzThbSgad*x^nZL${M99xZGv(nYSal*J3n3aD+CIq7T)~r%em;w3q9T2 zBu3Vi!Q=98tcR3L&*tc+Q`H^v%m=J3qx&RaTH0ni3?bxMfH^?gASPp@jGzsNO~7D; zVAbL|1U5tMfa5gX!!22E1YG5Agc8J5rUjPAQ*G|uJJj!d>RkahUkf?v;}j|V+e%1O+<@q*0)Il;%fDSE|NuDZvgwSr~U+6 zH@-JfF}|$V6w{VY(n0+Y0TYwS>d#80Vd|4PNb z+0zp~;arE(7L_sU)Mo8TrDC-@E`fy}{k>(Y%`Z8F#^mjEiwE*cy_2G z0ArF)@boiZESapI%N-(Y{|QJe|Ma-!WDz7+H_6B#nb%xJgFJlc7~K{|%bOVufF2`i z=igoUa)!MQ9b_9+^{Ko~C28eleEhf;baKf5A|?(svc7z74q3kXNESA#3i{vdw!x*v<*>~AKN?qX-v7!qZ$dA-hve(z!k^qPN9_o#lJ${~d z#PK|Dw~LZOUq_*-WoML$I3)Q6jX(VHxiqjrc9!0sciT#Fn(&ou;GZNxjmMuTn3@`u zb>Eyk@BnhEM&@|OVJSEJn(DSaLcG_=Y(}?Mr-^-rSwx|D?K&~CuMgQcYDQs5w$G?opU4WzivqWR=w~HGKB1p@{Qlea3UP^ z93~sG{gRb=hTBJiO`**usVqD%NU16;&GcN4+9XhWi4r3oON5U1{{FW zKDsh_1#jKly8(tOSB-5+Zw-B+g+!3)e@&o%wJgJ{r_(xoE04PXfpN8J0E;+6#hm zQ!-@P`VvR|#sFZUJarLXT!VhO`$oG)D19!7y}m8q9=?4(KNr?1_G50X{d{kE@-=ua zB%4xmE-5|N`C0fA7`gtqtDe7UT<9V}IeJ!t8QJs2Jm8pZRwzXJy7+R)?fj5mRI=A) zJQVdA5d>fd2SV!yh&NOnB{h95%n3*2m3gkIPHJW`FajE*q%l}+v0`*sX$3~Sw>Au~ z*U=IOEpqP5GMSlOR!ZquiFA3fXVi+~V6$80r1GTOEx%SgUq@pt2`LEny-tZQnJ=mv%|%DGN={I zoik!{@Bt2!dCJgNWMXpU)EY!4;Wh}4p$$n4=D9iEH|@Fdb+`9SS?*ohw)39NS5Nt}v`0y;O>%;5eFvj`Z=1g{oWD_3`%l3Z>62{lf&=FJ{ZU&3 zkA-n`?T_LQ*Ku)@8}?ir)=fkw)U_u&t=0OR!2uF7_Tn^kIde1}HEXxa4dm)rE^->s zr^sCJm#G^+%CswdO^zijzHg%RbRr7K>VPaSHU?ajSUOmAwu>DZOIfWvWYnioA1{#@iEu@>#;Q{FeO7$(RCc-+ldVZEGxCmkHD0ZEG}@y}Iq4&7;E74D5FT53Zd46s zJpsS$PDBn8_qNRgZw>9jfYIzycvI);}TDj-5gaKl%ZTejwLW10T)5k{mNXT&`KALniFFb2cA%|`VkO> zf0N2Dxo{672N^sN_k7@BVhk)|CvH@x{IF{cZSadw?pHOl2Txp#DY2fcN#Q$-y z^K~Z*8U41Bc`QJ2EyzN!)33^>-{Tkm9!w5=!YYE1IyI~-LnZ7mE^*t+6@%If(Qx6} z^-#gstBAci7DAS~-jPrX8`{>hYVy-T^qOs%c)Je>a0)5iY`cDRK0Wi4S^iH(3-y1l zm^SrAg$98-Vp634BR^?~{^;lBX)%nUvJwyu9>34jG>W?P}KOPfCP3riLyv6Gh8|G_iRqoX@ zF^qGYQLelHAZ@jxBY(ZN!HL)(0ZxCJaZ*0?plGLXt zL44c5ZtH;W+f8$y9V%=Cw|2Lz-u;{&;v<@1y?5>9v6Cu}!SQHR%# zh;M6}JYgFTDEJ#N{8f`S!Zm$};3CdEd0neDmIX&?g;&`@0Vr=W6W*%D5G7cJuLOqjOU9u|csm25={*x3VtM{cSxNo*fRa!!Z0Urjj10vDrhahx z%mKj%y76!N^@vTM3b#lsyp;bVZ!IW-@>W+<_~XZadCN1ilGJN&$6oG>5|X>W{jz;G zbQNf{yYc!WEcALe4A%~gjH{*YnkOXfqJ2&dO7DI$ejb6Z4Z554YfEbs^^D)WuD2Rr~L{5|nPUmY+B_j7=!XK1ktGa5u_sL^(93zXxV@sb> zKGa|=mPSwv!*0G;!JR80~ zjfVfC#<5Rimd$~jNR6rzgy`tKLRXTFCz`_V1I~qHz zW?>>5p{n<=!6Xx~_|i49ak5921N}t;f){a}&K&^kehqj|qjUjIi+1p#WQaPvQHk*)_` zF0Fss!GKz-$c<3Fn98tE%?qTJ{RK;r-kNeZeE+?$8{VLV>aaB{&fN8vdQZ zIL$u<&2RP6{V;buL7lgs9|KxrNoz{R6jSxe-C@ z&Nd7wjITem5|`8O?%M3dTN_`pPe;s**F_2OD&n^YTTa( z9D|ywZr=8}-tvC|&%}tcuo_vE!@ruj5KF}X&13B^N|3)w0w=$96gefV#0lRF5dEcY z$1Y=Qb*y9jd@y@vvd1Y-6ACz2sHltUnV-p4?v+MA=SCYeXjiZfniLOETx1xC5u%cG zYK8_Z)ry+ED-r~h6dDcQ3teK-f}(I33Bb^*nZ*--p`gzD2KO4A zBlttrL<4)W#?DS*C`Gf{*c4>1hbt68Og=Iz=_H=Tf!Wlm2U=%KuP+Vb%eU*%A$bi zpA3%@n-H+E!^5U4HFY7IU*G4EN0yy4(`MvXgOen7&Qw_9pNht60l?l`ZFE&W>xKO& zaSTm1svaoRRcPIN<7ekt6c<|>uv4dr2+GZGO-buWXq)H`nyqCtE2p%enE40gQG%f) zWDb5T-#T-?10yH*Q4;oBpx=nvd-15y`85x8%q5eUPBLPRlGc++q3DBAi%83T+HgUYduDGtwK2aqk`i9g3uaQ)y#Rk0QAd ziw_JJ!c1damBgkWcpH3G0rUvmE9y=?-EKrpIaZ!5t$Euez_8yk*`)8RSxGW+=co40 z6*fX%tE{!V$*KDkL|9a4g?KTc6-I=&q=PLv_8VJ<4oku!OXk@U35<-4>Y7v8@*43# z)%*TlN_#6Ka24<}dx6mo!5>FY$E!$8#bdA1gD@BL$Nfas8FT6dQ^6mT6O$cO_%EtH1z|ch8*P zb-rD>*bQT&p=Q>Oo5}L^)>Umnm-D_W_U{>m;vKiP87KqlYYV>%M@BzWi0SYm+cW2N zf|gMRK1+fxPWJVJ-e!{55e#kK`Y#ZE_yzwzXuWPdew3b>LdxI{075Cer?}ONZQZ(U zyis#bxM)_wIoW9GM;s2(e-S*c=uuc0^zek$=T+y|=hv?w#l^&PjH95Tc!aiha2{uI zaHwOYpQy;+DJW_QQMoCW_`BEzTT^41FD<%uE8BJw1J8X5H{OnC4hoqWKmVb7qxf@6 zMlYxBcWT&ZqA2X)0V=lz>Rc~PNH$kSTW!xNV08_Fc|H&~*%=aI&o$d|WTKBXf+2{u zcvpe`VBN4Y)suo&o*Z4gZzq>4l!Njz!a37GrVu5jkjFct*+4&+f2VluQ4p2khB;@*O@|c_gkT78@+Uyotn4^BD9q~$L-y;c)HWgh?pN&&Vcmto{mTw4|iKhoi zPg@nJW@i5F11NAnPZ(pB$4%}UQe9lTqFW3Dd7H*?wM&ijSv#?AG1K4-Kw{ZY#XAyJF5A*z&Zt*!Ra! z&Q?(AGW1E(6vn$~5?M-x|R$M1K!4d+XZlm2#Tqr8o+gOC3WKtr8C$|HZD~oi;_n+YGX(NoPe` z@uHV+iZn7QQK`_Ir!KYPJ6;1i&xdJDRe|G(K@Uo@CknrFA-b$ta?N%;)#gCKHzLiulC@pakyv-JZkLE~^qK_U~HlK`AsG<-v=N z=VE3{s<{?sScm!aJi9{+X9p{g*d*zm!$2nwPzOkM#;NqNP0h++u~WGc4ACL8CI1qu z976p)u<43IzYr!yBX9o^N6&6uE3ReCeQ&%Yhqze%*iDBma?n-6%;)G@4#1eF8vbLpa-{KE&>2!}$~Q zE=aWv%wwz7oqvrxecr#oJ#Qj1P}lwjs67q0i`Ab0;rUT9v1NEvLsAM=DR+kAU?Ha; z9$iG?#a@xaVQg{E~>(?J!>0(lEl`TWXtVWCGZfOv~H)(``21WXD7Yzz%u z);;R!Ipx+PSd7|{gmOczs6W=+4-(y;BVRahxKC_vt-)N>s6)hZxjSYBuG$Qlrj?cZ z4zTXG>P?YSIuM`=+f!pyDvXQM^t=^vZ1z#i$8v>WU-7%d!#d7#?XBZ~^dfX=L+M>h z{7r9=@&#{j5AAQ${H`>d%~2t4Um+1~!el0<)!07*I!8*g!V5#HHFOh=OJVgzRPvDw zIH8wjaAJe!;t1LIJkuTVg4zS_=LM93cx1mB$!k*bV~b`sezs~KQDW5Ade8i{;)s-p zni%1N)VWDQoZrJFsas~Onccp6X_}f=^ zaTSv2=dI;tnm@B1aB6Za#YJkB9|FMi zVIt*mtDxw18B}~HUPmJrx*3!>H!6IJLp`h`#k)$NJ*1mguI5`^6Oac!wTFqA+)je- zSKD}GE8S>yW8eR(B$Fse1U`r-lL(3&NhzVe%xiqp{-Clgvy9;D`VGX0XJ1i0xJ+o^ zuZ&gDm=#!nwj$=;++E9-(&EbT!UC9;Eabmv|J9A)x&Ld-Mx^=gMoqkwrlyJiT2SK; zG9IHD7RtE?k`~t=Kdd+XD!#7y`BbZDvEp2#S|A~M&$ETwI_W%u(NsBdw4;CsD(FXE z%|zF;3pIO$gk}W53H+tB%G=^$^Cm%43#-M&Y^gW9bz!bOeIZ_o4PgvgWSZz!W_NPJ zR;Ta3HmlS2Y#(2r4lla{&fHDEnE!YC3QnSrO`f@@4Q>aRPTZ2lasoa)JgCpg6FN0= zC`3i{gS9mOR(PRj73FWb6qmt9N9WRIB$Tw!TCa8Ns?ulb+7u#124R387v&%TSgD|! zWYqUkEOeNJymnGjuUU6LAy1TCgn+ZtD&NQ6z#A>6+lzvKFKf?lxZU4&?^U#AL|KP9 zF+^;cQt|*t$O$|McFo#6Z0_f5iH8*MA)?Rztdk%8*~=h_=tr{*KH1eA+>YsHMwykq)XDVrq8QM(b&$75X=pqyVPfD@LVj~8M<0@W1OsDlg~ zKur}$Qm2_%H+R0)Bj=287wB-AAKo!<|A(UFXn+ymWUBupHhOADp!Bd~-gg|EK+XSK zIuej7=NLaQ<|2cu4I~{p3byM?kRUcSCj~Sjw9YQ==l+23Hr8-I+}zVM_Kt}bvJ^e{R(#POBI&URfFMCSK8({A>@4-Fdj@R}cLZ9HdgRQ^z%4}u?BI@=J|S;?Cr zN>(-dis0Jhy=}Fs`{X+Rk&~A~p2)QFH7$|KjDg5rv zWaNK0;NtMoG#Zh+LE$Eoff)pensM~@9she;oAtSKZ!q} zySBLR_LM73gtWdd%9epm-J;iqPGdwP&pbS73Z+;z3>;p|Sk7XP3-<^M0pA<1iyOe7 zU-)&k4lp7K1z7JTP=G0^{b3nMgjEfvc&3z5hN$0qmJbCi>5fEWXbgE`{%MKFVJ#R< zTgxtf!n6`9v)ASAz0J>3DB(k^ev)u7Q1)WiZ*Q4QGg^0{Q)g5gIBDvSW8^Wo{U+&R zqoXsHq-LVg!R1g%PBH?i)Igq|-T@e@TeBz5je|EtZ>p*w7_ZkYt>=Pbn!u$Mr*p19 zHz*Ol{=k)heE;T7%ccABPG{iKSRA~_lW97s3d}kC)l}N5PvKI*plEx7$Rz z^~5uh^LLq<)Ra9E!{|q*_H{tWW7&ryj6YHk)j=UmX-s#I%Qt8afIKVJ)L&vQ7$;No zVlowyRCNkz&a(3aeubEhQnYPxuhR+{^8stkqzGcKQGWfNriVw=tuZx<^uk-?Cl^X- z$4l;;>Fg6fsXaHOI6dMzf#(A*@$#&$-cV)iTm&vg2kM-CfqhQ{OAP?Jxnl)vK@KbC zumGFe2~Et#Ig^&el)Xk)T*ugya*!OxiGR^VIAi0VFh$fC3*y(Xxfen*-Ik>Q#p6H4 z7Erl8QSx|5zGRl(v5m@E$yhV75r;XNBkjY%MPO|U*FRnGIp5BlJAy;`7r~4K; zZ*&eXx)5!;Htz?J2iX8S%HD7sT<9%#!mcXZ#xN4MaP%-)OgdXt-C2xtbs-S3)`3_I zT}wPBZjMKli6P3hgs-46huI(5K;mARO-SLxI!Ch?iXFFQ`EX8AUwu60K=rl*?+0F{ zq9K%hj^fBbT5WN~_e-LDEy9lnvw1a$+|-1@2M2|a;>#e7dIsmWe0T>qX19Mx`8 z)08TaXM_t&X~I-3}YkbQ8(_?sjDSj%m%@@L{x zE`-HOrVN5B8+e(_y}AZP?WZQKOI%t*_4_?%xNEq3i(h*U_{%G>e;4Gem;;>K+ z1C4EikN;4^PAgxg5{=#toB9SxJ>uS`J5F2+l_?k@~77Rmtqy2|Ah7PXiqc zI^e9dT=0)Ye%ffrsD?Hl8)GK*#f*AQ4VtG15pxf8;Nl$Ib0IVzgKlLeP$1g8+)6~$ zo|Q%8t7~eMl-RF|6Cb5{GCznT{>l}4==e?QiRv7#Z&h$a#nsvkuRYMao5hwwM0;>*|`3+FP)hYv`%rrXRT1; z)lFQ`xU8YgQato4wzeiTtV9+hZF_A=cAbZY(bTMJNhV_11YZ=%n0}DwiKwpwr7HBS ze}qo+OG2)mPU=~)AlJHgC=-shh=o4OfhkKRhSS>9=c7W25_#I5D5Si=95YE!7X(LBU5DTc!LgX@C$H|3Hk?*@-FI+Ha~h5xOmer&Jr@dYb99_7!w`xXE^=< z@Goa=JXA7fZrw?yIj2=gC};#Zp+#<-obO!(1?@s-zOKA;d8h2+9;k#|hf$;?ORjuy z^`kQ1rYQBTF5b!d=cK807q_Iv$PmQ^JD)`{D-AY0aUPvpyTIzhM;FeKWevbi4sIs{9HS}zV1Z&zk+kC(3y`^@T4zl2i%xFM(-Xyv=o1NL7iM?db0{33KBc%Y%gQ@y8;rai8+ z_~>%Y*?*G$dr&l9qHUo!T`f0qiC~8JqAk&HTdapfdU~jmn~zUpQq7Fc4iIykK416P za+hf8Af`KhMh*$*=A6#IJfDT`xohH;PWBd6(3S`0HvJeS-zk(Ck-=Me=Pt4pQMjFU7_Vd z;~Tf%Fj)EK|5PmCyF56d>xnX|Y^K^wc}{Xv@V@6ZbcdPZt)7V9TalZ6XvoS^zR*10 z148_(0n!1_r52w4e9>C}caz9ItS5}}?8%A6WxZ${dU!Lb|bvWQdl|FC;y?#t&gyu|) z6f7f}7D-B%kzr;K*!VnLG1HI7url_%dsM;(++*0roVdVjU3nQ3?V7QY{VIdYV1GIV zp*Zx7P}F#+EbfzK1KJ`kI>eVB;9tm2*gDI%q5O*J*rN@5CzK-4G5lDh6tkW|6~PK` zwf~V_Tvk?Z zG_rC`kx`s;s=VDfC3SHWdvURXkjX&ff@SIeGPVHub}z=G_?>!7X76PX@M0xUK0Jr z6CTnJSFTS&@_$6D6CC@TADNxx)s=E^?#_%o!@wHk-|qf{>0sEo8JM?K@Tnjju`AxH zN{3940{=QmJj+6P{*;B?Oj66g^vAX-%UOatj)6$rc&Oj2jZIZ@+{_g}+8|$nr-Pi$ zIonKfkQskj(fuQ6uufoVW(~{h9edRk!8P7NRbScE76k=04xUKvu~a{itlzr+D!g&e zTH{An9@1waJ(bh+I5cb2`iiB-E@QXwB^><7UZOjLM$cL3xk7I@;*(}iwv1=nmLaoJ z;`;UJ_)R}#jKrnZzSj%~%fgk8hsE!AH?3-lg1dCjYYr|-Xif_uhFq5{Y1f)JUl6va zeMDUGs&y7^g(Io9HGjoedN@tQt*;L3VGaqmY0r0H{}2R9#F?G z10I#&X%4Z)rZ`pj_;I$I7LUO@6GizUX}?U21%v>4kiz6#wPk&ZV)tzEb9gxa9?CeI zS2(rQB}(OI)IGS$4{!({P8}*3xVF4?%h}!(KzB#n8csbMnhKq|31|+(Xj~r69mtM9 z`DH%vy3~cd`>A?>T#U7Pq?(R&W3pNDsE@bz$o%uxG7rjoLvSjr(LUO zM2yF$bSqS*NATZ?IQRPP7^#L0#xZ6Zou`YfiucGi<~_!-Xia|;*8efUIbnPX--g$m`JdGAA@+j-Pf4kgg15m82Ws#g3WS1vq8~nk%g)mHHCzIuiKgjnR(f&KVj)^ z_twqjnIz*XByLwhrs5?D=R2GK>}A+-Yr0N^YTE~pzY#J;+a}#EyncT4XO+%wT!8Z} zU)UcD>!k;i0)ktj@#NdA!p|>X_^&}6embvGe?L>ye?ZQR^WGD!{?TPtlzDUMfy8Jm zy>vg6f`xqUMwM|qy8*#(QoJUO<#5PykJPE_6T%i24@DSx0qMezWO-4?z~Iv2c+HR9 zNxp+b8p`D3OO*N3U-}r#!+Q<4)C0o~D;mDcH0Ccwn4W=gSYvpoM#)^_MAzizMj1VI zn>waqm5<={M3TTf#KVNnk#m|xF zH@}F|FMr69$!hYbtCJNwRH}(|RX-VtNlnTu%avRCoV%zc@4J9I+)1Z2!fABGkIi{N zzYyD9rI@!Pw%;^!@G!K!VpiS8-_(fk>tXmOEcEp3otT^* z8=iHxJ<>)vJ;O-3IvhbEZMJ4~QD(P-o=EH1dT6Dt&YGS2n<`I><%S}n*FS88XG~^( z)V@{ekgsYHl+>`@)Pug0TpY|icR&Gu+vSC(enm|yOP=od%Y-{#vi@;Ar`!`1Y{sGL zCo``!t?93W1#|MIDVJ;Q6Ek=C58EB2?I>B=ixZ^7?H1ZqB7?)@edBc!`?83fp~MvS zZCe};U*$+L15uXj(%VW7!KF(mC<4NzfTZTq;NK-4H6-4vUccJFP}Y^CXV? zC2GT|+igcFQbq)$$}1lDE)}Z_ynGX(rYI!~59OM7V&KLg9Ejfd{3pZvt%F2sVzxnf z8cNcX1OAYCcbv$;^vgf3Yr3={OHhJ(oFLkGQ@_~DHh1@(N}<$fA!ol65}{sH5e-+W zOmqD5hR@!r}p16QsY&fU3=bV2A9>WFZsnA}E2iXv!^+NaFlzaHU znq&+qt+&TPVi_g4L{9TmI7nnX3xZ2~c@PtF2+a!BY#Tl%drn`>gClDtq%7B^FnRcK z(5R^ujVJ93-qQDYX>~@@9@*2%r;d22IvO#Uti|-S-^%>t1%{5hS?Qzwk|+;0Igf~z zh8XE<*GFTPEqGTQeWuC+=srQm=tg+jnX_r)R1~Y|Uz+)KyjII6Wc*MG=aJ*m%6IH> zN%(oq>|^mkX^Q7TmNq-+J`=}b>vH~;LC~vL~yIGE@kC&L()oE^I z`Bd4E*r23_F#&Of{x{8@E^C}=K~ce|3zjPV?=e=j*F32-8^=1BG#mL)o^WS9KNtU^ zvF2@0R-91%tt1PXc@?5@Bg`d#d%jhXYj>KDT`Xe~Qv!iF;= zIzTr2@S(MC_>=4km*aRNN`ji+PA8(F(7j_`$k>$5p$AF48W!_{ zt=>Yao}2YRE0&dwE}!hrLzhzp!)v~O_e(J{su(fg^j-q)|L(IA8-efvhqe%`cQq0W zzU;QoShkrME38HzZYzv`q1Td$DjKi=TC%s8rbf!Uoc`Twl@nN#ehr_udDa=nCF6^_ zC^qi}`&zB!>_%TI5DtE=KFFom^(fTy*xiJVj6j`rZnv#m&;b)W2s0GpBNa_lhmR;- z;Oj)i`f0BkTNARQujPd^L-ko?x@x*@TLju!P{f-_zmbDEOX$W1biEM|yIqDvS0Hf7 z2LrAx{gs$3_#P4MPkB`F%?70c84 zWlDsz8SPfIg3T6K6%e>ugQ0plhl*;}Q{*+oBw3j)4=fZ##B$!1-< z@ErGRqGD^!>X-x6FMG72$BKce`gab1hXVu^ZWj3B0HKFY%|vyr2WaqEuR?h7Ynift@SEu2 zrDLf@J$-lnSuFW?iL0L$gfF$P?zJ!-%Fw0H?DyyM9+fZSlsYv%enl|T2a05VG%bQ_ z5Be~uBQD>huwbZQ)lK_So{PkunbU*=_3(G(*KT(%xlg+EIDJP;5%jjGltJ>ci&b+y zO(R)3(07QnzCF}5dP`d!^UK|ED<$z6?(d8_OljgsEL!t9GE`Z8TDe~6y`HSVb7jvXK+*0)itrpmWHkFc&r#HBe6$OBCF5L!4JK*=6_OgE`bN%-Y2g0ofX z(P&CP#mB`^JD3cb%P>%xniNzDWL9-m5st+qRH;At)x_M}+TCN4W;IR###y@J+Vuq}|GqT&W241iYSJBEs4@B9mGCsfeBRf};4G16 z@3j;$;rNj0KSmep`y8i3Y@cM~5RlT?k{jIjs+7B4|L|=tEK`HtUNr=6a%{<{Kk2BG zVuAW@8Uyf2tNI~ zln4;@vcBiRb4-M$8;0tipYv0}NoXWRQ-5G(qRz?>NR-F>YX1fNo3dmt`2#lcuT0Up z9K$;96tZl~cxl;VXUXZD+G*9ERAbpo-wye{2=?|0mZ4H?I(ZAC^{WBT$V_Y69-!W` z5vJw@SPonETAwmXlF0ik8W%SgmEudG&ULxH5HYY-Ea#q#U;iSRWwU|lA z^4`f+_exx3#p;-9gJP53>Y%f^e)Rxe|AJ)X4bgR8qwBftd1w9TXxIq5T{b2aB^Q(b+gGQyn1;rOR`f>S-{bSj$^0ka zF}tM8xTcGt748cxk_0kO;Pvd1LEQ|?tW9jb)rxNU#G%5Cvj+LYM1Am^f{G1Su@qC2 zhNM3!GXuA-$inbqN3Xsiq>5u})s~wR0^;9PpwID>qqSw!h%j7Um+@nehAnVP$B=1d z{-n{JPLM`0px)_WkI2qUKR-uz!AUIaHJ$up=HPrZGf?+5qBH8sf;)Npli2R3;}fyq zo1eK*PDsrY#j*kSQ(DE{I<%j-(Fa+iLtfZdn6lqP=D%+1`xYsFBjB$$70NUYpLYvr zB!b4WM>)EkG)ewQB=r#fB*?#qDE`5CF8>X@TNe-Oh4b}D&^M$4v@!DRkk-G+$GUw+X<9spGu2+gGkU&#dlMkzD z0GBdTPSy!{x`bdPj-g;78S^q>2xJeke8cQoB zMUnN0r=jobO*LfNh#C6Tt173UOgNbC6ukc_ko}NlNQo(H&+O}&EQxp)_HcJ^Jq8(c zE+;J_b1$hhk|I1{z@LI=al#+trS_0KIUBg}nE`kEow7u(iS zlD(iIjROyyojWsSM9G^PLXo^5K?l=cl3+6xQ0GxgZc_&Fq@U^{280<@DEgcmQEj1W;VO?d zPRT`mF&ZglbK7+i+JzF@Z)BWQJ$4&FPE2`lUS;tR}GiP?`;f@8|suMFW8o$8X z8r!$Bux~oCEcC9b($XE!>>=nv8Nav_|6$mBvlk!jIvE)#`d&qv8UI-TnGC{mbaXpz zN#c0xXYPF|>VrnPk|Ip4B^`0?g~wNJ2s@9vA}O`LERfb{es4v`D}MjQ)^b70Hz5E! zH+(qIZb7;8ov~Y$=?iA`DQ?qzpkg(qN_D=|oQz(?SW1gk=j%!yEF9AST01ZL_-{NW zm5xCUsio$^Zy&5Cj&eV4RDYL1Iz=P)_``TYIb{Z1Z*8L@o)5YsSP=nF_K?P35Mt=q zpTn~?>BZ5c)cPMY9JUvVv)W*EAiDEH4#j0IzaF*0NlDN0Cx^VkB0|L>W+wRiuDPGoLBPdcMz25X}T&C^`A%-vciX9 zPI6-^^Q6(0`!rJ#-Wohg7sKP%S}2jM|0PG#Ngu(E=EuwO6)l4PP&6gK`FDi< zg+94-g}zG3A363j>c!@SmN@?)uSKB}59Y_X!f$B=@BGg<@2>2eB;;GE$uCzi}sa$|BP+AAe&h?W|K) z<*(n6z>q~0mV=~TxNH1`b`sB-g?%OnGDP-B;Z((YU5}c5Mjj#44ef!p=yM)|*VtB* z4Ji-BzVkFq{;a84fKpGmI4(i7EDSZKGLfye^k$Z;8w}G*f7-46sUG}U?8g2i_U2{{ z!JtXDlY`kD?EQeQlsC(y)#0kSgk+uq3g|>yYRSM9k#khW<|$KlA24)m(Hhs zT8b?@Ct`#%0A1Yi+fjJ+1mQRb#jF3Wu-Y}ng;FDfE3D}MCo0ng3ihS)VJp(dyKY%o zSv4O&{;G<6v3YYC7VnK{0mfx|;u5AhFvOWfJd;KtlJahYO~#CY+|HGQwA$y);p4^L zcyGPh37!c@@mSL0@&+J2-_n$N=k4omb82;}z<^qk%D3&drMh;VJ2!E?f3m3YA}EEz z`?QgdI#E+mOAvQjLIGM)Nvyx5%pBW~R-vW@2CLJUds}4U-ce zkuPduNt;HfdsEZp{|s zJxT7Lg?6sW2baZ}rDFSFmUlq=eB(69=0Qz ze$S?QF!uQ67&5t+$Mem<8;ci`n;AX88`b7gD0Y*D1Vuyi1eecFj2SAzPT7QM+m+sa z4cuO8TSA8lF6%lid@uEIXSW-qYUdlZ-l2GVg5~)Y=>e4{;IwbNM^|(k@XCj%a4yxU z*b9AJtALvP7QAWTgXs+V$Em8~Y3-{EqP^0IrDA4JZk-$36Bz?5&2C)$)qyyu@48cX z9xATs@KCg+F#fXdkwTX7mYdzcH>P)LSl}jH<+M1chUf*cB!@+5yxm!6+EC$;LJ^E<0dOF7tN<0=~Fjxm-+ zOkEbG@eMp>Y&R6&Y-{H_t06jDJ*X`iS0f9A1m|{dOU+)0Ylp|nL(QIcEj^<995LPV z&7vAQoG+zMnEZprJYL}})6VbNc)qQIHo<5KpVe;e4?6?QEM*-Atc<)(N)xB=}=;+L&kCQ3Zx~=wI1WZLPXm>Aw=K|Qu4{0C7MA#TSB`FnX z7Jxe)g>Q(ZRYTnfLU{g(a^w|neJ2raAQHD%UVvk&+9H9m_IgRswJ%>fLPaBM?%0T4 zH#Drgu~Z)er-b}0r`^V9lZOW*qK(nrQRU06MKi@GlCowFk09n*z1drc$nD_IwI+N0 zLaaQCKLL39RZn|@Hd}9QBV#KbZ7+$<-kvgK&1a1@Euwei;JR)n)?ldO1|GJp@#L|e9?}sABVKTirt=*?Z;%cVSdBnZpbT$ef zuQZ&!$KxYEjgN6NlSSb!=P&3UgKc-A(5;WZ;o2M=GHe^@s?CSQ0-j_ z*s_+CXQ^Ybo%95)J`KH%heL4b1lXJl)213L2$rwios6kCmT z-SzSE36N?0g`b89!a?JGvKX}Ley{GX?eQHlGF2+)Acf(xTW?54^{*=Ka4B8p1M*zB z!-buJuB<;aeT;XWE5B^7euv8x`vkgzuNP^eeFjf-kcsiBKJ*RsE9(n-5^b8I-DXym zCc0yYtMGx0l0Necef%c+#cfqc4Fb z_jlhj4a!#o$M1gKT~B)CNnDFQt-ltLcMmNZiTSGD(Hru2-*fSA0dU_l5bp;;hr(6n zm|JlNjiGqJ*O$v)Euh2(FZ!Y;irpNlv8Up$g*hvQVx+q&7X-9v_S!=2Wd&)ciQ2oV z7C!I#hgl&a>)X)cp322>At&DIViB)>tkgnpZU=m9t4Vz|Sdka-y2M@DK48v5yhdym z)h$f2OG|G&ek=u-Mez%zZNJ=D1b0+qk^4}Xk_!T=o82u51WU!`c1_ud=Y)Td@)BJu z#Zn(wUhb+Yq|c8|5cMSw^7#ixa0L1v(|=AN2(K>pco~|Qw70k6`a#C!==^LYe9y1X za10$K<@Wuf#qhnjr>qcD@>y31eBwFN2AZ4WDplpT_=O(ECA21iZ-w=OX#$14?s?nB zlU2Q~0>lEe(^LA&mCjBR{Is>Tq@gzI!FJas5==?k6=UwFV*iN~Egu#1e+^&-fE#W5 zY-nE`JBMvg?2}CCOx1LZ#qXLJKSnlU#L7ut|1AB)DL^9u&8Un-ooYc}%~{P^<2HMv zpkOC1S@rMqv(@kE^G5`>7u#lx+(A&tYrn=X`<%P z7gw|^)QtPQ?=7(3;e3vYu3xNLRiRv(pQ~GH%6PGzw(KT>u&zOFN4!-0$3MU&CpIY5y0JIjnULl4P1xYjs@4@3|5tXLH~x52f;$gotWC% zC(bL1VaM(q;5K-8UXbCV+{`kl9v>|^E3Fx_xpH65Zv`VCMA~W_r?&km&FY)G8Mgp$ zt4iA=e%vX2W>w#lBt$}za=qPhTg&gaD-ou8=$59@xpfO?`!;ga1iW*631P+)o)8*S_ocnp-nl%dQnfRk6jK}w%`}R@`hVUog#w)$k zc1aAXEUud_rNQz)}@-F^No%`3m!Uccu#(w2P zgkq8(B&N+m8?7x^X&hzI~>#@;3s^nu*V#;~IHU z<~@Hf^yEg#r@$02&EQWA!a0f`*R^euJaE-!jPM-Kyge~1Ot``RTvTV)6jUP= zJulTZi4PS|^T?UodRCQhg__Nkk-jl{g6Sl$#h47ZApup%7cwg68sgif%{=a){diUl_3C#%?xH z_j_D_xG#<=!)q$(OPS1AVaR6b4)n+EoQta{8#eT;?JaqkJ>};&ZF2dQ4G3LXXYKvw z%Uw%N7cMp)wGE=*kM~n{^Frq|<-=ai?;-^YKG2NW?$U|UJRjbF|2*(_{Fln)af9bw zuV1b@4y1c7AjA)h2ioc>O61~}ucqhj$h?ty_x-8-Lw`-geRHb?m0kytgk>pXgS%5} zenHP10#R%PHDM`IP4wk+GSvPLX2yK`EzCdYQi0fjm&K-T=7dcEbECor>P+z9dwzPzqH9&4fpgsuP|lXcw^4)4cZ&XfXF-F_ zS#k#XEsqwa<8F)iDPnTTPGR9pQS7U}x=UIFccdU`piYs#{2<%h&i4?C%f{?R1^)5EL3%V{XDqs{%BX!j`4+Qg)J(l5!>{90e1MhM7A`Y@gB4QLl(0N;j;^!YDhsu2W_7FuBPURsGVAJ@81pC9OLWQYwhj(2+ zz}oO*?NqOB&TV(?I%Svj=Bjy7iOtKok&gy8i~AJ^Oolo|km< zwz>(sa?RM%9hT#-Op(IiCE4lW{FFZ}K6#eBJGg9#1zxkNF&`mVy429U05{H~KCl#K zY72*Ms8}ojg|_V%uI>?6mPE*IcZWhb{exaui6iSKbn2C@MO+33mU8*eQ#OOs;3pOj z8|i#hO?in$ApX9i#U`EXj4x06JV-Rs4ABLuJO>JAB3trRmzRGTexDQ365fiG=rz_U zOq_{K`|=h9N=~-+mcQ%l$$mh8UIg9{(KRnWzXz8JMdH$HklKC+M^;p!DtH0Pj&ydg9ZJl+1q%t;(53QAL#`c>aFa4L(KsKH z_+KT=Ih0Yg@&e>+HF{Te=(p_1bK1#sAD5*wh=sKqD|2v^pZ_D6kLl@ZRrWiym?~5$ z0c8ffv{y}%j1_zF+(XS2zoFrL9+*dtTiD(ohWIA>iM>4toW4F{%_jK0^c9TeGh9dV zw#jcy4&*dvZ?A0o8_d_PrBCyl`?&6l;OM`C`6$O<`3zEZwNYNmJU7xzGNU@=lsg=h zCePCsRO`b|p?P0soUT@4Z%Q*OyfxUcb_9%Su1?hsIEsS+5?@AZ{{4WwCU5aoF0YzXMRKnU0~#XCHiep-SG{B zG7g{cmoLn6y@)v>6t*;)fd*=oh{g&WRQ^sM9l7llP0WW6enwfnJxm{zKvN~fo6ORp zzV2O&_!+EW-TjWu(F!pc?y?MTzx?X<=49Mv7G8rVKg498*s!okqsg^Gu)b7lcAVA5 z8n|^gF1_kh|9FXB2}L@QXBxFhY)KlZ%w)-p!wu?q+VG&jTw8ut;b3)9Or5#gTeT2WAO4U@ z!7opY-ym}&EHW}hD4dd8vXGwse@x${zscD;i##D1ilG7Oyumi*>ch$2Z{4f+RWe&t-NL&$UacuO$9qA8C?J#yu6A`d z_L%#FlS$}DK_7A?Bs3NI>qdRfv-Cb0fMY}B^SM9{^)E?l9~mie`U8h~xyN6LYf(3{ zsnLkT*}oo_s>F!{at=~kCgk02L@nHwB874Y=*%4W=R@>CG_lGNk-Sz4R&JcZltQLedlVLgz#k6tb48=bISffFy&=(Q)W)q6E}2H?oVoHWLhMeJMxE% z@h!UWmw9@8(QQ|wE||f>e{KSKU-pQhg~qbKM(uvP#{Z_q4xwQ96QfkmyZULkF$N=t zvRnE}sIIELm{wx5Mk5aWftIZoN*sH|@$RxrJi$s}Vu&9$xpi!sL~|XMI64Yno^b8& zpcWci_Rnq=Q3Cdj=Sw7XFLUe#reB@y89btR$>@Hj`G`XFbF+U~>fQnm7>Oxp4U5Ed z+gwv6GtJ9roglGtRw0bHXKTV ze-X}1Pjo#yqL~?qEBrqDU@p#I|56-NFG*eJVQ+(}dRA|B1s8?An_aNb;hw&#BIQy> zVkDfuFG0gpvrp-w9-9VFspwDd+S1F_6}65VhJSBxd6?alK>6^&gDwo%awQxD_W^j9 z5BM+aAF4=+$1>oV4hujU0P*9i1^?IfgN=##d*lBlZ_TpR@xhZ_iNK69fAjwPKVnEg zQyc^ru#bgElZv!m`tg7m^F6HV(O)d`<`FMI5eLB}Wpl5Igk9bG=pO2XaVPO@94PV2 zn@6q?5L*L35dTy04Gs*`Mta~`>~jkbP{l)VAx?yMT8apHf#YwW7P3c_K6Bs!fQk3A zZ<5}j%w)X4X*`H_1rSRkgPJz(q0gx94B|_GNFzjA1}6jF2@rfp9o?OT8#-R_untfH zC*64Q8K`Xao&+AIJJgAZ7tl%s(fwB~!cReElJ`oV#(JkLE)gs}(E1zK9h4XXt~dX) z^pae661}*1foRa5B-O<`eS%i*3tp6Ssr+6o^SCJP$fjzqiSF#>(V2KXzp$IB46c3R529YAw zqeP5=-5ZX2&qg=(JFF3gt(E(!Q-T=zJq%F?hG`=vB{er(0$!kCNW$B{wg9=QpvgG> zBs(zAF5k1`vC&^FlGTV8(D)9T%uH>^KnS8(_mudW-AM$#gA#>y`KSm$?Dn2SY^ysA zEe#@#M3JO`{QvBk-Kp`z+4t6 za6H>VlnF#h?x7Xn%MYReWi~{LMCL;G09Hd`&8f`48^phVY5-o@;5&yTSz5#d%!3&q zy;(3zB6qX?QjOm~Yz@QOqaXu9PO$jUJ z1z3K7X1=HFY9Iq;DBaUPU-q}$RzJXUU(YCrKL)A$&60ifoxEyZfG8J~ml@Uc93CWR z?)mY!{;xc(Tu@$W(Ty`bNU`42YTfde>Vr`V2twzl;FIgSC+pE~fFlpAO%*cP>MTHb z9_SqBZrD$FKy4oQrlv2J%0ofIbNWn03>COXY+T# z(skdH_j~CtIlsgUh!uh)cy{L66-Yk5CzIt5j0B*C5NVRp)%q@2Z+O2&NCD;x!J70c zN-psTcvb{Di(wyFC=Vskr|>eLenbO!6@=Ku`>lr<#iLk3co| z8$tMsza+*5FAxGFb_Bn-fMyu5pEK!69nmV#XjE<7AB z;93Go6m4B6I|12|d+Z0~JGQC>6ba#{cP6aayly#4p()S z8R}ibRLOsryQ>0J!v2on849Rm|DMSLB6paC2&lxl67&uo;;zLap#KZ>PNn!=VuLuC zxD6&E$l5t30dQ4dqlGDbm&Q^B%1542$%YLmj_%3Nkh{Zv$bljzs=x{pR;?eo1hOIb zSUjaWmQ)F3m8v0_NFmldacA(rLN?e{TC3irhE;d-f*FLw1SqZrz0+cTmo`%idPk#=SBMu>cfb9Svj$S@!Rn`42VzFy*JIP5rto{3 zPCndW7au@Pw{@UZ+E2G|FhG&_$Imj(cdS@F=q6cv{X^Ju>9{Ad2l!SGx=9mAlD&#) z0H3vp7c3th@XQN*P5yTMQfufL z0a?XHkPUPrRfDw{h4+mLxwAc_5p+k>TqfxOh)vwX1S0M*{s_<=0!^UES)s6-6_Aa% z$EL>Iv93+vm{?LmEtBA`Qe4FY%3uQk>@|U{j>wXYJRWHMt9#ae0bVtOZc;q(i6_5n zF>upi8F2x$bWl00HX%6@6X~D-Yo?N&eV6(@8%*_Y0ZsEV%6kLr0`3ps3G(mQ$N3<8 z4P&3~&Pc;XboaaTl;S&9q!skc7o|Qnn7PFF%tbH1!;s5Ck?XCX$j`FV2{30b-1AIa z^&QLD28uK;y>^DZPxsqh#D+U81;j{{X~`e|0i_k)lja%o3-r?uEeE@WyS8Jx9f11< z`l-JiH0AH4&EROF6$jKIe$Q;K?mL#T8)W&~L9;m+E`Fhd?BzX0wf%Rjb2~U|d(GT6 z4>YxdFWj?{yPrizKoNgm@}@ybFo_@oa@Z7d@}89+0R0}&VYY^6m$*P<57=1EVBBTg z?14y=8KDAhus3W4%&7E_;kqd<1klHYyaJMY!H%t5<+%4Dz}^SJgFhksn?M9SBmyIX zNczCkyL;mQrn-^+D>ax5OpOIo$^P%f$uj@Yfk+JjZmA%$06I8kBl+*$rT;tp4+aGK zAvz@gy|3?o0e7Gf1Q1|1i2>*X5PbL>4hV3`0ZO(V04@0MB|QI|k%kunQ1XJ@D#(%i z_c8?VGsHhERRORDAsS@=J%Rdv0m( z?#=*H9)jS(=>eug5Dk+59;WiYA`gKH5Fq;-CJfGq5^(<)z}1HUf@~;r~i#2U0%&=l=a pu#|TzUa;cBQ2~CV5Dmn?pWJ|jQLz3!3 From f610462bebc67108850a0ca696eb9e51005b2ef7 Mon Sep 17 00:00:00 2001 From: Mikhail Rakhmanov Date: Tue, 13 May 2025 15:36:40 +0200 Subject: [PATCH 028/164] GO-4400 WIP new invite without approve logic --- core/acl/aclservice.go | 94 ++- core/debug/exporter/exporter.go | 22 +- core/debug/exporter/importer.go | 3 +- docs/proto.md | 1 + go.mod | 13 +- go.sum | 52 +- pkg/lib/pb/model/models.pb.go | 1170 +++++++++++++------------- pkg/lib/pb/model/protos/models.proto | 1 + space/join.go | 42 + space/service.go | 1 + space/spacefactory/spacefactory.go | 21 + 11 files changed, 759 insertions(+), 661 deletions(-) diff --git a/core/acl/aclservice.go b/core/acl/aclservice.go index beac8819b..e2d492c77 100644 --- a/core/acl/aclservice.go +++ b/core/acl/aclservice.go @@ -399,47 +399,75 @@ func (a *aclService) Join(ctx context.Context, spaceId, networkId string, invite if err != nil { return convertedOrInternalError("get invite payload", err) } - if invitePayload.InviteType == model.InvitePayload_JoinAsGuest { + switch invitePayload.InviteType { + case model.InvitePayload_JoinAsGuest: guestKey, err := crypto.UnmarshalEd25519PrivateKeyProto(invitePayload.GuestKey) if err != nil { return convertedOrInternalError("unmarshal invite key", err) } return a.joinAsGuest(ctx, invitePayload.SpaceId, guestKey) - } - inviteKey, err := crypto.UnmarshalEd25519PrivateKeyProto(invitePayload.AclKey) - if err != nil { - return convertedOrInternalError("unmarshal invite key", err) - } - aclHeadId, err := a.joiningClient.RequestJoin(ctx, spaceId, list.RequestJoinPayload{ - InviteKey: inviteKey, - Metadata: a.spaceService.AccountMetadataPayload(), - }) - if err != nil { - if errors.Is(err, coordinatorproto.ErrSpaceIsDeleted) { - return space.ErrSpaceDeleted + case model.InvitePayload_JoinAsMember: + inviteKey, err := crypto.UnmarshalEd25519PrivateKeyProto(invitePayload.AclKey) + if err != nil { + return convertedOrInternalError("unmarshal invite key", err) } - if errors.Is(err, list.ErrInsufficientPermissions) { - err = a.joiningClient.CancelRemoveSelf(ctx, spaceId) - if err != nil { - return convertedOrAclRequestError(err) + aclHeadId, err := a.joiningClient.RequestJoin(ctx, spaceId, list.RequestJoinPayload{ + InviteKey: inviteKey, + Metadata: a.spaceService.AccountMetadataPayload(), + }) + if err != nil { + if errors.Is(err, coordinatorproto.ErrSpaceIsDeleted) { + return space.ErrSpaceDeleted } - err = a.spaceService.CancelLeave(ctx, spaceId) - if err != nil { - return convertedOrInternalError("cancel leave", err) + if errors.Is(err, list.ErrInsufficientPermissions) { + err = a.joiningClient.CancelRemoveSelf(ctx, spaceId) + if err != nil { + return convertedOrAclRequestError(err) + } + err = a.spaceService.CancelLeave(ctx, spaceId) + if err != nil { + return convertedOrInternalError("cancel leave", err) + } } + return convertedOrAclRequestError(err) + } + err = a.spaceService.Join(ctx, spaceId, aclHeadId) + if err != nil { + return convertedOrInternalError("join space", err) + } + err = a.spaceService.TechSpace().SpaceViewSetData(ctx, spaceId, + domain.NewDetails(). + SetString(bundle.RelationKeyName, invitePayload.SpaceName). + SetString(bundle.RelationKeyIconImage, invitePayload.SpaceIconCid)) + if err != nil { + return convertedOrInternalError("set space data", err) + } + case model.InvitePayload_JoinAsMemberWithoutApprove: + inviteKey, err := crypto.UnmarshalEd25519PrivateKeyProto(invitePayload.AclKey) + if err != nil { + return convertedOrInternalError("unmarshal invite key", err) + } + aclHeadId, err := a.joiningClient.InviteJoin(ctx, spaceId, list.InviteJoinPayload{ + InviteKey: inviteKey, + Metadata: a.spaceService.AccountMetadataPayload(), + }) + if err != nil { + if errors.Is(err, coordinatorproto.ErrSpaceIsDeleted) { + return space.ErrSpaceDeleted + } + return convertedOrAclRequestError(err) + } + err = a.spaceService.InviteJoin(ctx, spaceId, aclHeadId) + if err != nil { + return convertedOrInternalError("join space", err) + } + err = a.spaceService.TechSpace().SpaceViewSetData(ctx, spaceId, + domain.NewDetails(). + SetString(bundle.RelationKeyName, invitePayload.SpaceName). + SetString(bundle.RelationKeyIconImage, invitePayload.SpaceIconCid)) + if err != nil { + return convertedOrInternalError("set space data", err) } - return convertedOrAclRequestError(err) - } - err = a.spaceService.Join(ctx, spaceId, aclHeadId) - if err != nil { - return convertedOrInternalError("join space", err) - } - err = a.spaceService.TechSpace().SpaceViewSetData(ctx, spaceId, - domain.NewDetails(). - SetString(bundle.RelationKeyName, invitePayload.SpaceName). - SetString(bundle.RelationKeyIconImage, invitePayload.SpaceIconCid)) - if err != nil { - return convertedOrInternalError("set space data", err) } return nil } @@ -473,7 +501,7 @@ func (a *aclService) ViewInvite(ctx context.Context, inviteCid cid.Cid, inviteFi if err != nil { return domain.InviteView{}, convertedOrAclRequestError(err) } - lst, err := list.BuildAclListWithIdentity(a.accountService.Keys(), store, recordverifier.NewValidateFull()) + lst, err := list.BuildAclListWithIdentity(a.accountService.Keys(), store, recordverifier.New()) if err != nil { return domain.InviteView{}, convertedOrAclRequestError(err) } diff --git a/core/debug/exporter/exporter.go b/core/debug/exporter/exporter.go index c5d079cb3..1e9fa7db2 100644 --- a/core/debug/exporter/exporter.go +++ b/core/debug/exporter/exporter.go @@ -11,10 +11,30 @@ import ( "github.com/anyproto/any-sync/commonspace/object/acl/recordverifier" "github.com/anyproto/any-sync/commonspace/object/tree/objecttree" "github.com/anyproto/any-sync/commonspace/object/tree/treechangeproto" + "github.com/anyproto/any-sync/consensus/consensusproto" "github.com/anyproto/any-sync/util/crypto" "golang.org/x/exp/slices" ) +type recordVerifier struct { +} + +func (r recordVerifier) Init(a *app.App) (err error) { + return nil +} + +func (r recordVerifier) Name() (name string) { + return recordverifier.CName +} + +func (r recordVerifier) VerifyAcceptor(rec *consensusproto.RawRecord) (err error) { + return nil +} + +func (r recordVerifier) ShouldValidate() bool { + return false +} + type DataConverter interface { Unmarshall(dataType string, decrypted []byte) (any, error) Marshall(model any) (data []byte, dataType string, err error) @@ -35,7 +55,7 @@ func prepareExport(ctx context.Context, readable objecttree.ReadableObjectTree, if err != nil { return nil, err } - newAcl, err := list.BuildAclListWithIdentity(keys, listStorage, recordverifier.NewValidateFull()) + newAcl, err := list.BuildAclListWithIdentity(keys, listStorage, recordVerifier{}) if err != nil { return nil, err } diff --git a/core/debug/exporter/importer.go b/core/debug/exporter/importer.go index c198d3a01..d4aeb84a0 100644 --- a/core/debug/exporter/importer.go +++ b/core/debug/exporter/importer.go @@ -10,7 +10,6 @@ import ( "github.com/anyproto/any-sync/commonspace/headsync/headstorage" "github.com/anyproto/any-sync/commonspace/object/accountdata" "github.com/anyproto/any-sync/commonspace/object/acl/list" - "github.com/anyproto/any-sync/commonspace/object/acl/recordverifier" "github.com/anyproto/any-sync/commonspace/object/tree/objecttree" "github.com/anyproto/anytype-heart/util/ziputil" @@ -81,7 +80,7 @@ func ImportStorage(ctx context.Context, path string) (res ImportResult, err erro if err != nil { return } - acl, err := list.BuildAclListWithIdentity(randomKeys, listStorage, recordverifier.NewValidateFull()) + acl, err := list.BuildAclListWithIdentity(randomKeys, listStorage, recordVerifier{}) if err != nil { return } diff --git a/docs/proto.md b/docs/proto.md index 570af0f49..4d7a916ad 100644 --- a/docs/proto.md +++ b/docs/proto.md @@ -32686,6 +32686,7 @@ Look https://github.com/golang/protobuf/issues/1135 for more information. | ---- | ------ | ----------- | | JoinAsMember | 0 | aclKey contains the key to sign the ACL record | | JoinAsGuest | 1 | guestKey contains the privateKey of the guest user | +| JoinAsMemberWithoutApprove | 2 | aclKey contains the key to sign the ACL record and decrypt the read key | diff --git a/go.mod b/go.mod index ba4ddfde7..64bdd154d 100644 --- a/go.mod +++ b/go.mod @@ -7,8 +7,8 @@ require ( github.com/PuerkitoBio/goquery v1.10.2 github.com/VividCortex/ewma v1.2.0 github.com/adrium/goheif v0.0.0-20230113233934-ca402e77a786 - github.com/anyproto/any-store v0.1.13 - github.com/anyproto/any-sync v0.7.6-0.20250512130421-216a06119435 + github.com/anyproto/any-store v0.2.0 + github.com/anyproto/any-sync v0.7.6-0.20250513132905-854823d81e74 github.com/anyproto/anytype-publish-server/publishclient v0.0.0-20250131145601-de288583ff2a github.com/anyproto/anytype-push-server/pushclient v0.0.0-20250402124745-6451298047f7 github.com/anyproto/go-chash v0.1.0 @@ -94,8 +94,6 @@ require ( github.com/srwiley/oksvg v0.0.0-20221011165216-be6e8873101c github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef github.com/stretchr/testify v1.10.0 - github.com/swaggo/files v1.0.1 - github.com/swaggo/gin-swagger v1.6.0 github.com/swaggo/swag/v2 v2.0.0-rc4 github.com/uber/jaeger-client-go v2.30.0+incompatible github.com/valyala/fastjson v1.6.4 @@ -107,7 +105,7 @@ require ( go.uber.org/mock v0.5.2 go.uber.org/multierr v1.11.0 go.uber.org/zap v1.27.0 - golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 + golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 golang.org/x/image v0.27.0 golang.org/x/mobile v0.0.0-20250218173827-cd096645fcd3 golang.org/x/net v0.40.0 @@ -261,7 +259,6 @@ require ( github.com/stretchr/objx v0.5.2 // indirect github.com/subosito/gotenv v1.4.2 // indirect github.com/sv-tools/openapi v0.2.1 // indirect - github.com/swaggo/swag v1.16.4 // indirect github.com/tetratelabs/wazero v1.8.1 // indirect github.com/tklauser/go-sysconf v0.3.12 // indirect github.com/tklauser/numcpus v0.6.1 // indirect @@ -292,9 +289,9 @@ require ( gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect lukechampine.com/blake3 v1.4.0 // indirect - modernc.org/libc v1.62.1 // indirect + modernc.org/libc v1.65.0 // indirect modernc.org/mathutil v1.7.1 // indirect - modernc.org/memory v1.9.1 // indirect + modernc.org/memory v1.10.0 // indirect modernc.org/sqlite v1.37.0 // indirect nhooyr.io/websocket v1.8.7 // indirect ) diff --git a/go.sum b/go.sum index 13779d111..394b23d35 100644 --- a/go.sum +++ b/go.sum @@ -78,20 +78,12 @@ github.com/alexbrainman/goissue34681 v0.0.0-20191006012335-3fc7a47baff5/go.mod h github.com/andybalholm/cascadia v1.3.1/go.mod h1:R4bJ1UQfqADjvDa4P6HZHLh/3OxWWEqc0Sk8XGwHqvA= github.com/andybalholm/cascadia v1.3.3 h1:AG2YHrzJIm4BZ19iwJ/DAua6Btl3IwJX+VI4kktS1LM= github.com/andybalholm/cascadia v1.3.3/go.mod h1:xNd9bqTn98Ln4DwST8/nG+H0yuB8Hmgu1YHNnWw0GeA= -github.com/anyproto/any-store v0.1.13 h1:1wmm0qQIRShaycBLKwcgkQbRKy3WrNPAShTE5fwzfCY= -github.com/anyproto/any-store v0.1.13/go.mod h1:2M0Xf4rmijoKGd+nqqeKG8I1yIokCLEIxrAXEoHjXn4= -github.com/anyproto/any-sync v0.6.15 h1:fxZHjiMcZJzJqzBprBNTYmm0MV8Y7NgIGPfLxlsgnWk= -github.com/anyproto/any-sync v0.6.15/go.mod h1:TSKgCoTV40Bt8AfCh3RxPUUAfYGrhc8Mzh8/AiVlvX4= -github.com/anyproto/any-sync v0.7.2 h1:S1UPzW0iYTLwsMAZ3rN/EJwthTGuadsvXdnGYNiC6cA= -github.com/anyproto/any-sync v0.7.2/go.mod h1:TSKgCoTV40Bt8AfCh3RxPUUAfYGrhc8Mzh8/AiVlvX4= -github.com/anyproto/any-sync v0.7.4 h1:pEkPn1fxJGvSGlsnAOy0lWVaqRgymyddmNy7T9toUQk= -github.com/anyproto/any-sync v0.7.4/go.mod h1:TSKgCoTV40Bt8AfCh3RxPUUAfYGrhc8Mzh8/AiVlvX4= -github.com/anyproto/any-sync v0.7.5 h1:VHayuacVpa2eRu5ubxCwrL3l0f/OSN7p45L8TxnaJEw= -github.com/anyproto/any-sync v0.7.5/go.mod h1:02tMeQ6s/tneWLhoyzvy/ocGswICtvI48kdwTU8hQf8= -github.com/anyproto/any-sync v0.7.6-0.20250512115929-ae90afb97d1c h1:eBuoWi/lgqxRLEh26ksWzSx3CTU1RdrWptLZWBPTRhA= -github.com/anyproto/any-sync v0.7.6-0.20250512115929-ae90afb97d1c/go.mod h1:02tMeQ6s/tneWLhoyzvy/ocGswICtvI48kdwTU8hQf8= -github.com/anyproto/any-sync v0.7.6-0.20250512130421-216a06119435 h1:pABYN1hf08R/GgUQMhzsyDjEVcvtx2zsqgYmpyZZNT4= -github.com/anyproto/any-sync v0.7.6-0.20250512130421-216a06119435/go.mod h1:02tMeQ6s/tneWLhoyzvy/ocGswICtvI48kdwTU8hQf8= +github.com/anyproto/any-store v0.2.0 h1:M8Eb0dxuEk62lIGZ3k1nADlaPQzmo6ilWLCCcY9WX10= +github.com/anyproto/any-store v0.2.0/go.mod h1:N59OGYe/uXRNpr6ytfbBpbC+1viDgSbsVNXevOMxJAM= +github.com/anyproto/any-sync v0.7.6-0.20250512200224-c2de5ecb12c0 h1:ZS9++jR+3NCP5MK/aBy/McoyLiwsBzA7jwMDI15+b9o= +github.com/anyproto/any-sync v0.7.6-0.20250512200224-c2de5ecb12c0/go.mod h1:G6i3PT6pN6lcC5rim5Ed7ppUPuQgU5PyHgiqskrggL0= +github.com/anyproto/any-sync v0.7.6-0.20250513132905-854823d81e74 h1:Io1SWrvvWjnXjtJsNvRcfvv52U6H7DAHLHcpkm8Vo7A= +github.com/anyproto/any-sync v0.7.6-0.20250513132905-854823d81e74/go.mod h1:G6i3PT6pN6lcC5rim5Ed7ppUPuQgU5PyHgiqskrggL0= github.com/anyproto/anytype-publish-server/publishclient v0.0.0-20250131145601-de288583ff2a h1:ZZM+0OUCQMWSLSflpkf0ZMVo3V76qEDDIXPpQOClNs0= github.com/anyproto/anytype-publish-server/publishclient v0.0.0-20250131145601-de288583ff2a/go.mod h1:4fkueCZcGniSMXkrwESO8zzERrh/L7WHimRNWecfGM0= github.com/anyproto/anytype-push-server/pushclient v0.0.0-20250402124745-6451298047f7 h1:oKkEnxnN1jeB1Ty20CTMH3w4WkCrV8dOQy1Myetg7XA= @@ -322,8 +314,6 @@ github.com/gammazero/chanqueue v1.1.0/go.mod h1:fMwpwEiuUgpab0sH4VHiVcEoji1pSi+E github.com/gammazero/deque v1.0.0 h1:LTmimT8H7bXkkCy6gZX7zNLtkbz4NdS2z8LZuor3j34= github.com/gammazero/deque v1.0.0/go.mod h1:iflpYvtGfM3U8S8j+sZEKIak3SAKYpA5/SQewgfXDKo= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gin-contrib/gzip v0.0.6 h1:NjcunTcGAj5CO1gn4N8jHOSIeRFHIbn51z6K+xaN4d4= -github.com/gin-contrib/gzip v0.0.6/go.mod h1:QOJlmV2xmayAjkNS2Y8NQsMneuRShOU/kjovCXNuzzk= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= @@ -1062,12 +1052,6 @@ github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8 github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/sv-tools/openapi v0.2.1 h1:ES1tMQMJFGibWndMagvdoo34T1Vllxr1Nlm5wz6b1aA= github.com/sv-tools/openapi v0.2.1/go.mod h1:k5VuZamTw1HuiS9p2Wl5YIDWzYnHG6/FgPOSFXLAhGg= -github.com/swaggo/files v1.0.1 h1:J1bVJ4XHZNq0I46UU90611i9/YzdrF7x92oX1ig5IdE= -github.com/swaggo/files v1.0.1/go.mod h1:0qXmMNH6sXNf+73t65aKeB+ApmgxdnkQzVTAj2uaMUg= -github.com/swaggo/gin-swagger v1.6.0 h1:y8sxvQ3E20/RCyrXeFfg60r6H0Z+SwpTjMYsMm+zy8M= -github.com/swaggo/gin-swagger v1.6.0/go.mod h1:BG00cCEy294xtVpyIAHG6+e2Qzj/xKlRdOqDkvq0uzo= -github.com/swaggo/swag v1.16.4 h1:clWJtd9LStiG3VeijiCfOVODP6VpHtKdQy9ELFG3s1A= -github.com/swaggo/swag v1.16.4/go.mod h1:VBsHJRsDvfYvqoiMKnsdwhNV9LEMHgEDZcyVYX0sxPg= github.com/swaggo/swag/v2 v2.0.0-rc4 h1:SZ8cK68gcV6cslwrJMIOqPkJELRwq4gmjvk77MrvHvY= github.com/swaggo/swag/v2 v2.0.0-rc4/go.mod h1:Ow7Y8gF16BTCDn8YxZbyKn8FkMLRUHekv1kROJZpbvE= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= @@ -1220,8 +1204,8 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 h1:nDVHiLt8aIbd/VzvPWN6kSOPE7+F/fNFDSXLVYkE/Iw= -golang.org/x/exp v0.0.0-20250305212735-054e65f0b394/go.mod h1:sIifuuw/Yco/y6yb6+bDNfyeQ/MdPUy/hKEMYQV17cM= +golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 h1:R84qjqJb5nVJMxqWYb3np9L5ZsaDtB+a39EqjV0JSUM= +golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0/go.mod h1:S9Xr4PYopiDyqSyp5NjCrhFrqg6A5zA2E/iPHPhqnS8= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= @@ -1697,20 +1681,20 @@ honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= lukechampine.com/blake3 v1.4.0 h1:xDbKOZCVbnZsfzM6mHSYcGRHZ3YrLDzqz8XnV4uaD5w= lukechampine.com/blake3 v1.4.0/go.mod h1:MQJNQCTnR+kwOP/JEZSxj3MaQjp80FOFSNMMHXcSeX0= -modernc.org/cc/v4 v4.25.2 h1:T2oH7sZdGvTaie0BRNFbIYsabzCxUQg8nLqCdQ2i0ic= -modernc.org/cc/v4 v4.25.2/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0= -modernc.org/ccgo/v4 v4.25.1 h1:TFSzPrAGmDsdnhT9X2UrcPMI3N/mJ9/X9ykKXwLhDsU= -modernc.org/ccgo/v4 v4.25.1/go.mod h1:njjuAYiPflywOOrm3B7kCB444ONP5pAVr8PIEoE0uDw= -modernc.org/fileutil v1.3.0 h1:gQ5SIzK3H9kdfai/5x41oQiKValumqNTDXMvKo62HvE= -modernc.org/fileutil v1.3.0/go.mod h1:XatxS8fZi3pS8/hKG2GH/ArUogfxjpEKs3Ku3aK4JyQ= +modernc.org/cc/v4 v4.26.0 h1:QMYvbVduUGH0rrO+5mqF/PSPPRZNpRtg2CLELy7vUpA= +modernc.org/cc/v4 v4.26.0/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0= +modernc.org/ccgo/v4 v4.26.0 h1:gVzXaDzGeBYJ2uXTOpR8FR7OlksDOe9jxnjhIKCsiTc= +modernc.org/ccgo/v4 v4.26.0/go.mod h1:Sem8f7TFUtVXkG2fiaChQtyyfkqhJBg/zjEJBkmuAVY= +modernc.org/fileutil v1.3.1 h1:8vq5fe7jdtEvoCf3Zf9Nm0Q05sH6kGx0Op2CPx1wTC8= +modernc.org/fileutil v1.3.1/go.mod h1:HxmghZSZVAz/LXcMNwZPA/DRrQZEVP9VX0V4LQGQFOc= modernc.org/gc/v2 v2.6.5 h1:nyqdV8q46KvTpZlsw66kWqwXRHdjIlJOhG6kxiV/9xI= modernc.org/gc/v2 v2.6.5/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito= -modernc.org/libc v1.62.1 h1:s0+fv5E3FymN8eJVmnk0llBe6rOxCu/DEU+XygRbS8s= -modernc.org/libc v1.62.1/go.mod h1:iXhATfJQLjG3NWy56a6WVU73lWOcdYVxsvwCgoPljuo= +modernc.org/libc v1.65.0 h1:e183gLDnAp9VJh6gWKdTy0CThL9Pt7MfcR/0bgb7Y1Y= +modernc.org/libc v1.65.0/go.mod h1:7m9VzGq7APssBTydds2zBcxGREwvIGpuUBaKTXdm2Qs= modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU= modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg= -modernc.org/memory v1.9.1 h1:V/Z1solwAVmMW1yttq3nDdZPJqV1rM05Ccq6KMSZ34g= -modernc.org/memory v1.9.1/go.mod h1:/JP4VbVC+K5sU2wZi9bHoq2MAkCnrt2r98UGeSK7Mjw= +modernc.org/memory v1.10.0 h1:fzumd51yQ1DxcOxSO+S6X7+QTuVU+n8/Aj7swYjFfC4= +modernc.org/memory v1.10.0/go.mod h1:/JP4VbVC+K5sU2wZi9bHoq2MAkCnrt2r98UGeSK7Mjw= modernc.org/opt v0.1.4 h1:2kNGMRiUjrp4LcaPuLY2PzUfqM/w9N23quVwhKt5Qm8= modernc.org/opt v0.1.4/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns= modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w= diff --git a/pkg/lib/pb/model/models.pb.go b/pkg/lib/pb/model/models.pb.go index 08ae46917..ce5e14db2 100644 --- a/pkg/lib/pb/model/models.pb.go +++ b/pkg/lib/pb/model/models.pb.go @@ -2204,18 +2204,21 @@ func (ImportErrorCode) EnumDescriptor() ([]byte, []int) { type InvitePayloadInviteType int32 const ( - InvitePayload_JoinAsMember InvitePayloadInviteType = 0 - InvitePayload_JoinAsGuest InvitePayloadInviteType = 1 + InvitePayload_JoinAsMember InvitePayloadInviteType = 0 + InvitePayload_JoinAsGuest InvitePayloadInviteType = 1 + InvitePayload_JoinAsMemberWithoutApprove InvitePayloadInviteType = 2 ) var InvitePayloadInviteType_name = map[int32]string{ 0: "JoinAsMember", 1: "JoinAsGuest", + 2: "JoinAsMemberWithoutApprove", } var InvitePayloadInviteType_value = map[string]int32{ - "JoinAsMember": 0, - "JoinAsGuest": 1, + "JoinAsMember": 0, + "JoinAsGuest": 1, + "JoinAsMemberWithoutApprove": 2, } func (x InvitePayloadInviteType) String() string { @@ -9847,586 +9850,587 @@ func init() { } var fileDescriptor_98a910b73321e591 = []byte{ - // 9253 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x7d, 0x5b, 0x8c, 0x23, 0xc9, - 0x91, 0x58, 0xf3, 0x4d, 0x06, 0x9b, 0xdd, 0xd9, 0x39, 0x2f, 0x8a, 0x1a, 0x8d, 0x47, 0xd4, 0x6a, - 0x77, 0x34, 0x5a, 0xf5, 0xec, 0xce, 0xee, 0x6a, 0x57, 0x2b, 0xed, 0x4a, 0xec, 0x6e, 0xf6, 0x34, - 0x77, 0xfa, 0xa5, 0x22, 0x67, 0x46, 0xbb, 0xb8, 0x73, 0xbb, 0x9a, 0x95, 0x4d, 0x96, 0xba, 0x58, - 0x45, 0x55, 0x25, 0x7b, 0xba, 0x05, 0xdb, 0x90, 0x5f, 0x77, 0xbe, 0x3f, 0xd9, 0xf0, 0xf9, 0x7c, - 0x30, 0x8c, 0x93, 0x3e, 0x0c, 0x18, 0xbe, 0x33, 0xfc, 0x75, 0xb0, 0xcf, 0x0f, 0xc0, 0x77, 0x5f, - 0x06, 0xee, 0x47, 0xf6, 0x97, 0x01, 0x1b, 0xb0, 0xa1, 0x05, 0xfc, 0x63, 0xd8, 0x87, 0xf3, 0x97, - 0x60, 0xf8, 0xc3, 0x88, 0xc8, 0xac, 0x17, 0xc9, 0xee, 0xe1, 0xec, 0xdd, 0x19, 0xf7, 0xd5, 0x8c, - 0xa8, 0x88, 0xa8, 0x7c, 0x44, 0x46, 0x46, 0x44, 0x46, 0x56, 0xc3, 0x2b, 0xe3, 0xd3, 0xc1, 0x03, - 0xc7, 0x3e, 0x7e, 0x30, 0x3e, 0x7e, 0x30, 0xf2, 0x2c, 0xe1, 0x3c, 0x18, 0xfb, 0x9e, 0xf4, 0x02, - 0x05, 0x04, 0xeb, 0x04, 0xf1, 0x9a, 0xe9, 0x5e, 0xc8, 0x8b, 0xb1, 0x58, 0x27, 0x6c, 0xe3, 0xf6, - 0xc0, 0xf3, 0x06, 0x8e, 0x50, 0xa4, 0xc7, 0x93, 0x93, 0x07, 0x81, 0xf4, 0x27, 0x7d, 0xa9, 0x88, - 0x9b, 0x3f, 0xcb, 0xc3, 0xcd, 0xee, 0xc8, 0xf4, 0xe5, 0x86, 0xe3, 0xf5, 0x4f, 0xbb, 0xae, 0x39, - 0x0e, 0x86, 0x9e, 0xdc, 0x30, 0x03, 0xc1, 0x5f, 0x87, 0xe2, 0x31, 0x22, 0x83, 0x7a, 0xe6, 0x6e, - 0xee, 0x5e, 0xf5, 0xe1, 0xf5, 0xf5, 0x94, 0xe0, 0x75, 0xe2, 0x30, 0x34, 0x0d, 0x7f, 0x13, 0x4a, - 0x96, 0x90, 0xa6, 0xed, 0x04, 0xf5, 0xec, 0xdd, 0xcc, 0xbd, 0xea, 0xc3, 0x5b, 0xeb, 0xea, 0xc5, - 0xeb, 0xe1, 0x8b, 0xd7, 0xbb, 0xf4, 0x62, 0x23, 0xa4, 0xe3, 0xef, 0x42, 0xf9, 0xc4, 0x76, 0xc4, - 0x63, 0x71, 0x11, 0xd4, 0x73, 0x57, 0xf2, 0x6c, 0x64, 0xeb, 0x19, 0x23, 0x22, 0xe6, 0x9b, 0xb0, - 0x22, 0xce, 0xa5, 0x6f, 0x1a, 0xc2, 0x31, 0xa5, 0xed, 0xb9, 0x41, 0x3d, 0x4f, 0x2d, 0xbc, 0x35, - 0xd5, 0xc2, 0xf0, 0x39, 0xb1, 0x4f, 0xb1, 0xf0, 0xbb, 0x50, 0xf5, 0x8e, 0xbf, 0x2f, 0xfa, 0xb2, - 0x77, 0x31, 0x16, 0x41, 0xbd, 0x70, 0x37, 0x77, 0xaf, 0x62, 0x24, 0x51, 0xfc, 0x1b, 0x50, 0xed, - 0x7b, 0x8e, 0x23, 0xfa, 0xea, 0x1d, 0xc5, 0xab, 0xbb, 0x95, 0xa4, 0xe5, 0x6f, 0xc3, 0x0d, 0x5f, - 0x8c, 0xbc, 0x33, 0x61, 0x6d, 0x46, 0x58, 0xea, 0x67, 0x99, 0x5e, 0x33, 0xff, 0x21, 0x6f, 0x41, - 0xcd, 0xd7, 0xed, 0xdb, 0xb5, 0xdd, 0xd3, 0xa0, 0x5e, 0xa2, 0x6e, 0x7d, 0xfe, 0x92, 0x6e, 0x21, - 0x8d, 0x91, 0xe6, 0xe0, 0x0c, 0x72, 0xa7, 0xe2, 0xa2, 0x5e, 0xb9, 0x9b, 0xb9, 0x57, 0x31, 0xf0, - 0x27, 0x7f, 0x1f, 0xea, 0x9e, 0x6f, 0x0f, 0x6c, 0xd7, 0x74, 0x36, 0x7d, 0x61, 0x4a, 0x61, 0xf5, - 0xec, 0x91, 0x08, 0xa4, 0x39, 0x1a, 0xd7, 0xe1, 0x6e, 0xe6, 0x5e, 0xce, 0xb8, 0xf4, 0x39, 0x7f, - 0x4b, 0xcd, 0x50, 0xc7, 0x3d, 0xf1, 0xea, 0x55, 0xdd, 0xfd, 0x74, 0x5b, 0xb6, 0xf5, 0x63, 0x23, - 0x22, 0x6c, 0xfe, 0x22, 0x0b, 0xc5, 0xae, 0x30, 0xfd, 0xfe, 0xb0, 0xf1, 0xab, 0x19, 0x28, 0x1a, - 0x22, 0x98, 0x38, 0x92, 0x37, 0xa0, 0xac, 0xc6, 0xb6, 0x63, 0xd5, 0x33, 0xd4, 0xba, 0x08, 0xfe, - 0x2c, 0xba, 0xb3, 0x0e, 0xf9, 0x91, 0x90, 0x66, 0x3d, 0x47, 0x23, 0xd4, 0x98, 0x6a, 0x95, 0x7a, - 0xfd, 0xfa, 0x9e, 0x90, 0xa6, 0x41, 0x74, 0x8d, 0x4f, 0x33, 0x90, 0x47, 0x90, 0xdf, 0x86, 0xca, - 0xd0, 0x1e, 0x0c, 0x1d, 0x7b, 0x30, 0x94, 0xba, 0x21, 0x31, 0x82, 0x7f, 0x08, 0xab, 0x11, 0x60, - 0x98, 0xee, 0x40, 0x60, 0x8b, 0xe6, 0x29, 0x3f, 0x3d, 0x34, 0xa6, 0x89, 0x79, 0x1d, 0x4a, 0xb4, - 0x1e, 0x3a, 0x16, 0x69, 0x74, 0xc5, 0x08, 0x41, 0x54, 0xb7, 0x70, 0xa6, 0x1e, 0x8b, 0x8b, 0x7a, - 0x9e, 0x9e, 0x26, 0x51, 0xbc, 0x05, 0xab, 0x21, 0xb8, 0xa5, 0x47, 0xa3, 0x70, 0xf5, 0x68, 0x4c, - 0xd3, 0x37, 0x7f, 0xb4, 0x07, 0x05, 0x5a, 0x96, 0x7c, 0x05, 0xb2, 0x76, 0x38, 0xd0, 0x59, 0xdb, - 0xe2, 0x0f, 0xa0, 0x78, 0x62, 0x0b, 0xc7, 0x7a, 0xe1, 0x08, 0x6b, 0x32, 0xde, 0x86, 0x65, 0x5f, - 0x04, 0xd2, 0xb7, 0xb5, 0xf6, 0xab, 0x05, 0xfa, 0xc5, 0x79, 0x36, 0x60, 0xdd, 0x48, 0x10, 0x1a, - 0x29, 0x36, 0xec, 0x76, 0x7f, 0x68, 0x3b, 0x96, 0x2f, 0xdc, 0x8e, 0xa5, 0xd6, 0x69, 0xc5, 0x48, - 0xa2, 0xf8, 0x3d, 0x58, 0x3d, 0x36, 0xfb, 0xa7, 0x03, 0xdf, 0x9b, 0xb8, 0xb8, 0x20, 0x3c, 0x9f, - 0xba, 0x5d, 0x31, 0xa6, 0xd1, 0xfc, 0x0d, 0x28, 0x98, 0x8e, 0x3d, 0x70, 0x69, 0x25, 0xae, 0xcc, - 0x4c, 0xba, 0x6a, 0x4b, 0x0b, 0x29, 0x0c, 0x45, 0xc8, 0x77, 0xa0, 0x76, 0x26, 0x7c, 0x69, 0xf7, - 0x4d, 0x87, 0xf0, 0xf5, 0x12, 0x71, 0x36, 0xe7, 0x72, 0x3e, 0x4d, 0x52, 0x1a, 0x69, 0x46, 0xde, - 0x01, 0x08, 0xd0, 0x4c, 0xd2, 0x74, 0xea, 0xb5, 0xf0, 0xda, 0x5c, 0x31, 0x9b, 0x9e, 0x2b, 0x85, - 0x2b, 0xd7, 0xbb, 0x11, 0xf9, 0xce, 0x92, 0x91, 0x60, 0xe6, 0xef, 0x42, 0x5e, 0x8a, 0x73, 0x59, - 0x5f, 0xb9, 0x62, 0x44, 0x43, 0x21, 0x3d, 0x71, 0x2e, 0x77, 0x96, 0x0c, 0x62, 0x40, 0x46, 0x5c, - 0x64, 0xf5, 0xd5, 0x05, 0x18, 0x71, 0x5d, 0x22, 0x23, 0x32, 0xf0, 0x0f, 0xa0, 0xe8, 0x98, 0x17, - 0xde, 0x44, 0xd6, 0x19, 0xb1, 0x7e, 0xe9, 0x4a, 0xd6, 0x5d, 0x22, 0xdd, 0x59, 0x32, 0x34, 0x13, - 0x7f, 0x1b, 0x72, 0x96, 0x7d, 0x56, 0x5f, 0x23, 0xde, 0xbb, 0x57, 0xf2, 0x6e, 0xd9, 0x67, 0x3b, - 0x4b, 0x06, 0x92, 0xf3, 0x4d, 0x28, 0x1f, 0x7b, 0xde, 0xe9, 0xc8, 0xf4, 0x4f, 0xeb, 0x9c, 0x58, - 0xbf, 0x7c, 0x25, 0xeb, 0x86, 0x26, 0xde, 0x59, 0x32, 0x22, 0x46, 0xec, 0xb2, 0xdd, 0xf7, 0xdc, - 0xfa, 0xb5, 0x05, 0xba, 0xdc, 0xe9, 0x7b, 0x2e, 0x76, 0x19, 0x19, 0x90, 0xd1, 0xb1, 0xdd, 0xd3, - 0xfa, 0xf5, 0x05, 0x18, 0xd1, 0x72, 0x22, 0x23, 0x32, 0x60, 0xb3, 0x2d, 0x53, 0x9a, 0x67, 0xb6, - 0x78, 0x5e, 0xbf, 0xb1, 0x40, 0xb3, 0xb7, 0x34, 0x31, 0x36, 0x3b, 0x64, 0x44, 0x21, 0xe1, 0xd2, - 0xac, 0xdf, 0x5c, 0x40, 0x48, 0x68, 0xd1, 0x51, 0x48, 0xc8, 0xc8, 0xff, 0x22, 0xac, 0x9d, 0x08, - 0x53, 0x4e, 0x7c, 0x61, 0xc5, 0x1b, 0xdd, 0x2d, 0x92, 0xb6, 0x7e, 0xf5, 0xdc, 0x4f, 0x73, 0xed, - 0x2c, 0x19, 0xb3, 0xa2, 0xf8, 0xfb, 0x50, 0x70, 0x4c, 0x29, 0xce, 0xeb, 0x75, 0x92, 0xd9, 0x7c, - 0x81, 0x52, 0x48, 0x71, 0xbe, 0xb3, 0x64, 0x28, 0x16, 0xfe, 0x3d, 0x58, 0x95, 0xe6, 0xb1, 0x23, - 0x0e, 0x4e, 0x34, 0x41, 0x50, 0xff, 0x1c, 0x49, 0x79, 0xfd, 0x6a, 0x75, 0x4e, 0xf3, 0xec, 0x2c, - 0x19, 0xd3, 0x62, 0xb0, 0x55, 0x84, 0xaa, 0x37, 0x16, 0x68, 0x15, 0xc9, 0xc3, 0x56, 0x11, 0x0b, - 0xdf, 0x85, 0x2a, 0xfd, 0xd8, 0xf4, 0x9c, 0xc9, 0xc8, 0xad, 0x7f, 0x9e, 0x24, 0xdc, 0x7b, 0xb1, - 0x04, 0x45, 0xbf, 0xb3, 0x64, 0x24, 0xd9, 0x71, 0x12, 0x09, 0x34, 0xbc, 0xe7, 0xf5, 0xdb, 0x0b, - 0x4c, 0x62, 0x4f, 0x13, 0xe3, 0x24, 0x86, 0x8c, 0xb8, 0xf4, 0x9e, 0xdb, 0xd6, 0x40, 0xc8, 0xfa, - 0x17, 0x16, 0x58, 0x7a, 0xcf, 0x88, 0x14, 0x97, 0x9e, 0x62, 0x42, 0x35, 0xee, 0x0f, 0x4d, 0x59, - 0xbf, 0xb3, 0x80, 0x1a, 0x6f, 0x0e, 0x4d, 0xb2, 0x15, 0xc8, 0xd0, 0xf8, 0x21, 0x2c, 0x27, 0xad, - 0x32, 0xe7, 0x90, 0xf7, 0x85, 0xa9, 0x76, 0x84, 0xb2, 0x41, 0xbf, 0x11, 0x27, 0x2c, 0x5b, 0xd2, - 0x8e, 0x50, 0x36, 0xe8, 0x37, 0xbf, 0x09, 0x45, 0xe5, 0x9b, 0x90, 0xc1, 0x2f, 0x1b, 0x1a, 0x42, - 0x5a, 0xcb, 0x37, 0x07, 0xb4, 0x6f, 0x95, 0x0d, 0xfa, 0x8d, 0xb4, 0x96, 0xef, 0x8d, 0x0f, 0x5c, - 0x32, 0xd8, 0x65, 0x43, 0x43, 0x8d, 0x4f, 0x3f, 0x80, 0x92, 0x6e, 0x54, 0xe3, 0x1f, 0x65, 0xa0, - 0xa8, 0x0c, 0x0a, 0xff, 0x36, 0x14, 0x02, 0x79, 0xe1, 0x08, 0x6a, 0xc3, 0xca, 0xc3, 0xaf, 0x2c, - 0x60, 0x84, 0xd6, 0xbb, 0xc8, 0x60, 0x28, 0xbe, 0xa6, 0x01, 0x05, 0x82, 0x79, 0x09, 0x72, 0x86, - 0xf7, 0x9c, 0x2d, 0x71, 0x80, 0xa2, 0x9a, 0x2c, 0x96, 0x41, 0xe4, 0x96, 0x7d, 0xc6, 0xb2, 0x88, - 0xdc, 0x11, 0xa6, 0x25, 0x7c, 0x96, 0xe3, 0x35, 0xa8, 0x84, 0xd3, 0x12, 0xb0, 0x3c, 0x67, 0xb0, - 0x9c, 0x98, 0xf0, 0x80, 0x15, 0x1a, 0xff, 0x3b, 0x0f, 0x79, 0x5c, 0xff, 0xfc, 0x15, 0xa8, 0x49, - 0xd3, 0x1f, 0x08, 0xe5, 0x08, 0x47, 0x4e, 0x4a, 0x1a, 0xc9, 0x3f, 0x08, 0xfb, 0x90, 0xa5, 0x3e, - 0xbc, 0xf6, 0x42, 0xbb, 0x92, 0xea, 0x41, 0x62, 0x17, 0xce, 0x2d, 0xb6, 0x0b, 0x6f, 0x43, 0x19, - 0xcd, 0x59, 0xd7, 0xfe, 0xa1, 0xa0, 0xa1, 0x5f, 0x79, 0x78, 0xff, 0xc5, 0xaf, 0xec, 0x68, 0x0e, - 0x23, 0xe2, 0xe5, 0x1d, 0xa8, 0xf4, 0x4d, 0xdf, 0xa2, 0xc6, 0xd0, 0x6c, 0xad, 0x3c, 0xfc, 0xea, - 0x8b, 0x05, 0x6d, 0x86, 0x2c, 0x46, 0xcc, 0xcd, 0x0f, 0xa0, 0x6a, 0x89, 0xa0, 0xef, 0xdb, 0x63, - 0x32, 0x6f, 0x6a, 0x2f, 0xfe, 0xda, 0x8b, 0x85, 0x6d, 0xc5, 0x4c, 0x46, 0x52, 0x02, 0x7a, 0x64, - 0x7e, 0x64, 0xdf, 0x4a, 0xe4, 0x20, 0xc4, 0x88, 0xe6, 0xbb, 0x50, 0x0e, 0xfb, 0xc3, 0x97, 0xa1, - 0x8c, 0x7f, 0xf7, 0x3d, 0x57, 0xb0, 0x25, 0x9c, 0x5b, 0x84, 0xba, 0x23, 0xd3, 0x71, 0x58, 0x86, - 0xaf, 0x00, 0x20, 0xb8, 0x27, 0x2c, 0x7b, 0x32, 0x62, 0xd9, 0xe6, 0x37, 0x43, 0x6d, 0x29, 0x43, - 0xfe, 0xd0, 0x1c, 0x20, 0xc7, 0x32, 0x94, 0x43, 0x73, 0xcd, 0x32, 0xc8, 0xbf, 0x65, 0x06, 0xc3, - 0x63, 0xcf, 0xf4, 0x2d, 0x96, 0xe5, 0x55, 0x28, 0xb5, 0xfc, 0xfe, 0xd0, 0x3e, 0x13, 0x2c, 0xd7, - 0x7c, 0x00, 0xd5, 0x44, 0x7b, 0x51, 0x84, 0x7e, 0x69, 0x05, 0x0a, 0x2d, 0xcb, 0x12, 0x16, 0xcb, - 0x20, 0x83, 0xee, 0x20, 0xcb, 0x36, 0xbf, 0x0a, 0x95, 0x68, 0xb4, 0x90, 0x1c, 0x37, 0x6e, 0xb6, - 0x84, 0xbf, 0x10, 0xcd, 0x32, 0xa8, 0x95, 0x1d, 0xd7, 0xb1, 0x5d, 0xc1, 0xb2, 0x8d, 0xbf, 0x44, - 0xaa, 0xca, 0xbf, 0x95, 0x5e, 0x10, 0xaf, 0xbe, 0x68, 0x67, 0x4d, 0xaf, 0x86, 0xcf, 0x27, 0xfa, - 0xb7, 0x6b, 0x53, 0xe3, 0xca, 0x90, 0xdf, 0xf2, 0x64, 0xc0, 0x32, 0x8d, 0xff, 0x91, 0x85, 0x72, - 0xb8, 0xa1, 0x62, 0x4c, 0x30, 0xf1, 0x1d, 0xad, 0xd0, 0xf8, 0x93, 0x5f, 0x87, 0x82, 0xb4, 0xa5, - 0x56, 0xe3, 0x8a, 0xa1, 0x00, 0xf4, 0xd5, 0x92, 0x33, 0xab, 0x1c, 0xd8, 0xe9, 0xa9, 0xb2, 0x47, - 0xe6, 0x40, 0xec, 0x98, 0xc1, 0x50, 0xbb, 0xb0, 0x31, 0x02, 0xf9, 0x4f, 0xcc, 0x33, 0xd4, 0x39, - 0x7a, 0xae, 0xbc, 0xb8, 0x24, 0x8a, 0xbf, 0x05, 0x79, 0xec, 0xa0, 0x56, 0x9a, 0xbf, 0x30, 0xd5, - 0x61, 0x54, 0x93, 0x43, 0x5f, 0xe0, 0xf4, 0xac, 0x63, 0x04, 0x66, 0x10, 0x31, 0x7f, 0x15, 0x56, - 0xd4, 0x22, 0x3c, 0x08, 0xe3, 0x87, 0x12, 0x49, 0x9e, 0xc2, 0xf2, 0x16, 0x0e, 0xa7, 0x29, 0x45, - 0xbd, 0xbc, 0x80, 0x7e, 0x87, 0x83, 0xb3, 0xde, 0x45, 0x16, 0x43, 0x71, 0x36, 0xdf, 0xc1, 0x31, - 0x35, 0xa5, 0xc0, 0x69, 0x6e, 0x8f, 0xc6, 0xf2, 0x42, 0x29, 0xcd, 0xb6, 0x90, 0xfd, 0xa1, 0xed, - 0x0e, 0x58, 0x46, 0x0d, 0x31, 0x4e, 0x22, 0x91, 0xf8, 0xbe, 0xe7, 0xb3, 0x5c, 0xa3, 0x01, 0x79, - 0xd4, 0x51, 0x34, 0x92, 0xae, 0x39, 0x12, 0x7a, 0xa4, 0xe9, 0x77, 0xe3, 0x1a, 0xac, 0xcd, 0xec, - 0xc7, 0x8d, 0xdf, 0x2b, 0x2a, 0x0d, 0x41, 0x0e, 0xf2, 0x05, 0x35, 0x07, 0xb9, 0x79, 0x2f, 0x65, - 0x63, 0x50, 0x4a, 0xda, 0xc6, 0x7c, 0x00, 0x05, 0xec, 0x58, 0x68, 0x62, 0x16, 0x60, 0xdf, 0x43, - 0x72, 0x43, 0x71, 0x61, 0x04, 0xd3, 0x1f, 0x8a, 0xfe, 0xa9, 0xb0, 0xb4, 0xad, 0x0f, 0x41, 0x54, - 0x9a, 0x7e, 0xc2, 0x3d, 0x57, 0x00, 0xa9, 0x44, 0xdf, 0x73, 0xdb, 0x23, 0xef, 0xfb, 0x36, 0xcd, - 0x2b, 0xaa, 0x44, 0x88, 0x08, 0x9f, 0x76, 0x50, 0x47, 0xf4, 0xb4, 0xc5, 0x88, 0x46, 0x1b, 0x0a, - 0xf4, 0x6e, 0x5c, 0x09, 0xaa, 0xcd, 0x2a, 0xd3, 0xf0, 0xea, 0x62, 0x6d, 0xd6, 0x4d, 0x6e, 0xfc, - 0x4e, 0x16, 0xf2, 0x08, 0xf3, 0xfb, 0x50, 0xf0, 0x31, 0x0e, 0xa3, 0xe1, 0xbc, 0x2c, 0x66, 0x53, - 0x24, 0xfc, 0xdb, 0x5a, 0x15, 0xb3, 0x0b, 0x28, 0x4b, 0xf4, 0xc6, 0xa4, 0x5a, 0x5e, 0x87, 0xc2, - 0xd8, 0xf4, 0xcd, 0x91, 0x5e, 0x27, 0x0a, 0x68, 0xfe, 0x24, 0x03, 0x79, 0x24, 0xe2, 0x6b, 0x50, - 0xeb, 0x4a, 0xdf, 0x3e, 0x15, 0x72, 0xe8, 0x7b, 0x93, 0xc1, 0x50, 0x69, 0xd2, 0x63, 0x71, 0xa1, - 0xec, 0x8d, 0x32, 0x08, 0xd2, 0x74, 0xec, 0x3e, 0xcb, 0xa2, 0x56, 0x6d, 0x78, 0x8e, 0xc5, 0x72, - 0x7c, 0x15, 0xaa, 0x4f, 0x5c, 0x4b, 0xf8, 0x41, 0xdf, 0xf3, 0x85, 0xc5, 0xf2, 0x7a, 0x75, 0x9f, - 0xb2, 0x02, 0xed, 0x65, 0xe2, 0x5c, 0x52, 0x2c, 0xc4, 0x8a, 0xfc, 0x1a, 0xac, 0x6e, 0xa4, 0x03, - 0x24, 0x56, 0x42, 0x9b, 0xb4, 0x27, 0x5c, 0x54, 0x32, 0x56, 0x56, 0x4a, 0xec, 0x7d, 0xdf, 0x66, - 0x15, 0x7c, 0x99, 0x5a, 0x27, 0x0c, 0x9a, 0xff, 0x26, 0x13, 0x5a, 0x8e, 0x1a, 0x54, 0x0e, 0x4d, - 0xdf, 0x1c, 0xf8, 0xe6, 0x18, 0xdb, 0x57, 0x85, 0x92, 0xda, 0x38, 0xdf, 0x54, 0xd6, 0x4d, 0x01, - 0x0f, 0x95, 0x6d, 0x54, 0xc0, 0x5b, 0x2c, 0x17, 0x03, 0x6f, 0xb3, 0x3c, 0xbe, 0xe3, 0xbb, 0x13, - 0x4f, 0x0a, 0x56, 0x20, 0x5b, 0xe7, 0x59, 0x82, 0x15, 0x11, 0xd9, 0x43, 0x8b, 0xc2, 0x4a, 0xd8, - 0xe7, 0x4d, 0xd4, 0x9f, 0x63, 0xef, 0x9c, 0x95, 0xb1, 0x19, 0x38, 0x8c, 0xc2, 0x62, 0x15, 0x7c, - 0xb2, 0x3f, 0x19, 0x1d, 0x0b, 0xec, 0x26, 0xe0, 0x93, 0x9e, 0x37, 0x18, 0x38, 0x82, 0x55, 0x71, - 0x0c, 0x12, 0xc6, 0x97, 0x2d, 0x93, 0xa5, 0x35, 0x1d, 0xc7, 0x9b, 0x48, 0x56, 0x6b, 0xfc, 0x22, - 0x07, 0x79, 0x8c, 0x6e, 0x70, 0xed, 0x0c, 0xd1, 0xce, 0xe8, 0xb5, 0x83, 0xbf, 0xa3, 0x15, 0x98, - 0x8d, 0x57, 0x20, 0x7f, 0x5f, 0xcf, 0x74, 0x6e, 0x01, 0x2b, 0x8b, 0x82, 0x93, 0x93, 0xcc, 0x21, - 0x3f, 0xb2, 0x47, 0x42, 0xdb, 0x3a, 0xfa, 0x8d, 0xb8, 0x00, 0xf7, 0xe3, 0x02, 0x25, 0x4f, 0xe8, - 0x37, 0xae, 0x1a, 0x13, 0xb7, 0x85, 0x96, 0xa4, 0x35, 0x90, 0x33, 0x42, 0x70, 0x8e, 0xf5, 0xaa, - 0xcc, 0xb5, 0x5e, 0x1f, 0x84, 0xd6, 0xab, 0xb4, 0xc0, 0xaa, 0xa7, 0x66, 0x26, 0x2d, 0x57, 0x6c, - 0x34, 0xca, 0x8b, 0xb3, 0x27, 0x36, 0x93, 0x2d, 0xad, 0xb5, 0xf1, 0x46, 0x57, 0x56, 0xa3, 0xcc, - 0x32, 0x38, 0x9b, 0xb4, 0x5c, 0x95, 0xcd, 0x7b, 0x6a, 0x5b, 0xc2, 0x63, 0x39, 0xda, 0x08, 0x27, - 0x96, 0xed, 0xb1, 0x3c, 0x7a, 0x5e, 0x87, 0x5b, 0xdb, 0xac, 0xd0, 0x7c, 0x35, 0xb1, 0x25, 0xb5, - 0x26, 0xd2, 0x53, 0x62, 0x48, 0x7d, 0x33, 0x4a, 0x1b, 0x8f, 0x85, 0xc5, 0xb2, 0xcd, 0xaf, 0xcf, - 0x31, 0xb3, 0x35, 0xa8, 0x3c, 0x19, 0x3b, 0x9e, 0x69, 0x5d, 0x61, 0x67, 0x97, 0x01, 0xe2, 0xa8, - 0xba, 0xf1, 0x8b, 0x66, 0xbc, 0x9d, 0xa3, 0x2f, 0x1a, 0x78, 0x13, 0xbf, 0x2f, 0xc8, 0x84, 0x54, - 0x0c, 0x0d, 0xf1, 0xef, 0x40, 0x01, 0x9f, 0x87, 0x69, 0x9c, 0xfb, 0x0b, 0xc5, 0x72, 0xeb, 0x4f, - 0x6d, 0xf1, 0xdc, 0x50, 0x8c, 0xfc, 0x0e, 0x80, 0xd9, 0x97, 0xf6, 0x99, 0x40, 0xa4, 0x5e, 0xec, - 0x09, 0x0c, 0x7f, 0x27, 0xe9, 0xbe, 0x5c, 0x9d, 0x87, 0x4c, 0xf8, 0x35, 0xdc, 0x80, 0x2a, 0x2e, - 0xdd, 0xf1, 0x81, 0x8f, 0xab, 0xbd, 0xbe, 0x4c, 0x8c, 0x6f, 0x2c, 0xd6, 0xbc, 0x47, 0x11, 0xa3, - 0x91, 0x14, 0xc2, 0x9f, 0xc0, 0xb2, 0xca, 0xa9, 0x69, 0xa1, 0x35, 0x12, 0xfa, 0xe6, 0x62, 0x42, - 0x0f, 0x62, 0x4e, 0x23, 0x25, 0x66, 0x36, 0x2d, 0x59, 0x78, 0xe9, 0xb4, 0xe4, 0xab, 0xb0, 0xd2, - 0x4b, 0xaf, 0x02, 0xb5, 0x55, 0x4c, 0x61, 0x79, 0x13, 0x96, 0xed, 0x20, 0xce, 0x8a, 0x52, 0x8e, - 0xa4, 0x6c, 0xa4, 0x70, 0x8d, 0xff, 0x50, 0x84, 0x3c, 0x8d, 0xfc, 0x74, 0x8e, 0x6b, 0x33, 0x65, - 0xd2, 0x1f, 0x2c, 0x3e, 0xd5, 0x53, 0x2b, 0x9e, 0x2c, 0x48, 0x2e, 0x61, 0x41, 0xbe, 0x03, 0x85, - 0xc0, 0xf3, 0x65, 0x38, 0xbd, 0x0b, 0x2a, 0x51, 0xd7, 0xf3, 0xa5, 0xa1, 0x18, 0xf9, 0x36, 0x94, - 0x4e, 0x6c, 0x47, 0xe2, 0xa4, 0xa8, 0xc1, 0x7b, 0x7d, 0x31, 0x19, 0xdb, 0xc4, 0x64, 0x84, 0xcc, - 0x7c, 0x37, 0xa9, 0x6c, 0x45, 0x92, 0xb4, 0xbe, 0x98, 0xa4, 0x79, 0x3a, 0x78, 0x1f, 0x58, 0xdf, - 0x3b, 0x13, 0xbe, 0x91, 0x48, 0x4c, 0xaa, 0x4d, 0x7a, 0x06, 0xcf, 0x1b, 0x50, 0x1e, 0xda, 0x96, - 0x40, 0x3f, 0x87, 0x6c, 0x4c, 0xd9, 0x88, 0x60, 0xfe, 0x18, 0xca, 0x14, 0x1f, 0xa0, 0x55, 0xac, - 0xbc, 0xf4, 0xe0, 0xab, 0x50, 0x25, 0x14, 0x80, 0x2f, 0xa2, 0x97, 0x6f, 0xdb, 0x92, 0xf2, 0xd3, - 0x65, 0x23, 0x82, 0xb1, 0xc1, 0xa4, 0xef, 0xc9, 0x06, 0x57, 0x55, 0x83, 0xa7, 0xf1, 0xfc, 0x6d, - 0xb8, 0x41, 0xb8, 0xa9, 0x4d, 0x12, 0x97, 0x1a, 0x0a, 0x9d, 0xff, 0x10, 0x1d, 0x96, 0xb1, 0x39, - 0x10, 0xbb, 0xf6, 0xc8, 0x96, 0xf5, 0xda, 0xdd, 0xcc, 0xbd, 0x82, 0x11, 0x23, 0xf8, 0xeb, 0xb0, - 0x66, 0x89, 0x13, 0x73, 0xe2, 0xc8, 0x9e, 0x18, 0x8d, 0x1d, 0x53, 0x8a, 0x8e, 0x45, 0x3a, 0x5a, - 0x31, 0x66, 0x1f, 0xf0, 0x37, 0xe0, 0x9a, 0x46, 0x1e, 0x44, 0xa7, 0x0a, 0x1d, 0x8b, 0xd2, 0x77, - 0x15, 0x63, 0xde, 0xa3, 0xe6, 0x9e, 0x36, 0xc3, 0xb8, 0x81, 0x62, 0x9c, 0x1a, 0x1a, 0xd0, 0x40, - 0xaa, 0x1d, 0xf9, 0x91, 0xe9, 0x38, 0xc2, 0xbf, 0x50, 0x41, 0xee, 0x63, 0xd3, 0x3d, 0x36, 0x5d, - 0x96, 0xa3, 0x3d, 0xd6, 0x74, 0x84, 0x6b, 0x99, 0xbe, 0xda, 0x91, 0x1f, 0xd1, 0x86, 0x5e, 0x68, - 0xde, 0x83, 0x3c, 0x0d, 0x69, 0x05, 0x0a, 0x2a, 0x4a, 0xa2, 0x88, 0x59, 0x47, 0x48, 0x64, 0x91, - 0x77, 0x71, 0xf9, 0xb1, 0x6c, 0xe3, 0x1f, 0x17, 0xa1, 0x1c, 0x0e, 0x5e, 0x78, 0x86, 0x90, 0x89, - 0xcf, 0x10, 0xd0, 0x8d, 0x0b, 0x9e, 0xda, 0x81, 0x7d, 0xac, 0xdd, 0xd2, 0xb2, 0x11, 0x23, 0xd0, - 0x13, 0x7a, 0x6e, 0x5b, 0x72, 0x48, 0x6b, 0xa6, 0x60, 0x28, 0x80, 0xdf, 0x83, 0x55, 0x0b, 0xc7, - 0xc1, 0xed, 0x3b, 0x13, 0x4b, 0xf4, 0x70, 0x17, 0x55, 0x69, 0x82, 0x69, 0x34, 0xff, 0x18, 0x40, - 0xda, 0x23, 0xb1, 0xed, 0xf9, 0x23, 0x53, 0xea, 0xd8, 0xe0, 0x1b, 0x2f, 0xa7, 0xd5, 0xeb, 0xbd, - 0x48, 0x80, 0x91, 0x10, 0x86, 0xa2, 0xf1, 0x6d, 0x5a, 0x74, 0xe9, 0x33, 0x89, 0xde, 0x8a, 0x04, - 0x18, 0x09, 0x61, 0xbc, 0x07, 0xa5, 0x13, 0xcf, 0x1f, 0x4d, 0x1c, 0x53, 0xef, 0xb9, 0xef, 0xbf, - 0xa4, 0xdc, 0x6d, 0xc5, 0x4d, 0xb6, 0x27, 0x14, 0x15, 0xe7, 0xb8, 0x2b, 0x0b, 0xe6, 0xb8, 0x9b, - 0xbf, 0x04, 0x10, 0xb7, 0x90, 0xdf, 0x04, 0xbe, 0xe7, 0xb9, 0x72, 0xd8, 0x3a, 0x3e, 0xf6, 0x37, - 0xc4, 0x89, 0xe7, 0x8b, 0x2d, 0x13, 0xb7, 0xd7, 0x1b, 0xb0, 0x16, 0xe1, 0x5b, 0x27, 0x52, 0xf8, - 0x88, 0x26, 0x15, 0xe8, 0x0e, 0x3d, 0x5f, 0x2a, 0x1f, 0x8f, 0x7e, 0x3e, 0xe9, 0xb2, 0x1c, 0x6e, - 0xe9, 0x9d, 0xee, 0x01, 0xcb, 0x37, 0xef, 0x01, 0xc4, 0x43, 0x4b, 0xb1, 0x10, 0xfd, 0x7a, 0xf3, - 0xa1, 0x8e, 0x8c, 0x08, 0x7a, 0xf8, 0x36, 0xcb, 0x34, 0x7f, 0x9e, 0x81, 0x6a, 0xa2, 0x4b, 0xe9, - 0x98, 0x79, 0xd3, 0x9b, 0xb8, 0x52, 0x05, 0xe9, 0xf4, 0xf3, 0xa9, 0xe9, 0x4c, 0x70, 0x73, 0x5f, - 0x83, 0x1a, 0xc1, 0x5b, 0x76, 0x20, 0x6d, 0xb7, 0x2f, 0x59, 0x2e, 0x22, 0x51, 0x8e, 0x41, 0x3e, - 0x22, 0xd9, 0xf7, 0x34, 0xaa, 0xc0, 0x19, 0x2c, 0x1f, 0x0a, 0xbf, 0x2f, 0x42, 0x22, 0x72, 0x86, - 0x35, 0x26, 0x22, 0x53, 0xce, 0xb0, 0x29, 0x87, 0xdd, 0xc9, 0x88, 0x95, 0xd1, 0xa9, 0x44, 0xa0, - 0x75, 0x26, 0x7c, 0xf4, 0x65, 0x2a, 0xf8, 0x1e, 0x44, 0xe0, 0x6a, 0x30, 0x5d, 0x06, 0x21, 0xf5, - 0x9e, 0xed, 0xb2, 0x6a, 0x04, 0x98, 0xe7, 0x6c, 0x19, 0xdb, 0x4f, 0xa1, 0x03, 0xab, 0x35, 0xfe, - 0x7b, 0x0e, 0xf2, 0x68, 0xd7, 0x31, 0xd6, 0x4d, 0x1a, 0x21, 0xb5, 0x56, 0x92, 0xa8, 0xcf, 0xb6, - 0x1b, 0xa1, 0xec, 0xe4, 0x6e, 0xf4, 0x1e, 0x54, 0xfb, 0x93, 0x40, 0x7a, 0x23, 0xda, 0x8a, 0xf5, - 0x69, 0xd7, 0xcd, 0x99, 0xac, 0x11, 0x0d, 0xa7, 0x91, 0x24, 0xe5, 0xef, 0x40, 0xf1, 0x44, 0x69, - 0xbd, 0xca, 0x1b, 0x7d, 0xe1, 0x92, 0xdd, 0x5a, 0x6b, 0xb6, 0x26, 0xc6, 0x7e, 0xd9, 0x33, 0x2b, - 0x36, 0x89, 0xd2, 0xbb, 0x6e, 0x31, 0xda, 0x75, 0x7f, 0x09, 0x56, 0x04, 0x0e, 0xf8, 0xa1, 0x63, - 0xf6, 0xc5, 0x48, 0xb8, 0xe1, 0x32, 0x7b, 0xfb, 0x25, 0x7a, 0x4c, 0x33, 0x46, 0xdd, 0x9e, 0x92, - 0x85, 0x96, 0xc7, 0xf5, 0x70, 0xf3, 0x0f, 0x03, 0xfb, 0xb2, 0x11, 0x23, 0x9a, 0x5f, 0xd6, 0xf6, - 0xb2, 0x04, 0xb9, 0x56, 0xd0, 0xd7, 0x19, 0x10, 0x11, 0xf4, 0x55, 0x78, 0xb5, 0x49, 0xc3, 0xc1, - 0xb2, 0xcd, 0x37, 0xa1, 0x12, 0xbd, 0x01, 0x95, 0x67, 0xdf, 0x93, 0xdd, 0xb1, 0xe8, 0xdb, 0x27, - 0xb6, 0xb0, 0x94, 0x7e, 0x76, 0xa5, 0xe9, 0x4b, 0x95, 0x44, 0x6c, 0xbb, 0x16, 0xcb, 0x36, 0x7e, - 0xbb, 0x0c, 0x45, 0xb5, 0xf9, 0xea, 0x0e, 0x57, 0xa2, 0x0e, 0x7f, 0x17, 0xca, 0xde, 0x58, 0xf8, - 0xa6, 0xf4, 0x7c, 0x9d, 0xb9, 0x79, 0xe7, 0x65, 0x36, 0xf3, 0xf5, 0x03, 0xcd, 0x6c, 0x44, 0x62, - 0xa6, 0xb5, 0x29, 0x3b, 0xab, 0x4d, 0xf7, 0x81, 0x85, 0xfb, 0xf6, 0xa1, 0x8f, 0x7c, 0xf2, 0x42, - 0xc7, 0xe1, 0x33, 0x78, 0xde, 0x83, 0x4a, 0xdf, 0x73, 0x2d, 0x3b, 0xca, 0xe2, 0xac, 0x3c, 0xfc, - 0xfa, 0x4b, 0xb5, 0x70, 0x33, 0xe4, 0x36, 0x62, 0x41, 0xfc, 0x75, 0x28, 0x9c, 0xa1, 0x9a, 0x91, - 0x3e, 0x5d, 0xae, 0x84, 0x8a, 0x88, 0x7f, 0x02, 0xd5, 0x1f, 0x4c, 0xec, 0xfe, 0xe9, 0x41, 0x32, - 0x4b, 0xf8, 0xde, 0x4b, 0xb5, 0xe2, 0xbb, 0x31, 0xbf, 0x91, 0x14, 0x96, 0x50, 0xed, 0xd2, 0x9f, - 0x40, 0xb5, 0xcb, 0xb3, 0xaa, 0x6d, 0x40, 0xcd, 0x15, 0x81, 0x14, 0xd6, 0xb6, 0xf6, 0xd5, 0xe0, - 0x33, 0xf8, 0x6a, 0x69, 0x11, 0xcd, 0x2f, 0x41, 0x39, 0x9c, 0x70, 0x5e, 0x84, 0xec, 0x3e, 0x06, - 0x45, 0x45, 0xc8, 0x1e, 0xf8, 0x4a, 0xdb, 0x5a, 0xa8, 0x6d, 0xcd, 0x3f, 0xca, 0x40, 0x25, 0x1a, - 0xf4, 0xb4, 0xe5, 0x6c, 0xff, 0x60, 0x62, 0x3a, 0x2c, 0x43, 0xe1, 0xb2, 0x27, 0x15, 0x44, 0xc6, - 0xfa, 0x11, 0x1d, 0xd6, 0xfb, 0x2c, 0x47, 0x2e, 0x82, 0x08, 0x02, 0x96, 0xe7, 0x1c, 0x56, 0x34, - 0xfa, 0xc0, 0x57, 0xa4, 0x05, 0x34, 0x7c, 0xf8, 0x34, 0x44, 0x14, 0x95, 0x47, 0x71, 0x2a, 0x94, - 0x81, 0xdc, 0xf7, 0x24, 0x01, 0x65, 0x6c, 0x54, 0xc7, 0x65, 0x15, 0x7c, 0xe7, 0xbe, 0x27, 0x3b, - 0x68, 0x12, 0xa3, 0xf0, 0xac, 0x1a, 0xbe, 0x9e, 0x20, 0xb2, 0x88, 0x2d, 0xc7, 0xe9, 0xb8, 0xac, - 0xa6, 0x1f, 0x28, 0x68, 0x05, 0x25, 0xb6, 0xcf, 0xcd, 0x3e, 0xb2, 0xaf, 0xa2, 0x85, 0x45, 0x1e, - 0x0d, 0x33, 0x5c, 0x92, 0xed, 0x73, 0x3b, 0x90, 0x01, 0x5b, 0x6b, 0xfe, 0x61, 0x06, 0xaa, 0x89, - 0x09, 0xc6, 0xf0, 0x8f, 0x08, 0x71, 0x2b, 0x53, 0xd1, 0xe0, 0xc7, 0x38, 0x8c, 0xbe, 0x15, 0x6e, - 0x53, 0x3d, 0x0f, 0x7f, 0x66, 0xf1, 0x7d, 0x3d, 0x6f, 0xe4, 0xf9, 0xbe, 0xf7, 0x5c, 0xb9, 0x3e, - 0xbb, 0x66, 0x20, 0x9f, 0x09, 0x71, 0xca, 0xf2, 0xd8, 0xd5, 0xcd, 0x89, 0xef, 0x0b, 0x57, 0x21, - 0x0a, 0xd4, 0x38, 0x71, 0xae, 0xa0, 0x22, 0x0a, 0x45, 0x62, 0xda, 0x07, 0x59, 0x09, 0x0d, 0x81, - 0xa6, 0x56, 0x98, 0x32, 0x12, 0x20, 0xb9, 0x02, 0x2b, 0xb8, 0xa9, 0xa8, 0x0c, 0xc5, 0xc1, 0xc9, - 0x96, 0x79, 0x11, 0xb4, 0x06, 0x1e, 0x83, 0x69, 0xe4, 0xbe, 0xf7, 0x9c, 0x55, 0x1b, 0x13, 0x80, - 0x38, 0x26, 0xc3, 0x58, 0x14, 0x15, 0x22, 0x3a, 0x43, 0xd0, 0x10, 0x3f, 0x00, 0xc0, 0x5f, 0x44, - 0x19, 0x06, 0xa4, 0x2f, 0xe1, 0x28, 0x13, 0x9f, 0x91, 0x10, 0xd1, 0xf8, 0x2b, 0x50, 0x89, 0x1e, - 0xf0, 0x3a, 0x94, 0xc8, 0xa5, 0x8d, 0x5e, 0x1b, 0x82, 0xe8, 0x9f, 0xd9, 0xae, 0x25, 0xce, 0xc9, - 0xae, 0x14, 0x0c, 0x05, 0x60, 0x2b, 0x87, 0xb6, 0x65, 0x09, 0x37, 0x3c, 0xe9, 0x51, 0xd0, 0xbc, - 0xf3, 0xf8, 0xfc, 0xdc, 0xf3, 0xf8, 0xc6, 0x2f, 0x43, 0x35, 0x11, 0x34, 0x5e, 0xda, 0xed, 0x44, - 0xc3, 0xb2, 0xe9, 0x86, 0xdd, 0x86, 0x4a, 0x58, 0x03, 0x12, 0xd0, 0xde, 0x56, 0x31, 0x62, 0x44, - 0xe3, 0x5f, 0x64, 0xd1, 0x93, 0xc5, 0xae, 0x4d, 0x07, 0x7a, 0xdb, 0x50, 0x0c, 0xa4, 0x29, 0x27, - 0x61, 0x31, 0xc3, 0x82, 0x0b, 0xb4, 0x4b, 0x3c, 0x3b, 0x4b, 0x86, 0xe6, 0xe6, 0x1f, 0x40, 0x4e, - 0x9a, 0x03, 0x9d, 0x28, 0xfd, 0xca, 0x62, 0x42, 0x7a, 0xe6, 0x60, 0x67, 0xc9, 0x40, 0x3e, 0xbe, - 0x0b, 0xe5, 0xbe, 0xce, 0x6d, 0x69, 0xa3, 0xb8, 0x60, 0x2c, 0x16, 0x66, 0xc4, 0x76, 0x96, 0x8c, - 0x48, 0x02, 0xff, 0x0e, 0xe4, 0xd1, 0xbb, 0xd4, 0x35, 0x1f, 0x0b, 0xc6, 0x98, 0xb8, 0x5c, 0x76, - 0x96, 0x0c, 0xe2, 0xdc, 0x28, 0x41, 0x81, 0x6c, 0x70, 0xa3, 0x0e, 0x45, 0xd5, 0xd7, 0xe9, 0x91, - 0x6b, 0xdc, 0x82, 0x5c, 0xcf, 0x1c, 0xa0, 0x87, 0x6f, 0x5b, 0x81, 0x4e, 0x95, 0xe0, 0xcf, 0xc6, - 0x2b, 0x71, 0x9e, 0x2e, 0x99, 0x02, 0xce, 0xa4, 0x52, 0xc0, 0x8d, 0x22, 0xe4, 0xf1, 0x8d, 0x8d, - 0xdb, 0x57, 0x45, 0x0b, 0x8d, 0x7f, 0x9a, 0xc3, 0xc0, 0x42, 0x8a, 0xf3, 0xb9, 0xe9, 0xed, 0x8f, - 0xa0, 0x32, 0xf6, 0xbd, 0xbe, 0x08, 0x02, 0xcf, 0xd7, 0xce, 0xd1, 0xeb, 0x2f, 0x3e, 0x7a, 0x5e, - 0x3f, 0x0c, 0x79, 0x8c, 0x98, 0xbd, 0xf9, 0xef, 0xb2, 0x50, 0x89, 0x1e, 0xa8, 0x78, 0x46, 0x8a, - 0x73, 0x95, 0xca, 0xdc, 0x13, 0xfe, 0xc8, 0xb4, 0x2d, 0x65, 0x3d, 0x36, 0x87, 0x66, 0xe8, 0xe4, - 0x7e, 0xec, 0x4d, 0xe4, 0xe4, 0x58, 0xa8, 0x14, 0xd6, 0x53, 0x7b, 0x24, 0x3c, 0x96, 0xa7, 0xc3, - 0x23, 0x54, 0xec, 0xbe, 0xe3, 0x4d, 0x2c, 0x56, 0x40, 0xf8, 0x11, 0x6d, 0x6f, 0x7b, 0xe6, 0x38, - 0x50, 0x36, 0x73, 0xcf, 0xf6, 0x3d, 0x56, 0x42, 0xa6, 0x6d, 0x7b, 0x30, 0x32, 0x59, 0x19, 0x85, - 0xf5, 0x9e, 0xdb, 0x12, 0x8d, 0x70, 0x05, 0xdd, 0xd4, 0x83, 0xb1, 0x70, 0xbb, 0xd2, 0x17, 0x42, - 0xee, 0x99, 0x63, 0x95, 0xd3, 0x34, 0x84, 0x65, 0xd9, 0x52, 0xd9, 0xcf, 0x6d, 0xb3, 0x2f, 0x8e, - 0x3d, 0xef, 0x94, 0x2d, 0xa3, 0xa1, 0xe9, 0xb8, 0x81, 0x34, 0x07, 0xbe, 0x39, 0x52, 0x36, 0xb4, - 0x27, 0x1c, 0x41, 0xd0, 0x0a, 0xbd, 0xdb, 0x96, 0xc3, 0xc9, 0xf1, 0x23, 0x8c, 0xfb, 0x56, 0xd5, - 0x39, 0x93, 0x25, 0xc6, 0x02, 0x6d, 0xe8, 0x32, 0x94, 0x37, 0x6c, 0xc7, 0x3e, 0xb6, 0x1d, 0x9b, - 0xad, 0x21, 0x69, 0xfb, 0xbc, 0x6f, 0x3a, 0xb6, 0xe5, 0x9b, 0xcf, 0x19, 0xc7, 0xc6, 0x3d, 0xf6, - 0xbd, 0x53, 0x9b, 0x5d, 0x43, 0x42, 0x0a, 0x03, 0xcf, 0xec, 0x1f, 0xb2, 0xeb, 0x74, 0x56, 0x76, - 0x2a, 0x64, 0x7f, 0x78, 0x62, 0x1e, 0xb3, 0x1b, 0x71, 0x4a, 0xef, 0x66, 0x63, 0x0d, 0x56, 0xa7, - 0x4e, 0xe5, 0x1b, 0x25, 0x1d, 0x7d, 0x36, 0x6a, 0x50, 0x4d, 0x1c, 0x97, 0x36, 0x5e, 0x85, 0x72, - 0x78, 0x98, 0x8a, 0x51, 0xba, 0x1d, 0xa8, 0x34, 0xb0, 0x56, 0x92, 0x08, 0x6e, 0xfc, 0xe7, 0x0c, - 0x14, 0xd5, 0x49, 0x36, 0xdf, 0x88, 0x2a, 0x4f, 0x32, 0x0b, 0x9c, 0x5e, 0x2a, 0x26, 0x7d, 0xf6, - 0x1b, 0x95, 0x9f, 0x5c, 0x87, 0x82, 0x43, 0xe1, 0xb8, 0x36, 0x5f, 0x04, 0x24, 0xac, 0x4d, 0x2e, - 0x65, 0x6d, 0x6e, 0x43, 0xc5, 0x9c, 0x48, 0x8f, 0x0e, 0xe9, 0xf4, 0x09, 0x46, 0x8c, 0x68, 0xb6, - 0xa2, 0xd3, 0xe8, 0x30, 0x31, 0x49, 0x3e, 0x63, 0xcf, 0x17, 0x42, 0x25, 0x1d, 0x29, 0xd6, 0xce, - 0xd2, 0x4e, 0xe2, 0x8d, 0xc6, 0x66, 0x5f, 0x12, 0x82, 0xf6, 0x58, 0x34, 0xb5, 0x2c, 0x8f, 0x6b, - 0x60, 0x73, 0x68, 0xca, 0xe6, 0x09, 0x94, 0x0f, 0xbd, 0x60, 0x7a, 0xc7, 0x2e, 0x41, 0xae, 0xe7, - 0x8d, 0x95, 0xff, 0xb9, 0xe1, 0x49, 0xf2, 0x3f, 0xd5, 0x06, 0x7d, 0x22, 0x95, 0xca, 0x19, 0xf6, - 0x60, 0x28, 0x55, 0x9c, 0xde, 0x71, 0x5d, 0xe1, 0xb3, 0x02, 0xce, 0xb0, 0x21, 0xc6, 0xe8, 0xf3, - 0xb2, 0x22, 0xce, 0x29, 0xe1, 0xb7, 0x6d, 0x3f, 0x90, 0xac, 0xd4, 0xec, 0xe0, 0x5e, 0x6b, 0x0f, - 0x68, 0x8b, 0xa4, 0x1f, 0x24, 0x6a, 0x09, 0x9b, 0x48, 0xe0, 0xa6, 0x70, 0x51, 0x03, 0x29, 0xb6, - 0x52, 0x81, 0x21, 0xbd, 0x20, 0x8b, 0xfb, 0x1b, 0xc1, 0x1f, 0x4d, 0x02, 0x69, 0x9f, 0x5c, 0xb0, - 0x5c, 0xf3, 0x19, 0xd4, 0x52, 0x45, 0x4e, 0xfc, 0x3a, 0xb0, 0x14, 0x02, 0x9b, 0xbe, 0xc4, 0x6f, - 0xc1, 0xb5, 0x14, 0x76, 0xcf, 0xb6, 0x2c, 0xca, 0x04, 0x4f, 0x3f, 0x08, 0x3b, 0xb8, 0x51, 0x81, - 0x52, 0x5f, 0xcd, 0x61, 0xf3, 0x10, 0x6a, 0x34, 0xa9, 0x7b, 0x42, 0x9a, 0x07, 0xae, 0x73, 0xf1, - 0x27, 0xae, 0x44, 0x6b, 0x7e, 0x55, 0x87, 0x5f, 0x68, 0x4d, 0x4e, 0x7c, 0x6f, 0x44, 0xb2, 0x0a, - 0x06, 0xfd, 0x46, 0xe9, 0xd2, 0xd3, 0x9a, 0x91, 0x95, 0x5e, 0xf3, 0x17, 0x15, 0x28, 0xb5, 0xfa, - 0x7d, 0x0c, 0x18, 0x67, 0xde, 0xfc, 0x0e, 0x14, 0xfb, 0x9e, 0x7b, 0x62, 0x0f, 0xb4, 0xb5, 0x9e, - 0xf6, 0x1b, 0x35, 0x1f, 0xaa, 0xe3, 0x89, 0x3d, 0x30, 0x34, 0x31, 0xb2, 0xe9, 0xdd, 0xa6, 0x70, - 0x25, 0x9b, 0x32, 0xb9, 0xd1, 0xe6, 0xf2, 0x00, 0xf2, 0xb6, 0x7b, 0xe2, 0xe9, 0xb2, 0xd1, 0xcf, - 0x5f, 0xc2, 0x44, 0xb5, 0x93, 0x44, 0xd8, 0xf8, 0xaf, 0x19, 0x28, 0xaa, 0x57, 0xf3, 0x57, 0x61, - 0x45, 0xb8, 0xb8, 0xd4, 0x42, 0x43, 0xaf, 0xd7, 0xd8, 0x14, 0x16, 0x5d, 0x5a, 0x8d, 0x11, 0xc7, - 0x93, 0x81, 0xce, 0xcc, 0x24, 0x51, 0xfc, 0x3d, 0xb8, 0xa5, 0xc0, 0x43, 0x5f, 0xf8, 0xc2, 0x11, - 0x66, 0x20, 0x36, 0x87, 0xa6, 0xeb, 0x0a, 0x47, 0x6f, 0xfb, 0x97, 0x3d, 0xe6, 0x4d, 0x58, 0x56, - 0x8f, 0xba, 0x63, 0xb3, 0x2f, 0x02, 0xbd, 0x96, 0x52, 0x38, 0xfe, 0x35, 0x28, 0x50, 0x55, 0x6d, - 0xdd, 0xba, 0x7a, 0x2a, 0x15, 0x55, 0xc3, 0x8b, 0xf6, 0xa5, 0x16, 0x80, 0x1a, 0x26, 0x0c, 0xc9, - 0xb4, 0x6d, 0xf8, 0xe2, 0x95, 0xe3, 0x4a, 0xd1, 0x61, 0x82, 0x09, 0xdb, 0x67, 0x09, 0x47, 0x50, - 0xf9, 0x23, 0xee, 0x9b, 0x59, 0x3a, 0x77, 0x49, 0xe1, 0x1a, 0xff, 0x25, 0x0f, 0x79, 0x1c, 0x61, - 0x24, 0x1e, 0x7a, 0x23, 0x11, 0x65, 0x9f, 0x95, 0x23, 0x92, 0xc2, 0xa1, 0xe3, 0x63, 0xaa, 0x02, - 0x80, 0x88, 0x4c, 0x99, 0x96, 0x69, 0x34, 0x52, 0x8e, 0x7d, 0xef, 0xc4, 0x76, 0x62, 0x4a, 0xed, - 0x22, 0x4d, 0xa1, 0xf9, 0xd7, 0xe1, 0xe6, 0xc8, 0xf4, 0x4f, 0x85, 0xa4, 0xd5, 0xfd, 0xcc, 0xf3, - 0x4f, 0x03, 0x1c, 0xb9, 0x8e, 0xa5, 0xd3, 0x96, 0x97, 0x3c, 0xe5, 0xaf, 0xc3, 0xda, 0xf3, 0x10, - 0x8c, 0xde, 0xa1, 0x12, 0x87, 0xb3, 0x0f, 0xd0, 0x18, 0x5b, 0xe2, 0xcc, 0x26, 0xb9, 0x65, 0x55, - 0x5b, 0x1b, 0xc2, 0xa8, 0x4a, 0xa6, 0x1a, 0xc8, 0xae, 0x7e, 0xb3, 0x3e, 0x7f, 0x4a, 0x63, 0xd1, - 0x6e, 0xaa, 0x9a, 0xa3, 0xa0, 0x63, 0x51, 0xde, 0xb5, 0x62, 0xc4, 0x08, 0x54, 0x34, 0x7a, 0xe5, - 0x53, 0x65, 0x72, 0x6b, 0x2a, 0x40, 0x4d, 0xa0, 0x90, 0x42, 0x8a, 0xfe, 0x30, 0x7c, 0x89, 0x4a, - 0x8a, 0x26, 0x51, 0xfc, 0x0e, 0xc0, 0xc0, 0x94, 0xe2, 0xb9, 0x79, 0xf1, 0xc4, 0x77, 0xea, 0x42, - 0x1d, 0xa4, 0xc4, 0x18, 0x0c, 0x71, 0x1d, 0xaf, 0x6f, 0x3a, 0x5d, 0xe9, 0xf9, 0xe6, 0x40, 0x1c, - 0x9a, 0x72, 0x58, 0x1f, 0xa8, 0x10, 0x77, 0x1a, 0x8f, 0x3d, 0x96, 0xf6, 0x48, 0x7c, 0xe2, 0xb9, - 0xa2, 0x3e, 0x54, 0x3d, 0x0e, 0x61, 0x6c, 0x89, 0xe9, 0x9a, 0xce, 0x85, 0xb4, 0xfb, 0xd8, 0x17, - 0x5b, 0xb5, 0x24, 0x81, 0xa2, 0xa4, 0x82, 0x90, 0x38, 0x8e, 0x1d, 0xab, 0xfe, 0x7d, 0xd5, 0xd7, - 0x08, 0x81, 0xb3, 0x2b, 0xe4, 0x50, 0xf8, 0x62, 0x32, 0x6a, 0x59, 0x96, 0x2f, 0x82, 0xa0, 0x7e, - 0xaa, 0x66, 0x77, 0x0a, 0xdd, 0xf8, 0x26, 0x1d, 0x73, 0x0d, 0x9b, 0x6f, 0x41, 0x6d, 0x17, 0x5b, - 0xd8, 0x1a, 0xdb, 0xdd, 0xbe, 0x37, 0x16, 0x68, 0xd0, 0x29, 0x61, 0x4c, 0xe9, 0x85, 0x2a, 0x94, - 0x3e, 0x0a, 0x3c, 0xb7, 0x75, 0xd8, 0x51, 0x5b, 0xcc, 0xf6, 0xc4, 0x71, 0x58, 0xb6, 0x79, 0x00, - 0x10, 0x6b, 0x36, 0x6e, 0x17, 0x2d, 0x3a, 0x53, 0x62, 0x4b, 0x2a, 0x99, 0xe5, 0x5a, 0xb6, 0x3b, - 0xd8, 0xd2, 0xca, 0xcc, 0x32, 0x88, 0xa4, 0x24, 0x85, 0xb0, 0x22, 0x24, 0xb9, 0x33, 0x04, 0x09, - 0x8b, 0xe5, 0x9a, 0xff, 0x37, 0x03, 0xd5, 0x44, 0x09, 0xc5, 0x9f, 0x62, 0xd9, 0x07, 0x6e, 0xf6, + // 9265 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x7d, 0x5b, 0x6c, 0x63, 0xd9, + 0x91, 0x98, 0xf8, 0x26, 0x8b, 0xa2, 0x74, 0x74, 0xfa, 0x45, 0xd3, 0xbd, 0x9d, 0x36, 0x3d, 0x9e, + 0x69, 0xb7, 0xc7, 0xea, 0x99, 0x9e, 0x19, 0xcf, 0x78, 0xec, 0x19, 0x9b, 0xa2, 0xa8, 0x16, 0xa7, + 0x25, 0x51, 0xbe, 0x64, 0x77, 0x7b, 0x06, 0xbb, 0x51, 0xae, 0x78, 0x8f, 0xc8, 0x6b, 0x5d, 0xde, + 0x4b, 0xdf, 0x7b, 0xa8, 0x96, 0x06, 0x49, 0xe0, 0xbc, 0x76, 0xb3, 0x7f, 0x4e, 0x90, 0xcd, 0x66, + 0x11, 0x04, 0x6b, 0x7f, 0x04, 0x08, 0xb2, 0x1b, 0xe4, 0x6b, 0x91, 0x6c, 0x1e, 0x40, 0xb2, 0x5f, + 0x01, 0xf6, 0xc7, 0xc9, 0x57, 0x80, 0x04, 0x48, 0xe2, 0x01, 0xf2, 0x13, 0x24, 0xc1, 0xe6, 0xcb, + 0x08, 0xf2, 0x11, 0x54, 0x9d, 0x73, 0x1f, 0x7c, 0x48, 0xcd, 0x9e, 0xdd, 0x0d, 0xf2, 0x25, 0x56, + 0xdd, 0xaa, 0xba, 0xe7, 0x51, 0xa7, 0x4e, 0x55, 0x9d, 0x3a, 0x57, 0xf0, 0xca, 0xf8, 0x74, 0xf0, + 0xc0, 0xb1, 0x8f, 0x1f, 0x8c, 0x8f, 0x1f, 0x8c, 0x3c, 0x4b, 0x38, 0x0f, 0xc6, 0xbe, 0x27, 0xbd, + 0x40, 0x01, 0xc1, 0x26, 0x41, 0xbc, 0x62, 0xba, 0x17, 0xf2, 0x62, 0x2c, 0x36, 0x09, 0x5b, 0xbb, + 0x3d, 0xf0, 0xbc, 0x81, 0x23, 0x14, 0xe9, 0xf1, 0xe4, 0xe4, 0x41, 0x20, 0xfd, 0x49, 0x5f, 0x2a, + 0xe2, 0xfa, 0xcf, 0xb2, 0x70, 0xb3, 0x3b, 0x32, 0x7d, 0xb9, 0xe5, 0x78, 0xfd, 0xd3, 0xae, 0x6b, + 0x8e, 0x83, 0xa1, 0x27, 0xb7, 0xcc, 0x40, 0xf0, 0xd7, 0x21, 0x7f, 0x8c, 0xc8, 0xa0, 0x9a, 0xba, + 0x9b, 0xb9, 0x57, 0x7e, 0x78, 0x7d, 0x73, 0x4a, 0xf0, 0x26, 0x71, 0x18, 0x9a, 0x86, 0xbf, 0x09, + 0x05, 0x4b, 0x48, 0xd3, 0x76, 0x82, 0x6a, 0xfa, 0x6e, 0xea, 0x5e, 0xf9, 0xe1, 0xad, 0x4d, 0xf5, + 0xe2, 0xcd, 0xf0, 0xc5, 0x9b, 0x5d, 0x7a, 0xb1, 0x11, 0xd2, 0xf1, 0x77, 0xa1, 0x78, 0x62, 0x3b, + 0xe2, 0xb1, 0xb8, 0x08, 0xaa, 0x99, 0x2b, 0x79, 0xb6, 0xd2, 0xd5, 0x94, 0x11, 0x11, 0xf3, 0x26, + 0xac, 0x89, 0x73, 0xe9, 0x9b, 0x86, 0x70, 0x4c, 0x69, 0x7b, 0x6e, 0x50, 0xcd, 0x52, 0x0b, 0x6f, + 0xcd, 0xb4, 0x30, 0x7c, 0x4e, 0xec, 0x33, 0x2c, 0xfc, 0x2e, 0x94, 0xbd, 0xe3, 0x1f, 0x88, 0xbe, + 0xec, 0x5d, 0x8c, 0x45, 0x50, 0xcd, 0xdd, 0xcd, 0xdc, 0x2b, 0x19, 0x49, 0x14, 0xff, 0x26, 0x94, + 0xfb, 0x9e, 0xe3, 0x88, 0xbe, 0x7a, 0x47, 0xfe, 0xea, 0x6e, 0x25, 0x69, 0xf9, 0xdb, 0x70, 0xc3, + 0x17, 0x23, 0xef, 0x4c, 0x58, 0xcd, 0x08, 0x4b, 0xfd, 0x2c, 0xd2, 0x6b, 0x16, 0x3f, 0xe4, 0x0d, + 0xa8, 0xf8, 0xba, 0x7d, 0x7b, 0xb6, 0x7b, 0x1a, 0x54, 0x0b, 0xd4, 0xad, 0x2f, 0x5e, 0xd2, 0x2d, + 0xa4, 0x31, 0xa6, 0x39, 0x38, 0x83, 0xcc, 0xa9, 0xb8, 0xa8, 0x96, 0xee, 0xa6, 0xee, 0x95, 0x0c, + 0xfc, 0xc9, 0xdf, 0x87, 0xaa, 0xe7, 0xdb, 0x03, 0xdb, 0x35, 0x9d, 0xa6, 0x2f, 0x4c, 0x29, 0xac, + 0x9e, 0x3d, 0x12, 0x81, 0x34, 0x47, 0xe3, 0x2a, 0xdc, 0x4d, 0xdd, 0xcb, 0x18, 0x97, 0x3e, 0xe7, + 0x6f, 0xa9, 0x19, 0x6a, 0xbb, 0x27, 0x5e, 0xb5, 0xac, 0xbb, 0x3f, 0xdd, 0x96, 0x1d, 0xfd, 0xd8, + 0x88, 0x08, 0xeb, 0xbf, 0x48, 0x43, 0xbe, 0x2b, 0x4c, 0xbf, 0x3f, 0xac, 0xfd, 0x5a, 0x0a, 0xf2, + 0x86, 0x08, 0x26, 0x8e, 0xe4, 0x35, 0x28, 0xaa, 0xb1, 0x6d, 0x5b, 0xd5, 0x14, 0xb5, 0x2e, 0x82, + 0x3f, 0x8f, 0xee, 0x6c, 0x42, 0x76, 0x24, 0xa4, 0x59, 0xcd, 0xd0, 0x08, 0xd5, 0x66, 0x5a, 0xa5, + 0x5e, 0xbf, 0xb9, 0x2f, 0xa4, 0x69, 0x10, 0x5d, 0xed, 0xb3, 0x14, 0x64, 0x11, 0xe4, 0xb7, 0xa1, + 0x34, 0xb4, 0x07, 0x43, 0xc7, 0x1e, 0x0c, 0xa5, 0x6e, 0x48, 0x8c, 0xe0, 0x1f, 0xc2, 0x7a, 0x04, + 0x18, 0xa6, 0x3b, 0x10, 0xd8, 0xa2, 0x45, 0xca, 0x4f, 0x0f, 0x8d, 0x59, 0x62, 0x5e, 0x85, 0x02, + 0xad, 0x87, 0xb6, 0x45, 0x1a, 0x5d, 0x32, 0x42, 0x10, 0xd5, 0x2d, 0x9c, 0xa9, 0xc7, 0xe2, 0xa2, + 0x9a, 0xa5, 0xa7, 0x49, 0x14, 0x6f, 0xc0, 0x7a, 0x08, 0x6e, 0xeb, 0xd1, 0xc8, 0x5d, 0x3d, 0x1a, + 0xb3, 0xf4, 0xf5, 0x1f, 0xed, 0x43, 0x8e, 0x96, 0x25, 0x5f, 0x83, 0xb4, 0x1d, 0x0e, 0x74, 0xda, + 0xb6, 0xf8, 0x03, 0xc8, 0x9f, 0xd8, 0xc2, 0xb1, 0x5e, 0x38, 0xc2, 0x9a, 0x8c, 0xb7, 0x60, 0xd5, + 0x17, 0x81, 0xf4, 0x6d, 0xad, 0xfd, 0x6a, 0x81, 0x7e, 0x69, 0x91, 0x0d, 0xd8, 0x34, 0x12, 0x84, + 0xc6, 0x14, 0x1b, 0x76, 0xbb, 0x3f, 0xb4, 0x1d, 0xcb, 0x17, 0x6e, 0xdb, 0x52, 0xeb, 0xb4, 0x64, + 0x24, 0x51, 0xfc, 0x1e, 0xac, 0x1f, 0x9b, 0xfd, 0xd3, 0x81, 0xef, 0x4d, 0x5c, 0x5c, 0x10, 0x9e, + 0x4f, 0xdd, 0x2e, 0x19, 0xb3, 0x68, 0xfe, 0x06, 0xe4, 0x4c, 0xc7, 0x1e, 0xb8, 0xb4, 0x12, 0xd7, + 0xe6, 0x26, 0x5d, 0xb5, 0xa5, 0x81, 0x14, 0x86, 0x22, 0xe4, 0xbb, 0x50, 0x39, 0x13, 0xbe, 0xb4, + 0xfb, 0xa6, 0x43, 0xf8, 0x6a, 0x81, 0x38, 0xeb, 0x0b, 0x39, 0x9f, 0x26, 0x29, 0x8d, 0x69, 0x46, + 0xde, 0x06, 0x08, 0xd0, 0x4c, 0xd2, 0x74, 0xea, 0xb5, 0xf0, 0xda, 0x42, 0x31, 0x4d, 0xcf, 0x95, + 0xc2, 0x95, 0x9b, 0xdd, 0x88, 0x7c, 0x77, 0xc5, 0x48, 0x30, 0xf3, 0x77, 0x21, 0x2b, 0xc5, 0xb9, + 0xac, 0xae, 0x5d, 0x31, 0xa2, 0xa1, 0x90, 0x9e, 0x38, 0x97, 0xbb, 0x2b, 0x06, 0x31, 0x20, 0x23, + 0x2e, 0xb2, 0xea, 0xfa, 0x12, 0x8c, 0xb8, 0x2e, 0x91, 0x11, 0x19, 0xf8, 0x07, 0x90, 0x77, 0xcc, + 0x0b, 0x6f, 0x22, 0xab, 0x8c, 0x58, 0xbf, 0x7c, 0x25, 0xeb, 0x1e, 0x91, 0xee, 0xae, 0x18, 0x9a, + 0x89, 0xbf, 0x0d, 0x19, 0xcb, 0x3e, 0xab, 0x6e, 0x10, 0xef, 0xdd, 0x2b, 0x79, 0xb7, 0xed, 0xb3, + 0xdd, 0x15, 0x03, 0xc9, 0x79, 0x13, 0x8a, 0xc7, 0x9e, 0x77, 0x3a, 0x32, 0xfd, 0xd3, 0x2a, 0x27, + 0xd6, 0xaf, 0x5c, 0xc9, 0xba, 0xa5, 0x89, 0x77, 0x57, 0x8c, 0x88, 0x11, 0xbb, 0x6c, 0xf7, 0x3d, + 0xb7, 0x7a, 0x6d, 0x89, 0x2e, 0xb7, 0xfb, 0x9e, 0x8b, 0x5d, 0x46, 0x06, 0x64, 0x74, 0x6c, 0xf7, + 0xb4, 0x7a, 0x7d, 0x09, 0x46, 0xb4, 0x9c, 0xc8, 0x88, 0x0c, 0xd8, 0x6c, 0xcb, 0x94, 0xe6, 0x99, + 0x2d, 0x9e, 0x57, 0x6f, 0x2c, 0xd1, 0xec, 0x6d, 0x4d, 0x8c, 0xcd, 0x0e, 0x19, 0x51, 0x48, 0xb8, + 0x34, 0xab, 0x37, 0x97, 0x10, 0x12, 0x5a, 0x74, 0x14, 0x12, 0x32, 0xf2, 0x3f, 0x0b, 0x1b, 0x27, + 0xc2, 0x94, 0x13, 0x5f, 0x58, 0xf1, 0x46, 0x77, 0x8b, 0xa4, 0x6d, 0x5e, 0x3d, 0xf7, 0xb3, 0x5c, + 0xbb, 0x2b, 0xc6, 0xbc, 0x28, 0xfe, 0x3e, 0xe4, 0x1c, 0x53, 0x8a, 0xf3, 0x6a, 0x95, 0x64, 0xd6, + 0x5f, 0xa0, 0x14, 0x52, 0x9c, 0xef, 0xae, 0x18, 0x8a, 0x85, 0x7f, 0x1f, 0xd6, 0xa5, 0x79, 0xec, + 0x88, 0xce, 0x89, 0x26, 0x08, 0xaa, 0x5f, 0x20, 0x29, 0xaf, 0x5f, 0xad, 0xce, 0xd3, 0x3c, 0xbb, + 0x2b, 0xc6, 0xac, 0x18, 0x6c, 0x15, 0xa1, 0xaa, 0xb5, 0x25, 0x5a, 0x45, 0xf2, 0xb0, 0x55, 0xc4, + 0xc2, 0xf7, 0xa0, 0x4c, 0x3f, 0x9a, 0x9e, 0x33, 0x19, 0xb9, 0xd5, 0x2f, 0x92, 0x84, 0x7b, 0x2f, + 0x96, 0xa0, 0xe8, 0x77, 0x57, 0x8c, 0x24, 0x3b, 0x4e, 0x22, 0x81, 0x86, 0xf7, 0xbc, 0x7a, 0x7b, + 0x89, 0x49, 0xec, 0x69, 0x62, 0x9c, 0xc4, 0x90, 0x11, 0x97, 0xde, 0x73, 0xdb, 0x1a, 0x08, 0x59, + 0xfd, 0xa5, 0x25, 0x96, 0xde, 0x33, 0x22, 0xc5, 0xa5, 0xa7, 0x98, 0x50, 0x8d, 0xfb, 0x43, 0x53, + 0x56, 0xef, 0x2c, 0xa1, 0xc6, 0xcd, 0xa1, 0x49, 0xb6, 0x02, 0x19, 0x6a, 0x9f, 0xc2, 0x6a, 0xd2, + 0x2a, 0x73, 0x0e, 0x59, 0x5f, 0x98, 0x6a, 0x47, 0x28, 0x1a, 0xf4, 0x1b, 0x71, 0xc2, 0xb2, 0x25, + 0xed, 0x08, 0x45, 0x83, 0x7e, 0xf3, 0x9b, 0x90, 0x57, 0xbe, 0x09, 0x19, 0xfc, 0xa2, 0xa1, 0x21, + 0xa4, 0xb5, 0x7c, 0x73, 0x40, 0xfb, 0x56, 0xd1, 0xa0, 0xdf, 0x48, 0x6b, 0xf9, 0xde, 0xb8, 0xe3, + 0x92, 0xc1, 0x2e, 0x1a, 0x1a, 0xaa, 0x7d, 0xf6, 0x01, 0x14, 0x74, 0xa3, 0x6a, 0x7f, 0x2f, 0x05, + 0x79, 0x65, 0x50, 0xf8, 0x77, 0x20, 0x17, 0xc8, 0x0b, 0x47, 0x50, 0x1b, 0xd6, 0x1e, 0x7e, 0x75, + 0x09, 0x23, 0xb4, 0xd9, 0x45, 0x06, 0x43, 0xf1, 0xd5, 0x0d, 0xc8, 0x11, 0xcc, 0x0b, 0x90, 0x31, + 0xbc, 0xe7, 0x6c, 0x85, 0x03, 0xe4, 0xd5, 0x64, 0xb1, 0x14, 0x22, 0xb7, 0xed, 0x33, 0x96, 0x46, + 0xe4, 0xae, 0x30, 0x2d, 0xe1, 0xb3, 0x0c, 0xaf, 0x40, 0x29, 0x9c, 0x96, 0x80, 0x65, 0x39, 0x83, + 0xd5, 0xc4, 0x84, 0x07, 0x2c, 0x57, 0xfb, 0x5f, 0x59, 0xc8, 0xe2, 0xfa, 0xe7, 0xaf, 0x40, 0x45, + 0x9a, 0xfe, 0x40, 0x28, 0x47, 0x38, 0x72, 0x52, 0xa6, 0x91, 0xfc, 0x83, 0xb0, 0x0f, 0x69, 0xea, + 0xc3, 0x6b, 0x2f, 0xb4, 0x2b, 0x53, 0x3d, 0x48, 0xec, 0xc2, 0x99, 0xe5, 0x76, 0xe1, 0x1d, 0x28, + 0xa2, 0x39, 0xeb, 0xda, 0x9f, 0x0a, 0x1a, 0xfa, 0xb5, 0x87, 0xf7, 0x5f, 0xfc, 0xca, 0xb6, 0xe6, + 0x30, 0x22, 0x5e, 0xde, 0x86, 0x52, 0xdf, 0xf4, 0x2d, 0x6a, 0x0c, 0xcd, 0xd6, 0xda, 0xc3, 0xaf, + 0xbd, 0x58, 0x50, 0x33, 0x64, 0x31, 0x62, 0x6e, 0xde, 0x81, 0xb2, 0x25, 0x82, 0xbe, 0x6f, 0x8f, + 0xc9, 0xbc, 0xa9, 0xbd, 0xf8, 0xeb, 0x2f, 0x16, 0xb6, 0x1d, 0x33, 0x19, 0x49, 0x09, 0xe8, 0x91, + 0xf9, 0x91, 0x7d, 0x2b, 0x90, 0x83, 0x10, 0x23, 0xea, 0xef, 0x42, 0x31, 0xec, 0x0f, 0x5f, 0x85, + 0x22, 0xfe, 0x3d, 0xf0, 0x5c, 0xc1, 0x56, 0x70, 0x6e, 0x11, 0xea, 0x8e, 0x4c, 0xc7, 0x61, 0x29, + 0xbe, 0x06, 0x80, 0xe0, 0xbe, 0xb0, 0xec, 0xc9, 0x88, 0xa5, 0xeb, 0xdf, 0x0a, 0xb5, 0xa5, 0x08, + 0xd9, 0x43, 0x73, 0x80, 0x1c, 0xab, 0x50, 0x0c, 0xcd, 0x35, 0x4b, 0x21, 0xff, 0xb6, 0x19, 0x0c, + 0x8f, 0x3d, 0xd3, 0xb7, 0x58, 0x9a, 0x97, 0xa1, 0xd0, 0xf0, 0xfb, 0x43, 0xfb, 0x4c, 0xb0, 0x4c, + 0xfd, 0x01, 0x94, 0x13, 0xed, 0x45, 0x11, 0xfa, 0xa5, 0x25, 0xc8, 0x35, 0x2c, 0x4b, 0x58, 0x2c, + 0x85, 0x0c, 0xba, 0x83, 0x2c, 0x5d, 0xff, 0x1a, 0x94, 0xa2, 0xd1, 0x42, 0x72, 0xdc, 0xb8, 0xd9, + 0x0a, 0xfe, 0x42, 0x34, 0x4b, 0xa1, 0x56, 0xb6, 0x5d, 0xc7, 0x76, 0x05, 0x4b, 0xd7, 0xfe, 0x1c, + 0xa9, 0x2a, 0xff, 0xf6, 0xf4, 0x82, 0x78, 0xf5, 0x45, 0x3b, 0xeb, 0xf4, 0x6a, 0xf8, 0x62, 0xa2, + 0x7f, 0x7b, 0x36, 0x35, 0xae, 0x08, 0xd9, 0x6d, 0x4f, 0x06, 0x2c, 0x55, 0xfb, 0x6f, 0x69, 0x28, + 0x86, 0x1b, 0x2a, 0xc6, 0x04, 0x13, 0xdf, 0xd1, 0x0a, 0x8d, 0x3f, 0xf9, 0x75, 0xc8, 0x49, 0x5b, + 0x6a, 0x35, 0x2e, 0x19, 0x0a, 0x40, 0x5f, 0x2d, 0x39, 0xb3, 0xca, 0x81, 0x9d, 0x9d, 0x2a, 0x7b, + 0x64, 0x0e, 0xc4, 0xae, 0x19, 0x0c, 0xb5, 0x0b, 0x1b, 0x23, 0x90, 0xff, 0xc4, 0x3c, 0x43, 0x9d, + 0xa3, 0xe7, 0xca, 0x8b, 0x4b, 0xa2, 0xf8, 0x5b, 0x90, 0xc5, 0x0e, 0x6a, 0xa5, 0xf9, 0x33, 0x33, + 0x1d, 0x46, 0x35, 0x39, 0xf4, 0x05, 0x4e, 0xcf, 0x26, 0x46, 0x60, 0x06, 0x11, 0xf3, 0x57, 0x61, + 0x4d, 0x2d, 0xc2, 0x4e, 0x18, 0x3f, 0x14, 0x48, 0xf2, 0x0c, 0x96, 0x37, 0x70, 0x38, 0x4d, 0x29, + 0xaa, 0xc5, 0x25, 0xf4, 0x3b, 0x1c, 0x9c, 0xcd, 0x2e, 0xb2, 0x18, 0x8a, 0xb3, 0xfe, 0x0e, 0x8e, + 0xa9, 0x29, 0x05, 0x4e, 0x73, 0x6b, 0x34, 0x96, 0x17, 0x4a, 0x69, 0x76, 0x84, 0xec, 0x0f, 0x6d, + 0x77, 0xc0, 0x52, 0x6a, 0x88, 0x71, 0x12, 0x89, 0xc4, 0xf7, 0x3d, 0x9f, 0x65, 0x6a, 0x35, 0xc8, + 0xa2, 0x8e, 0xa2, 0x91, 0x74, 0xcd, 0x91, 0xd0, 0x23, 0x4d, 0xbf, 0x6b, 0xd7, 0x60, 0x63, 0x6e, + 0x3f, 0xae, 0xfd, 0x7e, 0x5e, 0x69, 0x08, 0x72, 0x90, 0x2f, 0xa8, 0x39, 0xc8, 0xcd, 0x7b, 0x29, + 0x1b, 0x83, 0x52, 0xa6, 0x6d, 0xcc, 0x07, 0x90, 0xc3, 0x8e, 0x85, 0x26, 0x66, 0x09, 0xf6, 0x7d, + 0x24, 0x37, 0x14, 0x17, 0x46, 0x30, 0xfd, 0xa1, 0xe8, 0x9f, 0x0a, 0x4b, 0xdb, 0xfa, 0x10, 0x44, + 0xa5, 0xe9, 0x27, 0xdc, 0x73, 0x05, 0x90, 0x4a, 0xf4, 0x3d, 0xb7, 0x35, 0xf2, 0x7e, 0x60, 0xd3, + 0xbc, 0xa2, 0x4a, 0x84, 0x88, 0xf0, 0x69, 0x1b, 0x75, 0x44, 0x4f, 0x5b, 0x8c, 0xa8, 0xb5, 0x20, + 0x47, 0xef, 0xc6, 0x95, 0xa0, 0xda, 0xac, 0x32, 0x0d, 0xaf, 0x2e, 0xd7, 0x66, 0xdd, 0xe4, 0xda, + 0xef, 0xa6, 0x21, 0x8b, 0x30, 0xbf, 0x0f, 0x39, 0x1f, 0xe3, 0x30, 0x1a, 0xce, 0xcb, 0x62, 0x36, + 0x45, 0xc2, 0xbf, 0xa3, 0x55, 0x31, 0xbd, 0x84, 0xb2, 0x44, 0x6f, 0x4c, 0xaa, 0xe5, 0x75, 0xc8, + 0x8d, 0x4d, 0xdf, 0x1c, 0xe9, 0x75, 0xa2, 0x80, 0xfa, 0x4f, 0x52, 0x90, 0x45, 0x22, 0xbe, 0x01, + 0x95, 0xae, 0xf4, 0xed, 0x53, 0x21, 0x87, 0xbe, 0x37, 0x19, 0x0c, 0x95, 0x26, 0x3d, 0x16, 0x17, + 0xca, 0xde, 0x28, 0x83, 0x20, 0x4d, 0xc7, 0xee, 0xb3, 0x34, 0x6a, 0xd5, 0x96, 0xe7, 0x58, 0x2c, + 0xc3, 0xd7, 0xa1, 0xfc, 0xc4, 0xb5, 0x84, 0x1f, 0xf4, 0x3d, 0x5f, 0x58, 0x2c, 0xab, 0x57, 0xf7, + 0x29, 0xcb, 0xd1, 0x5e, 0x26, 0xce, 0x25, 0xc5, 0x42, 0x2c, 0xcf, 0xaf, 0xc1, 0xfa, 0xd6, 0x74, + 0x80, 0xc4, 0x0a, 0x68, 0x93, 0xf6, 0x85, 0x8b, 0x4a, 0xc6, 0x8a, 0x4a, 0x89, 0xbd, 0x1f, 0xd8, + 0xac, 0x84, 0x2f, 0x53, 0xeb, 0x84, 0x41, 0xfd, 0x5f, 0xa4, 0x42, 0xcb, 0x51, 0x81, 0xd2, 0xa1, + 0xe9, 0x9b, 0x03, 0xdf, 0x1c, 0x63, 0xfb, 0xca, 0x50, 0x50, 0x1b, 0xe7, 0x9b, 0xca, 0xba, 0x29, + 0xe0, 0xa1, 0xb2, 0x8d, 0x0a, 0x78, 0x8b, 0x65, 0x62, 0xe0, 0x6d, 0x96, 0xc5, 0x77, 0x7c, 0x6f, + 0xe2, 0x49, 0xc1, 0x72, 0x64, 0xeb, 0x3c, 0x4b, 0xb0, 0x3c, 0x22, 0x7b, 0x68, 0x51, 0x58, 0x01, + 0xfb, 0xdc, 0x44, 0xfd, 0x39, 0xf6, 0xce, 0x59, 0x11, 0x9b, 0x81, 0xc3, 0x28, 0x2c, 0x56, 0xc2, + 0x27, 0x07, 0x93, 0xd1, 0xb1, 0xc0, 0x6e, 0x02, 0x3e, 0xe9, 0x79, 0x83, 0x81, 0x23, 0x58, 0x19, + 0xc7, 0x20, 0x61, 0x7c, 0xd9, 0x2a, 0x59, 0x5a, 0xd3, 0x71, 0xbc, 0x89, 0x64, 0x95, 0xda, 0x2f, + 0x32, 0x90, 0xc5, 0xe8, 0x06, 0xd7, 0xce, 0x10, 0xed, 0x8c, 0x5e, 0x3b, 0xf8, 0x3b, 0x5a, 0x81, + 0xe9, 0x78, 0x05, 0xf2, 0xf7, 0xf5, 0x4c, 0x67, 0x96, 0xb0, 0xb2, 0x28, 0x38, 0x39, 0xc9, 0x1c, + 0xb2, 0x23, 0x7b, 0x24, 0xb4, 0xad, 0xa3, 0xdf, 0x88, 0x0b, 0x70, 0x3f, 0xce, 0x51, 0xf2, 0x84, + 0x7e, 0xe3, 0xaa, 0x31, 0x71, 0x5b, 0x68, 0x48, 0x5a, 0x03, 0x19, 0x23, 0x04, 0x17, 0x58, 0xaf, + 0xd2, 0x42, 0xeb, 0xf5, 0x41, 0x68, 0xbd, 0x0a, 0x4b, 0xac, 0x7a, 0x6a, 0x66, 0xd2, 0x72, 0xc5, + 0x46, 0xa3, 0xb8, 0x3c, 0x7b, 0x62, 0x33, 0xd9, 0xd6, 0x5a, 0x1b, 0x6f, 0x74, 0x45, 0x35, 0xca, + 0x2c, 0x85, 0xb3, 0x49, 0xcb, 0x55, 0xd9, 0xbc, 0xa7, 0xb6, 0x25, 0x3c, 0x96, 0xa1, 0x8d, 0x70, + 0x62, 0xd9, 0x1e, 0xcb, 0xa2, 0xe7, 0x75, 0xb8, 0xbd, 0xc3, 0x72, 0xf5, 0x57, 0x13, 0x5b, 0x52, + 0x63, 0x22, 0x3d, 0x25, 0x86, 0xd4, 0x37, 0xa5, 0xb4, 0xf1, 0x58, 0x58, 0x2c, 0x5d, 0xff, 0xc6, + 0x02, 0x33, 0x5b, 0x81, 0xd2, 0x93, 0xb1, 0xe3, 0x99, 0xd6, 0x15, 0x76, 0x76, 0x15, 0x20, 0x8e, + 0xaa, 0x6b, 0xbf, 0xa8, 0xc7, 0xdb, 0x39, 0xfa, 0xa2, 0x81, 0x37, 0xf1, 0xfb, 0x82, 0x4c, 0x48, + 0xc9, 0xd0, 0x10, 0xff, 0x2e, 0xe4, 0xf0, 0x79, 0x98, 0xc6, 0xb9, 0xbf, 0x54, 0x2c, 0xb7, 0xf9, + 0xd4, 0x16, 0xcf, 0x0d, 0xc5, 0xc8, 0xef, 0x00, 0x98, 0x7d, 0x69, 0x9f, 0x09, 0x44, 0xea, 0xc5, + 0x9e, 0xc0, 0xf0, 0x77, 0x92, 0xee, 0xcb, 0xd5, 0x79, 0xc8, 0x84, 0x5f, 0xc3, 0x0d, 0x28, 0xe3, + 0xd2, 0x1d, 0x77, 0x7c, 0x5c, 0xed, 0xd5, 0x55, 0x62, 0x7c, 0x63, 0xb9, 0xe6, 0x3d, 0x8a, 0x18, + 0x8d, 0xa4, 0x10, 0xfe, 0x04, 0x56, 0x55, 0x4e, 0x4d, 0x0b, 0xad, 0x90, 0xd0, 0x37, 0x97, 0x13, + 0xda, 0x89, 0x39, 0x8d, 0x29, 0x31, 0xf3, 0x69, 0xc9, 0xdc, 0x4b, 0xa7, 0x25, 0x5f, 0x85, 0xb5, + 0xde, 0xf4, 0x2a, 0x50, 0x5b, 0xc5, 0x0c, 0x96, 0xd7, 0x61, 0xd5, 0x0e, 0xe2, 0xac, 0x28, 0xe5, + 0x48, 0x8a, 0xc6, 0x14, 0xae, 0xf6, 0x6f, 0xf3, 0x90, 0xa5, 0x91, 0x9f, 0xcd, 0x71, 0x35, 0xa7, + 0x4c, 0xfa, 0x83, 0xe5, 0xa7, 0x7a, 0x66, 0xc5, 0x93, 0x05, 0xc9, 0x24, 0x2c, 0xc8, 0x77, 0x21, + 0x17, 0x78, 0xbe, 0x0c, 0xa7, 0x77, 0x49, 0x25, 0xea, 0x7a, 0xbe, 0x34, 0x14, 0x23, 0xdf, 0x81, + 0xc2, 0x89, 0xed, 0x48, 0x9c, 0x14, 0x35, 0x78, 0xaf, 0x2f, 0x27, 0x63, 0x87, 0x98, 0x8c, 0x90, + 0x99, 0xef, 0x25, 0x95, 0x2d, 0x4f, 0x92, 0x36, 0x97, 0x93, 0xb4, 0x48, 0x07, 0xef, 0x03, 0xeb, + 0x7b, 0x67, 0xc2, 0x37, 0x12, 0x89, 0x49, 0xb5, 0x49, 0xcf, 0xe1, 0x79, 0x0d, 0x8a, 0x43, 0xdb, + 0x12, 0xe8, 0xe7, 0x90, 0x8d, 0x29, 0x1a, 0x11, 0xcc, 0x1f, 0x43, 0x91, 0xe2, 0x03, 0xb4, 0x8a, + 0xa5, 0x97, 0x1e, 0x7c, 0x15, 0xaa, 0x84, 0x02, 0xf0, 0x45, 0xf4, 0xf2, 0x1d, 0x5b, 0x52, 0x7e, + 0xba, 0x68, 0x44, 0x30, 0x36, 0x98, 0xf4, 0x3d, 0xd9, 0xe0, 0xb2, 0x6a, 0xf0, 0x2c, 0x9e, 0xbf, + 0x0d, 0x37, 0x08, 0x37, 0xb3, 0x49, 0xe2, 0x52, 0x43, 0xa1, 0x8b, 0x1f, 0xa2, 0xc3, 0x32, 0x36, + 0x07, 0x62, 0xcf, 0x1e, 0xd9, 0xb2, 0x5a, 0xb9, 0x9b, 0xba, 0x97, 0x33, 0x62, 0x04, 0x7f, 0x1d, + 0x36, 0x2c, 0x71, 0x62, 0x4e, 0x1c, 0xd9, 0x13, 0xa3, 0xb1, 0x63, 0x4a, 0xd1, 0xb6, 0x48, 0x47, + 0x4b, 0xc6, 0xfc, 0x03, 0xfe, 0x06, 0x5c, 0xd3, 0xc8, 0x4e, 0x74, 0xaa, 0xd0, 0xb6, 0x28, 0x7d, + 0x57, 0x32, 0x16, 0x3d, 0xaa, 0xef, 0x6b, 0x33, 0x8c, 0x1b, 0x28, 0xc6, 0xa9, 0xa1, 0x01, 0x0d, + 0xa4, 0xda, 0x91, 0x1f, 0x99, 0x8e, 0x23, 0xfc, 0x0b, 0x15, 0xe4, 0x3e, 0x36, 0xdd, 0x63, 0xd3, + 0x65, 0x19, 0xda, 0x63, 0x4d, 0x47, 0xb8, 0x96, 0xe9, 0xab, 0x1d, 0xf9, 0x11, 0x6d, 0xe8, 0xb9, + 0xfa, 0x3d, 0xc8, 0xd2, 0x90, 0x96, 0x20, 0xa7, 0xa2, 0x24, 0x8a, 0x98, 0x75, 0x84, 0x44, 0x16, + 0x79, 0x0f, 0x97, 0x1f, 0x4b, 0xd7, 0xfe, 0x7e, 0x1e, 0x8a, 0xe1, 0xe0, 0x85, 0x67, 0x08, 0xa9, + 0xf8, 0x0c, 0x01, 0xdd, 0xb8, 0xe0, 0xa9, 0x1d, 0xd8, 0xc7, 0xda, 0x2d, 0x2d, 0x1a, 0x31, 0x02, + 0x3d, 0xa1, 0xe7, 0xb6, 0x25, 0x87, 0xb4, 0x66, 0x72, 0x86, 0x02, 0xf8, 0x3d, 0x58, 0xb7, 0x70, + 0x1c, 0xdc, 0xbe, 0x33, 0xb1, 0x44, 0x0f, 0x77, 0x51, 0x95, 0x26, 0x98, 0x45, 0xf3, 0x8f, 0x01, + 0xa4, 0x3d, 0x12, 0x3b, 0x9e, 0x3f, 0x32, 0xa5, 0x8e, 0x0d, 0xbe, 0xf9, 0x72, 0x5a, 0xbd, 0xd9, + 0x8b, 0x04, 0x18, 0x09, 0x61, 0x28, 0x1a, 0xdf, 0xa6, 0x45, 0x17, 0x3e, 0x97, 0xe8, 0xed, 0x48, + 0x80, 0x91, 0x10, 0xc6, 0x7b, 0x50, 0x38, 0xf1, 0xfc, 0xd1, 0xc4, 0x31, 0xf5, 0x9e, 0xfb, 0xfe, + 0x4b, 0xca, 0xdd, 0x51, 0xdc, 0x64, 0x7b, 0x42, 0x51, 0x71, 0x8e, 0xbb, 0xb4, 0x64, 0x8e, 0xbb, + 0xfe, 0xcb, 0x00, 0x71, 0x0b, 0xf9, 0x4d, 0xe0, 0xfb, 0x9e, 0x2b, 0x87, 0x8d, 0xe3, 0x63, 0x7f, + 0x4b, 0x9c, 0x78, 0xbe, 0xd8, 0x36, 0x71, 0x7b, 0xbd, 0x01, 0x1b, 0x11, 0xbe, 0x71, 0x22, 0x85, + 0x8f, 0x68, 0x52, 0x81, 0xee, 0xd0, 0xf3, 0xa5, 0xf2, 0xf1, 0xe8, 0xe7, 0x93, 0x2e, 0xcb, 0xe0, + 0x96, 0xde, 0xee, 0x76, 0x58, 0xb6, 0x7e, 0x0f, 0x20, 0x1e, 0x5a, 0x8a, 0x85, 0xe8, 0xd7, 0x9b, + 0x0f, 0x75, 0x64, 0x44, 0xd0, 0xc3, 0xb7, 0x59, 0xaa, 0xfe, 0xf3, 0x14, 0x94, 0x13, 0x5d, 0x9a, + 0x8e, 0x99, 0x9b, 0xde, 0xc4, 0x95, 0x2a, 0x48, 0xa7, 0x9f, 0x4f, 0x4d, 0x67, 0x82, 0x9b, 0xfb, + 0x06, 0x54, 0x08, 0xde, 0xb6, 0x03, 0x69, 0xbb, 0x7d, 0xc9, 0x32, 0x11, 0x89, 0x72, 0x0c, 0xb2, + 0x11, 0xc9, 0x81, 0xa7, 0x51, 0x39, 0xce, 0x60, 0xf5, 0x50, 0xf8, 0x7d, 0x11, 0x12, 0x91, 0x33, + 0xac, 0x31, 0x11, 0x99, 0x72, 0x86, 0x4d, 0x39, 0xec, 0x4e, 0x46, 0xac, 0x88, 0x4e, 0x25, 0x02, + 0x8d, 0x33, 0xe1, 0xa3, 0x2f, 0x53, 0xc2, 0xf7, 0x20, 0x02, 0x57, 0x83, 0xe9, 0x32, 0x08, 0xa9, + 0xf7, 0x6d, 0x97, 0x95, 0x23, 0xc0, 0x3c, 0x67, 0xab, 0xd8, 0x7e, 0x0a, 0x1d, 0x58, 0xa5, 0xf6, + 0x5f, 0x33, 0x90, 0x45, 0xbb, 0x8e, 0xb1, 0x6e, 0xd2, 0x08, 0xa9, 0xb5, 0x92, 0x44, 0x7d, 0xbe, + 0xdd, 0x08, 0x65, 0x27, 0x77, 0xa3, 0xf7, 0xa0, 0xdc, 0x9f, 0x04, 0xd2, 0x1b, 0xd1, 0x56, 0xac, + 0x4f, 0xbb, 0x6e, 0xce, 0x65, 0x8d, 0x68, 0x38, 0x8d, 0x24, 0x29, 0x7f, 0x07, 0xf2, 0x27, 0x4a, + 0xeb, 0x55, 0xde, 0xe8, 0x97, 0x2e, 0xd9, 0xad, 0xb5, 0x66, 0x6b, 0x62, 0xec, 0x97, 0x3d, 0xb7, + 0x62, 0x93, 0x28, 0xbd, 0xeb, 0xe6, 0xa3, 0x5d, 0xf7, 0x97, 0x61, 0x4d, 0xe0, 0x80, 0x1f, 0x3a, + 0x66, 0x5f, 0x8c, 0x84, 0x1b, 0x2e, 0xb3, 0xb7, 0x5f, 0xa2, 0xc7, 0x34, 0x63, 0xd4, 0xed, 0x19, + 0x59, 0x68, 0x79, 0x5c, 0x0f, 0x37, 0xff, 0x30, 0xb0, 0x2f, 0x1a, 0x31, 0xa2, 0xfe, 0x15, 0x6d, + 0x2f, 0x0b, 0x90, 0x69, 0x04, 0x7d, 0x9d, 0x01, 0x11, 0x41, 0x5f, 0x85, 0x57, 0x4d, 0x1a, 0x0e, + 0x96, 0xae, 0xbf, 0x09, 0xa5, 0xe8, 0x0d, 0xa8, 0x3c, 0x07, 0x9e, 0xec, 0x8e, 0x45, 0xdf, 0x3e, + 0xb1, 0x85, 0xa5, 0xf4, 0xb3, 0x2b, 0x4d, 0x5f, 0xaa, 0x24, 0x62, 0xcb, 0xb5, 0x58, 0xba, 0xf6, + 0x3b, 0x45, 0xc8, 0xab, 0xcd, 0x57, 0x77, 0xb8, 0x14, 0x75, 0xf8, 0x7b, 0x50, 0xf4, 0xc6, 0xc2, + 0x37, 0xa5, 0xe7, 0xeb, 0xcc, 0xcd, 0x3b, 0x2f, 0xb3, 0x99, 0x6f, 0x76, 0x34, 0xb3, 0x11, 0x89, + 0x99, 0xd5, 0xa6, 0xf4, 0xbc, 0x36, 0xdd, 0x07, 0x16, 0xee, 0xdb, 0x87, 0x3e, 0xf2, 0xc9, 0x0b, + 0x1d, 0x87, 0xcf, 0xe1, 0x79, 0x0f, 0x4a, 0x7d, 0xcf, 0xb5, 0xec, 0x28, 0x8b, 0xb3, 0xf6, 0xf0, + 0x1b, 0x2f, 0xd5, 0xc2, 0x66, 0xc8, 0x6d, 0xc4, 0x82, 0xf8, 0xeb, 0x90, 0x3b, 0x43, 0x35, 0x23, + 0x7d, 0xba, 0x5c, 0x09, 0x15, 0x11, 0xff, 0x04, 0xca, 0x3f, 0x9c, 0xd8, 0xfd, 0xd3, 0x4e, 0x32, + 0x4b, 0xf8, 0xde, 0x4b, 0xb5, 0xe2, 0x7b, 0x31, 0xbf, 0x91, 0x14, 0x96, 0x50, 0xed, 0xc2, 0x1f, + 0x43, 0xb5, 0x8b, 0xf3, 0xaa, 0x6d, 0x40, 0xc5, 0x15, 0x81, 0x14, 0xd6, 0x8e, 0xf6, 0xd5, 0xe0, + 0x73, 0xf8, 0x6a, 0xd3, 0x22, 0xea, 0x5f, 0x86, 0x62, 0x38, 0xe1, 0x3c, 0x0f, 0xe9, 0x03, 0x0c, + 0x8a, 0xf2, 0x90, 0xee, 0xf8, 0x4a, 0xdb, 0x1a, 0xa8, 0x6d, 0xf5, 0xff, 0x99, 0x82, 0x52, 0x34, + 0xe8, 0xd3, 0x96, 0xb3, 0xf5, 0xc3, 0x89, 0xe9, 0xb0, 0x14, 0x85, 0xcb, 0x9e, 0x54, 0x10, 0x19, + 0xeb, 0x47, 0x74, 0x58, 0xef, 0xb3, 0x0c, 0xb9, 0x08, 0x22, 0x08, 0x58, 0x96, 0x73, 0x58, 0xd3, + 0xe8, 0x8e, 0xaf, 0x48, 0x73, 0x68, 0xf8, 0xf0, 0x69, 0x88, 0xc8, 0x2b, 0x8f, 0xe2, 0x54, 0x28, + 0x03, 0x79, 0xe0, 0x49, 0x02, 0x8a, 0xd8, 0xa8, 0xb6, 0xcb, 0x4a, 0xf8, 0xce, 0x03, 0x4f, 0xb6, + 0xd1, 0x24, 0x46, 0xe1, 0x59, 0x39, 0x7c, 0x3d, 0x41, 0x64, 0x11, 0x1b, 0x8e, 0xd3, 0x76, 0x59, + 0x45, 0x3f, 0x50, 0xd0, 0x1a, 0x4a, 0x6c, 0x9d, 0x9b, 0x7d, 0x64, 0x5f, 0x47, 0x0b, 0x8b, 0x3c, + 0x1a, 0x66, 0xb8, 0x24, 0x5b, 0xe7, 0x76, 0x20, 0x03, 0xb6, 0x51, 0xff, 0xc3, 0x14, 0x94, 0x13, + 0x13, 0x8c, 0xe1, 0x1f, 0x11, 0xe2, 0x56, 0xa6, 0xa2, 0xc1, 0x8f, 0x71, 0x18, 0x7d, 0x2b, 0xdc, + 0xa6, 0x7a, 0x1e, 0xfe, 0x4c, 0xe3, 0xfb, 0x7a, 0xde, 0xc8, 0xf3, 0x7d, 0xef, 0xb9, 0x72, 0x7d, + 0xf6, 0xcc, 0x40, 0x3e, 0x13, 0xe2, 0x94, 0x65, 0xb1, 0xab, 0xcd, 0x89, 0xef, 0x0b, 0x57, 0x21, + 0x72, 0xd4, 0x38, 0x71, 0xae, 0xa0, 0x3c, 0x0a, 0x45, 0x62, 0xda, 0x07, 0x59, 0x01, 0x0d, 0x81, + 0xa6, 0x56, 0x98, 0x22, 0x12, 0x20, 0xb9, 0x02, 0x4b, 0xb8, 0xa9, 0xa8, 0x0c, 0x45, 0xe7, 0x64, + 0xdb, 0xbc, 0x08, 0x1a, 0x03, 0x8f, 0xc1, 0x2c, 0xf2, 0xc0, 0x7b, 0xce, 0xca, 0xb5, 0x09, 0x40, + 0x1c, 0x93, 0x61, 0x2c, 0x8a, 0x0a, 0x11, 0x9d, 0x21, 0x68, 0x88, 0x77, 0x00, 0xf0, 0x17, 0x51, + 0x86, 0x01, 0xe9, 0x4b, 0x38, 0xca, 0xc4, 0x67, 0x24, 0x44, 0xd4, 0xfe, 0x02, 0x94, 0xa2, 0x07, + 0xbc, 0x0a, 0x05, 0x72, 0x69, 0xa3, 0xd7, 0x86, 0x20, 0xfa, 0x67, 0xb6, 0x6b, 0x89, 0x73, 0xb2, + 0x2b, 0x39, 0x43, 0x01, 0xd8, 0xca, 0xa1, 0x6d, 0x59, 0xc2, 0x0d, 0x4f, 0x7a, 0x14, 0xb4, 0xe8, + 0x3c, 0x3e, 0xbb, 0xf0, 0x3c, 0xbe, 0xf6, 0x2b, 0x50, 0x4e, 0x04, 0x8d, 0x97, 0x76, 0x3b, 0xd1, + 0xb0, 0xf4, 0x74, 0xc3, 0x6e, 0x43, 0x29, 0xac, 0x01, 0x09, 0x68, 0x6f, 0x2b, 0x19, 0x31, 0xa2, + 0xf6, 0x4f, 0xd2, 0xe8, 0xc9, 0x62, 0xd7, 0x66, 0x03, 0xbd, 0x1d, 0xc8, 0x07, 0xd2, 0x94, 0x93, + 0xb0, 0x98, 0x61, 0xc9, 0x05, 0xda, 0x25, 0x9e, 0xdd, 0x15, 0x43, 0x73, 0xf3, 0x0f, 0x20, 0x23, + 0xcd, 0x81, 0x4e, 0x94, 0x7e, 0x75, 0x39, 0x21, 0x3d, 0x73, 0xb0, 0xbb, 0x62, 0x20, 0x1f, 0xdf, + 0x83, 0x62, 0x5f, 0xe7, 0xb6, 0xb4, 0x51, 0x5c, 0x32, 0x16, 0x0b, 0x33, 0x62, 0xbb, 0x2b, 0x46, + 0x24, 0x81, 0x7f, 0x17, 0xb2, 0xe8, 0x5d, 0xea, 0x9a, 0x8f, 0x25, 0x63, 0x4c, 0x5c, 0x2e, 0xbb, + 0x2b, 0x06, 0x71, 0x6e, 0x15, 0x20, 0x47, 0x36, 0xb8, 0x56, 0x85, 0xbc, 0xea, 0xeb, 0xec, 0xc8, + 0xd5, 0x6e, 0x41, 0xa6, 0x67, 0x0e, 0xd0, 0xc3, 0xb7, 0xad, 0x40, 0xa7, 0x4a, 0xf0, 0x67, 0xed, + 0x95, 0x38, 0x4f, 0x97, 0x4c, 0x01, 0xa7, 0xa6, 0x52, 0xc0, 0xb5, 0x3c, 0x64, 0xf1, 0x8d, 0xb5, + 0xdb, 0x57, 0x45, 0x0b, 0xb5, 0x7f, 0x98, 0xc1, 0xc0, 0x42, 0x8a, 0xf3, 0x85, 0xe9, 0xed, 0x8f, + 0xa0, 0x34, 0xf6, 0xbd, 0xbe, 0x08, 0x02, 0xcf, 0xd7, 0xce, 0xd1, 0xeb, 0x2f, 0x3e, 0x7a, 0xde, + 0x3c, 0x0c, 0x79, 0x8c, 0x98, 0xbd, 0xfe, 0xaf, 0xd2, 0x50, 0x8a, 0x1e, 0xa8, 0x78, 0x46, 0x8a, + 0x73, 0x95, 0xca, 0xdc, 0x17, 0xfe, 0xc8, 0xb4, 0x2d, 0x65, 0x3d, 0x9a, 0x43, 0x33, 0x74, 0x72, + 0x3f, 0xf6, 0x26, 0x72, 0x72, 0x2c, 0x54, 0x0a, 0xeb, 0xa9, 0x3d, 0x12, 0x1e, 0xcb, 0xd2, 0xe1, + 0x11, 0x2a, 0x76, 0xdf, 0xf1, 0x26, 0x16, 0xcb, 0x21, 0xfc, 0x88, 0xb6, 0xb7, 0x7d, 0x73, 0x1c, + 0x28, 0x9b, 0xb9, 0x6f, 0xfb, 0x1e, 0x2b, 0x20, 0xd3, 0x8e, 0x3d, 0x18, 0x99, 0xac, 0x88, 0xc2, + 0x7a, 0xcf, 0x6d, 0x89, 0x46, 0xb8, 0x84, 0x6e, 0x6a, 0x67, 0x2c, 0xdc, 0xae, 0xf4, 0x85, 0x90, + 0xfb, 0xe6, 0x58, 0xe5, 0x34, 0x0d, 0x61, 0x59, 0xb6, 0x54, 0xf6, 0x73, 0xc7, 0xec, 0x8b, 0x63, + 0xcf, 0x3b, 0x65, 0xab, 0x68, 0x68, 0xda, 0x6e, 0x20, 0xcd, 0x81, 0x6f, 0x8e, 0x94, 0x0d, 0xed, + 0x09, 0x47, 0x10, 0xb4, 0x46, 0xef, 0xb6, 0xe5, 0x70, 0x72, 0xfc, 0x08, 0xe3, 0xbe, 0x75, 0x75, + 0xce, 0x64, 0x89, 0xb1, 0x40, 0x1b, 0xba, 0x0a, 0xc5, 0x2d, 0xdb, 0xb1, 0x8f, 0x6d, 0xc7, 0x66, + 0x1b, 0x48, 0xda, 0x3a, 0xef, 0x9b, 0x8e, 0x6d, 0xf9, 0xe6, 0x73, 0xc6, 0xb1, 0x71, 0x8f, 0x7d, + 0xef, 0xd4, 0x66, 0xd7, 0x90, 0x90, 0xc2, 0xc0, 0x33, 0xfb, 0x53, 0x76, 0x9d, 0xce, 0xca, 0x4e, + 0x85, 0xec, 0x0f, 0x4f, 0xcc, 0x63, 0x76, 0x23, 0x4e, 0xe9, 0xdd, 0xac, 0x6d, 0xc0, 0xfa, 0xcc, + 0xa9, 0x7c, 0xad, 0xa0, 0xa3, 0xcf, 0x5a, 0x05, 0xca, 0x89, 0xe3, 0xd2, 0xda, 0xab, 0x50, 0x0c, + 0x0f, 0x53, 0x31, 0x4a, 0xb7, 0x03, 0x95, 0x06, 0xd6, 0x4a, 0x12, 0xc1, 0xb5, 0xff, 0x90, 0x82, + 0xbc, 0x3a, 0xc9, 0xe6, 0x5b, 0x51, 0xe5, 0x49, 0x6a, 0x89, 0xd3, 0x4b, 0xc5, 0xa4, 0xcf, 0x7e, + 0xa3, 0xf2, 0x93, 0xeb, 0x90, 0x73, 0x28, 0x1c, 0xd7, 0xe6, 0x8b, 0x80, 0x84, 0xb5, 0xc9, 0x4c, + 0x59, 0x9b, 0xdb, 0x50, 0x32, 0x27, 0xd2, 0xa3, 0x43, 0x3a, 0x7d, 0x82, 0x11, 0x23, 0xea, 0x8d, + 0xe8, 0x34, 0x3a, 0x4c, 0x4c, 0x92, 0xcf, 0xd8, 0xf3, 0x85, 0x50, 0x49, 0x47, 0x8a, 0xb5, 0xd3, + 0xb4, 0x93, 0x78, 0xa3, 0xb1, 0xd9, 0x97, 0x84, 0xa0, 0x3d, 0x16, 0x4d, 0x2d, 0xcb, 0xe2, 0x1a, + 0x68, 0x0e, 0x4d, 0x59, 0x3f, 0x81, 0xe2, 0xa1, 0x17, 0xcc, 0xee, 0xd8, 0x05, 0xc8, 0xf4, 0xbc, + 0xb1, 0xf2, 0x3f, 0xb7, 0x3c, 0x49, 0xfe, 0xa7, 0xda, 0xa0, 0x4f, 0xa4, 0x52, 0x39, 0xc3, 0x1e, + 0x0c, 0xa5, 0x8a, 0xd3, 0xdb, 0xae, 0x2b, 0x7c, 0x96, 0xc3, 0x19, 0x36, 0xc4, 0x18, 0x7d, 0x5e, + 0x96, 0xc7, 0x39, 0x25, 0xfc, 0x8e, 0xed, 0x07, 0x92, 0x15, 0xea, 0x6d, 0xdc, 0x6b, 0xed, 0x01, + 0x6d, 0x91, 0xf4, 0x83, 0x44, 0xad, 0x60, 0x13, 0x09, 0x6c, 0x0a, 0x17, 0x35, 0x90, 0x62, 0x2b, + 0x15, 0x18, 0xd2, 0x0b, 0xd2, 0xb8, 0xbf, 0x11, 0xfc, 0xd1, 0x24, 0x90, 0xf6, 0xc9, 0x05, 0xcb, + 0xd4, 0x9f, 0x41, 0x65, 0xaa, 0xc8, 0x89, 0x5f, 0x07, 0x36, 0x85, 0xc0, 0xa6, 0xaf, 0xf0, 0x5b, + 0x70, 0x6d, 0x0a, 0xbb, 0x6f, 0x5b, 0x16, 0x65, 0x82, 0x67, 0x1f, 0x84, 0x1d, 0xdc, 0x2a, 0x41, + 0xa1, 0xaf, 0xe6, 0xb0, 0x7e, 0x08, 0x15, 0x9a, 0xd4, 0x7d, 0x21, 0xcd, 0x8e, 0xeb, 0x5c, 0xfc, + 0xb1, 0x2b, 0xd1, 0xea, 0x5f, 0xd3, 0xe1, 0x17, 0x5a, 0x93, 0x13, 0xdf, 0x1b, 0x91, 0xac, 0x9c, + 0x41, 0xbf, 0x51, 0xba, 0xf4, 0xb4, 0x66, 0xa4, 0xa5, 0x57, 0xff, 0x45, 0x09, 0x0a, 0x8d, 0x7e, + 0x1f, 0x03, 0xc6, 0xb9, 0x37, 0xbf, 0x03, 0xf9, 0xbe, 0xe7, 0x9e, 0xd8, 0x03, 0x6d, 0xad, 0x67, + 0xfd, 0x46, 0xcd, 0x87, 0xea, 0x78, 0x62, 0x0f, 0x0c, 0x4d, 0x8c, 0x6c, 0x7a, 0xb7, 0xc9, 0x5d, + 0xc9, 0xa6, 0x4c, 0x6e, 0xb4, 0xb9, 0x3c, 0x80, 0xac, 0xed, 0x9e, 0x78, 0xba, 0x6c, 0xf4, 0x8b, + 0x97, 0x30, 0x51, 0xed, 0x24, 0x11, 0xd6, 0xfe, 0x53, 0x0a, 0xf2, 0xea, 0xd5, 0xfc, 0x55, 0x58, + 0x13, 0x2e, 0x2e, 0xb5, 0xd0, 0xd0, 0xeb, 0x35, 0x36, 0x83, 0x45, 0x97, 0x56, 0x63, 0xc4, 0xf1, + 0x64, 0xa0, 0x33, 0x33, 0x49, 0x14, 0x7f, 0x0f, 0x6e, 0x29, 0xf0, 0xd0, 0x17, 0xbe, 0x70, 0x84, + 0x19, 0x88, 0xe6, 0xd0, 0x74, 0x5d, 0xe1, 0xe8, 0x6d, 0xff, 0xb2, 0xc7, 0xbc, 0x0e, 0xab, 0xea, + 0x51, 0x77, 0x6c, 0xf6, 0x45, 0xa0, 0xd7, 0xd2, 0x14, 0x8e, 0x7f, 0x1d, 0x72, 0x54, 0x55, 0x5b, + 0xb5, 0xae, 0x9e, 0x4a, 0x45, 0x55, 0xf3, 0xa2, 0x7d, 0xa9, 0x01, 0xa0, 0x86, 0x09, 0x43, 0x32, + 0x6d, 0x1b, 0xbe, 0x74, 0xe5, 0xb8, 0x52, 0x74, 0x98, 0x60, 0xc2, 0xf6, 0x59, 0xc2, 0x11, 0x54, + 0xfe, 0x88, 0xfb, 0x66, 0x9a, 0xce, 0x5d, 0xa6, 0x70, 0xb5, 0xff, 0x98, 0x85, 0x2c, 0x8e, 0x30, + 0x12, 0x0f, 0xbd, 0x91, 0x88, 0xb2, 0xcf, 0xca, 0x11, 0x99, 0xc2, 0xa1, 0xe3, 0x63, 0xaa, 0x02, + 0x80, 0x88, 0x4c, 0x99, 0x96, 0x59, 0x34, 0x52, 0x8e, 0x7d, 0xef, 0xc4, 0x76, 0x62, 0x4a, 0xed, + 0x22, 0xcd, 0xa0, 0xf9, 0x37, 0xe0, 0xe6, 0xc8, 0xf4, 0x4f, 0x85, 0xa4, 0xd5, 0xfd, 0xcc, 0xf3, + 0x4f, 0x03, 0x1c, 0xb9, 0xb6, 0xa5, 0xd3, 0x96, 0x97, 0x3c, 0xe5, 0xaf, 0xc3, 0xc6, 0xf3, 0x10, + 0x8c, 0xde, 0xa1, 0x12, 0x87, 0xf3, 0x0f, 0xd0, 0x18, 0x5b, 0xe2, 0xcc, 0x26, 0xb9, 0x45, 0x55, + 0x5b, 0x1b, 0xc2, 0xa8, 0x4a, 0xa6, 0x1a, 0xc8, 0xae, 0x7e, 0xb3, 0x3e, 0x7f, 0x9a, 0xc6, 0xa2, + 0xdd, 0x54, 0x35, 0x47, 0x41, 0xdb, 0xa2, 0xbc, 0x6b, 0xc9, 0x88, 0x11, 0xa8, 0x68, 0xf4, 0xca, + 0xa7, 0xca, 0xe4, 0x56, 0x54, 0x80, 0x9a, 0x40, 0x21, 0x85, 0x14, 0xfd, 0x61, 0xf8, 0x12, 0x95, + 0x14, 0x4d, 0xa2, 0xf8, 0x1d, 0x80, 0x81, 0x29, 0xc5, 0x73, 0xf3, 0xe2, 0x89, 0xef, 0x54, 0x85, + 0x3a, 0x48, 0x89, 0x31, 0x18, 0xe2, 0x3a, 0x5e, 0xdf, 0x74, 0xba, 0xd2, 0xf3, 0xcd, 0x81, 0x38, + 0x34, 0xe5, 0xb0, 0x3a, 0x50, 0x21, 0xee, 0x2c, 0x1e, 0x7b, 0x2c, 0xed, 0x91, 0xf8, 0xc4, 0x73, + 0x45, 0x75, 0xa8, 0x7a, 0x1c, 0xc2, 0xd8, 0x12, 0xd3, 0x35, 0x9d, 0x0b, 0x69, 0xf7, 0xb1, 0x2f, + 0xb6, 0x6a, 0x49, 0x02, 0x45, 0x49, 0x05, 0x21, 0x71, 0x1c, 0xdb, 0x56, 0xf5, 0x07, 0xaa, 0xaf, + 0x11, 0x02, 0x67, 0x57, 0xc8, 0xa1, 0xf0, 0xc5, 0x64, 0xd4, 0xb0, 0x2c, 0x5f, 0x04, 0x41, 0xf5, + 0x54, 0xcd, 0xee, 0x0c, 0xba, 0xf6, 0x2d, 0x3a, 0xe6, 0x1a, 0xd6, 0xdf, 0x82, 0xca, 0x1e, 0xb6, + 0xb0, 0x31, 0xb6, 0xbb, 0x7d, 0x6f, 0x2c, 0xd0, 0xa0, 0x53, 0xc2, 0x98, 0xd2, 0x0b, 0x65, 0x28, + 0x7c, 0x14, 0x78, 0x6e, 0xe3, 0xb0, 0xad, 0xb6, 0x98, 0x9d, 0x89, 0xe3, 0xb0, 0x74, 0xbd, 0x03, + 0x10, 0x6b, 0x36, 0x6e, 0x17, 0x0d, 0x3a, 0x53, 0x62, 0x2b, 0x2a, 0x99, 0xe5, 0x5a, 0xb6, 0x3b, + 0xd8, 0xd6, 0xca, 0xcc, 0x52, 0x88, 0xa4, 0x24, 0x85, 0xb0, 0x22, 0x24, 0xb9, 0x33, 0x04, 0x09, + 0x8b, 0x65, 0xea, 0xff, 0x27, 0x05, 0xe5, 0x44, 0x09, 0xc5, 0x9f, 0x60, 0xd9, 0x07, 0x6e, 0xf6, 0xe8, 0x2e, 0xe0, 0xbc, 0x29, 0x45, 0x8f, 0x60, 0x9c, 0x55, 0x5d, 0xe1, 0x81, 0x4f, 0x55, 0x4a, - 0x22, 0x81, 0xf9, 0x4c, 0x25, 0x1f, 0xcd, 0x87, 0x3a, 0xaf, 0x53, 0x85, 0xd2, 0x13, 0xf7, 0xd4, - 0xf5, 0x9e, 0xbb, 0x6a, 0x9f, 0xa6, 0x3a, 0x9e, 0xd4, 0x89, 0x64, 0x58, 0x6a, 0x93, 0x6b, 0xfe, - 0xeb, 0xfc, 0x54, 0xc9, 0x5b, 0x1b, 0x8a, 0x2a, 0x98, 0x20, 0x3f, 0x77, 0xb6, 0x46, 0x29, 0x49, - 0xac, 0x4f, 0xbf, 0x12, 0x28, 0x43, 0x33, 0xa3, 0x97, 0x1f, 0x15, 0x84, 0x66, 0xe7, 0x9e, 0xd2, - 0xa5, 0x04, 0x85, 0xb6, 0x39, 0x55, 0x13, 0x1d, 0x49, 0x68, 0xfc, 0xad, 0x0c, 0x5c, 0x9f, 0x47, - 0x92, 0xac, 0x1c, 0xcf, 0xa4, 0x2b, 0xc7, 0xbb, 0x53, 0x95, 0xd8, 0x59, 0xea, 0xcd, 0x83, 0x97, - 0x6c, 0x44, 0xba, 0x2e, 0xbb, 0xf9, 0x7b, 0x19, 0x58, 0x9b, 0xe9, 0x73, 0xc2, 0x8f, 0x01, 0x28, - 0x2a, 0xcd, 0x52, 0x85, 0x52, 0x51, 0xe9, 0x8a, 0x3a, 0x7a, 0xa0, 0x1d, 0x3e, 0x50, 0xb5, 0x00, - 0xba, 0xf6, 0x5c, 0x39, 0xd1, 0x38, 0x6b, 0xb8, 0x81, 0x0c, 0x84, 0x4a, 0xd3, 0x2a, 0x67, 0x4b, - 0x63, 0x8a, 0xca, 0xd1, 0x55, 0xe7, 0x23, 0xac, 0x44, 0x05, 0x58, 0x93, 0xb1, 0x63, 0xf7, 0x11, - 0x2c, 0xf3, 0x06, 0xdc, 0x54, 0x17, 0x10, 0x74, 0x50, 0x79, 0xd2, 0x1b, 0xda, 0xb4, 0x38, 0x58, - 0x05, 0xdf, 0x73, 0x38, 0x39, 0x76, 0xec, 0x60, 0xc8, 0xa0, 0x69, 0xc0, 0xb5, 0x39, 0x1d, 0xa4, - 0x26, 0x3f, 0xd5, 0xcd, 0x5f, 0x01, 0xd8, 0x7a, 0x1a, 0x36, 0x9a, 0x65, 0x38, 0x87, 0x95, 0xad, - 0xa7, 0x49, 0xe9, 0x7a, 0xf1, 0x3c, 0x45, 0xeb, 0x15, 0xb0, 0x5c, 0xf3, 0x57, 0x32, 0x61, 0x85, - 0x44, 0xe3, 0x2f, 0x43, 0x4d, 0x35, 0xf8, 0xd0, 0xbc, 0x70, 0x3c, 0xd3, 0xe2, 0x6d, 0x58, 0x09, - 0xa2, 0x2b, 0x32, 0x89, 0x0d, 0x6b, 0xda, 0x11, 0xe8, 0xa6, 0x88, 0x8c, 0x29, 0xa6, 0x30, 0x50, - 0xca, 0xc6, 0xc7, 0x2a, 0x9c, 0x42, 0x3e, 0x93, 0x96, 0xdc, 0x32, 0x05, 0x71, 0x66, 0xf3, 0x6b, - 0xb0, 0xd6, 0x8d, 0x8d, 0xbb, 0xf2, 0xa8, 0x51, 0x39, 0xd4, 0xce, 0xb0, 0x15, 0x2a, 0x87, 0x06, - 0x9b, 0xff, 0xac, 0x04, 0x10, 0x1f, 0x21, 0xcd, 0x59, 0xf3, 0xf3, 0x2a, 0x22, 0x66, 0x0e, 0x74, - 0x73, 0x2f, 0x7d, 0xa0, 0xfb, 0x5e, 0xe4, 0xd8, 0xab, 0xf4, 0xf2, 0x74, 0x59, 0x78, 0xdc, 0xa6, - 0x69, 0x77, 0x3e, 0x55, 0x30, 0x54, 0x98, 0x2e, 0x18, 0xba, 0x3b, 0x5b, 0x5d, 0x38, 0x65, 0x8c, - 0xe2, 0xbc, 0x45, 0x29, 0x95, 0xb7, 0x68, 0x40, 0xd9, 0x17, 0xa6, 0xe5, 0xb9, 0xce, 0x45, 0x78, - 0x6e, 0x18, 0xc2, 0xfc, 0x2d, 0x28, 0x48, 0xba, 0xe5, 0x53, 0xa6, 0xb5, 0xf3, 0x82, 0x89, 0x53, - 0xb4, 0x68, 0xd9, 0xec, 0x40, 0x97, 0x04, 0xaa, 0x5d, 0xb3, 0x6c, 0x24, 0x30, 0x7c, 0x1d, 0xb8, - 0x8d, 0x41, 0x9c, 0xe3, 0x08, 0x6b, 0xe3, 0x62, 0x4b, 0x1d, 0xe7, 0xd1, 0xbe, 0x5e, 0x36, 0xe6, - 0x3c, 0x09, 0xe7, 0x7f, 0x39, 0x9e, 0x7f, 0x6a, 0xf2, 0x99, 0x1d, 0x60, 0x4f, 0x6b, 0xe4, 0xbe, - 0x44, 0x30, 0x7a, 0x0e, 0xe1, 0x82, 0x55, 0x63, 0x49, 0xda, 0x1b, 0x9f, 0x89, 0x5f, 0xf2, 0x34, - 0x1c, 0x5e, 0x95, 0xb8, 0x59, 0x25, 0xa1, 0x31, 0x82, 0x2c, 0x79, 0xdf, 0x73, 0xf7, 0x51, 0x23, - 0x98, 0xb6, 0xe4, 0x1a, 0xc6, 0xfe, 0x8e, 0x9d, 0x89, 0x6f, 0x3a, 0xf4, 0x74, 0x4d, 0x59, 0xf2, - 0x18, 0xd3, 0xfc, 0x83, 0x6c, 0x14, 0x3c, 0x55, 0xa0, 0x70, 0x6c, 0x06, 0x76, 0x5f, 0xed, 0x6e, - 0xda, 0xe9, 0x51, 0xbb, 0x9b, 0xf4, 0x2c, 0x8f, 0x65, 0x31, 0x0e, 0x0a, 0x84, 0x3e, 0xce, 0x89, - 0xef, 0x54, 0xb1, 0x3c, 0x9a, 0x80, 0x50, 0x93, 0x54, 0xcd, 0x10, 0xb1, 0x52, 0x72, 0xce, 0x8a, - 0xaa, 0x31, 0x29, 0xcc, 0xa6, 0x2d, 0x86, 0x95, 0x91, 0xc6, 0xf5, 0xa4, 0x50, 0xa9, 0x49, 0xd2, - 0x7b, 0x06, 0x28, 0x26, 0xbc, 0x24, 0xc0, 0xaa, 0x18, 0x98, 0x84, 0x42, 0x55, 0x3e, 0x31, 0xa0, - 0xb0, 0x6d, 0x19, 0xd7, 0x7d, 0xfa, 0x01, 0xab, 0x61, 0x8b, 0xe2, 0xab, 0x5a, 0x6c, 0x05, 0xa5, - 0x9a, 0x54, 0xc9, 0xb2, 0x8a, 0x3f, 0xcf, 0xa8, 0xbe, 0x85, 0xe1, 0x5b, 0x2d, 0xb4, 0x4b, 0x6b, - 0xd8, 0xb2, 0xc8, 0xd1, 0x61, 0x1c, 0xe3, 0xae, 0xb1, 0x89, 0x41, 0x90, 0x3d, 0x36, 0x5d, 0xc9, - 0xae, 0x61, 0x57, 0xc7, 0xd6, 0x09, 0xbb, 0x8e, 0x2c, 0xfd, 0xa1, 0x29, 0xd9, 0x0d, 0xa4, 0xc1, - 0x5f, 0x5b, 0xc2, 0x47, 0x4d, 0x61, 0x37, 0x91, 0x46, 0x9a, 0x03, 0x76, 0xab, 0xf9, 0xeb, 0x71, - 0x3d, 0xf4, 0x1b, 0x51, 0x78, 0xb2, 0xc8, 0xf2, 0xc1, 0x00, 0x66, 0xde, 0x5a, 0x6e, 0xc3, 0x9a, - 0x2f, 0x7e, 0x30, 0xb1, 0x53, 0xb7, 0x04, 0x72, 0x57, 0x97, 0xa1, 0xcc, 0x72, 0x34, 0xcf, 0x60, - 0x2d, 0x04, 0x9e, 0xd9, 0x72, 0x48, 0x79, 0x24, 0xfe, 0x56, 0xe2, 0x1a, 0x43, 0x66, 0xee, 0xf5, - 0xaf, 0x48, 0x64, 0x7c, 0x6d, 0x21, 0x3a, 0x27, 0xc8, 0x2e, 0x70, 0x4e, 0xd0, 0xfc, 0x3f, 0xc9, - 0x83, 0x67, 0x15, 0xb0, 0x59, 0x51, 0xc0, 0x36, 0x7b, 0x10, 0x1d, 0xa7, 0xfe, 0xb3, 0x2f, 0x93, - 0xfa, 0x9f, 0x57, 0xd4, 0xf1, 0x3e, 0xc6, 0x0f, 0xb4, 0x32, 0x9f, 0x2e, 0x70, 0xac, 0x91, 0xa2, - 0xe5, 0x1b, 0x74, 0xac, 0x6c, 0x76, 0x55, 0xc5, 0x51, 0x61, 0xee, 0xa5, 0xa2, 0xe4, 0xf9, 0xb1, - 0xa6, 0x34, 0x12, 0x5c, 0x09, 0x3b, 0x56, 0x9c, 0x67, 0xc7, 0x30, 0x76, 0xd6, 0x16, 0x2e, 0x82, - 0xd5, 0x29, 0x90, 0xfa, 0x1d, 0x8a, 0xa7, 0x35, 0x5e, 0x36, 0x66, 0xf0, 0xe8, 0xec, 0x8d, 0x26, - 0x8e, 0xb4, 0xf5, 0x41, 0x87, 0x02, 0xa6, 0x6f, 0x3d, 0x56, 0x66, 0x6f, 0x3d, 0x7e, 0x08, 0x10, - 0x08, 0x5c, 0x1d, 0x5b, 0x76, 0x5f, 0xea, 0xba, 0xa4, 0x3b, 0x97, 0xf5, 0x4d, 0x1f, 0xcf, 0x24, - 0x38, 0xb0, 0xfd, 0x23, 0xf3, 0x9c, 0x8e, 0x6c, 0x75, 0x01, 0x45, 0x04, 0x4f, 0x5b, 0xf7, 0x95, - 0x59, 0xeb, 0xfe, 0x16, 0x14, 0x02, 0x74, 0xa1, 0xe9, 0xe2, 0xce, 0xe5, 0xf3, 0xbb, 0x4e, 0x7e, - 0xb6, 0xa1, 0x68, 0x29, 0x61, 0x89, 0xf6, 0xcf, 0xf3, 0xe9, 0xca, 0x4e, 0xc5, 0x08, 0xc1, 0x94, - 0x85, 0xbd, 0x99, 0xb6, 0xb0, 0x0d, 0x0b, 0x8a, 0xfa, 0xf0, 0x61, 0x3a, 0x51, 0x10, 0xa6, 0x2d, - 0xb3, 0x89, 0xb4, 0x65, 0x54, 0xfd, 0x9a, 0x4b, 0x56, 0xbf, 0x4e, 0xdd, 0xea, 0x2b, 0xcc, 0xdc, - 0xea, 0x6b, 0x7e, 0x02, 0x05, 0x15, 0x13, 0x40, 0xe8, 0x8e, 0x2a, 0x57, 0x16, 0x3b, 0xc5, 0x32, - 0xfc, 0x3a, 0xb0, 0x40, 0x90, 0xaf, 0x23, 0xba, 0xe6, 0x48, 0x90, 0x91, 0xcc, 0xf2, 0x3a, 0x5c, - 0x57, 0xb4, 0x41, 0xfa, 0x09, 0x39, 0x5c, 0x8e, 0x7d, 0xec, 0x9b, 0xfe, 0x05, 0xcb, 0x37, 0x3f, - 0xa4, 0xa3, 0xff, 0x50, 0xa1, 0xaa, 0xd1, 0x2d, 0x4a, 0x65, 0x96, 0x2d, 0x6d, 0x7d, 0xa8, 0x72, - 0x44, 0x47, 0x7b, 0xaa, 0x9e, 0x8e, 0xc2, 0x29, 0xca, 0x07, 0x2d, 0x27, 0xf7, 0xf8, 0x3f, 0xb5, - 0xf5, 0xd6, 0xdc, 0x48, 0x78, 0x8c, 0xe9, 0x02, 0xb9, 0xcc, 0xa2, 0x05, 0x72, 0xcd, 0xc7, 0xb0, - 0x6a, 0xa4, 0x6d, 0x3a, 0x7f, 0x0f, 0x4a, 0xde, 0x38, 0x29, 0xe7, 0x45, 0x7a, 0x19, 0x92, 0x37, - 0x7f, 0x37, 0x03, 0xcb, 0x1d, 0x57, 0x0a, 0xdf, 0x35, 0x9d, 0x6d, 0xc7, 0x1c, 0xf0, 0x77, 0x43, - 0x2b, 0x35, 0x3f, 0xf7, 0x90, 0xa4, 0x4d, 0x1b, 0x2c, 0x47, 0x27, 0xd9, 0xf9, 0x0d, 0x58, 0x13, - 0x96, 0x2d, 0x3d, 0x5f, 0xf9, 0xc9, 0x61, 0x1d, 0xe3, 0x75, 0x60, 0x0a, 0xdd, 0xa5, 0x25, 0xd1, - 0x53, 0xd3, 0x5c, 0x87, 0xeb, 0x29, 0x6c, 0xe8, 0x04, 0x67, 0xf9, 0x6d, 0xa8, 0xc7, 0xbb, 0xd1, - 0x96, 0xe7, 0xca, 0x8e, 0x6b, 0x89, 0x73, 0x72, 0xb2, 0x58, 0xae, 0xf9, 0x6b, 0x91, 0x7b, 0xf7, - 0x54, 0x57, 0x39, 0xfa, 0x9e, 0x17, 0x5f, 0xa1, 0xd5, 0x50, 0xe2, 0xaa, 0x76, 0x76, 0x81, 0xab, - 0xda, 0x1f, 0xc6, 0xd7, 0x6d, 0xd5, 0x46, 0xf1, 0xca, 0xdc, 0xdd, 0x87, 0x8a, 0xb3, 0xb4, 0x77, - 0xdf, 0x15, 0x89, 0xbb, 0xb7, 0x6f, 0xea, 0x90, 0x2e, 0xbf, 0x88, 0x17, 0xac, 0xea, 0x18, 0xde, - 0x99, 0xbe, 0xe3, 0xb1, 0x58, 0x91, 0xe4, 0x8c, 0xa3, 0x0a, 0x2f, 0xed, 0xa8, 0x7e, 0x7b, 0x2a, - 0x7a, 0x2a, 0xcf, 0x4d, 0xc7, 0x5d, 0x71, 0x83, 0xf5, 0xdb, 0x50, 0x1a, 0xda, 0x81, 0xf4, 0x7c, - 0x75, 0xab, 0x7a, 0xf6, 0x16, 0x58, 0x62, 0xb4, 0x76, 0x14, 0x21, 0x55, 0xb4, 0x85, 0x5c, 0xfc, - 0x7b, 0xb0, 0x46, 0x03, 0x7f, 0x18, 0x7b, 0x0d, 0x41, 0xbd, 0x3a, 0xb7, 0x92, 0x30, 0x21, 0x6a, - 0x63, 0x8a, 0xc5, 0x98, 0x15, 0xd2, 0x18, 0x00, 0xc4, 0xf3, 0x33, 0x63, 0xc5, 0x3e, 0xc3, 0xad, - 0xea, 0x9b, 0x50, 0x0c, 0x26, 0xc7, 0xf1, 0x69, 0x9c, 0x86, 0x1a, 0xe7, 0xd0, 0x98, 0xf1, 0x0e, - 0x0e, 0x85, 0xaf, 0x9a, 0x7b, 0xe5, 0xd5, 0xee, 0x0f, 0x93, 0x13, 0xaf, 0x94, 0xf3, 0xee, 0x25, - 0xb3, 0x17, 0x49, 0x4e, 0x68, 0x40, 0xe3, 0x1d, 0xa8, 0x26, 0x06, 0x15, 0x2d, 0xf3, 0xc4, 0xb5, - 0xbc, 0x30, 0x05, 0x8c, 0xbf, 0xd5, 0xd5, 0x36, 0x2b, 0x4c, 0x02, 0xd3, 0xef, 0x86, 0x01, 0x6c, - 0x7a, 0x00, 0xaf, 0x88, 0xb0, 0x5f, 0x81, 0x5a, 0xc2, 0xa5, 0x8b, 0xd2, 0x83, 0x69, 0x64, 0xf3, - 0x0c, 0x3e, 0x9f, 0x10, 0x77, 0x28, 0xfc, 0x91, 0x1d, 0xe0, 0x46, 0xa2, 0x82, 0x45, 0x72, 0xad, - 0x2d, 0xe1, 0x4a, 0x5b, 0x86, 0x16, 0x34, 0x82, 0xf9, 0x37, 0xa1, 0x30, 0x16, 0xfe, 0x28, 0xd0, - 0x56, 0x74, 0x5a, 0x83, 0xe6, 0x8a, 0x0d, 0x0c, 0xc5, 0xd3, 0xfc, 0x27, 0x19, 0x28, 0xef, 0x09, - 0x69, 0xa2, 0xef, 0xc0, 0xf7, 0xa6, 0xde, 0x32, 0x7b, 0x82, 0x1c, 0x92, 0xae, 0xeb, 0xf0, 0x75, - 0xbd, 0xa3, 0xe9, 0x35, 0xbc, 0xb3, 0x14, 0x37, 0xac, 0xb1, 0x01, 0x25, 0x8d, 0x6e, 0xbc, 0x0b, - 0xab, 0x53, 0x94, 0x34, 0x2e, 0xca, 0xb7, 0xef, 0x5e, 0x8c, 0xc2, 0x32, 0xa7, 0x65, 0x23, 0x8d, - 0xdc, 0xa8, 0x40, 0x69, 0xac, 0x18, 0x9a, 0x7f, 0x70, 0x83, 0x8a, 0x6b, 0xec, 0x13, 0x8c, 0xe9, - 0xe7, 0xed, 0xac, 0x77, 0x00, 0x68, 0x6b, 0x56, 0x25, 0x18, 0x2a, 0x65, 0x9b, 0xc0, 0xf0, 0xf7, - 0xa3, 0x5c, 0x7b, 0x7e, 0xae, 0x53, 0x95, 0x14, 0x3e, 0x9d, 0x70, 0xaf, 0x43, 0xc9, 0x0e, 0x28, - 0x0f, 0xa7, 0xcb, 0x96, 0x42, 0x90, 0x7f, 0x0b, 0x8a, 0xf6, 0x68, 0xec, 0xf9, 0x52, 0x27, 0xe3, - 0xaf, 0x94, 0xda, 0x21, 0xca, 0x9d, 0x25, 0x43, 0xf3, 0x20, 0xb7, 0x38, 0x27, 0xee, 0xf2, 0x8b, - 0xb9, 0xdb, 0xe7, 0x21, 0xb7, 0xe2, 0xe1, 0xdf, 0x85, 0xda, 0x40, 0x55, 0x6d, 0x2a, 0xc1, 0xda, - 0x88, 0x7c, 0xe5, 0x2a, 0x21, 0x8f, 0x92, 0x0c, 0x3b, 0x4b, 0x46, 0x5a, 0x02, 0x8a, 0x44, 0x07, - 0x5e, 0x04, 0xb2, 0xe7, 0x7d, 0xe4, 0xd9, 0x2e, 0x85, 0xbb, 0x2f, 0x10, 0x69, 0x24, 0x19, 0x50, - 0x64, 0x4a, 0x02, 0xff, 0x3a, 0x7a, 0x3c, 0x81, 0xd4, 0x17, 0xdb, 0xef, 0x5e, 0x25, 0xa9, 0x27, - 0x02, 0x7d, 0x25, 0x3d, 0x90, 0xfc, 0x1c, 0x1a, 0x89, 0x45, 0xa2, 0x5f, 0xd2, 0x1a, 0x8f, 0x7d, - 0x0f, 0x63, 0xe6, 0x1a, 0x49, 0xfb, 0xfa, 0x55, 0xd2, 0x0e, 0x2f, 0xe5, 0xde, 0x59, 0x32, 0xae, - 0x90, 0xcd, 0x7b, 0x18, 0xd9, 0xe9, 0x2e, 0xec, 0x0a, 0xf3, 0x2c, 0xbc, 0x16, 0x7f, 0x7f, 0xa1, - 0x51, 0x20, 0x8e, 0x9d, 0x25, 0x63, 0x4a, 0x06, 0xff, 0x65, 0x58, 0x4b, 0xbd, 0x93, 0x6e, 0xc2, - 0xaa, 0x4b, 0xf3, 0x5f, 0x5b, 0xb8, 0x1b, 0xc8, 0xb4, 0xb3, 0x64, 0xcc, 0x4a, 0xe2, 0x13, 0xf8, - 0xdc, 0x6c, 0x97, 0xb6, 0x44, 0xdf, 0xb1, 0x5d, 0xa1, 0xef, 0xd7, 0xbf, 0xf3, 0x72, 0xa3, 0xa5, - 0x99, 0x77, 0x96, 0x8c, 0xcb, 0x25, 0xf3, 0xbf, 0x0a, 0xb7, 0xc7, 0x73, 0x4d, 0x8c, 0x32, 0x5d, - 0xfa, 0x7a, 0xfe, 0x7b, 0x0b, 0xbe, 0x79, 0x86, 0x7f, 0x67, 0xc9, 0xb8, 0x52, 0x3e, 0xfa, 0xce, - 0x14, 0x41, 0xeb, 0xe2, 0x72, 0x05, 0xd0, 0x49, 0x6d, 0xdf, 0xd9, 0x11, 0xa6, 0x15, 0x9d, 0x17, - 0xc4, 0x88, 0xc6, 0xff, 0xcc, 0x40, 0x51, 0xeb, 0xfb, 0xed, 0xa8, 0x62, 0x20, 0x32, 0xdd, 0x31, - 0x82, 0x7f, 0x00, 0x15, 0xe1, 0xfb, 0x9e, 0xbf, 0xe9, 0x59, 0x61, 0xb1, 0xe5, 0x74, 0x96, 0x59, - 0xc9, 0x59, 0x6f, 0x87, 0x64, 0x46, 0xcc, 0xc1, 0xdf, 0x07, 0x50, 0xeb, 0xbc, 0x17, 0xdf, 0x11, - 0x6a, 0xcc, 0xe7, 0x57, 0x47, 0x50, 0x31, 0x75, 0x9c, 0x96, 0x0b, 0xcf, 0x7f, 0x42, 0x30, 0x0a, - 0x38, 0x0b, 0x89, 0x80, 0xf3, 0xb6, 0xce, 0x23, 0x50, 0x7a, 0x45, 0xdf, 0x94, 0x8b, 0x10, 0x8d, - 0xdf, 0xcf, 0x40, 0x51, 0x19, 0x0f, 0xde, 0x9e, 0xed, 0xd1, 0x6b, 0x2f, 0xb6, 0x39, 0xeb, 0xd3, - 0x3d, 0xfb, 0x16, 0x80, 0xb2, 0x41, 0x89, 0x9e, 0xdd, 0x9e, 0x92, 0xa3, 0x59, 0xc3, 0xf2, 0xe6, - 0x98, 0xbe, 0xf9, 0x50, 0xdd, 0xe6, 0xa2, 0x94, 0xf0, 0x93, 0xdd, 0x5d, 0xb6, 0xc4, 0xd7, 0xa0, - 0xf6, 0x64, 0xff, 0xf1, 0xfe, 0xc1, 0xb3, 0xfd, 0xa3, 0xb6, 0x61, 0x1c, 0x18, 0x2a, 0x33, 0xbc, - 0xd1, 0xda, 0x3a, 0xea, 0xec, 0x1f, 0x3e, 0xe9, 0xb1, 0x6c, 0xe3, 0x5f, 0x66, 0xa0, 0x96, 0xb2, - 0x5d, 0x7f, 0xb6, 0x53, 0x97, 0x18, 0xfe, 0xdc, 0xfc, 0xe1, 0xcf, 0x5f, 0x36, 0xfc, 0x85, 0xe9, - 0xe1, 0xff, 0xed, 0x0c, 0xd4, 0x52, 0x36, 0x32, 0x29, 0x3d, 0x93, 0x96, 0x9e, 0xdc, 0xe9, 0xb3, - 0x53, 0x3b, 0x7d, 0x13, 0x96, 0xc3, 0xdf, 0xfb, 0x71, 0xc6, 0x21, 0x85, 0x4b, 0xd2, 0xd0, 0x75, - 0x8a, 0x7c, 0x9a, 0x86, 0xae, 0x54, 0x5c, 0xdd, 0x5a, 0xba, 0x3e, 0x1a, 0xd0, 0xed, 0xfa, 0xc6, - 0xe5, 0x16, 0xf4, 0x8a, 0x2e, 0x3c, 0x82, 0xea, 0x38, 0x5e, 0xa6, 0x2f, 0xe7, 0x96, 0x24, 0x39, - 0x5f, 0xd0, 0xce, 0xdf, 0xc9, 0xc0, 0x4a, 0xda, 0xe6, 0xfe, 0xb9, 0x1e, 0xd6, 0x7f, 0x9e, 0x81, - 0xb5, 0x19, 0x4b, 0x7e, 0xa5, 0x63, 0x37, 0xdd, 0xae, 0xec, 0x02, 0xed, 0xca, 0xcd, 0x69, 0xd7, - 0xe5, 0x96, 0xe4, 0xea, 0x16, 0x77, 0xe1, 0x73, 0x97, 0xee, 0x09, 0x57, 0x0c, 0x75, 0x4a, 0x68, - 0x6e, 0x5a, 0xe8, 0x6f, 0x65, 0xe0, 0xf6, 0x55, 0xf6, 0xfe, 0xff, 0xbb, 0x5e, 0x4d, 0xb7, 0xb0, - 0xf9, 0x6e, 0x54, 0x48, 0x50, 0x85, 0x92, 0xfe, 0x6a, 0x95, 0x2e, 0xe4, 0x1e, 0x7a, 0xcf, 0x5d, - 0x95, 0x89, 0x36, 0x84, 0xa9, 0xef, 0xf5, 0x1b, 0x62, 0xec, 0xd8, 0x74, 0x46, 0x7a, 0x0b, 0xa0, - 0x45, 0x71, 0x5d, 0x78, 0xcd, 0x66, 0x73, 0xf7, 0xa0, 0xdb, 0x66, 0x4b, 0x49, 0x27, 0xf6, 0x93, - 0xd0, 0x10, 0x37, 0x0f, 0xa1, 0x18, 0x5f, 0x7c, 0xd8, 0x33, 0xfd, 0x53, 0x4b, 0x9d, 0x44, 0x2e, - 0x43, 0xf9, 0x50, 0x87, 0x50, 0xea, 0x55, 0x1f, 0x75, 0x0f, 0xf6, 0x55, 0xd2, 0x7b, 0xeb, 0xa0, - 0xa7, 0xae, 0x4f, 0x74, 0x9f, 0x3e, 0x52, 0x47, 0x62, 0x8f, 0x8c, 0xd6, 0xe1, 0xce, 0x11, 0x51, - 0x14, 0x9a, 0xbf, 0x99, 0x0f, 0x77, 0xb5, 0xa6, 0xa1, 0xcf, 0x38, 0x01, 0x8a, 0x68, 0xcd, 0x3d, - 0x2d, 0x38, 0x7a, 0x0d, 0x95, 0xfc, 0xb6, 0xcf, 0x55, 0x1e, 0x82, 0x65, 0x79, 0x11, 0xb2, 0x87, - 0xc7, 0xaa, 0x12, 0x69, 0x47, 0x8e, 0x1c, 0x75, 0xef, 0xb2, 0x77, 0x2e, 0x59, 0x01, 0x7f, 0x6c, - 0x06, 0x67, 0xac, 0xd8, 0xfc, 0x57, 0x39, 0xa8, 0x44, 0xa6, 0xf2, 0x65, 0x4c, 0x37, 0xe7, 0xb0, - 0xd2, 0xd9, 0xef, 0xb5, 0x8d, 0xfd, 0xd6, 0xae, 0x26, 0xc9, 0xf1, 0x6b, 0xb0, 0xba, 0xdd, 0xd9, - 0x6d, 0x1f, 0xed, 0x1e, 0xb4, 0xb6, 0x34, 0xb2, 0xcc, 0x6f, 0x02, 0xef, 0xec, 0x1d, 0x1e, 0x18, - 0xbd, 0xa3, 0x4e, 0xf7, 0x68, 0xb3, 0xb5, 0xbf, 0xd9, 0xde, 0x6d, 0x6f, 0xb1, 0x22, 0x7f, 0x05, - 0xee, 0xee, 0x1f, 0xf4, 0x3a, 0x07, 0xfb, 0x47, 0xfb, 0x07, 0x47, 0x07, 0x1b, 0x1f, 0xb5, 0x37, - 0x7b, 0xdd, 0xa3, 0xce, 0xfe, 0x11, 0x4a, 0x7d, 0x64, 0xb4, 0xf0, 0x09, 0x2b, 0xf0, 0xbb, 0x70, - 0x5b, 0x53, 0x75, 0xdb, 0xc6, 0xd3, 0xb6, 0x81, 0x42, 0x9e, 0xec, 0xb7, 0x9e, 0xb6, 0x3a, 0xbb, - 0xad, 0x8d, 0xdd, 0x36, 0x5b, 0xe6, 0x77, 0xa0, 0xa1, 0x29, 0x8c, 0x56, 0xaf, 0x7d, 0xb4, 0xdb, - 0xd9, 0xeb, 0xf4, 0x8e, 0xda, 0xdf, 0xdb, 0x6c, 0xb7, 0xb7, 0xda, 0x5b, 0xac, 0xc6, 0xbf, 0x02, - 0x5f, 0xa6, 0x46, 0xe9, 0x46, 0xa4, 0x5f, 0xf6, 0x49, 0xe7, 0xf0, 0xa8, 0x65, 0x6c, 0xee, 0x74, - 0x9e, 0xb6, 0xd9, 0x0a, 0x7f, 0x0d, 0xbe, 0x74, 0x39, 0xe9, 0x56, 0xc7, 0x68, 0x6f, 0xf6, 0x0e, - 0x8c, 0x8f, 0xd9, 0x1a, 0xff, 0x02, 0x7c, 0x6e, 0xa7, 0xb7, 0xb7, 0x7b, 0xf4, 0xcc, 0x38, 0xd8, - 0x7f, 0x74, 0x44, 0x3f, 0xbb, 0x3d, 0xe3, 0xc9, 0x66, 0xef, 0x89, 0xd1, 0x66, 0xc0, 0x1b, 0x70, - 0xf3, 0x70, 0xe3, 0x68, 0xff, 0xa0, 0x77, 0xd4, 0xda, 0xff, 0x78, 0x63, 0xf7, 0x60, 0xf3, 0xf1, - 0xd1, 0xf6, 0x81, 0xb1, 0xd7, 0xea, 0xb1, 0x2a, 0xff, 0x2a, 0xbc, 0xb6, 0xd9, 0x7d, 0xaa, 0x9b, - 0x79, 0xb0, 0x7d, 0x64, 0x1c, 0x3c, 0xeb, 0x1e, 0x1d, 0x18, 0x47, 0x46, 0x7b, 0x97, 0xfa, 0xdc, - 0x8d, 0xdb, 0x5e, 0xe2, 0xb7, 0xa1, 0xde, 0xd9, 0xef, 0x3e, 0xd9, 0xde, 0xee, 0x6c, 0x76, 0xda, - 0xfb, 0xbd, 0xa3, 0xc3, 0xb6, 0xb1, 0xd7, 0xe9, 0x76, 0x91, 0x8c, 0x55, 0x9a, 0xdf, 0x81, 0x62, - 0xc7, 0x3d, 0xb3, 0x25, 0xad, 0x2f, 0xad, 0x8c, 0x3a, 0xe2, 0x0a, 0x41, 0x5a, 0x16, 0xf6, 0xc0, - 0xa5, 0xef, 0x09, 0xd0, 0xea, 0x5a, 0x36, 0x62, 0x44, 0xf3, 0xf7, 0x73, 0x50, 0x53, 0x22, 0xc2, - 0x08, 0xee, 0x1e, 0xac, 0xea, 0x54, 0x68, 0x27, 0x6d, 0xc2, 0xa6, 0xd1, 0xf4, 0xa1, 0x2e, 0x85, - 0x4a, 0x18, 0xb2, 0x24, 0x8a, 0xdf, 0x84, 0xa2, 0xd9, 0x77, 0x30, 0x0c, 0x54, 0xe7, 0x95, 0x1a, - 0xfa, 0xac, 0xb6, 0x0b, 0xed, 0xa2, 0x22, 0xec, 0x7b, 0xee, 0x66, 0x74, 0xa5, 0x24, 0x85, 0xe3, - 0x9f, 0xc0, 0xad, 0x08, 0x6e, 0xbb, 0x7d, 0xff, 0x62, 0x1c, 0x7d, 0x49, 0xaf, 0x34, 0x37, 0x99, - 0xb0, 0x6d, 0x3b, 0x22, 0x45, 0x68, 0x5c, 0x26, 0x80, 0x3f, 0x02, 0xb0, 0x69, 0xb0, 0xc8, 0x3f, - 0x9a, 0x7f, 0x6f, 0x3a, 0x35, 0x9a, 0x1a, 0xd2, 0x6e, 0x60, 0xf4, 0x1b, 0x37, 0x88, 0x01, 0xda, - 0xdd, 0xc7, 0xfa, 0xc3, 0x7b, 0xcb, 0x46, 0x04, 0x37, 0x1f, 0x00, 0xc4, 0x5c, 0x9c, 0xc1, 0x32, - 0xfa, 0x16, 0xad, 0x60, 0x4f, 0x8c, 0x8e, 0x85, 0xaf, 0xaa, 0xf8, 0x14, 0xe6, 0x11, 0x72, 0xb0, - 0x4c, 0xf3, 0x8f, 0x32, 0x89, 0x38, 0x5c, 0xc5, 0xd9, 0x57, 0xee, 0x40, 0xf3, 0xce, 0x84, 0x30, - 0x12, 0xd6, 0x83, 0xaa, 0x1d, 0x23, 0x0d, 0xf2, 0x43, 0xe0, 0xf6, 0xec, 0x50, 0xe6, 0x17, 0x1c, - 0xca, 0x39, 0xbc, 0xd3, 0x29, 0xfd, 0xc2, 0x6c, 0x4a, 0xff, 0x0e, 0xc0, 0xc0, 0xf1, 0x8e, 0xf5, - 0xb9, 0x62, 0x51, 0xd7, 0xfd, 0x44, 0x98, 0xa6, 0x03, 0xe5, 0xf0, 0x2b, 0x82, 0xa8, 0x63, 0xf4, - 0x1d, 0xc1, 0x28, 0xc1, 0xa9, 0x20, 0xbe, 0x03, 0x2b, 0x22, 0xdd, 0xe6, 0xec, 0x82, 0x6d, 0x9e, - 0xe2, 0x6b, 0x7e, 0x03, 0xd6, 0x66, 0x88, 0x70, 0x10, 0xc7, 0xa6, 0x8c, 0x3e, 0x25, 0x80, 0xbf, - 0x67, 0x8f, 0xeb, 0x9b, 0xff, 0x31, 0x0b, 0xcb, 0x7b, 0xa6, 0x6b, 0x9f, 0x88, 0x40, 0x86, 0xad, - 0x0d, 0xfa, 0x43, 0x31, 0x32, 0xc3, 0xd6, 0x2a, 0x48, 0x67, 0x3d, 0xb2, 0xc9, 0xf3, 0x84, 0x99, - 0xe3, 0x27, 0x5c, 0x4d, 0x13, 0x39, 0x8c, 0xaa, 0xeb, 0x35, 0x84, 0x73, 0xe7, 0xd8, 0x7d, 0xe1, - 0x06, 0xe1, 0x8a, 0x09, 0xc1, 0xb8, 0x7a, 0xa7, 0x78, 0x45, 0xf5, 0x4e, 0x69, 0x76, 0xfc, 0xef, - 0x42, 0x35, 0xe8, 0xfb, 0x42, 0xb8, 0xc1, 0xd0, 0x93, 0xe1, 0x17, 0x28, 0x93, 0x28, 0x2a, 0xa5, - 0xf3, 0x9e, 0xbb, 0xa8, 0xe3, 0xbb, 0xb6, 0x7b, 0xaa, 0x2b, 0xc4, 0x52, 0x38, 0xd4, 0x41, 0xca, - 0xf9, 0xd8, 0x3f, 0x14, 0x94, 0x6f, 0x28, 0x18, 0x11, 0x4c, 0x59, 0x1d, 0x53, 0x8a, 0x81, 0xe7, - 0xdb, 0x42, 0xa5, 0x36, 0x2b, 0x46, 0x02, 0x83, 0xbc, 0x8e, 0xe9, 0x0e, 0x26, 0xe6, 0x40, 0xe8, - 0xe3, 0xef, 0x08, 0x6e, 0xfe, 0xaf, 0x02, 0x80, 0x5a, 0x0d, 0xc1, 0xd0, 0x1e, 0xd3, 0xd1, 0x8b, - 0xad, 0x6b, 0x8a, 0x6b, 0x06, 0xfd, 0xe6, 0xef, 0xa5, 0xca, 0xfd, 0x67, 0x0f, 0x4b, 0x63, 0xf6, - 0xe9, 0x94, 0x10, 0x0e, 0x8e, 0x29, 0x85, 0x2e, 0x9c, 0xa2, 0xf1, 0xcf, 0x1b, 0x49, 0x14, 0x95, - 0xce, 0x99, 0x52, 0xb4, 0x5d, 0x4b, 0xa5, 0x9c, 0xf2, 0x46, 0x04, 0xd3, 0x85, 0xa1, 0xa0, 0x35, - 0x91, 0x9e, 0x21, 0x5c, 0xf1, 0x3c, 0xba, 0x0b, 0x17, 0xa3, 0xf8, 0x1e, 0xd4, 0xc6, 0xe6, 0xc5, - 0x48, 0xb8, 0x72, 0x4f, 0xc8, 0xa1, 0x67, 0xe9, 0x2a, 0xa7, 0xd7, 0x2e, 0x6f, 0xe0, 0x61, 0x92, - 0xdc, 0x48, 0x73, 0xa3, 0x4e, 0xb8, 0x01, 0xad, 0x12, 0x35, 0x8d, 0x1a, 0xe2, 0x1b, 0x00, 0xea, - 0x57, 0xc2, 0x52, 0xcd, 0x64, 0xa1, 0xcc, 0x91, 0x08, 0x84, 0x7f, 0x66, 0x2b, 0xeb, 0xaa, 0x8c, - 0x54, 0xcc, 0x85, 0xb6, 0x78, 0x12, 0x08, 0xbf, 0x3d, 0x32, 0x6d, 0x47, 0x4f, 0x70, 0x8c, 0xe0, - 0x6f, 0xc3, 0x8d, 0x60, 0x72, 0x8c, 0x3a, 0x73, 0x2c, 0x7a, 0xde, 0xbe, 0x78, 0x1e, 0x38, 0x42, - 0x4a, 0xe1, 0xeb, 0x4a, 0x8a, 0xf9, 0x0f, 0x9b, 0x83, 0xc8, 0x0d, 0xa3, 0xaf, 0x9d, 0xe0, 0xaf, - 0xb8, 0x5c, 0x2b, 0x42, 0xe9, 0x5a, 0x36, 0x96, 0x41, 0xf3, 0xa7, 0x50, 0xba, 0xd4, 0x2d, 0xcb, - 0xbf, 0x0c, 0x5f, 0x4c, 0x11, 0x19, 0xea, 0x60, 0x3a, 0xd8, 0xb6, 0x5d, 0xd3, 0xb1, 0x7f, 0xa8, - 0xca, 0x04, 0x72, 0xcd, 0x31, 0xd4, 0x52, 0x03, 0x47, 0x97, 0x37, 0xe9, 0x97, 0xae, 0xf7, 0x61, - 0xb0, 0xac, 0xe0, 0xae, 0xf4, 0x6d, 0x3a, 0x71, 0x89, 0x30, 0x9b, 0xb8, 0xce, 0x3d, 0x96, 0xe5, - 0xd7, 0x81, 0x29, 0x4c, 0xc7, 0x35, 0xc7, 0xe3, 0xd6, 0x78, 0xec, 0x08, 0x96, 0xa3, 0x8b, 0xb1, - 0x31, 0x56, 0x15, 0xfd, 0xb3, 0x7c, 0xf3, 0x7b, 0x70, 0x8b, 0x46, 0xe6, 0xa9, 0xf0, 0xa3, 0x40, - 0x5b, 0xf7, 0xf5, 0x06, 0xac, 0xa9, 0x5f, 0xfb, 0x9e, 0x54, 0x8f, 0xc9, 0xf9, 0xe4, 0xb0, 0xa2, - 0xd0, 0xe8, 0x7b, 0x75, 0x05, 0x5d, 0x77, 0x8d, 0x70, 0x11, 0x5d, 0xb6, 0xf9, 0x87, 0x45, 0xe0, - 0xb1, 0x42, 0xf4, 0x6c, 0xe1, 0x6f, 0x99, 0xd2, 0x4c, 0x64, 0x4a, 0x6b, 0x97, 0x9e, 0xf5, 0xbf, - 0xb8, 0x52, 0xef, 0x26, 0x14, 0xed, 0x00, 0x43, 0x43, 0x5d, 0xae, 0xab, 0x21, 0xbe, 0x0b, 0x30, - 0x16, 0xbe, 0xed, 0x59, 0xa4, 0x41, 0x85, 0xb9, 0xb7, 0x2e, 0x66, 0x1b, 0xb5, 0x7e, 0x18, 0xf1, - 0x18, 0x09, 0x7e, 0x6c, 0x87, 0x82, 0xd4, 0xc9, 0x79, 0x91, 0x1a, 0x9d, 0x44, 0xf1, 0x37, 0xe0, - 0xda, 0xd8, 0xb7, 0xfb, 0x42, 0x4d, 0xc7, 0x93, 0xc0, 0xda, 0xa4, 0x6f, 0x04, 0x96, 0x88, 0x72, - 0xde, 0x23, 0xd4, 0x40, 0xd3, 0xa5, 0x80, 0x29, 0xa0, 0xb3, 0x62, 0x7d, 0x41, 0x5c, 0x15, 0xb4, - 0xd6, 0x8c, 0xf9, 0x0f, 0xf9, 0x7d, 0x60, 0xfa, 0xc1, 0x9e, 0xed, 0xee, 0x0a, 0x77, 0x20, 0x87, - 0xa4, 0xdc, 0x35, 0x63, 0x06, 0x4f, 0x16, 0x4c, 0x7d, 0x89, 0x49, 0x9d, 0x23, 0x55, 0x8c, 0x08, - 0x56, 0x1f, 0x1d, 0x70, 0x3c, 0xbf, 0x2b, 0x7d, 0x5d, 0x99, 0x1b, 0xc1, 0xe8, 0x43, 0x05, 0xd4, - 0xd6, 0x43, 0xdf, 0xb3, 0x26, 0x74, 0xca, 0xa1, 0x8c, 0xd8, 0x34, 0x3a, 0xa6, 0xdc, 0x33, 0x5d, - 0x5d, 0x2e, 0x59, 0x4b, 0x52, 0x46, 0x68, 0x8a, 0x09, 0xbd, 0x20, 0x16, 0xb8, 0xaa, 0x63, 0xc2, - 0x04, 0x4e, 0xd3, 0xc4, 0xa2, 0x58, 0x44, 0x13, 0xcb, 0xa1, 0xfe, 0x5b, 0xbe, 0x67, 0x5b, 0xb1, - 0x2c, 0x55, 0xb9, 0x33, 0x83, 0x4f, 0xd0, 0xc6, 0x32, 0x79, 0x8a, 0x36, 0x96, 0x7b, 0x1d, 0x0a, - 0xde, 0xc9, 0x89, 0xf0, 0xe9, 0xc3, 0x9b, 0x15, 0x43, 0x01, 0xcd, 0x1f, 0x67, 0x00, 0x62, 0x95, - 0xc0, 0x85, 0x10, 0x43, 0xf1, 0xc2, 0xbf, 0x05, 0xd7, 0x92, 0x68, 0x47, 0x17, 0xc2, 0xd2, 0x6a, - 0x88, 0x1f, 0x6c, 0x99, 0x17, 0x01, 0xcb, 0xea, 0x8b, 0xdb, 0x1a, 0xf7, 0x4c, 0x08, 0xaa, 0x2a, - 0xbc, 0x0e, 0x2c, 0x46, 0xd2, 0x6d, 0xbc, 0x80, 0xe5, 0xd3, 0xa4, 0x1f, 0x0b, 0xd3, 0x0f, 0x58, - 0xa1, 0xb9, 0x03, 0x45, 0x75, 0x04, 0x36, 0xe7, 0xf0, 0xfa, 0xe5, 0x2a, 0x51, 0xfe, 0x76, 0x06, - 0x60, 0x4b, 0x55, 0x4d, 0xe3, 0xde, 0x3e, 0xa7, 0x26, 0x60, 0x9e, 0x9f, 0x65, 0x5a, 0x16, 0x55, - 0x9f, 0xe7, 0xa2, 0xaf, 0xfe, 0x20, 0x88, 0xfa, 0x64, 0x86, 0x95, 0x63, 0x6a, 0x25, 0x46, 0xb0, - 0xda, 0x56, 0x36, 0x3d, 0xd7, 0x15, 0x7d, 0xdc, 0x94, 0xa2, 0x6d, 0x25, 0x42, 0x35, 0x7f, 0x94, - 0x85, 0xca, 0xe6, 0xd0, 0x94, 0xea, 0x23, 0x39, 0xdf, 0x81, 0xf2, 0x48, 0x04, 0x81, 0x39, 0x10, - 0x81, 0x3e, 0xf2, 0x99, 0x3e, 0xaf, 0x8d, 0x68, 0xd7, 0x9f, 0xb8, 0xbe, 0x30, 0x2d, 0xf5, 0x65, - 0xa0, 0x88, 0x4b, 0x49, 0x70, 0x65, 0x14, 0x92, 0xbf, 0x84, 0x04, 0x37, 0xfa, 0x8c, 0xaf, 0x63, - 0x06, 0x8a, 0x24, 0x4a, 0xb7, 0x25, 0x51, 0x8d, 0x3d, 0xa8, 0x26, 0x58, 0xf9, 0x2b, 0x50, 0xf3, - 0x1c, 0x4b, 0x04, 0xea, 0x6e, 0x60, 0xfc, 0x39, 0xc5, 0x14, 0x92, 0x0a, 0x37, 0x70, 0x3d, 0x0b, - 0x5f, 0x9f, 0xde, 0x85, 0x60, 0xf3, 0x37, 0xca, 0x50, 0xc5, 0x46, 0xed, 0xa9, 0x3e, 0xcc, 0x4c, - 0x47, 0x1d, 0x4a, 0x9e, 0x96, 0xac, 0x2f, 0x15, 0x7a, 0x09, 0x99, 0xba, 0x18, 0x24, 0x97, 0x2e, - 0x06, 0xb9, 0x0d, 0x15, 0x75, 0xd4, 0x64, 0xb5, 0x94, 0x7d, 0xcc, 0x19, 0x31, 0x02, 0x9d, 0x98, - 0x91, 0x67, 0x91, 0x95, 0x6e, 0xa9, 0x53, 0x9a, 0x9c, 0x91, 0xc0, 0x50, 0x98, 0xa3, 0xbb, 0x5f, - 0xd5, 0x61, 0x8e, 0x02, 0x55, 0x55, 0xce, 0xd8, 0xb9, 0xe8, 0x79, 0xba, 0xb5, 0x1d, 0x2b, 0xbe, - 0x9b, 0x9d, 0xc6, 0xf3, 0x4d, 0x28, 0xe9, 0x69, 0xd1, 0x67, 0x51, 0x5f, 0x99, 0x33, 0x13, 0x9a, - 0x7c, 0x5d, 0xff, 0xd5, 0xd7, 0xa3, 0x8c, 0x90, 0x93, 0x3f, 0x82, 0xaa, 0x29, 0xa5, 0xd9, 0x1f, - 0x8e, 0xb4, 0x55, 0xcd, 0xcd, 0x39, 0x96, 0x4e, 0x0a, 0x6a, 0x45, 0xd4, 0x46, 0x92, 0x93, 0x6f, - 0x40, 0xc5, 0x17, 0x66, 0xea, 0x64, 0xfc, 0x95, 0x2b, 0xc4, 0x18, 0x21, 0xad, 0x11, 0xb3, 0x45, - 0x5f, 0x16, 0x85, 0xc4, 0x97, 0x45, 0xef, 0x42, 0x55, 0xab, 0x8e, 0x81, 0x8f, 0xd4, 0x17, 0x57, - 0x92, 0xa8, 0xc6, 0x4f, 0x33, 0xb0, 0x92, 0xee, 0xde, 0x9f, 0xc5, 0xb7, 0xf0, 0xbe, 0x15, 0x7f, - 0x0b, 0xef, 0x33, 0x7c, 0x57, 0xee, 0xb7, 0x32, 0x00, 0xf1, 0xc8, 0xe1, 0xde, 0xaa, 0xbe, 0xd9, - 0x15, 0x7a, 0xfb, 0x0a, 0xe2, 0x3b, 0xa9, 0x0f, 0x3d, 0xbc, 0xbd, 0xd0, 0x34, 0x24, 0x7e, 0x26, - 0xca, 0xde, 0x1f, 0xc0, 0x4a, 0x1a, 0x4f, 0xd7, 0x05, 0x3a, 0xbb, 0x6d, 0x95, 0xdb, 0xea, 0xec, - 0xb5, 0x1e, 0xb5, 0xf5, 0x35, 0xb5, 0xce, 0xfe, 0x63, 0x96, 0x6d, 0xfc, 0x71, 0x06, 0x2a, 0xd1, - 0xa4, 0xf0, 0xef, 0x26, 0x67, 0x53, 0x15, 0xc8, 0xbc, 0xb5, 0xc8, 0x6c, 0xc6, 0xbf, 0xda, 0xae, - 0xf4, 0x2f, 0x12, 0x93, 0xdb, 0xf0, 0x60, 0x25, 0xfd, 0x70, 0x8e, 0x99, 0x7d, 0x94, 0x36, 0xb3, - 0x6f, 0x2e, 0xf4, 0xca, 0x30, 0xc4, 0xdd, 0xb5, 0x03, 0xa9, 0x2d, 0xf0, 0xfb, 0xd9, 0xf7, 0x32, - 0x8d, 0xbb, 0xb0, 0x9c, 0x7c, 0x34, 0x7b, 0x53, 0xf5, 0xfe, 0x1f, 0xe7, 0x60, 0x25, 0x5d, 0x63, - 0x42, 0x37, 0xdf, 0x54, 0x7d, 0xd3, 0x81, 0x63, 0x25, 0x6e, 0x0a, 0x30, 0x0c, 0xaf, 0x75, 0x10, - 0x4d, 0x88, 0x35, 0xca, 0x9e, 0x79, 0x23, 0xc1, 0xee, 0x26, 0xbf, 0xf7, 0xf9, 0x06, 0x87, 0xf0, - 0xc6, 0x22, 0x1b, 0xf3, 0x8a, 0xfe, 0xf2, 0xd9, 0x8f, 0xb2, 0xbc, 0x96, 0xa8, 0x57, 0xff, 0x09, - 0x7a, 0x90, 0xab, 0x1b, 0x13, 0xd7, 0x72, 0x84, 0x15, 0x61, 0x7f, 0x9a, 0xc4, 0x46, 0x05, 0xe7, - 0x3f, 0xca, 0xf3, 0x15, 0xa8, 0x74, 0x27, 0xc7, 0xba, 0xd8, 0xfc, 0xaf, 0xe5, 0xf9, 0x4d, 0x58, - 0xd3, 0x54, 0x71, 0x6d, 0x27, 0xfb, 0xeb, 0xb8, 0xab, 0xad, 0xb4, 0xd4, 0x78, 0xe9, 0x86, 0xb2, - 0xbf, 0x91, 0xc7, 0x26, 0xd0, 0x45, 0xf8, 0xbf, 0x49, 0x72, 0xa2, 0x8b, 0x41, 0xec, 0x57, 0xf2, - 0x7c, 0x15, 0xa0, 0xdb, 0x8b, 0x5e, 0xf4, 0x6b, 0x79, 0x5e, 0x85, 0x62, 0xb7, 0x47, 0xd2, 0x7e, - 0x9c, 0xe7, 0x37, 0x80, 0xc5, 0x4f, 0x75, 0xc5, 0xeb, 0xdf, 0x51, 0x8d, 0x89, 0x4a, 0x58, 0xff, - 0x6e, 0x1e, 0xfb, 0x15, 0x8e, 0x32, 0xfb, 0x7b, 0x79, 0xce, 0xa0, 0x9a, 0xc8, 0xc9, 0xb2, 0xbf, - 0x9f, 0xe7, 0x1c, 0x6a, 0x7b, 0x76, 0x10, 0xd8, 0xee, 0x40, 0xf7, 0xe0, 0x57, 0xe9, 0xcd, 0xdb, - 0xd1, 0xdd, 0x26, 0xf6, 0xeb, 0x79, 0x7e, 0x0b, 0x78, 0xf2, 0x1c, 0x4a, 0x3f, 0xf8, 0x0d, 0xe2, - 0x56, 0x3b, 0x69, 0xa0, 0x71, 0xff, 0x80, 0xb8, 0x51, 0x13, 0x34, 0xe2, 0x37, 0x69, 0x40, 0x36, - 0xe3, 0x1a, 0x59, 0x8d, 0xff, 0x09, 0x31, 0x87, 0x93, 0xa9, 0x70, 0x3f, 0xcd, 0xdf, 0xff, 0x5d, - 0x3a, 0x47, 0x48, 0x96, 0x9a, 0xf1, 0x65, 0x28, 0x3b, 0x9e, 0x3b, 0x90, 0xea, 0x3b, 0xab, 0x35, - 0xa8, 0x04, 0x43, 0xcf, 0x97, 0x04, 0xd2, 0xe5, 0x4b, 0x97, 0x2e, 0xe9, 0xab, 0xeb, 0x0a, 0x2a, - 0x1a, 0x54, 0x79, 0x59, 0x69, 0x0e, 0x58, 0x35, 0xaa, 0xee, 0xcd, 0x47, 0x15, 0xc8, 0xf4, 0xb1, - 0x80, 0xf0, 0x32, 0x36, 0x2b, 0x22, 0xe9, 0xc4, 0x77, 0x54, 0x25, 0xb2, 0xc0, 0x48, 0x40, 0x7d, - 0x50, 0x71, 0x3c, 0xc4, 0x80, 0xa3, 0xa2, 0xb0, 0xde, 0xf7, 0x6d, 0x75, 0xcd, 0x57, 0x17, 0xf6, - 0x59, 0xd8, 0x8e, 0xa8, 0x76, 0x85, 0x89, 0xfb, 0xff, 0x30, 0x03, 0xcb, 0xe1, 0x15, 0x79, 0x7b, - 0x60, 0xbb, 0xaa, 0x96, 0x39, 0xfc, 0x7a, 0x6d, 0xdf, 0xb1, 0xc7, 0xe1, 0xd7, 0x20, 0x57, 0xa1, - 0x6a, 0xf9, 0xe6, 0xa0, 0xe5, 0x5a, 0x5b, 0xbe, 0x37, 0x56, 0xcd, 0x56, 0x27, 0x8d, 0xaa, 0x86, - 0xfa, 0xb9, 0x38, 0x46, 0xf2, 0xb1, 0xf0, 0x59, 0x9e, 0x8a, 0x06, 0x87, 0xa6, 0x6f, 0xbb, 0x83, - 0xf6, 0xb9, 0x14, 0x6e, 0xa0, 0x6a, 0xa9, 0xab, 0x50, 0x9a, 0x04, 0xa2, 0x6f, 0x06, 0x82, 0x15, - 0x11, 0x38, 0x9e, 0xd8, 0x8e, 0xb4, 0x5d, 0xf5, 0x11, 0xc6, 0xa8, 0x58, 0xba, 0x8c, 0x3d, 0x33, - 0xc7, 0x36, 0xab, 0xdc, 0xff, 0xb7, 0x19, 0xa8, 0x92, 0x5a, 0xc4, 0xb9, 0xf4, 0xd8, 0x8b, 0xab, - 0x42, 0x69, 0x37, 0xfa, 0x1a, 0x5f, 0x11, 0xb2, 0x07, 0xa7, 0x2a, 0x97, 0xae, 0xd5, 0x42, 0xdd, - 0x65, 0x55, 0x1f, 0xe6, 0xcb, 0xf3, 0xcf, 0xc1, 0x0d, 0x43, 0x8c, 0x3c, 0x29, 0x9e, 0x99, 0xb6, - 0x4c, 0xde, 0x5b, 0x2a, 0x60, 0x18, 0xa8, 0x1e, 0x85, 0x17, 0x95, 0x8a, 0x14, 0x06, 0xe2, 0x6b, - 0x43, 0x4c, 0x09, 0x7b, 0x4f, 0x18, 0x1d, 0x17, 0x96, 0x23, 0x92, 0x8f, 0x3c, 0xdb, 0xc5, 0xb7, - 0xd1, 0xfd, 0x6a, 0xc2, 0xd0, 0xa1, 0x0c, 0xa2, 0xe0, 0xfe, 0x3e, 0xdc, 0x9c, 0x7f, 0x94, 0xa0, - 0x6e, 0x5e, 0xd3, 0x27, 0xa0, 0xe9, 0x26, 0xcb, 0x33, 0xdf, 0x56, 0x57, 0x64, 0x2b, 0x50, 0x38, - 0x78, 0xee, 0x92, 0x5a, 0xac, 0x41, 0x6d, 0xdf, 0x4b, 0xf0, 0xb0, 0xdc, 0xfd, 0x7e, 0xea, 0xf4, - 0x27, 0x1e, 0x94, 0xb0, 0x11, 0x4b, 0x89, 0x5b, 0x5a, 0x19, 0x75, 0xae, 0x40, 0xff, 0xc5, 0x43, - 0x7d, 0x95, 0x42, 0x9f, 0xba, 0x58, 0xea, 0xab, 0x14, 0x51, 0x33, 0xf3, 0xea, 0xf3, 0x5c, 0x6e, - 0x5f, 0x38, 0xc2, 0x62, 0x85, 0xfb, 0xef, 0xc1, 0xaa, 0xee, 0x6a, 0x5f, 0x04, 0x41, 0x78, 0xcb, - 0xe9, 0xd0, 0xb7, 0xcf, 0xd4, 0x97, 0x2f, 0x96, 0xa1, 0x7c, 0x28, 0xfc, 0xc0, 0x73, 0xe9, 0xab, - 0x1f, 0x00, 0xc5, 0xee, 0xd0, 0xf4, 0xf1, 0x1d, 0xf7, 0xbf, 0xa6, 0x07, 0xe9, 0xc9, 0x79, 0xb8, - 0x35, 0xe0, 0xfa, 0xd1, 0x1f, 0xbd, 0x31, 0xa5, 0xa9, 0xc9, 0xa5, 0x2f, 0xcc, 0x11, 0xcb, 0xde, - 0xdf, 0x84, 0x0a, 0x5d, 0x92, 0x7a, 0x6c, 0xbb, 0x16, 0x76, 0x7c, 0x43, 0x17, 0xec, 0xd3, 0xd7, - 0x98, 0xce, 0x68, 0x38, 0xca, 0xea, 0xbb, 0xb5, 0x2c, 0xcb, 0x6f, 0x02, 0x6f, 0x4d, 0xa4, 0x37, - 0x32, 0xe9, 0x72, 0xaf, 0x73, 0xa1, 0xbe, 0x71, 0x9c, 0xbb, 0xff, 0x6d, 0xe0, 0x2a, 0x37, 0x67, - 0x89, 0x73, 0xdb, 0x1d, 0x44, 0x5f, 0x15, 0x00, 0xfa, 0x44, 0x88, 0x25, 0xce, 0xc3, 0x1b, 0x6e, - 0x21, 0x10, 0x7e, 0xa8, 0x64, 0xdb, 0x9b, 0xb8, 0xd8, 0xe8, 0xa7, 0x70, 0x5d, 0xa9, 0x18, 0xf6, - 0x82, 0x6e, 0x8e, 0x5e, 0x9a, 0x30, 0x50, 0x37, 0xdc, 0xe4, 0x24, 0x88, 0x68, 0x59, 0x06, 0x1b, - 0x16, 0x05, 0xdb, 0x31, 0x3e, 0x7b, 0xbf, 0x09, 0xd7, 0xe6, 0x64, 0x3c, 0xc8, 0xa8, 0xab, 0xb8, - 0x8f, 0x2d, 0xdd, 0xff, 0x10, 0xd6, 0x94, 0x19, 0xda, 0x57, 0x77, 0xfb, 0xc2, 0x61, 0x7b, 0xd6, - 0xd9, 0xee, 0xa8, 0x91, 0xde, 0x6c, 0xef, 0xee, 0x3e, 0xd9, 0x6d, 0x19, 0x2c, 0x43, 0xfa, 0x70, - 0xd0, 0x3b, 0xda, 0x3c, 0xd8, 0xdf, 0x6f, 0x6f, 0xf6, 0xda, 0x5b, 0x2c, 0xbb, 0x71, 0xff, 0xdf, - 0xff, 0xfc, 0x4e, 0xe6, 0x67, 0x3f, 0xbf, 0x93, 0xf9, 0x6f, 0x3f, 0xbf, 0x93, 0xf9, 0xf1, 0xa7, - 0x77, 0x96, 0x7e, 0xf6, 0xe9, 0x9d, 0xa5, 0xff, 0xf4, 0xe9, 0x9d, 0xa5, 0x4f, 0xd8, 0xf4, 0x3f, - 0xe2, 0x39, 0x2e, 0x52, 0x50, 0xf1, 0xd6, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xc8, 0xe7, 0x97, - 0xc4, 0xa3, 0x67, 0x00, 0x00, + 0x22, 0x81, 0xf9, 0x5c, 0x25, 0x1f, 0xf5, 0x87, 0x3a, 0xaf, 0x53, 0x86, 0xc2, 0x13, 0xf7, 0xd4, + 0xf5, 0x9e, 0xbb, 0x6a, 0x9f, 0xa6, 0x3a, 0x9e, 0xa9, 0x13, 0xc9, 0xb0, 0xd4, 0x26, 0x53, 0xff, + 0xe7, 0xd9, 0x99, 0x92, 0xb7, 0x16, 0xe4, 0x55, 0x30, 0x41, 0x7e, 0xee, 0x7c, 0x8d, 0x52, 0x92, + 0x58, 0x9f, 0x7e, 0x25, 0x50, 0x86, 0x66, 0x46, 0x2f, 0x3f, 0x2a, 0x08, 0x4d, 0x2f, 0x3c, 0xa5, + 0x9b, 0x12, 0x14, 0xda, 0xe6, 0xa9, 0x9a, 0xe8, 0x48, 0x42, 0xed, 0xaf, 0xa5, 0xe0, 0xfa, 0x22, + 0x92, 0x64, 0xe5, 0x78, 0x6a, 0xba, 0x72, 0xbc, 0x3b, 0x53, 0x89, 0x9d, 0xa6, 0xde, 0x3c, 0x78, + 0xc9, 0x46, 0x4c, 0xd7, 0x65, 0xd7, 0x7f, 0x3f, 0x05, 0x1b, 0x73, 0x7d, 0x4e, 0xf8, 0x31, 0x00, + 0x79, 0xa5, 0x59, 0xaa, 0x50, 0x2a, 0x2a, 0x5d, 0x51, 0x47, 0x0f, 0xb4, 0xc3, 0x07, 0xaa, 0x16, + 0x40, 0xd7, 0x9e, 0x2b, 0x27, 0x1a, 0x67, 0x0d, 0x37, 0x90, 0x81, 0x50, 0x69, 0x5a, 0xe5, 0x6c, + 0x69, 0x4c, 0x5e, 0x39, 0xba, 0xea, 0x7c, 0x84, 0x15, 0xa8, 0x00, 0x6b, 0x32, 0x76, 0xec, 0x3e, + 0x82, 0x45, 0x5e, 0x83, 0x9b, 0xea, 0x02, 0x82, 0x0e, 0x2a, 0x4f, 0x7a, 0x43, 0x9b, 0x16, 0x07, + 0x2b, 0xe1, 0x7b, 0x0e, 0x27, 0xc7, 0x8e, 0x1d, 0x0c, 0x19, 0xd4, 0x0d, 0xb8, 0xb6, 0xa0, 0x83, + 0xd4, 0xe4, 0xa7, 0xba, 0xf9, 0x6b, 0x00, 0xdb, 0x4f, 0xc3, 0x46, 0xb3, 0x14, 0xe7, 0xb0, 0xb6, + 0xfd, 0x34, 0x29, 0x5d, 0x2f, 0x9e, 0xa7, 0x68, 0xbd, 0x02, 0x96, 0xa9, 0xff, 0x6a, 0x2a, 0xac, + 0x90, 0xa8, 0xfd, 0x79, 0xa8, 0xa8, 0x06, 0x1f, 0x9a, 0x17, 0x8e, 0x67, 0x5a, 0xbc, 0x05, 0x6b, + 0x41, 0x74, 0x45, 0x26, 0xb1, 0x61, 0xcd, 0x3a, 0x02, 0xdd, 0x29, 0x22, 0x63, 0x86, 0x29, 0x0c, + 0x94, 0xd2, 0xf1, 0xb1, 0x0a, 0xa7, 0x90, 0xcf, 0xa4, 0x25, 0xb7, 0x4a, 0x41, 0x9c, 0x59, 0xff, + 0x3a, 0x6c, 0x74, 0x63, 0xe3, 0xae, 0x3c, 0x6a, 0x54, 0x0e, 0xb5, 0x33, 0x6c, 0x87, 0xca, 0xa1, + 0xc1, 0xfa, 0x3f, 0x2a, 0x00, 0xc4, 0x47, 0x48, 0x0b, 0xd6, 0xfc, 0xa2, 0x8a, 0x88, 0xb9, 0x03, + 0xdd, 0xcc, 0x4b, 0x1f, 0xe8, 0xbe, 0x17, 0x39, 0xf6, 0x2a, 0xbd, 0x3c, 0x5b, 0x16, 0x1e, 0xb7, + 0x69, 0xd6, 0x9d, 0x9f, 0x2a, 0x18, 0xca, 0xcd, 0x16, 0x0c, 0xdd, 0x9d, 0xaf, 0x2e, 0x9c, 0x31, + 0x46, 0x71, 0xde, 0xa2, 0x30, 0x95, 0xb7, 0xa8, 0x41, 0xd1, 0x17, 0xa6, 0xe5, 0xb9, 0xce, 0x45, + 0x78, 0x6e, 0x18, 0xc2, 0xfc, 0x2d, 0xc8, 0x49, 0xba, 0xe5, 0x53, 0xa4, 0xb5, 0xf3, 0x82, 0x89, + 0x53, 0xb4, 0x68, 0xd9, 0xec, 0x40, 0x97, 0x04, 0xaa, 0x5d, 0xb3, 0x68, 0x24, 0x30, 0x7c, 0x13, + 0xb8, 0x8d, 0x41, 0x9c, 0xe3, 0x08, 0x6b, 0xeb, 0x62, 0x5b, 0x1d, 0xe7, 0xd1, 0xbe, 0x5e, 0x34, + 0x16, 0x3c, 0x09, 0xe7, 0x7f, 0x35, 0x9e, 0x7f, 0x6a, 0xf2, 0x99, 0x1d, 0x60, 0x4f, 0x2b, 0xe4, + 0xbe, 0x44, 0x30, 0x7a, 0x0e, 0xe1, 0x82, 0x55, 0x63, 0x49, 0xda, 0x1b, 0x9f, 0x89, 0x5f, 0xf2, + 0x34, 0x1c, 0x5e, 0x95, 0xb8, 0x59, 0x27, 0xa1, 0x31, 0x82, 0x2c, 0x79, 0xdf, 0x73, 0x0f, 0x50, + 0x23, 0x98, 0xb6, 0xe4, 0x1a, 0xc6, 0xfe, 0x8e, 0x9d, 0x89, 0x6f, 0x3a, 0xf4, 0x74, 0x43, 0x59, + 0xf2, 0x18, 0x53, 0xff, 0x83, 0x74, 0x14, 0x3c, 0x95, 0x20, 0x77, 0x6c, 0x06, 0x76, 0x5f, 0xed, + 0x6e, 0xda, 0xe9, 0x51, 0xbb, 0x9b, 0xf4, 0x2c, 0x8f, 0xa5, 0x31, 0x0e, 0x0a, 0x84, 0x3e, 0xce, + 0x89, 0xef, 0x54, 0xb1, 0x2c, 0x9a, 0x80, 0x50, 0x93, 0x54, 0xcd, 0x10, 0xb1, 0x52, 0x72, 0xce, + 0x8a, 0xaa, 0x31, 0x29, 0xcc, 0xa6, 0x2d, 0x86, 0x15, 0x91, 0xc6, 0xf5, 0xa4, 0x50, 0xa9, 0x49, + 0xd2, 0x7b, 0x06, 0x28, 0x26, 0xbc, 0x24, 0xc0, 0xca, 0x18, 0x98, 0x84, 0x42, 0x55, 0x3e, 0x31, + 0xa0, 0xb0, 0x6d, 0x15, 0xd7, 0xfd, 0xf4, 0x03, 0x56, 0xc1, 0x16, 0xc5, 0x57, 0xb5, 0xd8, 0x1a, + 0x4a, 0x35, 0xa9, 0x92, 0x65, 0x1d, 0x7f, 0x9e, 0x51, 0x7d, 0x0b, 0xc3, 0xb7, 0x5a, 0x68, 0x97, + 0x36, 0xb0, 0x65, 0x91, 0xa3, 0xc3, 0x38, 0xc6, 0x5d, 0x63, 0x13, 0x83, 0x20, 0x7b, 0x6c, 0xba, + 0x92, 0x5d, 0xc3, 0xae, 0x8e, 0xad, 0x13, 0x76, 0x1d, 0x59, 0xfa, 0x43, 0x53, 0xb2, 0x1b, 0x48, + 0x83, 0xbf, 0xb6, 0x85, 0x8f, 0x9a, 0xc2, 0x6e, 0x22, 0x8d, 0x34, 0x07, 0xec, 0x56, 0xfd, 0x37, + 0xe2, 0x7a, 0xe8, 0x37, 0xa2, 0xf0, 0x64, 0x99, 0xe5, 0x83, 0x01, 0xcc, 0xa2, 0xb5, 0xdc, 0x82, + 0x0d, 0x5f, 0xfc, 0x70, 0x62, 0x4f, 0xdd, 0x12, 0xc8, 0x5c, 0x5d, 0x86, 0x32, 0xcf, 0x51, 0x3f, + 0x83, 0x8d, 0x10, 0x78, 0x66, 0xcb, 0x21, 0xe5, 0x91, 0xf8, 0x5b, 0x89, 0x6b, 0x0c, 0xa9, 0x85, + 0xd7, 0xbf, 0x22, 0x91, 0xf1, 0xb5, 0x85, 0xe8, 0x9c, 0x20, 0xbd, 0xc4, 0x39, 0x41, 0xfd, 0x7f, + 0x27, 0x0f, 0x9e, 0x55, 0xc0, 0x66, 0x45, 0x01, 0xdb, 0xfc, 0x41, 0x74, 0x9c, 0xfa, 0x4f, 0xbf, + 0x4c, 0xea, 0x7f, 0x51, 0x51, 0xc7, 0xfb, 0x18, 0x3f, 0xd0, 0xca, 0x7c, 0xba, 0xc4, 0xb1, 0xc6, + 0x14, 0x2d, 0xdf, 0xa2, 0x63, 0x65, 0xb3, 0xab, 0x2a, 0x8e, 0x72, 0x0b, 0x2f, 0x15, 0x25, 0xcf, + 0x8f, 0x35, 0xa5, 0x91, 0xe0, 0x4a, 0xd8, 0xb1, 0xfc, 0x22, 0x3b, 0x86, 0xb1, 0xb3, 0xb6, 0x70, + 0x11, 0xac, 0x4e, 0x81, 0xd4, 0xef, 0x50, 0x3c, 0xad, 0xf1, 0xa2, 0x31, 0x87, 0x47, 0x67, 0x6f, + 0x34, 0x71, 0xa4, 0xad, 0x0f, 0x3a, 0x14, 0x30, 0x7b, 0xeb, 0xb1, 0x34, 0x7f, 0xeb, 0xf1, 0x43, + 0x80, 0x40, 0xe0, 0xea, 0xd8, 0xb6, 0xfb, 0x52, 0xd7, 0x25, 0xdd, 0xb9, 0xac, 0x6f, 0xfa, 0x78, + 0x26, 0xc1, 0x81, 0xed, 0x1f, 0x99, 0xe7, 0x74, 0x64, 0xab, 0x0b, 0x28, 0x22, 0x78, 0xd6, 0xba, + 0xaf, 0xcd, 0x5b, 0xf7, 0xb7, 0x20, 0x17, 0xa0, 0x0b, 0x4d, 0x17, 0x77, 0x2e, 0x9f, 0xdf, 0x4d, + 0xf2, 0xb3, 0x0d, 0x45, 0x4b, 0x09, 0x4b, 0xb4, 0x7f, 0x9e, 0x4f, 0x57, 0x76, 0x4a, 0x46, 0x08, + 0x4e, 0x59, 0xd8, 0x9b, 0xd3, 0x16, 0xb6, 0x66, 0x41, 0x5e, 0x1f, 0x3e, 0xcc, 0x26, 0x0a, 0xc2, + 0xb4, 0x65, 0x3a, 0x91, 0xb6, 0x8c, 0xaa, 0x5f, 0x33, 0xc9, 0xea, 0xd7, 0x99, 0x5b, 0x7d, 0xb9, + 0xb9, 0x5b, 0x7d, 0xf5, 0x4f, 0x20, 0xa7, 0x62, 0x02, 0x08, 0xdd, 0x51, 0xe5, 0xca, 0x62, 0xa7, + 0x58, 0x8a, 0x5f, 0x07, 0x16, 0x08, 0xf2, 0x75, 0x44, 0xd7, 0x1c, 0x09, 0x32, 0x92, 0x69, 0x5e, + 0x85, 0xeb, 0x8a, 0x36, 0x98, 0x7e, 0x42, 0x0e, 0x97, 0x63, 0x1f, 0xfb, 0xa6, 0x7f, 0xc1, 0xb2, + 0xf5, 0x0f, 0xe9, 0xe8, 0x3f, 0x54, 0xa8, 0x72, 0x74, 0x8b, 0x52, 0x99, 0x65, 0x4b, 0x5b, 0x1f, + 0xaa, 0x1c, 0xd1, 0xd1, 0x9e, 0xaa, 0xa7, 0xa3, 0x70, 0x8a, 0xf2, 0x41, 0xab, 0xc9, 0x3d, 0xfe, + 0x4f, 0x6c, 0xbd, 0xd5, 0xb7, 0x12, 0x1e, 0xe3, 0x74, 0x81, 0x5c, 0x6a, 0xd9, 0x02, 0xb9, 0xfa, + 0x63, 0x58, 0x37, 0xa6, 0x6d, 0x3a, 0x7f, 0x0f, 0x0a, 0xde, 0x38, 0x29, 0xe7, 0x45, 0x7a, 0x19, + 0x92, 0xd7, 0x7f, 0x2f, 0x05, 0xab, 0x6d, 0x57, 0x0a, 0xdf, 0x35, 0x9d, 0x1d, 0xc7, 0x1c, 0xf0, + 0x77, 0x43, 0x2b, 0xb5, 0x38, 0xf7, 0x90, 0xa4, 0x9d, 0x36, 0x58, 0x8e, 0x4e, 0xb2, 0xf3, 0x1b, + 0xb0, 0x21, 0x2c, 0x5b, 0x7a, 0xbe, 0xf2, 0x93, 0xc3, 0x3a, 0xc6, 0xeb, 0xc0, 0x14, 0xba, 0x4b, + 0x4b, 0xa2, 0xa7, 0xa6, 0xb9, 0x0a, 0xd7, 0xa7, 0xb0, 0xa1, 0x13, 0x9c, 0xe6, 0xb7, 0xa1, 0x1a, + 0xef, 0x46, 0xdb, 0x9e, 0x2b, 0xdb, 0xae, 0x25, 0xce, 0xc9, 0xc9, 0x62, 0x99, 0xfa, 0xaf, 0x47, + 0xee, 0xdd, 0x53, 0x5d, 0xe5, 0xe8, 0x7b, 0x5e, 0x7c, 0x85, 0x56, 0x43, 0x89, 0xab, 0xda, 0xe9, + 0x25, 0xae, 0x6a, 0x7f, 0x18, 0x5f, 0xb7, 0x55, 0x1b, 0xc5, 0x2b, 0x0b, 0x77, 0x1f, 0x2a, 0xce, + 0xd2, 0xde, 0x7d, 0x57, 0x24, 0xee, 0xde, 0xbe, 0xa9, 0x43, 0xba, 0xec, 0x32, 0x5e, 0xb0, 0xaa, + 0x63, 0x78, 0x67, 0xf6, 0x8e, 0xc7, 0x72, 0x45, 0x92, 0x73, 0x8e, 0x2a, 0xbc, 0xb4, 0xa3, 0xfa, + 0x9d, 0x99, 0xe8, 0xa9, 0xb8, 0x30, 0x1d, 0x77, 0xc5, 0x0d, 0xd6, 0xef, 0x40, 0x61, 0x68, 0x07, + 0xd2, 0xf3, 0xd5, 0xad, 0xea, 0xf9, 0x5b, 0x60, 0x89, 0xd1, 0xda, 0x55, 0x84, 0x54, 0xd1, 0x16, + 0x72, 0xf1, 0xef, 0xc3, 0x06, 0x0d, 0xfc, 0x61, 0xec, 0x35, 0x04, 0xd5, 0xf2, 0xc2, 0x4a, 0xc2, + 0x84, 0xa8, 0xad, 0x19, 0x16, 0x63, 0x5e, 0x48, 0x6d, 0x00, 0x10, 0xcf, 0xcf, 0x9c, 0x15, 0xfb, + 0x1c, 0xb7, 0xaa, 0x6f, 0x42, 0x3e, 0x98, 0x1c, 0xc7, 0xa7, 0x71, 0x1a, 0xaa, 0x9d, 0x43, 0x6d, + 0xce, 0x3b, 0x38, 0x14, 0xbe, 0x6a, 0xee, 0x95, 0x57, 0xbb, 0x3f, 0x4c, 0x4e, 0xbc, 0x52, 0xce, + 0xbb, 0x97, 0xcc, 0x5e, 0x24, 0x39, 0xa1, 0x01, 0xb5, 0x77, 0xa0, 0x9c, 0x18, 0x54, 0xb4, 0xcc, + 0x13, 0xd7, 0xf2, 0xc2, 0x14, 0x30, 0xfe, 0x56, 0x57, 0xdb, 0xac, 0x30, 0x09, 0x4c, 0xbf, 0x6b, + 0x06, 0xb0, 0xd9, 0x01, 0xbc, 0x22, 0xc2, 0x7e, 0x05, 0x2a, 0x09, 0x97, 0x2e, 0x4a, 0x0f, 0x4e, + 0x23, 0xeb, 0x67, 0xf0, 0xc5, 0x84, 0xb8, 0x43, 0xe1, 0x8f, 0xec, 0x00, 0x37, 0x12, 0x15, 0x2c, + 0x92, 0x6b, 0x6d, 0x09, 0x57, 0xda, 0x32, 0xb4, 0xa0, 0x11, 0xcc, 0xbf, 0x05, 0xb9, 0xb1, 0xf0, + 0x47, 0x81, 0xb6, 0xa2, 0xb3, 0x1a, 0xb4, 0x50, 0x6c, 0x60, 0x28, 0x9e, 0xfa, 0x3f, 0x48, 0x41, + 0x71, 0x5f, 0x48, 0x13, 0x7d, 0x07, 0xbe, 0x3f, 0xf3, 0x96, 0xf9, 0x13, 0xe4, 0x90, 0x74, 0x53, + 0x87, 0xaf, 0x9b, 0x6d, 0x4d, 0xaf, 0xe1, 0xdd, 0x95, 0xb8, 0x61, 0xb5, 0x2d, 0x28, 0x68, 0x74, + 0xed, 0x5d, 0x58, 0x9f, 0xa1, 0xa4, 0x71, 0x51, 0xbe, 0x7d, 0xf7, 0x62, 0x14, 0x96, 0x39, 0xad, + 0x1a, 0xd3, 0xc8, 0xad, 0x12, 0x14, 0xc6, 0x8a, 0xa1, 0xfe, 0x07, 0x37, 0xa8, 0xb8, 0xc6, 0x3e, + 0xc1, 0x98, 0x7e, 0xd1, 0xce, 0x7a, 0x07, 0x80, 0xb6, 0x66, 0x55, 0x82, 0xa1, 0x52, 0xb6, 0x09, + 0x0c, 0x7f, 0x3f, 0xca, 0xb5, 0x67, 0x17, 0x3a, 0x55, 0x49, 0xe1, 0xb3, 0x09, 0xf7, 0x2a, 0x14, + 0xec, 0x80, 0xf2, 0x70, 0xba, 0x6c, 0x29, 0x04, 0xf9, 0xb7, 0x21, 0x6f, 0x8f, 0xc6, 0x9e, 0x2f, + 0x75, 0x32, 0xfe, 0x4a, 0xa9, 0x6d, 0xa2, 0xdc, 0x5d, 0x31, 0x34, 0x0f, 0x72, 0x8b, 0x73, 0xe2, + 0x2e, 0xbe, 0x98, 0xbb, 0x75, 0x1e, 0x72, 0x2b, 0x1e, 0xfe, 0x3d, 0xa8, 0x0c, 0x54, 0xd5, 0xa6, + 0x12, 0xac, 0x8d, 0xc8, 0x57, 0xaf, 0x12, 0xf2, 0x28, 0xc9, 0xb0, 0xbb, 0x62, 0x4c, 0x4b, 0x40, + 0x91, 0xe8, 0xc0, 0x8b, 0x40, 0xf6, 0xbc, 0x8f, 0x3c, 0xdb, 0xa5, 0x70, 0xf7, 0x05, 0x22, 0x8d, + 0x24, 0x03, 0x8a, 0x9c, 0x92, 0xc0, 0xbf, 0x81, 0x1e, 0x4f, 0x20, 0xf5, 0xc5, 0xf6, 0xbb, 0x57, + 0x49, 0xea, 0x89, 0x40, 0x5f, 0x49, 0x0f, 0x24, 0x3f, 0x87, 0x5a, 0x62, 0x91, 0xe8, 0x97, 0x34, + 0xc6, 0x63, 0xdf, 0xc3, 0x98, 0xb9, 0x42, 0xd2, 0xbe, 0x71, 0x95, 0xb4, 0xc3, 0x4b, 0xb9, 0x77, + 0x57, 0x8c, 0x2b, 0x64, 0xf3, 0x1e, 0x46, 0x76, 0xba, 0x0b, 0x7b, 0xc2, 0x3c, 0x0b, 0xaf, 0xc5, + 0xdf, 0x5f, 0x6a, 0x14, 0x88, 0x63, 0x77, 0xc5, 0x98, 0x91, 0xc1, 0x7f, 0x05, 0x36, 0xa6, 0xde, + 0x49, 0x37, 0x61, 0xd5, 0xa5, 0xf9, 0xaf, 0x2f, 0xdd, 0x0d, 0x64, 0xda, 0x5d, 0x31, 0xe6, 0x25, + 0xf1, 0x09, 0x7c, 0x61, 0xbe, 0x4b, 0xdb, 0xa2, 0xef, 0xd8, 0xae, 0xd0, 0xf7, 0xeb, 0xdf, 0x79, + 0xb9, 0xd1, 0xd2, 0xcc, 0xbb, 0x2b, 0xc6, 0xe5, 0x92, 0xf9, 0x5f, 0x84, 0xdb, 0xe3, 0x85, 0x26, + 0x46, 0x99, 0x2e, 0x7d, 0x3d, 0xff, 0xbd, 0x25, 0xdf, 0x3c, 0xc7, 0xbf, 0xbb, 0x62, 0x5c, 0x29, + 0x1f, 0x7d, 0x67, 0x8a, 0xa0, 0x75, 0x71, 0xb9, 0x02, 0xe8, 0xa4, 0xb6, 0xef, 0xec, 0x0a, 0xd3, + 0x8a, 0xce, 0x0b, 0x62, 0x44, 0xed, 0xbf, 0xa7, 0x20, 0xaf, 0xf5, 0xfd, 0x76, 0x54, 0x31, 0x10, + 0x99, 0xee, 0x18, 0xc1, 0x3f, 0x80, 0x92, 0xf0, 0x7d, 0xcf, 0x6f, 0x7a, 0x56, 0x58, 0x6c, 0x39, + 0x9b, 0x65, 0x56, 0x72, 0x36, 0x5b, 0x21, 0x99, 0x11, 0x73, 0xf0, 0xf7, 0x01, 0xd4, 0x3a, 0xef, + 0xc5, 0x77, 0x84, 0x6a, 0x8b, 0xf9, 0xd5, 0x11, 0x54, 0x4c, 0x1d, 0xa7, 0xe5, 0xc2, 0xf3, 0x9f, + 0x10, 0x8c, 0x02, 0xce, 0x5c, 0x22, 0xe0, 0xbc, 0xad, 0xf3, 0x08, 0x94, 0x5e, 0xd1, 0x37, 0xe5, + 0x22, 0x44, 0xed, 0x5f, 0xa7, 0x20, 0xaf, 0x8c, 0x07, 0x6f, 0xcd, 0xf7, 0xe8, 0xb5, 0x17, 0xdb, + 0x9c, 0xcd, 0xd9, 0x9e, 0x7d, 0x1b, 0x40, 0xd9, 0xa0, 0x44, 0xcf, 0x6e, 0xcf, 0xc8, 0xd1, 0xac, + 0x61, 0x79, 0x73, 0x4c, 0x5f, 0x7f, 0xa8, 0x6e, 0x73, 0x51, 0x4a, 0xf8, 0xc9, 0xde, 0x1e, 0x5b, + 0xe1, 0x1b, 0x50, 0x79, 0x72, 0xf0, 0xf8, 0xa0, 0xf3, 0xec, 0xe0, 0xa8, 0x65, 0x18, 0x1d, 0x43, + 0x65, 0x86, 0xb7, 0x1a, 0xdb, 0x47, 0xed, 0x83, 0xc3, 0x27, 0x3d, 0x96, 0xae, 0xfd, 0xd3, 0x14, + 0x54, 0xa6, 0x6c, 0xd7, 0x9f, 0xee, 0xd4, 0x25, 0x86, 0x3f, 0xb3, 0x78, 0xf8, 0xb3, 0x97, 0x0d, + 0x7f, 0x6e, 0x76, 0xf8, 0x7f, 0x27, 0x05, 0x95, 0x29, 0x1b, 0x99, 0x94, 0x9e, 0x9a, 0x96, 0x9e, + 0xdc, 0xe9, 0xd3, 0x33, 0x3b, 0x7d, 0x1d, 0x56, 0xc3, 0xdf, 0x07, 0x71, 0xc6, 0x61, 0x0a, 0x97, + 0xa4, 0xa1, 0xeb, 0x14, 0xd9, 0x69, 0x1a, 0xba, 0x52, 0x71, 0x75, 0x6b, 0xe9, 0xfa, 0x68, 0x40, + 0xb7, 0xeb, 0x6b, 0x97, 0x5b, 0xd0, 0x2b, 0xba, 0xf0, 0x08, 0xca, 0xe3, 0x78, 0x99, 0xbe, 0x9c, + 0x5b, 0x92, 0xe4, 0x7c, 0x41, 0x3b, 0x7f, 0x37, 0x05, 0x6b, 0xd3, 0x36, 0xf7, 0xff, 0xeb, 0x61, + 0xfd, 0xc7, 0x29, 0xd8, 0x98, 0xb3, 0xe4, 0x57, 0x3a, 0x76, 0xb3, 0xed, 0x4a, 0x2f, 0xd1, 0xae, + 0xcc, 0x82, 0x76, 0x5d, 0x6e, 0x49, 0xae, 0x6e, 0x71, 0x17, 0xbe, 0x70, 0xe9, 0x9e, 0x70, 0xc5, + 0x50, 0x4f, 0x09, 0xcd, 0xcc, 0x0a, 0xfd, 0xed, 0x14, 0xdc, 0xbe, 0xca, 0xde, 0xff, 0x3f, 0xd7, + 0xab, 0xd9, 0x16, 0xd6, 0xdf, 0x8d, 0x0a, 0x09, 0xca, 0x50, 0xd0, 0x5f, 0xad, 0xd2, 0x85, 0xdc, + 0x43, 0xef, 0xb9, 0xab, 0x32, 0xd1, 0x86, 0x30, 0xf5, 0xbd, 0x7e, 0x43, 0x8c, 0x1d, 0x9b, 0xce, + 0x48, 0x6f, 0x01, 0x34, 0x28, 0xae, 0x0b, 0xaf, 0xd9, 0x34, 0xf7, 0x3a, 0xdd, 0x16, 0x5b, 0x49, + 0x3a, 0xb1, 0x9f, 0x84, 0x86, 0xb8, 0x7e, 0x08, 0xf9, 0xf8, 0xe2, 0xc3, 0xbe, 0xe9, 0x9f, 0x5a, + 0xea, 0x24, 0x72, 0x15, 0x8a, 0x87, 0x3a, 0x84, 0x52, 0xaf, 0xfa, 0xa8, 0xdb, 0x39, 0x50, 0x49, + 0xef, 0xed, 0x4e, 0x4f, 0x5d, 0x9f, 0xe8, 0x3e, 0x7d, 0xa4, 0x8e, 0xc4, 0x1e, 0x19, 0x8d, 0xc3, + 0xdd, 0x23, 0xa2, 0xc8, 0xd5, 0x7f, 0x2b, 0x1b, 0xee, 0x6a, 0x75, 0x43, 0x9f, 0x71, 0x02, 0xe4, + 0xd1, 0x9a, 0x7b, 0x5a, 0x70, 0xf4, 0x1a, 0x2a, 0xf9, 0x6d, 0x9d, 0xab, 0x3c, 0x04, 0x4b, 0xf3, + 0x3c, 0xa4, 0x0f, 0x8f, 0x55, 0x25, 0xd2, 0xae, 0x1c, 0x39, 0xea, 0xde, 0x65, 0xef, 0x5c, 0xb2, + 0x1c, 0xfe, 0x68, 0x06, 0x67, 0x2c, 0x5f, 0xff, 0x67, 0x19, 0x28, 0x45, 0xa6, 0xf2, 0x65, 0x4c, + 0x37, 0xe7, 0xb0, 0xd6, 0x3e, 0xe8, 0xb5, 0x8c, 0x83, 0xc6, 0x9e, 0x26, 0xc9, 0xf0, 0x6b, 0xb0, + 0xbe, 0xd3, 0xde, 0x6b, 0x1d, 0xed, 0x75, 0x1a, 0xdb, 0x1a, 0x59, 0xe4, 0x37, 0x81, 0xb7, 0xf7, + 0x0f, 0x3b, 0x46, 0xef, 0xa8, 0xdd, 0x3d, 0x6a, 0x36, 0x0e, 0x9a, 0xad, 0xbd, 0xd6, 0x36, 0xcb, + 0xf3, 0x57, 0xe0, 0xee, 0x41, 0xa7, 0xd7, 0xee, 0x1c, 0x1c, 0x1d, 0x74, 0x8e, 0x3a, 0x5b, 0x1f, + 0xb5, 0x9a, 0xbd, 0xee, 0x51, 0xfb, 0xe0, 0x08, 0xa5, 0x3e, 0x32, 0x1a, 0xf8, 0x84, 0xe5, 0xf8, + 0x5d, 0xb8, 0xad, 0xa9, 0xba, 0x2d, 0xe3, 0x69, 0xcb, 0x40, 0x21, 0x4f, 0x0e, 0x1a, 0x4f, 0x1b, + 0xed, 0xbd, 0xc6, 0xd6, 0x5e, 0x8b, 0xad, 0xf2, 0x3b, 0x50, 0xd3, 0x14, 0x46, 0xa3, 0xd7, 0x3a, + 0xda, 0x6b, 0xef, 0xb7, 0x7b, 0x47, 0xad, 0xef, 0x37, 0x5b, 0xad, 0xed, 0xd6, 0x36, 0xab, 0xf0, + 0xaf, 0xc2, 0x57, 0xa8, 0x51, 0xba, 0x11, 0xd3, 0x2f, 0xfb, 0xa4, 0x7d, 0x78, 0xd4, 0x30, 0x9a, + 0xbb, 0xed, 0xa7, 0x2d, 0xb6, 0xc6, 0x5f, 0x83, 0x2f, 0x5f, 0x4e, 0xba, 0xdd, 0x36, 0x5a, 0xcd, + 0x5e, 0xc7, 0xf8, 0x98, 0x6d, 0xf0, 0x5f, 0x82, 0x2f, 0xec, 0xf6, 0xf6, 0xf7, 0x8e, 0x9e, 0x19, + 0x9d, 0x83, 0x47, 0x47, 0xf4, 0xb3, 0xdb, 0x33, 0x9e, 0x34, 0x7b, 0x4f, 0x8c, 0x16, 0x03, 0x5e, + 0x83, 0x9b, 0x87, 0x5b, 0x47, 0x07, 0x9d, 0xde, 0x51, 0xe3, 0xe0, 0xe3, 0xad, 0xbd, 0x4e, 0xf3, + 0xf1, 0xd1, 0x4e, 0xc7, 0xd8, 0x6f, 0xf4, 0x58, 0x99, 0x7f, 0x0d, 0x5e, 0x6b, 0x76, 0x9f, 0xea, + 0x66, 0x76, 0x76, 0x8e, 0x8c, 0xce, 0xb3, 0xee, 0x51, 0xc7, 0x38, 0x32, 0x5a, 0x7b, 0xd4, 0xe7, + 0x6e, 0xdc, 0xf6, 0x02, 0xbf, 0x0d, 0xd5, 0xf6, 0x41, 0xf7, 0xc9, 0xce, 0x4e, 0xbb, 0xd9, 0x6e, + 0x1d, 0xf4, 0x8e, 0x0e, 0x5b, 0xc6, 0x7e, 0xbb, 0xdb, 0x45, 0x32, 0x56, 0xaa, 0x7f, 0x17, 0xf2, + 0x6d, 0xf7, 0xcc, 0x96, 0xb4, 0xbe, 0xb4, 0x32, 0xea, 0x88, 0x2b, 0x04, 0x69, 0x59, 0xd8, 0x03, + 0x97, 0xbe, 0x27, 0x40, 0xab, 0x6b, 0xd5, 0x88, 0x11, 0xf5, 0xff, 0x92, 0x81, 0x8a, 0x12, 0x11, + 0x46, 0x70, 0xf7, 0x60, 0x5d, 0xa7, 0x42, 0xdb, 0xd3, 0x26, 0x6c, 0x16, 0x4d, 0x1f, 0xea, 0x52, + 0xa8, 0x84, 0x21, 0x4b, 0xa2, 0xf8, 0x4d, 0xc8, 0x9b, 0x7d, 0x07, 0xc3, 0x40, 0x75, 0x5e, 0xa9, + 0xa1, 0xcf, 0x6b, 0xbb, 0xd0, 0x2e, 0x2a, 0xc2, 0xbe, 0xe7, 0x36, 0xa3, 0x2b, 0x25, 0x53, 0x38, + 0xfe, 0x09, 0xdc, 0x8a, 0xe0, 0x96, 0xdb, 0xf7, 0x2f, 0xc6, 0xd1, 0x97, 0xf4, 0x0a, 0x0b, 0x93, + 0x09, 0x3b, 0xb6, 0x23, 0xa6, 0x08, 0x8d, 0xcb, 0x04, 0xf0, 0x47, 0x00, 0x36, 0x0d, 0x16, 0xf9, + 0x47, 0x8b, 0xef, 0x4d, 0x4f, 0x8d, 0xa6, 0x86, 0xb4, 0x1b, 0x18, 0xfd, 0xc6, 0x0d, 0x62, 0x80, + 0x76, 0xf7, 0xb1, 0xfe, 0xf0, 0xde, 0xaa, 0x11, 0xc1, 0xf5, 0x0e, 0x40, 0xcc, 0xc5, 0x19, 0xac, + 0xa2, 0x6f, 0xd1, 0x08, 0xf6, 0xc5, 0xe8, 0x58, 0xf8, 0xaa, 0x8a, 0x4f, 0x61, 0x1e, 0x21, 0x07, + 0x4b, 0xa1, 0xfe, 0x27, 0x49, 0x9e, 0xd9, 0x72, 0xe8, 0x4d, 0xc2, 0x2d, 0x5d, 0x5d, 0x15, 0x88, + 0xe3, 0x74, 0x15, 0x87, 0x5f, 0xb9, 0x43, 0x2d, 0x3a, 0x33, 0xc2, 0x48, 0x59, 0x0f, 0xba, 0x76, + 0x9c, 0x34, 0xc8, 0x0f, 0x81, 0xdb, 0xf3, 0x43, 0x9d, 0x5d, 0x72, 0xa8, 0x17, 0xf0, 0xce, 0xa6, + 0xfc, 0x73, 0xf3, 0x29, 0xff, 0x3b, 0x00, 0x03, 0xc7, 0x3b, 0xd6, 0xe7, 0x8e, 0x79, 0x5d, 0x17, + 0x14, 0x61, 0xea, 0x0e, 0x14, 0xc3, 0xaf, 0x0c, 0xa2, 0x0e, 0xd2, 0x77, 0x06, 0xa3, 0x04, 0xa8, + 0x82, 0xf8, 0x2e, 0xac, 0x89, 0xe9, 0x36, 0xa7, 0x97, 0x6c, 0xf3, 0x0c, 0x5f, 0xfd, 0x9b, 0xb0, + 0x31, 0x47, 0x84, 0x83, 0x38, 0x36, 0x65, 0xf4, 0xa9, 0x01, 0xfc, 0x3d, 0x7f, 0x9c, 0x5f, 0xff, + 0x77, 0x69, 0x58, 0xdd, 0x37, 0x5d, 0xfb, 0x44, 0x04, 0x32, 0x6c, 0x6d, 0xd0, 0x1f, 0x8a, 0x91, + 0x19, 0xb6, 0x56, 0x41, 0x3a, 0x2b, 0x92, 0x4e, 0x9e, 0x37, 0xcc, 0x1d, 0x4f, 0xe1, 0x6a, 0x9b, + 0xc8, 0x61, 0x54, 0x7d, 0xaf, 0x21, 0x9c, 0x3b, 0xc7, 0xee, 0x0b, 0x37, 0x08, 0x57, 0x54, 0x08, + 0xc6, 0xd5, 0x3d, 0xf9, 0x2b, 0xaa, 0x7b, 0x0a, 0xf3, 0xe3, 0x7f, 0x17, 0xca, 0x41, 0xdf, 0x17, + 0xc2, 0x0d, 0x86, 0x9e, 0x0c, 0xbf, 0x50, 0x99, 0x44, 0x51, 0xa9, 0x9d, 0xf7, 0xdc, 0xc5, 0x35, + 0xb0, 0x67, 0xbb, 0xa7, 0xba, 0x82, 0x6c, 0x0a, 0x87, 0x3a, 0x48, 0x39, 0x21, 0xfb, 0x53, 0x41, + 0xf9, 0x88, 0x9c, 0x11, 0xc1, 0x94, 0xf5, 0x31, 0xa5, 0x18, 0x78, 0xbe, 0x2d, 0x54, 0xea, 0xb3, + 0x64, 0x24, 0x30, 0xc8, 0xeb, 0x98, 0xee, 0x60, 0x62, 0x0e, 0x84, 0x3e, 0x1e, 0x8f, 0xe0, 0xfa, + 0xff, 0xc8, 0x01, 0xa8, 0xa5, 0x10, 0x0c, 0xed, 0x31, 0x1d, 0xcd, 0xd8, 0xba, 0xe6, 0xb8, 0x62, + 0xd0, 0x6f, 0xfe, 0xde, 0xd4, 0x75, 0x80, 0xf9, 0xc3, 0xd4, 0x98, 0x7d, 0x36, 0x65, 0x84, 0x83, + 0x63, 0x4a, 0xa1, 0x0b, 0xab, 0x68, 0xfc, 0xb3, 0x46, 0x12, 0x45, 0xa5, 0x75, 0xa6, 0x14, 0x2d, + 0xd7, 0x52, 0x29, 0xa9, 0xac, 0x11, 0xc1, 0x74, 0xa1, 0x28, 0x68, 0x4c, 0xa4, 0x67, 0x08, 0x57, + 0x3c, 0x8f, 0xee, 0xca, 0xc5, 0x28, 0xbe, 0x0f, 0x95, 0xb1, 0x79, 0x31, 0x12, 0xae, 0xdc, 0x17, + 0x72, 0xe8, 0x59, 0xba, 0x0a, 0xea, 0xb5, 0xcb, 0x1b, 0x78, 0x98, 0x24, 0x37, 0xa6, 0xb9, 0x51, + 0x27, 0xdc, 0x80, 0x56, 0x89, 0x9a, 0x46, 0x0d, 0xf1, 0x2d, 0x00, 0xf5, 0x2b, 0x61, 0xc9, 0xe6, + 0xb2, 0x54, 0xe6, 0x48, 0x04, 0xc2, 0x3f, 0xb3, 0x95, 0xf5, 0x55, 0x46, 0x2c, 0xe6, 0x42, 0x5b, + 0x3d, 0x09, 0x84, 0xdf, 0x1a, 0x99, 0xb6, 0xa3, 0x27, 0x38, 0x46, 0xf0, 0xb7, 0xe1, 0x46, 0x30, + 0x39, 0x46, 0x9d, 0x39, 0x16, 0x3d, 0xef, 0x40, 0x3c, 0x0f, 0x1c, 0x21, 0xa5, 0xf0, 0x75, 0xa5, + 0xc5, 0xe2, 0x87, 0xf5, 0x41, 0xe4, 0xa6, 0xd1, 0xd7, 0x50, 0xf0, 0x57, 0x5c, 0xce, 0x15, 0xa1, + 0x74, 0xad, 0x1b, 0x4b, 0xa1, 0x79, 0x54, 0x28, 0x5d, 0x0a, 0x97, 0xe6, 0x5f, 0x81, 0x2f, 0x4d, + 0x11, 0x19, 0xea, 0xe0, 0x3a, 0xd8, 0xb1, 0x5d, 0xd3, 0xb1, 0x3f, 0x55, 0x65, 0x04, 0x99, 0xfa, + 0x18, 0x2a, 0x53, 0x03, 0x47, 0x97, 0x3b, 0xe9, 0x97, 0xae, 0x07, 0x62, 0xb0, 0xaa, 0xe0, 0xae, + 0xf4, 0x6d, 0x3a, 0x91, 0x89, 0x30, 0x4d, 0x5c, 0xe7, 0x1e, 0x4b, 0xf3, 0xeb, 0xc0, 0x14, 0xa6, + 0xed, 0x9a, 0xe3, 0x71, 0x63, 0x3c, 0x76, 0x04, 0xcb, 0xd0, 0xc5, 0xd9, 0x18, 0xab, 0x2e, 0x05, + 0xb0, 0x6c, 0xfd, 0xfb, 0x70, 0x8b, 0x46, 0xe6, 0xa9, 0xf0, 0xa3, 0x40, 0x5c, 0xf7, 0xf5, 0x06, + 0x6c, 0xa8, 0x5f, 0x07, 0x9e, 0x54, 0x8f, 0xc9, 0x39, 0xe5, 0xb0, 0xa6, 0xd0, 0xe8, 0x9b, 0x75, + 0x05, 0x5d, 0x87, 0x8d, 0x70, 0x11, 0x5d, 0xba, 0xfe, 0x87, 0x79, 0xe0, 0xb1, 0x42, 0xf4, 0x6c, + 0xe1, 0x6f, 0x9b, 0xd2, 0x4c, 0x64, 0x52, 0x2b, 0x97, 0xd6, 0x02, 0xbc, 0xb8, 0x92, 0xef, 0x26, + 0xe4, 0xed, 0x00, 0x43, 0x47, 0x5d, 0xce, 0xab, 0x21, 0xbe, 0x07, 0x30, 0x16, 0xbe, 0xed, 0x59, + 0xa4, 0x41, 0xb9, 0x85, 0xb7, 0x32, 0xe6, 0x1b, 0xb5, 0x79, 0x18, 0xf1, 0x18, 0x09, 0x7e, 0x6c, + 0x87, 0x82, 0xd4, 0xc9, 0x7a, 0x9e, 0x1a, 0x9d, 0x44, 0xf1, 0x37, 0xe0, 0xda, 0xd8, 0xb7, 0xfb, + 0x42, 0x4d, 0xc7, 0x93, 0xc0, 0x6a, 0xd2, 0x37, 0x04, 0x0b, 0x44, 0xb9, 0xe8, 0x11, 0x6a, 0xa0, + 0xe9, 0x52, 0x40, 0x15, 0xd0, 0x59, 0xb2, 0xbe, 0x40, 0xae, 0x0a, 0x5e, 0x2b, 0xc6, 0xe2, 0x87, + 0xfc, 0x3e, 0x30, 0xfd, 0x60, 0xdf, 0x76, 0xf7, 0x84, 0x3b, 0x90, 0x43, 0x52, 0xee, 0x8a, 0x31, + 0x87, 0x27, 0x0b, 0xa6, 0xbe, 0xd4, 0xa4, 0xce, 0x99, 0x4a, 0x46, 0x04, 0xab, 0x8f, 0x12, 0x38, + 0x9e, 0xdf, 0x95, 0xbe, 0xae, 0xdc, 0x8d, 0x60, 0xf4, 0xb1, 0x02, 0x6a, 0xeb, 0xa1, 0xef, 0x59, + 0x13, 0x3a, 0x05, 0x51, 0x46, 0x6c, 0x16, 0x1d, 0x53, 0xee, 0x9b, 0xae, 0x2e, 0xa7, 0xac, 0x24, + 0x29, 0x23, 0x34, 0xc5, 0x8c, 0x5e, 0x10, 0x0b, 0x5c, 0xd7, 0x31, 0x63, 0x02, 0xa7, 0x69, 0x62, + 0x51, 0x2c, 0xa2, 0x89, 0xe5, 0x50, 0xff, 0x2d, 0xdf, 0xb3, 0xad, 0x58, 0x96, 0xaa, 0xec, 0x99, + 0xc3, 0x27, 0x68, 0x63, 0x99, 0x7c, 0x8a, 0x36, 0x96, 0x7b, 0x1d, 0x72, 0xde, 0xc9, 0x89, 0xf0, + 0xe9, 0xc3, 0x9c, 0x25, 0x43, 0x01, 0xf5, 0x1f, 0xa7, 0x00, 0x62, 0x95, 0xc0, 0x85, 0x10, 0x43, + 0xf1, 0xc2, 0xbf, 0x05, 0xd7, 0x92, 0x68, 0x47, 0x17, 0xca, 0xd2, 0x6a, 0x88, 0x1f, 0x6c, 0x9b, + 0x17, 0x01, 0x4b, 0xeb, 0x8b, 0xdd, 0x1a, 0xf7, 0x4c, 0x08, 0xaa, 0x3a, 0xbc, 0x0e, 0x2c, 0x46, + 0xd2, 0x6d, 0xbd, 0x80, 0x65, 0xa7, 0x49, 0x3f, 0x16, 0xa6, 0x1f, 0xb0, 0x5c, 0x7d, 0x17, 0xf2, + 0xea, 0x88, 0x6c, 0xc1, 0xe1, 0xf6, 0xcb, 0x55, 0xaa, 0xfc, 0xf5, 0x14, 0xc0, 0xb6, 0xaa, 0xaa, + 0xc6, 0xbd, 0x7d, 0x41, 0xcd, 0xc0, 0x22, 0x3f, 0xcb, 0xb4, 0x2c, 0xaa, 0x4e, 0xcf, 0x44, 0x5f, + 0x05, 0x42, 0x10, 0xf5, 0xc9, 0x0c, 0x2b, 0xcb, 0xd4, 0x4a, 0x8c, 0x60, 0xb5, 0xad, 0x34, 0x3d, + 0xd7, 0x15, 0x7d, 0xdc, 0x94, 0xa2, 0x6d, 0x25, 0x42, 0xd5, 0x7f, 0x94, 0x86, 0x52, 0x73, 0x68, + 0x4a, 0xf5, 0x11, 0x9d, 0xef, 0x42, 0x71, 0x24, 0x82, 0xc0, 0x1c, 0x88, 0x40, 0x1f, 0x09, 0xcd, + 0x9e, 0xe7, 0x46, 0xb4, 0x9b, 0x4f, 0x5c, 0x5f, 0x98, 0x96, 0xfa, 0x72, 0x50, 0xc4, 0xa5, 0x24, + 0xb8, 0x32, 0x0a, 0xd9, 0x5f, 0x42, 0x82, 0x1b, 0x7d, 0xe6, 0xd7, 0x31, 0x03, 0x45, 0x12, 0xa5, + 0xe3, 0x92, 0xa8, 0xda, 0x3e, 0x94, 0x13, 0xac, 0xfc, 0x15, 0xa8, 0x78, 0x8e, 0x25, 0x02, 0x75, + 0x77, 0x30, 0xfe, 0xdc, 0xe2, 0x14, 0x92, 0x0a, 0x3b, 0x70, 0x3d, 0x0b, 0x5f, 0x9f, 0xee, 0x85, + 0x60, 0xfd, 0x37, 0x8b, 0x50, 0xc6, 0x46, 0xed, 0xab, 0x3e, 0xcc, 0x4d, 0x47, 0x15, 0x0a, 0x9e, + 0x96, 0xac, 0x2f, 0x1d, 0x7a, 0x09, 0x99, 0xba, 0x58, 0x24, 0x33, 0x5d, 0x2c, 0x72, 0x1b, 0x4a, + 0xea, 0x28, 0xca, 0x6a, 0x28, 0xfb, 0x98, 0x31, 0x62, 0x04, 0x3a, 0x31, 0x23, 0xcf, 0x22, 0x2b, + 0xdd, 0x50, 0xa7, 0x38, 0x19, 0x23, 0x81, 0xa1, 0x30, 0x48, 0x77, 0xbf, 0xac, 0xc3, 0x20, 0x05, + 0xaa, 0xaa, 0x9d, 0xb1, 0x73, 0xd1, 0xf3, 0x74, 0x6b, 0xdb, 0x56, 0x7c, 0x77, 0x7b, 0x1a, 0xcf, + 0x9b, 0x50, 0xd0, 0xd3, 0xa2, 0xcf, 0xaa, 0xbe, 0xba, 0x60, 0x26, 0x34, 0xf9, 0xa6, 0xfe, 0xab, + 0xaf, 0x4f, 0x19, 0x21, 0x27, 0x7f, 0x04, 0x65, 0x53, 0x4a, 0xb3, 0x3f, 0x1c, 0x69, 0xab, 0x9a, + 0x59, 0x70, 0x6c, 0x9d, 0x14, 0xd4, 0x88, 0xa8, 0x8d, 0x24, 0x27, 0xdf, 0x82, 0x92, 0x2f, 0xcc, + 0xa9, 0x93, 0xf3, 0x57, 0xae, 0x10, 0x63, 0x84, 0xb4, 0x46, 0xcc, 0x16, 0x7d, 0x79, 0x14, 0x12, + 0x5f, 0x1e, 0xbd, 0x0b, 0x65, 0xad, 0x3a, 0x06, 0x3e, 0x52, 0x5f, 0x64, 0x49, 0xa2, 0x6a, 0x3f, + 0x4d, 0xc1, 0xda, 0x74, 0xf7, 0xfe, 0x34, 0xbe, 0x95, 0xf7, 0xed, 0xf8, 0x5b, 0x79, 0x9f, 0xe3, + 0xbb, 0x73, 0xbf, 0x9d, 0x02, 0x88, 0x47, 0x0e, 0xf7, 0x56, 0xf5, 0x4d, 0xaf, 0xd0, 0xdb, 0x57, + 0x10, 0xdf, 0x9d, 0xfa, 0x10, 0xc4, 0xdb, 0x4b, 0x4d, 0x43, 0xe2, 0x67, 0xa2, 0x2c, 0xfe, 0x01, + 0xac, 0x4d, 0xe3, 0xe9, 0x3a, 0x41, 0x7b, 0xaf, 0xa5, 0x72, 0x5f, 0xed, 0xfd, 0xc6, 0xa3, 0x96, + 0xbe, 0xc6, 0xd6, 0x3e, 0x78, 0xcc, 0xd2, 0xb5, 0x3f, 0x4a, 0x41, 0x29, 0x9a, 0x14, 0xfe, 0xbd, + 0xe4, 0x6c, 0xaa, 0x02, 0x9a, 0xb7, 0x96, 0x99, 0xcd, 0xf8, 0x57, 0xcb, 0x95, 0xfe, 0x45, 0x62, + 0x72, 0x6b, 0x1e, 0xac, 0x4d, 0x3f, 0x5c, 0x60, 0x66, 0x1f, 0x4d, 0x9b, 0xd9, 0x37, 0x97, 0x7a, + 0x65, 0x18, 0xe2, 0xee, 0xd9, 0x81, 0xd4, 0x16, 0xf8, 0xfd, 0xf4, 0x7b, 0xa9, 0xda, 0x5d, 0x58, + 0x4d, 0x3e, 0x9a, 0xbf, 0xc9, 0x7a, 0xff, 0x8f, 0x32, 0xb0, 0x36, 0x5d, 0x83, 0x42, 0x37, 0xe3, + 0x54, 0xfd, 0x53, 0xc7, 0xb1, 0x12, 0x37, 0x09, 0x18, 0x86, 0xdf, 0x3a, 0x88, 0x26, 0xc4, 0x06, + 0x65, 0xd7, 0xbc, 0x91, 0x60, 0x77, 0x93, 0xdf, 0x03, 0x7d, 0x83, 0x43, 0x78, 0xa3, 0x91, 0x8d, + 0x79, 0x49, 0x7f, 0x19, 0xed, 0x47, 0x69, 0x5e, 0x49, 0xd4, 0xb3, 0xff, 0x04, 0x3d, 0xc8, 0xf5, + 0xad, 0x89, 0x6b, 0x39, 0xc2, 0x8a, 0xb0, 0x3f, 0x4d, 0x62, 0xa3, 0x82, 0xf4, 0x1f, 0x65, 0xf9, + 0x1a, 0x94, 0xba, 0x93, 0x63, 0x5d, 0x8c, 0xfe, 0x97, 0xb2, 0xfc, 0x26, 0x6c, 0x68, 0xaa, 0xb8, + 0xf6, 0x93, 0xfd, 0x65, 0xdc, 0xd5, 0xd6, 0x1a, 0x6a, 0xbc, 0x74, 0x43, 0xd9, 0x5f, 0xc9, 0x62, + 0x13, 0xe8, 0xa2, 0xfc, 0x5f, 0x25, 0x39, 0xd1, 0xc5, 0x21, 0xf6, 0xab, 0x59, 0xbe, 0x0e, 0xd0, + 0xed, 0x45, 0x2f, 0xfa, 0xf5, 0x2c, 0x2f, 0x43, 0xbe, 0xdb, 0x23, 0x69, 0x3f, 0xce, 0xf2, 0x1b, + 0xc0, 0xe2, 0xa7, 0xba, 0x22, 0xf6, 0x6f, 0xa8, 0xc6, 0x44, 0x25, 0xae, 0x7f, 0x33, 0x8b, 0xfd, + 0x0a, 0x47, 0x99, 0xfd, 0xad, 0x2c, 0x67, 0x50, 0x4e, 0xe4, 0x6c, 0xd9, 0xdf, 0xce, 0x72, 0x0e, + 0x95, 0x7d, 0x3b, 0x08, 0x6c, 0x77, 0xa0, 0x7b, 0xf0, 0x6b, 0xf4, 0xe6, 0x9d, 0xe8, 0xee, 0x13, + 0xfb, 0x8d, 0x2c, 0xbf, 0x05, 0x3c, 0x79, 0x4e, 0xa5, 0x1f, 0xfc, 0x26, 0x71, 0xab, 0x9d, 0x34, + 0xd0, 0xb8, 0xbf, 0x43, 0xdc, 0xa8, 0x09, 0x1a, 0xf1, 0x5b, 0x34, 0x20, 0xcd, 0xb8, 0x86, 0x56, + 0xe3, 0x7f, 0x42, 0xcc, 0xe1, 0x64, 0x2a, 0xdc, 0x4f, 0xb3, 0xf7, 0x7f, 0x8f, 0xce, 0x19, 0x92, + 0xa5, 0x68, 0x7c, 0x15, 0x8a, 0x8e, 0xe7, 0x0e, 0xa4, 0xfa, 0x0e, 0x6b, 0x05, 0x4a, 0xc1, 0xd0, + 0xf3, 0x25, 0x81, 0x74, 0x39, 0xd3, 0xa5, 0x4b, 0xfc, 0xea, 0x3a, 0x83, 0x8a, 0x06, 0x55, 0xde, + 0x56, 0x9a, 0x03, 0x56, 0x8e, 0xaa, 0x7f, 0xb3, 0x51, 0x85, 0x32, 0x7d, 0x4c, 0x20, 0xbc, 0xac, + 0xcd, 0xf2, 0x48, 0x3a, 0xf1, 0x1d, 0x55, 0xa9, 0x2c, 0x30, 0x12, 0x50, 0x1f, 0x5c, 0x1c, 0x0f, + 0x31, 0xe0, 0x28, 0x29, 0xac, 0xf7, 0x03, 0x5b, 0x5d, 0x03, 0xd6, 0x85, 0x7f, 0x16, 0xb6, 0x23, + 0xaa, 0x6d, 0x61, 0xe2, 0xfe, 0xdf, 0x4d, 0xc1, 0x6a, 0x78, 0x85, 0xde, 0x1e, 0xd8, 0xae, 0xaa, + 0x75, 0x0e, 0xbf, 0x6e, 0xdb, 0x77, 0xec, 0x71, 0xf8, 0xb5, 0xc8, 0x75, 0x28, 0x5b, 0xbe, 0x39, + 0x68, 0xb8, 0xd6, 0xb6, 0xef, 0x8d, 0x55, 0xb3, 0xd5, 0x49, 0xa4, 0xaa, 0xb1, 0x7e, 0x2e, 0x8e, + 0x91, 0x7c, 0x2c, 0x7c, 0x96, 0xa5, 0xa2, 0xc2, 0xa1, 0xe9, 0xdb, 0xee, 0xa0, 0x75, 0x2e, 0x85, + 0x1b, 0xa8, 0x5a, 0xeb, 0x32, 0x14, 0x26, 0x81, 0xe8, 0x9b, 0x81, 0x60, 0x79, 0x04, 0x8e, 0x27, + 0xb6, 0x23, 0x6d, 0x57, 0x7d, 0xa4, 0x31, 0x2a, 0xa6, 0x2e, 0x62, 0xcf, 0xcc, 0xb1, 0xcd, 0x4a, + 0xf7, 0xff, 0x65, 0x0a, 0xca, 0xa4, 0x16, 0x71, 0xae, 0x3d, 0xf6, 0xe2, 0xca, 0x50, 0xd8, 0x8b, + 0xbe, 0xd6, 0x97, 0x87, 0x74, 0xe7, 0x54, 0xe5, 0xda, 0xb5, 0x5a, 0xa8, 0xbb, 0xae, 0xea, 0xc3, + 0x7d, 0x59, 0xfe, 0x05, 0xb8, 0x61, 0x88, 0x91, 0x27, 0xc5, 0x33, 0xd3, 0x96, 0xc9, 0x7b, 0x4d, + 0x39, 0x0c, 0x03, 0xd5, 0xa3, 0xf0, 0x22, 0x53, 0x9e, 0xc2, 0x40, 0x7c, 0x6d, 0x88, 0x29, 0x60, + 0xef, 0x09, 0xa3, 0xe3, 0xc2, 0x62, 0x44, 0xf2, 0x91, 0x67, 0xbb, 0xf8, 0x36, 0xba, 0x7f, 0x4d, + 0x18, 0x3a, 0xb4, 0x41, 0x14, 0xdc, 0x3f, 0x80, 0x9b, 0x8b, 0x8f, 0x1a, 0xd4, 0xcd, 0x6c, 0xfa, + 0x44, 0x34, 0xdd, 0x74, 0x79, 0xe6, 0xdb, 0xea, 0x0a, 0x6d, 0x09, 0x72, 0x9d, 0xe7, 0x2e, 0xa9, + 0xc5, 0x06, 0x54, 0x0e, 0xbc, 0x04, 0x0f, 0xcb, 0xdc, 0xef, 0x4f, 0x9d, 0x0e, 0xc5, 0x83, 0x12, + 0x36, 0x62, 0x25, 0x71, 0x8b, 0x2b, 0xa5, 0xce, 0x1d, 0xe8, 0xbf, 0x7c, 0xa8, 0xaf, 0x56, 0xe8, + 0x53, 0x19, 0x4b, 0x7d, 0xb5, 0x22, 0x6a, 0x66, 0x56, 0x7d, 0xbe, 0xcb, 0xed, 0x0b, 0x47, 0x58, + 0x2c, 0x77, 0xff, 0x3d, 0x58, 0xd7, 0x5d, 0xed, 0x8b, 0x20, 0x08, 0x6f, 0x41, 0x1d, 0xfa, 0xf6, + 0x99, 0xfa, 0x32, 0xc6, 0x2a, 0x14, 0x0f, 0x85, 0x1f, 0x78, 0x2e, 0x7d, 0x15, 0x04, 0x20, 0xdf, + 0x1d, 0x9a, 0x3e, 0xbe, 0xe3, 0xfe, 0xd7, 0xf5, 0x20, 0x3d, 0x39, 0x0f, 0xb7, 0x06, 0x5c, 0x3f, + 0xfa, 0xa3, 0x38, 0xa6, 0x34, 0x35, 0xb9, 0xf4, 0x85, 0x39, 0x62, 0xe9, 0xfb, 0x4d, 0x28, 0xd1, + 0x25, 0xaa, 0xc7, 0xb6, 0x6b, 0x61, 0xc7, 0xb7, 0x74, 0x41, 0x3f, 0x7d, 0xad, 0xe9, 0x8c, 0x86, + 0xa3, 0xa8, 0xbe, 0x6b, 0xcb, 0xd2, 0xfc, 0x26, 0xf0, 0xc6, 0x44, 0x7a, 0x23, 0x93, 0x2e, 0xff, + 0x3a, 0x17, 0xea, 0x1b, 0xc8, 0x99, 0xfb, 0xdf, 0x01, 0xae, 0x72, 0x73, 0x96, 0x38, 0xb7, 0xdd, + 0x41, 0xf4, 0xd5, 0x01, 0xa0, 0x4f, 0x88, 0x58, 0xe2, 0x3c, 0xbc, 0x01, 0x17, 0x02, 0xe1, 0x87, + 0x4c, 0x76, 0xbc, 0x89, 0x8b, 0x8d, 0x7e, 0x0a, 0xd7, 0x95, 0x8a, 0x61, 0x2f, 0xe8, 0x66, 0xe9, + 0xa5, 0x09, 0x03, 0x75, 0x03, 0x4e, 0x4e, 0x82, 0x88, 0x96, 0xa5, 0xb0, 0x61, 0x51, 0xb0, 0x1d, + 0xe3, 0xd3, 0xf7, 0xeb, 0x70, 0x6d, 0x41, 0xc6, 0x83, 0x8c, 0xba, 0x8a, 0xfb, 0xd8, 0xca, 0xfd, + 0x0f, 0x61, 0x43, 0x99, 0xa1, 0x03, 0x75, 0xf7, 0x2f, 0x1c, 0xb6, 0x67, 0xed, 0x9d, 0xb6, 0x1a, + 0xe9, 0x66, 0x6b, 0x6f, 0xef, 0xc9, 0x5e, 0xc3, 0x60, 0x29, 0xd2, 0x87, 0x4e, 0xef, 0xa8, 0xd9, + 0x39, 0x38, 0x68, 0x35, 0x7b, 0xad, 0x6d, 0x96, 0xde, 0xba, 0xff, 0x6f, 0x7e, 0x7e, 0x27, 0xf5, + 0xb3, 0x9f, 0xdf, 0x49, 0xfd, 0xe7, 0x9f, 0xdf, 0x49, 0xfd, 0xf8, 0xb3, 0x3b, 0x2b, 0x3f, 0xfb, + 0xec, 0xce, 0xca, 0xbf, 0xff, 0xec, 0xce, 0xca, 0x27, 0x6c, 0xf6, 0x1f, 0xf5, 0x1c, 0xe7, 0x29, + 0xa8, 0x78, 0xeb, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0xd2, 0x67, 0x4a, 0xd8, 0xc3, 0x67, 0x00, + 0x00, } func (m *SmartBlockSnapshotBase) Marshal() (dAtA []byte, err error) { diff --git a/pkg/lib/pb/model/protos/models.proto b/pkg/lib/pb/model/protos/models.proto index 92874651f..887dc0e1e 100644 --- a/pkg/lib/pb/model/protos/models.proto +++ b/pkg/lib/pb/model/protos/models.proto @@ -1207,6 +1207,7 @@ message InvitePayload { enum InviteType { JoinAsMember = 0; // aclKey contains the key to sign the ACL record JoinAsGuest = 1; // guestKey contains the privateKey of the guest user + JoinAsMemberWithoutApprove = 2; // aclKey contains the key to sign the ACL record and decrypt the read key } } diff --git a/space/join.go b/space/join.go index 124ca8c6d..4e3e004ed 100644 --- a/space/join.go +++ b/space/join.go @@ -49,6 +49,48 @@ func (s *service) Join(ctx context.Context, id, aclHeadId string) error { return nil } +func (s *service) InviteJoin(ctx context.Context, id, aclHeadId string) error { + s.mu.Lock() + waiter, exists := s.waiting[id] + if exists { + s.mu.Unlock() + <-waiter.wait + if waiter.err != nil { + return waiter.err + } + s.mu.Lock() + ctrl := s.spaceControllers[id] + s.mu.Unlock() + if ctrl.Mode() != mode.ModeLoading { + info := spaceinfo.NewSpacePersistentInfo(id) + info.SetAclHeadId(aclHeadId).SetAccountStatus(spaceinfo.AccountStatusActive) + return ctrl.SetPersistentInfo(ctx, info) + } + return nil + } + wait := make(chan struct{}) + s.waiting[id] = controllerWaiter{ + wait: wait, + } + s.mu.Unlock() + ctrl, err := s.factory.CreateActiveSpace(ctx, id, aclHeadId) + if err != nil { + s.mu.Lock() + close(wait) + s.waiting[id] = controllerWaiter{ + wait: wait, + err: err, + } + s.mu.Unlock() + return err + } + s.mu.Lock() + close(wait) + s.spaceControllers[ctrl.SpaceId()] = ctrl + s.mu.Unlock() + return nil +} + func (s *service) CancelLeave(ctx context.Context, id string) error { info := spaceinfo.NewSpacePersistentInfo(id) info.SetAccountStatus(spaceinfo.AccountStatusActive) diff --git a/space/service.go b/space/service.go index afb4983be..2e2db021f 100644 --- a/space/service.go +++ b/space/service.go @@ -61,6 +61,7 @@ type Service interface { Create(ctx context.Context) (space clientspace.Space, err error) Join(ctx context.Context, id, aclHeadId string) error + InviteJoin(ctx context.Context, id, aclHeadId string) error CancelLeave(ctx context.Context, id string) (err error) Get(ctx context.Context, id string) (space clientspace.Space, err error) Wait(ctx context.Context, spaceId string) (sp clientspace.Space, err error) diff --git a/space/spacefactory/spacefactory.go b/space/spacefactory/spacefactory.go index 65dcf5d9f..04548282e 100644 --- a/space/spacefactory/spacefactory.go +++ b/space/spacefactory/spacefactory.go @@ -32,6 +32,7 @@ type SpaceFactory interface { NewShareableSpace(ctx context.Context, id string, info spaceinfo.SpacePersistentInfo) (spacecontroller.SpaceController, error) CreateStreamableSpace(ctx context.Context, privKey crypto.PrivKey, id string, metadata []byte) (spacecontroller.SpaceController, error) NewStreamableSpace(ctx context.Context, id string, info spaceinfo.SpacePersistentInfo, metadata []byte) (spacecontroller.SpaceController, error) + CreateActiveSpace(ctx context.Context, id, aclHeadId string) (sp spacecontroller.SpaceController, err error) CreateMarketplaceSpace(ctx context.Context) (sp spacecontroller.SpaceController, err error) CreateAndSetTechSpace(ctx context.Context) (*clientspace.TechSpace, error) LoadAndSetTechSpace(ctx context.Context) (*clientspace.TechSpace, error) @@ -208,6 +209,26 @@ func (s *spaceFactory) CreateInvitingSpace(ctx context.Context, id, aclHeadId st return ctrl, err } +func (s *spaceFactory) CreateActiveSpace(ctx context.Context, id, aclHeadId string) (sp spacecontroller.SpaceController, err error) { + exists, err := s.techSpace.SpaceViewExists(ctx, id) + if err != nil { + return + } + info := spaceinfo.NewSpacePersistentInfo(id) + info.SetAclHeadId(aclHeadId).SetAccountStatus(spaceinfo.AccountStatusActive) + if !exists { + if err := s.techSpace.SpaceViewCreate(ctx, id, true, info); err != nil { + return nil, err + } + } + ctrl, err := shareablespace.NewSpaceController(id, info, s.app) + if err != nil { + return nil, err + } + err = ctrl.Start(ctx) + return ctrl, err +} + func (s *spaceFactory) CreateShareableSpace(ctx context.Context, id string) (sp spacecontroller.SpaceController, err error) { coreSpace, err := s.spaceCore.Get(ctx, id) if err != nil { From dccb0eb469feca78eb81aca96845af466e0da143 Mon Sep 17 00:00:00 2001 From: Mikhail Rakhmanov Date: Tue, 13 May 2025 15:53:26 +0200 Subject: [PATCH 029/164] GO-4400 Make compile --- core/debug/exporter/exporter.go | 1 + 1 file changed, 1 insertion(+) diff --git a/core/debug/exporter/exporter.go b/core/debug/exporter/exporter.go index 1e9fa7db2..6ece646cf 100644 --- a/core/debug/exporter/exporter.go +++ b/core/debug/exporter/exporter.go @@ -5,6 +5,7 @@ import ( "fmt" anystore "github.com/anyproto/any-store" + "github.com/anyproto/any-sync/app" "github.com/anyproto/any-sync/commonspace/headsync/headstorage" "github.com/anyproto/any-sync/commonspace/object/accountdata" "github.com/anyproto/any-sync/commonspace/object/acl/list" From 81f858d1fea14c6559765a856dd13215503d6b8c Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Tue, 13 May 2025 18:31:01 +0200 Subject: [PATCH 030/164] GO-5589: Update operation IDs to use snake_case format in openapi spec --- core/api/docs/docs.go | 2 +- core/api/docs/swagger.json | 2 +- core/api/docs/swagger.yaml | 72 ++++++++++++++++++------------------ core/api/handler/auth.go | 4 +- core/api/handler/list.go | 8 ++-- core/api/handler/member.go | 6 +-- core/api/handler/object.go | 10 ++--- core/api/handler/property.go | 10 ++--- core/api/handler/search.go | 4 +- core/api/handler/space.go | 8 ++-- core/api/handler/tag.go | 10 ++--- core/api/handler/template.go | 4 +- core/api/handler/type.go | 10 ++--- 13 files changed, 75 insertions(+), 75 deletions(-) diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go index 0157e15f5..f6e1254ec 100644 --- a/core/api/docs/docs.go +++ b/core/api/docs/docs.go @@ -9,7 +9,7 @@ const docTemplate = `{ "components": {"schemas":{"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"creator","type":"string"},"objects":{"description":"The object values of the property","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to search for, specified by key or ID","example":["page","678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"status","type":"string"},"select":{"description":"The selected tag value of the property","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"required":["direction","property_key"],"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TokenResponse":{"properties":{"app_key":{"description":"The app key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, "info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-api/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"}, "externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"}, - "paths": {"/auth/display_code":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid ` + "`" + `app_name` + "`" + `, the server issues a unique ` + "`" + `challenge_id` + "`" + ` and displays a short code within the Anytype Desktop On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"createAuthChallenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.DisplayCodeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["Auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent app key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.","operationId":"solveAuthChallenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TokenResponse"}}},"description":"The app key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Solve challenge","tags":["Auth"]}},"/search":{"post":{"description":"Executes a global search over every space accessible by the authenticated user. The request body must specify the ` + "`" + `query` + "`" + ` text, optional filters on object types (e.g., \"page\", \"task\"), and sort directives (default: descending by last updated timestamp). Pagination is controlled via ` + "`" + `offset` + "`" + ` and ` + "`" + `limit` + "`" + ` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"searchGlobal","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"listSpaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"createSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"getSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"updateSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"addListObjects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"The list of object IDs to add to the list","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"removeListObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"getListViews","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"getListObjects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"listMembers","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"getMember","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"listObjects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"createObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"getObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"updateObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"listProperties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"createProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"getProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"updateProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"listTags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"createTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"getTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"updateTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/spaces/{space_id}/search":{"post":{"description":"Performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"searchSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"listTypes","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new object type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"createType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an object type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"getType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing object type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"updateType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"listTemplates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to retrieve templates for","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"getTemplate","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to which the template belongs","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, + "paths": {"/auth/display_code":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid ` + "`" + `app_name` + "`" + `, the server issues a unique ` + "`" + `challenge_id` + "`" + ` and displays a short code within the Anytype Desktop On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"create_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.DisplayCodeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["Auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent app key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.","operationId":"solve_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TokenResponse"}}},"description":"The app key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Solve challenge","tags":["Auth"]}},"/search":{"post":{"description":"Executes a global search over every space accessible by the authenticated user. The request body must specify the ` + "`" + `query` + "`" + ` text, optional filters on object types (e.g., \"page\", \"task\"), and sort directives (default: descending by last updated timestamp). Pagination is controlled via ` + "`" + `offset` + "`" + ` and ` + "`" + `limit` + "`" + ` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"search_global","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"list_spaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"create_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"get_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"update_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"add_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"The list of object IDs to add to the list","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"remove_list_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"get_list_views","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"get_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"list_members","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"get_member","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"create_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"get_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"update_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"list_properties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"create_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"get_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"update_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"list_tags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"create_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"get_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"update_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/spaces/{space_id}/search":{"post":{"description":"Performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"search_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"list_types","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new object type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"create_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an object type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"get_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing object type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"update_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"list_templates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to retrieve templates for","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"get_template","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to which the template belongs","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, "openapi": "3.1.0", "servers": [ {"url":"http://localhost:31009/v1"} diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json index 14058da09..b40322f3f 100644 --- a/core/api/docs/swagger.json +++ b/core/api/docs/swagger.json @@ -2,7 +2,7 @@ "components": {"schemas":{"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"creator","type":"string"},"objects":{"description":"The object values of the property","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to search for, specified by key or ID","example":["page","678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"status","type":"string"},"select":{"description":"The selected tag value of the property","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"required":["direction","property_key"],"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TokenResponse":{"properties":{"app_key":{"description":"The app key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, "info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"This API empowers seamless interaction with Anytype's resources—spaces, objects, properties, types, templates, and beyond.","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-api/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"Anytype API","version":"2025-05-20"}, "externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"}, - "paths": {"/auth/display_code":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid `app_name`, the server issues a unique `challenge_id` and displays a short code within the Anytype Desktop On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"createAuthChallenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.DisplayCodeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["Auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent app key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.","operationId":"solveAuthChallenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TokenResponse"}}},"description":"The app key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Solve challenge","tags":["Auth"]}},"/search":{"post":{"description":"Executes a global search over every space accessible by the authenticated user. The request body must specify the `query` text, optional filters on object types (e.g., \"page\", \"task\"), and sort directives (default: descending by last updated timestamp). Pagination is controlled via `offset` and `limit` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"searchGlobal","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"listSpaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"createSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"getSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"updateSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"addListObjects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"The list of object IDs to add to the list","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"removeListObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"getListViews","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"getListObjects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"listMembers","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with `_participant`) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"getMember","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"listObjects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"createObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"getObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"updateObject","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"listProperties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"createProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"getProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"updateProperty","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"listTags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"createTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"getTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"updateTag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/spaces/{space_id}/search":{"post":{"description":"Performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"searchSpace","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"listTypes","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new object type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"createType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an object type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"deleteType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"getType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing object type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"updateType","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"listTemplates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to retrieve templates for","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"getTemplate","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to which the template belongs","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, + "paths": {"/auth/display_code":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid `app_name`, the server issues a unique `challenge_id` and displays a short code within the Anytype Desktop On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"create_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.DisplayCodeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["Auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent app key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.","operationId":"solve_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TokenResponse"}}},"description":"The app key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Solve challenge","tags":["Auth"]}},"/search":{"post":{"description":"Executes a global search over every space accessible by the authenticated user. The request body must specify the `query` text, optional filters on object types (e.g., \"page\", \"task\"), and sort directives (default: descending by last updated timestamp). Pagination is controlled via `offset` and `limit` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"search_global","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"list_spaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"create_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"get_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"update_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"add_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"The list of object IDs to add to the list","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"remove_list_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"get_list_views","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"get_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"list_members","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with `_participant`) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"get_member","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"create_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"get_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"update_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"list_properties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"create_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"get_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"update_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"list_tags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"create_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"get_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"update_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/spaces/{space_id}/search":{"post":{"description":"Performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"search_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"list_types","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new object type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"create_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an object type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"get_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing object type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"update_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"list_templates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to retrieve templates for","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"get_template","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to which the template belongs","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, "openapi": "3.1.0", "servers": [ {"url":"http://localhost:31009/v1"} diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml index 62e75191f..a77b8d91b 100644 --- a/core/api/docs/swagger.yaml +++ b/core/api/docs/swagger.yaml @@ -1453,7 +1453,7 @@ paths: ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access. - operationId: createAuthChallenge + operationId: create_auth_challenge parameters: - description: The version of the API to use in: header @@ -1504,7 +1504,7 @@ paths: app key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API. - operationId: solveAuthChallenge + operationId: solve_auth_challenge parameters: - description: The version of the API to use in: header @@ -1561,7 +1561,7 @@ paths: by last updated timestamp). Pagination is controlled via `offset` and `limit` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.' - operationId: searchGlobal + operationId: search_global parameters: - description: The version of the API to use in: header @@ -1621,7 +1621,7 @@ paths: the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces. - operationId: listSpaces + operationId: list_spaces parameters: - description: The version of the API to use in: header @@ -1675,7 +1675,7 @@ paths: the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal. - operationId: createSpace + operationId: create_space parameters: - description: The version of the API to use in: header @@ -1733,7 +1733,7 @@ paths: ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings. - operationId: getSpace + operationId: get_space parameters: - description: The version of the API to use in: header @@ -1783,7 +1783,7 @@ paths: body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response. - operationId: updateSpace + operationId: update_space parameters: - description: The version of the API to use in: header @@ -1861,7 +1861,7 @@ paths: that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data. - operationId: addListObjects + operationId: add_list_objects parameters: - description: The version of the API to use in: header @@ -1939,7 +1939,7 @@ paths: in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data. - operationId: removeListObject + operationId: remove_list_object parameters: - description: The version of the API to use in: header @@ -2016,7 +2016,7 @@ paths: according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria. - operationId: getListViews + operationId: get_list_views parameters: - description: The version of the API to use in: header @@ -2087,7 +2087,7 @@ paths: no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list. - operationId: getListObjects + operationId: get_list_objects parameters: - description: The version of the API to use in: header @@ -2164,7 +2164,7 @@ paths: (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights. - operationId: listMembers + operationId: list_members parameters: - description: The version of the API to use in: header @@ -2225,7 +2225,7 @@ paths: the member's ID (starting with `_participant`) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments. - operationId: getMember + operationId: get_member parameters: - description: The version of the API to use in: header @@ -2284,7 +2284,7 @@ paths: of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance. - operationId: listObjects + operationId: list_objects parameters: - description: The version of the API to use in: header @@ -2346,7 +2346,7 @@ paths: of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions. - operationId: createObject + operationId: create_object parameters: - description: The version of the API to use in: header @@ -2411,7 +2411,7 @@ paths: the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues. - operationId: deleteObject + operationId: delete_object parameters: - description: The version of the API to use in: header @@ -2487,7 +2487,7 @@ paths: text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view. - operationId: getObject + operationId: get_object parameters: - description: The version of the API to use in: header @@ -2557,7 +2557,7 @@ paths: using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions. - operationId: updateObject + operationId: update_object parameters: - description: The version of the API to use in: header @@ -2640,7 +2640,7 @@ paths: space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.' - operationId: listProperties + operationId: list_properties parameters: - description: The version of the API to use in: header @@ -2699,7 +2699,7 @@ paths: The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.' - operationId: createProperty + operationId: create_property parameters: - description: The version of the API to use in: header @@ -2765,7 +2765,7 @@ paths: the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.' - operationId: deleteProperty + operationId: delete_property parameters: - description: The version of the API to use in: header @@ -2841,7 +2841,7 @@ paths: detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).' - operationId: getProperty + operationId: get_property parameters: - description: The version of the API to use in: header @@ -2904,7 +2904,7 @@ paths: using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.' - operationId: updateProperty + operationId: update_property parameters: - description: The version of the API to use in: header @@ -2993,7 +2993,7 @@ paths: name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters. - operationId: listTags + operationId: list_tags parameters: - description: The version of the API to use in: header @@ -3051,7 +3051,7 @@ paths: the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property. - operationId: createTag + operationId: create_tag parameters: - description: The version of the API to use in: header @@ -3122,7 +3122,7 @@ paths: tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues. - operationId: deleteTag + operationId: delete_tag parameters: - description: The version of the API to use in: header @@ -3202,7 +3202,7 @@ paths: is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option. - operationId: getTag + operationId: get_tag parameters: - description: The version of the API to use in: header @@ -3272,7 +3272,7 @@ paths: tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property. - operationId: updateTag + operationId: update_tag parameters: - description: The version of the API to use in: header @@ -3368,7 +3368,7 @@ paths: preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results. - operationId: searchSpace + operationId: search_space parameters: - description: The version of the API to use in: header @@ -3437,7 +3437,7 @@ paths: for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search. - operationId: listTypes + operationId: list_types parameters: - description: The version of the API to use in: header @@ -3495,7 +3495,7 @@ paths: The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects. - operationId: createType + operationId: create_type parameters: - description: The version of the API to use in: header @@ -3560,7 +3560,7 @@ paths: It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues. - operationId: deleteType + operationId: delete_type parameters: - description: The version of the API to use in: header @@ -3635,7 +3635,7 @@ paths: detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints). - operationId: getType + operationId: get_type parameters: - description: The version of the API to use in: header @@ -3697,7 +3697,7 @@ paths: space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions. - operationId: updateType + operationId: update_type parameters: - description: The version of the API to use in: header @@ -3780,7 +3780,7 @@ paths: structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects. - operationId: listTemplates + operationId: list_templates parameters: - description: The version of the API to use in: header @@ -3845,7 +3845,7 @@ paths: object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields. - operationId: getTemplate + operationId: get_template parameters: - description: The version of the API to use in: header diff --git a/core/api/handler/auth.go b/core/api/handler/auth.go index c31072882..708e4b0b5 100644 --- a/core/api/handler/auth.go +++ b/core/api/handler/auth.go @@ -14,7 +14,7 @@ import ( // // @Summary Start new challenge // @Description Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid `app_name`, the server issues a unique `challenge_id` and displays a short code within the Anytype Desktop On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access. -// @ID createAuthChallenge +// @ID create_auth_challenge // @Tags Auth // @Accept json // @Produce json @@ -47,7 +47,7 @@ func DisplayCodeHandler(s *service.Service) gin.HandlerFunc { // // @Summary Solve challenge // @Description After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent app key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API. -// @ID solveAuthChallenge +// @ID solve_auth_challenge // @Tags Auth // @Accept json // @Produce json diff --git a/core/api/handler/list.go b/core/api/handler/list.go index fd19e35e2..490dc1336 100644 --- a/core/api/handler/list.go +++ b/core/api/handler/list.go @@ -14,7 +14,7 @@ import ( // // @Summary Get list views // @Description Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria. -// @Id getListViews +// @Id get_list_views // @Tags Lists // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) @@ -55,7 +55,7 @@ func GetListViewsHandler(s *service.Service) gin.HandlerFunc { // // @Summary Get objects in list // @Description Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list. -// @Id getListObjects +// @Id get_list_objects // @Tags Lists // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) @@ -102,7 +102,7 @@ func GetObjectsInListHandler(s *service.Service) gin.HandlerFunc { // // @Summary Add objects to list // @Description Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data. -// @Id addListObjects +// @Id add_list_objects // @Tags Lists // @Accept json // @Produce json @@ -149,7 +149,7 @@ func AddObjectsToListHandler(s *service.Service) gin.HandlerFunc { // // @Summary Remove object from list // @Description Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data. -// @Id removeListObject +// @Id remove_list_object // @Tags Lists // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) diff --git a/core/api/handler/member.go b/core/api/handler/member.go index dc0d13e28..bbcfe98ee 100644 --- a/core/api/handler/member.go +++ b/core/api/handler/member.go @@ -15,7 +15,7 @@ import ( // // @Summary List members // @Description Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights. -// @Id listMembers +// @Id list_members // @Tags Members // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) @@ -52,7 +52,7 @@ func ListMembersHandler(s *service.Service) gin.HandlerFunc { // // @Summary Get member // @Description Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with `_participant`) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments. -// @Id getMember +// @Id get_member // @Tags Members // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) @@ -90,7 +90,7 @@ func GetMemberHandler(s *service.Service) gin.HandlerFunc { // // @Summary Update member // @Description Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to `active` and specifying a role (`reader` or `writer`), reject a joining member by setting the status to `declined`, remove a member by setting the status to `removed`, or update an active member's role. This endpoint enables fine-grained control over member access and permissions. -// @Id updateMember +// @Id update_member // @Tags Members // @Accept json // @Produce json diff --git a/core/api/handler/object.go b/core/api/handler/object.go index 1e0d752dc..73ffb1929 100644 --- a/core/api/handler/object.go +++ b/core/api/handler/object.go @@ -15,7 +15,7 @@ import ( // // @Summary List objects // @Description Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance. -// @Id listObjects +// @Id list_objects // @Tags Objects // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) @@ -54,7 +54,7 @@ func ListObjectsHandler(s *service.Service) gin.HandlerFunc { // // @Summary Get object // @Description Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view. -// @Id getObject +// @Id get_object // @Tags Objects // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) @@ -96,7 +96,7 @@ func GetObjectHandler(s *service.Service) gin.HandlerFunc { // // @Summary Create object // @Description Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions. -// @Id createObject +// @Id create_object // @Tags Objects // @Accept json // @Produce json @@ -147,7 +147,7 @@ func CreateObjectHandler(s *service.Service) gin.HandlerFunc { // // @Summary Update object // @Description This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions. -// @Id updateObject +// @Id update_object // @Tags Objects // @Accept json // @Produce json @@ -199,7 +199,7 @@ func UpdateObjectHandler(s *service.Service) gin.HandlerFunc { // // @Summary Delete object // @Description This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues. -// @Id deleteObject +// @Id delete_object // @Tags Objects // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) diff --git a/core/api/handler/property.go b/core/api/handler/property.go index cc7caa648..63c03b169 100644 --- a/core/api/handler/property.go +++ b/core/api/handler/property.go @@ -15,7 +15,7 @@ import ( // // @Summary List properties // @Description ⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects. -// @Id listProperties +// @Id list_properties // @Tags Properties // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) @@ -52,7 +52,7 @@ func ListPropertiesHandler(s *service.Service) gin.HandlerFunc { // // @Summary Get property // @Description ⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options). -// @Id getProperty +// @Id get_property // @Tags Properties // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) @@ -91,7 +91,7 @@ func GetPropertyHandler(s *service.Service) gin.HandlerFunc { // // @Summary Create property // @Description ⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions. -// @Id createProperty +// @Id create_property // @Tags Properties // @Accept json // @Produce json @@ -137,7 +137,7 @@ func CreatePropertyHandler(s *service.Service) gin.HandlerFunc { // // @Summary Update property // @Description ⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions. -// @Id updateProperty +// @Id update_property // @Tags Properties // @Accept json // @Produce json @@ -191,7 +191,7 @@ func UpdatePropertyHandler(s *service.Service) gin.HandlerFunc { // // @Summary Delete property // @Description ⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues. -// @Id deleteProperty +// @Id delete_property // @Tags Properties // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) diff --git a/core/api/handler/search.go b/core/api/handler/search.go index f4d5d92e0..2d70c0d4f 100644 --- a/core/api/handler/search.go +++ b/core/api/handler/search.go @@ -15,7 +15,7 @@ import ( // // @Summary Search objects across all spaces // @Description Executes a global search over every space accessible by the authenticated user. The request body must specify the `query` text, optional filters on object types (e.g., "page", "task"), and sort directives (default: descending by last updated timestamp). Pagination is controlled via `offset` and `limit` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties. -// @Id searchGlobal +// @Id search_global // @Tags Search // @Accept json // @Produce json @@ -59,7 +59,7 @@ func GlobalSearchHandler(s *service.Service) gin.HandlerFunc { // // @Summary Search objects within a space // @Description Performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results. -// @Id searchSpace +// @Id search_space // @Tags Search // @Accept json // @Produce json diff --git a/core/api/handler/space.go b/core/api/handler/space.go index 21fdb3a6a..cbdac0070 100644 --- a/core/api/handler/space.go +++ b/core/api/handler/space.go @@ -15,7 +15,7 @@ import ( // // @Summary List spaces // @Description Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces. -// @Id listSpaces +// @Id list_spaces // @Tags Spaces // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) @@ -52,7 +52,7 @@ func ListSpacesHandler(s *service.Service) gin.HandlerFunc { // // @Summary Get space // @Description Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings. -// @Id getSpace +// @Id get_space // @Tags Spaces // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) @@ -88,7 +88,7 @@ func GetSpaceHandler(s *service.Service) gin.HandlerFunc { // // @Summary Create space // @Description Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal. -// @Id createSpace +// @Id create_space // @Tags Spaces // @Accept json // @Produce json @@ -132,7 +132,7 @@ func CreateSpaceHandler(s *service.Service) gin.HandlerFunc { // // @Summary Update space // @Description Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response. -// @Id updateSpace +// @Id update_space // @Tags Spaces // @Accept json // @Produce json diff --git a/core/api/handler/tag.go b/core/api/handler/tag.go index 5b7865eb2..9dd89a139 100644 --- a/core/api/handler/tag.go +++ b/core/api/handler/tag.go @@ -15,7 +15,7 @@ import ( // // @Summary List tags // @Description This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters. -// @Id listTags +// @Id list_tags // @Tags Tags // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) @@ -54,7 +54,7 @@ func ListTagsHandler(s *service.Service) gin.HandlerFunc { // // @Summary Get tag // @Description This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option. -// @Id getTag +// @Id get_tag // @Tags Tags // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) @@ -95,7 +95,7 @@ func GetTagHandler(s *service.Service) gin.HandlerFunc { // // @Summary Create tag // @Description This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property. -// @Id createTag +// @Id create_tag // @Tags Tags // @Accept json // @Produce json @@ -143,7 +143,7 @@ func CreateTagHandler(s *service.Service) gin.HandlerFunc { // // @Summary Update tag // @Description This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property. -// @Id updateTag +// @Id update_tag // @Tags Tags // @Accept json // @Produce json @@ -198,7 +198,7 @@ func UpdateTagHandler(s *service.Service) gin.HandlerFunc { // // @Summary Delete tag // @Description This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues. -// @Id deleteTag +// @Id delete_tag // @Tags Tags // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) diff --git a/core/api/handler/template.go b/core/api/handler/template.go index dbeec9a4d..a20b35d17 100644 --- a/core/api/handler/template.go +++ b/core/api/handler/template.go @@ -15,7 +15,7 @@ import ( // // @Summary List templates // @Description This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects. -// @Id listTemplates +// @Id list_templates // @Tags Templates // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) @@ -57,7 +57,7 @@ func ListTemplatesHandler(s *service.Service) gin.HandlerFunc { // // @Summary Get template // @Description Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields. -// @Id getTemplate +// @Id get_template // @Tags Templates // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) diff --git a/core/api/handler/type.go b/core/api/handler/type.go index d4fb56cc8..4e16f0380 100644 --- a/core/api/handler/type.go +++ b/core/api/handler/type.go @@ -15,7 +15,7 @@ import ( // // @Summary List types // @Description This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search. -// @Id listTypes +// @Id list_types // @Tags Types // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) @@ -52,7 +52,7 @@ func ListTypesHandler(s *service.Service) gin.HandlerFunc { // // @Summary Get type // @Description Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints). -// @Id getType +// @Id get_type // @Tags Types // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) @@ -91,7 +91,7 @@ func GetTypeHandler(s *service.Service) gin.HandlerFunc { // // @Summary Create type // @Description Creates a new object type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects. -// @Id createType +// @Id create_type // @Tags Types // @Accept json // @Produce json @@ -137,7 +137,7 @@ func CreateTypeHandler(s *service.Service) gin.HandlerFunc { // // @Summary Update type // @Description This endpoint updates an existing object type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions. -// @Id updateType +// @Id update_type // @Tags Types // @Accept json // @Produce json @@ -189,7 +189,7 @@ func UpdateTypeHandler(s *service.Service) gin.HandlerFunc { // // @Summary Delete type // @Description This endpoint “deletes” an object type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues. -// @Id deleteType +// @Id delete_type // @Tags Types // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) From 897da0e6be7a7a5e795ad19baa0c6a9032bfd351 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Tue, 13 May 2025 23:27:52 +0200 Subject: [PATCH 031/164] GO-5589: Move v1 versioning from server to url paths --- core/api/docs/docs.go | 4 ++-- core/api/docs/swagger.json | 4 ++-- core/api/docs/swagger.yaml | 46 ++++++++++++++++++------------------ core/api/handler/auth.go | 4 ++-- core/api/handler/list.go | 8 +++---- core/api/handler/member.go | 6 ++--- core/api/handler/object.go | 10 ++++---- core/api/handler/property.go | 10 ++++---- core/api/handler/search.go | 4 ++-- core/api/handler/space.go | 8 +++---- core/api/handler/tag.go | 10 ++++---- core/api/handler/template.go | 4 ++-- core/api/handler/type.go | 10 ++++---- core/api/service.go | 1 - 14 files changed, 64 insertions(+), 65 deletions(-) diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go index f6e1254ec..d4d57686b 100644 --- a/core/api/docs/docs.go +++ b/core/api/docs/docs.go @@ -9,10 +9,10 @@ const docTemplate = `{ "components": {"schemas":{"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"creator","type":"string"},"objects":{"description":"The object values of the property","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to search for, specified by key or ID","example":["page","678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"status","type":"string"},"select":{"description":"The selected tag value of the property","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"required":["direction","property_key"],"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TokenResponse":{"properties":{"app_key":{"description":"The app key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, "info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-api/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"}, "externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"}, - "paths": {"/auth/display_code":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid ` + "`" + `app_name` + "`" + `, the server issues a unique ` + "`" + `challenge_id` + "`" + ` and displays a short code within the Anytype Desktop On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"create_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.DisplayCodeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["Auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent app key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.","operationId":"solve_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TokenResponse"}}},"description":"The app key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Solve challenge","tags":["Auth"]}},"/search":{"post":{"description":"Executes a global search over every space accessible by the authenticated user. The request body must specify the ` + "`" + `query` + "`" + ` text, optional filters on object types (e.g., \"page\", \"task\"), and sort directives (default: descending by last updated timestamp). Pagination is controlled via ` + "`" + `offset` + "`" + ` and ` + "`" + `limit` + "`" + ` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"search_global","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"list_spaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"create_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"get_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"update_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"add_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"The list of object IDs to add to the list","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"remove_list_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"get_list_views","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"get_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"list_members","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"get_member","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"create_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"get_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"update_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"list_properties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"create_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"get_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"update_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"list_tags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"create_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"get_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"update_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/spaces/{space_id}/search":{"post":{"description":"Performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"search_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"list_types","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new object type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"create_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an object type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"get_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing object type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"update_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"list_templates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to retrieve templates for","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"get_template","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to which the template belongs","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, + "paths": {"/v1/auth/display_code":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid ` + "`" + `app_name` + "`" + `, the server issues a unique ` + "`" + `challenge_id` + "`" + ` and displays a short code within the Anytype Desktop On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"create_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.DisplayCodeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["Auth"]}},"/v1/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent app key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.","operationId":"solve_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TokenResponse"}}},"description":"The app key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Solve challenge","tags":["Auth"]}},"/v1/search":{"post":{"description":"Executes a global search over every space accessible by the authenticated user. The request body must specify the ` + "`" + `query` + "`" + ` text, optional filters on object types (e.g., \"page\", \"task\"), and sort directives (default: descending by last updated timestamp). Pagination is controlled via ` + "`" + `offset` + "`" + ` and ` + "`" + `limit` + "`" + ` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"search_global","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/v1/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"list_spaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"create_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/v1/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"get_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"update_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"add_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"The list of object IDs to add to the list","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"remove_list_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"get_list_views","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"get_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/v1/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"list_members","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/v1/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"get_member","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/v1/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"create_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/v1/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"get_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"update_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/v1/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"list_properties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"create_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"get_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"update_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"list_tags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"create_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"get_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"update_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/v1/spaces/{space_id}/search":{"post":{"description":"Performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"search_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/v1/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"list_types","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new object type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"create_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an object type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"get_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing object type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"update_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"list_templates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to retrieve templates for","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/v1/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"get_template","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to which the template belongs","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, "openapi": "3.1.0", "servers": [ - {"url":"http://localhost:31009/v1"} + {"url":"http://localhost:31009"} ] }` diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json index b40322f3f..c50495d28 100644 --- a/core/api/docs/swagger.json +++ b/core/api/docs/swagger.json @@ -2,9 +2,9 @@ "components": {"schemas":{"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"creator","type":"string"},"objects":{"description":"The object values of the property","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to search for, specified by key or ID","example":["page","678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"status","type":"string"},"select":{"description":"The selected tag value of the property","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"required":["direction","property_key"],"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TokenResponse":{"properties":{"app_key":{"description":"The app key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, "info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"This API empowers seamless interaction with Anytype's resources—spaces, objects, properties, types, templates, and beyond.","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-api/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"Anytype API","version":"2025-05-20"}, "externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"}, - "paths": {"/auth/display_code":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid `app_name`, the server issues a unique `challenge_id` and displays a short code within the Anytype Desktop On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"create_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.DisplayCodeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["Auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent app key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.","operationId":"solve_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TokenResponse"}}},"description":"The app key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Solve challenge","tags":["Auth"]}},"/search":{"post":{"description":"Executes a global search over every space accessible by the authenticated user. The request body must specify the `query` text, optional filters on object types (e.g., \"page\", \"task\"), and sort directives (default: descending by last updated timestamp). Pagination is controlled via `offset` and `limit` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"search_global","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"list_spaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"create_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"get_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"update_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"add_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"The list of object IDs to add to the list","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"remove_list_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"get_list_views","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"get_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"list_members","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with `_participant`) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"get_member","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"create_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"get_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"update_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"list_properties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"create_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"get_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"update_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"list_tags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"create_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"get_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"update_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/spaces/{space_id}/search":{"post":{"description":"Performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"search_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"list_types","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new object type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"create_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an object type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"get_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing object type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"update_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"list_templates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to retrieve templates for","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"get_template","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to which the template belongs","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, + "paths": {"/v1/auth/display_code":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid `app_name`, the server issues a unique `challenge_id` and displays a short code within the Anytype Desktop On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"create_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.DisplayCodeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["Auth"]}},"/v1/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent app key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.","operationId":"solve_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TokenResponse"}}},"description":"The app key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Solve challenge","tags":["Auth"]}},"/v1/search":{"post":{"description":"Executes a global search over every space accessible by the authenticated user. The request body must specify the `query` text, optional filters on object types (e.g., \"page\", \"task\"), and sort directives (default: descending by last updated timestamp). Pagination is controlled via `offset` and `limit` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"search_global","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/v1/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"list_spaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"create_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/v1/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"get_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"update_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"add_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"The list of object IDs to add to the list","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"remove_list_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"get_list_views","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"get_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/v1/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"list_members","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/v1/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with `_participant`) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"get_member","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/v1/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"create_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/v1/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"get_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"update_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/v1/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"list_properties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"create_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"get_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"update_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"list_tags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"create_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"get_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"update_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/v1/spaces/{space_id}/search":{"post":{"description":"Performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"search_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/v1/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"list_types","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new object type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"create_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an object type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"get_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing object type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"update_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"list_templates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to retrieve templates for","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/v1/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"get_template","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to which the template belongs","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, "openapi": "3.1.0", "servers": [ - {"url":"http://localhost:31009/v1"} + {"url":"http://localhost:31009"} ] } \ No newline at end of file diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml index a77b8d91b..5ae8f004f 100644 --- a/core/api/docs/swagger.yaml +++ b/core/api/docs/swagger.yaml @@ -1444,7 +1444,7 @@ info: version: "2025-05-20" openapi: 3.1.0 paths: - /auth/display_code: + /v1/auth/display_code: post: description: Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid `app_name`, the server @@ -1495,7 +1495,7 @@ paths: summary: Start new challenge tags: - Auth - /auth/token: + /v1/auth/token: post: description: After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also @@ -1553,7 +1553,7 @@ paths: summary: Solve challenge tags: - Auth - /search: + /v1/search: post: description: 'Executes a global search over every space accessible by the authenticated user. The request body must specify the `query` text, optional filters on @@ -1615,7 +1615,7 @@ paths: summary: Search objects across all spaces tags: - Search - /spaces: + /v1/spaces: get: description: Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such @@ -1727,7 +1727,7 @@ paths: summary: Create space tags: - Spaces - /spaces/{space_id}: + /v1/spaces/{space_id}: get: description: Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various @@ -1853,7 +1853,7 @@ paths: summary: Update space tags: - Spaces - /spaces/{space_id}/lists/{list_id}/objects: + /v1/spaces/{space_id}/lists/{list_id}/objects: post: description: Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns @@ -1933,7 +1933,7 @@ paths: summary: Add objects to list tags: - Lists - /spaces/{space_id}/lists/{list_id}/objects/{object_id}: + /v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}: delete: description: Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as @@ -2008,7 +2008,7 @@ paths: summary: Remove object from list tags: - Lists - /spaces/{space_id}/lists/{list_id}/views: + /v1/spaces/{space_id}/lists/{list_id}/views: get: description: Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, @@ -2079,7 +2079,7 @@ paths: summary: Get list views tags: - Lists - /spaces/{space_id}/lists/{list_id}/views/{view_id}/objects: + /v1/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects: get: description: Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the @@ -2156,7 +2156,7 @@ paths: summary: Get objects in list tags: - Lists - /spaces/{space_id}/members: + /v1/spaces/{space_id}/members: get: description: Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which @@ -2217,7 +2217,7 @@ paths: summary: List members tags: - Members - /spaces/{space_id}/members/{member_id}: + /v1/spaces/{space_id}/members/{member_id}: get: description: Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global @@ -2276,7 +2276,7 @@ paths: summary: Get member tags: - Members - /spaces/{space_id}/objects: + /v1/spaces/{space_id}/objects: get: description: Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed @@ -2404,7 +2404,7 @@ paths: summary: Create object tags: - Objects - /spaces/{space_id}/objects/{object_id}: + /v1/spaces/{space_id}/objects/{object_id}: delete: description: This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns @@ -2633,7 +2633,7 @@ paths: summary: Update object tags: - Objects - /spaces/{space_id}/properties: + /v1/spaces/{space_id}/properties: get: description: '⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific @@ -2757,7 +2757,7 @@ paths: summary: Create property tags: - Properties - /spaces/{space_id}/properties/{property_id}: + /v1/spaces/{space_id}/properties/{property_id}: delete: description: '⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The @@ -2986,7 +2986,7 @@ paths: summary: Update property tags: - Properties - /spaces/{space_id}/properties/{property_id}/tags: + /v1/spaces/{space_id}/properties/{property_id}/tags: get: description: This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, @@ -3115,7 +3115,7 @@ paths: summary: Create tag tags: - Tags - /spaces/{space_id}/properties/{property_id}/tags/{tag_id}: + /v1/spaces/{space_id}/properties/{property_id}/tags/{tag_id}: delete: description: This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the @@ -3360,7 +3360,7 @@ paths: summary: Update tag tags: - Tags - /spaces/{space_id}/search: + /v1/spaces/{space_id}/search: post: description: Performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters @@ -3428,7 +3428,7 @@ paths: summary: Search objects within a space tags: - Search - /spaces/{space_id}/types: + /v1/spaces/{space_id}/types: get: description: This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s @@ -3553,7 +3553,7 @@ paths: summary: Create type tags: - Types - /spaces/{space_id}/types/{type_id}: + /v1/spaces/{space_id}/types/{type_id}: delete: description: This endpoint “deletes” an object type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. @@ -3773,7 +3773,7 @@ paths: summary: Update type tags: - Types - /spaces/{space_id}/types/{type_id}/templates: + /v1/spaces/{space_id}/types/{type_id}/templates: get: description: This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured @@ -3839,7 +3839,7 @@ paths: summary: List templates tags: - Templates - /spaces/{space_id}/types/{type_id}/templates/{template_id}: + /v1/spaces/{space_id}/types/{type_id}/templates/{template_id}: get: description: Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, @@ -3909,4 +3909,4 @@ paths: tags: - Templates servers: -- url: http://localhost:31009/v1 +- url: http://localhost:31009 diff --git a/core/api/handler/auth.go b/core/api/handler/auth.go index 708e4b0b5..64ada57ad 100644 --- a/core/api/handler/auth.go +++ b/core/api/handler/auth.go @@ -23,7 +23,7 @@ import ( // @Success 200 {object} apimodel.DisplayCodeResponse "The challenge ID associated with the started challenge" // @Failure 400 {object} util.ValidationError "Invalid input" // @Failure 500 {object} util.ServerError "Internal server error" -// @Router /auth/display_code [post] +// @Router /v1/auth/display_code [post] func DisplayCodeHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { appName := c.Query("app_name") @@ -57,7 +57,7 @@ func DisplayCodeHandler(s *service.Service) gin.HandlerFunc { // @Success 200 {object} apimodel.TokenResponse "The app key that can be used in the Authorization header for subsequent requests" // @Failure 400 {object} util.ValidationError "Invalid input" // @Failure 500 {object} util.ServerError "Internal server error" -// @Router /auth/token [post] +// @Router /v1/auth/token [post] func TokenHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { challengeId := c.Query("challenge_id") diff --git a/core/api/handler/list.go b/core/api/handler/list.go index 490dc1336..60a260ca4 100644 --- a/core/api/handler/list.go +++ b/core/api/handler/list.go @@ -27,7 +27,7 @@ import ( // @Failure 404 {object} util.NotFoundError "Not found" // @Failure 500 {object} util.ServerError "Internal server error" // @Security bearerauth -// @Router /spaces/{space_id}/lists/{list_id}/views [get] +// @Router /v1/spaces/{space_id}/lists/{list_id}/views [get] func GetListViewsHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { spaceId := c.Param("space_id") @@ -69,7 +69,7 @@ func GetListViewsHandler(s *service.Service) gin.HandlerFunc { // @Failure 404 {object} util.NotFoundError "Not found" // @Failure 500 {object} util.ServerError "Internal server error" // @Security bearerauth -// @Router /spaces/{space_id}/lists/{list_id}/views/{view_id}/objects [get] +// @Router /v1/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects [get] func GetObjectsInListHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { spaceId := c.Param("space_id") @@ -117,7 +117,7 @@ func GetObjectsInListHandler(s *service.Service) gin.HandlerFunc { // @Failure 429 {object} util.RateLimitError "Rate limit exceeded" // @Failure 500 {object} util.ServerError "Internal server error" // @Security bearerauth -// @Router /spaces/{space_id}/lists/{list_id}/objects [post] +// @Router /v1/spaces/{space_id}/lists/{list_id}/objects [post] func AddObjectsToListHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { spaceId := c.Param("space_id") @@ -163,7 +163,7 @@ func AddObjectsToListHandler(s *service.Service) gin.HandlerFunc { // @Failure 429 {object} util.RateLimitError "Rate limit exceeded" // @Failure 500 {object} util.ServerError "Internal server error" // @Security bearerauth -// @Router /spaces/{space_id}/lists/{list_id}/objects/{object_id} [delete] +// @Router /v1/spaces/{space_id}/lists/{list_id}/objects/{object_id} [delete] func RemoveObjectFromListHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { spaceId := c.Param("space_id") diff --git a/core/api/handler/member.go b/core/api/handler/member.go index bbcfe98ee..333e25749 100644 --- a/core/api/handler/member.go +++ b/core/api/handler/member.go @@ -26,7 +26,7 @@ import ( // @Failure 401 {object} util.UnauthorizedError "Unauthorized" // @Failure 500 {object} util.ServerError "Internal server error" // @Security bearerauth -// @Router /spaces/{space_id}/members [get] +// @Router /v1/spaces/{space_id}/members [get] func ListMembersHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { spaceId := c.Param("space_id") @@ -63,7 +63,7 @@ func ListMembersHandler(s *service.Service) gin.HandlerFunc { // @Failure 404 {object} util.NotFoundError "Member not found" // @Failure 500 {object} util.ServerError "Internal server error" // @Security bearerauth -// @Router /spaces/{space_id}/members/{member_id} [get] +// @Router /v1/spaces/{space_id}/members/{member_id} [get] func GetMemberHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { spaceId := c.Param("space_id") @@ -105,7 +105,7 @@ func GetMemberHandler(s *service.Service) gin.HandlerFunc { // @Failure 429 {object} util.RateLimitError "Rate limit exceeded" // @Failure 500 {object} util.ServerError "Internal server error" // @Security bearerauth -// @Router /spaces/{space_id}/members/{member_id} [patch] +// @Router /v1/spaces/{space_id}/members/{member_id} [patch] func UpdateMemberHandler(s *SpaceService) gin.HandlerFunc { return func(c *gin.Context) { spaceId := c.Param("space_id") diff --git a/core/api/handler/object.go b/core/api/handler/object.go index 73ffb1929..0faff848f 100644 --- a/core/api/handler/object.go +++ b/core/api/handler/object.go @@ -26,7 +26,7 @@ import ( // @Failure 401 {object} util.UnauthorizedError "Unauthorized" // @Failure 500 {object} util.ServerError "Internal server error" // @Security bearerauth -// @Router /spaces/{space_id}/objects [get] +// @Router /v1/spaces/{space_id}/objects [get] func ListObjectsHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { spaceId := c.Param("space_id") @@ -67,7 +67,7 @@ func ListObjectsHandler(s *service.Service) gin.HandlerFunc { // @Failure 410 {object} util.GoneError "Resource deleted" // @Failure 500 {object} util.ServerError "Internal server error" // @Security bearerauth -// @Router /spaces/{space_id}/objects/{object_id} [get] +// @Router /v1/spaces/{space_id}/objects/{object_id} [get] func GetObjectHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { spaceId := c.Param("space_id") @@ -109,7 +109,7 @@ func GetObjectHandler(s *service.Service) gin.HandlerFunc { // @Failure 429 {object} util.RateLimitError "Rate limit exceeded" // @Failure 500 {object} util.ServerError "Internal server error" // @Security bearerauth -// @Router /spaces/{space_id}/objects [post] +// @Router /v1/spaces/{space_id}/objects [post] func CreateObjectHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { spaceId := c.Param("space_id") @@ -163,7 +163,7 @@ func CreateObjectHandler(s *service.Service) gin.HandlerFunc { // @Failure 429 {object} util.RateLimitError "Rate limit exceeded" // @Failure 500 {object} util.ServerError "Internal server error" // @Security bearerauth -// @Router /spaces/{space_id}/objects/{object_id} [patch] +// @Router /v1/spaces/{space_id}/objects/{object_id} [patch] func UpdateObjectHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { spaceId := c.Param("space_id") @@ -213,7 +213,7 @@ func UpdateObjectHandler(s *service.Service) gin.HandlerFunc { // @Failure 429 {object} util.RateLimitError "Rate limit exceeded" // @Failure 500 {object} util.ServerError "Internal server error" // @Security bearerauth -// @Router /spaces/{space_id}/objects/{object_id} [delete] +// @Router /v1/spaces/{space_id}/objects/{object_id} [delete] func DeleteObjectHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { spaceId := c.Param("space_id") diff --git a/core/api/handler/property.go b/core/api/handler/property.go index 63c03b169..2b3546c61 100644 --- a/core/api/handler/property.go +++ b/core/api/handler/property.go @@ -26,7 +26,7 @@ import ( // @Failure 401 {object} util.UnauthorizedError "Unauthorized" // @Failure 500 {object} util.ServerError "Internal server error" // @Security bearerauth -// @Router /spaces/{space_id}/properties [get] +// @Router /v1/spaces/{space_id}/properties [get] func ListPropertiesHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { spaceId := c.Param("space_id") @@ -64,7 +64,7 @@ func ListPropertiesHandler(s *service.Service) gin.HandlerFunc { // @Failure 410 {object} util.GoneError "Resource deleted" // @Failure 500 {object} util.ServerError "Internal server error" // @Security bearerauth -// @Router /spaces/{space_id}/properties/{property_id} [get] +// @Router /v1/spaces/{space_id}/properties/{property_id} [get] func GetPropertyHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { spaceId := c.Param("space_id") @@ -104,7 +104,7 @@ func GetPropertyHandler(s *service.Service) gin.HandlerFunc { // @Failure 429 {object} util.RateLimitError "Rate limit exceeded" // @Failure 500 {object} util.ServerError "Internal server error" // @Security bearerauth -// @Router /spaces/{space_id}/properties [post] +// @Router /v1/spaces/{space_id}/properties [post] func CreatePropertyHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { spaceId := c.Param("space_id") @@ -154,7 +154,7 @@ func CreatePropertyHandler(s *service.Service) gin.HandlerFunc { // @Failure 429 {object} util.RateLimitError "Rate limit exceeded" // @Failure 500 {object} util.ServerError "Internal server error" // @Security bearerauth -// @Router /spaces/{space_id}/properties/{property_id} [patch] +// @Router /v1/spaces/{space_id}/properties/{property_id} [patch] func UpdatePropertyHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { spaceId := c.Param("space_id") @@ -205,7 +205,7 @@ func UpdatePropertyHandler(s *service.Service) gin.HandlerFunc { // @Failure 429 {object} util.RateLimitError "Rate limit exceeded" // @Failure 500 {object} util.ServerError "Internal server error" // @Security bearerauth -// @Router /spaces/{space_id}/properties/{property_id} [delete] +// @Router /v1/spaces/{space_id}/properties/{property_id} [delete] func DeletePropertyHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { spaceId := c.Param("space_id") diff --git a/core/api/handler/search.go b/core/api/handler/search.go index 2d70c0d4f..b9ae786cc 100644 --- a/core/api/handler/search.go +++ b/core/api/handler/search.go @@ -27,7 +27,7 @@ import ( // @Failure 401 {object} util.UnauthorizedError "Unauthorized" // @Failure 500 {object} util.ServerError "Internal server error" // @Security bearerauth -// @Router /search [post] +// @Router /v1/search [post] func GlobalSearchHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { offset := c.GetInt("offset") @@ -72,7 +72,7 @@ func GlobalSearchHandler(s *service.Service) gin.HandlerFunc { // @Failure 401 {object} util.UnauthorizedError "Unauthorized" // @Failure 500 {object} util.ServerError "Internal server error" // @Security bearerauth -// @Router /spaces/{space_id}/search [post] +// @Router /v1/spaces/{space_id}/search [post] func SearchHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { spaceID := c.Param("space_id") diff --git a/core/api/handler/space.go b/core/api/handler/space.go index cbdac0070..575e40b7e 100644 --- a/core/api/handler/space.go +++ b/core/api/handler/space.go @@ -25,7 +25,7 @@ import ( // @Failure 401 {object} util.UnauthorizedError "Unauthorized" // @Failure 500 {object} util.ServerError "Internal server error" // @Security bearerauth -// @Router /spaces [get] +// @Router /v1/spaces [get] func ListSpacesHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { offset := c.GetInt("offset") @@ -62,7 +62,7 @@ func ListSpacesHandler(s *service.Service) gin.HandlerFunc { // @Failure 404 {object} util.NotFoundError "Space not found" // @Failure 500 {object} util.ServerError "Internal server error" // @Security bearerauth -// @Router /spaces/{space_id} [get] +// @Router /v1/spaces/{space_id} [get] func GetSpaceHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { spaceId := c.Param("space_id") @@ -100,7 +100,7 @@ func GetSpaceHandler(s *service.Service) gin.HandlerFunc { // @Failure 429 {object} util.RateLimitError "Rate limit exceeded" // @Failure 500 {object} util.ServerError "Internal server error" // @Security bearerauth -// @Router /spaces [post] +// @Router /v1/spaces [post] func CreateSpaceHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { var req apimodel.CreateSpaceRequest @@ -147,7 +147,7 @@ func CreateSpaceHandler(s *service.Service) gin.HandlerFunc { // @Failure 429 {object} util.RateLimitError "Rate limit exceeded" // @Failure 500 {object} util.ServerError "Internal server error" // @Security bearerauth -// @Router /spaces/{space_id} [patch] +// @Router /v1/spaces/{space_id} [patch] func UpdateSpaceHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { spaceId := c.Param("space_id") diff --git a/core/api/handler/tag.go b/core/api/handler/tag.go index 9dd89a139..5afa1f542 100644 --- a/core/api/handler/tag.go +++ b/core/api/handler/tag.go @@ -26,7 +26,7 @@ import ( // @Failure 404 {object} util.NotFoundError "Property not found" // @Failure 500 {object} util.ServerError "Internal server error" // @Security bearerauth -// @Router /spaces/{space_id}/properties/{property_id}/tags [get] +// @Router /v1/spaces/{space_id}/properties/{property_id}/tags [get] func ListTagsHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { spaceId := c.Param("space_id") @@ -67,7 +67,7 @@ func ListTagsHandler(s *service.Service) gin.HandlerFunc { // @Failure 410 {object} util.GoneError "Resource deleted" // @Failure 500 {object} util.ServerError "Internal server error" // @Security bearerauth -// @Router /spaces/{space_id}/properties/{property_id}/tags/{tag_id} [get] +// @Router /v1/spaces/{space_id}/properties/{property_id}/tags/{tag_id} [get] func GetTagHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { spaceId := c.Param("space_id") @@ -109,7 +109,7 @@ func GetTagHandler(s *service.Service) gin.HandlerFunc { // @Failure 429 {object} util.RateLimitError "Rate limit exceeded" // @Failure 500 {object} util.ServerError "Internal server error" // @Security bearerauth -// @Router /spaces/{space_id}/properties/{property_id}/tags [post] +// @Router /v1/spaces/{space_id}/properties/{property_id}/tags [post] func CreateTagHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { spaceId := c.Param("space_id") @@ -161,7 +161,7 @@ func CreateTagHandler(s *service.Service) gin.HandlerFunc { // @Failure 429 {object} util.RateLimitError "Rate limit exceeded" // @Failure 500 {object} util.ServerError "Internal server error" // @Security bearerauth -// @Router /spaces/{space_id}/properties/{property_id}/tags/{tag_id} [patch] +// @Router /v1/spaces/{space_id}/properties/{property_id}/tags/{tag_id} [patch] func UpdateTagHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { spaceId := c.Param("space_id") @@ -213,7 +213,7 @@ func UpdateTagHandler(s *service.Service) gin.HandlerFunc { // @Failure 429 {object} util.RateLimitError "Rate limit exceeded" // @Failure 500 {object} util.ServerError "Internal server error" // @Security bearerauth -// @Router /spaces/{space_id}/properties/{property_id}/tags/{tag_id} [delete] +// @Router /v1/spaces/{space_id}/properties/{property_id}/tags/{tag_id} [delete] func DeleteTagHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { spaceId := c.Param("space_id") diff --git a/core/api/handler/template.go b/core/api/handler/template.go index a20b35d17..a211afa4e 100644 --- a/core/api/handler/template.go +++ b/core/api/handler/template.go @@ -27,7 +27,7 @@ import ( // @Failure 401 {object} util.UnauthorizedError "Unauthorized" // @Failure 500 {object} util.ServerError "Internal server error" // @Security bearerauth -// @Router /spaces/{space_id}/types/{type_id}/templates [get] +// @Router /v1/spaces/{space_id}/types/{type_id}/templates [get] func ListTemplatesHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { spaceId := c.Param("space_id") @@ -70,7 +70,7 @@ func ListTemplatesHandler(s *service.Service) gin.HandlerFunc { // @Failure 410 {object} util.GoneError "Resource deleted" // @Failure 500 {object} util.ServerError "Internal server error" // @Security bearerauth -// @Router /spaces/{space_id}/types/{type_id}/templates/{template_id} [get] +// @Router /v1/spaces/{space_id}/types/{type_id}/templates/{template_id} [get] func GetTemplateHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { spaceId := c.Param("space_id") diff --git a/core/api/handler/type.go b/core/api/handler/type.go index 4e16f0380..bd3ead177 100644 --- a/core/api/handler/type.go +++ b/core/api/handler/type.go @@ -26,7 +26,7 @@ import ( // @Failure 401 {object} util.UnauthorizedError "Unauthorized" // @Failure 500 {object} util.ServerError "Internal server error" // @Security bearerauth -// @Router /spaces/{space_id}/types [get] +// @Router /v1/spaces/{space_id}/types [get] func ListTypesHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { spaceId := c.Param("space_id") @@ -64,7 +64,7 @@ func ListTypesHandler(s *service.Service) gin.HandlerFunc { // @Failure 410 {object} util.GoneError "Resource deleted" // @Failure 500 {object} util.ServerError "Internal server error" // @Security bearerauth -// @Router /spaces/{space_id}/types/{type_id} [get] +// @Router /v1/spaces/{space_id}/types/{type_id} [get] func GetTypeHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { spaceId := c.Param("space_id") @@ -104,7 +104,7 @@ func GetTypeHandler(s *service.Service) gin.HandlerFunc { // @Failure 429 {object} util.RateLimitError "Rate limit exceeded" // @Failure 500 {object} util.ServerError "Internal server error" // @Security bearerauth -// @Router /spaces/{space_id}/types [post] +// @Router /v1/spaces/{space_id}/types [post] func CreateTypeHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { spaceId := c.Param("space_id") @@ -153,7 +153,7 @@ func CreateTypeHandler(s *service.Service) gin.HandlerFunc { // @Failure 429 {object} util.RateLimitError "Rate limit exceeded" // @Failure 500 {object} util.ServerError "Internal server error" // @Security bearerauth -// @Router /spaces/{space_id}/types/{type_id} [patch] +// @Router /v1/spaces/{space_id}/types/{type_id} [patch] func UpdateTypeHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { spaceId := c.Param("space_id") @@ -203,7 +203,7 @@ func UpdateTypeHandler(s *service.Service) gin.HandlerFunc { // @Failure 429 {object} util.RateLimitError "Rate limit exceeded" // @Failure 500 {object} util.ServerError "Internal server error" // @Security bearerauth -// @Router /spaces/{space_id}/types/{type_id} [delete] +// @Router /v1/spaces/{space_id}/types/{type_id} [delete] func DeleteTypeHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { spaceId := c.Param("space_id") diff --git a/core/api/service.go b/core/api/service.go index 28a54feda..be4852654 100644 --- a/core/api/service.go +++ b/core/api/service.go @@ -59,7 +59,6 @@ func (s *apiService) Name() (name string) { // @license.name Any Source Available License 1.0 // @license.url https://github.com/anyproto/anytype-api/blob/main/LICENSE.md // @host http://localhost:31009 -// @BasePath /v1 // @securitydefinitions.bearerauth BearerAuth // @externalDocs.description OpenAPI // @externalDocs.url https://swagger.io/resources/open-api/ From 963e7fc53d9326fe752406e139ed0934b362bf19 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Tue, 13 May 2025 23:57:00 +0200 Subject: [PATCH 032/164] GO-5589: Add openapi.json route --- core/api/server/router.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/core/api/server/router.go b/core/api/server/router.go index 811be89b7..a39d48727 100644 --- a/core/api/server/router.go +++ b/core/api/server/router.go @@ -49,7 +49,6 @@ func (s *Server) NewRouter(mw apicore.ClientCommands) *gin.Engine { c.Redirect(http.StatusMovedPermanently, target) }) - // OpenAPI spec route router.GET("/openapi.yaml", func(c *gin.Context) { data, err := os.ReadFile("./core/api/docs/swagger.yaml") if err != nil { @@ -59,6 +58,15 @@ func (s *Server) NewRouter(mw apicore.ClientCommands) *gin.Engine { c.Data(http.StatusOK, "application/x-yaml", data) }) + router.GET("/openapi.json", func(c *gin.Context) { + data, err := os.ReadFile("./core/api/docs/openapi.json") + if err != nil { + c.String(http.StatusInternalServerError, "Failed to read OpenAPI spec") + return + } + c.Data(http.StatusOK, "application/json", data) + }) + // Auth routes (no authentication required) authGroup := router.Group("/v1/auth") { From 0983e91cbd8311db41fc40854e5c69a7546cdb4b Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Wed, 14 May 2025 00:10:50 +0200 Subject: [PATCH 033/164] GO-5589: Rename swagger* docs to openapi* --- core/api/docs/{swagger.json => openapi.json} | 0 core/api/docs/{swagger.yaml => openapi.yaml} | 0 core/api/server/router.go | 2 +- makefiles/tools.mk | 12 +++++++----- makefiles/vars.mk | 1 + 5 files changed, 9 insertions(+), 6 deletions(-) rename core/api/docs/{swagger.json => openapi.json} (100%) rename core/api/docs/{swagger.yaml => openapi.yaml} (100%) diff --git a/core/api/docs/swagger.json b/core/api/docs/openapi.json similarity index 100% rename from core/api/docs/swagger.json rename to core/api/docs/openapi.json diff --git a/core/api/docs/swagger.yaml b/core/api/docs/openapi.yaml similarity index 100% rename from core/api/docs/swagger.yaml rename to core/api/docs/openapi.yaml diff --git a/core/api/server/router.go b/core/api/server/router.go index a39d48727..f3937a36a 100644 --- a/core/api/server/router.go +++ b/core/api/server/router.go @@ -50,7 +50,7 @@ func (s *Server) NewRouter(mw apicore.ClientCommands) *gin.Engine { }) router.GET("/openapi.yaml", func(c *gin.Context) { - data, err := os.ReadFile("./core/api/docs/swagger.yaml") + data, err := os.ReadFile("./core/api/docs/openapi.yaml") if err != nil { c.String(http.StatusInternalServerError, "Failed to read OpenAPI spec") return diff --git a/makefiles/tools.mk b/makefiles/tools.mk index 81ec1c41a..ead87d0ca 100644 --- a/makefiles/tools.mk +++ b/makefiles/tools.mk @@ -10,8 +10,10 @@ lint: @echo 'Linting with golint...' @golint `go list ./... | grep -v /vendor/` -swagger: - @echo 'Generating swagger docs...' - @swag init --v3.1 -q -d core/api -g service.go -o core/api/docs - @echo 'Formatting swagger docs...' - @swag fmt -d core/api +openapi: + @echo 'Generating openapi docs...' + @swag init --v3.1 -q -d core/api -g service.go -o $(OPENAPI_DOCS_DIR) + @mv $(OPENAPI_DOCS_DIR)/swagger.json $(OPENAPI_DOCS_DIR)/openapi.json + @mv $(OPENAPI_DOCS_DIR)/swagger.yaml $(OPENAPI_DOCS_DIR)/openapi.yaml + @echo 'Formatting openapi docs...' + @swag fmt -d core/api \ No newline at end of file diff --git a/makefiles/vars.mk b/makefiles/vars.mk index d7183e2c0..b5801062b 100644 --- a/makefiles/vars.mk +++ b/makefiles/vars.mk @@ -1,4 +1,5 @@ CUSTOM_NETWORK_FILE ?= ./core/anytype/config/nodes/custom.yml +OPENAPI_DOCS_DIR ?= ./core/api/docs CLIENT_DESKTOP_PATH ?= ../anytype-ts CLIENT_ANDROID_PATH ?= ../anytype-kotlin CLIENT_IOS_PATH ?= ../anytype-swift From 433537998fd92aac1c62c58f55d1b8d3a05cbf24 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Wed, 14 May 2025 00:25:58 +0200 Subject: [PATCH 034/164] GO-5589: Format pretty openapi.json --- core/api/docs/openapi.json | 5675 +++++++++++++++++++++++++++++++++++- makefiles/tools.mk | 3 +- 2 files changed, 5668 insertions(+), 10 deletions(-) diff --git a/core/api/docs/openapi.json b/core/api/docs/openapi.json index c50495d28..d4540d7e6 100644 --- a/core/api/docs/openapi.json +++ b/core/api/docs/openapi.json @@ -1,10 +1,5667 @@ { - "components": {"schemas":{"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"creator","type":"string"},"objects":{"description":"The object values of the property","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to search for, specified by key or ID","example":["page","678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"status","type":"string"},"select":{"description":"The selected tag value of the property","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"required":["direction","property_key"],"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TokenResponse":{"properties":{"app_key":{"description":"The app key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, - "info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"This API empowers seamless interaction with Anytype's resources—spaces, objects, properties, types, templates, and beyond.","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-api/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"Anytype API","version":"2025-05-20"}, - "externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"}, - "paths": {"/v1/auth/display_code":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid `app_name`, the server issues a unique `challenge_id` and displays a short code within the Anytype Desktop On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"create_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.DisplayCodeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["Auth"]}},"/v1/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent app key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.","operationId":"solve_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TokenResponse"}}},"description":"The app key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Solve challenge","tags":["Auth"]}},"/v1/search":{"post":{"description":"Executes a global search over every space accessible by the authenticated user. The request body must specify the `query` text, optional filters on object types (e.g., \"page\", \"task\"), and sort directives (default: descending by last updated timestamp). Pagination is controlled via `offset` and `limit` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"search_global","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/v1/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"list_spaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"create_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/v1/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"get_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"update_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"add_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"The list of object IDs to add to the list","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"remove_list_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"get_list_views","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"get_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/v1/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"list_members","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/v1/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with `_participant`) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"get_member","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/v1/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"create_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/v1/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"get_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"update_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/v1/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"list_properties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"create_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"get_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"update_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"list_tags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"create_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"get_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"update_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/v1/spaces/{space_id}/search":{"post":{"description":"Performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"search_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/v1/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"list_types","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new object type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"create_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an object type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"get_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing object type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"update_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"list_templates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to retrieve templates for","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/v1/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"get_template","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to which the template belongs","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, - "openapi": "3.1.0", - "servers": [ - {"url":"http://localhost:31009"} - ] -} \ No newline at end of file + "components": { + "schemas": { + "apimodel.CheckboxPropertyLinkValue": { + "properties": { + "checkbox": { + "description": "The checkbox value of the property", + "example": true, + "type": "boolean" + }, + "format": { + "$ref": "#/components/schemas/apimodel.PropertyFormat" + }, + "key": { + "example": "done", + "type": "string" + } + }, + "type": "object" + }, + "apimodel.CheckboxPropertyValue": { + "properties": { + "checkbox": { + "description": "The checkbox value of the property", + "example": true, + "type": "boolean" + }, + "format": { + "$ref": "#/components/schemas/apimodel.PropertyFormat" + }, + "id": { + "description": "The id of the property", + "example": "bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a", + "type": "string" + }, + "key": { + "description": "The key of the property", + "example": "done", + "type": "string" + }, + "name": { + "description": "The name of the property", + "example": "Done", + "type": "string" + }, + "object": { + "description": "The data model of the object", + "example": "property", + "type": "string" + } + }, + "type": "object" + }, + "apimodel.Color": { + "description": "The color of the icon", + "enum": [ + "grey", + "yellow", + "orange", + "red", + "pink", + "purple", + "blue", + "ice", + "teal", + "lime" + ], + "example": "yellow", + "type": "string", + "x-enum-varnames": [ + "ColorGrey", + "ColorYellow", + "ColorOrange", + "ColorRed", + "ColorPink", + "ColorPurple", + "ColorBlue", + "ColorIce", + "ColorTeal", + "ColorLime" + ] + }, + "apimodel.CreateObjectRequest": { + "properties": { + "body": { + "description": "The body of the object", + "example": "This is the body of the object. Markdown syntax is supported here.", + "type": "string" + }, + "icon": { + "$ref": "#/components/schemas/apimodel.Icon" + }, + "name": { + "description": "The name of the object", + "example": "My object", + "type": "string" + }, + "properties": { + "description": "⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object", + "items": { + "$ref": "#/components/schemas/apimodel.PropertyLinkWithValue" + }, + "type": "array", + "uniqueItems": false + }, + "template_id": { + "description": "The id of the template to use", + "example": "bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge", + "type": "string" + }, + "type_key": { + "description": "The key of the type of object to create", + "example": "page", + "type": "string" + } + }, + "required": [ + "type_key" + ], + "type": "object" + }, + "apimodel.CreatePropertyRequest": { + "properties": { + "format": { + "$ref": "#/components/schemas/apimodel.PropertyFormat" + }, + "name": { + "description": "The name of the property", + "example": "Last modified date", + "type": "string" + } + }, + "required": [ + "format", + "name" + ], + "type": "object" + }, + "apimodel.CreateSpaceRequest": { + "properties": { + "description": { + "description": "The description of the space", + "example": "The local-first wiki", + "type": "string" + }, + "name": { + "description": "The name of the space", + "example": "New Space", + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "apimodel.CreateTagRequest": { + "properties": { + "color": { + "$ref": "#/components/schemas/apimodel.Color" + }, + "name": { + "description": "The name of the tag", + "example": "In progress", + "type": "string" + } + }, + "required": [ + "color", + "name" + ], + "type": "object" + }, + "apimodel.CreateTypeRequest": { + "properties": { + "icon": { + "$ref": "#/components/schemas/apimodel.Icon" + }, + "layout": { + "$ref": "#/components/schemas/apimodel.TypeLayout" + }, + "name": { + "description": "The name of the type", + "example": "Page", + "type": "string" + }, + "plural_name": { + "description": "The plural name of the type", + "example": "Pages", + "type": "string" + }, + "properties": { + "description": "⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type", + "items": { + "$ref": "#/components/schemas/apimodel.PropertyLink" + }, + "type": "array", + "uniqueItems": false + } + }, + "required": [ + "layout", + "name" + ], + "type": "object" + }, + "apimodel.DatePropertyLinkValue": { + "properties": { + "date": { + "description": "The date value of the property", + "example": "2025-02-14T12:34:56Z", + "type": "string" + }, + "format": { + "$ref": "#/components/schemas/apimodel.PropertyFormat" + }, + "key": { + "example": "last_modified_date", + "type": "string" + } + }, + "type": "object" + }, + "apimodel.DatePropertyValue": { + "properties": { + "date": { + "description": "The date value of the property", + "example": "2025-02-14T12:34:56Z", + "type": "string" + }, + "format": { + "$ref": "#/components/schemas/apimodel.PropertyFormat" + }, + "id": { + "description": "The id of the property", + "example": "bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a", + "type": "string" + }, + "key": { + "description": "The key of the property", + "example": "last_modified_date", + "type": "string" + }, + "name": { + "description": "The name of the property", + "example": "Last modified date", + "type": "string" + }, + "object": { + "description": "The data model of the object", + "example": "property", + "type": "string" + } + }, + "type": "object" + }, + "apimodel.DisplayCodeResponse": { + "properties": { + "challenge_id": { + "description": "The challenge id associated with the displayed code and needed to solve the challenge for token", + "example": "67647f5ecda913e9a2e11b26", + "type": "string" + } + }, + "type": "object" + }, + "apimodel.EmailPropertyLinkValue": { + "properties": { + "email": { + "description": "The email value of the property", + "example": "example@example.com", + "type": "string" + }, + "format": { + "$ref": "#/components/schemas/apimodel.PropertyFormat" + }, + "key": { + "example": "email", + "type": "string" + } + }, + "type": "object" + }, + "apimodel.EmailPropertyValue": { + "properties": { + "email": { + "description": "The email value of the property", + "example": "example@example.com", + "type": "string" + }, + "format": { + "$ref": "#/components/schemas/apimodel.PropertyFormat" + }, + "id": { + "description": "The id of the property", + "example": "bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a", + "type": "string" + }, + "key": { + "description": "The key of the property", + "example": "email", + "type": "string" + }, + "name": { + "description": "The name of the property", + "example": "Email", + "type": "string" + }, + "object": { + "description": "The data model of the object", + "example": "property", + "type": "string" + } + }, + "type": "object" + }, + "apimodel.EmojiIcon": { + "properties": { + "emoji": { + "description": "The emoji of the icon", + "example": "📄", + "type": "string" + }, + "format": { + "$ref": "#/components/schemas/apimodel.IconFormat" + } + }, + "type": "object" + }, + "apimodel.FileIcon": { + "properties": { + "file": { + "description": "The file of the icon", + "example": "bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay", + "type": "string" + }, + "format": { + "$ref": "#/components/schemas/apimodel.IconFormat" + } + }, + "type": "object" + }, + "apimodel.FilesPropertyLinkValue": { + "properties": { + "files": { + "description": "The file values of the property", + "example": [ + "['fileId']" + ], + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": false + }, + "format": { + "$ref": "#/components/schemas/apimodel.PropertyFormat" + }, + "key": { + "example": "files", + "type": "string" + } + }, + "type": "object" + }, + "apimodel.FilesPropertyValue": { + "properties": { + "files": { + "description": "The file values of the property", + "example": [ + "['fileId']" + ], + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": false + }, + "format": { + "$ref": "#/components/schemas/apimodel.PropertyFormat" + }, + "id": { + "description": "The id of the property", + "example": "bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a", + "type": "string" + }, + "key": { + "description": "The key of the property", + "example": "files", + "type": "string" + }, + "name": { + "description": "The name of the property", + "example": "Files", + "type": "string" + }, + "object": { + "description": "The data model of the object", + "example": "property", + "type": "string" + } + }, + "type": "object" + }, + "apimodel.Filter": { + "properties": { + "condition": { + "description": "The filter condition", + "enum": [ + "equal", + "not_equal", + "greater", + "less", + "greater_or_equal", + "less_or_equal", + "like", + "not_like", + "in", + "not_in", + "empty", + "not_empty", + "all_in", + "not_all_in", + "exact_in", + "not_exact_in", + "exists" + ], + "example": "contains", + "type": "string" + }, + "format": { + "$ref": "#/components/schemas/apimodel.PropertyFormat" + }, + "id": { + "description": "The id of the filter", + "example": "67bf3f21cda9134102e2422c", + "type": "string" + }, + "property_key": { + "description": "The property key used for filtering", + "example": "name", + "type": "string" + }, + "value": { + "description": "The value used for filtering", + "example": "Some value...", + "type": "string" + } + }, + "type": "object" + }, + "apimodel.Icon": { + "description": "The icon of the object", + "oneOf": [ + { + "$ref": "#/components/schemas/apimodel.EmojiIcon" + }, + { + "$ref": "#/components/schemas/apimodel.FileIcon" + }, + { + "$ref": "#/components/schemas/apimodel.NamedIcon" + } + ], + "type": "object" + }, + "apimodel.IconFormat": { + "description": "The format of the icon", + "enum": [ + "icon" + ], + "type": "string", + "x-enum-varnames": [ + "IconFormatEmoji", + "IconFormatFile", + "IconFormatIcon" + ] + }, + "apimodel.Member": { + "description": "The member", + "properties": { + "global_name": { + "description": "The global name of the member in the network", + "example": "john.any", + "type": "string" + }, + "icon": { + "$ref": "#/components/schemas/apimodel.Icon" + }, + "id": { + "description": "The profile object id of the member", + "example": "_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ", + "type": "string" + }, + "identity": { + "description": "The identity of the member in the network", + "example": "AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ", + "type": "string" + }, + "name": { + "description": "The name of the member", + "example": "John Doe", + "type": "string" + }, + "object": { + "description": "The data model of the object", + "example": "member", + "type": "string" + }, + "role": { + "description": "The role of the member", + "enum": [ + "viewer", + "editor", + "owner", + "no_permission" + ], + "example": "owner", + "type": "string" + }, + "status": { + "description": "The status of the member", + "enum": [ + "joining", + "active", + "removed", + "declined", + "removing", + "canceled" + ], + "example": "active", + "type": "string" + } + }, + "type": "object" + }, + "apimodel.MemberResponse": { + "properties": { + "member": { + "$ref": "#/components/schemas/apimodel.Member" + } + }, + "type": "object" + }, + "apimodel.MultiSelectPropertyLinkValue": { + "properties": { + "format": { + "$ref": "#/components/schemas/apimodel.PropertyFormat" + }, + "key": { + "example": "tag", + "type": "string" + }, + "multi_select": { + "description": "The selected tag values of the property", + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": false + } + }, + "type": "object" + }, + "apimodel.MultiSelectPropertyValue": { + "properties": { + "format": { + "$ref": "#/components/schemas/apimodel.PropertyFormat" + }, + "id": { + "description": "The id of the property", + "example": "bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a", + "type": "string" + }, + "key": { + "description": "The key of the property", + "example": "tag", + "type": "string" + }, + "multi_select": { + "description": "The selected tag values of the property", + "items": { + "$ref": "#/components/schemas/apimodel.Tag" + }, + "type": "array", + "uniqueItems": false + }, + "name": { + "description": "The name of the property", + "example": "Tag", + "type": "string" + }, + "object": { + "description": "The data model of the object", + "example": "property", + "type": "string" + } + }, + "type": "object" + }, + "apimodel.NamedIcon": { + "properties": { + "color": { + "$ref": "#/components/schemas/apimodel.Color" + }, + "format": { + "$ref": "#/components/schemas/apimodel.IconFormat" + }, + "name": { + "description": "The name of the icon", + "example": "document", + "type": "string" + } + }, + "type": "object" + }, + "apimodel.NumberPropertyLinkValue": { + "properties": { + "format": { + "$ref": "#/components/schemas/apimodel.PropertyFormat" + }, + "key": { + "example": "height", + "type": "string" + }, + "number": { + "description": "The number value of the property", + "example": 42, + "type": "number" + } + }, + "type": "object" + }, + "apimodel.NumberPropertyValue": { + "properties": { + "format": { + "$ref": "#/components/schemas/apimodel.PropertyFormat" + }, + "id": { + "description": "The id of the property", + "example": "bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a", + "type": "string" + }, + "key": { + "description": "The key of the property", + "example": "height", + "type": "string" + }, + "name": { + "description": "The name of the property", + "example": "Height", + "type": "string" + }, + "number": { + "description": "The number value of the property", + "example": 42, + "type": "number" + }, + "object": { + "description": "The data model of the object", + "example": "property", + "type": "string" + } + }, + "type": "object" + }, + "apimodel.Object": { + "properties": { + "archived": { + "description": "Whether the object is archived", + "example": false, + "type": "boolean" + }, + "icon": { + "$ref": "#/components/schemas/apimodel.Icon" + }, + "id": { + "description": "The id of the object", + "example": "bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ", + "type": "string" + }, + "layout": { + "$ref": "#/components/schemas/apimodel.ObjectLayout" + }, + "name": { + "description": "The name of the object", + "example": "My object", + "type": "string" + }, + "object": { + "description": "The data model of the object", + "example": "object", + "type": "string" + }, + "properties": { + "description": "The properties of the object", + "items": { + "$ref": "#/components/schemas/apimodel.PropertyWithValue" + }, + "type": "array", + "uniqueItems": false + }, + "snippet": { + "description": "The snippet of the object, especially important for notes as they don't have a name", + "example": "The beginning of the object body...", + "type": "string" + }, + "space_id": { + "description": "The id of the space the object is in", + "example": "bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1", + "type": "string" + }, + "type": { + "$ref": "#/components/schemas/apimodel.Type" + } + }, + "type": "object" + }, + "apimodel.ObjectLayout": { + "description": "The layout of the object", + "example": "basic", + "type": "string", + "x-enum-varnames": [ + "ObjectLayoutBasic", + "ObjectLayoutProfile", + "ObjectLayoutAction", + "ObjectLayoutNote", + "ObjectLayoutBookmark", + "ObjectLayoutSet", + "ObjectLayoutCollection", + "ObjectLayoutParticipant" + ] + }, + "apimodel.ObjectResponse": { + "properties": { + "object": { + "$ref": "#/components/schemas/apimodel.ObjectWithBody" + } + }, + "type": "object" + }, + "apimodel.ObjectWithBody": { + "description": "The object", + "properties": { + "archived": { + "description": "Whether the object is archived", + "example": false, + "type": "boolean" + }, + "icon": { + "$ref": "#/components/schemas/apimodel.Icon" + }, + "id": { + "description": "The id of the object", + "example": "bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ", + "type": "string" + }, + "layout": { + "description": "The layout of the object", + "example": "basic", + "type": "string", + "x-enum-varnames": [ + "ObjectLayoutBasic", + "ObjectLayoutProfile", + "ObjectLayoutAction", + "ObjectLayoutNote", + "ObjectLayoutBookmark", + "ObjectLayoutSet", + "ObjectLayoutCollection", + "ObjectLayoutParticipant" + ] + }, + "markdown": { + "description": "The markdown body of the object", + "example": "# This is the title\n...", + "type": "string" + }, + "name": { + "description": "The name of the object", + "example": "My object", + "type": "string" + }, + "object": { + "description": "The data model of the object", + "example": "object", + "type": "string" + }, + "properties": { + "description": "The properties of the object", + "items": { + "$ref": "#/components/schemas/apimodel.PropertyWithValue" + }, + "type": "array", + "uniqueItems": false + }, + "snippet": { + "description": "The snippet of the object, especially important for notes as they don't have a name", + "example": "The beginning of the object body...", + "type": "string" + }, + "space_id": { + "description": "The id of the space the object is in", + "example": "bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1", + "type": "string" + }, + "type": { + "$ref": "#/components/schemas/apimodel.Type" + } + }, + "type": "object" + }, + "apimodel.ObjectsPropertyLinkValue": { + "properties": { + "format": { + "$ref": "#/components/schemas/apimodel.PropertyFormat" + }, + "key": { + "example": "creator", + "type": "string" + }, + "objects": { + "description": "The object values of the property", + "example": [ + "['objectId']" + ], + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": false + } + }, + "type": "object" + }, + "apimodel.ObjectsPropertyValue": { + "properties": { + "format": { + "$ref": "#/components/schemas/apimodel.PropertyFormat" + }, + "id": { + "description": "The id of the property", + "example": "bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a", + "type": "string" + }, + "key": { + "description": "The key of the property", + "example": "creator", + "type": "string" + }, + "name": { + "description": "The name of the property", + "example": "Created by", + "type": "string" + }, + "object": { + "description": "The data model of the object", + "example": "property", + "type": "string" + }, + "objects": { + "description": "The object values of the property", + "example": [ + "['objectId']" + ], + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": false + } + }, + "type": "object" + }, + "apimodel.PhonePropertyLinkValue": { + "properties": { + "format": { + "$ref": "#/components/schemas/apimodel.PropertyFormat" + }, + "key": { + "example": "phone", + "type": "string" + }, + "phone": { + "description": "The phone value of the property", + "example": "+1234567890", + "type": "string" + } + }, + "type": "object" + }, + "apimodel.PhonePropertyValue": { + "properties": { + "format": { + "$ref": "#/components/schemas/apimodel.PropertyFormat" + }, + "id": { + "description": "The id of the property", + "example": "bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a", + "type": "string" + }, + "key": { + "description": "The key of the property", + "example": "phone", + "type": "string" + }, + "name": { + "description": "The name of the property", + "example": "Phone", + "type": "string" + }, + "object": { + "description": "The data model of the object", + "example": "property", + "type": "string" + }, + "phone": { + "description": "The phone value of the property", + "example": "+1234567890", + "type": "string" + } + }, + "type": "object" + }, + "apimodel.Property": { + "description": "The property", + "properties": { + "format": { + "$ref": "#/components/schemas/apimodel.PropertyFormat" + }, + "id": { + "description": "The id of the property", + "example": "bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a", + "type": "string" + }, + "key": { + "description": "The key of the property", + "example": "last_modified_date", + "type": "string" + }, + "name": { + "description": "The name of the property", + "example": "Last modified date", + "type": "string" + }, + "object": { + "description": "The data model of the object", + "example": "property", + "type": "string" + } + }, + "type": "object" + }, + "apimodel.PropertyFormat": { + "description": "The format of the property used for filtering", + "enum": [ + "text", + "number", + "select", + "multi_select", + "date", + "files", + "checkbox", + "url", + "email", + "phone", + "objects" + ], + "type": "string", + "x-enum-varnames": [ + "PropertyFormatText", + "PropertyFormatNumber", + "PropertyFormatSelect", + "PropertyFormatMultiSelect", + "PropertyFormatDate", + "PropertyFormatFiles", + "PropertyFormatCheckbox", + "PropertyFormatUrl", + "PropertyFormatEmail", + "PropertyFormatPhone", + "PropertyFormatObjects" + ] + }, + "apimodel.PropertyLink": { + "properties": { + "format": { + "$ref": "#/components/schemas/apimodel.PropertyFormat" + }, + "key": { + "description": "The key of the property", + "example": "last_modified_date", + "type": "string" + }, + "name": { + "description": "The name of the property", + "example": "Last modified date", + "type": "string" + } + }, + "required": [ + "format", + "key", + "name" + ], + "type": "object" + }, + "apimodel.PropertyLinkWithValue": { + "oneOf": [ + { + "$ref": "#/components/schemas/apimodel.TextPropertyLinkValue" + }, + { + "$ref": "#/components/schemas/apimodel.NumberPropertyLinkValue" + }, + { + "$ref": "#/components/schemas/apimodel.SelectPropertyLinkValue" + }, + { + "$ref": "#/components/schemas/apimodel.MultiSelectPropertyLinkValue" + }, + { + "$ref": "#/components/schemas/apimodel.DatePropertyLinkValue" + }, + { + "$ref": "#/components/schemas/apimodel.FilesPropertyLinkValue" + }, + { + "$ref": "#/components/schemas/apimodel.CheckboxPropertyLinkValue" + }, + { + "$ref": "#/components/schemas/apimodel.URLPropertyLinkValue" + }, + { + "$ref": "#/components/schemas/apimodel.EmailPropertyLinkValue" + }, + { + "$ref": "#/components/schemas/apimodel.PhonePropertyLinkValue" + }, + { + "$ref": "#/components/schemas/apimodel.ObjectsPropertyLinkValue" + } + ], + "type": "object" + }, + "apimodel.PropertyResponse": { + "properties": { + "property": { + "$ref": "#/components/schemas/apimodel.Property" + } + }, + "type": "object" + }, + "apimodel.PropertyWithValue": { + "oneOf": [ + { + "$ref": "#/components/schemas/apimodel.TextPropertyValue" + }, + { + "$ref": "#/components/schemas/apimodel.NumberPropertyValue" + }, + { + "$ref": "#/components/schemas/apimodel.SelectPropertyValue" + }, + { + "$ref": "#/components/schemas/apimodel.MultiSelectPropertyValue" + }, + { + "$ref": "#/components/schemas/apimodel.DatePropertyValue" + }, + { + "$ref": "#/components/schemas/apimodel.FilesPropertyValue" + }, + { + "$ref": "#/components/schemas/apimodel.CheckboxPropertyValue" + }, + { + "$ref": "#/components/schemas/apimodel.URLPropertyValue" + }, + { + "$ref": "#/components/schemas/apimodel.EmailPropertyValue" + }, + { + "$ref": "#/components/schemas/apimodel.PhonePropertyValue" + }, + { + "$ref": "#/components/schemas/apimodel.ObjectsPropertyValue" + } + ], + "type": "object" + }, + "apimodel.SearchRequest": { + "properties": { + "query": { + "description": "The search term to look for in object names and snippets", + "example": "test", + "type": "string" + }, + "sort": { + "$ref": "#/components/schemas/apimodel.SortOptions" + }, + "types": { + "description": "The types of objects to search for, specified by key or ID", + "example": [ + "page", + "678043f0cda9133be777049f", + "bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q" + ], + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": false + } + }, + "type": "object" + }, + "apimodel.SelectPropertyLinkValue": { + "properties": { + "format": { + "$ref": "#/components/schemas/apimodel.PropertyFormat" + }, + "key": { + "example": "status", + "type": "string" + }, + "select": { + "description": "The selected tag value of the property", + "type": "string" + } + }, + "type": "object" + }, + "apimodel.SelectPropertyValue": { + "properties": { + "format": { + "$ref": "#/components/schemas/apimodel.PropertyFormat" + }, + "id": { + "description": "The id of the property", + "example": "bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a", + "type": "string" + }, + "key": { + "description": "The key of the property", + "example": "status", + "type": "string" + }, + "name": { + "description": "The name of the property", + "example": "Status", + "type": "string" + }, + "object": { + "description": "The data model of the object", + "example": "property", + "type": "string" + }, + "select": { + "$ref": "#/components/schemas/apimodel.Tag" + } + }, + "type": "object" + }, + "apimodel.Sort": { + "properties": { + "format": { + "$ref": "#/components/schemas/apimodel.PropertyFormat" + }, + "id": { + "description": "The id of the sort", + "example": "67bf3f21cda9134102e2422c", + "type": "string" + }, + "property_key": { + "description": "The property key used for sorting", + "example": "name", + "type": "string" + }, + "sort_type": { + "description": "The sort direction", + "enum": [ + "asc", + "desc", + "custom" + ], + "example": "asc", + "type": "string" + } + }, + "type": "object" + }, + "apimodel.SortDirection": { + "default": "desc", + "description": "The direction to sort the search results", + "enum": [ + "asc", + "desc" + ], + "type": "string", + "x-enum-varnames": [ + "Asc", + "Desc" + ] + }, + "apimodel.SortOptions": { + "description": "The sorting criteria and direction for the search results", + "properties": { + "direction": { + "$ref": "#/components/schemas/apimodel.SortDirection" + }, + "property_key": { + "$ref": "#/components/schemas/apimodel.SortProperty" + } + }, + "required": [ + "direction", + "property_key" + ], + "type": "object" + }, + "apimodel.SortProperty": { + "default": "last_modified_date", + "description": "The property to sort the search results by", + "enum": [ + "created_date", + "last_modified_date", + "last_opened_date", + "name" + ], + "type": "string", + "x-enum-varnames": [ + "CreatedDate", + "LastModifiedDate", + "LastOpenedDate", + "Name" + ] + }, + "apimodel.Space": { + "description": "The space", + "properties": { + "description": { + "description": "The description of the space", + "example": "The local-first wiki", + "type": "string" + }, + "gateway_url": { + "description": "The gateway url to serve files and media", + "example": "http://127.0.0.1:31006", + "type": "string" + }, + "icon": { + "$ref": "#/components/schemas/apimodel.Icon" + }, + "id": { + "description": "The id of the space", + "example": "bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1", + "type": "string" + }, + "name": { + "description": "The name of the space", + "example": "My Space", + "type": "string" + }, + "network_id": { + "description": "The network id of the space", + "example": "N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU", + "type": "string" + }, + "object": { + "description": "The data model of the object", + "example": "space", + "type": "string" + } + }, + "type": "object" + }, + "apimodel.SpaceResponse": { + "properties": { + "space": { + "$ref": "#/components/schemas/apimodel.Space" + } + }, + "type": "object" + }, + "apimodel.Tag": { + "description": "The selected tag value of the property", + "properties": { + "color": { + "$ref": "#/components/schemas/apimodel.Color" + }, + "id": { + "description": "The id of the tag", + "example": "bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq", + "type": "string" + }, + "key": { + "description": "The key of the tag", + "example": "67b0d3e3cda913b84c1299b1", + "type": "string" + }, + "name": { + "description": "The name of the tag", + "example": "in-progress", + "type": "string" + }, + "object": { + "description": "The data model of the object", + "example": "tag", + "type": "string" + } + }, + "type": "object" + }, + "apimodel.TagResponse": { + "properties": { + "tag": { + "$ref": "#/components/schemas/apimodel.Tag" + } + }, + "type": "object" + }, + "apimodel.TemplateResponse": { + "properties": { + "template": { + "$ref": "#/components/schemas/apimodel.ObjectWithBody" + } + }, + "type": "object" + }, + "apimodel.TextPropertyLinkValue": { + "properties": { + "format": { + "$ref": "#/components/schemas/apimodel.PropertyFormat" + }, + "key": { + "example": "description", + "type": "string" + }, + "text": { + "description": "The text value of the property", + "example": "Some text...", + "type": "string" + } + }, + "type": "object" + }, + "apimodel.TextPropertyValue": { + "properties": { + "format": { + "$ref": "#/components/schemas/apimodel.PropertyFormat" + }, + "id": { + "description": "The id of the property", + "example": "bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a", + "type": "string" + }, + "key": { + "description": "The key of the property", + "example": "description", + "type": "string" + }, + "name": { + "description": "The name of the property", + "example": "Description", + "type": "string" + }, + "object": { + "description": "The data model of the object", + "example": "property", + "type": "string" + }, + "text": { + "description": "The text value of the property", + "example": "Some text...", + "type": "string" + } + }, + "type": "object" + }, + "apimodel.TokenResponse": { + "properties": { + "app_key": { + "description": "The app key used to authenticate requests", + "example": "zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=", + "type": "string" + } + }, + "type": "object" + }, + "apimodel.Type": { + "description": "The type of the object", + "properties": { + "archived": { + "description": "Whether the type is archived", + "example": false, + "type": "boolean" + }, + "icon": { + "$ref": "#/components/schemas/apimodel.Icon" + }, + "id": { + "description": "The id of the type (which is unique across spaces)", + "example": "bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu", + "type": "string" + }, + "key": { + "description": "The key of the type (can be the same across spaces for known types)", + "example": "page", + "type": "string" + }, + "layout": { + "description": "The layout of the object", + "example": "basic", + "type": "string", + "x-enum-varnames": [ + "ObjectLayoutBasic", + "ObjectLayoutProfile", + "ObjectLayoutAction", + "ObjectLayoutNote", + "ObjectLayoutBookmark", + "ObjectLayoutSet", + "ObjectLayoutCollection", + "ObjectLayoutParticipant" + ] + }, + "name": { + "description": "The name of the type", + "example": "Page", + "type": "string" + }, + "object": { + "description": "The data model of the object", + "example": "type", + "type": "string" + }, + "plural_name": { + "description": "The plural name of the type", + "example": "Pages", + "type": "string" + }, + "properties": { + "description": "The properties linked to the type", + "items": { + "$ref": "#/components/schemas/apimodel.Property" + }, + "type": "array", + "uniqueItems": false + } + }, + "type": "object" + }, + "apimodel.TypeLayout": { + "description": "The layout of the type", + "example": "basic", + "type": "string", + "x-enum-varnames": [ + "TypeLayoutBasic", + "TypeLayoutProfile", + "TypeLayoutAction", + "TypeLayoutNote" + ] + }, + "apimodel.TypeResponse": { + "properties": { + "type": { + "$ref": "#/components/schemas/apimodel.Type" + } + }, + "type": "object" + }, + "apimodel.URLPropertyLinkValue": { + "properties": { + "format": { + "$ref": "#/components/schemas/apimodel.PropertyFormat" + }, + "key": { + "example": "source", + "type": "string" + }, + "url": { + "description": "The URL value of the property", + "example": "https://example.com", + "type": "string" + } + }, + "type": "object" + }, + "apimodel.URLPropertyValue": { + "properties": { + "format": { + "$ref": "#/components/schemas/apimodel.PropertyFormat" + }, + "id": { + "description": "The id of the property", + "example": "bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a", + "type": "string" + }, + "key": { + "description": "The key of the property", + "example": "source", + "type": "string" + }, + "name": { + "description": "The name of the property", + "example": "Source", + "type": "string" + }, + "object": { + "description": "The data model of the object", + "example": "property", + "type": "string" + }, + "url": { + "description": "The URL value of the property", + "example": "https://example.com", + "type": "string" + } + }, + "type": "object" + }, + "apimodel.UpdateObjectRequest": { + "properties": { + "icon": { + "$ref": "#/components/schemas/apimodel.Icon" + }, + "name": { + "description": "The name of the object", + "example": "My object", + "type": "string" + }, + "properties": { + "description": "⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object", + "items": { + "$ref": "#/components/schemas/apimodel.PropertyLinkWithValue" + }, + "type": "array", + "uniqueItems": false + } + }, + "type": "object" + }, + "apimodel.UpdatePropertyRequest": { + "properties": { + "name": { + "description": "The name to set for the property", + "example": "Last modified date", + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "apimodel.UpdateSpaceRequest": { + "properties": { + "description": { + "description": "The description of the space", + "example": "The local-first wiki", + "type": "string" + }, + "name": { + "description": "The name of the space", + "example": "New Space", + "type": "string" + } + }, + "type": "object" + }, + "apimodel.UpdateTagRequest": { + "properties": { + "color": { + "$ref": "#/components/schemas/apimodel.Color" + }, + "name": { + "description": "The name to set for the tag", + "example": "In progress", + "type": "string" + } + }, + "type": "object" + }, + "apimodel.UpdateTypeRequest": { + "properties": { + "icon": { + "$ref": "#/components/schemas/apimodel.Icon" + }, + "layout": { + "description": "The layout of the type", + "example": "basic", + "type": "string", + "x-enum-varnames": [ + "TypeLayoutBasic", + "TypeLayoutProfile", + "TypeLayoutAction", + "TypeLayoutNote" + ] + }, + "name": { + "description": "The name to set for the type", + "example": "Page", + "type": "string" + }, + "plural_name": { + "description": "The plural name to set for the type", + "example": "Pages", + "type": "string" + }, + "properties": { + "description": "⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type", + "items": { + "$ref": "#/components/schemas/apimodel.PropertyLink" + }, + "type": "array", + "uniqueItems": false + } + }, + "type": "object" + }, + "apimodel.View": { + "properties": { + "filters": { + "description": "The list of filters", + "items": { + "$ref": "#/components/schemas/apimodel.Filter" + }, + "type": "array", + "uniqueItems": false + }, + "id": { + "description": "The id of the view", + "example": "67bf3f21cda9134102e2422c", + "type": "string" + }, + "layout": { + "description": "The layout of the view", + "enum": [ + "grid", + "table" + ], + "example": "grid", + "type": "string" + }, + "name": { + "description": "The name of the view", + "example": "All", + "type": "string" + }, + "sorts": { + "description": "The list of sorts", + "items": { + "$ref": "#/components/schemas/apimodel.Sort" + }, + "type": "array", + "uniqueItems": false + } + }, + "type": "object" + }, + "pagination.PaginatedResponse-apimodel_Member": { + "properties": { + "data": { + "description": "The list of items in the current result set", + "items": { + "$ref": "#/components/schemas/apimodel.Member" + }, + "type": "array", + "uniqueItems": false + }, + "pagination": { + "$ref": "#/components/schemas/pagination.PaginationMeta" + } + }, + "type": "object" + }, + "pagination.PaginatedResponse-apimodel_Object": { + "properties": { + "data": { + "description": "The list of items in the current result set", + "items": { + "$ref": "#/components/schemas/apimodel.Object" + }, + "type": "array", + "uniqueItems": false + }, + "pagination": { + "$ref": "#/components/schemas/pagination.PaginationMeta" + } + }, + "type": "object" + }, + "pagination.PaginatedResponse-apimodel_Property": { + "properties": { + "data": { + "description": "The list of items in the current result set", + "items": { + "$ref": "#/components/schemas/apimodel.Property" + }, + "type": "array", + "uniqueItems": false + }, + "pagination": { + "$ref": "#/components/schemas/pagination.PaginationMeta" + } + }, + "type": "object" + }, + "pagination.PaginatedResponse-apimodel_Space": { + "properties": { + "data": { + "description": "The list of items in the current result set", + "items": { + "$ref": "#/components/schemas/apimodel.Space" + }, + "type": "array", + "uniqueItems": false + }, + "pagination": { + "$ref": "#/components/schemas/pagination.PaginationMeta" + } + }, + "type": "object" + }, + "pagination.PaginatedResponse-apimodel_Tag": { + "properties": { + "data": { + "description": "The list of items in the current result set", + "items": { + "$ref": "#/components/schemas/apimodel.Tag" + }, + "type": "array", + "uniqueItems": false + }, + "pagination": { + "$ref": "#/components/schemas/pagination.PaginationMeta" + } + }, + "type": "object" + }, + "pagination.PaginatedResponse-apimodel_Type": { + "properties": { + "data": { + "description": "The list of items in the current result set", + "items": { + "$ref": "#/components/schemas/apimodel.Type" + }, + "type": "array", + "uniqueItems": false + }, + "pagination": { + "$ref": "#/components/schemas/pagination.PaginationMeta" + } + }, + "type": "object" + }, + "pagination.PaginatedResponse-apimodel_View": { + "properties": { + "data": { + "description": "The list of items in the current result set", + "items": { + "$ref": "#/components/schemas/apimodel.View" + }, + "type": "array", + "uniqueItems": false + }, + "pagination": { + "$ref": "#/components/schemas/pagination.PaginationMeta" + } + }, + "type": "object" + }, + "pagination.PaginationMeta": { + "description": "The pagination metadata for the response", + "properties": { + "has_more": { + "description": "Indicates if there are more items available beyond the current result set", + "example": true, + "type": "boolean" + }, + "limit": { + "description": "The maximum number of items returned in the result set", + "example": 100, + "type": "integer" + }, + "offset": { + "description": "The number of items skipped before starting to collect the result set", + "example": 0, + "type": "integer" + }, + "total": { + "description": "The total number of items available for the endpoint", + "example": 1000, + "type": "integer" + } + }, + "type": "object" + }, + "util.ForbiddenError": { + "properties": { + "code": { + "example": "forbidden", + "type": "string" + }, + "message": { + "example": "Forbidden", + "type": "string" + }, + "object": { + "example": "error", + "type": "string" + }, + "status": { + "example": 403, + "type": "integer" + } + }, + "type": "object" + }, + "util.GoneError": { + "properties": { + "code": { + "example": "resource_gone", + "type": "string" + }, + "message": { + "example": "Resource is gone", + "type": "string" + }, + "object": { + "example": "error", + "type": "string" + }, + "status": { + "example": 410, + "type": "integer" + } + }, + "type": "object" + }, + "util.NotFoundError": { + "properties": { + "code": { + "example": "object_not_found", + "type": "string" + }, + "message": { + "example": "Resource not found", + "type": "string" + }, + "object": { + "example": "error", + "type": "string" + }, + "status": { + "example": 404, + "type": "integer" + } + }, + "type": "object" + }, + "util.RateLimitError": { + "properties": { + "code": { + "example": "rate_limit_exceeded", + "type": "string" + }, + "message": { + "example": "Rate limit exceeded", + "type": "string" + }, + "object": { + "example": "error", + "type": "string" + }, + "status": { + "example": 429, + "type": "integer" + } + }, + "type": "object" + }, + "util.ServerError": { + "properties": { + "code": { + "example": "internal_server_error", + "type": "string" + }, + "message": { + "example": "Internal server error", + "type": "string" + }, + "object": { + "example": "error", + "type": "string" + }, + "status": { + "example": 500, + "type": "integer" + } + }, + "type": "object" + }, + "util.UnauthorizedError": { + "properties": { + "code": { + "example": "unauthorized", + "type": "string" + }, + "message": { + "example": "Unauthorized", + "type": "string" + }, + "object": { + "example": "error", + "type": "string" + }, + "status": { + "example": 401, + "type": "integer" + } + }, + "type": "object" + }, + "util.ValidationError": { + "properties": { + "code": { + "example": "bad_request", + "type": "string" + }, + "message": { + "example": "Bad request", + "type": "string" + }, + "object": { + "example": "error", + "type": "string" + }, + "status": { + "example": 400, + "type": "integer" + } + }, + "type": "object" + } + }, + "securitySchemes": { + "bearerauth": { + "bearerFormat": "JWT", + "scheme": "bearer", + "type": "http" + } + } + }, + "info": { + "contact": { + "email": "support@anytype.io", + "name": "Anytype Support", + "url": "https://anytype.io/contact" + }, + "description": "This API empowers seamless interaction with Anytype's resources—spaces, objects, properties, types, templates, and beyond.", + "license": { + "name": "Any Source Available License 1.0", + "url": "https://github.com/anyproto/anytype-api/blob/main/LICENSE.md" + }, + "termsOfService": "https://anytype.io/terms_of_use", + "title": "Anytype API", + "version": "2025-05-20" + }, + "externalDocs": { + "description": "OpenAPI", + "url": "https://swagger.io/resources/open-api/" + }, + "paths": { + "/v1/auth/display_code": { + "post": { + "description": "Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid `app_name`, the server issues a unique `challenge_id` and displays a short code within the Anytype Desktop On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.", + "operationId": "create_auth_challenge", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "Anytype-Version", + "required": true, + "schema": { + "default": "2025-05-20", + "type": "string" + } + }, + { + "description": "The name of the app requesting API access", + "in": "query", + "name": "app_name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apimodel.DisplayCodeResponse" + } + } + }, + "description": "The challenge ID associated with the started challenge" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ValidationError" + } + } + }, + "description": "Invalid input" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ServerError" + } + } + }, + "description": "Internal server error" + } + }, + "summary": "Start new challenge", + "tags": [ + "Auth" + ] + } + }, + "/v1/auth/token": { + "post": { + "description": "After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent app key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.", + "operationId": "solve_auth_challenge", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "Anytype-Version", + "required": true, + "schema": { + "default": "2025-05-20", + "type": "string" + } + }, + { + "description": "The ID of the challenge to solve", + "in": "query", + "name": "challenge_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "4-digit code retrieved from Anytype Desktop app", + "in": "query", + "name": "code", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apimodel.TokenResponse" + } + } + }, + "description": "The app key that can be used in the Authorization header for subsequent requests" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ValidationError" + } + } + }, + "description": "Invalid input" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ServerError" + } + } + }, + "description": "Internal server error" + } + }, + "summary": "Solve challenge", + "tags": [ + "Auth" + ] + } + }, + "/v1/search": { + "post": { + "description": "Executes a global search over every space accessible by the authenticated user. The request body must specify the `query` text, optional filters on object types (e.g., \"page\", \"task\"), and sort directives (default: descending by last updated timestamp). Pagination is controlled via `offset` and `limit` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.", + "operationId": "search_global", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "Anytype-Version", + "required": true, + "schema": { + "default": "2025-05-20", + "type": "string" + } + }, + { + "description": "The number of items to skip before starting to collect the result set", + "in": "query", + "name": "offset", + "schema": { + "default": 0, + "type": "integer" + } + }, + { + "description": "The number of items to return", + "in": "query", + "name": "limit", + "schema": { + "default": 100, + "maximum": 1000, + "type": "integer" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apimodel.SearchRequest" + } + } + }, + "description": "The search parameters used to filter and sort the results", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/pagination.PaginatedResponse-apimodel_Object" + } + } + }, + "description": "The list of objects matching the search criteria" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.UnauthorizedError" + } + } + }, + "description": "Unauthorized" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ServerError" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "bearerauth": [] + } + ], + "summary": "Search objects across all spaces", + "tags": [ + "Search" + ] + } + }, + "/v1/spaces": { + "get": { + "description": "Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.", + "operationId": "list_spaces", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "Anytype-Version", + "required": true, + "schema": { + "default": "2025-05-20", + "type": "string" + } + }, + { + "description": "The number of items to skip before starting to collect the result set", + "in": "query", + "name": "offset", + "schema": { + "default": 0, + "type": "integer" + } + }, + { + "description": "The number of items to return", + "in": "query", + "name": "limit", + "schema": { + "default": 100, + "maximum": 1000, + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/pagination.PaginatedResponse-apimodel_Space" + } + } + }, + "description": "The list of spaces accessible by the authenticated user" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.UnauthorizedError" + } + } + }, + "description": "Unauthorized" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ServerError" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "bearerauth": [] + } + ], + "summary": "List spaces", + "tags": [ + "Spaces" + ] + }, + "post": { + "description": "Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.", + "operationId": "create_space", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "Anytype-Version", + "required": true, + "schema": { + "default": "2025-05-20", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apimodel.CreateSpaceRequest" + } + } + }, + "description": "The space to create", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apimodel.SpaceResponse" + } + } + }, + "description": "The created space" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ValidationError" + } + } + }, + "description": "Bad request" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.UnauthorizedError" + } + } + }, + "description": "Unauthorized" + }, + "429": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.RateLimitError" + } + } + }, + "description": "Rate limit exceeded" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ServerError" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "bearerauth": [] + } + ], + "summary": "Create space", + "tags": [ + "Spaces" + ] + } + }, + "/v1/spaces/{space_id}": { + "get": { + "description": "Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.", + "operationId": "get_space", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "Anytype-Version", + "required": true, + "schema": { + "default": "2025-05-20", + "type": "string" + } + }, + { + "description": "The ID of the space to retrieve", + "in": "path", + "name": "space_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apimodel.SpaceResponse" + } + } + }, + "description": "The space details" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.UnauthorizedError" + } + } + }, + "description": "Unauthorized" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.NotFoundError" + } + } + }, + "description": "Space not found" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ServerError" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "bearerauth": [] + } + ], + "summary": "Get space", + "tags": [ + "Spaces" + ] + }, + "patch": { + "description": "Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.", + "operationId": "update_space", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "Anytype-Version", + "required": true, + "schema": { + "default": "2025-05-20", + "type": "string" + } + }, + { + "description": "The ID of the space to update", + "in": "path", + "name": "space_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apimodel.UpdateSpaceRequest" + } + } + }, + "description": "The space details to update", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apimodel.SpaceResponse" + } + } + }, + "description": "The updated space" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ValidationError" + } + } + }, + "description": "Bad request" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.UnauthorizedError" + } + } + }, + "description": "Unauthorized" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ForbiddenError" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.NotFoundError" + } + } + }, + "description": "Space not found" + }, + "429": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.RateLimitError" + } + } + }, + "description": "Rate limit exceeded" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ServerError" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "bearerauth": [] + } + ], + "summary": "Update space", + "tags": [ + "Spaces" + ] + } + }, + "/v1/spaces/{space_id}/lists/{list_id}/objects": { + "post": { + "description": "Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.", + "operationId": "add_list_objects", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "Anytype-Version", + "required": true, + "schema": { + "default": "2025-05-20", + "type": "string" + } + }, + { + "description": "The ID of the space to which the list belongs", + "in": "path", + "name": "space_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The ID of the list to which objects will be added", + "in": "path", + "name": "list_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "items": { + "type": "string" + }, + "type": "array" + } + } + }, + "description": "The list of object IDs to add to the list", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "description": "Objects added successfully" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ValidationError" + } + } + }, + "description": "Bad request" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.UnauthorizedError" + } + } + }, + "description": "Unauthorized" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.NotFoundError" + } + } + }, + "description": "Not found" + }, + "429": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.RateLimitError" + } + } + }, + "description": "Rate limit exceeded" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ServerError" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "bearerauth": [] + } + ], + "summary": "Add objects to list", + "tags": [ + "Lists" + ] + } + }, + "/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}": { + "delete": { + "description": "Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.", + "operationId": "remove_list_object", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "Anytype-Version", + "required": true, + "schema": { + "default": "2025-05-20", + "type": "string" + } + }, + { + "description": "The ID of the space to which the list belongs", + "in": "path", + "name": "space_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The ID of the list from which the object will be removed", + "in": "path", + "name": "list_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The ID of the object to remove from the list", + "in": "path", + "name": "object_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "description": "Objects removed successfully" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ValidationError" + } + } + }, + "description": "Bad request" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.UnauthorizedError" + } + } + }, + "description": "Unauthorized" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.NotFoundError" + } + } + }, + "description": "Not found" + }, + "429": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.RateLimitError" + } + } + }, + "description": "Rate limit exceeded" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ServerError" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "bearerauth": [] + } + ], + "summary": "Remove object from list", + "tags": [ + "Lists" + ] + } + }, + "/v1/spaces/{space_id}/lists/{list_id}/views": { + "get": { + "description": "Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.", + "operationId": "get_list_views", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "Anytype-Version", + "required": true, + "schema": { + "default": "2025-05-20", + "type": "string" + } + }, + { + "description": "The ID of the space to which the list belongs", + "in": "path", + "name": "space_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The ID of the list to retrieve views for", + "in": "path", + "name": "list_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The number of items to skip before starting to collect the result set", + "in": "query", + "name": "offset", + "schema": { + "default": 0, + "type": "integer" + } + }, + { + "description": "The number of items to return", + "in": "query", + "name": "limit", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/pagination.PaginatedResponse-apimodel_View" + } + } + }, + "description": "The list of views associated with the specified list" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.UnauthorizedError" + } + } + }, + "description": "Unauthorized" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.NotFoundError" + } + } + }, + "description": "Not found" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ServerError" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "bearerauth": [] + } + ], + "summary": "Get list views", + "tags": [ + "Lists" + ] + } + }, + "/v1/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects": { + "get": { + "description": "Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.", + "operationId": "get_list_objects", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "Anytype-Version", + "required": true, + "schema": { + "default": "2025-05-20", + "type": "string" + } + }, + { + "description": "The ID of the space to which the list belongs", + "in": "path", + "name": "space_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The ID of the list to retrieve objects for", + "in": "path", + "name": "list_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The ID of the view to retrieve objects for", + "in": "path", + "name": "view_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The number of items to skip before starting to collect the result set", + "in": "query", + "name": "offset", + "schema": { + "default": 0, + "type": "integer" + } + }, + { + "description": "The number of items to return", + "in": "query", + "name": "limit", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/pagination.PaginatedResponse-apimodel_Object" + } + } + }, + "description": "The list of objects associated with the specified list" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.UnauthorizedError" + } + } + }, + "description": "Unauthorized" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.NotFoundError" + } + } + }, + "description": "Not found" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ServerError" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "bearerauth": [] + } + ], + "summary": "Get objects in list", + "tags": [ + "Lists" + ] + } + }, + "/v1/spaces/{space_id}/members": { + "get": { + "description": "Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.", + "operationId": "list_members", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "Anytype-Version", + "required": true, + "schema": { + "default": "2025-05-20", + "type": "string" + } + }, + { + "description": "The ID of the space to list members for", + "in": "path", + "name": "space_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The number of items to skip before starting to collect the result set", + "in": "query", + "name": "offset", + "schema": { + "default": 0, + "type": "integer" + } + }, + { + "description": "The number of items to return", + "in": "query", + "name": "limit", + "schema": { + "default": 100, + "maximum": 1000, + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/pagination.PaginatedResponse-apimodel_Member" + } + } + }, + "description": "The list of members in the space" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.UnauthorizedError" + } + } + }, + "description": "Unauthorized" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ServerError" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "bearerauth": [] + } + ], + "summary": "List members", + "tags": [ + "Members" + ] + } + }, + "/v1/spaces/{space_id}/members/{member_id}": { + "get": { + "description": "Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with `_participant`) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.", + "operationId": "get_member", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "Anytype-Version", + "required": true, + "schema": { + "default": "2025-05-20", + "type": "string" + } + }, + { + "description": "The ID of the space to get the member from", + "in": "path", + "name": "space_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Member ID or Identity", + "in": "path", + "name": "member_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apimodel.MemberResponse" + } + } + }, + "description": "The member details" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.UnauthorizedError" + } + } + }, + "description": "Unauthorized" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.NotFoundError" + } + } + }, + "description": "Member not found" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ServerError" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "bearerauth": [] + } + ], + "summary": "Get member", + "tags": [ + "Members" + ] + } + }, + "/v1/spaces/{space_id}/objects": { + "get": { + "description": "Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.", + "operationId": "list_objects", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "Anytype-Version", + "required": true, + "schema": { + "default": "2025-05-20", + "type": "string" + } + }, + { + "description": "The ID of the space in which to list objects", + "in": "path", + "name": "space_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The number of items to skip before starting to collect the result set", + "in": "query", + "name": "offset", + "schema": { + "default": 0, + "type": "integer" + } + }, + { + "description": "The number of items to return", + "in": "query", + "name": "limit", + "schema": { + "default": 100, + "maximum": 1000, + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/pagination.PaginatedResponse-apimodel_Object" + } + } + }, + "description": "The list of objects in the specified space" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.UnauthorizedError" + } + } + }, + "description": "Unauthorized" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ServerError" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "bearerauth": [] + } + ], + "summary": "List objects", + "tags": [ + "Objects" + ] + }, + "post": { + "description": "Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.", + "operationId": "create_object", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "Anytype-Version", + "required": true, + "schema": { + "default": "2025-05-20", + "type": "string" + } + }, + { + "description": "The ID of the space in which to create the object", + "in": "path", + "name": "space_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apimodel.CreateObjectRequest" + } + } + }, + "description": "The object to create", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apimodel.ObjectResponse" + } + } + }, + "description": "The created object" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ValidationError" + } + } + }, + "description": "Bad request" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.UnauthorizedError" + } + } + }, + "description": "Unauthorized" + }, + "429": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.RateLimitError" + } + } + }, + "description": "Rate limit exceeded" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ServerError" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "bearerauth": [] + } + ], + "summary": "Create object", + "tags": [ + "Objects" + ] + } + }, + "/v1/spaces/{space_id}/objects/{object_id}": { + "delete": { + "description": "This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.", + "operationId": "delete_object", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "Anytype-Version", + "required": true, + "schema": { + "default": "2025-05-20", + "type": "string" + } + }, + { + "description": "The ID of the space in which the object exists", + "in": "path", + "name": "space_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The ID of the object to delete", + "in": "path", + "name": "object_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apimodel.ObjectResponse" + } + } + }, + "description": "The deleted object" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.UnauthorizedError" + } + } + }, + "description": "Unauthorized" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ForbiddenError" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.NotFoundError" + } + } + }, + "description": "Resource not found" + }, + "410": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.GoneError" + } + } + }, + "description": "Resource deleted" + }, + "429": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.RateLimitError" + } + } + }, + "description": "Rate limit exceeded" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ServerError" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "bearerauth": [] + } + ], + "summary": "Delete object", + "tags": [ + "Objects" + ] + }, + "get": { + "description": "Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.", + "operationId": "get_object", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "Anytype-Version", + "required": true, + "schema": { + "default": "2025-05-20", + "type": "string" + } + }, + { + "description": "The ID of the space in which the object exists", + "in": "path", + "name": "space_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The ID of the object to retrieve", + "in": "path", + "name": "object_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The format to return the object body in", + "in": "query", + "name": "format", + "schema": { + "default": "\"md\"", + "enum": [ + "md" + ], + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apimodel.ObjectResponse" + } + } + }, + "description": "The retrieved object" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.UnauthorizedError" + } + } + }, + "description": "Unauthorized" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.NotFoundError" + } + } + }, + "description": "Resource not found" + }, + "410": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.GoneError" + } + } + }, + "description": "Resource deleted" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ServerError" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "bearerauth": [] + } + ], + "summary": "Get object", + "tags": [ + "Objects" + ] + }, + "patch": { + "description": "This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.", + "operationId": "update_object", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "Anytype-Version", + "required": true, + "schema": { + "default": "2025-05-20", + "type": "string" + } + }, + { + "description": "The ID of the space in which the object exists", + "in": "path", + "name": "space_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The ID of the object to update", + "in": "path", + "name": "object_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apimodel.UpdateObjectRequest" + } + } + }, + "description": "The details of the object to update", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apimodel.ObjectResponse" + } + } + }, + "description": "The updated object" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ValidationError" + } + } + }, + "description": "Bad request" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.UnauthorizedError" + } + } + }, + "description": "Unauthorized" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.NotFoundError" + } + } + }, + "description": "Resource not found" + }, + "410": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.GoneError" + } + } + }, + "description": "Resource deleted" + }, + "429": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.RateLimitError" + } + } + }, + "description": "Rate limit exceeded" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ServerError" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "bearerauth": [] + } + ], + "summary": "Update object", + "tags": [ + "Objects" + ] + } + }, + "/v1/spaces/{space_id}/properties": { + "get": { + "description": "⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.", + "operationId": "list_properties", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "Anytype-Version", + "required": true, + "schema": { + "default": "2025-05-20", + "type": "string" + } + }, + { + "description": "The ID of the space to list properties for", + "in": "path", + "name": "space_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The number of items to skip before starting to collect the result set", + "in": "query", + "name": "offset", + "schema": { + "default": 0, + "type": "integer" + } + }, + { + "description": "The number of items to return", + "in": "query", + "name": "limit", + "schema": { + "default": 100, + "maximum": 1000, + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/pagination.PaginatedResponse-apimodel_Property" + } + } + }, + "description": "The list of properties in the specified space" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.UnauthorizedError" + } + } + }, + "description": "Unauthorized" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ServerError" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "bearerauth": [] + } + ], + "summary": "List properties", + "tags": [ + "Properties" + ] + }, + "post": { + "description": "⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.", + "operationId": "create_property", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "Anytype-Version", + "required": true, + "schema": { + "default": "2025-05-20", + "type": "string" + } + }, + { + "description": "The ID of the space to create the property in", + "in": "path", + "name": "space_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apimodel.CreatePropertyRequest" + } + } + }, + "description": "The property to create", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apimodel.PropertyResponse" + } + } + }, + "description": "The created property" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ValidationError" + } + } + }, + "description": "Bad request" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.UnauthorizedError" + } + } + }, + "description": "Unauthorized" + }, + "429": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.RateLimitError" + } + } + }, + "description": "Rate limit exceeded" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ServerError" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "bearerauth": [] + } + ], + "summary": "Create property", + "tags": [ + "Properties" + ] + } + }, + "/v1/spaces/{space_id}/properties/{property_id}": { + "delete": { + "description": "⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.", + "operationId": "delete_property", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "Anytype-Version", + "required": true, + "schema": { + "default": "2025-05-20", + "type": "string" + } + }, + { + "description": "The ID of the space to which the property belongs", + "in": "path", + "name": "space_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The ID of the property to delete", + "in": "path", + "name": "property_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apimodel.PropertyResponse" + } + } + }, + "description": "The deleted property" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.UnauthorizedError" + } + } + }, + "description": "Unauthorized" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ForbiddenError" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.NotFoundError" + } + } + }, + "description": "Resource not found" + }, + "410": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.GoneError" + } + } + }, + "description": "Resource deleted" + }, + "429": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.RateLimitError" + } + } + }, + "description": "Rate limit exceeded" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ServerError" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "bearerauth": [] + } + ], + "summary": "Delete property", + "tags": [ + "Properties" + ] + }, + "get": { + "description": "⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).", + "operationId": "get_property", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "Anytype-Version", + "required": true, + "schema": { + "default": "2025-05-20", + "type": "string" + } + }, + { + "description": "The ID of the space to which the property belongs", + "in": "path", + "name": "space_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The ID of the property to retrieve", + "in": "path", + "name": "property_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apimodel.PropertyResponse" + } + } + }, + "description": "The requested property" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.UnauthorizedError" + } + } + }, + "description": "Unauthorized" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.NotFoundError" + } + } + }, + "description": "Resource not found" + }, + "410": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.GoneError" + } + } + }, + "description": "Resource deleted" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ServerError" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "bearerauth": [] + } + ], + "summary": "Get property", + "tags": [ + "Properties" + ] + }, + "patch": { + "description": "⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.", + "operationId": "update_property", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "Anytype-Version", + "required": true, + "schema": { + "default": "2025-05-20", + "type": "string" + } + }, + { + "description": "The ID of the space to which the property belongs", + "in": "path", + "name": "space_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The ID of the property to update", + "in": "path", + "name": "property_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apimodel.UpdatePropertyRequest" + } + } + }, + "description": "The property to update", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apimodel.PropertyResponse" + } + } + }, + "description": "The updated property" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ValidationError" + } + } + }, + "description": "Bad request" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.UnauthorizedError" + } + } + }, + "description": "Unauthorized" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ForbiddenError" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.NotFoundError" + } + } + }, + "description": "Resource not found" + }, + "410": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.GoneError" + } + } + }, + "description": "Resource deleted" + }, + "429": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.RateLimitError" + } + } + }, + "description": "Rate limit exceeded" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ServerError" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "bearerauth": [] + } + ], + "summary": "Update property", + "tags": [ + "Properties" + ] + } + }, + "/v1/spaces/{space_id}/properties/{property_id}/tags": { + "get": { + "description": "This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.", + "operationId": "list_tags", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "Anytype-Version", + "required": true, + "schema": { + "default": "2025-05-20", + "type": "string" + } + }, + { + "description": "The ID of the space to list tags for", + "in": "path", + "name": "space_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The ID of the property to list tags for", + "in": "path", + "name": "property_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/pagination.PaginatedResponse-apimodel_Tag" + } + } + }, + "description": "The list of tags" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.UnauthorizedError" + } + } + }, + "description": "Unauthorized" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.NotFoundError" + } + } + }, + "description": "Property not found" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ServerError" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "bearerauth": [] + } + ], + "summary": "List tags", + "tags": [ + "Tags" + ] + }, + "post": { + "description": "This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.", + "operationId": "create_tag", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "Anytype-Version", + "required": true, + "schema": { + "default": "2025-05-20", + "type": "string" + } + }, + { + "description": "The ID of the space to create the tag in", + "in": "path", + "name": "space_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The ID of the property to create the tag for", + "in": "path", + "name": "property_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apimodel.CreateTagRequest" + } + } + }, + "description": "The tag to create", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apimodel.TagResponse" + } + } + }, + "description": "The created tag" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ValidationError" + } + } + }, + "description": "Bad request" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.UnauthorizedError" + } + } + }, + "description": "Unauthorized" + }, + "429": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.RateLimitError" + } + } + }, + "description": "Rate limit exceeded" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ServerError" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "bearerauth": [] + } + ], + "summary": "Create tag", + "tags": [ + "Tags" + ] + } + }, + "/v1/spaces/{space_id}/properties/{property_id}/tags/{tag_id}": { + "delete": { + "description": "This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.", + "operationId": "delete_tag", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "Anytype-Version", + "required": true, + "schema": { + "default": "2025-05-20", + "type": "string" + } + }, + { + "description": "The ID of the space to delete the tag from", + "in": "path", + "name": "space_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The ID of the property to delete the tag for", + "in": "path", + "name": "property_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The ID of the tag to delete", + "in": "path", + "name": "tag_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apimodel.TagResponse" + } + } + }, + "description": "The deleted tag" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.UnauthorizedError" + } + } + }, + "description": "Unauthorized" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ForbiddenError" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.NotFoundError" + } + } + }, + "description": "Resource not found" + }, + "410": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.GoneError" + } + } + }, + "description": "Resource deleted" + }, + "429": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.RateLimitError" + } + } + }, + "description": "Rate limit exceeded" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ServerError" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "bearerauth": [] + } + ], + "summary": "Delete tag", + "tags": [ + "Tags" + ] + }, + "get": { + "description": "This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.", + "operationId": "get_tag", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "Anytype-Version", + "required": true, + "schema": { + "default": "2025-05-20", + "type": "string" + } + }, + { + "description": "The ID of the space to retrieve the tag from", + "in": "path", + "name": "space_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The ID of the property to retrieve the tag for", + "in": "path", + "name": "property_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The ID of the tag to retrieve", + "in": "path", + "name": "tag_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apimodel.TagResponse" + } + } + }, + "description": "The retrieved tag" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.UnauthorizedError" + } + } + }, + "description": "Unauthorized" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.NotFoundError" + } + } + }, + "description": "Resource not found" + }, + "410": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.GoneError" + } + } + }, + "description": "Resource deleted" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ServerError" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "bearerauth": [] + } + ], + "summary": "Get tag", + "tags": [ + "Tags" + ] + }, + "patch": { + "description": "This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.", + "operationId": "update_tag", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "Anytype-Version", + "required": true, + "schema": { + "default": "2025-05-20", + "type": "string" + } + }, + { + "description": "The ID of the space to update the tag in", + "in": "path", + "name": "space_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The ID of the property to update the tag for", + "in": "path", + "name": "property_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The ID of the tag to update", + "in": "path", + "name": "tag_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apimodel.UpdateTagRequest" + } + } + }, + "description": "The tag to update", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apimodel.TagResponse" + } + } + }, + "description": "The updated tag" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ValidationError" + } + } + }, + "description": "Bad request" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.UnauthorizedError" + } + } + }, + "description": "Unauthorized" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ForbiddenError" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.NotFoundError" + } + } + }, + "description": "Resource not found" + }, + "410": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.GoneError" + } + } + }, + "description": "Resource deleted" + }, + "429": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.RateLimitError" + } + } + }, + "description": "Rate limit exceeded" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ServerError" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "bearerauth": [] + } + ], + "summary": "Update tag", + "tags": [ + "Tags" + ] + } + }, + "/v1/spaces/{space_id}/search": { + "post": { + "description": "Performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.", + "operationId": "search_space", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "Anytype-Version", + "required": true, + "schema": { + "default": "2025-05-20", + "type": "string" + } + }, + { + "description": "The ID of the space to search in", + "in": "path", + "name": "space_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The number of items to skip before starting to collect the result set", + "in": "query", + "name": "offset", + "schema": { + "default": 0, + "type": "integer" + } + }, + { + "description": "The number of items to return", + "in": "query", + "name": "limit", + "schema": { + "default": 100, + "maximum": 1000, + "type": "integer" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apimodel.SearchRequest" + } + } + }, + "description": "The search parameters used to filter and sort the results", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/pagination.PaginatedResponse-apimodel_Object" + } + } + }, + "description": "The list of objects matching the search criteria" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.UnauthorizedError" + } + } + }, + "description": "Unauthorized" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ServerError" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "bearerauth": [] + } + ], + "summary": "Search objects within a space", + "tags": [ + "Search" + ] + } + }, + "/v1/spaces/{space_id}/types": { + "get": { + "description": "This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.", + "operationId": "list_types", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "Anytype-Version", + "required": true, + "schema": { + "default": "2025-05-20", + "type": "string" + } + }, + { + "description": "The ID of the space to retrieve types from", + "in": "path", + "name": "space_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The number of items to skip before starting to collect the result set", + "in": "query", + "name": "offset", + "schema": { + "default": 0, + "type": "integer" + } + }, + { + "description": "The number of items to return", + "in": "query", + "name": "limit", + "schema": { + "default": 100, + "maximum": 1000, + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/pagination.PaginatedResponse-apimodel_Type" + } + } + }, + "description": "The list of types" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.UnauthorizedError" + } + } + }, + "description": "Unauthorized" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ServerError" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "bearerauth": [] + } + ], + "summary": "List types", + "tags": [ + "Types" + ] + }, + "post": { + "description": "Creates a new object type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.", + "operationId": "create_type", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "Anytype-Version", + "required": true, + "schema": { + "default": "2025-05-20", + "type": "string" + } + }, + { + "description": "The ID of the space in which to create the type", + "in": "path", + "name": "space_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apimodel.CreateTypeRequest" + } + } + }, + "description": "The type to create", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apimodel.TypeResponse" + } + } + }, + "description": "The created type" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ValidationError" + } + } + }, + "description": "Bad request" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.UnauthorizedError" + } + } + }, + "description": "Unauthorized" + }, + "429": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.RateLimitError" + } + } + }, + "description": "Rate limit exceeded" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ServerError" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "bearerauth": [] + } + ], + "summary": "Create type", + "tags": [ + "Types" + ] + } + }, + "/v1/spaces/{space_id}/types/{type_id}": { + "delete": { + "description": "This endpoint “deletes” an object type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.", + "operationId": "delete_type", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "Anytype-Version", + "required": true, + "schema": { + "default": "2025-05-20", + "type": "string" + } + }, + { + "description": "The ID of the space from which to delete the type", + "in": "path", + "name": "space_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The ID of the type to delete", + "in": "path", + "name": "type_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apimodel.TypeResponse" + } + } + }, + "description": "The deleted type" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.UnauthorizedError" + } + } + }, + "description": "Unauthorized" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ForbiddenError" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.NotFoundError" + } + } + }, + "description": "Resource not found" + }, + "410": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.GoneError" + } + } + }, + "description": "Resource deleted" + }, + "429": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.RateLimitError" + } + } + }, + "description": "Rate limit exceeded" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ServerError" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "bearerauth": [] + } + ], + "summary": "Delete type", + "tags": [ + "Types" + ] + }, + "get": { + "description": "Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).", + "operationId": "get_type", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "Anytype-Version", + "required": true, + "schema": { + "default": "2025-05-20", + "type": "string" + } + }, + { + "description": "The ID of the space from which to retrieve the type", + "in": "path", + "name": "space_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The ID of the type to retrieve", + "in": "path", + "name": "type_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apimodel.TypeResponse" + } + } + }, + "description": "The requested type" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.UnauthorizedError" + } + } + }, + "description": "Unauthorized" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.NotFoundError" + } + } + }, + "description": "Resource not found" + }, + "410": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.GoneError" + } + } + }, + "description": "Resource deleted" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ServerError" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "bearerauth": [] + } + ], + "summary": "Get type", + "tags": [ + "Types" + ] + }, + "patch": { + "description": "This endpoint updates an existing object type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.", + "operationId": "update_type", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "Anytype-Version", + "required": true, + "schema": { + "default": "2025-05-20", + "type": "string" + } + }, + { + "description": "The ID of the space in which the type exists", + "in": "path", + "name": "space_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The ID of the type to update", + "in": "path", + "name": "type_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apimodel.UpdateTypeRequest" + } + } + }, + "description": "The type details to update", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apimodel.TypeResponse" + } + } + }, + "description": "The updated type" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ValidationError" + } + } + }, + "description": "Bad request" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.UnauthorizedError" + } + } + }, + "description": "Unauthorized" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.NotFoundError" + } + } + }, + "description": "Resource not found" + }, + "410": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.GoneError" + } + } + }, + "description": "Resource deleted" + }, + "429": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.RateLimitError" + } + } + }, + "description": "Rate limit exceeded" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ServerError" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "bearerauth": [] + } + ], + "summary": "Update type", + "tags": [ + "Types" + ] + } + }, + "/v1/spaces/{space_id}/types/{type_id}/templates": { + "get": { + "description": "This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.", + "operationId": "list_templates", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "Anytype-Version", + "required": true, + "schema": { + "default": "2025-05-20", + "type": "string" + } + }, + { + "description": "The ID of the space to which the type belongs", + "in": "path", + "name": "space_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The ID of the object type to retrieve templates for", + "in": "path", + "name": "type_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The number of items to skip before starting to collect the result set", + "in": "query", + "name": "offset", + "schema": { + "default": 0, + "type": "integer" + } + }, + { + "description": "The number of items to return", + "in": "query", + "name": "limit", + "schema": { + "default": 100, + "maximum": 1000, + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/pagination.PaginatedResponse-apimodel_Object" + } + } + }, + "description": "List of templates" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.UnauthorizedError" + } + } + }, + "description": "Unauthorized" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ServerError" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "bearerauth": [] + } + ], + "summary": "List templates", + "tags": [ + "Templates" + ] + } + }, + "/v1/spaces/{space_id}/types/{type_id}/templates/{template_id}": { + "get": { + "description": "Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.", + "operationId": "get_template", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "Anytype-Version", + "required": true, + "schema": { + "default": "2025-05-20", + "type": "string" + } + }, + { + "description": "The ID of the space to which the template belongs", + "in": "path", + "name": "space_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The ID of the object type to which the template belongs", + "in": "path", + "name": "type_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The ID of the template to retrieve", + "in": "path", + "name": "template_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apimodel.TemplateResponse" + } + } + }, + "description": "The requested template" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.UnauthorizedError" + } + } + }, + "description": "Unauthorized" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.NotFoundError" + } + } + }, + "description": "Resource not found" + }, + "410": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.GoneError" + } + } + }, + "description": "Resource deleted" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ServerError" + } + } + }, + "description": "Internal server error" + } + }, + "security": [ + { + "bearerauth": [] + } + ], + "summary": "Get template", + "tags": [ + "Templates" + ] + } + } + }, + "openapi": "3.1.0", + "servers": [ + { + "url": "http://localhost:31009" + } + ] +} diff --git a/makefiles/tools.mk b/makefiles/tools.mk index ead87d0ca..82135c0c8 100644 --- a/makefiles/tools.mk +++ b/makefiles/tools.mk @@ -13,7 +13,8 @@ lint: openapi: @echo 'Generating openapi docs...' @swag init --v3.1 -q -d core/api -g service.go -o $(OPENAPI_DOCS_DIR) - @mv $(OPENAPI_DOCS_DIR)/swagger.json $(OPENAPI_DOCS_DIR)/openapi.json @mv $(OPENAPI_DOCS_DIR)/swagger.yaml $(OPENAPI_DOCS_DIR)/openapi.yaml + @mv $(OPENAPI_DOCS_DIR)/swagger.json $(OPENAPI_DOCS_DIR)/openapi.json + @jq . "$(OPENAPI_DOCS_DIR)/openapi.json" > "$(OPENAPI_DOCS_DIR)/pretty.json" && mv "$(OPENAPI_DOCS_DIR)/pretty.json" "$(OPENAPI_DOCS_DIR)/openapi.json" @echo 'Formatting openapi docs...' @swag fmt -d core/api \ No newline at end of file From d17a265c370827180a0dd78926d6cb004afc5e14 Mon Sep 17 00:00:00 2001 From: kirillston Date: Wed, 14 May 2025 16:48:01 +0200 Subject: [PATCH 035/164] GO-5561 Relation to store header relations view type --- pkg/lib/bundle/relation.gen.go | 17 ++++++++++++++++- pkg/lib/bundle/relations.json | 10 ++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/pkg/lib/bundle/relation.gen.go b/pkg/lib/bundle/relation.gen.go index 2d477d4c7..acebc15fe 100644 --- a/pkg/lib/bundle/relation.gen.go +++ b/pkg/lib/bundle/relation.gen.go @@ -9,7 +9,7 @@ import ( "github.com/anyproto/anytype-heart/pkg/lib/pb/model" ) -const RelationChecksum = "62a158a458a241cdf5b502bad800a109a8917ab9026826dd1274262c46b1f839" +const RelationChecksum = "6286826590e76144044044c6c286464d4dfc60319d695eaee9f9c94ed92ab239" const ( RelationKeyTag domain.RelationKey = "tag" RelationKeyCamera domain.RelationKey = "camera" @@ -160,6 +160,7 @@ const ( RelationKeyAutoWidgetTargets domain.RelationKey = "autoWidgetTargets" RelationKeyAutoWidgetDisabled domain.RelationKey = "autoWidgetDisabled" RelationKeyPluralName domain.RelationKey = "pluralName" + RelationKeyHeaderRelationsView domain.RelationKey = "headerRelationsView" ) var ( @@ -759,6 +760,20 @@ var ( ReadOnlyRelation: true, Scope: model.Relation_type, }, + RelationKeyHeaderRelationsView: { + + DataSource: model.Relation_details, + Description: "View mode of header relations. Line or column", + Format: model.RelationFormat_number, + Hidden: true, + Id: "_brheaderRelationsView", + Key: "headerRelationsView", + MaxCount: 1, + Name: "Header relations view", + ReadOnly: false, + ReadOnlyRelation: true, + Scope: model.Relation_type, + }, RelationKeyHeightInPixels: { DataSource: model.Relation_details, diff --git a/pkg/lib/bundle/relations.json b/pkg/lib/bundle/relations.json index c546db0c8..2474d487c 100644 --- a/pkg/lib/bundle/relations.json +++ b/pkg/lib/bundle/relations.json @@ -1535,5 +1535,15 @@ "name": "Plural name", "readonly": false, "source": "details" + }, + { + "description": "View mode of header relations. Line or column", + "format": "number", + "hidden": true, + "key": "headerRelationsView", + "maxCount": 1, + "name": "Header relations view", + "readonly": false, + "source": "details" } ] From 8fae79a74bd9dc356b74c4b7453170c517f678a0 Mon Sep 17 00:00:00 2001 From: kirillston Date: Wed, 14 May 2025 16:58:43 +0200 Subject: [PATCH 036/164] GO-5561 Rename relation to headerRelationsLayout --- pkg/lib/bundle/relation.gen.go | 14 +++++++------- pkg/lib/bundle/relations.json | 6 +++--- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/pkg/lib/bundle/relation.gen.go b/pkg/lib/bundle/relation.gen.go index acebc15fe..9d6f81b7f 100644 --- a/pkg/lib/bundle/relation.gen.go +++ b/pkg/lib/bundle/relation.gen.go @@ -9,7 +9,7 @@ import ( "github.com/anyproto/anytype-heart/pkg/lib/pb/model" ) -const RelationChecksum = "6286826590e76144044044c6c286464d4dfc60319d695eaee9f9c94ed92ab239" +const RelationChecksum = "0347bb816a01719e943af685d799fe8c53a5d432da46e539830132bca18240de" const ( RelationKeyTag domain.RelationKey = "tag" RelationKeyCamera domain.RelationKey = "camera" @@ -160,7 +160,7 @@ const ( RelationKeyAutoWidgetTargets domain.RelationKey = "autoWidgetTargets" RelationKeyAutoWidgetDisabled domain.RelationKey = "autoWidgetDisabled" RelationKeyPluralName domain.RelationKey = "pluralName" - RelationKeyHeaderRelationsView domain.RelationKey = "headerRelationsView" + RelationKeyHeaderRelationsLayout domain.RelationKey = "headerRelationsLayout" ) var ( @@ -760,16 +760,16 @@ var ( ReadOnlyRelation: true, Scope: model.Relation_type, }, - RelationKeyHeaderRelationsView: { + RelationKeyHeaderRelationsLayout: { DataSource: model.Relation_details, - Description: "View mode of header relations. Line or column", + Description: "Layout of header relations. Line or column", Format: model.RelationFormat_number, Hidden: true, - Id: "_brheaderRelationsView", - Key: "headerRelationsView", + Id: "_brheaderRelationsLayout", + Key: "headerRelationsLayout", MaxCount: 1, - Name: "Header relations view", + Name: "Header relations layout", ReadOnly: false, ReadOnlyRelation: true, Scope: model.Relation_type, diff --git a/pkg/lib/bundle/relations.json b/pkg/lib/bundle/relations.json index 2474d487c..2b3d60261 100644 --- a/pkg/lib/bundle/relations.json +++ b/pkg/lib/bundle/relations.json @@ -1537,12 +1537,12 @@ "source": "details" }, { - "description": "View mode of header relations. Line or column", + "description": "Layout of header relations. Line or column", "format": "number", "hidden": true, - "key": "headerRelationsView", + "key": "headerRelationsLayout", "maxCount": 1, - "name": "Header relations view", + "name": "Header relations layout", "readonly": false, "source": "details" } From b8ab62fa044f8f7aab1110bce9f3a9cf2ed5324f Mon Sep 17 00:00:00 2001 From: Mikhail Rakhmanov Date: Wed, 14 May 2025 20:45:38 +0200 Subject: [PATCH 037/164] GO-4400 Refactor invites --- .mockery.yaml | 3 - core/acl/aclservice.go | 24 +- core/block/editor/spaceview.go | 31 - core/block/editor/workspaces.go | 16 +- core/domain/invite.go | 47 +- core/inviteservice/inviteservice.go | 87 +- core/space.go | 2 +- docs/proto.md | 30 +- go.mod | 2 +- go.sum | 2 + pb/commands.pb.go | 2797 +++++++++-------- pb/protos/commands.proto | 7 +- pkg/lib/bundle/relation.gen.go | 32 +- pkg/lib/bundle/relations.json | 20 + pkg/lib/bundle/systemRelations.gen.go | 4 +- pkg/lib/bundle/systemRelations.json | 2 + pkg/lib/pb/model/models.pb.go | 1204 +++---- pkg/lib/pb/model/protos/models.proto | 6 + .../aclobjectmanager/aclobjectmanager.go | 9 +- .../aclobjectmananger_test.go | 7 - .../invitemigrator/invitemigrator.go | 62 - .../invitemigrator/invitemigrator_test.go | 80 - .../mock_InviteMigrator.go | 174 - space/internal/spaceprocess/loader/loader.go | 2 - space/techspace/techspace.go | 3 - 25 files changed, 2213 insertions(+), 2440 deletions(-) delete mode 100644 space/internal/components/invitemigrator/invitemigrator.go delete mode 100644 space/internal/components/invitemigrator/invitemigrator_test.go delete mode 100644 space/internal/components/invitemigrator/mock_invitemigrator/mock_InviteMigrator.go diff --git a/.mockery.yaml b/.mockery.yaml index d5dea9456..9b9a26ff5 100644 --- a/.mockery.yaml +++ b/.mockery.yaml @@ -123,9 +123,6 @@ packages: github.com/anyproto/anytype-heart/space/internal/components/participantwatcher: interfaces: ParticipantWatcher: - github.com/anyproto/anytype-heart/space/internal/components/invitemigrator: - interfaces: - InviteMigrator: github.com/anyproto/anytype-heart/space/internal/components/aclnotifications: interfaces: AclNotification: diff --git a/core/acl/aclservice.go b/core/acl/aclservice.go index e2d492c77..c664469b7 100644 --- a/core/acl/aclservice.go +++ b/core/acl/aclservice.go @@ -46,7 +46,7 @@ type AccountPermissions struct { type AclService interface { app.Component - GenerateInvite(ctx context.Context, spaceId string) (domain.InviteInfo, error) + GenerateInvite(ctx context.Context, spaceId string, inviteType model.InviteType, permissions model.ParticipantPermissions) (domain.InviteInfo, error) RevokeInvite(ctx context.Context, spaceId string) error GetCurrentInvite(ctx context.Context, spaceId string) (domain.InviteInfo, error) GetGuestUserInvite(ctx context.Context, spaceId string) (domain.InviteInfo, error) @@ -562,26 +562,40 @@ func (a *aclService) GetCurrentInvite(ctx context.Context, spaceId string) (doma return a.inviteService.GetCurrent(ctx, spaceId) } -func (a *aclService) GenerateInvite(ctx context.Context, spaceId string) (result domain.InviteInfo, err error) { +func (a *aclService) GenerateInvite(ctx context.Context, spaceId string, invType model.InviteType, permissions model.ParticipantPermissions) (result domain.InviteInfo, err error) { if spaceId == a.accountService.PersonalSpaceID() { err = ErrPersonalSpace return } + var ( + inviteExists = false + inviteType = domain.InviteType(invType) + ) current, err := a.inviteService.GetCurrent(ctx, spaceId) if err == nil { - return current, nil + inviteExists = true + if current.InviteType == inviteType { + return current, nil + } } acceptSpace, err := a.spaceService.Get(ctx, spaceId) if err != nil { return } aclClient := acceptSpace.CommonSpace().AclClient() - res, err := aclClient.GenerateInvite() + aclPermissions := domain.ConvertParticipantPermissions(permissions) + res, err := aclClient.GenerateInvite(inviteExists, inviteType == domain.InviteTypeDefault, aclPermissions) if err != nil { err = convertedOrInternalError("couldn't generate acl invite", err) return } - return a.inviteService.Generate(ctx, spaceId, res.InviteKey, func() error { + params := inviteservice.GenerateInviteParams{ + SpaceId: spaceId, + Key: res.InviteKey, + InviteType: inviteType, + Permissions: aclPermissions, + } + return a.inviteService.Generate(ctx, params, func() error { err := aclClient.AddRecord(ctx, res.InviteRec) if err != nil { return convertedOrAclRequestError(err) diff --git a/core/block/editor/spaceview.go b/core/block/editor/spaceview.go index 72e800db2..bca70235f 100644 --- a/core/block/editor/spaceview.go +++ b/core/block/editor/spaceview.go @@ -32,8 +32,6 @@ var spaceViewRequiredRelations = []domain.RelationKey{ bundle.RelationKeySpaceLocalStatus, bundle.RelationKeySpaceRemoteStatus, bundle.RelationKeyTargetSpaceId, - bundle.RelationKeySpaceInviteFileCid, - bundle.RelationKeySpaceInviteFileKey, bundle.RelationKeyIsAclShared, bundle.RelationKeySharedSpacesLimit, bundle.RelationKeySpaceAccountStatus, @@ -121,28 +119,6 @@ func (s *SpaceView) initTemplate(st *state.State) { ) } -func (s *SpaceView) GetExistingInviteInfo() (fileCid string, fileKey string) { - details := s.CombinedDetails() - fileCid = details.GetString(bundle.RelationKeySpaceInviteFileCid) - fileKey = details.GetString(bundle.RelationKeySpaceInviteFileKey) - return -} - -func (s *SpaceView) RemoveExistingInviteInfo() (fileCid string, err error) { - details := s.Details() - fileCid = details.GetString(bundle.RelationKeySpaceInviteFileCid) - newState := s.NewState() - newState.RemoveDetail(bundle.RelationKeySpaceInviteFileCid, bundle.RelationKeySpaceInviteFileKey) - return fileCid, s.Apply(newState) -} - -func (s *SpaceView) GetGuestUserInviteInfo() (fileCid string, fileKey string) { - details := s.CombinedDetails() - fileCid = details.GetString(bundle.RelationKeySpaceInviteGuestFileCid) - fileKey = details.GetString(bundle.RelationKeySpaceInviteGuestFileKey) - return -} - func (s *SpaceView) TryClose(objectTTL time.Duration) (res bool, err error) { return false, nil } @@ -210,13 +186,6 @@ func (s *SpaceView) GetSharedSpacesLimit() (limit int) { return int(s.CombinedDetails().GetInt64(bundle.RelationKeySharedSpacesLimit)) } -func (s *SpaceView) SetInviteFileInfo(fileCid string, fileKey string) (err error) { - st := s.NewState() - st.SetDetailAndBundledRelation(bundle.RelationKeySpaceInviteFileCid, domain.String(fileCid)) - st.SetDetailAndBundledRelation(bundle.RelationKeySpaceInviteFileKey, domain.String(fileKey)) - return s.Apply(st) -} - func (s *SpaceView) afterApply(info smartblock.ApplyInfo) (err error) { s.spaceService.OnViewUpdated(s.getSpacePersistentInfo(info.State)) return nil diff --git a/core/block/editor/workspaces.go b/core/block/editor/workspaces.go index 41d4a83ac..e8105f756 100644 --- a/core/block/editor/workspaces.go +++ b/core/block/editor/workspaces.go @@ -95,17 +95,21 @@ func (w *Workspaces) CreationStateMigration(ctx *smartblock.InitContext) migrati } } -func (w *Workspaces) SetInviteFileInfo(fileCid string, fileKey string) (err error) { +func (w *Workspaces) SetInviteFileInfo(info domain.InviteInfo) (err error) { st := w.NewState() - st.SetDetailAndBundledRelation(bundle.RelationKeySpaceInviteFileCid, domain.String(fileCid)) - st.SetDetailAndBundledRelation(bundle.RelationKeySpaceInviteFileKey, domain.String(fileKey)) + st.SetDetailAndBundledRelation(bundle.RelationKeySpaceInvitePermissions, domain.Int64(domain.ConvertAclPermissions(info.Permissions))) + st.SetDetailAndBundledRelation(bundle.RelationKeySpaceInviteType, domain.Int64(info.InviteType)) + st.SetDetailAndBundledRelation(bundle.RelationKeySpaceInviteFileCid, domain.String(info.InviteFileCid)) + st.SetDetailAndBundledRelation(bundle.RelationKeySpaceInviteFileKey, domain.String(info.InviteFileKey)) return w.Apply(st) } -func (w *Workspaces) GetExistingInviteInfo() (fileCid string, fileKey string) { +func (w *Workspaces) GetExistingInviteInfo() (inviteInfo domain.InviteInfo) { details := w.CombinedDetails() - fileCid = details.GetString(bundle.RelationKeySpaceInviteFileCid) - fileKey = details.GetString(bundle.RelationKeySpaceInviteFileKey) + inviteInfo.InviteType = domain.InviteType(details.GetInt64(bundle.RelationKeySpaceInviteType)) + inviteInfo.Permissions = domain.ConvertParticipantPermissions(model.ParticipantPermissions(details.GetInt64(bundle.RelationKeySpaceInviteType))) + inviteInfo.InviteFileCid = details.GetString(bundle.RelationKeySpaceInviteFileCid) + inviteInfo.InviteFileKey = details.GetString(bundle.RelationKeySpaceInviteFileKey) return } diff --git a/core/domain/invite.go b/core/domain/invite.go index 1b86d061d..c4bdbf6c4 100644 --- a/core/domain/invite.go +++ b/core/domain/invite.go @@ -1,5 +1,12 @@ package domain +import ( + "github.com/anyproto/any-sync/commonspace/object/acl/aclrecordproto" + "github.com/anyproto/any-sync/commonspace/object/acl/list" + + "github.com/anyproto/anytype-heart/pkg/lib/pb/model" +) + type InviteView struct { SpaceId string SpaceName string @@ -16,16 +23,50 @@ func (i InviteView) IsGuestUserInvite() bool { return false } +type InviteType int + +const ( + InviteTypeDefault InviteType = iota + InviteTypeGuest + InviteTypeAnyone +) + type InviteInfo struct { InviteFileCid string InviteFileKey string + InviteType InviteType + Permissions list.AclPermissions } type InviteObject interface { - SetInviteFileInfo(fileCid string, fileKey string) (err error) - GetExistingInviteInfo() (fileCid string, fileKey string) - RemoveExistingInviteInfo() (fileCid string, err error) + SetInviteFileInfo(inviteInfo InviteInfo) (err error) + GetExistingInviteInfo() InviteInfo + RemoveExistingInviteInfo() (InviteInfo, error) SetGuestInviteFileInfo(fileCid string, fileKey string) (err error) GetExistingGuestInviteInfo() (fileCid string, fileKey string) } + +func ConvertParticipantPermissions(permissions model.ParticipantPermissions) list.AclPermissions { + switch permissions { + case model.ParticipantPermissions_Writer: + return list.AclPermissionsWriter + case model.ParticipantPermissions_Reader: + return list.AclPermissionsReader + case model.ParticipantPermissions_Owner: + return list.AclPermissionsOwner + } + return list.AclPermissionsNone +} + +func ConvertAclPermissions(permissions list.AclPermissions) model.ParticipantPermissions { + switch aclrecordproto.AclUserPermissions(permissions) { + case aclrecordproto.AclUserPermissions_Writer: + return model.ParticipantPermissions_Writer + case aclrecordproto.AclUserPermissions_Reader: + return model.ParticipantPermissions_Reader + case aclrecordproto.AclUserPermissions_Owner: + return model.ParticipantPermissions_Owner + } + return model.ParticipantPermissions_NoPermissions +} diff --git a/core/inviteservice/inviteservice.go b/core/inviteservice/inviteservice.go index ccd7f6e06..fa568b197 100644 --- a/core/inviteservice/inviteservice.go +++ b/core/inviteservice/inviteservice.go @@ -6,6 +6,7 @@ import ( "github.com/anyproto/any-sync/app" "github.com/anyproto/any-sync/app/logger" + "github.com/anyproto/any-sync/commonspace/object/acl/list" "github.com/anyproto/any-sync/util/crypto" "github.com/gogo/protobuf/proto" "github.com/ipfs/go-cid" @@ -32,7 +33,7 @@ type InviteService interface { GetPayload(ctx context.Context, inviteCid cid.Cid, inviteFileKey crypto.SymKey) (*model.InvitePayload, error) View(ctx context.Context, inviteCid cid.Cid, inviteFileKey crypto.SymKey) (domain.InviteView, error) RemoveExisting(ctx context.Context, spaceId string) error - Generate(ctx context.Context, spaceId string, inviteKey crypto.PrivKey, sendInvite func() error) (domain.InviteInfo, error) + Generate(ctx context.Context, params GenerateInviteParams, sendInvite func() error) (domain.InviteInfo, error) GetCurrent(ctx context.Context, spaceId string) (domain.InviteInfo, error) GetExistingGuestUserInvite(ctx context.Context, spaceId string) (domain.InviteInfo, error) GenerateGuestUserInvite(ctx context.Context, spaceId string, guestKey crypto.PrivKey) (domain.InviteInfo, error) @@ -42,6 +43,13 @@ var _ InviteService = (*inviteService)(nil) var ErrInvalidSpaceType = fmt.Errorf("invalid space type") +type GenerateInviteParams struct { + SpaceId string + Key crypto.PrivKey + InviteType domain.InviteType + Permissions list.AclPermissions +} + type inviteService struct { inviteStore invitestore.Service fileAcl fileacl.Service @@ -89,60 +97,34 @@ func (i *inviteService) View(ctx context.Context, inviteCid cid.Cid, inviteFileK } func (i *inviteService) GetCurrent(ctx context.Context, spaceId string) (info domain.InviteInfo, err error) { - var ( - fileCid, fileKey string - ) - // this is for migration purposes - err = i.spaceService.TechSpace().DoSpaceView(ctx, spaceId, func(obj techspace.SpaceView) error { - fileCid, fileKey = obj.GetExistingInviteInfo() - if fileCid != "" { - info.InviteFileCid = fileCid - info.InviteFileKey = fileKey - } else { - return nil - } - _, err := obj.RemoveExistingInviteInfo() - if err != nil { - log.Warn("remove existing invite info", zap.Error(err)) - } - return nil - }) - if err != nil { - return domain.InviteInfo{}, getInviteError("get existing invite info from space view", err) - } err = i.doInviteObject(ctx, spaceId, func(obj domain.InviteObject) error { - if info.InviteFileCid != "" { - return obj.SetInviteFileInfo(info.InviteFileCid, info.InviteFileKey) - } - fileCid, fileKey = obj.GetExistingInviteInfo() + info = obj.GetExistingInviteInfo() return nil }) if err != nil { err = getInviteError("get existing invite info", err) return } - if fileCid == "" { + if info.InviteFileCid == "" { err = ErrInviteNotExists return } - info.InviteFileCid = fileCid - info.InviteFileKey = fileKey return } func (i *inviteService) RemoveExisting(ctx context.Context, spaceId string) (err error) { - var fileCid string + var info domain.InviteInfo err = i.doInviteObject(ctx, spaceId, func(obj domain.InviteObject) error { - fileCid, err = obj.RemoveExistingInviteInfo() + info, err = obj.RemoveExistingInviteInfo() return err }) if err != nil { return removeInviteError("remove existing invite info", err) } - if len(fileCid) == 0 { + if len(info.InviteFileCid) == 0 { return nil } - invCid, err := cid.Decode(fileCid) + invCid, err := cid.Decode(info.InviteFileCid) if err != nil { return removeInviteError("decode invite cid", err) } @@ -171,25 +153,22 @@ func (i *inviteService) GenerateGuestUserInvite(ctx context.Context, spaceId str return i.generateGuestInvite(ctx, spaceId, guestUserKey) } -func (i *inviteService) Generate(ctx context.Context, spaceId string, aclKey crypto.PrivKey, sendInvite func() error) (result domain.InviteInfo, err error) { +func (i *inviteService) Generate(ctx context.Context, params GenerateInviteParams, sendInvite func() error) (result domain.InviteInfo, err error) { + spaceId := params.SpaceId if spaceId == i.accountService.PersonalSpaceID() { return domain.InviteInfo{}, ErrPersonalSpace } - var fileCid, fileKey string err = i.doInviteObject(ctx, spaceId, func(obj domain.InviteObject) error { - fileCid, fileKey = obj.GetExistingInviteInfo() + result = obj.GetExistingInviteInfo() return nil }) if err != nil { return domain.InviteInfo{}, generateInviteError("get existing invite info", err) } - if fileCid != "" { - return domain.InviteInfo{ - InviteFileCid: fileCid, - InviteFileKey: fileKey, - }, nil + if result.InviteFileCid != "" && result.InviteType == params.InviteType { + return result, nil } - invite, err := i.buildInvite(ctx, spaceId, aclKey, nil) + invite, err := i.buildInvite(ctx, spaceId, params.Key, nil) if err != nil { return domain.InviteInfo{}, generateInviteError("build invite", err) } @@ -208,8 +187,14 @@ func (i *inviteService) Generate(ctx context.Context, spaceId string, aclKey cry removeInviteFile() return domain.InviteInfo{}, generateInviteError("encode invite file key", err) } + inviteInfo := domain.InviteInfo{ + InviteFileCid: inviteFileCid.String(), + InviteFileKey: inviteFileKeyRaw, + InviteType: params.InviteType, + Permissions: params.Permissions, + } err = i.doInviteObject(ctx, spaceId, func(obj domain.InviteObject) error { - return obj.SetInviteFileInfo(inviteFileCid.String(), inviteFileKeyRaw) + return obj.SetInviteFileInfo(inviteInfo) }) if err != nil { removeInviteFile() @@ -223,10 +208,7 @@ func (i *inviteService) Generate(ctx context.Context, spaceId string, aclKey cry } return domain.InviteInfo{}, generateInviteError("send invite", err) } - return domain.InviteInfo{ - InviteFileCid: inviteFileCid.String(), - InviteFileKey: inviteFileKeyRaw, - }, err + return inviteInfo, err } func (i *inviteService) generateGuestInvite(ctx context.Context, spaceId string, guestUserKey crypto.PrivKey) (result domain.InviteInfo, err error) { @@ -252,6 +234,11 @@ func (i *inviteService) generateGuestInvite(ctx context.Context, spaceId string, removeInviteFile() return domain.InviteInfo{}, generateInviteError("encode invite file key", err) } + inviteInfo := domain.InviteInfo{ + InviteFileCid: inviteFileCid.String(), + InviteFileKey: inviteFileKeyRaw, + InviteType: domain.InviteTypeGuest, + } err = i.doInviteObject(ctx, spaceId, func(obj domain.InviteObject) error { return obj.SetGuestInviteFileInfo(inviteFileCid.String(), inviteFileKeyRaw) }) @@ -260,10 +247,7 @@ func (i *inviteService) generateGuestInvite(ctx context.Context, spaceId string, return domain.InviteInfo{}, generateInviteError("set invite file info", err) } - return domain.InviteInfo{ - InviteFileCid: inviteFileCid.String(), - InviteFileKey: inviteFileKeyRaw, - }, err + return inviteInfo, err } func (i *inviteService) GetPayload(ctx context.Context, inviteCid cid.Cid, inviteFileKey crypto.SymKey) (md *model.InvitePayload, err error) { @@ -391,6 +375,7 @@ func (i *inviteService) GetExistingGuestUserInvite(ctx context.Context, spaceId return domain.InviteInfo{ InviteFileCid: fileCid, InviteFileKey: fileKey, + InviteType: domain.InviteTypeGuest, }, nil } return domain.InviteInfo{}, ErrInviteNotExists diff --git a/core/space.go b/core/space.go index b407f8833..cc3f046ef 100644 --- a/core/space.go +++ b/core/space.go @@ -63,7 +63,7 @@ func (mw *Middleware) SpaceMakeShareable(cctx context.Context, req *pb.RpcSpaceM func (mw *Middleware) SpaceInviteGenerate(cctx context.Context, req *pb.RpcSpaceInviteGenerateRequest) *pb.RpcSpaceInviteGenerateResponse { aclService := mustService[acl.AclService](mw) - inviteInfo, err := aclService.GenerateInvite(cctx, req.SpaceId) + inviteInfo, err := aclService.GenerateInvite(cctx, req.SpaceId, req.InviteType, req.Permissions) if err != nil { code := mapErrorCode(err, errToCode(space.ErrSpaceDeleted, pb.RpcSpaceInviteGenerateResponseError_SPACE_IS_DELETED), diff --git a/docs/proto.md b/docs/proto.md index 4d7a916ad..4811aa497 100644 --- a/docs/proto.md +++ b/docs/proto.md @@ -1641,7 +1641,6 @@ - [Rpc.Relation.ListWithValue.Response.Error.Code](#anytype-Rpc-Relation-ListWithValue-Response-Error-Code) - [Rpc.Relation.Options.Response.Error.Code](#anytype-Rpc-Relation-Options-Response-Error-Code) - [Rpc.Space.Delete.Response.Error.Code](#anytype-Rpc-Space-Delete-Response-Error-Code) - - [Rpc.Space.InviteGenerate.Request.InviteType](#anytype-Rpc-Space-InviteGenerate-Request-InviteType) - [Rpc.Space.InviteGenerate.Response.Error.Code](#anytype-Rpc-Space-InviteGenerate-Response-Error-Code) - [Rpc.Space.InviteGetCurrent.Response.Error.Code](#anytype-Rpc-Space-InviteGetCurrent-Response-Error-Code) - [Rpc.Space.InviteGetGuest.Response.Error.Code](#anytype-Rpc-Space-InviteGetGuest-Response-Error-Code) @@ -2061,6 +2060,7 @@ - [Import.Type](#anytype-model-Import-Type) - [InternalFlag.Value](#anytype-model-InternalFlag-Value) - [InvitePayload.InviteType](#anytype-model-InvitePayload-InviteType) + - [InviteType](#anytype-model-InviteType) - [LinkPreview.Type](#anytype-model-LinkPreview-Type) - [Membership.EmailVerificationStatus](#anytype-model-Membership-EmailVerificationStatus) - [Membership.PaymentMethod](#anytype-model-Membership-PaymentMethod) @@ -19864,7 +19864,8 @@ Available undo/redo operations | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | spaceId | [string](#string) | | | -| inviteType | [Rpc.Space.InviteGenerate.Request.InviteType](#anytype-Rpc-Space-InviteGenerate-Request-InviteType) | | | +| inviteType | [model.InviteType](#anytype-model-InviteType) | | | +| permissions | [model.ParticipantPermissions](#anytype-model-ParticipantPermissions) | | | @@ -25985,18 +25986,6 @@ Middleware-to-front-end response, that can contain a NULL error or a non-NULL er - - -### Rpc.Space.InviteGenerate.Request.InviteType - - -| Name | Number | Description | -| ---- | ------ | ----------- | -| Member | 0 | | -| Guest | 1 | | - - - ### Rpc.Space.InviteGenerate.Response.Error.Code @@ -32690,6 +32679,19 @@ Look https://github.com/golang/protobuf/issues/1135 for more information. + + +### InviteType + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| Member | 0 | aclKey contains the key to sign the ACL record | +| Guest | 1 | guestKey contains the privateKey of the guest user | +| WithoutApprove | 2 | aclKey contains the key to sign the ACL record, but no approval needed | + + + ### LinkPreview.Type diff --git a/go.mod b/go.mod index 64bdd154d..a1ef3bd0e 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/VividCortex/ewma v1.2.0 github.com/adrium/goheif v0.0.0-20230113233934-ca402e77a786 github.com/anyproto/any-store v0.2.0 - github.com/anyproto/any-sync v0.7.6-0.20250513132905-854823d81e74 + github.com/anyproto/any-sync v0.7.6-0.20250513194226-2f661565dcca github.com/anyproto/anytype-publish-server/publishclient v0.0.0-20250131145601-de288583ff2a github.com/anyproto/anytype-push-server/pushclient v0.0.0-20250402124745-6451298047f7 github.com/anyproto/go-chash v0.1.0 diff --git a/go.sum b/go.sum index 394b23d35..0a57189fc 100644 --- a/go.sum +++ b/go.sum @@ -84,6 +84,8 @@ github.com/anyproto/any-sync v0.7.6-0.20250512200224-c2de5ecb12c0 h1:ZS9++jR+3NC github.com/anyproto/any-sync v0.7.6-0.20250512200224-c2de5ecb12c0/go.mod h1:G6i3PT6pN6lcC5rim5Ed7ppUPuQgU5PyHgiqskrggL0= github.com/anyproto/any-sync v0.7.6-0.20250513132905-854823d81e74 h1:Io1SWrvvWjnXjtJsNvRcfvv52U6H7DAHLHcpkm8Vo7A= github.com/anyproto/any-sync v0.7.6-0.20250513132905-854823d81e74/go.mod h1:G6i3PT6pN6lcC5rim5Ed7ppUPuQgU5PyHgiqskrggL0= +github.com/anyproto/any-sync v0.7.6-0.20250513194226-2f661565dcca h1:DXXRxTfKBA8q22wCDvng182WjRjeAQqmGaZs/hXdMyo= +github.com/anyproto/any-sync v0.7.6-0.20250513194226-2f661565dcca/go.mod h1:G6i3PT6pN6lcC5rim5Ed7ppUPuQgU5PyHgiqskrggL0= github.com/anyproto/anytype-publish-server/publishclient v0.0.0-20250131145601-de288583ff2a h1:ZZM+0OUCQMWSLSflpkf0ZMVo3V76qEDDIXPpQOClNs0= github.com/anyproto/anytype-publish-server/publishclient v0.0.0-20250131145601-de288583ff2a/go.mod h1:4fkueCZcGniSMXkrwESO8zzERrh/L7WHimRNWecfGM0= github.com/anyproto/anytype-push-server/pushclient v0.0.0-20250402124745-6451298047f7 h1:oKkEnxnN1jeB1Ty20CTMH3w4WkCrV8dOQy1Myetg7XA= diff --git a/pb/commands.pb.go b/pb/commands.pb.go index 665687050..6df6defe7 100644 --- a/pb/commands.pb.go +++ b/pb/commands.pb.go @@ -221,31 +221,6 @@ func (RpcSpaceMakeShareableResponseErrorCode) EnumDescriptor() ([]byte, []int) { return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 1, 1, 0, 0} } -type RpcSpaceInviteGenerateRequestInviteType int32 - -const ( - RpcSpaceInviteGenerateRequest_Member RpcSpaceInviteGenerateRequestInviteType = 0 - RpcSpaceInviteGenerateRequest_Guest RpcSpaceInviteGenerateRequestInviteType = 1 -) - -var RpcSpaceInviteGenerateRequestInviteType_name = map[int32]string{ - 0: "Member", - 1: "Guest", -} - -var RpcSpaceInviteGenerateRequestInviteType_value = map[string]int32{ - "Member": 0, - "Guest": 1, -} - -func (x RpcSpaceInviteGenerateRequestInviteType) String() string { - return proto.EnumName(RpcSpaceInviteGenerateRequestInviteType_name, int32(x)) -} - -func (RpcSpaceInviteGenerateRequestInviteType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 2, 0, 0} -} - type RpcSpaceInviteGenerateResponseErrorCode int32 const ( @@ -11129,8 +11104,9 @@ func (m *RpcSpaceInviteGenerate) XXX_DiscardUnknown() { var xxx_messageInfo_RpcSpaceInviteGenerate proto.InternalMessageInfo type RpcSpaceInviteGenerateRequest struct { - SpaceId string `protobuf:"bytes,1,opt,name=spaceId,proto3" json:"spaceId,omitempty"` - InviteType RpcSpaceInviteGenerateRequestInviteType `protobuf:"varint,2,opt,name=inviteType,proto3,enum=anytype.RpcSpaceInviteGenerateRequestInviteType" json:"inviteType,omitempty"` + SpaceId string `protobuf:"bytes,1,opt,name=spaceId,proto3" json:"spaceId,omitempty"` + InviteType model.InviteType `protobuf:"varint,2,opt,name=inviteType,proto3,enum=anytype.model.InviteType" json:"inviteType,omitempty"` + Permissions model.ParticipantPermissions `protobuf:"varint,3,opt,name=permissions,proto3,enum=anytype.model.ParticipantPermissions" json:"permissions,omitempty"` } func (m *RpcSpaceInviteGenerateRequest) Reset() { *m = RpcSpaceInviteGenerateRequest{} } @@ -11173,11 +11149,18 @@ func (m *RpcSpaceInviteGenerateRequest) GetSpaceId() string { return "" } -func (m *RpcSpaceInviteGenerateRequest) GetInviteType() RpcSpaceInviteGenerateRequestInviteType { +func (m *RpcSpaceInviteGenerateRequest) GetInviteType() model.InviteType { if m != nil { return m.InviteType } - return RpcSpaceInviteGenerateRequest_Member + return model.InviteType_Member +} + +func (m *RpcSpaceInviteGenerateRequest) GetPermissions() model.ParticipantPermissions { + if m != nil { + return m.Permissions + } + return model.ParticipantPermissions_Reader } type RpcSpaceInviteGenerateResponse struct { @@ -75586,7 +75569,6 @@ func init() { proto.RegisterEnum("anytype.RpcAppShutdownResponseErrorCode", RpcAppShutdownResponseErrorCode_name, RpcAppShutdownResponseErrorCode_value) proto.RegisterEnum("anytype.RpcSpaceLeaveApproveResponseErrorCode", RpcSpaceLeaveApproveResponseErrorCode_name, RpcSpaceLeaveApproveResponseErrorCode_value) proto.RegisterEnum("anytype.RpcSpaceMakeShareableResponseErrorCode", RpcSpaceMakeShareableResponseErrorCode_name, RpcSpaceMakeShareableResponseErrorCode_value) - proto.RegisterEnum("anytype.RpcSpaceInviteGenerateRequestInviteType", RpcSpaceInviteGenerateRequestInviteType_name, RpcSpaceInviteGenerateRequestInviteType_value) proto.RegisterEnum("anytype.RpcSpaceInviteGenerateResponseErrorCode", RpcSpaceInviteGenerateResponseErrorCode_name, RpcSpaceInviteGenerateResponseErrorCode_value) proto.RegisterEnum("anytype.RpcSpaceStopSharingResponseErrorCode", RpcSpaceStopSharingResponseErrorCode_name, RpcSpaceStopSharingResponseErrorCode_value) proto.RegisterEnum("anytype.RpcSpaceInviteGetCurrentResponseErrorCode", RpcSpaceInviteGetCurrentResponseErrorCode_name, RpcSpaceInviteGetCurrentResponseErrorCode_value) @@ -77216,1371 +77198,1369 @@ func init() { func init() { proto.RegisterFile("pb/protos/commands.proto", fileDescriptor_8261c968b2e6f45c) } var fileDescriptor_8261c968b2e6f45c = []byte{ - // 21809 bytes of a gzipped FileDescriptorProto + // 21791 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7b, 0x98, 0x24, 0x49, - 0x59, 0x2f, 0x3c, 0x95, 0x59, 0x55, 0x5d, 0x1d, 0x7d, 0x99, 0x9c, 0xdc, 0xd9, 0x61, 0x36, 0x59, - 0x86, 0x65, 0x58, 0x96, 0x75, 0x59, 0x7a, 0x61, 0x41, 0x64, 0x97, 0x5d, 0x96, 0xea, 0xaa, 0xec, - 0xee, 0xda, 0xad, 0xae, 0x6a, 0xb2, 0xaa, 0x67, 0x58, 0xcf, 0xe1, 0xeb, 0x93, 0x53, 0x15, 0xdd, - 0x9d, 0x3b, 0xd5, 0x99, 0x45, 0x66, 0xf6, 0xcc, 0x0e, 0xdf, 0x73, 0xbe, 0x23, 0x07, 0x11, 0x10, - 0x11, 0x51, 0x11, 0x11, 0xb9, 0x0b, 0x08, 0xc8, 0xfd, 0x26, 0x20, 0x17, 0xb9, 0x08, 0x22, 0x2a, - 0x8a, 0xca, 0x45, 0x79, 0x04, 0xf1, 0x82, 0xe7, 0x1c, 0xf5, 0xe0, 0xa7, 0x20, 0x2a, 0xc7, 0xef, - 0x89, 0x4b, 0x66, 0x46, 0x54, 0x57, 0x66, 0x45, 0x56, 0x57, 0x56, 0x2f, 0xfa, 0xfd, 0x55, 0x95, - 0x91, 0x91, 0x6f, 0xbc, 0xf1, 0xfe, 0xde, 0x88, 0x78, 0x23, 0xe2, 0x8d, 0x37, 0xc0, 0xe9, 0xfe, - 0x85, 0x5b, 0xfa, 0xae, 0xe3, 0x3b, 0xde, 0x2d, 0x1d, 0x67, 0x6f, 0xcf, 0xb4, 0xbb, 0xde, 0x12, - 0x7e, 0x56, 0x67, 0x4c, 0xfb, 0x8a, 0x7f, 0xa5, 0x0f, 0xb5, 0xeb, 0xfb, 0x17, 0x77, 0x6e, 0xe9, - 0x59, 0x17, 0x6e, 0xe9, 0x5f, 0xb8, 0x65, 0xcf, 0xe9, 0xc2, 0x5e, 0xf0, 0x01, 0x7e, 0xa0, 0xd9, - 0xb5, 0x1b, 0xe3, 0x72, 0xf5, 0x9c, 0x8e, 0xd9, 0xf3, 0x7c, 0xc7, 0x85, 0x34, 0xe7, 0xa9, 0xa8, - 0x48, 0x78, 0x09, 0xda, 0x7e, 0x40, 0xe1, 0xda, 0x1d, 0xc7, 0xd9, 0xe9, 0x41, 0xf2, 0xee, 0xc2, - 0xfe, 0xf6, 0x2d, 0x9e, 0xef, 0xee, 0x77, 0x7c, 0xfa, 0xf6, 0xba, 0xc1, 0xb7, 0x5d, 0xe8, 0x75, - 0x5c, 0xab, 0xef, 0x3b, 0x2e, 0xc9, 0x71, 0xf6, 0x0d, 0xdf, 0x28, 0x01, 0xd9, 0xe8, 0x77, 0xb4, - 0x6f, 0xcf, 0x00, 0xb9, 0xdc, 0xef, 0x6b, 0x9f, 0x92, 0x00, 0x58, 0x85, 0xfe, 0x39, 0xe8, 0x7a, - 0x96, 0x63, 0x6b, 0xc7, 0xc1, 0x8c, 0x01, 0x9f, 0xb1, 0x0f, 0x3d, 0xff, 0xf6, 0xfc, 0xf3, 0xfe, - 0x52, 0xce, 0x69, 0xaf, 0x97, 0x40, 0xc9, 0x80, 0x5e, 0xdf, 0xb1, 0x3d, 0xa8, 0x3e, 0x05, 0x14, - 0xa0, 0xeb, 0x3a, 0xee, 0xe9, 0xdc, 0x75, 0xb9, 0x1b, 0xe7, 0x6e, 0xbd, 0x69, 0x89, 0x56, 0x7f, - 0xc9, 0xe8, 0x77, 0x96, 0xca, 0xfd, 0xfe, 0x52, 0x44, 0x69, 0x29, 0xf8, 0x68, 0x49, 0x47, 0x5f, - 0x18, 0xe4, 0x43, 0xf5, 0x34, 0x98, 0xb9, 0x44, 0x32, 0x9c, 0x96, 0xae, 0xcb, 0xdd, 0x38, 0x6b, - 0x04, 0x8f, 0xe8, 0x4d, 0x17, 0xfa, 0xa6, 0xd5, 0xf3, 0x4e, 0xcb, 0xe4, 0x0d, 0x7d, 0xd4, 0x5e, - 0x9b, 0x03, 0x05, 0x4c, 0x44, 0xad, 0x80, 0x7c, 0xc7, 0xe9, 0x42, 0x5c, 0xfc, 0xe2, 0xad, 0xb7, - 0x88, 0x17, 0xbf, 0x54, 0x71, 0xba, 0xd0, 0xc0, 0x1f, 0xab, 0xd7, 0x81, 0xb9, 0x40, 0x2c, 0x11, - 0x1b, 0x6c, 0xd2, 0xd9, 0x5b, 0x41, 0x1e, 0xe5, 0x57, 0x4b, 0x20, 0xdf, 0xd8, 0xac, 0xd7, 0x95, - 0x63, 0xea, 0x09, 0xb0, 0xb0, 0xd9, 0xb8, 0xa7, 0xd1, 0x3c, 0xdf, 0xd8, 0xd2, 0x0d, 0xa3, 0x69, - 0x28, 0x39, 0x75, 0x01, 0xcc, 0x2e, 0x97, 0xab, 0x5b, 0xb5, 0xc6, 0xc6, 0x66, 0x5b, 0x91, 0xb4, - 0x57, 0xca, 0x60, 0xb1, 0x05, 0xfd, 0x2a, 0xbc, 0x64, 0x75, 0x60, 0xcb, 0x37, 0x7d, 0xa8, 0xbd, - 0x28, 0x17, 0x0a, 0x53, 0xdd, 0x44, 0x85, 0x86, 0xaf, 0x68, 0x05, 0x1e, 0x77, 0xa0, 0x02, 0x3c, - 0x85, 0x25, 0xfa, 0xf5, 0x12, 0x93, 0x66, 0xb0, 0x74, 0xce, 0x3e, 0x1a, 0xcc, 0x31, 0xef, 0xd4, - 0x45, 0x00, 0x96, 0xcb, 0x95, 0x7b, 0x56, 0x8d, 0xe6, 0x66, 0xa3, 0xaa, 0x1c, 0x43, 0xcf, 0x2b, - 0x4d, 0x43, 0xa7, 0xcf, 0x39, 0xed, 0xbb, 0x39, 0x06, 0xcc, 0x2a, 0x0f, 0xe6, 0xd2, 0x68, 0x66, - 0x86, 0x00, 0xaa, 0xbd, 0x21, 0x04, 0x67, 0x95, 0x03, 0xe7, 0x71, 0xe9, 0xc8, 0x65, 0x0f, 0xd0, - 0x73, 0x24, 0x50, 0x6a, 0xed, 0xee, 0xfb, 0x5d, 0xe7, 0xb2, 0xad, 0xcd, 0x86, 0xc8, 0x68, 0x7f, - 0xc3, 0xca, 0xe4, 0xc9, 0xbc, 0x4c, 0x6e, 0x3c, 0x58, 0x09, 0x4a, 0x21, 0x46, 0x1a, 0xaf, 0x0e, - 0xa5, 0x51, 0xe6, 0xa4, 0xf1, 0x68, 0x51, 0x42, 0xd9, 0xcb, 0xe1, 0x4b, 0x77, 0x80, 0x42, 0xab, - 0x6f, 0x76, 0xa0, 0xf6, 0x39, 0x19, 0xcc, 0xd7, 0xa1, 0x79, 0x09, 0x96, 0xfb, 0x7d, 0xd7, 0xb9, - 0x04, 0xb5, 0x4a, 0xa4, 0xaf, 0xa7, 0xc1, 0x8c, 0x87, 0x32, 0xd5, 0xba, 0xb8, 0x06, 0xb3, 0x46, - 0xf0, 0xa8, 0x9e, 0x01, 0xc0, 0xea, 0x42, 0xdb, 0xb7, 0x7c, 0x0b, 0x7a, 0xa7, 0xa5, 0xeb, 0xe4, - 0x1b, 0x67, 0x0d, 0x26, 0x45, 0xfb, 0xb6, 0x24, 0xaa, 0x63, 0x98, 0x8b, 0x25, 0x96, 0x83, 0x18, - 0xa9, 0xbe, 0x4e, 0x12, 0xd1, 0xb1, 0x91, 0xe4, 0xd2, 0xc9, 0xf6, 0x6d, 0xb9, 0xf4, 0xc2, 0x45, - 0x39, 0x1a, 0xcd, 0xad, 0xd6, 0x66, 0x65, 0x6d, 0xab, 0xb5, 0x51, 0xae, 0xe8, 0x0a, 0x54, 0x4f, - 0x02, 0x05, 0xff, 0xdd, 0xaa, 0xb5, 0xb6, 0xaa, 0x7a, 0x5d, 0x6f, 0xeb, 0x55, 0x65, 0x5b, 0x55, - 0xc1, 0xa2, 0xa1, 0x3f, 0x75, 0x53, 0x6f, 0xb5, 0xb7, 0x56, 0xca, 0xb5, 0xba, 0x5e, 0x55, 0x76, - 0xd0, 0xc7, 0xf5, 0xda, 0x7a, 0xad, 0xbd, 0x65, 0xe8, 0xe5, 0xca, 0x9a, 0x5e, 0x55, 0x76, 0xd5, - 0x07, 0x81, 0xab, 0x1a, 0xcd, 0xad, 0xf2, 0xc6, 0x86, 0xd1, 0x3c, 0xa7, 0x6f, 0xd1, 0x2f, 0x5a, - 0x8a, 0x45, 0x0a, 0x6a, 0x6f, 0xb5, 0xd6, 0xca, 0x86, 0x5e, 0x5e, 0xae, 0xeb, 0xca, 0x7d, 0xda, - 0xb3, 0x65, 0xb0, 0xb0, 0x6e, 0x5e, 0x84, 0xad, 0x5d, 0xd3, 0x85, 0xe6, 0x85, 0x1e, 0xd4, 0x1e, - 0x2e, 0x80, 0xa7, 0xf6, 0x39, 0x16, 0x2f, 0x9d, 0xc7, 0xeb, 0x96, 0x21, 0x02, 0xe6, 0x8a, 0x88, - 0x01, 0xec, 0x9f, 0xc2, 0x66, 0xb0, 0xc6, 0x01, 0xf6, 0xf8, 0x94, 0xf4, 0xd2, 0x21, 0xf6, 0xdf, - 0x1f, 0x00, 0x88, 0x69, 0x5f, 0xce, 0x83, 0xc5, 0x9a, 0x7d, 0xc9, 0xf2, 0xe1, 0x2a, 0xb4, 0xa1, - 0x8b, 0xc6, 0x81, 0x57, 0xe6, 0x44, 0xda, 0x55, 0x1b, 0x00, 0x0b, 0x7f, 0xd7, 0xbe, 0xd2, 0x87, - 0xb8, 0x7a, 0xc3, 0xe5, 0xc5, 0x13, 0x0f, 0x87, 0x88, 0x5a, 0xf8, 0xad, 0xc1, 0xd0, 0x39, 0xfb, - 0x70, 0x00, 0xa2, 0x37, 0x2a, 0x00, 0xc5, 0x75, 0xb8, 0x77, 0x01, 0xba, 0xca, 0x31, 0x75, 0x16, - 0x14, 0x56, 0xd1, 0x97, 0x4a, 0x4e, 0x7b, 0xbd, 0xcc, 0xa8, 0xc0, 0x0a, 0xaf, 0x02, 0x8f, 0x11, - 0x61, 0x61, 0xd8, 0x48, 0x7f, 0x2d, 0x98, 0x25, 0x7c, 0x54, 0xac, 0x2e, 0x45, 0x2b, 0x4a, 0x50, - 0xaf, 0x07, 0x0b, 0xe4, 0x61, 0xc5, 0xea, 0xc1, 0x7b, 0xe0, 0x15, 0x3a, 0xe6, 0xf3, 0x89, 0xda, - 0x4f, 0x84, 0x0d, 0xbf, 0xc6, 0xe9, 0xd1, 0x0f, 0xa6, 0x65, 0x2a, 0x9d, 0x22, 0xbd, 0xe4, 0x81, - 0xd0, 0xf4, 0x0f, 0xb4, 0x70, 0x4b, 0xfb, 0x9e, 0x04, 0xe6, 0x5a, 0xbe, 0xd3, 0x47, 0xcd, 0xc5, - 0xb2, 0x77, 0xc4, 0xda, 0xf7, 0x67, 0xd8, 0xf6, 0x5d, 0xe1, 0xc1, 0x7d, 0xf4, 0x10, 0x39, 0x32, - 0x05, 0xc4, 0xb4, 0xee, 0x6f, 0x87, 0xad, 0x7b, 0x85, 0x43, 0xe5, 0xd6, 0x54, 0xd4, 0xbe, 0x0f, - 0xdb, 0xf6, 0x4b, 0x64, 0xa0, 0x04, 0x6a, 0xe6, 0x57, 0xf6, 0x5d, 0x17, 0xda, 0xbe, 0x18, 0x08, - 0x7f, 0xcc, 0x82, 0xb0, 0xc6, 0x83, 0x70, 0x6b, 0x82, 0x32, 0x07, 0xa5, 0x64, 0xd8, 0xc6, 0x3e, - 0x16, 0xa2, 0x79, 0x0f, 0x87, 0xe6, 0x0f, 0xa5, 0x67, 0x2b, 0x1d, 0xa4, 0x6b, 0x63, 0x20, 0x7a, - 0x12, 0x28, 0x68, 0x3c, 0xac, 0xb4, 0x6b, 0xe7, 0xf4, 0xad, 0x5a, 0xe3, 0x5c, 0xad, 0xad, 0x2b, - 0x50, 0x7b, 0xb1, 0x1c, 0xf5, 0xb9, 0x3e, 0xee, 0xd4, 0xc4, 0x50, 0xf9, 0xb2, 0x34, 0x5e, 0xbf, - 0x47, 0xca, 0x98, 0x0a, 0x26, 0xe2, 0xfd, 0xde, 0x50, 0xa6, 0xd2, 0x21, 0x72, 0xf7, 0x18, 0x88, - 0x9c, 0x02, 0x6a, 0xad, 0x71, 0xae, 0x5c, 0xaf, 0x55, 0x49, 0x1b, 0xdb, 0x6a, 0xdf, 0xbb, 0x81, - 0x30, 0xf9, 0x19, 0x19, 0xcc, 0x13, 0xd6, 0x0c, 0x78, 0xc9, 0xb9, 0x28, 0x68, 0x8c, 0x7c, 0x35, - 0xa5, 0xf1, 0xc8, 0x96, 0x10, 0xd3, 0x5b, 0xfd, 0x78, 0x0a, 0xe3, 0x31, 0x81, 0xdc, 0x03, 0x69, - 0x04, 0x39, 0xd0, 0x35, 0xed, 0x0c, 0xe9, 0xc1, 0x86, 0x8e, 0x20, 0x9f, 0xc8, 0x07, 0xf6, 0xc0, - 0x39, 0x0b, 0x5e, 0xd6, 0xd6, 0x23, 0x4c, 0x38, 0xb5, 0xcd, 0x8d, 0x54, 0x5b, 0x69, 0x98, 0xda, - 0xfe, 0x05, 0x6b, 0x47, 0x2c, 0xf3, 0xe8, 0xdd, 0x1c, 0x2b, 0x6e, 0xc4, 0x49, 0xfc, 0x6a, 0x41, - 0xa0, 0x28, 0x12, 0x6f, 0x2d, 0x5d, 0x0b, 0x66, 0xf1, 0xdf, 0x86, 0xb9, 0x07, 0x69, 0x1b, 0x8a, - 0x12, 0xd4, 0xb3, 0x60, 0x9e, 0x64, 0xec, 0x38, 0x36, 0xaa, 0x4f, 0x1e, 0x67, 0xe0, 0xd2, 0x10, - 0x88, 0x1d, 0x17, 0x9a, 0xbe, 0xe3, 0x62, 0x1a, 0x05, 0x02, 0x22, 0x93, 0xa4, 0xde, 0x0c, 0x4e, - 0x58, 0x1e, 0x6e, 0x55, 0x9b, 0x1e, 0x74, 0x09, 0xb3, 0xa7, 0x8b, 0xd7, 0xe5, 0x6e, 0x2c, 0x19, - 0x07, 0x5f, 0x68, 0xdf, 0x0c, 0xdb, 0xac, 0xce, 0xe9, 0xd9, 0x63, 0xd3, 0x54, 0x3c, 0x9d, 0x96, - 0x5d, 0x1a, 0xaf, 0x07, 0x25, 0xfd, 0xe6, 0x16, 0xd2, 0x8d, 0x15, 0xbc, 0x30, 0x00, 0x69, 0x2b, - 0x46, 0xa9, 0x28, 0x6f, 0xa5, 0xd9, 0x68, 0xeb, 0x8d, 0xb6, 0xb2, 0x3d, 0x54, 0xff, 0x76, 0xb4, - 0xd7, 0xe5, 0x41, 0xfe, 0x6e, 0xc7, 0xb2, 0xb5, 0xe7, 0xe4, 0x38, 0x05, 0xb2, 0xa1, 0x7f, 0xd9, - 0x71, 0x2f, 0x86, 0xcd, 0x3a, 0x4a, 0x48, 0x46, 0x32, 0x52, 0x3c, 0x79, 0xa4, 0xe2, 0xe5, 0x87, - 0x29, 0xde, 0x4f, 0xb3, 0x8a, 0x77, 0x07, 0xaf, 0x78, 0x37, 0x0c, 0x91, 0x3f, 0x62, 0x3e, 0xa6, - 0xbb, 0xf8, 0x74, 0xd8, 0x5d, 0xdc, 0xc5, 0xc1, 0xf8, 0x28, 0x31, 0x32, 0xe9, 0x00, 0xfc, 0x4a, - 0xa6, 0xdd, 0xc4, 0x30, 0xa8, 0x77, 0x62, 0xa0, 0xde, 0x1d, 0xd2, 0x83, 0x58, 0x07, 0x3b, 0x9a, - 0xfb, 0x0e, 0x76, 0x2a, 0x17, 0xd5, 0xab, 0xc1, 0x89, 0x6a, 0x6d, 0x65, 0x45, 0x37, 0xf4, 0x46, - 0x7b, 0xab, 0xa1, 0xb7, 0xcf, 0x37, 0x8d, 0x7b, 0x94, 0x9e, 0xf6, 0x5a, 0x19, 0x00, 0x24, 0xa1, - 0x8a, 0x69, 0x77, 0x60, 0x4f, 0xac, 0xff, 0xff, 0x5b, 0x29, 0x5d, 0x0f, 0x12, 0xd1, 0x8f, 0x81, - 0xf3, 0x15, 0x92, 0x78, 0xab, 0x8c, 0x25, 0x96, 0x0e, 0xd4, 0x37, 0x3f, 0x10, 0x66, 0x0f, 0x57, - 0x81, 0xe3, 0x01, 0x3d, 0x9a, 0x7d, 0xf8, 0xa2, 0xc1, 0xdb, 0xf3, 0x60, 0x91, 0xc2, 0x12, 0xac, - 0x02, 0x3d, 0x4f, 0x68, 0xba, 0xaa, 0x81, 0x12, 0x5d, 0xf4, 0x09, 0x06, 0x83, 0xf0, 0x59, 0x5d, - 0x05, 0x73, 0x7d, 0xe8, 0xee, 0x59, 0x9e, 0x67, 0x39, 0x36, 0x59, 0xce, 0x5d, 0xbc, 0xf5, 0x11, - 0xa1, 0xc4, 0xf1, 0xca, 0xf7, 0xd2, 0x86, 0xe9, 0xfa, 0x56, 0xc7, 0xea, 0x9b, 0xb6, 0xbf, 0x11, - 0x65, 0x36, 0xd8, 0x2f, 0x91, 0x61, 0x97, 0xca, 0x40, 0xe3, 0x6b, 0x12, 0xa3, 0x12, 0xbf, 0x96, - 0x62, 0x52, 0x99, 0x48, 0x30, 0x9d, 0x5a, 0x7c, 0x2a, 0x53, 0xb5, 0x18, 0x82, 0xf7, 0x8e, 0x7a, - 0x0d, 0xb8, 0xba, 0xd6, 0xa8, 0x34, 0x0d, 0x43, 0xaf, 0xb4, 0xb7, 0x36, 0x74, 0x63, 0xbd, 0xd6, - 0x6a, 0xd5, 0x9a, 0x8d, 0xd6, 0x61, 0x5a, 0xbb, 0xf6, 0x59, 0x39, 0xd4, 0x98, 0x2a, 0xec, 0xf4, - 0x2c, 0x1b, 0x6a, 0x77, 0x1d, 0x52, 0x61, 0xf8, 0x35, 0x43, 0x71, 0x9c, 0x69, 0xf9, 0x31, 0x38, - 0xbf, 0x26, 0x3d, 0xce, 0xc3, 0x09, 0xfe, 0x3b, 0x6e, 0xfe, 0x5f, 0x95, 0xc1, 0x09, 0xa6, 0x21, - 0x1a, 0x70, 0x6f, 0x62, 0xeb, 0xc0, 0xff, 0x9d, 0x6d, 0xbb, 0x35, 0x1e, 0xd3, 0x61, 0xb6, 0xf7, - 0x01, 0x36, 0x62, 0x60, 0x7d, 0x73, 0x08, 0x6b, 0x9d, 0x83, 0xf5, 0x89, 0x63, 0xd0, 0x4c, 0x87, - 0xec, 0x3b, 0x32, 0x45, 0xf6, 0x1a, 0x70, 0xf5, 0x46, 0xd9, 0x68, 0xd7, 0x2a, 0xb5, 0x8d, 0x32, - 0x1a, 0x47, 0x99, 0x21, 0x3b, 0xc6, 0xb8, 0xe7, 0x41, 0x1f, 0x8a, 0xef, 0x47, 0xf3, 0xe0, 0xda, - 0xe1, 0x1d, 0x6d, 0x65, 0xd7, 0xb4, 0x77, 0xa0, 0x66, 0x89, 0x40, 0x5d, 0x05, 0x33, 0x1d, 0x9c, - 0x9d, 0xe0, 0xcc, 0x6e, 0xfc, 0x25, 0xf4, 0xe5, 0xa4, 0x04, 0x23, 0xf8, 0x54, 0x7b, 0x37, 0xab, - 0x10, 0x6d, 0x5e, 0x21, 0x9e, 0x9c, 0x0c, 0xde, 0x01, 0xbe, 0x63, 0x74, 0xe3, 0xf3, 0xa1, 0x6e, - 0x9c, 0xe7, 0x74, 0xa3, 0x72, 0x38, 0xf2, 0xe9, 0xd4, 0xe4, 0xb7, 0x1e, 0x08, 0x1d, 0x40, 0xac, - 0x36, 0x59, 0xf1, 0xa3, 0xc2, 0xd0, 0xee, 0xfe, 0x55, 0x32, 0x28, 0x56, 0x61, 0x0f, 0xfa, 0x82, - 0x33, 0xf8, 0xbf, 0x93, 0x44, 0xb7, 0xd3, 0x08, 0x0c, 0x84, 0x76, 0xfc, 0x5a, 0x8a, 0x6f, 0xed, - 0x41, 0xcf, 0x37, 0xf7, 0xfa, 0x58, 0xd4, 0xb2, 0x11, 0x25, 0x68, 0x3f, 0x2a, 0x89, 0x6c, 0xb6, - 0x25, 0x14, 0xf3, 0xef, 0x63, 0x55, 0xf8, 0x0b, 0x12, 0x28, 0xb5, 0xa0, 0xdf, 0x74, 0xbb, 0xd0, - 0xd5, 0x5a, 0x11, 0x46, 0xd7, 0x81, 0x39, 0x0c, 0x0a, 0x9a, 0x66, 0x86, 0x38, 0xb1, 0x49, 0xea, - 0x0d, 0x60, 0x31, 0x7c, 0xc4, 0x9f, 0xd3, 0x6e, 0x7c, 0x20, 0x55, 0xfb, 0x56, 0x4e, 0xd4, 0x07, - 0x80, 0x2e, 0xfa, 0x52, 0x6e, 0x62, 0x5a, 0xa9, 0xd8, 0x7e, 0x7e, 0x22, 0xa9, 0xec, 0xb7, 0x49, - 0xdf, 0x29, 0x01, 0xb0, 0x69, 0x7b, 0x81, 0x5c, 0x1f, 0x95, 0x42, 0xae, 0xda, 0x3f, 0xe6, 0xd2, - 0xcd, 0x62, 0xa2, 0x72, 0x62, 0x24, 0xf6, 0x4b, 0x29, 0xd6, 0x16, 0x62, 0x89, 0x4d, 0x61, 0x6b, - 0xf9, 0x38, 0x28, 0x9e, 0x37, 0x7b, 0x3d, 0xe8, 0x6b, 0xaf, 0x94, 0x41, 0xb1, 0xe2, 0x42, 0xd3, - 0x87, 0x1a, 0x8c, 0x44, 0xa7, 0x81, 0x92, 0xeb, 0x38, 0xfe, 0x86, 0xe9, 0xef, 0x52, 0xb9, 0x85, - 0xcf, 0xea, 0x13, 0xc1, 0x83, 0xb6, 0xf7, 0x7b, 0x3d, 0x1f, 0xde, 0xef, 0x6f, 0xb8, 0xd6, 0x9e, - 0xe9, 0x5e, 0xa9, 0x9b, 0xf6, 0xce, 0xbe, 0xb9, 0x03, 0x29, 0x7b, 0x71, 0xaf, 0xa9, 0xa3, 0xca, - 0xaf, 0xb0, 0x1d, 0xcf, 0x5d, 0xbc, 0xd0, 0x7f, 0x80, 0x93, 0x13, 0x61, 0x71, 0x89, 0xb0, 0x17, - 0xd3, 0xf3, 0x68, 0xa0, 0xb4, 0x67, 0xc3, 0x3d, 0xc7, 0xb6, 0x3a, 0x81, 0xb5, 0x1a, 0x3c, 0x6b, - 0x1f, 0x0f, 0xd1, 0x58, 0xe6, 0xd0, 0x58, 0x12, 0x2e, 0x25, 0x1d, 0x14, 0xad, 0x31, 0xfa, 0x9d, - 0x87, 0x82, 0x07, 0x93, 0x6e, 0x64, 0xab, 0xdd, 0xdc, 0xaa, 0x18, 0x7a, 0xb9, 0xad, 0x6f, 0xd5, - 0x9b, 0x95, 0x72, 0x7d, 0xcb, 0xd0, 0x37, 0x9a, 0x0a, 0x44, 0xb3, 0xf3, 0x19, 0x03, 0x76, 0x9c, - 0x4b, 0xd0, 0xd5, 0x9e, 0x95, 0x13, 0x83, 0x28, 0x41, 0x28, 0x49, 0xf0, 0xc9, 0x22, 0xf0, 0xfd, - 0xb4, 0xb0, 0x9f, 0x11, 0x15, 0x2c, 0x65, 0x3e, 0xa6, 0xc5, 0x7c, 0x42, 0xa8, 0x8f, 0x49, 0x24, - 0xf5, 0x00, 0x00, 0xe9, 0x1f, 0x24, 0x30, 0x53, 0x71, 0xec, 0x4b, 0xd0, 0xf5, 0xd9, 0x49, 0x16, - 0x8b, 0x43, 0x6e, 0x00, 0x87, 0xd3, 0x60, 0x06, 0xda, 0xbe, 0xeb, 0xf4, 0x83, 0x59, 0x56, 0xf0, - 0xa8, 0xbd, 0x31, 0xad, 0x84, 0x69, 0xc9, 0xf1, 0x6b, 0xb3, 0xc3, 0x0b, 0xe2, 0xd8, 0x93, 0x07, - 0xda, 0xce, 0x6b, 0xd3, 0xe0, 0x32, 0x9c, 0x81, 0xec, 0xfb, 0xb1, 0xaf, 0xc9, 0x60, 0x81, 0xb4, - 0xdb, 0x16, 0xc4, 0x66, 0xa1, 0xd6, 0x64, 0xd7, 0x39, 0x07, 0x84, 0xbf, 0x76, 0x8c, 0x13, 0x7f, - 0xd1, 0xec, 0xf7, 0xc3, 0x15, 0xf2, 0xb5, 0x63, 0x06, 0x7d, 0x26, 0x6a, 0xbe, 0x5c, 0x04, 0x79, - 0x73, 0xdf, 0xdf, 0xd5, 0xbe, 0x27, 0x3c, 0xe3, 0xe5, 0xfa, 0x11, 0xca, 0x4f, 0x0c, 0x24, 0x27, - 0x41, 0xc1, 0x77, 0x2e, 0xc2, 0x40, 0x0e, 0xe4, 0x01, 0xc1, 0x61, 0xf6, 0xfb, 0x6d, 0xfc, 0x82, - 0xc2, 0x11, 0x3c, 0x23, 0x03, 0xcb, 0xec, 0x74, 0x9c, 0x7d, 0xdb, 0xaf, 0x05, 0xab, 0xe4, 0x51, - 0x82, 0xf6, 0x25, 0xa1, 0x6d, 0x28, 0x01, 0x06, 0xd3, 0x41, 0x76, 0x61, 0x8c, 0xa6, 0xb4, 0x04, - 0x6e, 0x2a, 0x6f, 0x6c, 0x6c, 0xb5, 0x9b, 0xf7, 0xe8, 0x8d, 0xc8, 0xda, 0xdd, 0xaa, 0x35, 0xb6, - 0xda, 0x6b, 0xfa, 0x56, 0x65, 0xd3, 0xc0, 0x8b, 0x93, 0xe5, 0x4a, 0xa5, 0xb9, 0xd9, 0x68, 0x2b, - 0x50, 0x7b, 0xab, 0x04, 0xe6, 0x2b, 0x3d, 0xc7, 0x0b, 0x11, 0x7e, 0x68, 0x84, 0x70, 0x28, 0xc6, - 0x1c, 0x23, 0x46, 0xed, 0x5f, 0x72, 0xa2, 0x7e, 0x32, 0x81, 0x40, 0x18, 0xf2, 0x31, 0xbd, 0xd4, - 0x1b, 0x85, 0xfc, 0x64, 0x46, 0xd3, 0xcb, 0xbe, 0x49, 0x7c, 0x6e, 0x05, 0xcc, 0x94, 0x89, 0x62, - 0x68, 0x7f, 0x9a, 0x03, 0xc5, 0x8a, 0x63, 0x6f, 0x5b, 0x3b, 0xc8, 0x82, 0x84, 0xb6, 0x79, 0xa1, - 0x07, 0xab, 0xa6, 0x6f, 0x5e, 0xb2, 0xe0, 0x65, 0x5c, 0x81, 0x92, 0x31, 0x90, 0x8a, 0x98, 0xa2, - 0x29, 0xf0, 0xc2, 0xfe, 0x0e, 0x66, 0xaa, 0x64, 0xb0, 0x49, 0x68, 0xfc, 0x20, 0x8f, 0x1b, 0x2e, - 0x74, 0x61, 0x0f, 0x9a, 0x1e, 0x44, 0x73, 0x31, 0x1b, 0xf6, 0xb0, 0xd2, 0x96, 0x8c, 0xb8, 0xd7, - 0xea, 0x59, 0x30, 0x4f, 0x5e, 0x61, 0xfb, 0xc7, 0xc3, 0x6a, 0x5c, 0x32, 0xb8, 0x34, 0xf5, 0xd1, - 0xa0, 0x00, 0xef, 0xf7, 0x5d, 0xf3, 0x74, 0x17, 0xe3, 0xf5, 0xa0, 0x25, 0xe2, 0x28, 0xbb, 0x14, - 0x38, 0xca, 0x2e, 0xb5, 0xb0, 0x1b, 0xad, 0x41, 0x72, 0x69, 0xff, 0xbb, 0x14, 0x5a, 0x2f, 0x5f, - 0x90, 0x23, 0xc5, 0x50, 0x41, 0xde, 0x36, 0xf7, 0x20, 0xd5, 0x0b, 0xfc, 0x5f, 0xbd, 0x09, 0x1c, - 0x37, 0x2f, 0x99, 0xbe, 0xe9, 0xd6, 0x9d, 0x8e, 0xd9, 0xc3, 0xc3, 0x66, 0xd0, 0xf2, 0x07, 0x5f, - 0xe0, 0x4d, 0x2b, 0xdf, 0x71, 0x21, 0xce, 0x15, 0x6c, 0x5a, 0x05, 0x09, 0x88, 0xba, 0xd5, 0x71, - 0x6c, 0xcc, 0xbf, 0x6c, 0xe0, 0xff, 0x48, 0x2a, 0x5d, 0xcb, 0x43, 0x15, 0xc1, 0x54, 0x1a, 0x64, - 0x3f, 0xa5, 0x75, 0xc5, 0xee, 0xe0, 0x0d, 0xab, 0x92, 0x11, 0xf7, 0x5a, 0x5d, 0x06, 0x73, 0x74, - 0xf7, 0x65, 0x1d, 0xe9, 0x55, 0x11, 0xeb, 0xd5, 0x75, 0xbc, 0x1b, 0x22, 0xc1, 0x73, 0xa9, 0x11, - 0xe5, 0x33, 0xd8, 0x8f, 0xd4, 0xa7, 0x80, 0x07, 0xd3, 0xc7, 0xca, 0xbe, 0xe7, 0x3b, 0x7b, 0x04, - 0xf4, 0x15, 0xab, 0x47, 0x6a, 0x30, 0x83, 0x6b, 0x90, 0x94, 0x45, 0xbd, 0x15, 0x9c, 0xec, 0xbb, - 0x70, 0x1b, 0xba, 0xf7, 0x9a, 0x7b, 0xfb, 0xf7, 0xb7, 0x5d, 0xd3, 0xf6, 0xfa, 0x8e, 0xeb, 0x9f, - 0x2e, 0x61, 0xe6, 0x87, 0xbe, 0x53, 0x6f, 0x06, 0x27, 0xee, 0xf3, 0x1c, 0xbb, 0xdc, 0xb7, 0xea, - 0x96, 0xe7, 0x43, 0xbb, 0xdc, 0xed, 0xba, 0xa7, 0x67, 0x71, 0x59, 0x07, 0x5f, 0xa8, 0xd7, 0x83, - 0x85, 0xfb, 0x1c, 0xcb, 0x6e, 0xf9, 0x2e, 0x34, 0xf7, 0x36, 0xdd, 0xde, 0x69, 0x40, 0x36, 0x88, - 0xb8, 0x44, 0xda, 0xf9, 0x96, 0x40, 0x91, 0x40, 0xa2, 0xbd, 0xa8, 0x20, 0xec, 0xd5, 0x4c, 0x85, - 0x94, 0x68, 0x2d, 0x3e, 0x06, 0xcc, 0xd0, 0x5e, 0x13, 0x83, 0x3f, 0x77, 0xeb, 0xa9, 0x81, 0x05, - 0x12, 0x4a, 0xc5, 0x08, 0xb2, 0xa9, 0x8f, 0x03, 0xc5, 0x0e, 0x16, 0x15, 0xd6, 0x83, 0xb9, 0x5b, - 0x1f, 0x3c, 0xbc, 0x50, 0x9c, 0xc5, 0xa0, 0x59, 0xb5, 0x2f, 0xcb, 0x42, 0x8e, 0xd0, 0x49, 0x1c, - 0xa7, 0xeb, 0x29, 0xbe, 0x29, 0x8d, 0xd1, 0x15, 0xdf, 0x0c, 0x6e, 0xa4, 0xfd, 0x2c, 0xb5, 0x69, - 0xaa, 0x5b, 0xcb, 0x9b, 0xc1, 0xac, 0x16, 0x59, 0x3a, 0xad, 0x76, 0xd9, 0x68, 0x6f, 0x35, 0x9a, - 0x55, 0x34, 0x1b, 0xbe, 0x09, 0xdc, 0x30, 0x22, 0xb7, 0xde, 0xde, 0x6a, 0x94, 0xd7, 0x75, 0x65, - 0x9b, 0xb7, 0x97, 0x5a, 0xed, 0xe6, 0xc6, 0x96, 0xb1, 0xd9, 0x68, 0xd4, 0x1a, 0xab, 0x84, 0x18, - 0x32, 0x50, 0x4f, 0x45, 0x19, 0xce, 0x1b, 0xb5, 0xb6, 0xbe, 0x55, 0x69, 0x36, 0x56, 0x6a, 0xab, - 0x8a, 0x35, 0xca, 0xd8, 0xba, 0x4f, 0xbd, 0x0e, 0x5c, 0xcb, 0x71, 0x52, 0x6b, 0x36, 0xd0, 0x14, - 0xbd, 0x52, 0x6e, 0x54, 0x74, 0x34, 0x1f, 0xbf, 0xa8, 0x6a, 0xe0, 0x6a, 0x42, 0x6e, 0x6b, 0xa5, - 0x56, 0x67, 0x77, 0xd5, 0x3e, 0x93, 0x53, 0x4f, 0x83, 0xab, 0xd8, 0x77, 0xd4, 0x27, 0x42, 0xf9, - 0xcd, 0x9c, 0x7a, 0x3d, 0x78, 0x28, 0xf7, 0x15, 0xd9, 0x20, 0xdb, 0xaa, 0x55, 0xb7, 0xd6, 0x6b, - 0xad, 0xf5, 0x72, 0xbb, 0xb2, 0xa6, 0x7c, 0x16, 0x4f, 0x5f, 0x42, 0x7b, 0x9c, 0xf1, 0x4e, 0x7e, - 0x09, 0x6b, 0x27, 0x94, 0x79, 0x45, 0x7d, 0xd4, 0x50, 0xd8, 0x93, 0xed, 0xe2, 0x4f, 0x85, 0x23, - 0x4e, 0x95, 0x53, 0xa1, 0xc7, 0xa4, 0xa0, 0x95, 0x4e, 0x87, 0xda, 0x63, 0xa8, 0xd0, 0x75, 0xe0, - 0xda, 0x86, 0x4e, 0x90, 0x32, 0xf4, 0x4a, 0xf3, 0x9c, 0x6e, 0x6c, 0x9d, 0x2f, 0xd7, 0xeb, 0x7a, - 0x7b, 0x6b, 0xa5, 0x66, 0xb4, 0xda, 0xca, 0xb6, 0xf6, 0x8f, 0x52, 0xb8, 0x2c, 0xc5, 0x48, 0xeb, - 0x4f, 0xa5, 0xb4, 0xcd, 0x3a, 0x71, 0xf9, 0xe9, 0x07, 0x41, 0xd1, 0xf3, 0x4d, 0x7f, 0xdf, 0xa3, - 0xad, 0xfa, 0x21, 0xc3, 0x5b, 0xf5, 0x52, 0x0b, 0x67, 0x32, 0x68, 0x66, 0xed, 0xcb, 0xb9, 0x34, - 0xcd, 0x74, 0x02, 0x2b, 0x53, 0xd6, 0x18, 0x22, 0x3e, 0x03, 0xb4, 0x40, 0xdb, 0x6b, 0xad, 0xad, - 0x72, 0xdd, 0xd0, 0xcb, 0xd5, 0x7b, 0xc3, 0xf5, 0x28, 0xa8, 0x5e, 0x0d, 0x4e, 0x6c, 0x36, 0xca, - 0xcb, 0x75, 0x1d, 0x37, 0x97, 0x66, 0xa3, 0xa1, 0x57, 0x90, 0xdc, 0x7f, 0x14, 0xef, 0xfe, 0x20, - 0xab, 0x1c, 0xf3, 0x8d, 0x2c, 0x27, 0x46, 0xfe, 0x7f, 0x29, 0xec, 0xe6, 0x16, 0x69, 0x18, 0x4b, - 0x6b, 0xb2, 0x38, 0x7c, 0x49, 0xc8, 0xb3, 0x4d, 0x88, 0x93, 0x74, 0x78, 0xfc, 0x97, 0x31, 0xf0, - 0xb8, 0x1a, 0x9c, 0x60, 0xf1, 0xc0, 0x1e, 0x6e, 0xf1, 0x30, 0xfc, 0x89, 0x0c, 0x66, 0xd6, 0xad, - 0x1d, 0xec, 0x5e, 0xbc, 0x1f, 0x19, 0x28, 0x8b, 0x40, 0x0a, 0xbd, 0x77, 0x24, 0xab, 0xcb, 0x4d, - 0xe6, 0x25, 0xf1, 0xf5, 0x16, 0xa1, 0x09, 0xfb, 0x97, 0x53, 0xf7, 0x4c, 0x94, 0xe1, 0x98, 0x9e, - 0xe9, 0xf9, 0x52, 0x9a, 0x9e, 0x69, 0x38, 0xad, 0x54, 0x30, 0x21, 0xd3, 0xc1, 0x85, 0xcf, 0xd8, - 0xb7, 0x5c, 0xd8, 0xc5, 0x66, 0x22, 0xae, 0xb7, 0x6c, 0xf0, 0x89, 0x67, 0xdd, 0xc3, 0x81, 0xc9, - 0x7a, 0xd9, 0xcc, 0x83, 0x52, 0x38, 0x9a, 0xe0, 0x0d, 0x1f, 0xf4, 0x52, 0x6f, 0x34, 0x37, 0x57, - 0xd7, 0xb6, 0x56, 0x0c, 0x5d, 0xa7, 0x4b, 0xc4, 0x3b, 0xda, 0xbb, 0x24, 0xb0, 0x40, 0x6b, 0x48, - 0xbd, 0x27, 0x1e, 0x1a, 0x0b, 0x32, 0x85, 0xe3, 0xdf, 0xd8, 0xe9, 0xc9, 0x2a, 0x0f, 0xc7, 0x63, - 0x93, 0x44, 0x98, 0xe8, 0x3e, 0xf1, 0xa6, 0xb0, 0x09, 0xdd, 0xcd, 0x81, 0xf2, 0x84, 0xd4, 0x14, - 0xb3, 0x9f, 0xa2, 0xbc, 0x08, 0x80, 0x62, 0x0b, 0xf6, 0x60, 0xc7, 0xd7, 0x3e, 0x2c, 0x8f, 0xdd, - 0x26, 0xe2, 0xcc, 0x6d, 0x39, 0x95, 0xb9, 0x9d, 0xcf, 0xc0, 0xdc, 0x2e, 0x8c, 0x6f, 0x6e, 0x17, - 0xd3, 0x9a, 0xdb, 0x33, 0x71, 0xe6, 0x76, 0x42, 0xaf, 0x51, 0x4a, 0xec, 0x35, 0x06, 0x0c, 0x75, - 0xa3, 0x4e, 0x4d, 0x7a, 0x3e, 0x91, 0x2a, 0xf3, 0x27, 0x8b, 0x69, 0xc7, 0x71, 0x02, 0xfc, 0xd1, - 0x9a, 0xe7, 0x3f, 0x59, 0x48, 0x33, 0xee, 0x0f, 0xe5, 0x38, 0x5d, 0x2b, 0x79, 0x45, 0x3e, 0x83, - 0x45, 0x47, 0xf5, 0xe1, 0xe0, 0xa1, 0xd1, 0xf3, 0x96, 0xfe, 0xb4, 0x5a, 0xab, 0xdd, 0xc2, 0x36, - 0x79, 0xa5, 0x69, 0x18, 0x9b, 0x1b, 0x64, 0xbb, 0xea, 0x14, 0x50, 0x23, 0x2a, 0xc6, 0x66, 0x83, - 0x58, 0xe0, 0x3b, 0x3c, 0xf5, 0x95, 0x5a, 0xa3, 0xba, 0x15, 0x8e, 0x6a, 0x8d, 0x95, 0xa6, 0xb2, - 0xab, 0x2e, 0x81, 0x9b, 0x18, 0xea, 0xb8, 0x03, 0x24, 0x25, 0x94, 0x1b, 0xd5, 0xad, 0xf5, 0x86, - 0xbe, 0xde, 0x6c, 0xd4, 0x2a, 0x38, 0xbd, 0xa5, 0xb7, 0x15, 0x0b, 0x99, 0x82, 0x03, 0x36, 0x7f, - 0x4b, 0x2f, 0x1b, 0x95, 0x35, 0xdd, 0x20, 0x45, 0xde, 0xa7, 0xde, 0x00, 0xce, 0x96, 0x1b, 0xcd, - 0x36, 0x4a, 0x29, 0x37, 0xee, 0x6d, 0xdf, 0xbb, 0xa1, 0x6f, 0x6d, 0x18, 0xcd, 0x8a, 0xde, 0x6a, - 0xa1, 0x91, 0x94, 0xce, 0x10, 0x94, 0x9e, 0xfa, 0x64, 0x70, 0x3b, 0xc3, 0x9a, 0xde, 0xc6, 0xbe, - 0x11, 0xeb, 0x4d, 0xec, 0x1e, 0x57, 0xd5, 0xb7, 0xd6, 0xca, 0xad, 0xad, 0x5a, 0xa3, 0xd2, 0x5c, - 0xdf, 0x28, 0xb7, 0x6b, 0x68, 0xc0, 0xdd, 0x30, 0x9a, 0xed, 0xe6, 0xd6, 0x39, 0xdd, 0x68, 0xd5, - 0x9a, 0x0d, 0xc5, 0x46, 0x55, 0x66, 0x46, 0xe8, 0xc0, 0x52, 0x72, 0xd4, 0x6b, 0xc1, 0xe9, 0x20, - 0xbd, 0xde, 0x44, 0x82, 0x66, 0xe6, 0x0c, 0x7d, 0xd6, 0xce, 0x6a, 0xb5, 0x9b, 0x06, 0x99, 0x35, - 0xac, 0xd7, 0x56, 0x0d, 0x34, 0xd5, 0x51, 0x9e, 0x91, 0xe9, 0x9c, 0xe2, 0x9f, 0x25, 0x90, 0x6f, - 0xf9, 0x4e, 0x5f, 0xfb, 0x81, 0xa8, 0x3b, 0x3c, 0x03, 0x80, 0x8b, 0x5d, 0x21, 0xaa, 0xa6, 0x6f, - 0xd2, 0xd5, 0x1a, 0x26, 0x45, 0xfb, 0x0d, 0xe1, 0xfd, 0xdb, 0xc8, 0xea, 0x72, 0xfa, 0x31, 0xc3, - 0xc7, 0x77, 0xc5, 0x8e, 0x43, 0xc6, 0x13, 0x4a, 0xd7, 0x1e, 0x7e, 0x7c, 0x9c, 0x1d, 0x5a, 0x0d, - 0x9c, 0x62, 0x60, 0x45, 0xf2, 0x0f, 0x54, 0x06, 0xaa, 0x0f, 0x02, 0x57, 0x0d, 0x28, 0x1f, 0xd6, - 0xb9, 0x6d, 0xf5, 0x61, 0xe0, 0x21, 0x8c, 0xfa, 0xeb, 0xeb, 0xcd, 0x73, 0x7a, 0xa8, 0xe8, 0xd5, - 0x72, 0xbb, 0xac, 0xec, 0x68, 0x5f, 0x90, 0x41, 0x7e, 0xdd, 0xb9, 0x34, 0xb8, 0x6d, 0x6e, 0xc3, - 0xcb, 0xcc, 0xde, 0x4a, 0xf0, 0xc8, 0x1f, 0xc1, 0x12, 0x12, 0xfb, 0x7a, 0xbc, 0x8b, 0xcc, 0x97, - 0xa4, 0x34, 0x62, 0x5f, 0x3f, 0xac, 0x5f, 0xcc, 0x5f, 0x8f, 0x23, 0xf6, 0x18, 0xd1, 0x42, 0xf5, - 0x2c, 0x38, 0x13, 0xbd, 0xa8, 0x55, 0xf5, 0x46, 0xbb, 0xb6, 0x72, 0x6f, 0x24, 0xdc, 0x9a, 0x21, - 0x24, 0xfe, 0x51, 0xdd, 0x5c, 0xf2, 0x5a, 0xc1, 0x69, 0x70, 0x32, 0x7a, 0xb7, 0xaa, 0xb7, 0x83, - 0x37, 0xf7, 0x69, 0xcf, 0x29, 0x80, 0x79, 0xd2, 0xed, 0x6f, 0xf6, 0xbb, 0xc8, 0xfa, 0x7e, 0x5c, - 0x84, 0xee, 0x8d, 0xe0, 0x78, 0x6d, 0x63, 0xa5, 0xd5, 0xf2, 0x1d, 0xd7, 0xdc, 0x81, 0x78, 0x1c, - 0x25, 0xd2, 0x1a, 0x4c, 0xd6, 0xde, 0x2b, 0xbc, 0xfa, 0xcf, 0x0f, 0x35, 0xa4, 0xcc, 0x18, 0xd4, - 0xbf, 0x26, 0xb4, 0x5a, 0x2f, 0x40, 0x30, 0x1d, 0xfa, 0xf7, 0x4d, 0xb8, 0xcd, 0xc5, 0xe3, 0xb2, - 0x7d, 0xf6, 0xb9, 0x12, 0x98, 0x6d, 0x5b, 0x7b, 0xf0, 0x99, 0x8e, 0x0d, 0x3d, 0x75, 0x06, 0xc8, - 0xab, 0xeb, 0x6d, 0xe5, 0x18, 0xfa, 0x83, 0xa6, 0x45, 0x39, 0xfc, 0x47, 0x47, 0x05, 0xa0, 0x3f, - 0xe5, 0xb6, 0x22, 0xa3, 0x3f, 0xeb, 0x7a, 0x5b, 0xc9, 0xa3, 0x3f, 0x0d, 0xbd, 0xad, 0x14, 0xd0, - 0x9f, 0x8d, 0x7a, 0x5b, 0x29, 0xa2, 0x3f, 0xb5, 0x56, 0x5b, 0x99, 0x41, 0x7f, 0x96, 0x5b, 0x6d, - 0xa5, 0x84, 0xfe, 0x9c, 0x6b, 0xb5, 0x95, 0x59, 0xf4, 0xa7, 0xd2, 0x6e, 0x2b, 0x00, 0xfd, 0xb9, - 0xbb, 0xd5, 0x56, 0xe6, 0xd0, 0x9f, 0x72, 0xa5, 0xad, 0xcc, 0xe3, 0x3f, 0x7a, 0x5b, 0x59, 0x40, - 0x7f, 0x5a, 0xad, 0xb6, 0xb2, 0x88, 0x29, 0xb7, 0xda, 0xca, 0x71, 0x5c, 0x56, 0xad, 0xad, 0x28, - 0xe8, 0xcf, 0x5a, 0xab, 0xad, 0x9c, 0xc0, 0x99, 0x5b, 0x6d, 0x45, 0xc5, 0x85, 0xb6, 0xda, 0xca, - 0x55, 0x38, 0x4f, 0xab, 0xad, 0x9c, 0xc4, 0x45, 0xb4, 0xda, 0xca, 0xd5, 0x98, 0x0d, 0xbd, 0xad, - 0x9c, 0xc2, 0x79, 0x8c, 0xb6, 0xf2, 0x20, 0xfc, 0xaa, 0xd1, 0x56, 0x4e, 0x63, 0xc6, 0xf4, 0xb6, - 0x72, 0x0d, 0xfe, 0x63, 0xb4, 0x15, 0x0d, 0xbf, 0x2a, 0xb7, 0x95, 0x07, 0x6b, 0x0f, 0x01, 0xb3, - 0xab, 0xd0, 0x27, 0x20, 0x6a, 0x0a, 0x90, 0x57, 0xa1, 0xcf, 0x4e, 0xc4, 0x5f, 0x99, 0x07, 0x0f, - 0xa2, 0x8b, 0x37, 0x2b, 0xae, 0xb3, 0x57, 0x87, 0x3b, 0x66, 0xe7, 0x8a, 0x7e, 0x3f, 0x32, 0xf8, - 0xb4, 0x17, 0xe6, 0xb8, 0x15, 0xed, 0x7e, 0xd4, 0x1b, 0xe1, 0xff, 0x89, 0x06, 0x72, 0xb0, 0x46, - 0x2d, 0xf3, 0x6b, 0xd4, 0x71, 0x26, 0x61, 0x5e, 0x64, 0x22, 0xf9, 0xf7, 0x6c, 0x63, 0xe0, 0x36, - 0xa4, 0x72, 0x03, 0x1b, 0x52, 0xa8, 0x85, 0xf5, 0xa1, 0xeb, 0x39, 0xb6, 0xd9, 0x6b, 0x51, 0xf7, - 0x23, 0x32, 0x57, 0x1d, 0x4c, 0x56, 0x9f, 0x1a, 0x34, 0x2a, 0x62, 0xf0, 0x3d, 0x29, 0x69, 0x79, - 0x6b, 0x50, 0x42, 0x31, 0xed, 0xeb, 0xb3, 0x61, 0xfb, 0x6a, 0x73, 0xed, 0xeb, 0x29, 0x87, 0xa0, - 0x9d, 0xae, 0xa9, 0xd5, 0xc6, 0x9b, 0x8a, 0x46, 0xce, 0xf9, 0xc1, 0xfe, 0x97, 0xac, 0x7d, 0x41, - 0x02, 0xa7, 0x74, 0x7b, 0xd8, 0x54, 0x86, 0x55, 0xa3, 0xb7, 0xb2, 0xd0, 0x6c, 0xf0, 0x22, 0xbd, - 0x7d, 0x68, 0xb5, 0x87, 0xd3, 0x8c, 0x91, 0xe8, 0xef, 0x84, 0x12, 0x6d, 0x71, 0x12, 0xbd, 0x6b, - 0x7c, 0xd2, 0xe9, 0x04, 0xda, 0x98, 0x68, 0xdf, 0x95, 0xd7, 0xfe, 0x5c, 0x02, 0x27, 0x88, 0x07, - 0xe1, 0xdd, 0x64, 0xe6, 0x84, 0x7b, 0x7b, 0xde, 0xfa, 0xea, 0x45, 0xb3, 0x2c, 0xa2, 0xdf, 0x4c, - 0x8a, 0xf6, 0x3a, 0x56, 0xe0, 0xf7, 0xf0, 0x02, 0x8f, 0xe9, 0xc7, 0x07, 0x8b, 0x8b, 0x91, 0xf5, - 0x6f, 0x86, 0xb2, 0x6e, 0x70, 0xb2, 0xbe, 0x7d, 0x2c, 0xaa, 0x47, 0x2b, 0xe6, 0x6f, 0xe6, 0xc1, - 0x43, 0x08, 0x87, 0x54, 0x11, 0x48, 0x3f, 0x58, 0xb6, 0xbb, 0x06, 0xf4, 0x7c, 0xd3, 0xf5, 0xb9, - 0xd0, 0x2b, 0x03, 0x53, 0xf3, 0x5c, 0x06, 0x53, 0x73, 0x69, 0xe4, 0xd4, 0x5c, 0x7b, 0x0f, 0x6b, - 0xe0, 0x9d, 0xe7, 0x91, 0x2d, 0x27, 0x60, 0x10, 0x53, 0xc3, 0xb8, 0x16, 0x15, 0x5a, 0x7e, 0x3f, - 0xcc, 0xa1, 0xbc, 0x72, 0xe8, 0x12, 0xd2, 0x21, 0xfe, 0x1b, 0x93, 0xb5, 0xc4, 0xf3, 0xec, 0x3b, - 0xde, 0x6c, 0x54, 0xba, 0x99, 0x4e, 0xa1, 0x5e, 0x5c, 0x02, 0xb3, 0xb8, 0xcb, 0xa9, 0x5b, 0xf6, - 0x45, 0xed, 0x1b, 0x32, 0x98, 0x6f, 0xc0, 0xcb, 0x95, 0x5d, 0xb3, 0xd7, 0x83, 0xf6, 0x0e, 0xd4, - 0xee, 0xe3, 0x6c, 0x7b, 0xb3, 0xdf, 0x6f, 0x44, 0xfb, 0xc3, 0xc1, 0xa3, 0x7a, 0x17, 0x28, 0x78, - 0x1d, 0x27, 0x0c, 0xea, 0xf0, 0x03, 0x31, 0xab, 0xd7, 0xe5, 0x7d, 0x7f, 0x77, 0x09, 0x97, 0x55, - 0xee, 0x5b, 0x2d, 0xf4, 0x81, 0x41, 0xbe, 0xa3, 0xe3, 0xe4, 0x5f, 0x0e, 0xed, 0x8c, 0x73, 0x09, - 0x9d, 0x71, 0xc8, 0xf8, 0x12, 0xcb, 0x74, 0xcc, 0x22, 0xc9, 0x75, 0x60, 0xae, 0x13, 0x64, 0x09, - 0x4f, 0xe9, 0xb1, 0x49, 0xda, 0x5f, 0xa4, 0xea, 0xae, 0x85, 0x0a, 0x4f, 0xa7, 0x55, 0x70, 0xc2, - 0xa6, 0xe6, 0xd5, 0xe0, 0x44, 0xbb, 0xd9, 0xdc, 0x5a, 0x2f, 0x37, 0xee, 0x8d, 0x62, 0xab, 0x6c, - 0x6b, 0xaf, 0xc8, 0x83, 0xc5, 0x96, 0xd3, 0xbb, 0x04, 0x23, 0x9c, 0x6b, 0x9c, 0xfb, 0x27, 0x2b, - 0xa7, 0xdc, 0x01, 0x39, 0xa9, 0xa7, 0x40, 0xd1, 0xb4, 0xbd, 0xcb, 0x30, 0x30, 0xff, 0xe9, 0x13, - 0x85, 0xf1, 0xa3, 0x6c, 0x47, 0x60, 0xf0, 0x30, 0xde, 0x31, 0x42, 0x92, 0x3c, 0x57, 0x31, 0x40, - 0x9e, 0x05, 0xf3, 0x1e, 0xf1, 0x12, 0x69, 0x33, 0xce, 0x40, 0x5c, 0x1a, 0x66, 0x91, 0xb8, 0x29, - 0xc9, 0x94, 0x45, 0xfc, 0xa4, 0xbd, 0x36, 0xec, 0x3f, 0x36, 0x39, 0x88, 0xcb, 0x87, 0x61, 0x2c, - 0x1d, 0xc8, 0xaf, 0x9a, 0xf4, 0x24, 0xfe, 0x34, 0x38, 0x19, 0x9c, 0x50, 0xaf, 0xac, 0x95, 0xeb, - 0x75, 0xbd, 0xb1, 0xaa, 0x6f, 0xd5, 0xaa, 0x64, 0x3f, 0x39, 0x4a, 0x29, 0xb7, 0xdb, 0xfa, 0xfa, - 0x46, 0xbb, 0xb5, 0xa5, 0x3f, 0xad, 0xa2, 0xeb, 0x55, 0xec, 0x80, 0x8d, 0x4f, 0x50, 0x06, 0xae, - 0xf2, 0xe5, 0x46, 0xeb, 0xbc, 0x6e, 0x28, 0xbb, 0x67, 0xcb, 0x60, 0x8e, 0x19, 0x28, 0x10, 0x77, - 0x55, 0xb8, 0x6d, 0xee, 0xf7, 0xa8, 0x39, 0xae, 0x1c, 0x43, 0xdc, 0x61, 0xd9, 0x34, 0xed, 0xde, - 0x15, 0x25, 0xa7, 0x2a, 0x60, 0x9e, 0x1d, 0x13, 0x14, 0x49, 0xfb, 0xd6, 0xb5, 0x60, 0xf6, 0xbc, - 0xe3, 0x5e, 0xc4, 0x5e, 0xc3, 0xda, 0x07, 0x48, 0x0c, 0xb6, 0x20, 0xa2, 0x04, 0x63, 0x80, 0xbd, - 0x4a, 0xdc, 0x4d, 0x2c, 0xa0, 0xb6, 0x34, 0x32, 0x6a, 0xc4, 0x75, 0x60, 0xee, 0x72, 0x90, 0x3b, - 0x6a, 0xe9, 0x4c, 0x92, 0xf6, 0xcb, 0x62, 0x8e, 0x5f, 0xa3, 0x8b, 0xcc, 0x7e, 0xd5, 0xff, 0xed, - 0x12, 0x28, 0xae, 0x42, 0xbf, 0xdc, 0xeb, 0xb1, 0x72, 0x7b, 0x99, 0xf0, 0x39, 0x52, 0xae, 0x12, - 0xe5, 0x5e, 0x2f, 0xbe, 0x51, 0x31, 0x02, 0x0a, 0xce, 0x3b, 0x71, 0x69, 0x82, 0x5e, 0xda, 0x23, - 0x0a, 0xcc, 0x5e, 0x62, 0x7f, 0x1b, 0xb9, 0x66, 0xbf, 0x9e, 0x31, 0x93, 0x1e, 0x1b, 0xc5, 0xdf, - 0xcb, 0x25, 0x3b, 0x49, 0x05, 0xf9, 0xd4, 0x7b, 0xc0, 0xcc, 0xbe, 0x07, 0x2b, 0xa6, 0x17, 0x0c, - 0x6d, 0x7c, 0x4d, 0x9b, 0x17, 0xee, 0x83, 0x1d, 0x7f, 0xa9, 0xb6, 0x87, 0x26, 0x3e, 0x9b, 0x24, - 0x63, 0x18, 0xaf, 0x88, 0x3e, 0x1b, 0x01, 0x05, 0x34, 0xed, 0xbc, 0x6c, 0xf9, 0xbb, 0x95, 0x5d, - 0xd3, 0xa7, 0x9b, 0x2d, 0xe1, 0xb3, 0xf6, 0xa1, 0x31, 0xe0, 0x4c, 0x74, 0xd8, 0x89, 0x3f, 0x8e, - 0x7e, 0x13, 0x50, 0xb0, 0xf9, 0x63, 0xd9, 0x3b, 0x84, 0xff, 0x70, 0x8e, 0x79, 0x20, 0x3d, 0x35, - 0xe0, 0x13, 0xf0, 0xc8, 0x19, 0x07, 0xf0, 0x1f, 0x91, 0x41, 0xbe, 0xd9, 0x87, 0xb6, 0xf0, 0x39, - 0xcd, 0x10, 0x07, 0x69, 0x00, 0x87, 0xf7, 0x89, 0xbb, 0x10, 0x87, 0x95, 0x46, 0x25, 0xc7, 0xa0, - 0x70, 0x0b, 0xc8, 0x5b, 0xf6, 0xb6, 0x43, 0xad, 0xe0, 0x07, 0xc7, 0xd8, 0x45, 0x35, 0x7b, 0xdb, - 0x31, 0x70, 0x46, 0xed, 0x7d, 0x62, 0xde, 0xc3, 0x49, 0x65, 0xa7, 0x13, 0xf7, 0xca, 0x18, 0x63, - 0x91, 0x0a, 0x16, 0x23, 0x13, 0xb5, 0xde, 0x2c, 0x57, 0x95, 0xae, 0xf6, 0x37, 0x25, 0x50, 0x24, - 0x6a, 0xa3, 0xbd, 0x44, 0x06, 0x72, 0xb9, 0xdb, 0x8d, 0x01, 0x43, 0x3a, 0x00, 0x86, 0x13, 0x68, - 0x21, 0xf5, 0xf4, 0x0e, 0x9e, 0xf9, 0xc0, 0x6d, 0x82, 0x63, 0x03, 0x6d, 0x92, 0xe5, 0x6e, 0x37, - 0xfe, 0xdc, 0x43, 0x58, 0xa0, 0xc4, 0x17, 0xc8, 0xf6, 0x10, 0xb2, 0x58, 0x0f, 0x91, 0x7a, 0x20, - 0x89, 0xe5, 0x2f, 0xfb, 0x56, 0xf2, 0xf7, 0x12, 0x98, 0xa9, 0x5b, 0x9e, 0x8f, 0xb0, 0x29, 0x8b, - 0x60, 0x73, 0x2d, 0x98, 0x0d, 0x44, 0x83, 0xba, 0x4c, 0x34, 0x1e, 0x44, 0x09, 0xfc, 0x4c, 0xfe, - 0x6e, 0x1e, 0x9d, 0xc7, 0x27, 0xd7, 0x9e, 0x72, 0x11, 0x7f, 0x26, 0x2e, 0x2a, 0x56, 0x1a, 0x2c, - 0xf6, 0x57, 0x42, 0x81, 0xaf, 0x73, 0x02, 0xbf, 0x6d, 0x9c, 0x22, 0xb3, 0x17, 0xfa, 0x1f, 0x4a, - 0x00, 0xa0, 0xb2, 0xe9, 0xc1, 0xe3, 0x47, 0x72, 0xe1, 0x44, 0x12, 0xa4, 0xfb, 0x0a, 0x56, 0xba, - 0xeb, 0xbc, 0x74, 0x7f, 0x68, 0x74, 0x55, 0x93, 0x0e, 0x18, 0xab, 0x0a, 0x90, 0xad, 0x50, 0xb4, - 0xe8, 0xaf, 0xf6, 0xf6, 0x50, 0xa8, 0x1b, 0x9c, 0x50, 0xef, 0x18, 0xb3, 0xa4, 0xec, 0xe5, 0xfa, - 0xc7, 0x12, 0x98, 0x69, 0x41, 0x1f, 0x75, 0x9d, 0xda, 0x39, 0x91, 0x5e, 0x9f, 0x69, 0xdb, 0x92, - 0x60, 0xdb, 0xfe, 0x4e, 0x4e, 0x34, 0xb0, 0x5c, 0x24, 0x19, 0xca, 0x53, 0xcc, 0xea, 0xc5, 0xeb, - 0x85, 0x02, 0xcb, 0x8d, 0xa2, 0x96, 0xbd, 0x74, 0xdf, 0x2a, 0x85, 0x9e, 0x26, 0xfc, 0xb9, 0x40, - 0xd6, 0xac, 0xce, 0x1d, 0x34, 0xab, 0xc5, 0xcf, 0x05, 0xb2, 0x75, 0x8c, 0x77, 0x6c, 0x48, 0x6d, - 0x80, 0x4c, 0xc0, 0xe7, 0x60, 0x1c, 0x79, 0x3d, 0x5b, 0x06, 0x45, 0xba, 0xf9, 0x70, 0x57, 0xf2, - 0xde, 0xc3, 0xe8, 0xa9, 0xc9, 0xfb, 0xc7, 0x30, 0x05, 0x93, 0x96, 0xf5, 0x43, 0x36, 0x24, 0x86, - 0x8d, 0x9b, 0x41, 0x01, 0x47, 0xdd, 0xa6, 0xe3, 0x5c, 0xe4, 0x2e, 0x12, 0x90, 0xd0, 0xd1, 0x5b, - 0x83, 0x64, 0x4a, 0x8d, 0xc2, 0x04, 0x76, 0x02, 0xc6, 0x41, 0xe1, 0x9b, 0x2a, 0x00, 0x1b, 0xfb, - 0x17, 0x7a, 0x96, 0xb7, 0x6b, 0xd9, 0xd8, 0xc7, 0x6c, 0x9e, 0x3e, 0x92, 0xe0, 0xd1, 0x89, 0x26, - 0x61, 0xac, 0x51, 0xa0, 0x00, 0x79, 0xdf, 0xb5, 0xa8, 0x89, 0x8c, 0xfe, 0xaa, 0x77, 0x86, 0xde, - 0x9a, 0xf9, 0x81, 0xc0, 0x2f, 0x48, 0x0c, 0x11, 0x07, 0x4b, 0x4c, 0xe9, 0x91, 0xd7, 0x26, 0x1b, - 0x21, 0xbc, 0xc0, 0x47, 0x08, 0xe7, 0x4e, 0x83, 0x17, 0x07, 0x4e, 0x83, 0x23, 0x1c, 0x3d, 0xeb, - 0x99, 0x10, 0xbb, 0x2e, 0xc9, 0x06, 0xfe, 0x8f, 0xbe, 0xc0, 0xee, 0x45, 0xd8, 0xbb, 0x8f, 0x9c, - 0x39, 0x88, 0x12, 0xd8, 0x3e, 0x6f, 0x56, 0xb0, 0xcf, 0xfb, 0x58, 0x34, 0x77, 0x72, 0x04, 0x8d, - 0xe9, 0x14, 0x92, 0xe3, 0xd8, 0xcd, 0x0f, 0xb0, 0xab, 0x7d, 0x52, 0x38, 0x90, 0x27, 0x23, 0xe3, - 0xc4, 0x59, 0x10, 0xe5, 0x40, 0x0a, 0x39, 0x60, 0xf6, 0x90, 0x93, 0x7a, 0xe0, 0x51, 0xf4, 0xd3, - 0xe9, 0xf2, 0xde, 0x78, 0x36, 0x76, 0x70, 0xac, 0xbe, 0xb9, 0x7c, 0xb7, 0x5e, 0x69, 0x2b, 0xf0, - 0xe0, 0x51, 0x7b, 0x7c, 0xa8, 0x9e, 0x1c, 0xa0, 0x8f, 0xd6, 0x74, 0xb4, 0xff, 0x21, 0x81, 0x22, - 0x35, 0x37, 0xee, 0x3a, 0x24, 0x84, 0xda, 0x2b, 0xc7, 0x81, 0x24, 0x31, 0xba, 0xc9, 0xe7, 0xd2, - 0x02, 0x30, 0x01, 0x03, 0xe3, 0xde, 0xcc, 0x00, 0xd0, 0xfe, 0x49, 0x02, 0x79, 0x64, 0x06, 0x89, - 0xc5, 0x8e, 0xf8, 0xac, 0xb0, 0x4b, 0x31, 0x23, 0x00, 0x44, 0x3e, 0x46, 0xbf, 0x97, 0xc1, 0x6c, - 0x9f, 0x64, 0x0c, 0x23, 0x97, 0x5c, 0x2f, 0xd0, 0x19, 0x41, 0x23, 0xfa, 0x8c, 0x99, 0x72, 0x26, - 0xb9, 0x25, 0x27, 0xf3, 0x93, 0x0e, 0x0e, 0x7d, 0x12, 0x61, 0x26, 0xb6, 0xb5, 0x7f, 0x95, 0x00, - 0x30, 0xa0, 0xe7, 0xf4, 0x2e, 0xc1, 0x4d, 0xd7, 0xd2, 0x1e, 0x1c, 0x01, 0x40, 0x9b, 0x7d, 0x2e, - 0x6a, 0xf6, 0x9f, 0x97, 0x44, 0x9d, 0x87, 0x39, 0xcd, 0x0b, 0x88, 0xc7, 0x88, 0xff, 0xc9, 0x60, - 0x86, 0xca, 0x91, 0xda, 0x94, 0x62, 0xc2, 0x0f, 0x3e, 0xd2, 0x3e, 0x28, 0xe4, 0x7c, 0x2c, 0xc2, - 0x51, 0x3a, 0x00, 0x2a, 0x63, 0x00, 0x70, 0x1c, 0xcc, 0x05, 0x00, 0x6c, 0x1a, 0x35, 0x05, 0x6a, - 0xef, 0x96, 0xb1, 0x87, 0x06, 0x19, 0xdc, 0x0e, 0xdf, 0xd3, 0xfc, 0xb9, 0xf0, 0x64, 0x9f, 0x91, - 0x47, 0x58, 0x7e, 0x46, 0x00, 0xfd, 0xae, 0xd0, 0xec, 0x5e, 0x80, 0xa1, 0x07, 0x4a, 0x7f, 0x75, - 0x56, 0x07, 0x0b, 0x9c, 0x55, 0xa2, 0x9e, 0x06, 0x27, 0xb9, 0x04, 0x32, 0xde, 0x75, 0x95, 0x63, - 0xaa, 0x06, 0x4e, 0x71, 0x6f, 0xe8, 0x03, 0xec, 0x2a, 0x39, 0xed, 0x5d, 0x7f, 0x92, 0x0b, 0xd7, - 0x7b, 0xde, 0x9f, 0xa7, 0xab, 0x6f, 0x9f, 0xe6, 0x83, 0x65, 0x76, 0x1c, 0xdb, 0x87, 0xf7, 0x33, - 0x6e, 0x2e, 0x61, 0x42, 0xa2, 0xd5, 0x70, 0x1a, 0xcc, 0xf8, 0x2e, 0xeb, 0xfa, 0x12, 0x3c, 0xb2, - 0x8a, 0x55, 0xe0, 0x15, 0xab, 0x01, 0xce, 0x5a, 0x76, 0xa7, 0xb7, 0xdf, 0x85, 0x06, 0xec, 0x99, - 0x48, 0x86, 0x5e, 0xd9, 0xab, 0xc2, 0x3e, 0xb4, 0xbb, 0xd0, 0xf6, 0x09, 0x9f, 0xc1, 0xb9, 0x59, - 0x81, 0x9c, 0xbc, 0x32, 0xde, 0xc9, 0x2b, 0xe3, 0x23, 0x87, 0x2d, 0x01, 0x27, 0xac, 0x01, 0xde, - 0x06, 0x00, 0xa9, 0xdb, 0x39, 0x0b, 0x5e, 0xa6, 0x6a, 0x78, 0xcd, 0xc0, 0x4a, 0x60, 0x33, 0xcc, - 0x60, 0x30, 0x99, 0xb5, 0xaf, 0x86, 0xea, 0xf7, 0x14, 0x4e, 0xfd, 0x6e, 0x16, 0x64, 0x21, 0x9d, - 0xd6, 0xf5, 0xc7, 0xd0, 0xba, 0x05, 0x30, 0x1b, 0xed, 0x46, 0xcb, 0xea, 0x35, 0xe0, 0xea, 0xc0, - 0x43, 0xb9, 0xa1, 0xeb, 0xd5, 0xd6, 0xd6, 0xe6, 0xc6, 0xaa, 0x51, 0xae, 0xea, 0x0a, 0x40, 0xfa, - 0x49, 0xf4, 0x32, 0x74, 0x2c, 0xce, 0x6b, 0x7f, 0x24, 0x81, 0x02, 0x3e, 0xf4, 0xad, 0x3d, 0x7d, - 0x42, 0x9a, 0xe3, 0x71, 0x4e, 0x53, 0xe1, 0xb8, 0x2b, 0x7e, 0x05, 0x0a, 0x15, 0x26, 0xe6, 0xea, - 0x50, 0x57, 0xa0, 0x24, 0x10, 0xca, 0x7e, 0x26, 0x84, 0x9a, 0x64, 0x6b, 0xd7, 0xb9, 0xfc, 0x1f, - 0xb9, 0x49, 0xa2, 0xfa, 0x1f, 0x71, 0x93, 0x1c, 0xc2, 0xc2, 0xd4, 0x9b, 0xe4, 0x90, 0x76, 0x97, - 0xd0, 0x4c, 0xb5, 0x8f, 0x16, 0xc2, 0xf9, 0xdf, 0xa7, 0xa4, 0x43, 0xed, 0x9d, 0x95, 0xc1, 0x82, - 0x65, 0xfb, 0xd0, 0xb5, 0xcd, 0xde, 0x4a, 0xcf, 0xdc, 0x09, 0xec, 0xd3, 0xc1, 0x4d, 0x90, 0x1a, - 0x93, 0xc7, 0xe0, 0xbf, 0x50, 0xcf, 0x00, 0xe0, 0xc3, 0xbd, 0x7e, 0xcf, 0xf4, 0x23, 0xd5, 0x63, - 0x52, 0x58, 0xed, 0xcb, 0xf3, 0xda, 0xf7, 0x18, 0x70, 0x15, 0x01, 0xad, 0x7d, 0xa5, 0x0f, 0x37, - 0x6d, 0xeb, 0x19, 0xfb, 0x38, 0xb6, 0x32, 0xd1, 0xd1, 0x61, 0xaf, 0xb8, 0x5d, 0xa1, 0x22, 0xbf, - 0x2b, 0xa4, 0xde, 0x01, 0xae, 0xc1, 0x61, 0xb3, 0xf1, 0x1d, 0x23, 0xe7, 0xad, 0xee, 0x0e, 0xf4, - 0x6b, 0xdb, 0xeb, 0x96, 0xe7, 0x59, 0xf6, 0x0e, 0x9e, 0x8e, 0x97, 0x8c, 0xf8, 0x0c, 0xda, 0xff, - 0x12, 0x8e, 0xdb, 0x14, 0xf4, 0x19, 0x23, 0xe2, 0x36, 0x39, 0xfc, 0xb6, 0x5d, 0xd4, 0x4e, 0xc3, - 0x55, 0x9d, 0xbc, 0xc0, 0xaa, 0x0e, 0x8b, 0x69, 0x41, 0x70, 0x75, 0xe0, 0x35, 0x42, 0x81, 0xa1, - 0x92, 0xaa, 0x91, 0x7d, 0xdf, 0xf7, 0x6d, 0x19, 0x2c, 0x92, 0xa2, 0x97, 0x1d, 0xe7, 0xe2, 0x9e, - 0xe9, 0x5e, 0xd4, 0x7e, 0xfa, 0x70, 0xbb, 0xc0, 0x89, 0xbb, 0x57, 0x71, 0x5b, 0xba, 0x03, 0xca, - 0x9b, 0x1f, 0x54, 0x5e, 0xed, 0x77, 0x84, 0xa7, 0x24, 0x9c, 0x3c, 0x83, 0x4a, 0x4d, 0x67, 0x7b, - 0x4b, 0xec, 0x78, 0xa4, 0x08, 0x83, 0xd9, 0x03, 0xff, 0x5b, 0x21, 0xf0, 0xc1, 0x38, 0xc2, 0xee, - 0x0c, 0x4c, 0x12, 0x77, 0xed, 0x6b, 0xe3, 0x61, 0x17, 0xf0, 0x35, 0x06, 0x76, 0x0a, 0x90, 0x2f, - 0x86, 0xce, 0x4c, 0xe8, 0x2f, 0x5b, 0xa1, 0x7c, 0x76, 0x68, 0xc6, 0xb0, 0x3c, 0x15, 0x34, 0x4f, - 0xf2, 0x2c, 0x34, 0xfb, 0x99, 0x62, 0xfa, 0x15, 0xe1, 0x1d, 0xb7, 0xa1, 0x02, 0x22, 0xdc, 0x4d, - 0xa7, 0x55, 0x8a, 0x6d, 0xd7, 0x89, 0xb3, 0x99, 0x3d, 0x9a, 0x2f, 0x2c, 0x80, 0xd9, 0x20, 0x7e, - 0x16, 0xbe, 0x91, 0x30, 0xc4, 0xf0, 0x14, 0x28, 0x7a, 0xce, 0xbe, 0xdb, 0x81, 0x74, 0x0f, 0x94, - 0x3e, 0x8d, 0xb1, 0x5f, 0x37, 0xd2, 0x5c, 0x38, 0x60, 0x91, 0xe4, 0x53, 0x5b, 0x24, 0xf1, 0xf6, - 0x6e, 0x82, 0xfd, 0xa0, 0xbd, 0x48, 0xf8, 0xda, 0x10, 0x0e, 0xb3, 0x16, 0xf4, 0x1f, 0x88, 0x46, - 0xc0, 0xaf, 0x0b, 0xed, 0x06, 0x8d, 0xa8, 0x49, 0x3a, 0x95, 0x6b, 0x8e, 0x61, 0x07, 0x3f, 0x18, - 0x3c, 0x28, 0xc8, 0x41, 0x0d, 0x60, 0x6c, 0xf0, 0x6e, 0x1a, 0x75, 0x45, 0xd6, 0x9e, 0x9d, 0x07, - 0x0a, 0x61, 0xad, 0x19, 0xda, 0x82, 0xda, 0xcb, 0x72, 0x47, 0x6d, 0xf0, 0xc6, 0xcf, 0x60, 0x7f, - 0x5f, 0x12, 0x0d, 0x36, 0xce, 0x09, 0x3e, 0xaa, 0x5d, 0x8c, 0x26, 0x8d, 0xd1, 0xcc, 0x12, 0x94, - 0x4f, 0x7b, 0x4b, 0x4e, 0x24, 0x76, 0xb9, 0x18, 0x8b, 0xd9, 0xf7, 0x4a, 0xdf, 0xc9, 0x07, 0x61, - 0x10, 0x57, 0x5c, 0x67, 0x6f, 0xd3, 0xed, 0x69, 0xff, 0x47, 0xe8, 0x6a, 0x88, 0x98, 0xd9, 0x85, - 0x14, 0x3f, 0xbb, 0xc0, 0x2b, 0xd2, 0xbd, 0x68, 0x2b, 0xac, 0x37, 0xc6, 0xf0, 0xad, 0xde, 0x00, - 0x16, 0xcd, 0x6e, 0x77, 0xc3, 0xdc, 0x81, 0x15, 0x34, 0x6d, 0xb7, 0x7d, 0x1a, 0x22, 0x6d, 0x20, - 0x35, 0x71, 0x2a, 0xc3, 0xf7, 0x91, 0x33, 0x07, 0xac, 0x52, 0xf1, 0x65, 0x58, 0x0e, 0x44, 0x2a, - 0xbf, 0xa9, 0x0c, 0x7f, 0x68, 0xc8, 0xe8, 0xec, 0x9a, 0x51, 0x40, 0x47, 0xfa, 0x24, 0xe8, 0x8b, - 0x25, 0xc0, 0x77, 0xf6, 0x9a, 0xf7, 0x6b, 0x12, 0x98, 0x41, 0x78, 0x94, 0xbb, 0x5d, 0xed, 0x11, - 0x5c, 0xdc, 0xd3, 0x58, 0x6f, 0xb8, 0xe7, 0x0b, 0xbb, 0x26, 0x06, 0x35, 0x24, 0xf4, 0x63, 0x30, - 0x89, 0x84, 0x28, 0x71, 0x42, 0x14, 0x8b, 0x5f, 0x9a, 0x58, 0x44, 0xf6, 0xe2, 0xfb, 0xac, 0x04, - 0x16, 0x82, 0x79, 0xc6, 0x0a, 0xf4, 0x3b, 0xbb, 0xda, 0x6d, 0xa2, 0xeb, 0x5c, 0xb4, 0x25, 0x86, - 0x5b, 0xc2, 0x3d, 0xed, 0x7b, 0xb9, 0x94, 0x2a, 0xcf, 0x95, 0x1c, 0xb3, 0x48, 0x98, 0x4a, 0x17, - 0x93, 0x08, 0x66, 0x2f, 0xcc, 0xaf, 0x4a, 0x00, 0xb4, 0x9d, 0x70, 0xb2, 0x7c, 0x08, 0x49, 0xfe, - 0x8c, 0xf0, 0x6e, 0x31, 0xad, 0x78, 0x54, 0x6c, 0xfa, 0x9e, 0x43, 0xd0, 0x99, 0x6a, 0x54, 0x49, - 0x53, 0x69, 0xeb, 0xb3, 0xd5, 0xfd, 0x7e, 0xcf, 0xea, 0x98, 0xfe, 0xa0, 0x07, 0x60, 0xbc, 0x78, - 0xf1, 0x75, 0xde, 0xa9, 0x8c, 0xc6, 0xb0, 0x8c, 0x18, 0x59, 0x92, 0x38, 0x41, 0x52, 0x10, 0x27, - 0x48, 0xd0, 0xab, 0x67, 0x04, 0xf1, 0x29, 0xa8, 0xa7, 0x0c, 0x8e, 0x37, 0xfb, 0xd0, 0x5e, 0x76, - 0xa1, 0xd9, 0xed, 0xb8, 0xfb, 0x7b, 0x17, 0x3c, 0xd6, 0x7d, 0x35, 0x59, 0x47, 0x99, 0x95, 0x6b, - 0x89, 0x5b, 0xb9, 0xd6, 0x7e, 0x4c, 0x16, 0x8d, 0xe4, 0xc6, 0xec, 0xaf, 0x30, 0x3c, 0x8c, 0x31, - 0xd4, 0xa5, 0x72, 0xba, 0x1a, 0x58, 0xa4, 0xce, 0xa7, 0x59, 0xa4, 0x7e, 0xb3, 0x50, 0x5c, 0x38, - 0xa1, 0x7a, 0x4d, 0xc5, 0x77, 0x6e, 0xb1, 0x05, 0xfd, 0x18, 0x78, 0xaf, 0x07, 0x0b, 0x17, 0xa2, - 0x37, 0x21, 0xc4, 0x7c, 0xe2, 0x10, 0x8f, 0xd6, 0xb7, 0xa6, 0x5d, 0xa1, 0xe1, 0x59, 0x88, 0x41, - 0x37, 0x44, 0x50, 0x12, 0x71, 0x9b, 0x4b, 0xb5, 0xdc, 0x92, 0x58, 0x7e, 0xf6, 0x28, 0x7c, 0x52, - 0x02, 0x73, 0xf8, 0x92, 0xf2, 0xe5, 0x2b, 0xf8, 0x20, 0xa8, 0xa0, 0x51, 0xf2, 0x42, 0x56, 0xcc, - 0x2a, 0xc8, 0xf7, 0x2c, 0xfb, 0x62, 0xe0, 0xef, 0x88, 0xfe, 0x47, 0x57, 0x9c, 0x4a, 0x43, 0xae, - 0x38, 0x0d, 0xb7, 0x49, 0xc2, 0x72, 0x63, 0x46, 0xd3, 0x37, 0xe4, 0x44, 0xae, 0x38, 0x1d, 0x49, - 0x2e, 0x7b, 0x31, 0xfe, 0x55, 0x1e, 0x14, 0x5b, 0xd0, 0x74, 0x3b, 0xbb, 0xda, 0xfb, 0xa5, 0xa1, - 0x53, 0x89, 0x12, 0x3f, 0x95, 0x58, 0x01, 0x33, 0xdb, 0x56, 0xcf, 0x87, 0x2e, 0xf1, 0x01, 0x67, - 0xbb, 0x76, 0xd2, 0xc4, 0x97, 0x7b, 0x4e, 0xe7, 0xe2, 0x12, 0x35, 0xed, 0x97, 0x82, 0x78, 0xd3, - 0x4b, 0x2b, 0xf8, 0x23, 0x23, 0xf8, 0x18, 0x19, 0x84, 0x9e, 0xe3, 0xfa, 0x71, 0xf7, 0x17, 0xc5, - 0x50, 0x69, 0x39, 0xae, 0x6f, 0x90, 0x0f, 0x11, 0xcc, 0xdb, 0xfb, 0xbd, 0x5e, 0x1b, 0xde, 0xef, - 0x07, 0xd3, 0xba, 0xe0, 0x19, 0x19, 0x8b, 0xce, 0xf6, 0xb6, 0x07, 0xc9, 0xa2, 0x42, 0xc1, 0xa0, - 0x4f, 0xea, 0x49, 0x50, 0xe8, 0x59, 0x7b, 0x16, 0x99, 0x88, 0x14, 0x0c, 0xf2, 0xa0, 0xde, 0x04, - 0x94, 0x68, 0x0e, 0x44, 0x18, 0x3d, 0x5d, 0xc4, 0x4d, 0xf3, 0x40, 0x3a, 0xd2, 0x99, 0x8b, 0xf0, - 0x8a, 0x77, 0x7a, 0x06, 0xbf, 0xc7, 0xff, 0xb5, 0xd7, 0xa6, 0xdd, 0x30, 0x21, 0x12, 0x8f, 0x9f, - 0xe1, 0xba, 0xb0, 0xe3, 0xb8, 0xdd, 0x40, 0x36, 0xf1, 0x13, 0x0c, 0x9a, 0x2f, 0xdd, 0x36, 0xc7, - 0xd0, 0xc2, 0xb3, 0xd7, 0xb4, 0xf7, 0x14, 0x51, 0xb7, 0x89, 0x8a, 0x3e, 0x6f, 0xf9, 0xbb, 0xeb, - 0xd0, 0x37, 0xb5, 0xbf, 0x92, 0x87, 0x6a, 0xdc, 0xdc, 0xff, 0xaf, 0x71, 0x23, 0x34, 0x8e, 0xc4, - 0x0c, 0xf3, 0xf7, 0x5d, 0x1b, 0xc9, 0x91, 0xfa, 0xd1, 0x32, 0x29, 0xea, 0x1d, 0xe0, 0x9a, 0xe8, - 0x29, 0x58, 0x4a, 0xad, 0x32, 0xae, 0xb5, 0x25, 0x23, 0x3e, 0x83, 0xba, 0x01, 0x1e, 0x4e, 0x5e, - 0xae, 0xb5, 0xd7, 0xeb, 0x6b, 0xd6, 0xce, 0x6e, 0xcf, 0xda, 0xd9, 0xf5, 0xbd, 0x9a, 0xed, 0xf9, - 0xd0, 0xec, 0x36, 0xb7, 0x0d, 0x72, 0xf3, 0x18, 0xc0, 0x74, 0x44, 0xb2, 0xf2, 0x3e, 0xe2, 0x62, - 0xa3, 0x1b, 0xab, 0x29, 0x31, 0x2d, 0xe5, 0x09, 0xa8, 0xa5, 0x78, 0xfb, 0xbd, 0x10, 0xd3, 0x6b, - 0x07, 0x30, 0x8d, 0x54, 0x7d, 0xbf, 0x87, 0x9b, 0x0b, 0xce, 0x9c, 0x76, 0x9c, 0x4b, 0xe0, 0x24, - 0xfb, 0x66, 0xf3, 0x7f, 0x8a, 0xa0, 0xb0, 0xea, 0x9a, 0xfd, 0x5d, 0xed, 0xd9, 0x4c, 0xff, 0x3c, - 0xa9, 0x36, 0x11, 0x6a, 0xa7, 0x34, 0x4a, 0x3b, 0xe5, 0x11, 0xda, 0x99, 0x67, 0xb4, 0x33, 0x7e, - 0xd1, 0xf9, 0x2c, 0x98, 0xef, 0x38, 0xbd, 0x1e, 0xec, 0x20, 0x79, 0xd4, 0xba, 0x78, 0xb5, 0x67, - 0xd6, 0xe0, 0xd2, 0x70, 0x4c, 0x7e, 0xe8, 0xb7, 0xc8, 0x1a, 0x3b, 0x51, 0xfa, 0x28, 0x41, 0x7b, - 0x99, 0x04, 0xf2, 0x7a, 0x77, 0x07, 0x72, 0xeb, 0xf0, 0x39, 0x66, 0x1d, 0xfe, 0x14, 0x28, 0xfa, - 0xa6, 0xbb, 0x03, 0xfd, 0x60, 0x9d, 0x80, 0x3c, 0x85, 0x57, 0x05, 0xc8, 0xcc, 0x55, 0x01, 0x3f, - 0x04, 0xf2, 0x48, 0x66, 0xd4, 0x2d, 0xfe, 0xe1, 0xc3, 0xe0, 0xc7, 0xb2, 0x5f, 0x42, 0x25, 0x2e, - 0xa1, 0x5a, 0x1b, 0xf8, 0x83, 0x41, 0xac, 0x0b, 0x07, 0x43, 0xd9, 0x5e, 0x0b, 0x66, 0xad, 0x8e, - 0x63, 0xd7, 0xf6, 0xcc, 0x1d, 0x48, 0xab, 0x19, 0x25, 0x04, 0x6f, 0xf5, 0x3d, 0xe7, 0x3e, 0x8b, - 0x2e, 0x6a, 0x45, 0x09, 0xa8, 0x0a, 0xbb, 0x56, 0xb7, 0x0b, 0x6d, 0xda, 0xb2, 0xe9, 0xd3, 0xd9, - 0x33, 0x20, 0x8f, 0x78, 0x40, 0xfa, 0x83, 0x8c, 0x05, 0xe5, 0x98, 0x3a, 0x8f, 0x9a, 0x15, 0x69, - 0xbc, 0x4a, 0x8e, 0x5f, 0x73, 0x15, 0xf1, 0x1a, 0x22, 0x95, 0x1b, 0xde, 0xb8, 0x1e, 0x0d, 0x0a, - 0xb6, 0xd3, 0x85, 0x23, 0x07, 0x21, 0x92, 0x4b, 0x7d, 0x3c, 0x28, 0xc0, 0x2e, 0xea, 0x15, 0x64, - 0x9c, 0xfd, 0x4c, 0xb2, 0x2c, 0x0d, 0x92, 0x39, 0x9d, 0x6b, 0xd2, 0x30, 0x6e, 0xb3, 0x6f, 0x80, - 0x3f, 0x31, 0x03, 0x8e, 0x93, 0x3e, 0xa0, 0xb5, 0x7f, 0x01, 0x91, 0xba, 0x00, 0xb5, 0xd7, 0x0f, - 0x1f, 0xb8, 0x8e, 0xf3, 0xca, 0x7e, 0x12, 0x14, 0xbc, 0xfd, 0x0b, 0xa1, 0x11, 0x4a, 0x1e, 0xd8, - 0xa6, 0x2b, 0x4d, 0x64, 0x38, 0x93, 0xc7, 0x1d, 0xce, 0xb8, 0xa1, 0x49, 0x0e, 0x1a, 0x7f, 0x34, - 0x90, 0x91, 0x03, 0x1d, 0xc1, 0x40, 0x36, 0x6c, 0x18, 0x3a, 0x0d, 0x66, 0xcc, 0x6d, 0x1f, 0xba, - 0x91, 0x99, 0x48, 0x1f, 0xd1, 0x50, 0x79, 0x01, 0x6e, 0x3b, 0x2e, 0x12, 0x0b, 0x09, 0x2b, 0x1b, - 0x3e, 0x33, 0x2d, 0x17, 0x70, 0x3b, 0x68, 0x37, 0x83, 0x13, 0xb6, 0x53, 0x85, 0x7d, 0x2a, 0x67, - 0x82, 0xe2, 0x02, 0xb9, 0xdd, 0xfd, 0xc0, 0x8b, 0x03, 0x5d, 0xc9, 0xe2, 0xc1, 0xae, 0x44, 0xfb, - 0x7c, 0xda, 0x39, 0xf3, 0x00, 0xd0, 0x13, 0xb3, 0xd0, 0xd4, 0x27, 0x81, 0xf9, 0x2e, 0xf5, 0x10, - 0xeb, 0x58, 0x61, 0x2b, 0x89, 0xfd, 0x8e, 0xcb, 0x1c, 0x29, 0x52, 0x9e, 0x55, 0xa4, 0x55, 0x50, - 0xc2, 0xc7, 0xb1, 0x91, 0x26, 0x15, 0x06, 0x3c, 0xf2, 0xf1, 0xb4, 0x2e, 0xac, 0x14, 0x23, 0xb6, - 0xa5, 0x0a, 0xfd, 0xc4, 0x08, 0x3f, 0x4e, 0x37, 0xfb, 0x4e, 0x96, 0x50, 0xf6, 0xcd, 0xf1, 0x57, - 0x8a, 0xe0, 0x9a, 0x8a, 0xeb, 0x78, 0x1e, 0x3e, 0x82, 0x33, 0xd8, 0x30, 0xdf, 0x28, 0x71, 0x97, - 0x06, 0x3d, 0xa0, 0x9b, 0xdf, 0xb0, 0x06, 0x35, 0xbd, 0xa6, 0xf1, 0xe7, 0xc2, 0x41, 0x6f, 0xc2, - 0xfd, 0x87, 0x18, 0xa1, 0xff, 0xc7, 0x68, 0x24, 0xef, 0xc9, 0x89, 0xc4, 0xe1, 0x49, 0x29, 0xab, - 0xec, 0x9b, 0xcb, 0x57, 0x24, 0xf0, 0xe0, 0x41, 0x6e, 0x36, 0x6d, 0x2f, 0x6c, 0x30, 0x0f, 0x1d, - 0xd1, 0x5e, 0xf8, 0xb8, 0x2d, 0x89, 0x77, 0x04, 0xc7, 0xd4, 0x9d, 0x29, 0x2d, 0x66, 0xb1, 0x24, - 0x3a, 0xd0, 0x93, 0x74, 0x47, 0x70, 0x6a, 0xf2, 0xd9, 0x0b, 0xf7, 0xf7, 0xf3, 0xe0, 0xf8, 0xaa, - 0xeb, 0xec, 0xf7, 0xbd, 0xa8, 0x07, 0xfa, 0xd3, 0xe1, 0x1b, 0xb2, 0x45, 0x11, 0xd3, 0xe0, 0x3a, - 0x30, 0xe7, 0x52, 0x6b, 0x2e, 0xda, 0x9e, 0x65, 0x93, 0xd8, 0xde, 0x4b, 0x3e, 0x4c, 0xef, 0x15, - 0xf5, 0x33, 0x79, 0xae, 0x9f, 0x19, 0xec, 0x39, 0x0a, 0x43, 0x7a, 0x8e, 0x3f, 0x91, 0x52, 0x0e, - 0xaa, 0x03, 0x22, 0x8a, 0xe9, 0x2f, 0x2a, 0xa0, 0xb8, 0x83, 0x33, 0xd2, 0xee, 0xe2, 0x51, 0x62, - 0x35, 0xc3, 0xc4, 0x0d, 0xfa, 0x69, 0x24, 0x57, 0x99, 0xd5, 0xe1, 0x54, 0x03, 0x5c, 0x32, 0xb7, - 0xd9, 0x2b, 0xd5, 0x6b, 0xf3, 0x60, 0x3e, 0x2c, 0xbd, 0xd6, 0xf5, 0xb8, 0xe8, 0xb0, 0x8c, 0x46, - 0x2d, 0x88, 0x68, 0xd4, 0x81, 0x75, 0xe6, 0x70, 0xd4, 0x91, 0x99, 0x51, 0x67, 0xe8, 0xe8, 0x32, - 0x1f, 0x33, 0xba, 0x68, 0xcf, 0x92, 0x45, 0xaf, 0xdd, 0xe3, 0xbb, 0x56, 0x5c, 0x9b, 0x07, 0xf2, - 0x60, 0x21, 0x78, 0xf9, 0xdf, 0xe8, 0x5a, 0x65, 0xaf, 0x24, 0x1f, 0x91, 0xc0, 0x89, 0x83, 0x9d, - 0xf9, 0xc3, 0x78, 0x2f, 0x35, 0x54, 0x27, 0x2f, 0xf4, 0x52, 0xc3, 0x4f, 0xfc, 0x26, 0x5d, 0x62, - 0x10, 0x14, 0xce, 0xde, 0x1b, 0xdd, 0x89, 0x8b, 0x85, 0x39, 0x11, 0x24, 0x9a, 0xbd, 0x00, 0x7f, - 0x56, 0x06, 0xb3, 0x2d, 0xe8, 0xd7, 0xcd, 0x2b, 0xce, 0xbe, 0xaf, 0x99, 0xa2, 0xdb, 0x73, 0x4f, - 0x04, 0xc5, 0x1e, 0xfe, 0x04, 0x77, 0x30, 0x6c, 0xd0, 0x52, 0x76, 0x7f, 0x0b, 0xfb, 0x06, 0x11, - 0xd2, 0x06, 0xcd, 0xcf, 0x47, 0x9f, 0x11, 0xd9, 0x1d, 0x0d, 0xb9, 0x9b, 0xc8, 0xd6, 0x4e, 0xaa, - 0xbd, 0xd3, 0xb8, 0xa2, 0xb3, 0x87, 0xe5, 0xc7, 0x64, 0xb0, 0xd0, 0x82, 0x7e, 0xcd, 0x5b, 0x31, - 0x2f, 0x39, 0xae, 0xe5, 0x43, 0x6d, 0x55, 0x14, 0x9a, 0x33, 0x00, 0x58, 0xe1, 0x67, 0x34, 0x4e, - 0x16, 0x93, 0xa2, 0xbd, 0x25, 0xad, 0xa3, 0x10, 0xc7, 0xc7, 0x44, 0x40, 0x48, 0xe5, 0x63, 0x91, - 0x54, 0xfc, 0x14, 0x2e, 0x0e, 0x97, 0x28, 0x10, 0x65, 0xb7, 0xb3, 0x6b, 0x5d, 0x82, 0xdd, 0x94, - 0x40, 0x04, 0x9f, 0x45, 0x40, 0x84, 0x84, 0x52, 0xbb, 0xaf, 0x70, 0x7c, 0x4c, 0xc2, 0x7d, 0x25, - 0x89, 0xe0, 0x54, 0xc2, 0x5a, 0xa1, 0xae, 0x87, 0xae, 0x67, 0xde, 0x25, 0x2a, 0xd6, 0xc8, 0x64, - 0x93, 0x58, 0x93, 0x6d, 0xac, 0x8e, 0x85, 0x94, 0x3d, 0x4a, 0xa7, 0xf3, 0x59, 0x74, 0x2c, 0x43, - 0x8b, 0xce, 0x5e, 0xe8, 0xef, 0x93, 0xc1, 0xd5, 0x61, 0xbc, 0x97, 0x16, 0xf4, 0xab, 0xa6, 0xb7, - 0x7b, 0xc1, 0x31, 0xdd, 0xae, 0x56, 0x99, 0xc0, 0x81, 0x43, 0xed, 0x8b, 0x2c, 0x08, 0x0d, 0x1e, - 0x84, 0xa1, 0xae, 0xa4, 0x43, 0x79, 0x99, 0x44, 0x27, 0x93, 0xe8, 0xed, 0xfa, 0x8e, 0x10, 0xac, - 0xa7, 0x72, 0x60, 0xdd, 0x39, 0x2e, 0x8b, 0xd9, 0x03, 0xf7, 0xf3, 0x64, 0x44, 0x60, 0xbc, 0x9e, - 0xef, 0x15, 0x05, 0x2c, 0xc6, 0xeb, 0x55, 0x8e, 0xf5, 0x7a, 0x1d, 0x6b, 0x8c, 0x18, 0xe9, 0xb1, - 0x9c, 0xed, 0x18, 0x71, 0x84, 0xde, 0xc8, 0xef, 0x92, 0x81, 0x82, 0x03, 0x7e, 0x31, 0x1e, 0xe1, - 0x6c, 0xfc, 0xed, 0x64, 0x74, 0x0e, 0x78, 0x9f, 0xcf, 0xa4, 0xf5, 0x3e, 0xd7, 0xde, 0x99, 0xd6, - 0xc7, 0x7c, 0x90, 0xdb, 0x89, 0x20, 0x96, 0xca, 0x85, 0x7c, 0x04, 0x07, 0xd9, 0x83, 0xf6, 0x93, - 0x32, 0x00, 0xa8, 0x41, 0xd3, 0xb3, 0x11, 0x4f, 0x13, 0x85, 0xeb, 0x16, 0xd6, 0xef, 0x1e, 0x01, - 0x75, 0xf5, 0x00, 0x50, 0x84, 0x62, 0x74, 0xea, 0xe2, 0xf5, 0x69, 0x7d, 0x2b, 0x23, 0xae, 0x26, - 0x02, 0x4b, 0x2a, 0x6f, 0xcb, 0xd8, 0xb2, 0xb3, 0x07, 0xe4, 0x57, 0x25, 0x50, 0x68, 0x3b, 0x2d, - 0xe8, 0x1f, 0xde, 0x14, 0x48, 0x1d, 0x35, 0x00, 0x97, 0x3b, 0x89, 0xa8, 0x01, 0xc3, 0x08, 0x65, - 0x2f, 0xba, 0xf7, 0x4a, 0x60, 0xbe, 0xed, 0x54, 0xc2, 0xc5, 0x29, 0x71, 0x5f, 0xd5, 0x7f, 0xc9, - 0xa5, 0x5c, 0xc3, 0x60, 0x8b, 0x89, 0x11, 0x58, 0xaa, 0xd5, 0x83, 0x04, 0x7a, 0xd9, 0xcb, 0xed, - 0x36, 0x70, 0x7c, 0xd3, 0xee, 0x3a, 0x06, 0xec, 0x3a, 0x74, 0xa5, 0x5b, 0x55, 0x41, 0x7e, 0xdf, - 0xee, 0x3a, 0x98, 0xe5, 0x82, 0x81, 0xff, 0xa3, 0x34, 0x17, 0x76, 0x1d, 0xea, 0x1b, 0x80, 0xff, - 0x6b, 0x7f, 0x2e, 0x83, 0x3c, 0xfa, 0x56, 0x5c, 0xd4, 0xef, 0x92, 0x53, 0xc6, 0x41, 0x40, 0xe4, - 0x27, 0x62, 0x09, 0xdd, 0xc5, 0xac, 0xfd, 0x13, 0x0f, 0xd6, 0x87, 0xc7, 0x95, 0xc7, 0x88, 0x22, - 0x5a, 0xf3, 0x57, 0x4f, 0x83, 0x99, 0x0b, 0x3d, 0xa7, 0x73, 0x31, 0x3a, 0xae, 0x4f, 0x1f, 0xd5, - 0x9b, 0x40, 0xc1, 0x35, 0xed, 0x1d, 0x48, 0xf7, 0x14, 0x4e, 0x0e, 0xf4, 0x85, 0xd8, 0xeb, 0xc5, - 0x20, 0x59, 0xb4, 0x77, 0xa6, 0x89, 0xc0, 0x30, 0xa4, 0xf2, 0xe9, 0xf4, 0xa1, 0x3a, 0xc6, 0xc9, - 0x33, 0x05, 0xcc, 0x57, 0xca, 0x0d, 0x72, 0x0f, 0x62, 0xf3, 0x9c, 0xae, 0xc8, 0x18, 0x66, 0x24, - 0x93, 0x0c, 0x61, 0x46, 0xe4, 0xff, 0xc3, 0xc2, 0x3c, 0xa4, 0xf2, 0x47, 0x01, 0xf3, 0x67, 0x25, - 0xb0, 0x50, 0xb7, 0x3c, 0x3f, 0xce, 0xdb, 0x3f, 0x21, 0xde, 0xef, 0x8b, 0xd2, 0x9a, 0xca, 0x5c, - 0x39, 0xc2, 0x81, 0x7e, 0x53, 0x99, 0xc3, 0x49, 0x45, 0x4c, 0xe7, 0x58, 0x0a, 0xe6, 0x80, 0x5c, - 0x82, 0x2f, 0x2c, 0xc9, 0xd4, 0x86, 0x52, 0x54, 0xc8, 0xf4, 0x0d, 0xa5, 0xd8, 0xb2, 0xb3, 0x97, - 0xef, 0x9f, 0x4b, 0xe0, 0x04, 0x2a, 0x3e, 0x69, 0x59, 0x2a, 0x5e, 0xcc, 0x23, 0x97, 0xa5, 0x52, - 0xaf, 0x8c, 0x1f, 0xe0, 0x65, 0x12, 0x2b, 0xe3, 0xa3, 0x88, 0x4e, 0x59, 0xcc, 0x31, 0xcb, 0xb0, - 0xa3, 0xc4, 0x9c, 0xb0, 0x0c, 0x3b, 0xbe, 0x98, 0x93, 0x97, 0x62, 0xc7, 0x14, 0xf3, 0x91, 0x2d, - 0xb0, 0xfe, 0x92, 0x1c, 0x8a, 0x39, 0x76, 0x6d, 0x23, 0x41, 0xcc, 0xa9, 0x4f, 0xf4, 0x6a, 0xef, - 0x1e, 0x53, 0xf0, 0x13, 0x5e, 0xdf, 0x18, 0x07, 0xa6, 0x23, 0x5c, 0xe3, 0xf8, 0x05, 0x19, 0x2c, - 0x52, 0x2e, 0x86, 0x4f, 0x99, 0x13, 0x30, 0x4a, 0x3d, 0x65, 0x4e, 0x7d, 0x06, 0x88, 0xe7, 0x6c, - 0xfa, 0x67, 0x80, 0x12, 0xcb, 0xcf, 0x1e, 0x9c, 0xbf, 0xcc, 0x83, 0x53, 0x88, 0x85, 0x75, 0xa7, - 0x6b, 0x6d, 0x5f, 0x21, 0x5c, 0x9c, 0x33, 0x7b, 0xfb, 0xd0, 0xd3, 0x3e, 0x20, 0x89, 0xa2, 0xf4, - 0x9f, 0x01, 0x70, 0xfa, 0xd0, 0x25, 0x71, 0xdc, 0x28, 0x50, 0x77, 0xc4, 0x55, 0xf6, 0x60, 0x49, - 0xe1, 0xf5, 0x39, 0xcd, 0x80, 0x88, 0xc1, 0xd0, 0x43, 0x56, 0xe1, 0x6c, 0xf8, 0x66, 0xd0, 0xc1, - 0x23, 0x77, 0xd0, 0xc1, 0xe3, 0x46, 0x20, 0x9b, 0xdd, 0x6e, 0x08, 0xd5, 0xe0, 0x66, 0x36, 0x2e, - 0xd3, 0x40, 0x59, 0x50, 0x4e, 0x0f, 0x46, 0x47, 0xf3, 0x62, 0x72, 0x7a, 0xd0, 0x57, 0x97, 0x40, - 0x91, 0x5c, 0x27, 0x1e, 0xae, 0xe8, 0x0f, 0xcf, 0x4c, 0x73, 0xf1, 0xa6, 0x5d, 0x93, 0x57, 0xc3, - 0xdb, 0x52, 0x49, 0x66, 0x58, 0x3f, 0x1d, 0xd9, 0xc9, 0x06, 0xa7, 0x60, 0x4f, 0x1e, 0x9b, 0xf2, - 0x74, 0x76, 0xc3, 0xca, 0xfd, 0x7e, 0xef, 0x4a, 0x9b, 0x06, 0x1e, 0x48, 0xb5, 0x1b, 0xc6, 0xc4, - 0x2f, 0x90, 0x0e, 0xc4, 0x2f, 0x48, 0xbd, 0x1b, 0xc6, 0xf1, 0x31, 0x89, 0xdd, 0xb0, 0x24, 0x82, - 0xd9, 0x8b, 0xf6, 0x6f, 0x4a, 0xc4, 0x6a, 0xa6, 0xb7, 0x11, 0xfc, 0xc3, 0x70, 0xcf, 0x6a, 0xc0, - 0x3b, 0xbb, 0x0c, 0xbb, 0xa8, 0x20, 0xf1, 0x16, 0x16, 0xf5, 0xf1, 0xa0, 0xb8, 0xed, 0xb8, 0x7b, - 0x66, 0xb0, 0x71, 0x3f, 0x78, 0x52, 0x84, 0xde, 0x00, 0xb0, 0x82, 0xf3, 0x18, 0x34, 0x2f, 0x9a, - 0x8f, 0x3c, 0xd3, 0xea, 0xd3, 0xa0, 0x8f, 0xe8, 0xaf, 0x7a, 0x3d, 0x58, 0xa0, 0xb1, 0x1f, 0x1b, - 0xd0, 0xf3, 0x61, 0x97, 0x46, 0xb4, 0xe0, 0x13, 0xd5, 0xb3, 0x60, 0x9e, 0x26, 0xac, 0x58, 0x3d, - 0xe8, 0xd1, 0xa0, 0x16, 0x5c, 0x9a, 0x7a, 0x0a, 0x14, 0x2d, 0xef, 0x6e, 0xcf, 0xb1, 0x69, 0x40, - 0x3e, 0xfa, 0xa4, 0xde, 0x08, 0x8e, 0xd3, 0x7c, 0xa1, 0xb1, 0x4a, 0x0e, 0xec, 0x0c, 0x26, 0x23, - 0xd5, 0xb2, 0x9d, 0x0d, 0xd7, 0xd9, 0x71, 0xa1, 0xe7, 0xe1, 0x53, 0x53, 0x25, 0x83, 0x49, 0x51, - 0xef, 0x05, 0x27, 0x7a, 0x96, 0x7d, 0xd1, 0xc3, 0x31, 0x82, 0x57, 0xa8, 0xdb, 0xd8, 0xfc, 0x90, - 0xd8, 0xdd, 0x4c, 0x63, 0xa3, 0x72, 0x60, 0x3f, 0x31, 0x0e, 0x52, 0x51, 0x6f, 0x02, 0x0a, 0xe5, - 0x66, 0xd9, 0xec, 0x5c, 0xc4, 0xef, 0xa9, 0x3b, 0xea, 0x81, 0x74, 0x46, 0x18, 0x24, 0x8c, 0xfe, - 0x22, 0x27, 0x0c, 0x12, 0x49, 0xff, 0x25, 0x39, 0x30, 0xcf, 0x15, 0x60, 0x02, 0x35, 0xe8, 0x16, - 0xbd, 0xf3, 0xbb, 0x96, 0x0f, 0x11, 0x73, 0xf4, 0xac, 0xcb, 0x63, 0x47, 0x30, 0x6f, 0x1c, 0xf8, - 0xd0, 0x18, 0x42, 0x0c, 0xf1, 0x45, 0x3a, 0x3c, 0xec, 0x59, 0xe6, 0x51, 0x5b, 0x95, 0x4b, 0xd3, - 0x9e, 0x09, 0xd4, 0x83, 0xd4, 0x18, 0x2f, 0x90, 0x5c, 0x3a, 0x2f, 0x10, 0x24, 0x37, 0xb3, 0xd7, - 0x73, 0x2e, 0xc3, 0x6e, 0x48, 0x96, 0xea, 0xea, 0x81, 0x74, 0xed, 0x0b, 0xe3, 0xcc, 0x0b, 0x53, - 0x5f, 0xac, 0x81, 0x1a, 0xd9, 0x7e, 0xa7, 0x03, 0x61, 0x97, 0x1e, 0x5c, 0x0b, 0x1e, 0x53, 0x5e, - 0xb9, 0x91, 0x7a, 0x16, 0x79, 0x44, 0x77, 0x6e, 0xbc, 0x3f, 0xba, 0xf9, 0x64, 0x5f, 0xa4, 0xab, - 0x49, 0x3a, 0x1f, 0x3f, 0x56, 0xa7, 0xa2, 0xbd, 0x37, 0xed, 0x69, 0xd1, 0x44, 0x4c, 0x4f, 0xa1, - 0xc1, 0xdd, 0xdb, 0xef, 0x85, 0xc7, 0x9d, 0xc8, 0x53, 0x4a, 0xf4, 0x52, 0x1d, 0x20, 0x3d, 0x22, - 0xe4, 0x3e, 0x7e, 0x35, 0x28, 0x92, 0x9b, 0x0b, 0xb5, 0x97, 0x2c, 0x0e, 0x85, 0x6e, 0x91, 0x87, - 0x6e, 0x13, 0xcc, 0xdb, 0x0e, 0x2a, 0x6e, 0xc3, 0x74, 0xcd, 0x3d, 0x2f, 0x69, 0x79, 0x9f, 0xd0, - 0x0d, 0x6d, 0xb9, 0x06, 0xf3, 0xd9, 0xda, 0x31, 0x83, 0x23, 0xa3, 0xfe, 0x5f, 0xe0, 0xf8, 0x05, - 0x1a, 0x9a, 0xc3, 0xa3, 0x94, 0xa5, 0x78, 0xe7, 0xd7, 0x01, 0xca, 0xcb, 0xfc, 0x97, 0x6b, 0xc7, - 0x8c, 0x41, 0x62, 0xea, 0x7f, 0x02, 0x8b, 0xe8, 0xb1, 0xeb, 0x5c, 0x0e, 0x18, 0x97, 0xe3, 0x67, - 0x00, 0x03, 0xe4, 0xd7, 0xb9, 0x0f, 0xd7, 0x8e, 0x19, 0x03, 0xa4, 0xd4, 0x26, 0x00, 0xbb, 0xfe, - 0x5e, 0x8f, 0x12, 0xce, 0xc7, 0x77, 0x26, 0x03, 0x84, 0xd7, 0xc2, 0x8f, 0xd6, 0x8e, 0x19, 0x0c, - 0x09, 0xb5, 0x0e, 0x66, 0xfd, 0xfb, 0x7d, 0x4a, 0xaf, 0x10, 0xef, 0x75, 0x32, 0x40, 0xaf, 0x1d, - 0x7c, 0xb3, 0x76, 0xcc, 0x88, 0x08, 0xa8, 0x35, 0x50, 0xea, 0x5f, 0xa0, 0xc4, 0x8a, 0xf1, 0x23, - 0xd5, 0x00, 0xb1, 0x8d, 0x0b, 0x21, 0xad, 0xf0, 0x73, 0xc4, 0x58, 0xc7, 0xbb, 0x44, 0x69, 0xcd, - 0x08, 0x33, 0x56, 0x09, 0xbe, 0x41, 0x8c, 0x85, 0x04, 0xd4, 0x1a, 0x98, 0xf5, 0x6c, 0xb3, 0xef, - 0xed, 0x3a, 0xbe, 0x77, 0xba, 0x34, 0xe0, 0xa0, 0x1c, 0x4f, 0xad, 0x45, 0xbf, 0x31, 0xa2, 0xaf, - 0xd5, 0xc7, 0x83, 0xab, 0xf7, 0xfb, 0x5d, 0xd3, 0x87, 0xfa, 0xfd, 0x96, 0x17, 0xdd, 0x5e, 0x19, - 0x9c, 0xcb, 0x1d, 0xfe, 0x52, 0x5d, 0xa2, 0x47, 0x15, 0x01, 0x6e, 0x97, 0xda, 0xe0, 0x2e, 0x39, - 0x29, 0x96, 0x39, 0xa1, 0xf8, 0x24, 0x90, 0x47, 0xaf, 0xb0, 0x59, 0xb0, 0x38, 0x7c, 0x05, 0x7e, - 0x50, 0x77, 0x70, 0x03, 0x46, 0x1f, 0x0d, 0x58, 0x16, 0xf3, 0x07, 0x2c, 0x8b, 0xeb, 0xc0, 0x9c, - 0xe5, 0xad, 0x5b, 0x3b, 0x64, 0x5a, 0x43, 0x47, 0x7e, 0x36, 0x89, 0x2c, 0x03, 0x35, 0xe0, 0x65, - 0x32, 0xe4, 0x1f, 0x0f, 0x96, 0x81, 0x82, 0x14, 0xed, 0x06, 0x30, 0xcf, 0x36, 0x32, 0x72, 0xfd, - 0xb1, 0x15, 0x4d, 0x8a, 0xe8, 0x93, 0x76, 0x3d, 0x58, 0xe4, 0x75, 0x9a, 0xb1, 0xfd, 0xe4, 0x60, - 0x10, 0xd3, 0x1e, 0x0e, 0x8e, 0x0f, 0x34, 0xac, 0x20, 0xd8, 0x4f, 0x2e, 0x0a, 0xf6, 0x73, 0x1d, - 0x00, 0x91, 0x16, 0x0f, 0x25, 0xf3, 0x50, 0x30, 0x1b, 0xea, 0xe5, 0xd0, 0x0c, 0x5f, 0xcf, 0x81, - 0x52, 0xa0, 0x6c, 0xc3, 0x32, 0x20, 0x9b, 0xc2, 0x66, 0x76, 0xf6, 0x02, 0x9b, 0x82, 0x4d, 0x43, - 0x06, 0x5e, 0xe4, 0x4f, 0xdf, 0xb6, 0xfc, 0x5e, 0x70, 0x26, 0x75, 0x30, 0x59, 0xdd, 0x00, 0xc0, - 0xc2, 0x18, 0xb5, 0xa3, 0x43, 0xaa, 0x8f, 0x49, 0xd1, 0x1e, 0x88, 0x3e, 0x30, 0x34, 0xce, 0x3e, - 0x8c, 0x9e, 0x20, 0x9d, 0x05, 0x05, 0x72, 0xc1, 0xc2, 0x31, 0x75, 0x11, 0x00, 0xfd, 0x69, 0x1b, - 0xba, 0x51, 0xd3, 0x1b, 0x15, 0x5d, 0xc9, 0x69, 0x2f, 0x97, 0xc0, 0x6c, 0xd8, 0x08, 0x86, 0x56, - 0x52, 0xa7, 0xaa, 0x35, 0xf2, 0x86, 0xd9, 0x83, 0x8d, 0x8a, 0x55, 0xb2, 0x27, 0x82, 0x07, 0xed, - 0x7b, 0x70, 0xc5, 0x72, 0x3d, 0xdf, 0x70, 0x2e, 0xaf, 0x38, 0x6e, 0x64, 0x12, 0x91, 0xd0, 0xc4, - 0x71, 0xaf, 0x91, 0xa9, 0xdf, 0x85, 0xf8, 0xb4, 0x22, 0x74, 0xe9, 0x96, 0x4d, 0x94, 0x80, 0xe8, - 0xfa, 0xae, 0x69, 0x7b, 0x7d, 0xc7, 0x83, 0x86, 0x73, 0xd9, 0x2b, 0xdb, 0xdd, 0x8a, 0xd3, 0xdb, - 0xdf, 0xb3, 0x3d, 0x6a, 0xac, 0xc7, 0xbd, 0x46, 0xd2, 0xc1, 0xf7, 0x47, 0x2f, 0x02, 0x50, 0x69, - 0xd6, 0xeb, 0x7a, 0xa5, 0x5d, 0x6b, 0x36, 0x94, 0x63, 0x48, 0x5a, 0xed, 0xf2, 0x72, 0x1d, 0x49, - 0xe7, 0xe9, 0xa0, 0x14, 0xb4, 0x69, 0x1a, 0x9f, 0x28, 0x17, 0xc4, 0x27, 0x52, 0xcb, 0xa0, 0x14, - 0xb4, 0x72, 0x3a, 0x22, 0x3c, 0x62, 0xf0, 0x3c, 0xfa, 0x9e, 0xe9, 0xfa, 0xd8, 0xb4, 0x0c, 0x88, - 0x2c, 0x9b, 0x1e, 0x34, 0xc2, 0xcf, 0xce, 0x3e, 0x9a, 0x72, 0xa0, 0x82, 0xc5, 0x72, 0xbd, 0xbe, - 0xd5, 0x34, 0xb6, 0x1a, 0xcd, 0xf6, 0x5a, 0xad, 0xb1, 0x4a, 0x46, 0xc8, 0xda, 0x6a, 0xa3, 0x69, - 0xe8, 0x64, 0x80, 0x6c, 0x29, 0x39, 0x72, 0x7f, 0xf9, 0x72, 0x09, 0x14, 0xfb, 0x58, 0xba, 0xda, - 0x57, 0xe4, 0x94, 0xa6, 0x45, 0x88, 0x53, 0xcc, 0x0d, 0xcb, 0xdc, 0x61, 0x10, 0x69, 0xc8, 0x61, - 0xed, 0xb3, 0x60, 0x9e, 0x98, 0x43, 0x1e, 0xde, 0x57, 0xc3, 0xc8, 0xc9, 0x06, 0x97, 0xa6, 0x7d, - 0x52, 0x4a, 0x61, 0x5c, 0x0c, 0xe5, 0x28, 0x9d, 0x71, 0xf1, 0x07, 0xb9, 0xf1, 0xae, 0x23, 0xa9, - 0x35, 0xda, 0xba, 0xd1, 0x28, 0xd7, 0x69, 0x16, 0x59, 0x3d, 0x0d, 0x4e, 0x36, 0x9a, 0x34, 0x18, - 0x67, 0x6b, 0xab, 0xdd, 0xdc, 0xaa, 0xad, 0x6f, 0x34, 0x8d, 0xb6, 0x52, 0x50, 0x4f, 0x01, 0x95, - 0xfc, 0xdf, 0xaa, 0xb5, 0xb6, 0x2a, 0xe5, 0x46, 0x45, 0xaf, 0xeb, 0x55, 0xa5, 0xa8, 0x3e, 0x12, - 0x3c, 0x9c, 0x5c, 0x6f, 0xd5, 0x5c, 0xd9, 0x32, 0x9a, 0xe7, 0x5b, 0x08, 0x41, 0x43, 0xaf, 0x97, - 0x91, 0x22, 0x31, 0xf7, 0x98, 0xcf, 0xa8, 0x57, 0x81, 0xe3, 0x2b, 0xb5, 0xba, 0x8e, 0x6f, 0xa3, - 0xa5, 0xe5, 0x95, 0xd4, 0x6b, 0xc1, 0xe9, 0x5a, 0xa3, 0xb5, 0xb9, 0xb2, 0x52, 0xab, 0xd4, 0xf4, - 0x46, 0x7b, 0x6b, 0x43, 0x37, 0xd6, 0x6b, 0xad, 0x16, 0xfa, 0x56, 0x99, 0xd5, 0x3e, 0x2e, 0x83, - 0x22, 0xe9, 0x33, 0x91, 0x11, 0xbb, 0x70, 0xce, 0xec, 0x59, 0x68, 0xa0, 0xc0, 0xd7, 0xc7, 0x0f, - 0x9c, 0xe3, 0xf2, 0xf1, 0x35, 0xf3, 0xf4, 0x24, 0x08, 0x7e, 0xd0, 0x7e, 0x54, 0x4e, 0x79, 0x8e, - 0x8b, 0x02, 0x41, 0x4a, 0x5c, 0xe2, 0x4a, 0x8b, 0x59, 0x75, 0x78, 0x8d, 0x94, 0xe2, 0x1c, 0x97, - 0x38, 0xf9, 0x74, 0xe0, 0xff, 0xe2, 0xa4, 0xc0, 0x57, 0xc0, 0xfc, 0x66, 0xa3, 0xbc, 0xd9, 0x5e, - 0x6b, 0x1a, 0xb5, 0x1f, 0xc6, 0xb7, 0x10, 0x2c, 0x80, 0xd9, 0x95, 0xa6, 0xb1, 0x5c, 0xab, 0x56, - 0xf5, 0x86, 0x52, 0x50, 0x1f, 0x04, 0xae, 0x6a, 0xe9, 0xc6, 0xb9, 0x5a, 0x45, 0xdf, 0xda, 0x6c, - 0x94, 0xcf, 0x95, 0x6b, 0x75, 0xdc, 0x47, 0x14, 0x13, 0xae, 0xbe, 0x9f, 0xd1, 0x7e, 0x24, 0x0f, - 0x00, 0xa9, 0x3a, 0xbe, 0x84, 0x8b, 0xb9, 0x20, 0xfd, 0x8f, 0xd2, 0x4e, 0xf7, 0x22, 0x32, 0x31, - 0xed, 0xb7, 0x06, 0x4a, 0x2e, 0x7d, 0x41, 0xd7, 0x35, 0x47, 0xd1, 0x21, 0x7f, 0x03, 0x6a, 0x46, - 0xf8, 0xb9, 0xf6, 0x81, 0x34, 0xb3, 0xbb, 0x58, 0xc6, 0xa6, 0x72, 0xd3, 0xf3, 0x20, 0x90, 0xda, - 0x0b, 0x73, 0x60, 0x91, 0xaf, 0x18, 0xaa, 0x04, 0x36, 0xa6, 0xc4, 0x2a, 0xc1, 0x7f, 0xcc, 0x18, - 0x59, 0x67, 0x1f, 0x47, 0x87, 0x53, 0x10, 0xb4, 0x4c, 0x12, 0x92, 0x21, 0xb0, 0x58, 0x94, 0x1c, - 0x62, 0x1e, 0x19, 0x1d, 0x8a, 0xa4, 0xce, 0x00, 0xb9, 0x7d, 0xbf, 0xaf, 0xc8, 0xda, 0xa7, 0xf3, - 0x60, 0x81, 0xbb, 0x81, 0x5d, 0xfb, 0xe3, 0x9c, 0xc8, 0xed, 0xc6, 0xcc, 0xdd, 0xee, 0xb9, 0xc3, - 0xde, 0xed, 0x7e, 0xd6, 0x02, 0x33, 0x34, 0x0d, 0xcb, 0xb7, 0xd9, 0x40, 0xa6, 0xc0, 0x71, 0x30, - 0xb7, 0xaa, 0xb7, 0xb7, 0x5a, 0xed, 0xb2, 0xd1, 0xd6, 0xab, 0x4a, 0x0e, 0x0d, 0x7c, 0xfa, 0xfa, - 0x46, 0xfb, 0x5e, 0x45, 0x42, 0x63, 0xe2, 0xea, 0x66, 0xad, 0xaa, 0x6f, 0x35, 0x1b, 0xf5, 0x7b, - 0x15, 0x19, 0xf5, 0x80, 0x4c, 0xde, 0xad, 0xf5, 0xe6, 0x72, 0xad, 0xae, 0x2b, 0x79, 0xd4, 0x6c, - 0xf0, 0x27, 0x41, 0x4a, 0x81, 0xf7, 0x8d, 0x16, 0x59, 0xe1, 0x1c, 0xac, 0xc2, 0xe1, 0x5d, 0x44, - 0xd2, 0x5c, 0x21, 0x9f, 0x6a, 0xed, 0x34, 0x89, 0xd5, 0xec, 0x67, 0xc4, 0x9f, 0x97, 0x81, 0x42, - 0x38, 0xd0, 0xef, 0xef, 0x43, 0xd7, 0x82, 0x76, 0x07, 0x6a, 0x17, 0x45, 0x02, 0x02, 0x1f, 0x08, - 0x85, 0x89, 0x47, 0x0d, 0xc6, 0x16, 0x25, 0x0f, 0x03, 0x66, 0x7c, 0xfe, 0x80, 0x19, 0xff, 0x3b, - 0x69, 0x3d, 0x70, 0x07, 0xd9, 0x9d, 0xc8, 0x9e, 0xd5, 0x67, 0xd2, 0x78, 0xe0, 0x8e, 0xe0, 0x60, - 0x2a, 0x71, 0xbe, 0x63, 0x46, 0x79, 0x45, 0xd6, 0x5e, 0x20, 0x83, 0xe3, 0x55, 0xd3, 0x87, 0xcb, - 0x57, 0xda, 0xc1, 0x3d, 0xaa, 0x31, 0x77, 0x9f, 0xe7, 0x0e, 0xdc, 0x7d, 0x1e, 0x5d, 0xc5, 0x2a, - 0x0d, 0x5c, 0xc5, 0xaa, 0xbd, 0x27, 0xed, 0x99, 0xdd, 0x01, 0x1e, 0x26, 0x16, 0x8c, 0x3b, 0xdd, - 0x59, 0xdc, 0x64, 0x2e, 0xb2, 0x6f, 0x60, 0x6f, 0x9f, 0x05, 0x0a, 0x61, 0x85, 0x71, 0x32, 0xfd, - 0x59, 0x19, 0xc8, 0xe5, 0x6e, 0x57, 0xdb, 0x4a, 0x11, 0xd3, 0x33, 0x88, 0x92, 0x22, 0xf1, 0x51, - 0x52, 0xb8, 0x3d, 0x0b, 0x79, 0xd0, 0x31, 0x28, 0xed, 0x69, 0x04, 0xc6, 0xa3, 0x34, 0x3e, 0x8c, - 0x72, 0x76, 0xa7, 0x11, 0x12, 0x8b, 0x9f, 0xce, 0x95, 0xd6, 0xf4, 0x16, 0x59, 0x5d, 0x14, 0x99, - 0xe4, 0x9b, 0xfb, 0xd3, 0x1e, 0x2f, 0xe0, 0x3c, 0x7a, 0x13, 0xae, 0xb3, 0xcf, 0xee, 0x78, 0xc1, - 0x28, 0x0e, 0xb2, 0x47, 0xe1, 0x7b, 0x12, 0xc8, 0xb7, 0x1c, 0xd7, 0x9f, 0x14, 0x06, 0x69, 0x5d, - 0x22, 0x18, 0x09, 0xb4, 0xe2, 0x67, 0xb6, 0xd9, 0xb9, 0x44, 0x24, 0x97, 0x3f, 0x85, 0xb0, 0xa8, - 0xc7, 0xc1, 0x22, 0xe1, 0x24, 0xbc, 0x53, 0xe8, 0x5f, 0x25, 0xd2, 0x5f, 0xdd, 0x23, 0x8a, 0x08, - 0xde, 0x18, 0x0b, 0x5d, 0x12, 0x02, 0x50, 0xb8, 0x34, 0xed, 0x8d, 0x2c, 0x2e, 0x55, 0x1e, 0x97, - 0x61, 0xf3, 0xfa, 0xf0, 0x5a, 0x9e, 0x49, 0xf5, 0x4c, 0x69, 0x22, 0xac, 0x26, 0x14, 0x9e, 0x3d, - 0x22, 0xcf, 0x91, 0x41, 0x91, 0xba, 0x84, 0x4e, 0x14, 0x81, 0xb4, 0x2d, 0x23, 0x14, 0x82, 0x98, - 0xeb, 0xa8, 0x3c, 0xe9, 0x96, 0x91, 0x5c, 0x7e, 0xf6, 0x38, 0xfc, 0x1b, 0xf5, 0x75, 0x2e, 0x5f, - 0x32, 0xad, 0x9e, 0x79, 0xa1, 0x97, 0x22, 0xb2, 0xf9, 0x27, 0x53, 0x9e, 0xee, 0x0c, 0xab, 0xca, - 0x95, 0x17, 0x23, 0xf1, 0x1f, 0x04, 0xb3, 0x2e, 0xb7, 0x17, 0x8c, 0xac, 0xa8, 0x01, 0x3f, 0x73, - 0xfa, 0xde, 0x88, 0x72, 0xa6, 0x3a, 0xca, 0x29, 0xc4, 0xcf, 0x54, 0x8e, 0x9e, 0xcd, 0x95, 0xbb, - 0xdd, 0x15, 0x68, 0xfa, 0xfb, 0x2e, 0xec, 0xa6, 0x1a, 0x22, 0xdc, 0x81, 0xed, 0x72, 0x46, 0x12, - 0x5c, 0x6c, 0xd1, 0x3a, 0x8f, 0xce, 0x13, 0x46, 0xf4, 0x06, 0x01, 0x2f, 0x13, 0xe9, 0x92, 0xde, - 0x16, 0x42, 0xd2, 0xe4, 0x20, 0x79, 0xd2, 0x78, 0x4c, 0x64, 0x0f, 0xc8, 0x4b, 0x65, 0xb0, 0x48, - 0xec, 0x84, 0x49, 0x63, 0xf2, 0xe1, 0x94, 0x2e, 0x64, 0xcc, 0xad, 0x6d, 0x2c, 0x3b, 0x13, 0x81, - 0x25, 0x8d, 0xc3, 0x99, 0x18, 0x1f, 0xd9, 0x23, 0xf3, 0x3f, 0xaf, 0x02, 0x80, 0x71, 0x0b, 0xfe, - 0x64, 0x31, 0x8a, 0xf3, 0xa9, 0xbd, 0x93, 0xce, 0x3f, 0x5a, 0x5c, 0xd0, 0x79, 0xc6, 0xe5, 0x37, - 0xdc, 0xf6, 0xe2, 0x13, 0x85, 0x46, 0x95, 0x3f, 0x48, 0x69, 0xf3, 0x52, 0xa7, 0xdc, 0x91, 0x83, - 0xfb, 0x98, 0xbd, 0xdc, 0xa7, 0x52, 0x18, 0xbf, 0xa3, 0x58, 0x49, 0x87, 0x5a, 0x7d, 0x8c, 0x99, - 0xfd, 0x69, 0x70, 0xd2, 0xd0, 0xcb, 0xd5, 0x66, 0xa3, 0x7e, 0x2f, 0x7b, 0x85, 0x97, 0x22, 0xb3, - 0x93, 0x93, 0x4c, 0x60, 0x7b, 0x5d, 0xca, 0x3e, 0x90, 0x97, 0x55, 0xd2, 0x6c, 0x85, 0x59, 0x5c, - 0x19, 0xdd, 0xab, 0x09, 0x90, 0x3d, 0x4a, 0x14, 0xbe, 0x55, 0x04, 0x73, 0x06, 0xec, 0x38, 0x7b, - 0x7b, 0xd0, 0xee, 0xc2, 0xae, 0xf6, 0x3a, 0x19, 0xcc, 0x87, 0xbb, 0x8a, 0x2d, 0xe8, 0x6b, 0xff, - 0x29, 0xc2, 0xe6, 0x2c, 0x98, 0x47, 0x95, 0x6b, 0xf2, 0x17, 0x09, 0x70, 0x69, 0xea, 0xcd, 0xe0, - 0x44, 0x80, 0x42, 0x73, 0x60, 0x0a, 0x73, 0xf0, 0x05, 0xef, 0xf7, 0xb3, 0xc9, 0x63, 0x74, 0x57, - 0xbc, 0x30, 0x43, 0x76, 0x97, 0x58, 0x56, 0x63, 0xc0, 0xfa, 0xbd, 0x10, 0xac, 0xa7, 0x71, 0x60, - 0x55, 0x0f, 0x49, 0xff, 0x28, 0x51, 0xfb, 0x90, 0x0c, 0x4e, 0x06, 0x1d, 0xf1, 0xf4, 0xd0, 0xfa, - 0x14, 0x8b, 0xd6, 0xd3, 0x79, 0xb4, 0x56, 0x45, 0xa4, 0x39, 0x8c, 0xe5, 0x18, 0xd4, 0xbe, 0x1c, - 0xa2, 0xf6, 0x5f, 0x38, 0xd4, 0xea, 0x13, 0x2a, 0xe7, 0x28, 0xd1, 0xfb, 0xb0, 0x0c, 0x4e, 0x23, - 0xb3, 0xb3, 0xe2, 0xd8, 0xdb, 0x3d, 0xab, 0xe3, 0x5b, 0xf6, 0x4e, 0xe4, 0xe2, 0xb8, 0x2a, 0xb2, - 0xb2, 0x39, 0x88, 0xad, 0x74, 0x10, 0x5b, 0x7e, 0x8f, 0x41, 0xb4, 0x6d, 0xc5, 0xb1, 0x15, 0x33, - 0x84, 0x31, 0xce, 0xfb, 0x91, 0xe6, 0xb0, 0x49, 0xe9, 0x5b, 0x9f, 0x20, 0x07, 0x47, 0x89, 0xdf, - 0xd7, 0x25, 0x70, 0xca, 0x80, 0x9e, 0xd3, 0xbb, 0x04, 0x89, 0x2f, 0x6b, 0xc0, 0xaf, 0xa7, 0x3d, - 0x3a, 0x55, 0xfb, 0xd3, 0x5e, 0xca, 0x62, 0xd4, 0xe2, 0x31, 0xba, 0x33, 0x5e, 0xd3, 0x87, 0x15, - 0x1d, 0xd3, 0x8e, 0xde, 0x1b, 0xca, 0xff, 0x1c, 0x27, 0xff, 0xe5, 0x43, 0x51, 0x9f, 0xc2, 0x12, - 0x01, 0x60, 0xcc, 0xbb, 0xe7, 0xcb, 0x40, 0xc1, 0x3e, 0xcb, 0x78, 0xf4, 0xa4, 0x77, 0x08, 0x37, - 0xf9, 0xd3, 0x2c, 0xfd, 0x40, 0x09, 0x83, 0xd3, 0x2c, 0x41, 0x82, 0x7a, 0x03, 0x58, 0xec, 0xec, - 0xc2, 0xce, 0xc5, 0x9a, 0x1d, 0x78, 0x95, 0x11, 0x17, 0xa4, 0x81, 0x54, 0xde, 0x60, 0xb8, 0x87, - 0x07, 0x83, 0x5f, 0xdc, 0xe5, 0x26, 0x8f, 0x2c, 0x53, 0x31, 0x20, 0xfc, 0x66, 0x08, 0x42, 0x83, - 0x03, 0xe1, 0xf6, 0xb1, 0xa8, 0xa6, 0x13, 0x7e, 0x63, 0x0c, 0xd5, 0xd7, 0xc0, 0xa9, 0xe6, 0x46, - 0xbb, 0xd6, 0x6c, 0x6c, 0x6d, 0xb6, 0xf4, 0xea, 0xd6, 0x72, 0xd0, 0x00, 0x5a, 0x8a, 0xac, 0x7d, - 0x53, 0x02, 0x33, 0x84, 0x2d, 0x4f, 0x7b, 0x54, 0x04, 0xc1, 0xc8, 0x63, 0x3c, 0xda, 0xdb, 0x85, - 0x83, 0x72, 0x85, 0x82, 0xa0, 0xe5, 0xc4, 0x74, 0x3e, 0x4f, 0x04, 0x33, 0x04, 0xe4, 0x60, 0xa7, - 0xe5, 0x4c, 0x8c, 0xf5, 0x4c, 0xc9, 0x18, 0x41, 0x76, 0xc1, 0x00, 0x5d, 0x23, 0xd8, 0xc8, 0xbe, - 0x0d, 0x3c, 0x2b, 0x4f, 0x96, 0x67, 0xce, 0x5b, 0xfe, 0x2e, 0x3e, 0xe5, 0xa3, 0x3d, 0x55, 0x64, - 0x70, 0xb8, 0x19, 0x14, 0x2e, 0xa1, 0xdc, 0x23, 0x4e, 0x4c, 0x91, 0x4c, 0xda, 0x2f, 0x0a, 0xc7, - 0x83, 0xe7, 0xf4, 0x33, 0xe4, 0x29, 0x06, 0x9c, 0x75, 0x90, 0xef, 0x59, 0x9e, 0x4f, 0xe7, 0x35, - 0xb7, 0xa5, 0x22, 0x14, 0xfc, 0xa9, 0xf9, 0x70, 0xcf, 0xc0, 0x64, 0xb4, 0xbb, 0x91, 0x55, 0x1a, - 0xa5, 0x0a, 0x9c, 0x1a, 0x3b, 0x0d, 0x66, 0x68, 0x34, 0x03, 0xba, 0xf5, 0x17, 0x3c, 0x0a, 0x6e, - 0xb7, 0x09, 0xd5, 0x36, 0x7b, 0x1d, 0xf8, 0x7f, 0x8f, 0x83, 0x99, 0x35, 0xcb, 0xf3, 0x1d, 0xf7, - 0x8a, 0xf6, 0xfa, 0x1c, 0x98, 0x39, 0x07, 0x5d, 0xcf, 0x72, 0xec, 0x03, 0x8e, 0x76, 0xd7, 0x81, - 0xb9, 0xbe, 0x0b, 0x2f, 0x59, 0xce, 0xbe, 0xc7, 0x8c, 0xc4, 0x4c, 0x92, 0xaa, 0x81, 0x92, 0xb9, - 0xef, 0xef, 0x3a, 0x6e, 0x14, 0x04, 0x2d, 0x78, 0x56, 0xcf, 0x00, 0x40, 0xfe, 0x37, 0xcc, 0x3d, - 0x48, 0xdd, 0x07, 0x99, 0x14, 0x55, 0x05, 0x79, 0xdf, 0xda, 0x83, 0xf4, 0x56, 0x04, 0xfc, 0x1f, - 0x09, 0x18, 0x47, 0x18, 0xa6, 0x91, 0x9c, 0x65, 0x23, 0x78, 0xd4, 0xbe, 0x28, 0x83, 0xb9, 0x55, - 0xe8, 0x53, 0x56, 0x3d, 0xed, 0x45, 0x39, 0xa1, 0x8b, 0xc8, 0xd0, 0xdc, 0xaf, 0x67, 0x7a, 0xc1, - 0x77, 0xa1, 0x59, 0xc3, 0x27, 0x46, 0x57, 0x34, 0xc8, 0xec, 0xfd, 0x2c, 0x38, 0x5e, 0xaf, 0x5f, - 0x23, 0x07, 0x68, 0x68, 0x66, 0xba, 0x39, 0x7f, 0xf0, 0x05, 0x3f, 0xef, 0x48, 0x8c, 0x75, 0x43, - 0x65, 0xbf, 0xc4, 0xd4, 0x27, 0xb6, 0x3b, 0x2a, 0x5d, 0xa2, 0x39, 0x0e, 0x5c, 0xbd, 0xc3, 0x52, - 0xa2, 0x64, 0x8c, 0x30, 0xb7, 0x60, 0x94, 0x9c, 0xd1, 0x9c, 0x4c, 0xe1, 0xb2, 0x65, 0x19, 0xcc, - 0xb5, 0x76, 0x9d, 0xcb, 0x81, 0x1c, 0x9f, 0x2e, 0x06, 0xec, 0xb5, 0x60, 0xf6, 0xd2, 0x00, 0xa8, - 0x51, 0x02, 0x7b, 0xbf, 0xa3, 0xcc, 0xdf, 0xef, 0xf8, 0x3c, 0x39, 0x2d, 0x4c, 0x0c, 0x73, 0x31, - 0x30, 0xf1, 0x57, 0x32, 0x4a, 0x29, 0xae, 0x64, 0x54, 0x9f, 0x00, 0x66, 0x28, 0xd7, 0x74, 0x2b, - 0x20, 0x19, 0xe0, 0x20, 0x33, 0x5b, 0xc1, 0x3c, 0x5f, 0xc1, 0x74, 0xc8, 0xc7, 0x57, 0x2e, 0x7b, - 0xe4, 0x7f, 0x5b, 0xc2, 0x31, 0xd2, 0x02, 0xe0, 0x2b, 0x13, 0x00, 0x5e, 0xfb, 0x6e, 0x4e, 0x74, - 0xc3, 0x2c, 0x94, 0x40, 0xc8, 0xc1, 0xa1, 0x2e, 0x19, 0x1c, 0x49, 0x2e, 0x7b, 0x79, 0xbe, 0x3c, - 0x0f, 0xe6, 0xab, 0xd6, 0xf6, 0x76, 0xd8, 0x49, 0xbe, 0x58, 0xb0, 0x93, 0x8c, 0x77, 0x86, 0x43, - 0x76, 0xee, 0xbe, 0xeb, 0x42, 0x3b, 0xa8, 0x14, 0x6d, 0x4e, 0x03, 0xa9, 0xea, 0x8d, 0xe0, 0x78, - 0x30, 0x2e, 0xb0, 0x1d, 0xe5, 0xac, 0x31, 0x98, 0xac, 0x7d, 0x5b, 0xd8, 0xdb, 0x22, 0x90, 0x28, - 0x5b, 0xa5, 0x98, 0x06, 0x78, 0x07, 0x58, 0xd8, 0x25, 0xb9, 0xf1, 0x92, 0x74, 0xd0, 0x59, 0x9e, - 0x1a, 0xb8, 0x83, 0x62, 0x1d, 0x7a, 0x9e, 0xb9, 0x03, 0x0d, 0x3e, 0xf3, 0x40, 0xf3, 0x95, 0xd3, - 0xdc, 0xa8, 0x2a, 0xe6, 0xb8, 0x21, 0x50, 0x93, 0xec, 0xb5, 0xe3, 0xcb, 0x67, 0x41, 0x7e, 0xc5, - 0xea, 0x41, 0xed, 0xc7, 0x25, 0x30, 0x6b, 0xc0, 0x8e, 0x63, 0x77, 0xd0, 0x13, 0xe3, 0x1a, 0xfb, - 0xad, 0x9c, 0xe8, 0x4d, 0xe2, 0x88, 0xce, 0x52, 0x48, 0x23, 0xa6, 0xdd, 0x88, 0xdd, 0x18, 0x9e, - 0x48, 0x6a, 0x0a, 0xf7, 0xbe, 0xa1, 0xa9, 0xc7, 0xf6, 0x76, 0xcf, 0x31, 0xb9, 0x4d, 0x99, 0x41, - 0x53, 0x28, 0x3a, 0x88, 0xdb, 0x70, 0xfc, 0x0d, 0xcb, 0xb6, 0xc3, 0xd8, 0x36, 0x07, 0xd2, 0x79, - 0x7f, 0xa2, 0xc4, 0xf0, 0x80, 0xb8, 0xee, 0xb4, 0xf4, 0x18, 0xcd, 0xbe, 0x01, 0x2c, 0x5e, 0xb8, - 0xe2, 0x43, 0x8f, 0xe6, 0xa2, 0xc5, 0xe6, 0x8d, 0x81, 0x54, 0xe6, 0x72, 0x8f, 0xa4, 0x30, 0x82, - 0x09, 0x05, 0xa6, 0x13, 0xf5, 0xda, 0x18, 0x33, 0xc0, 0x93, 0x40, 0x69, 0x34, 0xab, 0x3a, 0xf6, - 0xd4, 0x0e, 0x7c, 0x5f, 0x77, 0xb4, 0x9f, 0x91, 0xc1, 0x3c, 0x76, 0x72, 0x0c, 0x50, 0x78, 0xb8, - 0xc0, 0x7c, 0x44, 0xfb, 0xaa, 0xb0, 0x17, 0x37, 0xae, 0x32, 0x5b, 0x40, 0xbc, 0xa0, 0xb7, 0xad, - 0xde, 0xa0, 0xa0, 0x0b, 0xc6, 0x40, 0xea, 0x10, 0x40, 0xe4, 0xa1, 0x80, 0x7c, 0x48, 0xc8, 0x95, - 0x7b, 0x14, 0x77, 0x47, 0x85, 0xca, 0xaf, 0xc9, 0x60, 0x0e, 0x4d, 0x52, 0x02, 0x50, 0x9a, 0x1c, - 0x28, 0x8e, 0xdd, 0xbb, 0x12, 0x2d, 0x8b, 0x04, 0x8f, 0xa9, 0x1a, 0xc9, 0x1f, 0x0b, 0xcf, 0xdc, - 0xb1, 0x88, 0x18, 0x5e, 0xa6, 0x84, 0xdf, 0x07, 0x85, 0xe6, 0xf3, 0x23, 0x98, 0x3b, 0x2a, 0xf8, - 0x5e, 0x5b, 0x04, 0xc5, 0xcd, 0x3e, 0x46, 0xee, 0x2b, 0xb2, 0xc8, 0x45, 0x39, 0x07, 0x8e, 0xf1, - 0x21, 0x33, 0xab, 0xe7, 0x74, 0xcc, 0xde, 0x46, 0x74, 0x92, 0x3d, 0x4a, 0x50, 0x6f, 0xa7, 0x9e, - 0xfd, 0xe4, 0x40, 0xf6, 0x0d, 0x89, 0x77, 0xc8, 0x60, 0x19, 0x31, 0x47, 0x26, 0x6f, 0x06, 0x27, - 0xba, 0x96, 0x67, 0x5e, 0xe8, 0x41, 0xdd, 0xee, 0xb8, 0x57, 0x88, 0x38, 0xe8, 0xb4, 0xea, 0xc0, - 0x0b, 0xf5, 0x4e, 0x50, 0xf0, 0xfc, 0x2b, 0x3d, 0x32, 0x4f, 0x64, 0x4f, 0x58, 0xc6, 0x16, 0xd5, - 0x42, 0xd9, 0x0d, 0xf2, 0x15, 0xeb, 0x3a, 0x3b, 0x23, 0xe6, 0x3a, 0xab, 0x3e, 0x0e, 0x14, 0x1d, - 0xd7, 0xda, 0xb1, 0xc8, 0xb5, 0x90, 0x8b, 0x07, 0x42, 0x25, 0x13, 0x53, 0xa0, 0x89, 0xb3, 0x18, - 0x34, 0xab, 0xfa, 0x04, 0x30, 0x6b, 0xed, 0x99, 0x3b, 0xf0, 0x1e, 0xcb, 0x26, 0x81, 0x24, 0x16, - 0x6f, 0x3d, 0x7d, 0xe0, 0xf0, 0x28, 0x7d, 0x6f, 0x44, 0x59, 0xd5, 0x3b, 0xc0, 0x35, 0x1d, 0x17, - 0x9a, 0x3e, 0x44, 0x02, 0x3a, 0x6f, 0x75, 0x77, 0xa0, 0x5f, 0xdb, 0x5e, 0xb7, 0x3c, 0xcf, 0xb2, - 0x77, 0xe8, 0xcd, 0xaf, 0xf1, 0x19, 0xb4, 0x0f, 0x4a, 0xa2, 0xd1, 0x20, 0xb1, 0x64, 0x88, 0x4a, - 0x8c, 0x71, 0x43, 0x3d, 0x23, 0x45, 0x59, 0xd0, 0x01, 0xf9, 0x55, 0x42, 0x71, 0x1a, 0xe3, 0xd9, - 0xca, 0x7e, 0xe8, 0xff, 0x43, 0x09, 0x94, 0xaa, 0xce, 0x65, 0x1b, 0x37, 0x93, 0xdb, 0xc4, 0x2c, - 0xe5, 0x21, 0xa1, 0x1d, 0xf8, 0xbb, 0xce, 0x13, 0x4f, 0x03, 0xe2, 0xda, 0x06, 0x45, 0xc6, 0xc0, - 0x90, 0xd8, 0xee, 0x04, 0x03, 0x08, 0x24, 0x95, 0x93, 0xbd, 0x5c, 0x7f, 0x57, 0x06, 0xf9, 0xaa, - 0xeb, 0xf4, 0xb5, 0xb7, 0xe5, 0x52, 0x38, 0xe2, 0x75, 0x5d, 0xa7, 0xdf, 0xc6, 0x57, 0xc8, 0x46, - 0x7b, 0x4f, 0x6c, 0x9a, 0x7a, 0x1b, 0x28, 0xf5, 0x1d, 0xcf, 0xf2, 0x83, 0x49, 0xc8, 0xe2, 0xad, - 0x0f, 0x19, 0xda, 0x17, 0x6c, 0xd0, 0x4c, 0x46, 0x98, 0x1d, 0xf5, 0xf9, 0x58, 0x84, 0x48, 0x2e, - 0x48, 0x8c, 0xc1, 0x35, 0xba, 0x03, 0xa9, 0xda, 0x4b, 0x58, 0x24, 0x9f, 0xc4, 0x23, 0xf9, 0x88, - 0x21, 0x12, 0x76, 0x9d, 0xfe, 0x44, 0x5c, 0x67, 0x5e, 0x11, 0xa2, 0xfa, 0x64, 0x0e, 0xd5, 0x9b, - 0x84, 0xca, 0xcc, 0x1e, 0xd1, 0x0f, 0xe6, 0x01, 0xc0, 0x46, 0xca, 0x26, 0x9a, 0x3e, 0x89, 0x59, - 0x68, 0x3f, 0x96, 0x67, 0x64, 0x59, 0xe6, 0x65, 0xf9, 0xa8, 0x18, 0x1b, 0x08, 0x93, 0x8f, 0x91, - 0x68, 0x19, 0x14, 0xf6, 0xd1, 0x6b, 0x2a, 0x51, 0x41, 0x12, 0xf8, 0xd1, 0x20, 0x5f, 0x6a, 0xbf, - 0x9d, 0x03, 0x05, 0x9c, 0xa0, 0x9e, 0x01, 0x00, 0x9b, 0x05, 0xe4, 0x30, 0x6d, 0x0e, 0x1b, 0x00, - 0x4c, 0x0a, 0xd6, 0x56, 0xab, 0x4b, 0x5f, 0x13, 0x83, 0x3b, 0x4a, 0x40, 0x5f, 0x63, 0x63, 0x01, - 0xd3, 0xa2, 0xe6, 0x03, 0x93, 0x82, 0xbe, 0xc6, 0x4f, 0x75, 0xb8, 0x4d, 0x6e, 0xf7, 0xc8, 0x1b, - 0x51, 0x42, 0xf8, 0x75, 0x3d, 0xbc, 0x13, 0x36, 0xf8, 0x1a, 0xa7, 0xa0, 0xa9, 0x34, 0x56, 0xcb, - 0xe5, 0xa8, 0x88, 0x22, 0xce, 0x34, 0x98, 0xac, 0xbd, 0x2e, 0x54, 0x9b, 0x2a, 0xa7, 0x36, 0x8f, - 0x49, 0x21, 0xde, 0xec, 0x95, 0xe7, 0xeb, 0x05, 0x30, 0xdb, 0x70, 0xba, 0x54, 0x77, 0x98, 0xe9, - 0xe6, 0x67, 0x0a, 0xa9, 0xa6, 0x9b, 0x21, 0x8d, 0x18, 0x05, 0x79, 0x0a, 0xaf, 0x20, 0x62, 0x14, - 0x58, 0xfd, 0x50, 0x97, 0x41, 0x11, 0x6b, 0xef, 0xc1, 0xcb, 0x46, 0x93, 0x48, 0x60, 0xd1, 0x1a, - 0xf4, 0xcb, 0x7f, 0x77, 0x3a, 0xf6, 0xdf, 0x40, 0x01, 0x57, 0x30, 0x61, 0x6f, 0x88, 0xaf, 0xa8, - 0x94, 0x5c, 0x51, 0x39, 0xb9, 0xa2, 0xf9, 0xc1, 0x8a, 0xa6, 0x59, 0x45, 0x88, 0xd3, 0x90, 0xec, - 0x75, 0xfc, 0x7f, 0xcd, 0x00, 0xd0, 0x30, 0x2f, 0x59, 0x3b, 0x64, 0x6f, 0xf9, 0x8b, 0xc1, 0xec, - 0x89, 0xee, 0x02, 0xff, 0x24, 0x33, 0x10, 0xde, 0x06, 0x66, 0xe8, 0xb8, 0x47, 0x2b, 0xf2, 0x50, - 0xae, 0x22, 0x11, 0x15, 0x62, 0xd4, 0xde, 0xef, 0x1b, 0x41, 0x7e, 0x64, 0x98, 0x6c, 0xef, 0xf7, - 0x7a, 0x6d, 0xf4, 0x2d, 0xb5, 0xd0, 0x82, 0xe7, 0x98, 0x1d, 0x8c, 0xe8, 0x92, 0x69, 0x12, 0x74, - 0x8a, 0x3e, 0x69, 0xef, 0x13, 0x3e, 0xa7, 0xc6, 0xf0, 0xc3, 0xd4, 0x28, 0xa6, 0x09, 0x3e, 0x0e, - 0xcc, 0x38, 0xe1, 0x76, 0xb8, 0x1c, 0xbb, 0x8a, 0x56, 0xb3, 0xb7, 0x1d, 0x23, 0xc8, 0x29, 0xb8, - 0x75, 0x26, 0xc4, 0xc7, 0x54, 0x8e, 0x82, 0x9e, 0x5a, 0x0d, 0x22, 0xa5, 0xa2, 0x7a, 0x9c, 0xb7, - 0xfc, 0xdd, 0xba, 0x65, 0x5f, 0xf4, 0xb4, 0xff, 0x22, 0x66, 0x41, 0x32, 0xf8, 0x4b, 0xe9, 0xf0, - 0xe7, 0x23, 0x95, 0x25, 0x7a, 0x76, 0x30, 0x54, 0x86, 0x73, 0x1b, 0x03, 0xe0, 0xed, 0xa0, 0x48, - 0x18, 0xa5, 0x9d, 0xe8, 0xd9, 0x58, 0xfc, 0x42, 0x4a, 0x06, 0xfd, 0x42, 0xd0, 0x2b, 0x24, 0x2d, - 0x67, 0x99, 0x43, 0x7a, 0xf6, 0xb1, 0x60, 0x86, 0x4a, 0x5a, 0x5d, 0x64, 0x5b, 0xb1, 0x72, 0x4c, - 0x05, 0xa0, 0xb8, 0xee, 0x5c, 0x82, 0x6d, 0x47, 0xc9, 0xa1, 0xff, 0x88, 0xbf, 0xb6, 0xa3, 0x48, - 0xda, 0x2b, 0x4b, 0xa0, 0x14, 0x86, 0xa8, 0xfc, 0x43, 0x09, 0x28, 0x15, 0x3c, 0x43, 0x5b, 0x71, - 0x9d, 0x3d, 0x52, 0x23, 0xf1, 0x33, 0x0f, 0x2f, 0x15, 0x76, 0x10, 0x09, 0x43, 0x47, 0x0e, 0x16, - 0x16, 0x83, 0x25, 0x59, 0xc2, 0x94, 0x82, 0x25, 0x4c, 0xed, 0xad, 0x42, 0x0e, 0x23, 0xa2, 0xa5, - 0x64, 0xdf, 0xd4, 0x7e, 0x47, 0x02, 0x85, 0x4a, 0xcf, 0xb1, 0x21, 0x7b, 0x30, 0x77, 0xe4, 0x09, - 0xd0, 0xe1, 0xfb, 0x18, 0xda, 0xb3, 0x24, 0x51, 0x5b, 0x23, 0x12, 0x00, 0x2a, 0x5b, 0x50, 0xb6, - 0x62, 0x83, 0x54, 0x22, 0xe9, 0xec, 0x05, 0xfa, 0x4d, 0x09, 0xcc, 0x92, 0x98, 0x72, 0xe5, 0x5e, - 0x4f, 0x7b, 0x48, 0x24, 0xd4, 0x21, 0x61, 0x3e, 0xb5, 0x0f, 0x09, 0x1f, 0x3c, 0x0b, 0x6b, 0x15, - 0xd2, 0x4e, 0x11, 0x16, 0x31, 0xdd, 0x39, 0x28, 0xb1, 0x9d, 0xb8, 0x91, 0x0c, 0x65, 0x2f, 0xea, - 0x3f, 0x92, 0x90, 0x01, 0x60, 0x5f, 0xdc, 0x70, 0xe1, 0x25, 0x0b, 0x5e, 0xd6, 0x1e, 0x1c, 0x09, - 0xfb, 0x60, 0xc0, 0xac, 0x37, 0x09, 0x2f, 0xe2, 0x30, 0x24, 0x63, 0x37, 0xc2, 0xe6, 0x7a, 0x51, - 0x26, 0xda, 0x8b, 0x0f, 0x46, 0x31, 0x63, 0xc8, 0x18, 0x6c, 0x76, 0xc1, 0x35, 0x9b, 0x78, 0x2e, - 0xb2, 0x17, 0xec, 0xc7, 0x66, 0x40, 0x69, 0xd3, 0xf6, 0xfa, 0x3d, 0xd3, 0xdb, 0xd5, 0xfe, 0x55, - 0x06, 0x45, 0x72, 0xc5, 0xad, 0xf6, 0x83, 0x5c, 0x5c, 0x9e, 0x67, 0xec, 0x43, 0x37, 0x70, 0xe0, - 0x21, 0x0f, 0x91, 0x7d, 0x24, 0x31, 0xf6, 0x91, 0xf6, 0x41, 0x59, 0x74, 0x92, 0x1a, 0x14, 0x4a, - 0xef, 0xd4, 0x8d, 0x0f, 0x05, 0xd3, 0xb7, 0x3a, 0xfe, 0xbe, 0x0b, 0xbd, 0xa1, 0xa1, 0x60, 0x62, - 0xa9, 0x6c, 0x90, 0xaf, 0x8c, 0xf0, 0x73, 0xcd, 0x04, 0x33, 0x34, 0xf1, 0xc0, 0x66, 0xd4, 0xc1, - 0xa8, 0x12, 0xa7, 0x40, 0xd1, 0x74, 0x7d, 0xcb, 0xf3, 0xe9, 0xf6, 0x2c, 0x7d, 0x42, 0xdd, 0x25, - 0xf9, 0xb7, 0xe9, 0xf6, 0x82, 0x08, 0x5e, 0x61, 0x82, 0xf6, 0x6b, 0x42, 0xf3, 0xc7, 0xe4, 0x9a, - 0xa7, 0x83, 0xfc, 0x9e, 0x31, 0x56, 0xb8, 0x1f, 0x04, 0xae, 0x32, 0xca, 0x6d, 0x7d, 0x8b, 0x04, - 0x7c, 0x0a, 0x63, 0x3b, 0x75, 0xb5, 0xf7, 0xc8, 0xcc, 0xfa, 0xdd, 0x15, 0x6e, 0x8c, 0xa0, 0x52, - 0x8c, 0xc6, 0x88, 0x30, 0x21, 0x61, 0xaf, 0x9b, 0x5b, 0xc2, 0x95, 0x85, 0x97, 0x70, 0xb5, 0x5f, - 0x11, 0xde, 0x8b, 0x0a, 0x45, 0x39, 0x62, 0x0d, 0x30, 0xe9, 0x0a, 0xcc, 0x8f, 0x08, 0xed, 0x2b, - 0x8d, 0x2a, 0xe9, 0x08, 0x61, 0xfb, 0xee, 0x29, 0x20, 0x95, 0x6b, 0xda, 0x4f, 0xcc, 0x80, 0xf9, - 0xf3, 0xae, 0xe5, 0x5b, 0xf6, 0x4e, 0xdb, 0x71, 0x7a, 0x9e, 0xf6, 0x1d, 0x66, 0xa3, 0xe2, 0x09, - 0xa0, 0xd8, 0x71, 0xec, 0x6d, 0x6b, 0x87, 0x8a, 0xf1, 0x0c, 0x57, 0xb9, 0x72, 0x6d, 0x69, 0xc3, - 0x75, 0x2e, 0x59, 0x5d, 0xe8, 0x56, 0x70, 0x2e, 0x83, 0xe6, 0x46, 0x7a, 0xcc, 0x84, 0xcc, 0x7b, - 0xcc, 0xe0, 0x57, 0x6c, 0x79, 0x61, 0xcc, 0x1e, 0x9a, 0xc8, 0x44, 0xcc, 0xab, 0x81, 0x52, 0xcf, - 0xb4, 0x77, 0xf6, 0x83, 0x99, 0xf7, 0xe0, 0x2e, 0x6a, 0x1c, 0xa5, 0x3a, 0xfd, 0xc8, 0x08, 0x3f, - 0xc7, 0x4e, 0x6e, 0xc8, 0xd4, 0x27, 0x6d, 0x0f, 0xff, 0x3f, 0xfb, 0xf1, 0x1c, 0x98, 0x63, 0x0a, - 0x55, 0xe7, 0xc0, 0x4c, 0x55, 0x5f, 0x29, 0x6f, 0xd6, 0xdb, 0xca, 0x31, 0x24, 0xc5, 0xd6, 0xe6, - 0xfa, 0x7a, 0xd9, 0xa8, 0xfd, 0xb0, 0xae, 0xe4, 0xd0, 0xbb, 0x55, 0xa3, 0x8c, 0x9e, 0x15, 0x09, - 0x3d, 0xb4, 0xd6, 0x9a, 0x46, 0x5b, 0x6f, 0x28, 0x32, 0xb2, 0x47, 0xf5, 0xa7, 0x6d, 0x94, 0x1b, - 0x55, 0x25, 0x8f, 0xfe, 0x2f, 0x6f, 0xd6, 0xeb, 0x7a, 0x5b, 0x29, 0x44, 0x41, 0xf4, 0x8a, 0x28, - 0xb9, 0x52, 0x6e, 0x6d, 0x96, 0xeb, 0xca, 0x0c, 0x4a, 0x5e, 0xd9, 0x6c, 0x34, 0xee, 0x55, 0x4a, - 0xa8, 0x88, 0x4a, 0xb3, 0xb1, 0x52, 0xab, 0xea, 0x8d, 0xb6, 0x32, 0xab, 0x5e, 0x05, 0x8e, 0xb7, - 0xda, 0x46, 0xb9, 0xb6, 0xba, 0xd6, 0x5e, 0x69, 0x1a, 0xe7, 0xcb, 0x46, 0x55, 0x01, 0xaa, 0x02, - 0xe6, 0x37, 0x8c, 0xe6, 0x8a, 0x8e, 0xe3, 0xa5, 0x94, 0xeb, 0xca, 0x1c, 0xfa, 0xaa, 0x6d, 0x94, - 0x1b, 0xad, 0x7a, 0xb9, 0xad, 0x2b, 0xf3, 0x67, 0xef, 0x06, 0xa5, 0xa0, 0xba, 0x6a, 0x11, 0x48, - 0x7a, 0x43, 0x39, 0x86, 0x7f, 0x5b, 0x4a, 0x0e, 0xfd, 0xae, 0x20, 0x7e, 0x8b, 0x40, 0xaa, 0xea, - 0x8a, 0x8c, 0x7e, 0x6b, 0x6d, 0x25, 0x8f, 0x7e, 0x37, 0x10, 0x8b, 0x45, 0x20, 0xad, 0xd5, 0x94, - 0x22, 0xfa, 0x6d, 0xaf, 0x29, 0x33, 0xfc, 0x4d, 0xf7, 0x89, 0xbd, 0xf0, 0x41, 0xc9, 0xc7, 0x18, - 0x1a, 0x7e, 0x34, 0x47, 0xc6, 0xff, 0xb5, 0x57, 0x48, 0x22, 0x7d, 0x5d, 0x32, 0xfd, 0x74, 0x8d, - 0xe6, 0x2d, 0xb9, 0x09, 0xb6, 0x1a, 0x55, 0x03, 0xa7, 0xf4, 0x46, 0x75, 0xa3, 0x59, 0x6b, 0xb4, - 0x49, 0xa8, 0x33, 0xbd, 0x5c, 0x59, 0xc3, 0x38, 0x43, 0x84, 0xe0, 0x7a, 0xb3, 0xaa, 0xd7, 0xf1, - 0x8b, 0x95, 0xe6, 0x66, 0xa3, 0xaa, 0x6c, 0xa3, 0xb2, 0xca, 0x9b, 0xed, 0xb5, 0x2d, 0x43, 0x7f, - 0xea, 0x66, 0xcd, 0xd0, 0xab, 0xca, 0x0e, 0xa2, 0x51, 0x2f, 0x37, 0x56, 0x37, 0xcb, 0xab, 0x74, - 0xbf, 0x70, 0x73, 0x63, 0xa3, 0x89, 0x77, 0x0c, 0x77, 0xb5, 0xbf, 0xcf, 0x83, 0x52, 0x79, 0xdf, - 0x77, 0xb6, 0xad, 0x5e, 0x4f, 0x7b, 0x8e, 0x74, 0xf8, 0xa6, 0x58, 0xe6, 0x9a, 0xe2, 0x81, 0x06, - 0x14, 0x94, 0x15, 0x36, 0x9e, 0x20, 0x81, 0x69, 0x87, 0xa7, 0x23, 0x67, 0x6c, 0x99, 0xee, 0x34, - 0x93, 0x47, 0xe2, 0x88, 0x6b, 0xd3, 0x96, 0x85, 0xdf, 0xd0, 0xc7, 0xb3, 0xf7, 0x80, 0x79, 0x96, - 0x12, 0x0e, 0x07, 0x56, 0x5e, 0x25, 0xf1, 0xc2, 0x82, 0x08, 0x81, 0x24, 0x5e, 0x18, 0x3e, 0x78, - 0x21, 0xe1, 0xf6, 0x52, 0x6b, 0xd7, 0x91, 0x9e, 0x1e, 0x07, 0x73, 0x55, 0xbd, 0x55, 0x31, 0x6a, - 0xd8, 0x4f, 0x5d, 0xc9, 0xf3, 0x5e, 0x06, 0x89, 0x96, 0x19, 0x5f, 0x23, 0x51, 0xa5, 0xfc, 0x9e, - 0x90, 0xbd, 0x15, 0x4f, 0x3b, 0x9d, 0x42, 0xbe, 0xe8, 0x81, 0xa6, 0x90, 0xda, 0x8b, 0xf2, 0x64, - 0x9d, 0xac, 0xb5, 0xbf, 0xb7, 0x67, 0xba, 0x57, 0x38, 0x7f, 0xb5, 0x71, 0xf5, 0x2e, 0x7e, 0x7c, - 0x4f, 0x8c, 0x02, 0x84, 0x4c, 0xa8, 0xbe, 0xeb, 0xec, 0xf5, 0x83, 0xbe, 0x9a, 0x3e, 0x69, 0xff, - 0x53, 0x78, 0xe6, 0x58, 0xae, 0x2d, 0x31, 0x95, 0x19, 0x63, 0x68, 0xff, 0x11, 0x49, 0x64, 0x16, - 0x99, 0x58, 0xcc, 0xf7, 0xbb, 0x46, 0xfc, 0x75, 0x1e, 0x5c, 0x45, 0x23, 0xbc, 0x84, 0xeb, 0x0f, - 0xc8, 0x54, 0x7d, 0x75, 0xa6, 0x9a, 0x41, 0x0d, 0x6a, 0x39, 0x32, 0xa8, 0x99, 0x0d, 0xef, 0xbc, - 0xe0, 0x86, 0xf7, 0xdb, 0x84, 0x0f, 0x3d, 0x94, 0x6b, 0x4b, 0x43, 0xea, 0x38, 0x9d, 0x6d, 0xf9, - 0xe7, 0x49, 0x22, 0xab, 0xad, 0x42, 0x1c, 0x7e, 0xbf, 0xeb, 0xda, 0x3b, 0x72, 0x60, 0x91, 0x57, - 0x15, 0xf5, 0xf1, 0xa0, 0xd4, 0xa7, 0x29, 0x54, 0x2e, 0xa7, 0xe3, 0x94, 0xcb, 0x08, 0x73, 0x22, - 0x88, 0xa0, 0xdd, 0xed, 0x3b, 0x96, 0x1d, 0xae, 0xcb, 0x07, 0xcf, 0x68, 0xde, 0x89, 0xa7, 0x0e, - 0x41, 0xbc, 0x3f, 0xfc, 0x10, 0xc5, 0x8e, 0xcd, 0x33, 0xb1, 0x63, 0x91, 0x10, 0x7d, 0xb8, 0x87, - 0x6f, 0x31, 0xda, 0x77, 0x89, 0xc3, 0x8b, 0x64, 0xb0, 0x49, 0x67, 0x9f, 0x0c, 0x4a, 0x41, 0xf9, - 0xc8, 0xba, 0x6b, 0xd6, 0xeb, 0xe5, 0xf5, 0x32, 0x59, 0xa8, 0x6c, 0x6e, 0xe8, 0x8d, 0x72, 0x4d, - 0xc9, 0xa1, 0x81, 0xae, 0xbe, 0xde, 0x6a, 0x6f, 0x56, 0x6b, 0x4d, 0x45, 0xc2, 0x4f, 0x28, 0x53, - 0x65, 0x63, 0x43, 0x91, 0xb5, 0x37, 0xce, 0x80, 0x99, 0x55, 0xb3, 0xd7, 0x83, 0xee, 0x15, 0xed, - 0x9b, 0x12, 0x50, 0x82, 0xd9, 0xc1, 0xba, 0x69, 0x5b, 0xdb, 0xd0, 0xf3, 0x93, 0x17, 0x2a, 0xde, - 0x27, 0x7c, 0xb5, 0x19, 0x2d, 0x63, 0x69, 0x90, 0x7e, 0x8c, 0x8e, 0xdf, 0x02, 0xf2, 0x96, 0xbd, - 0xed, 0xd0, 0xe5, 0x8a, 0x41, 0x7f, 0x9b, 0xe0, 0x63, 0xbc, 0x6d, 0x80, 0x33, 0x0a, 0xde, 0x6e, - 0x26, 0xc8, 0x45, 0xf6, 0xab, 0x16, 0xef, 0xc8, 0x83, 0x85, 0x80, 0x89, 0x9a, 0xdd, 0x85, 0xf7, - 0xb3, 0xdb, 0xa0, 0x3f, 0x93, 0x17, 0x0d, 0x30, 0x34, 0x58, 0x1f, 0x4c, 0x2a, 0x46, 0xa4, 0x6d, - 0x00, 0x3a, 0xa6, 0x0f, 0x77, 0x1c, 0xd7, 0x0a, 0xd7, 0x22, 0x1e, 0x9f, 0x86, 0x5a, 0x85, 0x7c, - 0x7d, 0xc5, 0x60, 0xe8, 0xa8, 0x77, 0x82, 0x39, 0x18, 0x46, 0x74, 0x0c, 0xb6, 0x49, 0x13, 0xf1, - 0x62, 0xf3, 0x6b, 0x7f, 0x24, 0x14, 0xc7, 0x48, 0xa4, 0x9a, 0xe9, 0x30, 0xdb, 0x1a, 0xaf, 0xeb, - 0xd9, 0x6c, 0xac, 0x97, 0x8d, 0xd6, 0x5a, 0xb9, 0x5e, 0xaf, 0x35, 0x56, 0xc3, 0x80, 0xc5, 0x2a, - 0x58, 0xac, 0x36, 0xcf, 0x37, 0x98, 0x88, 0xd2, 0x79, 0x6d, 0x03, 0x94, 0x02, 0x79, 0x0d, 0x3b, - 0x45, 0xc5, 0xca, 0x8c, 0x9e, 0xa2, 0x62, 0x92, 0x90, 0x69, 0x68, 0x75, 0x42, 0xd7, 0x7a, 0xfc, - 0x5f, 0xfb, 0x2d, 0x13, 0x14, 0xb0, 0x3f, 0x8b, 0xf6, 0x2e, 0x3c, 0x2f, 0xee, 0xf7, 0xcc, 0x0e, - 0xd4, 0xf6, 0x52, 0xac, 0x84, 0x07, 0x77, 0xed, 0x4a, 0x07, 0xee, 0xda, 0xc5, 0x7f, 0xe9, 0x88, - 0x71, 0x72, 0x98, 0x0f, 0x8d, 0x41, 0xb2, 0xf0, 0x21, 0x7f, 0x12, 0x3d, 0x9b, 0x88, 0xeb, 0x0d, - 0x65, 0x33, 0x46, 0x25, 0xe3, 0x79, 0xca, 0xe2, 0x12, 0x95, 0x24, 0x8e, 0xb2, 0x6f, 0xf1, 0x5f, - 0xc9, 0x83, 0x42, 0xab, 0xdf, 0xb3, 0x7c, 0xed, 0x17, 0xa4, 0x89, 0x60, 0x46, 0xee, 0x47, 0x96, - 0x47, 0xde, 0x8f, 0x1c, 0xf9, 0x4b, 0xe6, 0x05, 0xfc, 0x25, 0xdb, 0xf0, 0x7e, 0x9f, 0xf7, 0x97, - 0xbc, 0x8d, 0x4e, 0xdb, 0x88, 0xb7, 0xe5, 0x23, 0x86, 0x88, 0x14, 0x57, 0x6b, 0xc8, 0x6d, 0x16, - 0x67, 0x1f, 0x4b, 0x83, 0xea, 0x03, 0x50, 0x5c, 0x6e, 0xb6, 0xdb, 0xcd, 0x75, 0xe5, 0x18, 0x9e, - 0x7e, 0x35, 0x37, 0x48, 0x88, 0xe3, 0x5a, 0xa3, 0xa1, 0x1b, 0xdc, 0x8c, 0x8b, 0xbf, 0x2c, 0x33, - 0x71, 0x82, 0xc5, 0x97, 0x9d, 0xa5, 0x7a, 0x89, 0x2d, 0x82, 0xc7, 0xf3, 0x93, 0xbd, 0x72, 0xfd, - 0x9c, 0x0c, 0x0a, 0xeb, 0xd0, 0xdd, 0x81, 0xda, 0x33, 0x52, 0x38, 0xd8, 0x6d, 0x5b, 0xae, 0x47, - 0x2e, 0x45, 0x88, 0x1c, 0xec, 0xd8, 0x34, 0xf5, 0x7a, 0xb0, 0xe0, 0xc1, 0x8e, 0x63, 0x77, 0x83, - 0x4c, 0xa4, 0x3f, 0xe2, 0x13, 0xb5, 0x97, 0xa5, 0x84, 0x0c, 0x33, 0x3a, 0x11, 0x2f, 0xb9, 0x34, - 0xc0, 0x0c, 0x2b, 0x35, 0x7b, 0x60, 0xbe, 0x2d, 0xa3, 0x8f, 0xfa, 0x57, 0xb4, 0x97, 0x09, 0x7b, - 0x3e, 0xde, 0x0c, 0x8a, 0x17, 0x82, 0x7b, 0xd1, 0xe4, 0xd8, 0xfe, 0x98, 0xe6, 0x51, 0x97, 0xc1, - 0x09, 0x0f, 0xf6, 0x60, 0xc7, 0x87, 0x5d, 0xd4, 0x74, 0x8d, 0x91, 0x9d, 0xc2, 0xc1, 0xec, 0xda, - 0xef, 0xb1, 0x00, 0xde, 0xc1, 0x03, 0x78, 0xc3, 0x10, 0x51, 0xa2, 0x0a, 0xc5, 0xcf, 0x4d, 0x50, - 0x35, 0x5a, 0x3d, 0x27, 0x34, 0x7c, 0x83, 0x67, 0xf4, 0x6e, 0xd7, 0xdf, 0xeb, 0xe1, 0x77, 0xf4, - 0x68, 0x70, 0xf0, 0xac, 0x2e, 0x81, 0x19, 0xd3, 0xbe, 0x82, 0x5f, 0xe5, 0x13, 0x6a, 0x1d, 0x64, - 0xd2, 0x5e, 0x19, 0x22, 0x7f, 0x17, 0x87, 0xfc, 0xa3, 0xc4, 0xd8, 0xcd, 0x1e, 0xf8, 0x1f, 0x9d, - 0x01, 0x85, 0x0d, 0xd3, 0xf3, 0xa1, 0xf6, 0xbf, 0x65, 0x51, 0xe4, 0x6f, 0x00, 0x8b, 0xdb, 0x4e, - 0x67, 0xdf, 0x83, 0x5d, 0xbe, 0x51, 0x0e, 0xa4, 0x4e, 0x02, 0x73, 0x1c, 0x98, 0x9d, 0x26, 0x52, - 0xb2, 0x81, 0x0b, 0xec, 0x81, 0x74, 0x7c, 0xf5, 0xa2, 0xb7, 0x61, 0xba, 0x7e, 0x73, 0x1b, 0xa7, - 0x85, 0x57, 0x2f, 0xb2, 0x89, 0x1c, 0xf4, 0xc5, 0x04, 0xe8, 0x67, 0xe2, 0xa1, 0x2f, 0x09, 0x40, - 0xaf, 0x96, 0x41, 0x69, 0xdb, 0xea, 0x41, 0xfc, 0xc1, 0x2c, 0xfe, 0x60, 0xd8, 0x98, 0x84, 0x65, - 0x1f, 0x8e, 0x49, 0x2b, 0x56, 0x0f, 0x1a, 0xe1, 0x67, 0xc1, 0x44, 0x06, 0x44, 0x13, 0x99, 0x3a, - 0x39, 0x09, 0x87, 0x0c, 0x2f, 0xdb, 0xdc, 0x83, 0xc1, 0xc6, 0xb7, 0x4d, 0x8f, 0xa5, 0x77, 0x4d, - 0xdf, 0xc4, 0x60, 0xcc, 0x1b, 0xf8, 0x3f, 0xef, 0x93, 0x2d, 0x0f, 0xfa, 0x64, 0x3f, 0x57, 0x4e, - 0xd7, 0x23, 0x06, 0xcc, 0xc6, 0xb4, 0xa8, 0x0b, 0x01, 0x40, 0xc4, 0x52, 0x0c, 0x9f, 0x11, 0x30, - 0x1d, 0xd3, 0x85, 0xfe, 0x06, 0xeb, 0x05, 0x5d, 0x30, 0xf8, 0x44, 0x7c, 0x08, 0xc7, 0x6b, 0x99, - 0x7b, 0xe4, 0x6a, 0xc5, 0x0a, 0x7a, 0x47, 0x0f, 0x57, 0x1c, 0x48, 0x8f, 0xfa, 0xdf, 0xc2, 0xa4, - 0xfb, 0xdf, 0x61, 0x75, 0xcc, 0xbe, 0x19, 0xbe, 0x26, 0x0f, 0xe4, 0xca, 0xbe, 0xff, 0x80, 0xee, - 0x7e, 0xbf, 0x27, 0xec, 0x63, 0x4e, 0xfb, 0xb3, 0x7d, 0xff, 0x68, 0x7b, 0xdf, 0x94, 0x5a, 0x22, - 0xe6, 0xcb, 0x1e, 0x57, 0xb7, 0xec, 0x75, 0xe4, 0x6d, 0x72, 0x78, 0x34, 0xea, 0x39, 0xb9, 0xc3, - 0x9b, 0xe6, 0x1a, 0xe9, 0x9f, 0x98, 0x9e, 0x21, 0x7c, 0x0e, 0x3a, 0x9e, 0x3c, 0x77, 0xfb, 0x03, - 0x76, 0x6d, 0xc5, 0xa2, 0x9c, 0x37, 0xc8, 0x83, 0xf6, 0x72, 0xe1, 0x03, 0xa3, 0x44, 0x6c, 0x89, - 0xc7, 0x78, 0xd2, 0xd9, 0x54, 0xaf, 0x16, 0x3a, 0x36, 0x9a, 0x50, 0x6c, 0xf6, 0x80, 0xfd, 0x1d, - 0x7b, 0x4c, 0xa7, 0x7c, 0x68, 0xc4, 0xb4, 0x57, 0x09, 0x2f, 0xe8, 0x93, 0x6a, 0x8f, 0xd8, 0xab, - 0x4f, 0x27, 0x6f, 0x31, 0x47, 0xb1, 0xc4, 0x82, 0xa7, 0x70, 0x57, 0xb4, 0x0c, 0x8a, 0x64, 0xe1, - 0x57, 0x7b, 0xb3, 0x70, 0x13, 0x41, 0xbd, 0x11, 0x7f, 0x7c, 0x27, 0x7c, 0x4e, 0xb3, 0xe6, 0xc0, - 0x1d, 0xf3, 0xc9, 0xa7, 0x3a, 0xe6, 0xc3, 0x47, 0x60, 0x11, 0x68, 0x47, 0xa4, 0x8e, 0x19, 0x4f, - 0x27, 0xd3, 0xb4, 0xb0, 0xa1, 0x0c, 0x65, 0x8f, 0xf7, 0xf3, 0x0b, 0x60, 0x9e, 0x14, 0x4d, 0xce, - 0x17, 0x6a, 0xef, 0x91, 0xbe, 0x7f, 0x50, 0x57, 0x1b, 0x60, 0xfe, 0x32, 0x66, 0x9b, 0x84, 0x97, - 0xa3, 0x2b, 0x17, 0x37, 0x25, 0xae, 0x7b, 0x90, 0x7a, 0x06, 0xb7, 0x46, 0x73, 0xdf, 0x23, 0x19, - 0x93, 0x0d, 0x16, 0x72, 0x78, 0xa2, 0x88, 0x8d, 0x2c, 0x36, 0x49, 0x3d, 0x05, 0x8a, 0x97, 0x2c, - 0x78, 0xb9, 0xd6, 0xa5, 0xd6, 0x2d, 0x7d, 0xd2, 0x7e, 0x5d, 0xd8, 0x67, 0x92, 0x85, 0x9b, 0xf2, - 0x92, 0xad, 0x16, 0x8a, 0x79, 0x4e, 0x8e, 0x64, 0x6b, 0x0a, 0xd1, 0x80, 0x24, 0x72, 0x4f, 0x3d, - 0x0d, 0xe5, 0x5f, 0x49, 0xa1, 0x88, 0x71, 0x86, 0x33, 0x1f, 0x84, 0x2f, 0xf1, 0xac, 0x39, 0x11, - 0x40, 0x54, 0xfe, 0x44, 0xfa, 0x7c, 0xb1, 0xc8, 0x70, 0x23, 0x8a, 0xce, 0x5e, 0xf2, 0xaf, 0x93, - 0xc1, 0x6c, 0x0b, 0xfa, 0x2b, 0x16, 0xec, 0x75, 0x3d, 0xcd, 0x3d, 0xbc, 0x69, 0x74, 0x0b, 0x28, - 0x6e, 0x63, 0x62, 0xa3, 0x36, 0x27, 0x69, 0x36, 0xed, 0x35, 0x92, 0xa8, 0x1f, 0x10, 0x5d, 0x7d, - 0x0b, 0xb8, 0x9d, 0x08, 0x4c, 0x62, 0xa7, 0xe9, 0x92, 0x4b, 0x9e, 0xc2, 0x55, 0x49, 0x32, 0x98, - 0xc7, 0xdb, 0xff, 0xd0, 0x2f, 0xf7, 0xac, 0x1d, 0x9b, 0xbd, 0x5d, 0x7d, 0xec, 0x16, 0xa2, 0x3e, - 0x06, 0x14, 0x4c, 0x44, 0x8d, 0xba, 0xbb, 0x69, 0x43, 0x3b, 0x4f, 0x5c, 0x9e, 0x41, 0x32, 0xa6, - 0xb8, 0x98, 0x24, 0x52, 0xec, 0x80, 0xe7, 0x29, 0x5e, 0x4c, 0x32, 0xb2, 0xf0, 0xec, 0x11, 0xfb, - 0x9a, 0x0c, 0x4e, 0x52, 0x06, 0xce, 0x41, 0xd7, 0xb7, 0x3a, 0x66, 0x8f, 0x20, 0xf7, 0xc2, 0xdc, - 0x24, 0xa0, 0x5b, 0x03, 0x0b, 0x97, 0x58, 0xb2, 0x14, 0xc2, 0xb3, 0x43, 0x21, 0xe4, 0x18, 0x30, - 0xf8, 0x0f, 0x53, 0x5c, 0xf0, 0xc0, 0x49, 0x95, 0xa3, 0x39, 0xc5, 0x0b, 0x1e, 0x84, 0x99, 0xc8, - 0x1e, 0xe2, 0x97, 0xd0, 0xa0, 0x9a, 0x51, 0xf7, 0xf9, 0x45, 0x61, 0x6c, 0x37, 0xc1, 0x1c, 0xc6, - 0x92, 0x7c, 0x48, 0x97, 0x21, 0x12, 0x94, 0x38, 0xec, 0x77, 0xe8, 0x45, 0xf7, 0xe1, 0xb7, 0x06, - 0x4b, 0x47, 0x3b, 0x0f, 0x40, 0xf4, 0x8a, 0xed, 0xa4, 0x73, 0x71, 0x9d, 0xb4, 0x24, 0xd6, 0x49, - 0xbf, 0x49, 0x38, 0xcc, 0xe1, 0x70, 0xb6, 0x0f, 0xaf, 0x1e, 0x62, 0x01, 0xee, 0x46, 0x97, 0x9e, - 0xbd, 0x5e, 0xbc, 0x92, 0xea, 0x45, 0x75, 0xbf, 0xdf, 0xb3, 0x3a, 0x68, 0x3e, 0xf5, 0xc9, 0x89, - 0xcc, 0xa7, 0xd8, 0xfe, 0x40, 0x1e, 0xe8, 0x0f, 0x0e, 0x61, 0x49, 0xdf, 0x08, 0x8e, 0x93, 0x22, - 0x2a, 0x21, 0x5b, 0x05, 0x12, 0xc4, 0x6d, 0x20, 0x99, 0x8f, 0xda, 0x2e, 0xa8, 0x04, 0xa1, 0x10, - 0xc6, 0x58, 0xfa, 0x4c, 0x67, 0xec, 0xa6, 0x55, 0x90, 0x38, 0xce, 0xa6, 0x70, 0x24, 0x2b, 0x4f, - 0xac, 0xdd, 0xcd, 0x7e, 0x17, 0x69, 0xc7, 0x97, 0xf3, 0x93, 0x18, 0x11, 0x9e, 0x42, 0x3d, 0x4d, - 0xe5, 0xd8, 0x25, 0x8d, 0xa8, 0xc8, 0xb0, 0x1f, 0x69, 0xc3, 0xfb, 0xfd, 0xb5, 0x63, 0xc4, 0x2f, - 0x55, 0xbd, 0x09, 0x1c, 0xbf, 0x60, 0x76, 0x2e, 0xee, 0xb8, 0xce, 0x3e, 0xbe, 0xb5, 0xdd, 0xa1, - 0xd7, 0xbf, 0xaf, 0x1d, 0x33, 0x06, 0x5f, 0xa8, 0xb7, 0x06, 0xa6, 0x43, 0x61, 0x94, 0xe9, 0xb0, - 0x76, 0x8c, 0x1a, 0x0f, 0xea, 0x63, 0xc3, 0x4e, 0xa7, 0x98, 0xd8, 0xe9, 0xac, 0x1d, 0x0b, 0xba, - 0x1d, 0xb5, 0x0a, 0x4a, 0x5d, 0xeb, 0x12, 0xde, 0xaa, 0xc6, 0xb3, 0xae, 0x51, 0x41, 0x87, 0xaa, - 0xd6, 0x25, 0xb2, 0xb1, 0xbd, 0x76, 0xcc, 0x08, 0xbf, 0x54, 0x57, 0xc1, 0x2c, 0xde, 0x16, 0xc0, - 0x64, 0x4a, 0xa9, 0x02, 0x0a, 0xad, 0x1d, 0x33, 0xa2, 0x6f, 0x91, 0xf5, 0x91, 0xc7, 0xe7, 0xae, - 0xef, 0x0a, 0xb6, 0xdb, 0x73, 0xa9, 0xb6, 0xdb, 0x91, 0x2c, 0xc8, 0x86, 0xfb, 0x29, 0x50, 0xe8, - 0x60, 0x09, 0x4b, 0x54, 0xc2, 0xe4, 0x51, 0xbd, 0x03, 0xe4, 0xf7, 0x4c, 0x37, 0x98, 0x3c, 0xdf, - 0x30, 0x9a, 0xee, 0xba, 0xe9, 0x5e, 0x44, 0x08, 0xa2, 0xaf, 0x96, 0x67, 0x40, 0x01, 0x0b, 0x2e, - 0xfc, 0xa3, 0xbd, 0x2d, 0x4f, 0xcc, 0x90, 0x8a, 0x63, 0xa3, 0x61, 0xbf, 0xed, 0x04, 0x87, 0xd3, - 0x7f, 0x3d, 0x37, 0x19, 0x0b, 0xf2, 0x2a, 0xe6, 0x3a, 0x15, 0xdb, 0x7a, 0xc6, 0x3e, 0xbc, 0x07, - 0x5e, 0xa1, 0x4b, 0xa2, 0xc3, 0x5e, 0xa9, 0x67, 0x00, 0xf0, 0xe9, 0x49, 0xbd, 0x30, 0x88, 0x29, - 0x93, 0x12, 0x2d, 0x1f, 0x14, 0x46, 0x3b, 0xaa, 0xfc, 0xde, 0x18, 0xa6, 0xcb, 0xa0, 0x20, 0xe2, - 0x67, 0xe0, 0x3d, 0xcb, 0x66, 0xea, 0x1c, 0x3c, 0xa6, 0xec, 0x94, 0xd2, 0x1a, 0x35, 0x23, 0xd8, - 0xcb, 0xbe, 0x6f, 0x7a, 0x4b, 0x9e, 0xdc, 0x28, 0x41, 0x4e, 0x40, 0xeb, 0xf7, 0x5b, 0x5e, 0x74, - 0x7f, 0xb3, 0xf6, 0xb9, 0x89, 0x28, 0xcd, 0x90, 0x01, 0x47, 0x1e, 0x3a, 0xe0, 0x1c, 0x08, 0x10, - 0x94, 0x1f, 0x11, 0x20, 0xa8, 0x90, 0x6e, 0xe5, 0xf0, 0xa3, 0xac, 0xfe, 0x6c, 0xf0, 0xfa, 0x73, - 0x7b, 0x0c, 0x40, 0xc3, 0xe4, 0x32, 0x11, 0xfb, 0xe6, 0x5d, 0xa1, 0xa6, 0xb4, 0x38, 0x4d, 0xb9, - 0x6b, 0x7c, 0x46, 0xb2, 0xd7, 0x96, 0x0f, 0xe7, 0xc1, 0x55, 0x11, 0x33, 0x0d, 0x78, 0x99, 0x2a, - 0xca, 0x1f, 0x4e, 0x44, 0x51, 0xd2, 0x3b, 0x3a, 0x67, 0xad, 0x31, 0xbf, 0x2d, 0x7c, 0x6e, 0x7f, - 0x10, 0xa8, 0x50, 0x36, 0x31, 0xca, 0x72, 0x0a, 0x14, 0x49, 0x0f, 0x43, 0xa1, 0xa1, 0x4f, 0x29, - 0xbb, 0x1b, 0xb1, 0xd3, 0xfe, 0xa2, 0xbc, 0x4d, 0x41, 0x7f, 0xe8, 0xba, 0x46, 0x7b, 0xdf, 0xb5, - 0x6b, 0xb6, 0xef, 0x68, 0xff, 0x7d, 0x22, 0x8a, 0x13, 0x7a, 0xc3, 0xc9, 0xe3, 0x78, 0xc3, 0x8d, - 0xb5, 0xca, 0x11, 0xd4, 0xe0, 0x48, 0x56, 0x39, 0x62, 0x0a, 0xcf, 0x1e, 0xbf, 0x77, 0xca, 0xe0, - 0x14, 0x9d, 0x6c, 0x2d, 0xf3, 0x16, 0xa2, 0x76, 0xef, 0x24, 0x80, 0x3c, 0x19, 0x98, 0x49, 0xd4, - 0x8f, 0x1e, 0x3f, 0xf0, 0x51, 0x0a, 0x12, 0x6f, 0x0c, 0xe5, 0xa6, 0x83, 0x03, 0x1c, 0x4e, 0x04, - 0x29, 0xb1, 0x8b, 0x42, 0x53, 0xb0, 0x91, 0x3d, 0x66, 0x2f, 0x96, 0x41, 0x91, 0xc4, 0x48, 0xd0, - 0x36, 0x33, 0x71, 0x98, 0xe0, 0xef, 0x67, 0x11, 0xd8, 0x91, 0x23, 0xdc, 0x64, 0x16, 0x3f, 0x22, - 0xcd, 0x5e, 0xdc, 0x50, 0x56, 0xa6, 0xe0, 0x42, 0x28, 0x81, 0xb9, 0x16, 0xf4, 0x2b, 0xa6, 0xeb, - 0x5a, 0xe6, 0xce, 0xa4, 0x3c, 0xbe, 0x45, 0xbd, 0x87, 0xb5, 0xef, 0xe4, 0x44, 0xcf, 0xb2, 0x87, - 0x0b, 0xe1, 0x01, 0xab, 0x31, 0x51, 0xc0, 0x5f, 0x2f, 0x74, 0x5e, 0x7d, 0x14, 0xb5, 0x29, 0x78, - 0x6c, 0x4b, 0x60, 0x26, 0x88, 0x83, 0x71, 0x0b, 0x17, 0x1b, 0x65, 0xd7, 0xdf, 0x0b, 0x8e, 0xc1, - 0xe0, 0xff, 0x07, 0xe3, 0x2f, 0x68, 0xaf, 0x48, 0xe9, 0x28, 0x9f, 0x1c, 0xc4, 0x23, 0x5d, 0x1b, - 0x4b, 0xe3, 0x0e, 0x7f, 0x54, 0x61, 0x3b, 0x3e, 0x34, 0x43, 0x97, 0x23, 0xeb, 0xa6, 0x0f, 0xef, - 0xd7, 0xbe, 0x28, 0x83, 0x99, 0x16, 0xf4, 0xd1, 0x78, 0x8b, 0xd8, 0x3f, 0xb4, 0x86, 0xab, 0xcc, - 0x8a, 0x07, 0x3d, 0x5b, 0xab, 0xde, 0x0d, 0x66, 0xfb, 0xae, 0xd3, 0x81, 0x9e, 0x47, 0x57, 0x2f, - 0x58, 0x47, 0xb5, 0x61, 0xa3, 0x3f, 0x66, 0x6d, 0x69, 0x23, 0xf8, 0xc6, 0x88, 0x3e, 0x4f, 0x6b, - 0x06, 0x10, 0x4a, 0xb4, 0x82, 0xd3, 0x36, 0x03, 0x92, 0x0a, 0xcf, 0x1e, 0xe8, 0xdf, 0x97, 0xc1, - 0x7c, 0x0b, 0xfa, 0xa1, 0x14, 0x53, 0x6c, 0x72, 0xc4, 0xc3, 0xcb, 0x41, 0x29, 0x1f, 0x0e, 0xca, - 0x77, 0x0a, 0x5f, 0xbc, 0xcb, 0x4b, 0x33, 0x24, 0x36, 0x11, 0x3c, 0xdf, 0x22, 0x74, 0xdf, 0xae, - 0x18, 0x07, 0x53, 0x38, 0xbe, 0xf6, 0x08, 0x30, 0x8b, 0x79, 0xc1, 0x0d, 0xf6, 0x27, 0xf2, 0x51, - 0xe3, 0xfd, 0x52, 0x46, 0x8d, 0xf7, 0x4e, 0x50, 0xd8, 0x33, 0xdd, 0x8b, 0xc1, 0xe1, 0xdb, 0x47, - 0x8a, 0xad, 0x7e, 0x79, 0x06, 0xf9, 0x6a, 0xb8, 0x9f, 0x66, 0x21, 0x9d, 0x9f, 0xe6, 0xeb, 0xa5, - 0x54, 0x23, 0x21, 0x99, 0x3b, 0x4c, 0xb0, 0xc9, 0xa7, 0x18, 0x37, 0x13, 0xca, 0xce, 0x5e, 0x39, - 0x5e, 0x28, 0x83, 0x12, 0x1a, 0xb7, 0xb1, 0x3d, 0x7e, 0xfe, 0xf0, 0xea, 0x30, 0xdc, 0xd0, 0x4f, - 0xd9, 0x03, 0x07, 0x12, 0x99, 0x9c, 0x79, 0x9f, 0xa2, 0x07, 0x4e, 0x2a, 0x3c, 0x7b, 0x3c, 0xde, - 0x4d, 0xf0, 0xc0, 0xed, 0x41, 0x7b, 0x83, 0x0c, 0xe4, 0x55, 0xe8, 0x4f, 0xdb, 0x8a, 0x7c, 0xbb, - 0x70, 0x78, 0x51, 0x4e, 0x60, 0x98, 0xe7, 0xa5, 0x55, 0x38, 0x99, 0x06, 0x24, 0x16, 0x57, 0x54, - 0x88, 0x81, 0xec, 0x51, 0x7b, 0x3f, 0x41, 0x8d, 0x6c, 0x2e, 0xfc, 0xc8, 0x04, 0x7a, 0xd5, 0xe9, - 0x2e, 0x7c, 0x04, 0x02, 0xc4, 0x34, 0x8e, 0xaa, 0xbd, 0x0d, 0x2b, 0x3c, 0x7b, 0xe4, 0x5e, 0x2a, - 0xe3, 0x4b, 0xcc, 0x2a, 0xbb, 0xb0, 0x73, 0x11, 0x76, 0xd9, 0xcb, 0xb2, 0xc7, 0x85, 0xee, 0x34, - 0x98, 0xe9, 0x10, 0x6a, 0x18, 0xbc, 0x92, 0x11, 0x3c, 0xf2, 0x37, 0x0b, 0x25, 0xde, 0x9d, 0xc5, - 0x77, 0x44, 0xe4, 0xf3, 0x89, 0xe0, 0x22, 0x76, 0xe1, 0x95, 0x40, 0xf1, 0x53, 0x30, 0x5b, 0xc8, - 0x2c, 0xa3, 0xd6, 0x71, 0x6c, 0xed, 0xbf, 0x1e, 0x1e, 0x96, 0x6b, 0xc1, 0xac, 0xd5, 0x71, 0x6c, - 0x1c, 0x02, 0x2e, 0x38, 0x04, 0x14, 0x26, 0x04, 0x6f, 0xf5, 0x3d, 0xe7, 0x3e, 0x8b, 0xee, 0x9a, - 0x47, 0x09, 0xe3, 0x1a, 0x13, 0x88, 0xf5, 0xa3, 0x32, 0x26, 0x86, 0x94, 0x9d, 0x3d, 0x64, 0x9f, - 0x8a, 0xbc, 0xdb, 0x48, 0x57, 0xf8, 0x80, 0x58, 0x05, 0x1e, 0x67, 0x38, 0x63, 0x6b, 0x71, 0x24, - 0xc3, 0x59, 0x02, 0x03, 0x53, 0xb8, 0x89, 0x30, 0xc2, 0x31, 0xf3, 0x35, 0xe0, 0x43, 0xa0, 0x33, - 0x39, 0xf3, 0x70, 0x4c, 0x74, 0x8e, 0xc6, 0x44, 0xfc, 0x08, 0x0d, 0x4f, 0x4f, 0x2d, 0x1e, 0xed, - 0xbf, 0x4d, 0x02, 0x9c, 0xdb, 0xc7, 0xf1, 0x57, 0x20, 0xde, 0x0a, 0xda, 0x5b, 0x25, 0xd1, 0x10, - 0x28, 0x07, 0x24, 0x88, 0xa8, 0x4c, 0x04, 0xc1, 0x37, 0x09, 0xc5, 0x26, 0x11, 0x29, 0x3f, 0x7b, - 0x00, 0x5f, 0x20, 0x83, 0x45, 0xec, 0x23, 0xd0, 0x83, 0xa6, 0x4b, 0x3a, 0xca, 0x89, 0x38, 0xca, - 0xbf, 0x5b, 0x38, 0xc0, 0x0f, 0x2f, 0x87, 0x88, 0x8f, 0x89, 0x40, 0x21, 0x16, 0xdd, 0x47, 0x90, - 0x85, 0xa9, 0x6c, 0xa3, 0x28, 0x21, 0x0b, 0x54, 0xc5, 0x27, 0x83, 0x47, 0x4a, 0x8f, 0x5c, 0x5e, - 0x18, 0x41, 0x63, 0x9b, 0xb2, 0x47, 0xae, 0x08, 0x13, 0xd9, 0x63, 0xf2, 0x86, 0xc7, 0xd0, 0x05, - 0xe7, 0xb6, 0x79, 0xa1, 0x07, 0xb5, 0x57, 0xe5, 0xc3, 0x13, 0x6d, 0xbf, 0x3f, 0x11, 0x0f, 0xcc, - 0x43, 0x5c, 0x46, 0xa5, 0x82, 0xbc, 0xeb, 0x5c, 0x26, 0x4b, 0x5b, 0x0b, 0x06, 0xfe, 0x4f, 0xe2, - 0x59, 0xf6, 0xf6, 0xf7, 0x6c, 0x72, 0x32, 0x74, 0xc1, 0x08, 0x1e, 0xd5, 0xeb, 0xc1, 0xc2, 0x65, - 0xcb, 0xdf, 0x5d, 0x83, 0x66, 0x17, 0xba, 0x86, 0x73, 0x19, 0x7b, 0xcc, 0x95, 0x0c, 0x3e, 0x91, - 0xf7, 0x5f, 0x11, 0xb0, 0x2f, 0x91, 0x50, 0xa6, 0x73, 0xfc, 0x2d, 0x8d, 0xe5, 0x19, 0xcf, 0x55, - 0xf6, 0x0a, 0xf3, 0x01, 0x19, 0xcc, 0x1a, 0xce, 0x65, 0xaa, 0x24, 0xff, 0xcf, 0xd1, 0xea, 0x48, - 0xea, 0x89, 0x1e, 0x96, 0x5c, 0xc8, 0xfe, 0xd4, 0x27, 0x7a, 0x89, 0xc5, 0x4f, 0xe5, 0xe4, 0xd2, - 0xbc, 0xe1, 0x5c, 0x6e, 0x41, 0x9f, 0xb4, 0x08, 0x6d, 0x6b, 0x42, 0x4e, 0xd6, 0x96, 0x47, 0x08, - 0xd2, 0x79, 0x78, 0xf8, 0x9c, 0x76, 0x17, 0x21, 0x14, 0x50, 0xc8, 0xe2, 0xb4, 0x77, 0x11, 0x46, - 0x72, 0x30, 0x85, 0x18, 0x29, 0x32, 0x98, 0x33, 0x9c, 0xcb, 0x68, 0x68, 0x58, 0xb1, 0x7a, 0xbd, - 0xc9, 0x8c, 0x90, 0x69, 0x8d, 0xff, 0x40, 0x0c, 0x01, 0x17, 0x53, 0x37, 0xfe, 0x47, 0x30, 0x90, - 0x3d, 0x0c, 0xcf, 0x25, 0x8d, 0x25, 0x18, 0xa1, 0xed, 0xc9, 0xe0, 0x30, 0x6e, 0x83, 0x08, 0xd9, - 0x38, 0xb2, 0x06, 0x11, 0xc7, 0xc1, 0x54, 0x76, 0x4e, 0x16, 0x2b, 0x78, 0x98, 0x9f, 0x6c, 0x9b, - 0x78, 0x6f, 0x3a, 0xd7, 0x44, 0x3a, 0xec, 0x72, 0x8c, 0x4c, 0x04, 0x8d, 0x14, 0x2e, 0x88, 0x02, - 0x3c, 0x64, 0x8f, 0xc7, 0xc7, 0x65, 0x30, 0x4f, 0x58, 0x78, 0x80, 0x58, 0x01, 0x63, 0x35, 0x2a, - 0xb6, 0x06, 0x47, 0xd3, 0xa8, 0x12, 0x38, 0x98, 0xca, 0x7d, 0xfe, 0xc8, 0x8e, 0x1b, 0xe3, 0xf8, - 0x78, 0x1c, 0x82, 0x63, 0x1b, 0x63, 0x13, 0x3c, 0x42, 0x3e, 0x8e, 0x31, 0x76, 0x44, 0xc7, 0xc8, - 0x9f, 0x1b, 0xb6, 0xa2, 0x49, 0x62, 0x70, 0x88, 0xa6, 0x30, 0x41, 0x18, 0xc6, 0x6c, 0x0a, 0x47, - 0x84, 0xc4, 0xd7, 0x65, 0x00, 0x08, 0x03, 0xeb, 0xce, 0x25, 0x7c, 0x91, 0xe6, 0x04, 0xba, 0xb3, - 0x41, 0xb7, 0x7a, 0x79, 0x84, 0x5b, 0x7d, 0xca, 0x10, 0x2e, 0x69, 0x57, 0x02, 0x19, 0x29, 0xa3, - 0x4a, 0x4e, 0x7d, 0x25, 0x30, 0xb9, 0xfc, 0xec, 0x31, 0xfe, 0x2a, 0xb1, 0xe6, 0xa2, 0x03, 0xa6, - 0x3f, 0x3f, 0x11, 0x94, 0x99, 0xd9, 0xbf, 0xcc, 0xcf, 0xfe, 0x0f, 0x81, 0xed, 0xb8, 0x36, 0xe2, - 0xa8, 0x83, 0xa3, 0xd9, 0xdb, 0x88, 0x47, 0x77, 0x40, 0xf4, 0x47, 0xf2, 0xe0, 0x38, 0xed, 0x44, - 0xbe, 0x1f, 0x20, 0x4e, 0x79, 0x0e, 0x8f, 0xeb, 0x24, 0x47, 0xa0, 0x3c, 0xa9, 0x05, 0xa9, 0x34, - 0x4b, 0x99, 0x02, 0xec, 0x4d, 0x65, 0x75, 0xa3, 0xa8, 0xdf, 0xdf, 0x37, 0xed, 0xae, 0x78, 0xb8, - 0xdf, 0x11, 0xc0, 0x07, 0x6b, 0x8d, 0x32, 0xbf, 0xd6, 0x38, 0x64, 0x65, 0x32, 0xf5, 0xce, 0x35, - 0x16, 0x19, 0x61, 0x77, 0xea, 0x3b, 0xd7, 0xf1, 0x65, 0x67, 0x8f, 0xd2, 0x7b, 0x65, 0x90, 0x6f, - 0x39, 0xae, 0xaf, 0x3d, 0x2f, 0x4d, 0xeb, 0x24, 0x92, 0x8f, 0x40, 0x0a, 0x9e, 0xd5, 0x0a, 0xc8, - 0xa3, 0xca, 0xd1, 0x19, 0xc3, 0x2d, 0xc9, 0x47, 0x9d, 0x4d, 0xdf, 0xc4, 0x5e, 0xdd, 0xa8, 0xfc, - 0xa5, 0xf6, 0x95, 0x3e, 0x34, 0xf0, 0xc7, 0x69, 0xe3, 0xe9, 0x10, 0xf9, 0xb5, 0xe2, 0x0f, 0x60, - 0x64, 0x16, 0x4f, 0x27, 0xb6, 0xe4, 0xec, 0x71, 0x7b, 0xed, 0x71, 0xea, 0xdb, 0xba, 0x62, 0xf5, - 0xa0, 0xf6, 0x3c, 0xe2, 0x32, 0xd2, 0x30, 0xf7, 0xa0, 0xf8, 0x91, 0x98, 0x44, 0xd7, 0x56, 0x1c, - 0x5f, 0x56, 0x8e, 0xe2, 0xcb, 0xa6, 0x6d, 0x50, 0xe4, 0x00, 0x3a, 0x61, 0x69, 0xda, 0x0d, 0x2a, - 0xa1, 0xec, 0xa9, 0xc4, 0xe9, 0x3c, 0xd1, 0x82, 0x3e, 0x31, 0x2a, 0x9b, 0xc1, 0x15, 0x49, 0x4f, - 0x9f, 0x48, 0xc4, 0xce, 0xf0, 0x42, 0x1d, 0x79, 0xe0, 0x06, 0xa6, 0x0f, 0xb0, 0xe0, 0xac, 0xf3, - 0xe0, 0xfc, 0x50, 0xbc, 0x80, 0x78, 0x26, 0x27, 0x02, 0xd3, 0xdb, 0x43, 0x98, 0x36, 0x38, 0x98, - 0xee, 0x18, 0x93, 0x8b, 0xec, 0x01, 0xfb, 0xa9, 0x02, 0x38, 0x4e, 0x26, 0xfd, 0x65, 0xbb, 0x4b, - 0x23, 0xac, 0xbe, 0x59, 0x3a, 0xe2, 0xcd, 0xb6, 0x83, 0x21, 0x58, 0xb9, 0x58, 0xce, 0x85, 0x81, - 0x58, 0xce, 0xea, 0x32, 0x09, 0xe7, 0x8a, 0x3a, 0x51, 0xbc, 0xd3, 0x36, 0x2a, 0xcc, 0x04, 0x96, - 0x3d, 0xee, 0x72, 0xc3, 0xef, 0xf8, 0x7b, 0x44, 0x67, 0xc4, 0xef, 0x11, 0xfd, 0xdd, 0x74, 0xeb, - 0x76, 0xb8, 0xe8, 0x01, 0x81, 0x67, 0x6c, 0x3b, 0xa5, 0x58, 0xd1, 0x13, 0xe0, 0xee, 0x3f, 0x86, - 0x3b, 0x59, 0x14, 0x41, 0x64, 0x4c, 0x77, 0x32, 0x4c, 0xe0, 0x28, 0xdd, 0xc9, 0x46, 0x31, 0x90, - 0x3d, 0x8e, 0xbf, 0x5b, 0xa0, 0xbb, 0xf9, 0xb8, 0xdd, 0x68, 0x7f, 0x22, 0x65, 0x3e, 0x4a, 0x7f, - 0x37, 0x97, 0xca, 0xff, 0x19, 0xf3, 0x95, 0x3c, 0x4c, 0xa7, 0xf1, 0x68, 0x4e, 0x22, 0x37, 0x85, - 0x75, 0x23, 0x09, 0xfb, 0xa2, 0x9f, 0xb7, 0xba, 0xfe, 0xee, 0x84, 0x4e, 0x74, 0x5c, 0x46, 0xb4, - 0x68, 0xbc, 0x7a, 0xf2, 0xa0, 0xfd, 0x4b, 0x2e, 0x55, 0x08, 0xa9, 0x50, 0x24, 0x98, 0xad, 0x18, - 0x11, 0xa7, 0x08, 0xfc, 0x94, 0x48, 0x6f, 0x8a, 0x1a, 0x7d, 0xce, 0xea, 0x42, 0xe7, 0x01, 0xa8, - 0xd1, 0x98, 0xaf, 0xc9, 0x69, 0x74, 0x12, 0xb9, 0xff, 0xa0, 0x1a, 0x1d, 0x8a, 0x64, 0x42, 0x1a, - 0x9d, 0x48, 0x2f, 0x7b, 0x19, 0xbf, 0x62, 0x9e, 0x4e, 0xa4, 0xea, 0x96, 0x7d, 0x51, 0xfb, 0xc7, - 0x22, 0x50, 0x82, 0x38, 0xc2, 0xfe, 0x2e, 0x8d, 0x05, 0xf3, 0x61, 0xe1, 0xbb, 0x51, 0xc6, 0x88, - 0xf7, 0xc2, 0x87, 0x93, 0x2a, 0x1c, 0x08, 0x27, 0x55, 0x06, 0x0b, 0x96, 0xed, 0x43, 0xd7, 0x36, - 0x7b, 0x2b, 0x3d, 0x73, 0xc7, 0x3b, 0x3d, 0x33, 0xf4, 0xf2, 0xba, 0x1a, 0x93, 0xc7, 0xe0, 0xbf, - 0x60, 0x2f, 0x10, 0x2d, 0xf1, 0x17, 0x88, 0xc6, 0x44, 0xbf, 0x9a, 0x8d, 0x8f, 0x7e, 0x15, 0x46, - 0xb7, 0x02, 0xa3, 0x83, 0x63, 0x8b, 0xda, 0xc6, 0x29, 0xc3, 0xfd, 0xdd, 0x22, 0x18, 0x85, 0x2d, - 0x0c, 0xfd, 0xf8, 0x6a, 0x39, 0xd5, 0xea, 0x1e, 0x52, 0x84, 0xa5, 0x41, 0x25, 0x48, 0x6d, 0xa1, - 0xb2, 0x95, 0x97, 0x07, 0x2a, 0x1f, 0x9a, 0x3c, 0x79, 0x01, 0x93, 0x87, 0x55, 0xaa, 0x82, 0xe8, - 0x9d, 0xae, 0xe2, 0x8b, 0x85, 0x22, 0xb5, 0x9d, 0xc2, 0x69, 0xa4, 0x02, 0x38, 0x11, 0x44, 0xbb, - 0xed, 0xf7, 0xa1, 0xe9, 0x9a, 0x76, 0x07, 0x6a, 0x9f, 0x92, 0x26, 0x61, 0xf6, 0xae, 0x80, 0x92, - 0xd5, 0x71, 0xec, 0x96, 0xf5, 0xcc, 0xe0, 0x72, 0xb9, 0xe4, 0x20, 0xeb, 0x58, 0x22, 0x35, 0xfa, - 0x85, 0x11, 0x7e, 0xab, 0xd6, 0xc0, 0x6c, 0xc7, 0x74, 0xbb, 0x24, 0x08, 0x5f, 0x61, 0xe0, 0x22, - 0xa7, 0x58, 0x42, 0x95, 0xe0, 0x13, 0x23, 0xfa, 0x5a, 0x6d, 0xf2, 0x42, 0x2c, 0x0e, 0x44, 0xf3, - 0x88, 0x25, 0x56, 0x8d, 0x3e, 0xe2, 0x64, 0x8e, 0xa4, 0xe3, 0xc2, 0x9e, 0x49, 0x2e, 0x1d, 0x9f, - 0x21, 0x77, 0x44, 0x87, 0x09, 0x69, 0x97, 0x07, 0x70, 0x51, 0x07, 0xd0, 0x98, 0xf6, 0xf2, 0x80, - 0x10, 0x17, 0xd9, 0x6b, 0xe6, 0xbb, 0x8a, 0x60, 0x81, 0xf4, 0x6a, 0x54, 0x9c, 0xda, 0x0b, 0x64, - 0x50, 0x6c, 0x41, 0xff, 0x1e, 0x78, 0x45, 0x6b, 0x1d, 0x7e, 0x4c, 0x56, 0x80, 0x7c, 0x31, 0x0c, - 0x38, 0x88, 0xfe, 0xa6, 0xdd, 0xb7, 0x0f, 0xf8, 0x5a, 0x22, 0x3c, 0x4d, 0x7b, 0xdf, 0x3e, 0xb9, - 0xf8, 0xec, 0xf1, 0xf9, 0x69, 0x19, 0xc8, 0xe5, 0x6e, 0x57, 0xeb, 0x1c, 0x1e, 0x8a, 0xeb, 0xc0, - 0x5c, 0xd0, 0x66, 0xa2, 0x18, 0x90, 0x6c, 0x52, 0xda, 0x45, 0xd0, 0x50, 0x36, 0xe5, 0xee, 0xd4, - 0x77, 0x15, 0x12, 0xca, 0xce, 0x1e, 0x94, 0x2f, 0xcd, 0xd0, 0x46, 0xb3, 0xec, 0x38, 0x17, 0xf1, - 0x51, 0x99, 0x5f, 0x96, 0x41, 0x61, 0x05, 0xfa, 0x9d, 0x5d, 0xcd, 0x9b, 0x48, 0x9b, 0x19, 0xb8, - 0xf7, 0x7c, 0x44, 0x50, 0xce, 0xb4, 0xd1, 0x9f, 0x03, 0xb6, 0x97, 0x30, 0xcb, 0xd3, 0x8e, 0xfe, - 0x9c, 0x58, 0xfa, 0x14, 0x0e, 0xc1, 0xe5, 0xc1, 0x62, 0xb8, 0x02, 0x46, 0x30, 0x7b, 0x47, 0xee, - 0x01, 0xb7, 0x1e, 0x3a, 0xc2, 0x6e, 0xd6, 0xfe, 0x30, 0x5d, 0x88, 0xb5, 0x50, 0xe6, 0x7c, 0xcd, - 0x33, 0x5e, 0x98, 0x4c, 0x11, 0x7c, 0x4d, 0x8c, 0xc1, 0x29, 0xac, 0x00, 0xc8, 0xa0, 0x84, 0x19, - 0xaa, 0x5a, 0x97, 0xb0, 0xeb, 0x21, 0xb7, 0x50, 0xf9, 0xac, 0x89, 0x2c, 0x54, 0xde, 0xc1, 0x2f, - 0x54, 0x0a, 0x46, 0x4c, 0x0e, 0xd6, 0x29, 0x53, 0xfa, 0xe2, 0xa0, 0xef, 0x27, 0xbe, 0x4c, 0x99, - 0xc2, 0x17, 0x67, 0x44, 0xf9, 0xd9, 0x23, 0xfa, 0xc6, 0xff, 0x4c, 0x3b, 0xeb, 0x60, 0x43, 0x56, - 0xfb, 0x1f, 0x27, 0x40, 0xfe, 0x1c, 0xfa, 0xf3, 0x0f, 0xd1, 0x8d, 0x5a, 0x2f, 0x9b, 0x40, 0x70, - 0x87, 0x27, 0x83, 0x3c, 0xa2, 0x4f, 0xa7, 0x3d, 0x37, 0x89, 0xed, 0x0e, 0x23, 0x46, 0x0c, 0xfc, - 0x9d, 0x7a, 0x0a, 0x14, 0x3d, 0x67, 0xdf, 0xed, 0x20, 0xf3, 0x1b, 0x69, 0x0c, 0x7d, 0x4a, 0x1b, - 0xd4, 0x94, 0x23, 0xbd, 0x34, 0x39, 0x97, 0x53, 0xe6, 0x82, 0x25, 0x99, 0xbb, 0x60, 0x29, 0xc5, - 0xfe, 0x83, 0x00, 0x6f, 0xd9, 0x6b, 0xc4, 0x9f, 0xe0, 0xbb, 0x06, 0xbb, 0x93, 0x82, 0x3d, 0x46, - 0x2c, 0x87, 0x55, 0x87, 0xb4, 0x0e, 0xe3, 0xbc, 0x68, 0xc3, 0x38, 0xf2, 0x53, 0x75, 0x18, 0x17, - 0xe0, 0x61, 0x2a, 0xa7, 0xdc, 0x8b, 0xd4, 0xc9, 0xf5, 0xde, 0x49, 0xa2, 0x9b, 0xe7, 0x94, 0xfe, - 0x50, 0xe8, 0x4c, 0xd0, 0xf9, 0x75, 0x6c, 0x74, 0x8e, 0xc8, 0xfd, 0xf5, 0x37, 0x64, 0x1c, 0x49, - 0x33, 0x30, 0x82, 0xc4, 0x2f, 0x4a, 0x4a, 0x0d, 0x11, 0x1a, 0x83, 0xb9, 0x38, 0xd2, 0x0b, 0xe3, - 0x87, 0x16, 0xe7, 0x45, 0xc7, 0xf0, 0x3f, 0xed, 0xd0, 0xe2, 0xa2, 0x8c, 0x64, 0x0f, 0xe4, 0x2f, - 0x91, 0x8b, 0xc9, 0xca, 0x1d, 0xdf, 0xba, 0x34, 0xe1, 0x96, 0xc6, 0x0f, 0x2f, 0x29, 0xa3, 0x09, - 0x1f, 0x90, 0x10, 0xe1, 0x70, 0xda, 0xd1, 0x84, 0xc5, 0xd8, 0xc8, 0x1e, 0xa6, 0x9f, 0x04, 0x48, - 0x7a, 0x74, 0x6d, 0xe7, 0x0d, 0x32, 0x90, 0x5b, 0xd0, 0xd7, 0xe0, 0xe1, 0xd1, 0x3a, 0x0b, 0xe6, - 0x99, 0xa5, 0x83, 0xe0, 0xc2, 0x1b, 0x2e, 0x2d, 0xed, 0x41, 0xf9, 0x50, 0x64, 0xec, 0xa2, 0xcb, - 0xb4, 0x0f, 0xca, 0x8b, 0x30, 0x31, 0x85, 0x83, 0xf2, 0x74, 0xd9, 0xe7, 0xfb, 0x05, 0xa8, 0x49, - 0xad, 0x00, 0x1d, 0x0a, 0xa8, 0xa3, 0x58, 0x0a, 0x7a, 0x7b, 0x64, 0x6c, 0x4c, 0x09, 0xab, 0x0f, - 0xb3, 0x58, 0x35, 0x79, 0xac, 0x6e, 0x13, 0x11, 0x93, 0x98, 0xf1, 0x21, 0x34, 0xc1, 0x7f, 0x67, - 0x08, 0x97, 0xc1, 0xc1, 0xf5, 0xe4, 0xb1, 0xf9, 0xc8, 0x1e, 0xb1, 0x5f, 0x20, 0xe3, 0x56, 0x8b, - 0xcc, 0xad, 0x26, 0x33, 0x6e, 0xd1, 0x69, 0x9b, 0xcc, 0x4d, 0xdb, 0x52, 0x1e, 0xac, 0x88, 0xfc, - 0x85, 0x03, 0xe6, 0x46, 0x41, 0x94, 0x9f, 0xf0, 0xc1, 0x8a, 0x91, 0x1c, 0x64, 0x0f, 0xce, 0xb7, - 0x64, 0x00, 0x56, 0x5d, 0x67, 0xbf, 0xdf, 0x74, 0xbb, 0xd0, 0xd5, 0xfe, 0x2c, 0x9a, 0xa9, 0xfd, - 0xcc, 0x04, 0x66, 0x6a, 0x1b, 0x00, 0xec, 0x84, 0xc4, 0xa9, 0x86, 0x3f, 0x46, 0x6c, 0x5e, 0x16, - 0x31, 0x65, 0x30, 0x34, 0xf8, 0xbb, 0x85, 0x9f, 0xca, 0x63, 0x9c, 0xd4, 0x67, 0x45, 0xe4, 0x26, - 0x39, 0x53, 0x7b, 0x77, 0x88, 0x75, 0x9b, 0xc3, 0xfa, 0x29, 0x87, 0xe0, 0x24, 0x7b, 0xcc, 0xff, - 0x7e, 0x06, 0xcc, 0x91, 0x7d, 0x59, 0x22, 0xd3, 0xbf, 0x8e, 0x40, 0xff, 0xf9, 0x09, 0x80, 0xbe, - 0x09, 0xe6, 0x9d, 0x88, 0x3a, 0xe9, 0x53, 0xd9, 0x95, 0xb2, 0x44, 0xd8, 0x19, 0xbe, 0x0c, 0x8e, - 0x8c, 0xf6, 0x09, 0x16, 0x79, 0x83, 0x47, 0xfe, 0x8e, 0x04, 0x79, 0x33, 0x14, 0x27, 0x09, 0xfd, - 0x7b, 0x42, 0xe8, 0x37, 0x39, 0xe8, 0xcb, 0x87, 0x61, 0x65, 0x0a, 0xf7, 0x2a, 0xc8, 0x20, 0x8f, - 0x8f, 0x41, 0xbe, 0x25, 0xc3, 0x85, 0x98, 0xd3, 0x60, 0x06, 0x37, 0xd9, 0x70, 0x82, 0x18, 0x3c, - 0xa2, 0x37, 0xe6, 0xb6, 0x0f, 0xdd, 0x70, 0x89, 0x3d, 0x78, 0x44, 0x3c, 0x04, 0xee, 0xe7, 0xde, - 0xe9, 0x22, 0xd9, 0x71, 0x0e, 0x13, 0xc6, 0x9e, 0x3d, 0xb2, 0x12, 0x9f, 0xd8, 0xc1, 0xc8, 0x71, - 0x66, 0x8f, 0x23, 0x18, 0xc9, 0x1e, 0xf8, 0x2f, 0xe7, 0xc1, 0x69, 0xb2, 0xfc, 0xb7, 0xe2, 0x3a, - 0x7b, 0x03, 0xd7, 0x98, 0x59, 0x87, 0xd7, 0x85, 0x1b, 0xc0, 0xa2, 0xcf, 0x39, 0xde, 0x53, 0x9d, - 0x18, 0x48, 0xd5, 0x7e, 0x8f, 0x75, 0x9e, 0x79, 0x1a, 0x8f, 0xe4, 0x72, 0x82, 0x00, 0xe3, 0x78, - 0x4f, 0xbd, 0xa3, 0x22, 0xc8, 0x28, 0xb3, 0x9a, 0x28, 0x8f, 0xb5, 0xb8, 0x1c, 0xea, 0x54, 0x41, - 0x44, 0xa7, 0x3e, 0x18, 0xea, 0xd4, 0x7f, 0xe2, 0x74, 0x6a, 0xf5, 0xf0, 0x22, 0x99, 0xc2, 0x12, - 0xd3, 0x22, 0x28, 0xae, 0x58, 0x3d, 0x1f, 0xba, 0xda, 0x57, 0xe9, 0x3c, 0xea, 0x55, 0x19, 0x76, - 0x2f, 0x55, 0x50, 0xdc, 0xc6, 0xa5, 0x51, 0x83, 0xec, 0x66, 0x31, 0x6c, 0x08, 0x87, 0x06, 0xfd, - 0x36, 0x6d, 0x90, 0xbf, 0x01, 0x32, 0x13, 0x9b, 0x80, 0xa5, 0x08, 0xf2, 0x37, 0x9a, 0x85, 0xa9, - 0xdc, 0x6f, 0x55, 0x34, 0xe0, 0x1e, 0x1a, 0x41, 0x2e, 0x66, 0x87, 0xb0, 0x02, 0x64, 0xab, 0xeb, - 0xe1, 0xa6, 0x37, 0x6b, 0xa0, 0xbf, 0x69, 0x5d, 0x8e, 0x06, 0x45, 0x45, 0x58, 0x9e, 0xb6, 0xcb, - 0x91, 0x10, 0x17, 0xd9, 0x63, 0xf6, 0x5d, 0xec, 0x6f, 0xda, 0xef, 0x99, 0x1d, 0x88, 0xb8, 0xcf, - 0x0c, 0xb5, 0x45, 0x20, 0x59, 0xc1, 0x88, 0x2f, 0x59, 0x6c, 0x3b, 0x2d, 0x1c, 0xa2, 0x9d, 0x8e, - 0xbb, 0x1a, 0x19, 0xca, 0x1c, 0x57, 0xfc, 0xc8, 0x56, 0x23, 0x13, 0xd9, 0x98, 0xc2, 0xed, 0xa5, - 0xc1, 0x79, 0xdc, 0xa9, 0xb6, 0xd6, 0x71, 0xf7, 0x6a, 0xa8, 0xb0, 0x26, 0x76, 0xf6, 0x76, 0x9c, - 0xbd, 0x9a, 0x78, 0x1e, 0xa6, 0x80, 0xd6, 0x22, 0x45, 0xeb, 0x0b, 0x74, 0x18, 0xcd, 0x78, 0xbb, - 0xd4, 0x73, 0x5c, 0x3f, 0xdd, 0x76, 0x29, 0xe2, 0xce, 0xc0, 0xdf, 0xa5, 0x3d, 0xbf, 0xc5, 0x1f, - 0xcf, 0x9e, 0xd4, 0xf0, 0x99, 0xe2, 0xfc, 0xd6, 0x28, 0x06, 0xb2, 0x87, 0xf7, 0xad, 0x47, 0x34, - 0x78, 0x8e, 0xdb, 0x1c, 0x69, 0x1b, 0x98, 0xd8, 0xd0, 0x39, 0x4e, 0x73, 0x8c, 0xe7, 0x21, 0x7b, - 0xbc, 0xfe, 0x8e, 0x19, 0x38, 0xdf, 0x34, 0xc5, 0x81, 0x33, 0x68, 0x99, 0x85, 0x31, 0x5b, 0xe6, - 0xb8, 0xbb, 0x0b, 0x54, 0xd6, 0x93, 0x1b, 0x30, 0xc7, 0xd9, 0x5d, 0x48, 0x60, 0x22, 0x7b, 0xc4, - 0xdf, 0x2c, 0x83, 0x42, 0x6b, 0xfa, 0xe3, 0xe5, 0xb8, 0x73, 0x11, 0x2c, 0xab, 0xd6, 0xc4, 0x86, - 0xcb, 0x71, 0xe6, 0x22, 0xb1, 0x2c, 0x4c, 0x21, 0x7e, 0xff, 0x71, 0x30, 0x8f, 0x27, 0xdc, 0xc1, - 0x6e, 0xeb, 0xdf, 0xd1, 0x51, 0xf3, 0xf5, 0x19, 0xb6, 0xd5, 0xbb, 0x41, 0x29, 0xd8, 0x1d, 0xa2, - 0x23, 0xe7, 0x92, 0x58, 0xfb, 0x0c, 0xb8, 0x34, 0xc2, 0xef, 0x0f, 0xe5, 0x13, 0x31, 0xf1, 0x9d, - 0xc0, 0x71, 0x7d, 0x22, 0x8e, 0x74, 0x37, 0xf0, 0x77, 0xa3, 0x11, 0xf5, 0xbf, 0x66, 0x87, 0xf9, - 0xe0, 0x2e, 0x61, 0x7e, 0xc8, 0x2e, 0xe1, 0xa7, 0x58, 0x2c, 0x5b, 0x3c, 0x96, 0x77, 0x8a, 0x8a, - 0x70, 0x82, 0x63, 0xed, 0x7b, 0x43, 0x38, 0xcf, 0x71, 0x70, 0x2e, 0x1f, 0x8a, 0x97, 0x29, 0x9c, - 0x9f, 0xcc, 0x47, 0x63, 0xee, 0xa7, 0x33, 0x6c, 0xc7, 0x03, 0x87, 0x33, 0xf2, 0x07, 0x0e, 0x67, - 0x70, 0x2d, 0xbd, 0x70, 0xc8, 0x96, 0xfe, 0x69, 0x56, 0x3b, 0xda, 0xbc, 0x76, 0x3c, 0x59, 0x1c, - 0x91, 0xc9, 0x8d, 0xcc, 0xef, 0x0b, 0xd5, 0xe3, 0x3c, 0xa7, 0x1e, 0x95, 0xc3, 0x31, 0x93, 0xbd, - 0x7e, 0xfc, 0x66, 0x30, 0xa1, 0x3d, 0xe2, 0xf6, 0x3e, 0xee, 0x46, 0x24, 0x27, 0xc4, 0x89, 0x8d, - 0xdc, 0xe3, 0x6c, 0x44, 0x8e, 0xe2, 0x64, 0x0a, 0x21, 0xdd, 0x16, 0xc0, 0x1c, 0xe6, 0xe9, 0xbc, - 0xd5, 0xdd, 0x81, 0xbe, 0xf6, 0x6a, 0xe2, 0xaa, 0x18, 0x04, 0xd0, 0x9c, 0x50, 0x94, 0xa3, 0xb8, - 0x63, 0xb3, 0x69, 0xfd, 0x05, 0x08, 0x93, 0x4b, 0x0c, 0x83, 0xd3, 0x0e, 0xc4, 0x38, 0x92, 0x83, - 0xec, 0x21, 0xfb, 0x04, 0x71, 0xe6, 0xa8, 0x9b, 0x57, 0x9c, 0x7d, 0x5f, 0x7b, 0xce, 0x04, 0x3a, - 0xe8, 0x65, 0x50, 0xec, 0x61, 0x6a, 0xf4, 0x74, 0x46, 0xf2, 0x74, 0x87, 0x8a, 0x80, 0x94, 0x6f, - 0xd0, 0x2f, 0xd3, 0x1e, 0xd1, 0x88, 0xe4, 0x48, 0xe8, 0x4c, 0xfb, 0x88, 0xc6, 0x88, 0xf2, 0xa7, - 0x72, 0x55, 0x4f, 0x09, 0x95, 0x6e, 0xed, 0x59, 0xfe, 0x84, 0x02, 0x41, 0xf4, 0x10, 0xad, 0x20, - 0x10, 0x04, 0x7e, 0x48, 0x7b, 0xf0, 0x94, 0x91, 0x0a, 0xfa, 0x7c, 0xda, 0x07, 0x4f, 0x93, 0x8b, - 0xcf, 0x1e, 0x93, 0x9f, 0x23, 0x2d, 0xeb, 0x1c, 0xf1, 0xc1, 0xcd, 0xd0, 0xbd, 0x77, 0xec, 0xc6, - 0x42, 0x58, 0x3b, 0xba, 0xc6, 0x32, 0xb4, 0xfc, 0xec, 0x81, 0xf9, 0xe5, 0x1f, 0x00, 0x85, 0x2a, - 0xbc, 0xb0, 0xbf, 0xa3, 0xdd, 0x01, 0x4a, 0x6d, 0x17, 0xc2, 0x9a, 0xbd, 0xed, 0x20, 0xe9, 0xfa, - 0xe8, 0x7f, 0x00, 0x09, 0x7d, 0x42, 0x78, 0xec, 0x42, 0xb3, 0x1b, 0x1d, 0x43, 0x0b, 0x1e, 0xb5, - 0x97, 0x49, 0x20, 0xdf, 0xf2, 0x4d, 0x5f, 0x9b, 0x0d, 0xb1, 0xd5, 0x9e, 0xc3, 0x62, 0x71, 0x07, - 0x8f, 0xc5, 0x0d, 0x9c, 0x2c, 0x30, 0x07, 0x4b, 0xe8, 0xfb, 0x18, 0x00, 0x34, 0x50, 0xba, 0xcf, - 0x73, 0x6c, 0x94, 0x23, 0x38, 0x29, 0x19, 0x3c, 0x6b, 0xaf, 0x0c, 0xc5, 0x7d, 0x17, 0x27, 0xee, - 0x47, 0x89, 0x15, 0x31, 0x85, 0x95, 0x36, 0x09, 0xcc, 0x22, 0xd1, 0xae, 0x41, 0xb3, 0xeb, 0x69, - 0x0f, 0x8b, 0x94, 0x3f, 0x46, 0xcc, 0xda, 0x47, 0x84, 0x63, 0x7a, 0x92, 0x5a, 0x85, 0xc4, 0xe3, - 0xfd, 0x05, 0x82, 0x98, 0x26, 0x12, 0x1f, 0xd3, 0xe4, 0x16, 0x90, 0xb7, 0xec, 0x6d, 0x87, 0x7a, - 0xaf, 0x3d, 0x38, 0x86, 0x36, 0xd2, 0x09, 0x03, 0x67, 0x14, 0x0c, 0xf8, 0x99, 0xcc, 0xd6, 0x54, - 0xee, 0xce, 0xcb, 0xa3, 0xd2, 0xb5, 0xff, 0x7b, 0xa4, 0xb0, 0x55, 0x15, 0xe4, 0xfb, 0xa6, 0xbf, - 0x4b, 0x8b, 0xc6, 0xff, 0x91, 0x8d, 0xbc, 0x6f, 0x9b, 0xb6, 0x63, 0x5f, 0xd9, 0xb3, 0x9e, 0x19, - 0x5e, 0xd1, 0xcb, 0xa5, 0x21, 0xce, 0x77, 0xa0, 0x0d, 0x5d, 0xd3, 0x87, 0xad, 0x4b, 0x3b, 0x78, - 0x8e, 0x55, 0x32, 0xd8, 0xa4, 0xd4, 0xfa, 0x8f, 0x38, 0x8e, 0xd7, 0xff, 0x6d, 0xab, 0x07, 0x71, - 0xc0, 0x27, 0xaa, 0xff, 0xc1, 0x73, 0x2a, 0xfd, 0x1f, 0x52, 0x44, 0xf6, 0x68, 0xfc, 0xab, 0x04, - 0xe6, 0x5b, 0x48, 0xe1, 0x5a, 0xfb, 0x7b, 0x7b, 0xa6, 0x7b, 0x45, 0x7b, 0x78, 0x84, 0x0a, 0xa3, - 0x9a, 0x39, 0x4e, 0x35, 0xb5, 0xdf, 0x10, 0xbe, 0x9d, 0x9a, 0x36, 0x6d, 0xa6, 0x84, 0xd4, 0xed, - 0xe0, 0xb1, 0xa0, 0x80, 0xd4, 0x3b, 0xf0, 0xe7, 0x4b, 0x6c, 0x08, 0x24, 0xa7, 0x60, 0x60, 0xac, - 0x91, 0xbc, 0x4d, 0x21, 0x28, 0x87, 0x04, 0x8e, 0xb7, 0x7c, 0xb3, 0x73, 0x71, 0xd5, 0x71, 0x9d, - 0x7d, 0xdf, 0xb2, 0xa1, 0xa7, 0x3d, 0x24, 0x42, 0x20, 0xd0, 0xff, 0x5c, 0xa4, 0xff, 0xda, 0xbf, - 0xe5, 0x44, 0x47, 0xd1, 0xb0, 0x5b, 0x65, 0xc9, 0xc7, 0xc4, 0xb9, 0x12, 0x1b, 0x17, 0x45, 0x28, - 0x66, 0x2f, 0xb4, 0x37, 0xc9, 0x40, 0xd1, 0xef, 0xef, 0x3b, 0xae, 0x5f, 0x77, 0x3a, 0x66, 0xcf, - 0xf3, 0x1d, 0x17, 0x6a, 0xcd, 0x44, 0xa9, 0xa1, 0x1e, 0xa6, 0xeb, 0x74, 0xa2, 0xc1, 0x91, 0x3e, - 0xb1, 0x6a, 0x27, 0xf3, 0x3a, 0xfe, 0x09, 0xe1, 0x5d, 0x46, 0x22, 0x95, 0x41, 0x8e, 0x62, 0xf4, - 0x7c, 0x58, 0x97, 0x96, 0xce, 0x15, 0x5f, 0x6c, 0xe7, 0x51, 0x88, 0xa9, 0x29, 0x2c, 0x95, 0x4b, - 0x60, 0xa1, 0xb5, 0x7f, 0x21, 0x24, 0xe2, 0xb1, 0x46, 0xc8, 0x6b, 0x84, 0x83, 0x59, 0x50, 0xc5, - 0x63, 0x09, 0xc5, 0xc8, 0xf7, 0x7a, 0xb0, 0xe0, 0xb1, 0xd9, 0x28, 0xde, 0x7c, 0xa2, 0x60, 0x10, - 0x8b, 0xd1, 0xa5, 0x66, 0x2f, 0xc0, 0xf7, 0x49, 0x60, 0xa1, 0xd9, 0x87, 0x36, 0xec, 0x12, 0x1f, - 0x3b, 0x4e, 0x80, 0x2f, 0x4b, 0x29, 0x40, 0x8e, 0x50, 0x8c, 0x00, 0x23, 0x7f, 0xd8, 0x6a, 0x20, - 0xbc, 0x28, 0x21, 0x95, 0xe0, 0x92, 0x4a, 0xcb, 0x5e, 0x70, 0x5f, 0x91, 0xc0, 0x9c, 0xb1, 0x6f, - 0x6f, 0xb8, 0x0e, 0x1a, 0x8d, 0x5d, 0xed, 0xce, 0xa8, 0x83, 0xb8, 0x19, 0x9c, 0xe8, 0xee, 0xbb, - 0x78, 0xfd, 0xa9, 0x66, 0xb7, 0x60, 0xc7, 0xb1, 0xbb, 0x1e, 0xae, 0x47, 0xc1, 0x38, 0xf8, 0xe2, - 0xf6, 0xfc, 0xf3, 0xfe, 0x52, 0xce, 0x69, 0x2f, 0x10, 0x8e, 0x98, 0x43, 0x2a, 0xcf, 0x14, 0x2d, - 0xde, 0x13, 0x08, 0xc6, 0xc5, 0x19, 0x55, 0x42, 0xf6, 0xc2, 0xfd, 0x82, 0x04, 0xd4, 0x72, 0xa7, - 0xe3, 0xec, 0xdb, 0x7e, 0x0b, 0xf6, 0x60, 0xc7, 0x6f, 0xbb, 0x66, 0x07, 0xb2, 0xf6, 0xb3, 0x02, - 0xe4, 0xae, 0xe5, 0xd2, 0x3e, 0x18, 0xfd, 0xa5, 0x72, 0x7c, 0x99, 0xf0, 0x8e, 0x23, 0xa9, 0xe5, - 0xc1, 0x52, 0x52, 0x88, 0x53, 0x6c, 0x5f, 0x51, 0xb0, 0xa0, 0xec, 0xa5, 0xfa, 0x69, 0x09, 0xcc, - 0x06, 0x3d, 0xf6, 0x8e, 0x88, 0x30, 0x7f, 0x2e, 0xe5, 0x64, 0x24, 0x24, 0x9e, 0x42, 0x86, 0xef, - 0x4a, 0x31, 0xab, 0x88, 0xa3, 0x9f, 0x4e, 0x74, 0xe5, 0xf4, 0xa2, 0x43, 0x8f, 0x8d, 0xe6, 0xd6, - 0x4a, 0xb3, 0x5e, 0xd5, 0x0d, 0x45, 0xd6, 0xbe, 0x2a, 0x81, 0xfc, 0x86, 0x65, 0xef, 0xb0, 0x81, - 0xcd, 0x4e, 0x22, 0x3b, 0xb2, 0x0b, 0xef, 0xa7, 0x2d, 0x9d, 0x3c, 0xa8, 0xb7, 0x82, 0x93, 0xf6, - 0xfe, 0xde, 0x05, 0xe8, 0x36, 0xb7, 0xf1, 0x28, 0xeb, 0xb5, 0x9d, 0x16, 0xb4, 0x89, 0x11, 0x5a, - 0x30, 0x86, 0xbe, 0xe3, 0x4d, 0x30, 0x81, 0xc9, 0x03, 0xe2, 0x24, 0x46, 0xe2, 0x21, 0x53, 0x12, - 0xc3, 0x54, 0xaa, 0x69, 0xc3, 0x10, 0xe2, 0xd9, 0x6b, 0xea, 0x6f, 0x15, 0xc0, 0xd5, 0x65, 0xfb, - 0x0a, 0xb6, 0x29, 0x48, 0x07, 0x5f, 0xd9, 0x35, 0xed, 0x1d, 0x88, 0x07, 0x88, 0x50, 0xe2, 0x6c, - 0xa4, 0xff, 0x1c, 0x1f, 0xe9, 0x5f, 0x35, 0xc0, 0x8c, 0xe3, 0x76, 0xa1, 0xbb, 0x7c, 0x05, 0xf3, - 0x34, 0xb8, 0xec, 0x4c, 0xdb, 0xe4, 0xb0, 0x22, 0x96, 0x28, 0xf9, 0xa5, 0x26, 0xf9, 0xde, 0x08, - 0x08, 0x9d, 0xbd, 0x19, 0xcc, 0xd0, 0x34, 0x75, 0x1e, 0x94, 0x9a, 0x46, 0x55, 0x37, 0xb6, 0x6a, - 0x55, 0xe5, 0x98, 0x7a, 0x15, 0x38, 0x5e, 0x6b, 0xeb, 0x46, 0xb9, 0x5d, 0x6b, 0x36, 0xb6, 0x70, - 0xba, 0x92, 0xd3, 0x9e, 0x9b, 0x17, 0xf5, 0xec, 0x4d, 0x66, 0x66, 0x18, 0xac, 0x06, 0x98, 0xe9, - 0x90, 0x0c, 0x78, 0x08, 0x9d, 0x4b, 0x55, 0x3b, 0x4a, 0x90, 0x24, 0x18, 0x01, 0x21, 0xf5, 0x0c, - 0x00, 0x97, 0x5d, 0xc7, 0xde, 0x89, 0xce, 0xb4, 0x95, 0x0c, 0x26, 0x45, 0x7b, 0x4e, 0x0e, 0x14, - 0xc9, 0x37, 0xf8, 0x66, 0x13, 0xfc, 0x2f, 0x12, 0x7c, 0xf0, 0x8c, 0x2c, 0x5e, 0x2c, 0xaf, 0x68, - 0xa2, 0x45, 0x1f, 0x91, 0x2e, 0x12, 0x19, 0x10, 0x4b, 0x98, 0x56, 0xe5, 0x16, 0x50, 0x24, 0xdf, - 0x52, 0xaf, 0x83, 0xf8, 0x28, 0xa5, 0x24, 0x9b, 0xa0, 0x9f, 0xb2, 0xb8, 0x4c, 0xb3, 0xd7, 0xe6, - 0x8f, 0x4a, 0xa0, 0xd4, 0x80, 0x7e, 0x65, 0x17, 0x76, 0x2e, 0x6a, 0x8f, 0xe4, 0x17, 0x40, 0x7b, - 0x16, 0xb4, 0xfd, 0x7b, 0xf7, 0x7a, 0xe1, 0x02, 0x68, 0x90, 0xa0, 0x3d, 0x9f, 0xed, 0x7c, 0x9f, - 0xc2, 0xeb, 0xcf, 0x4d, 0x43, 0xea, 0x1a, 0x94, 0x10, 0xa3, 0x32, 0xa7, 0x40, 0xd1, 0x85, 0xde, - 0x7e, 0x2f, 0x58, 0x44, 0xa3, 0x4f, 0xda, 0x6b, 0x43, 0x71, 0x56, 0x38, 0x71, 0xde, 0x22, 0x5e, - 0xc4, 0x14, 0xc2, 0x9e, 0xe6, 0xc1, 0x4c, 0xcd, 0xb6, 0x7c, 0xcb, 0xec, 0x69, 0x2f, 0xc8, 0x83, - 0x85, 0x16, 0xf4, 0x37, 0x4c, 0xd7, 0xdc, 0x83, 0x3e, 0x74, 0x3d, 0xed, 0x3b, 0x7c, 0x9f, 0xd0, - 0xef, 0x99, 0xfe, 0xb6, 0xe3, 0xee, 0x05, 0xaa, 0x19, 0x3c, 0x23, 0xd5, 0xbc, 0x04, 0x5d, 0x2f, - 0xe2, 0x2b, 0x78, 0x44, 0x6f, 0x2e, 0x3b, 0xee, 0x45, 0x34, 0x08, 0xd2, 0x69, 0x1a, 0x7d, 0x44, - 0xf4, 0x7a, 0xce, 0x4e, 0x1d, 0x5e, 0x82, 0x41, 0x54, 0xb5, 0xf0, 0x19, 0xcd, 0x05, 0xba, 0x4e, - 0xc3, 0xf1, 0x51, 0xa7, 0x5d, 0x77, 0x76, 0x48, 0xd8, 0xd9, 0x92, 0xc1, 0x27, 0x46, 0xb9, 0xcc, - 0x4b, 0x10, 0xe7, 0x2a, 0xb2, 0xb9, 0x68, 0xa2, 0xba, 0x04, 0xd4, 0xf0, 0xb3, 0x36, 0xec, 0xc1, - 0x3d, 0xe8, 0xbb, 0x57, 0xf0, 0xed, 0x12, 0x25, 0x63, 0xc8, 0x1b, 0x3a, 0x40, 0x8b, 0x4f, 0xd6, - 0xa9, 0xf4, 0x96, 0x38, 0xc9, 0x1d, 0x6a, 0xb2, 0x2e, 0x42, 0x71, 0x2a, 0xb7, 0x67, 0xc9, 0xc8, - 0x9a, 0x79, 0xb9, 0x0c, 0xf2, 0x78, 0xf0, 0x7c, 0x73, 0x8e, 0x5b, 0x61, 0xda, 0x83, 0x9e, 0x67, - 0xee, 0xc0, 0x60, 0x85, 0x89, 0x3e, 0xaa, 0xb7, 0x81, 0x42, 0x0f, 0x63, 0x4a, 0x06, 0x87, 0x87, - 0x73, 0x35, 0x43, 0x06, 0x06, 0xa2, 0x15, 0x8e, 0x04, 0x18, 0x6e, 0x83, 0x7c, 0x71, 0xf6, 0x6e, - 0x50, 0x20, 0xf0, 0xcf, 0x82, 0x42, 0x55, 0x5f, 0xde, 0x5c, 0x55, 0x8e, 0xa1, 0xbf, 0x01, 0x7f, - 0xb3, 0xa0, 0xb0, 0x52, 0x6e, 0x97, 0xeb, 0x8a, 0x84, 0xea, 0x51, 0x6b, 0xac, 0x34, 0x15, 0x19, - 0x25, 0x6e, 0x94, 0x1b, 0xb5, 0x8a, 0x92, 0x57, 0xe7, 0xc0, 0xcc, 0xf9, 0xb2, 0xd1, 0xa8, 0x35, - 0x56, 0x95, 0x82, 0xf6, 0x17, 0x2c, 0x7e, 0xb7, 0xf3, 0xf8, 0x5d, 0x1f, 0xc7, 0xd3, 0x30, 0xc8, - 0x7e, 0x31, 0x84, 0xec, 0x4e, 0x0e, 0xb2, 0x1f, 0x10, 0x21, 0x32, 0x05, 0x77, 0xa6, 0x22, 0x98, - 0xd9, 0x70, 0x9d, 0x0e, 0xf4, 0x3c, 0xed, 0xa5, 0x12, 0x28, 0x56, 0x4c, 0xbb, 0x03, 0x7b, 0xda, - 0x35, 0x11, 0x54, 0xc4, 0x55, 0x34, 0x17, 0xb8, 0x8a, 0x6a, 0xdf, 0xca, 0x89, 0xf6, 0x7e, 0x94, - 0xee, 0x12, 0xa1, 0x19, 0x23, 0x1f, 0xb1, 0x5e, 0x2e, 0x91, 0xd4, 0x14, 0x6e, 0xd8, 0x91, 0xc0, - 0x2c, 0x5d, 0x0d, 0xb8, 0x00, 0xd9, 0x79, 0xf8, 0x77, 0x72, 0xa2, 0x93, 0xc3, 0xa0, 0x06, 0x21, - 0x99, 0x18, 0x79, 0x88, 0x4d, 0x04, 0x47, 0x51, 0x9b, 0xc2, 0xe6, 0xa1, 0x04, 0xe6, 0x36, 0x6d, - 0x6f, 0x98, 0x50, 0xc4, 0xc3, 0xf1, 0x07, 0xd5, 0x60, 0x08, 0x1d, 0x2a, 0x1c, 0xff, 0x68, 0x7a, - 0xd9, 0x0b, 0xe6, 0x3b, 0x39, 0x70, 0x72, 0x15, 0xda, 0xd0, 0xb5, 0x3a, 0xa4, 0x06, 0x81, 0x24, - 0xee, 0xe4, 0x25, 0xf1, 0x48, 0x8e, 0xf3, 0x61, 0x5f, 0xf0, 0x12, 0x78, 0x55, 0x28, 0x81, 0xa7, - 0x70, 0x12, 0xb8, 0x59, 0x90, 0xce, 0x14, 0xae, 0x55, 0x9f, 0x05, 0xf3, 0x0d, 0xc7, 0xb7, 0xb6, - 0xad, 0x0e, 0xf1, 0x41, 0xfb, 0x05, 0x19, 0xe4, 0xeb, 0x96, 0xe7, 0x6b, 0xe5, 0xa8, 0x3b, 0xb9, - 0x0e, 0xcc, 0x59, 0x76, 0xa7, 0xb7, 0xdf, 0x85, 0x06, 0x34, 0x49, 0xbf, 0x52, 0x32, 0xd8, 0xa4, - 0x68, 0x6b, 0x1f, 0xb1, 0x25, 0x07, 0x5b, 0xfb, 0xbf, 0x23, 0xbc, 0x0c, 0xc3, 0xb2, 0x80, 0xe3, - 0x52, 0xc6, 0xd8, 0x5d, 0x65, 0xb0, 0x60, 0x33, 0x59, 0x03, 0x83, 0x7d, 0xf0, 0x5e, 0x02, 0x96, - 0x9c, 0xc1, 0x7f, 0xa1, 0x7d, 0x40, 0xa8, 0xb1, 0x8e, 0x62, 0x28, 0x1d, 0x32, 0x2b, 0x63, 0x4c, - 0x92, 0x55, 0xb0, 0x58, 0x6b, 0xb4, 0x75, 0xa3, 0x51, 0xae, 0xd3, 0x2c, 0xb2, 0xf6, 0xaf, 0x12, - 0x28, 0x18, 0xb0, 0xdf, 0xbb, 0xc2, 0x06, 0x9e, 0xa6, 0x8e, 0xe2, 0xb9, 0xd0, 0x51, 0x5c, 0x5d, - 0x01, 0xc0, 0xec, 0xa0, 0x82, 0xf1, 0xcd, 0x5c, 0xd2, 0xd0, 0x70, 0xa6, 0x5c, 0x05, 0xcb, 0x61, - 0x6e, 0x83, 0xf9, 0x52, 0x7b, 0xa1, 0xf0, 0xce, 0x11, 0x47, 0x0d, 0x73, 0x18, 0xd3, 0x27, 0x7c, - 0x50, 0x68, 0xb3, 0x67, 0x24, 0xb9, 0xa3, 0x11, 0xff, 0xd7, 0x24, 0x90, 0x6f, 0xa3, 0xde, 0x92, - 0xe9, 0x38, 0x3f, 0x37, 0x9e, 0x8e, 0x23, 0x32, 0x31, 0x3a, 0x7e, 0x17, 0x98, 0x67, 0x35, 0x96, - 0xba, 0x4a, 0x24, 0xaa, 0x38, 0xf7, 0xc1, 0x38, 0x1a, 0x3e, 0x84, 0x9d, 0xa3, 0x11, 0xf1, 0x67, - 0x1e, 0x05, 0xc0, 0x3a, 0xdc, 0xbb, 0x00, 0x5d, 0x6f, 0xd7, 0xea, 0x6b, 0x7f, 0x25, 0x83, 0xd9, - 0x55, 0xe8, 0xb7, 0x7c, 0xd3, 0xdf, 0xf7, 0x06, 0xb6, 0x3b, 0x6d, 0xa7, 0x62, 0x76, 0x76, 0x21, - 0xed, 0x8e, 0x82, 0x47, 0xed, 0x3d, 0xb2, 0xa8, 0x3f, 0x51, 0x54, 0xce, 0x52, 0x58, 0x46, 0x0c, - 0x26, 0x8f, 0x06, 0xf9, 0xae, 0xe9, 0x9b, 0x14, 0x8b, 0x6b, 0x06, 0xb0, 0x88, 0x08, 0x19, 0x38, - 0x9b, 0xf6, 0x0e, 0x49, 0xc4, 0xa1, 0x48, 0xa0, 0xfc, 0x74, 0x20, 0x7c, 0x20, 0x37, 0x06, 0x0a, - 0x27, 0xc0, 0x42, 0xa3, 0xd9, 0xde, 0xaa, 0x37, 0x57, 0x57, 0x75, 0x94, 0xaa, 0xc8, 0xea, 0x29, - 0xa0, 0x6e, 0x94, 0xef, 0x5d, 0xd7, 0x1b, 0xed, 0xad, 0x46, 0xb3, 0xaa, 0xd3, 0x2f, 0xf3, 0xea, - 0x71, 0x30, 0x57, 0x29, 0x57, 0xd6, 0x82, 0x84, 0x82, 0x7a, 0x1a, 0x9c, 0x5c, 0xd7, 0xd7, 0x97, - 0x75, 0xa3, 0xb5, 0x56, 0xdb, 0xd8, 0x42, 0x64, 0x56, 0x9a, 0x9b, 0x8d, 0xaa, 0x52, 0x54, 0x35, - 0x70, 0x8a, 0x79, 0x73, 0xde, 0x68, 0x36, 0x56, 0xb7, 0x5a, 0xed, 0x72, 0x5b, 0x57, 0x66, 0xd4, - 0xab, 0xc0, 0xf1, 0x4a, 0xb9, 0x81, 0xb3, 0x57, 0x9a, 0x8d, 0x86, 0x5e, 0x69, 0x2b, 0x25, 0xed, - 0xdf, 0xf2, 0x60, 0xae, 0xe6, 0x35, 0xcc, 0x3d, 0x78, 0xce, 0xec, 0x59, 0x5d, 0xed, 0x05, 0xcc, - 0xcc, 0xe3, 0x7a, 0xb0, 0xe0, 0x92, 0xbf, 0xb0, 0xdb, 0xb6, 0x20, 0x41, 0x73, 0xc1, 0xe0, 0x13, - 0xd1, 0x9c, 0xdc, 0xc6, 0x04, 0x82, 0x39, 0x39, 0x79, 0x52, 0x97, 0x01, 0x20, 0xff, 0xda, 0xd1, - 0x1d, 0xb1, 0x67, 0x07, 0x5b, 0x93, 0xb9, 0x07, 0x3d, 0xe8, 0x5e, 0xb2, 0x3a, 0x30, 0xc8, 0x69, - 0x30, 0x5f, 0x69, 0x5f, 0x97, 0x45, 0xf7, 0x17, 0x19, 0x50, 0x99, 0xea, 0xc4, 0xf4, 0x86, 0x3f, - 0x2e, 0x8b, 0xec, 0x0e, 0x0a, 0x91, 0x4c, 0xa7, 0x29, 0x2f, 0x96, 0xc6, 0x5b, 0xb6, 0x6d, 0x37, - 0x9b, 0x5b, 0xad, 0xb5, 0xa6, 0xd1, 0x56, 0x64, 0x75, 0x1e, 0x94, 0xd0, 0x63, 0xbd, 0xd9, 0x58, - 0x55, 0xf2, 0xea, 0xd5, 0xe0, 0xc4, 0x5a, 0xb9, 0xb5, 0x55, 0x6b, 0x9c, 0x2b, 0xd7, 0x6b, 0xd5, - 0xad, 0xca, 0x5a, 0xd9, 0x68, 0x29, 0x05, 0xf5, 0x1a, 0x70, 0x75, 0xbb, 0xa6, 0x1b, 0x5b, 0x2b, - 0x7a, 0xb9, 0xbd, 0x69, 0xe8, 0xad, 0xad, 0x46, 0x73, 0xab, 0x51, 0x5e, 0xd7, 0x95, 0x22, 0x6a, - 0xfe, 0xf8, 0x55, 0xa4, 0x36, 0x33, 0x07, 0x95, 0xb1, 0x14, 0xa3, 0x8c, 0xb3, 0x83, 0xca, 0x08, - 0x58, 0xb5, 0x32, 0xf4, 0x96, 0x6e, 0x9c, 0xd3, 0x95, 0xb9, 0x61, 0xba, 0x36, 0xaf, 0x9e, 0x04, - 0x0a, 0xe2, 0x61, 0xab, 0xd6, 0x0a, 0x72, 0x56, 0x95, 0x05, 0xed, 0xd3, 0x45, 0x70, 0xca, 0x80, - 0x3b, 0x96, 0xe7, 0x43, 0x77, 0xc3, 0xbc, 0xb2, 0x07, 0x6d, 0x3f, 0xe8, 0xe4, 0xff, 0x29, 0xb5, - 0x32, 0xae, 0x83, 0x85, 0x3e, 0xa1, 0xb1, 0x0e, 0xfd, 0x5d, 0xa7, 0x4b, 0x47, 0xe1, 0x47, 0xc6, - 0xf6, 0x1c, 0x4b, 0x1b, 0x6c, 0x76, 0x83, 0xff, 0x9a, 0xd1, 0x6d, 0x39, 0x41, 0xb7, 0xf3, 0xe3, - 0xe8, 0xb6, 0x7a, 0x2d, 0x98, 0xdd, 0xf7, 0xa0, 0xab, 0xef, 0x99, 0x56, 0x2f, 0xb8, 0xe3, 0x33, - 0x4c, 0xd0, 0xde, 0x99, 0x17, 0x3d, 0xb1, 0xc2, 0xd4, 0x65, 0xb8, 0x18, 0x63, 0xfa, 0xd6, 0x33, - 0x00, 0xd0, 0xca, 0x6e, 0xba, 0x3d, 0xaa, 0xac, 0x4c, 0x0a, 0xe2, 0xef, 0x82, 0xd5, 0xeb, 0x59, - 0xf6, 0x4e, 0xb8, 0xef, 0x1f, 0x25, 0x68, 0x2f, 0x96, 0x45, 0x4e, 0xb0, 0xa4, 0xe5, 0x2d, 0x5d, - 0x6b, 0x7a, 0xa1, 0x34, 0xe5, 0x7e, 0xf7, 0x60, 0xd3, 0x29, 0xaa, 0x0a, 0x98, 0xc7, 0x69, 0xb4, - 0x05, 0x2a, 0x33, 0xa8, 0x0f, 0x0e, 0xc8, 0xad, 0xeb, 0xed, 0xb5, 0x66, 0x35, 0x7c, 0x57, 0x42, - 0x24, 0x11, 0x33, 0xe5, 0xc6, 0xbd, 0xb8, 0x35, 0xce, 0xaa, 0x0f, 0x01, 0xd7, 0x30, 0x1d, 0x76, - 0xb9, 0x6e, 0xe8, 0xe5, 0xea, 0xbd, 0x5b, 0xfa, 0xd3, 0x6a, 0xad, 0x76, 0x8b, 0x6f, 0x5c, 0x41, - 0x3b, 0x9a, 0x43, 0xfc, 0xea, 0xeb, 0xe5, 0x5a, 0x9d, 0xf6, 0xef, 0x2b, 0x4d, 0x63, 0xbd, 0xdc, - 0x56, 0xe6, 0xb5, 0x97, 0xcb, 0x40, 0x59, 0x85, 0xfe, 0x86, 0xe3, 0xfa, 0x66, 0xaf, 0x6e, 0xd9, - 0x17, 0x37, 0xdd, 0x1e, 0x37, 0xd9, 0x14, 0x0e, 0xd3, 0xc1, 0x0f, 0x91, 0x1c, 0xc1, 0xf8, 0x1d, - 0xf1, 0x3e, 0xce, 0x16, 0x29, 0x53, 0x94, 0xa0, 0x3d, 0x4b, 0x12, 0x59, 0xee, 0x16, 0x2f, 0x35, - 0x9d, 0x9e, 0x3c, 0x7b, 0xda, 0xe3, 0xf3, 0x10, 0xd4, 0x8a, 0xda, 0xf3, 0xf2, 0xa0, 0xb4, 0x62, - 0xd9, 0x66, 0xcf, 0x7a, 0x26, 0x17, 0x1d, 0x33, 0xea, 0x63, 0x72, 0x09, 0x7d, 0x8c, 0x34, 0xd6, - 0xf8, 0xf9, 0xb3, 0xb2, 0xe8, 0xf2, 0x02, 0x23, 0xfb, 0x80, 0xc9, 0x98, 0xc1, 0xf3, 0x63, 0x92, - 0xc8, 0xf2, 0xc2, 0x68, 0x7a, 0xe9, 0x30, 0xfc, 0xec, 0xf7, 0x87, 0x8d, 0x35, 0xd0, 0xbe, 0x4b, - 0xc3, 0x54, 0x61, 0x56, 0xfb, 0x03, 0x19, 0x68, 0xab, 0xd0, 0x3f, 0x07, 0xdd, 0x70, 0x2a, 0x80, - 0x7b, 0x7d, 0x6a, 0x6f, 0x33, 0x4d, 0xf6, 0xcd, 0x2c, 0x80, 0xe7, 0x79, 0x00, 0xcb, 0x09, 0x8d, - 0x27, 0x86, 0x74, 0x4c, 0xe3, 0xad, 0x81, 0xa2, 0x87, 0xdf, 0x53, 0x35, 0x7b, 0x6c, 0xfc, 0x70, - 0x89, 0x89, 0xb1, 0xd4, 0x09, 0x61, 0x83, 0x12, 0xd0, 0xbe, 0x1b, 0x4e, 0x82, 0x7e, 0x98, 0xd3, - 0x8e, 0x95, 0x43, 0x33, 0x9b, 0x4e, 0x5f, 0xdc, 0x6c, 0xd5, 0x65, 0x98, 0x7d, 0xa3, 0x7d, 0xac, - 0x00, 0x4e, 0x0e, 0xab, 0x8e, 0xf6, 0xa1, 0x1c, 0xb7, 0xc3, 0x0e, 0xf1, 0x90, 0x9f, 0xa3, 0x1b, - 0x88, 0xe8, 0x41, 0x7d, 0x3c, 0xb8, 0x3a, 0x5c, 0x86, 0x6b, 0x3b, 0x0d, 0x78, 0xd9, 0xeb, 0x41, - 0xdf, 0x87, 0x2e, 0xae, 0x5a, 0xc9, 0x18, 0xfe, 0x52, 0x7d, 0x22, 0x78, 0x90, 0x65, 0x7b, 0x56, - 0x17, 0xba, 0x6d, 0xab, 0xef, 0x95, 0xed, 0x6e, 0x7b, 0xdf, 0x77, 0x5c, 0xcb, 0xa4, 0x37, 0x52, - 0x96, 0x8c, 0xb8, 0xd7, 0xea, 0x4d, 0x40, 0xb1, 0xbc, 0xa6, 0x7d, 0xc1, 0x31, 0xdd, 0xae, 0x65, - 0xef, 0xd4, 0x2d, 0xcf, 0xa7, 0x1e, 0xc0, 0x07, 0xd2, 0xb5, 0xbf, 0x96, 0x45, 0x0f, 0xd3, 0x8d, - 0x80, 0x35, 0xa6, 0x43, 0x79, 0xbe, 0x2c, 0x72, 0x3c, 0x2e, 0x1d, 0xed, 0x74, 0xca, 0xf2, 0xdc, - 0x69, 0x1b, 0x12, 0xc3, 0x47, 0x70, 0xdc, 0xb5, 0x90, 0xf4, 0xc0, 0x10, 0x38, 0xa7, 0x1b, 0xb5, - 0x95, 0x9a, 0x8e, 0xcc, 0x8a, 0xab, 0xc1, 0x89, 0xe8, 0x5d, 0xf5, 0xde, 0xad, 0x96, 0xde, 0x68, - 0x2b, 0x25, 0xd4, 0x4f, 0x91, 0xe4, 0x95, 0x72, 0xad, 0xae, 0x57, 0xb7, 0xda, 0x4d, 0xf4, 0xa6, - 0x3a, 0x9e, 0x69, 0xa1, 0x3d, 0x27, 0x0f, 0x8e, 0x63, 0xd9, 0x5e, 0xc1, 0x52, 0x45, 0x42, 0x19, - 0xf0, 0xb5, 0x0d, 0x01, 0x9a, 0x25, 0xe2, 0xd5, 0x7e, 0x5f, 0xf8, 0xc2, 0x4d, 0x06, 0xc2, 0x81, - 0x32, 0x62, 0x34, 0xe3, 0x3b, 0x92, 0x48, 0x84, 0x0a, 0x61, 0xb2, 0xe9, 0x94, 0xe2, 0x9f, 0xa7, - 0x3d, 0xe2, 0xc4, 0x83, 0x8f, 0xad, 0xcc, 0x0a, 0xfe, 0xf8, 0x69, 0x1b, 0x35, 0x03, 0xab, 0xc3, - 0x22, 0x00, 0x38, 0x05, 0x6b, 0x10, 0xd1, 0x83, 0xa1, 0xe3, 0x55, 0x9c, 0x1e, 0x94, 0x2b, 0xed, - 0xda, 0x39, 0x3d, 0x4e, 0x0f, 0x3e, 0x2f, 0x83, 0xd2, 0x2a, 0xf4, 0xd1, 0x9c, 0xca, 0xd3, 0x9e, - 0x24, 0xb0, 0xfe, 0x83, 0xcc, 0x98, 0x9e, 0xd3, 0x31, 0x7b, 0xe1, 0x32, 0x00, 0x79, 0xd2, 0x7e, - 0x6c, 0x1c, 0x13, 0x24, 0x28, 0x3a, 0x66, 0xbc, 0xfa, 0x21, 0x50, 0xf0, 0xd1, 0x6b, 0xba, 0x0c, - 0xfd, 0xb0, 0xd8, 0xe1, 0x0a, 0x11, 0xa9, 0x9a, 0xbe, 0x69, 0x90, 0xfc, 0xcc, 0xe8, 0x24, 0x68, - 0xbb, 0xc4, 0x30, 0xf2, 0xfd, 0x68, 0x7f, 0xfe, 0x85, 0x0c, 0xae, 0x26, 0xed, 0xa3, 0xdc, 0xef, - 0xb7, 0x7c, 0xc7, 0x85, 0x06, 0xec, 0x40, 0xab, 0xef, 0x0f, 0xac, 0xef, 0xb9, 0x24, 0x35, 0xd8, - 0x6c, 0xa6, 0x8f, 0xda, 0x1b, 0x64, 0xd1, 0x08, 0xbf, 0x07, 0xda, 0xe3, 0x40, 0x79, 0x31, 0x8d, - 0xfd, 0x53, 0x92, 0x48, 0xcc, 0xde, 0x94, 0xc4, 0xd3, 0x01, 0xf5, 0xf1, 0x23, 0x00, 0x2a, 0x58, - 0xb9, 0x31, 0xf4, 0x8a, 0x5e, 0xdb, 0x40, 0x83, 0xc0, 0x43, 0xc1, 0x83, 0x37, 0x36, 0x8d, 0xca, - 0x5a, 0xb9, 0xa5, 0x6f, 0x19, 0xfa, 0x6a, 0xad, 0xd5, 0xa6, 0x4e, 0x59, 0xe4, 0xab, 0x19, 0xf5, - 0x5a, 0x70, 0xba, 0xb5, 0xb9, 0xdc, 0xaa, 0x18, 0xb5, 0x0d, 0x9c, 0x6e, 0xe8, 0x0d, 0xfd, 0x3c, - 0x7d, 0x5b, 0xd2, 0x3e, 0xa2, 0x80, 0x39, 0x34, 0x01, 0x68, 0x91, 0x79, 0x81, 0xf6, 0x37, 0x79, - 0x30, 0x67, 0x40, 0xcf, 0xe9, 0x5d, 0xc2, 0x73, 0x84, 0x69, 0x4d, 0x3d, 0xbe, 0x2d, 0x8b, 0x9e, - 0xdf, 0x66, 0x98, 0x5d, 0x62, 0x18, 0x8d, 0x9f, 0x68, 0x9a, 0x97, 0x4c, 0xab, 0x67, 0x5e, 0xa0, - 0x5d, 0x4d, 0xc9, 0x88, 0x12, 0xd4, 0x25, 0xa0, 0x3a, 0x97, 0x6d, 0xe8, 0xb6, 0x3a, 0x97, 0x75, - 0x7f, 0xb7, 0xdc, 0xed, 0xba, 0xd0, 0xf3, 0xe8, 0xea, 0xc5, 0x90, 0x37, 0xea, 0x8d, 0xe0, 0x38, - 0x4e, 0x65, 0x32, 0x13, 0x07, 0x99, 0xc1, 0xe4, 0x30, 0x67, 0xd9, 0xbe, 0x12, 0xe4, 0x2c, 0x30, - 0x39, 0xa3, 0x64, 0xf6, 0xb8, 0x44, 0x91, 0x3f, 0xa5, 0x73, 0x1d, 0x98, 0xb3, 0xcd, 0x3d, 0xa8, - 0xdf, 0xdf, 0xb7, 0x5c, 0xe8, 0x61, 0xc7, 0x18, 0xd9, 0x60, 0x93, 0xb4, 0x8f, 0x09, 0x9d, 0x37, - 0x17, 0x93, 0x58, 0x3a, 0xdd, 0x5f, 0x1d, 0x43, 0xf5, 0x87, 0xf4, 0x33, 0xb2, 0xf6, 0x11, 0x19, - 0xcc, 0x53, 0xa6, 0xca, 0xf6, 0x95, 0x5a, 0x57, 0x7b, 0x28, 0x67, 0xfc, 0x9a, 0x28, 0x2d, 0x30, - 0x7e, 0xf1, 0x83, 0xf6, 0x13, 0xb2, 0xa8, 0xbb, 0xf3, 0x90, 0x8a, 0xe3, 0x32, 0xe2, 0x1d, 0x47, - 0xb7, 0x9d, 0x7d, 0xea, 0xa8, 0x5a, 0x32, 0xc8, 0x43, 0x96, 0x8b, 0x7a, 0xda, 0xaf, 0x0b, 0x39, - 0x53, 0x0b, 0x56, 0xe3, 0x88, 0x00, 0xfc, 0x8c, 0x0c, 0x16, 0x29, 0x57, 0x2d, 0x7a, 0xce, 0x47, - 0xe8, 0xc0, 0xdb, 0x4f, 0x09, 0x1b, 0x82, 0x43, 0xea, 0x4f, 0x4b, 0x7a, 0xc0, 0x00, 0xf9, 0x09, - 0xa1, 0xe0, 0x68, 0xc2, 0x15, 0x39, 0x22, 0x28, 0xdf, 0x95, 0x07, 0x73, 0x9b, 0x1e, 0x74, 0xa9, - 0xdf, 0xbe, 0xf6, 0xda, 0x3c, 0x90, 0x57, 0x21, 0xb7, 0x91, 0xfa, 0x22, 0x61, 0x0f, 0x5f, 0xb6, - 0xb2, 0x0c, 0x51, 0x64, 0x23, 0xc5, 0xc0, 0x76, 0x03, 0x58, 0x24, 0x22, 0x2d, 0xfb, 0x3e, 0x32, - 0x12, 0x03, 0x6f, 0xda, 0x81, 0xd4, 0x49, 0x6c, 0x15, 0xe1, 0xb2, 0x50, 0x96, 0x0a, 0xe2, 0xa9, - 0x0e, 0xb7, 0xc9, 0x7c, 0x36, 0x6f, 0x0c, 0xa4, 0xaa, 0x8f, 0x01, 0x57, 0x39, 0x7d, 0x48, 0xce, - 0xaf, 0x30, 0x99, 0x0b, 0x38, 0xf3, 0xb0, 0x57, 0xda, 0xdf, 0x08, 0xf9, 0xea, 0x8a, 0x4b, 0x27, - 0x9d, 0x2e, 0xf4, 0x27, 0x63, 0x92, 0x9c, 0x04, 0x0a, 0xca, 0x81, 0xf7, 0x5f, 0x0c, 0xbd, 0xd5, - 0xac, 0x9f, 0xd3, 0x87, 0x2f, 0x63, 0x14, 0xb4, 0xe7, 0xca, 0x60, 0x76, 0xd9, 0x75, 0xcc, 0x6e, - 0xc7, 0xf4, 0x7c, 0xed, 0xbb, 0x12, 0x98, 0xdf, 0x30, 0xaf, 0xf4, 0x1c, 0xb3, 0x8b, 0xfd, 0xfb, - 0x07, 0xfa, 0x82, 0x3e, 0x79, 0x15, 0xf4, 0x05, 0xf4, 0x91, 0x3f, 0x18, 0x18, 0x1e, 0xdd, 0xcb, - 0x89, 0xdc, 0xab, 0x19, 0x6e, 0xf3, 0x49, 0xc3, 0x82, 0x95, 0x06, 0x7c, 0x2d, 0xb1, 0x3c, 0xc5, - 0x58, 0x94, 0x1f, 0x11, 0x0b, 0x3f, 0x2a, 0x42, 0xf2, 0x68, 0x76, 0xe5, 0x9f, 0x57, 0x02, 0xc5, - 0x2a, 0xc4, 0x56, 0xdc, 0xaf, 0x4a, 0x60, 0xa6, 0x05, 0x7d, 0x6c, 0xc1, 0xdd, 0xc6, 0x79, 0x0a, - 0x77, 0x71, 0x86, 0xc8, 0x89, 0x3d, 0x78, 0x46, 0x93, 0x75, 0xe6, 0xbc, 0x35, 0xfe, 0x9f, 0xc2, - 0x23, 0x91, 0x94, 0xbb, 0x44, 0xcb, 0x3c, 0x94, 0x47, 0x62, 0x22, 0xa9, 0xec, 0x7d, 0xad, 0xde, - 0x23, 0x51, 0xd7, 0x2a, 0xa6, 0xd7, 0x7b, 0x35, 0xab, 0x9f, 0x89, 0xde, 0x66, 0x94, 0xf9, 0x04, - 0xe7, 0xa8, 0xc7, 0x81, 0x19, 0x22, 0xf3, 0x60, 0x3e, 0x3a, 0xe8, 0xa7, 0x40, 0x48, 0xe0, 0xb3, - 0xd7, 0x41, 0x4e, 0x41, 0x17, 0xb5, 0xf8, 0xc2, 0xa7, 0x12, 0x83, 0x60, 0xbe, 0x01, 0xfd, 0xcb, - 0x8e, 0x7b, 0xb1, 0xe5, 0x9b, 0x3e, 0xd4, 0xfe, 0x59, 0x22, 0xd7, 0xe5, 0x31, 0xd1, 0x4f, 0x1a, - 0xe0, 0x04, 0xa9, 0x10, 0xcd, 0x88, 0xfb, 0x6f, 0x52, 0x91, 0xeb, 0x86, 0x0a, 0x81, 0xc9, 0x67, - 0x1c, 0xfc, 0x54, 0x7b, 0xe9, 0xd0, 0xa0, 0x4f, 0xd2, 0x90, 0x49, 0x03, 0x95, 0x0c, 0xcb, 0x60, - 0xfc, 0xfd, 0x78, 0xda, 0x47, 0x85, 0xcc, 0x6a, 0x31, 0x9a, 0x47, 0xd3, 0x15, 0x7c, 0xf8, 0x51, - 0x20, 0x5f, 0xd9, 0x35, 0x7d, 0xed, 0xdd, 0x32, 0x00, 0xe5, 0x6e, 0x77, 0x9d, 0xf8, 0x80, 0xb3, - 0x0e, 0x69, 0x67, 0xc1, 0x7c, 0x67, 0xd7, 0x8c, 0x6e, 0xce, 0x20, 0xfd, 0x01, 0x97, 0xa6, 0x3e, - 0x3e, 0x72, 0x26, 0x27, 0x52, 0xd5, 0x06, 0x60, 0x42, 0x65, 0x50, 0xda, 0xa1, 0xa3, 0x39, 0x1f, - 0x0a, 0x33, 0xf1, 0x08, 0x1d, 0xfa, 0x7c, 0x29, 0x62, 0x2f, 0x7e, 0x0e, 0x47, 0x49, 0x87, 0x07, - 0x6c, 0xa2, 0x84, 0x94, 0x27, 0xbd, 0xc5, 0x02, 0x7a, 0x24, 0xf3, 0x35, 0x95, 0xd0, 0xb5, 0xaa, - 0xde, 0xb5, 0x02, 0xd1, 0xd2, 0x80, 0x59, 0xda, 0x0b, 0x73, 0xe9, 0xe0, 0x4b, 0x16, 0xdc, 0x53, - 0xc0, 0x02, 0xec, 0x5a, 0x3e, 0x0c, 0x6a, 0x49, 0x05, 0x98, 0x04, 0x31, 0xff, 0x81, 0xf6, 0x6c, - 0xe1, 0xa0, 0x6b, 0x58, 0xa0, 0x07, 0x6b, 0x14, 0xd3, 0xfe, 0xc4, 0xc2, 0xa8, 0x89, 0xd1, 0xcc, - 0x1e, 0xac, 0x1f, 0x93, 0xc1, 0xd5, 0x6d, 0x67, 0x67, 0xa7, 0x07, 0x03, 0x31, 0x41, 0xe2, 0x9d, - 0xa9, 0x99, 0x93, 0x84, 0x0b, 0xef, 0x04, 0x39, 0xf7, 0x59, 0xe1, 0x51, 0x32, 0xf4, 0xc0, 0x9f, - 0x98, 0x4a, 0x9c, 0x45, 0x61, 0x71, 0x0d, 0xe5, 0x33, 0x06, 0x05, 0xb1, 0x80, 0xcf, 0xc2, 0x64, - 0xb3, 0x07, 0xe2, 0x4b, 0x12, 0x58, 0x20, 0xf7, 0x22, 0x06, 0x0a, 0x7a, 0xcf, 0x04, 0x01, 0xd0, - 0xbe, 0x9b, 0x13, 0xf5, 0xb3, 0xc5, 0x32, 0xe1, 0x38, 0x89, 0x11, 0xb1, 0x58, 0x50, 0x95, 0x91, - 0xe4, 0xa6, 0x70, 0x53, 0x67, 0x1e, 0xcc, 0xad, 0xc2, 0xa0, 0xa5, 0x79, 0xda, 0xfb, 0x53, 0xf6, - 0x44, 0x67, 0xc1, 0x3c, 0xbe, 0x1c, 0xac, 0x49, 0x8f, 0x49, 0x92, 0x55, 0x33, 0x2e, 0x4d, 0xbd, - 0x1e, 0x2c, 0x5c, 0x80, 0xdb, 0x8e, 0x0b, 0x9b, 0xdc, 0x59, 0x4a, 0x3e, 0x71, 0x78, 0x78, 0x3a, - 0xf5, 0x46, 0x70, 0x9c, 0x3a, 0xba, 0x2f, 0xa3, 0xb9, 0xbe, 0xe9, 0x5e, 0xa1, 0x07, 0xd3, 0x06, - 0x93, 0xb5, 0xbf, 0x60, 0x1b, 0xcc, 0x32, 0x8f, 0xe2, 0xcd, 0x07, 0xc5, 0xce, 0x54, 0x3a, 0x66, - 0x74, 0x7a, 0x02, 0x28, 0x51, 0x1d, 0x09, 0x0c, 0xba, 0xa4, 0x1e, 0x34, 0xcc, 0xab, 0x3e, 0x01, - 0xcc, 0x22, 0x11, 0x61, 0xbb, 0x81, 0x76, 0xbd, 0xa7, 0x87, 0x7c, 0x88, 0xdf, 0x1b, 0x51, 0x56, - 0xed, 0x97, 0x42, 0x9d, 0xd1, 0x39, 0x9d, 0x79, 0x6c, 0x1a, 0xe6, 0xa7, 0x72, 0x91, 0xbc, 0xc2, - 0x94, 0xbf, 0x7c, 0xa5, 0xd6, 0xf5, 0xb4, 0xf5, 0x74, 0x5a, 0x73, 0x06, 0x80, 0xb0, 0xf9, 0x05, - 0x81, 0x33, 0x98, 0x14, 0x3e, 0x36, 0x7e, 0xe2, 0x51, 0xc0, 0x41, 0x71, 0x60, 0x76, 0x26, 0x0b, - 0xa8, 0xe0, 0x11, 0x42, 0x11, 0x4e, 0xb2, 0x47, 0xe7, 0x17, 0xf3, 0xe0, 0xea, 0xf0, 0x84, 0x53, - 0xdd, 0xf4, 0xa2, 0x96, 0x7d, 0x6f, 0x3a, 0x88, 0xb8, 0x23, 0x25, 0x61, 0x73, 0x3c, 0x09, 0x0a, - 0xde, 0xfe, 0x85, 0xd0, 0x11, 0x90, 0x3c, 0x68, 0x6f, 0x94, 0x53, 0x8d, 0x55, 0x43, 0xf9, 0x9b, - 0x70, 0x23, 0xbc, 0x19, 0x9c, 0xb0, 0xf7, 0xf7, 0x42, 0x2c, 0x70, 0x4f, 0x43, 0x7b, 0x96, 0x83, - 0x2f, 0xf8, 0x26, 0x9b, 0x17, 0x6f, 0xb2, 0x29, 0x46, 0x52, 0x91, 0x4a, 0x67, 0xaf, 0x1e, 0x9f, - 0x1d, 0x38, 0x82, 0x56, 0x49, 0xad, 0x14, 0x04, 0x7e, 0x89, 0x85, 0xff, 0x1f, 0x73, 0xa9, 0x7a, - 0xde, 0xd1, 0x27, 0xd7, 0x52, 0xf4, 0x84, 0x47, 0x79, 0x6c, 0xed, 0x75, 0x05, 0xa0, 0xb5, 0x22, - 0x87, 0x1c, 0x0a, 0xea, 0x86, 0x0b, 0x2f, 0x59, 0xf0, 0xb2, 0x37, 0xb0, 0xdf, 0x41, 0xe4, 0x96, - 0x63, 0xe5, 0xf6, 0x8d, 0xbc, 0xa8, 0x43, 0x0d, 0xaf, 0x41, 0x07, 0x8a, 0x8a, 0x69, 0x3b, 0x4f, - 0x07, 0xa5, 0x3e, 0xcd, 0x41, 0xdb, 0x4e, 0x79, 0x3c, 0xaa, 0x28, 0x23, 0x4d, 0x35, 0x42, 0x92, - 0xda, 0xdf, 0xe6, 0xc0, 0x1c, 0xf3, 0x26, 0x7e, 0x47, 0xe0, 0x80, 0x6a, 0x49, 0xc9, 0x33, 0x52, - 0x59, 0x78, 0x46, 0xaa, 0x2e, 0x81, 0x82, 0x27, 0xd4, 0x68, 0x49, 0x36, 0xf5, 0x49, 0x60, 0xbe, - 0x0b, 0xfb, 0xd0, 0xee, 0x42, 0xbb, 0x63, 0x41, 0xef, 0x74, 0x01, 0x8b, 0x25, 0x36, 0x4c, 0x03, - 0x97, 0x59, 0x30, 0x7e, 0x77, 0x3a, 0xac, 0xb2, 0xd7, 0xd2, 0x3f, 0x95, 0xc0, 0x19, 0xa6, 0x95, - 0xac, 0xb8, 0xce, 0x5e, 0x6a, 0x4d, 0x7d, 0x39, 0x3b, 0x1e, 0x6f, 0xf2, 0x9a, 0x7a, 0x57, 0x62, - 0xa3, 0x1c, 0x52, 0x5c, 0x4c, 0xa3, 0x7f, 0x7f, 0x28, 0xdd, 0xa7, 0x71, 0xd2, 0xad, 0x1e, 0x92, - 0xfe, 0x14, 0x0e, 0x84, 0xe7, 0xc1, 0xbc, 0x01, 0xcd, 0x6e, 0x38, 0xd4, 0xfe, 0x11, 0x63, 0x44, - 0x3f, 0x09, 0xe4, 0xfd, 0x68, 0x35, 0xec, 0x91, 0x07, 0x2b, 0xc3, 0x7e, 0x89, 0x1f, 0xf0, 0xa2, - 0x18, 0xfe, 0x48, 0xa8, 0xe1, 0x0c, 0x5a, 0xe0, 0xb2, 0x88, 0x05, 0x9e, 0x1f, 0x66, 0x81, 0x5f, - 0x07, 0xe6, 0x7a, 0xa6, 0x47, 0x1a, 0x4c, 0x78, 0xf7, 0x2f, 0x9b, 0xc4, 0xdf, 0xb2, 0x9f, 0x78, - 0xda, 0x6e, 0x58, 0xd5, 0x0e, 0x1f, 0x91, 0xf8, 0xc3, 0x42, 0x47, 0xeb, 0x46, 0x95, 0x9d, 0x4e, - 0x23, 0xee, 0x1e, 0x63, 0xe5, 0xee, 0x14, 0x50, 0xd7, 0xf5, 0x56, 0xab, 0xbc, 0x8a, 0x4f, 0xdc, - 0x04, 0x2e, 0x58, 0xdd, 0xb3, 0x37, 0x20, 0xf1, 0x11, 0x84, 0xd5, 0x79, 0x50, 0x0a, 0xf8, 0x53, - 0x8e, 0x91, 0x27, 0x1b, 0xef, 0x38, 0x29, 0x39, 0xed, 0x8b, 0x32, 0x28, 0x6e, 0xda, 0x2e, 0x34, - 0xbb, 0xda, 0xf3, 0x18, 0x5d, 0xfa, 0x41, 0x4e, 0x97, 0x1e, 0x36, 0xac, 0x61, 0xa0, 0x6f, 0x32, - 0xd2, 0x22, 0x3e, 0x1c, 0x59, 0xe2, 0x62, 0x39, 0xcf, 0xcc, 0xe1, 0x71, 0x17, 0x5b, 0x25, 0x8f, - 0x2f, 0x35, 0xf3, 0x3e, 0x40, 0x18, 0xd9, 0xdf, 0x96, 0x81, 0xb2, 0xb1, 0xef, 0xed, 0x72, 0x87, - 0xbe, 0x7f, 0x55, 0x06, 0x0b, 0xc1, 0xb9, 0x98, 0xb6, 0x73, 0x11, 0xda, 0xda, 0x33, 0xb8, 0x1e, - 0xd9, 0x47, 0x69, 0x41, 0x8f, 0x8c, 0x1f, 0xd4, 0x0d, 0x26, 0x34, 0x8c, 0x34, 0xec, 0x58, 0xff, - 0x40, 0x19, 0x4b, 0x1c, 0xfd, 0xa5, 0x0d, 0xfa, 0x6d, 0x14, 0x50, 0x46, 0x7b, 0xb1, 0xf0, 0x3d, - 0x47, 0x23, 0x68, 0x0f, 0xef, 0xde, 0xc5, 0x6e, 0x2e, 0x4a, 0x45, 0x3a, 0x7b, 0x54, 0xaf, 0x03, - 0xa5, 0x40, 0x52, 0xea, 0x0c, 0x90, 0x6b, 0xcd, 0x96, 0x72, 0x4c, 0x9d, 0x03, 0x33, 0x65, 0xbb, - 0xeb, 0x3a, 0x56, 0x57, 0xc9, 0x9d, 0x9d, 0x01, 0x05, 0x7d, 0xaf, 0xef, 0x5f, 0x39, 0xfb, 0x08, - 0xb0, 0xd0, 0xf2, 0x5d, 0x68, 0xee, 0x25, 0xe2, 0x76, 0xfb, 0x6d, 0x60, 0xc6, 0x76, 0xb6, 0xcc, - 0x7d, 0x7f, 0x57, 0x7d, 0xe8, 0x01, 0xab, 0x83, 0x6a, 0x4d, 0x93, 0x46, 0xe3, 0xfc, 0xfa, 0x1d, - 0x78, 0xa5, 0xa3, 0x68, 0x3b, 0xe5, 0x7d, 0x7f, 0x77, 0xf9, 0xda, 0xcf, 0xfc, 0xd9, 0x99, 0xdc, - 0xe7, 0xff, 0xec, 0x4c, 0xee, 0x6b, 0x7f, 0x76, 0x26, 0xf7, 0x53, 0xdf, 0x38, 0x73, 0xec, 0xf3, - 0xdf, 0x38, 0x73, 0xec, 0x4b, 0xdf, 0x38, 0x73, 0xec, 0x87, 0xa5, 0xfe, 0x85, 0x0b, 0x45, 0x4c, - 0xe5, 0x71, 0xff, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x4f, 0xb0, 0xbc, 0xab, 0x06, 0x33, 0x02, - 0x00, + 0x59, 0x2f, 0x3c, 0x95, 0x59, 0x55, 0x5d, 0x1d, 0x7d, 0x99, 0x9a, 0xdc, 0xd9, 0xd9, 0xd9, 0xdc, + 0x65, 0x76, 0x18, 0x96, 0x65, 0x5d, 0x96, 0xde, 0x65, 0x41, 0x64, 0x97, 0x5d, 0x96, 0xea, 0xaa, + 0xec, 0xee, 0xda, 0xad, 0xae, 0x6a, 0xb2, 0xaa, 0x67, 0x18, 0xcf, 0xe1, 0xeb, 0x93, 0x53, 0x15, + 0xdd, 0x9d, 0x3b, 0xd5, 0x99, 0x45, 0x66, 0x76, 0xcf, 0x36, 0xdf, 0x73, 0xbe, 0x23, 0x07, 0x11, + 0x10, 0x11, 0x51, 0x11, 0x11, 0xb9, 0x0b, 0x08, 0xc8, 0xfd, 0x26, 0x20, 0x17, 0xb9, 0x08, 0x22, + 0x2a, 0x8a, 0xca, 0x45, 0x79, 0x04, 0xf1, 0x82, 0xe7, 0x1c, 0xf5, 0xe0, 0xa7, 0x20, 0x2a, 0xc7, + 0xef, 0x89, 0x4b, 0x66, 0x46, 0x54, 0x57, 0x66, 0x45, 0x56, 0x57, 0x56, 0x2f, 0xfa, 0xfd, 0x55, + 0x95, 0x91, 0x91, 0x6f, 0xbc, 0xf1, 0xfe, 0xde, 0x88, 0x78, 0x23, 0xe2, 0x8d, 0x37, 0xc0, 0xe9, + 0xde, 0xa5, 0xdb, 0x7a, 0x8e, 0xed, 0xd9, 0xee, 0x6d, 0x6d, 0x7b, 0x67, 0xc7, 0xb0, 0x3a, 0xee, + 0x02, 0x7e, 0x56, 0xa6, 0x0c, 0x6b, 0xdf, 0xdb, 0xef, 0x41, 0xf5, 0xc6, 0xde, 0xe5, 0xad, 0xdb, + 0xba, 0xe6, 0xa5, 0xdb, 0x7a, 0x97, 0x6e, 0xdb, 0xb1, 0x3b, 0xb0, 0xeb, 0x7f, 0x80, 0x1f, 0x68, + 0x76, 0xf5, 0xe6, 0xa8, 0x5c, 0x5d, 0xbb, 0x6d, 0x74, 0x5d, 0xcf, 0x76, 0x20, 0xcd, 0x79, 0x2a, + 0x2c, 0x12, 0xee, 0x41, 0xcb, 0xf3, 0x29, 0x5c, 0xbf, 0x65, 0xdb, 0x5b, 0x5d, 0x48, 0xde, 0x5d, + 0xda, 0xdd, 0xbc, 0xcd, 0xf5, 0x9c, 0xdd, 0xb6, 0x47, 0xdf, 0x9e, 0xed, 0x7f, 0xdb, 0x81, 0x6e, + 0xdb, 0x31, 0x7b, 0x9e, 0xed, 0x90, 0x1c, 0xe7, 0xde, 0xfe, 0x8d, 0x02, 0x90, 0xf5, 0x5e, 0x5b, + 0xfd, 0xf6, 0x14, 0x90, 0x4b, 0xbd, 0x9e, 0xfa, 0x29, 0x09, 0x80, 0x65, 0xe8, 0x9d, 0x87, 0x8e, + 0x6b, 0xda, 0x96, 0x7a, 0x1c, 0x4c, 0xe9, 0xf0, 0x19, 0xbb, 0xd0, 0xf5, 0xee, 0xca, 0x3e, 0xef, + 0x2f, 0xe5, 0x8c, 0xfa, 0x7a, 0x09, 0x14, 0x74, 0xe8, 0xf6, 0x6c, 0xcb, 0x85, 0xca, 0x53, 0x40, + 0x0e, 0x3a, 0x8e, 0xed, 0x9c, 0xce, 0x9c, 0xcd, 0xdc, 0x3c, 0x73, 0xc7, 0x2d, 0x0b, 0xb4, 0xfa, + 0x0b, 0x7a, 0xaf, 0xbd, 0x50, 0xea, 0xf5, 0x16, 0x42, 0x4a, 0x0b, 0xfe, 0x47, 0x0b, 0x1a, 0xfa, + 0x42, 0x27, 0x1f, 0x2a, 0xa7, 0xc1, 0xd4, 0x1e, 0xc9, 0x70, 0x5a, 0x3a, 0x9b, 0xb9, 0x79, 0x5a, + 0xf7, 0x1f, 0xd1, 0x9b, 0x0e, 0xf4, 0x0c, 0xb3, 0xeb, 0x9e, 0x96, 0xc9, 0x1b, 0xfa, 0xa8, 0xbe, + 0x36, 0x03, 0x72, 0x98, 0x88, 0x52, 0x06, 0xd9, 0xb6, 0xdd, 0x81, 0xb8, 0xf8, 0xf9, 0x3b, 0x6e, + 0x13, 0x2f, 0x7e, 0xa1, 0x6c, 0x77, 0xa0, 0x8e, 0x3f, 0x56, 0xce, 0x82, 0x19, 0x5f, 0x2c, 0x21, + 0x1b, 0x6c, 0xd2, 0xb9, 0x3b, 0x40, 0x16, 0xe5, 0x57, 0x0a, 0x20, 0x5b, 0x5f, 0xaf, 0xd5, 0x8a, + 0xc7, 0x94, 0x13, 0x60, 0x6e, 0xbd, 0x7e, 0x7f, 0xbd, 0x71, 0xa1, 0xbe, 0xa1, 0xe9, 0x7a, 0x43, + 0x2f, 0x66, 0x94, 0x39, 0x30, 0xbd, 0x58, 0xaa, 0x6c, 0x54, 0xeb, 0x6b, 0xeb, 0xad, 0xa2, 0xa4, + 0xbe, 0x52, 0x06, 0xf3, 0x4d, 0xe8, 0x55, 0xe0, 0x9e, 0xd9, 0x86, 0x4d, 0xcf, 0xf0, 0xa0, 0xfa, + 0xa2, 0x4c, 0x20, 0x4c, 0x65, 0x1d, 0x15, 0x1a, 0xbc, 0xa2, 0x15, 0x78, 0xdc, 0x81, 0x0a, 0xf0, + 0x14, 0x16, 0xe8, 0xd7, 0x0b, 0x4c, 0x9a, 0xce, 0xd2, 0x39, 0xf7, 0x18, 0x30, 0xc3, 0xbc, 0x53, + 0xe6, 0x01, 0x58, 0x2c, 0x95, 0xef, 0x5f, 0xd6, 0x1b, 0xeb, 0xf5, 0x4a, 0xf1, 0x18, 0x7a, 0x5e, + 0x6a, 0xe8, 0x1a, 0x7d, 0xce, 0xa8, 0xdf, 0xcd, 0x30, 0x60, 0x56, 0x78, 0x30, 0x17, 0x86, 0x33, + 0x33, 0x00, 0x50, 0xf5, 0x0d, 0x01, 0x38, 0xcb, 0x1c, 0x38, 0x8f, 0x4b, 0x46, 0x2e, 0x7d, 0x80, + 0x9e, 0x23, 0x81, 0x42, 0x73, 0x7b, 0xd7, 0xeb, 0xd8, 0x57, 0x2c, 0x75, 0x3a, 0x40, 0x46, 0xfd, + 0x1b, 0x56, 0x26, 0x4f, 0xe6, 0x65, 0x72, 0xf3, 0xc1, 0x4a, 0x50, 0x0a, 0x11, 0xd2, 0x78, 0x75, + 0x20, 0x8d, 0x12, 0x27, 0x8d, 0xc7, 0x88, 0x12, 0x4a, 0x5f, 0x0e, 0x5f, 0xbf, 0x1b, 0xe4, 0x9a, + 0x3d, 0xa3, 0x0d, 0xd5, 0xcf, 0xc9, 0x60, 0xb6, 0x06, 0x8d, 0x3d, 0x58, 0xea, 0xf5, 0x1c, 0x7b, + 0x0f, 0xaa, 0xe5, 0x50, 0x5f, 0x4f, 0x83, 0x29, 0x17, 0x65, 0xaa, 0x76, 0x70, 0x0d, 0xa6, 0x75, + 0xff, 0x51, 0x39, 0x03, 0x80, 0xd9, 0x81, 0x96, 0x67, 0x7a, 0x26, 0x74, 0x4f, 0x4b, 0x67, 0xe5, + 0x9b, 0xa7, 0x75, 0x26, 0x45, 0xfd, 0xb6, 0x24, 0xaa, 0x63, 0x98, 0x8b, 0x05, 0x96, 0x83, 0x08, + 0xa9, 0xbe, 0x4e, 0x12, 0xd1, 0xb1, 0xa1, 0xe4, 0x92, 0xc9, 0xf6, 0x6d, 0x99, 0xe4, 0xc2, 0x45, + 0x39, 0xea, 0x8d, 0x8d, 0xe6, 0x7a, 0x79, 0x65, 0xa3, 0xb9, 0x56, 0x2a, 0x6b, 0x45, 0xa8, 0x9c, + 0x04, 0x45, 0xfc, 0x77, 0xa3, 0xda, 0xdc, 0xa8, 0x68, 0x35, 0xad, 0xa5, 0x55, 0x8a, 0x9b, 0x8a, + 0x02, 0xe6, 0x75, 0xed, 0xa9, 0xeb, 0x5a, 0xb3, 0xb5, 0xb1, 0x54, 0xaa, 0xd6, 0xb4, 0x4a, 0x71, + 0x0b, 0x7d, 0x5c, 0xab, 0xae, 0x56, 0x5b, 0x1b, 0xba, 0x56, 0x2a, 0xaf, 0x68, 0x95, 0xe2, 0xb6, + 0x72, 0x0d, 0xb8, 0xaa, 0xde, 0xd8, 0x28, 0xad, 0xad, 0xe9, 0x8d, 0xf3, 0xda, 0x06, 0xfd, 0xa2, + 0x59, 0x34, 0x49, 0x41, 0xad, 0x8d, 0xe6, 0x4a, 0x49, 0xd7, 0x4a, 0x8b, 0x35, 0xad, 0xf8, 0x80, + 0xfa, 0x6c, 0x19, 0xcc, 0xad, 0x1a, 0x97, 0x61, 0x73, 0xdb, 0x70, 0xa0, 0x71, 0xa9, 0x0b, 0xd5, + 0x47, 0x08, 0xe0, 0xa9, 0x7e, 0x8e, 0xc5, 0x4b, 0xe3, 0xf1, 0xba, 0x6d, 0x80, 0x80, 0xb9, 0x22, + 0x22, 0x00, 0xfb, 0xa7, 0xa0, 0x19, 0xac, 0x70, 0x80, 0x3d, 0x3e, 0x21, 0xbd, 0x64, 0x88, 0xfd, + 0xf7, 0x87, 0x00, 0x62, 0xea, 0x9f, 0x65, 0xc1, 0x7c, 0xd5, 0xda, 0x33, 0x3d, 0xb8, 0x0c, 0x2d, + 0xe8, 0xa0, 0x71, 0xe0, 0x8d, 0x19, 0x91, 0x76, 0x75, 0x27, 0x00, 0x26, 0xfe, 0xae, 0xb5, 0xdf, + 0x83, 0xb8, 0x7a, 0xf3, 0x77, 0x5c, 0x1b, 0xc8, 0x0b, 0x5b, 0x0b, 0x0b, 0xd5, 0x20, 0x83, 0xce, + 0x64, 0x56, 0x96, 0xc1, 0x4c, 0x0f, 0x3a, 0x3b, 0xa6, 0x8b, 0x46, 0x3e, 0x32, 0x7c, 0xce, 0xdf, + 0xf1, 0xc8, 0xbe, 0x6f, 0xd7, 0x0c, 0xc7, 0x33, 0xdb, 0x66, 0xcf, 0xb0, 0xbc, 0xb5, 0x30, 0xb3, + 0xce, 0x7e, 0xa9, 0xbe, 0x5e, 0x66, 0x74, 0x61, 0x89, 0xd7, 0x85, 0xdb, 0x07, 0x60, 0xc7, 0x57, + 0x34, 0x62, 0xc8, 0xbf, 0x1e, 0x4c, 0x13, 0x5e, 0xcb, 0x66, 0x87, 0xc2, 0x16, 0x26, 0x28, 0x37, + 0x82, 0x39, 0xf2, 0xb0, 0x64, 0x76, 0xe1, 0xfd, 0x70, 0x9f, 0x0e, 0xfe, 0x7c, 0xa2, 0xfa, 0x13, + 0x41, 0x0f, 0x50, 0xe5, 0x14, 0xea, 0x07, 0x93, 0x32, 0x95, 0x4c, 0xa3, 0x5e, 0xf2, 0x50, 0xe8, + 0x03, 0x0e, 0x34, 0x75, 0x53, 0xfd, 0x9e, 0x04, 0x66, 0x9a, 0x9e, 0xdd, 0x43, 0xed, 0xc6, 0xb4, + 0xb6, 0xc4, 0x1a, 0xfa, 0x67, 0xd8, 0x86, 0x5e, 0xe6, 0xc1, 0x7d, 0xcc, 0x00, 0x39, 0x32, 0x05, + 0x44, 0x34, 0xf3, 0x6f, 0x07, 0xcd, 0x7c, 0x89, 0x43, 0xe5, 0x8e, 0x44, 0xd4, 0xbe, 0x0f, 0x1b, + 0xf9, 0x4b, 0x64, 0x50, 0xf4, 0xd5, 0xcc, 0x2b, 0xef, 0x3a, 0x0e, 0xb4, 0x3c, 0x31, 0x10, 0xfe, + 0x98, 0x05, 0x61, 0x85, 0x07, 0xe1, 0x8e, 0x18, 0x65, 0xf6, 0x4b, 0x49, 0xb1, 0x8d, 0x7d, 0x2c, + 0x40, 0xf3, 0x7e, 0x0e, 0xcd, 0x1f, 0x4a, 0xce, 0x56, 0x32, 0x48, 0x57, 0x46, 0x40, 0xf4, 0x24, + 0x28, 0xa2, 0x81, 0xb1, 0xdc, 0xaa, 0x9e, 0xd7, 0x36, 0xaa, 0xf5, 0xf3, 0xd5, 0x96, 0x56, 0x84, + 0xea, 0x8b, 0xe5, 0xb0, 0xf3, 0xf5, 0x96, 0xb1, 0x79, 0x27, 0x84, 0xca, 0x97, 0xa5, 0xd1, 0xfa, + 0x3d, 0x52, 0xc6, 0x44, 0x30, 0x11, 0xef, 0xf7, 0x06, 0x32, 0x95, 0x0c, 0x91, 0xfb, 0x46, 0x40, + 0xe4, 0x14, 0x50, 0xaa, 0xf5, 0xf3, 0xa5, 0x5a, 0xb5, 0x42, 0xda, 0xd8, 0x46, 0xeb, 0xe2, 0x1a, + 0xc2, 0xe4, 0x67, 0x64, 0x30, 0x4b, 0x58, 0xd3, 0xe1, 0x9e, 0x7d, 0x59, 0xd0, 0x2a, 0xf9, 0x6a, + 0x42, 0x2b, 0x92, 0x2d, 0x21, 0xa2, 0xb7, 0xfa, 0xf1, 0x04, 0x56, 0x64, 0x0c, 0xb9, 0x87, 0xd2, + 0x08, 0x72, 0xa0, 0x6b, 0xda, 0x1a, 0xd0, 0x83, 0x0d, 0x1c, 0x41, 0x3e, 0x91, 0x05, 0x80, 0x54, + 0xf2, 0xbc, 0x09, 0xaf, 0xa8, 0xab, 0x21, 0x26, 0x9c, 0xda, 0x66, 0x86, 0xaa, 0xad, 0x34, 0x48, + 0x6d, 0xff, 0x82, 0xb5, 0x23, 0x16, 0x79, 0xf4, 0x6e, 0x8d, 0x14, 0x37, 0xe2, 0x24, 0x7a, 0xd9, + 0xc0, 0x57, 0x14, 0x89, 0x37, 0x9b, 0xae, 0x07, 0xd3, 0xf8, 0x6f, 0xdd, 0xd8, 0x81, 0xb4, 0x0d, + 0x85, 0x09, 0xca, 0x39, 0x30, 0x4b, 0x32, 0xb6, 0x6d, 0x0b, 0xd5, 0x27, 0x8b, 0x33, 0x70, 0x69, + 0x08, 0xc4, 0xb6, 0x03, 0x0d, 0xcf, 0x76, 0x30, 0x8d, 0x1c, 0x01, 0x91, 0x49, 0x52, 0x6e, 0x05, + 0x27, 0x4c, 0x17, 0xb7, 0xaa, 0x75, 0x17, 0x3a, 0x84, 0xd9, 0xd3, 0xf9, 0xb3, 0x99, 0x9b, 0x0b, + 0xfa, 0xc1, 0x17, 0xea, 0x37, 0x83, 0x36, 0xab, 0x71, 0x7a, 0xf6, 0xd8, 0x24, 0x15, 0x4f, 0xa6, + 0x65, 0x7b, 0xa3, 0xf5, 0xa0, 0xa4, 0xdf, 0xdc, 0x40, 0xba, 0xb1, 0x84, 0x57, 0x08, 0x20, 0x6d, + 0xc5, 0x28, 0x15, 0xe5, 0x2d, 0x37, 0xea, 0x2d, 0xad, 0xde, 0x2a, 0x6e, 0x0e, 0xd4, 0xbf, 0x2d, + 0xf5, 0x75, 0x59, 0x90, 0xbd, 0xcf, 0x36, 0x2d, 0xf5, 0x39, 0x19, 0x4e, 0x81, 0x2c, 0xe8, 0x5d, + 0xb1, 0x9d, 0xcb, 0x41, 0xb3, 0x0e, 0x13, 0xe2, 0x91, 0x0c, 0x15, 0x4f, 0x1e, 0xaa, 0x78, 0xd9, + 0x41, 0x8a, 0xf7, 0xd3, 0xac, 0xe2, 0xdd, 0xcd, 0x2b, 0xde, 0x4d, 0x03, 0xe4, 0x8f, 0x98, 0x8f, + 0xe8, 0x2e, 0x3e, 0x1d, 0x74, 0x17, 0xf7, 0x72, 0x30, 0x3e, 0x5a, 0x8c, 0x4c, 0x32, 0x00, 0xbf, + 0x92, 0x6a, 0x37, 0x31, 0x08, 0xea, 0xad, 0x08, 0xa8, 0xb7, 0x07, 0xf4, 0x20, 0xe6, 0xc1, 0x8e, + 0xe6, 0x81, 0x83, 0x9d, 0xca, 0x65, 0xe5, 0x6a, 0x70, 0xa2, 0x52, 0x5d, 0x5a, 0xd2, 0x74, 0xad, + 0xde, 0xda, 0xa8, 0x6b, 0xad, 0x0b, 0x0d, 0xfd, 0xfe, 0x62, 0x57, 0x7d, 0xad, 0x0c, 0x00, 0x92, + 0x50, 0xd9, 0xb0, 0xda, 0xb0, 0x2b, 0xd6, 0xff, 0xff, 0xad, 0x94, 0xac, 0x07, 0x09, 0xe9, 0x47, + 0xc0, 0xf9, 0x0a, 0x49, 0xbc, 0x55, 0x46, 0x12, 0x4b, 0x06, 0xea, 0x9b, 0x1f, 0x0a, 0xb3, 0x87, + 0xab, 0xc0, 0x71, 0x9f, 0x1e, 0xcd, 0x3e, 0x78, 0xf5, 0xe0, 0xed, 0x59, 0x30, 0x4f, 0x61, 0xf1, + 0x97, 0x83, 0x9e, 0x27, 0x34, 0x6f, 0x55, 0x41, 0x81, 0xae, 0xfe, 0xf8, 0x83, 0x41, 0xf0, 0x3c, + 0xbe, 0x89, 0xe9, 0x8b, 0x13, 0x4e, 0x4c, 0xf9, 0x9a, 0x44, 0xa8, 0xc4, 0xaf, 0x25, 0x98, 0x54, + 0xc6, 0x12, 0x4c, 0xa6, 0x16, 0x9f, 0x4a, 0x55, 0x2d, 0x06, 0xe0, 0xbd, 0xa5, 0x5c, 0x0b, 0xae, + 0xae, 0xd6, 0xcb, 0x0d, 0x5d, 0xd7, 0xca, 0xad, 0x8d, 0x35, 0x4d, 0x5f, 0xad, 0x36, 0x9b, 0xd5, + 0x46, 0xbd, 0x79, 0x98, 0xd6, 0xae, 0x7e, 0x56, 0x0e, 0x34, 0xa6, 0x02, 0xdb, 0x5d, 0xd3, 0x82, + 0xea, 0xbd, 0x87, 0x54, 0x18, 0x7e, 0xf1, 0x50, 0x1c, 0x67, 0x5a, 0x7e, 0x04, 0xce, 0xaf, 0x49, + 0x8e, 0xf3, 0x60, 0x82, 0xff, 0x8e, 0x9b, 0xff, 0x57, 0x65, 0x70, 0x82, 0x69, 0x88, 0x3a, 0xdc, + 0x19, 0xdb, 0x82, 0xf0, 0x7f, 0x67, 0xdb, 0x6e, 0x95, 0xc7, 0x74, 0x90, 0xed, 0x7d, 0x80, 0x8d, + 0x08, 0x58, 0xdf, 0x1c, 0xc0, 0x5a, 0xe3, 0x60, 0x7d, 0xe2, 0x08, 0x34, 0x93, 0x21, 0xfb, 0x8e, + 0x54, 0x91, 0xbd, 0x16, 0x5c, 0xbd, 0x56, 0xd2, 0x5b, 0xd5, 0x72, 0x75, 0xad, 0x84, 0xc6, 0x51, + 0x66, 0xc8, 0x8e, 0x30, 0xee, 0x79, 0xd0, 0x07, 0xe2, 0xfb, 0xd1, 0x2c, 0xb8, 0x7e, 0x70, 0x47, + 0x5b, 0xde, 0x36, 0xac, 0x2d, 0xa8, 0x9a, 0x22, 0x50, 0x57, 0xc0, 0x54, 0x1b, 0x67, 0x27, 0x38, + 0xb3, 0x3b, 0x80, 0x31, 0x7d, 0x39, 0x29, 0x41, 0xf7, 0x3f, 0x55, 0xdf, 0xcd, 0x2a, 0x44, 0x8b, + 0x57, 0x88, 0x27, 0xc7, 0x83, 0x77, 0x80, 0xef, 0x08, 0xdd, 0xf8, 0x7c, 0xa0, 0x1b, 0x17, 0x38, + 0xdd, 0x28, 0x1f, 0x8e, 0x7c, 0x32, 0x35, 0xf9, 0xad, 0x87, 0x42, 0x07, 0x10, 0xa9, 0x4d, 0x66, + 0xf4, 0xa8, 0x30, 0xb0, 0xbb, 0x7f, 0x95, 0x0c, 0xf2, 0x15, 0xd8, 0x85, 0x9e, 0xe0, 0x0c, 0xfe, + 0xef, 0x24, 0xd1, 0x7d, 0x35, 0x02, 0x03, 0xa1, 0x1d, 0xbd, 0x96, 0xe2, 0x99, 0x3b, 0xd0, 0xf5, + 0x8c, 0x9d, 0x1e, 0x16, 0xb5, 0xac, 0x87, 0x09, 0xea, 0x8f, 0x4a, 0x22, 0xbb, 0x6e, 0x31, 0xc5, + 0xfc, 0xfb, 0x58, 0x15, 0xfe, 0x82, 0x04, 0x0a, 0x4d, 0xe8, 0x35, 0x9c, 0x0e, 0x74, 0xd4, 0x66, + 0x88, 0xd1, 0x59, 0x30, 0x83, 0x41, 0x41, 0xd3, 0xcc, 0x00, 0x27, 0x36, 0x49, 0xb9, 0x09, 0xcc, + 0x07, 0x8f, 0xf8, 0x73, 0xda, 0x8d, 0xf7, 0xa5, 0xaa, 0xdf, 0xca, 0x88, 0x3a, 0x03, 0xd0, 0x45, + 0x5f, 0xca, 0x4d, 0x44, 0x2b, 0x15, 0xdb, 0xd8, 0x8f, 0x25, 0x95, 0xfe, 0x7e, 0xe9, 0x3b, 0x25, + 0x00, 0xd6, 0x2d, 0xd7, 0x97, 0xeb, 0xa3, 0x13, 0xc8, 0x55, 0xfd, 0xc7, 0x4c, 0xb2, 0x59, 0x4c, + 0x58, 0x4e, 0x84, 0xc4, 0x7e, 0x29, 0xc1, 0xda, 0x42, 0x24, 0xb1, 0xf4, 0x65, 0xf6, 0xa5, 0xe3, + 0x20, 0x7f, 0xc1, 0xe8, 0x76, 0xa1, 0xa7, 0xbe, 0x52, 0x06, 0xf9, 0xb2, 0x03, 0x0d, 0x0f, 0xaa, + 0x30, 0x14, 0x9d, 0x0a, 0x0a, 0x8e, 0x6d, 0x7b, 0x6b, 0x86, 0xb7, 0x4d, 0xe5, 0x16, 0x3c, 0x2b, + 0x4f, 0x04, 0xd7, 0x6c, 0xee, 0x76, 0xbb, 0x1e, 0x7c, 0xd0, 0x5b, 0x73, 0xcc, 0x1d, 0xc3, 0xd9, + 0xaf, 0x19, 0xd6, 0xd6, 0xae, 0xb1, 0x05, 0x29, 0x7b, 0x51, 0xaf, 0xa9, 0xc7, 0xca, 0xaf, 0xb0, + 0x1d, 0xcf, 0xbd, 0xbc, 0xd0, 0x7f, 0x80, 0x93, 0x13, 0x61, 0x71, 0x81, 0xb0, 0x17, 0xd1, 0xf3, + 0xa8, 0xa0, 0xb0, 0x63, 0xc1, 0x1d, 0xdb, 0x32, 0xdb, 0xbe, 0xb5, 0xea, 0x3f, 0xab, 0x1f, 0x0f, + 0xd0, 0x58, 0xe4, 0xd0, 0x58, 0x10, 0x2e, 0x25, 0x19, 0x14, 0xcd, 0x11, 0xfa, 0x9d, 0x1b, 0xc0, + 0x75, 0xa4, 0x1b, 0xd9, 0x68, 0x35, 0x36, 0xca, 0xba, 0x56, 0x6a, 0x69, 0x1b, 0xb5, 0x46, 0xb9, + 0x54, 0xdb, 0xd0, 0xb5, 0xb5, 0x46, 0x11, 0xa2, 0xd9, 0xf9, 0x94, 0x0e, 0xdb, 0xf6, 0x1e, 0x74, + 0xd4, 0x67, 0x65, 0xc4, 0x20, 0x8a, 0x11, 0x4a, 0x1c, 0x7c, 0xb2, 0x08, 0x7c, 0x3f, 0x2d, 0xec, + 0x70, 0x44, 0x05, 0x4b, 0x99, 0x8f, 0x68, 0x31, 0x9f, 0x10, 0xea, 0x63, 0x62, 0x49, 0x3d, 0x04, + 0x40, 0xfa, 0x07, 0x09, 0x4c, 0x95, 0x6d, 0x6b, 0x0f, 0x3a, 0x1e, 0x3b, 0xc9, 0x62, 0x71, 0xc8, + 0xf4, 0xe1, 0x70, 0x1a, 0x4c, 0x41, 0xcb, 0x73, 0xec, 0x9e, 0x3f, 0xcb, 0xf2, 0x1f, 0xd5, 0x37, + 0x26, 0x95, 0x30, 0x2d, 0x39, 0x7a, 0x6d, 0x76, 0x70, 0x41, 0x1c, 0x7b, 0x72, 0x5f, 0xdb, 0x79, + 0x6d, 0x12, 0x5c, 0x06, 0x33, 0x90, 0x7e, 0x3f, 0xf6, 0x35, 0x19, 0xcc, 0x91, 0x76, 0xdb, 0x84, + 0xd8, 0x2c, 0x54, 0x1b, 0xec, 0x3a, 0x67, 0x9f, 0xf0, 0x57, 0x8e, 0x71, 0xe2, 0xcf, 0x1b, 0xbd, + 0x5e, 0xb0, 0x42, 0xbe, 0x72, 0x4c, 0xa7, 0xcf, 0x44, 0xcd, 0x17, 0xf3, 0x20, 0x6b, 0xec, 0x7a, + 0xdb, 0xea, 0xf7, 0x84, 0x67, 0xbc, 0x5c, 0x3f, 0x42, 0xf9, 0x89, 0x80, 0xe4, 0x24, 0xc8, 0x79, + 0xf6, 0x65, 0xe8, 0xcb, 0x81, 0x3c, 0x20, 0x38, 0x8c, 0x5e, 0xaf, 0x85, 0x5f, 0x50, 0x38, 0xfc, + 0x67, 0x64, 0x60, 0x19, 0xed, 0xb6, 0xbd, 0x6b, 0x79, 0x55, 0x7f, 0x95, 0x3c, 0x4c, 0x50, 0xbf, + 0x24, 0xb4, 0x0d, 0x25, 0xc0, 0x60, 0x32, 0xc8, 0x2e, 0x8d, 0xd0, 0x94, 0x16, 0xc0, 0x2d, 0xa5, + 0xb5, 0xb5, 0x8d, 0x56, 0xe3, 0x7e, 0xad, 0x1e, 0x5a, 0xbb, 0x1b, 0xd5, 0xfa, 0x46, 0x6b, 0x45, + 0xdb, 0x28, 0xaf, 0xeb, 0x78, 0x71, 0xb2, 0x54, 0x2e, 0x37, 0xd6, 0xeb, 0xad, 0x22, 0x54, 0xdf, + 0x2a, 0x81, 0xd9, 0x72, 0xd7, 0x76, 0x03, 0x84, 0x6f, 0x08, 0x11, 0x0e, 0xc4, 0x98, 0x61, 0xc4, + 0xa8, 0xfe, 0x4b, 0x46, 0xd4, 0x61, 0xc6, 0x17, 0x08, 0x43, 0x3e, 0xa2, 0x97, 0x7a, 0xa3, 0x90, + 0xc3, 0xcc, 0x70, 0x7a, 0xe9, 0x37, 0x89, 0xcf, 0x2d, 0x81, 0xa9, 0x12, 0x51, 0x0c, 0xf5, 0x4f, + 0x33, 0x20, 0x5f, 0xb6, 0xad, 0x4d, 0x73, 0x0b, 0x59, 0x90, 0xd0, 0x32, 0x2e, 0x75, 0x61, 0xc5, + 0xf0, 0x8c, 0x3d, 0x13, 0x5e, 0xc1, 0x15, 0x28, 0xe8, 0x7d, 0xa9, 0x88, 0x29, 0x9a, 0x02, 0x2f, + 0xed, 0x6e, 0x61, 0xa6, 0x0a, 0x3a, 0x9b, 0x84, 0xc6, 0x0f, 0xf2, 0xb8, 0xe6, 0x40, 0x07, 0x76, + 0xa1, 0xe1, 0x42, 0x34, 0x17, 0xb3, 0x60, 0x17, 0x2b, 0x6d, 0x41, 0x8f, 0x7a, 0xad, 0x9c, 0x03, + 0xb3, 0xe4, 0x15, 0xb6, 0x7f, 0x5c, 0xac, 0xc6, 0x05, 0x9d, 0x4b, 0x53, 0x1e, 0x03, 0x72, 0xf0, + 0x41, 0xcf, 0x31, 0x4e, 0x77, 0x30, 0x5e, 0xd7, 0x2c, 0x10, 0x8f, 0xd9, 0x05, 0xdf, 0x63, 0x76, + 0xa1, 0x89, 0xfd, 0x69, 0x75, 0x92, 0x4b, 0xfd, 0xdf, 0x85, 0xc0, 0x7a, 0xf9, 0x82, 0x1c, 0x2a, + 0x86, 0x02, 0xb2, 0x96, 0xb1, 0x03, 0xa9, 0x5e, 0xe0, 0xff, 0xca, 0x2d, 0xe0, 0xb8, 0xb1, 0x67, + 0x78, 0x86, 0x53, 0xb3, 0xdb, 0x46, 0x17, 0x0f, 0x9b, 0x7e, 0xcb, 0xef, 0x7f, 0x81, 0x37, 0xad, + 0x3c, 0xdb, 0x81, 0x38, 0x97, 0xbf, 0x69, 0xe5, 0x27, 0x20, 0xea, 0x66, 0xdb, 0xb6, 0x30, 0xff, + 0xb2, 0x8e, 0xff, 0x23, 0xa9, 0x74, 0x4c, 0x17, 0x55, 0x04, 0x53, 0xa9, 0x93, 0xfd, 0x94, 0xe6, + 0xbe, 0xd5, 0xc6, 0x1b, 0x56, 0x05, 0x3d, 0xea, 0xb5, 0xb2, 0x08, 0x66, 0xe8, 0xee, 0xcb, 0x2a, + 0xd2, 0xab, 0x3c, 0xd6, 0xab, 0xb3, 0xbc, 0x3f, 0x22, 0xc1, 0x73, 0xa1, 0x1e, 0xe6, 0xd3, 0xd9, + 0x8f, 0x94, 0xa7, 0x80, 0xeb, 0xe8, 0x63, 0x79, 0xd7, 0xf5, 0xec, 0x1d, 0x02, 0xfa, 0x92, 0xd9, + 0x25, 0x35, 0x98, 0xc2, 0x35, 0x88, 0xcb, 0xa2, 0xdc, 0x01, 0x4e, 0xf6, 0x1c, 0xb8, 0x09, 0x9d, + 0x8b, 0xc6, 0xce, 0xee, 0x83, 0x2d, 0xc7, 0xb0, 0xdc, 0x9e, 0xed, 0x78, 0xa7, 0x0b, 0x98, 0xf9, + 0x81, 0xef, 0x94, 0x5b, 0xc1, 0x89, 0x07, 0x5c, 0xdb, 0x2a, 0xf5, 0xcc, 0x9a, 0xe9, 0x7a, 0xd0, + 0x2a, 0x75, 0x3a, 0xce, 0xe9, 0x69, 0x5c, 0xd6, 0xc1, 0x17, 0xca, 0x8d, 0x60, 0xee, 0x01, 0xdb, + 0xb4, 0x9a, 0x9e, 0x03, 0x8d, 0x9d, 0x75, 0xa7, 0x7b, 0x1a, 0x90, 0x0d, 0x22, 0x2e, 0x91, 0x76, + 0xbe, 0x05, 0x90, 0x27, 0x90, 0xa8, 0x2f, 0xca, 0x09, 0xbb, 0x37, 0x53, 0x21, 0xc5, 0x5a, 0x8b, + 0xb7, 0x83, 0x29, 0xda, 0x6b, 0x62, 0xf0, 0x67, 0xee, 0x38, 0xd5, 0xb7, 0x40, 0x42, 0xa9, 0xe8, + 0x7e, 0x36, 0xe5, 0x71, 0x20, 0xdf, 0xc6, 0xa2, 0xc2, 0x7a, 0x30, 0x73, 0xc7, 0x75, 0x83, 0x0b, + 0xc5, 0x59, 0x74, 0x9a, 0x55, 0xfd, 0xb2, 0x2c, 0xe4, 0x11, 0x1d, 0xc7, 0x71, 0xb2, 0x9e, 0xe2, + 0x9b, 0xd2, 0x08, 0x5d, 0xf1, 0xad, 0xe0, 0x66, 0xda, 0xcf, 0x52, 0x9b, 0xa6, 0xb2, 0xb1, 0xb8, + 0xee, 0xcf, 0x6a, 0x91, 0xa5, 0xd3, 0x6c, 0x95, 0xf4, 0xd6, 0x46, 0xbd, 0x51, 0x41, 0xb3, 0xe1, + 0x5b, 0xc0, 0x4d, 0x43, 0x72, 0x6b, 0xad, 0x8d, 0x7a, 0x69, 0x55, 0x2b, 0x6e, 0xf2, 0xf6, 0x52, + 0xb3, 0xd5, 0x58, 0xdb, 0xd0, 0xd7, 0xeb, 0xf5, 0x6a, 0x7d, 0x99, 0x10, 0x43, 0x06, 0xea, 0xa9, + 0x30, 0xc3, 0x05, 0xbd, 0xda, 0xd2, 0x36, 0xca, 0x8d, 0xfa, 0x52, 0x75, 0xb9, 0x68, 0x0e, 0x33, + 0xb6, 0x1e, 0x50, 0xce, 0x82, 0xeb, 0x39, 0x4e, 0xaa, 0x8d, 0x3a, 0x9a, 0xa2, 0x97, 0x4b, 0xf5, + 0xb2, 0x86, 0xe6, 0xe3, 0x97, 0x15, 0x15, 0x5c, 0x4d, 0xc8, 0x6d, 0x2c, 0x55, 0x6b, 0xec, 0xae, + 0xda, 0x67, 0x32, 0xca, 0x69, 0x70, 0x15, 0xfb, 0x8e, 0xfa, 0x44, 0x14, 0x7f, 0x33, 0xa3, 0xdc, + 0x08, 0x6e, 0xe0, 0xbe, 0x22, 0x1b, 0x64, 0x1b, 0xd5, 0xca, 0xc6, 0x6a, 0xb5, 0xb9, 0x5a, 0x6a, + 0x95, 0x57, 0x8a, 0x9f, 0xc5, 0xd3, 0x97, 0xc0, 0x1e, 0x67, 0xdc, 0x94, 0x5f, 0xc2, 0xda, 0x09, + 0x25, 0x5e, 0x51, 0x1f, 0x3d, 0x10, 0xf6, 0x78, 0xbb, 0xf8, 0x53, 0xc1, 0x88, 0x53, 0xe1, 0x54, + 0xe8, 0xf6, 0x04, 0xb4, 0x92, 0xe9, 0x50, 0x6b, 0x04, 0x15, 0x3a, 0x0b, 0xae, 0xaf, 0x6b, 0x04, + 0x29, 0x5d, 0x2b, 0x37, 0xce, 0x6b, 0xfa, 0xc6, 0x85, 0x52, 0xad, 0xa6, 0xb5, 0x36, 0x96, 0xaa, + 0x7a, 0xb3, 0x55, 0xdc, 0x54, 0xff, 0x51, 0x0a, 0x96, 0xa5, 0x18, 0x69, 0xfd, 0xa9, 0x94, 0xb4, + 0x59, 0xc7, 0x2e, 0x3f, 0xfd, 0x20, 0xc8, 0xbb, 0x9e, 0xe1, 0xed, 0xba, 0xb4, 0x55, 0x3f, 0x6c, + 0x70, 0xab, 0x5e, 0x68, 0xe2, 0x4c, 0x3a, 0xcd, 0xac, 0x7e, 0x39, 0x93, 0xa4, 0x99, 0x8e, 0x61, + 0x65, 0xca, 0x1c, 0x41, 0xc4, 0x67, 0x80, 0xea, 0x6b, 0x7b, 0xb5, 0xb9, 0x51, 0xaa, 0xe9, 0x5a, + 0xa9, 0x72, 0x31, 0x58, 0x8f, 0x82, 0xca, 0xd5, 0xe0, 0xc4, 0x7a, 0xbd, 0xb4, 0x58, 0xd3, 0x70, + 0x73, 0x69, 0xd4, 0xeb, 0x5a, 0x19, 0xc9, 0xfd, 0x47, 0xf1, 0xee, 0x0f, 0xb2, 0xca, 0x31, 0xdf, + 0xc8, 0x72, 0x62, 0xe4, 0xff, 0x97, 0xc2, 0x6e, 0x6e, 0xa1, 0x86, 0xb1, 0xb4, 0xc6, 0x8b, 0xc3, + 0x97, 0x84, 0x3c, 0xdb, 0x84, 0x38, 0x49, 0x86, 0xc7, 0x7f, 0x19, 0x01, 0x8f, 0xab, 0xc1, 0x09, + 0x16, 0x0f, 0xec, 0xe1, 0x16, 0x0d, 0xc3, 0x9f, 0xc8, 0x60, 0x6a, 0xd5, 0xdc, 0xc2, 0x7e, 0xc6, + 0xbb, 0xa1, 0x81, 0x32, 0x0f, 0xa4, 0xc0, 0x7b, 0x47, 0x32, 0x3b, 0xdc, 0x64, 0x5e, 0x12, 0x5f, + 0x6f, 0x11, 0x9a, 0xb0, 0x7f, 0x39, 0x71, 0xcf, 0x44, 0x19, 0x8e, 0xe8, 0x99, 0x9e, 0x2f, 0x25, + 0xe9, 0x99, 0x06, 0xd3, 0x4a, 0x04, 0x13, 0x32, 0x1d, 0x1c, 0xf8, 0x8c, 0x5d, 0xd3, 0x81, 0x1d, + 0x6c, 0x26, 0xe2, 0x7a, 0xcb, 0x3a, 0x9f, 0x78, 0xce, 0x39, 0x1c, 0x98, 0xac, 0x97, 0xcd, 0x2c, + 0x28, 0x04, 0xa3, 0x09, 0xde, 0xf0, 0x41, 0x2f, 0xb5, 0x7a, 0x63, 0x7d, 0x79, 0x65, 0x63, 0x49, + 0xd7, 0x34, 0xba, 0x44, 0xbc, 0xa5, 0xbe, 0x4b, 0x02, 0x73, 0xb4, 0x86, 0xd4, 0x7b, 0xe2, 0x86, + 0x48, 0x90, 0x29, 0x1c, 0xff, 0xc6, 0x4e, 0x4f, 0x96, 0x79, 0x38, 0x1e, 0x1b, 0x27, 0xc2, 0x58, + 0xf7, 0x89, 0x37, 0x05, 0x4d, 0xe8, 0x3e, 0x0e, 0x94, 0x27, 0x24, 0xa6, 0x98, 0xfe, 0x14, 0xe5, + 0x45, 0x00, 0xe4, 0x9b, 0xb0, 0x0b, 0xdb, 0x9e, 0xfa, 0x61, 0x79, 0xe4, 0x36, 0x11, 0x65, 0x6e, + 0xcb, 0x89, 0xcc, 0xed, 0x6c, 0x0a, 0xe6, 0x76, 0x6e, 0x74, 0x73, 0x3b, 0x9f, 0xd4, 0xdc, 0x9e, + 0x8a, 0x32, 0xb7, 0x63, 0x7a, 0x8d, 0x42, 0x6c, 0xaf, 0xd1, 0x67, 0xa8, 0xeb, 0x35, 0x6a, 0xd2, + 0xf3, 0x89, 0x54, 0x99, 0x3f, 0x99, 0x4f, 0x3a, 0x8e, 0x13, 0xe0, 0x8f, 0xd6, 0x3c, 0xff, 0xc9, + 0x5c, 0x92, 0x71, 0x7f, 0x20, 0xc7, 0xc9, 0x5a, 0xc9, 0x2b, 0xb2, 0x29, 0x2c, 0x3a, 0x2a, 0x8f, + 0x00, 0x37, 0x84, 0xcf, 0x1b, 0xda, 0xd3, 0xaa, 0xcd, 0x56, 0x13, 0xdb, 0xe4, 0xe5, 0x86, 0xae, + 0xaf, 0xaf, 0x91, 0xed, 0xaa, 0x53, 0x40, 0x09, 0xa9, 0xe8, 0xeb, 0x75, 0x62, 0x81, 0x6f, 0xf1, + 0xd4, 0x97, 0xaa, 0xf5, 0xca, 0x46, 0x30, 0xaa, 0xd5, 0x97, 0x1a, 0xc5, 0x6d, 0x65, 0x01, 0xdc, + 0xc2, 0x50, 0xc7, 0x1d, 0x20, 0x29, 0xa1, 0x54, 0xaf, 0x6c, 0xac, 0xd6, 0xb5, 0xd5, 0x46, 0xbd, + 0x5a, 0xc6, 0xe9, 0x4d, 0xad, 0x55, 0x34, 0x91, 0x29, 0xd8, 0x67, 0xf3, 0x37, 0xb5, 0x92, 0x5e, + 0x5e, 0xd1, 0x74, 0x52, 0xe4, 0x03, 0xca, 0x4d, 0xe0, 0x5c, 0xa9, 0xde, 0x68, 0xa1, 0x94, 0x52, + 0xfd, 0x62, 0xeb, 0xe2, 0x9a, 0xb6, 0xb1, 0xa6, 0x37, 0xca, 0x5a, 0xb3, 0x89, 0x46, 0x52, 0x3a, + 0x43, 0x28, 0x76, 0x95, 0x27, 0x83, 0xbb, 0x18, 0xd6, 0xb4, 0x16, 0xf6, 0x8d, 0x58, 0x6d, 0x60, + 0xf7, 0xb8, 0x8a, 0xb6, 0xb1, 0x52, 0x6a, 0x6e, 0x54, 0xeb, 0xe5, 0xc6, 0xea, 0x5a, 0xa9, 0x55, + 0x45, 0x03, 0xee, 0x9a, 0xde, 0x68, 0x35, 0x36, 0xce, 0x6b, 0x7a, 0xb3, 0xda, 0xa8, 0x17, 0x2d, + 0x54, 0x65, 0x66, 0x84, 0xf6, 0x2d, 0x25, 0x5b, 0xb9, 0x1e, 0x9c, 0xf6, 0xd3, 0x6b, 0x0d, 0x24, + 0x68, 0x66, 0xce, 0xd0, 0x63, 0xed, 0xac, 0x66, 0xab, 0xa1, 0x93, 0x59, 0xc3, 0x6a, 0x75, 0x59, + 0x47, 0x53, 0x9d, 0xe2, 0x33, 0x52, 0x9d, 0x53, 0xfc, 0xb3, 0x04, 0xb2, 0x4d, 0xcf, 0xee, 0xa9, + 0x3f, 0x10, 0x76, 0x87, 0x67, 0x00, 0x70, 0xb0, 0x2b, 0x44, 0xc5, 0xf0, 0x0c, 0xba, 0x5a, 0xc3, + 0xa4, 0xa8, 0xbf, 0x21, 0xbc, 0x7f, 0x1b, 0x5a, 0x5d, 0x76, 0x2f, 0x62, 0xf8, 0xf8, 0xae, 0xd8, + 0xb9, 0xc8, 0x68, 0x42, 0xc9, 0xda, 0xc3, 0x8f, 0x8f, 0xb2, 0x43, 0xab, 0x82, 0x53, 0x0c, 0xac, + 0x48, 0xfe, 0xbe, 0xca, 0x40, 0xe5, 0x1a, 0x70, 0x55, 0x9f, 0xf2, 0x61, 0x9d, 0xdb, 0x54, 0x1e, + 0x0e, 0x1e, 0xc6, 0xa8, 0xbf, 0xb6, 0xda, 0x38, 0xaf, 0x05, 0x8a, 0x5e, 0x29, 0xb5, 0x4a, 0xc5, + 0x2d, 0xf5, 0x0b, 0x32, 0xc8, 0xae, 0xda, 0x7b, 0xfd, 0xdb, 0xe6, 0x16, 0xbc, 0xc2, 0xec, 0xad, + 0xf8, 0x8f, 0xfc, 0x11, 0x2c, 0x21, 0xb1, 0xaf, 0x46, 0xbb, 0xc8, 0x7c, 0x49, 0x4a, 0x22, 0xf6, + 0xd5, 0xc3, 0xfa, 0xc5, 0xfc, 0xf5, 0x28, 0x62, 0x8f, 0x10, 0x2d, 0x54, 0xce, 0x81, 0x33, 0xe1, + 0x8b, 0x6a, 0x45, 0xab, 0xb7, 0xaa, 0x4b, 0x17, 0x43, 0xe1, 0x56, 0x75, 0x21, 0xf1, 0x0f, 0xeb, + 0xe6, 0xe2, 0xd7, 0x0a, 0x4e, 0x83, 0x93, 0xe1, 0xbb, 0x65, 0xad, 0xe5, 0xbf, 0x79, 0x40, 0x7d, + 0x4e, 0x0e, 0xcc, 0x92, 0x6e, 0x7f, 0xbd, 0xd7, 0x41, 0xd6, 0xf7, 0xe3, 0x42, 0x74, 0x6f, 0x06, + 0xc7, 0xab, 0x6b, 0x4b, 0xcd, 0xa6, 0x67, 0x3b, 0xc6, 0x16, 0xc4, 0xe3, 0x28, 0x91, 0x56, 0x7f, + 0xb2, 0xfa, 0x5e, 0xe1, 0xd5, 0x7f, 0x7e, 0xa8, 0x21, 0x65, 0x46, 0xa0, 0xfe, 0x35, 0xa1, 0xd5, + 0x7a, 0x01, 0x82, 0xc9, 0xd0, 0x7f, 0x60, 0xcc, 0x6d, 0x2e, 0x1a, 0x97, 0xcd, 0x73, 0xcf, 0x95, + 0xc0, 0x74, 0xcb, 0xdc, 0x81, 0xcf, 0xb4, 0x2d, 0xe8, 0x2a, 0x53, 0x40, 0x5e, 0x5e, 0x6d, 0x15, + 0x8f, 0xa1, 0x3f, 0x68, 0x5a, 0x94, 0xc1, 0x7f, 0x34, 0x54, 0x00, 0xfa, 0x53, 0x6a, 0x15, 0x65, + 0xf4, 0x67, 0x55, 0x6b, 0x15, 0xb3, 0xe8, 0x4f, 0x5d, 0x6b, 0x15, 0x73, 0xe8, 0xcf, 0x5a, 0xad, + 0x55, 0xcc, 0xa3, 0x3f, 0xd5, 0x66, 0xab, 0x38, 0x85, 0xfe, 0x2c, 0x36, 0x5b, 0xc5, 0x02, 0xfa, + 0x73, 0xbe, 0xd9, 0x2a, 0x4e, 0xa3, 0x3f, 0xe5, 0x56, 0xab, 0x08, 0xd0, 0x9f, 0xfb, 0x9a, 0xad, + 0xe2, 0x0c, 0xfa, 0x53, 0x2a, 0xb7, 0x8a, 0xb3, 0xf8, 0x8f, 0xd6, 0x2a, 0xce, 0xa1, 0x3f, 0xcd, + 0x66, 0xab, 0x38, 0x8f, 0x29, 0x37, 0x5b, 0xc5, 0xe3, 0xb8, 0xac, 0x6a, 0xab, 0x58, 0x44, 0x7f, + 0x56, 0x9a, 0xad, 0xe2, 0x09, 0x9c, 0xb9, 0xd9, 0x2a, 0x2a, 0xb8, 0xd0, 0x66, 0xab, 0x78, 0x15, + 0xce, 0xd3, 0x6c, 0x15, 0x4f, 0xe2, 0x22, 0x9a, 0xad, 0xe2, 0xd5, 0x98, 0x0d, 0xad, 0x55, 0x3c, + 0x85, 0xf3, 0xe8, 0xad, 0xe2, 0x35, 0xf8, 0x55, 0xbd, 0x55, 0x3c, 0x8d, 0x19, 0xd3, 0x5a, 0xc5, + 0x6b, 0xf1, 0x1f, 0xbd, 0x55, 0x54, 0xf1, 0xab, 0x52, 0xab, 0x78, 0x9d, 0xfa, 0x30, 0x30, 0xbd, + 0x0c, 0x3d, 0x02, 0xa2, 0x5a, 0x04, 0xf2, 0x32, 0xf4, 0xd8, 0x89, 0xf8, 0x2b, 0xb3, 0xe0, 0x1a, + 0xba, 0x78, 0xb3, 0xe4, 0xd8, 0x3b, 0x35, 0xb8, 0x65, 0xb4, 0xf7, 0xb5, 0x07, 0x91, 0xc1, 0xa7, + 0xbe, 0x30, 0xc3, 0xad, 0x68, 0xf7, 0xc2, 0xde, 0x08, 0xff, 0x8f, 0x35, 0x90, 0xfd, 0x35, 0x6a, + 0x99, 0x5f, 0xa3, 0x8e, 0x32, 0x09, 0xb3, 0x22, 0x13, 0xc9, 0xbf, 0x67, 0x1b, 0x03, 0xb7, 0x21, + 0x95, 0xe9, 0xdb, 0x90, 0x42, 0x2d, 0xac, 0x07, 0x1d, 0xd7, 0xb6, 0x8c, 0x6e, 0x93, 0xba, 0x1f, + 0x91, 0xb9, 0x6a, 0x7f, 0xb2, 0xf2, 0x54, 0xbf, 0x51, 0x11, 0x83, 0xef, 0x49, 0x71, 0xcb, 0x5b, + 0xfd, 0x12, 0x8a, 0x68, 0x5f, 0x9f, 0x0d, 0xda, 0x57, 0x8b, 0x6b, 0x5f, 0x4f, 0x39, 0x04, 0xed, + 0x64, 0x4d, 0xad, 0x3a, 0xda, 0x54, 0x34, 0x74, 0xce, 0xf7, 0xf7, 0xbf, 0x64, 0xf5, 0x0b, 0x12, + 0x38, 0xa5, 0x59, 0x83, 0xa6, 0x32, 0xac, 0x1a, 0xbd, 0x95, 0x85, 0x66, 0x8d, 0x17, 0xe9, 0x5d, + 0x03, 0xab, 0x3d, 0x98, 0x66, 0x84, 0x44, 0x7f, 0x27, 0x90, 0x68, 0x93, 0x93, 0xe8, 0xbd, 0xa3, + 0x93, 0x4e, 0x26, 0xd0, 0xfa, 0x58, 0xfb, 0xae, 0xac, 0xfa, 0xe7, 0x12, 0x38, 0x41, 0x3c, 0x08, + 0xef, 0x23, 0x33, 0x27, 0xdc, 0xdb, 0xf3, 0xd6, 0x57, 0x37, 0x9c, 0x65, 0x11, 0xfd, 0x66, 0x52, + 0xd4, 0xd7, 0xb1, 0x02, 0xbf, 0x9f, 0x17, 0x78, 0x44, 0x3f, 0xde, 0x5f, 0x5c, 0x84, 0xac, 0x7f, + 0x33, 0x90, 0x75, 0x9d, 0x93, 0xf5, 0x5d, 0x23, 0x51, 0x3d, 0x5a, 0x31, 0x7f, 0x33, 0x0b, 0x1e, + 0x46, 0x38, 0xa4, 0x8a, 0x40, 0xfa, 0xc1, 0x92, 0xd5, 0xd1, 0xa1, 0xeb, 0x19, 0x8e, 0xc7, 0xc5, + 0x60, 0xe9, 0x9b, 0x9a, 0x67, 0x52, 0x98, 0x9a, 0x4b, 0x43, 0xa7, 0xe6, 0xea, 0x7b, 0x58, 0x03, + 0xef, 0x02, 0x8f, 0x6c, 0x29, 0x06, 0x83, 0x88, 0x1a, 0x46, 0xb5, 0xa8, 0xc0, 0xf2, 0xfb, 0x61, + 0x0e, 0xe5, 0xa5, 0x43, 0x97, 0x90, 0x0c, 0xf1, 0xdf, 0x18, 0xaf, 0x25, 0x9e, 0x65, 0xdf, 0xf1, + 0x66, 0x63, 0xb1, 0x93, 0xea, 0x14, 0xea, 0xc5, 0x05, 0x30, 0x8d, 0xbb, 0x9c, 0x9a, 0x69, 0x5d, + 0x56, 0xbf, 0x21, 0x83, 0xd9, 0x3a, 0xbc, 0x52, 0xde, 0x36, 0xba, 0x5d, 0x68, 0x6d, 0x41, 0xf5, + 0x01, 0xce, 0xb6, 0x37, 0x7a, 0xbd, 0x7a, 0xb8, 0x3f, 0xec, 0x3f, 0x2a, 0xf7, 0x82, 0x9c, 0xdb, + 0xb6, 0x83, 0xe8, 0x0e, 0x3f, 0x10, 0xb1, 0x7a, 0x5d, 0xda, 0xf5, 0xb6, 0x17, 0x70, 0x59, 0xa5, + 0x9e, 0xd9, 0x44, 0x1f, 0xe8, 0xe4, 0x3b, 0x3a, 0x4e, 0xfe, 0xe5, 0xc0, 0xce, 0x38, 0x13, 0xd3, + 0x19, 0x07, 0x8c, 0x2f, 0xb0, 0x4c, 0x47, 0x2c, 0x92, 0x9c, 0x05, 0x33, 0x6d, 0x3f, 0x4b, 0x70, + 0x4a, 0x8f, 0x4d, 0x52, 0xff, 0x22, 0x51, 0x77, 0x2d, 0x54, 0x78, 0x32, 0xad, 0x82, 0x63, 0x36, + 0x35, 0xaf, 0x06, 0x27, 0x5a, 0x8d, 0xc6, 0xc6, 0x6a, 0xa9, 0x7e, 0x31, 0x0c, 0xb2, 0xb2, 0xa9, + 0xbe, 0x22, 0x0b, 0xe6, 0x9b, 0x76, 0x77, 0x0f, 0x86, 0x38, 0x57, 0x39, 0xf7, 0x4f, 0x56, 0x4e, + 0x99, 0x03, 0x72, 0x52, 0x4e, 0x81, 0xbc, 0x61, 0xb9, 0x57, 0xa0, 0x6f, 0xfe, 0xd3, 0x27, 0x0a, + 0xe3, 0x47, 0xd9, 0x8e, 0x40, 0xe7, 0x61, 0xbc, 0x7b, 0x88, 0x24, 0x79, 0xae, 0x22, 0x80, 0x3c, + 0x07, 0x66, 0x5d, 0xe2, 0x25, 0xd2, 0x62, 0x9c, 0x81, 0xb8, 0x34, 0xcc, 0x22, 0x71, 0x53, 0x92, + 0x29, 0x8b, 0xf8, 0x49, 0x7d, 0x6d, 0xd0, 0x7f, 0xac, 0x73, 0x10, 0x97, 0x0e, 0xc3, 0x58, 0x32, + 0x90, 0x5f, 0x35, 0xee, 0x49, 0xfc, 0x69, 0x70, 0xd2, 0x3f, 0xa1, 0x5e, 0x5e, 0x29, 0xd5, 0x6a, + 0x5a, 0x7d, 0x59, 0xdb, 0xa8, 0x56, 0xc8, 0x7e, 0x72, 0x98, 0x52, 0x6a, 0xb5, 0xb4, 0xd5, 0xb5, + 0x56, 0x73, 0x43, 0x7b, 0x5a, 0x59, 0xd3, 0x2a, 0xd8, 0x01, 0x1b, 0x9f, 0xa0, 0xf4, 0x5d, 0xe5, + 0x4b, 0xf5, 0xe6, 0x05, 0x4d, 0x2f, 0x6e, 0x9f, 0x2b, 0x81, 0x19, 0x66, 0xa0, 0x40, 0xdc, 0x55, + 0xe0, 0xa6, 0xb1, 0xdb, 0xa5, 0xe6, 0x78, 0xf1, 0x18, 0xe2, 0x0e, 0xcb, 0xa6, 0x61, 0x75, 0xf7, + 0x8b, 0x19, 0xa5, 0x08, 0x66, 0xd9, 0x31, 0xa1, 0x28, 0xa9, 0xdf, 0xba, 0x1e, 0x4c, 0x5f, 0xb0, + 0x9d, 0xcb, 0xd8, 0x6b, 0x58, 0xfd, 0x00, 0x09, 0xc6, 0xe6, 0x47, 0x94, 0x60, 0x0c, 0xb0, 0x57, + 0x89, 0xbb, 0x89, 0xf9, 0xd4, 0x16, 0x86, 0x46, 0x8d, 0x38, 0x0b, 0x66, 0xae, 0xf8, 0xb9, 0xc3, + 0x96, 0xce, 0x24, 0xa9, 0xbf, 0x2c, 0xe6, 0xf8, 0x35, 0xbc, 0xc8, 0xf4, 0x57, 0xfd, 0xdf, 0x2e, + 0x81, 0xfc, 0x32, 0xf4, 0x4a, 0xdd, 0x2e, 0x2b, 0xb7, 0x97, 0x09, 0x9f, 0x23, 0xe5, 0x2a, 0x51, + 0xea, 0x76, 0xa3, 0x1b, 0x15, 0x23, 0x20, 0xff, 0xbc, 0x13, 0x97, 0x26, 0xe8, 0xa5, 0x3d, 0xa4, + 0xc0, 0xf4, 0x25, 0xf6, 0xb7, 0xa1, 0x6b, 0xf6, 0xeb, 0x19, 0x33, 0xe9, 0xb1, 0x61, 0x20, 0xbe, + 0x4c, 0xbc, 0x93, 0x94, 0x9f, 0x4f, 0xb9, 0x1f, 0x4c, 0xed, 0xba, 0xb0, 0x6c, 0xb8, 0xfe, 0xd0, + 0xc6, 0xd7, 0xb4, 0x71, 0xe9, 0x01, 0xd8, 0xf6, 0x16, 0xaa, 0x3b, 0x68, 0xe2, 0xb3, 0x4e, 0x32, + 0x06, 0xb1, 0xed, 0xe8, 0xb3, 0xee, 0x53, 0x40, 0xd3, 0xce, 0x2b, 0xa6, 0xb7, 0x5d, 0xde, 0x36, + 0x3c, 0xba, 0xd9, 0x12, 0x3c, 0xab, 0x1f, 0x1a, 0x01, 0xce, 0x58, 0x87, 0x9d, 0xe8, 0xe3, 0xe8, + 0xb7, 0x80, 0x22, 0x36, 0x7f, 0x4c, 0x6b, 0x8b, 0xf0, 0x1f, 0xcc, 0x31, 0x0f, 0xa4, 0x27, 0x06, + 0x7c, 0x0c, 0x1e, 0x39, 0xa3, 0x00, 0xfe, 0x23, 0x32, 0xc8, 0x36, 0x7a, 0xd0, 0x12, 0x3e, 0xa7, + 0x19, 0xe0, 0x20, 0xf5, 0xe1, 0xf0, 0x3e, 0x71, 0x17, 0xe2, 0xa0, 0xd2, 0xa8, 0xe4, 0x08, 0x14, + 0x6e, 0x03, 0x59, 0xd3, 0xda, 0xb4, 0xa9, 0x15, 0x7c, 0x5d, 0x84, 0x5d, 0x54, 0xb5, 0x36, 0x6d, + 0x1d, 0x67, 0x54, 0xdf, 0x27, 0xe6, 0x3d, 0x1c, 0x57, 0x76, 0x32, 0x71, 0x2f, 0x8d, 0x30, 0x16, + 0x29, 0x60, 0x3e, 0x34, 0x51, 0x6b, 0x8d, 0x52, 0xa5, 0xd8, 0x51, 0xff, 0xa6, 0x00, 0xf2, 0x44, + 0x6d, 0xd4, 0x97, 0xc8, 0x40, 0x2e, 0x75, 0x3a, 0x11, 0x60, 0x48, 0x07, 0xc0, 0xb0, 0x7d, 0x2d, + 0xa4, 0x9e, 0xde, 0xfe, 0x33, 0x1f, 0xc1, 0x4d, 0x70, 0x6c, 0xa0, 0x4d, 0xb2, 0xd4, 0xe9, 0x44, + 0x9f, 0x7b, 0x08, 0x0a, 0x94, 0xf8, 0x02, 0xd9, 0x1e, 0x42, 0x16, 0xeb, 0x21, 0x12, 0x0f, 0x24, + 0x91, 0xfc, 0xa5, 0xdf, 0x4a, 0xfe, 0x5e, 0x02, 0x53, 0x35, 0xd3, 0xf5, 0x10, 0x36, 0x25, 0x11, + 0x6c, 0xae, 0x07, 0xd3, 0xbe, 0x68, 0x50, 0x97, 0x89, 0xc6, 0x83, 0x30, 0x81, 0x9f, 0xc9, 0xdf, + 0xc7, 0xa3, 0xf3, 0xf8, 0xf8, 0xda, 0x53, 0x2e, 0xa2, 0xcf, 0xc4, 0x85, 0xc5, 0x4a, 0xfd, 0xc5, + 0xfe, 0x4a, 0x20, 0xf0, 0x55, 0x4e, 0xe0, 0x77, 0x8e, 0x52, 0x64, 0xfa, 0x42, 0xff, 0x43, 0x09, + 0x00, 0x54, 0x36, 0x3d, 0x78, 0xfc, 0x28, 0x2e, 0x9c, 0x48, 0x8c, 0x74, 0x5f, 0xc1, 0x4a, 0x77, + 0x95, 0x97, 0xee, 0x0f, 0x0d, 0xaf, 0x6a, 0xdc, 0x01, 0x63, 0xa5, 0x08, 0x64, 0x33, 0x10, 0x2d, + 0xfa, 0xab, 0xbe, 0x3d, 0x10, 0xea, 0x1a, 0x27, 0xd4, 0xbb, 0x47, 0x2c, 0x29, 0x7d, 0xb9, 0xfe, + 0xb1, 0x04, 0xa6, 0x9a, 0xd0, 0x43, 0x5d, 0xa7, 0x7a, 0x5e, 0xa4, 0xd7, 0x67, 0xda, 0xb6, 0x24, + 0xd8, 0xb6, 0xbf, 0x93, 0x11, 0x0d, 0x2c, 0x17, 0x4a, 0x86, 0xf2, 0x14, 0xb1, 0x7a, 0xf1, 0x7a, + 0xa1, 0xc0, 0x72, 0xc3, 0xa8, 0xa5, 0x2f, 0xdd, 0xb7, 0x4a, 0x81, 0xa7, 0x09, 0x7f, 0x2e, 0x90, + 0x35, 0xab, 0x33, 0x07, 0xcd, 0x6a, 0xf1, 0x73, 0x81, 0x6c, 0x1d, 0xa3, 0x1d, 0x1b, 0x12, 0x1b, + 0x20, 0x63, 0xf0, 0x39, 0x18, 0x45, 0x5e, 0xcf, 0x96, 0x41, 0x9e, 0x6e, 0x3e, 0xdc, 0x1b, 0xbf, + 0xf7, 0x30, 0x7c, 0x6a, 0xf2, 0xfe, 0x11, 0x4c, 0xc1, 0xb8, 0x65, 0xfd, 0x80, 0x0d, 0x89, 0x61, + 0xe3, 0x56, 0x90, 0xc3, 0xe1, 0xb7, 0xe9, 0x38, 0x17, 0xba, 0x8b, 0xf8, 0x24, 0x34, 0xf4, 0x56, + 0x27, 0x99, 0x12, 0xa3, 0x30, 0x86, 0x9d, 0x80, 0x51, 0x50, 0xf8, 0xa6, 0x02, 0xc0, 0xda, 0xee, + 0xa5, 0xae, 0xe9, 0x6e, 0x9b, 0x16, 0xf6, 0x31, 0x9b, 0xa5, 0x8f, 0x24, 0x8a, 0x74, 0xac, 0x49, + 0x18, 0x69, 0x14, 0x14, 0x81, 0xbc, 0xeb, 0x98, 0xd4, 0x44, 0x46, 0x7f, 0x95, 0x7b, 0x02, 0x6f, + 0xcd, 0x6c, 0x5f, 0xe0, 0x17, 0x24, 0x86, 0x90, 0x83, 0x05, 0xa6, 0xf4, 0xd0, 0x6b, 0x93, 0x0d, + 0x15, 0x9e, 0xe3, 0x43, 0x85, 0x73, 0xa7, 0xc1, 0xf3, 0x7d, 0xa7, 0xc1, 0x11, 0x8e, 0xae, 0xf9, + 0x4c, 0x88, 0x5d, 0x97, 0x64, 0x1d, 0xff, 0x47, 0x5f, 0x60, 0xf7, 0x22, 0xec, 0xdd, 0x47, 0xce, + 0x1c, 0x84, 0x09, 0x6c, 0x9f, 0x37, 0x2d, 0xd8, 0xe7, 0x7d, 0x2c, 0x9c, 0x3b, 0xd9, 0x82, 0xc6, + 0x74, 0x02, 0xc9, 0x71, 0xec, 0x66, 0xfb, 0xd8, 0x55, 0x3f, 0x29, 0x1c, 0xc8, 0x93, 0x91, 0x71, + 0xec, 0x2c, 0x88, 0x72, 0x20, 0x05, 0x1c, 0x30, 0x7b, 0xc8, 0x71, 0x3d, 0xf0, 0x30, 0xfa, 0xc9, + 0x74, 0x79, 0x67, 0x34, 0x1b, 0xdb, 0x3f, 0x56, 0xdf, 0x58, 0xbc, 0x4f, 0x2b, 0xb7, 0x8a, 0xf0, + 0xe0, 0x51, 0x7b, 0x7c, 0xa8, 0x9e, 0x1c, 0xa0, 0x0f, 0xd7, 0x74, 0xd4, 0xff, 0x21, 0x81, 0x3c, + 0x35, 0x37, 0xee, 0x3d, 0x24, 0x84, 0xea, 0x2b, 0x47, 0x81, 0x24, 0x36, 0xba, 0xc9, 0xe7, 0x92, + 0x02, 0x30, 0x06, 0x03, 0xe3, 0x62, 0x6a, 0x00, 0xa8, 0xff, 0x24, 0x81, 0x2c, 0x32, 0x83, 0xc4, + 0x62, 0x47, 0x7c, 0x56, 0xd8, 0xa5, 0x98, 0x11, 0x00, 0x22, 0x1f, 0xa1, 0xdf, 0x8b, 0x60, 0xba, + 0x47, 0x32, 0x06, 0x91, 0x4b, 0x6e, 0x14, 0xe8, 0x8c, 0xa0, 0x1e, 0x7e, 0xc6, 0x4c, 0x39, 0xe3, + 0xdc, 0x92, 0xe3, 0xf9, 0x49, 0x06, 0x87, 0x36, 0x8e, 0x30, 0x13, 0x9b, 0xea, 0xbf, 0x4a, 0x00, + 0xe8, 0xd0, 0xb5, 0xbb, 0x7b, 0x70, 0xdd, 0x31, 0xd5, 0xeb, 0x42, 0x00, 0x68, 0xb3, 0xcf, 0x84, + 0xcd, 0xfe, 0xf3, 0x92, 0xa8, 0xf3, 0x30, 0xa7, 0x79, 0x3e, 0xf1, 0x08, 0xf1, 0x3f, 0x19, 0x4c, + 0x51, 0x39, 0x52, 0x9b, 0x52, 0x4c, 0xf8, 0xfe, 0x47, 0xea, 0x07, 0x85, 0x9c, 0x8f, 0x45, 0x38, + 0x4a, 0x06, 0x40, 0x79, 0x04, 0x00, 0x8e, 0x83, 0x19, 0x1f, 0x80, 0x75, 0xbd, 0x5a, 0x84, 0xea, + 0xbb, 0x65, 0xec, 0xa1, 0x41, 0x06, 0xb7, 0xc3, 0xf7, 0x34, 0x7f, 0x2e, 0x3c, 0xd9, 0x67, 0xe4, + 0x11, 0x94, 0x9f, 0x12, 0x40, 0xbf, 0x2b, 0x34, 0xbb, 0x17, 0x60, 0xe8, 0xa1, 0xd2, 0x5f, 0x9d, + 0xd3, 0xc0, 0x1c, 0x67, 0x95, 0x28, 0xa7, 0xc1, 0x49, 0x2e, 0x81, 0x8c, 0x77, 0x9d, 0xe2, 0x31, + 0x45, 0x05, 0xa7, 0xb8, 0x37, 0xf4, 0x01, 0x76, 0x8a, 0x19, 0xf5, 0x5d, 0x7f, 0x92, 0x09, 0xd6, + 0x7b, 0xde, 0x9f, 0xa5, 0xab, 0x6f, 0x9f, 0xe6, 0x83, 0x65, 0xb6, 0x6d, 0xcb, 0x83, 0x0f, 0x32, + 0x6e, 0x2e, 0x41, 0x42, 0xac, 0xd5, 0x70, 0x1a, 0x4c, 0x79, 0x0e, 0xeb, 0xfa, 0xe2, 0x3f, 0xb2, + 0x8a, 0x95, 0xe3, 0x15, 0xab, 0x0e, 0xce, 0x99, 0x56, 0xbb, 0xbb, 0xdb, 0x81, 0x3a, 0xec, 0x1a, + 0x48, 0x86, 0x6e, 0xc9, 0xad, 0xc0, 0x1e, 0xb4, 0x3a, 0xd0, 0xf2, 0x08, 0x9f, 0xfe, 0xb9, 0x59, + 0x81, 0x9c, 0xbc, 0x32, 0xde, 0xc3, 0x2b, 0xe3, 0xa3, 0x06, 0x2d, 0x01, 0xc7, 0xac, 0x01, 0xde, + 0x09, 0x00, 0xa9, 0xdb, 0x79, 0x13, 0x5e, 0xa1, 0x6a, 0xd8, 0x1f, 0xff, 0xbe, 0x11, 0x64, 0xd0, + 0x99, 0xcc, 0xea, 0x57, 0x03, 0xf5, 0x7b, 0x0a, 0xa7, 0x7e, 0xb7, 0x0a, 0xb2, 0x90, 0x4c, 0xeb, + 0x7a, 0x23, 0x68, 0xdd, 0x1c, 0x98, 0x0e, 0x77, 0xa3, 0x65, 0xe5, 0x5a, 0x70, 0xb5, 0xef, 0xa1, + 0x5c, 0xd7, 0xb4, 0x4a, 0x73, 0x63, 0x7d, 0x6d, 0x59, 0x2f, 0x55, 0xb4, 0x22, 0x40, 0xfa, 0x49, + 0xf4, 0x32, 0x70, 0x2c, 0xce, 0xaa, 0x7f, 0x24, 0x81, 0x1c, 0x3e, 0xf4, 0xad, 0x3e, 0x7d, 0x4c, + 0x9a, 0xe3, 0x72, 0x4e, 0x53, 0xc1, 0xb8, 0x2b, 0x7e, 0x17, 0x0a, 0x15, 0x26, 0xe6, 0xea, 0x50, + 0x77, 0xa1, 0xc4, 0x10, 0x4a, 0x7f, 0x26, 0x84, 0x9a, 0x64, 0x73, 0xdb, 0xbe, 0xf2, 0x1f, 0xb9, + 0x49, 0xa2, 0xfa, 0x1f, 0x71, 0x93, 0x1c, 0xc0, 0xc2, 0xc4, 0x9b, 0xe4, 0x80, 0x76, 0x17, 0xd3, + 0x4c, 0xd5, 0x8f, 0xe6, 0x82, 0xf9, 0xdf, 0xa7, 0xa4, 0x43, 0xed, 0x9d, 0x95, 0xc0, 0x9c, 0x69, + 0x79, 0xd0, 0xb1, 0x8c, 0xee, 0x52, 0xd7, 0xd8, 0xf2, 0xed, 0xd3, 0xeb, 0x0e, 0x5c, 0xfd, 0x11, + 0xe6, 0xd1, 0xf9, 0x2f, 0x94, 0x33, 0x00, 0x78, 0x70, 0xa7, 0xd7, 0x35, 0xbc, 0x50, 0xf5, 0x98, + 0x14, 0x56, 0xfb, 0xb2, 0xbc, 0xf6, 0xdd, 0x0e, 0xae, 0x22, 0xa0, 0xb5, 0xf6, 0x7b, 0x70, 0xdd, + 0x32, 0x9f, 0xb1, 0x8b, 0x63, 0x2b, 0x13, 0x1d, 0x1d, 0xf4, 0x8a, 0xdb, 0x15, 0xca, 0xf3, 0xbb, + 0x42, 0xca, 0xdd, 0xe0, 0x5a, 0x1c, 0x36, 0x1b, 0xdf, 0x4a, 0x72, 0xc1, 0xec, 0x6c, 0x41, 0xaf, + 0xba, 0xb9, 0x6a, 0xba, 0xae, 0x69, 0x6d, 0xe1, 0xe9, 0x78, 0x41, 0x8f, 0xce, 0xa0, 0xfe, 0x2f, + 0xe1, 0xb8, 0x4d, 0x7e, 0x9f, 0x31, 0x24, 0x6e, 0x93, 0xcd, 0x6f, 0xdb, 0x85, 0xed, 0x34, 0x58, + 0xd5, 0xc9, 0x0a, 0xac, 0xea, 0xb0, 0x98, 0xe6, 0x04, 0x57, 0x07, 0x5e, 0x23, 0x14, 0x18, 0x2a, + 0xae, 0x1a, 0xe9, 0xf7, 0x7d, 0xdf, 0x96, 0xc1, 0x3c, 0x29, 0x7a, 0xd1, 0xb6, 0x2f, 0xef, 0x18, + 0xce, 0x65, 0xf5, 0xa7, 0x0f, 0xb7, 0x0b, 0x1c, 0xbb, 0x7b, 0x15, 0xb5, 0xa5, 0xdb, 0xa7, 0xbc, + 0xd9, 0x7e, 0xe5, 0x55, 0x7f, 0x47, 0x78, 0x4a, 0xc2, 0xc9, 0xd3, 0xaf, 0xd4, 0x64, 0xb6, 0xb7, + 0xc4, 0x8e, 0x47, 0x8a, 0x30, 0x98, 0x3e, 0xf0, 0xbf, 0x15, 0x00, 0xef, 0x8f, 0x23, 0xec, 0xce, + 0xc0, 0x38, 0x71, 0x57, 0xbf, 0x36, 0x1a, 0x76, 0x3e, 0x5f, 0x23, 0x60, 0x57, 0x04, 0xf2, 0xe5, + 0xc0, 0x99, 0x09, 0xfd, 0x65, 0x2b, 0x94, 0x4d, 0x0f, 0xcd, 0x08, 0x96, 0x27, 0x82, 0xe6, 0x49, + 0x9e, 0x85, 0x46, 0x2f, 0x55, 0x4c, 0xbf, 0x22, 0xbc, 0xe3, 0x36, 0x50, 0x40, 0x84, 0xbb, 0xc9, + 0xb4, 0x4a, 0xb1, 0xed, 0x3a, 0x71, 0x36, 0xd3, 0x47, 0xf3, 0x85, 0x39, 0x30, 0xed, 0xc7, 0xcf, + 0xc2, 0x57, 0x13, 0x06, 0x18, 0x9e, 0x02, 0x79, 0xd7, 0xde, 0x75, 0xda, 0x90, 0xee, 0x81, 0xd2, + 0xa7, 0x11, 0xf6, 0xeb, 0x86, 0x9a, 0x0b, 0x07, 0x2c, 0x92, 0x6c, 0x62, 0x8b, 0x24, 0xda, 0xde, + 0x8d, 0xb1, 0x1f, 0xd4, 0x17, 0x09, 0x5f, 0x1b, 0xc2, 0x61, 0xd6, 0x84, 0xde, 0x43, 0xd1, 0x08, + 0xf8, 0x75, 0xa1, 0xdd, 0xa0, 0x21, 0x35, 0x49, 0xa6, 0x72, 0x8d, 0x11, 0xec, 0xe0, 0xeb, 0xc0, + 0x35, 0x7e, 0x0e, 0x6a, 0x00, 0x63, 0x83, 0x77, 0x5d, 0xaf, 0x15, 0x65, 0xf5, 0xd9, 0x59, 0x50, + 0x24, 0xac, 0x35, 0x02, 0x5b, 0x50, 0x7d, 0x59, 0xe6, 0xa8, 0x0d, 0xde, 0xe8, 0x19, 0xec, 0xef, + 0x4b, 0xa2, 0xc1, 0xc6, 0x39, 0xc1, 0x87, 0xb5, 0x8b, 0xd0, 0xa4, 0x11, 0x9a, 0x59, 0x8c, 0xf2, + 0xa9, 0x6f, 0xc9, 0x88, 0xc4, 0x2e, 0x17, 0x63, 0x31, 0xfd, 0x5e, 0xe9, 0x3b, 0x59, 0x3f, 0x0c, + 0xe2, 0x92, 0x63, 0xef, 0xac, 0x3b, 0x5d, 0xf5, 0xff, 0x08, 0x5d, 0x0d, 0x11, 0x31, 0xbb, 0x90, + 0xa2, 0x67, 0x17, 0x78, 0x45, 0xba, 0x1b, 0x6e, 0x85, 0x75, 0x47, 0x18, 0xbe, 0x95, 0x9b, 0xc0, + 0xbc, 0xd1, 0xe9, 0xac, 0x19, 0x5b, 0xb0, 0x8c, 0xa6, 0xed, 0x96, 0x47, 0x43, 0xa4, 0xf5, 0xa5, + 0xc6, 0x4e, 0x65, 0xf8, 0x3e, 0x72, 0xea, 0x80, 0x55, 0x2a, 0xbe, 0x0c, 0xcb, 0x81, 0x48, 0xe5, + 0x37, 0x91, 0xe1, 0x0f, 0x0d, 0x19, 0xed, 0x6d, 0x23, 0x0c, 0xe8, 0x48, 0x9f, 0x04, 0x7d, 0xb1, + 0x04, 0xf8, 0x4e, 0x5f, 0xf3, 0x7e, 0x4d, 0x02, 0x53, 0x08, 0x8f, 0x52, 0xa7, 0xa3, 0x3e, 0x92, + 0x8b, 0x7b, 0x1a, 0xe9, 0x0d, 0xf7, 0x7c, 0x61, 0xd7, 0x44, 0xbf, 0x86, 0x84, 0x7e, 0x04, 0x26, + 0xa1, 0x10, 0x25, 0x4e, 0x88, 0x62, 0xf1, 0x4b, 0x63, 0x8b, 0x48, 0x5f, 0x7c, 0x9f, 0x95, 0xc0, + 0x9c, 0x3f, 0xcf, 0x58, 0x82, 0x5e, 0x7b, 0x5b, 0xbd, 0x53, 0x74, 0x9d, 0x8b, 0xb6, 0xc4, 0x60, + 0x4b, 0xb8, 0xab, 0x7e, 0x2f, 0x93, 0x50, 0xe5, 0xb9, 0x92, 0x23, 0x16, 0x09, 0x13, 0xe9, 0x62, + 0x1c, 0xc1, 0xf4, 0x85, 0xf9, 0x55, 0x09, 0x80, 0x96, 0x1d, 0x4c, 0x96, 0x0f, 0x21, 0xc9, 0x9f, + 0x11, 0xde, 0x2d, 0xa6, 0x15, 0x0f, 0x8b, 0x4d, 0xde, 0x73, 0x08, 0x3a, 0x53, 0x0d, 0x2b, 0x69, + 0x22, 0x6d, 0x7d, 0xba, 0xb2, 0xdb, 0xeb, 0x9a, 0x6d, 0xc3, 0xeb, 0xf7, 0x00, 0x8c, 0x16, 0x2f, + 0xbe, 0xd7, 0x3b, 0x91, 0xd1, 0x18, 0x94, 0x11, 0x21, 0x4b, 0x12, 0x27, 0x48, 0xf2, 0xe3, 0x04, + 0x09, 0x7a, 0xf5, 0x0c, 0x21, 0x3e, 0x01, 0xf5, 0x94, 0xc1, 0xf1, 0x46, 0x0f, 0x5a, 0x8b, 0x0e, + 0x34, 0x3a, 0x6d, 0x67, 0x77, 0xe7, 0x92, 0xcb, 0xba, 0xaf, 0xc6, 0xeb, 0x28, 0xb3, 0x72, 0x2d, + 0x71, 0x2b, 0xd7, 0xea, 0x8f, 0xc9, 0xa2, 0x91, 0xdc, 0x98, 0xfd, 0x15, 0x86, 0x87, 0x11, 0x86, + 0xba, 0x44, 0x4e, 0x57, 0x7d, 0x8b, 0xd4, 0xd9, 0x24, 0x8b, 0xd4, 0x6f, 0x16, 0x8a, 0x0b, 0x27, + 0x54, 0xaf, 0x89, 0xf8, 0xce, 0xcd, 0x37, 0xa1, 0x17, 0x01, 0xef, 0x8d, 0x60, 0xee, 0x52, 0xf8, + 0x26, 0x80, 0x98, 0x4f, 0x1c, 0xe0, 0xd1, 0xfa, 0xd6, 0xa4, 0x2b, 0x34, 0x3c, 0x0b, 0x11, 0xe8, + 0x06, 0x08, 0x4a, 0x22, 0x6e, 0x73, 0x89, 0x96, 0x5b, 0x62, 0xcb, 0x4f, 0x1f, 0x85, 0x4f, 0x4a, + 0x60, 0x06, 0xdf, 0x56, 0xbe, 0xb8, 0x8f, 0x0f, 0x82, 0x0a, 0x1a, 0x25, 0x2f, 0x64, 0xc5, 0xac, + 0x80, 0x6c, 0xd7, 0xb4, 0x2e, 0xfb, 0xfe, 0x8e, 0xe8, 0x7f, 0x78, 0xc5, 0xa9, 0x34, 0xe0, 0x8a, + 0xd3, 0x60, 0x9b, 0x24, 0x28, 0x37, 0x62, 0x34, 0x7d, 0x43, 0x46, 0xe4, 0x8a, 0xd3, 0xa1, 0xe4, + 0xd2, 0x17, 0xe3, 0x5f, 0x65, 0x41, 0xbe, 0x09, 0x0d, 0xa7, 0xbd, 0xad, 0xbe, 0x5f, 0x1a, 0x38, + 0x95, 0x28, 0xf0, 0x53, 0x89, 0x25, 0x30, 0xb5, 0x69, 0x76, 0x3d, 0xe8, 0x10, 0x1f, 0x70, 0xb6, + 0x6b, 0x27, 0x4d, 0x7c, 0xb1, 0x6b, 0xb7, 0x2f, 0x2f, 0x50, 0xd3, 0x7e, 0xc1, 0x8f, 0x37, 0xbd, + 0xb0, 0x84, 0x3f, 0xd2, 0xfd, 0x8f, 0x91, 0x41, 0xe8, 0xda, 0x8e, 0x17, 0x75, 0x7f, 0x51, 0x04, + 0x95, 0xa6, 0xed, 0x78, 0x3a, 0xf9, 0x10, 0xc1, 0xbc, 0xb9, 0xdb, 0xed, 0xb6, 0xe0, 0x83, 0x9e, + 0x3f, 0xad, 0xf3, 0x9f, 0x91, 0xb1, 0x68, 0x6f, 0x6e, 0xba, 0x90, 0x2c, 0x2a, 0xe4, 0x74, 0xfa, + 0xa4, 0x9c, 0x04, 0xb9, 0xae, 0xb9, 0x63, 0x92, 0x89, 0x48, 0x4e, 0x27, 0x0f, 0xca, 0x2d, 0xa0, + 0x18, 0xce, 0x81, 0x08, 0xa3, 0xa7, 0xf3, 0xb8, 0x69, 0x1e, 0x48, 0x47, 0x3a, 0x73, 0x19, 0xee, + 0xbb, 0xa7, 0xa7, 0xf0, 0x7b, 0xfc, 0x5f, 0x7d, 0x6d, 0xd2, 0x0d, 0x13, 0x22, 0xf1, 0xe8, 0x19, + 0xae, 0x03, 0xdb, 0xb6, 0xd3, 0xf1, 0x65, 0x13, 0x3d, 0xc1, 0xa0, 0xf9, 0x92, 0x6d, 0x73, 0x0c, + 0x2c, 0x3c, 0x7d, 0x4d, 0x7b, 0x4f, 0x1e, 0x75, 0x9b, 0xa8, 0xe8, 0x0b, 0xa6, 0xb7, 0xbd, 0x0a, + 0x3d, 0x43, 0xfd, 0x2b, 0x79, 0xa0, 0xc6, 0xcd, 0xfc, 0xff, 0x1a, 0x37, 0x44, 0xe3, 0x48, 0xcc, + 0x30, 0x6f, 0xd7, 0xb1, 0x90, 0x1c, 0xa9, 0x1f, 0x2d, 0x93, 0xa2, 0xdc, 0x0d, 0xae, 0x0d, 0x9f, + 0xfc, 0xa5, 0xd4, 0x0a, 0xe3, 0x5a, 0x5b, 0xd0, 0xa3, 0x33, 0x28, 0x6b, 0xe0, 0x11, 0xe4, 0xe5, + 0x4a, 0x6b, 0xb5, 0xb6, 0x62, 0x6e, 0x6d, 0x77, 0xcd, 0xad, 0x6d, 0xcf, 0xad, 0x5a, 0xae, 0x07, + 0x8d, 0x4e, 0x63, 0x53, 0x27, 0x37, 0x8f, 0x01, 0x4c, 0x47, 0x24, 0x2b, 0xef, 0x23, 0x2e, 0x36, + 0xba, 0xb1, 0x9a, 0x12, 0xd1, 0x52, 0x9e, 0x80, 0x5a, 0x8a, 0xbb, 0xdb, 0x0d, 0x30, 0xbd, 0xbe, + 0x0f, 0xd3, 0x50, 0xd5, 0x77, 0xbb, 0xb8, 0xb9, 0xe0, 0xcc, 0x49, 0xc7, 0xb9, 0x18, 0x4e, 0xd2, + 0x6f, 0x36, 0xff, 0x27, 0x0f, 0x72, 0xcb, 0x8e, 0xd1, 0xdb, 0x56, 0x9f, 0xcd, 0xf4, 0xcf, 0xe3, + 0x6a, 0x13, 0x81, 0x76, 0x4a, 0xc3, 0xb4, 0x53, 0x1e, 0xa2, 0x9d, 0x59, 0x46, 0x3b, 0xa3, 0x17, + 0x9d, 0xcf, 0x81, 0xd9, 0xb6, 0xdd, 0xed, 0xc2, 0x36, 0x92, 0x47, 0xb5, 0x83, 0x57, 0x7b, 0xa6, + 0x75, 0x2e, 0x0d, 0xc7, 0xe4, 0x87, 0x5e, 0x93, 0xac, 0xb1, 0x13, 0xa5, 0x0f, 0x13, 0xd4, 0x97, + 0x49, 0x20, 0xab, 0x75, 0xb6, 0x20, 0xb7, 0x0e, 0x9f, 0x61, 0xd6, 0xe1, 0x4f, 0x81, 0xbc, 0x67, + 0x38, 0x5b, 0xd0, 0xf3, 0xd7, 0x09, 0xc8, 0x53, 0x70, 0x55, 0x80, 0xcc, 0x5c, 0x15, 0xf0, 0x43, + 0x20, 0x8b, 0x64, 0x46, 0xdd, 0xe2, 0x1f, 0x31, 0x08, 0x7e, 0x2c, 0xfb, 0x05, 0x54, 0xe2, 0x02, + 0xaa, 0xb5, 0x8e, 0x3f, 0xe8, 0xc7, 0x3a, 0x77, 0x30, 0x94, 0xed, 0xf5, 0x60, 0xda, 0x6c, 0xdb, + 0x56, 0x75, 0xc7, 0xd8, 0x82, 0xb4, 0x9a, 0x61, 0x82, 0xff, 0x56, 0xdb, 0xb1, 0x1f, 0x30, 0xe9, + 0xa2, 0x56, 0x98, 0x80, 0xaa, 0xb0, 0x6d, 0x76, 0x3a, 0xd0, 0xa2, 0x2d, 0x9b, 0x3e, 0x9d, 0x3b, + 0x03, 0xb2, 0x88, 0x07, 0xa4, 0x3f, 0xc8, 0x58, 0x28, 0x1e, 0x53, 0x66, 0x51, 0xb3, 0x22, 0x8d, + 0xb7, 0x98, 0xe1, 0xd7, 0x5c, 0x45, 0xbc, 0x86, 0x48, 0xe5, 0x06, 0x37, 0xae, 0xc7, 0x80, 0x9c, + 0x65, 0x77, 0xe0, 0xd0, 0x41, 0x88, 0xe4, 0x52, 0x1e, 0x0f, 0x72, 0xb0, 0x83, 0x7a, 0x05, 0x19, + 0x67, 0x3f, 0x13, 0x2f, 0x4b, 0x9d, 0x64, 0x4e, 0xe6, 0x9a, 0x34, 0x88, 0xdb, 0xf4, 0x1b, 0xe0, + 0x4f, 0x4c, 0x81, 0xe3, 0xa4, 0x0f, 0x68, 0xee, 0x5e, 0x42, 0xa4, 0x2e, 0x41, 0xf5, 0xf5, 0x83, + 0x07, 0xae, 0xe3, 0xbc, 0xb2, 0x9f, 0x04, 0x39, 0x77, 0xf7, 0x52, 0x60, 0x84, 0x92, 0x07, 0xb6, + 0xe9, 0x4a, 0x63, 0x19, 0xce, 0xe4, 0x51, 0x87, 0x33, 0x6e, 0x68, 0x92, 0xfd, 0xc6, 0x1f, 0x0e, + 0x64, 0xe4, 0x40, 0x87, 0x3f, 0x90, 0x0d, 0x1a, 0x86, 0x4e, 0x83, 0x29, 0x63, 0xd3, 0x83, 0x4e, + 0x68, 0x26, 0xd2, 0x47, 0x34, 0x54, 0x5e, 0x82, 0x9b, 0xb6, 0x83, 0xc4, 0x42, 0xc2, 0xca, 0x06, + 0xcf, 0x4c, 0xcb, 0x05, 0xdc, 0x0e, 0xda, 0xad, 0xe0, 0x84, 0x65, 0x57, 0x60, 0x8f, 0xca, 0x99, + 0xa0, 0x38, 0x47, 0x6e, 0x77, 0x3f, 0xf0, 0xe2, 0x40, 0x57, 0x32, 0x7f, 0xb0, 0x2b, 0x51, 0x3f, + 0x9f, 0x74, 0xce, 0xdc, 0x07, 0xf4, 0xd8, 0x2c, 0x34, 0xe5, 0x49, 0x60, 0xb6, 0x43, 0x3d, 0xc4, + 0xda, 0x66, 0xd0, 0x4a, 0x22, 0xbf, 0xe3, 0x32, 0x87, 0x8a, 0x94, 0x65, 0x15, 0x69, 0x19, 0x14, + 0xf0, 0x71, 0x6c, 0xa4, 0x49, 0xb9, 0x3e, 0x8f, 0x7c, 0x3c, 0xad, 0x0b, 0x2a, 0xc5, 0x88, 0x6d, + 0xa1, 0x4c, 0x3f, 0xd1, 0x83, 0x8f, 0x93, 0xcd, 0xbe, 0xe3, 0x25, 0x94, 0x7e, 0x73, 0xfc, 0x95, + 0x3c, 0xb8, 0xb6, 0xec, 0xd8, 0xae, 0x8b, 0x8f, 0xe0, 0xf4, 0x37, 0xcc, 0x37, 0x4a, 0xdc, 0xa5, + 0x41, 0x0f, 0xe9, 0xe6, 0x37, 0xa8, 0x41, 0x4d, 0xae, 0x69, 0xfc, 0xb9, 0x70, 0xd0, 0x9b, 0x60, + 0xff, 0x21, 0x42, 0xe8, 0xff, 0x31, 0x1a, 0xc9, 0x7b, 0x32, 0x22, 0x71, 0x78, 0x12, 0xca, 0x2a, + 0xfd, 0xe6, 0xf2, 0x15, 0x09, 0x5c, 0xd7, 0xcf, 0xcd, 0xba, 0xe5, 0x06, 0x0d, 0xe6, 0x86, 0x21, + 0xed, 0x85, 0x8f, 0xdb, 0x12, 0x7b, 0x47, 0x70, 0x44, 0xdd, 0x99, 0xd2, 0x22, 0x16, 0x4b, 0xc2, + 0x03, 0x3d, 0x71, 0x77, 0x04, 0x27, 0x26, 0x9f, 0xbe, 0x70, 0x7f, 0x3f, 0x0b, 0x8e, 0x2f, 0x3b, + 0xf6, 0x6e, 0xcf, 0x0d, 0x7b, 0xa0, 0x3f, 0x1d, 0xbc, 0x21, 0x9b, 0x17, 0x31, 0x0d, 0xce, 0x82, + 0x19, 0x87, 0x5a, 0x73, 0xe1, 0xf6, 0x2c, 0x9b, 0xc4, 0xf6, 0x5e, 0xf2, 0x61, 0x7a, 0xaf, 0xb0, + 0x9f, 0xc9, 0x72, 0xfd, 0x4c, 0x7f, 0xcf, 0x91, 0x1b, 0xd0, 0x73, 0xfc, 0x89, 0x94, 0x70, 0x50, + 0xed, 0x13, 0x51, 0x44, 0x7f, 0x51, 0x06, 0xf9, 0x2d, 0x9c, 0x91, 0x76, 0x17, 0x8f, 0x16, 0xab, + 0x19, 0x26, 0xae, 0xd3, 0x4f, 0x43, 0xb9, 0xca, 0xac, 0x0e, 0x27, 0x1a, 0xe0, 0xe2, 0xb9, 0x4d, + 0x5f, 0xa9, 0x5e, 0x9b, 0x05, 0xb3, 0x41, 0xe9, 0xd5, 0x8e, 0xcb, 0x45, 0x87, 0x65, 0x34, 0x6a, + 0x4e, 0x44, 0xa3, 0x0e, 0xac, 0x33, 0x07, 0xa3, 0x8e, 0xcc, 0x8c, 0x3a, 0x03, 0x47, 0x97, 0xd9, + 0x88, 0xd1, 0x45, 0x7d, 0x96, 0x2c, 0x7a, 0xed, 0x1e, 0xdf, 0xb5, 0xe2, 0xda, 0x3c, 0x94, 0x07, + 0x0b, 0xc1, 0xcb, 0xff, 0x86, 0xd7, 0x2a, 0x7d, 0x25, 0xf9, 0x88, 0x04, 0x4e, 0x1c, 0xec, 0xcc, + 0x1f, 0xce, 0x7b, 0xa9, 0xa1, 0x3a, 0xb9, 0x81, 0x97, 0x1a, 0x7e, 0xe2, 0x37, 0xe9, 0x62, 0x83, + 0xa0, 0x70, 0xf6, 0xde, 0xf0, 0x4e, 0x5c, 0x2c, 0xcc, 0x89, 0x20, 0xd1, 0xf4, 0x05, 0xf8, 0xb3, + 0x32, 0x98, 0x6e, 0x42, 0xaf, 0x66, 0xec, 0xdb, 0xbb, 0x9e, 0x6a, 0x88, 0x6e, 0xcf, 0x3d, 0x11, + 0xe4, 0xbb, 0xf8, 0x13, 0xdc, 0xc1, 0xb0, 0x41, 0x4b, 0xd9, 0xfd, 0x2d, 0xec, 0x1b, 0x44, 0x48, + 0xeb, 0x34, 0x3f, 0x1f, 0x7d, 0x46, 0x64, 0x77, 0x34, 0xe0, 0x6e, 0x2c, 0x5b, 0x3b, 0x89, 0xf6, + 0x4e, 0xa3, 0x8a, 0x4e, 0x1f, 0x96, 0x1f, 0x93, 0xc1, 0x5c, 0x13, 0x7a, 0x55, 0x77, 0xc9, 0xd8, + 0xb3, 0x1d, 0xd3, 0x83, 0xea, 0xb2, 0x28, 0x34, 0x67, 0x00, 0x30, 0x83, 0xcf, 0x68, 0x9c, 0x2c, + 0x26, 0x45, 0x7d, 0x4b, 0x52, 0x47, 0x21, 0x8e, 0x8f, 0xb1, 0x80, 0x90, 0xc8, 0xc7, 0x22, 0xae, + 0xf8, 0x09, 0x5c, 0x1c, 0x2e, 0x51, 0x20, 0x4a, 0x4e, 0x7b, 0xdb, 0xdc, 0x83, 0x9d, 0x84, 0x40, + 0xf8, 0x9f, 0x85, 0x40, 0x04, 0x84, 0x12, 0xbb, 0xaf, 0x70, 0x7c, 0x8c, 0xc3, 0x7d, 0x25, 0x8e, + 0xe0, 0x44, 0xc2, 0x5a, 0xa1, 0xae, 0x87, 0xae, 0x67, 0xde, 0x2b, 0x2a, 0xd6, 0xd0, 0x64, 0x93, + 0x58, 0x93, 0x6d, 0xa4, 0x8e, 0x85, 0x94, 0x3d, 0x4c, 0xa7, 0xb3, 0x69, 0x74, 0x2c, 0x03, 0x8b, + 0x4e, 0x5f, 0xe8, 0xef, 0x93, 0xc1, 0xd5, 0x41, 0xbc, 0x97, 0x26, 0xf4, 0x2a, 0x86, 0xbb, 0x7d, + 0xc9, 0x36, 0x9c, 0x8e, 0x5a, 0x1e, 0xc3, 0x81, 0x43, 0xf5, 0x8b, 0x2c, 0x08, 0x75, 0x1e, 0x84, + 0x81, 0xae, 0xa4, 0x03, 0x79, 0x19, 0x47, 0x27, 0x13, 0xeb, 0xed, 0xfa, 0x8e, 0x00, 0xac, 0xa7, + 0x72, 0x60, 0xdd, 0x33, 0x2a, 0x8b, 0xe9, 0x03, 0xf7, 0xf3, 0x64, 0x44, 0x60, 0xbc, 0x9e, 0x2f, + 0x8a, 0x02, 0x16, 0xe1, 0xf5, 0x2a, 0x47, 0x7a, 0xbd, 0x8e, 0x34, 0x46, 0x0c, 0xf5, 0x58, 0x4e, + 0x77, 0x8c, 0x38, 0x42, 0x6f, 0xe4, 0x77, 0xc9, 0xa0, 0x88, 0x03, 0x7e, 0x31, 0x1e, 0xe1, 0x6c, + 0xfc, 0xed, 0x78, 0x74, 0x0e, 0x78, 0x9f, 0x4f, 0x25, 0xf5, 0x3e, 0x57, 0xdf, 0x99, 0xd4, 0xc7, + 0xbc, 0x9f, 0xdb, 0xb1, 0x20, 0x96, 0xc8, 0x85, 0x7c, 0x08, 0x07, 0xe9, 0x83, 0xf6, 0x93, 0x32, + 0x00, 0xa8, 0x41, 0xd3, 0xb3, 0x11, 0x4f, 0x13, 0x85, 0xeb, 0x36, 0xd6, 0xef, 0x1e, 0x01, 0x75, + 0x75, 0x1f, 0x50, 0x84, 0x62, 0x78, 0xea, 0xe2, 0xf5, 0x49, 0x7d, 0x2b, 0x43, 0xae, 0xc6, 0x02, + 0x4b, 0x22, 0x6f, 0xcb, 0xc8, 0xb2, 0xd3, 0x07, 0xe4, 0x57, 0x25, 0x90, 0x6b, 0xd9, 0x4d, 0xe8, + 0x1d, 0xde, 0x14, 0x48, 0x1c, 0x35, 0x00, 0x97, 0x3b, 0x8e, 0xa8, 0x01, 0x83, 0x08, 0xa5, 0x2f, + 0xba, 0xf7, 0x4a, 0x60, 0xb6, 0x65, 0x97, 0x83, 0xc5, 0x29, 0x71, 0x5f, 0xd5, 0x7f, 0xc9, 0x24, + 0x5c, 0xc3, 0x60, 0x8b, 0x89, 0x10, 0x58, 0xa2, 0xd5, 0x83, 0x18, 0x7a, 0xe9, 0xcb, 0xed, 0x4e, + 0x70, 0x7c, 0xdd, 0xea, 0xd8, 0x3a, 0xec, 0xd8, 0x74, 0xa5, 0x5b, 0x51, 0x40, 0x76, 0xd7, 0xea, + 0xd8, 0x98, 0xe5, 0x9c, 0x8e, 0xff, 0xa3, 0x34, 0x07, 0x76, 0x6c, 0xea, 0x1b, 0x80, 0xff, 0xab, + 0x7f, 0x2e, 0x83, 0x2c, 0xfa, 0x56, 0x5c, 0xd4, 0xef, 0x92, 0x13, 0xc6, 0x41, 0x40, 0xe4, 0xc7, + 0x62, 0x09, 0xdd, 0xcb, 0xac, 0xfd, 0x13, 0x0f, 0xd6, 0x47, 0x44, 0x95, 0xc7, 0x88, 0x22, 0x5c, + 0xf3, 0x57, 0x4e, 0x83, 0xa9, 0x4b, 0x5d, 0xbb, 0x7d, 0x39, 0x3c, 0xae, 0x4f, 0x1f, 0x95, 0x5b, + 0x40, 0xce, 0x31, 0xac, 0x2d, 0x48, 0xf7, 0x14, 0x4e, 0xf6, 0xf5, 0x85, 0xd8, 0xeb, 0x45, 0x27, + 0x59, 0xd4, 0x77, 0x26, 0x89, 0xc0, 0x30, 0xa0, 0xf2, 0xc9, 0xf4, 0xa1, 0x32, 0xc2, 0xc9, 0xb3, + 0x22, 0x98, 0x2d, 0x97, 0xea, 0xe4, 0x1e, 0xc4, 0xc6, 0x79, 0xad, 0x28, 0x63, 0x98, 0x91, 0x4c, + 0x52, 0x84, 0x19, 0x91, 0xff, 0x0f, 0x0b, 0xf3, 0x80, 0xca, 0x1f, 0x05, 0xcc, 0x9f, 0x95, 0xc0, + 0x5c, 0xcd, 0x74, 0xbd, 0x28, 0x6f, 0xff, 0x98, 0x78, 0xbf, 0x2f, 0x4a, 0x6a, 0x2a, 0x73, 0xe5, + 0x08, 0x07, 0xfa, 0x4d, 0x64, 0x0e, 0xc7, 0x15, 0x31, 0x99, 0x63, 0x29, 0x98, 0x03, 0x72, 0x09, + 0xbe, 0xb0, 0x24, 0x13, 0x1b, 0x4a, 0x61, 0x21, 0x93, 0x37, 0x94, 0x22, 0xcb, 0x4e, 0x5f, 0xbe, + 0x7f, 0x2e, 0x81, 0x13, 0xa8, 0xf8, 0xb8, 0x65, 0xa9, 0x68, 0x31, 0x0f, 0x5d, 0x96, 0x4a, 0xbc, + 0x32, 0x7e, 0x80, 0x97, 0x71, 0xac, 0x8c, 0x0f, 0x23, 0x3a, 0x61, 0x31, 0x47, 0x2c, 0xc3, 0x0e, + 0x13, 0x73, 0xcc, 0x32, 0xec, 0xe8, 0x62, 0x8e, 0x5f, 0x8a, 0x1d, 0x51, 0xcc, 0x47, 0xb6, 0xc0, + 0xfa, 0x4b, 0x72, 0x20, 0xe6, 0xc8, 0xb5, 0x8d, 0x18, 0x31, 0x27, 0x3e, 0xd1, 0xab, 0xbe, 0x7b, + 0x44, 0xc1, 0x8f, 0x79, 0x7d, 0x63, 0x14, 0x98, 0x8e, 0x70, 0x8d, 0xe3, 0x17, 0x64, 0x30, 0x4f, + 0xb9, 0x18, 0x3c, 0x65, 0x8e, 0xc1, 0x28, 0xf1, 0x94, 0x39, 0xf1, 0x19, 0x20, 0x9e, 0xb3, 0xc9, + 0x9f, 0x01, 0x8a, 0x2d, 0x3f, 0x7d, 0x70, 0xfe, 0x32, 0x0b, 0x4e, 0x21, 0x16, 0x56, 0xed, 0x8e, + 0xb9, 0xb9, 0x4f, 0xb8, 0x38, 0x6f, 0x74, 0x77, 0xa1, 0xab, 0x7e, 0x40, 0x12, 0x45, 0xe9, 0x3f, + 0x03, 0x60, 0xf7, 0xa0, 0x43, 0xe2, 0xb8, 0x51, 0xa0, 0xee, 0x8e, 0xaa, 0xec, 0xc1, 0x92, 0x82, + 0xeb, 0x73, 0x1a, 0x3e, 0x11, 0x9d, 0xa1, 0x87, 0xac, 0xc2, 0xe9, 0xe0, 0x4d, 0xbf, 0x83, 0x47, + 0xe6, 0xa0, 0x83, 0xc7, 0xcd, 0x40, 0x36, 0x3a, 0x9d, 0x00, 0xaa, 0xfe, 0xcd, 0x6c, 0x5c, 0xa6, + 0x8e, 0xb2, 0xa0, 0x9c, 0x2e, 0x0c, 0x8f, 0xe6, 0x45, 0xe4, 0x74, 0xa1, 0xa7, 0x2c, 0x80, 0x3c, + 0xb9, 0x4e, 0x3c, 0x58, 0xd1, 0x1f, 0x9c, 0x99, 0xe6, 0xe2, 0x4d, 0xbb, 0x06, 0xaf, 0x86, 0x77, + 0x26, 0x92, 0xcc, 0xa0, 0x7e, 0x3a, 0xb4, 0x93, 0x75, 0x4e, 0xc1, 0x9e, 0x3c, 0x32, 0xe5, 0xc9, + 0xec, 0x86, 0x95, 0x7a, 0xbd, 0xee, 0x7e, 0x8b, 0x06, 0x1e, 0x48, 0xb4, 0x1b, 0xc6, 0xc4, 0x2f, + 0x90, 0x0e, 0xc4, 0x2f, 0x48, 0xbc, 0x1b, 0xc6, 0xf1, 0x31, 0x8e, 0xdd, 0xb0, 0x38, 0x82, 0xe9, + 0x8b, 0xf6, 0x6f, 0x0a, 0xc4, 0x6a, 0xa6, 0xb7, 0x11, 0xfc, 0xc3, 0x60, 0xcf, 0x6a, 0xc0, 0x3b, + 0xbb, 0x0c, 0xba, 0xa8, 0x20, 0xf6, 0x16, 0x16, 0xe5, 0xf1, 0x20, 0xbf, 0x69, 0x3b, 0x3b, 0x86, + 0xbf, 0x71, 0xdf, 0x7f, 0x52, 0x84, 0xde, 0x00, 0xb0, 0x84, 0xf3, 0xe8, 0x34, 0x2f, 0x9a, 0x8f, + 0x3c, 0xd3, 0xec, 0xd1, 0xa0, 0x8f, 0xe8, 0xaf, 0x72, 0x23, 0x98, 0xa3, 0xb1, 0x1f, 0xeb, 0xd0, + 0xf5, 0x60, 0x87, 0x46, 0xb4, 0xe0, 0x13, 0x95, 0x73, 0x60, 0x96, 0x26, 0x2c, 0x99, 0x5d, 0xe8, + 0xd2, 0xa0, 0x16, 0x5c, 0x9a, 0x72, 0x0a, 0xe4, 0x4d, 0xf7, 0x3e, 0xd7, 0xb6, 0x68, 0x40, 0x3e, + 0xfa, 0xa4, 0xdc, 0x0c, 0x8e, 0xd3, 0x7c, 0x81, 0xb1, 0x4a, 0x0e, 0xec, 0xf4, 0x27, 0x23, 0xd5, + 0xb2, 0xec, 0x35, 0xc7, 0xde, 0x72, 0xa0, 0xeb, 0xe2, 0x53, 0x53, 0x05, 0x9d, 0x49, 0x51, 0x2e, + 0x82, 0x13, 0x5d, 0xd3, 0xba, 0xec, 0xe2, 0x18, 0xc1, 0x4b, 0xd4, 0x6d, 0x6c, 0x76, 0x40, 0xec, + 0x6e, 0xa6, 0xb1, 0x51, 0x39, 0xb0, 0x9f, 0xe8, 0x07, 0xa9, 0x28, 0xb7, 0x80, 0x22, 0xe5, 0x66, + 0xd1, 0x68, 0x5f, 0xc6, 0xef, 0xa9, 0x3b, 0xea, 0x81, 0x74, 0x46, 0x18, 0x24, 0x8c, 0xfe, 0x3c, + 0x27, 0x0c, 0x12, 0x49, 0xff, 0x25, 0x19, 0x30, 0xcb, 0x15, 0x60, 0x00, 0xc5, 0xef, 0x16, 0xdd, + 0x0b, 0xdb, 0xa6, 0x07, 0x11, 0x73, 0xf4, 0xac, 0xcb, 0x63, 0x87, 0x30, 0xaf, 0x1f, 0xf8, 0x50, + 0x1f, 0x40, 0x0c, 0xf1, 0x45, 0x3a, 0x3c, 0xec, 0x59, 0xe6, 0x52, 0x5b, 0x95, 0x4b, 0x53, 0x9f, + 0x09, 0x94, 0x83, 0xd4, 0x18, 0x2f, 0x90, 0x4c, 0x32, 0x2f, 0x10, 0x24, 0x37, 0xa3, 0xdb, 0xb5, + 0xaf, 0xc0, 0x4e, 0x40, 0x96, 0xea, 0xea, 0x81, 0x74, 0xf5, 0x0b, 0xa3, 0xcc, 0x0b, 0x13, 0x5f, + 0xac, 0x81, 0x1a, 0xd9, 0x6e, 0xbb, 0x0d, 0x61, 0x87, 0x1e, 0x5c, 0xf3, 0x1f, 0x13, 0x5e, 0xb9, + 0x91, 0x78, 0x16, 0x79, 0x44, 0x77, 0x6e, 0xbc, 0x3f, 0xbc, 0xf9, 0x64, 0x57, 0xa4, 0xab, 0x89, + 0x3b, 0x1f, 0x3f, 0x52, 0xa7, 0xa2, 0xbe, 0x37, 0xe9, 0x69, 0xd1, 0x58, 0x4c, 0x4f, 0xa1, 0xc1, + 0xdd, 0xdd, 0xed, 0x06, 0xc7, 0x9d, 0xc8, 0x53, 0x42, 0xf4, 0x12, 0x1d, 0x20, 0x3d, 0x22, 0xe4, + 0x3e, 0x7e, 0x35, 0xc8, 0x93, 0x9b, 0x0b, 0xd5, 0x97, 0xcc, 0x0f, 0x84, 0x6e, 0x9e, 0x87, 0x6e, + 0x1d, 0xcc, 0x5a, 0x36, 0x2a, 0x6e, 0xcd, 0x70, 0x8c, 0x1d, 0x37, 0x6e, 0x79, 0x9f, 0xd0, 0x0d, + 0x6c, 0xb9, 0x3a, 0xf3, 0xd9, 0xca, 0x31, 0x9d, 0x23, 0xa3, 0xfc, 0x5f, 0xe0, 0xf8, 0x25, 0x1a, + 0x9a, 0xc3, 0xa5, 0x94, 0xa5, 0x68, 0xe7, 0xd7, 0x3e, 0xca, 0x8b, 0xfc, 0x97, 0x2b, 0xc7, 0xf4, + 0x7e, 0x62, 0xca, 0x7f, 0x02, 0xf3, 0xe8, 0xb1, 0x63, 0x5f, 0xf1, 0x19, 0x97, 0xa3, 0x67, 0x00, + 0x7d, 0xe4, 0x57, 0xb9, 0x0f, 0x57, 0x8e, 0xe9, 0x7d, 0xa4, 0x94, 0x06, 0x00, 0xdb, 0xde, 0x4e, + 0x97, 0x12, 0xce, 0x46, 0x77, 0x26, 0x7d, 0x84, 0x57, 0x82, 0x8f, 0x56, 0x8e, 0xe9, 0x0c, 0x09, + 0xa5, 0x06, 0xa6, 0xbd, 0x07, 0x3d, 0x4a, 0x2f, 0x17, 0xed, 0x75, 0xd2, 0x47, 0xaf, 0xe5, 0x7f, + 0xb3, 0x72, 0x4c, 0x0f, 0x09, 0x28, 0x55, 0x50, 0xe8, 0x5d, 0xa2, 0xc4, 0xf2, 0xd1, 0x23, 0x55, + 0x1f, 0xb1, 0xb5, 0x4b, 0x01, 0xad, 0xe0, 0x73, 0xc4, 0x58, 0xdb, 0xdd, 0xa3, 0xb4, 0xa6, 0x84, + 0x19, 0x2b, 0xfb, 0xdf, 0x20, 0xc6, 0x02, 0x02, 0x4a, 0x15, 0x4c, 0xbb, 0x96, 0xd1, 0x73, 0xb7, + 0x6d, 0xcf, 0x3d, 0x5d, 0xe8, 0x73, 0x50, 0x8e, 0xa6, 0xd6, 0xa4, 0xdf, 0xe8, 0xe1, 0xd7, 0xca, + 0xe3, 0xc1, 0xd5, 0xbb, 0xbd, 0x8e, 0xe1, 0x41, 0xed, 0x41, 0xd3, 0x0d, 0x6f, 0xaf, 0xf4, 0xcf, + 0xe5, 0x0e, 0x7e, 0xa9, 0x2c, 0xd0, 0xa3, 0x8a, 0x00, 0xb7, 0x4b, 0xb5, 0x7f, 0x97, 0x9c, 0x14, + 0xcb, 0x9c, 0x50, 0x7c, 0x12, 0xc8, 0xa2, 0x57, 0xd8, 0x2c, 0x98, 0x1f, 0xbc, 0x02, 0xdf, 0xaf, + 0x3b, 0xb8, 0x01, 0xa3, 0x8f, 0xfa, 0x2c, 0x8b, 0xd9, 0x03, 0x96, 0xc5, 0x59, 0x30, 0x63, 0xba, + 0xab, 0xe6, 0x16, 0x99, 0xd6, 0xd0, 0x91, 0x9f, 0x4d, 0x22, 0xcb, 0x40, 0x75, 0x78, 0x85, 0x0c, + 0xf9, 0xc7, 0xfd, 0x65, 0x20, 0x3f, 0x45, 0xbd, 0x09, 0xcc, 0xb2, 0x8d, 0x8c, 0x5c, 0x7f, 0x6c, + 0x86, 0x93, 0x22, 0xfa, 0xa4, 0xde, 0x08, 0xe6, 0x79, 0x9d, 0x66, 0x6c, 0x3f, 0xd9, 0x1f, 0xc4, + 0xd4, 0x47, 0x80, 0xe3, 0x7d, 0x0d, 0xcb, 0x0f, 0xf6, 0x93, 0x09, 0x83, 0xfd, 0x9c, 0x05, 0x20, + 0xd4, 0xe2, 0x81, 0x64, 0x6e, 0x00, 0xd3, 0x81, 0x5e, 0x0e, 0xcc, 0xf0, 0xf5, 0x0c, 0x28, 0xf8, + 0xca, 0x36, 0x28, 0x03, 0xb2, 0x29, 0x2c, 0x66, 0x67, 0xcf, 0xb7, 0x29, 0xd8, 0x34, 0x64, 0xe0, + 0x85, 0xfe, 0xf4, 0x2d, 0xd3, 0xeb, 0xfa, 0x67, 0x52, 0xfb, 0x93, 0x95, 0x35, 0x00, 0x4c, 0x8c, + 0x51, 0x2b, 0x3c, 0xa4, 0x7a, 0x7b, 0x82, 0xf6, 0x40, 0xf4, 0x81, 0xa1, 0x71, 0xee, 0xe1, 0xf4, + 0x04, 0xe9, 0x34, 0xc8, 0x91, 0x0b, 0x16, 0x8e, 0x29, 0xf3, 0x00, 0x68, 0x4f, 0x5b, 0xd3, 0xf4, + 0xaa, 0x56, 0x2f, 0x6b, 0xc5, 0x8c, 0xfa, 0x72, 0x09, 0x4c, 0x07, 0x8d, 0x60, 0x60, 0x25, 0x35, + 0xaa, 0x5a, 0x43, 0x6f, 0x98, 0x3d, 0xd8, 0xa8, 0x58, 0x25, 0x7b, 0x22, 0xb8, 0x66, 0xd7, 0x85, + 0x4b, 0xa6, 0xe3, 0x7a, 0xba, 0x7d, 0x65, 0xc9, 0x76, 0x42, 0x93, 0x88, 0x84, 0x26, 0x8e, 0x7a, + 0x8d, 0x4c, 0xfd, 0x0e, 0xc4, 0xa7, 0x15, 0xa1, 0x43, 0xb7, 0x6c, 0xc2, 0x04, 0x44, 0xd7, 0x73, + 0x0c, 0xcb, 0xed, 0xd9, 0x2e, 0xd4, 0xed, 0x2b, 0x6e, 0xc9, 0xea, 0x94, 0xed, 0xee, 0xee, 0x8e, + 0xe5, 0x52, 0x63, 0x3d, 0xea, 0x35, 0x92, 0x0e, 0xbe, 0x3f, 0x7a, 0x1e, 0x80, 0x72, 0xa3, 0x56, + 0xd3, 0xca, 0xad, 0x6a, 0xa3, 0x5e, 0x3c, 0x86, 0xa4, 0xd5, 0x2a, 0x2d, 0xd6, 0x90, 0x74, 0x9e, + 0x0e, 0x0a, 0x7e, 0x9b, 0xa6, 0xf1, 0x89, 0x32, 0x7e, 0x7c, 0x22, 0xa5, 0x04, 0x0a, 0x7e, 0x2b, + 0xa7, 0x23, 0xc2, 0x23, 0xfb, 0xcf, 0xa3, 0xef, 0x18, 0x8e, 0x87, 0x4d, 0x4b, 0x9f, 0xc8, 0xa2, + 0xe1, 0x42, 0x3d, 0xf8, 0xec, 0xdc, 0x63, 0x28, 0x07, 0x0a, 0x98, 0x2f, 0xd5, 0x6a, 0x1b, 0x0d, + 0x7d, 0xa3, 0xde, 0x68, 0xad, 0x54, 0xeb, 0xcb, 0x64, 0x84, 0xac, 0x2e, 0xd7, 0x1b, 0xba, 0x46, + 0x06, 0xc8, 0x66, 0x31, 0x43, 0xee, 0x2f, 0x5f, 0x2c, 0x80, 0x7c, 0x0f, 0x4b, 0x57, 0xfd, 0x8a, + 0x9c, 0xd0, 0xb4, 0x08, 0x70, 0x8a, 0xb8, 0x61, 0x99, 0x3b, 0x0c, 0x22, 0x0d, 0x38, 0xac, 0x7d, + 0x0e, 0xcc, 0x12, 0x73, 0xc8, 0xc5, 0xfb, 0x6a, 0x18, 0x39, 0x59, 0xe7, 0xd2, 0xd4, 0x4f, 0x4a, + 0x09, 0x8c, 0x8b, 0x81, 0x1c, 0x25, 0x33, 0x2e, 0xfe, 0x20, 0x33, 0xda, 0x75, 0x24, 0xd5, 0x7a, + 0x4b, 0xd3, 0xeb, 0xa5, 0x1a, 0xcd, 0x22, 0x2b, 0xa7, 0xc1, 0xc9, 0x7a, 0x83, 0x06, 0xe3, 0x6c, + 0x6e, 0xb4, 0x1a, 0x1b, 0xd5, 0xd5, 0xb5, 0x86, 0xde, 0x2a, 0xe6, 0x94, 0x53, 0x40, 0x21, 0xff, + 0x37, 0xaa, 0xcd, 0x8d, 0x72, 0xa9, 0x5e, 0xd6, 0x6a, 0x5a, 0xa5, 0x98, 0x57, 0x1e, 0x05, 0x1e, + 0x41, 0xae, 0xb7, 0x6a, 0x2c, 0x6d, 0xe8, 0x8d, 0x0b, 0x4d, 0x84, 0xa0, 0xae, 0xd5, 0x4a, 0x48, + 0x91, 0x98, 0x7b, 0xcc, 0xa7, 0x94, 0xab, 0xc0, 0xf1, 0xa5, 0x6a, 0x4d, 0xc3, 0xb7, 0xd1, 0xd2, + 0xf2, 0x0a, 0xca, 0xf5, 0xe0, 0x74, 0xb5, 0xde, 0x5c, 0x5f, 0x5a, 0xaa, 0x96, 0xab, 0x5a, 0xbd, + 0xb5, 0xb1, 0xa6, 0xe9, 0xab, 0xd5, 0x66, 0x13, 0x7d, 0x5b, 0x9c, 0x56, 0x3f, 0x2e, 0x83, 0x3c, + 0xe9, 0x33, 0x91, 0x11, 0x3b, 0x77, 0xde, 0xe8, 0x9a, 0x68, 0xa0, 0xc0, 0xd7, 0xc7, 0xf7, 0x9d, + 0xe3, 0xf2, 0xf0, 0x35, 0xf3, 0xf4, 0x24, 0x08, 0x7e, 0x50, 0x7f, 0x54, 0x4e, 0x78, 0x8e, 0x8b, + 0x02, 0x41, 0x4a, 0x5c, 0xe0, 0x4a, 0x8b, 0x58, 0x75, 0x78, 0x8d, 0x94, 0xe0, 0x1c, 0x97, 0x38, + 0xf9, 0x64, 0xe0, 0xff, 0xe2, 0xb8, 0xc0, 0x2f, 0x82, 0xd9, 0xf5, 0x7a, 0x69, 0xbd, 0xb5, 0xd2, + 0xd0, 0xab, 0x3f, 0x8c, 0x6f, 0x21, 0x98, 0x03, 0xd3, 0x4b, 0x0d, 0x7d, 0xb1, 0x5a, 0xa9, 0x68, + 0xf5, 0x62, 0x4e, 0xb9, 0x06, 0x5c, 0xd5, 0xd4, 0xf4, 0xf3, 0xd5, 0xb2, 0xb6, 0xb1, 0x5e, 0x2f, + 0x9d, 0x2f, 0x55, 0x6b, 0xb8, 0x8f, 0xc8, 0xc7, 0x5c, 0x7d, 0x3f, 0xa5, 0xfe, 0x48, 0x16, 0x00, + 0x52, 0x75, 0x7c, 0x09, 0x17, 0x73, 0x41, 0xfa, 0x1f, 0x25, 0x9d, 0xee, 0x85, 0x64, 0x22, 0xda, + 0x6f, 0x15, 0x14, 0x1c, 0xfa, 0x82, 0xae, 0x6b, 0x0e, 0xa3, 0x43, 0xfe, 0xfa, 0xd4, 0xf4, 0xe0, + 0x73, 0xf5, 0x03, 0x49, 0x66, 0x77, 0x91, 0x8c, 0x4d, 0xe4, 0xa6, 0xe7, 0x7e, 0x20, 0xd5, 0x17, + 0x66, 0xc0, 0x3c, 0x5f, 0x31, 0x54, 0x09, 0x6c, 0x4c, 0x89, 0x55, 0x82, 0xff, 0x98, 0x31, 0xb2, + 0xce, 0x3d, 0x8e, 0x0e, 0xa7, 0xc0, 0x6f, 0x99, 0x24, 0x24, 0x83, 0x6f, 0xb1, 0x14, 0x33, 0x88, + 0x79, 0x64, 0x74, 0x14, 0x25, 0x65, 0x0a, 0xc8, 0xad, 0x07, 0xbd, 0xa2, 0xac, 0x7e, 0x3a, 0x0b, + 0xe6, 0xb8, 0x1b, 0xd8, 0xd5, 0x3f, 0xce, 0x88, 0xdc, 0x6e, 0xcc, 0xdc, 0xed, 0x9e, 0x39, 0xec, + 0xdd, 0xee, 0xe7, 0x4c, 0x30, 0x45, 0xd3, 0xb0, 0x7c, 0x1b, 0x75, 0x64, 0x0a, 0x1c, 0x07, 0x33, + 0xcb, 0x5a, 0x6b, 0xa3, 0xd9, 0x2a, 0xe9, 0x2d, 0xad, 0x52, 0xcc, 0xa0, 0x81, 0x4f, 0x5b, 0x5d, + 0x6b, 0x5d, 0x2c, 0x4a, 0x68, 0x4c, 0x5c, 0x5e, 0xaf, 0x56, 0xb4, 0x8d, 0x46, 0xbd, 0x76, 0xb1, + 0x28, 0xa3, 0x1e, 0x90, 0xc9, 0xbb, 0xb1, 0xda, 0x58, 0xac, 0xd6, 0xb4, 0x62, 0x16, 0x35, 0x1b, + 0xfc, 0x89, 0x9f, 0x92, 0xe3, 0x7d, 0xa3, 0x45, 0x56, 0x38, 0xfb, 0xab, 0x70, 0x78, 0x17, 0x91, + 0x24, 0x57, 0xc8, 0x27, 0x5a, 0x3b, 0x8d, 0x63, 0x35, 0xfd, 0x19, 0xf1, 0xe7, 0x65, 0x50, 0x24, + 0x1c, 0x68, 0x0f, 0xf6, 0xa0, 0x63, 0x42, 0xab, 0x0d, 0xd5, 0xcb, 0x22, 0x01, 0x81, 0x0f, 0x84, + 0xc2, 0xc4, 0xa3, 0x06, 0x63, 0x8b, 0x92, 0x87, 0x3e, 0x33, 0x3e, 0x7b, 0xc0, 0x8c, 0xff, 0x9d, + 0xa4, 0x1e, 0xb8, 0xfd, 0xec, 0x8e, 0x65, 0xcf, 0xea, 0x33, 0x49, 0x3c, 0x70, 0x87, 0x70, 0x30, + 0x91, 0x38, 0xdf, 0x11, 0xa3, 0x7c, 0x51, 0x56, 0x5f, 0x20, 0x83, 0xe3, 0x15, 0xc3, 0x83, 0x8b, + 0xfb, 0x2d, 0xff, 0x1e, 0xd5, 0x88, 0xbb, 0xcf, 0x33, 0x07, 0xee, 0x3e, 0x0f, 0xaf, 0x62, 0x95, + 0xfa, 0xae, 0x62, 0x55, 0xdf, 0x93, 0xf4, 0xcc, 0x6e, 0x1f, 0x0f, 0x63, 0x0b, 0xc6, 0x9d, 0xec, + 0x2c, 0x6e, 0x3c, 0x17, 0xe9, 0x37, 0xb0, 0xb7, 0x4f, 0x83, 0x22, 0x61, 0x85, 0x71, 0x32, 0xfd, + 0x59, 0x19, 0xc8, 0xa5, 0x4e, 0x47, 0xdd, 0x48, 0x10, 0xd3, 0xd3, 0x8f, 0x92, 0x22, 0xf1, 0x51, + 0x52, 0xb8, 0x3d, 0x0b, 0xb9, 0xdf, 0x31, 0x28, 0xe9, 0x69, 0x04, 0xc6, 0xa3, 0x34, 0x3a, 0x8c, + 0x72, 0x7a, 0xa7, 0x11, 0x62, 0x8b, 0x9f, 0xcc, 0x95, 0xd6, 0xf4, 0x16, 0x59, 0x4d, 0x14, 0x99, + 0xf8, 0x9b, 0xfb, 0x93, 0x1e, 0x2f, 0xe0, 0x3c, 0x7a, 0x63, 0xae, 0xb3, 0x4f, 0xef, 0x78, 0xc1, + 0x30, 0x0e, 0xd2, 0x47, 0xe1, 0x7b, 0x12, 0xc8, 0x36, 0x6d, 0xc7, 0x1b, 0x17, 0x06, 0x49, 0x5d, + 0x22, 0x18, 0x09, 0x34, 0xa3, 0x67, 0xb6, 0xe9, 0xb9, 0x44, 0xc4, 0x97, 0x3f, 0x81, 0xb0, 0xa8, + 0xc7, 0xc1, 0x3c, 0xe1, 0x24, 0xb8, 0x53, 0xe8, 0x5f, 0x25, 0xd2, 0x5f, 0xdd, 0x2f, 0x8a, 0x08, + 0xde, 0x18, 0x0b, 0x5c, 0x12, 0x7c, 0x50, 0xb8, 0x34, 0xf5, 0x8d, 0x2c, 0x2e, 0x15, 0x1e, 0x97, + 0x41, 0xf3, 0xfa, 0xe0, 0x5a, 0x9e, 0x71, 0xf5, 0x4c, 0x49, 0x22, 0xac, 0xc6, 0x14, 0x9e, 0x3e, + 0x22, 0xcf, 0x91, 0x41, 0x9e, 0xba, 0x84, 0x8e, 0x15, 0x81, 0xa4, 0x2d, 0x23, 0x10, 0x82, 0x98, + 0xeb, 0xa8, 0x3c, 0xee, 0x96, 0x11, 0x5f, 0x7e, 0xfa, 0x38, 0xfc, 0x1b, 0xf5, 0x75, 0x2e, 0xed, + 0x19, 0x66, 0xd7, 0xb8, 0xd4, 0x4d, 0x10, 0xd9, 0xfc, 0x93, 0x09, 0x4f, 0x77, 0x06, 0x55, 0xe5, + 0xca, 0x8b, 0x90, 0xf8, 0x0f, 0x82, 0x69, 0x87, 0xdb, 0x0b, 0x46, 0x56, 0x54, 0x9f, 0x9f, 0x39, + 0x7d, 0xaf, 0x87, 0x39, 0x13, 0x1d, 0xe5, 0x14, 0xe2, 0x67, 0x22, 0x47, 0xcf, 0x66, 0x4a, 0x9d, + 0xce, 0x12, 0x34, 0xbc, 0x5d, 0x07, 0x76, 0x12, 0x0d, 0x11, 0x4e, 0xdf, 0x76, 0x39, 0x23, 0x09, + 0x2e, 0xb6, 0x68, 0x8d, 0x47, 0xe7, 0x09, 0x43, 0x7a, 0x03, 0x9f, 0x97, 0xb1, 0x74, 0x49, 0x6f, + 0x0b, 0x20, 0x69, 0x70, 0x90, 0x3c, 0x69, 0x34, 0x26, 0xd2, 0x07, 0xe4, 0xa5, 0x32, 0x98, 0x27, + 0x76, 0xc2, 0xb8, 0x31, 0xf9, 0x70, 0x42, 0x17, 0x32, 0xe6, 0xd6, 0x36, 0x96, 0x9d, 0xb1, 0xc0, + 0x92, 0xc4, 0xe1, 0x4c, 0x8c, 0x8f, 0xf4, 0x91, 0xf9, 0x9f, 0x57, 0x01, 0xc0, 0xb8, 0x05, 0x7f, + 0x32, 0x1f, 0xc6, 0xf9, 0x54, 0xdf, 0x49, 0xe7, 0x1f, 0x4d, 0x2e, 0xe8, 0x3c, 0xe3, 0xf2, 0x1b, + 0x6c, 0x7b, 0xf1, 0x89, 0x42, 0xa3, 0xca, 0x1f, 0x24, 0xb4, 0x79, 0xa9, 0x53, 0xee, 0xd0, 0xc1, + 0x7d, 0xc4, 0x5e, 0xee, 0x53, 0x09, 0x8c, 0xdf, 0x61, 0xac, 0x24, 0x43, 0xad, 0x36, 0xc2, 0xcc, + 0xfe, 0x34, 0x38, 0xa9, 0x6b, 0xa5, 0x4a, 0xa3, 0x5e, 0xbb, 0xc8, 0x5e, 0xe1, 0x55, 0x94, 0xd9, + 0xc9, 0x49, 0x2a, 0xb0, 0xbd, 0x2e, 0x61, 0x1f, 0xc8, 0xcb, 0x2a, 0x6e, 0xb6, 0xc2, 0x2c, 0xae, + 0x0c, 0xef, 0xd5, 0x04, 0xc8, 0x1e, 0x25, 0x0a, 0xdf, 0xca, 0x83, 0x19, 0x1d, 0xb6, 0xed, 0x9d, + 0x1d, 0x68, 0x75, 0x60, 0x47, 0x7d, 0x9d, 0x0c, 0x66, 0x83, 0x5d, 0xc5, 0x26, 0xf4, 0xd4, 0xff, + 0x14, 0x62, 0x73, 0x0e, 0xcc, 0xa2, 0xca, 0x35, 0xf8, 0x8b, 0x04, 0xb8, 0x34, 0xe5, 0x56, 0x70, + 0xc2, 0x47, 0xa1, 0xd1, 0x37, 0x85, 0x39, 0xf8, 0x82, 0xf7, 0xfb, 0x59, 0xe7, 0x31, 0xba, 0x37, + 0x5a, 0x98, 0x01, 0xbb, 0x0b, 0x2c, 0xab, 0x11, 0x60, 0xfd, 0x5e, 0x00, 0xd6, 0xd3, 0x38, 0xb0, + 0x2a, 0x87, 0xa4, 0x7f, 0x94, 0xa8, 0x7d, 0x48, 0x06, 0x27, 0xfd, 0x8e, 0x78, 0x72, 0x68, 0x7d, + 0x8a, 0x45, 0xeb, 0xe9, 0x3c, 0x5a, 0xcb, 0x22, 0xd2, 0x1c, 0xc4, 0x72, 0x04, 0x6a, 0x5f, 0x0e, + 0x50, 0xfb, 0x2f, 0x1c, 0x6a, 0xb5, 0x31, 0x95, 0x73, 0x94, 0xe8, 0x7d, 0x58, 0x06, 0xa7, 0x91, + 0xd9, 0x59, 0xb6, 0xad, 0xcd, 0xae, 0xd9, 0xf6, 0x4c, 0x6b, 0x2b, 0x74, 0x71, 0x5c, 0x16, 0x59, + 0xd9, 0xec, 0xc7, 0x56, 0x3a, 0x88, 0x2d, 0xbf, 0xc7, 0x20, 0xda, 0xb6, 0xa2, 0xd8, 0x8a, 0x18, + 0xc2, 0x18, 0xe7, 0xfd, 0x50, 0x73, 0xd8, 0xa4, 0xe4, 0xad, 0x4f, 0x90, 0x83, 0xa3, 0xc4, 0xef, + 0xeb, 0x12, 0x38, 0xa5, 0x43, 0xd7, 0xee, 0xee, 0x41, 0xe2, 0xcb, 0xea, 0xf3, 0xeb, 0xaa, 0x8f, + 0x49, 0xd4, 0xfe, 0xd4, 0x97, 0xb2, 0x18, 0x35, 0x79, 0x8c, 0xee, 0x89, 0xd6, 0xf4, 0x41, 0x45, + 0x47, 0xb4, 0xa3, 0xf7, 0x06, 0xf2, 0x3f, 0xcf, 0xc9, 0x7f, 0xf1, 0x50, 0xd4, 0x27, 0xb0, 0x44, + 0x00, 0x18, 0xf3, 0xee, 0xf9, 0x32, 0x28, 0x62, 0x9f, 0x65, 0x3c, 0x7a, 0xd2, 0x3b, 0x84, 0x1b, + 0xfc, 0x69, 0x96, 0x9e, 0xaf, 0x84, 0xfe, 0x69, 0x16, 0x3f, 0x41, 0xb9, 0x09, 0xcc, 0xb7, 0xb7, + 0x61, 0xfb, 0x72, 0xd5, 0xf2, 0xbd, 0xca, 0x88, 0x0b, 0x52, 0x5f, 0x2a, 0x6f, 0x30, 0xdc, 0xcf, + 0x83, 0xc1, 0x2f, 0xee, 0x72, 0x93, 0x47, 0x96, 0xa9, 0x08, 0x10, 0x7e, 0x33, 0x00, 0xa1, 0xce, + 0x81, 0x70, 0xd7, 0x48, 0x54, 0x93, 0x09, 0xbf, 0x3e, 0x82, 0xea, 0xab, 0xe0, 0x54, 0x63, 0xad, + 0x55, 0x6d, 0xd4, 0x37, 0xd6, 0x9b, 0x5a, 0x65, 0x63, 0xd1, 0x6f, 0x00, 0xcd, 0xa2, 0xac, 0x7e, + 0x53, 0x02, 0x53, 0x84, 0x2d, 0x57, 0x7d, 0x74, 0x08, 0xc1, 0xd0, 0x63, 0x3c, 0xea, 0xdb, 0x85, + 0x83, 0x72, 0x05, 0x82, 0xa0, 0xe5, 0x44, 0x74, 0x3e, 0x4f, 0x04, 0x53, 0x04, 0x64, 0x7f, 0xa7, + 0xe5, 0x4c, 0x84, 0xf5, 0x4c, 0xc9, 0xe8, 0x7e, 0x76, 0xc1, 0x00, 0x5d, 0x43, 0xd8, 0x48, 0xbf, + 0x0d, 0x3c, 0x2b, 0x4b, 0x96, 0x67, 0x2e, 0x98, 0xde, 0x36, 0x3e, 0xe5, 0xa3, 0x3e, 0x55, 0x64, + 0x70, 0xb8, 0x15, 0xe4, 0xf6, 0x50, 0xee, 0x21, 0x27, 0xa6, 0x48, 0x26, 0xf5, 0x17, 0x85, 0xe3, + 0xc1, 0x73, 0xfa, 0x19, 0xf0, 0x14, 0x01, 0xce, 0x2a, 0xc8, 0x76, 0x4d, 0xd7, 0xa3, 0xf3, 0x9a, + 0x3b, 0x13, 0x11, 0xf2, 0xff, 0x54, 0x3d, 0xb8, 0xa3, 0x63, 0x32, 0xea, 0x7d, 0xc8, 0x2a, 0x0d, + 0x53, 0x05, 0x4e, 0x8d, 0x9d, 0x06, 0x53, 0x34, 0x9a, 0x01, 0xdd, 0xfa, 0xf3, 0x1f, 0x05, 0xb7, + 0xdb, 0x84, 0x6a, 0x9b, 0xbe, 0x0e, 0xfc, 0xbf, 0xc7, 0xc1, 0xd4, 0x8a, 0xe9, 0x7a, 0xb6, 0xb3, + 0xaf, 0xbe, 0x3e, 0x03, 0xa6, 0xce, 0x43, 0xc7, 0x35, 0x6d, 0xeb, 0x80, 0xa3, 0xdd, 0x59, 0x30, + 0xd3, 0x73, 0xe0, 0x9e, 0x69, 0xef, 0xba, 0xcc, 0x48, 0xcc, 0x24, 0x29, 0x2a, 0x28, 0x18, 0xbb, + 0xde, 0xb6, 0xed, 0x84, 0x41, 0xd0, 0xfc, 0x67, 0xe5, 0x0c, 0x00, 0xe4, 0x7f, 0xdd, 0xd8, 0x81, + 0xd4, 0x7d, 0x90, 0x49, 0x51, 0x14, 0x90, 0xf5, 0xcc, 0x1d, 0x48, 0x6f, 0x45, 0xc0, 0xff, 0x91, + 0x80, 0x71, 0x84, 0x61, 0x1a, 0xc9, 0x59, 0xd6, 0xfd, 0x47, 0xf5, 0x8b, 0x32, 0x98, 0x59, 0x86, + 0x1e, 0x65, 0xd5, 0x55, 0x5f, 0x94, 0x11, 0xba, 0x88, 0x0c, 0xcd, 0xfd, 0xba, 0x86, 0xeb, 0x7f, + 0x17, 0x98, 0x35, 0x7c, 0x62, 0x78, 0x45, 0x83, 0xcc, 0xde, 0xcf, 0x82, 0xe3, 0xf5, 0x7a, 0x55, + 0x72, 0x80, 0x86, 0x66, 0xa6, 0x9b, 0xf3, 0x07, 0x5f, 0xf0, 0xf3, 0x8e, 0xd8, 0x58, 0x37, 0x54, + 0xf6, 0x0b, 0x4c, 0x7d, 0x22, 0xbb, 0xa3, 0xc2, 0x1e, 0xcd, 0x71, 0xe0, 0xea, 0x1d, 0x96, 0x12, + 0x25, 0xa3, 0x07, 0xb9, 0x05, 0xa3, 0xe4, 0x0c, 0xe7, 0x64, 0x02, 0x97, 0x2d, 0xcb, 0x60, 0xa6, + 0xb9, 0x6d, 0x5f, 0xf1, 0xe5, 0xf8, 0x74, 0x31, 0x60, 0xaf, 0x07, 0xd3, 0x7b, 0x7d, 0xa0, 0x86, + 0x09, 0xec, 0xfd, 0x8e, 0x32, 0x7f, 0xbf, 0xe3, 0xf3, 0xe4, 0xa4, 0x30, 0x31, 0xcc, 0x45, 0xc0, + 0xc4, 0x5f, 0xc9, 0x28, 0x25, 0xb8, 0x92, 0x51, 0x79, 0x02, 0x98, 0xa2, 0x5c, 0xd3, 0xad, 0x80, + 0x78, 0x80, 0xfd, 0xcc, 0x6c, 0x05, 0xb3, 0x7c, 0x05, 0x93, 0x21, 0x1f, 0x5d, 0xb9, 0xf4, 0x91, + 0xff, 0x6d, 0x09, 0xc7, 0x48, 0xf3, 0x81, 0x2f, 0x8f, 0x01, 0x78, 0xf5, 0xbb, 0x19, 0xd1, 0x0d, + 0xb3, 0x40, 0x02, 0x01, 0x07, 0x87, 0xba, 0x64, 0x70, 0x28, 0xb9, 0xf4, 0xe5, 0xf9, 0xf2, 0x2c, + 0x98, 0xad, 0x98, 0x9b, 0x9b, 0x41, 0x27, 0xf9, 0x62, 0xc1, 0x4e, 0x32, 0xda, 0x19, 0x0e, 0xd9, + 0xb9, 0xbb, 0x8e, 0x03, 0x2d, 0xbf, 0x52, 0xb4, 0x39, 0xf5, 0xa5, 0x2a, 0x37, 0x83, 0xe3, 0xfe, + 0xb8, 0xc0, 0x76, 0x94, 0xd3, 0x7a, 0x7f, 0xb2, 0xfa, 0x6d, 0x61, 0x6f, 0x0b, 0x5f, 0xa2, 0x6c, + 0x95, 0x22, 0x1a, 0xe0, 0xdd, 0x60, 0x6e, 0x9b, 0xe4, 0xc6, 0x4b, 0xd2, 0x7e, 0x67, 0x79, 0xaa, + 0xef, 0x0e, 0x8a, 0x55, 0xe8, 0xba, 0xc6, 0x16, 0xd4, 0xf9, 0xcc, 0x7d, 0xcd, 0x57, 0x4e, 0x72, + 0xa3, 0xaa, 0x98, 0xe3, 0x86, 0x40, 0x4d, 0xd2, 0xd7, 0x8e, 0x2f, 0x9f, 0x03, 0xd9, 0x25, 0xb3, + 0x0b, 0xd5, 0x1f, 0x97, 0xc0, 0xb4, 0x0e, 0xdb, 0xb6, 0xd5, 0x46, 0x4f, 0x8c, 0x6b, 0xec, 0xb7, + 0x32, 0xa2, 0x37, 0x89, 0x23, 0x3a, 0x0b, 0x01, 0x8d, 0x88, 0x76, 0x23, 0x76, 0x63, 0x78, 0x2c, + 0xa9, 0x09, 0xdc, 0xfb, 0x86, 0xa6, 0x1e, 0x9b, 0x9b, 0x5d, 0xdb, 0xe0, 0x36, 0x65, 0xfa, 0x4d, + 0xa1, 0xf0, 0x20, 0x6e, 0xdd, 0xf6, 0xd6, 0x4c, 0xcb, 0x0a, 0x62, 0xdb, 0x1c, 0x48, 0xe7, 0xfd, + 0x89, 0x62, 0xc3, 0x03, 0xe2, 0xba, 0xd3, 0xd2, 0x23, 0x34, 0xfb, 0x26, 0x30, 0x7f, 0x69, 0xdf, + 0x83, 0x2e, 0xcd, 0x45, 0x8b, 0xcd, 0xea, 0x7d, 0xa9, 0xcc, 0xe5, 0x1e, 0x71, 0x61, 0x04, 0x63, + 0x0a, 0x4c, 0x26, 0xea, 0x95, 0x11, 0x66, 0x80, 0x27, 0x41, 0xb1, 0xde, 0xa8, 0x68, 0xd8, 0x53, + 0xdb, 0xf7, 0x7d, 0xdd, 0x52, 0x7f, 0x46, 0x06, 0xb3, 0xd8, 0xc9, 0xd1, 0x47, 0xe1, 0x11, 0x02, + 0xf3, 0x11, 0xf5, 0xab, 0xc2, 0x5e, 0xdc, 0xb8, 0xca, 0x6c, 0x01, 0xd1, 0x82, 0xde, 0x34, 0xbb, + 0xfd, 0x82, 0xce, 0xe9, 0x7d, 0xa9, 0x03, 0x00, 0x91, 0x07, 0x02, 0xf2, 0x21, 0x21, 0x57, 0xee, + 0x61, 0xdc, 0x1d, 0x15, 0x2a, 0xbf, 0x26, 0x83, 0x19, 0x34, 0x49, 0xf1, 0x41, 0x69, 0x70, 0xa0, + 0xd8, 0x56, 0x77, 0x3f, 0x5c, 0x16, 0xf1, 0x1f, 0x13, 0x35, 0x92, 0x3f, 0x16, 0x9e, 0xb9, 0x63, + 0x11, 0x31, 0xbc, 0x4c, 0x08, 0xbf, 0x0f, 0x0a, 0xcd, 0xe7, 0x87, 0x30, 0x77, 0x54, 0xf0, 0xbd, + 0x36, 0x0f, 0xf2, 0xeb, 0x3d, 0x8c, 0xdc, 0x57, 0x64, 0x91, 0x8b, 0x72, 0x0e, 0x1c, 0xe3, 0x43, + 0x66, 0x56, 0xd7, 0x6e, 0x1b, 0xdd, 0xb5, 0xf0, 0x24, 0x7b, 0x98, 0xa0, 0xdc, 0x45, 0x3d, 0xfb, + 0xc9, 0x81, 0xec, 0x9b, 0x62, 0xef, 0x90, 0xc1, 0x32, 0x62, 0x8e, 0x4c, 0xde, 0x0a, 0x4e, 0x74, + 0x4c, 0xd7, 0xb8, 0xd4, 0x85, 0x9a, 0xd5, 0x76, 0xf6, 0x89, 0x38, 0xe8, 0xb4, 0xea, 0xc0, 0x0b, + 0xe5, 0x1e, 0x90, 0x73, 0xbd, 0xfd, 0x2e, 0x99, 0x27, 0xb2, 0x27, 0x2c, 0x23, 0x8b, 0x6a, 0xa2, + 0xec, 0x3a, 0xf9, 0x8a, 0x75, 0x9d, 0x9d, 0x12, 0x73, 0x9d, 0x55, 0x1e, 0x07, 0xf2, 0xb6, 0x63, + 0x6e, 0x99, 0xe4, 0x5a, 0xc8, 0xf9, 0x03, 0xa1, 0x92, 0x89, 0x29, 0xd0, 0xc0, 0x59, 0x74, 0x9a, + 0x55, 0x79, 0x02, 0x98, 0x36, 0x77, 0x8c, 0x2d, 0x78, 0xbf, 0x69, 0x91, 0x40, 0x12, 0xf3, 0x77, + 0x9c, 0x3e, 0x70, 0x78, 0x94, 0xbe, 0xd7, 0xc3, 0xac, 0xca, 0xdd, 0xe0, 0xda, 0xb6, 0x03, 0x0d, + 0x0f, 0x22, 0x01, 0x5d, 0x30, 0x3b, 0x5b, 0xd0, 0xab, 0x6e, 0xae, 0x9a, 0xae, 0x6b, 0x5a, 0x5b, + 0xf4, 0xe6, 0xd7, 0xe8, 0x0c, 0xea, 0x07, 0x25, 0xd1, 0x68, 0x90, 0x58, 0x32, 0x44, 0x25, 0x46, + 0xb8, 0xa1, 0x9e, 0x91, 0xa2, 0x2c, 0xe8, 0x80, 0xfc, 0x2a, 0xa1, 0x38, 0x8d, 0xd1, 0x6c, 0xa5, + 0x3f, 0xf4, 0xff, 0xa1, 0x04, 0x0a, 0x15, 0xfb, 0x8a, 0x85, 0x9b, 0xc9, 0x9d, 0x62, 0x96, 0xf2, + 0x80, 0xd0, 0x0e, 0xfc, 0x5d, 0xe7, 0xb1, 0xa7, 0x01, 0x71, 0x6d, 0xfd, 0x22, 0x23, 0x60, 0x88, + 0x6d, 0x77, 0x82, 0x01, 0x04, 0xe2, 0xca, 0x49, 0x5f, 0xae, 0xbf, 0x2b, 0x83, 0x6c, 0xc5, 0xb1, + 0x7b, 0xea, 0xdb, 0x32, 0x09, 0x1c, 0xf1, 0x3a, 0x8e, 0xdd, 0x6b, 0xe1, 0x2b, 0x64, 0xc3, 0xbd, + 0x27, 0x36, 0x4d, 0xb9, 0x13, 0x14, 0x7a, 0xb6, 0x6b, 0x7a, 0xfe, 0x24, 0x64, 0xfe, 0x8e, 0x87, + 0x0d, 0xec, 0x0b, 0xd6, 0x68, 0x26, 0x3d, 0xc8, 0x8e, 0xfa, 0x7c, 0x2c, 0x42, 0x24, 0x17, 0x24, + 0x46, 0xff, 0x1a, 0xdd, 0xbe, 0x54, 0xf5, 0x25, 0x2c, 0x92, 0x4f, 0xe2, 0x91, 0x7c, 0xe4, 0x00, + 0x09, 0x3b, 0x76, 0x6f, 0x2c, 0xae, 0x33, 0xaf, 0x08, 0x50, 0x7d, 0x32, 0x87, 0xea, 0x2d, 0x42, + 0x65, 0xa6, 0x8f, 0xe8, 0x07, 0xb3, 0x00, 0x60, 0x23, 0x65, 0x1d, 0x4d, 0x9f, 0xc4, 0x2c, 0xb4, + 0x1f, 0xcb, 0x32, 0xb2, 0x2c, 0xf1, 0xb2, 0x7c, 0x74, 0x84, 0x0d, 0x84, 0xc9, 0x47, 0x48, 0xb4, + 0x04, 0x72, 0xbb, 0xe8, 0x35, 0x95, 0xa8, 0x20, 0x09, 0xfc, 0xa8, 0x93, 0x2f, 0xd5, 0xdf, 0xce, + 0x80, 0x1c, 0x4e, 0x50, 0xce, 0x00, 0x80, 0xcd, 0x02, 0x72, 0x98, 0x36, 0x83, 0x0d, 0x00, 0x26, + 0x05, 0x6b, 0xab, 0xd9, 0xa1, 0xaf, 0x89, 0xc1, 0x1d, 0x26, 0xa0, 0xaf, 0xb1, 0xb1, 0x80, 0x69, + 0x51, 0xf3, 0x81, 0x49, 0x41, 0x5f, 0xe3, 0xa7, 0x1a, 0xdc, 0x24, 0xb7, 0x7b, 0x64, 0xf5, 0x30, + 0x21, 0xf8, 0xba, 0x16, 0xdc, 0x09, 0xeb, 0x7f, 0x8d, 0x53, 0xd0, 0x54, 0x1a, 0xab, 0xe5, 0x62, + 0x58, 0x44, 0x1e, 0x67, 0xea, 0x4f, 0x56, 0x5f, 0x17, 0xa8, 0x4d, 0x85, 0x53, 0x9b, 0xdb, 0x13, + 0x88, 0x37, 0x7d, 0xe5, 0xf9, 0x7a, 0x0e, 0x4c, 0xd7, 0xed, 0x0e, 0xd5, 0x1d, 0x66, 0xba, 0xf9, + 0x99, 0x5c, 0xa2, 0xe9, 0x66, 0x40, 0x23, 0x42, 0x41, 0x9e, 0xc2, 0x2b, 0x88, 0x18, 0x05, 0x56, + 0x3f, 0x94, 0x45, 0x90, 0xc7, 0xda, 0x7b, 0xf0, 0xb2, 0xd1, 0x38, 0x12, 0x58, 0xb4, 0x3a, 0xfd, + 0xf2, 0xdf, 0x9d, 0x8e, 0xfd, 0x37, 0x90, 0xc3, 0x15, 0x8c, 0xd9, 0x1b, 0xe2, 0x2b, 0x2a, 0xc5, + 0x57, 0x54, 0x8e, 0xaf, 0x68, 0xb6, 0xbf, 0xa2, 0x49, 0x56, 0x11, 0xa2, 0x34, 0x24, 0x7d, 0x1d, + 0xff, 0x5f, 0x53, 0x00, 0xd4, 0x8d, 0x3d, 0x73, 0x8b, 0xec, 0x2d, 0x7f, 0xd1, 0x9f, 0x3d, 0xd1, + 0x5d, 0xe0, 0x9f, 0x64, 0x06, 0xc2, 0x3b, 0xc1, 0x14, 0x1d, 0xf7, 0x68, 0x45, 0x6e, 0xe0, 0x2a, + 0x12, 0x52, 0x21, 0x46, 0xed, 0x83, 0x9e, 0xee, 0xe7, 0x47, 0x86, 0xc9, 0xe6, 0x6e, 0xb7, 0xdb, + 0x42, 0xdf, 0x52, 0x0b, 0xcd, 0x7f, 0x8e, 0xd8, 0xc1, 0x08, 0x2f, 0x99, 0x26, 0x41, 0xa7, 0xe8, + 0x93, 0xfa, 0x3e, 0xe1, 0x73, 0x6a, 0x0c, 0x3f, 0x4c, 0x8d, 0x22, 0x9a, 0xe0, 0xe3, 0xc0, 0x94, + 0x1d, 0x6c, 0x87, 0xcb, 0x91, 0xab, 0x68, 0x55, 0x6b, 0xd3, 0xd6, 0xfd, 0x9c, 0x82, 0x5b, 0x67, + 0x42, 0x7c, 0x4c, 0xe4, 0x28, 0xe8, 0xa9, 0x65, 0x3f, 0x52, 0x2a, 0xaa, 0xc7, 0x05, 0xd3, 0xdb, + 0xae, 0x99, 0xd6, 0x65, 0x57, 0xfd, 0x2f, 0x62, 0x16, 0x24, 0x83, 0xbf, 0x94, 0x0c, 0x7f, 0x3e, + 0x52, 0x59, 0xac, 0x67, 0x07, 0x43, 0x65, 0x30, 0xb7, 0x11, 0x00, 0xde, 0x05, 0xf2, 0x84, 0x51, + 0xda, 0x89, 0x9e, 0x8b, 0xc4, 0x2f, 0xa0, 0xa4, 0xd3, 0x2f, 0x04, 0xbd, 0x42, 0x92, 0x72, 0x96, + 0x3a, 0xa4, 0xe7, 0x1e, 0x0b, 0xa6, 0xa8, 0xa4, 0x95, 0x79, 0xb6, 0x15, 0x17, 0x8f, 0x29, 0x00, + 0xe4, 0x57, 0xed, 0x3d, 0xd8, 0xb2, 0x8b, 0x19, 0xf4, 0x1f, 0xf1, 0xd7, 0xb2, 0x8b, 0x92, 0xfa, + 0xca, 0x02, 0x28, 0x04, 0x21, 0x2a, 0xff, 0x50, 0x02, 0xc5, 0x32, 0x9e, 0xa1, 0x2d, 0x39, 0xf6, + 0x0e, 0xa9, 0x91, 0xf8, 0x99, 0x87, 0x97, 0x0a, 0x3b, 0x88, 0x04, 0xa1, 0x23, 0xfb, 0x0b, 0x8b, + 0xc0, 0x92, 0x2c, 0x61, 0x4a, 0xfe, 0x12, 0xa6, 0xfa, 0x56, 0x21, 0x87, 0x11, 0xd1, 0x52, 0xd2, + 0x6f, 0x6a, 0xbf, 0x23, 0x81, 0x5c, 0xb9, 0x6b, 0x5b, 0x90, 0x3d, 0x98, 0x3b, 0xf4, 0x04, 0xe8, + 0xe0, 0x7d, 0x0c, 0xf5, 0x59, 0x92, 0xa8, 0xad, 0x11, 0x0a, 0x00, 0x95, 0x2d, 0x28, 0x5b, 0xb1, + 0x41, 0x2a, 0x96, 0x74, 0xfa, 0x02, 0xfd, 0xa6, 0x04, 0xa6, 0x49, 0x4c, 0xb9, 0x52, 0xb7, 0xab, + 0x3e, 0x2c, 0x14, 0xea, 0x80, 0x30, 0x9f, 0xea, 0x87, 0x84, 0x0f, 0x9e, 0x05, 0xb5, 0x0a, 0x68, + 0x27, 0x08, 0x8b, 0x98, 0xec, 0x1c, 0x94, 0xd8, 0x4e, 0xdc, 0x50, 0x86, 0xd2, 0x17, 0xf5, 0x1f, + 0x49, 0xc8, 0x00, 0xb0, 0x2e, 0xaf, 0x39, 0x70, 0xcf, 0x84, 0x57, 0xd4, 0xeb, 0x42, 0x61, 0x1f, + 0x0c, 0x98, 0xf5, 0x26, 0xe1, 0x45, 0x1c, 0x86, 0x64, 0xe4, 0x46, 0xd8, 0x4c, 0x37, 0xcc, 0x44, + 0x7b, 0xf1, 0xfe, 0x28, 0x66, 0x0c, 0x19, 0x9d, 0xcd, 0x2e, 0xb8, 0x66, 0x13, 0xcd, 0x45, 0xfa, + 0x82, 0xfd, 0xd8, 0x14, 0x28, 0xac, 0x5b, 0x6e, 0xaf, 0x6b, 0xb8, 0xdb, 0xea, 0xbf, 0xca, 0x20, + 0x4f, 0xae, 0xb8, 0x55, 0x7f, 0x90, 0x8b, 0xcb, 0xf3, 0x8c, 0x5d, 0xe8, 0xf8, 0x0e, 0x3c, 0xe4, + 0x21, 0xb4, 0x8f, 0x24, 0xc6, 0x3e, 0x52, 0x3f, 0x28, 0x8b, 0x4e, 0x52, 0xfd, 0x42, 0xe9, 0x9d, + 0xba, 0xd1, 0xa1, 0x60, 0x7a, 0x66, 0xdb, 0xdb, 0x75, 0xa0, 0x3b, 0x30, 0x14, 0x4c, 0x24, 0x95, + 0x35, 0xf2, 0x95, 0x1e, 0x7c, 0xae, 0x1a, 0x60, 0x8a, 0x26, 0x1e, 0xd8, 0x8c, 0x3a, 0x18, 0x55, + 0xe2, 0x14, 0xc8, 0x1b, 0x8e, 0x67, 0xba, 0x1e, 0xdd, 0x9e, 0xa5, 0x4f, 0xa8, 0xbb, 0x24, 0xff, + 0xd6, 0x9d, 0xae, 0x1f, 0xc1, 0x2b, 0x48, 0x50, 0x7f, 0x4d, 0x68, 0xfe, 0x18, 0x5f, 0xf3, 0x64, + 0x90, 0xdf, 0x3f, 0xc2, 0x0a, 0xf7, 0x35, 0xe0, 0x2a, 0xbd, 0xd4, 0xd2, 0x36, 0x48, 0xc0, 0xa7, + 0x20, 0xb6, 0x53, 0x47, 0x7d, 0x8f, 0xcc, 0xac, 0xdf, 0xed, 0x73, 0x63, 0x04, 0x95, 0x62, 0x38, + 0x46, 0x04, 0x09, 0x31, 0x7b, 0xdd, 0xdc, 0x12, 0xae, 0x2c, 0xbc, 0x84, 0xab, 0xfe, 0x8a, 0xf0, + 0x5e, 0x54, 0x20, 0xca, 0x21, 0x6b, 0x80, 0x71, 0x57, 0x60, 0x7e, 0x44, 0x68, 0x5f, 0x69, 0x58, + 0x49, 0x47, 0x08, 0xdb, 0x77, 0x4f, 0x01, 0xa9, 0x54, 0x55, 0x7f, 0x62, 0x0a, 0xcc, 0x5e, 0x70, + 0x4c, 0xcf, 0xb4, 0xb6, 0x5a, 0xb6, 0xdd, 0x75, 0xd5, 0xef, 0x30, 0x1b, 0x15, 0x4f, 0x00, 0xf9, + 0xb6, 0x6d, 0x6d, 0x9a, 0x5b, 0x54, 0x8c, 0x67, 0xb8, 0xca, 0x95, 0xaa, 0x0b, 0x6b, 0x8e, 0xbd, + 0x67, 0x76, 0xa0, 0x53, 0xc6, 0xb9, 0x74, 0x9a, 0x1b, 0xe9, 0x31, 0x13, 0x32, 0xef, 0xf6, 0xfe, + 0xaf, 0xd8, 0xf2, 0x82, 0x98, 0x3d, 0x34, 0x91, 0x89, 0x98, 0x57, 0x05, 0x85, 0xae, 0x61, 0x6d, + 0xed, 0xfa, 0x33, 0xef, 0xfe, 0x5d, 0xd4, 0x28, 0x4a, 0x35, 0xfa, 0x91, 0x1e, 0x7c, 0x8e, 0x9d, + 0xdc, 0x90, 0xa9, 0x4f, 0xda, 0x1e, 0xfe, 0x7f, 0xee, 0xe3, 0x19, 0x30, 0xc3, 0x14, 0xaa, 0xcc, + 0x80, 0xa9, 0x8a, 0xb6, 0x54, 0x5a, 0xaf, 0xb5, 0x8a, 0xc7, 0x90, 0x14, 0x9b, 0xeb, 0xab, 0xab, + 0x25, 0xbd, 0xfa, 0xc3, 0x5a, 0x31, 0x83, 0xde, 0x2d, 0xeb, 0x25, 0xf4, 0x5c, 0x94, 0xd0, 0x43, + 0x73, 0xa5, 0xa1, 0xb7, 0xb4, 0x7a, 0x51, 0x46, 0xf6, 0xa8, 0xf6, 0xb4, 0xb5, 0x52, 0xbd, 0x52, + 0xcc, 0xa2, 0xff, 0x8b, 0xeb, 0xb5, 0x9a, 0xd6, 0x2a, 0xe6, 0xc2, 0x20, 0x7a, 0x79, 0x94, 0x5c, + 0x2e, 0x35, 0xd7, 0x4b, 0xb5, 0xe2, 0x14, 0x4a, 0x5e, 0x5a, 0xaf, 0xd7, 0x2f, 0x16, 0x0b, 0xa8, + 0x88, 0x72, 0xa3, 0xbe, 0x54, 0xad, 0x68, 0xf5, 0x56, 0x71, 0x5a, 0xb9, 0x0a, 0x1c, 0x6f, 0xb6, + 0xf4, 0x52, 0x75, 0x79, 0xa5, 0xb5, 0xd4, 0xd0, 0x2f, 0x94, 0xf4, 0x4a, 0x11, 0x28, 0x45, 0x30, + 0xbb, 0xa6, 0x37, 0x96, 0x34, 0x1c, 0x2f, 0xa5, 0x54, 0x2b, 0xce, 0xa0, 0xaf, 0x5a, 0x7a, 0xa9, + 0xde, 0xac, 0x95, 0x5a, 0x5a, 0x71, 0xf6, 0xdc, 0x7d, 0xa0, 0xe0, 0x57, 0x57, 0xc9, 0x03, 0x49, + 0xab, 0x17, 0x8f, 0xe1, 0xdf, 0x66, 0x31, 0x83, 0x7e, 0x97, 0x10, 0xbf, 0x79, 0x20, 0x55, 0xb4, + 0xa2, 0x8c, 0x7e, 0xab, 0xad, 0x62, 0x16, 0xfd, 0xae, 0x21, 0x16, 0xf3, 0x40, 0x5a, 0xa9, 0x16, + 0xf3, 0xe8, 0xb7, 0xb5, 0x52, 0x9c, 0xe2, 0x6f, 0xba, 0x8f, 0xed, 0x85, 0x0f, 0x4a, 0x3e, 0xc2, + 0xd0, 0xf0, 0xc2, 0x39, 0x32, 0xfe, 0xaf, 0xbe, 0x42, 0x12, 0xe9, 0xeb, 0xe2, 0xe9, 0x27, 0x6b, + 0x34, 0x6f, 0xc9, 0x8c, 0xb1, 0xd5, 0x28, 0x2a, 0x38, 0xa5, 0xd5, 0x2b, 0x6b, 0x8d, 0x6a, 0xbd, + 0x45, 0x42, 0x9d, 0x69, 0xa5, 0xf2, 0x0a, 0xc6, 0x19, 0x22, 0x04, 0x57, 0x1b, 0x15, 0xad, 0x86, + 0x5f, 0x2c, 0x35, 0xd6, 0xeb, 0x95, 0xe2, 0x26, 0x2a, 0xab, 0xb4, 0xde, 0x5a, 0xd9, 0xd0, 0xb5, + 0xa7, 0xae, 0x57, 0x75, 0xad, 0x52, 0xdc, 0x42, 0x34, 0x6a, 0xa5, 0xfa, 0xf2, 0x7a, 0x69, 0x99, + 0xee, 0x17, 0xae, 0xaf, 0xad, 0x35, 0xf0, 0x8e, 0xe1, 0xb6, 0xfa, 0xf7, 0x59, 0x50, 0x28, 0xed, + 0x7a, 0xf6, 0xa6, 0xd9, 0xed, 0xaa, 0xcf, 0x91, 0x0e, 0xdf, 0x14, 0x4b, 0x5c, 0x53, 0x3c, 0xd0, + 0x80, 0xfc, 0xb2, 0x82, 0xc6, 0xe3, 0x27, 0x30, 0xed, 0xf0, 0x74, 0xe8, 0x8c, 0x2d, 0xd3, 0x9d, + 0x66, 0xf2, 0x48, 0x1c, 0x71, 0x2d, 0xda, 0xb2, 0xf0, 0x1b, 0xfa, 0x78, 0xee, 0x7e, 0x30, 0xcb, + 0x52, 0xc2, 0xe1, 0xc0, 0x4a, 0xcb, 0x24, 0x5e, 0x98, 0x1f, 0x21, 0x90, 0xc4, 0x0b, 0xc3, 0x07, + 0x2f, 0x24, 0xdc, 0x5e, 0xaa, 0xad, 0x1a, 0xd2, 0xd3, 0xe3, 0x60, 0xa6, 0xa2, 0x35, 0xcb, 0x7a, + 0x15, 0xfb, 0xa9, 0x17, 0xb3, 0xbc, 0x97, 0x41, 0xac, 0x65, 0xc6, 0xd7, 0x48, 0x54, 0x29, 0xbf, + 0x27, 0x64, 0x6f, 0x45, 0xd3, 0x4e, 0xa6, 0x90, 0x2f, 0x7a, 0xa8, 0x29, 0xa4, 0xfa, 0xa2, 0x2c, + 0x59, 0x27, 0x6b, 0xee, 0xee, 0xec, 0x18, 0xce, 0x3e, 0xe7, 0xaf, 0x36, 0xaa, 0xde, 0x45, 0x8f, + 0xef, 0xb1, 0x51, 0x80, 0x90, 0x09, 0xd5, 0x73, 0xec, 0x9d, 0x9e, 0xdf, 0x57, 0xd3, 0x27, 0xf5, + 0x7f, 0x0a, 0xcf, 0x1c, 0x4b, 0xd5, 0x05, 0xa6, 0x32, 0x23, 0x0c, 0xed, 0x3f, 0x22, 0x89, 0xcc, + 0x22, 0x63, 0x8b, 0xf9, 0x7e, 0xd7, 0x88, 0xbf, 0xce, 0x82, 0xab, 0x68, 0x84, 0x97, 0x60, 0xfd, + 0x01, 0x99, 0xaa, 0xaf, 0x4e, 0x55, 0x33, 0xa8, 0x41, 0x2d, 0x87, 0x06, 0x35, 0xb3, 0xe1, 0x9d, + 0x15, 0xdc, 0xf0, 0x7e, 0x9b, 0xf0, 0xa1, 0x87, 0x52, 0x75, 0x61, 0x40, 0x1d, 0x27, 0xb3, 0x2d, + 0xff, 0x3c, 0x49, 0x64, 0xb5, 0x55, 0x88, 0xc3, 0xef, 0x77, 0x5d, 0x7b, 0x47, 0x06, 0xcc, 0xf3, + 0xaa, 0xa2, 0x3c, 0x1e, 0x14, 0x7a, 0x34, 0x85, 0xca, 0xe5, 0x74, 0x94, 0x72, 0xe9, 0x41, 0x4e, + 0x04, 0x11, 0xb4, 0x3a, 0x3d, 0xdb, 0xb4, 0x82, 0x75, 0x79, 0xff, 0x19, 0xcd, 0x3b, 0xf1, 0xd4, + 0xc1, 0x8f, 0xf7, 0x87, 0x1f, 0xc2, 0xd8, 0xb1, 0x59, 0x26, 0x76, 0x2c, 0x12, 0xa2, 0x07, 0x77, + 0xf0, 0x2d, 0x46, 0xbb, 0x0e, 0x71, 0x78, 0x91, 0x74, 0x36, 0xe9, 0xdc, 0x93, 0x41, 0xc1, 0x2f, + 0x1f, 0x59, 0x77, 0x8d, 0x5a, 0xad, 0xb4, 0x5a, 0x22, 0x0b, 0x95, 0x8d, 0x35, 0xad, 0x5e, 0xaa, + 0x16, 0x33, 0x68, 0xa0, 0xab, 0xad, 0x36, 0x5b, 0xeb, 0x95, 0x6a, 0xa3, 0x28, 0xe1, 0x27, 0x94, + 0xa9, 0xbc, 0xb6, 0x56, 0x94, 0xd5, 0x37, 0x4e, 0x81, 0xa9, 0x65, 0xa3, 0xdb, 0x85, 0xce, 0xbe, + 0xfa, 0x4d, 0x09, 0x14, 0xfd, 0xd9, 0xc1, 0xaa, 0x61, 0x99, 0x9b, 0xd0, 0xf5, 0xe2, 0x17, 0x2a, + 0xde, 0x27, 0x7c, 0xb5, 0x19, 0x2d, 0x63, 0xa1, 0x9f, 0x7e, 0x84, 0x8e, 0xdf, 0x06, 0xb2, 0xa6, + 0xb5, 0x69, 0xd3, 0xe5, 0x8a, 0x7e, 0x7f, 0x1b, 0xff, 0x63, 0xbc, 0x6d, 0x80, 0x33, 0x0a, 0xde, + 0x6e, 0x26, 0xc8, 0x45, 0xfa, 0xab, 0x16, 0xef, 0xc8, 0x82, 0x39, 0x9f, 0x89, 0xaa, 0xd5, 0x81, + 0x0f, 0xb2, 0xdb, 0xa0, 0x3f, 0x93, 0x15, 0x0d, 0x30, 0xd4, 0x5f, 0x1f, 0x4c, 0x2a, 0x42, 0xa4, + 0x2d, 0x00, 0xda, 0x86, 0x07, 0xb7, 0x6c, 0xc7, 0x0c, 0xd6, 0x22, 0x1e, 0x9f, 0x84, 0x5a, 0x99, + 0x7c, 0xbd, 0xaf, 0x33, 0x74, 0x94, 0x7b, 0xc0, 0x0c, 0x0c, 0x22, 0x3a, 0xfa, 0xdb, 0xa4, 0xb1, + 0x78, 0xb1, 0xf9, 0xd5, 0x3f, 0x12, 0x8a, 0x63, 0x24, 0x52, 0xcd, 0x64, 0x98, 0x6d, 0x8c, 0xd6, + 0xf5, 0xac, 0xd7, 0x57, 0x4b, 0x7a, 0x73, 0xa5, 0x54, 0xab, 0x55, 0xeb, 0xcb, 0x41, 0xc0, 0x62, + 0x05, 0xcc, 0x57, 0x1a, 0x17, 0xea, 0x4c, 0x44, 0xe9, 0xac, 0xba, 0x06, 0x0a, 0xbe, 0xbc, 0x06, + 0x9d, 0xa2, 0x62, 0x65, 0x46, 0x4f, 0x51, 0x31, 0x49, 0xc8, 0x34, 0x34, 0xdb, 0x81, 0x6b, 0x3d, + 0xfe, 0xaf, 0xfe, 0x96, 0x01, 0x72, 0xd8, 0x9f, 0x45, 0x7d, 0x17, 0x9e, 0x17, 0xf7, 0xba, 0x46, + 0x1b, 0xaa, 0x3b, 0x09, 0x56, 0xc2, 0xfd, 0xbb, 0x76, 0xa5, 0x03, 0x77, 0xed, 0xe2, 0xbf, 0x74, + 0xc4, 0x38, 0x39, 0xc8, 0x87, 0x46, 0x27, 0x59, 0xf8, 0x90, 0x3f, 0xb1, 0x9e, 0x4d, 0xc4, 0xf5, + 0x86, 0xb2, 0x19, 0xa1, 0x92, 0xd1, 0x3c, 0xa5, 0x71, 0x89, 0x4a, 0x1c, 0x47, 0xe9, 0xb7, 0xf8, + 0xaf, 0x64, 0x41, 0xae, 0xd9, 0xeb, 0x9a, 0x9e, 0xfa, 0x0b, 0xd2, 0x58, 0x30, 0x23, 0xf7, 0x23, + 0xcb, 0x43, 0xef, 0x47, 0x0e, 0xfd, 0x25, 0xb3, 0x02, 0xfe, 0x92, 0x2d, 0xf8, 0xa0, 0xc7, 0xfb, + 0x4b, 0xde, 0x49, 0xa7, 0x6d, 0xc4, 0xdb, 0xf2, 0x91, 0x03, 0x44, 0x8a, 0xab, 0x35, 0xe0, 0x36, + 0x8b, 0x73, 0x8f, 0xa5, 0x41, 0xf5, 0x01, 0xc8, 0x2f, 0x36, 0x5a, 0xad, 0xc6, 0x6a, 0xf1, 0x18, + 0x9e, 0x7e, 0x35, 0xd6, 0x48, 0x88, 0xe3, 0x6a, 0xbd, 0xae, 0xe9, 0xdc, 0x8c, 0x8b, 0xbf, 0x2c, + 0x33, 0x76, 0x82, 0xc5, 0x97, 0x9d, 0xa6, 0x7a, 0x89, 0x2d, 0x82, 0x47, 0xf3, 0x93, 0xbe, 0x72, + 0xfd, 0x9c, 0x0c, 0x72, 0xab, 0xd0, 0xd9, 0x82, 0xea, 0x33, 0x12, 0x38, 0xd8, 0x6d, 0x9a, 0x8e, + 0x4b, 0x2e, 0x45, 0x08, 0x1d, 0xec, 0xd8, 0x34, 0xe5, 0x46, 0x30, 0xe7, 0xc2, 0xb6, 0x6d, 0x75, + 0xfc, 0x4c, 0xa4, 0x3f, 0xe2, 0x13, 0xd5, 0x97, 0x25, 0x84, 0x0c, 0x33, 0x3a, 0x16, 0x2f, 0xb9, + 0x24, 0xc0, 0x0c, 0x2a, 0x35, 0x7d, 0x60, 0xbe, 0x2d, 0xa3, 0x8f, 0x7a, 0xfb, 0xea, 0xcb, 0x84, + 0x3d, 0x1f, 0x6f, 0x05, 0xf9, 0x4b, 0xfe, 0xbd, 0x68, 0x72, 0x64, 0x7f, 0x4c, 0xf3, 0x28, 0x8b, + 0xe0, 0x84, 0x0b, 0xbb, 0xb0, 0xed, 0xc1, 0x0e, 0x6a, 0xba, 0xfa, 0xd0, 0x4e, 0xe1, 0x60, 0x76, + 0xf5, 0xf7, 0x58, 0x00, 0xef, 0xe6, 0x01, 0xbc, 0x69, 0x80, 0x28, 0x51, 0x85, 0xa2, 0xe7, 0x26, + 0xa8, 0x1a, 0xcd, 0xae, 0x1d, 0x18, 0xbe, 0xfe, 0x33, 0x7a, 0xb7, 0xed, 0xed, 0x74, 0xf1, 0x3b, + 0x7a, 0x34, 0xd8, 0x7f, 0x56, 0x16, 0xc0, 0x94, 0x61, 0xed, 0xe3, 0x57, 0xd9, 0x98, 0x5a, 0xfb, + 0x99, 0xd4, 0x57, 0x06, 0xc8, 0xdf, 0xcb, 0x21, 0xff, 0x68, 0x31, 0x76, 0xd3, 0x07, 0xfe, 0x47, + 0xa7, 0x40, 0x6e, 0xcd, 0x70, 0x3d, 0xa8, 0xfe, 0x6f, 0x59, 0x14, 0xf9, 0x9b, 0xc0, 0xfc, 0xa6, + 0xdd, 0xde, 0x75, 0x61, 0x87, 0x6f, 0x94, 0x7d, 0xa9, 0xe3, 0xc0, 0x1c, 0x07, 0x66, 0xa7, 0x89, + 0x94, 0xac, 0xef, 0x02, 0x7b, 0x20, 0x1d, 0x5f, 0xbd, 0xe8, 0xae, 0x19, 0x8e, 0xd7, 0xd8, 0xc4, + 0x69, 0xc1, 0xd5, 0x8b, 0x6c, 0x22, 0x07, 0x7d, 0x3e, 0x06, 0xfa, 0xa9, 0x68, 0xe8, 0x0b, 0x02, + 0xd0, 0x2b, 0x25, 0x50, 0xd8, 0x34, 0xbb, 0x10, 0x7f, 0x30, 0x8d, 0x3f, 0x18, 0x34, 0x26, 0x61, + 0xd9, 0x07, 0x63, 0xd2, 0x92, 0xd9, 0x85, 0x7a, 0xf0, 0x99, 0x3f, 0x91, 0x01, 0xe1, 0x44, 0xa6, + 0x46, 0x4e, 0xc2, 0x21, 0xc3, 0xcb, 0x32, 0x76, 0xa0, 0xbf, 0xf1, 0x6d, 0xd1, 0x63, 0xe9, 0x1d, + 0xc3, 0x33, 0x30, 0x18, 0xb3, 0x3a, 0xfe, 0xcf, 0xfb, 0x64, 0xcb, 0xfd, 0x3e, 0xd9, 0xcf, 0x95, + 0x93, 0xf5, 0x88, 0x3e, 0xb3, 0x11, 0x2d, 0xea, 0x92, 0x0f, 0x10, 0xb1, 0x14, 0x83, 0x67, 0x04, + 0x4c, 0xdb, 0x70, 0xa0, 0xb7, 0xc6, 0x7a, 0x41, 0xe7, 0x74, 0x3e, 0x11, 0x1f, 0xc2, 0x71, 0x9b, + 0xc6, 0x0e, 0xb9, 0x5a, 0xb1, 0x8c, 0xde, 0xd1, 0xc3, 0x15, 0x07, 0xd2, 0xc3, 0xfe, 0x37, 0x37, + 0xee, 0xfe, 0x77, 0x50, 0x1d, 0xd3, 0x6f, 0x86, 0xaf, 0xc9, 0x02, 0xb9, 0xbc, 0xeb, 0x3d, 0xa4, + 0xbb, 0xdf, 0xef, 0x09, 0xfb, 0x98, 0xd3, 0xfe, 0x6c, 0xd7, 0x3b, 0xda, 0xde, 0x37, 0xa1, 0x96, + 0x88, 0xf9, 0xb2, 0x47, 0xd5, 0x2d, 0x7d, 0x1d, 0x79, 0x9b, 0x1c, 0x1c, 0x8d, 0x7a, 0x4e, 0xe6, + 0xf0, 0xa6, 0xb9, 0x4a, 0xfa, 0x27, 0xa6, 0x67, 0x08, 0x9e, 0xfd, 0x8e, 0x27, 0xcb, 0xdd, 0xfe, + 0x80, 0x5d, 0x5b, 0xb1, 0x28, 0x67, 0x75, 0xf2, 0xa0, 0xbe, 0x5c, 0xf8, 0xc0, 0x28, 0x11, 0x5b, + 0xec, 0x31, 0x9e, 0x64, 0x36, 0xd5, 0xab, 0x85, 0x8e, 0x8d, 0xc6, 0x14, 0x9b, 0x3e, 0x60, 0x7f, + 0xc7, 0x1e, 0xd3, 0x29, 0x1d, 0x1a, 0x31, 0xf5, 0x55, 0xc2, 0x0b, 0xfa, 0xa4, 0xda, 0x43, 0xf6, + 0xea, 0x93, 0xc9, 0x5b, 0xcc, 0x51, 0x2c, 0xb6, 0xe0, 0x09, 0xdc, 0x15, 0x2d, 0x83, 0x3c, 0x59, + 0xf8, 0x55, 0xdf, 0x2c, 0xdc, 0x44, 0x50, 0x6f, 0xc4, 0x1f, 0xdf, 0x09, 0x9e, 0x93, 0xac, 0x39, + 0x70, 0xc7, 0x7c, 0xb2, 0x89, 0x8e, 0xf9, 0xf0, 0x11, 0x58, 0x04, 0xda, 0x11, 0xa9, 0x63, 0xca, + 0xd3, 0xc9, 0x24, 0x2d, 0x6c, 0x20, 0x43, 0xe9, 0xe3, 0xfd, 0xfc, 0x1c, 0x98, 0x25, 0x45, 0x93, + 0xf3, 0x85, 0xea, 0x7b, 0xa4, 0xef, 0x1f, 0xd4, 0x95, 0x3a, 0x98, 0xbd, 0x82, 0xd9, 0x26, 0xe1, + 0xe5, 0xe8, 0xca, 0xc5, 0x2d, 0xb1, 0xeb, 0x1e, 0xa4, 0x9e, 0xfe, 0xad, 0xd1, 0xdc, 0xf7, 0x48, + 0xc6, 0x64, 0x83, 0x85, 0x1c, 0x9e, 0xc8, 0x63, 0x23, 0x8b, 0x4d, 0x52, 0x4e, 0x81, 0xfc, 0x9e, + 0x09, 0xaf, 0x54, 0x3b, 0xd4, 0xba, 0xa5, 0x4f, 0xea, 0xaf, 0x0b, 0xfb, 0x4c, 0xb2, 0x70, 0x53, + 0x5e, 0xd2, 0xd5, 0x42, 0x31, 0xcf, 0xc9, 0xa1, 0x6c, 0x4d, 0x20, 0x1a, 0x90, 0x44, 0xee, 0xa9, + 0xa7, 0xa1, 0xfc, 0xcb, 0x09, 0x14, 0x31, 0xca, 0x70, 0xe6, 0x83, 0xf0, 0xc5, 0x9e, 0x35, 0x27, + 0x02, 0x08, 0xcb, 0x1f, 0x4b, 0x9f, 0x2f, 0x16, 0x19, 0x6e, 0x48, 0xd1, 0xe9, 0x4b, 0xfe, 0x75, + 0x32, 0x98, 0x6e, 0x42, 0x6f, 0xc9, 0x84, 0xdd, 0x8e, 0xab, 0x3a, 0x87, 0x37, 0x8d, 0x6e, 0x03, + 0xf9, 0x4d, 0x4c, 0x6c, 0xd8, 0xe6, 0x24, 0xcd, 0xa6, 0xbe, 0x46, 0x12, 0xf5, 0x03, 0xa2, 0xab, + 0x6f, 0x3e, 0xb7, 0x63, 0x81, 0x49, 0xec, 0x34, 0x5d, 0x7c, 0xc9, 0x13, 0xb8, 0x2a, 0x49, 0x06, + 0xb3, 0x78, 0xfb, 0x1f, 0x7a, 0xa5, 0xae, 0xb9, 0x65, 0xb1, 0xb7, 0xab, 0x8f, 0xdc, 0x42, 0x94, + 0xdb, 0x41, 0xce, 0x40, 0xd4, 0xa8, 0xbb, 0x9b, 0x3a, 0xb0, 0xf3, 0xc4, 0xe5, 0xe9, 0x24, 0x63, + 0x82, 0x8b, 0x49, 0x42, 0xc5, 0xf6, 0x79, 0x9e, 0xe0, 0xc5, 0x24, 0x43, 0x0b, 0x4f, 0x1f, 0xb1, + 0xaf, 0xc9, 0xe0, 0x24, 0x65, 0xe0, 0x3c, 0x74, 0x3c, 0xb3, 0x6d, 0x74, 0x09, 0x72, 0x2f, 0xcc, + 0x8c, 0x03, 0xba, 0x15, 0x30, 0xb7, 0xc7, 0x92, 0xa5, 0x10, 0x9e, 0x1b, 0x08, 0x21, 0xc7, 0x80, + 0xce, 0x7f, 0x98, 0xe0, 0x82, 0x07, 0x4e, 0xaa, 0x1c, 0xcd, 0x09, 0x5e, 0xf0, 0x20, 0xcc, 0x44, + 0xfa, 0x10, 0xbf, 0x84, 0x06, 0xd5, 0x0c, 0xbb, 0xcf, 0x2f, 0x0a, 0x63, 0xbb, 0x0e, 0x66, 0x30, + 0x96, 0xe4, 0x43, 0xba, 0x0c, 0x11, 0xa3, 0xc4, 0x41, 0xbf, 0x43, 0x2f, 0xba, 0x0f, 0xbe, 0xd5, + 0x59, 0x3a, 0xea, 0x05, 0x00, 0xc2, 0x57, 0x6c, 0x27, 0x9d, 0x89, 0xea, 0xa4, 0x25, 0xb1, 0x4e, + 0xfa, 0x4d, 0xc2, 0x61, 0x0e, 0x07, 0xb3, 0x7d, 0x78, 0xf5, 0x10, 0x0b, 0x70, 0x37, 0xbc, 0xf4, + 0xf4, 0xf5, 0xe2, 0x95, 0x54, 0x2f, 0x2a, 0xbb, 0xbd, 0xae, 0xd9, 0x46, 0xf3, 0xa9, 0x4f, 0x8e, + 0x65, 0x3e, 0xc5, 0xf6, 0x07, 0x72, 0x5f, 0x7f, 0x70, 0x08, 0x4b, 0xfa, 0x66, 0x70, 0x9c, 0x14, + 0x51, 0x0e, 0xd8, 0xca, 0x91, 0x20, 0x6e, 0x7d, 0xc9, 0x7c, 0xd4, 0x76, 0x41, 0x25, 0x08, 0x84, + 0x30, 0xc2, 0xd2, 0x67, 0x32, 0x63, 0x37, 0xa9, 0x82, 0x44, 0x71, 0x36, 0x81, 0x23, 0x59, 0x59, + 0x62, 0xed, 0xae, 0xf7, 0x3a, 0x48, 0x3b, 0xbe, 0x9c, 0x1d, 0xc7, 0x88, 0xf0, 0x14, 0xea, 0x69, + 0x2a, 0x47, 0x2e, 0x69, 0x84, 0x45, 0x06, 0xfd, 0x48, 0x0b, 0x3e, 0xe8, 0xad, 0x1c, 0x23, 0x7e, + 0xa9, 0xca, 0x2d, 0xe0, 0xf8, 0x25, 0xa3, 0x7d, 0x79, 0xcb, 0xb1, 0x77, 0xf1, 0xad, 0xed, 0x36, + 0xbd, 0xfe, 0x7d, 0xe5, 0x98, 0xde, 0xff, 0x42, 0xb9, 0xc3, 0x37, 0x1d, 0x72, 0xc3, 0x4c, 0x87, + 0x95, 0x63, 0xd4, 0x78, 0x50, 0x1e, 0x1b, 0x74, 0x3a, 0xf9, 0xd8, 0x4e, 0x67, 0xe5, 0x98, 0xdf, + 0xed, 0x28, 0x15, 0x50, 0xe8, 0x98, 0x7b, 0x78, 0xab, 0x1a, 0xcf, 0xba, 0x86, 0x05, 0x1d, 0xaa, + 0x98, 0x7b, 0x64, 0x63, 0x7b, 0xe5, 0x98, 0x1e, 0x7c, 0xa9, 0x2c, 0x83, 0x69, 0xbc, 0x2d, 0x80, + 0xc9, 0x14, 0x12, 0x05, 0x14, 0x5a, 0x39, 0xa6, 0x87, 0xdf, 0x22, 0xeb, 0x23, 0x8b, 0xcf, 0x5d, + 0xdf, 0xeb, 0x6f, 0xb7, 0x67, 0x12, 0x6d, 0xb7, 0x23, 0x59, 0x90, 0x0d, 0xf7, 0x53, 0x20, 0xd7, + 0xc6, 0x12, 0x96, 0xa8, 0x84, 0xc9, 0xa3, 0x72, 0x37, 0xc8, 0xee, 0x18, 0x8e, 0x3f, 0x79, 0xbe, + 0x69, 0x38, 0xdd, 0x55, 0xc3, 0xb9, 0x8c, 0x10, 0x44, 0x5f, 0x2d, 0x4e, 0x81, 0x1c, 0x16, 0x5c, + 0xf0, 0x47, 0x7d, 0x5b, 0x96, 0x98, 0x21, 0x65, 0xdb, 0x42, 0xc3, 0x7e, 0xcb, 0xf6, 0x0f, 0xa7, + 0xff, 0x7a, 0x66, 0x3c, 0x16, 0xe4, 0x55, 0xcc, 0x75, 0x2a, 0x96, 0xf9, 0x8c, 0x5d, 0x78, 0x3f, + 0xdc, 0xa7, 0x4b, 0xa2, 0x83, 0x5e, 0x29, 0x67, 0x00, 0xf0, 0xe8, 0x49, 0xbd, 0x20, 0x88, 0x29, + 0x93, 0x12, 0x2e, 0x1f, 0xe4, 0x86, 0x3b, 0xaa, 0xfc, 0xde, 0x08, 0xa6, 0x4b, 0xbf, 0x20, 0xa2, + 0x67, 0xe0, 0x5d, 0xd3, 0x62, 0xea, 0xec, 0x3f, 0x26, 0xec, 0x94, 0x92, 0x1a, 0x35, 0x43, 0xd8, + 0x4b, 0xbf, 0x6f, 0x7a, 0x4b, 0x96, 0xdc, 0x28, 0x41, 0x4e, 0x40, 0x6b, 0x0f, 0x9a, 0x6e, 0x78, + 0x7f, 0xb3, 0xfa, 0xb9, 0xb1, 0x28, 0xcd, 0x80, 0x01, 0x47, 0x1e, 0x38, 0xe0, 0x1c, 0x08, 0x10, + 0x94, 0x1d, 0x12, 0x20, 0x28, 0x97, 0x6c, 0xe5, 0xf0, 0xa3, 0xac, 0xfe, 0xac, 0xf1, 0xfa, 0x73, + 0x57, 0x04, 0x40, 0x83, 0xe4, 0x32, 0x16, 0xfb, 0xe6, 0x5d, 0x81, 0xa6, 0x34, 0x39, 0x4d, 0xb9, + 0x77, 0x74, 0x46, 0xd2, 0xd7, 0x96, 0x0f, 0x67, 0xc1, 0x55, 0x21, 0x33, 0x75, 0x78, 0x85, 0x2a, + 0xca, 0x1f, 0x8e, 0x45, 0x51, 0x92, 0x3b, 0x3a, 0xa7, 0xad, 0x31, 0xbf, 0x2d, 0x7c, 0x6e, 0xbf, + 0x1f, 0xa8, 0x40, 0x36, 0x11, 0xca, 0x72, 0x0a, 0xe4, 0x49, 0x0f, 0x43, 0xa1, 0xa1, 0x4f, 0x09, + 0xbb, 0x1b, 0xb1, 0xd3, 0xfe, 0xa2, 0xbc, 0x4d, 0x40, 0x7f, 0xe8, 0xba, 0x46, 0x6b, 0xd7, 0xb1, + 0xaa, 0x96, 0x67, 0xab, 0xff, 0x7d, 0x2c, 0x8a, 0x13, 0x78, 0xc3, 0xc9, 0xa3, 0x78, 0xc3, 0x8d, + 0xb4, 0xca, 0xe1, 0xd7, 0xe0, 0x48, 0x56, 0x39, 0x22, 0x0a, 0x4f, 0x1f, 0xbf, 0x77, 0xca, 0xe0, + 0x14, 0x9d, 0x6c, 0x2d, 0xf2, 0x16, 0xa2, 0x7a, 0x71, 0x1c, 0x40, 0x9e, 0xf4, 0xcd, 0x24, 0xea, + 0x47, 0x8f, 0x1f, 0xf8, 0x28, 0x05, 0xb1, 0x37, 0x86, 0x72, 0xd3, 0xc1, 0x3e, 0x0e, 0xc7, 0x82, + 0x94, 0xd8, 0x45, 0xa1, 0x09, 0xd8, 0x48, 0x1f, 0xb3, 0x17, 0xcb, 0x20, 0x4f, 0x62, 0x24, 0xa8, + 0xeb, 0xa9, 0x38, 0x4c, 0xf0, 0xf7, 0xb3, 0x08, 0xec, 0xc8, 0x11, 0x6e, 0x52, 0x8b, 0x1f, 0x91, + 0x64, 0x2f, 0x6e, 0x20, 0x2b, 0x13, 0x70, 0x21, 0x94, 0xc0, 0x4c, 0x13, 0x7a, 0x65, 0xc3, 0x71, + 0x4c, 0x63, 0x6b, 0x5c, 0x1e, 0xdf, 0xa2, 0xde, 0xc3, 0xea, 0x77, 0x32, 0xa2, 0x67, 0xd9, 0x83, + 0x85, 0x70, 0x9f, 0xd5, 0x88, 0x28, 0xe0, 0xaf, 0x17, 0x3a, 0xaf, 0x3e, 0x8c, 0xda, 0x04, 0x3c, + 0xb6, 0x25, 0x30, 0xe5, 0xc7, 0xc1, 0xb8, 0x8d, 0x8b, 0x8d, 0xb2, 0xed, 0xed, 0xf8, 0xc7, 0x60, + 0xf0, 0xff, 0x83, 0xf1, 0x17, 0xd4, 0x57, 0x24, 0x74, 0x94, 0x8f, 0x0f, 0xe2, 0x91, 0xac, 0x8d, + 0x25, 0x71, 0x87, 0x3f, 0xaa, 0xb0, 0x1d, 0x1f, 0x9a, 0xa2, 0xcb, 0x91, 0x35, 0xc3, 0x83, 0x0f, + 0xaa, 0x5f, 0x94, 0xc1, 0x54, 0x13, 0x7a, 0x68, 0xbc, 0x45, 0xec, 0x1f, 0x5a, 0xc3, 0x15, 0x66, + 0xc5, 0x83, 0x9e, 0xad, 0x55, 0xee, 0x03, 0xd3, 0x3d, 0xc7, 0x6e, 0x43, 0xd7, 0xa5, 0xab, 0x17, + 0xac, 0xa3, 0xda, 0xa0, 0xd1, 0x1f, 0xb3, 0xb6, 0xb0, 0xe6, 0x7f, 0xa3, 0x87, 0x9f, 0x27, 0x35, + 0x03, 0x08, 0x25, 0x5a, 0xc1, 0x49, 0x9b, 0x01, 0x71, 0x85, 0xa7, 0x0f, 0xf4, 0xef, 0xcb, 0x60, + 0xb6, 0x09, 0xbd, 0x40, 0x8a, 0x09, 0x36, 0x39, 0xa2, 0xe1, 0xe5, 0xa0, 0x94, 0x0f, 0x07, 0xe5, + 0x3b, 0x85, 0x2f, 0xde, 0xe5, 0xa5, 0x19, 0x10, 0x1b, 0x0b, 0x9e, 0x6f, 0x11, 0xba, 0x6f, 0x57, + 0x8c, 0x83, 0x09, 0x1c, 0x5f, 0x7b, 0x24, 0x98, 0xc6, 0xbc, 0xe0, 0x06, 0xfb, 0x13, 0xd9, 0xb0, + 0xf1, 0x7e, 0x29, 0xa5, 0xc6, 0x7b, 0x0f, 0xc8, 0xed, 0x18, 0xce, 0x65, 0xff, 0xf0, 0xed, 0xa3, + 0xc4, 0x56, 0xbf, 0x5c, 0x9d, 0x7c, 0x35, 0xd8, 0x4f, 0x33, 0x97, 0xcc, 0x4f, 0xf3, 0xf5, 0x52, + 0xa2, 0x91, 0x90, 0xcc, 0x1d, 0xc6, 0xd8, 0xe4, 0x13, 0x8c, 0x9b, 0x31, 0x65, 0xa7, 0xaf, 0x1c, + 0x2f, 0x94, 0x41, 0x01, 0x8d, 0xdb, 0xd8, 0x1e, 0xbf, 0x70, 0x78, 0x75, 0x18, 0x6c, 0xe8, 0x27, + 0xec, 0x81, 0x7d, 0x89, 0x8c, 0xcf, 0xbc, 0x4f, 0xd0, 0x03, 0xc7, 0x15, 0x9e, 0x3e, 0x1e, 0xef, + 0x26, 0x78, 0xe0, 0xf6, 0xa0, 0xbe, 0x41, 0x06, 0xf2, 0x32, 0xf4, 0x26, 0x6d, 0x45, 0xbe, 0x5d, + 0x38, 0xbc, 0x28, 0x27, 0x30, 0xcc, 0xf3, 0xc2, 0x32, 0x1c, 0x4f, 0x03, 0x12, 0x8b, 0x2b, 0x2a, + 0xc4, 0x40, 0xfa, 0xa8, 0xbd, 0x9f, 0xa0, 0x46, 0x36, 0x17, 0x7e, 0x64, 0x0c, 0xbd, 0xea, 0x64, + 0x17, 0x3e, 0x7c, 0x01, 0x62, 0x1a, 0x47, 0xd5, 0xde, 0x06, 0x15, 0x9e, 0x3e, 0x72, 0x2f, 0x95, + 0xf1, 0x25, 0x66, 0xe5, 0x6d, 0xd8, 0xbe, 0x0c, 0x3b, 0xec, 0x65, 0xd9, 0xa3, 0x42, 0x77, 0x1a, + 0x4c, 0xb5, 0x09, 0x35, 0x0c, 0x5e, 0x41, 0xf7, 0x1f, 0xf9, 0x9b, 0x85, 0x62, 0xef, 0xce, 0xe2, + 0x3b, 0x22, 0xf2, 0xf9, 0x58, 0x70, 0x11, 0xbb, 0xf0, 0x4a, 0xa0, 0xf8, 0x09, 0x98, 0x2d, 0x64, + 0x96, 0x51, 0x6d, 0xdb, 0x96, 0xfa, 0x5f, 0x0f, 0x0f, 0xcb, 0xf5, 0x60, 0xda, 0x6c, 0xdb, 0x16, + 0x0e, 0x01, 0xe7, 0x1f, 0x02, 0x0a, 0x12, 0xfc, 0xb7, 0xda, 0x8e, 0xfd, 0x80, 0x49, 0x77, 0xcd, + 0xc3, 0x84, 0x51, 0x8d, 0x09, 0xc4, 0xfa, 0x51, 0x19, 0x13, 0x03, 0xca, 0x4e, 0x1f, 0xb2, 0x4f, + 0x85, 0xde, 0x6d, 0xa4, 0x2b, 0x7c, 0x48, 0xac, 0x02, 0x8f, 0x32, 0x9c, 0xb1, 0xb5, 0x38, 0x92, + 0xe1, 0x2c, 0x86, 0x81, 0x09, 0xdc, 0x44, 0x18, 0xe2, 0x98, 0xfa, 0x1a, 0xf0, 0x21, 0xd0, 0x19, + 0x9f, 0x79, 0x38, 0x22, 0x3a, 0x47, 0x63, 0x22, 0x7e, 0x84, 0x86, 0xa7, 0xa7, 0x16, 0x8f, 0xfa, + 0xdf, 0xc6, 0x01, 0xce, 0x5d, 0xa3, 0xf8, 0x2b, 0x10, 0x6f, 0x05, 0xf5, 0xad, 0x92, 0x68, 0x08, + 0x94, 0x03, 0x12, 0x44, 0x54, 0xc6, 0x82, 0xe0, 0x9b, 0x84, 0x62, 0x93, 0x88, 0x94, 0x9f, 0x3e, + 0x80, 0x2f, 0x90, 0xc1, 0x3c, 0xf6, 0x11, 0xe8, 0x42, 0xc3, 0x21, 0x1d, 0xe5, 0x58, 0x1c, 0xe5, + 0xdf, 0x2d, 0x1c, 0xe0, 0x87, 0x97, 0x43, 0xc8, 0xc7, 0x58, 0xa0, 0x10, 0x8b, 0xee, 0x23, 0xc8, + 0xc2, 0x44, 0xb6, 0x51, 0x8a, 0x01, 0x0b, 0x54, 0xc5, 0xc7, 0x83, 0x47, 0x42, 0x8f, 0x5c, 0x5e, + 0x18, 0x7e, 0x63, 0x9b, 0xb0, 0x47, 0xae, 0x08, 0x13, 0xe9, 0x63, 0xf2, 0x86, 0xdb, 0xe9, 0x82, + 0x73, 0xcb, 0xb8, 0xd4, 0x85, 0xea, 0xab, 0xb2, 0xc1, 0x89, 0xb6, 0xdf, 0x1f, 0x8b, 0x07, 0xe6, + 0x21, 0x2e, 0xa3, 0x52, 0x40, 0xd6, 0xb1, 0xaf, 0x90, 0xa5, 0xad, 0x39, 0x1d, 0xff, 0x27, 0xf1, + 0x2c, 0xbb, 0xbb, 0x3b, 0x16, 0x39, 0x19, 0x3a, 0xa7, 0xfb, 0x8f, 0xca, 0x8d, 0x60, 0xee, 0x8a, + 0xe9, 0x6d, 0xaf, 0x40, 0xa3, 0x03, 0x1d, 0xdd, 0xbe, 0x82, 0x3d, 0xe6, 0x0a, 0x3a, 0x9f, 0xc8, + 0xfb, 0xaf, 0x08, 0xd8, 0x97, 0x48, 0x28, 0x93, 0x39, 0xfe, 0x96, 0xc4, 0xf2, 0x8c, 0xe6, 0x2a, + 0x7d, 0x85, 0xf9, 0x80, 0x0c, 0xa6, 0x75, 0xfb, 0x0a, 0x55, 0x92, 0xff, 0xe7, 0x68, 0x75, 0x24, + 0xf1, 0x44, 0x0f, 0x4b, 0x2e, 0x60, 0x7f, 0xe2, 0x13, 0xbd, 0xd8, 0xe2, 0x27, 0x72, 0x72, 0x69, + 0x56, 0xb7, 0xaf, 0x34, 0xa1, 0x47, 0x5a, 0x84, 0xba, 0x31, 0x26, 0x27, 0x6b, 0xd3, 0x25, 0x04, + 0xe9, 0x3c, 0x3c, 0x78, 0x4e, 0xba, 0x8b, 0x10, 0x08, 0x28, 0x60, 0x71, 0xd2, 0xbb, 0x08, 0x43, + 0x39, 0x98, 0x40, 0x8c, 0x14, 0x19, 0xcc, 0xe8, 0xf6, 0x15, 0x34, 0x34, 0x2c, 0x99, 0xdd, 0xee, + 0x78, 0x46, 0xc8, 0xa4, 0xc6, 0xbf, 0x2f, 0x06, 0x9f, 0x8b, 0x89, 0x1b, 0xff, 0x43, 0x18, 0x48, + 0x1f, 0x86, 0xe7, 0x92, 0xc6, 0xe2, 0x8f, 0xd0, 0xd6, 0x78, 0x70, 0x18, 0xb5, 0x41, 0x04, 0x6c, + 0x1c, 0x59, 0x83, 0x88, 0xe2, 0x60, 0x22, 0x3b, 0x27, 0xf3, 0x65, 0x3c, 0xcc, 0x8f, 0xb7, 0x4d, + 0xbc, 0x37, 0x99, 0x6b, 0x22, 0x1d, 0x76, 0x39, 0x46, 0xc6, 0x82, 0x46, 0x02, 0x17, 0x44, 0x01, + 0x1e, 0xd2, 0xc7, 0xe3, 0xe3, 0x32, 0x98, 0x25, 0x2c, 0x3c, 0x44, 0xac, 0x80, 0x91, 0x1a, 0x15, + 0x5b, 0x83, 0xa3, 0x69, 0x54, 0x31, 0x1c, 0x4c, 0xe4, 0x3e, 0x7f, 0x64, 0xc7, 0x8d, 0x70, 0x7c, + 0x3c, 0x0a, 0xc1, 0x91, 0x8d, 0xb1, 0x31, 0x1e, 0x21, 0x1f, 0xc5, 0x18, 0x3b, 0xa2, 0x63, 0xe4, + 0xcf, 0x0d, 0x5a, 0xd1, 0x38, 0x31, 0x38, 0x44, 0x53, 0x18, 0x23, 0x0c, 0x23, 0x36, 0x85, 0x23, + 0x42, 0xe2, 0xeb, 0x32, 0x00, 0x84, 0x81, 0x55, 0x7b, 0x0f, 0x5f, 0xa4, 0x39, 0x86, 0xee, 0xac, + 0xdf, 0xad, 0x5e, 0x1e, 0xe2, 0x56, 0x9f, 0x30, 0x84, 0x4b, 0xd2, 0x95, 0x40, 0x46, 0xca, 0xa8, + 0x92, 0x13, 0x5f, 0x09, 0x8c, 0x2f, 0x3f, 0x7d, 0x8c, 0xbf, 0x4a, 0xac, 0xb9, 0xf0, 0x80, 0xe9, + 0xcf, 0x8f, 0x05, 0x65, 0x66, 0xf6, 0x2f, 0xf3, 0xb3, 0xff, 0x43, 0x60, 0x3b, 0xaa, 0x8d, 0x38, + 0xec, 0xe0, 0x68, 0xfa, 0x36, 0xe2, 0xd1, 0x1d, 0x10, 0xfd, 0x91, 0x2c, 0x38, 0x4e, 0x3b, 0x91, + 0xef, 0x07, 0x88, 0x13, 0x9e, 0xc3, 0xe3, 0x3a, 0xc9, 0x21, 0x28, 0x8f, 0x6b, 0x41, 0x2a, 0xc9, + 0x52, 0xa6, 0x00, 0x7b, 0x13, 0x59, 0xdd, 0xc8, 0x6b, 0x0f, 0xf6, 0x0c, 0xab, 0x23, 0x1e, 0xee, + 0x77, 0x08, 0xf0, 0xfe, 0x5a, 0xa3, 0xcc, 0xaf, 0x35, 0x0e, 0x58, 0x99, 0x4c, 0xbc, 0x73, 0x8d, + 0x45, 0x46, 0xd8, 0x9d, 0xf8, 0xce, 0x75, 0x74, 0xd9, 0xe9, 0xa3, 0xf4, 0x5e, 0x19, 0x64, 0x9b, + 0xb6, 0xe3, 0xa9, 0xcf, 0x4b, 0xd2, 0x3a, 0x89, 0xe4, 0x43, 0x90, 0xfc, 0x67, 0xa5, 0x0c, 0xb2, + 0xa8, 0x72, 0x74, 0xc6, 0x70, 0x5b, 0xfc, 0x51, 0x67, 0xc3, 0x33, 0xb0, 0x57, 0x37, 0x2a, 0x7f, + 0xa1, 0xb5, 0xdf, 0x83, 0x3a, 0xfe, 0x38, 0x69, 0x3c, 0x1d, 0x22, 0xbf, 0x66, 0xf4, 0x01, 0x8c, + 0xd4, 0xe2, 0xe9, 0x44, 0x96, 0x9c, 0x3e, 0x6e, 0xaf, 0x3d, 0x4e, 0x7d, 0x5b, 0x97, 0xcc, 0x2e, + 0x54, 0x9f, 0x47, 0x5c, 0x46, 0xea, 0xc6, 0x0e, 0x14, 0x3f, 0x12, 0x13, 0xeb, 0xda, 0x8a, 0xe3, + 0xcb, 0xca, 0x61, 0x7c, 0xd9, 0xa4, 0x0d, 0x8a, 0x1c, 0x40, 0x27, 0x2c, 0x4d, 0xba, 0x41, 0xc5, + 0x94, 0x3d, 0x91, 0x38, 0x9d, 0x27, 0x9a, 0xd0, 0x23, 0x46, 0x65, 0xc3, 0xbf, 0x22, 0xe9, 0xe9, + 0x63, 0x89, 0xd8, 0x19, 0x5c, 0xa8, 0x23, 0xf7, 0xdd, 0xc0, 0xf4, 0x01, 0x16, 0x9c, 0x55, 0x1e, + 0x9c, 0x1f, 0x8a, 0x16, 0x10, 0xcf, 0xe4, 0x58, 0x60, 0x7a, 0x7b, 0x00, 0xd3, 0x1a, 0x07, 0xd3, + 0xdd, 0x23, 0x72, 0x91, 0x3e, 0x60, 0x3f, 0x95, 0x03, 0xc7, 0xc9, 0xa4, 0xbf, 0x64, 0x75, 0x68, + 0x84, 0xd5, 0x37, 0x4b, 0x47, 0xbc, 0xd9, 0x76, 0x30, 0x04, 0x2b, 0x17, 0xcb, 0x39, 0xd7, 0x17, + 0xcb, 0x59, 0x59, 0x24, 0xe1, 0x5c, 0x51, 0x27, 0x8a, 0x77, 0xda, 0x86, 0x85, 0x99, 0xc0, 0xb2, + 0xc7, 0x5d, 0x6e, 0xf0, 0x1d, 0x7f, 0x8f, 0xe8, 0x94, 0xf8, 0x3d, 0xa2, 0xbf, 0x9b, 0x6c, 0xdd, + 0x0e, 0x17, 0xdd, 0x27, 0xf0, 0x94, 0x6d, 0xa7, 0x04, 0x2b, 0x7a, 0x02, 0xdc, 0xfd, 0xc7, 0x70, + 0x27, 0x0b, 0x23, 0x88, 0x8c, 0xe8, 0x4e, 0x86, 0x09, 0x1c, 0xa5, 0x3b, 0xd9, 0x30, 0x06, 0xd2, + 0xc7, 0xf1, 0x77, 0x73, 0x74, 0x37, 0x1f, 0xb7, 0x1b, 0xf5, 0x4f, 0xa4, 0xd4, 0x47, 0xe9, 0xef, + 0x66, 0x12, 0xf9, 0x3f, 0x63, 0xbe, 0xe2, 0x87, 0xe9, 0x24, 0x1e, 0xcd, 0x71, 0xe4, 0x26, 0xb0, + 0x6e, 0x24, 0x61, 0x5f, 0xf4, 0x0b, 0x66, 0xc7, 0xdb, 0x1e, 0xd3, 0x89, 0x8e, 0x2b, 0x88, 0x16, + 0x8d, 0x57, 0x4f, 0x1e, 0xd4, 0x7f, 0xc9, 0x24, 0x0a, 0x21, 0x15, 0x88, 0x04, 0xb3, 0x15, 0x21, + 0xe2, 0x04, 0x81, 0x9f, 0x62, 0xe9, 0x4d, 0x50, 0xa3, 0xcf, 0x9b, 0x1d, 0x68, 0x3f, 0x04, 0x35, + 0x1a, 0xf3, 0x35, 0x3e, 0x8d, 0x8e, 0x23, 0xf7, 0x1f, 0x54, 0xa3, 0x03, 0x91, 0x8c, 0x49, 0xa3, + 0x63, 0xe9, 0xa5, 0x2f, 0xe3, 0x57, 0xcc, 0xd2, 0x89, 0x54, 0xcd, 0xb4, 0x2e, 0xab, 0xff, 0x98, + 0x07, 0x45, 0x3f, 0x8e, 0xb0, 0xb7, 0x4d, 0x63, 0xc1, 0x7c, 0x58, 0xf8, 0x6e, 0x94, 0x11, 0xe2, + 0xbd, 0xf0, 0xe1, 0xa4, 0x72, 0x07, 0xc2, 0x49, 0x95, 0xc0, 0x9c, 0x69, 0x79, 0xd0, 0xb1, 0x8c, + 0xee, 0x52, 0xd7, 0xd8, 0x72, 0x4f, 0x4f, 0x0d, 0xbc, 0xbc, 0xae, 0xca, 0xe4, 0xd1, 0xf9, 0x2f, + 0xd8, 0x0b, 0x44, 0x0b, 0xfc, 0x05, 0xa2, 0x11, 0xd1, 0xaf, 0xa6, 0xa3, 0xa3, 0x5f, 0x05, 0xd1, + 0xad, 0xc0, 0xf0, 0xe0, 0xd8, 0xa2, 0xb6, 0x71, 0xc2, 0x70, 0x7f, 0xb7, 0x09, 0x46, 0x61, 0x0b, + 0x42, 0x3f, 0xbe, 0x5a, 0x4e, 0xb4, 0xba, 0x87, 0x14, 0x61, 0xa1, 0x5f, 0x09, 0x12, 0x5b, 0xa8, + 0x6c, 0xe5, 0xe5, 0xbe, 0xca, 0x07, 0x26, 0x4f, 0x56, 0xc0, 0xe4, 0x61, 0x95, 0x2a, 0x27, 0x7a, + 0xa7, 0xab, 0xf8, 0x62, 0xa1, 0x48, 0x6d, 0x27, 0x70, 0x1a, 0x29, 0x07, 0x4e, 0xf8, 0xd1, 0x6e, + 0x7b, 0x3d, 0x68, 0x38, 0x86, 0xd5, 0x86, 0xea, 0xa7, 0xa4, 0x71, 0x98, 0xbd, 0x4b, 0xa0, 0x60, + 0xb6, 0x6d, 0xab, 0x69, 0x3e, 0xd3, 0xbf, 0x5c, 0x2e, 0x3e, 0xc8, 0x3a, 0x96, 0x48, 0x95, 0x7e, + 0xa1, 0x07, 0xdf, 0x2a, 0x55, 0x30, 0xdd, 0x36, 0x9c, 0x0e, 0x09, 0xc2, 0x97, 0xeb, 0xbb, 0xc8, + 0x29, 0x92, 0x50, 0xd9, 0xff, 0x44, 0x0f, 0xbf, 0x56, 0x1a, 0xbc, 0x10, 0xf3, 0x7d, 0xd1, 0x3c, + 0x22, 0x89, 0x55, 0xc2, 0x8f, 0x38, 0x99, 0x23, 0xe9, 0x38, 0xb0, 0x6b, 0x90, 0x4b, 0xc7, 0xa7, + 0xc8, 0x1d, 0xd1, 0x41, 0x42, 0xd2, 0xe5, 0x01, 0x5c, 0xd4, 0x01, 0x34, 0x26, 0xbd, 0x3c, 0x20, + 0xc4, 0x45, 0xfa, 0x9a, 0xf9, 0xae, 0x3c, 0x98, 0x23, 0xbd, 0x1a, 0x15, 0xa7, 0xfa, 0x02, 0x19, + 0xe4, 0x9b, 0xd0, 0xbb, 0x1f, 0xee, 0xab, 0xcd, 0xc3, 0x8f, 0xc9, 0x45, 0x20, 0x5f, 0x0e, 0x02, + 0x0e, 0xa2, 0xbf, 0x49, 0xf7, 0xed, 0x7d, 0xbe, 0x16, 0x08, 0x4f, 0x93, 0xde, 0xb7, 0x8f, 0x2f, + 0x3e, 0x7d, 0x7c, 0x7e, 0x5a, 0x06, 0x72, 0xa9, 0xd3, 0x51, 0xdb, 0x87, 0x87, 0xe2, 0x2c, 0x98, + 0xf1, 0xdb, 0x4c, 0x18, 0x03, 0x92, 0x4d, 0x4a, 0xba, 0x08, 0x1a, 0xc8, 0xa6, 0xd4, 0x99, 0xf8, + 0xae, 0x42, 0x4c, 0xd9, 0xe9, 0x83, 0xf2, 0xa5, 0x29, 0xda, 0x68, 0x16, 0x6d, 0xfb, 0x32, 0x3e, + 0x2a, 0xf3, 0xcb, 0x32, 0xc8, 0x2d, 0x41, 0xaf, 0xbd, 0xad, 0xba, 0x63, 0x69, 0x33, 0x7d, 0xf7, + 0x9e, 0x0f, 0x09, 0xca, 0x99, 0x34, 0xfa, 0xb3, 0xcf, 0xf6, 0x02, 0x66, 0x79, 0xd2, 0xd1, 0x9f, + 0x63, 0x4b, 0x9f, 0xc0, 0x21, 0xb8, 0x2c, 0x98, 0x0f, 0x56, 0xc0, 0x08, 0x66, 0xef, 0xc8, 0x3c, + 0xe4, 0xd6, 0x43, 0x87, 0xd8, 0xcd, 0xea, 0x1f, 0x26, 0x0b, 0xb1, 0x16, 0xc8, 0x9c, 0xaf, 0x79, + 0xca, 0x0b, 0x93, 0x09, 0x82, 0xaf, 0x89, 0x31, 0x38, 0x81, 0x15, 0x00, 0x19, 0x14, 0x30, 0x43, + 0x15, 0x73, 0x0f, 0xbb, 0x1e, 0x72, 0x0b, 0x95, 0xcf, 0x1a, 0xcb, 0x42, 0xe5, 0xdd, 0xfc, 0x42, + 0xa5, 0x60, 0xc4, 0x64, 0x7f, 0x9d, 0x32, 0xa1, 0x2f, 0x0e, 0xfa, 0x7e, 0xec, 0xcb, 0x94, 0x09, + 0x7c, 0x71, 0x86, 0x94, 0x9f, 0x3e, 0xa2, 0x6f, 0xfc, 0xcf, 0xb4, 0xb3, 0xf6, 0x37, 0x64, 0xd5, + 0xff, 0x71, 0x02, 0x64, 0xcf, 0xa3, 0x3f, 0xff, 0x10, 0xde, 0xa8, 0xf5, 0xb2, 0x31, 0x04, 0x77, + 0x78, 0x32, 0xc8, 0x22, 0xfa, 0x74, 0xda, 0x73, 0x8b, 0xd8, 0xee, 0x30, 0x62, 0x44, 0xc7, 0xdf, + 0x29, 0xa7, 0x40, 0xde, 0xb5, 0x77, 0x9d, 0x36, 0x32, 0xbf, 0x91, 0xc6, 0xd0, 0xa7, 0xa4, 0x41, + 0x4d, 0x39, 0xd2, 0x0b, 0xe3, 0x73, 0x39, 0x65, 0x2e, 0x58, 0x92, 0xb9, 0x0b, 0x96, 0x12, 0xec, + 0x3f, 0x08, 0xf0, 0x96, 0xbe, 0x46, 0xfc, 0x09, 0xbe, 0x6b, 0xb0, 0x33, 0x2e, 0xd8, 0x23, 0xc4, + 0x72, 0x58, 0x75, 0x48, 0xea, 0x30, 0xce, 0x8b, 0x36, 0x88, 0x23, 0x3f, 0x51, 0x87, 0x71, 0x01, + 0x1e, 0x26, 0x72, 0xca, 0x3d, 0x4f, 0x9d, 0x5c, 0x2f, 0x8e, 0x13, 0xdd, 0x2c, 0xa7, 0xf4, 0x87, + 0x42, 0x67, 0x8c, 0xce, 0xaf, 0x23, 0xa3, 0x73, 0x44, 0xee, 0xaf, 0xbf, 0x21, 0xe3, 0x48, 0x9a, + 0xbe, 0x11, 0x24, 0x7e, 0x51, 0x52, 0x62, 0x88, 0xd0, 0x18, 0xcc, 0xc5, 0x91, 0x9e, 0x1b, 0x3d, + 0xb4, 0x38, 0x2f, 0x3a, 0x86, 0xff, 0x49, 0x87, 0x16, 0x17, 0x65, 0x24, 0x7d, 0x20, 0x7f, 0x89, + 0x5c, 0x4c, 0x56, 0x6a, 0x7b, 0xe6, 0xde, 0x98, 0x5b, 0x1a, 0x3f, 0xbc, 0x24, 0x8c, 0x26, 0x7c, + 0x40, 0x42, 0x84, 0xc3, 0x49, 0x47, 0x13, 0x16, 0x63, 0x23, 0x7d, 0x98, 0x7e, 0x12, 0x20, 0xe9, + 0xd1, 0xb5, 0x9d, 0x37, 0xc8, 0x40, 0x6e, 0x42, 0x4f, 0x85, 0x87, 0x47, 0xeb, 0x1c, 0x98, 0x65, + 0x96, 0x0e, 0xfc, 0x0b, 0x6f, 0xb8, 0xb4, 0xa4, 0x07, 0xe5, 0x03, 0x91, 0xb1, 0x8b, 0x2e, 0x93, + 0x3e, 0x28, 0x2f, 0xc2, 0xc4, 0x04, 0x0e, 0xca, 0xd3, 0x65, 0x9f, 0xef, 0x17, 0xa0, 0xc6, 0xb5, + 0x02, 0x74, 0x28, 0xa0, 0x8e, 0x62, 0x29, 0xe8, 0xed, 0xa1, 0xb1, 0x31, 0x21, 0xac, 0x3e, 0xcc, + 0x62, 0xd5, 0xe0, 0xb1, 0xba, 0x53, 0x44, 0x4c, 0x62, 0xc6, 0x87, 0xd0, 0x04, 0xff, 0x9d, 0x01, + 0x5c, 0x3a, 0x07, 0xd7, 0x93, 0x47, 0xe6, 0x23, 0x7d, 0xc4, 0x7e, 0x81, 0x8c, 0x5b, 0x4d, 0x32, + 0xb7, 0x1a, 0xcf, 0xb8, 0x45, 0xa7, 0x6d, 0x32, 0x37, 0x6d, 0x4b, 0x78, 0xb0, 0x22, 0xf4, 0x17, + 0xf6, 0x99, 0x1b, 0x06, 0x51, 0x76, 0xcc, 0x07, 0x2b, 0x86, 0x72, 0x90, 0x3e, 0x38, 0xdf, 0x92, + 0x01, 0x58, 0x76, 0xec, 0xdd, 0x5e, 0xc3, 0xe9, 0x40, 0x47, 0xfd, 0xb3, 0x70, 0xa6, 0xf6, 0x33, + 0x63, 0x98, 0xa9, 0xad, 0x01, 0xb0, 0x15, 0x10, 0xa7, 0x1a, 0x7e, 0xbb, 0xd8, 0xbc, 0x2c, 0x64, + 0x4a, 0x67, 0x68, 0xf0, 0x77, 0x0b, 0x3f, 0x95, 0xc7, 0x38, 0xae, 0xcf, 0x0a, 0xc9, 0x8d, 0x73, + 0xa6, 0xf6, 0xee, 0x00, 0xeb, 0x16, 0x87, 0xf5, 0x53, 0x0e, 0xc1, 0x49, 0xfa, 0x98, 0xff, 0xfd, + 0x14, 0x98, 0x21, 0xfb, 0xb2, 0x44, 0xa6, 0x7f, 0x1d, 0x82, 0xfe, 0xf3, 0x63, 0x00, 0x7d, 0x1d, + 0xcc, 0xda, 0x21, 0x75, 0xd2, 0xa7, 0xb2, 0x2b, 0x65, 0xb1, 0xb0, 0x33, 0x7c, 0xe9, 0x1c, 0x19, + 0xf5, 0x13, 0x2c, 0xf2, 0x3a, 0x8f, 0xfc, 0xdd, 0x31, 0xf2, 0x66, 0x28, 0x8e, 0x13, 0xfa, 0xf7, + 0x04, 0xd0, 0xaf, 0x73, 0xd0, 0x97, 0x0e, 0xc3, 0xca, 0x04, 0xee, 0x55, 0x90, 0x41, 0x16, 0x1f, + 0x83, 0x7c, 0x4b, 0x8a, 0x0b, 0x31, 0xa7, 0xc1, 0x14, 0x6e, 0xb2, 0xc1, 0x04, 0xd1, 0x7f, 0x44, + 0x6f, 0x8c, 0x4d, 0x0f, 0x3a, 0xc1, 0x12, 0xbb, 0xff, 0x88, 0x78, 0xf0, 0xdd, 0xcf, 0xdd, 0xd3, + 0x79, 0xb2, 0xe3, 0x1c, 0x24, 0x8c, 0x3c, 0x7b, 0x64, 0x25, 0x3e, 0xb6, 0x83, 0x91, 0xa3, 0xcc, + 0x1e, 0x87, 0x30, 0x92, 0x3e, 0xf0, 0x5f, 0xce, 0x82, 0xd3, 0x64, 0xf9, 0x6f, 0xc9, 0xb1, 0x77, + 0xfa, 0xae, 0x31, 0x33, 0x0f, 0xaf, 0x0b, 0x37, 0x81, 0x79, 0x8f, 0x73, 0xbc, 0xa7, 0x3a, 0xd1, + 0x97, 0xaa, 0xfe, 0x1e, 0xeb, 0x3c, 0xf3, 0x34, 0x1e, 0xc9, 0xc5, 0x18, 0x01, 0x46, 0xf1, 0x9e, + 0x78, 0x47, 0x45, 0x90, 0x51, 0x66, 0x35, 0x51, 0x1e, 0x69, 0x71, 0x39, 0xd0, 0xa9, 0x9c, 0x88, + 0x4e, 0x7d, 0x30, 0xd0, 0xa9, 0xff, 0xc4, 0xe9, 0xd4, 0xf2, 0xe1, 0x45, 0x32, 0x81, 0x25, 0xa6, + 0x79, 0x90, 0x5f, 0x32, 0xbb, 0x1e, 0x74, 0xd4, 0xaf, 0xd2, 0x79, 0xd4, 0xab, 0x52, 0xec, 0x5e, + 0x2a, 0x20, 0xbf, 0x89, 0x4b, 0xa3, 0x06, 0xd9, 0xad, 0x62, 0xd8, 0x10, 0x0e, 0x75, 0xfa, 0x6d, + 0xd2, 0x20, 0x7f, 0x7d, 0x64, 0xc6, 0x36, 0x01, 0x4b, 0x10, 0xe4, 0x6f, 0x38, 0x0b, 0x13, 0xb9, + 0xdf, 0x2a, 0xaf, 0xc3, 0x1d, 0x34, 0x82, 0x5c, 0x4e, 0x0f, 0xe1, 0x22, 0x90, 0xcd, 0x8e, 0x8b, + 0x9b, 0xde, 0xb4, 0x8e, 0xfe, 0x26, 0x75, 0x39, 0xea, 0x17, 0x15, 0x61, 0x79, 0xd2, 0x2e, 0x47, + 0x42, 0x5c, 0xa4, 0x8f, 0xd9, 0x77, 0xb1, 0xbf, 0x69, 0xaf, 0x6b, 0xb4, 0x21, 0xe2, 0x3e, 0x35, + 0xd4, 0xe6, 0x81, 0x64, 0xfa, 0x23, 0xbe, 0x64, 0xb2, 0xed, 0x34, 0x77, 0x88, 0x76, 0x3a, 0xea, + 0x6a, 0x64, 0x20, 0x73, 0x5c, 0xf1, 0x23, 0x5b, 0x8d, 0x8c, 0x65, 0x63, 0x02, 0xb7, 0x97, 0xfa, + 0xe7, 0x71, 0x27, 0xda, 0x5a, 0x47, 0xdd, 0xab, 0xa1, 0xc2, 0x1a, 0xdb, 0xd9, 0xdb, 0x51, 0xf6, + 0x6a, 0xa2, 0x79, 0x98, 0x00, 0x5a, 0xf3, 0x14, 0xad, 0x2f, 0xd0, 0x61, 0x34, 0xe5, 0xed, 0x52, + 0xd7, 0x76, 0xbc, 0x64, 0xdb, 0xa5, 0x88, 0x3b, 0x1d, 0x7f, 0x97, 0xf4, 0xfc, 0x16, 0x7f, 0x3c, + 0x7b, 0x5c, 0xc3, 0x67, 0x82, 0xf3, 0x5b, 0xc3, 0x18, 0x48, 0x1f, 0xde, 0xb7, 0x1e, 0xd1, 0xe0, + 0x39, 0x6a, 0x73, 0xa4, 0x6d, 0x60, 0x6c, 0x43, 0xe7, 0x28, 0xcd, 0x31, 0x9a, 0x87, 0xf4, 0xf1, + 0xfa, 0x3b, 0x66, 0xe0, 0x7c, 0xd3, 0x04, 0x07, 0x4e, 0xbf, 0x65, 0xe6, 0x46, 0x6c, 0x99, 0xa3, + 0xee, 0x2e, 0x50, 0x59, 0x8f, 0x6f, 0xc0, 0x1c, 0x65, 0x77, 0x21, 0x86, 0x89, 0xf4, 0x11, 0x7f, + 0xb3, 0x0c, 0x72, 0xcd, 0xc9, 0x8f, 0x97, 0xa3, 0xce, 0x45, 0xb0, 0xac, 0x9a, 0x63, 0x1b, 0x2e, + 0x47, 0x99, 0x8b, 0x44, 0xb2, 0x30, 0x81, 0xf8, 0xfd, 0xc7, 0xc1, 0x2c, 0x9e, 0x70, 0xfb, 0xbb, + 0xad, 0x7f, 0x47, 0x47, 0xcd, 0xd7, 0xa7, 0xd8, 0x56, 0xef, 0x03, 0x05, 0x7f, 0x77, 0x88, 0x8e, + 0x9c, 0x0b, 0x62, 0xed, 0xd3, 0xe7, 0x52, 0x0f, 0xbe, 0x3f, 0x94, 0x4f, 0xc4, 0xd8, 0x77, 0x02, + 0x47, 0xf5, 0x89, 0x38, 0xd2, 0xdd, 0xc0, 0xdf, 0x0d, 0x47, 0xd4, 0xff, 0x9a, 0x1e, 0xe6, 0xfd, + 0xbb, 0x84, 0xd9, 0x01, 0xbb, 0x84, 0x9f, 0x62, 0xb1, 0x6c, 0xf2, 0x58, 0xde, 0x23, 0x2a, 0xc2, + 0x31, 0x8e, 0xb5, 0xef, 0x0d, 0xe0, 0x3c, 0xcf, 0xc1, 0xb9, 0x78, 0x28, 0x5e, 0x26, 0x70, 0x7e, + 0x32, 0x1b, 0x8e, 0xb9, 0x9f, 0x4e, 0xb1, 0x1d, 0xf7, 0x1d, 0xce, 0xc8, 0x1e, 0x38, 0x9c, 0xc1, + 0xb5, 0xf4, 0xdc, 0x21, 0x5b, 0xfa, 0xa7, 0x59, 0xed, 0x68, 0xf1, 0xda, 0xf1, 0x64, 0x71, 0x44, + 0xc6, 0x37, 0x32, 0xbf, 0x2f, 0x50, 0x8f, 0x0b, 0x9c, 0x7a, 0x94, 0x0f, 0xc7, 0x4c, 0xfa, 0xfa, + 0xf1, 0x9b, 0xfe, 0x84, 0xf6, 0x88, 0xdb, 0xfb, 0xa8, 0x1b, 0x91, 0x9c, 0x10, 0xc7, 0x36, 0x72, + 0x8f, 0xb2, 0x11, 0x39, 0x8c, 0x93, 0x09, 0x84, 0x74, 0x9b, 0x03, 0x33, 0x98, 0xa7, 0x0b, 0x66, + 0x67, 0x0b, 0x7a, 0xea, 0xab, 0x89, 0xab, 0xa2, 0x1f, 0x40, 0x73, 0x4c, 0x51, 0x8e, 0xa2, 0x8e, + 0xcd, 0x26, 0xf5, 0x17, 0x20, 0x4c, 0x2e, 0x30, 0x0c, 0x4e, 0x3a, 0x10, 0xe3, 0x50, 0x0e, 0xd2, + 0x87, 0xec, 0x13, 0xc4, 0x99, 0xa3, 0x66, 0xec, 0xdb, 0xbb, 0x9e, 0xfa, 0x9c, 0x31, 0x74, 0xd0, + 0x8b, 0x20, 0xdf, 0xc5, 0xd4, 0xe8, 0xe9, 0x8c, 0xf8, 0xe9, 0x0e, 0x15, 0x01, 0x29, 0x5f, 0xa7, + 0x5f, 0x26, 0x3d, 0xa2, 0x11, 0xca, 0x91, 0xd0, 0x99, 0xf4, 0x11, 0x8d, 0x21, 0xe5, 0x4f, 0xe4, + 0xaa, 0x9e, 0x02, 0x2a, 0xdd, 0xdc, 0x31, 0xbd, 0x31, 0x05, 0x82, 0xe8, 0x22, 0x5a, 0x7e, 0x20, + 0x08, 0xfc, 0x90, 0xf4, 0xe0, 0x29, 0x23, 0x15, 0xf4, 0xf9, 0xa4, 0x0f, 0x9e, 0xc6, 0x17, 0x9f, + 0x3e, 0x26, 0x3f, 0x47, 0x5a, 0xd6, 0x79, 0xe2, 0x83, 0x9b, 0xa2, 0x7b, 0xef, 0xc8, 0x8d, 0x85, + 0xb0, 0x76, 0x74, 0x8d, 0x65, 0x60, 0xf9, 0xe9, 0x03, 0xf3, 0xcb, 0x3f, 0x00, 0x72, 0x15, 0x78, + 0x69, 0x77, 0x4b, 0xbd, 0x1b, 0x14, 0x5a, 0x0e, 0x84, 0x55, 0x6b, 0xd3, 0x46, 0xd2, 0xf5, 0xd0, + 0x7f, 0x1f, 0x12, 0xfa, 0x84, 0xf0, 0xd8, 0x86, 0x46, 0x27, 0x3c, 0x86, 0xe6, 0x3f, 0xaa, 0x2f, + 0x93, 0x40, 0xb6, 0xe9, 0x19, 0x9e, 0x3a, 0x1d, 0x60, 0xab, 0x3e, 0x87, 0xc5, 0xe2, 0x6e, 0x1e, + 0x8b, 0x9b, 0x38, 0x59, 0x60, 0x0e, 0x16, 0xd0, 0xf7, 0x11, 0x00, 0xa8, 0xa0, 0xf0, 0x80, 0x6b, + 0x5b, 0x28, 0x87, 0x7f, 0x52, 0xd2, 0x7f, 0x56, 0x5f, 0x19, 0x88, 0xfb, 0x5e, 0x4e, 0xdc, 0x8f, + 0x16, 0x2b, 0x62, 0x02, 0x2b, 0x6d, 0x12, 0x98, 0x46, 0xa2, 0x5d, 0x81, 0x46, 0xc7, 0x55, 0x1f, + 0x1e, 0x2a, 0x7f, 0x84, 0x98, 0xd5, 0x8f, 0x08, 0xc7, 0xf4, 0x24, 0xb5, 0x0a, 0x88, 0x47, 0xfb, + 0x0b, 0xf8, 0x31, 0x4d, 0x24, 0x3e, 0xa6, 0xc9, 0x6d, 0x20, 0x6b, 0x5a, 0x9b, 0x36, 0xf5, 0x5e, + 0xbb, 0x2e, 0x82, 0x36, 0xd2, 0x09, 0x1d, 0x67, 0x14, 0x0c, 0xf8, 0x19, 0xcf, 0xd6, 0x44, 0xee, + 0xce, 0xcb, 0xa2, 0xd2, 0xd5, 0xff, 0x7b, 0xa8, 0xb0, 0x15, 0x05, 0x64, 0x7b, 0x86, 0xb7, 0x4d, + 0x8b, 0xc6, 0xff, 0x91, 0x8d, 0xbc, 0x6b, 0x19, 0x96, 0x6d, 0xed, 0xef, 0x98, 0xcf, 0x0c, 0xae, + 0xe8, 0xe5, 0xd2, 0x10, 0xe7, 0x5b, 0xd0, 0x82, 0x8e, 0xe1, 0xc1, 0xe6, 0xde, 0x16, 0x9e, 0x63, + 0x15, 0x74, 0x36, 0x29, 0xb1, 0xfe, 0x23, 0x8e, 0xa3, 0xf5, 0x7f, 0xd3, 0xec, 0x42, 0x1c, 0xf0, + 0x89, 0xea, 0xbf, 0xff, 0x9c, 0x48, 0xff, 0x07, 0x14, 0x91, 0x3e, 0x1a, 0xff, 0x2a, 0x81, 0xd9, + 0x26, 0x52, 0xb8, 0xe6, 0xee, 0xce, 0x8e, 0xe1, 0xec, 0xab, 0x8f, 0x08, 0x51, 0x61, 0x54, 0x33, + 0xc3, 0xa9, 0xa6, 0xfa, 0x1b, 0xc2, 0xb7, 0x53, 0xd3, 0xa6, 0xcd, 0x94, 0x90, 0xb8, 0x1d, 0x3c, + 0x16, 0xe4, 0x90, 0x7a, 0xfb, 0xfe, 0x7c, 0xb1, 0x0d, 0x81, 0xe4, 0x14, 0x0c, 0x8c, 0x35, 0x94, + 0xb7, 0x09, 0x04, 0xe5, 0x90, 0xc0, 0xf1, 0xa6, 0x67, 0xb4, 0x2f, 0x2f, 0xdb, 0x8e, 0xbd, 0xeb, + 0x99, 0x16, 0x74, 0xd5, 0x87, 0x85, 0x08, 0xf8, 0xfa, 0x9f, 0x09, 0xf5, 0x5f, 0xfd, 0xb7, 0x8c, + 0xe8, 0x28, 0x1a, 0x74, 0xab, 0x2c, 0xf9, 0x88, 0x38, 0x57, 0x62, 0xe3, 0xa2, 0x08, 0xc5, 0xf4, + 0x85, 0xf6, 0x26, 0x19, 0x14, 0xb5, 0x07, 0x7b, 0xb6, 0xe3, 0xd5, 0xec, 0xb6, 0xd1, 0x75, 0x3d, + 0xdb, 0x81, 0x6a, 0x23, 0x56, 0x6a, 0xa8, 0x87, 0xe9, 0xd8, 0xed, 0x70, 0x70, 0xa4, 0x4f, 0xac, + 0xda, 0xc9, 0xbc, 0x8e, 0x7f, 0x42, 0x78, 0x97, 0x91, 0x48, 0xa5, 0x9f, 0xa3, 0x08, 0x3d, 0x1f, + 0xd4, 0xa5, 0x25, 0x73, 0xc5, 0x17, 0xdb, 0x79, 0x14, 0x62, 0x6a, 0x02, 0x4b, 0xe5, 0x12, 0x98, + 0x6b, 0xee, 0x5e, 0x0a, 0x88, 0xb8, 0xac, 0x11, 0xf2, 0x1a, 0xe1, 0x60, 0x16, 0x54, 0xf1, 0x58, + 0x42, 0x11, 0xf2, 0xbd, 0x11, 0xcc, 0xb9, 0x6c, 0x36, 0x8a, 0x37, 0x9f, 0x28, 0x18, 0xc4, 0x62, + 0x78, 0xa9, 0xe9, 0x0b, 0xf0, 0x7d, 0x12, 0x98, 0x6b, 0xf4, 0xa0, 0x05, 0x3b, 0xc4, 0xc7, 0x8e, + 0x13, 0xe0, 0xcb, 0x12, 0x0a, 0x90, 0x23, 0x14, 0x21, 0xc0, 0xd0, 0x1f, 0xb6, 0xe2, 0x0b, 0x2f, + 0x4c, 0x48, 0x24, 0xb8, 0xb8, 0xd2, 0xd2, 0x17, 0xdc, 0x57, 0x24, 0x30, 0xa3, 0xef, 0x5a, 0x6b, + 0x8e, 0x8d, 0x46, 0x63, 0x47, 0xbd, 0x27, 0xec, 0x20, 0x6e, 0x05, 0x27, 0x3a, 0xbb, 0x0e, 0x5e, + 0x7f, 0xaa, 0x5a, 0x4d, 0xd8, 0xb6, 0xad, 0x8e, 0x8b, 0xeb, 0x91, 0xd3, 0x0f, 0xbe, 0xb8, 0x2b, + 0xfb, 0xbc, 0xbf, 0x94, 0x33, 0xea, 0x0b, 0x84, 0x23, 0xe6, 0x90, 0xca, 0x33, 0x45, 0x8b, 0xf7, + 0x04, 0x82, 0x71, 0x71, 0x86, 0x95, 0x90, 0xbe, 0x70, 0xbf, 0x20, 0x01, 0xa5, 0xd4, 0x6e, 0xdb, + 0xbb, 0x96, 0xd7, 0x84, 0x5d, 0xd8, 0xf6, 0x5a, 0x8e, 0xd1, 0x86, 0xac, 0xfd, 0x5c, 0x04, 0x72, + 0xc7, 0x74, 0x68, 0x1f, 0x8c, 0xfe, 0x52, 0x39, 0xbe, 0x4c, 0x78, 0xc7, 0x91, 0xd4, 0xf2, 0x60, + 0x29, 0x09, 0xc4, 0x29, 0xb6, 0xaf, 0x28, 0x58, 0x50, 0xfa, 0x52, 0xfd, 0xb4, 0x04, 0xa6, 0xfd, + 0x1e, 0x7b, 0x4b, 0x44, 0x98, 0x3f, 0x97, 0x70, 0x32, 0x12, 0x10, 0x4f, 0x20, 0xc3, 0x77, 0x25, + 0x98, 0x55, 0x44, 0xd1, 0x4f, 0x26, 0xba, 0x52, 0x72, 0xd1, 0xa1, 0xc7, 0x7a, 0x63, 0x63, 0xa9, + 0x51, 0xab, 0x68, 0x7a, 0x51, 0x56, 0xbf, 0x2a, 0x81, 0xec, 0x9a, 0x69, 0x6d, 0xb1, 0x81, 0xcd, + 0x4e, 0x22, 0x3b, 0xb2, 0x03, 0x1f, 0xa4, 0x2d, 0x9d, 0x3c, 0x28, 0x77, 0x80, 0x93, 0xd6, 0xee, + 0xce, 0x25, 0xe8, 0x34, 0x36, 0xf1, 0x28, 0xeb, 0xb6, 0xec, 0x26, 0xb4, 0x88, 0x11, 0x9a, 0xd3, + 0x07, 0xbe, 0xe3, 0x4d, 0x30, 0x81, 0xc9, 0x03, 0xe2, 0x24, 0x42, 0xe2, 0x01, 0x53, 0x12, 0xc3, + 0x54, 0xa2, 0x69, 0xc3, 0x00, 0xe2, 0xe9, 0x6b, 0xea, 0x6f, 0xe5, 0xc0, 0xd5, 0x25, 0x6b, 0x1f, + 0xdb, 0x14, 0xa4, 0x83, 0x2f, 0x6f, 0x1b, 0xd6, 0x16, 0xc4, 0x03, 0x44, 0x20, 0x71, 0x36, 0xd2, + 0x7f, 0x86, 0x8f, 0xf4, 0xaf, 0xe8, 0x60, 0xca, 0x76, 0x3a, 0xd0, 0x59, 0xdc, 0xc7, 0x3c, 0xf5, + 0x2f, 0x3b, 0xd3, 0x36, 0x39, 0xa8, 0x88, 0x05, 0x4a, 0x7e, 0xa1, 0x41, 0xbe, 0xd7, 0x7d, 0x42, + 0xe7, 0x6e, 0x05, 0x53, 0x34, 0x4d, 0x99, 0x05, 0x85, 0x86, 0x5e, 0xd1, 0xf4, 0x8d, 0x6a, 0xa5, + 0x78, 0x4c, 0xb9, 0x0a, 0x1c, 0xaf, 0xb6, 0x34, 0xbd, 0xd4, 0xaa, 0x36, 0xea, 0x1b, 0x38, 0xbd, + 0x98, 0x51, 0x9f, 0x9b, 0x15, 0xf5, 0xec, 0x8d, 0x67, 0x66, 0x10, 0xac, 0x3a, 0x98, 0x6a, 0x93, + 0x0c, 0x78, 0x08, 0x9d, 0x49, 0x54, 0x3b, 0x4a, 0x90, 0x24, 0xe8, 0x3e, 0x21, 0xe5, 0x0c, 0x00, + 0x57, 0x1c, 0xdb, 0xda, 0x0a, 0xcf, 0xb4, 0x15, 0x74, 0x26, 0x45, 0x7d, 0x4e, 0x06, 0xe4, 0xc9, + 0x37, 0xf8, 0x66, 0x13, 0xfc, 0x2f, 0x14, 0xbc, 0xff, 0x8c, 0x2c, 0x5e, 0x2c, 0xaf, 0x70, 0xa2, + 0x45, 0x1f, 0x91, 0x2e, 0x12, 0x19, 0x10, 0x4b, 0x98, 0x56, 0xe5, 0x36, 0x90, 0x27, 0xdf, 0x52, + 0xaf, 0x83, 0xe8, 0x28, 0xa5, 0x24, 0x9b, 0xa0, 0x9f, 0xb2, 0xb8, 0x4c, 0xd3, 0xd7, 0xe6, 0x8f, + 0x4a, 0xa0, 0x50, 0x87, 0x5e, 0x79, 0x1b, 0xb6, 0x2f, 0xab, 0x8f, 0xe2, 0x17, 0x40, 0xbb, 0x26, + 0xb4, 0xbc, 0x8b, 0x3b, 0xdd, 0x60, 0x01, 0xd4, 0x4f, 0x50, 0x9f, 0xcf, 0x76, 0xbe, 0x4f, 0xe1, + 0xf5, 0xe7, 0x96, 0x01, 0x75, 0xf5, 0x4b, 0x88, 0x50, 0x99, 0x53, 0x20, 0xef, 0x40, 0x77, 0xb7, + 0xeb, 0x2f, 0xa2, 0xd1, 0x27, 0xf5, 0xb5, 0x81, 0x38, 0xcb, 0x9c, 0x38, 0x6f, 0x13, 0x2f, 0x62, + 0x02, 0x61, 0x4f, 0xb3, 0x60, 0xaa, 0x6a, 0x99, 0x9e, 0x69, 0x74, 0xd5, 0x17, 0x64, 0xc1, 0x5c, + 0x13, 0x7a, 0x6b, 0x86, 0x63, 0xec, 0x40, 0x0f, 0x3a, 0xae, 0xfa, 0x1d, 0xbe, 0x4f, 0xe8, 0x75, + 0x0d, 0x6f, 0xd3, 0x76, 0x76, 0x7c, 0xd5, 0xf4, 0x9f, 0x91, 0x6a, 0xee, 0x41, 0xc7, 0x0d, 0xf9, + 0xf2, 0x1f, 0xd1, 0x9b, 0x2b, 0xb6, 0x73, 0x19, 0x0d, 0x82, 0x74, 0x9a, 0x46, 0x1f, 0x11, 0xbd, + 0xae, 0xbd, 0x55, 0x83, 0x7b, 0xd0, 0x8f, 0xaa, 0x16, 0x3c, 0xa3, 0xb9, 0x40, 0xc7, 0xae, 0xdb, + 0x1e, 0xea, 0xb4, 0x6b, 0xf6, 0x16, 0x09, 0x3b, 0x5b, 0xd0, 0xf9, 0xc4, 0x30, 0x97, 0xb1, 0x07, + 0x71, 0xae, 0x3c, 0x9b, 0x8b, 0x26, 0x2a, 0x0b, 0x40, 0x09, 0x3e, 0x6b, 0xc1, 0x2e, 0xdc, 0x81, + 0x9e, 0xb3, 0x8f, 0x6f, 0x97, 0x28, 0xe8, 0x03, 0xde, 0xd0, 0x01, 0x5a, 0x7c, 0xb2, 0x4e, 0xa5, + 0xb7, 0xc0, 0x49, 0xee, 0x50, 0x93, 0x75, 0x11, 0x8a, 0x13, 0xb9, 0x3d, 0x4b, 0x46, 0xd6, 0xcc, + 0xcb, 0x65, 0x90, 0xc5, 0x83, 0xe7, 0x9b, 0x33, 0xdc, 0x0a, 0xd3, 0x0e, 0x74, 0x5d, 0x63, 0x0b, + 0xfa, 0x2b, 0x4c, 0xf4, 0x51, 0xb9, 0x13, 0xe4, 0xba, 0x18, 0x53, 0x32, 0x38, 0x3c, 0x82, 0xab, + 0x19, 0x32, 0x30, 0x10, 0xad, 0x60, 0x24, 0xc0, 0x70, 0xeb, 0xe4, 0x8b, 0x73, 0xf7, 0x81, 0x1c, + 0x81, 0x7f, 0x1a, 0xe4, 0x2a, 0xda, 0xe2, 0xfa, 0x72, 0xf1, 0x18, 0xfa, 0xeb, 0xf3, 0x37, 0x0d, + 0x72, 0x4b, 0xa5, 0x56, 0xa9, 0x56, 0x94, 0x50, 0x3d, 0xaa, 0xf5, 0xa5, 0x46, 0x51, 0x46, 0x89, + 0x6b, 0xa5, 0x7a, 0xb5, 0x5c, 0xcc, 0x2a, 0x33, 0x60, 0xea, 0x42, 0x49, 0xaf, 0x57, 0xeb, 0xcb, + 0xc5, 0x9c, 0xfa, 0x17, 0x2c, 0x7e, 0x77, 0xf1, 0xf8, 0xdd, 0x18, 0xc5, 0xd3, 0x20, 0xc8, 0x7e, + 0x31, 0x80, 0xec, 0x1e, 0x0e, 0xb2, 0x1f, 0x10, 0x21, 0x32, 0x01, 0x77, 0xa6, 0x3c, 0x98, 0x5a, + 0x73, 0xec, 0x36, 0x74, 0x5d, 0xf5, 0xa5, 0x12, 0xc8, 0x97, 0x0d, 0xab, 0x0d, 0xbb, 0xea, 0xb5, + 0x21, 0x54, 0xc4, 0x55, 0x34, 0xe3, 0xbb, 0x8a, 0xaa, 0xdf, 0xca, 0x88, 0xf6, 0x7e, 0x94, 0xee, + 0x02, 0xa1, 0x19, 0x21, 0x1f, 0xb1, 0x5e, 0x2e, 0x96, 0xd4, 0x04, 0x6e, 0xd8, 0x91, 0xc0, 0x34, + 0x5d, 0x0d, 0xb8, 0x04, 0xd9, 0x79, 0xf8, 0x77, 0x32, 0xa2, 0x93, 0x43, 0xbf, 0x06, 0x01, 0x99, + 0x08, 0x79, 0x88, 0x4d, 0x04, 0x87, 0x51, 0x9b, 0xc0, 0xe6, 0xa1, 0x04, 0x66, 0xd6, 0x2d, 0x77, + 0x90, 0x50, 0xc4, 0xc3, 0xf1, 0xfb, 0xd5, 0x60, 0x08, 0x1d, 0x2a, 0x1c, 0xff, 0x70, 0x7a, 0xe9, + 0x0b, 0xe6, 0x3b, 0x19, 0x70, 0x72, 0x19, 0x5a, 0xd0, 0x31, 0xdb, 0xa4, 0x06, 0xbe, 0x24, 0xee, + 0xe1, 0x25, 0xf1, 0x28, 0x8e, 0xf3, 0x41, 0x5f, 0xf0, 0x12, 0x78, 0x55, 0x20, 0x81, 0xa7, 0x70, + 0x12, 0xb8, 0x55, 0x90, 0xce, 0x04, 0xae, 0x55, 0x9f, 0x06, 0xb3, 0x75, 0xdb, 0x33, 0x37, 0xcd, + 0x36, 0xf1, 0x41, 0xfb, 0x05, 0x19, 0x64, 0x6b, 0xa6, 0xeb, 0xa9, 0xa5, 0xb0, 0x3b, 0x39, 0x0b, + 0x66, 0x4c, 0xab, 0xdd, 0xdd, 0xed, 0x40, 0x1d, 0x1a, 0xa4, 0x5f, 0x29, 0xe8, 0x6c, 0x52, 0xb8, + 0xb5, 0x8f, 0xd8, 0x92, 0xfd, 0xad, 0xfd, 0xdf, 0x11, 0x5e, 0x86, 0x61, 0x59, 0xc0, 0x71, 0x29, + 0x23, 0xec, 0xae, 0x12, 0x98, 0xb3, 0x98, 0xac, 0xbe, 0xc1, 0xde, 0x7f, 0x2f, 0x01, 0x4b, 0x4e, + 0xe7, 0xbf, 0x50, 0x3f, 0x20, 0xd4, 0x58, 0x87, 0x31, 0x94, 0x0c, 0x99, 0xa5, 0x11, 0x26, 0xc9, + 0x0a, 0x98, 0xaf, 0xd6, 0x5b, 0x9a, 0x5e, 0x2f, 0xd5, 0x68, 0x16, 0x59, 0xfd, 0x57, 0x09, 0xe4, + 0x74, 0xd8, 0xeb, 0xee, 0xb3, 0x81, 0xa7, 0xa9, 0xa3, 0x78, 0x26, 0x70, 0x14, 0x57, 0x96, 0x00, + 0x30, 0xda, 0xa8, 0x60, 0x7c, 0x33, 0x97, 0x34, 0x30, 0x9c, 0x29, 0x57, 0xc1, 0x52, 0x90, 0x5b, + 0x67, 0xbe, 0x54, 0x5f, 0x28, 0xbc, 0x73, 0xc4, 0x51, 0xc3, 0x1c, 0x46, 0xf4, 0x09, 0x1f, 0x14, + 0xda, 0xec, 0x19, 0x4a, 0xee, 0x68, 0xc4, 0xff, 0x35, 0x09, 0x64, 0x5b, 0xa8, 0xb7, 0x64, 0x3a, + 0xce, 0xcf, 0x8d, 0xa6, 0xe3, 0x88, 0x4c, 0x84, 0x8e, 0xdf, 0x0b, 0x66, 0x59, 0x8d, 0xa5, 0xae, + 0x12, 0xb1, 0x2a, 0xce, 0x7d, 0x30, 0x8a, 0x86, 0x0f, 0x60, 0xe7, 0x68, 0x44, 0xfc, 0x99, 0x47, + 0x03, 0xb0, 0x0a, 0x77, 0x2e, 0x41, 0xc7, 0xdd, 0x36, 0x7b, 0xea, 0x5f, 0xc9, 0x60, 0x7a, 0x19, + 0x7a, 0x4d, 0xcf, 0xf0, 0x76, 0xdd, 0xbe, 0xed, 0x4e, 0xcb, 0x2e, 0x1b, 0xed, 0x6d, 0x48, 0xbb, + 0x23, 0xff, 0x51, 0x7d, 0x8f, 0x2c, 0xea, 0x4f, 0x14, 0x96, 0xb3, 0x10, 0x94, 0x11, 0x81, 0xc9, + 0x63, 0x40, 0xb6, 0x63, 0x78, 0x06, 0xc5, 0xe2, 0xda, 0x3e, 0x2c, 0x42, 0x42, 0x3a, 0xce, 0xa6, + 0xbe, 0x43, 0x12, 0x71, 0x28, 0x12, 0x28, 0x3f, 0x19, 0x08, 0x1f, 0xc8, 0x8c, 0x80, 0xc2, 0x09, + 0x30, 0x57, 0x6f, 0xb4, 0x36, 0x6a, 0x8d, 0xe5, 0x65, 0x0d, 0xa5, 0x16, 0x65, 0xe5, 0x14, 0x50, + 0xd6, 0x4a, 0x17, 0x57, 0xb5, 0x7a, 0x6b, 0xa3, 0xde, 0xa8, 0x68, 0xf4, 0xcb, 0xac, 0x72, 0x1c, + 0xcc, 0x94, 0x4b, 0xe5, 0x15, 0x3f, 0x21, 0xa7, 0x9c, 0x06, 0x27, 0x57, 0xb5, 0xd5, 0x45, 0x4d, + 0x6f, 0xae, 0x54, 0xd7, 0x36, 0x10, 0x99, 0xa5, 0xc6, 0x7a, 0xbd, 0x52, 0xcc, 0x2b, 0x2a, 0x38, + 0xc5, 0xbc, 0xb9, 0xa0, 0x37, 0xea, 0xcb, 0x1b, 0xcd, 0x56, 0xa9, 0xa5, 0x15, 0xa7, 0x94, 0xab, + 0xc0, 0xf1, 0x72, 0xa9, 0x8e, 0xb3, 0x97, 0x1b, 0xf5, 0xba, 0x56, 0x6e, 0x15, 0x0b, 0xea, 0xbf, + 0x65, 0xc1, 0x4c, 0xd5, 0xad, 0x1b, 0x3b, 0xf0, 0xbc, 0xd1, 0x35, 0x3b, 0xea, 0x0b, 0x98, 0x99, + 0xc7, 0x8d, 0x60, 0xce, 0x21, 0x7f, 0x61, 0xa7, 0x65, 0x42, 0x82, 0xe6, 0x9c, 0xce, 0x27, 0xa2, + 0x39, 0xb9, 0x85, 0x09, 0xf8, 0x73, 0x72, 0xf2, 0xa4, 0x2c, 0x02, 0x40, 0xfe, 0xb5, 0xc2, 0x3b, + 0x62, 0xcf, 0xf5, 0xb7, 0x26, 0x63, 0x07, 0xba, 0xd0, 0xd9, 0x33, 0xdb, 0xd0, 0xcf, 0xa9, 0x33, + 0x5f, 0xa9, 0x5f, 0x97, 0x45, 0xf7, 0x17, 0x19, 0x50, 0x99, 0xea, 0x44, 0xf4, 0x86, 0x3f, 0x2e, + 0x8b, 0xec, 0x0e, 0x0a, 0x91, 0x4c, 0xa6, 0x29, 0x2f, 0x96, 0x46, 0x5b, 0xb6, 0x6d, 0x35, 0x1a, + 0x1b, 0xcd, 0x95, 0x86, 0xde, 0x2a, 0xca, 0xca, 0x2c, 0x28, 0xa0, 0xc7, 0x5a, 0xa3, 0xbe, 0x5c, + 0xcc, 0x2a, 0x57, 0x83, 0x13, 0x2b, 0xa5, 0xe6, 0x46, 0xb5, 0x7e, 0xbe, 0x54, 0xab, 0x56, 0x36, + 0xca, 0x2b, 0x25, 0xbd, 0x59, 0xcc, 0x29, 0xd7, 0x82, 0xab, 0x5b, 0x55, 0x4d, 0xdf, 0x58, 0xd2, + 0x4a, 0xad, 0x75, 0x5d, 0x6b, 0x6e, 0xd4, 0x1b, 0x1b, 0xf5, 0xd2, 0xaa, 0x56, 0xcc, 0xa3, 0xe6, + 0x8f, 0x5f, 0x85, 0x6a, 0x33, 0x75, 0x50, 0x19, 0x0b, 0x11, 0xca, 0x38, 0xdd, 0xaf, 0x8c, 0x80, + 0x55, 0x2b, 0x5d, 0x6b, 0x6a, 0xfa, 0x79, 0xad, 0x38, 0x33, 0x48, 0xd7, 0x66, 0x95, 0x93, 0xa0, + 0x88, 0x78, 0xd8, 0xa8, 0x36, 0xfd, 0x9c, 0x95, 0xe2, 0x9c, 0xfa, 0xe9, 0x3c, 0x38, 0xa5, 0xc3, + 0x2d, 0xd3, 0xf5, 0xa0, 0xb3, 0x66, 0xec, 0xef, 0x40, 0xcb, 0xf3, 0x3b, 0xf9, 0x7f, 0x4a, 0xac, + 0x8c, 0xab, 0x60, 0xae, 0x47, 0x68, 0xac, 0x42, 0x6f, 0xdb, 0xee, 0xd0, 0x51, 0xf8, 0x51, 0x91, + 0x3d, 0xc7, 0xc2, 0x1a, 0x9b, 0x5d, 0xe7, 0xbf, 0x66, 0x74, 0x5b, 0x8e, 0xd1, 0xed, 0xec, 0x28, + 0xba, 0xad, 0x5c, 0x0f, 0xa6, 0x77, 0x5d, 0xe8, 0x68, 0x3b, 0x86, 0xd9, 0xf5, 0xef, 0xf8, 0x0c, + 0x12, 0xd4, 0x77, 0x66, 0x45, 0x4f, 0xac, 0x30, 0x75, 0x19, 0x2c, 0xc6, 0x88, 0xbe, 0xf5, 0x0c, + 0x00, 0xb4, 0xb2, 0xeb, 0x4e, 0x97, 0x2a, 0x2b, 0x93, 0x82, 0xf8, 0xbb, 0x64, 0x76, 0xbb, 0xa6, + 0xb5, 0x15, 0xec, 0xfb, 0x87, 0x09, 0xea, 0x8b, 0x65, 0x91, 0x13, 0x2c, 0x49, 0x79, 0x4b, 0xd6, + 0x9a, 0x5e, 0x28, 0x4d, 0xb8, 0xdf, 0x3d, 0xd8, 0x74, 0xf2, 0x4a, 0x11, 0xcc, 0xe2, 0x34, 0xda, + 0x02, 0x8b, 0x53, 0xa8, 0x0f, 0xf6, 0xc9, 0xad, 0x6a, 0xad, 0x95, 0x46, 0x25, 0x78, 0x57, 0x40, + 0x24, 0x11, 0x33, 0xa5, 0xfa, 0x45, 0xdc, 0x1a, 0xa7, 0x95, 0x87, 0x81, 0x6b, 0x99, 0x0e, 0xbb, + 0x54, 0xd3, 0xb5, 0x52, 0xe5, 0xe2, 0x86, 0xf6, 0xb4, 0x6a, 0xb3, 0xd5, 0xe4, 0x1b, 0x97, 0xdf, + 0x8e, 0x66, 0x10, 0xbf, 0xda, 0x6a, 0xa9, 0x5a, 0xa3, 0xfd, 0xfb, 0x52, 0x43, 0x5f, 0x2d, 0xb5, + 0x8a, 0xb3, 0xea, 0xcb, 0x65, 0x50, 0x5c, 0x86, 0xde, 0x9a, 0xed, 0x78, 0x46, 0xb7, 0x66, 0x5a, + 0x97, 0xd7, 0x9d, 0x2e, 0x37, 0xd9, 0x14, 0x0e, 0xd3, 0xc1, 0x0f, 0x91, 0x1c, 0xc1, 0xe8, 0x1d, + 0xf1, 0x1e, 0xce, 0x16, 0x2a, 0x53, 0x98, 0xa0, 0x3e, 0x4b, 0x12, 0x59, 0xee, 0x16, 0x2f, 0x35, + 0x99, 0x9e, 0x3c, 0x7b, 0xd2, 0xe3, 0xf3, 0x00, 0xd4, 0xf2, 0xea, 0xf3, 0xb2, 0xa0, 0xb0, 0x64, + 0x5a, 0x46, 0xd7, 0x7c, 0x26, 0x17, 0x1d, 0x33, 0xec, 0x63, 0x32, 0x31, 0x7d, 0x8c, 0x34, 0xd2, + 0xf8, 0xf9, 0xb3, 0xb2, 0xe8, 0xf2, 0x02, 0x23, 0x7b, 0x9f, 0xc9, 0x88, 0xc1, 0xf3, 0x63, 0x92, + 0xc8, 0xf2, 0xc2, 0x70, 0x7a, 0xc9, 0x30, 0xfc, 0xec, 0xf7, 0x87, 0x8d, 0xd5, 0xd7, 0xbe, 0x0b, + 0x83, 0x54, 0x61, 0x5a, 0xfd, 0x03, 0x19, 0xa8, 0xcb, 0xd0, 0x3b, 0x0f, 0x9d, 0x60, 0x2a, 0x80, + 0x7b, 0x7d, 0x6a, 0x6f, 0x33, 0x4d, 0xf6, 0xcd, 0x2c, 0x80, 0x17, 0x78, 0x00, 0x4b, 0x31, 0x8d, + 0x27, 0x82, 0x74, 0x44, 0xe3, 0xad, 0x82, 0xbc, 0x8b, 0xdf, 0x53, 0x35, 0x7b, 0x6c, 0xf4, 0x70, + 0x89, 0x89, 0xb1, 0xd4, 0x09, 0x61, 0x9d, 0x12, 0x50, 0xbf, 0x1b, 0x4c, 0x82, 0x7e, 0x98, 0xd3, + 0x8e, 0xa5, 0x43, 0x33, 0x9b, 0x4c, 0x5f, 0x9c, 0x74, 0xd5, 0x65, 0x90, 0x7d, 0xa3, 0x7e, 0x2c, + 0x07, 0x4e, 0x0e, 0xaa, 0x8e, 0xfa, 0xa1, 0x0c, 0xb7, 0xc3, 0x0e, 0xf1, 0x90, 0x9f, 0xa1, 0x1b, + 0x88, 0xe8, 0x41, 0x79, 0x3c, 0xb8, 0x3a, 0x58, 0x86, 0x6b, 0xd9, 0x75, 0x78, 0xc5, 0xed, 0x42, + 0xcf, 0x83, 0x0e, 0xae, 0x5a, 0x41, 0x1f, 0xfc, 0x52, 0x79, 0x22, 0xb8, 0xc6, 0xb4, 0x5c, 0xb3, + 0x03, 0x9d, 0x96, 0xd9, 0x73, 0x4b, 0x56, 0xa7, 0xb5, 0xeb, 0xd9, 0x8e, 0x69, 0xd0, 0x1b, 0x29, + 0x0b, 0x7a, 0xd4, 0x6b, 0xe5, 0x16, 0x50, 0x34, 0xdd, 0x86, 0x75, 0xc9, 0x36, 0x9c, 0x8e, 0x69, + 0x6d, 0xd5, 0x4c, 0xd7, 0xa3, 0x1e, 0xc0, 0x07, 0xd2, 0xd5, 0xbf, 0x96, 0x45, 0x0f, 0xd3, 0x0d, + 0x81, 0x35, 0xa2, 0x43, 0x79, 0xbe, 0x2c, 0x72, 0x3c, 0x2e, 0x19, 0xed, 0x64, 0xca, 0xf2, 0xdc, + 0x49, 0x1b, 0x12, 0x83, 0x47, 0x70, 0xdc, 0xb5, 0x90, 0x74, 0xdf, 0x10, 0x38, 0xaf, 0xe9, 0xd5, + 0xa5, 0xaa, 0x86, 0xcc, 0x8a, 0xab, 0xc1, 0x89, 0xf0, 0x5d, 0xe5, 0xe2, 0x46, 0x53, 0xab, 0xb7, + 0x8a, 0x05, 0xd4, 0x4f, 0x91, 0xe4, 0xa5, 0x52, 0xb5, 0xa6, 0x55, 0x36, 0x5a, 0x0d, 0xf4, 0xa6, + 0x32, 0x9a, 0x69, 0xa1, 0x3e, 0x27, 0x0b, 0x8e, 0x63, 0xd9, 0xee, 0x63, 0xa9, 0x22, 0xa1, 0xf4, + 0xf9, 0xda, 0x06, 0x00, 0x4d, 0x13, 0xf1, 0xaa, 0xbf, 0x2f, 0x7c, 0xe1, 0x26, 0x03, 0x61, 0x5f, + 0x19, 0x11, 0x9a, 0xf1, 0x1d, 0x49, 0x24, 0x42, 0x85, 0x30, 0xd9, 0x64, 0x4a, 0xf1, 0xcf, 0x93, + 0x1e, 0x71, 0xa2, 0xc1, 0xc7, 0x56, 0x66, 0x19, 0x7f, 0xfc, 0xb4, 0xb5, 0xaa, 0x8e, 0xd5, 0x61, + 0x1e, 0x00, 0x9c, 0x82, 0x35, 0x88, 0xe8, 0xc1, 0xc0, 0xf1, 0x2a, 0x4a, 0x0f, 0x4a, 0xe5, 0x56, + 0xf5, 0xbc, 0x16, 0xa5, 0x07, 0x9f, 0x97, 0x41, 0x61, 0x19, 0x7a, 0x68, 0x4e, 0xe5, 0xaa, 0x4f, + 0x12, 0x58, 0xff, 0x41, 0x66, 0x4c, 0xd7, 0x6e, 0x1b, 0xdd, 0x60, 0x19, 0x80, 0x3c, 0xa9, 0x3f, + 0x36, 0x8a, 0x09, 0xe2, 0x17, 0x1d, 0x31, 0x5e, 0xfd, 0x10, 0xc8, 0x79, 0xe8, 0x35, 0x5d, 0x86, + 0x7e, 0x78, 0xe4, 0x70, 0x85, 0x88, 0x54, 0x0c, 0xcf, 0xd0, 0x49, 0x7e, 0x66, 0x74, 0x12, 0xb4, + 0x5d, 0x22, 0x18, 0xf9, 0x7e, 0xb4, 0x3f, 0xff, 0x42, 0x06, 0x57, 0x93, 0xf6, 0x51, 0xea, 0xf5, + 0x9a, 0x9e, 0xed, 0x40, 0x1d, 0xb6, 0xa1, 0xd9, 0xf3, 0xfa, 0xd6, 0xf7, 0x1c, 0x92, 0xea, 0x6f, + 0x36, 0xd3, 0x47, 0xf5, 0x0d, 0xb2, 0x68, 0x84, 0xdf, 0x03, 0xed, 0xb1, 0xaf, 0xbc, 0x88, 0xc6, + 0xfe, 0x29, 0x49, 0x24, 0x66, 0x6f, 0x42, 0xe2, 0xc9, 0x80, 0xfa, 0xf8, 0x11, 0x00, 0xe5, 0xaf, + 0xdc, 0xe8, 0x5a, 0x59, 0xab, 0xae, 0xa1, 0x41, 0xe0, 0x06, 0x70, 0xdd, 0xda, 0xba, 0x5e, 0x5e, + 0x29, 0x35, 0xb5, 0x0d, 0x5d, 0x5b, 0xae, 0x36, 0x5b, 0xd4, 0x29, 0x8b, 0x7c, 0x35, 0xa5, 0x5c, + 0x0f, 0x4e, 0x37, 0xd7, 0x17, 0x9b, 0x65, 0xbd, 0xba, 0x86, 0xd3, 0x75, 0xad, 0xae, 0x5d, 0xa0, + 0x6f, 0x0b, 0xea, 0x47, 0x8a, 0x60, 0x06, 0x4d, 0x00, 0x9a, 0x64, 0x5e, 0xa0, 0xfe, 0x4d, 0x16, + 0xcc, 0xe8, 0xd0, 0xb5, 0xbb, 0x7b, 0x78, 0x8e, 0x30, 0xa9, 0xa9, 0xc7, 0xb7, 0x65, 0xd1, 0xf3, + 0xdb, 0x0c, 0xb3, 0x0b, 0x0c, 0xa3, 0xd1, 0x13, 0x4d, 0x63, 0xcf, 0x30, 0xbb, 0xc6, 0x25, 0xda, + 0xd5, 0x14, 0xf4, 0x30, 0x41, 0x59, 0x00, 0x8a, 0x7d, 0xc5, 0x82, 0x4e, 0xb3, 0x7d, 0x45, 0xf3, + 0xb6, 0x4b, 0x9d, 0x8e, 0x03, 0x5d, 0x97, 0xae, 0x5e, 0x0c, 0x78, 0xa3, 0xdc, 0x0c, 0x8e, 0xe3, + 0x54, 0x26, 0x33, 0x71, 0x90, 0xe9, 0x4f, 0x0e, 0x72, 0x96, 0xac, 0x7d, 0x3f, 0x67, 0x8e, 0xc9, + 0x19, 0x26, 0xb3, 0xc7, 0x25, 0xf2, 0xfc, 0x29, 0x9d, 0xb3, 0x60, 0xc6, 0x32, 0x76, 0xa0, 0xf6, + 0x60, 0xcf, 0x74, 0xa0, 0x8b, 0x1d, 0x63, 0x64, 0x9d, 0x4d, 0x52, 0x3f, 0x26, 0x74, 0xde, 0x5c, + 0x4c, 0x62, 0xc9, 0x74, 0x7f, 0x79, 0x04, 0xd5, 0x1f, 0xd0, 0xcf, 0xc8, 0xea, 0x47, 0x64, 0x30, + 0x4b, 0x99, 0x2a, 0x59, 0xfb, 0xd5, 0x8e, 0x7a, 0x03, 0x67, 0xfc, 0x1a, 0x28, 0xcd, 0x37, 0x7e, + 0xf1, 0x83, 0xfa, 0x13, 0xb2, 0xa8, 0xbb, 0xf3, 0x80, 0x8a, 0xe3, 0x32, 0xa2, 0x1d, 0x47, 0x37, + 0xed, 0x5d, 0xea, 0xa8, 0x5a, 0xd0, 0xc9, 0x43, 0x9a, 0x8b, 0x7a, 0xea, 0xaf, 0x0b, 0x39, 0x53, + 0x0b, 0x56, 0xe3, 0x88, 0x00, 0xfc, 0x8c, 0x0c, 0xe6, 0x29, 0x57, 0x4d, 0x7a, 0xce, 0x47, 0xe8, + 0xc0, 0xdb, 0x4f, 0x09, 0x1b, 0x82, 0x03, 0xea, 0x4f, 0x4b, 0x7a, 0xc8, 0x00, 0xf9, 0x09, 0xa1, + 0xe0, 0x68, 0xc2, 0x15, 0x39, 0x22, 0x28, 0xdf, 0x95, 0x05, 0x33, 0xeb, 0x2e, 0x74, 0xa8, 0xdf, + 0xbe, 0xfa, 0xda, 0x2c, 0x90, 0x97, 0x21, 0xb7, 0x91, 0xfa, 0x22, 0x61, 0x0f, 0x5f, 0xb6, 0xb2, + 0x0c, 0x51, 0x64, 0x23, 0x45, 0xc0, 0x76, 0x13, 0x98, 0x27, 0x22, 0x2d, 0x79, 0x1e, 0x32, 0x12, + 0x7d, 0x6f, 0xda, 0xbe, 0xd4, 0x71, 0x6c, 0x15, 0xe1, 0xb2, 0x50, 0x96, 0x32, 0xe2, 0xa9, 0x06, + 0x37, 0xc9, 0x7c, 0x36, 0xab, 0xf7, 0xa5, 0x2a, 0xb7, 0x83, 0xab, 0xec, 0x1e, 0x24, 0xe7, 0x57, + 0x98, 0xcc, 0x39, 0x9c, 0x79, 0xd0, 0x2b, 0xf5, 0x6f, 0x84, 0x7c, 0x75, 0xc5, 0xa5, 0x93, 0x4c, + 0x17, 0x7a, 0xe3, 0x31, 0x49, 0x4e, 0x82, 0x22, 0xca, 0x81, 0xf7, 0x5f, 0x74, 0xad, 0xd9, 0xa8, + 0x9d, 0xd7, 0x06, 0x2f, 0x63, 0xe4, 0xd4, 0xe7, 0xca, 0x60, 0x7a, 0xd1, 0xb1, 0x8d, 0x4e, 0xdb, + 0x70, 0x3d, 0xf5, 0xbb, 0x12, 0x98, 0x5d, 0x33, 0xf6, 0xbb, 0xb6, 0xd1, 0xc1, 0xfe, 0xfd, 0x7d, + 0x7d, 0x41, 0x8f, 0xbc, 0xf2, 0xfb, 0x02, 0xfa, 0xc8, 0x1f, 0x0c, 0x0c, 0x8e, 0xee, 0x65, 0x44, + 0xee, 0xd5, 0x0c, 0xb6, 0xf9, 0xa4, 0x41, 0xc1, 0x4a, 0x7d, 0xbe, 0x16, 0x58, 0x9e, 0x22, 0x2c, + 0xca, 0x8f, 0x88, 0x85, 0x1f, 0x15, 0x21, 0x79, 0x34, 0xbb, 0xf2, 0xcf, 0x2b, 0x80, 0x7c, 0x05, + 0x62, 0x2b, 0xee, 0x57, 0x25, 0x30, 0xd5, 0x84, 0x1e, 0xb6, 0xe0, 0xee, 0xe4, 0x3c, 0x85, 0x3b, + 0x38, 0x43, 0xe8, 0xc4, 0xee, 0x3f, 0xa3, 0xc9, 0x3a, 0x73, 0xde, 0x1a, 0xff, 0x4f, 0xe0, 0x91, + 0x48, 0xca, 0x5d, 0xa0, 0x65, 0x1e, 0xca, 0x23, 0x31, 0x96, 0x54, 0xfa, 0xbe, 0x56, 0xef, 0x91, + 0xa8, 0x6b, 0x15, 0xd3, 0xeb, 0xbd, 0x9a, 0xd5, 0xcf, 0x58, 0x6f, 0x33, 0xca, 0x7c, 0x8c, 0x73, + 0xd4, 0xe3, 0xc0, 0x14, 0x91, 0xb9, 0x3f, 0x1f, 0xed, 0xf7, 0x53, 0x20, 0x24, 0xf0, 0xd9, 0x6b, + 0x3f, 0xa7, 0xa0, 0x8b, 0x5a, 0x74, 0xe1, 0x13, 0x89, 0x41, 0x30, 0x5b, 0x87, 0xde, 0x15, 0xdb, + 0xb9, 0xdc, 0xf4, 0x0c, 0x0f, 0xaa, 0xff, 0x2c, 0x91, 0xeb, 0xf2, 0x98, 0xe8, 0x27, 0x75, 0x70, + 0x82, 0x54, 0x88, 0x66, 0xc4, 0xfd, 0x37, 0xa9, 0xc8, 0xd9, 0x81, 0x42, 0x60, 0xf2, 0xe9, 0x07, + 0x3f, 0x55, 0x5f, 0x3a, 0x30, 0xe8, 0x93, 0x34, 0x60, 0xd2, 0x40, 0x25, 0xc3, 0x32, 0x18, 0x7d, + 0x3f, 0x9e, 0xfa, 0x51, 0x21, 0xb3, 0x5a, 0x8c, 0xe6, 0xd1, 0x74, 0x05, 0x1f, 0x7e, 0x34, 0xc8, + 0x96, 0xb7, 0x0d, 0x4f, 0x7d, 0xb7, 0x0c, 0x40, 0xa9, 0xd3, 0x59, 0x25, 0x3e, 0xe0, 0xac, 0x43, + 0xda, 0x39, 0x30, 0xdb, 0xde, 0x36, 0xc2, 0x9b, 0x33, 0x48, 0x7f, 0xc0, 0xa5, 0x29, 0x8f, 0x0f, + 0x9d, 0xc9, 0x89, 0x54, 0xd5, 0x3e, 0x98, 0x50, 0x19, 0x94, 0x76, 0xe0, 0x68, 0xce, 0x87, 0xc2, + 0x8c, 0x3d, 0x42, 0x87, 0x3e, 0x5f, 0x08, 0xd9, 0x8b, 0x9e, 0xc3, 0x51, 0xd2, 0xc1, 0x01, 0x9b, + 0x30, 0x21, 0xe1, 0x49, 0x6f, 0xb1, 0x80, 0x1e, 0xf1, 0x7c, 0x4d, 0x24, 0x74, 0xad, 0xa2, 0x75, + 0x4c, 0x5f, 0xb4, 0x34, 0x60, 0x96, 0xfa, 0xc2, 0x4c, 0x32, 0xf8, 0xe2, 0x05, 0xf7, 0x14, 0x30, + 0x07, 0x3b, 0xa6, 0x07, 0xfd, 0x5a, 0x52, 0x01, 0xc6, 0x41, 0xcc, 0x7f, 0xa0, 0x3e, 0x5b, 0x38, + 0xe8, 0x1a, 0x16, 0xe8, 0xc1, 0x1a, 0x45, 0xb4, 0x3f, 0xb1, 0x30, 0x6a, 0x62, 0x34, 0xd3, 0x07, + 0xeb, 0xc7, 0x64, 0x70, 0x75, 0xcb, 0xde, 0xda, 0xea, 0x42, 0x5f, 0x4c, 0x90, 0x78, 0x67, 0xaa, + 0xc6, 0x38, 0xe1, 0xc2, 0x3b, 0x41, 0xf6, 0x03, 0x66, 0x70, 0x94, 0x0c, 0x3d, 0xf0, 0x27, 0xa6, + 0x62, 0x67, 0x51, 0x58, 0x5c, 0x03, 0xf9, 0x8c, 0x40, 0x41, 0x2c, 0xe0, 0xb3, 0x30, 0xd9, 0xf4, + 0x81, 0xf8, 0x92, 0x04, 0xe6, 0xc8, 0xbd, 0x88, 0xbe, 0x82, 0xde, 0x3f, 0x46, 0x00, 0xd4, 0xef, + 0x66, 0x44, 0xfd, 0x6c, 0xb1, 0x4c, 0x38, 0x4e, 0x22, 0x44, 0x2c, 0x16, 0x54, 0x65, 0x28, 0xb9, + 0x09, 0xdc, 0xd4, 0x99, 0x05, 0x33, 0xcb, 0xd0, 0x6f, 0x69, 0xae, 0xfa, 0xfe, 0x84, 0x3d, 0xd1, + 0x39, 0x30, 0x8b, 0x2f, 0x07, 0x6b, 0xd0, 0x63, 0x92, 0x64, 0xd5, 0x8c, 0x4b, 0x53, 0x6e, 0x04, + 0x73, 0x97, 0xe0, 0xa6, 0xed, 0xc0, 0x06, 0x77, 0x96, 0x92, 0x4f, 0x1c, 0x1c, 0x9e, 0x4e, 0xb9, + 0x19, 0x1c, 0xa7, 0x8e, 0xee, 0x8b, 0x68, 0xae, 0x6f, 0x38, 0xfb, 0xf4, 0x60, 0x5a, 0x7f, 0xb2, + 0xfa, 0x17, 0x6c, 0x83, 0x59, 0xe4, 0x51, 0xbc, 0xf5, 0xa0, 0xd8, 0x99, 0x4a, 0x47, 0x8c, 0x4e, + 0x4f, 0x00, 0x05, 0xaa, 0x23, 0xbe, 0x41, 0x17, 0xd7, 0x83, 0x06, 0x79, 0x95, 0x27, 0x80, 0x69, + 0x24, 0x22, 0x6c, 0x37, 0xd0, 0xae, 0xf7, 0xf4, 0x80, 0x0f, 0xf1, 0x7b, 0x3d, 0xcc, 0xaa, 0xfe, + 0x52, 0xa0, 0x33, 0x1a, 0xa7, 0x33, 0x8f, 0x4d, 0xc2, 0xfc, 0x44, 0x2e, 0x92, 0x2f, 0x32, 0xe5, + 0x2f, 0xee, 0x57, 0x3b, 0xae, 0xba, 0x9a, 0x4c, 0x6b, 0xce, 0x00, 0x10, 0x34, 0x3f, 0x3f, 0x70, + 0x06, 0x93, 0xc2, 0xc7, 0xc6, 0x8f, 0x3d, 0x0a, 0xd8, 0x2f, 0x0e, 0xcc, 0xce, 0x78, 0x01, 0x15, + 0x3c, 0x42, 0x28, 0xc2, 0x49, 0xfa, 0xe8, 0xfc, 0x62, 0x16, 0x5c, 0x1d, 0x9c, 0x70, 0xaa, 0x19, + 0x6e, 0xd8, 0xb2, 0x2f, 0x26, 0x83, 0x88, 0x3b, 0x52, 0x12, 0x34, 0xc7, 0x93, 0x20, 0xe7, 0xee, + 0x5e, 0x0a, 0x1c, 0x01, 0xc9, 0x83, 0xfa, 0x46, 0x39, 0xd1, 0x58, 0x35, 0x90, 0xbf, 0x31, 0x37, + 0xc2, 0x5b, 0xc1, 0x09, 0x6b, 0x77, 0x27, 0xc0, 0x02, 0xf7, 0x34, 0xb4, 0x67, 0x39, 0xf8, 0x82, + 0x6f, 0xb2, 0x59, 0xf1, 0x26, 0x9b, 0x60, 0x24, 0x15, 0xa9, 0x74, 0xfa, 0xea, 0xf1, 0xd9, 0xbe, + 0x23, 0x68, 0xe5, 0xc4, 0x4a, 0x41, 0xe0, 0x97, 0x58, 0xf8, 0xff, 0x31, 0x93, 0xa8, 0xe7, 0x1d, + 0x7e, 0x72, 0x2d, 0x41, 0x4f, 0x78, 0x94, 0xc7, 0xd6, 0x5e, 0x97, 0x03, 0x6a, 0x33, 0x74, 0xc8, + 0xa1, 0xa0, 0xae, 0x39, 0x70, 0xcf, 0x84, 0x57, 0xdc, 0xbe, 0xfd, 0x0e, 0x22, 0xb7, 0x0c, 0x2b, + 0xb7, 0x6f, 0x64, 0x45, 0x1d, 0x6a, 0x78, 0x0d, 0x3a, 0x50, 0x54, 0x44, 0xdb, 0x79, 0x3a, 0x28, + 0xf4, 0x68, 0x0e, 0xda, 0x76, 0x4a, 0xa3, 0x51, 0x45, 0x19, 0x69, 0xaa, 0x1e, 0x90, 0x54, 0xff, + 0x36, 0x03, 0x66, 0x98, 0x37, 0xd1, 0x3b, 0x02, 0x07, 0x54, 0x4b, 0x8a, 0x9f, 0x91, 0xca, 0xc2, + 0x33, 0x52, 0x65, 0x01, 0xe4, 0x5c, 0xa1, 0x46, 0x4b, 0xb2, 0x29, 0x4f, 0x02, 0xb3, 0x1d, 0xd8, + 0x83, 0x56, 0x07, 0x5a, 0x6d, 0x13, 0xba, 0xa7, 0x73, 0x58, 0x2c, 0x91, 0x61, 0x1a, 0xb8, 0xcc, + 0x82, 0xf1, 0xbb, 0x93, 0x61, 0x95, 0xbe, 0x96, 0xfe, 0xa9, 0x04, 0xce, 0x30, 0xad, 0x64, 0xc9, + 0xb1, 0x77, 0x12, 0x6b, 0xea, 0xcb, 0xd9, 0xf1, 0x78, 0x9d, 0xd7, 0xd4, 0x7b, 0x63, 0x1b, 0xe5, + 0x80, 0xe2, 0x22, 0x1a, 0xfd, 0xfb, 0x03, 0xe9, 0x3e, 0x8d, 0x93, 0x6e, 0xe5, 0x90, 0xf4, 0x27, + 0x70, 0x20, 0x3c, 0x0b, 0x66, 0x75, 0x68, 0x74, 0x82, 0xa1, 0xf6, 0x8f, 0x18, 0x23, 0xfa, 0x49, + 0x20, 0xeb, 0x85, 0xab, 0x61, 0x8f, 0x3a, 0x58, 0x19, 0xf6, 0x4b, 0xfc, 0x80, 0x17, 0xc5, 0xf0, + 0x47, 0x42, 0x0d, 0xa7, 0xdf, 0x02, 0x97, 0x45, 0x2c, 0xf0, 0xec, 0x20, 0x0b, 0xfc, 0x2c, 0x98, + 0xe9, 0x1a, 0x2e, 0x69, 0x30, 0xc1, 0xdd, 0xbf, 0x6c, 0x12, 0x7f, 0xcb, 0x7e, 0xec, 0x69, 0xbb, + 0x41, 0x55, 0x3b, 0x7c, 0x44, 0xe2, 0x0f, 0x0b, 0x1d, 0xad, 0x1b, 0x56, 0x76, 0x32, 0x8d, 0xb8, + 0x6f, 0x84, 0x95, 0xbb, 0x53, 0x40, 0x59, 0xd5, 0x9a, 0xcd, 0xd2, 0x32, 0x3e, 0x71, 0xe3, 0xbb, + 0x60, 0x75, 0xce, 0xdd, 0x84, 0xc4, 0x47, 0x10, 0x56, 0x66, 0x41, 0xc1, 0xe7, 0xaf, 0x78, 0x8c, + 0x3c, 0x59, 0x78, 0xc7, 0xa9, 0x98, 0x51, 0xbf, 0x28, 0x83, 0xfc, 0xba, 0xe5, 0x40, 0xa3, 0xa3, + 0x3e, 0x8f, 0xd1, 0xa5, 0x1f, 0xe4, 0x74, 0xe9, 0xe1, 0x83, 0x1a, 0x06, 0xfa, 0x26, 0x25, 0x2d, + 0xe2, 0xc3, 0x91, 0xc5, 0x2e, 0x96, 0xf3, 0xcc, 0x1c, 0x1e, 0x77, 0xb1, 0x55, 0xf2, 0xe8, 0x52, + 0x53, 0xef, 0x03, 0x84, 0x91, 0xfd, 0x6d, 0x19, 0x14, 0xd7, 0x76, 0xdd, 0x6d, 0xee, 0xd0, 0xf7, + 0xaf, 0xca, 0x60, 0xce, 0x3f, 0x17, 0xd3, 0xb2, 0x2f, 0x43, 0x4b, 0x7d, 0x06, 0xd7, 0x23, 0x7b, + 0x28, 0xcd, 0xef, 0x91, 0xf1, 0x83, 0xb2, 0xc6, 0x84, 0x86, 0x91, 0x06, 0x1d, 0xeb, 0xef, 0x2b, + 0x63, 0x81, 0xa3, 0xbf, 0xb0, 0x46, 0xbf, 0x0d, 0x03, 0xca, 0xa8, 0x2f, 0x16, 0xbe, 0xe7, 0x68, + 0x08, 0xed, 0xc1, 0xdd, 0xbb, 0xd8, 0xcd, 0x45, 0x89, 0x48, 0xa7, 0x8f, 0xea, 0x59, 0x50, 0xf0, + 0x25, 0xa5, 0x4c, 0x01, 0xb9, 0xda, 0x68, 0x16, 0x8f, 0x29, 0x33, 0x60, 0xaa, 0x64, 0x75, 0x1c, + 0xdb, 0xec, 0x14, 0x33, 0xe7, 0xa6, 0x40, 0x4e, 0xdb, 0xe9, 0x79, 0xfb, 0xe7, 0x1e, 0x09, 0xe6, + 0x9a, 0x9e, 0x03, 0x8d, 0x9d, 0x58, 0xdc, 0xee, 0xba, 0x13, 0x4c, 0x59, 0xf6, 0x86, 0xb1, 0xeb, + 0x6d, 0x2b, 0x37, 0x1c, 0xb0, 0x3a, 0xa8, 0xd6, 0x34, 0x68, 0x34, 0xce, 0xaf, 0xdf, 0x8d, 0x57, + 0x3a, 0xf2, 0x96, 0x5d, 0xda, 0xf5, 0xb6, 0x17, 0xaf, 0xff, 0xcc, 0x9f, 0x9d, 0xc9, 0x7c, 0xfe, + 0xcf, 0xce, 0x64, 0xbe, 0xf6, 0x67, 0x67, 0x32, 0x3f, 0xf5, 0x8d, 0x33, 0xc7, 0x3e, 0xff, 0x8d, + 0x33, 0xc7, 0xbe, 0xf4, 0x8d, 0x33, 0xc7, 0x7e, 0x58, 0xea, 0x5d, 0xba, 0x94, 0xc7, 0x54, 0x1e, + 0xf7, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x46, 0x98, 0x35, 0x86, 0x0f, 0x33, 0x02, 0x00, } func (m *Rpc) Marshal() (dAtA []byte, err error) { @@ -79317,6 +79297,11 @@ func (m *RpcSpaceInviteGenerateRequest) MarshalToSizedBuffer(dAtA []byte) (int, _ = i var l int _ = l + if m.Permissions != 0 { + i = encodeVarintCommands(dAtA, i, uint64(m.Permissions)) + i-- + dAtA[i] = 0x18 + } if m.InviteType != 0 { i = encodeVarintCommands(dAtA, i, uint64(m.InviteType)) i-- @@ -127134,6 +127119,9 @@ func (m *RpcSpaceInviteGenerateRequest) Size() (n int) { if m.InviteType != 0 { n += 1 + sovCommands(uint64(m.InviteType)) } + if m.Permissions != 0 { + n += 1 + sovCommands(uint64(m.Permissions)) + } return n } @@ -149194,7 +149182,26 @@ func (m *RpcSpaceInviteGenerateRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.InviteType |= RpcSpaceInviteGenerateRequestInviteType(b&0x7F) << shift + m.InviteType |= model.InviteType(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Permissions", wireType) + } + m.Permissions = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Permissions |= model.ParticipantPermissions(b&0x7F) << shift if b < 0x80 { break } diff --git a/pb/protos/commands.proto b/pb/protos/commands.proto index 4c8f0a804..cb74f2c7e 100644 --- a/pb/protos/commands.proto +++ b/pb/protos/commands.proto @@ -151,11 +151,8 @@ message Rpc { message InviteGenerate { message Request { string spaceId = 1; - InviteType inviteType = 2; - enum InviteType { - Member = 0; - Guest = 1; - } + model.InviteType inviteType = 2; + model.ParticipantPermissions permissions = 3; } message Response { diff --git a/pkg/lib/bundle/relation.gen.go b/pkg/lib/bundle/relation.gen.go index 2d477d4c7..5fd326ef6 100644 --- a/pkg/lib/bundle/relation.gen.go +++ b/pkg/lib/bundle/relation.gen.go @@ -9,7 +9,7 @@ import ( "github.com/anyproto/anytype-heart/pkg/lib/pb/model" ) -const RelationChecksum = "62a158a458a241cdf5b502bad800a109a8917ab9026826dd1274262c46b1f839" +const RelationChecksum = "6d49bc52d95b0a12e1cb6e301e5063d505f9023d75751f28d24fa82be15bada8" const ( RelationKeyTag domain.RelationKey = "tag" RelationKeyCamera domain.RelationKey = "camera" @@ -126,10 +126,12 @@ const ( RelationKeySpaceAccountStatus domain.RelationKey = "spaceAccountStatus" RelationKeySpaceInviteFileCid domain.RelationKey = "spaceInviteFileCid" RelationKeySpaceInviteFileKey domain.RelationKey = "spaceInviteFileKey" + RelationKeySpaceInviteType domain.RelationKey = "spaceInviteType" RelationKeySpaceInviteGuestFileCid domain.RelationKey = "spaceInviteGuestFileCid" RelationKeySpaceInviteGuestFileKey domain.RelationKey = "spaceInviteGuestFileKey" RelationKeyGuestKey domain.RelationKey = "guestKey" RelationKeyParticipantPermissions domain.RelationKey = "participantPermissions" + RelationKeySpaceInvitePermissions domain.RelationKey = "spaceInvitePermissions" RelationKeyIdentity domain.RelationKey = "identity" RelationKeyParticipantStatus domain.RelationKey = "participantStatus" RelationKeyIdentityProfileLink domain.RelationKey = "identityProfileLink" @@ -1880,6 +1882,34 @@ var ( ReadOnlyRelation: true, Scope: model.Relation_type, }, + RelationKeySpaceInvitePermissions: { + + DataSource: model.Relation_details, + Description: "Invite permissions. Possible values: models.ParticipantPermissions", + Format: model.RelationFormat_number, + Hidden: true, + Id: "_brspaceInvitePermissions", + Key: "spaceInvitePermissions", + MaxCount: 1, + Name: "Invite permissions", + ReadOnly: true, + ReadOnlyRelation: true, + Scope: model.Relation_type, + }, + RelationKeySpaceInviteType: { + + DataSource: model.Relation_details, + Description: "Encoded encryption key of invite file for current space. It stored in SpaceView", + Format: model.RelationFormat_number, + Hidden: true, + Id: "_brspaceInviteType", + Key: "spaceInviteType", + MaxCount: 1, + Name: "Invite type of space", + ReadOnly: true, + ReadOnlyRelation: true, + Scope: model.Relation_type, + }, RelationKeySpaceLocalStatus: { DataSource: model.Relation_derived, diff --git a/pkg/lib/bundle/relations.json b/pkg/lib/bundle/relations.json index c546db0c8..47984005a 100644 --- a/pkg/lib/bundle/relations.json +++ b/pkg/lib/bundle/relations.json @@ -1186,6 +1186,16 @@ "readonly": true, "source": "details" }, + { + "description": "Encoded encryption key of invite file for current space. It stored in SpaceView", + "format": "number", + "hidden": true, + "key": "spaceInviteType", + "maxCount": 1, + "name": "Invite type of space", + "readonly": true, + "source": "details" + }, { "description": "CID of invite file for for guest user in the current space. It's stored in SpaceView", "format": "shorttext", @@ -1226,6 +1236,16 @@ "readonly": true, "source": "details" }, + { + "description": "Invite permissions. Possible values: models.ParticipantPermissions", + "format": "number", + "hidden": true, + "key": "spaceInvitePermissions", + "maxCount": 1, + "name": "Invite permissions", + "readonly": true, + "source": "details" + }, { "description": "Identity", "format": "longtext", diff --git a/pkg/lib/bundle/systemRelations.gen.go b/pkg/lib/bundle/systemRelations.gen.go index 0d39d3299..49760d9aa 100644 --- a/pkg/lib/bundle/systemRelations.gen.go +++ b/pkg/lib/bundle/systemRelations.gen.go @@ -6,7 +6,7 @@ package bundle import domain "github.com/anyproto/anytype-heart/core/domain" -const SystemRelationsChecksum = "b4130174711023e6d6e5a235a0a2e89b6d266753029ee41b9767b2c4fbb7d124" +const SystemRelationsChecksum = "af284797af811e6407b681c954b49703ced09dc457560f7717b1bece1894e97f" // SystemRelations contains relations that have some special biz logic depends on them in some objects // in case EVERY object depend on the relation please add it to RequiredInternalRelations @@ -70,6 +70,8 @@ var SystemRelations = append(RequiredInternalRelations, []domain.RelationKey{ RelationKeySpaceAccessType, RelationKeySpaceInviteFileCid, RelationKeySpaceInviteFileKey, + RelationKeySpaceInviteType, + RelationKeySpaceInvitePermissions, RelationKeyReadersLimit, RelationKeyWritersLimit, RelationKeySharedSpacesLimit, diff --git a/pkg/lib/bundle/systemRelations.json b/pkg/lib/bundle/systemRelations.json index 947784ee7..fed17e523 100644 --- a/pkg/lib/bundle/systemRelations.json +++ b/pkg/lib/bundle/systemRelations.json @@ -75,6 +75,8 @@ "spaceAccessType", "spaceInviteFileCid", "spaceInviteFileKey", + "spaceInviteType", + "spaceInvitePermissions", "readersLimit", "writersLimit", "sharedSpacesLimit", diff --git a/pkg/lib/pb/model/models.pb.go b/pkg/lib/pb/model/models.pb.go index ce5e14db2..e4f07bd29 100644 --- a/pkg/lib/pb/model/models.pb.go +++ b/pkg/lib/pb/model/models.pb.go @@ -331,6 +331,34 @@ func (ParticipantPermissions) EnumDescriptor() ([]byte, []int) { return fileDescriptor_98a910b73321e591, []int{4} } +type InviteType int32 + +const ( + InviteType_Member InviteType = 0 + InviteType_Guest InviteType = 1 + InviteType_WithoutApprove InviteType = 2 +) + +var InviteType_name = map[int32]string{ + 0: "Member", + 1: "Guest", + 2: "WithoutApprove", +} + +var InviteType_value = map[string]int32{ + "Member": 0, + "Guest": 1, + "WithoutApprove": 2, +} + +func (x InviteType) String() string { + return proto.EnumName(InviteType_name, int32(x)) +} + +func (InviteType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_98a910b73321e591, []int{5} +} + type ParticipantStatus int32 const ( @@ -365,7 +393,7 @@ func (x ParticipantStatus) String() string { } func (ParticipantStatus) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_98a910b73321e591, []int{5} + return fileDescriptor_98a910b73321e591, []int{6} } type SpaceAccessType int32 @@ -393,7 +421,7 @@ func (x SpaceAccessType) String() string { } func (SpaceAccessType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_98a910b73321e591, []int{6} + return fileDescriptor_98a910b73321e591, []int{7} } type SpaceUxType int32 @@ -421,7 +449,7 @@ func (x SpaceUxType) String() string { } func (SpaceUxType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_98a910b73321e591, []int{7} + return fileDescriptor_98a910b73321e591, []int{8} } type ImageKind int32 @@ -452,7 +480,7 @@ func (x ImageKind) String() string { } func (ImageKind) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_98a910b73321e591, []int{8} + return fileDescriptor_98a910b73321e591, []int{9} } type FileIndexingStatus int32 @@ -480,7 +508,7 @@ func (x FileIndexingStatus) String() string { } func (FileIndexingStatus) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_98a910b73321e591, []int{9} + return fileDescriptor_98a910b73321e591, []int{10} } type SpaceShareableStatus int32 @@ -508,7 +536,7 @@ func (x SpaceShareableStatus) String() string { } func (SpaceShareableStatus) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_98a910b73321e591, []int{10} + return fileDescriptor_98a910b73321e591, []int{11} } type NameserviceNameType int32 @@ -531,7 +559,7 @@ func (x NameserviceNameType) String() string { } func (NameserviceNameType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_98a910b73321e591, []int{11} + return fileDescriptor_98a910b73321e591, []int{12} } type DeviceNetworkType int32 @@ -559,7 +587,7 @@ func (x DeviceNetworkType) String() string { } func (DeviceNetworkType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_98a910b73321e591, []int{12} + return fileDescriptor_98a910b73321e591, []int{13} } type BlockPosition int32 @@ -9686,6 +9714,7 @@ func init() { proto.RegisterEnum("anytype.model.ObjectOrigin", ObjectOrigin_name, ObjectOrigin_value) proto.RegisterEnum("anytype.model.SpaceStatus", SpaceStatus_name, SpaceStatus_value) proto.RegisterEnum("anytype.model.ParticipantPermissions", ParticipantPermissions_name, ParticipantPermissions_value) + proto.RegisterEnum("anytype.model.InviteType", InviteType_name, InviteType_value) proto.RegisterEnum("anytype.model.ParticipantStatus", ParticipantStatus_name, ParticipantStatus_value) proto.RegisterEnum("anytype.model.SpaceAccessType", SpaceAccessType_name, SpaceAccessType_value) proto.RegisterEnum("anytype.model.SpaceUxType", SpaceUxType_name, SpaceUxType_value) @@ -9850,587 +9879,588 @@ func init() { } var fileDescriptor_98a910b73321e591 = []byte{ - // 9265 bytes of a gzipped FileDescriptorProto + // 9285 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x7d, 0x5b, 0x6c, 0x63, 0xd9, 0x91, 0x98, 0xf8, 0x26, 0x8b, 0xa2, 0x74, 0x74, 0xfa, 0x45, 0xd3, 0xbd, 0x9d, 0x36, 0x3d, 0x9e, - 0x69, 0xb7, 0xc7, 0xea, 0x99, 0x9e, 0x19, 0xcf, 0x78, 0xec, 0x19, 0x9b, 0xa2, 0xa8, 0x16, 0xa7, - 0x25, 0x51, 0xbe, 0x64, 0x77, 0x7b, 0x06, 0xbb, 0x51, 0xae, 0x78, 0x8f, 0xc8, 0x6b, 0x5d, 0xde, - 0x4b, 0xdf, 0x7b, 0xa8, 0x96, 0x06, 0x49, 0xe0, 0xbc, 0x76, 0xb3, 0x7f, 0x4e, 0x90, 0xcd, 0x66, - 0x11, 0x04, 0x6b, 0x7f, 0x04, 0x08, 0xb2, 0x1b, 0xe4, 0x6b, 0x91, 0x6c, 0x1e, 0x40, 0xb2, 0x5f, - 0x01, 0xf6, 0xc7, 0xc9, 0x57, 0x80, 0x04, 0x48, 0xe2, 0x01, 0xf2, 0x13, 0x24, 0xc1, 0xe6, 0xcb, - 0x08, 0xf2, 0x11, 0x54, 0x9d, 0x73, 0x1f, 0x7c, 0x48, 0xcd, 0x9e, 0xdd, 0x0d, 0xf2, 0x25, 0x56, - 0xdd, 0xaa, 0xba, 0xe7, 0x51, 0xa7, 0x4e, 0x55, 0x9d, 0x3a, 0x57, 0xf0, 0xca, 0xf8, 0x74, 0xf0, - 0xc0, 0xb1, 0x8f, 0x1f, 0x8c, 0x8f, 0x1f, 0x8c, 0x3c, 0x4b, 0x38, 0x0f, 0xc6, 0xbe, 0x27, 0xbd, - 0x40, 0x01, 0xc1, 0x26, 0x41, 0xbc, 0x62, 0xba, 0x17, 0xf2, 0x62, 0x2c, 0x36, 0x09, 0x5b, 0xbb, - 0x3d, 0xf0, 0xbc, 0x81, 0x23, 0x14, 0xe9, 0xf1, 0xe4, 0xe4, 0x41, 0x20, 0xfd, 0x49, 0x5f, 0x2a, - 0xe2, 0xfa, 0xcf, 0xb2, 0x70, 0xb3, 0x3b, 0x32, 0x7d, 0xb9, 0xe5, 0x78, 0xfd, 0xd3, 0xae, 0x6b, - 0x8e, 0x83, 0xa1, 0x27, 0xb7, 0xcc, 0x40, 0xf0, 0xd7, 0x21, 0x7f, 0x8c, 0xc8, 0xa0, 0x9a, 0xba, - 0x9b, 0xb9, 0x57, 0x7e, 0x78, 0x7d, 0x73, 0x4a, 0xf0, 0x26, 0x71, 0x18, 0x9a, 0x86, 0xbf, 0x09, - 0x05, 0x4b, 0x48, 0xd3, 0x76, 0x82, 0x6a, 0xfa, 0x6e, 0xea, 0x5e, 0xf9, 0xe1, 0xad, 0x4d, 0xf5, - 0xe2, 0xcd, 0xf0, 0xc5, 0x9b, 0x5d, 0x7a, 0xb1, 0x11, 0xd2, 0xf1, 0x77, 0xa1, 0x78, 0x62, 0x3b, - 0xe2, 0xb1, 0xb8, 0x08, 0xaa, 0x99, 0x2b, 0x79, 0xb6, 0xd2, 0xd5, 0x94, 0x11, 0x11, 0xf3, 0x26, - 0xac, 0x89, 0x73, 0xe9, 0x9b, 0x86, 0x70, 0x4c, 0x69, 0x7b, 0x6e, 0x50, 0xcd, 0x52, 0x0b, 0x6f, - 0xcd, 0xb4, 0x30, 0x7c, 0x4e, 0xec, 0x33, 0x2c, 0xfc, 0x2e, 0x94, 0xbd, 0xe3, 0x1f, 0x88, 0xbe, - 0xec, 0x5d, 0x8c, 0x45, 0x50, 0xcd, 0xdd, 0xcd, 0xdc, 0x2b, 0x19, 0x49, 0x14, 0xff, 0x26, 0x94, - 0xfb, 0x9e, 0xe3, 0x88, 0xbe, 0x7a, 0x47, 0xfe, 0xea, 0x6e, 0x25, 0x69, 0xf9, 0xdb, 0x70, 0xc3, - 0x17, 0x23, 0xef, 0x4c, 0x58, 0xcd, 0x08, 0x4b, 0xfd, 0x2c, 0xd2, 0x6b, 0x16, 0x3f, 0xe4, 0x0d, - 0xa8, 0xf8, 0xba, 0x7d, 0x7b, 0xb6, 0x7b, 0x1a, 0x54, 0x0b, 0xd4, 0xad, 0x2f, 0x5e, 0xd2, 0x2d, - 0xa4, 0x31, 0xa6, 0x39, 0x38, 0x83, 0xcc, 0xa9, 0xb8, 0xa8, 0x96, 0xee, 0xa6, 0xee, 0x95, 0x0c, - 0xfc, 0xc9, 0xdf, 0x87, 0xaa, 0xe7, 0xdb, 0x03, 0xdb, 0x35, 0x9d, 0xa6, 0x2f, 0x4c, 0x29, 0xac, - 0x9e, 0x3d, 0x12, 0x81, 0x34, 0x47, 0xe3, 0x2a, 0xdc, 0x4d, 0xdd, 0xcb, 0x18, 0x97, 0x3e, 0xe7, - 0x6f, 0xa9, 0x19, 0x6a, 0xbb, 0x27, 0x5e, 0xb5, 0xac, 0xbb, 0x3f, 0xdd, 0x96, 0x1d, 0xfd, 0xd8, - 0x88, 0x08, 0xeb, 0xbf, 0x48, 0x43, 0xbe, 0x2b, 0x4c, 0xbf, 0x3f, 0xac, 0xfd, 0x5a, 0x0a, 0xf2, - 0x86, 0x08, 0x26, 0x8e, 0xe4, 0x35, 0x28, 0xaa, 0xb1, 0x6d, 0x5b, 0xd5, 0x14, 0xb5, 0x2e, 0x82, - 0x3f, 0x8f, 0xee, 0x6c, 0x42, 0x76, 0x24, 0xa4, 0x59, 0xcd, 0xd0, 0x08, 0xd5, 0x66, 0x5a, 0xa5, - 0x5e, 0xbf, 0xb9, 0x2f, 0xa4, 0x69, 0x10, 0x5d, 0xed, 0xb3, 0x14, 0x64, 0x11, 0xe4, 0xb7, 0xa1, - 0x34, 0xb4, 0x07, 0x43, 0xc7, 0x1e, 0x0c, 0xa5, 0x6e, 0x48, 0x8c, 0xe0, 0x1f, 0xc2, 0x7a, 0x04, - 0x18, 0xa6, 0x3b, 0x10, 0xd8, 0xa2, 0x45, 0xca, 0x4f, 0x0f, 0x8d, 0x59, 0x62, 0x5e, 0x85, 0x02, - 0xad, 0x87, 0xb6, 0x45, 0x1a, 0x5d, 0x32, 0x42, 0x10, 0xd5, 0x2d, 0x9c, 0xa9, 0xc7, 0xe2, 0xa2, - 0x9a, 0xa5, 0xa7, 0x49, 0x14, 0x6f, 0xc0, 0x7a, 0x08, 0x6e, 0xeb, 0xd1, 0xc8, 0x5d, 0x3d, 0x1a, - 0xb3, 0xf4, 0xf5, 0x1f, 0xed, 0x43, 0x8e, 0x96, 0x25, 0x5f, 0x83, 0xb4, 0x1d, 0x0e, 0x74, 0xda, - 0xb6, 0xf8, 0x03, 0xc8, 0x9f, 0xd8, 0xc2, 0xb1, 0x5e, 0x38, 0xc2, 0x9a, 0x8c, 0xb7, 0x60, 0xd5, - 0x17, 0x81, 0xf4, 0x6d, 0xad, 0xfd, 0x6a, 0x81, 0x7e, 0x69, 0x91, 0x0d, 0xd8, 0x34, 0x12, 0x84, - 0xc6, 0x14, 0x1b, 0x76, 0xbb, 0x3f, 0xb4, 0x1d, 0xcb, 0x17, 0x6e, 0xdb, 0x52, 0xeb, 0xb4, 0x64, - 0x24, 0x51, 0xfc, 0x1e, 0xac, 0x1f, 0x9b, 0xfd, 0xd3, 0x81, 0xef, 0x4d, 0x5c, 0x5c, 0x10, 0x9e, - 0x4f, 0xdd, 0x2e, 0x19, 0xb3, 0x68, 0xfe, 0x06, 0xe4, 0x4c, 0xc7, 0x1e, 0xb8, 0xb4, 0x12, 0xd7, - 0xe6, 0x26, 0x5d, 0xb5, 0xa5, 0x81, 0x14, 0x86, 0x22, 0xe4, 0xbb, 0x50, 0x39, 0x13, 0xbe, 0xb4, - 0xfb, 0xa6, 0x43, 0xf8, 0x6a, 0x81, 0x38, 0xeb, 0x0b, 0x39, 0x9f, 0x26, 0x29, 0x8d, 0x69, 0x46, - 0xde, 0x06, 0x08, 0xd0, 0x4c, 0xd2, 0x74, 0xea, 0xb5, 0xf0, 0xda, 0x42, 0x31, 0x4d, 0xcf, 0x95, - 0xc2, 0x95, 0x9b, 0xdd, 0x88, 0x7c, 0x77, 0xc5, 0x48, 0x30, 0xf3, 0x77, 0x21, 0x2b, 0xc5, 0xb9, - 0xac, 0xae, 0x5d, 0x31, 0xa2, 0xa1, 0x90, 0x9e, 0x38, 0x97, 0xbb, 0x2b, 0x06, 0x31, 0x20, 0x23, - 0x2e, 0xb2, 0xea, 0xfa, 0x12, 0x8c, 0xb8, 0x2e, 0x91, 0x11, 0x19, 0xf8, 0x07, 0x90, 0x77, 0xcc, - 0x0b, 0x6f, 0x22, 0xab, 0x8c, 0x58, 0xbf, 0x7c, 0x25, 0xeb, 0x1e, 0x91, 0xee, 0xae, 0x18, 0x9a, - 0x89, 0xbf, 0x0d, 0x19, 0xcb, 0x3e, 0xab, 0x6e, 0x10, 0xef, 0xdd, 0x2b, 0x79, 0xb7, 0xed, 0xb3, - 0xdd, 0x15, 0x03, 0xc9, 0x79, 0x13, 0x8a, 0xc7, 0x9e, 0x77, 0x3a, 0x32, 0xfd, 0xd3, 0x2a, 0x27, - 0xd6, 0xaf, 0x5c, 0xc9, 0xba, 0xa5, 0x89, 0x77, 0x57, 0x8c, 0x88, 0x11, 0xbb, 0x6c, 0xf7, 0x3d, - 0xb7, 0x7a, 0x6d, 0x89, 0x2e, 0xb7, 0xfb, 0x9e, 0x8b, 0x5d, 0x46, 0x06, 0x64, 0x74, 0x6c, 0xf7, - 0xb4, 0x7a, 0x7d, 0x09, 0x46, 0xb4, 0x9c, 0xc8, 0x88, 0x0c, 0xd8, 0x6c, 0xcb, 0x94, 0xe6, 0x99, - 0x2d, 0x9e, 0x57, 0x6f, 0x2c, 0xd1, 0xec, 0x6d, 0x4d, 0x8c, 0xcd, 0x0e, 0x19, 0x51, 0x48, 0xb8, - 0x34, 0xab, 0x37, 0x97, 0x10, 0x12, 0x5a, 0x74, 0x14, 0x12, 0x32, 0xf2, 0x3f, 0x0b, 0x1b, 0x27, - 0xc2, 0x94, 0x13, 0x5f, 0x58, 0xf1, 0x46, 0x77, 0x8b, 0xa4, 0x6d, 0x5e, 0x3d, 0xf7, 0xb3, 0x5c, - 0xbb, 0x2b, 0xc6, 0xbc, 0x28, 0xfe, 0x3e, 0xe4, 0x1c, 0x53, 0x8a, 0xf3, 0x6a, 0x95, 0x64, 0xd6, - 0x5f, 0xa0, 0x14, 0x52, 0x9c, 0xef, 0xae, 0x18, 0x8a, 0x85, 0x7f, 0x1f, 0xd6, 0xa5, 0x79, 0xec, - 0x88, 0xce, 0x89, 0x26, 0x08, 0xaa, 0x5f, 0x20, 0x29, 0xaf, 0x5f, 0xad, 0xce, 0xd3, 0x3c, 0xbb, - 0x2b, 0xc6, 0xac, 0x18, 0x6c, 0x15, 0xa1, 0xaa, 0xb5, 0x25, 0x5a, 0x45, 0xf2, 0xb0, 0x55, 0xc4, - 0xc2, 0xf7, 0xa0, 0x4c, 0x3f, 0x9a, 0x9e, 0x33, 0x19, 0xb9, 0xd5, 0x2f, 0x92, 0x84, 0x7b, 0x2f, - 0x96, 0xa0, 0xe8, 0x77, 0x57, 0x8c, 0x24, 0x3b, 0x4e, 0x22, 0x81, 0x86, 0xf7, 0xbc, 0x7a, 0x7b, - 0x89, 0x49, 0xec, 0x69, 0x62, 0x9c, 0xc4, 0x90, 0x11, 0x97, 0xde, 0x73, 0xdb, 0x1a, 0x08, 0x59, - 0xfd, 0xa5, 0x25, 0x96, 0xde, 0x33, 0x22, 0xc5, 0xa5, 0xa7, 0x98, 0x50, 0x8d, 0xfb, 0x43, 0x53, - 0x56, 0xef, 0x2c, 0xa1, 0xc6, 0xcd, 0xa1, 0x49, 0xb6, 0x02, 0x19, 0x6a, 0x9f, 0xc2, 0x6a, 0xd2, - 0x2a, 0x73, 0x0e, 0x59, 0x5f, 0x98, 0x6a, 0x47, 0x28, 0x1a, 0xf4, 0x1b, 0x71, 0xc2, 0xb2, 0x25, - 0xed, 0x08, 0x45, 0x83, 0x7e, 0xf3, 0x9b, 0x90, 0x57, 0xbe, 0x09, 0x19, 0xfc, 0xa2, 0xa1, 0x21, - 0xa4, 0xb5, 0x7c, 0x73, 0x40, 0xfb, 0x56, 0xd1, 0xa0, 0xdf, 0x48, 0x6b, 0xf9, 0xde, 0xb8, 0xe3, - 0x92, 0xc1, 0x2e, 0x1a, 0x1a, 0xaa, 0x7d, 0xf6, 0x01, 0x14, 0x74, 0xa3, 0x6a, 0x7f, 0x2f, 0x05, - 0x79, 0x65, 0x50, 0xf8, 0x77, 0x20, 0x17, 0xc8, 0x0b, 0x47, 0x50, 0x1b, 0xd6, 0x1e, 0x7e, 0x75, - 0x09, 0x23, 0xb4, 0xd9, 0x45, 0x06, 0x43, 0xf1, 0xd5, 0x0d, 0xc8, 0x11, 0xcc, 0x0b, 0x90, 0x31, - 0xbc, 0xe7, 0x6c, 0x85, 0x03, 0xe4, 0xd5, 0x64, 0xb1, 0x14, 0x22, 0xb7, 0xed, 0x33, 0x96, 0x46, - 0xe4, 0xae, 0x30, 0x2d, 0xe1, 0xb3, 0x0c, 0xaf, 0x40, 0x29, 0x9c, 0x96, 0x80, 0x65, 0x39, 0x83, - 0xd5, 0xc4, 0x84, 0x07, 0x2c, 0x57, 0xfb, 0x5f, 0x59, 0xc8, 0xe2, 0xfa, 0xe7, 0xaf, 0x40, 0x45, - 0x9a, 0xfe, 0x40, 0x28, 0x47, 0x38, 0x72, 0x52, 0xa6, 0x91, 0xfc, 0x83, 0xb0, 0x0f, 0x69, 0xea, - 0xc3, 0x6b, 0x2f, 0xb4, 0x2b, 0x53, 0x3d, 0x48, 0xec, 0xc2, 0x99, 0xe5, 0x76, 0xe1, 0x1d, 0x28, - 0xa2, 0x39, 0xeb, 0xda, 0x9f, 0x0a, 0x1a, 0xfa, 0xb5, 0x87, 0xf7, 0x5f, 0xfc, 0xca, 0xb6, 0xe6, - 0x30, 0x22, 0x5e, 0xde, 0x86, 0x52, 0xdf, 0xf4, 0x2d, 0x6a, 0x0c, 0xcd, 0xd6, 0xda, 0xc3, 0xaf, - 0xbd, 0x58, 0x50, 0x33, 0x64, 0x31, 0x62, 0x6e, 0xde, 0x81, 0xb2, 0x25, 0x82, 0xbe, 0x6f, 0x8f, - 0xc9, 0xbc, 0xa9, 0xbd, 0xf8, 0xeb, 0x2f, 0x16, 0xb6, 0x1d, 0x33, 0x19, 0x49, 0x09, 0xe8, 0x91, - 0xf9, 0x91, 0x7d, 0x2b, 0x90, 0x83, 0x10, 0x23, 0xea, 0xef, 0x42, 0x31, 0xec, 0x0f, 0x5f, 0x85, - 0x22, 0xfe, 0x3d, 0xf0, 0x5c, 0xc1, 0x56, 0x70, 0x6e, 0x11, 0xea, 0x8e, 0x4c, 0xc7, 0x61, 0x29, - 0xbe, 0x06, 0x80, 0xe0, 0xbe, 0xb0, 0xec, 0xc9, 0x88, 0xa5, 0xeb, 0xdf, 0x0a, 0xb5, 0xa5, 0x08, - 0xd9, 0x43, 0x73, 0x80, 0x1c, 0xab, 0x50, 0x0c, 0xcd, 0x35, 0x4b, 0x21, 0xff, 0xb6, 0x19, 0x0c, - 0x8f, 0x3d, 0xd3, 0xb7, 0x58, 0x9a, 0x97, 0xa1, 0xd0, 0xf0, 0xfb, 0x43, 0xfb, 0x4c, 0xb0, 0x4c, - 0xfd, 0x01, 0x94, 0x13, 0xed, 0x45, 0x11, 0xfa, 0xa5, 0x25, 0xc8, 0x35, 0x2c, 0x4b, 0x58, 0x2c, - 0x85, 0x0c, 0xba, 0x83, 0x2c, 0x5d, 0xff, 0x1a, 0x94, 0xa2, 0xd1, 0x42, 0x72, 0xdc, 0xb8, 0xd9, - 0x0a, 0xfe, 0x42, 0x34, 0x4b, 0xa1, 0x56, 0xb6, 0x5d, 0xc7, 0x76, 0x05, 0x4b, 0xd7, 0xfe, 0x1c, - 0xa9, 0x2a, 0xff, 0xf6, 0xf4, 0x82, 0x78, 0xf5, 0x45, 0x3b, 0xeb, 0xf4, 0x6a, 0xf8, 0x62, 0xa2, - 0x7f, 0x7b, 0x36, 0x35, 0xae, 0x08, 0xd9, 0x6d, 0x4f, 0x06, 0x2c, 0x55, 0xfb, 0x6f, 0x69, 0x28, - 0x86, 0x1b, 0x2a, 0xc6, 0x04, 0x13, 0xdf, 0xd1, 0x0a, 0x8d, 0x3f, 0xf9, 0x75, 0xc8, 0x49, 0x5b, - 0x6a, 0x35, 0x2e, 0x19, 0x0a, 0x40, 0x5f, 0x2d, 0x39, 0xb3, 0xca, 0x81, 0x9d, 0x9d, 0x2a, 0x7b, - 0x64, 0x0e, 0xc4, 0xae, 0x19, 0x0c, 0xb5, 0x0b, 0x1b, 0x23, 0x90, 0xff, 0xc4, 0x3c, 0x43, 0x9d, - 0xa3, 0xe7, 0xca, 0x8b, 0x4b, 0xa2, 0xf8, 0x5b, 0x90, 0xc5, 0x0e, 0x6a, 0xa5, 0xf9, 0x33, 0x33, - 0x1d, 0x46, 0x35, 0x39, 0xf4, 0x05, 0x4e, 0xcf, 0x26, 0x46, 0x60, 0x06, 0x11, 0xf3, 0x57, 0x61, - 0x4d, 0x2d, 0xc2, 0x4e, 0x18, 0x3f, 0x14, 0x48, 0xf2, 0x0c, 0x96, 0x37, 0x70, 0x38, 0x4d, 0x29, - 0xaa, 0xc5, 0x25, 0xf4, 0x3b, 0x1c, 0x9c, 0xcd, 0x2e, 0xb2, 0x18, 0x8a, 0xb3, 0xfe, 0x0e, 0x8e, - 0xa9, 0x29, 0x05, 0x4e, 0x73, 0x6b, 0x34, 0x96, 0x17, 0x4a, 0x69, 0x76, 0x84, 0xec, 0x0f, 0x6d, - 0x77, 0xc0, 0x52, 0x6a, 0x88, 0x71, 0x12, 0x89, 0xc4, 0xf7, 0x3d, 0x9f, 0x65, 0x6a, 0x35, 0xc8, - 0xa2, 0x8e, 0xa2, 0x91, 0x74, 0xcd, 0x91, 0xd0, 0x23, 0x4d, 0xbf, 0x6b, 0xd7, 0x60, 0x63, 0x6e, - 0x3f, 0xae, 0xfd, 0x7e, 0x5e, 0x69, 0x08, 0x72, 0x90, 0x2f, 0xa8, 0x39, 0xc8, 0xcd, 0x7b, 0x29, - 0x1b, 0x83, 0x52, 0xa6, 0x6d, 0xcc, 0x07, 0x90, 0xc3, 0x8e, 0x85, 0x26, 0x66, 0x09, 0xf6, 0x7d, - 0x24, 0x37, 0x14, 0x17, 0x46, 0x30, 0xfd, 0xa1, 0xe8, 0x9f, 0x0a, 0x4b, 0xdb, 0xfa, 0x10, 0x44, - 0xa5, 0xe9, 0x27, 0xdc, 0x73, 0x05, 0x90, 0x4a, 0xf4, 0x3d, 0xb7, 0x35, 0xf2, 0x7e, 0x60, 0xd3, - 0xbc, 0xa2, 0x4a, 0x84, 0x88, 0xf0, 0x69, 0x1b, 0x75, 0x44, 0x4f, 0x5b, 0x8c, 0xa8, 0xb5, 0x20, - 0x47, 0xef, 0xc6, 0x95, 0xa0, 0xda, 0xac, 0x32, 0x0d, 0xaf, 0x2e, 0xd7, 0x66, 0xdd, 0xe4, 0xda, - 0xef, 0xa6, 0x21, 0x8b, 0x30, 0xbf, 0x0f, 0x39, 0x1f, 0xe3, 0x30, 0x1a, 0xce, 0xcb, 0x62, 0x36, - 0x45, 0xc2, 0xbf, 0xa3, 0x55, 0x31, 0xbd, 0x84, 0xb2, 0x44, 0x6f, 0x4c, 0xaa, 0xe5, 0x75, 0xc8, - 0x8d, 0x4d, 0xdf, 0x1c, 0xe9, 0x75, 0xa2, 0x80, 0xfa, 0x4f, 0x52, 0x90, 0x45, 0x22, 0xbe, 0x01, - 0x95, 0xae, 0xf4, 0xed, 0x53, 0x21, 0x87, 0xbe, 0x37, 0x19, 0x0c, 0x95, 0x26, 0x3d, 0x16, 0x17, - 0xca, 0xde, 0x28, 0x83, 0x20, 0x4d, 0xc7, 0xee, 0xb3, 0x34, 0x6a, 0xd5, 0x96, 0xe7, 0x58, 0x2c, - 0xc3, 0xd7, 0xa1, 0xfc, 0xc4, 0xb5, 0x84, 0x1f, 0xf4, 0x3d, 0x5f, 0x58, 0x2c, 0xab, 0x57, 0xf7, - 0x29, 0xcb, 0xd1, 0x5e, 0x26, 0xce, 0x25, 0xc5, 0x42, 0x2c, 0xcf, 0xaf, 0xc1, 0xfa, 0xd6, 0x74, - 0x80, 0xc4, 0x0a, 0x68, 0x93, 0xf6, 0x85, 0x8b, 0x4a, 0xc6, 0x8a, 0x4a, 0x89, 0xbd, 0x1f, 0xd8, - 0xac, 0x84, 0x2f, 0x53, 0xeb, 0x84, 0x41, 0xfd, 0x5f, 0xa4, 0x42, 0xcb, 0x51, 0x81, 0xd2, 0xa1, - 0xe9, 0x9b, 0x03, 0xdf, 0x1c, 0x63, 0xfb, 0xca, 0x50, 0x50, 0x1b, 0xe7, 0x9b, 0xca, 0xba, 0x29, - 0xe0, 0xa1, 0xb2, 0x8d, 0x0a, 0x78, 0x8b, 0x65, 0x62, 0xe0, 0x6d, 0x96, 0xc5, 0x77, 0x7c, 0x6f, - 0xe2, 0x49, 0xc1, 0x72, 0x64, 0xeb, 0x3c, 0x4b, 0xb0, 0x3c, 0x22, 0x7b, 0x68, 0x51, 0x58, 0x01, - 0xfb, 0xdc, 0x44, 0xfd, 0x39, 0xf6, 0xce, 0x59, 0x11, 0x9b, 0x81, 0xc3, 0x28, 0x2c, 0x56, 0xc2, - 0x27, 0x07, 0x93, 0xd1, 0xb1, 0xc0, 0x6e, 0x02, 0x3e, 0xe9, 0x79, 0x83, 0x81, 0x23, 0x58, 0x19, - 0xc7, 0x20, 0x61, 0x7c, 0xd9, 0x2a, 0x59, 0x5a, 0xd3, 0x71, 0xbc, 0x89, 0x64, 0x95, 0xda, 0x2f, - 0x32, 0x90, 0xc5, 0xe8, 0x06, 0xd7, 0xce, 0x10, 0xed, 0x8c, 0x5e, 0x3b, 0xf8, 0x3b, 0x5a, 0x81, - 0xe9, 0x78, 0x05, 0xf2, 0xf7, 0xf5, 0x4c, 0x67, 0x96, 0xb0, 0xb2, 0x28, 0x38, 0x39, 0xc9, 0x1c, - 0xb2, 0x23, 0x7b, 0x24, 0xb4, 0xad, 0xa3, 0xdf, 0x88, 0x0b, 0x70, 0x3f, 0xce, 0x51, 0xf2, 0x84, - 0x7e, 0xe3, 0xaa, 0x31, 0x71, 0x5b, 0x68, 0x48, 0x5a, 0x03, 0x19, 0x23, 0x04, 0x17, 0x58, 0xaf, - 0xd2, 0x42, 0xeb, 0xf5, 0x41, 0x68, 0xbd, 0x0a, 0x4b, 0xac, 0x7a, 0x6a, 0x66, 0xd2, 0x72, 0xc5, - 0x46, 0xa3, 0xb8, 0x3c, 0x7b, 0x62, 0x33, 0xd9, 0xd6, 0x5a, 0x1b, 0x6f, 0x74, 0x45, 0x35, 0xca, - 0x2c, 0x85, 0xb3, 0x49, 0xcb, 0x55, 0xd9, 0xbc, 0xa7, 0xb6, 0x25, 0x3c, 0x96, 0xa1, 0x8d, 0x70, - 0x62, 0xd9, 0x1e, 0xcb, 0xa2, 0xe7, 0x75, 0xb8, 0xbd, 0xc3, 0x72, 0xf5, 0x57, 0x13, 0x5b, 0x52, - 0x63, 0x22, 0x3d, 0x25, 0x86, 0xd4, 0x37, 0xa5, 0xb4, 0xf1, 0x58, 0x58, 0x2c, 0x5d, 0xff, 0xc6, - 0x02, 0x33, 0x5b, 0x81, 0xd2, 0x93, 0xb1, 0xe3, 0x99, 0xd6, 0x15, 0x76, 0x76, 0x15, 0x20, 0x8e, - 0xaa, 0x6b, 0xbf, 0xa8, 0xc7, 0xdb, 0x39, 0xfa, 0xa2, 0x81, 0x37, 0xf1, 0xfb, 0x82, 0x4c, 0x48, - 0xc9, 0xd0, 0x10, 0xff, 0x2e, 0xe4, 0xf0, 0x79, 0x98, 0xc6, 0xb9, 0xbf, 0x54, 0x2c, 0xb7, 0xf9, - 0xd4, 0x16, 0xcf, 0x0d, 0xc5, 0xc8, 0xef, 0x00, 0x98, 0x7d, 0x69, 0x9f, 0x09, 0x44, 0xea, 0xc5, - 0x9e, 0xc0, 0xf0, 0x77, 0x92, 0xee, 0xcb, 0xd5, 0x79, 0xc8, 0x84, 0x5f, 0xc3, 0x0d, 0x28, 0xe3, - 0xd2, 0x1d, 0x77, 0x7c, 0x5c, 0xed, 0xd5, 0x55, 0x62, 0x7c, 0x63, 0xb9, 0xe6, 0x3d, 0x8a, 0x18, - 0x8d, 0xa4, 0x10, 0xfe, 0x04, 0x56, 0x55, 0x4e, 0x4d, 0x0b, 0xad, 0x90, 0xd0, 0x37, 0x97, 0x13, - 0xda, 0x89, 0x39, 0x8d, 0x29, 0x31, 0xf3, 0x69, 0xc9, 0xdc, 0x4b, 0xa7, 0x25, 0x5f, 0x85, 0xb5, - 0xde, 0xf4, 0x2a, 0x50, 0x5b, 0xc5, 0x0c, 0x96, 0xd7, 0x61, 0xd5, 0x0e, 0xe2, 0xac, 0x28, 0xe5, - 0x48, 0x8a, 0xc6, 0x14, 0xae, 0xf6, 0x6f, 0xf3, 0x90, 0xa5, 0x91, 0x9f, 0xcd, 0x71, 0x35, 0xa7, - 0x4c, 0xfa, 0x83, 0xe5, 0xa7, 0x7a, 0x66, 0xc5, 0x93, 0x05, 0xc9, 0x24, 0x2c, 0xc8, 0x77, 0x21, - 0x17, 0x78, 0xbe, 0x0c, 0xa7, 0x77, 0x49, 0x25, 0xea, 0x7a, 0xbe, 0x34, 0x14, 0x23, 0xdf, 0x81, - 0xc2, 0x89, 0xed, 0x48, 0x9c, 0x14, 0x35, 0x78, 0xaf, 0x2f, 0x27, 0x63, 0x87, 0x98, 0x8c, 0x90, - 0x99, 0xef, 0x25, 0x95, 0x2d, 0x4f, 0x92, 0x36, 0x97, 0x93, 0xb4, 0x48, 0x07, 0xef, 0x03, 0xeb, - 0x7b, 0x67, 0xc2, 0x37, 0x12, 0x89, 0x49, 0xb5, 0x49, 0xcf, 0xe1, 0x79, 0x0d, 0x8a, 0x43, 0xdb, - 0x12, 0xe8, 0xe7, 0x90, 0x8d, 0x29, 0x1a, 0x11, 0xcc, 0x1f, 0x43, 0x91, 0xe2, 0x03, 0xb4, 0x8a, - 0xa5, 0x97, 0x1e, 0x7c, 0x15, 0xaa, 0x84, 0x02, 0xf0, 0x45, 0xf4, 0xf2, 0x1d, 0x5b, 0x52, 0x7e, - 0xba, 0x68, 0x44, 0x30, 0x36, 0x98, 0xf4, 0x3d, 0xd9, 0xe0, 0xb2, 0x6a, 0xf0, 0x2c, 0x9e, 0xbf, - 0x0d, 0x37, 0x08, 0x37, 0xb3, 0x49, 0xe2, 0x52, 0x43, 0xa1, 0x8b, 0x1f, 0xa2, 0xc3, 0x32, 0x36, - 0x07, 0x62, 0xcf, 0x1e, 0xd9, 0xb2, 0x5a, 0xb9, 0x9b, 0xba, 0x97, 0x33, 0x62, 0x04, 0x7f, 0x1d, - 0x36, 0x2c, 0x71, 0x62, 0x4e, 0x1c, 0xd9, 0x13, 0xa3, 0xb1, 0x63, 0x4a, 0xd1, 0xb6, 0x48, 0x47, - 0x4b, 0xc6, 0xfc, 0x03, 0xfe, 0x06, 0x5c, 0xd3, 0xc8, 0x4e, 0x74, 0xaa, 0xd0, 0xb6, 0x28, 0x7d, - 0x57, 0x32, 0x16, 0x3d, 0xaa, 0xef, 0x6b, 0x33, 0x8c, 0x1b, 0x28, 0xc6, 0xa9, 0xa1, 0x01, 0x0d, - 0xa4, 0xda, 0x91, 0x1f, 0x99, 0x8e, 0x23, 0xfc, 0x0b, 0x15, 0xe4, 0x3e, 0x36, 0xdd, 0x63, 0xd3, - 0x65, 0x19, 0xda, 0x63, 0x4d, 0x47, 0xb8, 0x96, 0xe9, 0xab, 0x1d, 0xf9, 0x11, 0x6d, 0xe8, 0xb9, - 0xfa, 0x3d, 0xc8, 0xd2, 0x90, 0x96, 0x20, 0xa7, 0xa2, 0x24, 0x8a, 0x98, 0x75, 0x84, 0x44, 0x16, - 0x79, 0x0f, 0x97, 0x1f, 0x4b, 0xd7, 0xfe, 0x7e, 0x1e, 0x8a, 0xe1, 0xe0, 0x85, 0x67, 0x08, 0xa9, - 0xf8, 0x0c, 0x01, 0xdd, 0xb8, 0xe0, 0xa9, 0x1d, 0xd8, 0xc7, 0xda, 0x2d, 0x2d, 0x1a, 0x31, 0x02, - 0x3d, 0xa1, 0xe7, 0xb6, 0x25, 0x87, 0xb4, 0x66, 0x72, 0x86, 0x02, 0xf8, 0x3d, 0x58, 0xb7, 0x70, - 0x1c, 0xdc, 0xbe, 0x33, 0xb1, 0x44, 0x0f, 0x77, 0x51, 0x95, 0x26, 0x98, 0x45, 0xf3, 0x8f, 0x01, - 0xa4, 0x3d, 0x12, 0x3b, 0x9e, 0x3f, 0x32, 0xa5, 0x8e, 0x0d, 0xbe, 0xf9, 0x72, 0x5a, 0xbd, 0xd9, - 0x8b, 0x04, 0x18, 0x09, 0x61, 0x28, 0x1a, 0xdf, 0xa6, 0x45, 0x17, 0x3e, 0x97, 0xe8, 0xed, 0x48, - 0x80, 0x91, 0x10, 0xc6, 0x7b, 0x50, 0x38, 0xf1, 0xfc, 0xd1, 0xc4, 0x31, 0xf5, 0x9e, 0xfb, 0xfe, - 0x4b, 0xca, 0xdd, 0x51, 0xdc, 0x64, 0x7b, 0x42, 0x51, 0x71, 0x8e, 0xbb, 0xb4, 0x64, 0x8e, 0xbb, - 0xfe, 0xcb, 0x00, 0x71, 0x0b, 0xf9, 0x4d, 0xe0, 0xfb, 0x9e, 0x2b, 0x87, 0x8d, 0xe3, 0x63, 0x7f, - 0x4b, 0x9c, 0x78, 0xbe, 0xd8, 0x36, 0x71, 0x7b, 0xbd, 0x01, 0x1b, 0x11, 0xbe, 0x71, 0x22, 0x85, - 0x8f, 0x68, 0x52, 0x81, 0xee, 0xd0, 0xf3, 0xa5, 0xf2, 0xf1, 0xe8, 0xe7, 0x93, 0x2e, 0xcb, 0xe0, - 0x96, 0xde, 0xee, 0x76, 0x58, 0xb6, 0x7e, 0x0f, 0x20, 0x1e, 0x5a, 0x8a, 0x85, 0xe8, 0xd7, 0x9b, - 0x0f, 0x75, 0x64, 0x44, 0xd0, 0xc3, 0xb7, 0x59, 0xaa, 0xfe, 0xf3, 0x14, 0x94, 0x13, 0x5d, 0x9a, - 0x8e, 0x99, 0x9b, 0xde, 0xc4, 0x95, 0x2a, 0x48, 0xa7, 0x9f, 0x4f, 0x4d, 0x67, 0x82, 0x9b, 0xfb, - 0x06, 0x54, 0x08, 0xde, 0xb6, 0x03, 0x69, 0xbb, 0x7d, 0xc9, 0x32, 0x11, 0x89, 0x72, 0x0c, 0xb2, - 0x11, 0xc9, 0x81, 0xa7, 0x51, 0x39, 0xce, 0x60, 0xf5, 0x50, 0xf8, 0x7d, 0x11, 0x12, 0x91, 0x33, - 0xac, 0x31, 0x11, 0x99, 0x72, 0x86, 0x4d, 0x39, 0xec, 0x4e, 0x46, 0xac, 0x88, 0x4e, 0x25, 0x02, - 0x8d, 0x33, 0xe1, 0xa3, 0x2f, 0x53, 0xc2, 0xf7, 0x20, 0x02, 0x57, 0x83, 0xe9, 0x32, 0x08, 0xa9, - 0xf7, 0x6d, 0x97, 0x95, 0x23, 0xc0, 0x3c, 0x67, 0xab, 0xd8, 0x7e, 0x0a, 0x1d, 0x58, 0xa5, 0xf6, - 0x5f, 0x33, 0x90, 0x45, 0xbb, 0x8e, 0xb1, 0x6e, 0xd2, 0x08, 0xa9, 0xb5, 0x92, 0x44, 0x7d, 0xbe, - 0xdd, 0x08, 0x65, 0x27, 0x77, 0xa3, 0xf7, 0xa0, 0xdc, 0x9f, 0x04, 0xd2, 0x1b, 0xd1, 0x56, 0xac, - 0x4f, 0xbb, 0x6e, 0xce, 0x65, 0x8d, 0x68, 0x38, 0x8d, 0x24, 0x29, 0x7f, 0x07, 0xf2, 0x27, 0x4a, - 0xeb, 0x55, 0xde, 0xe8, 0x97, 0x2e, 0xd9, 0xad, 0xb5, 0x66, 0x6b, 0x62, 0xec, 0x97, 0x3d, 0xb7, - 0x62, 0x93, 0x28, 0xbd, 0xeb, 0xe6, 0xa3, 0x5d, 0xf7, 0x97, 0x61, 0x4d, 0xe0, 0x80, 0x1f, 0x3a, - 0x66, 0x5f, 0x8c, 0x84, 0x1b, 0x2e, 0xb3, 0xb7, 0x5f, 0xa2, 0xc7, 0x34, 0x63, 0xd4, 0xed, 0x19, - 0x59, 0x68, 0x79, 0x5c, 0x0f, 0x37, 0xff, 0x30, 0xb0, 0x2f, 0x1a, 0x31, 0xa2, 0xfe, 0x15, 0x6d, - 0x2f, 0x0b, 0x90, 0x69, 0x04, 0x7d, 0x9d, 0x01, 0x11, 0x41, 0x5f, 0x85, 0x57, 0x4d, 0x1a, 0x0e, - 0x96, 0xae, 0xbf, 0x09, 0xa5, 0xe8, 0x0d, 0xa8, 0x3c, 0x07, 0x9e, 0xec, 0x8e, 0x45, 0xdf, 0x3e, - 0xb1, 0x85, 0xa5, 0xf4, 0xb3, 0x2b, 0x4d, 0x5f, 0xaa, 0x24, 0x62, 0xcb, 0xb5, 0x58, 0xba, 0xf6, - 0x3b, 0x45, 0xc8, 0xab, 0xcd, 0x57, 0x77, 0xb8, 0x14, 0x75, 0xf8, 0x7b, 0x50, 0xf4, 0xc6, 0xc2, - 0x37, 0xa5, 0xe7, 0xeb, 0xcc, 0xcd, 0x3b, 0x2f, 0xb3, 0x99, 0x6f, 0x76, 0x34, 0xb3, 0x11, 0x89, - 0x99, 0xd5, 0xa6, 0xf4, 0xbc, 0x36, 0xdd, 0x07, 0x16, 0xee, 0xdb, 0x87, 0x3e, 0xf2, 0xc9, 0x0b, - 0x1d, 0x87, 0xcf, 0xe1, 0x79, 0x0f, 0x4a, 0x7d, 0xcf, 0xb5, 0xec, 0x28, 0x8b, 0xb3, 0xf6, 0xf0, - 0x1b, 0x2f, 0xd5, 0xc2, 0x66, 0xc8, 0x6d, 0xc4, 0x82, 0xf8, 0xeb, 0x90, 0x3b, 0x43, 0x35, 0x23, - 0x7d, 0xba, 0x5c, 0x09, 0x15, 0x11, 0xff, 0x04, 0xca, 0x3f, 0x9c, 0xd8, 0xfd, 0xd3, 0x4e, 0x32, - 0x4b, 0xf8, 0xde, 0x4b, 0xb5, 0xe2, 0x7b, 0x31, 0xbf, 0x91, 0x14, 0x96, 0x50, 0xed, 0xc2, 0x1f, - 0x43, 0xb5, 0x8b, 0xf3, 0xaa, 0x6d, 0x40, 0xc5, 0x15, 0x81, 0x14, 0xd6, 0x8e, 0xf6, 0xd5, 0xe0, - 0x73, 0xf8, 0x6a, 0xd3, 0x22, 0xea, 0x5f, 0x86, 0x62, 0x38, 0xe1, 0x3c, 0x0f, 0xe9, 0x03, 0x0c, - 0x8a, 0xf2, 0x90, 0xee, 0xf8, 0x4a, 0xdb, 0x1a, 0xa8, 0x6d, 0xf5, 0xff, 0x99, 0x82, 0x52, 0x34, - 0xe8, 0xd3, 0x96, 0xb3, 0xf5, 0xc3, 0x89, 0xe9, 0xb0, 0x14, 0x85, 0xcb, 0x9e, 0x54, 0x10, 0x19, - 0xeb, 0x47, 0x74, 0x58, 0xef, 0xb3, 0x0c, 0xb9, 0x08, 0x22, 0x08, 0x58, 0x96, 0x73, 0x58, 0xd3, - 0xe8, 0x8e, 0xaf, 0x48, 0x73, 0x68, 0xf8, 0xf0, 0x69, 0x88, 0xc8, 0x2b, 0x8f, 0xe2, 0x54, 0x28, - 0x03, 0x79, 0xe0, 0x49, 0x02, 0x8a, 0xd8, 0xa8, 0xb6, 0xcb, 0x4a, 0xf8, 0xce, 0x03, 0x4f, 0xb6, - 0xd1, 0x24, 0x46, 0xe1, 0x59, 0x39, 0x7c, 0x3d, 0x41, 0x64, 0x11, 0x1b, 0x8e, 0xd3, 0x76, 0x59, - 0x45, 0x3f, 0x50, 0xd0, 0x1a, 0x4a, 0x6c, 0x9d, 0x9b, 0x7d, 0x64, 0x5f, 0x47, 0x0b, 0x8b, 0x3c, - 0x1a, 0x66, 0xb8, 0x24, 0x5b, 0xe7, 0x76, 0x20, 0x03, 0xb6, 0x51, 0xff, 0xc3, 0x14, 0x94, 0x13, - 0x13, 0x8c, 0xe1, 0x1f, 0x11, 0xe2, 0x56, 0xa6, 0xa2, 0xc1, 0x8f, 0x71, 0x18, 0x7d, 0x2b, 0xdc, - 0xa6, 0x7a, 0x1e, 0xfe, 0x4c, 0xe3, 0xfb, 0x7a, 0xde, 0xc8, 0xf3, 0x7d, 0xef, 0xb9, 0x72, 0x7d, - 0xf6, 0xcc, 0x40, 0x3e, 0x13, 0xe2, 0x94, 0x65, 0xb1, 0xab, 0xcd, 0x89, 0xef, 0x0b, 0x57, 0x21, - 0x72, 0xd4, 0x38, 0x71, 0xae, 0xa0, 0x3c, 0x0a, 0x45, 0x62, 0xda, 0x07, 0x59, 0x01, 0x0d, 0x81, - 0xa6, 0x56, 0x98, 0x22, 0x12, 0x20, 0xb9, 0x02, 0x4b, 0xb8, 0xa9, 0xa8, 0x0c, 0x45, 0xe7, 0x64, - 0xdb, 0xbc, 0x08, 0x1a, 0x03, 0x8f, 0xc1, 0x2c, 0xf2, 0xc0, 0x7b, 0xce, 0xca, 0xb5, 0x09, 0x40, - 0x1c, 0x93, 0x61, 0x2c, 0x8a, 0x0a, 0x11, 0x9d, 0x21, 0x68, 0x88, 0x77, 0x00, 0xf0, 0x17, 0x51, - 0x86, 0x01, 0xe9, 0x4b, 0x38, 0xca, 0xc4, 0x67, 0x24, 0x44, 0xd4, 0xfe, 0x02, 0x94, 0xa2, 0x07, - 0xbc, 0x0a, 0x05, 0x72, 0x69, 0xa3, 0xd7, 0x86, 0x20, 0xfa, 0x67, 0xb6, 0x6b, 0x89, 0x73, 0xb2, - 0x2b, 0x39, 0x43, 0x01, 0xd8, 0xca, 0xa1, 0x6d, 0x59, 0xc2, 0x0d, 0x4f, 0x7a, 0x14, 0xb4, 0xe8, - 0x3c, 0x3e, 0xbb, 0xf0, 0x3c, 0xbe, 0xf6, 0x2b, 0x50, 0x4e, 0x04, 0x8d, 0x97, 0x76, 0x3b, 0xd1, - 0xb0, 0xf4, 0x74, 0xc3, 0x6e, 0x43, 0x29, 0xac, 0x01, 0x09, 0x68, 0x6f, 0x2b, 0x19, 0x31, 0xa2, - 0xf6, 0x4f, 0xd2, 0xe8, 0xc9, 0x62, 0xd7, 0x66, 0x03, 0xbd, 0x1d, 0xc8, 0x07, 0xd2, 0x94, 0x93, - 0xb0, 0x98, 0x61, 0xc9, 0x05, 0xda, 0x25, 0x9e, 0xdd, 0x15, 0x43, 0x73, 0xf3, 0x0f, 0x20, 0x23, - 0xcd, 0x81, 0x4e, 0x94, 0x7e, 0x75, 0x39, 0x21, 0x3d, 0x73, 0xb0, 0xbb, 0x62, 0x20, 0x1f, 0xdf, - 0x83, 0x62, 0x5f, 0xe7, 0xb6, 0xb4, 0x51, 0x5c, 0x32, 0x16, 0x0b, 0x33, 0x62, 0xbb, 0x2b, 0x46, - 0x24, 0x81, 0x7f, 0x17, 0xb2, 0xe8, 0x5d, 0xea, 0x9a, 0x8f, 0x25, 0x63, 0x4c, 0x5c, 0x2e, 0xbb, - 0x2b, 0x06, 0x71, 0x6e, 0x15, 0x20, 0x47, 0x36, 0xb8, 0x56, 0x85, 0xbc, 0xea, 0xeb, 0xec, 0xc8, - 0xd5, 0x6e, 0x41, 0xa6, 0x67, 0x0e, 0xd0, 0xc3, 0xb7, 0xad, 0x40, 0xa7, 0x4a, 0xf0, 0x67, 0xed, - 0x95, 0x38, 0x4f, 0x97, 0x4c, 0x01, 0xa7, 0xa6, 0x52, 0xc0, 0xb5, 0x3c, 0x64, 0xf1, 0x8d, 0xb5, - 0xdb, 0x57, 0x45, 0x0b, 0xb5, 0x7f, 0x98, 0xc1, 0xc0, 0x42, 0x8a, 0xf3, 0x85, 0xe9, 0xed, 0x8f, - 0xa0, 0x34, 0xf6, 0xbd, 0xbe, 0x08, 0x02, 0xcf, 0xd7, 0xce, 0xd1, 0xeb, 0x2f, 0x3e, 0x7a, 0xde, - 0x3c, 0x0c, 0x79, 0x8c, 0x98, 0xbd, 0xfe, 0xaf, 0xd2, 0x50, 0x8a, 0x1e, 0xa8, 0x78, 0x46, 0x8a, - 0x73, 0x95, 0xca, 0xdc, 0x17, 0xfe, 0xc8, 0xb4, 0x2d, 0x65, 0x3d, 0x9a, 0x43, 0x33, 0x74, 0x72, - 0x3f, 0xf6, 0x26, 0x72, 0x72, 0x2c, 0x54, 0x0a, 0xeb, 0xa9, 0x3d, 0x12, 0x1e, 0xcb, 0xd2, 0xe1, - 0x11, 0x2a, 0x76, 0xdf, 0xf1, 0x26, 0x16, 0xcb, 0x21, 0xfc, 0x88, 0xb6, 0xb7, 0x7d, 0x73, 0x1c, - 0x28, 0x9b, 0xb9, 0x6f, 0xfb, 0x1e, 0x2b, 0x20, 0xd3, 0x8e, 0x3d, 0x18, 0x99, 0xac, 0x88, 0xc2, - 0x7a, 0xcf, 0x6d, 0x89, 0x46, 0xb8, 0x84, 0x6e, 0x6a, 0x67, 0x2c, 0xdc, 0xae, 0xf4, 0x85, 0x90, - 0xfb, 0xe6, 0x58, 0xe5, 0x34, 0x0d, 0x61, 0x59, 0xb6, 0x54, 0xf6, 0x73, 0xc7, 0xec, 0x8b, 0x63, - 0xcf, 0x3b, 0x65, 0xab, 0x68, 0x68, 0xda, 0x6e, 0x20, 0xcd, 0x81, 0x6f, 0x8e, 0x94, 0x0d, 0xed, - 0x09, 0x47, 0x10, 0xb4, 0x46, 0xef, 0xb6, 0xe5, 0x70, 0x72, 0xfc, 0x08, 0xe3, 0xbe, 0x75, 0x75, - 0xce, 0x64, 0x89, 0xb1, 0x40, 0x1b, 0xba, 0x0a, 0xc5, 0x2d, 0xdb, 0xb1, 0x8f, 0x6d, 0xc7, 0x66, - 0x1b, 0x48, 0xda, 0x3a, 0xef, 0x9b, 0x8e, 0x6d, 0xf9, 0xe6, 0x73, 0xc6, 0xb1, 0x71, 0x8f, 0x7d, - 0xef, 0xd4, 0x66, 0xd7, 0x90, 0x90, 0xc2, 0xc0, 0x33, 0xfb, 0x53, 0x76, 0x9d, 0xce, 0xca, 0x4e, - 0x85, 0xec, 0x0f, 0x4f, 0xcc, 0x63, 0x76, 0x23, 0x4e, 0xe9, 0xdd, 0xac, 0x6d, 0xc0, 0xfa, 0xcc, - 0xa9, 0x7c, 0xad, 0xa0, 0xa3, 0xcf, 0x5a, 0x05, 0xca, 0x89, 0xe3, 0xd2, 0xda, 0xab, 0x50, 0x0c, - 0x0f, 0x53, 0x31, 0x4a, 0xb7, 0x03, 0x95, 0x06, 0xd6, 0x4a, 0x12, 0xc1, 0xb5, 0xff, 0x90, 0x82, - 0xbc, 0x3a, 0xc9, 0xe6, 0x5b, 0x51, 0xe5, 0x49, 0x6a, 0x89, 0xd3, 0x4b, 0xc5, 0xa4, 0xcf, 0x7e, - 0xa3, 0xf2, 0x93, 0xeb, 0x90, 0x73, 0x28, 0x1c, 0xd7, 0xe6, 0x8b, 0x80, 0x84, 0xb5, 0xc9, 0x4c, - 0x59, 0x9b, 0xdb, 0x50, 0x32, 0x27, 0xd2, 0xa3, 0x43, 0x3a, 0x7d, 0x82, 0x11, 0x23, 0xea, 0x8d, - 0xe8, 0x34, 0x3a, 0x4c, 0x4c, 0x92, 0xcf, 0xd8, 0xf3, 0x85, 0x50, 0x49, 0x47, 0x8a, 0xb5, 0xd3, - 0xb4, 0x93, 0x78, 0xa3, 0xb1, 0xd9, 0x97, 0x84, 0xa0, 0x3d, 0x16, 0x4d, 0x2d, 0xcb, 0xe2, 0x1a, - 0x68, 0x0e, 0x4d, 0x59, 0x3f, 0x81, 0xe2, 0xa1, 0x17, 0xcc, 0xee, 0xd8, 0x05, 0xc8, 0xf4, 0xbc, - 0xb1, 0xf2, 0x3f, 0xb7, 0x3c, 0x49, 0xfe, 0xa7, 0xda, 0xa0, 0x4f, 0xa4, 0x52, 0x39, 0xc3, 0x1e, - 0x0c, 0xa5, 0x8a, 0xd3, 0xdb, 0xae, 0x2b, 0x7c, 0x96, 0xc3, 0x19, 0x36, 0xc4, 0x18, 0x7d, 0x5e, - 0x96, 0xc7, 0x39, 0x25, 0xfc, 0x8e, 0xed, 0x07, 0x92, 0x15, 0xea, 0x6d, 0xdc, 0x6b, 0xed, 0x01, - 0x6d, 0x91, 0xf4, 0x83, 0x44, 0xad, 0x60, 0x13, 0x09, 0x6c, 0x0a, 0x17, 0x35, 0x90, 0x62, 0x2b, - 0x15, 0x18, 0xd2, 0x0b, 0xd2, 0xb8, 0xbf, 0x11, 0xfc, 0xd1, 0x24, 0x90, 0xf6, 0xc9, 0x05, 0xcb, - 0xd4, 0x9f, 0x41, 0x65, 0xaa, 0xc8, 0x89, 0x5f, 0x07, 0x36, 0x85, 0xc0, 0xa6, 0xaf, 0xf0, 0x5b, - 0x70, 0x6d, 0x0a, 0xbb, 0x6f, 0x5b, 0x16, 0x65, 0x82, 0x67, 0x1f, 0x84, 0x1d, 0xdc, 0x2a, 0x41, - 0xa1, 0xaf, 0xe6, 0xb0, 0x7e, 0x08, 0x15, 0x9a, 0xd4, 0x7d, 0x21, 0xcd, 0x8e, 0xeb, 0x5c, 0xfc, - 0xb1, 0x2b, 0xd1, 0xea, 0x5f, 0xd3, 0xe1, 0x17, 0x5a, 0x93, 0x13, 0xdf, 0x1b, 0x91, 0xac, 0x9c, - 0x41, 0xbf, 0x51, 0xba, 0xf4, 0xb4, 0x66, 0xa4, 0xa5, 0x57, 0xff, 0x45, 0x09, 0x0a, 0x8d, 0x7e, - 0x1f, 0x03, 0xc6, 0xb9, 0x37, 0xbf, 0x03, 0xf9, 0xbe, 0xe7, 0x9e, 0xd8, 0x03, 0x6d, 0xad, 0x67, - 0xfd, 0x46, 0xcd, 0x87, 0xea, 0x78, 0x62, 0x0f, 0x0c, 0x4d, 0x8c, 0x6c, 0x7a, 0xb7, 0xc9, 0x5d, - 0xc9, 0xa6, 0x4c, 0x6e, 0xb4, 0xb9, 0x3c, 0x80, 0xac, 0xed, 0x9e, 0x78, 0xba, 0x6c, 0xf4, 0x8b, - 0x97, 0x30, 0x51, 0xed, 0x24, 0x11, 0xd6, 0xfe, 0x53, 0x0a, 0xf2, 0xea, 0xd5, 0xfc, 0x55, 0x58, - 0x13, 0x2e, 0x2e, 0xb5, 0xd0, 0xd0, 0xeb, 0x35, 0x36, 0x83, 0x45, 0x97, 0x56, 0x63, 0xc4, 0xf1, - 0x64, 0xa0, 0x33, 0x33, 0x49, 0x14, 0x7f, 0x0f, 0x6e, 0x29, 0xf0, 0xd0, 0x17, 0xbe, 0x70, 0x84, - 0x19, 0x88, 0xe6, 0xd0, 0x74, 0x5d, 0xe1, 0xe8, 0x6d, 0xff, 0xb2, 0xc7, 0xbc, 0x0e, 0xab, 0xea, - 0x51, 0x77, 0x6c, 0xf6, 0x45, 0xa0, 0xd7, 0xd2, 0x14, 0x8e, 0x7f, 0x1d, 0x72, 0x54, 0x55, 0x5b, - 0xb5, 0xae, 0x9e, 0x4a, 0x45, 0x55, 0xf3, 0xa2, 0x7d, 0xa9, 0x01, 0xa0, 0x86, 0x09, 0x43, 0x32, - 0x6d, 0x1b, 0xbe, 0x74, 0xe5, 0xb8, 0x52, 0x74, 0x98, 0x60, 0xc2, 0xf6, 0x59, 0xc2, 0x11, 0x54, - 0xfe, 0x88, 0xfb, 0x66, 0x9a, 0xce, 0x5d, 0xa6, 0x70, 0xb5, 0xff, 0x98, 0x85, 0x2c, 0x8e, 0x30, - 0x12, 0x0f, 0xbd, 0x91, 0x88, 0xb2, 0xcf, 0xca, 0x11, 0x99, 0xc2, 0xa1, 0xe3, 0x63, 0xaa, 0x02, - 0x80, 0x88, 0x4c, 0x99, 0x96, 0x59, 0x34, 0x52, 0x8e, 0x7d, 0xef, 0xc4, 0x76, 0x62, 0x4a, 0xed, - 0x22, 0xcd, 0xa0, 0xf9, 0x37, 0xe0, 0xe6, 0xc8, 0xf4, 0x4f, 0x85, 0xa4, 0xd5, 0xfd, 0xcc, 0xf3, - 0x4f, 0x03, 0x1c, 0xb9, 0xb6, 0xa5, 0xd3, 0x96, 0x97, 0x3c, 0xe5, 0xaf, 0xc3, 0xc6, 0xf3, 0x10, - 0x8c, 0xde, 0xa1, 0x12, 0x87, 0xf3, 0x0f, 0xd0, 0x18, 0x5b, 0xe2, 0xcc, 0x26, 0xb9, 0x45, 0x55, - 0x5b, 0x1b, 0xc2, 0xa8, 0x4a, 0xa6, 0x1a, 0xc8, 0xae, 0x7e, 0xb3, 0x3e, 0x7f, 0x9a, 0xc6, 0xa2, - 0xdd, 0x54, 0x35, 0x47, 0x41, 0xdb, 0xa2, 0xbc, 0x6b, 0xc9, 0x88, 0x11, 0xa8, 0x68, 0xf4, 0xca, - 0xa7, 0xca, 0xe4, 0x56, 0x54, 0x80, 0x9a, 0x40, 0x21, 0x85, 0x14, 0xfd, 0x61, 0xf8, 0x12, 0x95, - 0x14, 0x4d, 0xa2, 0xf8, 0x1d, 0x80, 0x81, 0x29, 0xc5, 0x73, 0xf3, 0xe2, 0x89, 0xef, 0x54, 0x85, - 0x3a, 0x48, 0x89, 0x31, 0x18, 0xe2, 0x3a, 0x5e, 0xdf, 0x74, 0xba, 0xd2, 0xf3, 0xcd, 0x81, 0x38, - 0x34, 0xe5, 0xb0, 0x3a, 0x50, 0x21, 0xee, 0x2c, 0x1e, 0x7b, 0x2c, 0xed, 0x91, 0xf8, 0xc4, 0x73, - 0x45, 0x75, 0xa8, 0x7a, 0x1c, 0xc2, 0xd8, 0x12, 0xd3, 0x35, 0x9d, 0x0b, 0x69, 0xf7, 0xb1, 0x2f, - 0xb6, 0x6a, 0x49, 0x02, 0x45, 0x49, 0x05, 0x21, 0x71, 0x1c, 0xdb, 0x56, 0xf5, 0x07, 0xaa, 0xaf, - 0x11, 0x02, 0x67, 0x57, 0xc8, 0xa1, 0xf0, 0xc5, 0x64, 0xd4, 0xb0, 0x2c, 0x5f, 0x04, 0x41, 0xf5, - 0x54, 0xcd, 0xee, 0x0c, 0xba, 0xf6, 0x2d, 0x3a, 0xe6, 0x1a, 0xd6, 0xdf, 0x82, 0xca, 0x1e, 0xb6, - 0xb0, 0x31, 0xb6, 0xbb, 0x7d, 0x6f, 0x2c, 0xd0, 0xa0, 0x53, 0xc2, 0x98, 0xd2, 0x0b, 0x65, 0x28, - 0x7c, 0x14, 0x78, 0x6e, 0xe3, 0xb0, 0xad, 0xb6, 0x98, 0x9d, 0x89, 0xe3, 0xb0, 0x74, 0xbd, 0x03, - 0x10, 0x6b, 0x36, 0x6e, 0x17, 0x0d, 0x3a, 0x53, 0x62, 0x2b, 0x2a, 0x99, 0xe5, 0x5a, 0xb6, 0x3b, - 0xd8, 0xd6, 0xca, 0xcc, 0x52, 0x88, 0xa4, 0x24, 0x85, 0xb0, 0x22, 0x24, 0xb9, 0x33, 0x04, 0x09, - 0x8b, 0x65, 0xea, 0xff, 0x27, 0x05, 0xe5, 0x44, 0x09, 0xc5, 0x9f, 0x60, 0xd9, 0x07, 0x6e, 0xf6, - 0xe8, 0x2e, 0xe0, 0xbc, 0x29, 0x45, 0x8f, 0x60, 0x9c, 0x55, 0x5d, 0xe1, 0x81, 0x4f, 0x55, 0x4a, - 0x22, 0x81, 0xf9, 0x5c, 0x25, 0x1f, 0xf5, 0x87, 0x3a, 0xaf, 0x53, 0x86, 0xc2, 0x13, 0xf7, 0xd4, - 0xf5, 0x9e, 0xbb, 0x6a, 0x9f, 0xa6, 0x3a, 0x9e, 0xa9, 0x13, 0xc9, 0xb0, 0xd4, 0x26, 0x53, 0xff, - 0xe7, 0xd9, 0x99, 0x92, 0xb7, 0x16, 0xe4, 0x55, 0x30, 0x41, 0x7e, 0xee, 0x7c, 0x8d, 0x52, 0x92, - 0x58, 0x9f, 0x7e, 0x25, 0x50, 0x86, 0x66, 0x46, 0x2f, 0x3f, 0x2a, 0x08, 0x4d, 0x2f, 0x3c, 0xa5, - 0x9b, 0x12, 0x14, 0xda, 0xe6, 0xa9, 0x9a, 0xe8, 0x48, 0x42, 0xed, 0xaf, 0xa5, 0xe0, 0xfa, 0x22, - 0x92, 0x64, 0xe5, 0x78, 0x6a, 0xba, 0x72, 0xbc, 0x3b, 0x53, 0x89, 0x9d, 0xa6, 0xde, 0x3c, 0x78, - 0xc9, 0x46, 0x4c, 0xd7, 0x65, 0xd7, 0x7f, 0x3f, 0x05, 0x1b, 0x73, 0x7d, 0x4e, 0xf8, 0x31, 0x00, - 0x79, 0xa5, 0x59, 0xaa, 0x50, 0x2a, 0x2a, 0x5d, 0x51, 0x47, 0x0f, 0xb4, 0xc3, 0x07, 0xaa, 0x16, - 0x40, 0xd7, 0x9e, 0x2b, 0x27, 0x1a, 0x67, 0x0d, 0x37, 0x90, 0x81, 0x50, 0x69, 0x5a, 0xe5, 0x6c, - 0x69, 0x4c, 0x5e, 0x39, 0xba, 0xea, 0x7c, 0x84, 0x15, 0xa8, 0x00, 0x6b, 0x32, 0x76, 0xec, 0x3e, - 0x82, 0x45, 0x5e, 0x83, 0x9b, 0xea, 0x02, 0x82, 0x0e, 0x2a, 0x4f, 0x7a, 0x43, 0x9b, 0x16, 0x07, - 0x2b, 0xe1, 0x7b, 0x0e, 0x27, 0xc7, 0x8e, 0x1d, 0x0c, 0x19, 0xd4, 0x0d, 0xb8, 0xb6, 0xa0, 0x83, - 0xd4, 0xe4, 0xa7, 0xba, 0xf9, 0x6b, 0x00, 0xdb, 0x4f, 0xc3, 0x46, 0xb3, 0x14, 0xe7, 0xb0, 0xb6, - 0xfd, 0x34, 0x29, 0x5d, 0x2f, 0x9e, 0xa7, 0x68, 0xbd, 0x02, 0x96, 0xa9, 0xff, 0x6a, 0x2a, 0xac, - 0x90, 0xa8, 0xfd, 0x79, 0xa8, 0xa8, 0x06, 0x1f, 0x9a, 0x17, 0x8e, 0x67, 0x5a, 0xbc, 0x05, 0x6b, - 0x41, 0x74, 0x45, 0x26, 0xb1, 0x61, 0xcd, 0x3a, 0x02, 0xdd, 0x29, 0x22, 0x63, 0x86, 0x29, 0x0c, - 0x94, 0xd2, 0xf1, 0xb1, 0x0a, 0xa7, 0x90, 0xcf, 0xa4, 0x25, 0xb7, 0x4a, 0x41, 0x9c, 0x59, 0xff, - 0x3a, 0x6c, 0x74, 0x63, 0xe3, 0xae, 0x3c, 0x6a, 0x54, 0x0e, 0xb5, 0x33, 0x6c, 0x87, 0xca, 0xa1, - 0xc1, 0xfa, 0x3f, 0x2a, 0x00, 0xc4, 0x47, 0x48, 0x0b, 0xd6, 0xfc, 0xa2, 0x8a, 0x88, 0xb9, 0x03, - 0xdd, 0xcc, 0x4b, 0x1f, 0xe8, 0xbe, 0x17, 0x39, 0xf6, 0x2a, 0xbd, 0x3c, 0x5b, 0x16, 0x1e, 0xb7, - 0x69, 0xd6, 0x9d, 0x9f, 0x2a, 0x18, 0xca, 0xcd, 0x16, 0x0c, 0xdd, 0x9d, 0xaf, 0x2e, 0x9c, 0x31, - 0x46, 0x71, 0xde, 0xa2, 0x30, 0x95, 0xb7, 0xa8, 0x41, 0xd1, 0x17, 0xa6, 0xe5, 0xb9, 0xce, 0x45, - 0x78, 0x6e, 0x18, 0xc2, 0xfc, 0x2d, 0xc8, 0x49, 0xba, 0xe5, 0x53, 0xa4, 0xb5, 0xf3, 0x82, 0x89, - 0x53, 0xb4, 0x68, 0xd9, 0xec, 0x40, 0x97, 0x04, 0xaa, 0x5d, 0xb3, 0x68, 0x24, 0x30, 0x7c, 0x13, - 0xb8, 0x8d, 0x41, 0x9c, 0xe3, 0x08, 0x6b, 0xeb, 0x62, 0x5b, 0x1d, 0xe7, 0xd1, 0xbe, 0x5e, 0x34, - 0x16, 0x3c, 0x09, 0xe7, 0x7f, 0x35, 0x9e, 0x7f, 0x6a, 0xf2, 0x99, 0x1d, 0x60, 0x4f, 0x2b, 0xe4, - 0xbe, 0x44, 0x30, 0x7a, 0x0e, 0xe1, 0x82, 0x55, 0x63, 0x49, 0xda, 0x1b, 0x9f, 0x89, 0x5f, 0xf2, - 0x34, 0x1c, 0x5e, 0x95, 0xb8, 0x59, 0x27, 0xa1, 0x31, 0x82, 0x2c, 0x79, 0xdf, 0x73, 0x0f, 0x50, - 0x23, 0x98, 0xb6, 0xe4, 0x1a, 0xc6, 0xfe, 0x8e, 0x9d, 0x89, 0x6f, 0x3a, 0xf4, 0x74, 0x43, 0x59, - 0xf2, 0x18, 0x53, 0xff, 0x83, 0x74, 0x14, 0x3c, 0x95, 0x20, 0x77, 0x6c, 0x06, 0x76, 0x5f, 0xed, - 0x6e, 0xda, 0xe9, 0x51, 0xbb, 0x9b, 0xf4, 0x2c, 0x8f, 0xa5, 0x31, 0x0e, 0x0a, 0x84, 0x3e, 0xce, - 0x89, 0xef, 0x54, 0xb1, 0x2c, 0x9a, 0x80, 0x50, 0x93, 0x54, 0xcd, 0x10, 0xb1, 0x52, 0x72, 0xce, - 0x8a, 0xaa, 0x31, 0x29, 0xcc, 0xa6, 0x2d, 0x86, 0x15, 0x91, 0xc6, 0xf5, 0xa4, 0x50, 0xa9, 0x49, - 0xd2, 0x7b, 0x06, 0x28, 0x26, 0xbc, 0x24, 0xc0, 0xca, 0x18, 0x98, 0x84, 0x42, 0x55, 0x3e, 0x31, - 0xa0, 0xb0, 0x6d, 0x15, 0xd7, 0xfd, 0xf4, 0x03, 0x56, 0xc1, 0x16, 0xc5, 0x57, 0xb5, 0xd8, 0x1a, - 0x4a, 0x35, 0xa9, 0x92, 0x65, 0x1d, 0x7f, 0x9e, 0x51, 0x7d, 0x0b, 0xc3, 0xb7, 0x5a, 0x68, 0x97, - 0x36, 0xb0, 0x65, 0x91, 0xa3, 0xc3, 0x38, 0xc6, 0x5d, 0x63, 0x13, 0x83, 0x20, 0x7b, 0x6c, 0xba, - 0x92, 0x5d, 0xc3, 0xae, 0x8e, 0xad, 0x13, 0x76, 0x1d, 0x59, 0xfa, 0x43, 0x53, 0xb2, 0x1b, 0x48, - 0x83, 0xbf, 0xb6, 0x85, 0x8f, 0x9a, 0xc2, 0x6e, 0x22, 0x8d, 0x34, 0x07, 0xec, 0x56, 0xfd, 0x37, - 0xe2, 0x7a, 0xe8, 0x37, 0xa2, 0xf0, 0x64, 0x99, 0xe5, 0x83, 0x01, 0xcc, 0xa2, 0xb5, 0xdc, 0x82, - 0x0d, 0x5f, 0xfc, 0x70, 0x62, 0x4f, 0xdd, 0x12, 0xc8, 0x5c, 0x5d, 0x86, 0x32, 0xcf, 0x51, 0x3f, - 0x83, 0x8d, 0x10, 0x78, 0x66, 0xcb, 0x21, 0xe5, 0x91, 0xf8, 0x5b, 0x89, 0x6b, 0x0c, 0xa9, 0x85, - 0xd7, 0xbf, 0x22, 0x91, 0xf1, 0xb5, 0x85, 0xe8, 0x9c, 0x20, 0xbd, 0xc4, 0x39, 0x41, 0xfd, 0x7f, - 0x27, 0x0f, 0x9e, 0x55, 0xc0, 0x66, 0x45, 0x01, 0xdb, 0xfc, 0x41, 0x74, 0x9c, 0xfa, 0x4f, 0xbf, - 0x4c, 0xea, 0x7f, 0x51, 0x51, 0xc7, 0xfb, 0x18, 0x3f, 0xd0, 0xca, 0x7c, 0xba, 0xc4, 0xb1, 0xc6, - 0x14, 0x2d, 0xdf, 0xa2, 0x63, 0x65, 0xb3, 0xab, 0x2a, 0x8e, 0x72, 0x0b, 0x2f, 0x15, 0x25, 0xcf, - 0x8f, 0x35, 0xa5, 0x91, 0xe0, 0x4a, 0xd8, 0xb1, 0xfc, 0x22, 0x3b, 0x86, 0xb1, 0xb3, 0xb6, 0x70, - 0x11, 0xac, 0x4e, 0x81, 0xd4, 0xef, 0x50, 0x3c, 0xad, 0xf1, 0xa2, 0x31, 0x87, 0x47, 0x67, 0x6f, - 0x34, 0x71, 0xa4, 0xad, 0x0f, 0x3a, 0x14, 0x30, 0x7b, 0xeb, 0xb1, 0x34, 0x7f, 0xeb, 0xf1, 0x43, - 0x80, 0x40, 0xe0, 0xea, 0xd8, 0xb6, 0xfb, 0x52, 0xd7, 0x25, 0xdd, 0xb9, 0xac, 0x6f, 0xfa, 0x78, - 0x26, 0xc1, 0x81, 0xed, 0x1f, 0x99, 0xe7, 0x74, 0x64, 0xab, 0x0b, 0x28, 0x22, 0x78, 0xd6, 0xba, - 0xaf, 0xcd, 0x5b, 0xf7, 0xb7, 0x20, 0x17, 0xa0, 0x0b, 0x4d, 0x17, 0x77, 0x2e, 0x9f, 0xdf, 0x4d, - 0xf2, 0xb3, 0x0d, 0x45, 0x4b, 0x09, 0x4b, 0xb4, 0x7f, 0x9e, 0x4f, 0x57, 0x76, 0x4a, 0x46, 0x08, - 0x4e, 0x59, 0xd8, 0x9b, 0xd3, 0x16, 0xb6, 0x66, 0x41, 0x5e, 0x1f, 0x3e, 0xcc, 0x26, 0x0a, 0xc2, - 0xb4, 0x65, 0x3a, 0x91, 0xb6, 0x8c, 0xaa, 0x5f, 0x33, 0xc9, 0xea, 0xd7, 0x99, 0x5b, 0x7d, 0xb9, - 0xb9, 0x5b, 0x7d, 0xf5, 0x4f, 0x20, 0xa7, 0x62, 0x02, 0x08, 0xdd, 0x51, 0xe5, 0xca, 0x62, 0xa7, - 0x58, 0x8a, 0x5f, 0x07, 0x16, 0x08, 0xf2, 0x75, 0x44, 0xd7, 0x1c, 0x09, 0x32, 0x92, 0x69, 0x5e, - 0x85, 0xeb, 0x8a, 0x36, 0x98, 0x7e, 0x42, 0x0e, 0x97, 0x63, 0x1f, 0xfb, 0xa6, 0x7f, 0xc1, 0xb2, - 0xf5, 0x0f, 0xe9, 0xe8, 0x3f, 0x54, 0xa8, 0x72, 0x74, 0x8b, 0x52, 0x99, 0x65, 0x4b, 0x5b, 0x1f, - 0xaa, 0x1c, 0xd1, 0xd1, 0x9e, 0xaa, 0xa7, 0xa3, 0x70, 0x8a, 0xf2, 0x41, 0xab, 0xc9, 0x3d, 0xfe, - 0x4f, 0x6c, 0xbd, 0xd5, 0xb7, 0x12, 0x1e, 0xe3, 0x74, 0x81, 0x5c, 0x6a, 0xd9, 0x02, 0xb9, 0xfa, - 0x63, 0x58, 0x37, 0xa6, 0x6d, 0x3a, 0x7f, 0x0f, 0x0a, 0xde, 0x38, 0x29, 0xe7, 0x45, 0x7a, 0x19, - 0x92, 0xd7, 0x7f, 0x2f, 0x05, 0xab, 0x6d, 0x57, 0x0a, 0xdf, 0x35, 0x9d, 0x1d, 0xc7, 0x1c, 0xf0, - 0x77, 0x43, 0x2b, 0xb5, 0x38, 0xf7, 0x90, 0xa4, 0x9d, 0x36, 0x58, 0x8e, 0x4e, 0xb2, 0xf3, 0x1b, - 0xb0, 0x21, 0x2c, 0x5b, 0x7a, 0xbe, 0xf2, 0x93, 0xc3, 0x3a, 0xc6, 0xeb, 0xc0, 0x14, 0xba, 0x4b, - 0x4b, 0xa2, 0xa7, 0xa6, 0xb9, 0x0a, 0xd7, 0xa7, 0xb0, 0xa1, 0x13, 0x9c, 0xe6, 0xb7, 0xa1, 0x1a, - 0xef, 0x46, 0xdb, 0x9e, 0x2b, 0xdb, 0xae, 0x25, 0xce, 0xc9, 0xc9, 0x62, 0x99, 0xfa, 0xaf, 0x47, - 0xee, 0xdd, 0x53, 0x5d, 0xe5, 0xe8, 0x7b, 0x5e, 0x7c, 0x85, 0x56, 0x43, 0x89, 0xab, 0xda, 0xe9, - 0x25, 0xae, 0x6a, 0x7f, 0x18, 0x5f, 0xb7, 0x55, 0x1b, 0xc5, 0x2b, 0x0b, 0x77, 0x1f, 0x2a, 0xce, - 0xd2, 0xde, 0x7d, 0x57, 0x24, 0xee, 0xde, 0xbe, 0xa9, 0x43, 0xba, 0xec, 0x32, 0x5e, 0xb0, 0xaa, - 0x63, 0x78, 0x67, 0xf6, 0x8e, 0xc7, 0x72, 0x45, 0x92, 0x73, 0x8e, 0x2a, 0xbc, 0xb4, 0xa3, 0xfa, - 0x9d, 0x99, 0xe8, 0xa9, 0xb8, 0x30, 0x1d, 0x77, 0xc5, 0x0d, 0xd6, 0xef, 0x40, 0x61, 0x68, 0x07, - 0xd2, 0xf3, 0xd5, 0xad, 0xea, 0xf9, 0x5b, 0x60, 0x89, 0xd1, 0xda, 0x55, 0x84, 0x54, 0xd1, 0x16, - 0x72, 0xf1, 0xef, 0xc3, 0x06, 0x0d, 0xfc, 0x61, 0xec, 0x35, 0x04, 0xd5, 0xf2, 0xc2, 0x4a, 0xc2, - 0x84, 0xa8, 0xad, 0x19, 0x16, 0x63, 0x5e, 0x48, 0x6d, 0x00, 0x10, 0xcf, 0xcf, 0x9c, 0x15, 0xfb, - 0x1c, 0xb7, 0xaa, 0x6f, 0x42, 0x3e, 0x98, 0x1c, 0xc7, 0xa7, 0x71, 0x1a, 0xaa, 0x9d, 0x43, 0x6d, - 0xce, 0x3b, 0x38, 0x14, 0xbe, 0x6a, 0xee, 0x95, 0x57, 0xbb, 0x3f, 0x4c, 0x4e, 0xbc, 0x52, 0xce, - 0xbb, 0x97, 0xcc, 0x5e, 0x24, 0x39, 0xa1, 0x01, 0xb5, 0x77, 0xa0, 0x9c, 0x18, 0x54, 0xb4, 0xcc, - 0x13, 0xd7, 0xf2, 0xc2, 0x14, 0x30, 0xfe, 0x56, 0x57, 0xdb, 0xac, 0x30, 0x09, 0x4c, 0xbf, 0x6b, - 0x06, 0xb0, 0xd9, 0x01, 0xbc, 0x22, 0xc2, 0x7e, 0x05, 0x2a, 0x09, 0x97, 0x2e, 0x4a, 0x0f, 0x4e, - 0x23, 0xeb, 0x67, 0xf0, 0xc5, 0x84, 0xb8, 0x43, 0xe1, 0x8f, 0xec, 0x00, 0x37, 0x12, 0x15, 0x2c, - 0x92, 0x6b, 0x6d, 0x09, 0x57, 0xda, 0x32, 0xb4, 0xa0, 0x11, 0xcc, 0xbf, 0x05, 0xb9, 0xb1, 0xf0, - 0x47, 0x81, 0xb6, 0xa2, 0xb3, 0x1a, 0xb4, 0x50, 0x6c, 0x60, 0x28, 0x9e, 0xfa, 0x3f, 0x48, 0x41, - 0x71, 0x5f, 0x48, 0x13, 0x7d, 0x07, 0xbe, 0x3f, 0xf3, 0x96, 0xf9, 0x13, 0xe4, 0x90, 0x74, 0x53, - 0x87, 0xaf, 0x9b, 0x6d, 0x4d, 0xaf, 0xe1, 0xdd, 0x95, 0xb8, 0x61, 0xb5, 0x2d, 0x28, 0x68, 0x74, - 0xed, 0x5d, 0x58, 0x9f, 0xa1, 0xa4, 0x71, 0x51, 0xbe, 0x7d, 0xf7, 0x62, 0x14, 0x96, 0x39, 0xad, - 0x1a, 0xd3, 0xc8, 0xad, 0x12, 0x14, 0xc6, 0x8a, 0xa1, 0xfe, 0x07, 0x37, 0xa8, 0xb8, 0xc6, 0x3e, - 0xc1, 0x98, 0x7e, 0xd1, 0xce, 0x7a, 0x07, 0x80, 0xb6, 0x66, 0x55, 0x82, 0xa1, 0x52, 0xb6, 0x09, - 0x0c, 0x7f, 0x3f, 0xca, 0xb5, 0x67, 0x17, 0x3a, 0x55, 0x49, 0xe1, 0xb3, 0x09, 0xf7, 0x2a, 0x14, - 0xec, 0x80, 0xf2, 0x70, 0xba, 0x6c, 0x29, 0x04, 0xf9, 0xb7, 0x21, 0x6f, 0x8f, 0xc6, 0x9e, 0x2f, - 0x75, 0x32, 0xfe, 0x4a, 0xa9, 0x6d, 0xa2, 0xdc, 0x5d, 0x31, 0x34, 0x0f, 0x72, 0x8b, 0x73, 0xe2, - 0x2e, 0xbe, 0x98, 0xbb, 0x75, 0x1e, 0x72, 0x2b, 0x1e, 0xfe, 0x3d, 0xa8, 0x0c, 0x54, 0xd5, 0xa6, - 0x12, 0xac, 0x8d, 0xc8, 0x57, 0xaf, 0x12, 0xf2, 0x28, 0xc9, 0xb0, 0xbb, 0x62, 0x4c, 0x4b, 0x40, - 0x91, 0xe8, 0xc0, 0x8b, 0x40, 0xf6, 0xbc, 0x8f, 0x3c, 0xdb, 0xa5, 0x70, 0xf7, 0x05, 0x22, 0x8d, - 0x24, 0x03, 0x8a, 0x9c, 0x92, 0xc0, 0xbf, 0x81, 0x1e, 0x4f, 0x20, 0xf5, 0xc5, 0xf6, 0xbb, 0x57, - 0x49, 0xea, 0x89, 0x40, 0x5f, 0x49, 0x0f, 0x24, 0x3f, 0x87, 0x5a, 0x62, 0x91, 0xe8, 0x97, 0x34, - 0xc6, 0x63, 0xdf, 0xc3, 0x98, 0xb9, 0x42, 0xd2, 0xbe, 0x71, 0x95, 0xb4, 0xc3, 0x4b, 0xb9, 0x77, - 0x57, 0x8c, 0x2b, 0x64, 0xf3, 0x1e, 0x46, 0x76, 0xba, 0x0b, 0x7b, 0xc2, 0x3c, 0x0b, 0xaf, 0xc5, - 0xdf, 0x5f, 0x6a, 0x14, 0x88, 0x63, 0x77, 0xc5, 0x98, 0x91, 0xc1, 0x7f, 0x05, 0x36, 0xa6, 0xde, - 0x49, 0x37, 0x61, 0xd5, 0xa5, 0xf9, 0xaf, 0x2f, 0xdd, 0x0d, 0x64, 0xda, 0x5d, 0x31, 0xe6, 0x25, - 0xf1, 0x09, 0x7c, 0x61, 0xbe, 0x4b, 0xdb, 0xa2, 0xef, 0xd8, 0xae, 0xd0, 0xf7, 0xeb, 0xdf, 0x79, - 0xb9, 0xd1, 0xd2, 0xcc, 0xbb, 0x2b, 0xc6, 0xe5, 0x92, 0xf9, 0x5f, 0x84, 0xdb, 0xe3, 0x85, 0x26, - 0x46, 0x99, 0x2e, 0x7d, 0x3d, 0xff, 0xbd, 0x25, 0xdf, 0x3c, 0xc7, 0xbf, 0xbb, 0x62, 0x5c, 0x29, - 0x1f, 0x7d, 0x67, 0x8a, 0xa0, 0x75, 0x71, 0xb9, 0x02, 0xe8, 0xa4, 0xb6, 0xef, 0xec, 0x0a, 0xd3, - 0x8a, 0xce, 0x0b, 0x62, 0x44, 0xed, 0xbf, 0xa7, 0x20, 0xaf, 0xf5, 0xfd, 0x76, 0x54, 0x31, 0x10, - 0x99, 0xee, 0x18, 0xc1, 0x3f, 0x80, 0x92, 0xf0, 0x7d, 0xcf, 0x6f, 0x7a, 0x56, 0x58, 0x6c, 0x39, - 0x9b, 0x65, 0x56, 0x72, 0x36, 0x5b, 0x21, 0x99, 0x11, 0x73, 0xf0, 0xf7, 0x01, 0xd4, 0x3a, 0xef, - 0xc5, 0x77, 0x84, 0x6a, 0x8b, 0xf9, 0xd5, 0x11, 0x54, 0x4c, 0x1d, 0xa7, 0xe5, 0xc2, 0xf3, 0x9f, - 0x10, 0x8c, 0x02, 0xce, 0x5c, 0x22, 0xe0, 0xbc, 0xad, 0xf3, 0x08, 0x94, 0x5e, 0xd1, 0x37, 0xe5, - 0x22, 0x44, 0xed, 0x5f, 0xa7, 0x20, 0xaf, 0x8c, 0x07, 0x6f, 0xcd, 0xf7, 0xe8, 0xb5, 0x17, 0xdb, - 0x9c, 0xcd, 0xd9, 0x9e, 0x7d, 0x1b, 0x40, 0xd9, 0xa0, 0x44, 0xcf, 0x6e, 0xcf, 0xc8, 0xd1, 0xac, - 0x61, 0x79, 0x73, 0x4c, 0x5f, 0x7f, 0xa8, 0x6e, 0x73, 0x51, 0x4a, 0xf8, 0xc9, 0xde, 0x1e, 0x5b, - 0xe1, 0x1b, 0x50, 0x79, 0x72, 0xf0, 0xf8, 0xa0, 0xf3, 0xec, 0xe0, 0xa8, 0x65, 0x18, 0x1d, 0x43, - 0x65, 0x86, 0xb7, 0x1a, 0xdb, 0x47, 0xed, 0x83, 0xc3, 0x27, 0x3d, 0x96, 0xae, 0xfd, 0xd3, 0x14, - 0x54, 0xa6, 0x6c, 0xd7, 0x9f, 0xee, 0xd4, 0x25, 0x86, 0x3f, 0xb3, 0x78, 0xf8, 0xb3, 0x97, 0x0d, - 0x7f, 0x6e, 0x76, 0xf8, 0x7f, 0x27, 0x05, 0x95, 0x29, 0x1b, 0x99, 0x94, 0x9e, 0x9a, 0x96, 0x9e, - 0xdc, 0xe9, 0xd3, 0x33, 0x3b, 0x7d, 0x1d, 0x56, 0xc3, 0xdf, 0x07, 0x71, 0xc6, 0x61, 0x0a, 0x97, - 0xa4, 0xa1, 0xeb, 0x14, 0xd9, 0x69, 0x1a, 0xba, 0x52, 0x71, 0x75, 0x6b, 0xe9, 0xfa, 0x68, 0x40, - 0xb7, 0xeb, 0x6b, 0x97, 0x5b, 0xd0, 0x2b, 0xba, 0xf0, 0x08, 0xca, 0xe3, 0x78, 0x99, 0xbe, 0x9c, - 0x5b, 0x92, 0xe4, 0x7c, 0x41, 0x3b, 0x7f, 0x37, 0x05, 0x6b, 0xd3, 0x36, 0xf7, 0xff, 0xeb, 0x61, - 0xfd, 0xc7, 0x29, 0xd8, 0x98, 0xb3, 0xe4, 0x57, 0x3a, 0x76, 0xb3, 0xed, 0x4a, 0x2f, 0xd1, 0xae, - 0xcc, 0x82, 0x76, 0x5d, 0x6e, 0x49, 0xae, 0x6e, 0x71, 0x17, 0xbe, 0x70, 0xe9, 0x9e, 0x70, 0xc5, - 0x50, 0x4f, 0x09, 0xcd, 0xcc, 0x0a, 0xfd, 0xed, 0x14, 0xdc, 0xbe, 0xca, 0xde, 0xff, 0x3f, 0xd7, - 0xab, 0xd9, 0x16, 0xd6, 0xdf, 0x8d, 0x0a, 0x09, 0xca, 0x50, 0xd0, 0x5f, 0xad, 0xd2, 0x85, 0xdc, - 0x43, 0xef, 0xb9, 0xab, 0x32, 0xd1, 0x86, 0x30, 0xf5, 0xbd, 0x7e, 0x43, 0x8c, 0x1d, 0x9b, 0xce, - 0x48, 0x6f, 0x01, 0x34, 0x28, 0xae, 0x0b, 0xaf, 0xd9, 0x34, 0xf7, 0x3a, 0xdd, 0x16, 0x5b, 0x49, - 0x3a, 0xb1, 0x9f, 0x84, 0x86, 0xb8, 0x7e, 0x08, 0xf9, 0xf8, 0xe2, 0xc3, 0xbe, 0xe9, 0x9f, 0x5a, - 0xea, 0x24, 0x72, 0x15, 0x8a, 0x87, 0x3a, 0x84, 0x52, 0xaf, 0xfa, 0xa8, 0xdb, 0x39, 0x50, 0x49, - 0xef, 0xed, 0x4e, 0x4f, 0x5d, 0x9f, 0xe8, 0x3e, 0x7d, 0xa4, 0x8e, 0xc4, 0x1e, 0x19, 0x8d, 0xc3, - 0xdd, 0x23, 0xa2, 0xc8, 0xd5, 0x7f, 0x2b, 0x1b, 0xee, 0x6a, 0x75, 0x43, 0x9f, 0x71, 0x02, 0xe4, - 0xd1, 0x9a, 0x7b, 0x5a, 0x70, 0xf4, 0x1a, 0x2a, 0xf9, 0x6d, 0x9d, 0xab, 0x3c, 0x04, 0x4b, 0xf3, - 0x3c, 0xa4, 0x0f, 0x8f, 0x55, 0x25, 0xd2, 0xae, 0x1c, 0x39, 0xea, 0xde, 0x65, 0xef, 0x5c, 0xb2, - 0x1c, 0xfe, 0x68, 0x06, 0x67, 0x2c, 0x5f, 0xff, 0x67, 0x19, 0x28, 0x45, 0xa6, 0xf2, 0x65, 0x4c, - 0x37, 0xe7, 0xb0, 0xd6, 0x3e, 0xe8, 0xb5, 0x8c, 0x83, 0xc6, 0x9e, 0x26, 0xc9, 0xf0, 0x6b, 0xb0, - 0xbe, 0xd3, 0xde, 0x6b, 0x1d, 0xed, 0x75, 0x1a, 0xdb, 0x1a, 0x59, 0xe4, 0x37, 0x81, 0xb7, 0xf7, - 0x0f, 0x3b, 0x46, 0xef, 0xa8, 0xdd, 0x3d, 0x6a, 0x36, 0x0e, 0x9a, 0xad, 0xbd, 0xd6, 0x36, 0xcb, - 0xf3, 0x57, 0xe0, 0xee, 0x41, 0xa7, 0xd7, 0xee, 0x1c, 0x1c, 0x1d, 0x74, 0x8e, 0x3a, 0x5b, 0x1f, - 0xb5, 0x9a, 0xbd, 0xee, 0x51, 0xfb, 0xe0, 0x08, 0xa5, 0x3e, 0x32, 0x1a, 0xf8, 0x84, 0xe5, 0xf8, - 0x5d, 0xb8, 0xad, 0xa9, 0xba, 0x2d, 0xe3, 0x69, 0xcb, 0x40, 0x21, 0x4f, 0x0e, 0x1a, 0x4f, 0x1b, - 0xed, 0xbd, 0xc6, 0xd6, 0x5e, 0x8b, 0xad, 0xf2, 0x3b, 0x50, 0xd3, 0x14, 0x46, 0xa3, 0xd7, 0x3a, - 0xda, 0x6b, 0xef, 0xb7, 0x7b, 0x47, 0xad, 0xef, 0x37, 0x5b, 0xad, 0xed, 0xd6, 0x36, 0xab, 0xf0, - 0xaf, 0xc2, 0x57, 0xa8, 0x51, 0xba, 0x11, 0xd3, 0x2f, 0xfb, 0xa4, 0x7d, 0x78, 0xd4, 0x30, 0x9a, - 0xbb, 0xed, 0xa7, 0x2d, 0xb6, 0xc6, 0x5f, 0x83, 0x2f, 0x5f, 0x4e, 0xba, 0xdd, 0x36, 0x5a, 0xcd, - 0x5e, 0xc7, 0xf8, 0x98, 0x6d, 0xf0, 0x5f, 0x82, 0x2f, 0xec, 0xf6, 0xf6, 0xf7, 0x8e, 0x9e, 0x19, - 0x9d, 0x83, 0x47, 0x47, 0xf4, 0xb3, 0xdb, 0x33, 0x9e, 0x34, 0x7b, 0x4f, 0x8c, 0x16, 0x03, 0x5e, - 0x83, 0x9b, 0x87, 0x5b, 0x47, 0x07, 0x9d, 0xde, 0x51, 0xe3, 0xe0, 0xe3, 0xad, 0xbd, 0x4e, 0xf3, - 0xf1, 0xd1, 0x4e, 0xc7, 0xd8, 0x6f, 0xf4, 0x58, 0x99, 0x7f, 0x0d, 0x5e, 0x6b, 0x76, 0x9f, 0xea, - 0x66, 0x76, 0x76, 0x8e, 0x8c, 0xce, 0xb3, 0xee, 0x51, 0xc7, 0x38, 0x32, 0x5a, 0x7b, 0xd4, 0xe7, - 0x6e, 0xdc, 0xf6, 0x02, 0xbf, 0x0d, 0xd5, 0xf6, 0x41, 0xf7, 0xc9, 0xce, 0x4e, 0xbb, 0xd9, 0x6e, - 0x1d, 0xf4, 0x8e, 0x0e, 0x5b, 0xc6, 0x7e, 0xbb, 0xdb, 0x45, 0x32, 0x56, 0xaa, 0x7f, 0x17, 0xf2, - 0x6d, 0xf7, 0xcc, 0x96, 0xb4, 0xbe, 0xb4, 0x32, 0xea, 0x88, 0x2b, 0x04, 0x69, 0x59, 0xd8, 0x03, - 0x97, 0xbe, 0x27, 0x40, 0xab, 0x6b, 0xd5, 0x88, 0x11, 0xf5, 0xff, 0x92, 0x81, 0x8a, 0x12, 0x11, - 0x46, 0x70, 0xf7, 0x60, 0x5d, 0xa7, 0x42, 0xdb, 0xd3, 0x26, 0x6c, 0x16, 0x4d, 0x1f, 0xea, 0x52, - 0xa8, 0x84, 0x21, 0x4b, 0xa2, 0xf8, 0x4d, 0xc8, 0x9b, 0x7d, 0x07, 0xc3, 0x40, 0x75, 0x5e, 0xa9, - 0xa1, 0xcf, 0x6b, 0xbb, 0xd0, 0x2e, 0x2a, 0xc2, 0xbe, 0xe7, 0x36, 0xa3, 0x2b, 0x25, 0x53, 0x38, - 0xfe, 0x09, 0xdc, 0x8a, 0xe0, 0x96, 0xdb, 0xf7, 0x2f, 0xc6, 0xd1, 0x97, 0xf4, 0x0a, 0x0b, 0x93, - 0x09, 0x3b, 0xb6, 0x23, 0xa6, 0x08, 0x8d, 0xcb, 0x04, 0xf0, 0x47, 0x00, 0x36, 0x0d, 0x16, 0xf9, - 0x47, 0x8b, 0xef, 0x4d, 0x4f, 0x8d, 0xa6, 0x86, 0xb4, 0x1b, 0x18, 0xfd, 0xc6, 0x0d, 0x62, 0x80, - 0x76, 0xf7, 0xb1, 0xfe, 0xf0, 0xde, 0xaa, 0x11, 0xc1, 0xf5, 0x0e, 0x40, 0xcc, 0xc5, 0x19, 0xac, - 0xa2, 0x6f, 0xd1, 0x08, 0xf6, 0xc5, 0xe8, 0x58, 0xf8, 0xaa, 0x8a, 0x4f, 0x61, 0x1e, 0x21, 0x07, - 0x4b, 0xa1, 0xfe, 0x27, 0x49, 0x9e, 0xd9, 0x72, 0xe8, 0x4d, 0xc2, 0x2d, 0x5d, 0x5d, 0x15, 0x88, - 0xe3, 0x74, 0x15, 0x87, 0x5f, 0xb9, 0x43, 0x2d, 0x3a, 0x33, 0xc2, 0x48, 0x59, 0x0f, 0xba, 0x76, - 0x9c, 0x34, 0xc8, 0x0f, 0x81, 0xdb, 0xf3, 0x43, 0x9d, 0x5d, 0x72, 0xa8, 0x17, 0xf0, 0xce, 0xa6, - 0xfc, 0x73, 0xf3, 0x29, 0xff, 0x3b, 0x00, 0x03, 0xc7, 0x3b, 0xd6, 0xe7, 0x8e, 0x79, 0x5d, 0x17, - 0x14, 0x61, 0xea, 0x0e, 0x14, 0xc3, 0xaf, 0x0c, 0xa2, 0x0e, 0xd2, 0x77, 0x06, 0xa3, 0x04, 0xa8, - 0x82, 0xf8, 0x2e, 0xac, 0x89, 0xe9, 0x36, 0xa7, 0x97, 0x6c, 0xf3, 0x0c, 0x5f, 0xfd, 0x9b, 0xb0, - 0x31, 0x47, 0x84, 0x83, 0x38, 0x36, 0x65, 0xf4, 0xa9, 0x01, 0xfc, 0x3d, 0x7f, 0x9c, 0x5f, 0xff, - 0x77, 0x69, 0x58, 0xdd, 0x37, 0x5d, 0xfb, 0x44, 0x04, 0x32, 0x6c, 0x6d, 0xd0, 0x1f, 0x8a, 0x91, - 0x19, 0xb6, 0x56, 0x41, 0x3a, 0x2b, 0x92, 0x4e, 0x9e, 0x37, 0xcc, 0x1d, 0x4f, 0xe1, 0x6a, 0x9b, - 0xc8, 0x61, 0x54, 0x7d, 0xaf, 0x21, 0x9c, 0x3b, 0xc7, 0xee, 0x0b, 0x37, 0x08, 0x57, 0x54, 0x08, - 0xc6, 0xd5, 0x3d, 0xf9, 0x2b, 0xaa, 0x7b, 0x0a, 0xf3, 0xe3, 0x7f, 0x17, 0xca, 0x41, 0xdf, 0x17, - 0xc2, 0x0d, 0x86, 0x9e, 0x0c, 0xbf, 0x50, 0x99, 0x44, 0x51, 0xa9, 0x9d, 0xf7, 0xdc, 0xc5, 0x35, - 0xb0, 0x67, 0xbb, 0xa7, 0xba, 0x82, 0x6c, 0x0a, 0x87, 0x3a, 0x48, 0x39, 0x21, 0xfb, 0x53, 0x41, - 0xf9, 0x88, 0x9c, 0x11, 0xc1, 0x94, 0xf5, 0x31, 0xa5, 0x18, 0x78, 0xbe, 0x2d, 0x54, 0xea, 0xb3, - 0x64, 0x24, 0x30, 0xc8, 0xeb, 0x98, 0xee, 0x60, 0x62, 0x0e, 0x84, 0x3e, 0x1e, 0x8f, 0xe0, 0xfa, - 0xff, 0xc8, 0x01, 0xa8, 0xa5, 0x10, 0x0c, 0xed, 0x31, 0x1d, 0xcd, 0xd8, 0xba, 0xe6, 0xb8, 0x62, - 0xd0, 0x6f, 0xfe, 0xde, 0xd4, 0x75, 0x80, 0xf9, 0xc3, 0xd4, 0x98, 0x7d, 0x36, 0x65, 0x84, 0x83, - 0x63, 0x4a, 0xa1, 0x0b, 0xab, 0x68, 0xfc, 0xb3, 0x46, 0x12, 0x45, 0xa5, 0x75, 0xa6, 0x14, 0x2d, - 0xd7, 0x52, 0x29, 0xa9, 0xac, 0x11, 0xc1, 0x74, 0xa1, 0x28, 0x68, 0x4c, 0xa4, 0x67, 0x08, 0x57, - 0x3c, 0x8f, 0xee, 0xca, 0xc5, 0x28, 0xbe, 0x0f, 0x95, 0xb1, 0x79, 0x31, 0x12, 0xae, 0xdc, 0x17, - 0x72, 0xe8, 0x59, 0xba, 0x0a, 0xea, 0xb5, 0xcb, 0x1b, 0x78, 0x98, 0x24, 0x37, 0xa6, 0xb9, 0x51, - 0x27, 0xdc, 0x80, 0x56, 0x89, 0x9a, 0x46, 0x0d, 0xf1, 0x2d, 0x00, 0xf5, 0x2b, 0x61, 0xc9, 0xe6, - 0xb2, 0x54, 0xe6, 0x48, 0x04, 0xc2, 0x3f, 0xb3, 0x95, 0xf5, 0x55, 0x46, 0x2c, 0xe6, 0x42, 0x5b, - 0x3d, 0x09, 0x84, 0xdf, 0x1a, 0x99, 0xb6, 0xa3, 0x27, 0x38, 0x46, 0xf0, 0xb7, 0xe1, 0x46, 0x30, - 0x39, 0x46, 0x9d, 0x39, 0x16, 0x3d, 0xef, 0x40, 0x3c, 0x0f, 0x1c, 0x21, 0xa5, 0xf0, 0x75, 0xa5, - 0xc5, 0xe2, 0x87, 0xf5, 0x41, 0xe4, 0xa6, 0xd1, 0xd7, 0x50, 0xf0, 0x57, 0x5c, 0xce, 0x15, 0xa1, - 0x74, 0xad, 0x1b, 0x4b, 0xa1, 0x79, 0x54, 0x28, 0x5d, 0x0a, 0x97, 0xe6, 0x5f, 0x81, 0x2f, 0x4d, - 0x11, 0x19, 0xea, 0xe0, 0x3a, 0xd8, 0xb1, 0x5d, 0xd3, 0xb1, 0x3f, 0x55, 0x65, 0x04, 0x99, 0xfa, - 0x18, 0x2a, 0x53, 0x03, 0x47, 0x97, 0x3b, 0xe9, 0x97, 0xae, 0x07, 0x62, 0xb0, 0xaa, 0xe0, 0xae, - 0xf4, 0x6d, 0x3a, 0x91, 0x89, 0x30, 0x4d, 0x5c, 0xe7, 0x1e, 0x4b, 0xf3, 0xeb, 0xc0, 0x14, 0xa6, - 0xed, 0x9a, 0xe3, 0x71, 0x63, 0x3c, 0x76, 0x04, 0xcb, 0xd0, 0xc5, 0xd9, 0x18, 0xab, 0x2e, 0x05, - 0xb0, 0x6c, 0xfd, 0xfb, 0x70, 0x8b, 0x46, 0xe6, 0xa9, 0xf0, 0xa3, 0x40, 0x5c, 0xf7, 0xf5, 0x06, - 0x6c, 0xa8, 0x5f, 0x07, 0x9e, 0x54, 0x8f, 0xc9, 0x39, 0xe5, 0xb0, 0xa6, 0xd0, 0xe8, 0x9b, 0x75, - 0x05, 0x5d, 0x87, 0x8d, 0x70, 0x11, 0x5d, 0xba, 0xfe, 0x87, 0x79, 0xe0, 0xb1, 0x42, 0xf4, 0x6c, - 0xe1, 0x6f, 0x9b, 0xd2, 0x4c, 0x64, 0x52, 0x2b, 0x97, 0xd6, 0x02, 0xbc, 0xb8, 0x92, 0xef, 0x26, - 0xe4, 0xed, 0x00, 0x43, 0x47, 0x5d, 0xce, 0xab, 0x21, 0xbe, 0x07, 0x30, 0x16, 0xbe, 0xed, 0x59, - 0xa4, 0x41, 0xb9, 0x85, 0xb7, 0x32, 0xe6, 0x1b, 0xb5, 0x79, 0x18, 0xf1, 0x18, 0x09, 0x7e, 0x6c, - 0x87, 0x82, 0xd4, 0xc9, 0x7a, 0x9e, 0x1a, 0x9d, 0x44, 0xf1, 0x37, 0xe0, 0xda, 0xd8, 0xb7, 0xfb, - 0x42, 0x4d, 0xc7, 0x93, 0xc0, 0x6a, 0xd2, 0x37, 0x04, 0x0b, 0x44, 0xb9, 0xe8, 0x11, 0x6a, 0xa0, - 0xe9, 0x52, 0x40, 0x15, 0xd0, 0x59, 0xb2, 0xbe, 0x40, 0xae, 0x0a, 0x5e, 0x2b, 0xc6, 0xe2, 0x87, - 0xfc, 0x3e, 0x30, 0xfd, 0x60, 0xdf, 0x76, 0xf7, 0x84, 0x3b, 0x90, 0x43, 0x52, 0xee, 0x8a, 0x31, - 0x87, 0x27, 0x0b, 0xa6, 0xbe, 0xd4, 0xa4, 0xce, 0x99, 0x4a, 0x46, 0x04, 0xab, 0x8f, 0x12, 0x38, - 0x9e, 0xdf, 0x95, 0xbe, 0xae, 0xdc, 0x8d, 0x60, 0xf4, 0xb1, 0x02, 0x6a, 0xeb, 0xa1, 0xef, 0x59, - 0x13, 0x3a, 0x05, 0x51, 0x46, 0x6c, 0x16, 0x1d, 0x53, 0xee, 0x9b, 0xae, 0x2e, 0xa7, 0xac, 0x24, - 0x29, 0x23, 0x34, 0xc5, 0x8c, 0x5e, 0x10, 0x0b, 0x5c, 0xd7, 0x31, 0x63, 0x02, 0xa7, 0x69, 0x62, - 0x51, 0x2c, 0xa2, 0x89, 0xe5, 0x50, 0xff, 0x2d, 0xdf, 0xb3, 0xad, 0x58, 0x96, 0xaa, 0xec, 0x99, - 0xc3, 0x27, 0x68, 0x63, 0x99, 0x7c, 0x8a, 0x36, 0x96, 0x7b, 0x1d, 0x72, 0xde, 0xc9, 0x89, 0xf0, - 0xe9, 0xc3, 0x9c, 0x25, 0x43, 0x01, 0xf5, 0x1f, 0xa7, 0x00, 0x62, 0x95, 0xc0, 0x85, 0x10, 0x43, - 0xf1, 0xc2, 0xbf, 0x05, 0xd7, 0x92, 0x68, 0x47, 0x17, 0xca, 0xd2, 0x6a, 0x88, 0x1f, 0x6c, 0x9b, - 0x17, 0x01, 0x4b, 0xeb, 0x8b, 0xdd, 0x1a, 0xf7, 0x4c, 0x08, 0xaa, 0x3a, 0xbc, 0x0e, 0x2c, 0x46, - 0xd2, 0x6d, 0xbd, 0x80, 0x65, 0xa7, 0x49, 0x3f, 0x16, 0xa6, 0x1f, 0xb0, 0x5c, 0x7d, 0x17, 0xf2, - 0xea, 0x88, 0x6c, 0xc1, 0xe1, 0xf6, 0xcb, 0x55, 0xaa, 0xfc, 0xf5, 0x14, 0xc0, 0xb6, 0xaa, 0xaa, - 0xc6, 0xbd, 0x7d, 0x41, 0xcd, 0xc0, 0x22, 0x3f, 0xcb, 0xb4, 0x2c, 0xaa, 0x4e, 0xcf, 0x44, 0x5f, - 0x05, 0x42, 0x10, 0xf5, 0xc9, 0x0c, 0x2b, 0xcb, 0xd4, 0x4a, 0x8c, 0x60, 0xb5, 0xad, 0x34, 0x3d, - 0xd7, 0x15, 0x7d, 0xdc, 0x94, 0xa2, 0x6d, 0x25, 0x42, 0xd5, 0x7f, 0x94, 0x86, 0x52, 0x73, 0x68, - 0x4a, 0xf5, 0x11, 0x9d, 0xef, 0x42, 0x71, 0x24, 0x82, 0xc0, 0x1c, 0x88, 0x40, 0x1f, 0x09, 0xcd, - 0x9e, 0xe7, 0x46, 0xb4, 0x9b, 0x4f, 0x5c, 0x5f, 0x98, 0x96, 0xfa, 0x72, 0x50, 0xc4, 0xa5, 0x24, - 0xb8, 0x32, 0x0a, 0xd9, 0x5f, 0x42, 0x82, 0x1b, 0x7d, 0xe6, 0xd7, 0x31, 0x03, 0x45, 0x12, 0xa5, - 0xe3, 0x92, 0xa8, 0xda, 0x3e, 0x94, 0x13, 0xac, 0xfc, 0x15, 0xa8, 0x78, 0x8e, 0x25, 0x02, 0x75, - 0x77, 0x30, 0xfe, 0xdc, 0xe2, 0x14, 0x92, 0x0a, 0x3b, 0x70, 0x3d, 0x0b, 0x5f, 0x9f, 0xee, 0x85, - 0x60, 0xfd, 0x37, 0x8b, 0x50, 0xc6, 0x46, 0xed, 0xab, 0x3e, 0xcc, 0x4d, 0x47, 0x15, 0x0a, 0x9e, - 0x96, 0xac, 0x2f, 0x1d, 0x7a, 0x09, 0x99, 0xba, 0x58, 0x24, 0x33, 0x5d, 0x2c, 0x72, 0x1b, 0x4a, - 0xea, 0x28, 0xca, 0x6a, 0x28, 0xfb, 0x98, 0x31, 0x62, 0x04, 0x3a, 0x31, 0x23, 0xcf, 0x22, 0x2b, - 0xdd, 0x50, 0xa7, 0x38, 0x19, 0x23, 0x81, 0xa1, 0x30, 0x48, 0x77, 0xbf, 0xac, 0xc3, 0x20, 0x05, - 0xaa, 0xaa, 0x9d, 0xb1, 0x73, 0xd1, 0xf3, 0x74, 0x6b, 0xdb, 0x56, 0x7c, 0x77, 0x7b, 0x1a, 0xcf, - 0x9b, 0x50, 0xd0, 0xd3, 0xa2, 0xcf, 0xaa, 0xbe, 0xba, 0x60, 0x26, 0x34, 0xf9, 0xa6, 0xfe, 0xab, - 0xaf, 0x4f, 0x19, 0x21, 0x27, 0x7f, 0x04, 0x65, 0x53, 0x4a, 0xb3, 0x3f, 0x1c, 0x69, 0xab, 0x9a, - 0x59, 0x70, 0x6c, 0x9d, 0x14, 0xd4, 0x88, 0xa8, 0x8d, 0x24, 0x27, 0xdf, 0x82, 0x92, 0x2f, 0xcc, - 0xa9, 0x93, 0xf3, 0x57, 0xae, 0x10, 0x63, 0x84, 0xb4, 0x46, 0xcc, 0x16, 0x7d, 0x79, 0x14, 0x12, - 0x5f, 0x1e, 0xbd, 0x0b, 0x65, 0xad, 0x3a, 0x06, 0x3e, 0x52, 0x5f, 0x64, 0x49, 0xa2, 0x6a, 0x3f, - 0x4d, 0xc1, 0xda, 0x74, 0xf7, 0xfe, 0x34, 0xbe, 0x95, 0xf7, 0xed, 0xf8, 0x5b, 0x79, 0x9f, 0xe3, - 0xbb, 0x73, 0xbf, 0x9d, 0x02, 0x88, 0x47, 0x0e, 0xf7, 0x56, 0xf5, 0x4d, 0xaf, 0xd0, 0xdb, 0x57, - 0x10, 0xdf, 0x9d, 0xfa, 0x10, 0xc4, 0xdb, 0x4b, 0x4d, 0x43, 0xe2, 0x67, 0xa2, 0x2c, 0xfe, 0x01, - 0xac, 0x4d, 0xe3, 0xe9, 0x3a, 0x41, 0x7b, 0xaf, 0xa5, 0x72, 0x5f, 0xed, 0xfd, 0xc6, 0xa3, 0x96, - 0xbe, 0xc6, 0xd6, 0x3e, 0x78, 0xcc, 0xd2, 0xb5, 0x3f, 0x4a, 0x41, 0x29, 0x9a, 0x14, 0xfe, 0xbd, - 0xe4, 0x6c, 0xaa, 0x02, 0x9a, 0xb7, 0x96, 0x99, 0xcd, 0xf8, 0x57, 0xcb, 0x95, 0xfe, 0x45, 0x62, - 0x72, 0x6b, 0x1e, 0xac, 0x4d, 0x3f, 0x5c, 0x60, 0x66, 0x1f, 0x4d, 0x9b, 0xd9, 0x37, 0x97, 0x7a, - 0x65, 0x18, 0xe2, 0xee, 0xd9, 0x81, 0xd4, 0x16, 0xf8, 0xfd, 0xf4, 0x7b, 0xa9, 0xda, 0x5d, 0x58, - 0x4d, 0x3e, 0x9a, 0xbf, 0xc9, 0x7a, 0xff, 0x8f, 0x32, 0xb0, 0x36, 0x5d, 0x83, 0x42, 0x37, 0xe3, - 0x54, 0xfd, 0x53, 0xc7, 0xb1, 0x12, 0x37, 0x09, 0x18, 0x86, 0xdf, 0x3a, 0x88, 0x26, 0xc4, 0x06, - 0x65, 0xd7, 0xbc, 0x91, 0x60, 0x77, 0x93, 0xdf, 0x03, 0x7d, 0x83, 0x43, 0x78, 0xa3, 0x91, 0x8d, - 0x79, 0x49, 0x7f, 0x19, 0xed, 0x47, 0x69, 0x5e, 0x49, 0xd4, 0xb3, 0xff, 0x04, 0x3d, 0xc8, 0xf5, - 0xad, 0x89, 0x6b, 0x39, 0xc2, 0x8a, 0xb0, 0x3f, 0x4d, 0x62, 0xa3, 0x82, 0xf4, 0x1f, 0x65, 0xf9, - 0x1a, 0x94, 0xba, 0x93, 0x63, 0x5d, 0x8c, 0xfe, 0x97, 0xb2, 0xfc, 0x26, 0x6c, 0x68, 0xaa, 0xb8, - 0xf6, 0x93, 0xfd, 0x65, 0xdc, 0xd5, 0xd6, 0x1a, 0x6a, 0xbc, 0x74, 0x43, 0xd9, 0x5f, 0xc9, 0x62, - 0x13, 0xe8, 0xa2, 0xfc, 0x5f, 0x25, 0x39, 0xd1, 0xc5, 0x21, 0xf6, 0xab, 0x59, 0xbe, 0x0e, 0xd0, - 0xed, 0x45, 0x2f, 0xfa, 0xf5, 0x2c, 0x2f, 0x43, 0xbe, 0xdb, 0x23, 0x69, 0x3f, 0xce, 0xf2, 0x1b, - 0xc0, 0xe2, 0xa7, 0xba, 0x22, 0xf6, 0x6f, 0xa8, 0xc6, 0x44, 0x25, 0xae, 0x7f, 0x33, 0x8b, 0xfd, - 0x0a, 0x47, 0x99, 0xfd, 0xad, 0x2c, 0x67, 0x50, 0x4e, 0xe4, 0x6c, 0xd9, 0xdf, 0xce, 0x72, 0x0e, - 0x95, 0x7d, 0x3b, 0x08, 0x6c, 0x77, 0xa0, 0x7b, 0xf0, 0x6b, 0xf4, 0xe6, 0x9d, 0xe8, 0xee, 0x13, - 0xfb, 0x8d, 0x2c, 0xbf, 0x05, 0x3c, 0x79, 0x4e, 0xa5, 0x1f, 0xfc, 0x26, 0x71, 0xab, 0x9d, 0x34, - 0xd0, 0xb8, 0xbf, 0x43, 0xdc, 0xa8, 0x09, 0x1a, 0xf1, 0x5b, 0x34, 0x20, 0xcd, 0xb8, 0x86, 0x56, - 0xe3, 0x7f, 0x42, 0xcc, 0xe1, 0x64, 0x2a, 0xdc, 0x4f, 0xb3, 0xf7, 0x7f, 0x8f, 0xce, 0x19, 0x92, - 0xa5, 0x68, 0x7c, 0x15, 0x8a, 0x8e, 0xe7, 0x0e, 0xa4, 0xfa, 0x0e, 0x6b, 0x05, 0x4a, 0xc1, 0xd0, - 0xf3, 0x25, 0x81, 0x74, 0x39, 0xd3, 0xa5, 0x4b, 0xfc, 0xea, 0x3a, 0x83, 0x8a, 0x06, 0x55, 0xde, - 0x56, 0x9a, 0x03, 0x56, 0x8e, 0xaa, 0x7f, 0xb3, 0x51, 0x85, 0x32, 0x7d, 0x4c, 0x20, 0xbc, 0xac, - 0xcd, 0xf2, 0x48, 0x3a, 0xf1, 0x1d, 0x55, 0xa9, 0x2c, 0x30, 0x12, 0x50, 0x1f, 0x5c, 0x1c, 0x0f, - 0x31, 0xe0, 0x28, 0x29, 0xac, 0xf7, 0x03, 0x5b, 0x5d, 0x03, 0xd6, 0x85, 0x7f, 0x16, 0xb6, 0x23, - 0xaa, 0x6d, 0x61, 0xe2, 0xfe, 0xdf, 0x4d, 0xc1, 0x6a, 0x78, 0x85, 0xde, 0x1e, 0xd8, 0xae, 0xaa, - 0x75, 0x0e, 0xbf, 0x6e, 0xdb, 0x77, 0xec, 0x71, 0xf8, 0xb5, 0xc8, 0x75, 0x28, 0x5b, 0xbe, 0x39, - 0x68, 0xb8, 0xd6, 0xb6, 0xef, 0x8d, 0x55, 0xb3, 0xd5, 0x49, 0xa4, 0xaa, 0xb1, 0x7e, 0x2e, 0x8e, - 0x91, 0x7c, 0x2c, 0x7c, 0x96, 0xa5, 0xa2, 0xc2, 0xa1, 0xe9, 0xdb, 0xee, 0xa0, 0x75, 0x2e, 0x85, - 0x1b, 0xa8, 0x5a, 0xeb, 0x32, 0x14, 0x26, 0x81, 0xe8, 0x9b, 0x81, 0x60, 0x79, 0x04, 0x8e, 0x27, - 0xb6, 0x23, 0x6d, 0x57, 0x7d, 0xa4, 0x31, 0x2a, 0xa6, 0x2e, 0x62, 0xcf, 0xcc, 0xb1, 0xcd, 0x4a, - 0xf7, 0xff, 0x65, 0x0a, 0xca, 0xa4, 0x16, 0x71, 0xae, 0x3d, 0xf6, 0xe2, 0xca, 0x50, 0xd8, 0x8b, - 0xbe, 0xd6, 0x97, 0x87, 0x74, 0xe7, 0x54, 0xe5, 0xda, 0xb5, 0x5a, 0xa8, 0xbb, 0xae, 0xea, 0xc3, - 0x7d, 0x59, 0xfe, 0x05, 0xb8, 0x61, 0x88, 0x91, 0x27, 0xc5, 0x33, 0xd3, 0x96, 0xc9, 0x7b, 0x4d, - 0x39, 0x0c, 0x03, 0xd5, 0xa3, 0xf0, 0x22, 0x53, 0x9e, 0xc2, 0x40, 0x7c, 0x6d, 0x88, 0x29, 0x60, - 0xef, 0x09, 0xa3, 0xe3, 0xc2, 0x62, 0x44, 0xf2, 0x91, 0x67, 0xbb, 0xf8, 0x36, 0xba, 0x7f, 0x4d, - 0x18, 0x3a, 0xb4, 0x41, 0x14, 0xdc, 0x3f, 0x80, 0x9b, 0x8b, 0x8f, 0x1a, 0xd4, 0xcd, 0x6c, 0xfa, - 0x44, 0x34, 0xdd, 0x74, 0x79, 0xe6, 0xdb, 0xea, 0x0a, 0x6d, 0x09, 0x72, 0x9d, 0xe7, 0x2e, 0xa9, - 0xc5, 0x06, 0x54, 0x0e, 0xbc, 0x04, 0x0f, 0xcb, 0xdc, 0xef, 0x4f, 0x9d, 0x0e, 0xc5, 0x83, 0x12, - 0x36, 0x62, 0x25, 0x71, 0x8b, 0x2b, 0xa5, 0xce, 0x1d, 0xe8, 0xbf, 0x7c, 0xa8, 0xaf, 0x56, 0xe8, - 0x53, 0x19, 0x4b, 0x7d, 0xb5, 0x22, 0x6a, 0x66, 0x56, 0x7d, 0xbe, 0xcb, 0xed, 0x0b, 0x47, 0x58, - 0x2c, 0x77, 0xff, 0x3d, 0x58, 0xd7, 0x5d, 0xed, 0x8b, 0x20, 0x08, 0x6f, 0x41, 0x1d, 0xfa, 0xf6, - 0x99, 0xfa, 0x32, 0xc6, 0x2a, 0x14, 0x0f, 0x85, 0x1f, 0x78, 0x2e, 0x7d, 0x15, 0x04, 0x20, 0xdf, - 0x1d, 0x9a, 0x3e, 0xbe, 0xe3, 0xfe, 0xd7, 0xf5, 0x20, 0x3d, 0x39, 0x0f, 0xb7, 0x06, 0x5c, 0x3f, - 0xfa, 0xa3, 0x38, 0xa6, 0x34, 0x35, 0xb9, 0xf4, 0x85, 0x39, 0x62, 0xe9, 0xfb, 0x4d, 0x28, 0xd1, - 0x25, 0xaa, 0xc7, 0xb6, 0x6b, 0x61, 0xc7, 0xb7, 0x74, 0x41, 0x3f, 0x7d, 0xad, 0xe9, 0x8c, 0x86, - 0xa3, 0xa8, 0xbe, 0x6b, 0xcb, 0xd2, 0xfc, 0x26, 0xf0, 0xc6, 0x44, 0x7a, 0x23, 0x93, 0x2e, 0xff, - 0x3a, 0x17, 0xea, 0x1b, 0xc8, 0x99, 0xfb, 0xdf, 0x01, 0xae, 0x72, 0x73, 0x96, 0x38, 0xb7, 0xdd, - 0x41, 0xf4, 0xd5, 0x01, 0xa0, 0x4f, 0x88, 0x58, 0xe2, 0x3c, 0xbc, 0x01, 0x17, 0x02, 0xe1, 0x87, - 0x4c, 0x76, 0xbc, 0x89, 0x8b, 0x8d, 0x7e, 0x0a, 0xd7, 0x95, 0x8a, 0x61, 0x2f, 0xe8, 0x66, 0xe9, - 0xa5, 0x09, 0x03, 0x75, 0x03, 0x4e, 0x4e, 0x82, 0x88, 0x96, 0xa5, 0xb0, 0x61, 0x51, 0xb0, 0x1d, - 0xe3, 0xd3, 0xf7, 0xeb, 0x70, 0x6d, 0x41, 0xc6, 0x83, 0x8c, 0xba, 0x8a, 0xfb, 0xd8, 0xca, 0xfd, - 0x0f, 0x61, 0x43, 0x99, 0xa1, 0x03, 0x75, 0xf7, 0x2f, 0x1c, 0xb6, 0x67, 0xed, 0x9d, 0xb6, 0x1a, - 0xe9, 0x66, 0x6b, 0x6f, 0xef, 0xc9, 0x5e, 0xc3, 0x60, 0x29, 0xd2, 0x87, 0x4e, 0xef, 0xa8, 0xd9, - 0x39, 0x38, 0x68, 0x35, 0x7b, 0xad, 0x6d, 0x96, 0xde, 0xba, 0xff, 0x6f, 0x7e, 0x7e, 0x27, 0xf5, - 0xb3, 0x9f, 0xdf, 0x49, 0xfd, 0xe7, 0x9f, 0xdf, 0x49, 0xfd, 0xf8, 0xb3, 0x3b, 0x2b, 0x3f, 0xfb, - 0xec, 0xce, 0xca, 0xbf, 0xff, 0xec, 0xce, 0xca, 0x27, 0x6c, 0xf6, 0x1f, 0xf5, 0x1c, 0xe7, 0x29, - 0xa8, 0x78, 0xeb, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0xd2, 0x67, 0x4a, 0xd8, 0xc3, 0x67, 0x00, - 0x00, + 0x69, 0xcb, 0x63, 0xcd, 0x4c, 0xcf, 0x8c, 0x67, 0x3c, 0xf6, 0x8c, 0x4d, 0x49, 0x54, 0x8b, 0xd3, + 0x7a, 0xf9, 0x92, 0xdd, 0xed, 0x19, 0xec, 0x46, 0xb9, 0xe2, 0x3d, 0x22, 0xaf, 0x75, 0x79, 0x2f, + 0x7d, 0xef, 0xa1, 0x5a, 0x32, 0x92, 0xc0, 0x79, 0xed, 0x66, 0xff, 0x9c, 0x20, 0x9b, 0xcd, 0x22, + 0x08, 0xd6, 0xfe, 0x08, 0x10, 0x64, 0x37, 0xc8, 0xd7, 0x22, 0xd9, 0x3c, 0x80, 0x64, 0xbf, 0x02, + 0xec, 0x8f, 0x93, 0xaf, 0x00, 0x09, 0x90, 0xc4, 0x06, 0xf2, 0x13, 0x24, 0xc1, 0xe6, 0xcb, 0x08, + 0xf2, 0x11, 0x54, 0x9d, 0x73, 0x5f, 0x24, 0xa5, 0x66, 0xcf, 0xee, 0x06, 0xf9, 0x12, 0xab, 0x6e, + 0x55, 0xdd, 0xf3, 0xa8, 0x53, 0xa7, 0xaa, 0x4e, 0x9d, 0x2b, 0x78, 0x65, 0x7c, 0x36, 0x78, 0xc3, + 0xb1, 0x4f, 0xde, 0x18, 0x9f, 0xbc, 0x31, 0xf2, 0x2c, 0xe1, 0xbc, 0x31, 0xf6, 0x3d, 0xe9, 0x05, + 0x0a, 0x08, 0x36, 0x08, 0xe2, 0x35, 0xd3, 0xbd, 0x94, 0x97, 0x63, 0xb1, 0x41, 0xd8, 0xc6, 0xdd, + 0x81, 0xe7, 0x0d, 0x1c, 0xa1, 0x48, 0x4f, 0x26, 0xa7, 0x6f, 0x04, 0xd2, 0x9f, 0xf4, 0xa5, 0x22, + 0x6e, 0xfe, 0x34, 0x0f, 0xb7, 0xbb, 0x23, 0xd3, 0x97, 0x9b, 0x8e, 0xd7, 0x3f, 0xeb, 0xba, 0xe6, + 0x38, 0x18, 0x7a, 0x72, 0xd3, 0x0c, 0x04, 0x7f, 0x1d, 0x8a, 0x27, 0x88, 0x0c, 0xea, 0x99, 0xfb, + 0xb9, 0x07, 0xd5, 0x87, 0x37, 0x37, 0x52, 0x82, 0x37, 0x88, 0xc3, 0xd0, 0x34, 0xfc, 0x2d, 0x28, + 0x59, 0x42, 0x9a, 0xb6, 0x13, 0xd4, 0xb3, 0xf7, 0x33, 0x0f, 0xaa, 0x0f, 0xef, 0x6c, 0xa8, 0x17, + 0x6f, 0x84, 0x2f, 0xde, 0xe8, 0xd2, 0x8b, 0x8d, 0x90, 0x8e, 0xbf, 0x07, 0xe5, 0x53, 0xdb, 0x11, + 0x8f, 0xc5, 0x65, 0x50, 0xcf, 0x5d, 0xcb, 0xb3, 0x99, 0xad, 0x67, 0x8c, 0x88, 0x98, 0x6f, 0xc1, + 0x8a, 0xb8, 0x90, 0xbe, 0x69, 0x08, 0xc7, 0x94, 0xb6, 0xe7, 0x06, 0xf5, 0x3c, 0xb5, 0xf0, 0xce, + 0x54, 0x0b, 0xc3, 0xe7, 0xc4, 0x3e, 0xc5, 0xc2, 0xef, 0x43, 0xd5, 0x3b, 0xf9, 0x9e, 0xe8, 0xcb, + 0xde, 0xe5, 0x58, 0x04, 0xf5, 0xc2, 0xfd, 0xdc, 0x83, 0x8a, 0x91, 0x44, 0xf1, 0xaf, 0x43, 0xb5, + 0xef, 0x39, 0x8e, 0xe8, 0xab, 0x77, 0x14, 0xaf, 0xef, 0x56, 0x92, 0x96, 0xbf, 0x03, 0xb7, 0x7c, + 0x31, 0xf2, 0xce, 0x85, 0xb5, 0x15, 0x61, 0xa9, 0x9f, 0x65, 0x7a, 0xcd, 0xfc, 0x87, 0xbc, 0x05, + 0x35, 0x5f, 0xb7, 0x6f, 0xcf, 0x76, 0xcf, 0x82, 0x7a, 0x89, 0xba, 0xf5, 0xf9, 0x2b, 0xba, 0x85, + 0x34, 0x46, 0x9a, 0x83, 0x33, 0xc8, 0x9d, 0x89, 0xcb, 0x7a, 0xe5, 0x7e, 0xe6, 0x41, 0xc5, 0xc0, + 0x9f, 0xfc, 0x03, 0xa8, 0x7b, 0xbe, 0x3d, 0xb0, 0x5d, 0xd3, 0xd9, 0xf2, 0x85, 0x29, 0x85, 0xd5, + 0xb3, 0x47, 0x22, 0x90, 0xe6, 0x68, 0x5c, 0x87, 0xfb, 0x99, 0x07, 0x39, 0xe3, 0xca, 0xe7, 0xfc, + 0x6d, 0x35, 0x43, 0x1d, 0xf7, 0xd4, 0xab, 0x57, 0x75, 0xf7, 0xd3, 0x6d, 0xd9, 0xd1, 0x8f, 0x8d, + 0x88, 0xb0, 0xf9, 0x8b, 0x2c, 0x14, 0xbb, 0xc2, 0xf4, 0xfb, 0xc3, 0xc6, 0xaf, 0x65, 0xa0, 0x68, + 0x88, 0x60, 0xe2, 0x48, 0xde, 0x80, 0xb2, 0x1a, 0xdb, 0x8e, 0x55, 0xcf, 0x50, 0xeb, 0x22, 0xf8, + 0xb3, 0xe8, 0xce, 0x06, 0xe4, 0x47, 0x42, 0x9a, 0xf5, 0x1c, 0x8d, 0x50, 0x63, 0xaa, 0x55, 0xea, + 0xf5, 0x1b, 0xfb, 0x42, 0x9a, 0x06, 0xd1, 0x35, 0x7e, 0x9e, 0x81, 0x3c, 0x82, 0xfc, 0x2e, 0x54, + 0x86, 0xf6, 0x60, 0xe8, 0xd8, 0x83, 0xa1, 0xd4, 0x0d, 0x89, 0x11, 0xfc, 0x23, 0x58, 0x8d, 0x00, + 0xc3, 0x74, 0x07, 0x02, 0x5b, 0x34, 0x4f, 0xf9, 0xe9, 0xa1, 0x31, 0x4d, 0xcc, 0xeb, 0x50, 0xa2, + 0xf5, 0xd0, 0xb1, 0x48, 0xa3, 0x2b, 0x46, 0x08, 0xa2, 0xba, 0x85, 0x33, 0xf5, 0x58, 0x5c, 0xd6, + 0xf3, 0xf4, 0x34, 0x89, 0xe2, 0x2d, 0x58, 0x0d, 0xc1, 0x6d, 0x3d, 0x1a, 0x85, 0xeb, 0x47, 0x63, + 0x9a, 0xbe, 0xf9, 0xc3, 0x7d, 0x28, 0xd0, 0xb2, 0xe4, 0x2b, 0x90, 0xb5, 0xc3, 0x81, 0xce, 0xda, + 0x16, 0x7f, 0x03, 0x8a, 0xa7, 0xb6, 0x70, 0xac, 0x17, 0x8e, 0xb0, 0x26, 0xe3, 0x6d, 0x58, 0xf6, + 0x45, 0x20, 0x7d, 0x5b, 0x6b, 0xbf, 0x5a, 0xa0, 0x5f, 0x98, 0x67, 0x03, 0x36, 0x8c, 0x04, 0xa1, + 0x91, 0x62, 0xc3, 0x6e, 0xf7, 0x87, 0xb6, 0x63, 0xf9, 0xc2, 0xed, 0x58, 0x6a, 0x9d, 0x56, 0x8c, + 0x24, 0x8a, 0x3f, 0x80, 0xd5, 0x13, 0xb3, 0x7f, 0x36, 0xf0, 0xbd, 0x89, 0x8b, 0x0b, 0xc2, 0xf3, + 0xa9, 0xdb, 0x15, 0x63, 0x1a, 0xcd, 0xdf, 0x84, 0x82, 0xe9, 0xd8, 0x03, 0x97, 0x56, 0xe2, 0xca, + 0xcc, 0xa4, 0xab, 0xb6, 0xb4, 0x90, 0xc2, 0x50, 0x84, 0x7c, 0x17, 0x6a, 0xe7, 0xc2, 0x97, 0x76, + 0xdf, 0x74, 0x08, 0x5f, 0x2f, 0x11, 0x67, 0x73, 0x2e, 0xe7, 0xd3, 0x24, 0xa5, 0x91, 0x66, 0xe4, + 0x1d, 0x80, 0x00, 0xcd, 0x24, 0x4d, 0xa7, 0x5e, 0x0b, 0xaf, 0xcd, 0x15, 0xb3, 0xe5, 0xb9, 0x52, + 0xb8, 0x72, 0xa3, 0x1b, 0x91, 0xef, 0x2e, 0x19, 0x09, 0x66, 0xfe, 0x1e, 0xe4, 0xa5, 0xb8, 0x90, + 0xf5, 0x95, 0x6b, 0x46, 0x34, 0x14, 0xd2, 0x13, 0x17, 0x72, 0x77, 0xc9, 0x20, 0x06, 0x64, 0xc4, + 0x45, 0x56, 0x5f, 0x5d, 0x80, 0x11, 0xd7, 0x25, 0x32, 0x22, 0x03, 0xff, 0x10, 0x8a, 0x8e, 0x79, + 0xe9, 0x4d, 0x64, 0x9d, 0x11, 0xeb, 0x17, 0xaf, 0x65, 0xdd, 0x23, 0xd2, 0xdd, 0x25, 0x43, 0x33, + 0xf1, 0x77, 0x20, 0x67, 0xd9, 0xe7, 0xf5, 0x35, 0xe2, 0xbd, 0x7f, 0x2d, 0xef, 0xb6, 0x7d, 0xbe, + 0xbb, 0x64, 0x20, 0x39, 0xdf, 0x82, 0xf2, 0x89, 0xe7, 0x9d, 0x8d, 0x4c, 0xff, 0xac, 0xce, 0x89, + 0xf5, 0x4b, 0xd7, 0xb2, 0x6e, 0x6a, 0xe2, 0xdd, 0x25, 0x23, 0x62, 0xc4, 0x2e, 0xdb, 0x7d, 0xcf, + 0xad, 0xdf, 0x58, 0xa0, 0xcb, 0x9d, 0xbe, 0xe7, 0x62, 0x97, 0x91, 0x01, 0x19, 0x1d, 0xdb, 0x3d, + 0xab, 0xdf, 0x5c, 0x80, 0x11, 0x2d, 0x27, 0x32, 0x22, 0x03, 0x36, 0xdb, 0x32, 0xa5, 0x79, 0x6e, + 0x8b, 0xe7, 0xf5, 0x5b, 0x0b, 0x34, 0x7b, 0x5b, 0x13, 0x63, 0xb3, 0x43, 0x46, 0x14, 0x12, 0x2e, + 0xcd, 0xfa, 0xed, 0x05, 0x84, 0x84, 0x16, 0x1d, 0x85, 0x84, 0x8c, 0xfc, 0xcf, 0xc2, 0xda, 0xa9, + 0x30, 0xe5, 0xc4, 0x17, 0x56, 0xbc, 0xd1, 0xdd, 0x21, 0x69, 0x1b, 0xd7, 0xcf, 0xfd, 0x34, 0xd7, + 0xee, 0x92, 0x31, 0x2b, 0x8a, 0x7f, 0x00, 0x05, 0xc7, 0x94, 0xe2, 0xa2, 0x5e, 0x27, 0x99, 0xcd, + 0x17, 0x28, 0x85, 0x14, 0x17, 0xbb, 0x4b, 0x86, 0x62, 0xe1, 0xdf, 0x85, 0x55, 0x69, 0x9e, 0x38, + 0xe2, 0xf0, 0x54, 0x13, 0x04, 0xf5, 0xcf, 0x91, 0x94, 0xd7, 0xaf, 0x57, 0xe7, 0x34, 0xcf, 0xee, + 0x92, 0x31, 0x2d, 0x06, 0x5b, 0x45, 0xa8, 0x7a, 0x63, 0x81, 0x56, 0x91, 0x3c, 0x6c, 0x15, 0xb1, + 0xf0, 0x3d, 0xa8, 0xd2, 0x8f, 0x2d, 0xcf, 0x99, 0x8c, 0xdc, 0xfa, 0xe7, 0x49, 0xc2, 0x83, 0x17, + 0x4b, 0x50, 0xf4, 0xbb, 0x4b, 0x46, 0x92, 0x1d, 0x27, 0x91, 0x40, 0xc3, 0x7b, 0x5e, 0xbf, 0xbb, + 0xc0, 0x24, 0xf6, 0x34, 0x31, 0x4e, 0x62, 0xc8, 0x88, 0x4b, 0xef, 0xb9, 0x6d, 0x0d, 0x84, 0xac, + 0xff, 0xd2, 0x02, 0x4b, 0xef, 0x19, 0x91, 0xe2, 0xd2, 0x53, 0x4c, 0xa8, 0xc6, 0xfd, 0xa1, 0x29, + 0xeb, 0xf7, 0x16, 0x50, 0xe3, 0xad, 0xa1, 0x49, 0xb6, 0x02, 0x19, 0x1a, 0x3f, 0x80, 0xe5, 0xa4, + 0x55, 0xe6, 0x1c, 0xf2, 0xbe, 0x30, 0xd5, 0x8e, 0x50, 0x36, 0xe8, 0x37, 0xe2, 0x84, 0x65, 0x4b, + 0xda, 0x11, 0xca, 0x06, 0xfd, 0xe6, 0xb7, 0xa1, 0xa8, 0x7c, 0x13, 0x32, 0xf8, 0x65, 0x43, 0x43, + 0x48, 0x6b, 0xf9, 0xe6, 0x80, 0xf6, 0xad, 0xb2, 0x41, 0xbf, 0x91, 0xd6, 0xf2, 0xbd, 0xf1, 0xa1, + 0x4b, 0x06, 0xbb, 0x6c, 0x68, 0xa8, 0xf1, 0xf3, 0x0f, 0xa1, 0xa4, 0x1b, 0xd5, 0xf8, 0x7b, 0x19, + 0x28, 0x2a, 0x83, 0xc2, 0xbf, 0x05, 0x85, 0x40, 0x5e, 0x3a, 0x82, 0xda, 0xb0, 0xf2, 0xf0, 0xcb, + 0x0b, 0x18, 0xa1, 0x8d, 0x2e, 0x32, 0x18, 0x8a, 0xaf, 0x69, 0x40, 0x81, 0x60, 0x5e, 0x82, 0x9c, + 0xe1, 0x3d, 0x67, 0x4b, 0x1c, 0xa0, 0xa8, 0x26, 0x8b, 0x65, 0x10, 0xb9, 0x6d, 0x9f, 0xb3, 0x2c, + 0x22, 0x77, 0x85, 0x69, 0x09, 0x9f, 0xe5, 0x78, 0x0d, 0x2a, 0xe1, 0xb4, 0x04, 0x2c, 0xcf, 0x19, + 0x2c, 0x27, 0x26, 0x3c, 0x60, 0x85, 0xc6, 0xff, 0xca, 0x43, 0x1e, 0xd7, 0x3f, 0x7f, 0x05, 0x6a, + 0xd2, 0xf4, 0x07, 0x42, 0x39, 0xc2, 0x91, 0x93, 0x92, 0x46, 0xf2, 0x0f, 0xc3, 0x3e, 0x64, 0xa9, + 0x0f, 0xaf, 0xbd, 0xd0, 0xae, 0xa4, 0x7a, 0x90, 0xd8, 0x85, 0x73, 0x8b, 0xed, 0xc2, 0x3b, 0x50, + 0x46, 0x73, 0xd6, 0xb5, 0x7f, 0x20, 0x68, 0xe8, 0x57, 0x1e, 0xae, 0xbf, 0xf8, 0x95, 0x1d, 0xcd, + 0x61, 0x44, 0xbc, 0xbc, 0x03, 0x95, 0xbe, 0xe9, 0x5b, 0xd4, 0x18, 0x9a, 0xad, 0x95, 0x87, 0x5f, + 0x79, 0xb1, 0xa0, 0xad, 0x90, 0xc5, 0x88, 0xb9, 0xf9, 0x21, 0x54, 0x2d, 0x11, 0xf4, 0x7d, 0x7b, + 0x4c, 0xe6, 0x4d, 0xed, 0xc5, 0x5f, 0x7d, 0xb1, 0xb0, 0xed, 0x98, 0xc9, 0x48, 0x4a, 0x40, 0x8f, + 0xcc, 0x8f, 0xec, 0x5b, 0x89, 0x1c, 0x84, 0x18, 0xd1, 0x7c, 0x0f, 0xca, 0x61, 0x7f, 0xf8, 0x32, + 0x94, 0xf1, 0xef, 0x81, 0xe7, 0x0a, 0xb6, 0x84, 0x73, 0x8b, 0x50, 0x77, 0x64, 0x3a, 0x0e, 0xcb, + 0xf0, 0x15, 0x00, 0x04, 0xf7, 0x85, 0x65, 0x4f, 0x46, 0x2c, 0xdb, 0xfc, 0x46, 0xa8, 0x2d, 0x65, + 0xc8, 0x1f, 0x99, 0x03, 0xe4, 0x58, 0x86, 0x72, 0x68, 0xae, 0x59, 0x06, 0xf9, 0xb7, 0xcd, 0x60, + 0x78, 0xe2, 0x99, 0xbe, 0xc5, 0xb2, 0xbc, 0x0a, 0xa5, 0x96, 0xdf, 0x1f, 0xda, 0xe7, 0x82, 0xe5, + 0x9a, 0x6f, 0x40, 0x35, 0xd1, 0x5e, 0x14, 0xa1, 0x5f, 0x5a, 0x81, 0x42, 0xcb, 0xb2, 0x84, 0xc5, + 0x32, 0xc8, 0xa0, 0x3b, 0xc8, 0xb2, 0xcd, 0xaf, 0x40, 0x25, 0x1a, 0x2d, 0x24, 0xc7, 0x8d, 0x9b, + 0x2d, 0xe1, 0x2f, 0x44, 0xb3, 0x0c, 0x6a, 0x65, 0xc7, 0x75, 0x6c, 0x57, 0xb0, 0x6c, 0xe3, 0xcf, + 0x91, 0xaa, 0xf2, 0x6f, 0xa6, 0x17, 0xc4, 0xab, 0x2f, 0xda, 0x59, 0xd3, 0xab, 0xe1, 0xf3, 0x89, + 0xfe, 0xed, 0xd9, 0xd4, 0xb8, 0x32, 0xe4, 0xb7, 0x3d, 0x19, 0xb0, 0x4c, 0xe3, 0xbf, 0x65, 0xa1, + 0x1c, 0x6e, 0xa8, 0x18, 0x13, 0x4c, 0x7c, 0x47, 0x2b, 0x34, 0xfe, 0xe4, 0x37, 0xa1, 0x20, 0x6d, + 0xa9, 0xd5, 0xb8, 0x62, 0x28, 0x00, 0x7d, 0xb5, 0xe4, 0xcc, 0x2a, 0x07, 0x76, 0x7a, 0xaa, 0xec, + 0x91, 0x39, 0x10, 0xbb, 0x66, 0x30, 0xd4, 0x2e, 0x6c, 0x8c, 0x40, 0xfe, 0x53, 0xf3, 0x1c, 0x75, + 0x8e, 0x9e, 0x2b, 0x2f, 0x2e, 0x89, 0xe2, 0x6f, 0x43, 0x1e, 0x3b, 0xa8, 0x95, 0xe6, 0xcf, 0x4c, + 0x75, 0x18, 0xd5, 0xe4, 0xc8, 0x17, 0x38, 0x3d, 0x1b, 0x18, 0x81, 0x19, 0x44, 0xcc, 0x5f, 0x85, + 0x15, 0xb5, 0x08, 0x0f, 0xc3, 0xf8, 0xa1, 0x44, 0x92, 0xa7, 0xb0, 0xbc, 0x85, 0xc3, 0x69, 0x4a, + 0x51, 0x2f, 0x2f, 0xa0, 0xdf, 0xe1, 0xe0, 0x6c, 0x74, 0x91, 0xc5, 0x50, 0x9c, 0xcd, 0x77, 0x71, + 0x4c, 0x4d, 0x29, 0x70, 0x9a, 0xdb, 0xa3, 0xb1, 0xbc, 0x54, 0x4a, 0xb3, 0x23, 0x64, 0x7f, 0x68, + 0xbb, 0x03, 0x96, 0x51, 0x43, 0x8c, 0x93, 0x48, 0x24, 0xbe, 0xef, 0xf9, 0x2c, 0xd7, 0x68, 0x40, + 0x1e, 0x75, 0x14, 0x8d, 0xa4, 0x6b, 0x8e, 0x84, 0x1e, 0x69, 0xfa, 0xdd, 0xb8, 0x01, 0x6b, 0x33, + 0xfb, 0x71, 0xe3, 0xf7, 0x8b, 0x4a, 0x43, 0x90, 0x83, 0x7c, 0x41, 0xcd, 0x41, 0x6e, 0xde, 0x4b, + 0xd9, 0x18, 0x94, 0x92, 0xb6, 0x31, 0x1f, 0x42, 0x01, 0x3b, 0x16, 0x9a, 0x98, 0x05, 0xd8, 0xf7, + 0x91, 0xdc, 0x50, 0x5c, 0x18, 0xc1, 0xf4, 0x87, 0xa2, 0x7f, 0x26, 0x2c, 0x6d, 0xeb, 0x43, 0x10, + 0x95, 0xa6, 0x9f, 0x70, 0xcf, 0x15, 0x40, 0x2a, 0xd1, 0xf7, 0xdc, 0xf6, 0xc8, 0xfb, 0x9e, 0x4d, + 0xf3, 0x8a, 0x2a, 0x11, 0x22, 0xc2, 0xa7, 0x1d, 0xd4, 0x11, 0x3d, 0x6d, 0x31, 0xa2, 0xd1, 0x86, + 0x02, 0xbd, 0x1b, 0x57, 0x82, 0x6a, 0xb3, 0xca, 0x34, 0xbc, 0xba, 0x58, 0x9b, 0x75, 0x93, 0x1b, + 0xbf, 0x9b, 0x85, 0x3c, 0xc2, 0x7c, 0x1d, 0x0a, 0x3e, 0xc6, 0x61, 0x34, 0x9c, 0x57, 0xc5, 0x6c, + 0x8a, 0x84, 0x7f, 0x4b, 0xab, 0x62, 0x76, 0x01, 0x65, 0x89, 0xde, 0x98, 0x54, 0xcb, 0x9b, 0x50, + 0x18, 0x9b, 0xbe, 0x39, 0xd2, 0xeb, 0x44, 0x01, 0xcd, 0x1f, 0x67, 0x20, 0x8f, 0x44, 0x7c, 0x0d, + 0x6a, 0x5d, 0xe9, 0xdb, 0x67, 0x42, 0x0e, 0x7d, 0x6f, 0x32, 0x18, 0x2a, 0x4d, 0x7a, 0x2c, 0x2e, + 0x95, 0xbd, 0x51, 0x06, 0x41, 0x9a, 0x8e, 0xdd, 0x67, 0x59, 0xd4, 0xaa, 0x4d, 0xcf, 0xb1, 0x58, + 0x8e, 0xaf, 0x42, 0xf5, 0x89, 0x6b, 0x09, 0x3f, 0xe8, 0x7b, 0xbe, 0xb0, 0x58, 0x5e, 0xaf, 0xee, + 0x33, 0x56, 0xa0, 0xbd, 0x4c, 0x5c, 0x48, 0x8a, 0x85, 0x58, 0x91, 0xdf, 0x80, 0xd5, 0xcd, 0x74, + 0x80, 0xc4, 0x4a, 0x68, 0x93, 0xf6, 0x85, 0x8b, 0x4a, 0xc6, 0xca, 0x4a, 0x89, 0xbd, 0xef, 0xd9, + 0xac, 0x82, 0x2f, 0x53, 0xeb, 0x84, 0x41, 0xf3, 0x5f, 0x64, 0x42, 0xcb, 0x51, 0x83, 0xca, 0x91, + 0xe9, 0x9b, 0x03, 0xdf, 0x1c, 0x63, 0xfb, 0xaa, 0x50, 0x52, 0x1b, 0xe7, 0x5b, 0xca, 0xba, 0x29, + 0xe0, 0xa1, 0xb2, 0x8d, 0x0a, 0x78, 0x9b, 0xe5, 0x62, 0xe0, 0x1d, 0x96, 0xc7, 0x77, 0x7c, 0x67, + 0xe2, 0x49, 0xc1, 0x0a, 0x64, 0xeb, 0x3c, 0x4b, 0xb0, 0x22, 0x22, 0x7b, 0x68, 0x51, 0x58, 0x09, + 0xfb, 0xbc, 0x85, 0xfa, 0x73, 0xe2, 0x5d, 0xb0, 0x32, 0x36, 0x03, 0x87, 0x51, 0x58, 0xac, 0x82, + 0x4f, 0x0e, 0x26, 0xa3, 0x13, 0x81, 0xdd, 0x04, 0x7c, 0xd2, 0xf3, 0x06, 0x03, 0x47, 0xb0, 0x2a, + 0x8e, 0x41, 0xc2, 0xf8, 0xb2, 0x65, 0xb2, 0xb4, 0xa6, 0xe3, 0x78, 0x13, 0xc9, 0x6a, 0x8d, 0x5f, + 0xe4, 0x20, 0x8f, 0xd1, 0x0d, 0xae, 0x9d, 0x21, 0xda, 0x19, 0xbd, 0x76, 0xf0, 0x77, 0xb4, 0x02, + 0xb3, 0xf1, 0x0a, 0xe4, 0x1f, 0xe8, 0x99, 0xce, 0x2d, 0x60, 0x65, 0x51, 0x70, 0x72, 0x92, 0x39, + 0xe4, 0x47, 0xf6, 0x48, 0x68, 0x5b, 0x47, 0xbf, 0x11, 0x17, 0xe0, 0x7e, 0x5c, 0xa0, 0xe4, 0x09, + 0xfd, 0xc6, 0x55, 0x63, 0xe2, 0xb6, 0xd0, 0x92, 0xb4, 0x06, 0x72, 0x46, 0x08, 0xce, 0xb1, 0x5e, + 0x95, 0xb9, 0xd6, 0xeb, 0xc3, 0xd0, 0x7a, 0x95, 0x16, 0x58, 0xf5, 0xd4, 0xcc, 0xa4, 0xe5, 0x8a, + 0x8d, 0x46, 0x79, 0x71, 0xf6, 0xc4, 0x66, 0xb2, 0xad, 0xb5, 0x36, 0xde, 0xe8, 0xca, 0x6a, 0x94, + 0x59, 0x06, 0x67, 0x93, 0x96, 0xab, 0xb2, 0x79, 0x4f, 0x6d, 0x4b, 0x78, 0x2c, 0x47, 0x1b, 0xe1, + 0xc4, 0xb2, 0x3d, 0x96, 0x47, 0xcf, 0xeb, 0x68, 0x7b, 0x87, 0x15, 0x9a, 0xaf, 0x26, 0xb6, 0xa4, + 0xd6, 0x44, 0x7a, 0x4a, 0x0c, 0xa9, 0x6f, 0x46, 0x69, 0xe3, 0x89, 0xb0, 0x58, 0xb6, 0xf9, 0xb5, + 0x39, 0x66, 0xb6, 0x06, 0x95, 0x27, 0x63, 0xc7, 0x33, 0xad, 0x6b, 0xec, 0xec, 0x32, 0x40, 0x1c, + 0x55, 0x37, 0x7e, 0xd1, 0x8c, 0xb7, 0x73, 0xf4, 0x45, 0x03, 0x6f, 0xe2, 0xf7, 0x05, 0x99, 0x90, + 0x8a, 0xa1, 0x21, 0xfe, 0x6d, 0x28, 0xe0, 0xf3, 0x30, 0x8d, 0xb3, 0xbe, 0x50, 0x2c, 0xb7, 0xf1, + 0xd4, 0x16, 0xcf, 0x0d, 0xc5, 0xc8, 0xef, 0x01, 0x98, 0x7d, 0x69, 0x9f, 0x0b, 0x44, 0xea, 0xc5, + 0x9e, 0xc0, 0xf0, 0x77, 0x93, 0xee, 0xcb, 0xf5, 0x79, 0xc8, 0x84, 0x5f, 0xc3, 0x0d, 0xa8, 0xe2, + 0xd2, 0x1d, 0x1f, 0xfa, 0xb8, 0xda, 0xeb, 0xcb, 0xc4, 0xf8, 0xe6, 0x62, 0xcd, 0x7b, 0x14, 0x31, + 0x1a, 0x49, 0x21, 0xfc, 0x09, 0x2c, 0xab, 0x9c, 0x9a, 0x16, 0x5a, 0x23, 0xa1, 0x6f, 0x2d, 0x26, + 0xf4, 0x30, 0xe6, 0x34, 0x52, 0x62, 0x66, 0xd3, 0x92, 0x85, 0x97, 0x4e, 0x4b, 0xbe, 0x0a, 0x2b, + 0xbd, 0xf4, 0x2a, 0x50, 0x5b, 0xc5, 0x14, 0x96, 0x37, 0x61, 0xd9, 0x0e, 0xe2, 0xac, 0x28, 0xe5, + 0x48, 0xca, 0x46, 0x0a, 0xd7, 0xf8, 0xb7, 0x45, 0xc8, 0xd3, 0xc8, 0x4f, 0xe7, 0xb8, 0xb6, 0x52, + 0x26, 0xfd, 0x8d, 0xc5, 0xa7, 0x7a, 0x6a, 0xc5, 0x93, 0x05, 0xc9, 0x25, 0x2c, 0xc8, 0xb7, 0xa1, + 0x10, 0x78, 0xbe, 0x0c, 0xa7, 0x77, 0x41, 0x25, 0xea, 0x7a, 0xbe, 0x34, 0x14, 0x23, 0xdf, 0x81, + 0xd2, 0xa9, 0xed, 0x48, 0x9c, 0x14, 0x35, 0x78, 0xaf, 0x2f, 0x26, 0x63, 0x87, 0x98, 0x8c, 0x90, + 0x99, 0xef, 0x25, 0x95, 0xad, 0x48, 0x92, 0x36, 0x16, 0x93, 0x34, 0x4f, 0x07, 0xd7, 0x81, 0xf5, + 0xbd, 0x73, 0xe1, 0x1b, 0x89, 0xc4, 0xa4, 0xda, 0xa4, 0x67, 0xf0, 0xbc, 0x01, 0xe5, 0xa1, 0x6d, + 0x09, 0xf4, 0x73, 0xc8, 0xc6, 0x94, 0x8d, 0x08, 0xe6, 0x8f, 0xa1, 0x4c, 0xf1, 0x01, 0x5a, 0xc5, + 0xca, 0x4b, 0x0f, 0xbe, 0x0a, 0x55, 0x42, 0x01, 0xf8, 0x22, 0x7a, 0xf9, 0x8e, 0x2d, 0x29, 0x3f, + 0x5d, 0x36, 0x22, 0x18, 0x1b, 0x4c, 0xfa, 0x9e, 0x6c, 0x70, 0x55, 0x35, 0x78, 0x1a, 0xcf, 0xdf, + 0x81, 0x5b, 0x84, 0x9b, 0xda, 0x24, 0x71, 0xa9, 0xa1, 0xd0, 0xf9, 0x0f, 0xd1, 0x61, 0x19, 0x9b, + 0x03, 0xb1, 0x67, 0x8f, 0x6c, 0x59, 0xaf, 0xdd, 0xcf, 0x3c, 0x28, 0x18, 0x31, 0x82, 0xbf, 0x0e, + 0x6b, 0x96, 0x38, 0x35, 0x27, 0x8e, 0xec, 0x89, 0xd1, 0xd8, 0x31, 0xa5, 0xe8, 0x58, 0xa4, 0xa3, + 0x15, 0x63, 0xf6, 0x01, 0x7f, 0x13, 0x6e, 0x68, 0xe4, 0x61, 0x74, 0xaa, 0xd0, 0xb1, 0x28, 0x7d, + 0x57, 0x31, 0xe6, 0x3d, 0x6a, 0xee, 0x6b, 0x33, 0x8c, 0x1b, 0x28, 0xc6, 0xa9, 0xa1, 0x01, 0x0d, + 0xa4, 0xda, 0x91, 0x1f, 0x99, 0x8e, 0x23, 0xfc, 0x4b, 0x15, 0xe4, 0x3e, 0x36, 0xdd, 0x13, 0xd3, + 0x65, 0x39, 0xda, 0x63, 0x4d, 0x47, 0xb8, 0x96, 0xe9, 0xab, 0x1d, 0xf9, 0x11, 0x6d, 0xe8, 0x85, + 0xe6, 0x03, 0xc8, 0xd3, 0x90, 0x56, 0xa0, 0xa0, 0xa2, 0x24, 0x8a, 0x98, 0x75, 0x84, 0x44, 0x16, + 0x79, 0x0f, 0x97, 0x1f, 0xcb, 0x36, 0xfe, 0x7e, 0x11, 0xca, 0xe1, 0xe0, 0x85, 0x67, 0x08, 0x99, + 0xf8, 0x0c, 0x01, 0xdd, 0xb8, 0xe0, 0xa9, 0x1d, 0xd8, 0x27, 0xda, 0x2d, 0x2d, 0x1b, 0x31, 0x02, + 0x3d, 0xa1, 0xe7, 0xb6, 0x25, 0x87, 0xb4, 0x66, 0x0a, 0x86, 0x02, 0xf8, 0x03, 0x58, 0xb5, 0x70, + 0x1c, 0xdc, 0xbe, 0x33, 0xb1, 0x44, 0x0f, 0x77, 0x51, 0x95, 0x26, 0x98, 0x46, 0xf3, 0x4f, 0x00, + 0xa4, 0x3d, 0x12, 0x3b, 0x9e, 0x3f, 0x32, 0xa5, 0x8e, 0x0d, 0xbe, 0xfe, 0x72, 0x5a, 0xbd, 0xd1, + 0x8b, 0x04, 0x18, 0x09, 0x61, 0x28, 0x1a, 0xdf, 0xa6, 0x45, 0x97, 0x3e, 0x93, 0xe8, 0xed, 0x48, + 0x80, 0x91, 0x10, 0xc6, 0x7b, 0x50, 0x3a, 0xf5, 0xfc, 0xd1, 0xc4, 0x31, 0xf5, 0x9e, 0xfb, 0xc1, + 0x4b, 0xca, 0xdd, 0x51, 0xdc, 0x64, 0x7b, 0x42, 0x51, 0x71, 0x8e, 0xbb, 0xb2, 0x60, 0x8e, 0xbb, + 0xf9, 0xcb, 0x00, 0x71, 0x0b, 0xf9, 0x6d, 0xe0, 0xfb, 0x9e, 0x2b, 0x87, 0xad, 0x93, 0x13, 0x7f, + 0x53, 0x9c, 0x7a, 0xbe, 0xd8, 0x36, 0x71, 0x7b, 0xbd, 0x05, 0x6b, 0x11, 0xbe, 0x75, 0x2a, 0x85, + 0x8f, 0x68, 0x52, 0x81, 0xee, 0xd0, 0xf3, 0xa5, 0xf2, 0xf1, 0xe8, 0xe7, 0x93, 0x2e, 0xcb, 0xe1, + 0x96, 0xde, 0xe9, 0x1e, 0xb2, 0x7c, 0xf3, 0x01, 0x40, 0x3c, 0xb4, 0x14, 0x0b, 0xd1, 0xaf, 0xb7, + 0x1e, 0xea, 0xc8, 0x88, 0xa0, 0x87, 0xef, 0xb0, 0x4c, 0xf3, 0x67, 0x19, 0xa8, 0x26, 0xba, 0x94, + 0x8e, 0x99, 0xb7, 0xbc, 0x89, 0x2b, 0x55, 0x90, 0x4e, 0x3f, 0x9f, 0x9a, 0xce, 0x04, 0x37, 0xf7, + 0x35, 0xa8, 0x11, 0xbc, 0x6d, 0x07, 0xd2, 0x76, 0xfb, 0x92, 0xe5, 0x22, 0x12, 0xe5, 0x18, 0xe4, + 0x23, 0x92, 0x03, 0x4f, 0xa3, 0x0a, 0x9c, 0xc1, 0xf2, 0x91, 0xf0, 0xfb, 0x22, 0x24, 0x22, 0x67, + 0x58, 0x63, 0x22, 0x32, 0xe5, 0x0c, 0x9b, 0x72, 0xd8, 0x9d, 0x8c, 0x58, 0x19, 0x9d, 0x4a, 0x04, + 0x5a, 0xe7, 0xc2, 0x47, 0x5f, 0xa6, 0x82, 0xef, 0x41, 0x04, 0xae, 0x06, 0xd3, 0x65, 0x10, 0x52, + 0xef, 0xdb, 0x2e, 0xab, 0x46, 0x80, 0x79, 0xc1, 0x96, 0xb1, 0xfd, 0x14, 0x3a, 0xb0, 0x5a, 0xe3, + 0xbf, 0xe6, 0x20, 0x8f, 0x76, 0x1d, 0x63, 0xdd, 0xa4, 0x11, 0x52, 0x6b, 0x25, 0x89, 0xfa, 0x6c, + 0xbb, 0x11, 0xca, 0x4e, 0xee, 0x46, 0xef, 0x43, 0xb5, 0x3f, 0x09, 0xa4, 0x37, 0xa2, 0xad, 0x58, + 0x9f, 0x76, 0xdd, 0x9e, 0xc9, 0x1a, 0xd1, 0x70, 0x1a, 0x49, 0x52, 0xfe, 0x2e, 0x14, 0x4f, 0x95, + 0xd6, 0xab, 0xbc, 0xd1, 0x2f, 0x5d, 0xb1, 0x5b, 0x6b, 0xcd, 0xd6, 0xc4, 0xd8, 0x2f, 0x7b, 0x66, + 0xc5, 0x26, 0x51, 0x7a, 0xd7, 0x2d, 0x46, 0xbb, 0xee, 0x2f, 0xc3, 0x8a, 0xc0, 0x01, 0x3f, 0x72, + 0xcc, 0xbe, 0x18, 0x09, 0x37, 0x5c, 0x66, 0xef, 0xbc, 0x44, 0x8f, 0x69, 0xc6, 0xa8, 0xdb, 0x53, + 0xb2, 0xd0, 0xf2, 0xb8, 0x1e, 0x6e, 0xfe, 0x61, 0x60, 0x5f, 0x36, 0x62, 0x44, 0xf3, 0x4b, 0xda, + 0x5e, 0x96, 0x20, 0xd7, 0x0a, 0xfa, 0x3a, 0x03, 0x22, 0x82, 0xbe, 0x0a, 0xaf, 0xb6, 0x68, 0x38, + 0x58, 0xb6, 0xf9, 0x16, 0x54, 0xa2, 0x37, 0xa0, 0xf2, 0x1c, 0x78, 0xb2, 0x3b, 0x16, 0x7d, 0xfb, + 0xd4, 0x16, 0x96, 0xd2, 0xcf, 0xae, 0x34, 0x7d, 0xa9, 0x92, 0x88, 0x6d, 0xd7, 0x62, 0xd9, 0xc6, + 0xef, 0x94, 0xa1, 0xa8, 0x36, 0x5f, 0xdd, 0xe1, 0x4a, 0xd4, 0xe1, 0xef, 0x40, 0xd9, 0x1b, 0x0b, + 0xdf, 0x94, 0x9e, 0xaf, 0x33, 0x37, 0xef, 0xbe, 0xcc, 0x66, 0xbe, 0x71, 0xa8, 0x99, 0x8d, 0x48, + 0xcc, 0xb4, 0x36, 0x65, 0x67, 0xb5, 0x69, 0x1d, 0x58, 0xb8, 0x6f, 0x1f, 0xf9, 0xc8, 0x27, 0x2f, + 0x75, 0x1c, 0x3e, 0x83, 0xe7, 0x3d, 0xa8, 0xf4, 0x3d, 0xd7, 0xb2, 0xa3, 0x2c, 0xce, 0xca, 0xc3, + 0xaf, 0xbd, 0x54, 0x0b, 0xb7, 0x42, 0x6e, 0x23, 0x16, 0xc4, 0x5f, 0x87, 0xc2, 0x39, 0xaa, 0x19, + 0xe9, 0xd3, 0xd5, 0x4a, 0xa8, 0x88, 0xf8, 0xa7, 0x50, 0xfd, 0xfe, 0xc4, 0xee, 0x9f, 0x1d, 0x26, + 0xb3, 0x84, 0xef, 0xbf, 0x54, 0x2b, 0xbe, 0x13, 0xf3, 0x1b, 0x49, 0x61, 0x09, 0xd5, 0x2e, 0xfd, + 0x31, 0x54, 0xbb, 0x3c, 0xab, 0xda, 0x06, 0xd4, 0x5c, 0x11, 0x48, 0x61, 0xed, 0x68, 0x5f, 0x0d, + 0x3e, 0x83, 0xaf, 0x96, 0x16, 0xd1, 0xfc, 0x22, 0x94, 0xc3, 0x09, 0xe7, 0x45, 0xc8, 0x1e, 0x60, + 0x50, 0x54, 0x84, 0xec, 0xa1, 0xaf, 0xb4, 0xad, 0x85, 0xda, 0xd6, 0xfc, 0x9f, 0x19, 0xa8, 0x44, + 0x83, 0x9e, 0xb6, 0x9c, 0xed, 0xef, 0x4f, 0x4c, 0x87, 0x65, 0x28, 0x5c, 0xf6, 0xa4, 0x82, 0xc8, + 0x58, 0x3f, 0xa2, 0xc3, 0x7a, 0x9f, 0xe5, 0xc8, 0x45, 0x10, 0x41, 0xc0, 0xf2, 0x9c, 0xc3, 0x8a, + 0x46, 0x1f, 0xfa, 0x8a, 0xb4, 0x80, 0x86, 0x0f, 0x9f, 0x86, 0x88, 0xa2, 0xf2, 0x28, 0xce, 0x84, + 0x32, 0x90, 0x07, 0x9e, 0x24, 0xa0, 0x8c, 0x8d, 0xea, 0xb8, 0xac, 0x82, 0xef, 0x3c, 0xf0, 0x64, + 0x07, 0x4d, 0x62, 0x14, 0x9e, 0x55, 0xc3, 0xd7, 0x13, 0x44, 0x16, 0xb1, 0xe5, 0x38, 0x1d, 0x97, + 0xd5, 0xf4, 0x03, 0x05, 0xad, 0xa0, 0xc4, 0xf6, 0x85, 0xd9, 0x47, 0xf6, 0x55, 0xb4, 0xb0, 0xc8, + 0xa3, 0x61, 0x86, 0x4b, 0xb2, 0x7d, 0x61, 0x07, 0x32, 0x60, 0x6b, 0xcd, 0x3f, 0xcc, 0x40, 0x35, + 0x31, 0xc1, 0x18, 0xfe, 0x11, 0x21, 0x6e, 0x65, 0x2a, 0x1a, 0xfc, 0x04, 0x87, 0xd1, 0xb7, 0xc2, + 0x6d, 0xaa, 0xe7, 0xe1, 0xcf, 0x2c, 0xbe, 0xaf, 0xe7, 0x8d, 0x3c, 0xdf, 0xf7, 0x9e, 0x2b, 0xd7, + 0x67, 0xcf, 0x0c, 0xe4, 0x33, 0x21, 0xce, 0x58, 0x1e, 0xbb, 0xba, 0x35, 0xf1, 0x7d, 0xe1, 0x2a, + 0x44, 0x81, 0x1a, 0x27, 0x2e, 0x14, 0x54, 0x44, 0xa1, 0x48, 0x4c, 0xfb, 0x20, 0x2b, 0xa1, 0x21, + 0xd0, 0xd4, 0x0a, 0x53, 0x46, 0x02, 0x24, 0x57, 0x60, 0x05, 0x37, 0x15, 0x95, 0xa1, 0x38, 0x3c, + 0xdd, 0x36, 0x2f, 0x83, 0xd6, 0xc0, 0x63, 0x30, 0x8d, 0x3c, 0xf0, 0x9e, 0xb3, 0x6a, 0x63, 0x02, + 0x10, 0xc7, 0x64, 0x18, 0x8b, 0xa2, 0x42, 0x44, 0x67, 0x08, 0x1a, 0xe2, 0x87, 0x00, 0xf8, 0x8b, + 0x28, 0xc3, 0x80, 0xf4, 0x25, 0x1c, 0x65, 0xe2, 0x33, 0x12, 0x22, 0x1a, 0x7f, 0x01, 0x2a, 0xd1, + 0x03, 0x5e, 0x87, 0x12, 0xb9, 0xb4, 0xd1, 0x6b, 0x43, 0x10, 0xfd, 0x33, 0xdb, 0xb5, 0xc4, 0x05, + 0xd9, 0x95, 0x82, 0xa1, 0x00, 0x6c, 0xe5, 0xd0, 0xb6, 0x2c, 0xe1, 0x86, 0x27, 0x3d, 0x0a, 0x9a, + 0x77, 0x1e, 0x9f, 0x9f, 0x7b, 0x1e, 0xdf, 0xf8, 0x15, 0xa8, 0x26, 0x82, 0xc6, 0x2b, 0xbb, 0x9d, + 0x68, 0x58, 0x36, 0xdd, 0xb0, 0xbb, 0x50, 0x09, 0x6b, 0x40, 0x02, 0xda, 0xdb, 0x2a, 0x46, 0x8c, + 0x68, 0xfc, 0x93, 0x2c, 0x7a, 0xb2, 0xd8, 0xb5, 0xe9, 0x40, 0x6f, 0x07, 0x8a, 0x81, 0x34, 0xe5, + 0x24, 0x2c, 0x66, 0x58, 0x70, 0x81, 0x76, 0x89, 0x67, 0x77, 0xc9, 0xd0, 0xdc, 0xfc, 0x43, 0xc8, + 0x49, 0x73, 0xa0, 0x13, 0xa5, 0x5f, 0x5e, 0x4c, 0x48, 0xcf, 0x1c, 0xec, 0x2e, 0x19, 0xc8, 0xc7, + 0xf7, 0xa0, 0xdc, 0xd7, 0xb9, 0x2d, 0x6d, 0x14, 0x17, 0x8c, 0xc5, 0xc2, 0x8c, 0xd8, 0xee, 0x92, + 0x11, 0x49, 0xe0, 0xdf, 0x86, 0x3c, 0x7a, 0x97, 0xba, 0xe6, 0x63, 0xc1, 0x18, 0x13, 0x97, 0xcb, + 0xee, 0x92, 0x41, 0x9c, 0x9b, 0x25, 0x28, 0x90, 0x0d, 0x6e, 0xd4, 0xa1, 0xa8, 0xfa, 0x3a, 0x3d, + 0x72, 0x8d, 0x3b, 0x90, 0xeb, 0x99, 0x03, 0xf4, 0xf0, 0x6d, 0x2b, 0xd0, 0xa9, 0x12, 0xfc, 0xd9, + 0x78, 0x25, 0xce, 0xd3, 0x25, 0x53, 0xc0, 0x99, 0x54, 0x0a, 0xb8, 0x51, 0x84, 0x3c, 0xbe, 0xb1, + 0x71, 0xf7, 0xba, 0x68, 0xa1, 0xf1, 0x0f, 0x73, 0x18, 0x58, 0x48, 0x71, 0x31, 0x37, 0xbd, 0xfd, + 0x31, 0x54, 0xc6, 0xbe, 0xd7, 0x17, 0x41, 0xe0, 0xf9, 0xda, 0x39, 0x7a, 0xfd, 0xc5, 0x47, 0xcf, + 0x1b, 0x47, 0x21, 0x8f, 0x11, 0xb3, 0x37, 0xff, 0x55, 0x16, 0x2a, 0xd1, 0x03, 0x15, 0xcf, 0x48, + 0x71, 0xa1, 0x52, 0x99, 0xfb, 0xc2, 0x1f, 0x99, 0xb6, 0xa5, 0xac, 0xc7, 0xd6, 0xd0, 0x0c, 0x9d, + 0xdc, 0x4f, 0xbc, 0x89, 0x9c, 0x9c, 0x08, 0x95, 0xc2, 0x7a, 0x6a, 0x8f, 0x84, 0xc7, 0xf2, 0x74, + 0x78, 0x84, 0x8a, 0xdd, 0x77, 0xbc, 0x89, 0xc5, 0x0a, 0x08, 0x3f, 0xa2, 0xed, 0x6d, 0xdf, 0x1c, + 0x07, 0xca, 0x66, 0xee, 0xdb, 0xbe, 0xc7, 0x4a, 0xc8, 0xb4, 0x63, 0x0f, 0x46, 0x26, 0x2b, 0xa3, + 0xb0, 0xde, 0x73, 0x5b, 0xa2, 0x11, 0xae, 0xa0, 0x9b, 0x7a, 0x38, 0x16, 0x6e, 0x57, 0xfa, 0x42, + 0xc8, 0x7d, 0x73, 0xac, 0x72, 0x9a, 0x86, 0xb0, 0x2c, 0x5b, 0x2a, 0xfb, 0xb9, 0x63, 0xf6, 0xc5, + 0x89, 0xe7, 0x9d, 0xb1, 0x65, 0x34, 0x34, 0x1d, 0x37, 0x90, 0xe6, 0xc0, 0x37, 0x47, 0xca, 0x86, + 0xf6, 0x84, 0x23, 0x08, 0x5a, 0xa1, 0x77, 0xdb, 0x72, 0x38, 0x39, 0x79, 0x84, 0x71, 0xdf, 0xaa, + 0x3a, 0x67, 0xb2, 0xc4, 0x58, 0xa0, 0x0d, 0x5d, 0x86, 0xf2, 0xa6, 0xed, 0xd8, 0x27, 0xb6, 0x63, + 0xb3, 0x35, 0x24, 0x6d, 0x5f, 0xf4, 0x4d, 0xc7, 0xb6, 0x7c, 0xf3, 0x39, 0xe3, 0xd8, 0xb8, 0xc7, + 0xbe, 0x77, 0x66, 0xb3, 0x1b, 0x48, 0x48, 0x61, 0xe0, 0xb9, 0xfd, 0x03, 0x76, 0x93, 0xce, 0xca, + 0xce, 0x84, 0xec, 0x0f, 0x4f, 0xcd, 0x13, 0x76, 0x2b, 0x4e, 0xe9, 0xdd, 0x6e, 0xac, 0xc1, 0xea, + 0xd4, 0xa9, 0x7c, 0xa3, 0xa4, 0xa3, 0xcf, 0x46, 0x0d, 0xaa, 0x89, 0xe3, 0xd2, 0xc6, 0xab, 0x50, + 0x0e, 0x0f, 0x53, 0x31, 0x4a, 0xb7, 0x03, 0x95, 0x06, 0xd6, 0x4a, 0x12, 0xc1, 0x8d, 0xff, 0x90, + 0x81, 0xa2, 0x3a, 0xc9, 0xe6, 0x9b, 0x51, 0xe5, 0x49, 0x66, 0x81, 0xd3, 0x4b, 0xc5, 0xa4, 0xcf, + 0x7e, 0xa3, 0xf2, 0x93, 0x9b, 0x50, 0x70, 0x28, 0x1c, 0xd7, 0xe6, 0x8b, 0x80, 0x84, 0xb5, 0xc9, + 0xa5, 0xac, 0xcd, 0x5d, 0xa8, 0x98, 0x13, 0xe9, 0xd1, 0x21, 0x9d, 0x3e, 0xc1, 0x88, 0x11, 0xcd, + 0x56, 0x74, 0x1a, 0x1d, 0x26, 0x26, 0xc9, 0x67, 0xec, 0xf9, 0x42, 0xa8, 0xa4, 0x23, 0xc5, 0xda, + 0x59, 0xda, 0x49, 0xbc, 0xd1, 0xd8, 0xec, 0x4b, 0x42, 0xd0, 0x1e, 0x8b, 0xa6, 0x96, 0xe5, 0x71, + 0x0d, 0x6c, 0x0d, 0x4d, 0xd9, 0x3c, 0x85, 0xf2, 0x91, 0x17, 0x4c, 0xef, 0xd8, 0x25, 0xc8, 0xf5, + 0xbc, 0xb1, 0xf2, 0x3f, 0x37, 0x3d, 0x49, 0xfe, 0xa7, 0xda, 0xa0, 0x4f, 0xa5, 0x52, 0x39, 0xc3, + 0x1e, 0x0c, 0xa5, 0x8a, 0xd3, 0x3b, 0xae, 0x2b, 0x7c, 0x56, 0xc0, 0x19, 0x36, 0xc4, 0x18, 0x7d, + 0x5e, 0x56, 0xc4, 0x39, 0x25, 0xfc, 0x8e, 0xed, 0x07, 0x92, 0x95, 0x9a, 0x1d, 0xdc, 0x6b, 0xed, + 0x01, 0x6d, 0x91, 0xf4, 0x83, 0x44, 0x2d, 0x61, 0x13, 0x09, 0xdc, 0x12, 0x2e, 0x6a, 0x20, 0xc5, + 0x56, 0x2a, 0x30, 0xa4, 0x17, 0x64, 0x71, 0x7f, 0x23, 0xf8, 0xe3, 0x49, 0x20, 0xed, 0xd3, 0x4b, + 0x96, 0x6b, 0x3e, 0x83, 0x5a, 0xaa, 0xc8, 0x89, 0xdf, 0x04, 0x96, 0x42, 0x60, 0xd3, 0x97, 0xf8, + 0x1d, 0xb8, 0x91, 0xc2, 0xee, 0xdb, 0x96, 0x45, 0x99, 0xe0, 0xe9, 0x07, 0x61, 0x07, 0x37, 0x2b, + 0x50, 0xea, 0xab, 0x39, 0x6c, 0x1e, 0x41, 0x8d, 0x26, 0x75, 0x5f, 0x48, 0xf3, 0xd0, 0x75, 0x2e, + 0xff, 0xd8, 0x95, 0x68, 0xcd, 0xaf, 0xe8, 0xf0, 0x0b, 0xad, 0xc9, 0xa9, 0xef, 0x8d, 0x48, 0x56, + 0xc1, 0xa0, 0xdf, 0x28, 0x5d, 0x7a, 0x5a, 0x33, 0xb2, 0xd2, 0x6b, 0xfe, 0xa2, 0x02, 0xa5, 0x56, + 0xbf, 0x8f, 0x01, 0xe3, 0xcc, 0x9b, 0xdf, 0x85, 0x62, 0xdf, 0x73, 0x4f, 0xed, 0x81, 0xb6, 0xd6, + 0xd3, 0x7e, 0xa3, 0xe6, 0x43, 0x75, 0x3c, 0xb5, 0x07, 0x86, 0x26, 0x46, 0x36, 0xbd, 0xdb, 0x14, + 0xae, 0x65, 0x53, 0x26, 0x37, 0xda, 0x5c, 0xde, 0x80, 0xbc, 0xed, 0x9e, 0x7a, 0xba, 0x6c, 0xf4, + 0xf3, 0x57, 0x30, 0x51, 0xed, 0x24, 0x11, 0x36, 0xfe, 0x53, 0x06, 0x8a, 0xea, 0xd5, 0xfc, 0x55, + 0x58, 0x11, 0x2e, 0x2e, 0xb5, 0xd0, 0xd0, 0xeb, 0x35, 0x36, 0x85, 0x45, 0x97, 0x56, 0x63, 0xc4, + 0xc9, 0x64, 0xa0, 0x33, 0x33, 0x49, 0x14, 0x7f, 0x1f, 0xee, 0x28, 0xf0, 0xc8, 0x17, 0xbe, 0x70, + 0x84, 0x19, 0x88, 0xad, 0xa1, 0xe9, 0xba, 0xc2, 0xd1, 0xdb, 0xfe, 0x55, 0x8f, 0x79, 0x13, 0x96, + 0xd5, 0xa3, 0xee, 0xd8, 0xec, 0x8b, 0x40, 0xaf, 0xa5, 0x14, 0x8e, 0x7f, 0x15, 0x0a, 0x54, 0x55, + 0x5b, 0xb7, 0xae, 0x9f, 0x4a, 0x45, 0xd5, 0xf0, 0xa2, 0x7d, 0xa9, 0x05, 0xa0, 0x86, 0x09, 0x43, + 0x32, 0x6d, 0x1b, 0xbe, 0x70, 0xed, 0xb8, 0x52, 0x74, 0x98, 0x60, 0xc2, 0xf6, 0x59, 0xc2, 0x11, + 0x54, 0xfe, 0x88, 0xfb, 0x66, 0x96, 0xce, 0x5d, 0x52, 0xb8, 0xc6, 0x7f, 0xcc, 0x43, 0x1e, 0x47, + 0x18, 0x89, 0x87, 0xde, 0x48, 0x44, 0xd9, 0x67, 0xe5, 0x88, 0xa4, 0x70, 0xe8, 0xf8, 0x98, 0xaa, + 0x00, 0x20, 0x22, 0x53, 0xa6, 0x65, 0x1a, 0x8d, 0x94, 0x63, 0xdf, 0x3b, 0xb5, 0x9d, 0x98, 0x52, + 0xbb, 0x48, 0x53, 0x68, 0xfe, 0x35, 0xb8, 0x3d, 0x32, 0xfd, 0x33, 0x21, 0x69, 0x75, 0x3f, 0xf3, + 0xfc, 0xb3, 0x00, 0x47, 0xae, 0x63, 0xe9, 0xb4, 0xe5, 0x15, 0x4f, 0xf9, 0xeb, 0xb0, 0xf6, 0x3c, + 0x04, 0xa3, 0x77, 0xa8, 0xc4, 0xe1, 0xec, 0x03, 0x34, 0xc6, 0x96, 0x38, 0xb7, 0x49, 0x6e, 0x59, + 0xd5, 0xd6, 0x86, 0x30, 0xaa, 0x92, 0xa9, 0x06, 0xb2, 0xab, 0xdf, 0xac, 0xcf, 0x9f, 0xd2, 0x58, + 0xb4, 0x9b, 0xaa, 0xe6, 0x28, 0xe8, 0x58, 0x94, 0x77, 0xad, 0x18, 0x31, 0x02, 0x15, 0x8d, 0x5e, + 0xf9, 0x54, 0x99, 0xdc, 0x9a, 0x0a, 0x50, 0x13, 0x28, 0xa4, 0x90, 0xa2, 0x3f, 0x0c, 0x5f, 0xa2, + 0x92, 0xa2, 0x49, 0x14, 0xbf, 0x07, 0x30, 0x30, 0xa5, 0x78, 0x6e, 0x5e, 0x3e, 0xf1, 0x9d, 0xba, + 0x50, 0x07, 0x29, 0x31, 0x06, 0x43, 0x5c, 0xc7, 0xeb, 0x9b, 0x4e, 0x57, 0x7a, 0xbe, 0x39, 0x10, + 0x47, 0xa6, 0x1c, 0xd6, 0x07, 0x2a, 0xc4, 0x9d, 0xc6, 0x63, 0x8f, 0xa5, 0x3d, 0x12, 0x9f, 0x7a, + 0xae, 0xa8, 0x0f, 0x55, 0x8f, 0x43, 0x18, 0x5b, 0x62, 0xba, 0xa6, 0x73, 0x29, 0xed, 0x3e, 0xf6, + 0xc5, 0x56, 0x2d, 0x49, 0xa0, 0x28, 0xa9, 0x20, 0x24, 0x8e, 0x63, 0xc7, 0xaa, 0x7f, 0x4f, 0xf5, + 0x35, 0x42, 0xe0, 0xec, 0x0a, 0x39, 0x14, 0xbe, 0x98, 0x8c, 0x5a, 0x96, 0xe5, 0x8b, 0x20, 0xa8, + 0x9f, 0xa9, 0xd9, 0x9d, 0x42, 0x37, 0xbe, 0x41, 0xc7, 0x5c, 0xc3, 0xe6, 0xdb, 0x50, 0xdb, 0xc3, + 0x16, 0xb6, 0xc6, 0x76, 0xb7, 0xef, 0x8d, 0x05, 0x1a, 0x74, 0x4a, 0x18, 0x53, 0x7a, 0xa1, 0x0a, + 0xa5, 0x8f, 0x03, 0xcf, 0x6d, 0x1d, 0x75, 0xd4, 0x16, 0xb3, 0x33, 0x71, 0x1c, 0x96, 0x6d, 0x1e, + 0x02, 0xc4, 0x9a, 0x8d, 0xdb, 0x45, 0x8b, 0xce, 0x94, 0xd8, 0x92, 0x4a, 0x66, 0xb9, 0x96, 0xed, + 0x0e, 0xb6, 0xb5, 0x32, 0xb3, 0x0c, 0x22, 0x29, 0x49, 0x21, 0xac, 0x08, 0x49, 0xee, 0x0c, 0x41, + 0xc2, 0x62, 0xb9, 0xe6, 0xff, 0xc9, 0x40, 0x35, 0x51, 0x42, 0xf1, 0x27, 0x58, 0xf6, 0x81, 0x9b, + 0x3d, 0xba, 0x0b, 0x38, 0x6f, 0x4a, 0xd1, 0x23, 0x18, 0x67, 0x55, 0x57, 0x78, 0xe0, 0x53, 0x95, + 0x92, 0x48, 0x60, 0x3e, 0x53, 0xc9, 0x47, 0xf3, 0xa1, 0xce, 0xeb, 0x54, 0xa1, 0xf4, 0xc4, 0x3d, + 0x73, 0xbd, 0xe7, 0xae, 0xda, 0xa7, 0xa9, 0x8e, 0x27, 0x75, 0x22, 0x19, 0x96, 0xda, 0xe4, 0x9a, + 0xff, 0x3c, 0x3f, 0x55, 0xf2, 0xd6, 0x86, 0xa2, 0x0a, 0x26, 0xc8, 0xcf, 0x9d, 0xad, 0x51, 0x4a, + 0x12, 0xeb, 0xd3, 0xaf, 0x04, 0xca, 0xd0, 0xcc, 0xe8, 0xe5, 0x47, 0x05, 0xa1, 0xd9, 0xb9, 0xa7, + 0x74, 0x29, 0x41, 0xa1, 0x6d, 0x4e, 0xd5, 0x44, 0x47, 0x12, 0x1a, 0x7f, 0x2d, 0x03, 0x37, 0xe7, + 0x91, 0x24, 0x2b, 0xc7, 0x33, 0xe9, 0xca, 0xf1, 0xee, 0x54, 0x25, 0x76, 0x96, 0x7a, 0xf3, 0xc6, + 0x4b, 0x36, 0x22, 0x5d, 0x97, 0xdd, 0xfc, 0xfd, 0x0c, 0xac, 0xcd, 0xf4, 0x39, 0xe1, 0xc7, 0x00, + 0x14, 0x95, 0x66, 0xa9, 0x42, 0xa9, 0xa8, 0x74, 0x45, 0x1d, 0x3d, 0xd0, 0x0e, 0x1f, 0xa8, 0x5a, + 0x00, 0x5d, 0x7b, 0xae, 0x9c, 0x68, 0x9c, 0x35, 0xdc, 0x40, 0x06, 0x42, 0xa5, 0x69, 0x95, 0xb3, + 0xa5, 0x31, 0x45, 0xe5, 0xe8, 0xaa, 0xf3, 0x11, 0x56, 0xa2, 0x02, 0xac, 0xc9, 0xd8, 0xb1, 0xfb, + 0x08, 0x96, 0x79, 0x03, 0x6e, 0xab, 0x0b, 0x08, 0x3a, 0xa8, 0x3c, 0xed, 0x0d, 0x6d, 0x5a, 0x1c, + 0xac, 0x82, 0xef, 0x39, 0x9a, 0x9c, 0x38, 0x76, 0x30, 0x64, 0xd0, 0x34, 0xe0, 0xc6, 0x9c, 0x0e, + 0x52, 0x93, 0x9f, 0xea, 0xe6, 0xaf, 0x00, 0x6c, 0x3f, 0x0d, 0x1b, 0xcd, 0x32, 0x9c, 0xc3, 0xca, + 0xf6, 0xd3, 0xa4, 0x74, 0xbd, 0x78, 0x9e, 0xa2, 0xf5, 0x0a, 0x58, 0xae, 0xf9, 0xab, 0x99, 0xb0, + 0x42, 0xa2, 0xf1, 0xe7, 0xa1, 0xa6, 0x1a, 0x7c, 0x64, 0x5e, 0x3a, 0x9e, 0x69, 0xf1, 0x36, 0xac, + 0x04, 0xd1, 0x15, 0x99, 0xc4, 0x86, 0x35, 0xed, 0x08, 0x74, 0x53, 0x44, 0xc6, 0x14, 0x53, 0x18, + 0x28, 0x65, 0xe3, 0x63, 0x15, 0x4e, 0x21, 0x9f, 0x49, 0x4b, 0x6e, 0x99, 0x82, 0x38, 0xb3, 0xf9, + 0x55, 0x58, 0xeb, 0xc6, 0xc6, 0x5d, 0x79, 0xd4, 0xa8, 0x1c, 0x6a, 0x67, 0xd8, 0x0e, 0x95, 0x43, + 0x83, 0xcd, 0x7f, 0x54, 0x02, 0x88, 0x8f, 0x90, 0xe6, 0xac, 0xf9, 0x79, 0x15, 0x11, 0x33, 0x07, + 0xba, 0xb9, 0x97, 0x3e, 0xd0, 0x7d, 0x3f, 0x72, 0xec, 0x55, 0x7a, 0x79, 0xba, 0x2c, 0x3c, 0x6e, + 0xd3, 0xb4, 0x3b, 0x9f, 0x2a, 0x18, 0x2a, 0x4c, 0x17, 0x0c, 0xdd, 0x9f, 0xad, 0x2e, 0x9c, 0x32, + 0x46, 0x71, 0xde, 0xa2, 0x94, 0xca, 0x5b, 0x34, 0xa0, 0xec, 0x0b, 0xd3, 0xf2, 0x5c, 0xe7, 0x32, + 0x3c, 0x37, 0x0c, 0x61, 0xfe, 0x36, 0x14, 0x24, 0xdd, 0xf2, 0x29, 0xd3, 0xda, 0x79, 0xc1, 0xc4, + 0x29, 0x5a, 0xb4, 0x6c, 0x76, 0xa0, 0x4b, 0x02, 0xd5, 0xae, 0x59, 0x36, 0x12, 0x18, 0xbe, 0x01, + 0xdc, 0xc6, 0x20, 0xce, 0x71, 0x84, 0xb5, 0x79, 0xb9, 0xad, 0x8e, 0xf3, 0x68, 0x5f, 0x2f, 0x1b, + 0x73, 0x9e, 0x84, 0xf3, 0xbf, 0x1c, 0xcf, 0x3f, 0x35, 0xf9, 0xdc, 0x0e, 0xb0, 0xa7, 0x35, 0x72, + 0x5f, 0x22, 0x18, 0x3d, 0x87, 0x70, 0xc1, 0xaa, 0xb1, 0x24, 0xed, 0x8d, 0xcf, 0xc4, 0xaf, 0x78, + 0x1a, 0x0e, 0xaf, 0x4a, 0xdc, 0xac, 0x92, 0xd0, 0x18, 0x41, 0x96, 0xbc, 0xef, 0xb9, 0x07, 0xa8, + 0x11, 0x4c, 0x5b, 0x72, 0x0d, 0x63, 0x7f, 0xc7, 0xce, 0xc4, 0x37, 0x1d, 0x7a, 0xba, 0xa6, 0x2c, + 0x79, 0x8c, 0x69, 0xfe, 0x41, 0x36, 0x0a, 0x9e, 0x2a, 0x50, 0x38, 0x31, 0x03, 0xbb, 0xaf, 0x76, + 0x37, 0xed, 0xf4, 0xa8, 0xdd, 0x4d, 0x7a, 0x96, 0xc7, 0xb2, 0x18, 0x07, 0x05, 0x42, 0x1f, 0xe7, + 0xc4, 0x77, 0xaa, 0x58, 0x1e, 0x4d, 0x40, 0xa8, 0x49, 0xaa, 0x66, 0x88, 0x58, 0x29, 0x39, 0x67, + 0x45, 0xd5, 0x98, 0x14, 0x66, 0xd3, 0x16, 0xc3, 0xca, 0x48, 0xe3, 0x7a, 0x52, 0xa8, 0xd4, 0x24, + 0xe9, 0x3d, 0x03, 0x14, 0x13, 0x5e, 0x12, 0x60, 0x55, 0x0c, 0x4c, 0x42, 0xa1, 0x2a, 0x9f, 0x18, + 0x50, 0xd8, 0xb6, 0x8c, 0xeb, 0x3e, 0xfd, 0x80, 0xd5, 0xb0, 0x45, 0xf1, 0x55, 0x2d, 0xb6, 0x82, + 0x52, 0x4d, 0xaa, 0x64, 0x59, 0xc5, 0x9f, 0xe7, 0x54, 0xdf, 0xc2, 0xf0, 0xad, 0x16, 0xda, 0xa5, + 0x35, 0x6c, 0x59, 0xe4, 0xe8, 0x30, 0x8e, 0x71, 0xd7, 0xd8, 0xc4, 0x20, 0xc8, 0x1e, 0x9b, 0xae, + 0x64, 0x37, 0xb0, 0xab, 0x63, 0xeb, 0x94, 0xdd, 0x44, 0x96, 0xfe, 0xd0, 0x94, 0xec, 0x16, 0xd2, + 0xe0, 0xaf, 0x6d, 0xe1, 0xa3, 0xa6, 0xb0, 0xdb, 0x48, 0x23, 0xcd, 0x01, 0xbb, 0xd3, 0xfc, 0x8d, + 0xb8, 0x1e, 0xfa, 0xcd, 0x28, 0x3c, 0x59, 0x64, 0xf9, 0x60, 0x00, 0x33, 0x6f, 0x2d, 0xb7, 0x61, + 0xcd, 0x17, 0xdf, 0x9f, 0xd8, 0xa9, 0x5b, 0x02, 0xb9, 0xeb, 0xcb, 0x50, 0x66, 0x39, 0x9a, 0xe7, + 0xb0, 0x16, 0x02, 0xcf, 0x6c, 0x39, 0xa4, 0x3c, 0x12, 0x7f, 0x3b, 0x71, 0x8d, 0x21, 0x33, 0xf7, + 0xfa, 0x57, 0x24, 0x32, 0xbe, 0xb6, 0x10, 0x9d, 0x13, 0x64, 0x17, 0x38, 0x27, 0x68, 0xfe, 0xef, + 0xe4, 0xc1, 0xb3, 0x0a, 0xd8, 0xac, 0x28, 0x60, 0x9b, 0x3d, 0x88, 0x8e, 0x53, 0xff, 0xd9, 0x97, + 0x49, 0xfd, 0xcf, 0x2b, 0xea, 0xf8, 0x00, 0xe3, 0x07, 0x5a, 0x99, 0x4f, 0x17, 0x38, 0xd6, 0x48, + 0xd1, 0xf2, 0x4d, 0x3a, 0x56, 0x36, 0xbb, 0xaa, 0xe2, 0xa8, 0x30, 0xf7, 0x52, 0x51, 0xf2, 0xfc, + 0x58, 0x53, 0x1a, 0x09, 0xae, 0x84, 0x1d, 0x2b, 0xce, 0xb3, 0x63, 0x18, 0x3b, 0x6b, 0x0b, 0x17, + 0xc1, 0xea, 0x14, 0x48, 0xfd, 0x0e, 0xc5, 0xd3, 0x1a, 0x2f, 0x1b, 0x33, 0x78, 0x74, 0xf6, 0x46, + 0x13, 0x47, 0xda, 0xfa, 0xa0, 0x43, 0x01, 0xd3, 0xb7, 0x1e, 0x2b, 0xb3, 0xb7, 0x1e, 0x3f, 0x02, + 0x08, 0x04, 0xae, 0x8e, 0x6d, 0xbb, 0x2f, 0x75, 0x5d, 0xd2, 0xbd, 0xab, 0xfa, 0xa6, 0x8f, 0x67, + 0x12, 0x1c, 0xd8, 0xfe, 0x91, 0x79, 0x41, 0x47, 0xb6, 0xba, 0x80, 0x22, 0x82, 0xa7, 0xad, 0xfb, + 0xca, 0xac, 0x75, 0x7f, 0x1b, 0x0a, 0x01, 0xba, 0xd0, 0x74, 0x71, 0xe7, 0xea, 0xf9, 0xdd, 0x20, + 0x3f, 0xdb, 0x50, 0xb4, 0x94, 0xb0, 0x44, 0xfb, 0xe7, 0xf9, 0x74, 0x65, 0xa7, 0x62, 0x84, 0x60, + 0xca, 0xc2, 0xde, 0x4e, 0x5b, 0xd8, 0x86, 0x05, 0x45, 0x7d, 0xf8, 0x30, 0x9d, 0x28, 0x08, 0xd3, + 0x96, 0xd9, 0x44, 0xda, 0x32, 0xaa, 0x7e, 0xcd, 0x25, 0xab, 0x5f, 0xa7, 0x6e, 0xf5, 0x15, 0x66, + 0x6e, 0xf5, 0x35, 0x3f, 0x85, 0x82, 0x8a, 0x09, 0x20, 0x74, 0x47, 0x95, 0x2b, 0x8b, 0x9d, 0x62, + 0x19, 0x7e, 0x13, 0x58, 0x20, 0xc8, 0xd7, 0x11, 0x5d, 0x73, 0x24, 0xc8, 0x48, 0x66, 0x79, 0x1d, + 0x6e, 0x2a, 0xda, 0x20, 0xfd, 0x84, 0x1c, 0x2e, 0xc7, 0x3e, 0xf1, 0x4d, 0xff, 0x92, 0xe5, 0x9b, + 0x1f, 0xd1, 0xd1, 0x7f, 0xa8, 0x50, 0xd5, 0xe8, 0x16, 0xa5, 0x32, 0xcb, 0x96, 0xb6, 0x3e, 0x54, + 0x39, 0xa2, 0xa3, 0x3d, 0x55, 0x4f, 0x47, 0xe1, 0x14, 0xe5, 0x83, 0x96, 0x93, 0x7b, 0xfc, 0x9f, + 0xd8, 0x7a, 0x6b, 0x6e, 0x26, 0x3c, 0xc6, 0x74, 0x81, 0x5c, 0x66, 0xd1, 0x02, 0xb9, 0xe6, 0x63, + 0x58, 0x35, 0xd2, 0x36, 0x9d, 0xbf, 0x0f, 0x25, 0x6f, 0x9c, 0x94, 0xf3, 0x22, 0xbd, 0x0c, 0xc9, + 0x9b, 0xbf, 0x97, 0x81, 0xe5, 0x8e, 0x2b, 0x85, 0xef, 0x9a, 0xce, 0x8e, 0x63, 0x0e, 0xf8, 0x7b, + 0xa1, 0x95, 0x9a, 0x9f, 0x7b, 0x48, 0xd2, 0xa6, 0x0d, 0x96, 0xa3, 0x93, 0xec, 0xfc, 0x16, 0xac, + 0x09, 0xcb, 0x96, 0x9e, 0xaf, 0xfc, 0xe4, 0xb0, 0x8e, 0xf1, 0x26, 0x30, 0x85, 0xee, 0xd2, 0x92, + 0xe8, 0xa9, 0x69, 0xae, 0xc3, 0xcd, 0x14, 0x36, 0x74, 0x82, 0xb3, 0xfc, 0x2e, 0xd4, 0xe3, 0xdd, + 0x68, 0xdb, 0x73, 0x65, 0xc7, 0xb5, 0xc4, 0x05, 0x39, 0x59, 0x2c, 0xd7, 0xfc, 0xf5, 0xc8, 0xbd, + 0x7b, 0xaa, 0xab, 0x1c, 0x7d, 0xcf, 0x8b, 0xaf, 0xd0, 0x6a, 0x28, 0x71, 0x55, 0x3b, 0xbb, 0xc0, + 0x55, 0xed, 0x8f, 0xe2, 0xeb, 0xb6, 0x6a, 0xa3, 0x78, 0x65, 0xee, 0xee, 0x43, 0xc5, 0x59, 0xda, + 0xbb, 0xef, 0x8a, 0xc4, 0xdd, 0xdb, 0xb7, 0x74, 0x48, 0x97, 0x5f, 0xc4, 0x0b, 0x56, 0x75, 0x0c, + 0xef, 0x4e, 0xdf, 0xf1, 0x58, 0xac, 0x48, 0x72, 0xc6, 0x51, 0x85, 0x97, 0x76, 0x54, 0xbf, 0x35, + 0x15, 0x3d, 0x95, 0xe7, 0xa6, 0xe3, 0xae, 0xb9, 0xc1, 0xfa, 0x2d, 0x28, 0x0d, 0xed, 0x40, 0x7a, + 0xbe, 0xba, 0x55, 0x3d, 0x7b, 0x0b, 0x2c, 0x31, 0x5a, 0xbb, 0x8a, 0x90, 0x2a, 0xda, 0x42, 0x2e, + 0xfe, 0x5d, 0x58, 0xa3, 0x81, 0x3f, 0x8a, 0xbd, 0x86, 0xa0, 0x5e, 0x9d, 0x5b, 0x49, 0x98, 0x10, + 0xb5, 0x39, 0xc5, 0x62, 0xcc, 0x0a, 0x69, 0x0c, 0x00, 0xe2, 0xf9, 0x99, 0xb1, 0x62, 0x9f, 0xe1, + 0x56, 0xf5, 0x6d, 0x28, 0x06, 0x93, 0x93, 0xf8, 0x34, 0x4e, 0x43, 0x8d, 0x0b, 0x68, 0xcc, 0x78, + 0x07, 0x47, 0xc2, 0x57, 0xcd, 0xbd, 0xf6, 0x6a, 0xf7, 0x47, 0xc9, 0x89, 0x57, 0xca, 0x79, 0xff, + 0x8a, 0xd9, 0x8b, 0x24, 0x27, 0x34, 0xa0, 0xf1, 0x2e, 0x54, 0x13, 0x83, 0x8a, 0x96, 0x79, 0xe2, + 0x5a, 0x5e, 0x98, 0x02, 0xc6, 0xdf, 0xea, 0x6a, 0x9b, 0x15, 0x26, 0x81, 0xe9, 0x77, 0xc3, 0x00, + 0x36, 0x3d, 0x80, 0xd7, 0x44, 0xd8, 0xaf, 0x40, 0x2d, 0xe1, 0xd2, 0x45, 0xe9, 0xc1, 0x34, 0xb2, + 0x79, 0x0e, 0x9f, 0x4f, 0x88, 0x3b, 0x12, 0xfe, 0xc8, 0x0e, 0x70, 0x23, 0x51, 0xc1, 0x22, 0xb9, + 0xd6, 0x96, 0x70, 0xa5, 0x2d, 0x43, 0x0b, 0x1a, 0xc1, 0xfc, 0x1b, 0x50, 0x18, 0x0b, 0x7f, 0x14, + 0x68, 0x2b, 0x3a, 0xad, 0x41, 0x73, 0xc5, 0x06, 0x86, 0xe2, 0x69, 0xfe, 0x83, 0x0c, 0x94, 0xf7, + 0x85, 0x34, 0xd1, 0x77, 0xe0, 0xfb, 0x53, 0x6f, 0x99, 0x3d, 0x41, 0x0e, 0x49, 0x37, 0x74, 0xf8, + 0xba, 0xd1, 0xd1, 0xf4, 0x1a, 0xde, 0x5d, 0x8a, 0x1b, 0xd6, 0xd8, 0x84, 0x92, 0x46, 0x37, 0xde, + 0x83, 0xd5, 0x29, 0x4a, 0x1a, 0x17, 0xe5, 0xdb, 0x77, 0x2f, 0x47, 0x61, 0x99, 0xd3, 0xb2, 0x91, + 0x46, 0x6e, 0x56, 0xa0, 0x34, 0x56, 0x0c, 0xcd, 0x3f, 0xb8, 0x45, 0xc5, 0x35, 0xf6, 0x29, 0xc6, + 0xf4, 0xf3, 0x76, 0xd6, 0x7b, 0x00, 0xb4, 0x35, 0xab, 0x12, 0x0c, 0x95, 0xb2, 0x4d, 0x60, 0xf8, + 0x07, 0x51, 0xae, 0x3d, 0x3f, 0xd7, 0xa9, 0x4a, 0x0a, 0x9f, 0x4e, 0xb8, 0xd7, 0xa1, 0x64, 0x07, + 0x94, 0x87, 0xd3, 0x65, 0x4b, 0x21, 0xc8, 0xbf, 0x09, 0x45, 0x7b, 0x34, 0xf6, 0x7c, 0xa9, 0x93, + 0xf1, 0xd7, 0x4a, 0xed, 0x10, 0xe5, 0xee, 0x92, 0xa1, 0x79, 0x90, 0x5b, 0x5c, 0x10, 0x77, 0xf9, + 0xc5, 0xdc, 0xed, 0x8b, 0x90, 0x5b, 0xf1, 0xf0, 0xef, 0x40, 0x6d, 0xa0, 0xaa, 0x36, 0x95, 0x60, + 0x6d, 0x44, 0xbe, 0x7c, 0x9d, 0x90, 0x47, 0x49, 0x86, 0xdd, 0x25, 0x23, 0x2d, 0x01, 0x45, 0xa2, + 0x03, 0x2f, 0x02, 0xd9, 0xf3, 0x3e, 0xf6, 0x6c, 0x97, 0xc2, 0xdd, 0x17, 0x88, 0x34, 0x92, 0x0c, + 0x28, 0x32, 0x25, 0x81, 0x7f, 0x0d, 0x3d, 0x9e, 0x40, 0xea, 0x8b, 0xed, 0xf7, 0xaf, 0x93, 0xd4, + 0x13, 0x81, 0xbe, 0x92, 0x1e, 0x48, 0x7e, 0x01, 0x8d, 0xc4, 0x22, 0xd1, 0x2f, 0x69, 0x8d, 0xc7, + 0xbe, 0x87, 0x31, 0x73, 0x8d, 0xa4, 0x7d, 0xed, 0x3a, 0x69, 0x47, 0x57, 0x72, 0xef, 0x2e, 0x19, + 0xd7, 0xc8, 0xe6, 0x3d, 0x8c, 0xec, 0x74, 0x17, 0xf6, 0x84, 0x79, 0x1e, 0x5e, 0x8b, 0x5f, 0x5f, + 0x68, 0x14, 0x88, 0x63, 0x77, 0xc9, 0x98, 0x92, 0xc1, 0x7f, 0x05, 0xd6, 0x52, 0xef, 0xa4, 0x9b, + 0xb0, 0xea, 0xd2, 0xfc, 0x57, 0x17, 0xee, 0x06, 0x32, 0xed, 0x2e, 0x19, 0xb3, 0x92, 0xf8, 0x04, + 0x3e, 0x37, 0xdb, 0xa5, 0x6d, 0xd1, 0x77, 0x6c, 0x57, 0xe8, 0xfb, 0xf5, 0xef, 0xbe, 0xdc, 0x68, + 0x69, 0xe6, 0xdd, 0x25, 0xe3, 0x6a, 0xc9, 0xfc, 0x2f, 0xc2, 0xdd, 0xf1, 0x5c, 0x13, 0xa3, 0x4c, + 0x97, 0xbe, 0x9e, 0xff, 0xfe, 0x82, 0x6f, 0x9e, 0xe1, 0xdf, 0x5d, 0x32, 0xae, 0x95, 0x8f, 0xbe, + 0x33, 0x45, 0xd0, 0xba, 0xb8, 0x5c, 0x01, 0x74, 0x52, 0xdb, 0x77, 0x76, 0x85, 0x69, 0x45, 0xe7, + 0x05, 0x31, 0xa2, 0xf1, 0xdf, 0x33, 0x50, 0xd4, 0xfa, 0x7e, 0x37, 0xaa, 0x18, 0x88, 0x4c, 0x77, + 0x8c, 0xe0, 0x1f, 0x42, 0x45, 0xf8, 0xbe, 0xe7, 0x6f, 0x79, 0x56, 0x58, 0x6c, 0x39, 0x9d, 0x65, + 0x56, 0x72, 0x36, 0xda, 0x21, 0x99, 0x11, 0x73, 0xf0, 0x0f, 0x00, 0xd4, 0x3a, 0xef, 0xc5, 0x77, + 0x84, 0x1a, 0xf3, 0xf9, 0xd5, 0x11, 0x54, 0x4c, 0x1d, 0xa7, 0xe5, 0xc2, 0xf3, 0x9f, 0x10, 0x8c, + 0x02, 0xce, 0x42, 0x22, 0xe0, 0xbc, 0xab, 0xf3, 0x08, 0x94, 0x5e, 0xd1, 0x37, 0xe5, 0x22, 0x44, + 0xe3, 0x5f, 0x67, 0xa0, 0xa8, 0x8c, 0x07, 0x6f, 0xcf, 0xf6, 0xe8, 0xb5, 0x17, 0xdb, 0x9c, 0x8d, + 0xe9, 0x9e, 0x7d, 0x13, 0x40, 0xd9, 0xa0, 0x44, 0xcf, 0xee, 0x4e, 0xc9, 0xd1, 0xac, 0x61, 0x79, + 0x73, 0x4c, 0xdf, 0x7c, 0xa8, 0x6e, 0x73, 0x51, 0x4a, 0xf8, 0xc9, 0xde, 0x1e, 0x5b, 0xe2, 0x6b, + 0x50, 0x7b, 0x72, 0xf0, 0xf8, 0xe0, 0xf0, 0xd9, 0xc1, 0x71, 0xdb, 0x30, 0x0e, 0x0d, 0x95, 0x19, + 0xde, 0x6c, 0x6d, 0x1f, 0x77, 0x0e, 0x8e, 0x9e, 0xf4, 0x58, 0xb6, 0xf1, 0x4f, 0x33, 0x50, 0x4b, + 0xd9, 0xae, 0x3f, 0xdd, 0xa9, 0x4b, 0x0c, 0x7f, 0x6e, 0xfe, 0xf0, 0xe7, 0xaf, 0x1a, 0xfe, 0xc2, + 0xf4, 0xf0, 0xff, 0x4e, 0x06, 0x6a, 0x29, 0x1b, 0x99, 0x94, 0x9e, 0x49, 0x4b, 0x4f, 0xee, 0xf4, + 0xd9, 0xa9, 0x9d, 0xbe, 0x09, 0xcb, 0xe1, 0xef, 0x83, 0x38, 0xe3, 0x90, 0xc2, 0x25, 0x69, 0xe8, + 0x3a, 0x45, 0x3e, 0x4d, 0x43, 0x57, 0x2a, 0xae, 0x6f, 0x2d, 0x5d, 0x1f, 0x0d, 0xe8, 0x76, 0x7d, + 0xe3, 0x6a, 0x0b, 0x7a, 0x4d, 0x17, 0x1e, 0x41, 0x75, 0x1c, 0x2f, 0xd3, 0x97, 0x73, 0x4b, 0x92, + 0x9c, 0x2f, 0x68, 0xe7, 0xef, 0x66, 0x60, 0x25, 0x6d, 0x73, 0xff, 0xbf, 0x1e, 0xd6, 0x7f, 0x9c, + 0x81, 0xb5, 0x19, 0x4b, 0x7e, 0xad, 0x63, 0x37, 0xdd, 0xae, 0xec, 0x02, 0xed, 0xca, 0xcd, 0x69, + 0xd7, 0xd5, 0x96, 0xe4, 0xfa, 0x16, 0x77, 0xe1, 0x73, 0x57, 0xee, 0x09, 0xd7, 0x0c, 0x75, 0x4a, + 0x68, 0x6e, 0x5a, 0xe8, 0x6f, 0x67, 0xe0, 0xee, 0x75, 0xf6, 0xfe, 0xff, 0xb9, 0x5e, 0x4d, 0xb7, + 0xb0, 0xf9, 0x5e, 0x54, 0x48, 0x50, 0x85, 0x92, 0xfe, 0x6a, 0x95, 0x2e, 0xe4, 0x1e, 0x7a, 0xcf, + 0x5d, 0x95, 0x89, 0x36, 0x84, 0xa9, 0xef, 0xf5, 0x1b, 0x62, 0xec, 0xd8, 0x74, 0x46, 0x7a, 0x07, + 0xa0, 0x45, 0x71, 0x5d, 0x78, 0xcd, 0x66, 0x6b, 0xef, 0xb0, 0xdb, 0x66, 0x4b, 0x49, 0x27, 0xf6, + 0xd3, 0xd0, 0x10, 0x37, 0x8f, 0xa0, 0x18, 0x5f, 0x7c, 0xd8, 0x37, 0xfd, 0x33, 0x4b, 0x9d, 0x44, + 0x2e, 0x43, 0xf9, 0x48, 0x87, 0x50, 0xea, 0x55, 0x1f, 0x77, 0x0f, 0x0f, 0x54, 0xd2, 0x7b, 0xfb, + 0xb0, 0xa7, 0xae, 0x4f, 0x74, 0x9f, 0x3e, 0x52, 0x47, 0x62, 0x8f, 0x8c, 0xd6, 0xd1, 0xee, 0x31, + 0x51, 0x14, 0x9a, 0xbf, 0x95, 0x0f, 0x77, 0xb5, 0xa6, 0xa1, 0xcf, 0x38, 0x01, 0x8a, 0x68, 0xcd, + 0x3d, 0x2d, 0x38, 0x7a, 0x0d, 0x95, 0xfc, 0xb6, 0x2f, 0x54, 0x1e, 0x82, 0x65, 0x79, 0x11, 0xb2, + 0x47, 0x27, 0xaa, 0x12, 0x69, 0x57, 0x8e, 0x1c, 0x75, 0xef, 0xb2, 0x77, 0x21, 0x59, 0x01, 0x7f, + 0x6c, 0x05, 0xe7, 0xac, 0xd8, 0xfc, 0x67, 0x39, 0xa8, 0x44, 0xa6, 0xf2, 0x65, 0x4c, 0x37, 0xe7, + 0xb0, 0xd2, 0x39, 0xe8, 0xb5, 0x8d, 0x83, 0xd6, 0x9e, 0x26, 0xc9, 0xf1, 0x1b, 0xb0, 0xba, 0xd3, + 0xd9, 0x6b, 0x1f, 0xef, 0x1d, 0xb6, 0xb6, 0x35, 0xb2, 0xcc, 0x6f, 0x03, 0xef, 0xec, 0x1f, 0x1d, + 0x1a, 0xbd, 0xe3, 0x4e, 0xf7, 0x78, 0xab, 0x75, 0xb0, 0xd5, 0xde, 0x6b, 0x6f, 0xb3, 0x22, 0x7f, + 0x05, 0xee, 0x1f, 0x1c, 0xf6, 0x3a, 0x87, 0x07, 0xc7, 0x07, 0x87, 0xc7, 0x87, 0x9b, 0x1f, 0xb7, + 0xb7, 0x7a, 0xdd, 0xe3, 0xce, 0xc1, 0x31, 0x4a, 0x7d, 0x64, 0xb4, 0xf0, 0x09, 0x2b, 0xf0, 0xfb, + 0x70, 0x57, 0x53, 0x75, 0xdb, 0xc6, 0xd3, 0xb6, 0x81, 0x42, 0x9e, 0x1c, 0xb4, 0x9e, 0xb6, 0x3a, + 0x7b, 0xad, 0xcd, 0xbd, 0x36, 0x5b, 0xe6, 0xf7, 0xa0, 0xa1, 0x29, 0x8c, 0x56, 0xaf, 0x7d, 0xbc, + 0xd7, 0xd9, 0xef, 0xf4, 0x8e, 0xdb, 0xdf, 0xdd, 0x6a, 0xb7, 0xb7, 0xdb, 0xdb, 0xac, 0xc6, 0xbf, + 0x0c, 0x5f, 0xa2, 0x46, 0xe9, 0x46, 0xa4, 0x5f, 0xf6, 0x69, 0xe7, 0xe8, 0xb8, 0x65, 0x6c, 0xed, + 0x76, 0x9e, 0xb6, 0xd9, 0x0a, 0x7f, 0x0d, 0xbe, 0x78, 0x35, 0xe9, 0x76, 0xc7, 0x68, 0x6f, 0xf5, + 0x0e, 0x8d, 0x4f, 0xd8, 0x1a, 0xff, 0x25, 0xf8, 0xdc, 0x6e, 0x6f, 0x7f, 0xef, 0xf8, 0x99, 0x71, + 0x78, 0xf0, 0xe8, 0x98, 0x7e, 0x76, 0x7b, 0xc6, 0x93, 0xad, 0xde, 0x13, 0xa3, 0xcd, 0x80, 0x37, + 0xe0, 0xf6, 0xd1, 0xe6, 0xf1, 0xc1, 0x61, 0xef, 0xb8, 0x75, 0xf0, 0xc9, 0xe6, 0xde, 0xe1, 0xd6, + 0xe3, 0xe3, 0x9d, 0x43, 0x63, 0xbf, 0xd5, 0x63, 0x55, 0xfe, 0x15, 0x78, 0x6d, 0xab, 0xfb, 0x54, + 0x37, 0xf3, 0x70, 0xe7, 0xd8, 0x38, 0x7c, 0xd6, 0x3d, 0x3e, 0x34, 0x8e, 0x8d, 0xf6, 0x1e, 0xf5, + 0xb9, 0x1b, 0xb7, 0xbd, 0xc4, 0xef, 0x42, 0xbd, 0x73, 0xd0, 0x7d, 0xb2, 0xb3, 0xd3, 0xd9, 0xea, + 0xb4, 0x0f, 0x7a, 0xc7, 0x47, 0x6d, 0x63, 0xbf, 0xd3, 0xed, 0x22, 0x19, 0xab, 0x34, 0xbf, 0x0d, + 0xc5, 0x8e, 0x7b, 0x6e, 0x4b, 0x5a, 0x5f, 0x5a, 0x19, 0x75, 0xc4, 0x15, 0x82, 0xb4, 0x2c, 0xec, + 0x81, 0x4b, 0xdf, 0x13, 0xa0, 0xd5, 0xb5, 0x6c, 0xc4, 0x88, 0xe6, 0x7f, 0xc9, 0x41, 0x4d, 0x89, + 0x08, 0x23, 0xb8, 0x07, 0xb0, 0xaa, 0x53, 0xa1, 0x9d, 0xb4, 0x09, 0x9b, 0x46, 0xd3, 0x87, 0xba, + 0x14, 0x2a, 0x61, 0xc8, 0x92, 0x28, 0x7e, 0x1b, 0x8a, 0x66, 0xdf, 0xc1, 0x30, 0x50, 0x9d, 0x57, + 0x6a, 0xe8, 0xb3, 0xda, 0x2e, 0xb4, 0x8b, 0x8a, 0xb0, 0xef, 0xb9, 0x5b, 0xd1, 0x95, 0x92, 0x14, + 0x8e, 0x7f, 0x0a, 0x77, 0x22, 0xb8, 0xed, 0xf6, 0xfd, 0xcb, 0x71, 0xf4, 0x25, 0xbd, 0xd2, 0xdc, + 0x64, 0xc2, 0x8e, 0xed, 0x88, 0x14, 0xa1, 0x71, 0x95, 0x00, 0xfe, 0x08, 0xc0, 0xa6, 0xc1, 0x22, + 0xff, 0x68, 0xfe, 0xbd, 0xe9, 0xd4, 0x68, 0x6a, 0x48, 0xbb, 0x81, 0xd1, 0x6f, 0xdc, 0x20, 0x06, + 0x68, 0x77, 0x1f, 0xeb, 0x0f, 0xef, 0x2d, 0x1b, 0x11, 0xdc, 0x3c, 0x04, 0x88, 0xb9, 0x38, 0x83, + 0x65, 0xf4, 0x2d, 0x5a, 0xc1, 0xbe, 0x18, 0x9d, 0x08, 0x5f, 0x55, 0xf1, 0x29, 0xcc, 0x23, 0xe4, + 0x60, 0x19, 0xd4, 0xff, 0x24, 0xc9, 0x33, 0x5b, 0x0e, 0xbd, 0x49, 0xb8, 0xa5, 0xab, 0xab, 0x02, + 0x71, 0x9c, 0xae, 0xe2, 0xf0, 0x6b, 0x77, 0xa8, 0x79, 0x67, 0x46, 0x18, 0x29, 0xeb, 0x41, 0xd7, + 0x8e, 0x93, 0x06, 0xf9, 0x11, 0x70, 0x7b, 0x76, 0xa8, 0xf3, 0x0b, 0x0e, 0xf5, 0x1c, 0xde, 0xe9, + 0x94, 0x7f, 0x61, 0x36, 0xe5, 0x7f, 0x0f, 0x60, 0xe0, 0x78, 0x27, 0xfa, 0xdc, 0xb1, 0xa8, 0xeb, + 0x82, 0x22, 0x4c, 0xd3, 0x81, 0x72, 0xf8, 0x95, 0x41, 0xd4, 0x41, 0xfa, 0xce, 0x60, 0x94, 0x00, + 0x55, 0x10, 0xdf, 0x85, 0x15, 0x91, 0x6e, 0x73, 0x76, 0xc1, 0x36, 0x4f, 0xf1, 0x35, 0xbf, 0x0e, + 0x6b, 0x33, 0x44, 0x38, 0x88, 0x63, 0x53, 0x46, 0x9f, 0x1a, 0xc0, 0xdf, 0xb3, 0xc7, 0xf9, 0xcd, + 0x7f, 0x97, 0x85, 0xe5, 0x7d, 0xd3, 0xb5, 0x4f, 0x45, 0x20, 0xc3, 0xd6, 0x06, 0xfd, 0xa1, 0x18, + 0x99, 0x61, 0x6b, 0x15, 0xa4, 0xb3, 0x22, 0xd9, 0xe4, 0x79, 0xc3, 0xcc, 0xf1, 0x14, 0xae, 0xb6, + 0x89, 0x1c, 0x46, 0xd5, 0xf7, 0x1a, 0xc2, 0xb9, 0x73, 0xec, 0xbe, 0x70, 0x83, 0x70, 0x45, 0x85, + 0x60, 0x5c, 0xdd, 0x53, 0xbc, 0xa6, 0xba, 0xa7, 0x34, 0x3b, 0xfe, 0xf7, 0xa1, 0x1a, 0xf4, 0x7d, + 0x21, 0xdc, 0x60, 0xe8, 0xc9, 0xf0, 0x0b, 0x95, 0x49, 0x14, 0x95, 0xda, 0x79, 0xcf, 0x5d, 0x5c, + 0x03, 0x7b, 0xb6, 0x7b, 0xa6, 0x2b, 0xc8, 0x52, 0x38, 0xd4, 0x41, 0xca, 0x09, 0xd9, 0x3f, 0x10, + 0x94, 0x8f, 0x28, 0x18, 0x11, 0x4c, 0x59, 0x1f, 0x53, 0x8a, 0x81, 0xe7, 0xdb, 0x42, 0xa5, 0x3e, + 0x2b, 0x46, 0x02, 0x83, 0xbc, 0x8e, 0xe9, 0x0e, 0x26, 0xe6, 0x40, 0xe8, 0xe3, 0xf1, 0x08, 0x6e, + 0xfe, 0x8f, 0x02, 0x80, 0x5a, 0x0a, 0xc1, 0xd0, 0x1e, 0xd3, 0xd1, 0x8c, 0xad, 0x6b, 0x8e, 0x6b, + 0x06, 0xfd, 0xe6, 0xef, 0xa7, 0xae, 0x03, 0xcc, 0x1e, 0xa6, 0xc6, 0xec, 0xd3, 0x29, 0x23, 0x1c, + 0x1c, 0x53, 0x0a, 0x5d, 0x58, 0x45, 0xe3, 0x9f, 0x37, 0x92, 0x28, 0x2a, 0xad, 0x33, 0xa5, 0x68, + 0xbb, 0x96, 0x4a, 0x49, 0xe5, 0x8d, 0x08, 0xa6, 0x0b, 0x45, 0x41, 0x6b, 0x22, 0x3d, 0x43, 0xb8, + 0xe2, 0x79, 0x74, 0x57, 0x2e, 0x46, 0xf1, 0x7d, 0xa8, 0x8d, 0xcd, 0xcb, 0x91, 0x70, 0xe5, 0xbe, + 0x90, 0x43, 0xcf, 0xd2, 0x55, 0x50, 0xaf, 0x5d, 0xdd, 0xc0, 0xa3, 0x24, 0xb9, 0x91, 0xe6, 0x46, + 0x9d, 0x70, 0x03, 0x5a, 0x25, 0x6a, 0x1a, 0x35, 0xc4, 0x37, 0x01, 0xd4, 0xaf, 0x84, 0x25, 0x9b, + 0xc9, 0x52, 0x99, 0x23, 0x11, 0x08, 0xff, 0xdc, 0x56, 0xd6, 0x57, 0x19, 0xb1, 0x98, 0x0b, 0x6d, + 0xf5, 0x24, 0x10, 0x7e, 0x7b, 0x64, 0xda, 0x8e, 0x9e, 0xe0, 0x18, 0xc1, 0xdf, 0x81, 0x5b, 0xc1, + 0xe4, 0x04, 0x75, 0xe6, 0x44, 0xf4, 0xbc, 0x03, 0xf1, 0x3c, 0x70, 0x84, 0x94, 0xc2, 0xd7, 0x95, + 0x16, 0xf3, 0x1f, 0x36, 0x07, 0x91, 0x9b, 0x46, 0x5f, 0x43, 0xc1, 0x5f, 0x71, 0x39, 0x57, 0x84, + 0xd2, 0xb5, 0x6e, 0x2c, 0x83, 0xe6, 0x51, 0xa1, 0x74, 0x29, 0x5c, 0x96, 0x7f, 0x09, 0xbe, 0x90, + 0x22, 0x32, 0xd4, 0xc1, 0x75, 0xb0, 0x63, 0xbb, 0xa6, 0x63, 0xff, 0x40, 0x95, 0x11, 0xe4, 0x9a, + 0x63, 0xa8, 0xa5, 0x06, 0x8e, 0x2e, 0x77, 0xd2, 0x2f, 0x5d, 0x0f, 0xc4, 0x60, 0x59, 0xc1, 0x5d, + 0xe9, 0xdb, 0x74, 0x22, 0x13, 0x61, 0xb6, 0x70, 0x9d, 0x7b, 0x2c, 0xcb, 0x6f, 0x02, 0x53, 0x98, + 0x8e, 0x6b, 0x8e, 0xc7, 0xad, 0xf1, 0xd8, 0x11, 0x2c, 0x47, 0x17, 0x67, 0x63, 0xac, 0xba, 0x14, + 0xc0, 0xf2, 0xcd, 0xef, 0xc2, 0x1d, 0x1a, 0x99, 0xa7, 0xc2, 0x8f, 0x02, 0x71, 0xdd, 0xd7, 0x5b, + 0xb0, 0xa6, 0x7e, 0x1d, 0x78, 0x52, 0x3d, 0x26, 0xe7, 0x94, 0xc3, 0x8a, 0x42, 0xa3, 0x6f, 0xd6, + 0x15, 0x74, 0x1d, 0x36, 0xc2, 0x45, 0x74, 0xd9, 0xe6, 0x1f, 0x16, 0x81, 0xc7, 0x0a, 0xd1, 0xb3, + 0x85, 0xbf, 0x6d, 0x4a, 0x33, 0x91, 0x49, 0xad, 0x5d, 0x59, 0x0b, 0xf0, 0xe2, 0x4a, 0xbe, 0xdb, + 0x50, 0xb4, 0x03, 0x0c, 0x1d, 0x75, 0x39, 0xaf, 0x86, 0xf8, 0x1e, 0xc0, 0x58, 0xf8, 0xb6, 0x67, + 0x91, 0x06, 0x15, 0xe6, 0xde, 0xca, 0x98, 0x6d, 0xd4, 0xc6, 0x51, 0xc4, 0x63, 0x24, 0xf8, 0xb1, + 0x1d, 0x0a, 0x52, 0x27, 0xeb, 0x45, 0x6a, 0x74, 0x12, 0xc5, 0xdf, 0x84, 0x1b, 0x63, 0xdf, 0xee, + 0x0b, 0x35, 0x1d, 0x4f, 0x02, 0x6b, 0x8b, 0xbe, 0x21, 0x58, 0x22, 0xca, 0x79, 0x8f, 0x50, 0x03, + 0x4d, 0x97, 0x02, 0xaa, 0x80, 0xce, 0x92, 0xf5, 0x05, 0x72, 0x55, 0xf0, 0x5a, 0x33, 0xe6, 0x3f, + 0xe4, 0xeb, 0xc0, 0xf4, 0x83, 0x7d, 0xdb, 0xdd, 0x13, 0xee, 0x40, 0x0e, 0x49, 0xb9, 0x6b, 0xc6, + 0x0c, 0x9e, 0x2c, 0x98, 0xfa, 0x52, 0x93, 0x3a, 0x67, 0xaa, 0x18, 0x11, 0xac, 0x3e, 0x4a, 0xe0, + 0x78, 0x7e, 0x57, 0xfa, 0xba, 0x72, 0x37, 0x82, 0xd1, 0xc7, 0x0a, 0xa8, 0xad, 0x47, 0xbe, 0x67, + 0x4d, 0xe8, 0x14, 0x44, 0x19, 0xb1, 0x69, 0x74, 0x4c, 0xb9, 0x6f, 0xba, 0xba, 0x9c, 0xb2, 0x96, + 0xa4, 0x8c, 0xd0, 0x14, 0x33, 0x7a, 0x41, 0x2c, 0x70, 0x55, 0xc7, 0x8c, 0x09, 0x9c, 0xa6, 0x89, + 0x45, 0xb1, 0x88, 0x26, 0x96, 0x43, 0xfd, 0xb7, 0x7c, 0xcf, 0xb6, 0x62, 0x59, 0xaa, 0xb2, 0x67, + 0x06, 0x9f, 0xa0, 0x8d, 0x65, 0xf2, 0x14, 0x6d, 0x2c, 0xf7, 0x26, 0x14, 0xbc, 0xd3, 0x53, 0xe1, + 0xd3, 0x87, 0x39, 0x2b, 0x86, 0x02, 0x9a, 0x3f, 0xca, 0x00, 0xc4, 0x2a, 0x81, 0x0b, 0x21, 0x86, + 0xe2, 0x85, 0x7f, 0x07, 0x6e, 0x24, 0xd1, 0x8e, 0x2e, 0x94, 0xa5, 0xd5, 0x10, 0x3f, 0xd8, 0x36, + 0x2f, 0x03, 0x96, 0xd5, 0x17, 0xbb, 0x35, 0xee, 0x99, 0x10, 0x54, 0x75, 0x78, 0x13, 0x58, 0x8c, + 0xa4, 0xdb, 0x7a, 0x01, 0xcb, 0xa7, 0x49, 0x3f, 0x11, 0xa6, 0x1f, 0xb0, 0x42, 0x73, 0x17, 0x8a, + 0xea, 0x88, 0x6c, 0xce, 0xe1, 0xf6, 0xcb, 0x55, 0xaa, 0xfc, 0xf5, 0x0c, 0xc0, 0xb6, 0xaa, 0xaa, + 0xc6, 0xbd, 0x7d, 0x4e, 0xcd, 0xc0, 0x3c, 0x3f, 0xcb, 0xb4, 0x2c, 0xaa, 0x4e, 0xcf, 0x45, 0x5f, + 0x05, 0x42, 0x10, 0xf5, 0xc9, 0x0c, 0x2b, 0xcb, 0xd4, 0x4a, 0x8c, 0x60, 0xb5, 0xad, 0x6c, 0x79, + 0xae, 0x2b, 0xfa, 0xb8, 0x29, 0x45, 0xdb, 0x4a, 0x84, 0x6a, 0xfe, 0x30, 0x0b, 0x95, 0xad, 0xa1, + 0x29, 0xd5, 0x47, 0x74, 0xbe, 0x0d, 0xe5, 0x91, 0x08, 0x02, 0x73, 0x20, 0x02, 0x7d, 0x24, 0x34, + 0x7d, 0x9e, 0x1b, 0xd1, 0x6e, 0x3c, 0x71, 0x7d, 0x61, 0x5a, 0xea, 0xcb, 0x41, 0x11, 0x97, 0x92, + 0xe0, 0xca, 0x28, 0x64, 0x7f, 0x09, 0x09, 0x6e, 0xf4, 0x99, 0x5f, 0xc7, 0x0c, 0x14, 0x49, 0x94, + 0x8e, 0x4b, 0xa2, 0x1a, 0xfb, 0x50, 0x4d, 0xb0, 0xf2, 0x57, 0xa0, 0xe6, 0x39, 0x96, 0x08, 0xd4, + 0xdd, 0xc1, 0xf8, 0x73, 0x8b, 0x29, 0x24, 0x15, 0x76, 0xe0, 0x7a, 0x16, 0xbe, 0x3e, 0xdd, 0x0b, + 0xc1, 0xe6, 0x6f, 0x96, 0xa1, 0x8a, 0x8d, 0xda, 0x57, 0x7d, 0x98, 0x99, 0x8e, 0x3a, 0x94, 0x3c, + 0x2d, 0x59, 0x5f, 0x3a, 0xf4, 0x12, 0x32, 0x75, 0xb1, 0x48, 0x2e, 0x5d, 0x2c, 0x72, 0x17, 0x2a, + 0xea, 0x28, 0xca, 0x6a, 0x29, 0xfb, 0x98, 0x33, 0x62, 0x04, 0x3a, 0x31, 0x23, 0xcf, 0x22, 0x2b, + 0xdd, 0x52, 0xa7, 0x38, 0x39, 0x23, 0x81, 0xa1, 0x30, 0x48, 0x77, 0xbf, 0xaa, 0xc3, 0x20, 0x05, + 0xaa, 0xaa, 0x9d, 0xb1, 0x73, 0xd9, 0xf3, 0x74, 0x6b, 0x3b, 0x56, 0x7c, 0x77, 0x3b, 0x8d, 0xe7, + 0x5b, 0x50, 0xd2, 0xd3, 0xa2, 0xcf, 0xaa, 0xbe, 0x3c, 0x67, 0x26, 0x34, 0xf9, 0x86, 0xfe, 0xab, + 0xaf, 0x4f, 0x19, 0x21, 0x27, 0x7f, 0x04, 0x55, 0x53, 0x4a, 0xb3, 0x3f, 0x1c, 0x69, 0xab, 0x9a, + 0x9b, 0x73, 0x6c, 0x9d, 0x14, 0xd4, 0x8a, 0xa8, 0x8d, 0x24, 0x27, 0xdf, 0x84, 0x8a, 0x2f, 0xcc, + 0xd4, 0xc9, 0xf9, 0x2b, 0xd7, 0x88, 0x31, 0x42, 0x5a, 0x23, 0x66, 0x8b, 0xbe, 0x3c, 0x0a, 0x89, + 0x2f, 0x8f, 0xde, 0x87, 0xaa, 0x56, 0x1d, 0x03, 0x1f, 0xa9, 0x2f, 0xb2, 0x24, 0x51, 0x8d, 0x9f, + 0x64, 0x60, 0x25, 0xdd, 0xbd, 0x3f, 0x8d, 0x6f, 0xe5, 0x7d, 0x33, 0xfe, 0x56, 0xde, 0x67, 0xf8, + 0xee, 0xdc, 0x6f, 0x67, 0x00, 0xe2, 0x91, 0xc3, 0xbd, 0x55, 0x7d, 0xd3, 0x2b, 0xf4, 0xf6, 0x15, + 0xc4, 0x77, 0x53, 0x1f, 0x82, 0x78, 0x67, 0xa1, 0x69, 0x48, 0xfc, 0x4c, 0x94, 0xc5, 0xbf, 0x01, + 0x2b, 0x69, 0x3c, 0x5d, 0x27, 0xe8, 0xec, 0xb5, 0x55, 0xee, 0xab, 0xb3, 0xdf, 0x7a, 0xd4, 0xd6, + 0xd7, 0xd8, 0x3a, 0x07, 0x8f, 0x59, 0xb6, 0xf1, 0x47, 0x19, 0xa8, 0x44, 0x93, 0xc2, 0xbf, 0x93, + 0x9c, 0x4d, 0x55, 0x40, 0xf3, 0xf6, 0x22, 0xb3, 0x19, 0xff, 0x6a, 0xbb, 0xd2, 0xbf, 0x4c, 0x4c, + 0x6e, 0xc3, 0x83, 0x95, 0xf4, 0xc3, 0x39, 0x66, 0xf6, 0x51, 0xda, 0xcc, 0xbe, 0xb5, 0xd0, 0x2b, + 0xc3, 0x10, 0x77, 0xcf, 0x0e, 0xa4, 0xb6, 0xc0, 0x1f, 0x64, 0xdf, 0xcf, 0x34, 0xee, 0xc3, 0x72, + 0xf2, 0xd1, 0xec, 0x4d, 0xd6, 0xf5, 0x3f, 0xca, 0xc1, 0x4a, 0xba, 0x06, 0x85, 0x6e, 0xc6, 0xa9, + 0xfa, 0xa7, 0x43, 0xc7, 0x4a, 0xdc, 0x24, 0x60, 0x18, 0x7e, 0xeb, 0x20, 0x9a, 0x10, 0x6b, 0x94, + 0x5d, 0xf3, 0x46, 0x82, 0xdd, 0x4f, 0x7e, 0x0f, 0xf4, 0x4d, 0x0e, 0xe1, 0x8d, 0x46, 0x36, 0xe6, + 0x15, 0xfd, 0x65, 0xb4, 0x1f, 0x66, 0x79, 0x2d, 0x51, 0xcf, 0xfe, 0x63, 0xf4, 0x20, 0x57, 0x37, + 0x27, 0xae, 0xe5, 0x08, 0x2b, 0xc2, 0xfe, 0x24, 0x89, 0x8d, 0x0a, 0xd2, 0x7f, 0x98, 0xe7, 0x2b, + 0x50, 0xe9, 0x4e, 0x4e, 0x74, 0x31, 0xfa, 0x5f, 0xca, 0xf3, 0xdb, 0xb0, 0xa6, 0xa9, 0xe2, 0xda, + 0x4f, 0xf6, 0x97, 0x71, 0x57, 0x5b, 0x69, 0xa9, 0xf1, 0xd2, 0x0d, 0x65, 0x7f, 0x25, 0x8f, 0x4d, + 0xa0, 0x8b, 0xf2, 0x7f, 0x95, 0xe4, 0x44, 0x17, 0x87, 0xd8, 0xaf, 0xe6, 0xf9, 0x2a, 0x40, 0xb7, + 0x17, 0xbd, 0xe8, 0xd7, 0xf3, 0xbc, 0x0a, 0xc5, 0x6e, 0x8f, 0xa4, 0xfd, 0x28, 0xcf, 0x6f, 0x01, + 0x8b, 0x9f, 0xea, 0x8a, 0xd8, 0xbf, 0xa1, 0x1a, 0x13, 0x95, 0xb8, 0xfe, 0xcd, 0x3c, 0xf6, 0x2b, + 0x1c, 0x65, 0xf6, 0xb7, 0xf2, 0x9c, 0x41, 0x35, 0x91, 0xb3, 0x65, 0x7f, 0x3b, 0xcf, 0x39, 0xd4, + 0xf6, 0xed, 0x20, 0xb0, 0xdd, 0x81, 0xee, 0xc1, 0xaf, 0xd1, 0x9b, 0x77, 0xa2, 0xbb, 0x4f, 0xec, + 0x37, 0xf2, 0xfc, 0x0e, 0xf0, 0xe4, 0x39, 0x95, 0x7e, 0xf0, 0x9b, 0xc4, 0xad, 0x76, 0xd2, 0x40, + 0xe3, 0xfe, 0x0e, 0x71, 0xa3, 0x26, 0x68, 0xc4, 0x6f, 0xd1, 0x80, 0x6c, 0xc5, 0x35, 0xb4, 0x1a, + 0xff, 0x63, 0x62, 0x0e, 0x27, 0x53, 0xe1, 0x7e, 0x92, 0x5f, 0xff, 0x3d, 0x3a, 0x67, 0x48, 0x96, + 0xa2, 0xf1, 0x65, 0x28, 0x3b, 0x9e, 0x3b, 0x90, 0xea, 0x3b, 0xac, 0x35, 0xa8, 0x04, 0x43, 0xcf, + 0x97, 0x04, 0xd2, 0xe5, 0x4c, 0x97, 0x2e, 0xf1, 0xab, 0xeb, 0x0c, 0x2a, 0x1a, 0x54, 0x79, 0x5b, + 0x69, 0x0e, 0x58, 0x35, 0xaa, 0xfe, 0xcd, 0x47, 0x15, 0xca, 0xf4, 0x31, 0x81, 0xf0, 0xb2, 0x36, + 0x2b, 0x22, 0xe9, 0xc4, 0x77, 0x54, 0xa5, 0xb2, 0xc0, 0x48, 0x40, 0x7d, 0x70, 0x71, 0x3c, 0xc4, + 0x80, 0xa3, 0xa2, 0xb0, 0xde, 0xf7, 0x6c, 0x75, 0x0d, 0x58, 0x17, 0xfe, 0x59, 0xd8, 0x8e, 0xa8, + 0xb6, 0x85, 0x89, 0xf5, 0xbf, 0x9b, 0x81, 0xe5, 0xf0, 0x0a, 0xbd, 0x3d, 0xb0, 0x5d, 0x55, 0xeb, + 0x1c, 0x7e, 0xdd, 0xb6, 0xef, 0xd8, 0xe3, 0xf0, 0x6b, 0x91, 0xab, 0x50, 0xb5, 0x7c, 0x73, 0xd0, + 0x72, 0xad, 0x6d, 0xdf, 0x1b, 0xab, 0x66, 0xab, 0x93, 0x48, 0x55, 0x63, 0xfd, 0x5c, 0x9c, 0x20, + 0xf9, 0x58, 0xf8, 0x2c, 0x4f, 0x45, 0x85, 0x43, 0xd3, 0xb7, 0xdd, 0x41, 0xfb, 0x42, 0x0a, 0x37, + 0x50, 0xb5, 0xd6, 0x55, 0x28, 0x4d, 0x02, 0xd1, 0x37, 0x03, 0xc1, 0x8a, 0x08, 0x9c, 0x4c, 0x6c, + 0x47, 0xda, 0xae, 0xfa, 0x48, 0x63, 0x54, 0x4c, 0x5d, 0xc6, 0x9e, 0x99, 0x63, 0x9b, 0x55, 0xd6, + 0xff, 0x65, 0x06, 0xaa, 0xa4, 0x16, 0x71, 0xae, 0x3d, 0xf6, 0xe2, 0xaa, 0x50, 0xda, 0x8b, 0xbe, + 0xd6, 0x57, 0x84, 0xec, 0xe1, 0x99, 0xca, 0xb5, 0x6b, 0xb5, 0x50, 0x77, 0x5d, 0xd5, 0x87, 0xfb, + 0xf2, 0xfc, 0x73, 0x70, 0xcb, 0x10, 0x23, 0x4f, 0x8a, 0x67, 0xa6, 0x2d, 0x93, 0xf7, 0x9a, 0x0a, + 0x18, 0x06, 0xaa, 0x47, 0xe1, 0x45, 0xa6, 0x22, 0x85, 0x81, 0xf8, 0xda, 0x10, 0x53, 0xc2, 0xde, + 0x13, 0x46, 0xc7, 0x85, 0xe5, 0x88, 0xe4, 0x63, 0xcf, 0x76, 0xf1, 0x6d, 0x74, 0xff, 0x9a, 0x30, + 0x74, 0x68, 0x83, 0x28, 0x58, 0x3f, 0x80, 0xdb, 0xf3, 0x8f, 0x1a, 0xd4, 0xcd, 0x6c, 0xfa, 0x44, + 0x34, 0xdd, 0x74, 0x79, 0xe6, 0xdb, 0xea, 0x0a, 0x6d, 0x05, 0x0a, 0x87, 0xcf, 0x5d, 0x52, 0x8b, + 0x35, 0xa8, 0x1d, 0x78, 0x09, 0x1e, 0x96, 0x5b, 0x7f, 0x2f, 0x95, 0xcb, 0xa3, 0x2f, 0x69, 0xe9, + 0x2c, 0x5e, 0x05, 0x0a, 0x61, 0xfe, 0x8e, 0xc3, 0xca, 0x74, 0xce, 0x6e, 0xbd, 0x9f, 0x3a, 0x56, + 0x8a, 0x47, 0x33, 0x6c, 0xfd, 0x52, 0xe2, 0xfa, 0x57, 0x46, 0x1d, 0x58, 0xd0, 0xbf, 0x07, 0x51, + 0x9f, 0xbb, 0xd0, 0xc7, 0x39, 0x96, 0xfa, 0xdc, 0x45, 0xd4, 0xbf, 0xbc, 0xfa, 0xee, 0x97, 0xdb, + 0x17, 0x8e, 0xb0, 0x58, 0x61, 0xfd, 0x7d, 0x58, 0xd5, 0x63, 0xd4, 0x17, 0x41, 0x10, 0x5e, 0x9f, + 0x3a, 0xf2, 0xed, 0x73, 0xf5, 0x49, 0x8d, 0x65, 0x28, 0x1f, 0x09, 0x3f, 0xf0, 0x5c, 0xfa, 0x9c, + 0x08, 0x40, 0xb1, 0x3b, 0x34, 0x7d, 0x7c, 0xc7, 0xfa, 0x57, 0xf5, 0xe8, 0x3e, 0xb9, 0x08, 0xf7, + 0x14, 0x5c, 0x78, 0xfa, 0x6b, 0x3a, 0xa6, 0x34, 0x35, 0xb9, 0xf4, 0x85, 0x39, 0x62, 0xd9, 0xf5, + 0x2d, 0xa8, 0xd0, 0xed, 0xab, 0xc7, 0xb6, 0x6b, 0x61, 0xcf, 0x37, 0xf5, 0x4d, 0x00, 0xfa, 0xcc, + 0xd3, 0x39, 0x8d, 0x63, 0x59, 0x7d, 0x10, 0x97, 0x65, 0xf9, 0x6d, 0xe0, 0xad, 0x89, 0xf4, 0x46, + 0x26, 0xdd, 0x1a, 0x76, 0x2e, 0xd5, 0xc7, 0x93, 0x73, 0xeb, 0xdf, 0x02, 0xae, 0x92, 0x7a, 0x96, + 0xb8, 0xb0, 0xdd, 0x41, 0xf4, 0xb9, 0x02, 0xa0, 0x6f, 0x8f, 0x58, 0xe2, 0x22, 0xbc, 0x3a, 0x17, + 0x02, 0xe1, 0x17, 0x50, 0x76, 0xbc, 0x89, 0x8b, 0x8d, 0x7e, 0x0a, 0x37, 0x95, 0x6e, 0x62, 0x2f, + 0xe8, 0x4a, 0xea, 0x95, 0x99, 0x06, 0x75, 0x75, 0x4e, 0x4e, 0x82, 0x88, 0x96, 0x65, 0xb0, 0x61, + 0x51, 0x94, 0x1e, 0xe3, 0xb3, 0xeb, 0x4d, 0xb8, 0x31, 0x27, 0x55, 0x42, 0xbb, 0x81, 0x0a, 0x18, + 0xd9, 0xd2, 0xfa, 0x47, 0xb0, 0xa6, 0xec, 0xd7, 0x81, 0xba, 0x34, 0x18, 0x0e, 0xdb, 0xb3, 0xce, + 0x4e, 0x47, 0x8d, 0xf4, 0x56, 0x7b, 0x6f, 0xef, 0xc9, 0x5e, 0xcb, 0x60, 0x19, 0x52, 0xa4, 0xc3, + 0xde, 0xf1, 0xd6, 0xe1, 0xc1, 0x41, 0x7b, 0xab, 0xd7, 0xde, 0x66, 0xd9, 0xcd, 0xf5, 0x7f, 0xf3, + 0xb3, 0x7b, 0x99, 0x9f, 0xfe, 0xec, 0x5e, 0xe6, 0x3f, 0xff, 0xec, 0x5e, 0xe6, 0x47, 0x3f, 0xbf, + 0xb7, 0xf4, 0xd3, 0x9f, 0xdf, 0x5b, 0xfa, 0xf7, 0x3f, 0xbf, 0xb7, 0xf4, 0x29, 0x9b, 0xfe, 0x0f, + 0x3f, 0x27, 0x45, 0x8a, 0x46, 0xde, 0xfe, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x25, 0x33, 0x79, + 0xb0, 0xfc, 0x67, 0x00, 0x00, } func (m *SmartBlockSnapshotBase) Marshal() (dAtA []byte, err error) { diff --git a/pkg/lib/pb/model/protos/models.proto b/pkg/lib/pb/model/protos/models.proto index 887dc0e1e..eea28866a 100644 --- a/pkg/lib/pb/model/protos/models.proto +++ b/pkg/lib/pb/model/protos/models.proto @@ -1006,6 +1006,12 @@ enum ParticipantPermissions { NoPermissions = 3; } +enum InviteType { + Member = 0; // aclKey contains the key to sign the ACL record + Guest = 1; // guestKey contains the privateKey of the guest user + WithoutApprove = 2; // aclKey contains the key to sign the ACL record, but no approval needed +} + enum ParticipantStatus { Joining = 0; Active = 1; diff --git a/space/internal/components/aclobjectmanager/aclobjectmanager.go b/space/internal/components/aclobjectmanager/aclobjectmanager.go index 91fc5df02..9703bb5ef 100644 --- a/space/internal/components/aclobjectmanager/aclobjectmanager.go +++ b/space/internal/components/aclobjectmanager/aclobjectmanager.go @@ -19,7 +19,6 @@ import ( "github.com/anyproto/anytype-heart/core/block/chats/chatpush" "github.com/anyproto/anytype-heart/space/clientspace" "github.com/anyproto/anytype-heart/space/internal/components/aclnotifications" - "github.com/anyproto/anytype-heart/space/internal/components/invitemigrator" "github.com/anyproto/anytype-heart/space/internal/components/participantwatcher" "github.com/anyproto/anytype-heart/space/internal/components/spaceloader" "github.com/anyproto/anytype-heart/space/internal/components/spacestatus" @@ -61,7 +60,6 @@ type aclObjectManager struct { notificationService aclnotifications.AclNotification spaceLoaderListener SpaceLoaderListener participantWatcher participantwatcher.ParticipantWatcher - inviteMigrator invitemigrator.InviteMigrator accountService accountservice.Service pushNotificationService pushNotificationService @@ -114,7 +112,6 @@ func (a *aclObjectManager) Init(ap *app.App) (err error) { if a.statService == nil { a.statService = debugstat.NewNoOp() } - a.inviteMigrator = app.MustComponent[invitemigrator.InviteMigrator](ap) a.statService.AddProvider(a) a.waitLoad = make(chan struct{}) a.wait = make(chan struct{}) @@ -157,11 +154,7 @@ func (a *aclObjectManager) process() { return } a.spaceLoaderListener.OnSpaceLoad(a.sp.Id()) - err := a.inviteMigrator.MigrateExistingInvites(a.sp) - if err != nil { - log.Warn("migrate existing invites", zap.Error(err)) - } - err = a.participantWatcher.UpdateAccountParticipantFromProfile(a.ctx, a.sp) + err := a.participantWatcher.UpdateAccountParticipantFromProfile(a.ctx, a.sp) if err != nil { log.Error("init my identity", zap.Error(err)) } diff --git a/space/internal/components/aclobjectmanager/aclobjectmananger_test.go b/space/internal/components/aclobjectmanager/aclobjectmananger_test.go index 30693b0d9..4df21bb10 100644 --- a/space/internal/components/aclobjectmanager/aclobjectmananger_test.go +++ b/space/internal/components/aclobjectmanager/aclobjectmananger_test.go @@ -25,7 +25,6 @@ import ( "github.com/anyproto/anytype-heart/space/clientspace/mock_clientspace" "github.com/anyproto/anytype-heart/space/internal/components/aclnotifications/mock_aclnotifications" "github.com/anyproto/anytype-heart/space/internal/components/dependencies/mock_dependencies" - "github.com/anyproto/anytype-heart/space/internal/components/invitemigrator/mock_invitemigrator" "github.com/anyproto/anytype-heart/space/internal/components/participantwatcher/mock_participantwatcher" "github.com/anyproto/anytype-heart/space/internal/components/spaceloader/mock_spaceloader" "github.com/anyproto/anytype-heart/space/internal/components/spacestatus/mock_spacestatus" @@ -70,7 +69,6 @@ func TestAclObjectManager(t *testing.T) { fx := newFixture(t) defer fx.finish(t) fx.mockLoader.EXPECT().WaitLoad(mock.Anything).Return(fx.mockSpace, nil) - fx.mockInviteMigrator.EXPECT().MigrateExistingInvites(fx.mockSpace).Return(nil) fx.mockParticipantWatcher.EXPECT().UpdateAccountParticipantFromProfile(mock.Anything, fx.mockSpace).Return(nil) fx.mockSpace.EXPECT().CommonSpace().Return(fx.mockCommonSpace) fx.mockSpace.EXPECT().Id().Return("spaceId") @@ -111,7 +109,6 @@ func TestAclObjectManager(t *testing.T) { fx := newFixture(t) defer fx.finish(t) fx.mockLoader.EXPECT().WaitLoad(mock.Anything).Return(fx.mockSpace, nil) - fx.mockInviteMigrator.EXPECT().MigrateExistingInvites(fx.mockSpace).Return(nil) fx.mockParticipantWatcher.EXPECT().UpdateAccountParticipantFromProfile(mock.Anything, fx.mockSpace).Return(nil) fx.mockSpace.EXPECT().CommonSpace().Return(fx.mockCommonSpace) fx.mockSpace.EXPECT().Id().Return("spaceId") @@ -158,7 +155,6 @@ func TestAclObjectManager(t *testing.T) { fx := newFixture(t) defer fx.finish(t) fx.mockLoader.EXPECT().WaitLoad(mock.Anything).Return(fx.mockSpace, nil) - fx.mockInviteMigrator.EXPECT().MigrateExistingInvites(fx.mockSpace).Return(nil) fx.mockStatus.EXPECT().SetOwner(a.ActualAccounts()["a"].Acl.AclState().Identity().Account(), mock.Anything).Return(nil) fx.mockParticipantWatcher.EXPECT().UpdateAccountParticipantFromProfile(mock.Anything, fx.mockSpace).Return(nil) fx.mockSpace.EXPECT().CommonSpace().Return(fx.mockCommonSpace) @@ -198,7 +194,6 @@ type fixture struct { mockCommonSpace *mock_commonspace.MockSpace mockParticipantWatcher *mock_participantwatcher.MockParticipantWatcher mockAclNotification *mock_aclnotifications.MockAclNotification - mockInviteMigrator *mock_invitemigrator.MockInviteMigrator mockAccountService *mock_accountservice.MockService spaceLoaderListener *testSpaceLoaderListener } @@ -216,12 +211,10 @@ func newFixture(t *testing.T) *fixture { mockCommonSpace: mock_commonspace.NewMockSpace(ctrl), mockParticipantWatcher: mock_participantwatcher.NewMockParticipantWatcher(t), mockAclNotification: mock_aclnotifications.NewMockAclNotification(t), - mockInviteMigrator: mock_invitemigrator.NewMockInviteMigrator(t), mockAccountService: mock_accountservice.NewMockService(ctrl), spaceLoaderListener: &testSpaceLoaderListener{}, } fx.a.Register(testutil.PrepareMock(ctx, fx.a, fx.mockStatus)). - Register(testutil.PrepareMock(ctx, fx.a, fx.mockInviteMigrator)). Register(testutil.PrepareMock(ctx, fx.a, fx.mockIndexer)). Register(testutil.PrepareMock(ctx, fx.a, fx.mockLoader)). Register(testutil.PrepareMock(ctx, fx.a, fx.mockParticipantWatcher)). diff --git a/space/internal/components/invitemigrator/invitemigrator.go b/space/internal/components/invitemigrator/invitemigrator.go deleted file mode 100644 index a17bf76ff..000000000 --- a/space/internal/components/invitemigrator/invitemigrator.go +++ /dev/null @@ -1,62 +0,0 @@ -package invitemigrator - -import ( - "fmt" - - "github.com/anyproto/any-sync/app" - "github.com/anyproto/any-sync/app/logger" - "go.uber.org/zap" - - "github.com/anyproto/anytype-heart/core/block/editor/smartblock" - "github.com/anyproto/anytype-heart/core/domain" - "github.com/anyproto/anytype-heart/space/clientspace" - "github.com/anyproto/anytype-heart/space/internal/components/spacestatus" -) - -const CName = "client.components.invitemigrator" - -var log = logger.NewNamed(CName) - -func New() InviteMigrator { - return &inviteMigrator{} -} - -type InviteMigrator interface { - app.Component - MigrateExistingInvites(space clientspace.Space) error -} - -type inviteMigrator struct { - status spacestatus.SpaceStatus -} - -func (i *inviteMigrator) Init(a *app.App) (err error) { - i.status = app.MustComponent[spacestatus.SpaceStatus](a) - return nil -} - -func (i *inviteMigrator) Name() (name string) { - return CName -} - -func (i *inviteMigrator) MigrateExistingInvites(space clientspace.Space) error { - spaceView := i.status.GetSpaceView() - spaceView.Lock() - fileCid, fileKey := spaceView.GetExistingInviteInfo() - if fileCid == "" { - spaceView.Unlock() - return nil - } - _, err := spaceView.RemoveExistingInviteInfo() - if err != nil { - log.Warn("remove existing invite info", zap.Error(err)) - } - spaceView.Unlock() - return space.Do(space.DerivedIDs().Workspace, func(sb smartblock.SmartBlock) error { - invObject, ok := sb.(domain.InviteObject) - if !ok { - return fmt.Errorf("space is not invite object") - } - return invObject.SetInviteFileInfo(fileCid, fileKey) - }) -} diff --git a/space/internal/components/invitemigrator/invitemigrator_test.go b/space/internal/components/invitemigrator/invitemigrator_test.go deleted file mode 100644 index 2c0da2992..000000000 --- a/space/internal/components/invitemigrator/invitemigrator_test.go +++ /dev/null @@ -1,80 +0,0 @@ -package invitemigrator - -import ( - "context" - "testing" - - "github.com/anyproto/any-sync/app" - "github.com/stretchr/testify/mock" - "github.com/stretchr/testify/require" - - "github.com/anyproto/anytype-heart/core/block/editor/smartblock" - "github.com/anyproto/anytype-heart/core/block/editor/smartblock/smarttest" - "github.com/anyproto/anytype-heart/core/domain/mock_domain" - "github.com/anyproto/anytype-heart/pkg/lib/threads" - "github.com/anyproto/anytype-heart/space/clientspace/mock_clientspace" - "github.com/anyproto/anytype-heart/space/internal/components/spacestatus/mock_spacestatus" - "github.com/anyproto/anytype-heart/space/techspace/mock_techspace" - "github.com/anyproto/anytype-heart/tests/testutil" -) - -type mockInviteObject struct { - smartblock.SmartBlock - *mock_domain.MockInviteObject -} - -func TestInviteMigrator(t *testing.T) { - t.Run("migrate existing invites", func(t *testing.T) { - fx := newFixture(t) - fx.mockStatus.EXPECT().GetSpaceView().Return(fx.mockSpaceView) - fx.mockSpaceView.EXPECT().Lock() - fx.mockSpaceView.EXPECT().Unlock() - fx.mockSpaceView.EXPECT().GetExistingInviteInfo().Return("fileCid", "fileKey") - fx.mockSpaceView.EXPECT().RemoveExistingInviteInfo().Return("fileCid", nil) - fx.mockSpaceObject.EXPECT().DerivedIDs().Return(threads.DerivedSmartblockIds{ - Workspace: "workspaceId", - }) - fx.mockSpaceObject.EXPECT().Do("workspaceId", mock.Anything).RunAndReturn(func(s string, f func(smartblock.SmartBlock) error) error { - return f(mockInviteObject{SmartBlock: smarttest.New("root"), MockInviteObject: fx.mockInviteObject}) - }) - fx.mockInviteObject.EXPECT().SetInviteFileInfo("fileCid", "fileKey").Return(nil) - err := fx.MigrateExistingInvites(fx.mockSpaceObject) - require.NoError(t, err) - }) - t.Run("migrate existing invites empty spaceview", func(t *testing.T) { - fx := newFixture(t) - fx.mockStatus.EXPECT().GetSpaceView().Return(fx.mockSpaceView) - fx.mockSpaceView.EXPECT().Lock() - fx.mockSpaceView.EXPECT().Unlock() - fx.mockSpaceView.EXPECT().GetExistingInviteInfo().Return("", "") - err := fx.MigrateExistingInvites(fx.mockSpaceObject) - require.NoError(t, err) - }) -} - -var ctx = context.Background() - -type fixture struct { - *inviteMigrator - a *app.App - mockStatus *mock_spacestatus.MockSpaceStatus - mockSpaceView *mock_techspace.MockSpaceView - mockInviteObject *mock_domain.MockInviteObject - mockSpaceObject *mock_clientspace.MockSpace -} - -func newFixture(t *testing.T) *fixture { - fx := &fixture{ - inviteMigrator: New().(*inviteMigrator), - a: new(app.App), - mockStatus: mock_spacestatus.NewMockSpaceStatus(t), - mockSpaceView: mock_techspace.NewMockSpaceView(t), - mockInviteObject: mock_domain.NewMockInviteObject(t), - mockSpaceObject: mock_clientspace.NewMockSpace(t), - } - fx.a.Register(testutil.PrepareMock(ctx, fx.a, fx.mockStatus)). - Register(fx) - - require.NoError(t, fx.a.Start(ctx)) - return fx -} diff --git a/space/internal/components/invitemigrator/mock_invitemigrator/mock_InviteMigrator.go b/space/internal/components/invitemigrator/mock_invitemigrator/mock_InviteMigrator.go deleted file mode 100644 index 12be9ef2d..000000000 --- a/space/internal/components/invitemigrator/mock_invitemigrator/mock_InviteMigrator.go +++ /dev/null @@ -1,174 +0,0 @@ -// Code generated by mockery. DO NOT EDIT. - -package mock_invitemigrator - -import ( - app "github.com/anyproto/any-sync/app" - clientspace "github.com/anyproto/anytype-heart/space/clientspace" - - mock "github.com/stretchr/testify/mock" -) - -// MockInviteMigrator is an autogenerated mock type for the InviteMigrator type -type MockInviteMigrator struct { - mock.Mock -} - -type MockInviteMigrator_Expecter struct { - mock *mock.Mock -} - -func (_m *MockInviteMigrator) EXPECT() *MockInviteMigrator_Expecter { - return &MockInviteMigrator_Expecter{mock: &_m.Mock} -} - -// Init provides a mock function with given fields: a -func (_m *MockInviteMigrator) Init(a *app.App) error { - ret := _m.Called(a) - - if len(ret) == 0 { - panic("no return value specified for Init") - } - - var r0 error - if rf, ok := ret.Get(0).(func(*app.App) error); ok { - r0 = rf(a) - } else { - r0 = ret.Error(0) - } - - return r0 -} - -// MockInviteMigrator_Init_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Init' -type MockInviteMigrator_Init_Call struct { - *mock.Call -} - -// Init is a helper method to define mock.On call -// - a *app.App -func (_e *MockInviteMigrator_Expecter) Init(a interface{}) *MockInviteMigrator_Init_Call { - return &MockInviteMigrator_Init_Call{Call: _e.mock.On("Init", a)} -} - -func (_c *MockInviteMigrator_Init_Call) Run(run func(a *app.App)) *MockInviteMigrator_Init_Call { - _c.Call.Run(func(args mock.Arguments) { - run(args[0].(*app.App)) - }) - return _c -} - -func (_c *MockInviteMigrator_Init_Call) Return(err error) *MockInviteMigrator_Init_Call { - _c.Call.Return(err) - return _c -} - -func (_c *MockInviteMigrator_Init_Call) RunAndReturn(run func(*app.App) error) *MockInviteMigrator_Init_Call { - _c.Call.Return(run) - return _c -} - -// MigrateExistingInvites provides a mock function with given fields: space -func (_m *MockInviteMigrator) MigrateExistingInvites(space clientspace.Space) error { - ret := _m.Called(space) - - if len(ret) == 0 { - panic("no return value specified for MigrateExistingInvites") - } - - var r0 error - if rf, ok := ret.Get(0).(func(clientspace.Space) error); ok { - r0 = rf(space) - } else { - r0 = ret.Error(0) - } - - return r0 -} - -// MockInviteMigrator_MigrateExistingInvites_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'MigrateExistingInvites' -type MockInviteMigrator_MigrateExistingInvites_Call struct { - *mock.Call -} - -// MigrateExistingInvites is a helper method to define mock.On call -// - space clientspace.Space -func (_e *MockInviteMigrator_Expecter) MigrateExistingInvites(space interface{}) *MockInviteMigrator_MigrateExistingInvites_Call { - return &MockInviteMigrator_MigrateExistingInvites_Call{Call: _e.mock.On("MigrateExistingInvites", space)} -} - -func (_c *MockInviteMigrator_MigrateExistingInvites_Call) Run(run func(space clientspace.Space)) *MockInviteMigrator_MigrateExistingInvites_Call { - _c.Call.Run(func(args mock.Arguments) { - run(args[0].(clientspace.Space)) - }) - return _c -} - -func (_c *MockInviteMigrator_MigrateExistingInvites_Call) Return(_a0 error) *MockInviteMigrator_MigrateExistingInvites_Call { - _c.Call.Return(_a0) - return _c -} - -func (_c *MockInviteMigrator_MigrateExistingInvites_Call) RunAndReturn(run func(clientspace.Space) error) *MockInviteMigrator_MigrateExistingInvites_Call { - _c.Call.Return(run) - return _c -} - -// Name provides a mock function with given fields: -func (_m *MockInviteMigrator) Name() string { - ret := _m.Called() - - if len(ret) == 0 { - panic("no return value specified for Name") - } - - var r0 string - if rf, ok := ret.Get(0).(func() string); ok { - r0 = rf() - } else { - r0 = ret.Get(0).(string) - } - - return r0 -} - -// MockInviteMigrator_Name_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Name' -type MockInviteMigrator_Name_Call struct { - *mock.Call -} - -// Name is a helper method to define mock.On call -func (_e *MockInviteMigrator_Expecter) Name() *MockInviteMigrator_Name_Call { - return &MockInviteMigrator_Name_Call{Call: _e.mock.On("Name")} -} - -func (_c *MockInviteMigrator_Name_Call) Run(run func()) *MockInviteMigrator_Name_Call { - _c.Call.Run(func(args mock.Arguments) { - run() - }) - return _c -} - -func (_c *MockInviteMigrator_Name_Call) Return(name string) *MockInviteMigrator_Name_Call { - _c.Call.Return(name) - return _c -} - -func (_c *MockInviteMigrator_Name_Call) RunAndReturn(run func() string) *MockInviteMigrator_Name_Call { - _c.Call.Return(run) - return _c -} - -// NewMockInviteMigrator creates a new instance of MockInviteMigrator. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. -// The first argument is typically a *testing.T value. -func NewMockInviteMigrator(t interface { - mock.TestingT - Cleanup(func()) -}) *MockInviteMigrator { - mock := &MockInviteMigrator{} - mock.Mock.Test(t) - - t.Cleanup(func() { mock.AssertExpectations(t) }) - - return mock -} diff --git a/space/internal/spaceprocess/loader/loader.go b/space/internal/spaceprocess/loader/loader.go index 2435c16c6..109b5365d 100644 --- a/space/internal/spaceprocess/loader/loader.go +++ b/space/internal/spaceprocess/loader/loader.go @@ -10,7 +10,6 @@ import ( "github.com/anyproto/anytype-heart/space/internal/components/aclnotifications" "github.com/anyproto/anytype-heart/space/internal/components/aclobjectmanager" "github.com/anyproto/anytype-heart/space/internal/components/builder" - "github.com/anyproto/anytype-heart/space/internal/components/invitemigrator" "github.com/anyproto/anytype-heart/space/internal/components/migration" "github.com/anyproto/anytype-heart/space/internal/components/participantwatcher" "github.com/anyproto/anytype-heart/space/internal/components/spaceloader" @@ -44,7 +43,6 @@ func New(app *app.App, params Params) Loader { Register(spaceloader.New(params.IsPersonal, false)). Register(aclnotifications.NewAclNotificationSender()). Register(aclobjectmanager.New(params.OwnerMetadata, params.GuestKey)). - Register(invitemigrator.New()). Register(participantwatcher.New()). Register(migration.New()) for _, comp := range params.AdditionalComps { diff --git a/space/techspace/techspace.go b/space/techspace/techspace.go index c95fdf1ca..132d86715 100644 --- a/space/techspace/techspace.go +++ b/space/techspace/techspace.go @@ -75,14 +75,11 @@ type SpaceView interface { GetLocalInfo() spaceinfo.SpaceLocalInfo SetSpaceData(details *domain.Details) error SetSpaceLocalInfo(info spaceinfo.SpaceLocalInfo) error - SetInviteFileInfo(fileCid string, fileKey string) (err error) SetAccessType(acc spaceinfo.AccessType) error SetAclIsEmpty(isEmpty bool) (err error) SetOwner(ownerId string, createdDate int64) (err error) SetSpacePersistentInfo(info spaceinfo.SpacePersistentInfo) error - RemoveExistingInviteInfo() (fileCid string, err error) GetSpaceDescription() (data spaceinfo.SpaceDescription) - GetExistingInviteInfo() (fileCid string, fileKey string) SetSharedSpacesLimit(limits int) (err error) GetSharedSpacesLimit() (limits int) } From 67587894e2a065a982735ea33e28f859db7969c8 Mon Sep 17 00:00:00 2001 From: Mikhail Rakhmanov Date: Thu, 15 May 2025 09:42:34 +0200 Subject: [PATCH 038/164] GO-4400 Add invite change --- clientlibrary/service/service.pb.go | 760 +++--- core/acl/aclservice.go | 44 + core/block/editor/workspaces.go | 13 +- core/inviteservice/inviteservice.go | 9 + core/space.go | 20 + docs/proto.md | 80 + pb/commands.pb.go | 3625 ++++++++++++++++----------- pb/protos/commands.proto | 27 + pb/protos/service/service.proto | 1 + pb/service/service.pb.go | 759 +++--- 10 files changed, 3174 insertions(+), 2164 deletions(-) diff --git a/clientlibrary/service/service.pb.go b/clientlibrary/service/service.pb.go index b721fdbac..040a05af4 100644 --- a/clientlibrary/service/service.pb.go +++ b/clientlibrary/service/service.pb.go @@ -25,368 +25,369 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package func init() { proto.RegisterFile("pb/protos/service/service.proto", fileDescriptor_93a29dc403579097) } var fileDescriptor_93a29dc403579097 = []byte{ - // 5766 bytes of a gzipped FileDescriptorProto + // 5777 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x9d, 0xdd, 0x6f, 0x24, 0x49, - 0x52, 0xc0, 0xd7, 0x2f, 0x2c, 0xd4, 0x71, 0x0b, 0xf4, 0xc2, 0xb2, 0xb7, 0xdc, 0xcd, 0xcc, 0xce, - 0x87, 0x3d, 0x33, 0x1e, 0xb7, 0x67, 0x67, 0xf6, 0x8b, 0x3b, 0x24, 0xe8, 0xb1, 0xc7, 0xde, 0xbe, - 0xb5, 0xbd, 0xc6, 0xdd, 0x9e, 0x11, 0x2b, 0x21, 0x51, 0xee, 0x4a, 0xb7, 0x0b, 0x57, 0x57, 0xd6, - 0x55, 0x65, 0x7b, 0xa6, 0x0f, 0x81, 0x40, 0x20, 0x10, 0x08, 0xc4, 0x89, 0x2f, 0xc1, 0x13, 0x12, - 0x7f, 0x01, 0x7f, 0x06, 0x8f, 0xf7, 0xc8, 0x23, 0xda, 0xfd, 0x33, 0x78, 0x00, 0x55, 0x66, 0x56, - 0x7e, 0x44, 0x45, 0x64, 0x95, 0xf7, 0x9e, 0x66, 0xe4, 0xf8, 0x45, 0x44, 0x7e, 0x44, 0x66, 0x46, - 0x66, 0x65, 0x55, 0x47, 0x37, 0x8b, 0xb3, 0xed, 0xa2, 0xe4, 0x82, 0x57, 0xdb, 0x15, 0x2b, 0xaf, - 0xd2, 0x19, 0x6b, 0xfe, 0x1d, 0xca, 0x3f, 0x0f, 0xde, 0x8c, 0xf3, 0x95, 0x58, 0x15, 0xec, 0xbd, - 0x77, 0x2d, 0x39, 0xe3, 0x8b, 0x45, 0x9c, 0x27, 0x95, 0x42, 0xde, 0x7b, 0xc7, 0x4a, 0xd8, 0x15, - 0xcb, 0x85, 0xfe, 0xfb, 0x93, 0xff, 0xfd, 0xbf, 0xb5, 0xe8, 0xad, 0x9d, 0x2c, 0x65, 0xb9, 0xd8, - 0xd1, 0x1a, 0x83, 0x2f, 0xa3, 0x6f, 0x8f, 0x8a, 0x62, 0x9f, 0x89, 0x17, 0xac, 0xac, 0x52, 0x9e, - 0x0f, 0xee, 0x0c, 0xb5, 0x83, 0xe1, 0x49, 0x31, 0x1b, 0x8e, 0x8a, 0x62, 0x68, 0x85, 0xc3, 0x13, - 0xf6, 0xa3, 0x25, 0xab, 0xc4, 0x7b, 0x77, 0xc3, 0x50, 0x55, 0xf0, 0xbc, 0x62, 0x83, 0xf3, 0xe8, - 0x57, 0x46, 0x45, 0x31, 0x61, 0x62, 0x97, 0xd5, 0x15, 0x98, 0x88, 0x58, 0xb0, 0xc1, 0x46, 0x4b, - 0xd5, 0x07, 0x8c, 0x8f, 0xfb, 0xdd, 0xa0, 0xf6, 0x33, 0x8d, 0xbe, 0x55, 0xfb, 0xb9, 0x58, 0x8a, - 0x84, 0xbf, 0xca, 0x07, 0xef, 0xb7, 0x15, 0xb5, 0xc8, 0xd8, 0xbe, 0x1d, 0x42, 0xb4, 0xd5, 0x97, - 0xd1, 0x2f, 0xbe, 0x8c, 0xb3, 0x8c, 0x89, 0x9d, 0x92, 0xd5, 0x05, 0xf7, 0x75, 0x94, 0x68, 0xa8, - 0x64, 0xc6, 0xee, 0x9d, 0x20, 0xa3, 0x0d, 0x7f, 0x19, 0x7d, 0x5b, 0x49, 0x4e, 0xd8, 0x8c, 0x5f, - 0xb1, 0x72, 0x80, 0x6a, 0x69, 0x21, 0xd1, 0xe4, 0x2d, 0x08, 0xda, 0xde, 0xe1, 0xf9, 0x15, 0x2b, - 0x05, 0x6e, 0x5b, 0x0b, 0xc3, 0xb6, 0x2d, 0xa4, 0x6d, 0xff, 0xf5, 0x5a, 0xf4, 0xdd, 0xd1, 0x6c, - 0xc6, 0x97, 0xb9, 0x38, 0xe0, 0xb3, 0x38, 0x3b, 0x48, 0xf3, 0xcb, 0x23, 0xf6, 0x6a, 0xe7, 0xa2, - 0xe6, 0xf3, 0x39, 0x1b, 0x3c, 0xf5, 0x5b, 0x55, 0xa1, 0x43, 0xc3, 0x0e, 0x5d, 0xd8, 0xf8, 0xfe, - 0xf0, 0x7a, 0x4a, 0xba, 0x2c, 0x7f, 0xbf, 0x16, 0xdd, 0x80, 0x65, 0x99, 0xf0, 0xec, 0x8a, 0xd9, - 0xd2, 0x7c, 0xd4, 0x61, 0xd8, 0xc7, 0x4d, 0x79, 0x3e, 0xbe, 0xae, 0x9a, 0x2e, 0x51, 0x16, 0xbd, - 0xed, 0x86, 0xcb, 0x84, 0x55, 0x72, 0x38, 0x3d, 0xa0, 0x23, 0x42, 0x23, 0xc6, 0xf3, 0xc3, 0x3e, - 0xa8, 0xf6, 0x96, 0x46, 0x03, 0xed, 0x2d, 0xe3, 0x95, 0x71, 0x76, 0x1f, 0xb5, 0xe0, 0x10, 0xc6, - 0xd7, 0x83, 0x1e, 0xa4, 0x76, 0xf5, 0x07, 0xd1, 0x2f, 0xbd, 0xe4, 0xe5, 0x65, 0x55, 0xc4, 0x33, - 0xa6, 0x87, 0xc2, 0x3d, 0x5f, 0xbb, 0x91, 0xc2, 0xd1, 0xb0, 0xde, 0x85, 0x39, 0x41, 0xdb, 0x08, - 0xbf, 0x28, 0x18, 0x9c, 0x83, 0xac, 0x62, 0x2d, 0xa4, 0x82, 0x16, 0x42, 0xda, 0xf6, 0x65, 0x34, - 0xb0, 0xb6, 0xcf, 0xfe, 0x90, 0xcd, 0xc4, 0x28, 0x49, 0x60, 0xaf, 0x58, 0x5d, 0x49, 0x0c, 0x47, - 0x49, 0x42, 0xf5, 0x0a, 0x8e, 0x6a, 0x67, 0xaf, 0xa2, 0x77, 0x80, 0xb3, 0x83, 0xb4, 0x92, 0x0e, - 0xb7, 0xc2, 0x56, 0x34, 0x66, 0x9c, 0x0e, 0xfb, 0xe2, 0xda, 0xf1, 0x9f, 0xae, 0x45, 0xdf, 0x41, - 0x3c, 0x9f, 0xb0, 0x05, 0xbf, 0x62, 0x83, 0xc7, 0xdd, 0xd6, 0x14, 0x69, 0xfc, 0x7f, 0x70, 0x0d, - 0x0d, 0x24, 0x4c, 0x26, 0x2c, 0x63, 0x33, 0x41, 0x86, 0x89, 0x12, 0x77, 0x86, 0x89, 0xc1, 0x9c, - 0x11, 0xd6, 0x08, 0xf7, 0x99, 0xd8, 0x59, 0x96, 0x25, 0xcb, 0x05, 0xd9, 0x97, 0x16, 0xe9, 0xec, - 0x4b, 0x0f, 0x45, 0xea, 0xb3, 0xcf, 0xc4, 0x28, 0xcb, 0xc8, 0xfa, 0x28, 0x71, 0x67, 0x7d, 0x0c, - 0xa6, 0x3d, 0xcc, 0xa2, 0x5f, 0x76, 0x5a, 0x4c, 0x8c, 0xf3, 0x73, 0x3e, 0xa0, 0xdb, 0x42, 0xca, - 0x8d, 0x8f, 0x8d, 0x4e, 0x0e, 0xa9, 0xc6, 0xf3, 0xd7, 0x05, 0x2f, 0xe9, 0x6e, 0x51, 0xe2, 0xce, - 0x6a, 0x18, 0x4c, 0x7b, 0xf8, 0xfd, 0xe8, 0x2d, 0x3d, 0x4b, 0x36, 0xeb, 0xd9, 0x5d, 0x74, 0x0a, - 0x85, 0x0b, 0xda, 0xbd, 0x0e, 0xaa, 0x65, 0xfe, 0x30, 0x9d, 0x97, 0xf5, 0xec, 0x83, 0x9b, 0xd7, - 0xd2, 0x0e, 0xf3, 0x96, 0xd2, 0xe6, 0x79, 0xf4, 0xab, 0xbe, 0xf9, 0x9d, 0x38, 0x9f, 0xb1, 0x6c, - 0xf0, 0x30, 0xa4, 0xae, 0x18, 0xe3, 0x6a, 0xb3, 0x17, 0x6b, 0x27, 0x3b, 0x4d, 0xe8, 0xc9, 0xf4, - 0x0e, 0xaa, 0x0d, 0xa6, 0xd2, 0xbb, 0x61, 0xa8, 0x65, 0x7b, 0x97, 0x65, 0x8c, 0xb4, 0xad, 0x84, - 0x1d, 0xb6, 0x0d, 0xa4, 0x6d, 0x97, 0xd1, 0xaf, 0x99, 0x6e, 0xae, 0xf3, 0x02, 0x29, 0xaf, 0x17, - 0x9d, 0x4d, 0xa2, 0x1f, 0x5d, 0xc8, 0xf8, 0x7a, 0xd4, 0x0f, 0x6e, 0xd5, 0x47, 0xcf, 0x28, 0x78, - 0x7d, 0xc0, 0x7c, 0x72, 0x37, 0x0c, 0x69, 0xdb, 0x7f, 0xb3, 0x16, 0x7d, 0x4f, 0xcb, 0x9e, 0xe7, - 0xf1, 0x59, 0xc6, 0xe4, 0x12, 0x7f, 0xc4, 0xc4, 0x2b, 0x5e, 0x5e, 0x4e, 0x56, 0xf9, 0x8c, 0x48, - 0x67, 0x70, 0xb8, 0x23, 0x9d, 0x21, 0x95, 0x74, 0x61, 0xfe, 0x28, 0x7a, 0xb7, 0x09, 0x8a, 0x8b, - 0x38, 0x9f, 0xb3, 0x1f, 0x56, 0x3c, 0x1f, 0x15, 0xe9, 0x28, 0x49, 0xca, 0xc1, 0x10, 0xef, 0x7a, - 0xc8, 0x99, 0x12, 0x6c, 0xf7, 0xe6, 0x9d, 0xf4, 0x59, 0xb7, 0xb2, 0xe0, 0x05, 0x4c, 0x9f, 0x9b, - 0xe6, 0x13, 0xbc, 0xa0, 0xd2, 0x67, 0x1f, 0x69, 0x59, 0x3d, 0xac, 0xd7, 0x20, 0xdc, 0xea, 0xa1, - 0xbb, 0xe8, 0xdc, 0x0e, 0x21, 0x76, 0x0d, 0x68, 0x1a, 0x8a, 0xe7, 0xe7, 0xe9, 0xfc, 0xb4, 0x48, - 0xea, 0x31, 0xf4, 0x00, 0xaf, 0xb3, 0x83, 0x10, 0x6b, 0x00, 0x81, 0x6a, 0x6f, 0x7f, 0x67, 0xb3, - 0x4c, 0x3d, 0x2f, 0xed, 0x95, 0x7c, 0x71, 0xc0, 0xe6, 0xf1, 0x6c, 0xa5, 0x27, 0xd3, 0x0f, 0x43, - 0xb3, 0x18, 0xa4, 0x4d, 0x21, 0x3e, 0xba, 0xa6, 0x96, 0x2e, 0xcf, 0xbf, 0xaf, 0x45, 0x77, 0xbd, - 0x38, 0xd1, 0xc1, 0xa4, 0x4a, 0x3f, 0xca, 0x93, 0x13, 0x56, 0x89, 0xb8, 0x14, 0x83, 0xef, 0x07, - 0x62, 0x80, 0xd0, 0x31, 0x65, 0xfb, 0xc1, 0x37, 0xd2, 0xb5, 0xbd, 0x3e, 0xa9, 0x57, 0x09, 0x3d, - 0xff, 0xf8, 0xbd, 0x2e, 0x25, 0x70, 0xf6, 0xb9, 0x1d, 0x42, 0x6c, 0xaf, 0x4b, 0xc1, 0x38, 0xbf, - 0x4a, 0x05, 0xdb, 0x67, 0x39, 0x2b, 0xdb, 0xbd, 0xae, 0x54, 0x7d, 0x84, 0xe8, 0x75, 0x02, 0xb5, - 0x33, 0x9d, 0xe7, 0xcd, 0x64, 0x1a, 0x9b, 0x01, 0x23, 0xad, 0x5c, 0xe3, 0x51, 0x3f, 0x98, 0xa8, - 0xa1, 0xd8, 0xaf, 0x8d, 0x04, 0x6b, 0xa8, 0x90, 0x5e, 0x35, 0x34, 0xa8, 0xdd, 0x98, 0x3b, 0xde, - 0x4e, 0xd8, 0x15, 0xbf, 0x84, 0x1b, 0x73, 0xd7, 0x80, 0x02, 0x88, 0x8d, 0x39, 0x0a, 0xda, 0xe4, - 0xc3, 0xf1, 0xf3, 0x22, 0x65, 0xaf, 0x40, 0xf2, 0xe1, 0x2a, 0xd7, 0x62, 0x22, 0xf9, 0x40, 0x30, - 0xed, 0xe1, 0x28, 0xfa, 0x05, 0x29, 0xfc, 0x21, 0x4f, 0xf3, 0xc1, 0x4d, 0x44, 0xa9, 0x16, 0x18, - 0xab, 0xb7, 0x68, 0x00, 0x94, 0xb8, 0xfe, 0xab, 0xce, 0x04, 0xee, 0x11, 0x4a, 0x20, 0x09, 0x58, - 0xef, 0xc2, 0x6c, 0xd6, 0x27, 0x85, 0xf5, 0x6c, 0x39, 0xb9, 0x88, 0xcb, 0x34, 0x9f, 0x0f, 0x30, - 0x5d, 0x47, 0x4e, 0x64, 0x7d, 0x18, 0x07, 0xc2, 0x49, 0x2b, 0x8e, 0x8a, 0xa2, 0xac, 0x27, 0x61, - 0x2c, 0x9c, 0x7c, 0x24, 0x18, 0x4e, 0x2d, 0x14, 0xf7, 0xb6, 0xcb, 0x66, 0x59, 0x9a, 0x07, 0xbd, - 0x69, 0xa4, 0x8f, 0x37, 0x8b, 0x82, 0xe0, 0x3d, 0x60, 0xf1, 0x15, 0x6b, 0x6a, 0x86, 0xb5, 0x8c, - 0x0b, 0x04, 0x83, 0x17, 0x80, 0x76, 0x8b, 0x2d, 0xc5, 0x87, 0xf1, 0x25, 0xab, 0x1b, 0x98, 0xd5, - 0x4b, 0xf8, 0x00, 0xd3, 0xf7, 0x08, 0x62, 0x8b, 0x8d, 0x93, 0xda, 0xd5, 0x32, 0x7a, 0x47, 0xca, - 0x8f, 0xe3, 0x52, 0xa4, 0xb3, 0xb4, 0x88, 0xf3, 0x66, 0xeb, 0x86, 0xcd, 0x22, 0x2d, 0xca, 0xb8, - 0xdc, 0xea, 0x49, 0x6b, 0xb7, 0xff, 0xb2, 0x16, 0xbd, 0x0f, 0xfd, 0x1e, 0xb3, 0x72, 0x91, 0xca, - 0x13, 0x80, 0x4a, 0x4d, 0xf9, 0x83, 0x4f, 0xc2, 0x46, 0x5b, 0x0a, 0xa6, 0x34, 0x9f, 0x5e, 0x5f, - 0xd1, 0xe6, 0x7d, 0x13, 0xbd, 0x2b, 0xfa, 0xa2, 0x4c, 0x5a, 0x27, 0x64, 0x93, 0x66, 0xab, 0x23, - 0x85, 0x44, 0xde, 0xd7, 0x82, 0xc0, 0x08, 0x3f, 0xcd, 0xab, 0xc6, 0x3a, 0x36, 0xc2, 0xad, 0x38, - 0x38, 0xc2, 0x3d, 0xcc, 0x8e, 0xf0, 0xe3, 0xe5, 0x59, 0x96, 0x56, 0x17, 0x69, 0x3e, 0xd7, 0x49, - 0xbe, 0xaf, 0x6b, 0xc5, 0x30, 0xcf, 0xdf, 0xe8, 0xe4, 0x30, 0x27, 0x3a, 0x58, 0x48, 0x27, 0x20, - 0x4c, 0x36, 0x3a, 0x39, 0xbb, 0xf7, 0xb2, 0xd2, 0x7a, 0xd3, 0x0f, 0xf6, 0x5e, 0x8e, 0x6a, 0x2d, - 0x25, 0xf6, 0x5e, 0x6d, 0xca, 0xee, 0xbd, 0xdc, 0x3a, 0x54, 0x3c, 0xbb, 0x62, 0xa7, 0x65, 0x0a, - 0xf6, 0x5e, 0x5e, 0xf9, 0x1a, 0x86, 0xd8, 0x7b, 0x51, 0xac, 0x9d, 0xa8, 0x2c, 0xb1, 0xcf, 0xc4, - 0x44, 0xc4, 0x62, 0x59, 0x81, 0x89, 0xca, 0xb1, 0x61, 0x10, 0x62, 0xa2, 0x22, 0x50, 0xed, 0xed, - 0x77, 0xa3, 0x48, 0x9d, 0x97, 0xc8, 0x33, 0x2d, 0x7f, 0xed, 0xd1, 0x07, 0x29, 0xde, 0x81, 0xd6, - 0xfb, 0x01, 0xc2, 0xa6, 0x57, 0xea, 0xef, 0xf2, 0xa8, 0x6e, 0x80, 0x6a, 0x48, 0x11, 0x91, 0x5e, - 0x01, 0x04, 0x16, 0x74, 0x72, 0xc1, 0x5f, 0xe1, 0x05, 0xad, 0x25, 0xe1, 0x82, 0x6a, 0xc2, 0x1e, - 0x9e, 0xeb, 0x82, 0x62, 0x87, 0xe7, 0x4d, 0x31, 0x42, 0x87, 0xe7, 0x90, 0xb1, 0x31, 0xe3, 0x1a, - 0x7e, 0xc6, 0xf9, 0xe5, 0x22, 0x2e, 0x2f, 0x41, 0xcc, 0x78, 0xca, 0x0d, 0x43, 0xc4, 0x0c, 0xc5, - 0xda, 0x98, 0x71, 0x1d, 0xd6, 0xc9, 0xf9, 0x69, 0x99, 0x81, 0x98, 0xf1, 0x6c, 0x68, 0x84, 0x88, - 0x19, 0x02, 0xb5, 0xb3, 0x93, 0xeb, 0x6d, 0xc2, 0xe0, 0x71, 0x8d, 0xa7, 0x3e, 0x61, 0xd4, 0x71, - 0x0d, 0x82, 0xc1, 0x10, 0xda, 0x2f, 0xe3, 0xe2, 0x02, 0x0f, 0x21, 0x29, 0x0a, 0x87, 0x50, 0x83, - 0xc0, 0xfe, 0x9e, 0xb0, 0xb8, 0x9c, 0x5d, 0xe0, 0xfd, 0xad, 0x64, 0xe1, 0xfe, 0x36, 0x0c, 0xec, - 0x6f, 0x25, 0x78, 0x99, 0x8a, 0x8b, 0x43, 0x26, 0x62, 0xbc, 0xbf, 0x7d, 0x26, 0xdc, 0xdf, 0x2d, - 0xd6, 0x66, 0xff, 0xae, 0xc3, 0xc9, 0xf2, 0xac, 0x9a, 0x95, 0xe9, 0x19, 0x1b, 0x04, 0xac, 0x18, - 0x88, 0xc8, 0xfe, 0x49, 0x58, 0xfb, 0xfc, 0xc9, 0x5a, 0x74, 0xb3, 0xe9, 0x76, 0x5e, 0x55, 0x7a, - 0xed, 0xf3, 0xdd, 0x7f, 0x84, 0xf7, 0x2f, 0x81, 0x13, 0x8f, 0x33, 0x7a, 0xa8, 0x39, 0xb9, 0x01, - 0x5e, 0xa4, 0xd3, 0xbc, 0x32, 0x85, 0xfa, 0xa4, 0x8f, 0x75, 0x47, 0x81, 0xc8, 0x0d, 0x7a, 0x29, - 0xda, 0xb4, 0x4c, 0xf7, 0x4f, 0x23, 0x1b, 0x27, 0x15, 0x48, 0xcb, 0x9a, 0xf6, 0x76, 0x08, 0x22, - 0x2d, 0xc3, 0x49, 0x18, 0x0a, 0xfb, 0x25, 0x5f, 0x16, 0x55, 0x47, 0x28, 0x00, 0x28, 0x1c, 0x0a, - 0x6d, 0x58, 0xfb, 0x7c, 0x1d, 0xfd, 0xba, 0x1b, 0x7e, 0x6e, 0x63, 0x6f, 0xd1, 0x31, 0x85, 0x35, - 0xf1, 0xb0, 0x2f, 0x6e, 0x33, 0x8a, 0xc6, 0xb3, 0xd8, 0x65, 0x22, 0x4e, 0xb3, 0x6a, 0xb0, 0x8e, - 0xdb, 0x68, 0xe4, 0x44, 0x46, 0x81, 0x71, 0x70, 0x7e, 0xdb, 0x5d, 0x16, 0x59, 0x3a, 0x6b, 0x3f, - 0x4c, 0xd2, 0xba, 0x46, 0x1c, 0x9e, 0xdf, 0x5c, 0x0c, 0xce, 0xd7, 0x75, 0xea, 0x27, 0xff, 0x33, - 0x5d, 0x15, 0x0c, 0x9f, 0xaf, 0x3d, 0x24, 0x3c, 0x5f, 0x43, 0x14, 0xd6, 0x67, 0xc2, 0xc4, 0x41, - 0xbc, 0xe2, 0x4b, 0x62, 0xbe, 0x36, 0xe2, 0x70, 0x7d, 0x5c, 0xcc, 0xee, 0x0d, 0x8c, 0x87, 0x71, - 0x2e, 0x58, 0x99, 0xc7, 0xd9, 0x5e, 0x16, 0xcf, 0xab, 0x01, 0x31, 0xc7, 0xf8, 0x14, 0xb1, 0x37, - 0xa0, 0x69, 0xa4, 0x19, 0xc7, 0xd5, 0x5e, 0x7c, 0xc5, 0xcb, 0x54, 0xd0, 0xcd, 0x68, 0x91, 0xce, - 0x66, 0xf4, 0x50, 0xd4, 0xdb, 0xa8, 0x9c, 0x5d, 0xa4, 0x57, 0x2c, 0x09, 0x78, 0x6b, 0x90, 0x1e, - 0xde, 0x1c, 0x14, 0xe9, 0xb4, 0x09, 0x5f, 0x96, 0x33, 0x46, 0x76, 0x9a, 0x12, 0x77, 0x76, 0x9a, - 0xc1, 0xb4, 0x87, 0xbf, 0x58, 0x8b, 0x7e, 0x43, 0x49, 0xdd, 0x27, 0x3c, 0xbb, 0x71, 0x75, 0x71, - 0xc6, 0xe3, 0x32, 0x19, 0x7c, 0x80, 0xd9, 0x41, 0x51, 0xe3, 0xfa, 0xc9, 0x75, 0x54, 0x60, 0xb3, - 0xd6, 0x79, 0xb7, 0x1d, 0x71, 0x68, 0xb3, 0x7a, 0x48, 0xb8, 0x59, 0x21, 0x0a, 0x27, 0x10, 0x29, - 0x57, 0x07, 0x80, 0xeb, 0xa4, 0xbe, 0x7f, 0x0a, 0xb8, 0xd1, 0xc9, 0xc1, 0xf9, 0xb1, 0x16, 0xfa, - 0xd1, 0xb2, 0x45, 0xd9, 0xc0, 0x23, 0x66, 0xd8, 0x17, 0x27, 0x3d, 0x9b, 0x51, 0x11, 0xf6, 0xdc, - 0x1a, 0x19, 0xc3, 0xbe, 0x38, 0xe1, 0xd9, 0x99, 0xd6, 0x42, 0x9e, 0x91, 0xa9, 0x6d, 0xd8, 0x17, - 0x87, 0xd9, 0x97, 0x66, 0x9a, 0x75, 0xe1, 0x61, 0xc0, 0x0e, 0x5c, 0x1b, 0x36, 0x7b, 0xb1, 0xda, - 0xe1, 0x5f, 0xad, 0x45, 0xdf, 0xb5, 0x1e, 0x0f, 0x79, 0x92, 0x9e, 0xaf, 0x14, 0xf4, 0x22, 0xce, - 0x96, 0xac, 0x1a, 0x3c, 0xa1, 0xac, 0xb5, 0x59, 0x53, 0x82, 0xa7, 0xd7, 0xd2, 0x81, 0x63, 0x67, - 0x54, 0x14, 0xd9, 0x6a, 0xca, 0x16, 0x45, 0x46, 0x8e, 0x1d, 0x0f, 0x09, 0x8f, 0x1d, 0x88, 0xc2, - 0xac, 0x7c, 0xca, 0xeb, 0x9c, 0x1f, 0xcd, 0xca, 0xa5, 0x28, 0x9c, 0x95, 0x37, 0x08, 0xcc, 0x95, - 0xa6, 0x7c, 0x87, 0x67, 0x19, 0x9b, 0x89, 0xf6, 0x2d, 0x11, 0xa3, 0x69, 0x89, 0x70, 0xae, 0x04, - 0x48, 0x7b, 0x2a, 0xd7, 0xec, 0x21, 0xe3, 0x92, 0x3d, 0x5b, 0x1d, 0xa4, 0xf9, 0xe5, 0x00, 0x4f, - 0x0b, 0x2c, 0x40, 0x9c, 0xca, 0xa1, 0x20, 0xdc, 0xab, 0x9e, 0xe6, 0x09, 0xc7, 0xf7, 0xaa, 0xb5, - 0x24, 0xbc, 0x57, 0xd5, 0x04, 0x34, 0x79, 0xc2, 0x28, 0x93, 0xb5, 0x24, 0x6c, 0x52, 0x13, 0xd8, - 0x54, 0xa8, 0x9f, 0x14, 0x91, 0x53, 0x21, 0x78, 0x36, 0xb4, 0xd1, 0xc9, 0xc1, 0x3d, 0x97, 0x76, - 0x80, 0x46, 0x04, 0x30, 0x7e, 0x27, 0xc8, 0xc0, 0xd0, 0x6f, 0x76, 0xc3, 0x7b, 0x4c, 0xcc, 0x2e, - 0xf0, 0xd0, 0xf7, 0x90, 0x70, 0xe8, 0x43, 0x14, 0xb6, 0xd5, 0x94, 0x9b, 0xdd, 0xfc, 0x3a, 0x1e, - 0x78, 0xad, 0x9d, 0xfc, 0x46, 0x27, 0x07, 0xdb, 0x6a, 0xbc, 0xa0, 0xdb, 0x4a, 0xc9, 0xc2, 0x6d, - 0x65, 0x18, 0x58, 0x7a, 0x25, 0x90, 0x87, 0x64, 0xeb, 0xb4, 0xa2, 0x77, 0x4c, 0xb6, 0xd1, 0xc9, - 0x69, 0x27, 0xff, 0x64, 0xf6, 0x87, 0x4a, 0x7a, 0xc4, 0xeb, 0xc1, 0xf7, 0x22, 0xce, 0xd2, 0x24, - 0x16, 0x6c, 0xca, 0x2f, 0x59, 0x8e, 0x6f, 0xc5, 0x74, 0x69, 0x15, 0x3f, 0xf4, 0x14, 0xc2, 0x5b, - 0xb1, 0xb0, 0x22, 0x8c, 0x13, 0x45, 0x9f, 0x56, 0x6c, 0x27, 0xae, 0x88, 0x29, 0xd2, 0x43, 0xc2, - 0x71, 0x02, 0x51, 0x98, 0x08, 0x2b, 0xf9, 0xf3, 0xd7, 0x05, 0x2b, 0x53, 0x96, 0xcf, 0x18, 0x9e, - 0x08, 0x43, 0x2a, 0x9c, 0x08, 0x23, 0x34, 0xdc, 0x04, 0xee, 0xc6, 0x82, 0x3d, 0x5b, 0x4d, 0xd3, - 0x05, 0xab, 0x44, 0xbc, 0x28, 0xf0, 0x4d, 0x20, 0x80, 0xc2, 0x9b, 0xc0, 0x36, 0xdc, 0x3a, 0x73, - 0x32, 0x33, 0x6d, 0xfb, 0xd6, 0x1a, 0x24, 0x02, 0xb7, 0xd6, 0x08, 0x14, 0x36, 0xac, 0x05, 0xd0, - 0xa7, 0x0f, 0x2d, 0x2b, 0xc1, 0xa7, 0x0f, 0x34, 0xdd, 0x3a, 0xc9, 0x33, 0xcc, 0xa4, 0x1e, 0x9a, - 0x1d, 0x45, 0x9f, 0xb8, 0x43, 0x74, 0xb3, 0x17, 0x8b, 0x1f, 0x1d, 0x9e, 0xb0, 0x2c, 0x96, 0xeb, - 0x61, 0xe0, 0x7c, 0xae, 0x61, 0xfa, 0x1c, 0x1d, 0x3a, 0xac, 0x76, 0xf8, 0x67, 0x6b, 0xd1, 0x7b, - 0x98, 0xc7, 0x2f, 0x0a, 0xe9, 0xf7, 0x71, 0xb7, 0x2d, 0x45, 0x12, 0xd7, 0xf2, 0xc2, 0x1a, 0xf6, - 0x66, 0x49, 0x23, 0xb2, 0xb7, 0xf6, 0x74, 0x01, 0xfc, 0x6c, 0xd0, 0x94, 0x1f, 0x72, 0xc4, 0xcd, - 0x92, 0x10, 0x6f, 0x37, 0x5a, 0x7e, 0xb9, 0x2a, 0xb0, 0xd1, 0x32, 0x36, 0xb4, 0x98, 0xd8, 0x68, - 0x21, 0x98, 0x1d, 0x9d, 0x6e, 0xf5, 0x5e, 0xa6, 0xe2, 0x42, 0x26, 0x72, 0x60, 0x74, 0x7a, 0x65, - 0x35, 0x10, 0x31, 0x3a, 0x49, 0x18, 0xa6, 0x3a, 0x0d, 0x58, 0x8f, 0x4d, 0x6c, 0x2e, 0x37, 0x86, - 0xdc, 0x91, 0x79, 0xbf, 0x1b, 0x84, 0xf1, 0xda, 0x88, 0xf5, 0x9e, 0xea, 0x61, 0xc8, 0x02, 0xd8, - 0x57, 0x6d, 0xf6, 0x62, 0xb5, 0xc3, 0x3f, 0x89, 0xbe, 0xd3, 0xaa, 0xd8, 0x1e, 0x8b, 0xc5, 0xb2, - 0x64, 0xc9, 0x60, 0xbb, 0xa3, 0xdc, 0x0d, 0x68, 0x5c, 0x3f, 0xee, 0xaf, 0xd0, 0x4a, 0xfe, 0x1b, - 0x4e, 0x85, 0x95, 0x29, 0xc3, 0x93, 0x90, 0x49, 0x9f, 0x0d, 0x26, 0xff, 0xb4, 0x4e, 0x6b, 0xff, - 0xee, 0x46, 0xd7, 0xe8, 0x2a, 0x4e, 0x33, 0xf9, 0x14, 0xf8, 0x83, 0x90, 0x51, 0x0f, 0x0d, 0xee, - 0xdf, 0x49, 0x95, 0xd6, 0xcc, 0x2c, 0xc7, 0xb8, 0xb3, 0xef, 0x7b, 0x44, 0xcf, 0x04, 0xc8, 0xb6, - 0x6f, 0xab, 0x27, 0xad, 0xdd, 0x8a, 0x66, 0xc9, 0xab, 0xff, 0xec, 0x06, 0x39, 0xe6, 0x55, 0xab, - 0x22, 0x91, 0xbe, 0xd5, 0x93, 0xd6, 0x5e, 0xff, 0x38, 0x7a, 0xb7, 0xed, 0x55, 0x2f, 0x44, 0xdb, - 0x9d, 0xa6, 0xc0, 0x5a, 0xf4, 0xb8, 0xbf, 0x82, 0x76, 0xff, 0xaf, 0xe6, 0xc0, 0x5b, 0xf9, 0x9f, - 0xf1, 0xc5, 0x82, 0xe5, 0x09, 0x4b, 0x1a, 0x8d, 0xaa, 0xde, 0x98, 0x7d, 0x4a, 0xdb, 0x35, 0x0a, - 0x43, 0x57, 0xc3, 0x94, 0xe8, 0x37, 0xbf, 0x81, 0xa6, 0x2e, 0xda, 0x7f, 0xae, 0x45, 0x0f, 0xd0, - 0xa2, 0x35, 0x81, 0xeb, 0x15, 0xf1, 0x77, 0xfa, 0x38, 0xc2, 0x34, 0x4d, 0x51, 0x47, 0x3f, 0x83, - 0x05, 0x5d, 0xe4, 0x7f, 0x5b, 0x8b, 0x6e, 0x5b, 0xc5, 0x3a, 0xbc, 0x77, 0x78, 0x7e, 0x9e, 0xa5, - 0x33, 0x21, 0x1f, 0xf5, 0x6a, 0x15, 0xba, 0x39, 0x29, 0x8d, 0xee, 0xe6, 0x0c, 0x68, 0xea, 0xb2, - 0xfd, 0xe3, 0x5a, 0x74, 0xcb, 0x6d, 0x4e, 0xf9, 0x9c, 0x58, 0x1d, 0xbb, 0x36, 0x8a, 0xd5, 0xe0, - 0x63, 0xba, 0x0d, 0x30, 0xde, 0x94, 0xeb, 0x93, 0x6b, 0xeb, 0xd9, 0xbd, 0xfa, 0x67, 0x69, 0x25, - 0x78, 0xb9, 0x9a, 0x5c, 0xf0, 0x57, 0xcd, 0xdb, 0x58, 0xfe, 0x6a, 0xa1, 0x81, 0xa1, 0x43, 0x10, - 0x7b, 0x75, 0x9c, 0x6c, 0xb9, 0xb2, 0x6f, 0x6d, 0x55, 0x84, 0x2b, 0x87, 0xe8, 0x70, 0xe5, 0x93, - 0x76, 0xad, 0x6c, 0x6a, 0x65, 0x5f, 0x31, 0xdb, 0xc0, 0x8b, 0xda, 0x7e, 0xcd, 0xec, 0x7e, 0x37, - 0x68, 0x33, 0x66, 0x2d, 0xde, 0x4d, 0xcf, 0xcf, 0x4d, 0x9d, 0xf0, 0x92, 0xba, 0x08, 0x91, 0x31, - 0x13, 0xa8, 0xdd, 0xf4, 0xed, 0xa5, 0x19, 0x93, 0x8f, 0xaa, 0xbe, 0x38, 0x3f, 0xcf, 0x78, 0x9c, - 0x80, 0x4d, 0x5f, 0x2d, 0x1e, 0xba, 0x72, 0x62, 0xd3, 0x87, 0x71, 0xf6, 0x12, 0x4c, 0x2d, 0xad, - 0xc7, 0x5c, 0x3e, 0x4b, 0x33, 0x78, 0x99, 0x5b, 0x6a, 0x1a, 0x21, 0x71, 0x09, 0xa6, 0x05, 0xd9, - 0xc4, 0xac, 0x16, 0xd5, 0x63, 0xa5, 0x29, 0xff, 0xbd, 0xb6, 0xa2, 0x23, 0x26, 0x12, 0x33, 0x04, - 0xb3, 0x87, 0x2a, 0xb5, 0xf0, 0xb4, 0x90, 0xc6, 0x6f, 0xb5, 0xb5, 0x94, 0x84, 0x38, 0x54, 0xf1, - 0x09, 0xbb, 0x87, 0xaf, 0xff, 0xbe, 0xcb, 0x5f, 0xe5, 0xd2, 0xe8, 0xed, 0xb6, 0x4a, 0x23, 0x23, - 0xf6, 0xf0, 0x90, 0xd1, 0x86, 0x3f, 0x8f, 0x7e, 0x5e, 0x1a, 0x2e, 0x79, 0x31, 0xb8, 0x81, 0x28, - 0x94, 0xce, 0xd5, 0xe7, 0x9b, 0xa4, 0xdc, 0xde, 0x99, 0x31, 0xb1, 0x71, 0x5a, 0xc5, 0x73, 0xf8, - 0xbe, 0x82, 0xed, 0x71, 0x29, 0x25, 0xee, 0xcc, 0xb4, 0x29, 0x3f, 0x2a, 0x8e, 0x78, 0xa2, 0xad, - 0x23, 0x35, 0x34, 0xc2, 0x50, 0x54, 0xb8, 0x90, 0x4d, 0xa6, 0x8f, 0xe2, 0xab, 0x74, 0x6e, 0x12, - 0x1e, 0x35, 0x7d, 0x55, 0x20, 0x99, 0xb6, 0xcc, 0xd0, 0x81, 0x88, 0x64, 0x9a, 0x84, 0x9d, 0xc9, - 0xd8, 0x32, 0xfb, 0xcd, 0x31, 0xf4, 0x38, 0x3f, 0xe7, 0x75, 0xea, 0x7d, 0x90, 0xe6, 0x97, 0x70, - 0x32, 0x76, 0x4c, 0xe2, 0x3c, 0x31, 0x19, 0xf7, 0xd1, 0xb3, 0xbb, 0xa6, 0xe6, 0x8c, 0xd6, 0x5e, - 0xd4, 0x50, 0x1a, 0x60, 0xd7, 0x64, 0x8e, 0x72, 0x21, 0x47, 0xec, 0x9a, 0x42, 0xbc, 0xed, 0x62, - 0xe3, 0x3c, 0xe3, 0x39, 0xec, 0x62, 0x6b, 0xa1, 0x16, 0x12, 0x5d, 0xdc, 0x82, 0xec, 0x7c, 0xdc, - 0x88, 0xd4, 0xa9, 0xdf, 0x28, 0xcb, 0xc0, 0x7c, 0x6c, 0x54, 0x0d, 0x40, 0xcc, 0xc7, 0x28, 0xa8, - 0xfd, 0x9c, 0x44, 0xdf, 0xaa, 0x9b, 0xf4, 0xb8, 0x64, 0x57, 0x29, 0x83, 0x77, 0x8a, 0x1c, 0x09, - 0x31, 0xfe, 0x7d, 0xc2, 0x8e, 0xac, 0xd3, 0xbc, 0x2a, 0xb2, 0xb8, 0xba, 0xd0, 0xb7, 0x4c, 0xfc, - 0x3a, 0x37, 0x42, 0x78, 0xcf, 0xe4, 0x5e, 0x07, 0x65, 0x27, 0xf5, 0x46, 0x66, 0xa6, 0x98, 0x75, - 0x5c, 0xb5, 0x35, 0xcd, 0x6c, 0x74, 0x72, 0xf6, 0x51, 0xce, 0x7e, 0x9c, 0x65, 0xac, 0x5c, 0x35, - 0xb2, 0xc3, 0x38, 0x4f, 0xcf, 0x59, 0x25, 0xc0, 0xa3, 0x1c, 0x4d, 0x0d, 0x21, 0x46, 0x3c, 0xca, - 0x09, 0xe0, 0x76, 0x37, 0x09, 0x3c, 0x8f, 0xf3, 0x84, 0xbd, 0x06, 0xbb, 0x49, 0x68, 0x47, 0x32, - 0xc4, 0x6e, 0x92, 0x62, 0xed, 0x23, 0x8d, 0x67, 0x19, 0x9f, 0x5d, 0xea, 0x25, 0xc0, 0xef, 0x60, - 0x29, 0x81, 0x6b, 0xc0, 0xed, 0x10, 0x62, 0x17, 0x01, 0x29, 0x38, 0x61, 0x45, 0x16, 0xcf, 0xe0, - 0xc5, 0x32, 0xa5, 0xa3, 0x65, 0xc4, 0x22, 0x00, 0x19, 0x50, 0x5c, 0x7d, 0x61, 0x0d, 0x2b, 0x2e, - 0xb8, 0xaf, 0x76, 0x3b, 0x84, 0xd8, 0x65, 0x50, 0x0a, 0x26, 0x45, 0x96, 0x0a, 0x30, 0x0c, 0x94, - 0x86, 0x94, 0x10, 0xc3, 0xc0, 0x27, 0x80, 0xc9, 0x43, 0x56, 0xce, 0x19, 0x6a, 0x52, 0x4a, 0x82, - 0x26, 0x1b, 0xc2, 0xde, 0xa2, 0x57, 0x75, 0xe7, 0xc5, 0x0a, 0xdc, 0xa2, 0xd7, 0xd5, 0xe2, 0xc5, - 0x8a, 0xb8, 0x45, 0xef, 0x01, 0xa0, 0x88, 0xc7, 0x71, 0x25, 0xf0, 0x22, 0x4a, 0x49, 0xb0, 0x88, - 0x0d, 0x61, 0xd7, 0x68, 0x55, 0xc4, 0xa5, 0x00, 0x6b, 0xb4, 0x2e, 0x80, 0x73, 0xb5, 0xe2, 0x26, - 0x29, 0xb7, 0x33, 0x89, 0xea, 0x15, 0x26, 0xf6, 0x52, 0x96, 0x25, 0x15, 0x98, 0x49, 0x74, 0xbb, - 0x37, 0x52, 0x62, 0x26, 0x69, 0x53, 0x20, 0x94, 0xf4, 0x73, 0x19, 0xac, 0x76, 0xe0, 0xb1, 0xcc, - 0xed, 0x10, 0x62, 0xe7, 0xa7, 0xa6, 0xd0, 0x3b, 0x71, 0x59, 0xa6, 0xf5, 0xe2, 0xbf, 0x8e, 0x17, - 0xa8, 0x91, 0x13, 0xf3, 0x13, 0xc6, 0x81, 0xe1, 0xd5, 0x4c, 0xdc, 0x58, 0xc1, 0xe0, 0xd4, 0x7d, - 0x27, 0xc8, 0xd8, 0x8c, 0x53, 0x4a, 0x9c, 0xbb, 0x01, 0x58, 0x6b, 0x22, 0x57, 0x03, 0xd6, 0xbb, - 0x30, 0xe7, 0x85, 0x3e, 0xe3, 0xe2, 0x90, 0x5f, 0xb1, 0x29, 0x7f, 0xfe, 0x3a, 0xad, 0xea, 0x4d, - 0xa0, 0x5e, 0xb9, 0x9f, 0x12, 0x96, 0x30, 0x98, 0x78, 0xa1, 0xaf, 0x53, 0xc9, 0x26, 0x10, 0xa0, - 0x2c, 0x47, 0xec, 0x15, 0x9a, 0x40, 0x40, 0x8b, 0x86, 0x23, 0x12, 0x88, 0x10, 0x6f, 0xcf, 0xf1, - 0x8c, 0x73, 0xfd, 0x15, 0x87, 0x29, 0x6f, 0x72, 0x39, 0xca, 0x1a, 0x04, 0x89, 0xa3, 0x94, 0xa0, - 0x82, 0xdd, 0x5f, 0x1a, 0xff, 0x76, 0x88, 0xdd, 0x27, 0xec, 0xb4, 0x87, 0xd9, 0x83, 0x1e, 0x24, - 0xe2, 0xca, 0x5e, 0x70, 0xa1, 0x5c, 0xb5, 0xef, 0xb7, 0x3c, 0xe8, 0x41, 0x3a, 0x67, 0x82, 0x6e, - 0xb5, 0x9e, 0xc5, 0xb3, 0xcb, 0x79, 0xc9, 0x97, 0x79, 0xb2, 0xc3, 0x33, 0x5e, 0x82, 0x33, 0x41, - 0xaf, 0xd4, 0x00, 0x25, 0xce, 0x04, 0x3b, 0x54, 0x6c, 0x06, 0xe7, 0x96, 0x62, 0x94, 0xa5, 0x73, - 0xb8, 0xa3, 0xf6, 0x0c, 0x49, 0x80, 0xc8, 0xe0, 0x50, 0x10, 0x09, 0x22, 0xb5, 0xe3, 0x16, 0xe9, - 0x2c, 0xce, 0x94, 0xbf, 0x6d, 0xda, 0x8c, 0x07, 0x76, 0x06, 0x11, 0xa2, 0x80, 0xd4, 0x73, 0xba, - 0x2c, 0xf3, 0x71, 0x2e, 0x38, 0x59, 0xcf, 0x06, 0xe8, 0xac, 0xa7, 0x03, 0x82, 0x69, 0x75, 0xca, - 0x5e, 0xd7, 0xa5, 0xa9, 0xff, 0xc1, 0xa6, 0xd5, 0xfa, 0xef, 0x43, 0x2d, 0x0f, 0x4d, 0xab, 0x80, - 0x03, 0x95, 0xd1, 0x4e, 0x54, 0xc0, 0x04, 0xb4, 0xfd, 0x30, 0xb9, 0xdf, 0x0d, 0xe2, 0x7e, 0x26, - 0x62, 0x95, 0xb1, 0x90, 0x1f, 0x09, 0xf4, 0xf1, 0xd3, 0x80, 0xf6, 0xb8, 0xc5, 0xab, 0xcf, 0x05, - 0x9b, 0x5d, 0xb6, 0xee, 0xeb, 0xf9, 0x05, 0x55, 0x08, 0x71, 0xdc, 0x42, 0xa0, 0x78, 0x17, 0x8d, - 0x67, 0x3c, 0x0f, 0x75, 0x51, 0x2d, 0xef, 0xd3, 0x45, 0x9a, 0xb3, 0x9b, 0x5f, 0x23, 0xd5, 0x91, - 0xa9, 0xba, 0x69, 0x93, 0xb0, 0xe0, 0x42, 0xc4, 0xe6, 0x97, 0x84, 0x6d, 0x4e, 0x0e, 0x7d, 0x1e, - 0xb6, 0x5f, 0x66, 0x68, 0x59, 0x39, 0xa4, 0x5f, 0x66, 0xa0, 0x58, 0xba, 0x92, 0x2a, 0x46, 0x3a, - 0xac, 0xf8, 0x71, 0xf2, 0xa8, 0x1f, 0x6c, 0xb7, 0x3c, 0x9e, 0xcf, 0x9d, 0x8c, 0xc5, 0xa5, 0xf2, - 0xba, 0x15, 0x30, 0x64, 0x31, 0x62, 0xcb, 0x13, 0xc0, 0xc1, 0x14, 0xe6, 0x79, 0xde, 0xe1, 0xb9, - 0x60, 0xb9, 0xc0, 0xa6, 0x30, 0xdf, 0x98, 0x06, 0x43, 0x53, 0x18, 0xa5, 0x00, 0xe2, 0x56, 0x9e, - 0x07, 0x31, 0x71, 0x14, 0x2f, 0xd0, 0x8c, 0x4d, 0x9d, 0xf5, 0x28, 0x79, 0x28, 0x6e, 0x01, 0xe7, - 0x3c, 0x64, 0x76, 0xbd, 0x4c, 0xe3, 0x72, 0x6e, 0x4e, 0x37, 0x92, 0xc1, 0x63, 0xda, 0x8e, 0x4f, - 0x12, 0x0f, 0x99, 0xc3, 0x1a, 0x60, 0xda, 0x19, 0x2f, 0xe2, 0xb9, 0xa9, 0x29, 0x52, 0x03, 0x29, - 0x6f, 0x55, 0xf5, 0x7e, 0x37, 0x08, 0xfc, 0xbc, 0x48, 0x13, 0xc6, 0x03, 0x7e, 0xa4, 0xbc, 0x8f, - 0x1f, 0x08, 0x82, 0xec, 0xad, 0xae, 0xb7, 0xda, 0xd1, 0x8d, 0xf2, 0x44, 0xef, 0x63, 0x87, 0x44, - 0xf3, 0x00, 0x2e, 0x94, 0xbd, 0x11, 0x3c, 0x18, 0xa3, 0xcd, 0x01, 0x6d, 0x68, 0x8c, 0x9a, 0xf3, - 0xd7, 0x3e, 0x63, 0x14, 0x83, 0xb5, 0xcf, 0x1f, 0xeb, 0x31, 0xba, 0x1b, 0x8b, 0xb8, 0xce, 0xdb, - 0x5f, 0xa4, 0xec, 0x95, 0xde, 0x08, 0x23, 0xf5, 0x6d, 0xa8, 0xa1, 0x7c, 0x17, 0x1b, 0xec, 0x8a, - 0xb7, 0x7b, 0xf3, 0x01, 0xdf, 0x7a, 0x87, 0xd0, 0xe9, 0x1b, 0x6c, 0x15, 0xb6, 0x7b, 0xf3, 0x01, - 0xdf, 0xfa, 0x93, 0x12, 0x9d, 0xbe, 0xc1, 0x77, 0x25, 0xb6, 0x7b, 0xf3, 0xda, 0xf7, 0x9f, 0x37, - 0x03, 0xd7, 0x75, 0x5e, 0xe7, 0x61, 0x33, 0x91, 0x5e, 0x31, 0x2c, 0x9d, 0xf4, 0xed, 0x19, 0x34, - 0x94, 0x4e, 0xd2, 0x2a, 0xce, 0x47, 0xdd, 0xb0, 0x52, 0x1c, 0xf3, 0x2a, 0x95, 0x97, 0x44, 0x9e, - 0xf6, 0x30, 0xda, 0xc0, 0xa1, 0x4d, 0x53, 0x48, 0xc9, 0x3e, 0xee, 0xf6, 0x50, 0x7b, 0x3d, 0xff, - 0x51, 0xc0, 0x5e, 0xfb, 0x96, 0xfe, 0x56, 0x4f, 0xda, 0x3e, 0x78, 0xf6, 0x98, 0xe6, 0x91, 0xe1, - 0x84, 0xa1, 0xab, 0x84, 0x31, 0x65, 0x1e, 0x25, 0xbb, 0xcf, 0x4e, 0x1f, 0xf7, 0x57, 0xe8, 0x70, - 0x3f, 0x4a, 0x92, 0x7e, 0xee, 0xdd, 0x67, 0xee, 0x8f, 0xfb, 0x2b, 0x68, 0xf7, 0x7f, 0xd9, 0x6c, - 0x6b, 0xa0, 0x7f, 0x3d, 0x06, 0x9f, 0xf4, 0xb1, 0x08, 0xc6, 0xe1, 0xd3, 0x6b, 0xe9, 0xe8, 0x82, - 0xfc, 0x6d, 0xb3, 0x7f, 0x6f, 0x50, 0xf9, 0x8e, 0x94, 0x7c, 0xb7, 0x5a, 0x0f, 0xc9, 0x50, 0x54, - 0x59, 0x18, 0x0e, 0xcc, 0x8f, 0xae, 0xa9, 0xe5, 0x7c, 0x61, 0xd0, 0x83, 0xf5, 0xbb, 0xbc, 0x4e, - 0x79, 0x42, 0x96, 0x1d, 0x1a, 0x16, 0xe8, 0xe3, 0xeb, 0xaa, 0x51, 0x43, 0xd5, 0x81, 0xe5, 0x37, - 0x76, 0x9e, 0xf6, 0x34, 0xec, 0x7d, 0x75, 0xe7, 0xc3, 0xeb, 0x29, 0xe9, 0xb2, 0xfc, 0xc7, 0x5a, - 0x74, 0xcf, 0x63, 0xed, 0xe3, 0x0c, 0x70, 0xe8, 0xf2, 0x83, 0x80, 0x7d, 0x4a, 0xc9, 0x14, 0xee, - 0xb7, 0xbe, 0x99, 0xb2, 0xfd, 0x1c, 0x9f, 0xa7, 0xb2, 0x97, 0x66, 0x82, 0x95, 0xed, 0xcf, 0xf1, - 0xf9, 0x76, 0x15, 0x35, 0xa4, 0x3f, 0xc7, 0x17, 0xc0, 0x9d, 0xcf, 0xf1, 0x21, 0x9e, 0xd1, 0xcf, - 0xf1, 0xa1, 0xd6, 0x82, 0x9f, 0xe3, 0x0b, 0x6b, 0x50, 0xab, 0x4b, 0x53, 0x04, 0x75, 0x6c, 0xde, - 0xcb, 0xa2, 0x7f, 0x8a, 0xfe, 0xe4, 0x3a, 0x2a, 0xc4, 0xfa, 0xaa, 0x38, 0x79, 0xcd, 0xb3, 0x47, - 0x9b, 0x7a, 0x57, 0x3d, 0xb7, 0x7b, 0xf3, 0xda, 0xf7, 0x8f, 0xf4, 0xe6, 0xca, 0xac, 0x26, 0xbc, - 0x94, 0x9f, 0x62, 0xdc, 0x0c, 0xad, 0x0e, 0xb5, 0x05, 0xb7, 0xe7, 0x1f, 0xf5, 0x83, 0x89, 0xea, - 0xd6, 0x84, 0xee, 0xf4, 0x61, 0x97, 0x21, 0xd0, 0xe5, 0xdb, 0xbd, 0x79, 0x62, 0x19, 0x51, 0xbe, - 0x55, 0x6f, 0xf7, 0x30, 0xe6, 0xf7, 0xf5, 0xe3, 0xfe, 0x0a, 0xda, 0xfd, 0x95, 0xce, 0x5a, 0x5d, - 0xf7, 0xb2, 0x9f, 0xb7, 0xba, 0x4c, 0x4d, 0xbc, 0x6e, 0x1e, 0xf6, 0xc5, 0x43, 0xf9, 0x8b, 0xbb, - 0x84, 0x76, 0xe5, 0x2f, 0xe8, 0x32, 0xfa, 0xe1, 0xf5, 0x94, 0x74, 0x59, 0xfe, 0x61, 0x2d, 0xba, - 0x49, 0x96, 0x45, 0xc7, 0xc1, 0xc7, 0x7d, 0x2d, 0x83, 0x78, 0xf8, 0xe4, 0xda, 0x7a, 0xba, 0x50, - 0xff, 0xbc, 0x16, 0xdd, 0x0a, 0x14, 0x4a, 0x05, 0xc8, 0x35, 0xac, 0xfb, 0x81, 0xf2, 0xe9, 0xf5, - 0x15, 0xa9, 0xe5, 0xde, 0xc5, 0x27, 0xed, 0x4f, 0xab, 0x05, 0x6c, 0x4f, 0xe8, 0x4f, 0xab, 0x75, - 0x6b, 0xc1, 0x33, 0xa6, 0xf8, 0xac, 0xd9, 0xf3, 0xa1, 0x67, 0x4c, 0xf2, 0x82, 0x66, 0xf0, 0xa3, - 0x2d, 0x18, 0x87, 0x39, 0x79, 0xfe, 0xba, 0x88, 0xf3, 0x84, 0x76, 0xa2, 0xe4, 0xdd, 0x4e, 0x0c, - 0x07, 0xcf, 0xe6, 0x6a, 0xe9, 0x09, 0x6f, 0xf6, 0x71, 0x0f, 0x28, 0x7d, 0x83, 0x04, 0xcf, 0xe6, - 0x5a, 0x28, 0xe1, 0x4d, 0x67, 0x8d, 0x21, 0x6f, 0x20, 0x59, 0x7c, 0xd8, 0x07, 0x05, 0x3b, 0x04, - 0xe3, 0xcd, 0x1c, 0xf9, 0x3f, 0x0a, 0x59, 0x69, 0x1d, 0xfb, 0x6f, 0xf5, 0xa4, 0x09, 0xb7, 0x13, - 0x26, 0x3e, 0x63, 0x71, 0xc2, 0xca, 0xa0, 0x5b, 0x43, 0xf5, 0x72, 0xeb, 0xd2, 0x98, 0xdb, 0x1d, - 0x9e, 0x2d, 0x17, 0xb9, 0xee, 0x4c, 0xd2, 0xad, 0x4b, 0x75, 0xbb, 0x05, 0x34, 0x3c, 0x95, 0xb4, - 0x6e, 0x65, 0x7a, 0xf9, 0x30, 0x6c, 0xc6, 0xcb, 0x2a, 0x37, 0x7b, 0xb1, 0x74, 0x3d, 0x75, 0x18, - 0x75, 0xd4, 0x13, 0x44, 0xd2, 0x56, 0x4f, 0x1a, 0x1e, 0x0f, 0x3a, 0x6e, 0x4d, 0x3c, 0x6d, 0x77, - 0xd8, 0x6a, 0x85, 0xd4, 0xe3, 0xfe, 0x0a, 0xf0, 0x30, 0x56, 0x47, 0xd5, 0x41, 0x5a, 0x89, 0xbd, - 0x34, 0xcb, 0x06, 0x9b, 0x81, 0x30, 0x69, 0xa0, 0xe0, 0x61, 0x2c, 0x02, 0x13, 0x91, 0xdc, 0x1c, - 0x5e, 0xe6, 0x83, 0x2e, 0x3b, 0x92, 0xea, 0x15, 0xc9, 0x2e, 0x0d, 0x0e, 0xd4, 0x9c, 0xa6, 0x36, - 0xb5, 0x1d, 0x86, 0x1b, 0xae, 0x55, 0xe1, 0xed, 0xde, 0x3c, 0x78, 0xda, 0x2f, 0x29, 0xb9, 0xb2, - 0xdc, 0xa5, 0x4c, 0x78, 0x2b, 0xc9, 0xbd, 0x0e, 0x0a, 0x1c, 0x4a, 0xaa, 0x61, 0xf4, 0x32, 0x4d, - 0xe6, 0x4c, 0xa0, 0x0f, 0xaa, 0x5c, 0x20, 0xf8, 0xa0, 0x0a, 0x80, 0xa0, 0xeb, 0xd4, 0xdf, 0xcd, - 0x69, 0xec, 0x38, 0xc1, 0xba, 0x4e, 0x2b, 0x3b, 0x54, 0xa8, 0xeb, 0x50, 0x1a, 0xcc, 0x06, 0xc6, - 0xad, 0xfe, 0xcc, 0xc5, 0xc3, 0x90, 0x19, 0xf0, 0xad, 0x8b, 0xcd, 0x5e, 0x2c, 0x58, 0x51, 0xac, - 0xc3, 0x74, 0x91, 0x0a, 0x6c, 0x45, 0x71, 0x6c, 0xd4, 0x48, 0x68, 0x45, 0x69, 0xa3, 0x54, 0xf5, - 0xea, 0x1c, 0x61, 0x9c, 0x84, 0xab, 0xa7, 0x98, 0x7e, 0xd5, 0x33, 0x6c, 0xeb, 0xb9, 0x6a, 0x6e, - 0x42, 0x46, 0x5c, 0xe8, 0xcd, 0x32, 0x12, 0xdb, 0xf2, 0xf5, 0x67, 0x08, 0x86, 0x66, 0x1d, 0x4a, - 0x01, 0x3e, 0x2f, 0xa8, 0xb9, 0xe6, 0xd1, 0x6f, 0x51, 0xb0, 0xb8, 0x8c, 0xf3, 0x19, 0xba, 0x39, - 0x95, 0x06, 0x5b, 0x64, 0x68, 0x73, 0x4a, 0x6a, 0x80, 0xa7, 0xf6, 0xfe, 0xfb, 0xc5, 0xc8, 0x50, - 0x30, 0x2f, 0xf2, 0xfa, 0xaf, 0x17, 0x3f, 0xe8, 0x41, 0xc2, 0xa7, 0xf6, 0x0d, 0x60, 0xce, 0xdd, - 0x95, 0xd3, 0x0f, 0x02, 0xa6, 0x7c, 0x34, 0xb4, 0x11, 0xa6, 0x55, 0x40, 0x50, 0x3b, 0x67, 0x8b, - 0x9f, 0xb3, 0x15, 0x16, 0xd4, 0xee, 0x21, 0xe1, 0xe7, 0x6c, 0x15, 0x0a, 0xea, 0x36, 0x0a, 0xf2, - 0x4c, 0x77, 0x1f, 0xb4, 0x1e, 0xd0, 0x77, 0xb7, 0x3e, 0x1b, 0x9d, 0x1c, 0x18, 0x39, 0xbb, 0xe9, - 0x95, 0xf7, 0x98, 0x02, 0x29, 0xe8, 0x6e, 0x7a, 0x85, 0x3f, 0xa5, 0xd8, 0xec, 0xc5, 0xc2, 0x1b, - 0x01, 0xb1, 0x60, 0xaf, 0x9b, 0x47, 0xf5, 0x48, 0x71, 0xa5, 0xbc, 0xf5, 0xac, 0xfe, 0x7e, 0x37, - 0x68, 0xef, 0xdf, 0x1e, 0x97, 0x7c, 0xc6, 0xaa, 0x4a, 0x7f, 0x01, 0xd6, 0xbf, 0xe0, 0xa4, 0x65, - 0x43, 0xf0, 0xfd, 0xd7, 0xbb, 0x61, 0xc8, 0xf9, 0x6c, 0xa3, 0x12, 0xd9, 0xaf, 0x49, 0xad, 0xa3, - 0x9a, 0xed, 0x0f, 0x49, 0x6d, 0x74, 0x72, 0x76, 0x78, 0x69, 0xa9, 0xfb, 0xf9, 0xa8, 0xfb, 0xa8, - 0x3a, 0xf6, 0xe5, 0xa8, 0x07, 0x3d, 0x48, 0xed, 0xea, 0xb3, 0xe8, 0xcd, 0x03, 0x3e, 0x9f, 0xb0, - 0x3c, 0x19, 0x7c, 0xcf, 0xbf, 0xc1, 0xcb, 0xe7, 0xc3, 0xfa, 0xcf, 0xc6, 0xe8, 0x0d, 0x4a, 0x6c, - 0xef, 0x20, 0xee, 0xb2, 0xb3, 0xe5, 0x7c, 0x22, 0x62, 0x01, 0xee, 0x20, 0xca, 0xbf, 0x0f, 0x6b, - 0x01, 0x71, 0x07, 0xd1, 0x03, 0x80, 0xbd, 0x69, 0xc9, 0x18, 0x6a, 0xaf, 0x16, 0x04, 0xed, 0x69, - 0xc0, 0x66, 0x11, 0xc6, 0x5e, 0x9d, 0xa8, 0xc3, 0x3b, 0x83, 0x56, 0x47, 0x4a, 0x89, 0x2c, 0xa2, - 0x4d, 0xd9, 0xe0, 0x56, 0xd5, 0x97, 0x5f, 0xf3, 0x59, 0x2e, 0x16, 0x71, 0xb9, 0x02, 0xc1, 0xad, - 0x6b, 0xe9, 0x00, 0x44, 0x70, 0xa3, 0xa0, 0x1d, 0xb5, 0x4d, 0x33, 0xcf, 0x2e, 0xf7, 0x79, 0xc9, - 0x97, 0x22, 0xcd, 0x19, 0xfc, 0xa2, 0x8b, 0x69, 0x50, 0x97, 0x21, 0x46, 0x2d, 0xc5, 0xda, 0x2c, - 0x57, 0x12, 0xea, 0x3a, 0xa3, 0xfc, 0x04, 0x7e, 0x25, 0x78, 0x09, 0x1f, 0x67, 0x2a, 0x2b, 0x10, - 0x22, 0xb2, 0x5c, 0x12, 0x06, 0x7d, 0x7f, 0x9c, 0xe6, 0x73, 0xb4, 0xef, 0x8f, 0xdd, 0xaf, 0x2a, - 0xdf, 0xa2, 0x01, 0x3b, 0xa0, 0x54, 0xa3, 0xa9, 0x01, 0xa0, 0x5f, 0x65, 0x46, 0x1b, 0xdd, 0x25, - 0x88, 0x01, 0x85, 0x93, 0xc0, 0xd5, 0x17, 0x05, 0xcb, 0x59, 0xd2, 0x5c, 0xda, 0xc3, 0x5c, 0x79, - 0x44, 0xd0, 0x15, 0x24, 0xed, 0x5c, 0x24, 0xe5, 0x27, 0xcb, 0xfc, 0xb8, 0xe4, 0xe7, 0x69, 0xc6, - 0x4a, 0x30, 0x17, 0x29, 0x75, 0x47, 0x4e, 0xcc, 0x45, 0x18, 0x67, 0x6f, 0x7f, 0x48, 0xa9, 0xf7, - 0x3b, 0x0e, 0xd3, 0x32, 0x9e, 0xc1, 0xdb, 0x1f, 0xca, 0x46, 0x1b, 0x23, 0x4e, 0x06, 0x03, 0xb8, - 0x93, 0xe8, 0x28, 0xd7, 0xf9, 0x4a, 0xc6, 0x87, 0x7e, 0x95, 0x56, 0x7e, 0x6b, 0xb8, 0x02, 0x89, - 0x8e, 0x36, 0x87, 0x91, 0x44, 0xa2, 0x13, 0xd6, 0xb0, 0x4b, 0x89, 0xe4, 0x8e, 0xf4, 0xad, 0x26, - 0xb0, 0x94, 0x28, 0x1b, 0x8d, 0x90, 0x58, 0x4a, 0x5a, 0x10, 0x98, 0x90, 0x9a, 0x61, 0x30, 0x47, - 0x27, 0x24, 0x23, 0x0d, 0x4e, 0x48, 0x2e, 0x65, 0x27, 0x8a, 0x71, 0x9e, 0x8a, 0x34, 0xce, 0x26, - 0x4c, 0x1c, 0xc7, 0x65, 0xbc, 0x60, 0x82, 0x95, 0x70, 0xa2, 0xd0, 0xc8, 0xd0, 0x63, 0x88, 0x89, - 0x82, 0x62, 0xb5, 0xc3, 0xdf, 0x8e, 0xde, 0xae, 0xd7, 0x7d, 0x96, 0xeb, 0x5f, 0xa0, 0x7a, 0x2e, - 0x7f, 0xba, 0x6e, 0xf0, 0x8e, 0xb1, 0x31, 0x11, 0x25, 0x8b, 0x17, 0x8d, 0xed, 0xb7, 0xcc, 0xdf, - 0x25, 0xf8, 0x78, 0xad, 0x8e, 0xe7, 0x23, 0x2e, 0xd2, 0xf3, 0x7a, 0x9b, 0xad, 0x5f, 0x60, 0x02, - 0xf1, 0xec, 0x8a, 0x87, 0x81, 0x4f, 0xb1, 0x60, 0x9c, 0x9d, 0xa7, 0x5d, 0xe9, 0x09, 0x2b, 0x32, - 0x38, 0x4f, 0x7b, 0xda, 0x12, 0x20, 0xe6, 0x69, 0x14, 0xb4, 0x83, 0xd3, 0x15, 0x4f, 0x59, 0xb8, - 0x32, 0x53, 0xd6, 0xaf, 0x32, 0x53, 0xef, 0x9d, 0x90, 0x2c, 0x7a, 0xfb, 0x90, 0x2d, 0xce, 0x58, - 0x59, 0x5d, 0xa4, 0x05, 0xf5, 0x3d, 0x64, 0x4b, 0x74, 0x7e, 0x0f, 0x99, 0x40, 0xed, 0x4a, 0x60, - 0x81, 0x71, 0x75, 0x14, 0x2f, 0x98, 0xfc, 0xb0, 0x0c, 0x58, 0x09, 0x1c, 0x23, 0x0e, 0x44, 0xac, - 0x04, 0x24, 0xec, 0xbc, 0x5e, 0x66, 0x99, 0x13, 0x36, 0xaf, 0x23, 0xac, 0x3c, 0x8e, 0x57, 0x0b, - 0x96, 0x0b, 0x6d, 0x12, 0x9c, 0xc9, 0x3b, 0x26, 0x71, 0x9e, 0x38, 0x93, 0xef, 0xa3, 0xe7, 0x4c, - 0x4d, 0x5e, 0xc3, 0x1f, 0xf3, 0x52, 0xa8, 0xdf, 0x97, 0x3b, 0x2d, 0x33, 0x30, 0x35, 0xf9, 0x8d, - 0xea, 0x91, 0xc4, 0xd4, 0x14, 0xd6, 0x70, 0x7e, 0x4b, 0xc4, 0x2b, 0xc3, 0x0b, 0x56, 0x9a, 0x38, - 0x79, 0xbe, 0x88, 0xd3, 0x4c, 0x47, 0xc3, 0xf7, 0x03, 0xb6, 0x09, 0x1d, 0xe2, 0xb7, 0x44, 0xfa, - 0xea, 0x3a, 0xbf, 0xbe, 0x12, 0x2e, 0x21, 0x78, 0x44, 0xd0, 0x61, 0x9f, 0x78, 0x44, 0xd0, 0xad, - 0x65, 0x77, 0xee, 0x96, 0x95, 0xdc, 0x4a, 0x12, 0x3b, 0x3c, 0x81, 0xe7, 0x85, 0x8e, 0x4d, 0x00, - 0x12, 0x3b, 0xf7, 0xa0, 0x82, 0x4d, 0x0d, 0x2c, 0xb6, 0x97, 0xe6, 0x71, 0x96, 0xfe, 0x18, 0xa6, - 0xf5, 0x8e, 0x9d, 0x86, 0x20, 0x52, 0x03, 0x9c, 0xc4, 0x5c, 0xed, 0x33, 0x31, 0x4d, 0xeb, 0xa9, - 0xff, 0x7e, 0xa0, 0xdd, 0x24, 0xd1, 0xed, 0xca, 0x21, 0x9d, 0x6f, 0x1f, 0xc3, 0x66, 0x1d, 0x15, - 0xc5, 0xa4, 0x5e, 0x55, 0x4f, 0xd8, 0x8c, 0xa5, 0x85, 0x18, 0x7c, 0x14, 0x6e, 0x2b, 0x80, 0x13, - 0x17, 0x2d, 0x7a, 0xa8, 0x39, 0x8f, 0xef, 0xeb, 0xb9, 0x64, 0xa2, 0x7e, 0x78, 0xf5, 0xb4, 0x62, - 0xa5, 0x4e, 0x34, 0xf6, 0x99, 0x00, 0xa3, 0xd3, 0xe1, 0x86, 0x0e, 0x58, 0x57, 0x94, 0x18, 0x9d, - 0x61, 0x0d, 0x7b, 0xd8, 0xe7, 0x70, 0xfa, 0xdb, 0x01, 0xf2, 0xba, 0xe3, 0x23, 0xd2, 0x98, 0x43, - 0x11, 0x87, 0x7d, 0x34, 0x6d, 0xb3, 0xb5, 0xb6, 0xdb, 0x51, 0xbe, 0x1a, 0xc3, 0x2b, 0x13, 0x88, - 0x25, 0x89, 0x11, 0xd9, 0x5a, 0x00, 0x77, 0x0e, 0xc3, 0x4b, 0x1e, 0x27, 0xb3, 0xb8, 0x12, 0xc7, - 0xf1, 0x2a, 0xe3, 0x71, 0x22, 0xd7, 0x75, 0x78, 0x18, 0xde, 0x30, 0x43, 0x17, 0xa2, 0x0e, 0xc3, - 0x29, 0xd8, 0xcd, 0xce, 0xe4, 0xef, 0xc9, 0xea, 0xab, 0xa4, 0x30, 0x3b, 0x93, 0xe5, 0x85, 0xd7, - 0x48, 0xef, 0x86, 0x21, 0xfb, 0x0a, 0x9c, 0x12, 0xc9, 0x34, 0xe4, 0x16, 0xa6, 0xe3, 0x25, 0x20, - 0xef, 0x07, 0x08, 0xfb, 0x59, 0x16, 0xf5, 0xf7, 0xe6, 0x27, 0xc4, 0x84, 0xfe, 0x42, 0xfc, 0x23, - 0x4c, 0xd7, 0x85, 0xbc, 0x1b, 0x6a, 0x5b, 0x3d, 0x69, 0x9b, 0x66, 0xee, 0x5c, 0xc4, 0x62, 0x94, - 0x24, 0x87, 0xac, 0x42, 0xde, 0x67, 0xaf, 0x85, 0x43, 0x2b, 0x25, 0xd2, 0xcc, 0x36, 0x65, 0x03, - 0xbd, 0x96, 0x3d, 0x4f, 0x52, 0xa1, 0x65, 0xcd, 0x05, 0xed, 0x47, 0x6d, 0x03, 0x6d, 0x8a, 0xa8, - 0x15, 0x4d, 0xdb, 0xb9, 0xbc, 0x66, 0xa6, 0x7c, 0x3e, 0xcf, 0x98, 0x86, 0x4e, 0x58, 0xac, 0x3e, - 0x90, 0xb9, 0xdd, 0xb6, 0x85, 0x82, 0xc4, 0x5c, 0x1e, 0x54, 0xb0, 0x69, 0x64, 0x8d, 0xa9, 0x47, - 0x52, 0x4d, 0xc3, 0x6e, 0xb4, 0xcd, 0x78, 0x00, 0x91, 0x46, 0xa2, 0xa0, 0x7d, 0xed, 0xae, 0x16, - 0xef, 0xb3, 0xa6, 0x25, 0xe0, 0x17, 0xb8, 0xa4, 0xb2, 0x23, 0x26, 0x5e, 0xbb, 0x43, 0x30, 0xbb, - 0x4f, 0x00, 0x1e, 0x9e, 0xad, 0xc6, 0x09, 0xdc, 0x27, 0x40, 0x7d, 0xc9, 0x10, 0xfb, 0x04, 0x8a, - 0xf5, 0xbb, 0xce, 0x9c, 0x7b, 0x1d, 0xc4, 0x95, 0xad, 0x1c, 0xd2, 0x75, 0x28, 0x18, 0xea, 0x3a, - 0x4a, 0xc1, 0x6f, 0x52, 0xf7, 0x68, 0x0d, 0x69, 0x52, 0xec, 0x5c, 0x6d, 0xbd, 0x0b, 0xb3, 0xb9, - 0x7f, 0x2d, 0x3c, 0x61, 0x71, 0x62, 0x2a, 0x86, 0xe8, 0xba, 0x72, 0x22, 0xf7, 0xc7, 0x38, 0xed, - 0xe4, 0xf7, 0xa2, 0x81, 0xaa, 0x46, 0xe9, 0xba, 0xb9, 0x85, 0x15, 0xb1, 0x26, 0x88, 0x89, 0xca, - 0x27, 0x9c, 0xc4, 0xcd, 0xeb, 0xa2, 0x29, 0xd7, 0x0e, 0xf4, 0x6b, 0xa1, 0x15, 0x48, 0xdc, 0xfc, - 0x66, 0x6f, 0xd1, 0x44, 0xe2, 0xd6, 0xad, 0xe5, 0x7c, 0x8c, 0x08, 0x74, 0xd9, 0x5e, 0xc9, 0x17, - 0xb0, 0x4c, 0x9f, 0x06, 0xbb, 0x07, 0xd1, 0x20, 0x3e, 0x46, 0xd4, 0x4f, 0xd3, 0xae, 0x41, 0xe6, - 0xec, 0x40, 0x5e, 0x4f, 0xc3, 0x7f, 0x05, 0x45, 0x09, 0x89, 0x35, 0xa8, 0x05, 0x39, 0x3f, 0x9d, - 0x3a, 0x7e, 0x59, 0xa6, 0x22, 0xcd, 0xe7, 0x53, 0xce, 0x33, 0x78, 0x64, 0x39, 0x1a, 0x0f, 0x5d, - 0x29, 0xf5, 0xd3, 0xa9, 0x2d, 0xca, 0x2e, 0x71, 0xa3, 0xf1, 0x68, 0x29, 0xf8, 0x79, 0x9a, 0x65, - 0x20, 0x72, 0x46, 0xe3, 0x61, 0x23, 0x21, 0x22, 0xc7, 0x27, 0x9c, 0x1f, 0xfc, 0x1c, 0xcb, 0xd3, - 0x7f, 0x7d, 0x02, 0x7a, 0x07, 0xea, 0x38, 0x42, 0xea, 0x07, 0x3f, 0x21, 0xe4, 0xfc, 0x80, 0xe9, - 0x18, 0xfb, 0x29, 0x97, 0x4d, 0xa8, 0x8e, 0x40, 0xd4, 0x0f, 0x98, 0x52, 0xb0, 0xf3, 0x4e, 0xf2, - 0xf1, 0xb2, 0xba, 0xf0, 0x8f, 0x0c, 0xd4, 0xe6, 0x50, 0x7d, 0xb6, 0xf5, 0x29, 0xf8, 0x41, 0x21, - 0x9f, 0x1d, 0x7a, 0x30, 0x71, 0x3d, 0xad, 0x53, 0x49, 0x15, 0xe6, 0xd9, 0xfb, 0xff, 0xf5, 0xd5, - 0x8d, 0xb5, 0x9f, 0x7e, 0x75, 0x63, 0xed, 0x7f, 0xbe, 0xba, 0xb1, 0xf6, 0x93, 0xaf, 0x6f, 0xbc, - 0xf1, 0xd3, 0xaf, 0x6f, 0xbc, 0xf1, 0xdf, 0x5f, 0xdf, 0x78, 0xe3, 0xcb, 0x37, 0x2b, 0x95, 0x9b, - 0x9d, 0xfd, 0x5c, 0x51, 0x72, 0xc1, 0x9f, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc7, 0xe9, - 0x8b, 0xe6, 0x86, 0x80, 0x00, 0x00, + 0x52, 0xc0, 0xd7, 0x3c, 0xb0, 0x50, 0xc7, 0x2d, 0xd0, 0x0b, 0xcb, 0xde, 0x72, 0x37, 0x33, 0x3b, + 0x1f, 0xf6, 0xcc, 0x78, 0xdc, 0x9e, 0x9d, 0xd9, 0x2f, 0xee, 0x90, 0xa0, 0xc7, 0x1e, 0x7b, 0xfb, + 0xd6, 0xf6, 0x1a, 0x77, 0x7b, 0x46, 0xac, 0x84, 0x44, 0xb9, 0x2b, 0xdd, 0x2e, 0x5c, 0x5d, 0x59, + 0x57, 0x95, 0xed, 0x99, 0x3e, 0x04, 0x3a, 0x04, 0x02, 0x81, 0x40, 0x9c, 0xf8, 0x12, 0x3c, 0x21, + 0xf1, 0x17, 0xf0, 0x67, 0xf0, 0x78, 0x8f, 0x3c, 0xa2, 0xdd, 0x7f, 0x04, 0x55, 0x66, 0x56, 0x7e, + 0x44, 0x45, 0x64, 0x95, 0xf7, 0x9e, 0x66, 0xe4, 0xf8, 0x45, 0x44, 0x7e, 0x44, 0x66, 0x46, 0x66, + 0x65, 0x55, 0x47, 0x37, 0x8b, 0xb3, 0xed, 0xa2, 0xe4, 0x82, 0x57, 0xdb, 0x15, 0x2b, 0xaf, 0xd2, + 0x19, 0x6b, 0xfe, 0x1d, 0xca, 0x3f, 0x0f, 0xde, 0x8c, 0xf3, 0x95, 0x58, 0x15, 0xec, 0xbd, 0x77, + 0x2d, 0x39, 0xe3, 0x8b, 0x45, 0x9c, 0x27, 0x95, 0x42, 0xde, 0x7b, 0xc7, 0x4a, 0xd8, 0x15, 0xcb, + 0x85, 0xfe, 0xfb, 0x93, 0xaf, 0x7f, 0xf2, 0x0b, 0xd1, 0x5b, 0x3b, 0x59, 0xca, 0x72, 0xb1, 0xa3, + 0x35, 0x06, 0x5f, 0x46, 0xdf, 0x1e, 0x15, 0xc5, 0x3e, 0x13, 0x2f, 0x58, 0x59, 0xa5, 0x3c, 0x1f, + 0xdc, 0x19, 0x6a, 0x07, 0xc3, 0x93, 0x62, 0x36, 0x1c, 0x15, 0xc5, 0xd0, 0x0a, 0x87, 0x27, 0xec, + 0x47, 0x4b, 0x56, 0x89, 0xf7, 0xee, 0x86, 0xa1, 0xaa, 0xe0, 0x79, 0xc5, 0x06, 0xe7, 0xd1, 0xaf, + 0x8f, 0x8a, 0x62, 0xc2, 0xc4, 0x2e, 0xab, 0x2b, 0x30, 0x11, 0xb1, 0x60, 0x83, 0x8d, 0x96, 0xaa, + 0x0f, 0x18, 0x1f, 0xf7, 0xbb, 0x41, 0xed, 0x67, 0x1a, 0x7d, 0xab, 0xf6, 0x73, 0xb1, 0x14, 0x09, + 0x7f, 0x95, 0x0f, 0xde, 0x6f, 0x2b, 0x6a, 0x91, 0xb1, 0x7d, 0x3b, 0x84, 0x68, 0xab, 0x2f, 0xa3, + 0x5f, 0x79, 0x19, 0x67, 0x19, 0x13, 0x3b, 0x25, 0xab, 0x0b, 0xee, 0xeb, 0x28, 0xd1, 0x50, 0xc9, + 0x8c, 0xdd, 0x3b, 0x41, 0x46, 0x1b, 0xfe, 0x32, 0xfa, 0xb6, 0x92, 0x9c, 0xb0, 0x19, 0xbf, 0x62, + 0xe5, 0x00, 0xd5, 0xd2, 0x42, 0xa2, 0xc9, 0x5b, 0x10, 0xb4, 0xbd, 0xc3, 0xf3, 0x2b, 0x56, 0x0a, + 0xdc, 0xb6, 0x16, 0x86, 0x6d, 0x5b, 0x48, 0xdb, 0xfe, 0xdb, 0xb5, 0xe8, 0xbb, 0xa3, 0xd9, 0x8c, + 0x2f, 0x73, 0x71, 0xc0, 0x67, 0x71, 0x76, 0x90, 0xe6, 0x97, 0x47, 0xec, 0xd5, 0xce, 0x45, 0xcd, + 0xe7, 0x73, 0x36, 0x78, 0xea, 0xb7, 0xaa, 0x42, 0x87, 0x86, 0x1d, 0xba, 0xb0, 0xf1, 0xfd, 0xe1, + 0xf5, 0x94, 0x74, 0x59, 0xfe, 0x71, 0x2d, 0xba, 0x01, 0xcb, 0x32, 0xe1, 0xd9, 0x15, 0xb3, 0xa5, + 0xf9, 0xa8, 0xc3, 0xb0, 0x8f, 0x9b, 0xf2, 0x7c, 0x7c, 0x5d, 0x35, 0x5d, 0xa2, 0x2c, 0x7a, 0xdb, + 0x0d, 0x97, 0x09, 0xab, 0xe4, 0x70, 0x7a, 0x40, 0x47, 0x84, 0x46, 0x8c, 0xe7, 0x87, 0x7d, 0x50, + 0xed, 0x2d, 0x8d, 0x06, 0xda, 0x5b, 0xc6, 0x2b, 0xe3, 0xec, 0x3e, 0x6a, 0xc1, 0x21, 0x8c, 0xaf, + 0x07, 0x3d, 0x48, 0xed, 0xea, 0x8f, 0xa3, 0x5f, 0x7d, 0xc9, 0xcb, 0xcb, 0xaa, 0x88, 0x67, 0x4c, + 0x0f, 0x85, 0x7b, 0xbe, 0x76, 0x23, 0x85, 0xa3, 0x61, 0xbd, 0x0b, 0x73, 0x82, 0xb6, 0x11, 0x7e, + 0x51, 0x30, 0x38, 0x07, 0x59, 0xc5, 0x5a, 0x48, 0x05, 0x2d, 0x84, 0xb4, 0xed, 0xcb, 0x68, 0x60, + 0x6d, 0x9f, 0xfd, 0x09, 0x9b, 0x89, 0x51, 0x92, 0xc0, 0x5e, 0xb1, 0xba, 0x92, 0x18, 0x8e, 0x92, + 0x84, 0xea, 0x15, 0x1c, 0xd5, 0xce, 0x5e, 0x45, 0xef, 0x00, 0x67, 0x07, 0x69, 0x25, 0x1d, 0x6e, + 0x85, 0xad, 0x68, 0xcc, 0x38, 0x1d, 0xf6, 0xc5, 0xb5, 0xe3, 0x9f, 0xac, 0x45, 0xdf, 0x41, 0x3c, + 0x9f, 0xb0, 0x05, 0xbf, 0x62, 0x83, 0xc7, 0xdd, 0xd6, 0x14, 0x69, 0xfc, 0x7f, 0x70, 0x0d, 0x0d, + 0x24, 0x4c, 0x26, 0x2c, 0x63, 0x33, 0x41, 0x86, 0x89, 0x12, 0x77, 0x86, 0x89, 0xc1, 0x9c, 0x11, + 0xd6, 0x08, 0xf7, 0x99, 0xd8, 0x59, 0x96, 0x25, 0xcb, 0x05, 0xd9, 0x97, 0x16, 0xe9, 0xec, 0x4b, + 0x0f, 0x45, 0xea, 0xb3, 0xcf, 0xc4, 0x28, 0xcb, 0xc8, 0xfa, 0x28, 0x71, 0x67, 0x7d, 0x0c, 0xa6, + 0x3d, 0xcc, 0xa2, 0x5f, 0x73, 0x5a, 0x4c, 0x8c, 0xf3, 0x73, 0x3e, 0xa0, 0xdb, 0x42, 0xca, 0x8d, + 0x8f, 0x8d, 0x4e, 0x0e, 0xa9, 0xc6, 0xf3, 0xd7, 0x05, 0x2f, 0xe9, 0x6e, 0x51, 0xe2, 0xce, 0x6a, + 0x18, 0x4c, 0x7b, 0xf8, 0xa3, 0xe8, 0x2d, 0x3d, 0x4b, 0x36, 0xeb, 0xd9, 0x5d, 0x74, 0x0a, 0x85, + 0x0b, 0xda, 0xbd, 0x0e, 0xaa, 0x65, 0xfe, 0x30, 0x9d, 0x97, 0xf5, 0xec, 0x83, 0x9b, 0xd7, 0xd2, + 0x0e, 0xf3, 0x96, 0xd2, 0xe6, 0x79, 0xf4, 0x1b, 0xbe, 0xf9, 0x9d, 0x38, 0x9f, 0xb1, 0x6c, 0xf0, + 0x30, 0xa4, 0xae, 0x18, 0xe3, 0x6a, 0xb3, 0x17, 0x6b, 0x27, 0x3b, 0x4d, 0xe8, 0xc9, 0xf4, 0x0e, + 0xaa, 0x0d, 0xa6, 0xd2, 0xbb, 0x61, 0xa8, 0x65, 0x7b, 0x97, 0x65, 0x8c, 0xb4, 0xad, 0x84, 0x1d, + 0xb6, 0x0d, 0xa4, 0x6d, 0x97, 0xd1, 0x6f, 0x9a, 0x6e, 0xae, 0xf3, 0x02, 0x29, 0xaf, 0x17, 0x9d, + 0x4d, 0xa2, 0x1f, 0x5d, 0xc8, 0xf8, 0x7a, 0xd4, 0x0f, 0x6e, 0xd5, 0x47, 0xcf, 0x28, 0x78, 0x7d, + 0xc0, 0x7c, 0x72, 0x37, 0x0c, 0x69, 0xdb, 0x7f, 0xb7, 0x16, 0x7d, 0x4f, 0xcb, 0x9e, 0xe7, 0xf1, + 0x59, 0xc6, 0xe4, 0x12, 0x7f, 0xc4, 0xc4, 0x2b, 0x5e, 0x5e, 0x4e, 0x56, 0xf9, 0x8c, 0x48, 0x67, + 0x70, 0xb8, 0x23, 0x9d, 0x21, 0x95, 0x74, 0x61, 0xfe, 0x34, 0x7a, 0xb7, 0x09, 0x8a, 0x8b, 0x38, + 0x9f, 0xb3, 0x1f, 0x56, 0x3c, 0x1f, 0x15, 0xe9, 0x28, 0x49, 0xca, 0xc1, 0x10, 0xef, 0x7a, 0xc8, + 0x99, 0x12, 0x6c, 0xf7, 0xe6, 0x9d, 0xf4, 0x59, 0xb7, 0xb2, 0xe0, 0x05, 0x4c, 0x9f, 0x9b, 0xe6, + 0x13, 0xbc, 0xa0, 0xd2, 0x67, 0x1f, 0x69, 0x59, 0x3d, 0xac, 0xd7, 0x20, 0xdc, 0xea, 0xa1, 0xbb, + 0xe8, 0xdc, 0x0e, 0x21, 0x76, 0x0d, 0x68, 0x1a, 0x8a, 0xe7, 0xe7, 0xe9, 0xfc, 0xb4, 0x48, 0xea, + 0x31, 0xf4, 0x00, 0xaf, 0xb3, 0x83, 0x10, 0x6b, 0x00, 0x81, 0x6a, 0x6f, 0xff, 0x60, 0xb3, 0x4c, + 0x3d, 0x2f, 0xed, 0x95, 0x7c, 0x71, 0xc0, 0xe6, 0xf1, 0x6c, 0xa5, 0x27, 0xd3, 0x0f, 0x43, 0xb3, + 0x18, 0xa4, 0x4d, 0x21, 0x3e, 0xba, 0xa6, 0x96, 0x2e, 0xcf, 0x7f, 0xae, 0x45, 0x77, 0xbd, 0x38, + 0xd1, 0xc1, 0xa4, 0x4a, 0x3f, 0xca, 0x93, 0x13, 0x56, 0x89, 0xb8, 0x14, 0x83, 0xef, 0x07, 0x62, + 0x80, 0xd0, 0x31, 0x65, 0xfb, 0xc1, 0x37, 0xd2, 0xb5, 0xbd, 0x3e, 0xa9, 0x57, 0x09, 0x3d, 0xff, + 0xf8, 0xbd, 0x2e, 0x25, 0x70, 0xf6, 0xb9, 0x1d, 0x42, 0x6c, 0xaf, 0x4b, 0xc1, 0x38, 0xbf, 0x4a, + 0x05, 0xdb, 0x67, 0x39, 0x2b, 0xdb, 0xbd, 0xae, 0x54, 0x7d, 0x84, 0xe8, 0x75, 0x02, 0xb5, 0xdb, + 0x56, 0xc7, 0x9b, 0xaa, 0x38, 0xd8, 0xb6, 0xba, 0x06, 0x14, 0x40, 0x6c, 0x5b, 0x51, 0xd0, 0xce, + 0xa8, 0x5e, 0xad, 0x4c, 0x46, 0xb3, 0x19, 0x28, 0x6c, 0x2b, 0xa7, 0x79, 0xd4, 0x0f, 0x26, 0x5a, + 0x52, 0xec, 0xd7, 0x46, 0x82, 0x2d, 0xa9, 0x90, 0x5e, 0x2d, 0x69, 0x50, 0xb4, 0x25, 0x4f, 0xd8, + 0x15, 0xbf, 0x0c, 0xb5, 0xa4, 0x02, 0x7a, 0xb4, 0xa4, 0x01, 0x6d, 0x92, 0xe3, 0xf8, 0x79, 0x91, + 0xb2, 0x57, 0x20, 0xc9, 0x71, 0x95, 0x6b, 0x31, 0x91, 0xe4, 0x20, 0x98, 0xf6, 0x70, 0x14, 0xfd, + 0xb2, 0x14, 0xfe, 0x90, 0xa7, 0xf9, 0xe0, 0x26, 0xa2, 0x54, 0x0b, 0x8c, 0xd5, 0x5b, 0x34, 0x00, + 0x4a, 0x5c, 0xff, 0x55, 0x67, 0x1c, 0xf7, 0x08, 0x25, 0x90, 0x6c, 0xac, 0x77, 0x61, 0x36, 0xbb, + 0x94, 0xc2, 0x7a, 0x56, 0x9e, 0x5c, 0xc4, 0x65, 0x9a, 0xcf, 0x07, 0x98, 0xae, 0x23, 0x27, 0xb2, + 0x4b, 0x8c, 0x03, 0xe1, 0xa4, 0x15, 0x47, 0x45, 0x51, 0xd6, 0x93, 0x3d, 0x16, 0x4e, 0x3e, 0x12, + 0x0c, 0xa7, 0x16, 0x8a, 0x7b, 0xdb, 0x65, 0xb3, 0x2c, 0xcd, 0x83, 0xde, 0x34, 0xd2, 0xc7, 0x9b, + 0x45, 0x41, 0xf0, 0x1e, 0xb0, 0xf8, 0x8a, 0x35, 0x35, 0xc3, 0x5a, 0xc6, 0x05, 0x82, 0xc1, 0x0b, + 0x40, 0xbb, 0x95, 0x97, 0xe2, 0xc3, 0xf8, 0x92, 0xd5, 0x0d, 0xcc, 0xea, 0x54, 0x61, 0x80, 0xe9, + 0x7b, 0x04, 0xb1, 0x95, 0xc7, 0x49, 0xed, 0x6a, 0x19, 0xbd, 0x23, 0xe5, 0xc7, 0x71, 0x29, 0xd2, + 0x59, 0x5a, 0xc4, 0x79, 0xb3, 0x45, 0xc4, 0x66, 0x91, 0x16, 0x65, 0x5c, 0x6e, 0xf5, 0xa4, 0xb5, + 0xdb, 0x7f, 0x5b, 0x8b, 0xde, 0x87, 0x7e, 0x8f, 0x59, 0xb9, 0x48, 0xe5, 0x49, 0x43, 0xa5, 0x67, + 0xd8, 0x4f, 0xc2, 0x46, 0x5b, 0x0a, 0xa6, 0x34, 0x9f, 0x5e, 0x5f, 0xd1, 0xe6, 0x97, 0x13, 0xbd, + 0xfb, 0xfa, 0xa2, 0x4c, 0x5a, 0x27, 0x71, 0x93, 0x66, 0x4b, 0x25, 0x85, 0x44, 0x7e, 0xd9, 0x82, + 0xc0, 0x08, 0x3f, 0xcd, 0xab, 0xc6, 0x3a, 0x36, 0xc2, 0xad, 0x38, 0x38, 0xc2, 0x3d, 0xcc, 0x8e, + 0xf0, 0xe3, 0xe5, 0x59, 0x96, 0x56, 0x17, 0x69, 0x3e, 0xd7, 0x9b, 0x09, 0x5f, 0xd7, 0x8a, 0xe1, + 0x7e, 0x62, 0xa3, 0x93, 0xc3, 0x9c, 0xe8, 0x60, 0x21, 0x9d, 0x80, 0x30, 0xd9, 0xe8, 0xe4, 0xec, + 0x1e, 0xcf, 0x4a, 0x0f, 0xd2, 0x4a, 0x80, 0x3d, 0x9e, 0xa3, 0x5a, 0x4b, 0x89, 0x3d, 0x5e, 0x9b, + 0xb2, 0x7b, 0x3c, 0xb7, 0x0e, 0x15, 0xcf, 0xae, 0xd8, 0x69, 0x99, 0x82, 0x3d, 0x9e, 0x57, 0xbe, + 0x86, 0x21, 0xf6, 0x78, 0x14, 0x6b, 0x27, 0x2a, 0x4b, 0xec, 0x33, 0x31, 0x11, 0xb1, 0x58, 0x56, + 0x60, 0xa2, 0x72, 0x6c, 0x18, 0x84, 0x98, 0xa8, 0x08, 0x54, 0x7b, 0xfb, 0x83, 0x28, 0x52, 0xe7, + 0x32, 0xf2, 0xec, 0xcc, 0x5f, 0x7b, 0xf4, 0x81, 0x8d, 0x77, 0x70, 0xf6, 0x7e, 0x80, 0xb0, 0x69, + 0x9c, 0xfa, 0xbb, 0x3c, 0x12, 0x1c, 0xa0, 0x1a, 0x52, 0x44, 0xa4, 0x71, 0x00, 0x81, 0x05, 0x9d, + 0x5c, 0xf0, 0x57, 0x78, 0x41, 0x6b, 0x49, 0xb8, 0xa0, 0x9a, 0xb0, 0x87, 0xf4, 0xba, 0xa0, 0xd8, + 0x21, 0x7d, 0x53, 0x8c, 0xd0, 0x21, 0x3d, 0x64, 0x6c, 0xcc, 0xb8, 0x86, 0x9f, 0x71, 0x7e, 0xb9, + 0x88, 0xcb, 0x4b, 0x10, 0x33, 0x9e, 0x72, 0xc3, 0x10, 0x31, 0x43, 0xb1, 0x36, 0x66, 0x5c, 0x87, + 0xf5, 0x26, 0xe0, 0xb4, 0xcc, 0x40, 0xcc, 0x78, 0x36, 0x34, 0x42, 0xc4, 0x0c, 0x81, 0xda, 0xd9, + 0xc9, 0xf5, 0x36, 0x61, 0xf0, 0x58, 0xc8, 0x53, 0x9f, 0x30, 0xea, 0x58, 0x08, 0xc1, 0x60, 0x08, + 0xed, 0x97, 0x71, 0x71, 0x81, 0x87, 0x90, 0x14, 0x85, 0x43, 0xa8, 0x41, 0x60, 0x7f, 0x4f, 0x58, + 0x5c, 0xce, 0x2e, 0xf0, 0xfe, 0x56, 0xb2, 0x70, 0x7f, 0x1b, 0x06, 0xf6, 0xb7, 0x12, 0xbc, 0x4c, + 0xc5, 0xc5, 0x21, 0x13, 0x31, 0xde, 0xdf, 0x3e, 0x13, 0xee, 0xef, 0x16, 0x6b, 0xb3, 0x7f, 0xd7, + 0xe1, 0x64, 0x79, 0x56, 0xcd, 0xca, 0xf4, 0x8c, 0x0d, 0x02, 0x56, 0x0c, 0x44, 0x64, 0xff, 0x24, + 0xac, 0x7d, 0xfe, 0x74, 0x2d, 0xba, 0xd9, 0x74, 0x3b, 0xaf, 0x2a, 0xbd, 0xf6, 0xf9, 0xee, 0x3f, + 0xc2, 0xfb, 0x97, 0xc0, 0x89, 0xc7, 0x26, 0x3d, 0xd4, 0x9c, 0xdc, 0x00, 0x2f, 0xd2, 0x69, 0x5e, + 0x99, 0x42, 0x7d, 0xd2, 0xc7, 0xba, 0xa3, 0x40, 0xe4, 0x06, 0xbd, 0x14, 0x6d, 0x5a, 0xa6, 0xfb, + 0xa7, 0x91, 0x8d, 0x93, 0x0a, 0xa4, 0x65, 0x4d, 0x7b, 0x3b, 0x04, 0x91, 0x96, 0xe1, 0x24, 0x0c, + 0x85, 0xfd, 0x92, 0x2f, 0x8b, 0xaa, 0x23, 0x14, 0x00, 0x14, 0x0e, 0x85, 0x36, 0xac, 0x7d, 0xbe, + 0x8e, 0x7e, 0xcb, 0x0d, 0x3f, 0xb7, 0xb1, 0xb7, 0xe8, 0x98, 0xc2, 0x9a, 0x78, 0xd8, 0x17, 0xb7, + 0x19, 0x45, 0xe3, 0x59, 0xec, 0x32, 0x11, 0xa7, 0x59, 0x35, 0x58, 0xc7, 0x6d, 0x34, 0x72, 0x22, + 0xa3, 0xc0, 0x38, 0x38, 0xbf, 0xed, 0x2e, 0x8b, 0x2c, 0x9d, 0xb5, 0x1f, 0x5a, 0x69, 0x5d, 0x23, + 0x0e, 0xcf, 0x6f, 0x2e, 0x06, 0xe7, 0xeb, 0x3a, 0xf5, 0x93, 0xff, 0x99, 0xae, 0x0a, 0x86, 0xcf, + 0xd7, 0x1e, 0x12, 0x9e, 0xaf, 0x21, 0x0a, 0xeb, 0x33, 0x61, 0xe2, 0x20, 0x5e, 0xf1, 0x25, 0x31, + 0x5f, 0x1b, 0x71, 0xb8, 0x3e, 0x2e, 0x66, 0xf7, 0x06, 0xc6, 0xc3, 0x38, 0x17, 0xac, 0xcc, 0xe3, + 0x6c, 0x2f, 0x8b, 0xe7, 0xd5, 0x80, 0x98, 0x63, 0x7c, 0x8a, 0xd8, 0x1b, 0xd0, 0x34, 0xd2, 0x8c, + 0xe3, 0x6a, 0x2f, 0xbe, 0xe2, 0x65, 0x2a, 0xe8, 0x66, 0xb4, 0x48, 0x67, 0x33, 0x7a, 0x28, 0xea, + 0x6d, 0x54, 0xce, 0x2e, 0xd2, 0x2b, 0x96, 0x04, 0xbc, 0x35, 0x48, 0x0f, 0x6f, 0x0e, 0x8a, 0x74, + 0xda, 0x84, 0x2f, 0xcb, 0x19, 0x23, 0x3b, 0x4d, 0x89, 0x3b, 0x3b, 0xcd, 0x60, 0xda, 0xc3, 0x5f, + 0xad, 0x45, 0xbf, 0xad, 0xa4, 0xee, 0x93, 0xa4, 0xdd, 0xb8, 0xba, 0x38, 0xe3, 0x71, 0x99, 0x0c, + 0x3e, 0xc0, 0xec, 0xa0, 0xa8, 0x71, 0xfd, 0xe4, 0x3a, 0x2a, 0xb0, 0x59, 0xeb, 0xbc, 0xdb, 0x8e, + 0x38, 0xb4, 0x59, 0x3d, 0x24, 0xdc, 0xac, 0x10, 0x85, 0x13, 0x88, 0x94, 0xab, 0x83, 0xc6, 0x75, + 0x52, 0xdf, 0x3f, 0x6d, 0xdc, 0xe8, 0xe4, 0xe0, 0xfc, 0x58, 0x0b, 0xfd, 0x68, 0xd9, 0xa2, 0x6c, + 0xe0, 0x11, 0x33, 0xec, 0x8b, 0x93, 0x9e, 0xcd, 0xa8, 0x08, 0x7b, 0x6e, 0x8d, 0x8c, 0x61, 0x5f, + 0x9c, 0xf0, 0xec, 0x4c, 0x6b, 0x21, 0xcf, 0xc8, 0xd4, 0x36, 0xec, 0x8b, 0xc3, 0xec, 0x4b, 0x33, + 0xcd, 0xba, 0xf0, 0x30, 0x60, 0x07, 0xae, 0x0d, 0x9b, 0xbd, 0x58, 0xed, 0xf0, 0x6f, 0xd6, 0xa2, + 0xef, 0x5a, 0x8f, 0x87, 0x3c, 0x49, 0xcf, 0x57, 0x0a, 0x7a, 0x11, 0x67, 0x4b, 0x56, 0x0d, 0x9e, + 0x50, 0xd6, 0xda, 0xac, 0x29, 0xc1, 0xd3, 0x6b, 0xe9, 0xc0, 0xb1, 0x33, 0x2a, 0x8a, 0x6c, 0x35, + 0x65, 0x8b, 0x22, 0x23, 0xc7, 0x8e, 0x87, 0x84, 0xc7, 0x0e, 0x44, 0x61, 0x56, 0x3e, 0xe5, 0x75, + 0xce, 0x8f, 0x66, 0xe5, 0x52, 0x14, 0xce, 0xca, 0x1b, 0x04, 0xe6, 0x4a, 0x53, 0xbe, 0xc3, 0xb3, + 0x8c, 0xcd, 0x44, 0xfb, 0x36, 0x8a, 0xd1, 0xb4, 0x44, 0x38, 0x57, 0x02, 0xa4, 0x3d, 0x95, 0x6b, + 0xf6, 0x90, 0x71, 0xc9, 0x9e, 0xad, 0x0e, 0xd2, 0xfc, 0x72, 0x80, 0xa7, 0x05, 0x16, 0x20, 0x4e, + 0xe5, 0x50, 0x10, 0xee, 0x55, 0x4f, 0xf3, 0x84, 0xe3, 0x7b, 0xd5, 0x5a, 0x12, 0xde, 0xab, 0x6a, + 0x02, 0x9a, 0x3c, 0x61, 0x94, 0xc9, 0x5a, 0x12, 0x36, 0xa9, 0x09, 0x6c, 0x2a, 0xd4, 0x4f, 0xa4, + 0xc8, 0xa9, 0x10, 0x3c, 0x83, 0xda, 0xe8, 0xe4, 0xe0, 0x9e, 0x4b, 0x3b, 0x40, 0x23, 0x02, 0x18, + 0xbf, 0x13, 0x64, 0x60, 0xe8, 0x37, 0xbb, 0xe1, 0x3d, 0x26, 0x66, 0x17, 0x78, 0xe8, 0x7b, 0x48, + 0x38, 0xf4, 0x21, 0x0a, 0xdb, 0x6a, 0xca, 0xcd, 0x6e, 0x7e, 0x1d, 0x0f, 0xbc, 0xd6, 0x4e, 0x7e, + 0xa3, 0x93, 0x83, 0x6d, 0x35, 0x5e, 0xd0, 0x6d, 0xa5, 0x64, 0xe1, 0xb6, 0x32, 0x0c, 0x2c, 0xbd, + 0x12, 0xc8, 0x43, 0xb2, 0x75, 0x5a, 0xd1, 0x3b, 0x26, 0xdb, 0xe8, 0xe4, 0xb4, 0x93, 0x7f, 0x31, + 0xfb, 0x43, 0x25, 0x3d, 0xe2, 0xf5, 0xe0, 0x7b, 0x11, 0x67, 0x69, 0x12, 0x0b, 0x36, 0xe5, 0x97, + 0x2c, 0xc7, 0xb7, 0x62, 0xba, 0xb4, 0x8a, 0x1f, 0x7a, 0x0a, 0xe1, 0xad, 0x58, 0x58, 0x11, 0xc6, + 0x89, 0xa2, 0x4f, 0x2b, 0xb6, 0x13, 0x57, 0xc4, 0x14, 0xe9, 0x21, 0xe1, 0x38, 0x81, 0x28, 0x4c, + 0x84, 0x95, 0xfc, 0xf9, 0xeb, 0x82, 0x95, 0x29, 0xcb, 0x67, 0x0c, 0x4f, 0x84, 0x21, 0x15, 0x4e, + 0x84, 0x11, 0x1a, 0x6e, 0x02, 0x77, 0x63, 0xc1, 0x9e, 0xad, 0xa6, 0xe9, 0x82, 0x55, 0x22, 0x5e, + 0x14, 0xf8, 0x26, 0x10, 0x40, 0xe1, 0x4d, 0x60, 0x1b, 0x6e, 0x9d, 0x39, 0x99, 0x99, 0xb6, 0x7d, + 0x3b, 0x0e, 0x12, 0x81, 0xdb, 0x71, 0x04, 0x0a, 0x1b, 0xd6, 0x02, 0xe8, 0xd3, 0x87, 0x96, 0x95, + 0xe0, 0xd3, 0x07, 0x9a, 0x6e, 0x9d, 0xe4, 0x19, 0x66, 0x52, 0x0f, 0xcd, 0x8e, 0xa2, 0x4f, 0xdc, + 0x21, 0xba, 0xd9, 0x8b, 0xc5, 0x8f, 0x0e, 0x4f, 0x58, 0x16, 0xcb, 0xf5, 0x30, 0x70, 0x3e, 0xd7, + 0x30, 0x7d, 0x8e, 0x0e, 0x1d, 0x56, 0x3b, 0xfc, 0x8b, 0xb5, 0xe8, 0x3d, 0xcc, 0xe3, 0x17, 0x85, + 0xf4, 0xfb, 0xb8, 0xdb, 0x96, 0x22, 0x89, 0xeb, 0x7f, 0x61, 0x0d, 0x7b, 0x83, 0xa5, 0x11, 0xd9, + 0xdb, 0x81, 0xba, 0x00, 0x7e, 0x36, 0x68, 0xca, 0x0f, 0x39, 0xe2, 0x06, 0x4b, 0x88, 0xb7, 0x1b, + 0x2d, 0xbf, 0x5c, 0x15, 0xd8, 0x68, 0x19, 0x1b, 0x5a, 0x4c, 0x6c, 0xb4, 0x10, 0xcc, 0x8e, 0x4e, + 0xb7, 0x7a, 0x2f, 0x53, 0x71, 0x21, 0x13, 0x39, 0x30, 0x3a, 0xbd, 0xb2, 0x1a, 0x88, 0x18, 0x9d, + 0x24, 0x0c, 0x53, 0x9d, 0x06, 0xac, 0xc7, 0x26, 0x36, 0x97, 0x1b, 0x43, 0xee, 0xc8, 0xbc, 0xdf, + 0x0d, 0xc2, 0x78, 0x6d, 0xc4, 0x7a, 0x4f, 0xf5, 0x30, 0x64, 0x01, 0xec, 0xab, 0x36, 0x7b, 0xb1, + 0xda, 0xe1, 0x9f, 0x47, 0xdf, 0x69, 0x55, 0x6c, 0x8f, 0xc5, 0x62, 0x59, 0xb2, 0x64, 0xb0, 0xdd, + 0x51, 0xee, 0x06, 0x34, 0xae, 0x1f, 0xf7, 0x57, 0x68, 0x25, 0xff, 0x0d, 0xa7, 0xc2, 0xca, 0x94, + 0xe1, 0x49, 0xc8, 0xa4, 0xcf, 0x06, 0x93, 0x7f, 0x5a, 0xa7, 0xb5, 0x7f, 0x77, 0xa3, 0x6b, 0x74, + 0x15, 0xa7, 0x99, 0x7c, 0x0a, 0xfc, 0x41, 0xc8, 0xa8, 0x87, 0x06, 0xf7, 0xef, 0xa4, 0x4a, 0x6b, + 0x66, 0x96, 0x63, 0xdc, 0xd9, 0xf7, 0x3d, 0xa2, 0x67, 0x02, 0x64, 0xdb, 0xb7, 0xd5, 0x93, 0xd6, + 0x6e, 0x45, 0xb3, 0xe4, 0xd5, 0x7f, 0x76, 0x83, 0x1c, 0xf3, 0xaa, 0x55, 0x91, 0x48, 0xdf, 0xea, + 0x49, 0x6b, 0xaf, 0x7f, 0x16, 0xbd, 0xdb, 0xf6, 0xaa, 0x17, 0xa2, 0xed, 0x4e, 0x53, 0x60, 0x2d, + 0x7a, 0xdc, 0x5f, 0x41, 0xbb, 0xff, 0x77, 0x73, 0xe0, 0xad, 0xfc, 0xcf, 0xf8, 0x62, 0xc1, 0xf2, + 0x84, 0x25, 0x8d, 0x46, 0x55, 0x6f, 0xcc, 0x3e, 0xa5, 0xed, 0x1a, 0x85, 0xa1, 0xab, 0x61, 0x4a, + 0xf4, 0x3b, 0xdf, 0x40, 0x53, 0x17, 0xed, 0xbf, 0xd7, 0xa2, 0x07, 0x68, 0xd1, 0x9a, 0xc0, 0xf5, + 0x8a, 0xf8, 0xfb, 0x7d, 0x1c, 0x61, 0x9a, 0xa6, 0xa8, 0xa3, 0x9f, 0xc3, 0x82, 0x2e, 0xf2, 0x7f, + 0xac, 0x45, 0xb7, 0xad, 0x62, 0x1d, 0xde, 0x3b, 0x3c, 0x3f, 0xcf, 0xd2, 0x99, 0x90, 0x8f, 0x7a, + 0xb5, 0x0a, 0xdd, 0x9c, 0x94, 0x46, 0x77, 0x73, 0x06, 0x34, 0x75, 0xd9, 0xfe, 0x79, 0x2d, 0xba, + 0xe5, 0x36, 0xa7, 0x7c, 0x4e, 0xac, 0x8e, 0x5d, 0x1b, 0xc5, 0x6a, 0xf0, 0x31, 0xdd, 0x06, 0x18, + 0x6f, 0xca, 0xf5, 0xc9, 0xb5, 0xf5, 0xec, 0x5e, 0xfd, 0xb3, 0xb4, 0x12, 0xbc, 0x5c, 0x4d, 0x2e, + 0xf8, 0xab, 0xe6, 0xad, 0x2f, 0x7f, 0xb5, 0xd0, 0xc0, 0xd0, 0x21, 0x88, 0xbd, 0x3a, 0x4e, 0xb6, + 0x5c, 0xd9, 0xb7, 0xc3, 0x2a, 0xc2, 0x95, 0x43, 0x74, 0xb8, 0xf2, 0x49, 0xbb, 0x56, 0x36, 0xb5, + 0xb2, 0xaf, 0xb2, 0x6d, 0xe0, 0x45, 0x6d, 0xbf, 0xce, 0x76, 0xbf, 0x1b, 0xb4, 0x19, 0xb3, 0x16, + 0xef, 0xa6, 0xe7, 0xe7, 0xa6, 0x4e, 0x78, 0x49, 0x5d, 0x84, 0xc8, 0x98, 0x09, 0xd4, 0x6e, 0xfa, + 0xf6, 0xd2, 0x8c, 0xc9, 0x47, 0x55, 0x5f, 0x9c, 0x9f, 0x67, 0x3c, 0x4e, 0xc0, 0xa6, 0xaf, 0x16, + 0x0f, 0x5d, 0x39, 0xb1, 0xe9, 0xc3, 0x38, 0x7b, 0x09, 0xa6, 0x96, 0xd6, 0x63, 0x2e, 0x9f, 0xa5, + 0x19, 0xbc, 0x34, 0x2e, 0x35, 0x8d, 0x90, 0xb8, 0x04, 0xd3, 0x82, 0x6c, 0x62, 0x56, 0x8b, 0xea, + 0xb1, 0xd2, 0x94, 0xff, 0x5e, 0x5b, 0xd1, 0x11, 0x13, 0x89, 0x19, 0x82, 0xd9, 0x43, 0x95, 0x5a, + 0x78, 0x5a, 0x48, 0xe3, 0xb7, 0xda, 0x5a, 0x4a, 0x42, 0x1c, 0xaa, 0xf8, 0x84, 0xdd, 0xc3, 0xd7, + 0x7f, 0xdf, 0xe5, 0xaf, 0x72, 0x69, 0xf4, 0x76, 0x5b, 0xa5, 0x91, 0x11, 0x7b, 0x78, 0xc8, 0x68, + 0xc3, 0x9f, 0x47, 0xbf, 0x24, 0x0d, 0x97, 0xbc, 0x18, 0xdc, 0x40, 0x14, 0x4a, 0xe7, 0x8a, 0xf5, + 0x4d, 0x52, 0x6e, 0xef, 0xcc, 0x98, 0xd8, 0x38, 0xad, 0xe2, 0x39, 0x7c, 0x2f, 0xc2, 0xf6, 0xb8, + 0x94, 0x12, 0x77, 0x66, 0xda, 0x94, 0x1f, 0x15, 0x47, 0x3c, 0xd1, 0xd6, 0x91, 0x1a, 0x1a, 0x61, + 0x28, 0x2a, 0x5c, 0xc8, 0x26, 0xd3, 0x47, 0xf1, 0x55, 0x3a, 0x37, 0x09, 0x8f, 0x9a, 0xbe, 0x2a, + 0x90, 0x4c, 0x5b, 0x66, 0xe8, 0x40, 0x44, 0x32, 0x4d, 0xc2, 0xce, 0x64, 0x6c, 0x99, 0xfd, 0xe6, + 0x18, 0x7a, 0x9c, 0x9f, 0xf3, 0x3a, 0xf5, 0x3e, 0x48, 0xf3, 0x4b, 0x38, 0x19, 0x3b, 0x26, 0x71, + 0x9e, 0x98, 0x8c, 0xfb, 0xe8, 0xd9, 0x5d, 0x53, 0x73, 0x46, 0x6b, 0x2f, 0x6a, 0x28, 0x0d, 0xb0, + 0x6b, 0x32, 0x47, 0xb9, 0x90, 0x23, 0x76, 0x4d, 0x21, 0xde, 0x76, 0xb1, 0x71, 0x9e, 0xf1, 0x1c, + 0x76, 0xb1, 0xb5, 0x50, 0x0b, 0x89, 0x2e, 0x6e, 0x41, 0x76, 0x3e, 0x6e, 0x44, 0xea, 0xd4, 0x6f, + 0x94, 0x65, 0x60, 0x3e, 0x36, 0xaa, 0x06, 0x20, 0xe6, 0x63, 0x14, 0xd4, 0x7e, 0x4e, 0xa2, 0x6f, + 0xd5, 0x4d, 0x7a, 0x5c, 0xb2, 0xab, 0x94, 0xc1, 0x3b, 0x45, 0x8e, 0x84, 0x18, 0xff, 0x3e, 0x61, + 0x47, 0xd6, 0x69, 0x5e, 0x15, 0x59, 0x5c, 0x5d, 0xe8, 0x5b, 0x26, 0x7e, 0x9d, 0x1b, 0x21, 0xbc, + 0x67, 0x72, 0xaf, 0x83, 0xb2, 0x93, 0x7a, 0x23, 0x33, 0x53, 0xcc, 0x3a, 0xae, 0xda, 0x9a, 0x66, + 0x36, 0x3a, 0x39, 0xfb, 0x28, 0x67, 0x3f, 0xce, 0x32, 0x56, 0xae, 0x1a, 0xd9, 0x61, 0x9c, 0xa7, + 0xe7, 0xac, 0x12, 0xe0, 0x51, 0x8e, 0xa6, 0x86, 0x10, 0x23, 0x1e, 0xe5, 0x04, 0x70, 0xbb, 0x9b, + 0x04, 0x9e, 0xc7, 0x79, 0xc2, 0x5e, 0x83, 0xdd, 0x24, 0xb4, 0x23, 0x19, 0x62, 0x37, 0x49, 0xb1, + 0xf6, 0x91, 0xc6, 0xb3, 0x8c, 0xcf, 0x2e, 0xf5, 0x12, 0xe0, 0x77, 0xb0, 0x94, 0xc0, 0x35, 0xe0, + 0x76, 0x08, 0xb1, 0x8b, 0x80, 0x14, 0x9c, 0xb0, 0x22, 0x8b, 0x67, 0xf0, 0x62, 0x99, 0xd2, 0xd1, + 0x32, 0x62, 0x11, 0x80, 0x0c, 0x28, 0xae, 0xbe, 0xb0, 0x86, 0x15, 0x17, 0xdc, 0x57, 0xbb, 0x1d, + 0x42, 0xec, 0x32, 0x28, 0x05, 0x93, 0x22, 0x4b, 0x05, 0x18, 0x06, 0x4a, 0x43, 0x4a, 0x88, 0x61, + 0xe0, 0x13, 0xc0, 0xe4, 0x21, 0x2b, 0xe7, 0x0c, 0x35, 0x29, 0x25, 0x41, 0x93, 0x0d, 0x61, 0x6f, + 0xd1, 0xab, 0xba, 0xf3, 0x62, 0x05, 0x6e, 0xd1, 0xeb, 0x6a, 0xf1, 0x62, 0x45, 0xdc, 0xa2, 0xf7, + 0x00, 0x50, 0xc4, 0xe3, 0xb8, 0x12, 0x78, 0x11, 0xa5, 0x24, 0x58, 0xc4, 0x86, 0xb0, 0x6b, 0xb4, + 0x2a, 0xe2, 0x52, 0x80, 0x35, 0x5a, 0x17, 0xc0, 0xb9, 0x5a, 0x71, 0x93, 0x94, 0xdb, 0x99, 0x44, + 0xf5, 0x0a, 0x13, 0x7b, 0x29, 0xcb, 0x92, 0x0a, 0xcc, 0x24, 0xba, 0xdd, 0x1b, 0x29, 0x31, 0x93, + 0xb4, 0x29, 0x10, 0x4a, 0xfa, 0xb9, 0x0c, 0x56, 0x3b, 0xf0, 0x58, 0xe6, 0x76, 0x08, 0xb1, 0xf3, + 0x53, 0x53, 0xe8, 0x9d, 0xb8, 0x2c, 0xd3, 0x7a, 0xf1, 0x5f, 0xc7, 0x0b, 0xd4, 0xc8, 0x89, 0xf9, + 0x09, 0xe3, 0xc0, 0xf0, 0x6a, 0x26, 0x6e, 0xac, 0x60, 0x70, 0xea, 0xbe, 0x13, 0x64, 0x6c, 0xc6, + 0x29, 0x25, 0xce, 0xdd, 0x00, 0xac, 0x35, 0x91, 0xab, 0x01, 0xeb, 0x5d, 0x98, 0xf3, 0xe2, 0xa0, + 0x71, 0x71, 0xc8, 0xaf, 0xd8, 0x94, 0x3f, 0x7f, 0x9d, 0x56, 0xf5, 0x26, 0x50, 0xaf, 0xdc, 0x4f, + 0x09, 0x4b, 0x18, 0x4c, 0xbc, 0x38, 0xd8, 0xa9, 0x64, 0x13, 0x08, 0x50, 0x96, 0x23, 0xf6, 0x0a, + 0x4d, 0x20, 0xa0, 0x45, 0xc3, 0x11, 0x09, 0x44, 0x88, 0xb7, 0xe7, 0x78, 0xc6, 0xb9, 0xfe, 0x5a, + 0xc4, 0x94, 0x37, 0xb9, 0x1c, 0x65, 0x0d, 0x82, 0xc4, 0x51, 0x4a, 0x50, 0xc1, 0xee, 0x2f, 0x8d, + 0x7f, 0x3b, 0xc4, 0xee, 0x13, 0x76, 0xda, 0xc3, 0xec, 0x41, 0x0f, 0x12, 0x71, 0x65, 0x2f, 0xb8, + 0x50, 0xae, 0xda, 0xf7, 0x5b, 0x1e, 0xf4, 0x20, 0x9d, 0x33, 0x41, 0xb7, 0x5a, 0xcf, 0xe2, 0xd9, + 0xe5, 0xbc, 0xe4, 0xcb, 0x3c, 0xd9, 0xe1, 0x19, 0x2f, 0xc1, 0x99, 0xa0, 0x57, 0x6a, 0x80, 0x12, + 0x67, 0x82, 0x1d, 0x2a, 0x36, 0x83, 0x73, 0x4b, 0x31, 0xca, 0xd2, 0x39, 0xdc, 0x51, 0x7b, 0x86, + 0x24, 0x40, 0x64, 0x70, 0x28, 0x88, 0x04, 0x91, 0xda, 0x71, 0x8b, 0x74, 0x16, 0x67, 0xca, 0xdf, + 0x36, 0x6d, 0xc6, 0x03, 0x3b, 0x83, 0x08, 0x51, 0x40, 0xea, 0x39, 0x5d, 0x96, 0xf9, 0x38, 0x17, + 0x9c, 0xac, 0x67, 0x03, 0x74, 0xd6, 0xd3, 0x01, 0xc1, 0xb4, 0x3a, 0x65, 0xaf, 0xeb, 0xd2, 0xd4, + 0xff, 0x60, 0xd3, 0x6a, 0xfd, 0xf7, 0xa1, 0x96, 0x87, 0xa6, 0x55, 0xc0, 0x81, 0xca, 0x68, 0x27, + 0x2a, 0x60, 0x02, 0xda, 0x7e, 0x98, 0xdc, 0xef, 0x06, 0x71, 0x3f, 0x13, 0xb1, 0xca, 0x58, 0xc8, + 0x8f, 0x04, 0xfa, 0xf8, 0x69, 0x40, 0x7b, 0xdc, 0xe2, 0xd5, 0xe7, 0x82, 0xcd, 0x2e, 0x5b, 0xf7, + 0xf5, 0xfc, 0x82, 0x2a, 0x84, 0x38, 0x6e, 0x21, 0x50, 0xbc, 0x8b, 0xc6, 0x33, 0x9e, 0x87, 0xba, + 0xa8, 0x96, 0xf7, 0xe9, 0x22, 0xcd, 0xd9, 0xcd, 0xaf, 0x91, 0xea, 0xc8, 0x54, 0xdd, 0xb4, 0x49, + 0x58, 0x70, 0x21, 0x62, 0xf3, 0x4b, 0xc2, 0x36, 0x27, 0x87, 0x3e, 0x0f, 0xdb, 0x2f, 0x33, 0xb4, + 0xac, 0x1c, 0xd2, 0x2f, 0x33, 0x50, 0x2c, 0x5d, 0x49, 0x15, 0x23, 0x1d, 0x56, 0xfc, 0x38, 0x79, + 0xd4, 0x0f, 0xb6, 0x5b, 0x1e, 0xcf, 0xe7, 0x4e, 0xc6, 0xe2, 0x52, 0x79, 0xdd, 0x0a, 0x18, 0xb2, + 0x18, 0xb1, 0xe5, 0x09, 0xe0, 0x60, 0x0a, 0xf3, 0x3c, 0xef, 0xf0, 0x5c, 0xb0, 0x5c, 0x60, 0x53, + 0x98, 0x6f, 0x4c, 0x83, 0xa1, 0x29, 0x8c, 0x52, 0x00, 0x71, 0x2b, 0xcf, 0x83, 0x98, 0x38, 0x8a, + 0x17, 0x68, 0xc6, 0xa6, 0xce, 0x7a, 0x94, 0x3c, 0x14, 0xb7, 0x80, 0x73, 0x1e, 0x32, 0xbb, 0x5e, + 0xa6, 0x71, 0x39, 0x37, 0xa7, 0x1b, 0xc9, 0xe0, 0x31, 0x6d, 0xc7, 0x27, 0x89, 0x87, 0xcc, 0x61, + 0x0d, 0x30, 0xed, 0x8c, 0x17, 0xf1, 0xdc, 0xd4, 0x14, 0xa9, 0x81, 0x94, 0xb7, 0xaa, 0x7a, 0xbf, + 0x1b, 0x04, 0x7e, 0x5e, 0xa4, 0x09, 0xe3, 0x01, 0x3f, 0x52, 0xde, 0xc7, 0x0f, 0x04, 0x41, 0xf6, + 0x56, 0xd7, 0x5b, 0xed, 0xe8, 0x46, 0x79, 0xa2, 0xf7, 0xb1, 0x43, 0xa2, 0x79, 0x00, 0x17, 0xca, + 0xde, 0x08, 0x1e, 0x8c, 0xd1, 0xe6, 0x80, 0x36, 0x34, 0x46, 0xcd, 0xf9, 0x6b, 0x9f, 0x31, 0x8a, + 0xc1, 0xda, 0xe7, 0x8f, 0xf5, 0x18, 0xdd, 0x8d, 0x45, 0x5c, 0xe7, 0xed, 0x2f, 0x52, 0xf6, 0x4a, + 0x6f, 0x84, 0x91, 0xfa, 0x36, 0xd4, 0x50, 0xbe, 0x8b, 0x0d, 0x76, 0xc5, 0xdb, 0xbd, 0xf9, 0x80, + 0x6f, 0xbd, 0x43, 0xe8, 0xf4, 0x0d, 0xb6, 0x0a, 0xdb, 0xbd, 0xf9, 0x80, 0x6f, 0xfd, 0xe9, 0x8a, + 0x4e, 0xdf, 0xe0, 0xfb, 0x15, 0xdb, 0xbd, 0x79, 0xed, 0xfb, 0x2f, 0x9b, 0x81, 0xeb, 0x3a, 0xaf, + 0xf3, 0xb0, 0x99, 0x48, 0xaf, 0x18, 0x96, 0x4e, 0xfa, 0xf6, 0x0c, 0x1a, 0x4a, 0x27, 0x69, 0x15, + 0xe7, 0xe3, 0x71, 0x58, 0x29, 0x8e, 0x79, 0x95, 0xca, 0x4b, 0x22, 0x4f, 0x7b, 0x18, 0x6d, 0xe0, + 0xd0, 0xa6, 0x29, 0xa4, 0x64, 0x1f, 0x77, 0x7b, 0xa8, 0xbd, 0x9e, 0xff, 0x28, 0x60, 0xaf, 0x7d, + 0x4b, 0x7f, 0xab, 0x27, 0x6d, 0x1f, 0x3c, 0x7b, 0x4c, 0xf3, 0xc8, 0x70, 0xc2, 0xd0, 0x55, 0xc2, + 0x98, 0x32, 0x8f, 0x92, 0xdd, 0x67, 0xa7, 0x8f, 0xfb, 0x2b, 0x74, 0xb8, 0x1f, 0x25, 0x49, 0x3f, + 0xf7, 0xee, 0x33, 0xf7, 0xc7, 0xfd, 0x15, 0xb4, 0xfb, 0xbf, 0x6e, 0xb6, 0x35, 0xd0, 0xbf, 0x1e, + 0x83, 0x4f, 0xfa, 0x58, 0x04, 0xe3, 0xf0, 0xe9, 0xb5, 0x74, 0x74, 0x41, 0xfe, 0xbe, 0xd9, 0xbf, + 0x37, 0xa8, 0x7c, 0x47, 0x4a, 0xbe, 0x5b, 0xad, 0x87, 0x64, 0x28, 0xaa, 0x2c, 0x0c, 0x07, 0xe6, + 0x47, 0xd7, 0xd4, 0x72, 0xbe, 0x64, 0xe8, 0xc1, 0xfa, 0x5d, 0x5e, 0xa7, 0x3c, 0x21, 0xcb, 0x0e, + 0x0d, 0x0b, 0xf4, 0xf1, 0x75, 0xd5, 0xa8, 0xa1, 0xea, 0xc0, 0xf2, 0x5b, 0x3e, 0x4f, 0x7b, 0x1a, + 0xf6, 0xbe, 0xee, 0xf3, 0xe1, 0xf5, 0x94, 0x74, 0x59, 0xfe, 0x6b, 0x2d, 0xba, 0xe7, 0xb1, 0xf6, + 0x71, 0x06, 0x38, 0x74, 0xf9, 0x41, 0xc0, 0x3e, 0xa5, 0x64, 0x0a, 0xf7, 0xbb, 0xdf, 0x4c, 0xd9, + 0x7e, 0xf6, 0xcf, 0x53, 0xd9, 0x4b, 0x33, 0xc1, 0xca, 0xf6, 0x67, 0xff, 0x7c, 0xbb, 0x8a, 0x1a, + 0xd2, 0x9f, 0xfd, 0x0b, 0xe0, 0xce, 0x67, 0xff, 0x10, 0xcf, 0xe8, 0x67, 0xff, 0x50, 0x6b, 0xc1, + 0xcf, 0xfe, 0x85, 0x35, 0xa8, 0xd5, 0xa5, 0x29, 0x82, 0x3a, 0x36, 0xef, 0x65, 0xd1, 0x3f, 0x45, + 0x7f, 0x72, 0x1d, 0x15, 0x62, 0x7d, 0x55, 0x9c, 0xbc, 0xe6, 0xd9, 0xa3, 0x4d, 0xbd, 0xab, 0x9e, + 0xdb, 0xbd, 0x79, 0xed, 0xfb, 0x47, 0x7a, 0x73, 0x65, 0x56, 0x13, 0x5e, 0xca, 0x4f, 0x3e, 0x6e, + 0x86, 0x56, 0x87, 0xda, 0x82, 0xdb, 0xf3, 0x8f, 0xfa, 0xc1, 0x44, 0x75, 0x6b, 0x42, 0x77, 0xfa, + 0xb0, 0xcb, 0x10, 0xe8, 0xf2, 0xed, 0xde, 0x3c, 0xb1, 0x8c, 0x28, 0xdf, 0xaa, 0xb7, 0x7b, 0x18, + 0xf3, 0xfb, 0xfa, 0x71, 0x7f, 0x05, 0xed, 0xfe, 0x4a, 0x67, 0xad, 0xae, 0x7b, 0xd9, 0xcf, 0x5b, + 0x5d, 0xa6, 0x26, 0x5e, 0x37, 0x0f, 0xfb, 0xe2, 0xa1, 0xfc, 0xc5, 0x5d, 0x42, 0xbb, 0xf2, 0x17, + 0x74, 0x19, 0xfd, 0xf0, 0x7a, 0x4a, 0xba, 0x2c, 0xff, 0xb4, 0x16, 0xdd, 0x24, 0xcb, 0xa2, 0xe3, + 0xe0, 0xe3, 0xbe, 0x96, 0x41, 0x3c, 0x7c, 0x72, 0x6d, 0x3d, 0x5d, 0xa8, 0x7f, 0x5d, 0x8b, 0x6e, + 0x05, 0x0a, 0xa5, 0x02, 0xe4, 0x1a, 0xd6, 0xfd, 0x40, 0xf9, 0xf4, 0xfa, 0x8a, 0xd4, 0x72, 0xef, + 0xe2, 0x93, 0xf6, 0x27, 0xdc, 0x02, 0xb6, 0x27, 0xf4, 0x27, 0xdc, 0xba, 0xb5, 0xe0, 0x19, 0x53, + 0x7c, 0xd6, 0xec, 0xf9, 0xd0, 0x33, 0x26, 0x79, 0x41, 0x33, 0xf8, 0xd1, 0x16, 0x8c, 0xc3, 0x9c, + 0x3c, 0x7f, 0x5d, 0xc4, 0x79, 0x42, 0x3b, 0x51, 0xf2, 0x6e, 0x27, 0x86, 0x83, 0x67, 0x73, 0xb5, + 0xf4, 0x84, 0x37, 0xfb, 0xb8, 0x07, 0x94, 0xbe, 0x41, 0x82, 0x67, 0x73, 0x2d, 0x94, 0xf0, 0xa6, + 0xb3, 0xc6, 0x90, 0x37, 0x90, 0x2c, 0x3e, 0xec, 0x83, 0x82, 0x1d, 0x82, 0xf1, 0x66, 0x8e, 0xfc, + 0x1f, 0x85, 0xac, 0xb4, 0x8e, 0xfd, 0xb7, 0x7a, 0xd2, 0x84, 0xdb, 0x09, 0x13, 0x9f, 0xb1, 0x38, + 0x61, 0x65, 0xd0, 0xad, 0xa1, 0x7a, 0xb9, 0x75, 0x69, 0xcc, 0xed, 0x0e, 0xcf, 0x96, 0x8b, 0x5c, + 0x77, 0x26, 0xe9, 0xd6, 0xa5, 0xba, 0xdd, 0x02, 0x1a, 0x9e, 0x4a, 0x5a, 0xb7, 0x32, 0xbd, 0x7c, + 0x18, 0x36, 0xe3, 0x65, 0x95, 0x9b, 0xbd, 0x58, 0xba, 0x9e, 0x3a, 0x8c, 0x3a, 0xea, 0x09, 0x22, + 0x69, 0xab, 0x27, 0x0d, 0x8f, 0x07, 0x1d, 0xb7, 0x26, 0x9e, 0xb6, 0x3b, 0x6c, 0xb5, 0x42, 0xea, + 0x71, 0x7f, 0x05, 0x78, 0x18, 0xab, 0xa3, 0xea, 0x20, 0xad, 0xc4, 0x5e, 0x9a, 0x65, 0x83, 0xcd, + 0x40, 0x98, 0x34, 0x50, 0xf0, 0x30, 0x16, 0x81, 0x89, 0x48, 0x6e, 0x0e, 0x2f, 0xf3, 0x41, 0x97, + 0x1d, 0x49, 0xf5, 0x8a, 0x64, 0x97, 0x06, 0x07, 0x6a, 0x4e, 0x53, 0x9b, 0xda, 0x0e, 0xc3, 0x0d, + 0xd7, 0xaa, 0xf0, 0x76, 0x6f, 0x1e, 0x3c, 0xed, 0x97, 0x94, 0x5c, 0x59, 0xee, 0x52, 0x26, 0xbc, + 0x95, 0xe4, 0x5e, 0x07, 0x05, 0x0e, 0x25, 0xd5, 0x30, 0x7a, 0x99, 0x26, 0x73, 0x26, 0xd0, 0x07, + 0x55, 0x2e, 0x10, 0x7c, 0x50, 0x05, 0x40, 0xd0, 0x75, 0xea, 0xef, 0xe6, 0x34, 0x76, 0x9c, 0x60, + 0x5d, 0xa7, 0x95, 0x1d, 0x2a, 0xd4, 0x75, 0x28, 0x0d, 0x66, 0x03, 0xe3, 0x56, 0x7f, 0xe6, 0xe2, + 0x61, 0xc8, 0x0c, 0xf8, 0xd6, 0xc5, 0x66, 0x2f, 0x16, 0xac, 0x28, 0xd6, 0x61, 0xba, 0x48, 0x05, + 0xb6, 0xa2, 0x38, 0x36, 0x6a, 0x24, 0xb4, 0xa2, 0xb4, 0x51, 0xaa, 0x7a, 0x75, 0x8e, 0x30, 0x4e, + 0xc2, 0xd5, 0x53, 0x4c, 0xbf, 0xea, 0x19, 0xb6, 0xf5, 0x5c, 0x35, 0x37, 0x21, 0x23, 0x2e, 0xf4, + 0x66, 0x19, 0x89, 0x6d, 0xf9, 0xfa, 0x33, 0x04, 0x43, 0xb3, 0x0e, 0xa5, 0x00, 0x9f, 0x17, 0xd4, + 0x5c, 0xf3, 0xe8, 0xb7, 0x28, 0x58, 0x5c, 0xc6, 0xf9, 0x0c, 0xdd, 0x9c, 0x4a, 0x83, 0x2d, 0x32, + 0xb4, 0x39, 0x25, 0x35, 0xc0, 0x53, 0x7b, 0xff, 0xfd, 0x62, 0x64, 0x28, 0x98, 0x17, 0x79, 0xfd, + 0xd7, 0x8b, 0x1f, 0xf4, 0x20, 0xe1, 0x53, 0xfb, 0x06, 0x30, 0xe7, 0xee, 0xca, 0xe9, 0x07, 0x01, + 0x53, 0x3e, 0x1a, 0xda, 0x08, 0xd3, 0x2a, 0x20, 0xa8, 0x9d, 0xb3, 0xc5, 0xcf, 0xd9, 0x0a, 0x0b, + 0x6a, 0xf7, 0x90, 0xf0, 0x73, 0xb6, 0x0a, 0x05, 0x75, 0x1b, 0x05, 0x79, 0xa6, 0xbb, 0x0f, 0x5a, + 0x0f, 0xe8, 0xbb, 0x5b, 0x9f, 0x8d, 0x4e, 0x0e, 0x8c, 0x9c, 0xdd, 0xf4, 0xca, 0x7b, 0x4c, 0x81, + 0x14, 0x74, 0x37, 0xbd, 0xc2, 0x9f, 0x52, 0x6c, 0xf6, 0x62, 0xe1, 0x8d, 0x80, 0x58, 0xb0, 0xd7, + 0xcd, 0xa3, 0x7a, 0xa4, 0xb8, 0x52, 0xde, 0x7a, 0x56, 0x7f, 0xbf, 0x1b, 0xb4, 0xf7, 0x6f, 0x8f, + 0x4b, 0x3e, 0x63, 0x55, 0xa5, 0xbf, 0x00, 0xeb, 0x5f, 0x70, 0xd2, 0xb2, 0x21, 0xf8, 0xfe, 0xeb, + 0xdd, 0x30, 0xe4, 0x7c, 0xb6, 0x51, 0x89, 0xec, 0xd7, 0xa4, 0xd6, 0x51, 0xcd, 0xf6, 0x87, 0xa4, + 0x36, 0x3a, 0x39, 0x3b, 0xbc, 0xb4, 0xd4, 0xfd, 0x7c, 0xd4, 0x7d, 0x54, 0x1d, 0xfb, 0x72, 0xd4, + 0x83, 0x1e, 0xa4, 0x76, 0xf5, 0x59, 0xf4, 0xe6, 0x01, 0x9f, 0x4f, 0x58, 0x9e, 0x0c, 0xbe, 0xe7, + 0xdf, 0xe0, 0xe5, 0xf3, 0x61, 0xfd, 0x67, 0x63, 0xf4, 0x06, 0x25, 0xb6, 0x77, 0x10, 0x77, 0xd9, + 0xd9, 0x72, 0x3e, 0x11, 0xb1, 0x00, 0x77, 0x10, 0xe5, 0xdf, 0x87, 0xb5, 0x80, 0xb8, 0x83, 0xe8, + 0x01, 0xc0, 0xde, 0xb4, 0x64, 0x0c, 0xb5, 0x57, 0x0b, 0x82, 0xf6, 0x34, 0x60, 0xb3, 0x08, 0x63, + 0xaf, 0x4e, 0xd4, 0xe1, 0x9d, 0x41, 0xab, 0x23, 0xa5, 0x44, 0x16, 0xd1, 0xa6, 0x6c, 0x70, 0xab, + 0xea, 0xcb, 0xaf, 0xf9, 0x2c, 0x17, 0x8b, 0xb8, 0x5c, 0x81, 0xe0, 0xd6, 0xb5, 0x74, 0x00, 0x22, + 0xb8, 0x51, 0xd0, 0x8e, 0xda, 0xa6, 0x99, 0x67, 0x97, 0xfb, 0xbc, 0xe4, 0x4b, 0x91, 0xe6, 0x0c, + 0x7e, 0xd1, 0xc5, 0x34, 0xa8, 0xcb, 0x10, 0xa3, 0x96, 0x62, 0x6d, 0x96, 0x2b, 0x09, 0x75, 0x9d, + 0x51, 0x7e, 0x6a, 0xbf, 0x12, 0xbc, 0x84, 0x8f, 0x33, 0x95, 0x15, 0x08, 0x11, 0x59, 0x2e, 0x09, + 0x83, 0xbe, 0x3f, 0x4e, 0xf3, 0x39, 0xda, 0xf7, 0xc7, 0xee, 0x57, 0x95, 0x6f, 0xd1, 0x80, 0x1d, + 0x50, 0xaa, 0xd1, 0xd4, 0x00, 0xd0, 0xaf, 0x32, 0xa3, 0x8d, 0xee, 0x12, 0xc4, 0x80, 0xc2, 0x49, + 0xe0, 0xea, 0x8b, 0x82, 0xe5, 0x2c, 0x69, 0x2e, 0xed, 0x61, 0xae, 0x3c, 0x22, 0xe8, 0x0a, 0x92, + 0x76, 0x2e, 0x92, 0xf2, 0x93, 0x65, 0x7e, 0x5c, 0xf2, 0xf3, 0x34, 0x63, 0x25, 0x98, 0x8b, 0x94, + 0xba, 0x23, 0x27, 0xe6, 0x22, 0x8c, 0xb3, 0xb7, 0x3f, 0xa4, 0xd4, 0xfb, 0xbd, 0x88, 0x69, 0x19, + 0xcf, 0xe0, 0xed, 0x0f, 0x65, 0xa3, 0x8d, 0x11, 0x27, 0x83, 0x01, 0xdc, 0x49, 0x74, 0x94, 0xeb, + 0x7c, 0x25, 0xe3, 0x43, 0xbf, 0x4a, 0x2b, 0xbf, 0x35, 0x5c, 0x81, 0x44, 0x47, 0x9b, 0xc3, 0x48, + 0x22, 0xd1, 0x09, 0x6b, 0xd8, 0xa5, 0x44, 0x72, 0x47, 0xfa, 0x56, 0x13, 0x58, 0x4a, 0x94, 0x8d, + 0x46, 0x48, 0x2c, 0x25, 0x2d, 0x08, 0x4c, 0x48, 0xcd, 0x30, 0x98, 0xa3, 0x13, 0x92, 0x91, 0x06, + 0x27, 0x24, 0x97, 0xb2, 0x13, 0xc5, 0x38, 0x4f, 0x45, 0x1a, 0x67, 0x13, 0x26, 0x8e, 0xe3, 0x32, + 0x5e, 0x30, 0xc1, 0x4a, 0x38, 0x51, 0x68, 0x64, 0xe8, 0x31, 0xc4, 0x44, 0x41, 0xb1, 0xda, 0xe1, + 0xef, 0x45, 0x6f, 0xd7, 0xeb, 0x3e, 0xcb, 0xf5, 0x2f, 0x5d, 0x3d, 0x97, 0x3f, 0x91, 0x37, 0x78, + 0xc7, 0xd8, 0x98, 0x88, 0x92, 0xc5, 0x8b, 0xc6, 0xf6, 0x5b, 0xe6, 0xef, 0x12, 0x7c, 0xbc, 0x56, + 0xc7, 0xf3, 0x11, 0x17, 0xe9, 0x79, 0xbd, 0xcd, 0xd6, 0x2f, 0x30, 0x81, 0x78, 0x76, 0xc5, 0xc3, + 0xc0, 0xa7, 0x58, 0x30, 0xce, 0xce, 0xd3, 0xae, 0xf4, 0x84, 0x15, 0x19, 0x9c, 0xa7, 0x3d, 0x6d, + 0x09, 0x10, 0xf3, 0x34, 0x0a, 0xda, 0xc1, 0xe9, 0x8a, 0xa7, 0x2c, 0x5c, 0x99, 0x29, 0xeb, 0x57, + 0x99, 0xa9, 0xf7, 0x4e, 0x48, 0x16, 0xbd, 0x7d, 0xc8, 0x16, 0x67, 0xac, 0xac, 0x2e, 0xd2, 0x82, + 0xfa, 0x1e, 0xb2, 0x25, 0x3a, 0xbf, 0x87, 0x4c, 0xa0, 0x76, 0x25, 0xb0, 0xc0, 0xb8, 0x3a, 0x8a, + 0x17, 0x4c, 0x7e, 0x58, 0x06, 0xac, 0x04, 0x8e, 0x11, 0x07, 0x22, 0x56, 0x02, 0x12, 0x76, 0x5e, + 0x2f, 0xb3, 0xcc, 0x09, 0x9b, 0xd7, 0x11, 0x56, 0x1e, 0xc7, 0xab, 0x05, 0xcb, 0x85, 0x36, 0x09, + 0xce, 0xe4, 0x1d, 0x93, 0x38, 0x4f, 0x9c, 0xc9, 0xf7, 0xd1, 0x73, 0xa6, 0x26, 0xaf, 0xe1, 0x8f, + 0x79, 0x29, 0xd4, 0xef, 0xd8, 0x9d, 0x96, 0x19, 0x98, 0x9a, 0xfc, 0x46, 0xf5, 0x48, 0x62, 0x6a, + 0x0a, 0x6b, 0x38, 0xbf, 0x59, 0xe2, 0x95, 0xe1, 0x05, 0x2b, 0x4d, 0x9c, 0x3c, 0x5f, 0xc4, 0x69, + 0xa6, 0xa3, 0xe1, 0xfb, 0x01, 0xdb, 0x84, 0x0e, 0xf1, 0x9b, 0x25, 0x7d, 0x75, 0x9d, 0x5f, 0x79, + 0x09, 0x97, 0x10, 0x3c, 0x22, 0xe8, 0xb0, 0x4f, 0x3c, 0x22, 0xe8, 0xd6, 0xb2, 0x3b, 0x77, 0xcb, + 0x4a, 0x6e, 0x25, 0x89, 0x1d, 0x9e, 0xc0, 0xf3, 0x42, 0xc7, 0x26, 0x00, 0x89, 0x9d, 0x7b, 0x50, + 0xc1, 0xa6, 0x06, 0x16, 0xdb, 0x4b, 0xf3, 0x38, 0x4b, 0x7f, 0x0c, 0xd3, 0x7a, 0xc7, 0x4e, 0x43, + 0x10, 0xa9, 0x01, 0x4e, 0x62, 0xae, 0xf6, 0x99, 0x98, 0xa6, 0xf5, 0xd4, 0x7f, 0x3f, 0xd0, 0x6e, + 0x92, 0xe8, 0x76, 0xe5, 0x90, 0xce, 0xb7, 0x8f, 0x61, 0xb3, 0x8e, 0x8a, 0x62, 0x52, 0xaf, 0xaa, + 0x27, 0x6c, 0xc6, 0xd2, 0x42, 0x0c, 0x3e, 0x0a, 0xb7, 0x15, 0xc0, 0x89, 0x8b, 0x16, 0x3d, 0xd4, + 0x9c, 0xc7, 0xf7, 0xf5, 0x5c, 0x32, 0x51, 0x3f, 0xf0, 0x7a, 0x5a, 0xb1, 0x52, 0x27, 0x1a, 0xfb, + 0x4c, 0x80, 0xd1, 0xe9, 0x70, 0x43, 0x07, 0xac, 0x2b, 0x4a, 0x8c, 0xce, 0xb0, 0x86, 0x3d, 0xec, + 0x73, 0x38, 0xfd, 0xed, 0x00, 0x79, 0xdd, 0xf1, 0x11, 0x69, 0xcc, 0xa1, 0x88, 0xc3, 0x3e, 0x9a, + 0xb6, 0xd9, 0x5a, 0xdb, 0xed, 0x28, 0x5f, 0x8d, 0xe1, 0x95, 0x09, 0xc4, 0x92, 0xc4, 0x88, 0x6c, + 0x2d, 0x80, 0x3b, 0x87, 0xe1, 0x25, 0x8f, 0x93, 0x59, 0x5c, 0x89, 0xe3, 0x78, 0x95, 0xf1, 0x38, + 0x91, 0xeb, 0x3a, 0x3c, 0x0c, 0x6f, 0x98, 0xa1, 0x0b, 0x51, 0x87, 0xe1, 0x14, 0xec, 0x66, 0x67, + 0xf2, 0x77, 0x6b, 0xf5, 0x55, 0x52, 0x98, 0x9d, 0xc9, 0xf2, 0xc2, 0x6b, 0xa4, 0x77, 0xc3, 0x90, + 0x7d, 0x05, 0x4e, 0x89, 0x64, 0x1a, 0x72, 0x0b, 0xd3, 0xf1, 0x12, 0x90, 0xf7, 0x03, 0x84, 0xfd, + 0x2c, 0x8b, 0xfa, 0x7b, 0xf3, 0x53, 0x65, 0x42, 0x7f, 0x21, 0xfe, 0x11, 0xa6, 0xeb, 0x42, 0xde, + 0x0d, 0xb5, 0xad, 0x9e, 0xb4, 0x4d, 0x33, 0x77, 0x2e, 0x62, 0x31, 0x4a, 0x92, 0x43, 0x56, 0x21, + 0xef, 0xb3, 0xd7, 0xc2, 0xa1, 0x95, 0x12, 0x69, 0x66, 0x9b, 0xb2, 0x81, 0x5e, 0xcb, 0x9e, 0x27, + 0xa9, 0xd0, 0xb2, 0xe6, 0x82, 0xf6, 0xa3, 0xb6, 0x81, 0x36, 0x45, 0xd4, 0x8a, 0xa6, 0xed, 0x5c, + 0x5e, 0x33, 0x53, 0x3e, 0x9f, 0x67, 0x4c, 0x43, 0x27, 0x2c, 0x56, 0x1f, 0xc8, 0xdc, 0x6e, 0xdb, + 0x42, 0x41, 0x62, 0x2e, 0x0f, 0x2a, 0xd8, 0x34, 0xb2, 0xc6, 0xd4, 0x23, 0xa9, 0xa6, 0x61, 0x37, + 0xda, 0x66, 0x3c, 0x80, 0x48, 0x23, 0x51, 0xd0, 0xbe, 0x76, 0x57, 0x8b, 0xf7, 0x59, 0xd3, 0x12, + 0xf0, 0x0b, 0x5c, 0x52, 0xd9, 0x11, 0x13, 0xaf, 0xdd, 0x21, 0x98, 0xdd, 0x27, 0x00, 0x0f, 0xcf, + 0x56, 0xe3, 0x04, 0xee, 0x13, 0xa0, 0xbe, 0x64, 0x88, 0x7d, 0x02, 0xc5, 0xfa, 0x5d, 0x67, 0xce, + 0xbd, 0x0e, 0xe2, 0xca, 0x56, 0x0e, 0xe9, 0x3a, 0x14, 0x0c, 0x75, 0x1d, 0xa5, 0xe0, 0x37, 0xa9, + 0x7b, 0xb4, 0x86, 0x34, 0x29, 0x76, 0xae, 0xb6, 0xde, 0x85, 0xd9, 0xdc, 0xbf, 0x16, 0x9e, 0xb0, + 0x38, 0x31, 0x15, 0x43, 0x74, 0x5d, 0x39, 0x91, 0xfb, 0x63, 0x9c, 0x76, 0xf2, 0x87, 0xd1, 0x40, + 0x55, 0xa3, 0x74, 0xdd, 0xdc, 0xc2, 0x8a, 0x58, 0x13, 0xc4, 0x44, 0xe5, 0x13, 0x4e, 0xe2, 0xe6, + 0x75, 0xd1, 0x94, 0x6b, 0x07, 0xfa, 0xb5, 0xd0, 0x0a, 0x24, 0x6e, 0x7e, 0xb3, 0xb7, 0x68, 0x22, + 0x71, 0xeb, 0xd6, 0x72, 0x3e, 0x46, 0x04, 0xba, 0x6c, 0xaf, 0xe4, 0x0b, 0x58, 0xa6, 0x4f, 0x83, + 0xdd, 0x83, 0x68, 0x10, 0x1f, 0x23, 0xea, 0xa7, 0x69, 0xd7, 0x20, 0x73, 0x76, 0x20, 0xaf, 0xa7, + 0xe1, 0xbf, 0x82, 0xa2, 0x84, 0xc4, 0x1a, 0xd4, 0x82, 0x9c, 0x9f, 0x68, 0x1d, 0xbf, 0x2c, 0x53, + 0x91, 0xe6, 0xf3, 0x29, 0xe7, 0x19, 0x3c, 0xb2, 0x1c, 0x8d, 0x87, 0xae, 0x94, 0xfa, 0x89, 0xd6, + 0x16, 0x65, 0x97, 0xb8, 0xd1, 0x78, 0xb4, 0x14, 0xfc, 0x3c, 0xcd, 0x32, 0x10, 0x39, 0xa3, 0xf1, + 0xb0, 0x91, 0x10, 0x91, 0xe3, 0x13, 0xce, 0x0f, 0x8b, 0x8e, 0xe5, 0xe9, 0xbf, 0x3e, 0x01, 0xbd, + 0x03, 0x75, 0x1c, 0x21, 0xf5, 0xc3, 0xa2, 0x10, 0x72, 0x7e, 0x28, 0x75, 0x8c, 0xfd, 0x94, 0xcb, + 0x26, 0x54, 0x47, 0x20, 0xea, 0x87, 0x52, 0x29, 0xd8, 0x79, 0x27, 0xf9, 0x78, 0x59, 0x5d, 0xf8, + 0x47, 0x06, 0x6a, 0x73, 0xa8, 0x3e, 0xdb, 0xfa, 0x14, 0xfc, 0xa0, 0x90, 0xcf, 0x0e, 0x3d, 0x98, + 0xb8, 0x9e, 0xd6, 0xa9, 0xa4, 0x0a, 0xf3, 0xec, 0xfd, 0xff, 0xf9, 0xea, 0xc6, 0xda, 0xcf, 0xbe, + 0xba, 0xb1, 0xf6, 0x7f, 0x5f, 0xdd, 0x58, 0xfb, 0xe9, 0xd7, 0x37, 0xde, 0xf8, 0xd9, 0xd7, 0x37, + 0xde, 0xf8, 0xdf, 0xaf, 0x6f, 0xbc, 0xf1, 0xe5, 0x9b, 0x95, 0xca, 0xcd, 0xce, 0x7e, 0xb1, 0x28, + 0xb9, 0xe0, 0x4f, 0xff, 0x3f, 0x00, 0x00, 0xff, 0xff, 0xbe, 0x30, 0xcf, 0xb5, 0xee, 0x80, 0x00, + 0x00, } // This is a compile-time assertion to ensure that this generated file @@ -440,6 +441,7 @@ type ClientCommandsHandler interface { // *** SpaceDelete(context.Context, *pb.RpcSpaceDeleteRequest) *pb.RpcSpaceDeleteResponse SpaceInviteGenerate(context.Context, *pb.RpcSpaceInviteGenerateRequest) *pb.RpcSpaceInviteGenerateResponse + SpaceInviteChange(context.Context, *pb.RpcSpaceInviteChangeRequest) *pb.RpcSpaceInviteChangeResponse SpaceInviteGetCurrent(context.Context, *pb.RpcSpaceInviteGetCurrentRequest) *pb.RpcSpaceInviteGetCurrentResponse SpaceInviteGetGuest(context.Context, *pb.RpcSpaceInviteGetGuestRequest) *pb.RpcSpaceInviteGetGuestResponse SpaceInviteRevoke(context.Context, *pb.RpcSpaceInviteRevokeRequest) *pb.RpcSpaceInviteRevokeResponse @@ -1481,6 +1483,26 @@ func SpaceInviteGenerate(b []byte) (resp []byte) { return resp } +func SpaceInviteChange(b []byte) (resp []byte) { + defer func() { + if PanicHandler != nil { + if r := recover(); r != nil { + resp, _ = (&pb.RpcSpaceInviteChangeResponse{Error: &pb.RpcSpaceInviteChangeResponseError{Code: pb.RpcSpaceInviteChangeResponseError_UNKNOWN_ERROR, Description: "panic recovered"}}).Marshal() + PanicHandler(r) + } + } + }() + + in := new(pb.RpcSpaceInviteChangeRequest) + if err := in.Unmarshal(b); err != nil { + resp, _ = (&pb.RpcSpaceInviteChangeResponse{Error: &pb.RpcSpaceInviteChangeResponseError{Code: pb.RpcSpaceInviteChangeResponseError_BAD_INPUT, Description: err.Error()}}).Marshal() + return resp + } + + resp, _ = clientCommandsHandler.SpaceInviteChange(context.Background(), in).Marshal() + return resp +} + func SpaceInviteGetCurrent(b []byte) (resp []byte) { defer func() { if PanicHandler != nil { @@ -6699,6 +6721,8 @@ func CommandAsync(cmd string, data []byte, callback func(data []byte)) { cd = SpaceDelete(data) case "SpaceInviteGenerate": cd = SpaceInviteGenerate(data) + case "SpaceInviteChange": + cd = SpaceInviteChange(data) case "SpaceInviteGetCurrent": cd = SpaceInviteGetCurrent(data) case "SpaceInviteGetGuest": @@ -7739,6 +7763,20 @@ func (h *ClientCommandsHandlerProxy) SpaceInviteGenerate(ctx context.Context, re call, _ := actualCall(ctx, req) return call.(*pb.RpcSpaceInviteGenerateResponse) } +func (h *ClientCommandsHandlerProxy) SpaceInviteChange(ctx context.Context, req *pb.RpcSpaceInviteChangeRequest) *pb.RpcSpaceInviteChangeResponse { + actualCall := func(ctx context.Context, req any) (any, error) { + return h.client.SpaceInviteChange(ctx, req.(*pb.RpcSpaceInviteChangeRequest)), nil + } + for _, interceptor := range h.interceptors { + toCall := actualCall + currentInterceptor := interceptor + actualCall = func(ctx context.Context, req any) (any, error) { + return currentInterceptor(ctx, req, "SpaceInviteChange", toCall) + } + } + call, _ := actualCall(ctx, req) + return call.(*pb.RpcSpaceInviteChangeResponse) +} func (h *ClientCommandsHandlerProxy) SpaceInviteGetCurrent(ctx context.Context, req *pb.RpcSpaceInviteGetCurrentRequest) *pb.RpcSpaceInviteGetCurrentResponse { actualCall := func(ctx context.Context, req any) (any, error) { return h.client.SpaceInviteGetCurrent(ctx, req.(*pb.RpcSpaceInviteGetCurrentRequest)), nil diff --git a/core/acl/aclservice.go b/core/acl/aclservice.go index c664469b7..cc310cc0a 100644 --- a/core/acl/aclservice.go +++ b/core/acl/aclservice.go @@ -9,6 +9,7 @@ import ( "github.com/anyproto/any-sync/app" "github.com/anyproto/any-sync/commonspace/acl/aclclient" + "github.com/anyproto/any-sync/commonspace/object/acl/aclrecordproto" "github.com/anyproto/any-sync/commonspace/object/acl/list" "github.com/anyproto/any-sync/commonspace/object/acl/recordverifier" "github.com/anyproto/any-sync/coordinator/coordinatorclient" @@ -47,6 +48,7 @@ type AccountPermissions struct { type AclService interface { app.Component GenerateInvite(ctx context.Context, spaceId string, inviteType model.InviteType, permissions model.ParticipantPermissions) (domain.InviteInfo, error) + ChangeInvite(ctx context.Context, spaceId string, permissions model.ParticipantPermissions) error RevokeInvite(ctx context.Context, spaceId string) error GetCurrentInvite(ctx context.Context, spaceId string) (domain.InviteInfo, error) GetGuestUserInvite(ctx context.Context, spaceId string) (domain.InviteInfo, error) @@ -562,6 +564,48 @@ func (a *aclService) GetCurrentInvite(ctx context.Context, spaceId string) (doma return a.inviteService.GetCurrent(ctx, spaceId) } +func (a *aclService) ChangeInvite(ctx context.Context, spaceId string, permissions model.ParticipantPermissions) (err error) { + if spaceId == a.accountService.PersonalSpaceID() { + err = ErrPersonalSpace + return + } + current, err := a.inviteService.GetCurrent(ctx, spaceId) + if err == nil { + if current.InviteType != domain.InviteTypeAnyone { + return inviteservice.ErrInviteNotExists + } + } + acceptSpace, err := a.spaceService.Get(ctx, spaceId) + if err != nil { + return convertedOrSpaceErr(err) + } + aclClient := acceptSpace.CommonSpace().AclClient() + acl := acceptSpace.CommonSpace().Acl() + acl.RLock() + invites := acl.AclState().Invites(aclrecordproto.AclInviteType_AnyoneCanJoin) + if len(invites) == 0 { + acl.RUnlock() + return inviteservice.ErrInviteNotExists + } + acl.RUnlock() + var ( + invite = invites[0] + invitePermissions = domain.ConvertParticipantPermissions(permissions) + ) + if invite.Permissions == invitePermissions { + return ErrIncorrectPermissions + } + err = aclClient.ChangeInvite(ctx, invites[0].Id, invitePermissions) + if err != nil { + return convertedOrAclRequestError(err) + } + err = a.inviteService.Change(ctx, spaceId, invitePermissions) + if err != nil { + return convertedOrInternalError("change invite", err) + } + return nil +} + func (a *aclService) GenerateInvite(ctx context.Context, spaceId string, invType model.InviteType, permissions model.ParticipantPermissions) (result domain.InviteInfo, err error) { if spaceId == a.accountService.PersonalSpaceID() { err = ErrPersonalSpace diff --git a/core/block/editor/workspaces.go b/core/block/editor/workspaces.go index e8105f756..1d26b0795 100644 --- a/core/block/editor/workspaces.go +++ b/core/block/editor/workspaces.go @@ -113,12 +113,15 @@ func (w *Workspaces) GetExistingInviteInfo() (inviteInfo domain.InviteInfo) { return } -func (w *Workspaces) RemoveExistingInviteInfo() (fileCid string, err error) { - details := w.Details() - fileCid = details.GetString(bundle.RelationKeySpaceInviteFileCid) +func (w *Workspaces) RemoveExistingInviteInfo() (info domain.InviteInfo, err error) { + info = w.GetExistingInviteInfo() newState := w.NewState() - newState.RemoveDetail(bundle.RelationKeySpaceInviteFileCid, bundle.RelationKeySpaceInviteFileKey) - return fileCid, w.Apply(newState) + newState.RemoveDetail( + bundle.RelationKeySpaceInviteFileCid, + bundle.RelationKeySpaceInviteFileKey, + bundle.RelationKeySpaceInvitePermissions, + bundle.RelationKeySpaceInviteType) + return info, w.Apply(newState) } func (w *Workspaces) SetGuestInviteFileInfo(fileCid string, fileKey string) (err error) { diff --git a/core/inviteservice/inviteservice.go b/core/inviteservice/inviteservice.go index fa568b197..49f7d704a 100644 --- a/core/inviteservice/inviteservice.go +++ b/core/inviteservice/inviteservice.go @@ -34,6 +34,7 @@ type InviteService interface { View(ctx context.Context, inviteCid cid.Cid, inviteFileKey crypto.SymKey) (domain.InviteView, error) RemoveExisting(ctx context.Context, spaceId string) error Generate(ctx context.Context, params GenerateInviteParams, sendInvite func() error) (domain.InviteInfo, error) + Change(ctx context.Context, spaceId string, permissions list.AclPermissions) error GetCurrent(ctx context.Context, spaceId string) (domain.InviteInfo, error) GetExistingGuestUserInvite(ctx context.Context, spaceId string) (domain.InviteInfo, error) GenerateGuestUserInvite(ctx context.Context, spaceId string, guestKey crypto.PrivKey) (domain.InviteInfo, error) @@ -96,6 +97,14 @@ func (i *inviteService) View(ctx context.Context, inviteCid cid.Cid, inviteFileK }, nil } +func (i *inviteService) Change(ctx context.Context, spaceId string, permissions list.AclPermissions) error { + return i.doInviteObject(ctx, spaceId, func(obj domain.InviteObject) error { + info := obj.GetExistingInviteInfo() + info.Permissions = permissions + return obj.SetInviteFileInfo(info) + }) +} + func (i *inviteService) GetCurrent(ctx context.Context, spaceId string) (info domain.InviteInfo, err error) { err = i.doInviteObject(ctx, spaceId, func(obj domain.InviteObject) error { info = obj.GetExistingInviteInfo() diff --git a/core/space.go b/core/space.go index cc3f046ef..f79e8691c 100644 --- a/core/space.go +++ b/core/space.go @@ -86,6 +86,26 @@ func (mw *Middleware) SpaceInviteGenerate(cctx context.Context, req *pb.RpcSpace } } +func (mw *Middleware) SpaceInviteChange(cctx context.Context, req *pb.RpcSpaceInviteChangeRequest) *pb.RpcSpaceInviteChangeResponse { + aclService := mustService[acl.AclService](mw) + err := aclService.ChangeInvite(cctx, req.SpaceId, req.Permissions) + if err != nil { + code := mapErrorCode(err, + errToCode(space.ErrSpaceDeleted, pb.RpcSpaceInviteChangeResponseError_SPACE_IS_DELETED), + errToCode(space.ErrSpaceNotExists, pb.RpcSpaceInviteChangeResponseError_NO_SUCH_SPACE), + errToCode(acl.ErrPersonalSpace, pb.RpcSpaceInviteChangeResponseError_BAD_INPUT), + errToCode(acl.ErrAclRequestFailed, pb.RpcSpaceInviteChangeResponseError_REQUEST_FAILED), + ) + return &pb.RpcSpaceInviteChangeResponse{ + Error: &pb.RpcSpaceInviteChangeResponseError{ + Code: code, + Description: getErrorDescription(err), + }, + } + } + return &pb.RpcSpaceInviteChangeResponse{} +} + func (mw *Middleware) SpaceInviteGetCurrent(cctx context.Context, req *pb.RpcSpaceInviteGetCurrentRequest) *pb.RpcSpaceInviteGetCurrentResponse { aclService := mustService[acl.AclService](mw) inviteInfo, err := aclService.GetCurrentInvite(cctx, req.SpaceId) diff --git a/docs/proto.md b/docs/proto.md index 4811aa497..a9b7bcbf4 100644 --- a/docs/proto.md +++ b/docs/proto.md @@ -1201,6 +1201,10 @@ - [Rpc.Space.Delete.Request](#anytype-Rpc-Space-Delete-Request) - [Rpc.Space.Delete.Response](#anytype-Rpc-Space-Delete-Response) - [Rpc.Space.Delete.Response.Error](#anytype-Rpc-Space-Delete-Response-Error) + - [Rpc.Space.InviteChange](#anytype-Rpc-Space-InviteChange) + - [Rpc.Space.InviteChange.Request](#anytype-Rpc-Space-InviteChange-Request) + - [Rpc.Space.InviteChange.Response](#anytype-Rpc-Space-InviteChange-Response) + - [Rpc.Space.InviteChange.Response.Error](#anytype-Rpc-Space-InviteChange-Response-Error) - [Rpc.Space.InviteGenerate](#anytype-Rpc-Space-InviteGenerate) - [Rpc.Space.InviteGenerate.Request](#anytype-Rpc-Space-InviteGenerate-Request) - [Rpc.Space.InviteGenerate.Response](#anytype-Rpc-Space-InviteGenerate-Response) @@ -1641,6 +1645,7 @@ - [Rpc.Relation.ListWithValue.Response.Error.Code](#anytype-Rpc-Relation-ListWithValue-Response-Error-Code) - [Rpc.Relation.Options.Response.Error.Code](#anytype-Rpc-Relation-Options-Response-Error-Code) - [Rpc.Space.Delete.Response.Error.Code](#anytype-Rpc-Space-Delete-Response-Error-Code) + - [Rpc.Space.InviteChange.Response.Error.Code](#anytype-Rpc-Space-InviteChange-Response-Error-Code) - [Rpc.Space.InviteGenerate.Response.Error.Code](#anytype-Rpc-Space-InviteGenerate-Response-Error-Code) - [Rpc.Space.InviteGetCurrent.Response.Error.Code](#anytype-Rpc-Space-InviteGetCurrent-Response-Error-Code) - [Rpc.Space.InviteGetGuest.Response.Error.Code](#anytype-Rpc-Space-InviteGetGuest-Response-Error-Code) @@ -2145,6 +2150,7 @@ | AccountChangeNetworkConfigAndRestart | [Rpc.Account.ChangeNetworkConfigAndRestart.Request](#anytype-Rpc-Account-ChangeNetworkConfigAndRestart-Request) | [Rpc.Account.ChangeNetworkConfigAndRestart.Response](#anytype-Rpc-Account-ChangeNetworkConfigAndRestart-Response) | | | SpaceDelete | [Rpc.Space.Delete.Request](#anytype-Rpc-Space-Delete-Request) | [Rpc.Space.Delete.Response](#anytype-Rpc-Space-Delete-Response) | Space *** | | SpaceInviteGenerate | [Rpc.Space.InviteGenerate.Request](#anytype-Rpc-Space-InviteGenerate-Request) | [Rpc.Space.InviteGenerate.Response](#anytype-Rpc-Space-InviteGenerate-Response) | | +| SpaceInviteChange | [Rpc.Space.InviteChange.Request](#anytype-Rpc-Space-InviteChange-Request) | [Rpc.Space.InviteChange.Response](#anytype-Rpc-Space-InviteChange-Response) | | | SpaceInviteGetCurrent | [Rpc.Space.InviteGetCurrent.Request](#anytype-Rpc-Space-InviteGetCurrent-Request) | [Rpc.Space.InviteGetCurrent.Response](#anytype-Rpc-Space-InviteGetCurrent-Response) | | | SpaceInviteGetGuest | [Rpc.Space.InviteGetGuest.Request](#anytype-Rpc-Space-InviteGetGuest-Request) | [Rpc.Space.InviteGetGuest.Response](#anytype-Rpc-Space-InviteGetGuest-Response) | | | SpaceInviteRevoke | [Rpc.Space.InviteRevoke.Request](#anytype-Rpc-Space-InviteRevoke-Request) | [Rpc.Space.InviteRevoke.Response](#anytype-Rpc-Space-InviteRevoke-Response) | | @@ -19845,6 +19851,63 @@ Available undo/redo operations + + +### Rpc.Space.InviteChange + + + + + + + + + +### Rpc.Space.InviteChange.Request + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| spaceId | [string](#string) | | | +| permissions | [model.ParticipantPermissions](#anytype-model-ParticipantPermissions) | | | + + + + + + + + +### Rpc.Space.InviteChange.Response + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| error | [Rpc.Space.InviteChange.Response.Error](#anytype-Rpc-Space-InviteChange-Response-Error) | | | + + + + + + + + +### Rpc.Space.InviteChange.Response.Error + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| code | [Rpc.Space.InviteChange.Response.Error.Code](#anytype-Rpc-Space-InviteChange-Response-Error-Code) | | | +| description | [string](#string) | | | + + + + + + ### Rpc.Space.InviteGenerate @@ -25986,6 +26049,23 @@ Middleware-to-front-end response, that can contain a NULL error or a non-NULL er + + +### Rpc.Space.InviteChange.Response.Error.Code + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| NULL | 0 | | +| UNKNOWN_ERROR | 1 | | +| BAD_INPUT | 2 | | +| NO_SUCH_SPACE | 101 | | +| SPACE_IS_DELETED | 102 | | +| REQUEST_FAILED | 103 | | +| INCORRECT_PERMISSIONS | 105 | | + + + ### Rpc.Space.InviteGenerate.Response.Error.Code diff --git a/pb/commands.pb.go b/pb/commands.pb.go index 6df6defe7..29078ac9a 100644 --- a/pb/commands.pb.go +++ b/pb/commands.pb.go @@ -221,6 +221,46 @@ func (RpcSpaceMakeShareableResponseErrorCode) EnumDescriptor() ([]byte, []int) { return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 1, 1, 0, 0} } +type RpcSpaceInviteChangeResponseErrorCode int32 + +const ( + RpcSpaceInviteChangeResponseError_NULL RpcSpaceInviteChangeResponseErrorCode = 0 + RpcSpaceInviteChangeResponseError_UNKNOWN_ERROR RpcSpaceInviteChangeResponseErrorCode = 1 + RpcSpaceInviteChangeResponseError_BAD_INPUT RpcSpaceInviteChangeResponseErrorCode = 2 + RpcSpaceInviteChangeResponseError_NO_SUCH_SPACE RpcSpaceInviteChangeResponseErrorCode = 101 + RpcSpaceInviteChangeResponseError_SPACE_IS_DELETED RpcSpaceInviteChangeResponseErrorCode = 102 + RpcSpaceInviteChangeResponseError_REQUEST_FAILED RpcSpaceInviteChangeResponseErrorCode = 103 + RpcSpaceInviteChangeResponseError_INCORRECT_PERMISSIONS RpcSpaceInviteChangeResponseErrorCode = 105 +) + +var RpcSpaceInviteChangeResponseErrorCode_name = map[int32]string{ + 0: "NULL", + 1: "UNKNOWN_ERROR", + 2: "BAD_INPUT", + 101: "NO_SUCH_SPACE", + 102: "SPACE_IS_DELETED", + 103: "REQUEST_FAILED", + 105: "INCORRECT_PERMISSIONS", +} + +var RpcSpaceInviteChangeResponseErrorCode_value = map[string]int32{ + "NULL": 0, + "UNKNOWN_ERROR": 1, + "BAD_INPUT": 2, + "NO_SUCH_SPACE": 101, + "SPACE_IS_DELETED": 102, + "REQUEST_FAILED": 103, + "INCORRECT_PERMISSIONS": 105, +} + +func (x RpcSpaceInviteChangeResponseErrorCode) String() string { + return proto.EnumName(RpcSpaceInviteChangeResponseErrorCode_name, int32(x)) +} + +func (RpcSpaceInviteChangeResponseErrorCode) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 2, 1, 0, 0} +} + type RpcSpaceInviteGenerateResponseErrorCode int32 const ( @@ -261,7 +301,7 @@ func (x RpcSpaceInviteGenerateResponseErrorCode) String() string { } func (RpcSpaceInviteGenerateResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 2, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 3, 1, 0, 0} } type RpcSpaceStopSharingResponseErrorCode int32 @@ -301,7 +341,7 @@ func (x RpcSpaceStopSharingResponseErrorCode) String() string { } func (RpcSpaceStopSharingResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 3, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 4, 1, 0, 0} } type RpcSpaceInviteGetCurrentResponseErrorCode int32 @@ -332,7 +372,7 @@ func (x RpcSpaceInviteGetCurrentResponseErrorCode) String() string { } func (RpcSpaceInviteGetCurrentResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 4, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 5, 1, 0, 0} } type RpcSpaceInviteGetGuestResponseErrorCode int32 @@ -363,7 +403,7 @@ func (x RpcSpaceInviteGetGuestResponseErrorCode) String() string { } func (RpcSpaceInviteGetGuestResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 5, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 6, 1, 0, 0} } type RpcSpaceInviteRevokeResponseErrorCode int32 @@ -406,7 +446,7 @@ func (x RpcSpaceInviteRevokeResponseErrorCode) String() string { } func (RpcSpaceInviteRevokeResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 6, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 7, 1, 0, 0} } type RpcSpaceInviteViewResponseErrorCode int32 @@ -443,7 +483,7 @@ func (x RpcSpaceInviteViewResponseErrorCode) String() string { } func (RpcSpaceInviteViewResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 7, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 8, 1, 0, 0} } type RpcSpaceJoinResponseErrorCode int32 @@ -495,7 +535,7 @@ func (x RpcSpaceJoinResponseErrorCode) String() string { } func (RpcSpaceJoinResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 8, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 9, 1, 0, 0} } type RpcSpaceJoinCancelResponseErrorCode int32 @@ -541,7 +581,7 @@ func (x RpcSpaceJoinCancelResponseErrorCode) String() string { } func (RpcSpaceJoinCancelResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 9, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 10, 1, 0, 0} } type RpcSpaceRequestApproveResponseErrorCode int32 @@ -590,7 +630,7 @@ func (x RpcSpaceRequestApproveResponseErrorCode) String() string { } func (RpcSpaceRequestApproveResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 10, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 11, 1, 0, 0} } type RpcSpaceRequestDeclineResponseErrorCode int32 @@ -636,7 +676,7 @@ func (x RpcSpaceRequestDeclineResponseErrorCode) String() string { } func (RpcSpaceRequestDeclineResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 11, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 12, 1, 0, 0} } type RpcSpaceParticipantRemoveResponseErrorCode int32 @@ -682,7 +722,7 @@ func (x RpcSpaceParticipantRemoveResponseErrorCode) String() string { } func (RpcSpaceParticipantRemoveResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 12, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 13, 1, 0, 0} } type RpcSpaceParticipantPermissionsChangeResponseErrorCode int32 @@ -731,7 +771,7 @@ func (x RpcSpaceParticipantPermissionsChangeResponseErrorCode) String() string { } func (RpcSpaceParticipantPermissionsChangeResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 13, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 14, 1, 0, 0} } type RpcSpaceDeleteResponseErrorCode int32 @@ -774,7 +814,7 @@ func (x RpcSpaceDeleteResponseErrorCode) String() string { } func (RpcSpaceDeleteResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 14, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 15, 1, 0, 0} } type RpcSpaceSetOrderResponseErrorCode int32 @@ -802,7 +842,7 @@ func (x RpcSpaceSetOrderResponseErrorCode) String() string { } func (RpcSpaceSetOrderResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 15, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 16, 1, 0, 0} } type RpcSpaceUnsetOrderResponseErrorCode int32 @@ -830,7 +870,7 @@ func (x RpcSpaceUnsetOrderResponseErrorCode) String() string { } func (RpcSpaceUnsetOrderResponseErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 16, 1, 0, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 17, 1, 0, 0} } type RpcWalletCreateResponseErrorCode int32 @@ -11067,6 +11107,190 @@ func (m *RpcSpaceMakeShareableResponseError) GetDescription() string { return "" } +type RpcSpaceInviteChange struct { +} + +func (m *RpcSpaceInviteChange) Reset() { *m = RpcSpaceInviteChange{} } +func (m *RpcSpaceInviteChange) String() string { return proto.CompactTextString(m) } +func (*RpcSpaceInviteChange) ProtoMessage() {} +func (*RpcSpaceInviteChange) Descriptor() ([]byte, []int) { + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 2} +} +func (m *RpcSpaceInviteChange) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RpcSpaceInviteChange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RpcSpaceInviteChange.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RpcSpaceInviteChange) XXX_Merge(src proto.Message) { + xxx_messageInfo_RpcSpaceInviteChange.Merge(m, src) +} +func (m *RpcSpaceInviteChange) XXX_Size() int { + return m.Size() +} +func (m *RpcSpaceInviteChange) XXX_DiscardUnknown() { + xxx_messageInfo_RpcSpaceInviteChange.DiscardUnknown(m) +} + +var xxx_messageInfo_RpcSpaceInviteChange proto.InternalMessageInfo + +type RpcSpaceInviteChangeRequest struct { + SpaceId string `protobuf:"bytes,1,opt,name=spaceId,proto3" json:"spaceId,omitempty"` + Permissions model.ParticipantPermissions `protobuf:"varint,2,opt,name=permissions,proto3,enum=anytype.model.ParticipantPermissions" json:"permissions,omitempty"` +} + +func (m *RpcSpaceInviteChangeRequest) Reset() { *m = RpcSpaceInviteChangeRequest{} } +func (m *RpcSpaceInviteChangeRequest) String() string { return proto.CompactTextString(m) } +func (*RpcSpaceInviteChangeRequest) ProtoMessage() {} +func (*RpcSpaceInviteChangeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 2, 0} +} +func (m *RpcSpaceInviteChangeRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RpcSpaceInviteChangeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RpcSpaceInviteChangeRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RpcSpaceInviteChangeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_RpcSpaceInviteChangeRequest.Merge(m, src) +} +func (m *RpcSpaceInviteChangeRequest) XXX_Size() int { + return m.Size() +} +func (m *RpcSpaceInviteChangeRequest) XXX_DiscardUnknown() { + xxx_messageInfo_RpcSpaceInviteChangeRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_RpcSpaceInviteChangeRequest proto.InternalMessageInfo + +func (m *RpcSpaceInviteChangeRequest) GetSpaceId() string { + if m != nil { + return m.SpaceId + } + return "" +} + +func (m *RpcSpaceInviteChangeRequest) GetPermissions() model.ParticipantPermissions { + if m != nil { + return m.Permissions + } + return model.ParticipantPermissions_Reader +} + +type RpcSpaceInviteChangeResponse struct { + Error *RpcSpaceInviteChangeResponseError `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` +} + +func (m *RpcSpaceInviteChangeResponse) Reset() { *m = RpcSpaceInviteChangeResponse{} } +func (m *RpcSpaceInviteChangeResponse) String() string { return proto.CompactTextString(m) } +func (*RpcSpaceInviteChangeResponse) ProtoMessage() {} +func (*RpcSpaceInviteChangeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 2, 1} +} +func (m *RpcSpaceInviteChangeResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RpcSpaceInviteChangeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RpcSpaceInviteChangeResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RpcSpaceInviteChangeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_RpcSpaceInviteChangeResponse.Merge(m, src) +} +func (m *RpcSpaceInviteChangeResponse) XXX_Size() int { + return m.Size() +} +func (m *RpcSpaceInviteChangeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_RpcSpaceInviteChangeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_RpcSpaceInviteChangeResponse proto.InternalMessageInfo + +func (m *RpcSpaceInviteChangeResponse) GetError() *RpcSpaceInviteChangeResponseError { + if m != nil { + return m.Error + } + return nil +} + +type RpcSpaceInviteChangeResponseError struct { + Code RpcSpaceInviteChangeResponseErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=anytype.RpcSpaceInviteChangeResponseErrorCode" json:"code,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` +} + +func (m *RpcSpaceInviteChangeResponseError) Reset() { *m = RpcSpaceInviteChangeResponseError{} } +func (m *RpcSpaceInviteChangeResponseError) String() string { return proto.CompactTextString(m) } +func (*RpcSpaceInviteChangeResponseError) ProtoMessage() {} +func (*RpcSpaceInviteChangeResponseError) Descriptor() ([]byte, []int) { + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 2, 1, 0} +} +func (m *RpcSpaceInviteChangeResponseError) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RpcSpaceInviteChangeResponseError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RpcSpaceInviteChangeResponseError.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RpcSpaceInviteChangeResponseError) XXX_Merge(src proto.Message) { + xxx_messageInfo_RpcSpaceInviteChangeResponseError.Merge(m, src) +} +func (m *RpcSpaceInviteChangeResponseError) XXX_Size() int { + return m.Size() +} +func (m *RpcSpaceInviteChangeResponseError) XXX_DiscardUnknown() { + xxx_messageInfo_RpcSpaceInviteChangeResponseError.DiscardUnknown(m) +} + +var xxx_messageInfo_RpcSpaceInviteChangeResponseError proto.InternalMessageInfo + +func (m *RpcSpaceInviteChangeResponseError) GetCode() RpcSpaceInviteChangeResponseErrorCode { + if m != nil { + return m.Code + } + return RpcSpaceInviteChangeResponseError_NULL +} + +func (m *RpcSpaceInviteChangeResponseError) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + type RpcSpaceInviteGenerate struct { } @@ -11074,7 +11298,7 @@ func (m *RpcSpaceInviteGenerate) Reset() { *m = RpcSpaceInviteGenerate{} func (m *RpcSpaceInviteGenerate) String() string { return proto.CompactTextString(m) } func (*RpcSpaceInviteGenerate) ProtoMessage() {} func (*RpcSpaceInviteGenerate) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 2} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 3} } func (m *RpcSpaceInviteGenerate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11113,7 +11337,7 @@ func (m *RpcSpaceInviteGenerateRequest) Reset() { *m = RpcSpaceInviteGen func (m *RpcSpaceInviteGenerateRequest) String() string { return proto.CompactTextString(m) } func (*RpcSpaceInviteGenerateRequest) ProtoMessage() {} func (*RpcSpaceInviteGenerateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 2, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 3, 0} } func (m *RpcSpaceInviteGenerateRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11173,7 +11397,7 @@ func (m *RpcSpaceInviteGenerateResponse) Reset() { *m = RpcSpaceInviteGe func (m *RpcSpaceInviteGenerateResponse) String() string { return proto.CompactTextString(m) } func (*RpcSpaceInviteGenerateResponse) ProtoMessage() {} func (*RpcSpaceInviteGenerateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 2, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 3, 1} } func (m *RpcSpaceInviteGenerateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11232,7 +11456,7 @@ func (m *RpcSpaceInviteGenerateResponseError) Reset() { *m = RpcSpaceInv func (m *RpcSpaceInviteGenerateResponseError) String() string { return proto.CompactTextString(m) } func (*RpcSpaceInviteGenerateResponseError) ProtoMessage() {} func (*RpcSpaceInviteGenerateResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 2, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 3, 1, 0} } func (m *RpcSpaceInviteGenerateResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11282,7 +11506,7 @@ func (m *RpcSpaceStopSharing) Reset() { *m = RpcSpaceStopSharing{} } func (m *RpcSpaceStopSharing) String() string { return proto.CompactTextString(m) } func (*RpcSpaceStopSharing) ProtoMessage() {} func (*RpcSpaceStopSharing) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 3} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 4} } func (m *RpcSpaceStopSharing) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11319,7 +11543,7 @@ func (m *RpcSpaceStopSharingRequest) Reset() { *m = RpcSpaceStopSharingR func (m *RpcSpaceStopSharingRequest) String() string { return proto.CompactTextString(m) } func (*RpcSpaceStopSharingRequest) ProtoMessage() {} func (*RpcSpaceStopSharingRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 3, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 4, 0} } func (m *RpcSpaceStopSharingRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11363,7 +11587,7 @@ func (m *RpcSpaceStopSharingResponse) Reset() { *m = RpcSpaceStopSharing func (m *RpcSpaceStopSharingResponse) String() string { return proto.CompactTextString(m) } func (*RpcSpaceStopSharingResponse) ProtoMessage() {} func (*RpcSpaceStopSharingResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 3, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 4, 1} } func (m *RpcSpaceStopSharingResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11408,7 +11632,7 @@ func (m *RpcSpaceStopSharingResponseError) Reset() { *m = RpcSpaceStopSh func (m *RpcSpaceStopSharingResponseError) String() string { return proto.CompactTextString(m) } func (*RpcSpaceStopSharingResponseError) ProtoMessage() {} func (*RpcSpaceStopSharingResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 3, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 4, 1, 0} } func (m *RpcSpaceStopSharingResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11458,7 +11682,7 @@ func (m *RpcSpaceInviteGetCurrent) Reset() { *m = RpcSpaceInviteGetCurre func (m *RpcSpaceInviteGetCurrent) String() string { return proto.CompactTextString(m) } func (*RpcSpaceInviteGetCurrent) ProtoMessage() {} func (*RpcSpaceInviteGetCurrent) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 4} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 5} } func (m *RpcSpaceInviteGetCurrent) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11495,7 +11719,7 @@ func (m *RpcSpaceInviteGetCurrentRequest) Reset() { *m = RpcSpaceInviteG func (m *RpcSpaceInviteGetCurrentRequest) String() string { return proto.CompactTextString(m) } func (*RpcSpaceInviteGetCurrentRequest) ProtoMessage() {} func (*RpcSpaceInviteGetCurrentRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 4, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 5, 0} } func (m *RpcSpaceInviteGetCurrentRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11541,7 +11765,7 @@ func (m *RpcSpaceInviteGetCurrentResponse) Reset() { *m = RpcSpaceInvite func (m *RpcSpaceInviteGetCurrentResponse) String() string { return proto.CompactTextString(m) } func (*RpcSpaceInviteGetCurrentResponse) ProtoMessage() {} func (*RpcSpaceInviteGetCurrentResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 4, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 5, 1} } func (m *RpcSpaceInviteGetCurrentResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11600,7 +11824,7 @@ func (m *RpcSpaceInviteGetCurrentResponseError) Reset() { *m = RpcSpaceI func (m *RpcSpaceInviteGetCurrentResponseError) String() string { return proto.CompactTextString(m) } func (*RpcSpaceInviteGetCurrentResponseError) ProtoMessage() {} func (*RpcSpaceInviteGetCurrentResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 4, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 5, 1, 0} } func (m *RpcSpaceInviteGetCurrentResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11650,7 +11874,7 @@ func (m *RpcSpaceInviteGetGuest) Reset() { *m = RpcSpaceInviteGetGuest{} func (m *RpcSpaceInviteGetGuest) String() string { return proto.CompactTextString(m) } func (*RpcSpaceInviteGetGuest) ProtoMessage() {} func (*RpcSpaceInviteGetGuest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 5} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 6} } func (m *RpcSpaceInviteGetGuest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11687,7 +11911,7 @@ func (m *RpcSpaceInviteGetGuestRequest) Reset() { *m = RpcSpaceInviteGet func (m *RpcSpaceInviteGetGuestRequest) String() string { return proto.CompactTextString(m) } func (*RpcSpaceInviteGetGuestRequest) ProtoMessage() {} func (*RpcSpaceInviteGetGuestRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 5, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 6, 0} } func (m *RpcSpaceInviteGetGuestRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11733,7 +11957,7 @@ func (m *RpcSpaceInviteGetGuestResponse) Reset() { *m = RpcSpaceInviteGe func (m *RpcSpaceInviteGetGuestResponse) String() string { return proto.CompactTextString(m) } func (*RpcSpaceInviteGetGuestResponse) ProtoMessage() {} func (*RpcSpaceInviteGetGuestResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 5, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 6, 1} } func (m *RpcSpaceInviteGetGuestResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11792,7 +12016,7 @@ func (m *RpcSpaceInviteGetGuestResponseError) Reset() { *m = RpcSpaceInv func (m *RpcSpaceInviteGetGuestResponseError) String() string { return proto.CompactTextString(m) } func (*RpcSpaceInviteGetGuestResponseError) ProtoMessage() {} func (*RpcSpaceInviteGetGuestResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 5, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 6, 1, 0} } func (m *RpcSpaceInviteGetGuestResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11842,7 +12066,7 @@ func (m *RpcSpaceInviteRevoke) Reset() { *m = RpcSpaceInviteRevoke{} } func (m *RpcSpaceInviteRevoke) String() string { return proto.CompactTextString(m) } func (*RpcSpaceInviteRevoke) ProtoMessage() {} func (*RpcSpaceInviteRevoke) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 6} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 7} } func (m *RpcSpaceInviteRevoke) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11879,7 +12103,7 @@ func (m *RpcSpaceInviteRevokeRequest) Reset() { *m = RpcSpaceInviteRevok func (m *RpcSpaceInviteRevokeRequest) String() string { return proto.CompactTextString(m) } func (*RpcSpaceInviteRevokeRequest) ProtoMessage() {} func (*RpcSpaceInviteRevokeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 6, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 7, 0} } func (m *RpcSpaceInviteRevokeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11923,7 +12147,7 @@ func (m *RpcSpaceInviteRevokeResponse) Reset() { *m = RpcSpaceInviteRevo func (m *RpcSpaceInviteRevokeResponse) String() string { return proto.CompactTextString(m) } func (*RpcSpaceInviteRevokeResponse) ProtoMessage() {} func (*RpcSpaceInviteRevokeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 6, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 7, 1} } func (m *RpcSpaceInviteRevokeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11968,7 +12192,7 @@ func (m *RpcSpaceInviteRevokeResponseError) Reset() { *m = RpcSpaceInvit func (m *RpcSpaceInviteRevokeResponseError) String() string { return proto.CompactTextString(m) } func (*RpcSpaceInviteRevokeResponseError) ProtoMessage() {} func (*RpcSpaceInviteRevokeResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 6, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 7, 1, 0} } func (m *RpcSpaceInviteRevokeResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12018,7 +12242,7 @@ func (m *RpcSpaceInviteView) Reset() { *m = RpcSpaceInviteView{} } func (m *RpcSpaceInviteView) String() string { return proto.CompactTextString(m) } func (*RpcSpaceInviteView) ProtoMessage() {} func (*RpcSpaceInviteView) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 7} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 8} } func (m *RpcSpaceInviteView) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12056,7 +12280,7 @@ func (m *RpcSpaceInviteViewRequest) Reset() { *m = RpcSpaceInviteViewReq func (m *RpcSpaceInviteViewRequest) String() string { return proto.CompactTextString(m) } func (*RpcSpaceInviteViewRequest) ProtoMessage() {} func (*RpcSpaceInviteViewRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 7, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 8, 0} } func (m *RpcSpaceInviteViewRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12112,7 +12336,7 @@ func (m *RpcSpaceInviteViewResponse) Reset() { *m = RpcSpaceInviteViewRe func (m *RpcSpaceInviteViewResponse) String() string { return proto.CompactTextString(m) } func (*RpcSpaceInviteViewResponse) ProtoMessage() {} func (*RpcSpaceInviteViewResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 7, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 8, 1} } func (m *RpcSpaceInviteViewResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12192,7 +12416,7 @@ func (m *RpcSpaceInviteViewResponseError) Reset() { *m = RpcSpaceInviteV func (m *RpcSpaceInviteViewResponseError) String() string { return proto.CompactTextString(m) } func (*RpcSpaceInviteViewResponseError) ProtoMessage() {} func (*RpcSpaceInviteViewResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 7, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 8, 1, 0} } func (m *RpcSpaceInviteViewResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12242,7 +12466,7 @@ func (m *RpcSpaceJoin) Reset() { *m = RpcSpaceJoin{} } func (m *RpcSpaceJoin) String() string { return proto.CompactTextString(m) } func (*RpcSpaceJoin) ProtoMessage() {} func (*RpcSpaceJoin) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 8} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 9} } func (m *RpcSpaceJoin) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12282,7 +12506,7 @@ func (m *RpcSpaceJoinRequest) Reset() { *m = RpcSpaceJoinRequest{} } func (m *RpcSpaceJoinRequest) String() string { return proto.CompactTextString(m) } func (*RpcSpaceJoinRequest) ProtoMessage() {} func (*RpcSpaceJoinRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 8, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 9, 0} } func (m *RpcSpaceJoinRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12347,7 +12571,7 @@ func (m *RpcSpaceJoinResponse) Reset() { *m = RpcSpaceJoinResponse{} } func (m *RpcSpaceJoinResponse) String() string { return proto.CompactTextString(m) } func (*RpcSpaceJoinResponse) ProtoMessage() {} func (*RpcSpaceJoinResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 8, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 9, 1} } func (m *RpcSpaceJoinResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12392,7 +12616,7 @@ func (m *RpcSpaceJoinResponseError) Reset() { *m = RpcSpaceJoinResponseE func (m *RpcSpaceJoinResponseError) String() string { return proto.CompactTextString(m) } func (*RpcSpaceJoinResponseError) ProtoMessage() {} func (*RpcSpaceJoinResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 8, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 9, 1, 0} } func (m *RpcSpaceJoinResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12442,7 +12666,7 @@ func (m *RpcSpaceJoinCancel) Reset() { *m = RpcSpaceJoinCancel{} } func (m *RpcSpaceJoinCancel) String() string { return proto.CompactTextString(m) } func (*RpcSpaceJoinCancel) ProtoMessage() {} func (*RpcSpaceJoinCancel) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 9} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 10} } func (m *RpcSpaceJoinCancel) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12479,7 +12703,7 @@ func (m *RpcSpaceJoinCancelRequest) Reset() { *m = RpcSpaceJoinCancelReq func (m *RpcSpaceJoinCancelRequest) String() string { return proto.CompactTextString(m) } func (*RpcSpaceJoinCancelRequest) ProtoMessage() {} func (*RpcSpaceJoinCancelRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 9, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 10, 0} } func (m *RpcSpaceJoinCancelRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12523,7 +12747,7 @@ func (m *RpcSpaceJoinCancelResponse) Reset() { *m = RpcSpaceJoinCancelRe func (m *RpcSpaceJoinCancelResponse) String() string { return proto.CompactTextString(m) } func (*RpcSpaceJoinCancelResponse) ProtoMessage() {} func (*RpcSpaceJoinCancelResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 9, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 10, 1} } func (m *RpcSpaceJoinCancelResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12568,7 +12792,7 @@ func (m *RpcSpaceJoinCancelResponseError) Reset() { *m = RpcSpaceJoinCan func (m *RpcSpaceJoinCancelResponseError) String() string { return proto.CompactTextString(m) } func (*RpcSpaceJoinCancelResponseError) ProtoMessage() {} func (*RpcSpaceJoinCancelResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 9, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 10, 1, 0} } func (m *RpcSpaceJoinCancelResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12618,7 +12842,7 @@ func (m *RpcSpaceRequestApprove) Reset() { *m = RpcSpaceRequestApprove{} func (m *RpcSpaceRequestApprove) String() string { return proto.CompactTextString(m) } func (*RpcSpaceRequestApprove) ProtoMessage() {} func (*RpcSpaceRequestApprove) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 10} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 11} } func (m *RpcSpaceRequestApprove) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12657,7 +12881,7 @@ func (m *RpcSpaceRequestApproveRequest) Reset() { *m = RpcSpaceRequestAp func (m *RpcSpaceRequestApproveRequest) String() string { return proto.CompactTextString(m) } func (*RpcSpaceRequestApproveRequest) ProtoMessage() {} func (*RpcSpaceRequestApproveRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 10, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 11, 0} } func (m *RpcSpaceRequestApproveRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12715,7 +12939,7 @@ func (m *RpcSpaceRequestApproveResponse) Reset() { *m = RpcSpaceRequestA func (m *RpcSpaceRequestApproveResponse) String() string { return proto.CompactTextString(m) } func (*RpcSpaceRequestApproveResponse) ProtoMessage() {} func (*RpcSpaceRequestApproveResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 10, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 11, 1} } func (m *RpcSpaceRequestApproveResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12760,7 +12984,7 @@ func (m *RpcSpaceRequestApproveResponseError) Reset() { *m = RpcSpaceReq func (m *RpcSpaceRequestApproveResponseError) String() string { return proto.CompactTextString(m) } func (*RpcSpaceRequestApproveResponseError) ProtoMessage() {} func (*RpcSpaceRequestApproveResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 10, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 11, 1, 0} } func (m *RpcSpaceRequestApproveResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12810,7 +13034,7 @@ func (m *RpcSpaceRequestDecline) Reset() { *m = RpcSpaceRequestDecline{} func (m *RpcSpaceRequestDecline) String() string { return proto.CompactTextString(m) } func (*RpcSpaceRequestDecline) ProtoMessage() {} func (*RpcSpaceRequestDecline) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 11} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 12} } func (m *RpcSpaceRequestDecline) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12848,7 +13072,7 @@ func (m *RpcSpaceRequestDeclineRequest) Reset() { *m = RpcSpaceRequestDe func (m *RpcSpaceRequestDeclineRequest) String() string { return proto.CompactTextString(m) } func (*RpcSpaceRequestDeclineRequest) ProtoMessage() {} func (*RpcSpaceRequestDeclineRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 11, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 12, 0} } func (m *RpcSpaceRequestDeclineRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12899,7 +13123,7 @@ func (m *RpcSpaceRequestDeclineResponse) Reset() { *m = RpcSpaceRequestD func (m *RpcSpaceRequestDeclineResponse) String() string { return proto.CompactTextString(m) } func (*RpcSpaceRequestDeclineResponse) ProtoMessage() {} func (*RpcSpaceRequestDeclineResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 11, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 12, 1} } func (m *RpcSpaceRequestDeclineResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12944,7 +13168,7 @@ func (m *RpcSpaceRequestDeclineResponseError) Reset() { *m = RpcSpaceReq func (m *RpcSpaceRequestDeclineResponseError) String() string { return proto.CompactTextString(m) } func (*RpcSpaceRequestDeclineResponseError) ProtoMessage() {} func (*RpcSpaceRequestDeclineResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 11, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 12, 1, 0} } func (m *RpcSpaceRequestDeclineResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12994,7 +13218,7 @@ func (m *RpcSpaceParticipantRemove) Reset() { *m = RpcSpaceParticipantRe func (m *RpcSpaceParticipantRemove) String() string { return proto.CompactTextString(m) } func (*RpcSpaceParticipantRemove) ProtoMessage() {} func (*RpcSpaceParticipantRemove) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 12} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 13} } func (m *RpcSpaceParticipantRemove) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13032,7 +13256,7 @@ func (m *RpcSpaceParticipantRemoveRequest) Reset() { *m = RpcSpacePartic func (m *RpcSpaceParticipantRemoveRequest) String() string { return proto.CompactTextString(m) } func (*RpcSpaceParticipantRemoveRequest) ProtoMessage() {} func (*RpcSpaceParticipantRemoveRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 12, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 13, 0} } func (m *RpcSpaceParticipantRemoveRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13083,7 +13307,7 @@ func (m *RpcSpaceParticipantRemoveResponse) Reset() { *m = RpcSpaceParti func (m *RpcSpaceParticipantRemoveResponse) String() string { return proto.CompactTextString(m) } func (*RpcSpaceParticipantRemoveResponse) ProtoMessage() {} func (*RpcSpaceParticipantRemoveResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 12, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 13, 1} } func (m *RpcSpaceParticipantRemoveResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13130,7 +13354,7 @@ func (m *RpcSpaceParticipantRemoveResponseError) Reset() { func (m *RpcSpaceParticipantRemoveResponseError) String() string { return proto.CompactTextString(m) } func (*RpcSpaceParticipantRemoveResponseError) ProtoMessage() {} func (*RpcSpaceParticipantRemoveResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 12, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 13, 1, 0} } func (m *RpcSpaceParticipantRemoveResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13180,7 +13404,7 @@ func (m *RpcSpaceParticipantPermissionsChange) Reset() { *m = RpcSpacePa func (m *RpcSpaceParticipantPermissionsChange) String() string { return proto.CompactTextString(m) } func (*RpcSpaceParticipantPermissionsChange) ProtoMessage() {} func (*RpcSpaceParticipantPermissionsChange) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 13} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 14} } func (m *RpcSpaceParticipantPermissionsChange) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13222,7 +13446,7 @@ func (m *RpcSpaceParticipantPermissionsChangeRequest) String() string { } func (*RpcSpaceParticipantPermissionsChangeRequest) ProtoMessage() {} func (*RpcSpaceParticipantPermissionsChangeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 13, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 14, 0} } func (m *RpcSpaceParticipantPermissionsChangeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13277,7 +13501,7 @@ func (m *RpcSpaceParticipantPermissionsChangeResponse) String() string { } func (*RpcSpaceParticipantPermissionsChangeResponse) ProtoMessage() {} func (*RpcSpaceParticipantPermissionsChangeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 13, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 14, 1} } func (m *RpcSpaceParticipantPermissionsChangeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13326,7 +13550,7 @@ func (m *RpcSpaceParticipantPermissionsChangeResponseError) String() string { } func (*RpcSpaceParticipantPermissionsChangeResponseError) ProtoMessage() {} func (*RpcSpaceParticipantPermissionsChangeResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 13, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 14, 1, 0} } func (m *RpcSpaceParticipantPermissionsChangeResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13376,7 +13600,7 @@ func (m *RpcSpaceDelete) Reset() { *m = RpcSpaceDelete{} } func (m *RpcSpaceDelete) String() string { return proto.CompactTextString(m) } func (*RpcSpaceDelete) ProtoMessage() {} func (*RpcSpaceDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 14} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 15} } func (m *RpcSpaceDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13413,7 +13637,7 @@ func (m *RpcSpaceDeleteRequest) Reset() { *m = RpcSpaceDeleteRequest{} } func (m *RpcSpaceDeleteRequest) String() string { return proto.CompactTextString(m) } func (*RpcSpaceDeleteRequest) ProtoMessage() {} func (*RpcSpaceDeleteRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 14, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 15, 0} } func (m *RpcSpaceDeleteRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13458,7 +13682,7 @@ func (m *RpcSpaceDeleteResponse) Reset() { *m = RpcSpaceDeleteResponse{} func (m *RpcSpaceDeleteResponse) String() string { return proto.CompactTextString(m) } func (*RpcSpaceDeleteResponse) ProtoMessage() {} func (*RpcSpaceDeleteResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 14, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 15, 1} } func (m *RpcSpaceDeleteResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13510,7 +13734,7 @@ func (m *RpcSpaceDeleteResponseError) Reset() { *m = RpcSpaceDeleteRespo func (m *RpcSpaceDeleteResponseError) String() string { return proto.CompactTextString(m) } func (*RpcSpaceDeleteResponseError) ProtoMessage() {} func (*RpcSpaceDeleteResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 14, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 15, 1, 0} } func (m *RpcSpaceDeleteResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13560,7 +13784,7 @@ func (m *RpcSpaceSetOrder) Reset() { *m = RpcSpaceSetOrder{} } func (m *RpcSpaceSetOrder) String() string { return proto.CompactTextString(m) } func (*RpcSpaceSetOrder) ProtoMessage() {} func (*RpcSpaceSetOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 15} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 16} } func (m *RpcSpaceSetOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13598,7 +13822,7 @@ func (m *RpcSpaceSetOrderRequest) Reset() { *m = RpcSpaceSetOrderRequest func (m *RpcSpaceSetOrderRequest) String() string { return proto.CompactTextString(m) } func (*RpcSpaceSetOrderRequest) ProtoMessage() {} func (*RpcSpaceSetOrderRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 15, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 16, 0} } func (m *RpcSpaceSetOrderRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13649,7 +13873,7 @@ func (m *RpcSpaceSetOrderResponse) Reset() { *m = RpcSpaceSetOrderRespon func (m *RpcSpaceSetOrderResponse) String() string { return proto.CompactTextString(m) } func (*RpcSpaceSetOrderResponse) ProtoMessage() {} func (*RpcSpaceSetOrderResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 15, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 16, 1} } func (m *RpcSpaceSetOrderResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13694,7 +13918,7 @@ func (m *RpcSpaceSetOrderResponseError) Reset() { *m = RpcSpaceSetOrderR func (m *RpcSpaceSetOrderResponseError) String() string { return proto.CompactTextString(m) } func (*RpcSpaceSetOrderResponseError) ProtoMessage() {} func (*RpcSpaceSetOrderResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 15, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 16, 1, 0} } func (m *RpcSpaceSetOrderResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13744,7 +13968,7 @@ func (m *RpcSpaceUnsetOrder) Reset() { *m = RpcSpaceUnsetOrder{} } func (m *RpcSpaceUnsetOrder) String() string { return proto.CompactTextString(m) } func (*RpcSpaceUnsetOrder) ProtoMessage() {} func (*RpcSpaceUnsetOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 16} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 17} } func (m *RpcSpaceUnsetOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13781,7 +14005,7 @@ func (m *RpcSpaceUnsetOrderRequest) Reset() { *m = RpcSpaceUnsetOrderReq func (m *RpcSpaceUnsetOrderRequest) String() string { return proto.CompactTextString(m) } func (*RpcSpaceUnsetOrderRequest) ProtoMessage() {} func (*RpcSpaceUnsetOrderRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 16, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 17, 0} } func (m *RpcSpaceUnsetOrderRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13825,7 +14049,7 @@ func (m *RpcSpaceUnsetOrderResponse) Reset() { *m = RpcSpaceUnsetOrderRe func (m *RpcSpaceUnsetOrderResponse) String() string { return proto.CompactTextString(m) } func (*RpcSpaceUnsetOrderResponse) ProtoMessage() {} func (*RpcSpaceUnsetOrderResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 16, 1} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 17, 1} } func (m *RpcSpaceUnsetOrderResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13870,7 +14094,7 @@ func (m *RpcSpaceUnsetOrderResponseError) Reset() { *m = RpcSpaceUnsetOr func (m *RpcSpaceUnsetOrderResponseError) String() string { return proto.CompactTextString(m) } func (*RpcSpaceUnsetOrderResponseError) ProtoMessage() {} func (*RpcSpaceUnsetOrderResponseError) Descriptor() ([]byte, []int) { - return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 16, 1, 0} + return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 17, 1, 0} } func (m *RpcSpaceUnsetOrderResponseError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -75569,6 +75793,7 @@ func init() { proto.RegisterEnum("anytype.RpcAppShutdownResponseErrorCode", RpcAppShutdownResponseErrorCode_name, RpcAppShutdownResponseErrorCode_value) proto.RegisterEnum("anytype.RpcSpaceLeaveApproveResponseErrorCode", RpcSpaceLeaveApproveResponseErrorCode_name, RpcSpaceLeaveApproveResponseErrorCode_value) proto.RegisterEnum("anytype.RpcSpaceMakeShareableResponseErrorCode", RpcSpaceMakeShareableResponseErrorCode_name, RpcSpaceMakeShareableResponseErrorCode_value) + proto.RegisterEnum("anytype.RpcSpaceInviteChangeResponseErrorCode", RpcSpaceInviteChangeResponseErrorCode_name, RpcSpaceInviteChangeResponseErrorCode_value) proto.RegisterEnum("anytype.RpcSpaceInviteGenerateResponseErrorCode", RpcSpaceInviteGenerateResponseErrorCode_name, RpcSpaceInviteGenerateResponseErrorCode_value) proto.RegisterEnum("anytype.RpcSpaceStopSharingResponseErrorCode", RpcSpaceStopSharingResponseErrorCode_name, RpcSpaceStopSharingResponseErrorCode_value) proto.RegisterEnum("anytype.RpcSpaceInviteGetCurrentResponseErrorCode", RpcSpaceInviteGetCurrentResponseErrorCode_name, RpcSpaceInviteGetCurrentResponseErrorCode_value) @@ -75910,6 +76135,10 @@ func init() { proto.RegisterType((*RpcSpaceMakeShareableRequest)(nil), "anytype.Rpc.Space.MakeShareable.Request") proto.RegisterType((*RpcSpaceMakeShareableResponse)(nil), "anytype.Rpc.Space.MakeShareable.Response") proto.RegisterType((*RpcSpaceMakeShareableResponseError)(nil), "anytype.Rpc.Space.MakeShareable.Response.Error") + proto.RegisterType((*RpcSpaceInviteChange)(nil), "anytype.Rpc.Space.InviteChange") + proto.RegisterType((*RpcSpaceInviteChangeRequest)(nil), "anytype.Rpc.Space.InviteChange.Request") + proto.RegisterType((*RpcSpaceInviteChangeResponse)(nil), "anytype.Rpc.Space.InviteChange.Response") + proto.RegisterType((*RpcSpaceInviteChangeResponseError)(nil), "anytype.Rpc.Space.InviteChange.Response.Error") proto.RegisterType((*RpcSpaceInviteGenerate)(nil), "anytype.Rpc.Space.InviteGenerate") proto.RegisterType((*RpcSpaceInviteGenerateRequest)(nil), "anytype.Rpc.Space.InviteGenerate.Request") proto.RegisterType((*RpcSpaceInviteGenerateResponse)(nil), "anytype.Rpc.Space.InviteGenerate.Response") @@ -77198,1369 +77427,1371 @@ func init() { func init() { proto.RegisterFile("pb/protos/commands.proto", fileDescriptor_8261c968b2e6f45c) } var fileDescriptor_8261c968b2e6f45c = []byte{ - // 21791 bytes of a gzipped FileDescriptorProto + // 21824 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7b, 0x98, 0x24, 0x49, - 0x59, 0x2f, 0x3c, 0x95, 0x59, 0x55, 0x5d, 0x1d, 0x7d, 0x99, 0x9a, 0xdc, 0xd9, 0xd9, 0xd9, 0xdc, - 0x65, 0x76, 0x18, 0x96, 0x65, 0x5d, 0x96, 0xde, 0x65, 0x41, 0x64, 0x97, 0x5d, 0x96, 0xea, 0xaa, - 0xec, 0xee, 0xda, 0xad, 0xae, 0x6a, 0xb2, 0xaa, 0x67, 0x18, 0xcf, 0xe1, 0xeb, 0x93, 0x53, 0x15, - 0xdd, 0x9d, 0x3b, 0xd5, 0x99, 0x45, 0x66, 0x76, 0xcf, 0x36, 0xdf, 0x73, 0xbe, 0x23, 0x07, 0x11, - 0x10, 0x11, 0x51, 0x11, 0x11, 0xb9, 0x0b, 0x08, 0xc8, 0xfd, 0x26, 0x20, 0x17, 0xb9, 0x08, 0x22, - 0x2a, 0x8a, 0xca, 0x45, 0x79, 0x04, 0xf1, 0x82, 0xe7, 0x1c, 0xf5, 0xe0, 0xa7, 0x20, 0x2a, 0xc7, - 0xef, 0x89, 0x4b, 0x66, 0x46, 0x54, 0x57, 0x66, 0x45, 0x56, 0x57, 0x56, 0x2f, 0xfa, 0xfd, 0x55, - 0x95, 0x91, 0x91, 0x6f, 0xbc, 0xf1, 0xfe, 0xde, 0x88, 0x78, 0x23, 0xe2, 0x8d, 0x37, 0xc0, 0xe9, - 0xde, 0xa5, 0xdb, 0x7a, 0x8e, 0xed, 0xd9, 0xee, 0x6d, 0x6d, 0x7b, 0x67, 0xc7, 0xb0, 0x3a, 0xee, - 0x02, 0x7e, 0x56, 0xa6, 0x0c, 0x6b, 0xdf, 0xdb, 0xef, 0x41, 0xf5, 0xc6, 0xde, 0xe5, 0xad, 0xdb, - 0xba, 0xe6, 0xa5, 0xdb, 0x7a, 0x97, 0x6e, 0xdb, 0xb1, 0x3b, 0xb0, 0xeb, 0x7f, 0x80, 0x1f, 0x68, - 0x76, 0xf5, 0xe6, 0xa8, 0x5c, 0x5d, 0xbb, 0x6d, 0x74, 0x5d, 0xcf, 0x76, 0x20, 0xcd, 0x79, 0x2a, - 0x2c, 0x12, 0xee, 0x41, 0xcb, 0xf3, 0x29, 0x5c, 0xbf, 0x65, 0xdb, 0x5b, 0x5d, 0x48, 0xde, 0x5d, - 0xda, 0xdd, 0xbc, 0xcd, 0xf5, 0x9c, 0xdd, 0xb6, 0x47, 0xdf, 0x9e, 0xed, 0x7f, 0xdb, 0x81, 0x6e, - 0xdb, 0x31, 0x7b, 0x9e, 0xed, 0x90, 0x1c, 0xe7, 0xde, 0xfe, 0x8d, 0x02, 0x90, 0xf5, 0x5e, 0x5b, - 0xfd, 0xf6, 0x14, 0x90, 0x4b, 0xbd, 0x9e, 0xfa, 0x29, 0x09, 0x80, 0x65, 0xe8, 0x9d, 0x87, 0x8e, - 0x6b, 0xda, 0x96, 0x7a, 0x1c, 0x4c, 0xe9, 0xf0, 0x19, 0xbb, 0xd0, 0xf5, 0xee, 0xca, 0x3e, 0xef, - 0x2f, 0xe5, 0x8c, 0xfa, 0x7a, 0x09, 0x14, 0x74, 0xe8, 0xf6, 0x6c, 0xcb, 0x85, 0xca, 0x53, 0x40, - 0x0e, 0x3a, 0x8e, 0xed, 0x9c, 0xce, 0x9c, 0xcd, 0xdc, 0x3c, 0x73, 0xc7, 0x2d, 0x0b, 0xb4, 0xfa, - 0x0b, 0x7a, 0xaf, 0xbd, 0x50, 0xea, 0xf5, 0x16, 0x42, 0x4a, 0x0b, 0xfe, 0x47, 0x0b, 0x1a, 0xfa, - 0x42, 0x27, 0x1f, 0x2a, 0xa7, 0xc1, 0xd4, 0x1e, 0xc9, 0x70, 0x5a, 0x3a, 0x9b, 0xb9, 0x79, 0x5a, - 0xf7, 0x1f, 0xd1, 0x9b, 0x0e, 0xf4, 0x0c, 0xb3, 0xeb, 0x9e, 0x96, 0xc9, 0x1b, 0xfa, 0xa8, 0xbe, - 0x36, 0x03, 0x72, 0x98, 0x88, 0x52, 0x06, 0xd9, 0xb6, 0xdd, 0x81, 0xb8, 0xf8, 0xf9, 0x3b, 0x6e, - 0x13, 0x2f, 0x7e, 0xa1, 0x6c, 0x77, 0xa0, 0x8e, 0x3f, 0x56, 0xce, 0x82, 0x19, 0x5f, 0x2c, 0x21, - 0x1b, 0x6c, 0xd2, 0xb9, 0x3b, 0x40, 0x16, 0xe5, 0x57, 0x0a, 0x20, 0x5b, 0x5f, 0xaf, 0xd5, 0x8a, - 0xc7, 0x94, 0x13, 0x60, 0x6e, 0xbd, 0x7e, 0x7f, 0xbd, 0x71, 0xa1, 0xbe, 0xa1, 0xe9, 0x7a, 0x43, - 0x2f, 0x66, 0x94, 0x39, 0x30, 0xbd, 0x58, 0xaa, 0x6c, 0x54, 0xeb, 0x6b, 0xeb, 0xad, 0xa2, 0xa4, - 0xbe, 0x52, 0x06, 0xf3, 0x4d, 0xe8, 0x55, 0xe0, 0x9e, 0xd9, 0x86, 0x4d, 0xcf, 0xf0, 0xa0, 0xfa, - 0xa2, 0x4c, 0x20, 0x4c, 0x65, 0x1d, 0x15, 0x1a, 0xbc, 0xa2, 0x15, 0x78, 0xdc, 0x81, 0x0a, 0xf0, - 0x14, 0x16, 0xe8, 0xd7, 0x0b, 0x4c, 0x9a, 0xce, 0xd2, 0x39, 0xf7, 0x18, 0x30, 0xc3, 0xbc, 0x53, - 0xe6, 0x01, 0x58, 0x2c, 0x95, 0xef, 0x5f, 0xd6, 0x1b, 0xeb, 0xf5, 0x4a, 0xf1, 0x18, 0x7a, 0x5e, - 0x6a, 0xe8, 0x1a, 0x7d, 0xce, 0xa8, 0xdf, 0xcd, 0x30, 0x60, 0x56, 0x78, 0x30, 0x17, 0x86, 0x33, - 0x33, 0x00, 0x50, 0xf5, 0x0d, 0x01, 0x38, 0xcb, 0x1c, 0x38, 0x8f, 0x4b, 0x46, 0x2e, 0x7d, 0x80, - 0x9e, 0x23, 0x81, 0x42, 0x73, 0x7b, 0xd7, 0xeb, 0xd8, 0x57, 0x2c, 0x75, 0x3a, 0x40, 0x46, 0xfd, - 0x1b, 0x56, 0x26, 0x4f, 0xe6, 0x65, 0x72, 0xf3, 0xc1, 0x4a, 0x50, 0x0a, 0x11, 0xd2, 0x78, 0x75, - 0x20, 0x8d, 0x12, 0x27, 0x8d, 0xc7, 0x88, 0x12, 0x4a, 0x5f, 0x0e, 0x5f, 0xbf, 0x1b, 0xe4, 0x9a, - 0x3d, 0xa3, 0x0d, 0xd5, 0xcf, 0xc9, 0x60, 0xb6, 0x06, 0x8d, 0x3d, 0x58, 0xea, 0xf5, 0x1c, 0x7b, - 0x0f, 0xaa, 0xe5, 0x50, 0x5f, 0x4f, 0x83, 0x29, 0x17, 0x65, 0xaa, 0x76, 0x70, 0x0d, 0xa6, 0x75, - 0xff, 0x51, 0x39, 0x03, 0x80, 0xd9, 0x81, 0x96, 0x67, 0x7a, 0x26, 0x74, 0x4f, 0x4b, 0x67, 0xe5, - 0x9b, 0xa7, 0x75, 0x26, 0x45, 0xfd, 0xb6, 0x24, 0xaa, 0x63, 0x98, 0x8b, 0x05, 0x96, 0x83, 0x08, - 0xa9, 0xbe, 0x4e, 0x12, 0xd1, 0xb1, 0xa1, 0xe4, 0x92, 0xc9, 0xf6, 0x6d, 0x99, 0xe4, 0xc2, 0x45, - 0x39, 0xea, 0x8d, 0x8d, 0xe6, 0x7a, 0x79, 0x65, 0xa3, 0xb9, 0x56, 0x2a, 0x6b, 0x45, 0xa8, 0x9c, - 0x04, 0x45, 0xfc, 0x77, 0xa3, 0xda, 0xdc, 0xa8, 0x68, 0x35, 0xad, 0xa5, 0x55, 0x8a, 0x9b, 0x8a, - 0x02, 0xe6, 0x75, 0xed, 0xa9, 0xeb, 0x5a, 0xb3, 0xb5, 0xb1, 0x54, 0xaa, 0xd6, 0xb4, 0x4a, 0x71, - 0x0b, 0x7d, 0x5c, 0xab, 0xae, 0x56, 0x5b, 0x1b, 0xba, 0x56, 0x2a, 0xaf, 0x68, 0x95, 0xe2, 0xb6, - 0x72, 0x0d, 0xb8, 0xaa, 0xde, 0xd8, 0x28, 0xad, 0xad, 0xe9, 0x8d, 0xf3, 0xda, 0x06, 0xfd, 0xa2, - 0x59, 0x34, 0x49, 0x41, 0xad, 0x8d, 0xe6, 0x4a, 0x49, 0xd7, 0x4a, 0x8b, 0x35, 0xad, 0xf8, 0x80, - 0xfa, 0x6c, 0x19, 0xcc, 0xad, 0x1a, 0x97, 0x61, 0x73, 0xdb, 0x70, 0xa0, 0x71, 0xa9, 0x0b, 0xd5, - 0x47, 0x08, 0xe0, 0xa9, 0x7e, 0x8e, 0xc5, 0x4b, 0xe3, 0xf1, 0xba, 0x6d, 0x80, 0x80, 0xb9, 0x22, - 0x22, 0x00, 0xfb, 0xa7, 0xa0, 0x19, 0xac, 0x70, 0x80, 0x3d, 0x3e, 0x21, 0xbd, 0x64, 0x88, 0xfd, - 0xf7, 0x87, 0x00, 0x62, 0xea, 0x9f, 0x65, 0xc1, 0x7c, 0xd5, 0xda, 0x33, 0x3d, 0xb8, 0x0c, 0x2d, - 0xe8, 0xa0, 0x71, 0xe0, 0x8d, 0x19, 0x91, 0x76, 0x75, 0x27, 0x00, 0x26, 0xfe, 0xae, 0xb5, 0xdf, - 0x83, 0xb8, 0x7a, 0xf3, 0x77, 0x5c, 0x1b, 0xc8, 0x0b, 0x5b, 0x0b, 0x0b, 0xd5, 0x20, 0x83, 0xce, - 0x64, 0x56, 0x96, 0xc1, 0x4c, 0x0f, 0x3a, 0x3b, 0xa6, 0x8b, 0x46, 0x3e, 0x32, 0x7c, 0xce, 0xdf, - 0xf1, 0xc8, 0xbe, 0x6f, 0xd7, 0x0c, 0xc7, 0x33, 0xdb, 0x66, 0xcf, 0xb0, 0xbc, 0xb5, 0x30, 0xb3, - 0xce, 0x7e, 0xa9, 0xbe, 0x5e, 0x66, 0x74, 0x61, 0x89, 0xd7, 0x85, 0xdb, 0x07, 0x60, 0xc7, 0x57, - 0x34, 0x62, 0xc8, 0xbf, 0x1e, 0x4c, 0x13, 0x5e, 0xcb, 0x66, 0x87, 0xc2, 0x16, 0x26, 0x28, 0x37, - 0x82, 0x39, 0xf2, 0xb0, 0x64, 0x76, 0xe1, 0xfd, 0x70, 0x9f, 0x0e, 0xfe, 0x7c, 0xa2, 0xfa, 0x13, - 0x41, 0x0f, 0x50, 0xe5, 0x14, 0xea, 0x07, 0x93, 0x32, 0x95, 0x4c, 0xa3, 0x5e, 0xf2, 0x50, 0xe8, - 0x03, 0x0e, 0x34, 0x75, 0x53, 0xfd, 0x9e, 0x04, 0x66, 0x9a, 0x9e, 0xdd, 0x43, 0xed, 0xc6, 0xb4, - 0xb6, 0xc4, 0x1a, 0xfa, 0x67, 0xd8, 0x86, 0x5e, 0xe6, 0xc1, 0x7d, 0xcc, 0x00, 0x39, 0x32, 0x05, - 0x44, 0x34, 0xf3, 0x6f, 0x07, 0xcd, 0x7c, 0x89, 0x43, 0xe5, 0x8e, 0x44, 0xd4, 0xbe, 0x0f, 0x1b, - 0xf9, 0x4b, 0x64, 0x50, 0xf4, 0xd5, 0xcc, 0x2b, 0xef, 0x3a, 0x0e, 0xb4, 0x3c, 0x31, 0x10, 0xfe, - 0x98, 0x05, 0x61, 0x85, 0x07, 0xe1, 0x8e, 0x18, 0x65, 0xf6, 0x4b, 0x49, 0xb1, 0x8d, 0x7d, 0x2c, - 0x40, 0xf3, 0x7e, 0x0e, 0xcd, 0x1f, 0x4a, 0xce, 0x56, 0x32, 0x48, 0x57, 0x46, 0x40, 0xf4, 0x24, - 0x28, 0xa2, 0x81, 0xb1, 0xdc, 0xaa, 0x9e, 0xd7, 0x36, 0xaa, 0xf5, 0xf3, 0xd5, 0x96, 0x56, 0x84, - 0xea, 0x8b, 0xe5, 0xb0, 0xf3, 0xf5, 0x96, 0xb1, 0x79, 0x27, 0x84, 0xca, 0x97, 0xa5, 0xd1, 0xfa, - 0x3d, 0x52, 0xc6, 0x44, 0x30, 0x11, 0xef, 0xf7, 0x06, 0x32, 0x95, 0x0c, 0x91, 0xfb, 0x46, 0x40, - 0xe4, 0x14, 0x50, 0xaa, 0xf5, 0xf3, 0xa5, 0x5a, 0xb5, 0x42, 0xda, 0xd8, 0x46, 0xeb, 0xe2, 0x1a, - 0xc2, 0xe4, 0x67, 0x64, 0x30, 0x4b, 0x58, 0xd3, 0xe1, 0x9e, 0x7d, 0x59, 0xd0, 0x2a, 0xf9, 0x6a, - 0x42, 0x2b, 0x92, 0x2d, 0x21, 0xa2, 0xb7, 0xfa, 0xf1, 0x04, 0x56, 0x64, 0x0c, 0xb9, 0x87, 0xd2, - 0x08, 0x72, 0xa0, 0x6b, 0xda, 0x1a, 0xd0, 0x83, 0x0d, 0x1c, 0x41, 0x3e, 0x91, 0x05, 0x80, 0x54, - 0xf2, 0xbc, 0x09, 0xaf, 0xa8, 0xab, 0x21, 0x26, 0x9c, 0xda, 0x66, 0x86, 0xaa, 0xad, 0x34, 0x48, - 0x6d, 0xff, 0x82, 0xb5, 0x23, 0x16, 0x79, 0xf4, 0x6e, 0x8d, 0x14, 0x37, 0xe2, 0x24, 0x7a, 0xd9, - 0xc0, 0x57, 0x14, 0x89, 0x37, 0x9b, 0xae, 0x07, 0xd3, 0xf8, 0x6f, 0xdd, 0xd8, 0x81, 0xb4, 0x0d, - 0x85, 0x09, 0xca, 0x39, 0x30, 0x4b, 0x32, 0xb6, 0x6d, 0x0b, 0xd5, 0x27, 0x8b, 0x33, 0x70, 0x69, - 0x08, 0xc4, 0xb6, 0x03, 0x0d, 0xcf, 0x76, 0x30, 0x8d, 0x1c, 0x01, 0x91, 0x49, 0x52, 0x6e, 0x05, - 0x27, 0x4c, 0x17, 0xb7, 0xaa, 0x75, 0x17, 0x3a, 0x84, 0xd9, 0xd3, 0xf9, 0xb3, 0x99, 0x9b, 0x0b, - 0xfa, 0xc1, 0x17, 0xea, 0x37, 0x83, 0x36, 0xab, 0x71, 0x7a, 0xf6, 0xd8, 0x24, 0x15, 0x4f, 0xa6, - 0x65, 0x7b, 0xa3, 0xf5, 0xa0, 0xa4, 0xdf, 0xdc, 0x40, 0xba, 0xb1, 0x84, 0x57, 0x08, 0x20, 0x6d, - 0xc5, 0x28, 0x15, 0xe5, 0x2d, 0x37, 0xea, 0x2d, 0xad, 0xde, 0x2a, 0x6e, 0x0e, 0xd4, 0xbf, 0x2d, - 0xf5, 0x75, 0x59, 0x90, 0xbd, 0xcf, 0x36, 0x2d, 0xf5, 0x39, 0x19, 0x4e, 0x81, 0x2c, 0xe8, 0x5d, - 0xb1, 0x9d, 0xcb, 0x41, 0xb3, 0x0e, 0x13, 0xe2, 0x91, 0x0c, 0x15, 0x4f, 0x1e, 0xaa, 0x78, 0xd9, - 0x41, 0x8a, 0xf7, 0xd3, 0xac, 0xe2, 0xdd, 0xcd, 0x2b, 0xde, 0x4d, 0x03, 0xe4, 0x8f, 0x98, 0x8f, - 0xe8, 0x2e, 0x3e, 0x1d, 0x74, 0x17, 0xf7, 0x72, 0x30, 0x3e, 0x5a, 0x8c, 0x4c, 0x32, 0x00, 0xbf, - 0x92, 0x6a, 0x37, 0x31, 0x08, 0xea, 0xad, 0x08, 0xa8, 0xb7, 0x07, 0xf4, 0x20, 0xe6, 0xc1, 0x8e, - 0xe6, 0x81, 0x83, 0x9d, 0xca, 0x65, 0xe5, 0x6a, 0x70, 0xa2, 0x52, 0x5d, 0x5a, 0xd2, 0x74, 0xad, - 0xde, 0xda, 0xa8, 0x6b, 0xad, 0x0b, 0x0d, 0xfd, 0xfe, 0x62, 0x57, 0x7d, 0xad, 0x0c, 0x00, 0x92, - 0x50, 0xd9, 0xb0, 0xda, 0xb0, 0x2b, 0xd6, 0xff, 0xff, 0xad, 0x94, 0xac, 0x07, 0x09, 0xe9, 0x47, - 0xc0, 0xf9, 0x0a, 0x49, 0xbc, 0x55, 0x46, 0x12, 0x4b, 0x06, 0xea, 0x9b, 0x1f, 0x0a, 0xb3, 0x87, - 0xab, 0xc0, 0x71, 0x9f, 0x1e, 0xcd, 0x3e, 0x78, 0xf5, 0xe0, 0xed, 0x59, 0x30, 0x4f, 0x61, 0xf1, - 0x97, 0x83, 0x9e, 0x27, 0x34, 0x6f, 0x55, 0x41, 0x81, 0xae, 0xfe, 0xf8, 0x83, 0x41, 0xf0, 0x3c, - 0xbe, 0x89, 0xe9, 0x8b, 0x13, 0x4e, 0x4c, 0xf9, 0x9a, 0x44, 0xa8, 0xc4, 0xaf, 0x25, 0x98, 0x54, - 0xc6, 0x12, 0x4c, 0xa6, 0x16, 0x9f, 0x4a, 0x55, 0x2d, 0x06, 0xe0, 0xbd, 0xa5, 0x5c, 0x0b, 0xae, - 0xae, 0xd6, 0xcb, 0x0d, 0x5d, 0xd7, 0xca, 0xad, 0x8d, 0x35, 0x4d, 0x5f, 0xad, 0x36, 0x9b, 0xd5, - 0x46, 0xbd, 0x79, 0x98, 0xd6, 0xae, 0x7e, 0x56, 0x0e, 0x34, 0xa6, 0x02, 0xdb, 0x5d, 0xd3, 0x82, - 0xea, 0xbd, 0x87, 0x54, 0x18, 0x7e, 0xf1, 0x50, 0x1c, 0x67, 0x5a, 0x7e, 0x04, 0xce, 0xaf, 0x49, - 0x8e, 0xf3, 0x60, 0x82, 0xff, 0x8e, 0x9b, 0xff, 0x57, 0x65, 0x70, 0x82, 0x69, 0x88, 0x3a, 0xdc, - 0x19, 0xdb, 0x82, 0xf0, 0x7f, 0x67, 0xdb, 0x6e, 0x95, 0xc7, 0x74, 0x90, 0xed, 0x7d, 0x80, 0x8d, - 0x08, 0x58, 0xdf, 0x1c, 0xc0, 0x5a, 0xe3, 0x60, 0x7d, 0xe2, 0x08, 0x34, 0x93, 0x21, 0xfb, 0x8e, - 0x54, 0x91, 0xbd, 0x16, 0x5c, 0xbd, 0x56, 0xd2, 0x5b, 0xd5, 0x72, 0x75, 0xad, 0x84, 0xc6, 0x51, - 0x66, 0xc8, 0x8e, 0x30, 0xee, 0x79, 0xd0, 0x07, 0xe2, 0xfb, 0xd1, 0x2c, 0xb8, 0x7e, 0x70, 0x47, - 0x5b, 0xde, 0x36, 0xac, 0x2d, 0xa8, 0x9a, 0x22, 0x50, 0x57, 0xc0, 0x54, 0x1b, 0x67, 0x27, 0x38, - 0xb3, 0x3b, 0x80, 0x31, 0x7d, 0x39, 0x29, 0x41, 0xf7, 0x3f, 0x55, 0xdf, 0xcd, 0x2a, 0x44, 0x8b, - 0x57, 0x88, 0x27, 0xc7, 0x83, 0x77, 0x80, 0xef, 0x08, 0xdd, 0xf8, 0x7c, 0xa0, 0x1b, 0x17, 0x38, - 0xdd, 0x28, 0x1f, 0x8e, 0x7c, 0x32, 0x35, 0xf9, 0xad, 0x87, 0x42, 0x07, 0x10, 0xa9, 0x4d, 0x66, - 0xf4, 0xa8, 0x30, 0xb0, 0xbb, 0x7f, 0x95, 0x0c, 0xf2, 0x15, 0xd8, 0x85, 0x9e, 0xe0, 0x0c, 0xfe, - 0xef, 0x24, 0xd1, 0x7d, 0x35, 0x02, 0x03, 0xa1, 0x1d, 0xbd, 0x96, 0xe2, 0x99, 0x3b, 0xd0, 0xf5, - 0x8c, 0x9d, 0x1e, 0x16, 0xb5, 0xac, 0x87, 0x09, 0xea, 0x8f, 0x4a, 0x22, 0xbb, 0x6e, 0x31, 0xc5, - 0xfc, 0xfb, 0x58, 0x15, 0xfe, 0x82, 0x04, 0x0a, 0x4d, 0xe8, 0x35, 0x9c, 0x0e, 0x74, 0xd4, 0x66, - 0x88, 0xd1, 0x59, 0x30, 0x83, 0x41, 0x41, 0xd3, 0xcc, 0x00, 0x27, 0x36, 0x49, 0xb9, 0x09, 0xcc, - 0x07, 0x8f, 0xf8, 0x73, 0xda, 0x8d, 0xf7, 0xa5, 0xaa, 0xdf, 0xca, 0x88, 0x3a, 0x03, 0xd0, 0x45, - 0x5f, 0xca, 0x4d, 0x44, 0x2b, 0x15, 0xdb, 0xd8, 0x8f, 0x25, 0x95, 0xfe, 0x7e, 0xe9, 0x3b, 0x25, - 0x00, 0xd6, 0x2d, 0xd7, 0x97, 0xeb, 0xa3, 0x13, 0xc8, 0x55, 0xfd, 0xc7, 0x4c, 0xb2, 0x59, 0x4c, - 0x58, 0x4e, 0x84, 0xc4, 0x7e, 0x29, 0xc1, 0xda, 0x42, 0x24, 0xb1, 0xf4, 0x65, 0xf6, 0xa5, 0xe3, - 0x20, 0x7f, 0xc1, 0xe8, 0x76, 0xa1, 0xa7, 0xbe, 0x52, 0x06, 0xf9, 0xb2, 0x03, 0x0d, 0x0f, 0xaa, - 0x30, 0x14, 0x9d, 0x0a, 0x0a, 0x8e, 0x6d, 0x7b, 0x6b, 0x86, 0xb7, 0x4d, 0xe5, 0x16, 0x3c, 0x2b, - 0x4f, 0x04, 0xd7, 0x6c, 0xee, 0x76, 0xbb, 0x1e, 0x7c, 0xd0, 0x5b, 0x73, 0xcc, 0x1d, 0xc3, 0xd9, - 0xaf, 0x19, 0xd6, 0xd6, 0xae, 0xb1, 0x05, 0x29, 0x7b, 0x51, 0xaf, 0xa9, 0xc7, 0xca, 0xaf, 0xb0, - 0x1d, 0xcf, 0xbd, 0xbc, 0xd0, 0x7f, 0x80, 0x93, 0x13, 0x61, 0x71, 0x81, 0xb0, 0x17, 0xd1, 0xf3, - 0xa8, 0xa0, 0xb0, 0x63, 0xc1, 0x1d, 0xdb, 0x32, 0xdb, 0xbe, 0xb5, 0xea, 0x3f, 0xab, 0x1f, 0x0f, - 0xd0, 0x58, 0xe4, 0xd0, 0x58, 0x10, 0x2e, 0x25, 0x19, 0x14, 0xcd, 0x11, 0xfa, 0x9d, 0x1b, 0xc0, - 0x75, 0xa4, 0x1b, 0xd9, 0x68, 0x35, 0x36, 0xca, 0xba, 0x56, 0x6a, 0x69, 0x1b, 0xb5, 0x46, 0xb9, - 0x54, 0xdb, 0xd0, 0xb5, 0xb5, 0x46, 0x11, 0xa2, 0xd9, 0xf9, 0x94, 0x0e, 0xdb, 0xf6, 0x1e, 0x74, - 0xd4, 0x67, 0x65, 0xc4, 0x20, 0x8a, 0x11, 0x4a, 0x1c, 0x7c, 0xb2, 0x08, 0x7c, 0x3f, 0x2d, 0xec, - 0x70, 0x44, 0x05, 0x4b, 0x99, 0x8f, 0x68, 0x31, 0x9f, 0x10, 0xea, 0x63, 0x62, 0x49, 0x3d, 0x04, - 0x40, 0xfa, 0x07, 0x09, 0x4c, 0x95, 0x6d, 0x6b, 0x0f, 0x3a, 0x1e, 0x3b, 0xc9, 0x62, 0x71, 0xc8, - 0xf4, 0xe1, 0x70, 0x1a, 0x4c, 0x41, 0xcb, 0x73, 0xec, 0x9e, 0x3f, 0xcb, 0xf2, 0x1f, 0xd5, 0x37, - 0x26, 0x95, 0x30, 0x2d, 0x39, 0x7a, 0x6d, 0x76, 0x70, 0x41, 0x1c, 0x7b, 0x72, 0x5f, 0xdb, 0x79, - 0x6d, 0x12, 0x5c, 0x06, 0x33, 0x90, 0x7e, 0x3f, 0xf6, 0x35, 0x19, 0xcc, 0x91, 0x76, 0xdb, 0x84, - 0xd8, 0x2c, 0x54, 0x1b, 0xec, 0x3a, 0x67, 0x9f, 0xf0, 0x57, 0x8e, 0x71, 0xe2, 0xcf, 0x1b, 0xbd, - 0x5e, 0xb0, 0x42, 0xbe, 0x72, 0x4c, 0xa7, 0xcf, 0x44, 0xcd, 0x17, 0xf3, 0x20, 0x6b, 0xec, 0x7a, - 0xdb, 0xea, 0xf7, 0x84, 0x67, 0xbc, 0x5c, 0x3f, 0x42, 0xf9, 0x89, 0x80, 0xe4, 0x24, 0xc8, 0x79, - 0xf6, 0x65, 0xe8, 0xcb, 0x81, 0x3c, 0x20, 0x38, 0x8c, 0x5e, 0xaf, 0x85, 0x5f, 0x50, 0x38, 0xfc, - 0x67, 0x64, 0x60, 0x19, 0xed, 0xb6, 0xbd, 0x6b, 0x79, 0x55, 0x7f, 0x95, 0x3c, 0x4c, 0x50, 0xbf, - 0x24, 0xb4, 0x0d, 0x25, 0xc0, 0x60, 0x32, 0xc8, 0x2e, 0x8d, 0xd0, 0x94, 0x16, 0xc0, 0x2d, 0xa5, - 0xb5, 0xb5, 0x8d, 0x56, 0xe3, 0x7e, 0xad, 0x1e, 0x5a, 0xbb, 0x1b, 0xd5, 0xfa, 0x46, 0x6b, 0x45, - 0xdb, 0x28, 0xaf, 0xeb, 0x78, 0x71, 0xb2, 0x54, 0x2e, 0x37, 0xd6, 0xeb, 0xad, 0x22, 0x54, 0xdf, - 0x2a, 0x81, 0xd9, 0x72, 0xd7, 0x76, 0x03, 0x84, 0x6f, 0x08, 0x11, 0x0e, 0xc4, 0x98, 0x61, 0xc4, - 0xa8, 0xfe, 0x4b, 0x46, 0xd4, 0x61, 0xc6, 0x17, 0x08, 0x43, 0x3e, 0xa2, 0x97, 0x7a, 0xa3, 0x90, - 0xc3, 0xcc, 0x70, 0x7a, 0xe9, 0x37, 0x89, 0xcf, 0x2d, 0x81, 0xa9, 0x12, 0x51, 0x0c, 0xf5, 0x4f, - 0x33, 0x20, 0x5f, 0xb6, 0xad, 0x4d, 0x73, 0x0b, 0x59, 0x90, 0xd0, 0x32, 0x2e, 0x75, 0x61, 0xc5, - 0xf0, 0x8c, 0x3d, 0x13, 0x5e, 0xc1, 0x15, 0x28, 0xe8, 0x7d, 0xa9, 0x88, 0x29, 0x9a, 0x02, 0x2f, - 0xed, 0x6e, 0x61, 0xa6, 0x0a, 0x3a, 0x9b, 0x84, 0xc6, 0x0f, 0xf2, 0xb8, 0xe6, 0x40, 0x07, 0x76, - 0xa1, 0xe1, 0x42, 0x34, 0x17, 0xb3, 0x60, 0x17, 0x2b, 0x6d, 0x41, 0x8f, 0x7a, 0xad, 0x9c, 0x03, - 0xb3, 0xe4, 0x15, 0xb6, 0x7f, 0x5c, 0xac, 0xc6, 0x05, 0x9d, 0x4b, 0x53, 0x1e, 0x03, 0x72, 0xf0, - 0x41, 0xcf, 0x31, 0x4e, 0x77, 0x30, 0x5e, 0xd7, 0x2c, 0x10, 0x8f, 0xd9, 0x05, 0xdf, 0x63, 0x76, - 0xa1, 0x89, 0xfd, 0x69, 0x75, 0x92, 0x4b, 0xfd, 0xdf, 0x85, 0xc0, 0x7a, 0xf9, 0x82, 0x1c, 0x2a, - 0x86, 0x02, 0xb2, 0x96, 0xb1, 0x03, 0xa9, 0x5e, 0xe0, 0xff, 0xca, 0x2d, 0xe0, 0xb8, 0xb1, 0x67, - 0x78, 0x86, 0x53, 0xb3, 0xdb, 0x46, 0x17, 0x0f, 0x9b, 0x7e, 0xcb, 0xef, 0x7f, 0x81, 0x37, 0xad, - 0x3c, 0xdb, 0x81, 0x38, 0x97, 0xbf, 0x69, 0xe5, 0x27, 0x20, 0xea, 0x66, 0xdb, 0xb6, 0x30, 0xff, - 0xb2, 0x8e, 0xff, 0x23, 0xa9, 0x74, 0x4c, 0x17, 0x55, 0x04, 0x53, 0xa9, 0x93, 0xfd, 0x94, 0xe6, - 0xbe, 0xd5, 0xc6, 0x1b, 0x56, 0x05, 0x3d, 0xea, 0xb5, 0xb2, 0x08, 0x66, 0xe8, 0xee, 0xcb, 0x2a, - 0xd2, 0xab, 0x3c, 0xd6, 0xab, 0xb3, 0xbc, 0x3f, 0x22, 0xc1, 0x73, 0xa1, 0x1e, 0xe6, 0xd3, 0xd9, - 0x8f, 0x94, 0xa7, 0x80, 0xeb, 0xe8, 0x63, 0x79, 0xd7, 0xf5, 0xec, 0x1d, 0x02, 0xfa, 0x92, 0xd9, - 0x25, 0x35, 0x98, 0xc2, 0x35, 0x88, 0xcb, 0xa2, 0xdc, 0x01, 0x4e, 0xf6, 0x1c, 0xb8, 0x09, 0x9d, - 0x8b, 0xc6, 0xce, 0xee, 0x83, 0x2d, 0xc7, 0xb0, 0xdc, 0x9e, 0xed, 0x78, 0xa7, 0x0b, 0x98, 0xf9, - 0x81, 0xef, 0x94, 0x5b, 0xc1, 0x89, 0x07, 0x5c, 0xdb, 0x2a, 0xf5, 0xcc, 0x9a, 0xe9, 0x7a, 0xd0, - 0x2a, 0x75, 0x3a, 0xce, 0xe9, 0x69, 0x5c, 0xd6, 0xc1, 0x17, 0xca, 0x8d, 0x60, 0xee, 0x01, 0xdb, - 0xb4, 0x9a, 0x9e, 0x03, 0x8d, 0x9d, 0x75, 0xa7, 0x7b, 0x1a, 0x90, 0x0d, 0x22, 0x2e, 0x91, 0x76, - 0xbe, 0x05, 0x90, 0x27, 0x90, 0xa8, 0x2f, 0xca, 0x09, 0xbb, 0x37, 0x53, 0x21, 0xc5, 0x5a, 0x8b, - 0xb7, 0x83, 0x29, 0xda, 0x6b, 0x62, 0xf0, 0x67, 0xee, 0x38, 0xd5, 0xb7, 0x40, 0x42, 0xa9, 0xe8, - 0x7e, 0x36, 0xe5, 0x71, 0x20, 0xdf, 0xc6, 0xa2, 0xc2, 0x7a, 0x30, 0x73, 0xc7, 0x75, 0x83, 0x0b, - 0xc5, 0x59, 0x74, 0x9a, 0x55, 0xfd, 0xb2, 0x2c, 0xe4, 0x11, 0x1d, 0xc7, 0x71, 0xb2, 0x9e, 0xe2, - 0x9b, 0xd2, 0x08, 0x5d, 0xf1, 0xad, 0xe0, 0x66, 0xda, 0xcf, 0x52, 0x9b, 0xa6, 0xb2, 0xb1, 0xb8, - 0xee, 0xcf, 0x6a, 0x91, 0xa5, 0xd3, 0x6c, 0x95, 0xf4, 0xd6, 0x46, 0xbd, 0x51, 0x41, 0xb3, 0xe1, - 0x5b, 0xc0, 0x4d, 0x43, 0x72, 0x6b, 0xad, 0x8d, 0x7a, 0x69, 0x55, 0x2b, 0x6e, 0xf2, 0xf6, 0x52, - 0xb3, 0xd5, 0x58, 0xdb, 0xd0, 0xd7, 0xeb, 0xf5, 0x6a, 0x7d, 0x99, 0x10, 0x43, 0x06, 0xea, 0xa9, - 0x30, 0xc3, 0x05, 0xbd, 0xda, 0xd2, 0x36, 0xca, 0x8d, 0xfa, 0x52, 0x75, 0xb9, 0x68, 0x0e, 0x33, - 0xb6, 0x1e, 0x50, 0xce, 0x82, 0xeb, 0x39, 0x4e, 0xaa, 0x8d, 0x3a, 0x9a, 0xa2, 0x97, 0x4b, 0xf5, - 0xb2, 0x86, 0xe6, 0xe3, 0x97, 0x15, 0x15, 0x5c, 0x4d, 0xc8, 0x6d, 0x2c, 0x55, 0x6b, 0xec, 0xae, - 0xda, 0x67, 0x32, 0xca, 0x69, 0x70, 0x15, 0xfb, 0x8e, 0xfa, 0x44, 0x14, 0x7f, 0x33, 0xa3, 0xdc, - 0x08, 0x6e, 0xe0, 0xbe, 0x22, 0x1b, 0x64, 0x1b, 0xd5, 0xca, 0xc6, 0x6a, 0xb5, 0xb9, 0x5a, 0x6a, - 0x95, 0x57, 0x8a, 0x9f, 0xc5, 0xd3, 0x97, 0xc0, 0x1e, 0x67, 0xdc, 0x94, 0x5f, 0xc2, 0xda, 0x09, - 0x25, 0x5e, 0x51, 0x1f, 0x3d, 0x10, 0xf6, 0x78, 0xbb, 0xf8, 0x53, 0xc1, 0x88, 0x53, 0xe1, 0x54, - 0xe8, 0xf6, 0x04, 0xb4, 0x92, 0xe9, 0x50, 0x6b, 0x04, 0x15, 0x3a, 0x0b, 0xae, 0xaf, 0x6b, 0x04, - 0x29, 0x5d, 0x2b, 0x37, 0xce, 0x6b, 0xfa, 0xc6, 0x85, 0x52, 0xad, 0xa6, 0xb5, 0x36, 0x96, 0xaa, - 0x7a, 0xb3, 0x55, 0xdc, 0x54, 0xff, 0x51, 0x0a, 0x96, 0xa5, 0x18, 0x69, 0xfd, 0xa9, 0x94, 0xb4, - 0x59, 0xc7, 0x2e, 0x3f, 0xfd, 0x20, 0xc8, 0xbb, 0x9e, 0xe1, 0xed, 0xba, 0xb4, 0x55, 0x3f, 0x6c, - 0x70, 0xab, 0x5e, 0x68, 0xe2, 0x4c, 0x3a, 0xcd, 0xac, 0x7e, 0x39, 0x93, 0xa4, 0x99, 0x8e, 0x61, - 0x65, 0xca, 0x1c, 0x41, 0xc4, 0x67, 0x80, 0xea, 0x6b, 0x7b, 0xb5, 0xb9, 0x51, 0xaa, 0xe9, 0x5a, - 0xa9, 0x72, 0x31, 0x58, 0x8f, 0x82, 0xca, 0xd5, 0xe0, 0xc4, 0x7a, 0xbd, 0xb4, 0x58, 0xd3, 0x70, - 0x73, 0x69, 0xd4, 0xeb, 0x5a, 0x19, 0xc9, 0xfd, 0x47, 0xf1, 0xee, 0x0f, 0xb2, 0xca, 0x31, 0xdf, - 0xc8, 0x72, 0x62, 0xe4, 0xff, 0x97, 0xc2, 0x6e, 0x6e, 0xa1, 0x86, 0xb1, 0xb4, 0xc6, 0x8b, 0xc3, - 0x97, 0x84, 0x3c, 0xdb, 0x84, 0x38, 0x49, 0x86, 0xc7, 0x7f, 0x19, 0x01, 0x8f, 0xab, 0xc1, 0x09, - 0x16, 0x0f, 0xec, 0xe1, 0x16, 0x0d, 0xc3, 0x9f, 0xc8, 0x60, 0x6a, 0xd5, 0xdc, 0xc2, 0x7e, 0xc6, - 0xbb, 0xa1, 0x81, 0x32, 0x0f, 0xa4, 0xc0, 0x7b, 0x47, 0x32, 0x3b, 0xdc, 0x64, 0x5e, 0x12, 0x5f, - 0x6f, 0x11, 0x9a, 0xb0, 0x7f, 0x39, 0x71, 0xcf, 0x44, 0x19, 0x8e, 0xe8, 0x99, 0x9e, 0x2f, 0x25, - 0xe9, 0x99, 0x06, 0xd3, 0x4a, 0x04, 0x13, 0x32, 0x1d, 0x1c, 0xf8, 0x8c, 0x5d, 0xd3, 0x81, 0x1d, - 0x6c, 0x26, 0xe2, 0x7a, 0xcb, 0x3a, 0x9f, 0x78, 0xce, 0x39, 0x1c, 0x98, 0xac, 0x97, 0xcd, 0x2c, - 0x28, 0x04, 0xa3, 0x09, 0xde, 0xf0, 0x41, 0x2f, 0xb5, 0x7a, 0x63, 0x7d, 0x79, 0x65, 0x63, 0x49, - 0xd7, 0x34, 0xba, 0x44, 0xbc, 0xa5, 0xbe, 0x4b, 0x02, 0x73, 0xb4, 0x86, 0xd4, 0x7b, 0xe2, 0x86, - 0x48, 0x90, 0x29, 0x1c, 0xff, 0xc6, 0x4e, 0x4f, 0x96, 0x79, 0x38, 0x1e, 0x1b, 0x27, 0xc2, 0x58, - 0xf7, 0x89, 0x37, 0x05, 0x4d, 0xe8, 0x3e, 0x0e, 0x94, 0x27, 0x24, 0xa6, 0x98, 0xfe, 0x14, 0xe5, - 0x45, 0x00, 0xe4, 0x9b, 0xb0, 0x0b, 0xdb, 0x9e, 0xfa, 0x61, 0x79, 0xe4, 0x36, 0x11, 0x65, 0x6e, - 0xcb, 0x89, 0xcc, 0xed, 0x6c, 0x0a, 0xe6, 0x76, 0x6e, 0x74, 0x73, 0x3b, 0x9f, 0xd4, 0xdc, 0x9e, - 0x8a, 0x32, 0xb7, 0x63, 0x7a, 0x8d, 0x42, 0x6c, 0xaf, 0xd1, 0x67, 0xa8, 0xeb, 0x35, 0x6a, 0xd2, - 0xf3, 0x89, 0x54, 0x99, 0x3f, 0x99, 0x4f, 0x3a, 0x8e, 0x13, 0xe0, 0x8f, 0xd6, 0x3c, 0xff, 0xc9, - 0x5c, 0x92, 0x71, 0x7f, 0x20, 0xc7, 0xc9, 0x5a, 0xc9, 0x2b, 0xb2, 0x29, 0x2c, 0x3a, 0x2a, 0x8f, - 0x00, 0x37, 0x84, 0xcf, 0x1b, 0xda, 0xd3, 0xaa, 0xcd, 0x56, 0x13, 0xdb, 0xe4, 0xe5, 0x86, 0xae, - 0xaf, 0xaf, 0x91, 0xed, 0xaa, 0x53, 0x40, 0x09, 0xa9, 0xe8, 0xeb, 0x75, 0x62, 0x81, 0x6f, 0xf1, - 0xd4, 0x97, 0xaa, 0xf5, 0xca, 0x46, 0x30, 0xaa, 0xd5, 0x97, 0x1a, 0xc5, 0x6d, 0x65, 0x01, 0xdc, - 0xc2, 0x50, 0xc7, 0x1d, 0x20, 0x29, 0xa1, 0x54, 0xaf, 0x6c, 0xac, 0xd6, 0xb5, 0xd5, 0x46, 0xbd, - 0x5a, 0xc6, 0xe9, 0x4d, 0xad, 0x55, 0x34, 0x91, 0x29, 0xd8, 0x67, 0xf3, 0x37, 0xb5, 0x92, 0x5e, - 0x5e, 0xd1, 0x74, 0x52, 0xe4, 0x03, 0xca, 0x4d, 0xe0, 0x5c, 0xa9, 0xde, 0x68, 0xa1, 0x94, 0x52, - 0xfd, 0x62, 0xeb, 0xe2, 0x9a, 0xb6, 0xb1, 0xa6, 0x37, 0xca, 0x5a, 0xb3, 0x89, 0x46, 0x52, 0x3a, - 0x43, 0x28, 0x76, 0x95, 0x27, 0x83, 0xbb, 0x18, 0xd6, 0xb4, 0x16, 0xf6, 0x8d, 0x58, 0x6d, 0x60, - 0xf7, 0xb8, 0x8a, 0xb6, 0xb1, 0x52, 0x6a, 0x6e, 0x54, 0xeb, 0xe5, 0xc6, 0xea, 0x5a, 0xa9, 0x55, - 0x45, 0x03, 0xee, 0x9a, 0xde, 0x68, 0x35, 0x36, 0xce, 0x6b, 0x7a, 0xb3, 0xda, 0xa8, 0x17, 0x2d, - 0x54, 0x65, 0x66, 0x84, 0xf6, 0x2d, 0x25, 0x5b, 0xb9, 0x1e, 0x9c, 0xf6, 0xd3, 0x6b, 0x0d, 0x24, - 0x68, 0x66, 0xce, 0xd0, 0x63, 0xed, 0xac, 0x66, 0xab, 0xa1, 0x93, 0x59, 0xc3, 0x6a, 0x75, 0x59, - 0x47, 0x53, 0x9d, 0xe2, 0x33, 0x52, 0x9d, 0x53, 0xfc, 0xb3, 0x04, 0xb2, 0x4d, 0xcf, 0xee, 0xa9, - 0x3f, 0x10, 0x76, 0x87, 0x67, 0x00, 0x70, 0xb0, 0x2b, 0x44, 0xc5, 0xf0, 0x0c, 0xba, 0x5a, 0xc3, - 0xa4, 0xa8, 0xbf, 0x21, 0xbc, 0x7f, 0x1b, 0x5a, 0x5d, 0x76, 0x2f, 0x62, 0xf8, 0xf8, 0xae, 0xd8, - 0xb9, 0xc8, 0x68, 0x42, 0xc9, 0xda, 0xc3, 0x8f, 0x8f, 0xb2, 0x43, 0xab, 0x82, 0x53, 0x0c, 0xac, - 0x48, 0xfe, 0xbe, 0xca, 0x40, 0xe5, 0x1a, 0x70, 0x55, 0x9f, 0xf2, 0x61, 0x9d, 0xdb, 0x54, 0x1e, - 0x0e, 0x1e, 0xc6, 0xa8, 0xbf, 0xb6, 0xda, 0x38, 0xaf, 0x05, 0x8a, 0x5e, 0x29, 0xb5, 0x4a, 0xc5, - 0x2d, 0xf5, 0x0b, 0x32, 0xc8, 0xae, 0xda, 0x7b, 0xfd, 0xdb, 0xe6, 0x16, 0xbc, 0xc2, 0xec, 0xad, - 0xf8, 0x8f, 0xfc, 0x11, 0x2c, 0x21, 0xb1, 0xaf, 0x46, 0xbb, 0xc8, 0x7c, 0x49, 0x4a, 0x22, 0xf6, - 0xd5, 0xc3, 0xfa, 0xc5, 0xfc, 0xf5, 0x28, 0x62, 0x8f, 0x10, 0x2d, 0x54, 0xce, 0x81, 0x33, 0xe1, - 0x8b, 0x6a, 0x45, 0xab, 0xb7, 0xaa, 0x4b, 0x17, 0x43, 0xe1, 0x56, 0x75, 0x21, 0xf1, 0x0f, 0xeb, - 0xe6, 0xe2, 0xd7, 0x0a, 0x4e, 0x83, 0x93, 0xe1, 0xbb, 0x65, 0xad, 0xe5, 0xbf, 0x79, 0x40, 0x7d, - 0x4e, 0x0e, 0xcc, 0x92, 0x6e, 0x7f, 0xbd, 0xd7, 0x41, 0xd6, 0xf7, 0xe3, 0x42, 0x74, 0x6f, 0x06, - 0xc7, 0xab, 0x6b, 0x4b, 0xcd, 0xa6, 0x67, 0x3b, 0xc6, 0x16, 0xc4, 0xe3, 0x28, 0x91, 0x56, 0x7f, - 0xb2, 0xfa, 0x5e, 0xe1, 0xd5, 0x7f, 0x7e, 0xa8, 0x21, 0x65, 0x46, 0xa0, 0xfe, 0x35, 0xa1, 0xd5, - 0x7a, 0x01, 0x82, 0xc9, 0xd0, 0x7f, 0x60, 0xcc, 0x6d, 0x2e, 0x1a, 0x97, 0xcd, 0x73, 0xcf, 0x95, - 0xc0, 0x74, 0xcb, 0xdc, 0x81, 0xcf, 0xb4, 0x2d, 0xe8, 0x2a, 0x53, 0x40, 0x5e, 0x5e, 0x6d, 0x15, - 0x8f, 0xa1, 0x3f, 0x68, 0x5a, 0x94, 0xc1, 0x7f, 0x34, 0x54, 0x00, 0xfa, 0x53, 0x6a, 0x15, 0x65, - 0xf4, 0x67, 0x55, 0x6b, 0x15, 0xb3, 0xe8, 0x4f, 0x5d, 0x6b, 0x15, 0x73, 0xe8, 0xcf, 0x5a, 0xad, - 0x55, 0xcc, 0xa3, 0x3f, 0xd5, 0x66, 0xab, 0x38, 0x85, 0xfe, 0x2c, 0x36, 0x5b, 0xc5, 0x02, 0xfa, - 0x73, 0xbe, 0xd9, 0x2a, 0x4e, 0xa3, 0x3f, 0xe5, 0x56, 0xab, 0x08, 0xd0, 0x9f, 0xfb, 0x9a, 0xad, - 0xe2, 0x0c, 0xfa, 0x53, 0x2a, 0xb7, 0x8a, 0xb3, 0xf8, 0x8f, 0xd6, 0x2a, 0xce, 0xa1, 0x3f, 0xcd, - 0x66, 0xab, 0x38, 0x8f, 0x29, 0x37, 0x5b, 0xc5, 0xe3, 0xb8, 0xac, 0x6a, 0xab, 0x58, 0x44, 0x7f, - 0x56, 0x9a, 0xad, 0xe2, 0x09, 0x9c, 0xb9, 0xd9, 0x2a, 0x2a, 0xb8, 0xd0, 0x66, 0xab, 0x78, 0x15, - 0xce, 0xd3, 0x6c, 0x15, 0x4f, 0xe2, 0x22, 0x9a, 0xad, 0xe2, 0xd5, 0x98, 0x0d, 0xad, 0x55, 0x3c, - 0x85, 0xf3, 0xe8, 0xad, 0xe2, 0x35, 0xf8, 0x55, 0xbd, 0x55, 0x3c, 0x8d, 0x19, 0xd3, 0x5a, 0xc5, - 0x6b, 0xf1, 0x1f, 0xbd, 0x55, 0x54, 0xf1, 0xab, 0x52, 0xab, 0x78, 0x9d, 0xfa, 0x30, 0x30, 0xbd, - 0x0c, 0x3d, 0x02, 0xa2, 0x5a, 0x04, 0xf2, 0x32, 0xf4, 0xd8, 0x89, 0xf8, 0x2b, 0xb3, 0xe0, 0x1a, - 0xba, 0x78, 0xb3, 0xe4, 0xd8, 0x3b, 0x35, 0xb8, 0x65, 0xb4, 0xf7, 0xb5, 0x07, 0x91, 0xc1, 0xa7, - 0xbe, 0x30, 0xc3, 0xad, 0x68, 0xf7, 0xc2, 0xde, 0x08, 0xff, 0x8f, 0x35, 0x90, 0xfd, 0x35, 0x6a, - 0x99, 0x5f, 0xa3, 0x8e, 0x32, 0x09, 0xb3, 0x22, 0x13, 0xc9, 0xbf, 0x67, 0x1b, 0x03, 0xb7, 0x21, - 0x95, 0xe9, 0xdb, 0x90, 0x42, 0x2d, 0xac, 0x07, 0x1d, 0xd7, 0xb6, 0x8c, 0x6e, 0x93, 0xba, 0x1f, - 0x91, 0xb9, 0x6a, 0x7f, 0xb2, 0xf2, 0x54, 0xbf, 0x51, 0x11, 0x83, 0xef, 0x49, 0x71, 0xcb, 0x5b, - 0xfd, 0x12, 0x8a, 0x68, 0x5f, 0x9f, 0x0d, 0xda, 0x57, 0x8b, 0x6b, 0x5f, 0x4f, 0x39, 0x04, 0xed, - 0x64, 0x4d, 0xad, 0x3a, 0xda, 0x54, 0x34, 0x74, 0xce, 0xf7, 0xf7, 0xbf, 0x64, 0xf5, 0x0b, 0x12, - 0x38, 0xa5, 0x59, 0x83, 0xa6, 0x32, 0xac, 0x1a, 0xbd, 0x95, 0x85, 0x66, 0x8d, 0x17, 0xe9, 0x5d, - 0x03, 0xab, 0x3d, 0x98, 0x66, 0x84, 0x44, 0x7f, 0x27, 0x90, 0x68, 0x93, 0x93, 0xe8, 0xbd, 0xa3, - 0x93, 0x4e, 0x26, 0xd0, 0xfa, 0x58, 0xfb, 0xae, 0xac, 0xfa, 0xe7, 0x12, 0x38, 0x41, 0x3c, 0x08, - 0xef, 0x23, 0x33, 0x27, 0xdc, 0xdb, 0xf3, 0xd6, 0x57, 0x37, 0x9c, 0x65, 0x11, 0xfd, 0x66, 0x52, - 0xd4, 0xd7, 0xb1, 0x02, 0xbf, 0x9f, 0x17, 0x78, 0x44, 0x3f, 0xde, 0x5f, 0x5c, 0x84, 0xac, 0x7f, - 0x33, 0x90, 0x75, 0x9d, 0x93, 0xf5, 0x5d, 0x23, 0x51, 0x3d, 0x5a, 0x31, 0x7f, 0x33, 0x0b, 0x1e, - 0x46, 0x38, 0xa4, 0x8a, 0x40, 0xfa, 0xc1, 0x92, 0xd5, 0xd1, 0xa1, 0xeb, 0x19, 0x8e, 0xc7, 0xc5, - 0x60, 0xe9, 0x9b, 0x9a, 0x67, 0x52, 0x98, 0x9a, 0x4b, 0x43, 0xa7, 0xe6, 0xea, 0x7b, 0x58, 0x03, - 0xef, 0x02, 0x8f, 0x6c, 0x29, 0x06, 0x83, 0x88, 0x1a, 0x46, 0xb5, 0xa8, 0xc0, 0xf2, 0xfb, 0x61, - 0x0e, 0xe5, 0xa5, 0x43, 0x97, 0x90, 0x0c, 0xf1, 0xdf, 0x18, 0xaf, 0x25, 0x9e, 0x65, 0xdf, 0xf1, - 0x66, 0x63, 0xb1, 0x93, 0xea, 0x14, 0xea, 0xc5, 0x05, 0x30, 0x8d, 0xbb, 0x9c, 0x9a, 0x69, 0x5d, - 0x56, 0xbf, 0x21, 0x83, 0xd9, 0x3a, 0xbc, 0x52, 0xde, 0x36, 0xba, 0x5d, 0x68, 0x6d, 0x41, 0xf5, - 0x01, 0xce, 0xb6, 0x37, 0x7a, 0xbd, 0x7a, 0xb8, 0x3f, 0xec, 0x3f, 0x2a, 0xf7, 0x82, 0x9c, 0xdb, - 0xb6, 0x83, 0xe8, 0x0e, 0x3f, 0x10, 0xb1, 0x7a, 0x5d, 0xda, 0xf5, 0xb6, 0x17, 0x70, 0x59, 0xa5, - 0x9e, 0xd9, 0x44, 0x1f, 0xe8, 0xe4, 0x3b, 0x3a, 0x4e, 0xfe, 0xe5, 0xc0, 0xce, 0x38, 0x13, 0xd3, - 0x19, 0x07, 0x8c, 0x2f, 0xb0, 0x4c, 0x47, 0x2c, 0x92, 0x9c, 0x05, 0x33, 0x6d, 0x3f, 0x4b, 0x70, - 0x4a, 0x8f, 0x4d, 0x52, 0xff, 0x22, 0x51, 0x77, 0x2d, 0x54, 0x78, 0x32, 0xad, 0x82, 0x63, 0x36, - 0x35, 0xaf, 0x06, 0x27, 0x5a, 0x8d, 0xc6, 0xc6, 0x6a, 0xa9, 0x7e, 0x31, 0x0c, 0xb2, 0xb2, 0xa9, - 0xbe, 0x22, 0x0b, 0xe6, 0x9b, 0x76, 0x77, 0x0f, 0x86, 0x38, 0x57, 0x39, 0xf7, 0x4f, 0x56, 0x4e, - 0x99, 0x03, 0x72, 0x52, 0x4e, 0x81, 0xbc, 0x61, 0xb9, 0x57, 0xa0, 0x6f, 0xfe, 0xd3, 0x27, 0x0a, - 0xe3, 0x47, 0xd9, 0x8e, 0x40, 0xe7, 0x61, 0xbc, 0x7b, 0x88, 0x24, 0x79, 0xae, 0x22, 0x80, 0x3c, - 0x07, 0x66, 0x5d, 0xe2, 0x25, 0xd2, 0x62, 0x9c, 0x81, 0xb8, 0x34, 0xcc, 0x22, 0x71, 0x53, 0x92, - 0x29, 0x8b, 0xf8, 0x49, 0x7d, 0x6d, 0xd0, 0x7f, 0xac, 0x73, 0x10, 0x97, 0x0e, 0xc3, 0x58, 0x32, - 0x90, 0x5f, 0x35, 0xee, 0x49, 0xfc, 0x69, 0x70, 0xd2, 0x3f, 0xa1, 0x5e, 0x5e, 0x29, 0xd5, 0x6a, - 0x5a, 0x7d, 0x59, 0xdb, 0xa8, 0x56, 0xc8, 0x7e, 0x72, 0x98, 0x52, 0x6a, 0xb5, 0xb4, 0xd5, 0xb5, - 0x56, 0x73, 0x43, 0x7b, 0x5a, 0x59, 0xd3, 0x2a, 0xd8, 0x01, 0x1b, 0x9f, 0xa0, 0xf4, 0x5d, 0xe5, - 0x4b, 0xf5, 0xe6, 0x05, 0x4d, 0x2f, 0x6e, 0x9f, 0x2b, 0x81, 0x19, 0x66, 0xa0, 0x40, 0xdc, 0x55, - 0xe0, 0xa6, 0xb1, 0xdb, 0xa5, 0xe6, 0x78, 0xf1, 0x18, 0xe2, 0x0e, 0xcb, 0xa6, 0x61, 0x75, 0xf7, - 0x8b, 0x19, 0xa5, 0x08, 0x66, 0xd9, 0x31, 0xa1, 0x28, 0xa9, 0xdf, 0xba, 0x1e, 0x4c, 0x5f, 0xb0, - 0x9d, 0xcb, 0xd8, 0x6b, 0x58, 0xfd, 0x00, 0x09, 0xc6, 0xe6, 0x47, 0x94, 0x60, 0x0c, 0xb0, 0x57, - 0x89, 0xbb, 0x89, 0xf9, 0xd4, 0x16, 0x86, 0x46, 0x8d, 0x38, 0x0b, 0x66, 0xae, 0xf8, 0xb9, 0xc3, - 0x96, 0xce, 0x24, 0xa9, 0xbf, 0x2c, 0xe6, 0xf8, 0x35, 0xbc, 0xc8, 0xf4, 0x57, 0xfd, 0xdf, 0x2e, - 0x81, 0xfc, 0x32, 0xf4, 0x4a, 0xdd, 0x2e, 0x2b, 0xb7, 0x97, 0x09, 0x9f, 0x23, 0xe5, 0x2a, 0x51, - 0xea, 0x76, 0xa3, 0x1b, 0x15, 0x23, 0x20, 0xff, 0xbc, 0x13, 0x97, 0x26, 0xe8, 0xa5, 0x3d, 0xa4, - 0xc0, 0xf4, 0x25, 0xf6, 0xb7, 0xa1, 0x6b, 0xf6, 0xeb, 0x19, 0x33, 0xe9, 0xb1, 0x61, 0x20, 0xbe, - 0x4c, 0xbc, 0x93, 0x94, 0x9f, 0x4f, 0xb9, 0x1f, 0x4c, 0xed, 0xba, 0xb0, 0x6c, 0xb8, 0xfe, 0xd0, - 0xc6, 0xd7, 0xb4, 0x71, 0xe9, 0x01, 0xd8, 0xf6, 0x16, 0xaa, 0x3b, 0x68, 0xe2, 0xb3, 0x4e, 0x32, - 0x06, 0xb1, 0xed, 0xe8, 0xb3, 0xee, 0x53, 0x40, 0xd3, 0xce, 0x2b, 0xa6, 0xb7, 0x5d, 0xde, 0x36, - 0x3c, 0xba, 0xd9, 0x12, 0x3c, 0xab, 0x1f, 0x1a, 0x01, 0xce, 0x58, 0x87, 0x9d, 0xe8, 0xe3, 0xe8, - 0xb7, 0x80, 0x22, 0x36, 0x7f, 0x4c, 0x6b, 0x8b, 0xf0, 0x1f, 0xcc, 0x31, 0x0f, 0xa4, 0x27, 0x06, - 0x7c, 0x0c, 0x1e, 0x39, 0xa3, 0x00, 0xfe, 0x23, 0x32, 0xc8, 0x36, 0x7a, 0xd0, 0x12, 0x3e, 0xa7, - 0x19, 0xe0, 0x20, 0xf5, 0xe1, 0xf0, 0x3e, 0x71, 0x17, 0xe2, 0xa0, 0xd2, 0xa8, 0xe4, 0x08, 0x14, - 0x6e, 0x03, 0x59, 0xd3, 0xda, 0xb4, 0xa9, 0x15, 0x7c, 0x5d, 0x84, 0x5d, 0x54, 0xb5, 0x36, 0x6d, - 0x1d, 0x67, 0x54, 0xdf, 0x27, 0xe6, 0x3d, 0x1c, 0x57, 0x76, 0x32, 0x71, 0x2f, 0x8d, 0x30, 0x16, - 0x29, 0x60, 0x3e, 0x34, 0x51, 0x6b, 0x8d, 0x52, 0xa5, 0xd8, 0x51, 0xff, 0xa6, 0x00, 0xf2, 0x44, - 0x6d, 0xd4, 0x97, 0xc8, 0x40, 0x2e, 0x75, 0x3a, 0x11, 0x60, 0x48, 0x07, 0xc0, 0xb0, 0x7d, 0x2d, - 0xa4, 0x9e, 0xde, 0xfe, 0x33, 0x1f, 0xc1, 0x4d, 0x70, 0x6c, 0xa0, 0x4d, 0xb2, 0xd4, 0xe9, 0x44, - 0x9f, 0x7b, 0x08, 0x0a, 0x94, 0xf8, 0x02, 0xd9, 0x1e, 0x42, 0x16, 0xeb, 0x21, 0x12, 0x0f, 0x24, - 0x91, 0xfc, 0xa5, 0xdf, 0x4a, 0xfe, 0x5e, 0x02, 0x53, 0x35, 0xd3, 0xf5, 0x10, 0x36, 0x25, 0x11, - 0x6c, 0xae, 0x07, 0xd3, 0xbe, 0x68, 0x50, 0x97, 0x89, 0xc6, 0x83, 0x30, 0x81, 0x9f, 0xc9, 0xdf, - 0xc7, 0xa3, 0xf3, 0xf8, 0xf8, 0xda, 0x53, 0x2e, 0xa2, 0xcf, 0xc4, 0x85, 0xc5, 0x4a, 0xfd, 0xc5, - 0xfe, 0x4a, 0x20, 0xf0, 0x55, 0x4e, 0xe0, 0x77, 0x8e, 0x52, 0x64, 0xfa, 0x42, 0xff, 0x43, 0x09, - 0x00, 0x54, 0x36, 0x3d, 0x78, 0xfc, 0x28, 0x2e, 0x9c, 0x48, 0x8c, 0x74, 0x5f, 0xc1, 0x4a, 0x77, - 0x95, 0x97, 0xee, 0x0f, 0x0d, 0xaf, 0x6a, 0xdc, 0x01, 0x63, 0xa5, 0x08, 0x64, 0x33, 0x10, 0x2d, - 0xfa, 0xab, 0xbe, 0x3d, 0x10, 0xea, 0x1a, 0x27, 0xd4, 0xbb, 0x47, 0x2c, 0x29, 0x7d, 0xb9, 0xfe, - 0xb1, 0x04, 0xa6, 0x9a, 0xd0, 0x43, 0x5d, 0xa7, 0x7a, 0x5e, 0xa4, 0xd7, 0x67, 0xda, 0xb6, 0x24, - 0xd8, 0xb6, 0xbf, 0x93, 0x11, 0x0d, 0x2c, 0x17, 0x4a, 0x86, 0xf2, 0x14, 0xb1, 0x7a, 0xf1, 0x7a, - 0xa1, 0xc0, 0x72, 0xc3, 0xa8, 0xa5, 0x2f, 0xdd, 0xb7, 0x4a, 0x81, 0xa7, 0x09, 0x7f, 0x2e, 0x90, - 0x35, 0xab, 0x33, 0x07, 0xcd, 0x6a, 0xf1, 0x73, 0x81, 0x6c, 0x1d, 0xa3, 0x1d, 0x1b, 0x12, 0x1b, - 0x20, 0x63, 0xf0, 0x39, 0x18, 0x45, 0x5e, 0xcf, 0x96, 0x41, 0x9e, 0x6e, 0x3e, 0xdc, 0x1b, 0xbf, - 0xf7, 0x30, 0x7c, 0x6a, 0xf2, 0xfe, 0x11, 0x4c, 0xc1, 0xb8, 0x65, 0xfd, 0x80, 0x0d, 0x89, 0x61, - 0xe3, 0x56, 0x90, 0xc3, 0xe1, 0xb7, 0xe9, 0x38, 0x17, 0xba, 0x8b, 0xf8, 0x24, 0x34, 0xf4, 0x56, - 0x27, 0x99, 0x12, 0xa3, 0x30, 0x86, 0x9d, 0x80, 0x51, 0x50, 0xf8, 0xa6, 0x02, 0xc0, 0xda, 0xee, - 0xa5, 0xae, 0xe9, 0x6e, 0x9b, 0x16, 0xf6, 0x31, 0x9b, 0xa5, 0x8f, 0x24, 0x8a, 0x74, 0xac, 0x49, - 0x18, 0x69, 0x14, 0x14, 0x81, 0xbc, 0xeb, 0x98, 0xd4, 0x44, 0x46, 0x7f, 0x95, 0x7b, 0x02, 0x6f, - 0xcd, 0x6c, 0x5f, 0xe0, 0x17, 0x24, 0x86, 0x90, 0x83, 0x05, 0xa6, 0xf4, 0xd0, 0x6b, 0x93, 0x0d, - 0x15, 0x9e, 0xe3, 0x43, 0x85, 0x73, 0xa7, 0xc1, 0xf3, 0x7d, 0xa7, 0xc1, 0x11, 0x8e, 0xae, 0xf9, - 0x4c, 0x88, 0x5d, 0x97, 0x64, 0x1d, 0xff, 0x47, 0x5f, 0x60, 0xf7, 0x22, 0xec, 0xdd, 0x47, 0xce, - 0x1c, 0x84, 0x09, 0x6c, 0x9f, 0x37, 0x2d, 0xd8, 0xe7, 0x7d, 0x2c, 0x9c, 0x3b, 0xd9, 0x82, 0xc6, - 0x74, 0x02, 0xc9, 0x71, 0xec, 0x66, 0xfb, 0xd8, 0x55, 0x3f, 0x29, 0x1c, 0xc8, 0x93, 0x91, 0x71, - 0xec, 0x2c, 0x88, 0x72, 0x20, 0x05, 0x1c, 0x30, 0x7b, 0xc8, 0x71, 0x3d, 0xf0, 0x30, 0xfa, 0xc9, - 0x74, 0x79, 0x67, 0x34, 0x1b, 0xdb, 0x3f, 0x56, 0xdf, 0x58, 0xbc, 0x4f, 0x2b, 0xb7, 0x8a, 0xf0, - 0xe0, 0x51, 0x7b, 0x7c, 0xa8, 0x9e, 0x1c, 0xa0, 0x0f, 0xd7, 0x74, 0xd4, 0xff, 0x21, 0x81, 0x3c, - 0x35, 0x37, 0xee, 0x3d, 0x24, 0x84, 0xea, 0x2b, 0x47, 0x81, 0x24, 0x36, 0xba, 0xc9, 0xe7, 0x92, - 0x02, 0x30, 0x06, 0x03, 0xe3, 0x62, 0x6a, 0x00, 0xa8, 0xff, 0x24, 0x81, 0x2c, 0x32, 0x83, 0xc4, - 0x62, 0x47, 0x7c, 0x56, 0xd8, 0xa5, 0x98, 0x11, 0x00, 0x22, 0x1f, 0xa1, 0xdf, 0x8b, 0x60, 0xba, - 0x47, 0x32, 0x06, 0x91, 0x4b, 0x6e, 0x14, 0xe8, 0x8c, 0xa0, 0x1e, 0x7e, 0xc6, 0x4c, 0x39, 0xe3, - 0xdc, 0x92, 0xe3, 0xf9, 0x49, 0x06, 0x87, 0x36, 0x8e, 0x30, 0x13, 0x9b, 0xea, 0xbf, 0x4a, 0x00, - 0xe8, 0xd0, 0xb5, 0xbb, 0x7b, 0x70, 0xdd, 0x31, 0xd5, 0xeb, 0x42, 0x00, 0x68, 0xb3, 0xcf, 0x84, - 0xcd, 0xfe, 0xf3, 0x92, 0xa8, 0xf3, 0x30, 0xa7, 0x79, 0x3e, 0xf1, 0x08, 0xf1, 0x3f, 0x19, 0x4c, - 0x51, 0x39, 0x52, 0x9b, 0x52, 0x4c, 0xf8, 0xfe, 0x47, 0xea, 0x07, 0x85, 0x9c, 0x8f, 0x45, 0x38, - 0x4a, 0x06, 0x40, 0x79, 0x04, 0x00, 0x8e, 0x83, 0x19, 0x1f, 0x80, 0x75, 0xbd, 0x5a, 0x84, 0xea, - 0xbb, 0x65, 0xec, 0xa1, 0x41, 0x06, 0xb7, 0xc3, 0xf7, 0x34, 0x7f, 0x2e, 0x3c, 0xd9, 0x67, 0xe4, - 0x11, 0x94, 0x9f, 0x12, 0x40, 0xbf, 0x2b, 0x34, 0xbb, 0x17, 0x60, 0xe8, 0xa1, 0xd2, 0x5f, 0x9d, - 0xd3, 0xc0, 0x1c, 0x67, 0x95, 0x28, 0xa7, 0xc1, 0x49, 0x2e, 0x81, 0x8c, 0x77, 0x9d, 0xe2, 0x31, - 0x45, 0x05, 0xa7, 0xb8, 0x37, 0xf4, 0x01, 0x76, 0x8a, 0x19, 0xf5, 0x5d, 0x7f, 0x92, 0x09, 0xd6, - 0x7b, 0xde, 0x9f, 0xa5, 0xab, 0x6f, 0x9f, 0xe6, 0x83, 0x65, 0xb6, 0x6d, 0xcb, 0x83, 0x0f, 0x32, - 0x6e, 0x2e, 0x41, 0x42, 0xac, 0xd5, 0x70, 0x1a, 0x4c, 0x79, 0x0e, 0xeb, 0xfa, 0xe2, 0x3f, 0xb2, - 0x8a, 0x95, 0xe3, 0x15, 0xab, 0x0e, 0xce, 0x99, 0x56, 0xbb, 0xbb, 0xdb, 0x81, 0x3a, 0xec, 0x1a, - 0x48, 0x86, 0x6e, 0xc9, 0xad, 0xc0, 0x1e, 0xb4, 0x3a, 0xd0, 0xf2, 0x08, 0x9f, 0xfe, 0xb9, 0x59, - 0x81, 0x9c, 0xbc, 0x32, 0xde, 0xc3, 0x2b, 0xe3, 0xa3, 0x06, 0x2d, 0x01, 0xc7, 0xac, 0x01, 0xde, - 0x09, 0x00, 0xa9, 0xdb, 0x79, 0x13, 0x5e, 0xa1, 0x6a, 0xd8, 0x1f, 0xff, 0xbe, 0x11, 0x64, 0xd0, - 0x99, 0xcc, 0xea, 0x57, 0x03, 0xf5, 0x7b, 0x0a, 0xa7, 0x7e, 0xb7, 0x0a, 0xb2, 0x90, 0x4c, 0xeb, - 0x7a, 0x23, 0x68, 0xdd, 0x1c, 0x98, 0x0e, 0x77, 0xa3, 0x65, 0xe5, 0x5a, 0x70, 0xb5, 0xef, 0xa1, - 0x5c, 0xd7, 0xb4, 0x4a, 0x73, 0x63, 0x7d, 0x6d, 0x59, 0x2f, 0x55, 0xb4, 0x22, 0x40, 0xfa, 0x49, - 0xf4, 0x32, 0x70, 0x2c, 0xce, 0xaa, 0x7f, 0x24, 0x81, 0x1c, 0x3e, 0xf4, 0xad, 0x3e, 0x7d, 0x4c, - 0x9a, 0xe3, 0x72, 0x4e, 0x53, 0xc1, 0xb8, 0x2b, 0x7e, 0x17, 0x0a, 0x15, 0x26, 0xe6, 0xea, 0x50, - 0x77, 0xa1, 0xc4, 0x10, 0x4a, 0x7f, 0x26, 0x84, 0x9a, 0x64, 0x73, 0xdb, 0xbe, 0xf2, 0x1f, 0xb9, - 0x49, 0xa2, 0xfa, 0x1f, 0x71, 0x93, 0x1c, 0xc0, 0xc2, 0xc4, 0x9b, 0xe4, 0x80, 0x76, 0x17, 0xd3, - 0x4c, 0xd5, 0x8f, 0xe6, 0x82, 0xf9, 0xdf, 0xa7, 0xa4, 0x43, 0xed, 0x9d, 0x95, 0xc0, 0x9c, 0x69, - 0x79, 0xd0, 0xb1, 0x8c, 0xee, 0x52, 0xd7, 0xd8, 0xf2, 0xed, 0xd3, 0xeb, 0x0e, 0x5c, 0xfd, 0x11, - 0xe6, 0xd1, 0xf9, 0x2f, 0x94, 0x33, 0x00, 0x78, 0x70, 0xa7, 0xd7, 0x35, 0xbc, 0x50, 0xf5, 0x98, - 0x14, 0x56, 0xfb, 0xb2, 0xbc, 0xf6, 0xdd, 0x0e, 0xae, 0x22, 0xa0, 0xb5, 0xf6, 0x7b, 0x70, 0xdd, - 0x32, 0x9f, 0xb1, 0x8b, 0x63, 0x2b, 0x13, 0x1d, 0x1d, 0xf4, 0x8a, 0xdb, 0x15, 0xca, 0xf3, 0xbb, - 0x42, 0xca, 0xdd, 0xe0, 0x5a, 0x1c, 0x36, 0x1b, 0xdf, 0x4a, 0x72, 0xc1, 0xec, 0x6c, 0x41, 0xaf, - 0xba, 0xb9, 0x6a, 0xba, 0xae, 0x69, 0x6d, 0xe1, 0xe9, 0x78, 0x41, 0x8f, 0xce, 0xa0, 0xfe, 0x2f, - 0xe1, 0xb8, 0x4d, 0x7e, 0x9f, 0x31, 0x24, 0x6e, 0x93, 0xcd, 0x6f, 0xdb, 0x85, 0xed, 0x34, 0x58, - 0xd5, 0xc9, 0x0a, 0xac, 0xea, 0xb0, 0x98, 0xe6, 0x04, 0x57, 0x07, 0x5e, 0x23, 0x14, 0x18, 0x2a, - 0xae, 0x1a, 0xe9, 0xf7, 0x7d, 0xdf, 0x96, 0xc1, 0x3c, 0x29, 0x7a, 0xd1, 0xb6, 0x2f, 0xef, 0x18, - 0xce, 0x65, 0xf5, 0xa7, 0x0f, 0xb7, 0x0b, 0x1c, 0xbb, 0x7b, 0x15, 0xb5, 0xa5, 0xdb, 0xa7, 0xbc, - 0xd9, 0x7e, 0xe5, 0x55, 0x7f, 0x47, 0x78, 0x4a, 0xc2, 0xc9, 0xd3, 0xaf, 0xd4, 0x64, 0xb6, 0xb7, - 0xc4, 0x8e, 0x47, 0x8a, 0x30, 0x98, 0x3e, 0xf0, 0xbf, 0x15, 0x00, 0xef, 0x8f, 0x23, 0xec, 0xce, - 0xc0, 0x38, 0x71, 0x57, 0xbf, 0x36, 0x1a, 0x76, 0x3e, 0x5f, 0x23, 0x60, 0x57, 0x04, 0xf2, 0xe5, - 0xc0, 0x99, 0x09, 0xfd, 0x65, 0x2b, 0x94, 0x4d, 0x0f, 0xcd, 0x08, 0x96, 0x27, 0x82, 0xe6, 0x49, - 0x9e, 0x85, 0x46, 0x2f, 0x55, 0x4c, 0xbf, 0x22, 0xbc, 0xe3, 0x36, 0x50, 0x40, 0x84, 0xbb, 0xc9, - 0xb4, 0x4a, 0xb1, 0xed, 0x3a, 0x71, 0x36, 0xd3, 0x47, 0xf3, 0x85, 0x39, 0x30, 0xed, 0xc7, 0xcf, - 0xc2, 0x57, 0x13, 0x06, 0x18, 0x9e, 0x02, 0x79, 0xd7, 0xde, 0x75, 0xda, 0x90, 0xee, 0x81, 0xd2, - 0xa7, 0x11, 0xf6, 0xeb, 0x86, 0x9a, 0x0b, 0x07, 0x2c, 0x92, 0x6c, 0x62, 0x8b, 0x24, 0xda, 0xde, - 0x8d, 0xb1, 0x1f, 0xd4, 0x17, 0x09, 0x5f, 0x1b, 0xc2, 0x61, 0xd6, 0x84, 0xde, 0x43, 0xd1, 0x08, - 0xf8, 0x75, 0xa1, 0xdd, 0xa0, 0x21, 0x35, 0x49, 0xa6, 0x72, 0x8d, 0x11, 0xec, 0xe0, 0xeb, 0xc0, - 0x35, 0x7e, 0x0e, 0x6a, 0x00, 0x63, 0x83, 0x77, 0x5d, 0xaf, 0x15, 0x65, 0xf5, 0xd9, 0x59, 0x50, - 0x24, 0xac, 0x35, 0x02, 0x5b, 0x50, 0x7d, 0x59, 0xe6, 0xa8, 0x0d, 0xde, 0xe8, 0x19, 0xec, 0xef, - 0x4b, 0xa2, 0xc1, 0xc6, 0x39, 0xc1, 0x87, 0xb5, 0x8b, 0xd0, 0xa4, 0x11, 0x9a, 0x59, 0x8c, 0xf2, - 0xa9, 0x6f, 0xc9, 0x88, 0xc4, 0x2e, 0x17, 0x63, 0x31, 0xfd, 0x5e, 0xe9, 0x3b, 0x59, 0x3f, 0x0c, - 0xe2, 0x92, 0x63, 0xef, 0xac, 0x3b, 0x5d, 0xf5, 0xff, 0x08, 0x5d, 0x0d, 0x11, 0x31, 0xbb, 0x90, - 0xa2, 0x67, 0x17, 0x78, 0x45, 0xba, 0x1b, 0x6e, 0x85, 0x75, 0x47, 0x18, 0xbe, 0x95, 0x9b, 0xc0, - 0xbc, 0xd1, 0xe9, 0xac, 0x19, 0x5b, 0xb0, 0x8c, 0xa6, 0xed, 0x96, 0x47, 0x43, 0xa4, 0xf5, 0xa5, - 0xc6, 0x4e, 0x65, 0xf8, 0x3e, 0x72, 0xea, 0x80, 0x55, 0x2a, 0xbe, 0x0c, 0xcb, 0x81, 0x48, 0xe5, - 0x37, 0x91, 0xe1, 0x0f, 0x0d, 0x19, 0xed, 0x6d, 0x23, 0x0c, 0xe8, 0x48, 0x9f, 0x04, 0x7d, 0xb1, - 0x04, 0xf8, 0x4e, 0x5f, 0xf3, 0x7e, 0x4d, 0x02, 0x53, 0x08, 0x8f, 0x52, 0xa7, 0xa3, 0x3e, 0x92, - 0x8b, 0x7b, 0x1a, 0xe9, 0x0d, 0xf7, 0x7c, 0x61, 0xd7, 0x44, 0xbf, 0x86, 0x84, 0x7e, 0x04, 0x26, - 0xa1, 0x10, 0x25, 0x4e, 0x88, 0x62, 0xf1, 0x4b, 0x63, 0x8b, 0x48, 0x5f, 0x7c, 0x9f, 0x95, 0xc0, - 0x9c, 0x3f, 0xcf, 0x58, 0x82, 0x5e, 0x7b, 0x5b, 0xbd, 0x53, 0x74, 0x9d, 0x8b, 0xb6, 0xc4, 0x60, - 0x4b, 0xb8, 0xab, 0x7e, 0x2f, 0x93, 0x50, 0xe5, 0xb9, 0x92, 0x23, 0x16, 0x09, 0x13, 0xe9, 0x62, - 0x1c, 0xc1, 0xf4, 0x85, 0xf9, 0x55, 0x09, 0x80, 0x96, 0x1d, 0x4c, 0x96, 0x0f, 0x21, 0xc9, 0x9f, - 0x11, 0xde, 0x2d, 0xa6, 0x15, 0x0f, 0x8b, 0x4d, 0xde, 0x73, 0x08, 0x3a, 0x53, 0x0d, 0x2b, 0x69, - 0x22, 0x6d, 0x7d, 0xba, 0xb2, 0xdb, 0xeb, 0x9a, 0x6d, 0xc3, 0xeb, 0xf7, 0x00, 0x8c, 0x16, 0x2f, - 0xbe, 0xd7, 0x3b, 0x91, 0xd1, 0x18, 0x94, 0x11, 0x21, 0x4b, 0x12, 0x27, 0x48, 0xf2, 0xe3, 0x04, - 0x09, 0x7a, 0xf5, 0x0c, 0x21, 0x3e, 0x01, 0xf5, 0x94, 0xc1, 0xf1, 0x46, 0x0f, 0x5a, 0x8b, 0x0e, - 0x34, 0x3a, 0x6d, 0x67, 0x77, 0xe7, 0x92, 0xcb, 0xba, 0xaf, 0xc6, 0xeb, 0x28, 0xb3, 0x72, 0x2d, - 0x71, 0x2b, 0xd7, 0xea, 0x8f, 0xc9, 0xa2, 0x91, 0xdc, 0x98, 0xfd, 0x15, 0x86, 0x87, 0x11, 0x86, - 0xba, 0x44, 0x4e, 0x57, 0x7d, 0x8b, 0xd4, 0xd9, 0x24, 0x8b, 0xd4, 0x6f, 0x16, 0x8a, 0x0b, 0x27, - 0x54, 0xaf, 0x89, 0xf8, 0xce, 0xcd, 0x37, 0xa1, 0x17, 0x01, 0xef, 0x8d, 0x60, 0xee, 0x52, 0xf8, - 0x26, 0x80, 0x98, 0x4f, 0x1c, 0xe0, 0xd1, 0xfa, 0xd6, 0xa4, 0x2b, 0x34, 0x3c, 0x0b, 0x11, 0xe8, - 0x06, 0x08, 0x4a, 0x22, 0x6e, 0x73, 0x89, 0x96, 0x5b, 0x62, 0xcb, 0x4f, 0x1f, 0x85, 0x4f, 0x4a, - 0x60, 0x06, 0xdf, 0x56, 0xbe, 0xb8, 0x8f, 0x0f, 0x82, 0x0a, 0x1a, 0x25, 0x2f, 0x64, 0xc5, 0xac, - 0x80, 0x6c, 0xd7, 0xb4, 0x2e, 0xfb, 0xfe, 0x8e, 0xe8, 0x7f, 0x78, 0xc5, 0xa9, 0x34, 0xe0, 0x8a, - 0xd3, 0x60, 0x9b, 0x24, 0x28, 0x37, 0x62, 0x34, 0x7d, 0x43, 0x46, 0xe4, 0x8a, 0xd3, 0xa1, 0xe4, - 0xd2, 0x17, 0xe3, 0x5f, 0x65, 0x41, 0xbe, 0x09, 0x0d, 0xa7, 0xbd, 0xad, 0xbe, 0x5f, 0x1a, 0x38, - 0x95, 0x28, 0xf0, 0x53, 0x89, 0x25, 0x30, 0xb5, 0x69, 0x76, 0x3d, 0xe8, 0x10, 0x1f, 0x70, 0xb6, - 0x6b, 0x27, 0x4d, 0x7c, 0xb1, 0x6b, 0xb7, 0x2f, 0x2f, 0x50, 0xd3, 0x7e, 0xc1, 0x8f, 0x37, 0xbd, - 0xb0, 0x84, 0x3f, 0xd2, 0xfd, 0x8f, 0x91, 0x41, 0xe8, 0xda, 0x8e, 0x17, 0x75, 0x7f, 0x51, 0x04, - 0x95, 0xa6, 0xed, 0x78, 0x3a, 0xf9, 0x10, 0xc1, 0xbc, 0xb9, 0xdb, 0xed, 0xb6, 0xe0, 0x83, 0x9e, - 0x3f, 0xad, 0xf3, 0x9f, 0x91, 0xb1, 0x68, 0x6f, 0x6e, 0xba, 0x90, 0x2c, 0x2a, 0xe4, 0x74, 0xfa, - 0xa4, 0x9c, 0x04, 0xb9, 0xae, 0xb9, 0x63, 0x92, 0x89, 0x48, 0x4e, 0x27, 0x0f, 0xca, 0x2d, 0xa0, - 0x18, 0xce, 0x81, 0x08, 0xa3, 0xa7, 0xf3, 0xb8, 0x69, 0x1e, 0x48, 0x47, 0x3a, 0x73, 0x19, 0xee, - 0xbb, 0xa7, 0xa7, 0xf0, 0x7b, 0xfc, 0x5f, 0x7d, 0x6d, 0xd2, 0x0d, 0x13, 0x22, 0xf1, 0xe8, 0x19, - 0xae, 0x03, 0xdb, 0xb6, 0xd3, 0xf1, 0x65, 0x13, 0x3d, 0xc1, 0xa0, 0xf9, 0x92, 0x6d, 0x73, 0x0c, - 0x2c, 0x3c, 0x7d, 0x4d, 0x7b, 0x4f, 0x1e, 0x75, 0x9b, 0xa8, 0xe8, 0x0b, 0xa6, 0xb7, 0xbd, 0x0a, - 0x3d, 0x43, 0xfd, 0x2b, 0x79, 0xa0, 0xc6, 0xcd, 0xfc, 0xff, 0x1a, 0x37, 0x44, 0xe3, 0x48, 0xcc, - 0x30, 0x6f, 0xd7, 0xb1, 0x90, 0x1c, 0xa9, 0x1f, 0x2d, 0x93, 0xa2, 0xdc, 0x0d, 0xae, 0x0d, 0x9f, - 0xfc, 0xa5, 0xd4, 0x0a, 0xe3, 0x5a, 0x5b, 0xd0, 0xa3, 0x33, 0x28, 0x6b, 0xe0, 0x11, 0xe4, 0xe5, - 0x4a, 0x6b, 0xb5, 0xb6, 0x62, 0x6e, 0x6d, 0x77, 0xcd, 0xad, 0x6d, 0xcf, 0xad, 0x5a, 0xae, 0x07, - 0x8d, 0x4e, 0x63, 0x53, 0x27, 0x37, 0x8f, 0x01, 0x4c, 0x47, 0x24, 0x2b, 0xef, 0x23, 0x2e, 0x36, - 0xba, 0xb1, 0x9a, 0x12, 0xd1, 0x52, 0x9e, 0x80, 0x5a, 0x8a, 0xbb, 0xdb, 0x0d, 0x30, 0xbd, 0xbe, - 0x0f, 0xd3, 0x50, 0xd5, 0x77, 0xbb, 0xb8, 0xb9, 0xe0, 0xcc, 0x49, 0xc7, 0xb9, 0x18, 0x4e, 0xd2, - 0x6f, 0x36, 0xff, 0x27, 0x0f, 0x72, 0xcb, 0x8e, 0xd1, 0xdb, 0x56, 0x9f, 0xcd, 0xf4, 0xcf, 0xe3, - 0x6a, 0x13, 0x81, 0x76, 0x4a, 0xc3, 0xb4, 0x53, 0x1e, 0xa2, 0x9d, 0x59, 0x46, 0x3b, 0xa3, 0x17, - 0x9d, 0xcf, 0x81, 0xd9, 0xb6, 0xdd, 0xed, 0xc2, 0x36, 0x92, 0x47, 0xb5, 0x83, 0x57, 0x7b, 0xa6, - 0x75, 0x2e, 0x0d, 0xc7, 0xe4, 0x87, 0x5e, 0x93, 0xac, 0xb1, 0x13, 0xa5, 0x0f, 0x13, 0xd4, 0x97, - 0x49, 0x20, 0xab, 0x75, 0xb6, 0x20, 0xb7, 0x0e, 0x9f, 0x61, 0xd6, 0xe1, 0x4f, 0x81, 0xbc, 0x67, - 0x38, 0x5b, 0xd0, 0xf3, 0xd7, 0x09, 0xc8, 0x53, 0x70, 0x55, 0x80, 0xcc, 0x5c, 0x15, 0xf0, 0x43, - 0x20, 0x8b, 0x64, 0x46, 0xdd, 0xe2, 0x1f, 0x31, 0x08, 0x7e, 0x2c, 0xfb, 0x05, 0x54, 0xe2, 0x02, - 0xaa, 0xb5, 0x8e, 0x3f, 0xe8, 0xc7, 0x3a, 0x77, 0x30, 0x94, 0xed, 0xf5, 0x60, 0xda, 0x6c, 0xdb, - 0x56, 0x75, 0xc7, 0xd8, 0x82, 0xb4, 0x9a, 0x61, 0x82, 0xff, 0x56, 0xdb, 0xb1, 0x1f, 0x30, 0xe9, - 0xa2, 0x56, 0x98, 0x80, 0xaa, 0xb0, 0x6d, 0x76, 0x3a, 0xd0, 0xa2, 0x2d, 0x9b, 0x3e, 0x9d, 0x3b, - 0x03, 0xb2, 0x88, 0x07, 0xa4, 0x3f, 0xc8, 0x58, 0x28, 0x1e, 0x53, 0x66, 0x51, 0xb3, 0x22, 0x8d, - 0xb7, 0x98, 0xe1, 0xd7, 0x5c, 0x45, 0xbc, 0x86, 0x48, 0xe5, 0x06, 0x37, 0xae, 0xc7, 0x80, 0x9c, - 0x65, 0x77, 0xe0, 0xd0, 0x41, 0x88, 0xe4, 0x52, 0x1e, 0x0f, 0x72, 0xb0, 0x83, 0x7a, 0x05, 0x19, - 0x67, 0x3f, 0x13, 0x2f, 0x4b, 0x9d, 0x64, 0x4e, 0xe6, 0x9a, 0x34, 0x88, 0xdb, 0xf4, 0x1b, 0xe0, - 0x4f, 0x4c, 0x81, 0xe3, 0xa4, 0x0f, 0x68, 0xee, 0x5e, 0x42, 0xa4, 0x2e, 0x41, 0xf5, 0xf5, 0x83, - 0x07, 0xae, 0xe3, 0xbc, 0xb2, 0x9f, 0x04, 0x39, 0x77, 0xf7, 0x52, 0x60, 0x84, 0x92, 0x07, 0xb6, - 0xe9, 0x4a, 0x63, 0x19, 0xce, 0xe4, 0x51, 0x87, 0x33, 0x6e, 0x68, 0x92, 0xfd, 0xc6, 0x1f, 0x0e, - 0x64, 0xe4, 0x40, 0x87, 0x3f, 0x90, 0x0d, 0x1a, 0x86, 0x4e, 0x83, 0x29, 0x63, 0xd3, 0x83, 0x4e, - 0x68, 0x26, 0xd2, 0x47, 0x34, 0x54, 0x5e, 0x82, 0x9b, 0xb6, 0x83, 0xc4, 0x42, 0xc2, 0xca, 0x06, - 0xcf, 0x4c, 0xcb, 0x05, 0xdc, 0x0e, 0xda, 0xad, 0xe0, 0x84, 0x65, 0x57, 0x60, 0x8f, 0xca, 0x99, - 0xa0, 0x38, 0x47, 0x6e, 0x77, 0x3f, 0xf0, 0xe2, 0x40, 0x57, 0x32, 0x7f, 0xb0, 0x2b, 0x51, 0x3f, - 0x9f, 0x74, 0xce, 0xdc, 0x07, 0xf4, 0xd8, 0x2c, 0x34, 0xe5, 0x49, 0x60, 0xb6, 0x43, 0x3d, 0xc4, - 0xda, 0x66, 0xd0, 0x4a, 0x22, 0xbf, 0xe3, 0x32, 0x87, 0x8a, 0x94, 0x65, 0x15, 0x69, 0x19, 0x14, - 0xf0, 0x71, 0x6c, 0xa4, 0x49, 0xb9, 0x3e, 0x8f, 0x7c, 0x3c, 0xad, 0x0b, 0x2a, 0xc5, 0x88, 0x6d, - 0xa1, 0x4c, 0x3f, 0xd1, 0x83, 0x8f, 0x93, 0xcd, 0xbe, 0xe3, 0x25, 0x94, 0x7e, 0x73, 0xfc, 0x95, - 0x3c, 0xb8, 0xb6, 0xec, 0xd8, 0xae, 0x8b, 0x8f, 0xe0, 0xf4, 0x37, 0xcc, 0x37, 0x4a, 0xdc, 0xa5, - 0x41, 0x0f, 0xe9, 0xe6, 0x37, 0xa8, 0x41, 0x4d, 0xae, 0x69, 0xfc, 0xb9, 0x70, 0xd0, 0x9b, 0x60, - 0xff, 0x21, 0x42, 0xe8, 0xff, 0x31, 0x1a, 0xc9, 0x7b, 0x32, 0x22, 0x71, 0x78, 0x12, 0xca, 0x2a, - 0xfd, 0xe6, 0xf2, 0x15, 0x09, 0x5c, 0xd7, 0xcf, 0xcd, 0xba, 0xe5, 0x06, 0x0d, 0xe6, 0x86, 0x21, - 0xed, 0x85, 0x8f, 0xdb, 0x12, 0x7b, 0x47, 0x70, 0x44, 0xdd, 0x99, 0xd2, 0x22, 0x16, 0x4b, 0xc2, - 0x03, 0x3d, 0x71, 0x77, 0x04, 0x27, 0x26, 0x9f, 0xbe, 0x70, 0x7f, 0x3f, 0x0b, 0x8e, 0x2f, 0x3b, - 0xf6, 0x6e, 0xcf, 0x0d, 0x7b, 0xa0, 0x3f, 0x1d, 0xbc, 0x21, 0x9b, 0x17, 0x31, 0x0d, 0xce, 0x82, - 0x19, 0x87, 0x5a, 0x73, 0xe1, 0xf6, 0x2c, 0x9b, 0xc4, 0xf6, 0x5e, 0xf2, 0x61, 0x7a, 0xaf, 0xb0, - 0x9f, 0xc9, 0x72, 0xfd, 0x4c, 0x7f, 0xcf, 0x91, 0x1b, 0xd0, 0x73, 0xfc, 0x89, 0x94, 0x70, 0x50, - 0xed, 0x13, 0x51, 0x44, 0x7f, 0x51, 0x06, 0xf9, 0x2d, 0x9c, 0x91, 0x76, 0x17, 0x8f, 0x16, 0xab, - 0x19, 0x26, 0xae, 0xd3, 0x4f, 0x43, 0xb9, 0xca, 0xac, 0x0e, 0x27, 0x1a, 0xe0, 0xe2, 0xb9, 0x4d, - 0x5f, 0xa9, 0x5e, 0x9b, 0x05, 0xb3, 0x41, 0xe9, 0xd5, 0x8e, 0xcb, 0x45, 0x87, 0x65, 0x34, 0x6a, - 0x4e, 0x44, 0xa3, 0x0e, 0xac, 0x33, 0x07, 0xa3, 0x8e, 0xcc, 0x8c, 0x3a, 0x03, 0x47, 0x97, 0xd9, - 0x88, 0xd1, 0x45, 0x7d, 0x96, 0x2c, 0x7a, 0xed, 0x1e, 0xdf, 0xb5, 0xe2, 0xda, 0x3c, 0x94, 0x07, - 0x0b, 0xc1, 0xcb, 0xff, 0x86, 0xd7, 0x2a, 0x7d, 0x25, 0xf9, 0x88, 0x04, 0x4e, 0x1c, 0xec, 0xcc, - 0x1f, 0xce, 0x7b, 0xa9, 0xa1, 0x3a, 0xb9, 0x81, 0x97, 0x1a, 0x7e, 0xe2, 0x37, 0xe9, 0x62, 0x83, - 0xa0, 0x70, 0xf6, 0xde, 0xf0, 0x4e, 0x5c, 0x2c, 0xcc, 0x89, 0x20, 0xd1, 0xf4, 0x05, 0xf8, 0xb3, - 0x32, 0x98, 0x6e, 0x42, 0xaf, 0x66, 0xec, 0xdb, 0xbb, 0x9e, 0x6a, 0x88, 0x6e, 0xcf, 0x3d, 0x11, - 0xe4, 0xbb, 0xf8, 0x13, 0xdc, 0xc1, 0xb0, 0x41, 0x4b, 0xd9, 0xfd, 0x2d, 0xec, 0x1b, 0x44, 0x48, - 0xeb, 0x34, 0x3f, 0x1f, 0x7d, 0x46, 0x64, 0x77, 0x34, 0xe0, 0x6e, 0x2c, 0x5b, 0x3b, 0x89, 0xf6, - 0x4e, 0xa3, 0x8a, 0x4e, 0x1f, 0x96, 0x1f, 0x93, 0xc1, 0x5c, 0x13, 0x7a, 0x55, 0x77, 0xc9, 0xd8, - 0xb3, 0x1d, 0xd3, 0x83, 0xea, 0xb2, 0x28, 0x34, 0x67, 0x00, 0x30, 0x83, 0xcf, 0x68, 0x9c, 0x2c, - 0x26, 0x45, 0x7d, 0x4b, 0x52, 0x47, 0x21, 0x8e, 0x8f, 0xb1, 0x80, 0x90, 0xc8, 0xc7, 0x22, 0xae, - 0xf8, 0x09, 0x5c, 0x1c, 0x2e, 0x51, 0x20, 0x4a, 0x4e, 0x7b, 0xdb, 0xdc, 0x83, 0x9d, 0x84, 0x40, - 0xf8, 0x9f, 0x85, 0x40, 0x04, 0x84, 0x12, 0xbb, 0xaf, 0x70, 0x7c, 0x8c, 0xc3, 0x7d, 0x25, 0x8e, - 0xe0, 0x44, 0xc2, 0x5a, 0xa1, 0xae, 0x87, 0xae, 0x67, 0xde, 0x2b, 0x2a, 0xd6, 0xd0, 0x64, 0x93, - 0x58, 0x93, 0x6d, 0xa4, 0x8e, 0x85, 0x94, 0x3d, 0x4c, 0xa7, 0xb3, 0x69, 0x74, 0x2c, 0x03, 0x8b, - 0x4e, 0x5f, 0xe8, 0xef, 0x93, 0xc1, 0xd5, 0x41, 0xbc, 0x97, 0x26, 0xf4, 0x2a, 0x86, 0xbb, 0x7d, - 0xc9, 0x36, 0x9c, 0x8e, 0x5a, 0x1e, 0xc3, 0x81, 0x43, 0xf5, 0x8b, 0x2c, 0x08, 0x75, 0x1e, 0x84, - 0x81, 0xae, 0xa4, 0x03, 0x79, 0x19, 0x47, 0x27, 0x13, 0xeb, 0xed, 0xfa, 0x8e, 0x00, 0xac, 0xa7, - 0x72, 0x60, 0xdd, 0x33, 0x2a, 0x8b, 0xe9, 0x03, 0xf7, 0xf3, 0x64, 0x44, 0x60, 0xbc, 0x9e, 0x2f, - 0x8a, 0x02, 0x16, 0xe1, 0xf5, 0x2a, 0x47, 0x7a, 0xbd, 0x8e, 0x34, 0x46, 0x0c, 0xf5, 0x58, 0x4e, - 0x77, 0x8c, 0x38, 0x42, 0x6f, 0xe4, 0x77, 0xc9, 0xa0, 0x88, 0x03, 0x7e, 0x31, 0x1e, 0xe1, 0x6c, - 0xfc, 0xed, 0x78, 0x74, 0x0e, 0x78, 0x9f, 0x4f, 0x25, 0xf5, 0x3e, 0x57, 0xdf, 0x99, 0xd4, 0xc7, - 0xbc, 0x9f, 0xdb, 0xb1, 0x20, 0x96, 0xc8, 0x85, 0x7c, 0x08, 0x07, 0xe9, 0x83, 0xf6, 0x93, 0x32, - 0x00, 0xa8, 0x41, 0xd3, 0xb3, 0x11, 0x4f, 0x13, 0x85, 0xeb, 0x36, 0xd6, 0xef, 0x1e, 0x01, 0x75, - 0x75, 0x1f, 0x50, 0x84, 0x62, 0x78, 0xea, 0xe2, 0xf5, 0x49, 0x7d, 0x2b, 0x43, 0xae, 0xc6, 0x02, - 0x4b, 0x22, 0x6f, 0xcb, 0xc8, 0xb2, 0xd3, 0x07, 0xe4, 0x57, 0x25, 0x90, 0x6b, 0xd9, 0x4d, 0xe8, - 0x1d, 0xde, 0x14, 0x48, 0x1c, 0x35, 0x00, 0x97, 0x3b, 0x8e, 0xa8, 0x01, 0x83, 0x08, 0xa5, 0x2f, - 0xba, 0xf7, 0x4a, 0x60, 0xb6, 0x65, 0x97, 0x83, 0xc5, 0x29, 0x71, 0x5f, 0xd5, 0x7f, 0xc9, 0x24, - 0x5c, 0xc3, 0x60, 0x8b, 0x89, 0x10, 0x58, 0xa2, 0xd5, 0x83, 0x18, 0x7a, 0xe9, 0xcb, 0xed, 0x4e, - 0x70, 0x7c, 0xdd, 0xea, 0xd8, 0x3a, 0xec, 0xd8, 0x74, 0xa5, 0x5b, 0x51, 0x40, 0x76, 0xd7, 0xea, - 0xd8, 0x98, 0xe5, 0x9c, 0x8e, 0xff, 0xa3, 0x34, 0x07, 0x76, 0x6c, 0xea, 0x1b, 0x80, 0xff, 0xab, - 0x7f, 0x2e, 0x83, 0x2c, 0xfa, 0x56, 0x5c, 0xd4, 0xef, 0x92, 0x13, 0xc6, 0x41, 0x40, 0xe4, 0xc7, - 0x62, 0x09, 0xdd, 0xcb, 0xac, 0xfd, 0x13, 0x0f, 0xd6, 0x47, 0x44, 0x95, 0xc7, 0x88, 0x22, 0x5c, - 0xf3, 0x57, 0x4e, 0x83, 0xa9, 0x4b, 0x5d, 0xbb, 0x7d, 0x39, 0x3c, 0xae, 0x4f, 0x1f, 0x95, 0x5b, - 0x40, 0xce, 0x31, 0xac, 0x2d, 0x48, 0xf7, 0x14, 0x4e, 0xf6, 0xf5, 0x85, 0xd8, 0xeb, 0x45, 0x27, - 0x59, 0xd4, 0x77, 0x26, 0x89, 0xc0, 0x30, 0xa0, 0xf2, 0xc9, 0xf4, 0xa1, 0x32, 0xc2, 0xc9, 0xb3, - 0x22, 0x98, 0x2d, 0x97, 0xea, 0xe4, 0x1e, 0xc4, 0xc6, 0x79, 0xad, 0x28, 0x63, 0x98, 0x91, 0x4c, - 0x52, 0x84, 0x19, 0x91, 0xff, 0x0f, 0x0b, 0xf3, 0x80, 0xca, 0x1f, 0x05, 0xcc, 0x9f, 0x95, 0xc0, - 0x5c, 0xcd, 0x74, 0xbd, 0x28, 0x6f, 0xff, 0x98, 0x78, 0xbf, 0x2f, 0x4a, 0x6a, 0x2a, 0x73, 0xe5, - 0x08, 0x07, 0xfa, 0x4d, 0x64, 0x0e, 0xc7, 0x15, 0x31, 0x99, 0x63, 0x29, 0x98, 0x03, 0x72, 0x09, - 0xbe, 0xb0, 0x24, 0x13, 0x1b, 0x4a, 0x61, 0x21, 0x93, 0x37, 0x94, 0x22, 0xcb, 0x4e, 0x5f, 0xbe, - 0x7f, 0x2e, 0x81, 0x13, 0xa8, 0xf8, 0xb8, 0x65, 0xa9, 0x68, 0x31, 0x0f, 0x5d, 0x96, 0x4a, 0xbc, - 0x32, 0x7e, 0x80, 0x97, 0x71, 0xac, 0x8c, 0x0f, 0x23, 0x3a, 0x61, 0x31, 0x47, 0x2c, 0xc3, 0x0e, - 0x13, 0x73, 0xcc, 0x32, 0xec, 0xe8, 0x62, 0x8e, 0x5f, 0x8a, 0x1d, 0x51, 0xcc, 0x47, 0xb6, 0xc0, - 0xfa, 0x4b, 0x72, 0x20, 0xe6, 0xc8, 0xb5, 0x8d, 0x18, 0x31, 0x27, 0x3e, 0xd1, 0xab, 0xbe, 0x7b, - 0x44, 0xc1, 0x8f, 0x79, 0x7d, 0x63, 0x14, 0x98, 0x8e, 0x70, 0x8d, 0xe3, 0x17, 0x64, 0x30, 0x4f, - 0xb9, 0x18, 0x3c, 0x65, 0x8e, 0xc1, 0x28, 0xf1, 0x94, 0x39, 0xf1, 0x19, 0x20, 0x9e, 0xb3, 0xc9, - 0x9f, 0x01, 0x8a, 0x2d, 0x3f, 0x7d, 0x70, 0xfe, 0x32, 0x0b, 0x4e, 0x21, 0x16, 0x56, 0xed, 0x8e, - 0xb9, 0xb9, 0x4f, 0xb8, 0x38, 0x6f, 0x74, 0x77, 0xa1, 0xab, 0x7e, 0x40, 0x12, 0x45, 0xe9, 0x3f, - 0x03, 0x60, 0xf7, 0xa0, 0x43, 0xe2, 0xb8, 0x51, 0xa0, 0xee, 0x8e, 0xaa, 0xec, 0xc1, 0x92, 0x82, - 0xeb, 0x73, 0x1a, 0x3e, 0x11, 0x9d, 0xa1, 0x87, 0xac, 0xc2, 0xe9, 0xe0, 0x4d, 0xbf, 0x83, 0x47, - 0xe6, 0xa0, 0x83, 0xc7, 0xcd, 0x40, 0x36, 0x3a, 0x9d, 0x00, 0xaa, 0xfe, 0xcd, 0x6c, 0x5c, 0xa6, - 0x8e, 0xb2, 0xa0, 0x9c, 0x2e, 0x0c, 0x8f, 0xe6, 0x45, 0xe4, 0x74, 0xa1, 0xa7, 0x2c, 0x80, 0x3c, - 0xb9, 0x4e, 0x3c, 0x58, 0xd1, 0x1f, 0x9c, 0x99, 0xe6, 0xe2, 0x4d, 0xbb, 0x06, 0xaf, 0x86, 0x77, - 0x26, 0x92, 0xcc, 0xa0, 0x7e, 0x3a, 0xb4, 0x93, 0x75, 0x4e, 0xc1, 0x9e, 0x3c, 0x32, 0xe5, 0xc9, - 0xec, 0x86, 0x95, 0x7a, 0xbd, 0xee, 0x7e, 0x8b, 0x06, 0x1e, 0x48, 0xb4, 0x1b, 0xc6, 0xc4, 0x2f, - 0x90, 0x0e, 0xc4, 0x2f, 0x48, 0xbc, 0x1b, 0xc6, 0xf1, 0x31, 0x8e, 0xdd, 0xb0, 0x38, 0x82, 0xe9, - 0x8b, 0xf6, 0x6f, 0x0a, 0xc4, 0x6a, 0xa6, 0xb7, 0x11, 0xfc, 0xc3, 0x60, 0xcf, 0x6a, 0xc0, 0x3b, - 0xbb, 0x0c, 0xba, 0xa8, 0x20, 0xf6, 0x16, 0x16, 0xe5, 0xf1, 0x20, 0xbf, 0x69, 0x3b, 0x3b, 0x86, - 0xbf, 0x71, 0xdf, 0x7f, 0x52, 0x84, 0xde, 0x00, 0xb0, 0x84, 0xf3, 0xe8, 0x34, 0x2f, 0x9a, 0x8f, - 0x3c, 0xd3, 0xec, 0xd1, 0xa0, 0x8f, 0xe8, 0xaf, 0x72, 0x23, 0x98, 0xa3, 0xb1, 0x1f, 0xeb, 0xd0, - 0xf5, 0x60, 0x87, 0x46, 0xb4, 0xe0, 0x13, 0x95, 0x73, 0x60, 0x96, 0x26, 0x2c, 0x99, 0x5d, 0xe8, - 0xd2, 0xa0, 0x16, 0x5c, 0x9a, 0x72, 0x0a, 0xe4, 0x4d, 0xf7, 0x3e, 0xd7, 0xb6, 0x68, 0x40, 0x3e, - 0xfa, 0xa4, 0xdc, 0x0c, 0x8e, 0xd3, 0x7c, 0x81, 0xb1, 0x4a, 0x0e, 0xec, 0xf4, 0x27, 0x23, 0xd5, - 0xb2, 0xec, 0x35, 0xc7, 0xde, 0x72, 0xa0, 0xeb, 0xe2, 0x53, 0x53, 0x05, 0x9d, 0x49, 0x51, 0x2e, - 0x82, 0x13, 0x5d, 0xd3, 0xba, 0xec, 0xe2, 0x18, 0xc1, 0x4b, 0xd4, 0x6d, 0x6c, 0x76, 0x40, 0xec, - 0x6e, 0xa6, 0xb1, 0x51, 0x39, 0xb0, 0x9f, 0xe8, 0x07, 0xa9, 0x28, 0xb7, 0x80, 0x22, 0xe5, 0x66, - 0xd1, 0x68, 0x5f, 0xc6, 0xef, 0xa9, 0x3b, 0xea, 0x81, 0x74, 0x46, 0x18, 0x24, 0x8c, 0xfe, 0x3c, - 0x27, 0x0c, 0x12, 0x49, 0xff, 0x25, 0x19, 0x30, 0xcb, 0x15, 0x60, 0x00, 0xc5, 0xef, 0x16, 0xdd, - 0x0b, 0xdb, 0xa6, 0x07, 0x11, 0x73, 0xf4, 0xac, 0xcb, 0x63, 0x87, 0x30, 0xaf, 0x1f, 0xf8, 0x50, - 0x1f, 0x40, 0x0c, 0xf1, 0x45, 0x3a, 0x3c, 0xec, 0x59, 0xe6, 0x52, 0x5b, 0x95, 0x4b, 0x53, 0x9f, - 0x09, 0x94, 0x83, 0xd4, 0x18, 0x2f, 0x90, 0x4c, 0x32, 0x2f, 0x10, 0x24, 0x37, 0xa3, 0xdb, 0xb5, - 0xaf, 0xc0, 0x4e, 0x40, 0x96, 0xea, 0xea, 0x81, 0x74, 0xf5, 0x0b, 0xa3, 0xcc, 0x0b, 0x13, 0x5f, - 0xac, 0x81, 0x1a, 0xd9, 0x6e, 0xbb, 0x0d, 0x61, 0x87, 0x1e, 0x5c, 0xf3, 0x1f, 0x13, 0x5e, 0xb9, - 0x91, 0x78, 0x16, 0x79, 0x44, 0x77, 0x6e, 0xbc, 0x3f, 0xbc, 0xf9, 0x64, 0x57, 0xa4, 0xab, 0x89, - 0x3b, 0x1f, 0x3f, 0x52, 0xa7, 0xa2, 0xbe, 0x37, 0xe9, 0x69, 0xd1, 0x58, 0x4c, 0x4f, 0xa1, 0xc1, - 0xdd, 0xdd, 0xed, 0x06, 0xc7, 0x9d, 0xc8, 0x53, 0x42, 0xf4, 0x12, 0x1d, 0x20, 0x3d, 0x22, 0xe4, - 0x3e, 0x7e, 0x35, 0xc8, 0x93, 0x9b, 0x0b, 0xd5, 0x97, 0xcc, 0x0f, 0x84, 0x6e, 0x9e, 0x87, 0x6e, - 0x1d, 0xcc, 0x5a, 0x36, 0x2a, 0x6e, 0xcd, 0x70, 0x8c, 0x1d, 0x37, 0x6e, 0x79, 0x9f, 0xd0, 0x0d, - 0x6c, 0xb9, 0x3a, 0xf3, 0xd9, 0xca, 0x31, 0x9d, 0x23, 0xa3, 0xfc, 0x5f, 0xe0, 0xf8, 0x25, 0x1a, - 0x9a, 0xc3, 0xa5, 0x94, 0xa5, 0x68, 0xe7, 0xd7, 0x3e, 0xca, 0x8b, 0xfc, 0x97, 0x2b, 0xc7, 0xf4, - 0x7e, 0x62, 0xca, 0x7f, 0x02, 0xf3, 0xe8, 0xb1, 0x63, 0x5f, 0xf1, 0x19, 0x97, 0xa3, 0x67, 0x00, - 0x7d, 0xe4, 0x57, 0xb9, 0x0f, 0x57, 0x8e, 0xe9, 0x7d, 0xa4, 0x94, 0x06, 0x00, 0xdb, 0xde, 0x4e, - 0x97, 0x12, 0xce, 0x46, 0x77, 0x26, 0x7d, 0x84, 0x57, 0x82, 0x8f, 0x56, 0x8e, 0xe9, 0x0c, 0x09, - 0xa5, 0x06, 0xa6, 0xbd, 0x07, 0x3d, 0x4a, 0x2f, 0x17, 0xed, 0x75, 0xd2, 0x47, 0xaf, 0xe5, 0x7f, - 0xb3, 0x72, 0x4c, 0x0f, 0x09, 0x28, 0x55, 0x50, 0xe8, 0x5d, 0xa2, 0xc4, 0xf2, 0xd1, 0x23, 0x55, - 0x1f, 0xb1, 0xb5, 0x4b, 0x01, 0xad, 0xe0, 0x73, 0xc4, 0x58, 0xdb, 0xdd, 0xa3, 0xb4, 0xa6, 0x84, - 0x19, 0x2b, 0xfb, 0xdf, 0x20, 0xc6, 0x02, 0x02, 0x4a, 0x15, 0x4c, 0xbb, 0x96, 0xd1, 0x73, 0xb7, - 0x6d, 0xcf, 0x3d, 0x5d, 0xe8, 0x73, 0x50, 0x8e, 0xa6, 0xd6, 0xa4, 0xdf, 0xe8, 0xe1, 0xd7, 0xca, - 0xe3, 0xc1, 0xd5, 0xbb, 0xbd, 0x8e, 0xe1, 0x41, 0xed, 0x41, 0xd3, 0x0d, 0x6f, 0xaf, 0xf4, 0xcf, - 0xe5, 0x0e, 0x7e, 0xa9, 0x2c, 0xd0, 0xa3, 0x8a, 0x00, 0xb7, 0x4b, 0xb5, 0x7f, 0x97, 0x9c, 0x14, - 0xcb, 0x9c, 0x50, 0x7c, 0x12, 0xc8, 0xa2, 0x57, 0xd8, 0x2c, 0x98, 0x1f, 0xbc, 0x02, 0xdf, 0xaf, - 0x3b, 0xb8, 0x01, 0xa3, 0x8f, 0xfa, 0x2c, 0x8b, 0xd9, 0x03, 0x96, 0xc5, 0x59, 0x30, 0x63, 0xba, - 0xab, 0xe6, 0x16, 0x99, 0xd6, 0xd0, 0x91, 0x9f, 0x4d, 0x22, 0xcb, 0x40, 0x75, 0x78, 0x85, 0x0c, - 0xf9, 0xc7, 0xfd, 0x65, 0x20, 0x3f, 0x45, 0xbd, 0x09, 0xcc, 0xb2, 0x8d, 0x8c, 0x5c, 0x7f, 0x6c, - 0x86, 0x93, 0x22, 0xfa, 0xa4, 0xde, 0x08, 0xe6, 0x79, 0x9d, 0x66, 0x6c, 0x3f, 0xd9, 0x1f, 0xc4, - 0xd4, 0x47, 0x80, 0xe3, 0x7d, 0x0d, 0xcb, 0x0f, 0xf6, 0x93, 0x09, 0x83, 0xfd, 0x9c, 0x05, 0x20, - 0xd4, 0xe2, 0x81, 0x64, 0x6e, 0x00, 0xd3, 0x81, 0x5e, 0x0e, 0xcc, 0xf0, 0xf5, 0x0c, 0x28, 0xf8, - 0xca, 0x36, 0x28, 0x03, 0xb2, 0x29, 0x2c, 0x66, 0x67, 0xcf, 0xb7, 0x29, 0xd8, 0x34, 0x64, 0xe0, - 0x85, 0xfe, 0xf4, 0x2d, 0xd3, 0xeb, 0xfa, 0x67, 0x52, 0xfb, 0x93, 0x95, 0x35, 0x00, 0x4c, 0x8c, - 0x51, 0x2b, 0x3c, 0xa4, 0x7a, 0x7b, 0x82, 0xf6, 0x40, 0xf4, 0x81, 0xa1, 0x71, 0xee, 0xe1, 0xf4, - 0x04, 0xe9, 0x34, 0xc8, 0x91, 0x0b, 0x16, 0x8e, 0x29, 0xf3, 0x00, 0x68, 0x4f, 0x5b, 0xd3, 0xf4, - 0xaa, 0x56, 0x2f, 0x6b, 0xc5, 0x8c, 0xfa, 0x72, 0x09, 0x4c, 0x07, 0x8d, 0x60, 0x60, 0x25, 0x35, - 0xaa, 0x5a, 0x43, 0x6f, 0x98, 0x3d, 0xd8, 0xa8, 0x58, 0x25, 0x7b, 0x22, 0xb8, 0x66, 0xd7, 0x85, - 0x4b, 0xa6, 0xe3, 0x7a, 0xba, 0x7d, 0x65, 0xc9, 0x76, 0x42, 0x93, 0x88, 0x84, 0x26, 0x8e, 0x7a, - 0x8d, 0x4c, 0xfd, 0x0e, 0xc4, 0xa7, 0x15, 0xa1, 0x43, 0xb7, 0x6c, 0xc2, 0x04, 0x44, 0xd7, 0x73, - 0x0c, 0xcb, 0xed, 0xd9, 0x2e, 0xd4, 0xed, 0x2b, 0x6e, 0xc9, 0xea, 0x94, 0xed, 0xee, 0xee, 0x8e, - 0xe5, 0x52, 0x63, 0x3d, 0xea, 0x35, 0x92, 0x0e, 0xbe, 0x3f, 0x7a, 0x1e, 0x80, 0x72, 0xa3, 0x56, - 0xd3, 0xca, 0xad, 0x6a, 0xa3, 0x5e, 0x3c, 0x86, 0xa4, 0xd5, 0x2a, 0x2d, 0xd6, 0x90, 0x74, 0x9e, - 0x0e, 0x0a, 0x7e, 0x9b, 0xa6, 0xf1, 0x89, 0x32, 0x7e, 0x7c, 0x22, 0xa5, 0x04, 0x0a, 0x7e, 0x2b, - 0xa7, 0x23, 0xc2, 0x23, 0xfb, 0xcf, 0xa3, 0xef, 0x18, 0x8e, 0x87, 0x4d, 0x4b, 0x9f, 0xc8, 0xa2, - 0xe1, 0x42, 0x3d, 0xf8, 0xec, 0xdc, 0x63, 0x28, 0x07, 0x0a, 0x98, 0x2f, 0xd5, 0x6a, 0x1b, 0x0d, - 0x7d, 0xa3, 0xde, 0x68, 0xad, 0x54, 0xeb, 0xcb, 0x64, 0x84, 0xac, 0x2e, 0xd7, 0x1b, 0xba, 0x46, - 0x06, 0xc8, 0x66, 0x31, 0x43, 0xee, 0x2f, 0x5f, 0x2c, 0x80, 0x7c, 0x0f, 0x4b, 0x57, 0xfd, 0x8a, - 0x9c, 0xd0, 0xb4, 0x08, 0x70, 0x8a, 0xb8, 0x61, 0x99, 0x3b, 0x0c, 0x22, 0x0d, 0x38, 0xac, 0x7d, - 0x0e, 0xcc, 0x12, 0x73, 0xc8, 0xc5, 0xfb, 0x6a, 0x18, 0x39, 0x59, 0xe7, 0xd2, 0xd4, 0x4f, 0x4a, - 0x09, 0x8c, 0x8b, 0x81, 0x1c, 0x25, 0x33, 0x2e, 0xfe, 0x20, 0x33, 0xda, 0x75, 0x24, 0xd5, 0x7a, - 0x4b, 0xd3, 0xeb, 0xa5, 0x1a, 0xcd, 0x22, 0x2b, 0xa7, 0xc1, 0xc9, 0x7a, 0x83, 0x06, 0xe3, 0x6c, - 0x6e, 0xb4, 0x1a, 0x1b, 0xd5, 0xd5, 0xb5, 0x86, 0xde, 0x2a, 0xe6, 0x94, 0x53, 0x40, 0x21, 0xff, - 0x37, 0xaa, 0xcd, 0x8d, 0x72, 0xa9, 0x5e, 0xd6, 0x6a, 0x5a, 0xa5, 0x98, 0x57, 0x1e, 0x05, 0x1e, - 0x41, 0xae, 0xb7, 0x6a, 0x2c, 0x6d, 0xe8, 0x8d, 0x0b, 0x4d, 0x84, 0xa0, 0xae, 0xd5, 0x4a, 0x48, - 0x91, 0x98, 0x7b, 0xcc, 0xa7, 0x94, 0xab, 0xc0, 0xf1, 0xa5, 0x6a, 0x4d, 0xc3, 0xb7, 0xd1, 0xd2, - 0xf2, 0x0a, 0xca, 0xf5, 0xe0, 0x74, 0xb5, 0xde, 0x5c, 0x5f, 0x5a, 0xaa, 0x96, 0xab, 0x5a, 0xbd, - 0xb5, 0xb1, 0xa6, 0xe9, 0xab, 0xd5, 0x66, 0x13, 0x7d, 0x5b, 0x9c, 0x56, 0x3f, 0x2e, 0x83, 0x3c, - 0xe9, 0x33, 0x91, 0x11, 0x3b, 0x77, 0xde, 0xe8, 0x9a, 0x68, 0xa0, 0xc0, 0xd7, 0xc7, 0xf7, 0x9d, - 0xe3, 0xf2, 0xf0, 0x35, 0xf3, 0xf4, 0x24, 0x08, 0x7e, 0x50, 0x7f, 0x54, 0x4e, 0x78, 0x8e, 0x8b, - 0x02, 0x41, 0x4a, 0x5c, 0xe0, 0x4a, 0x8b, 0x58, 0x75, 0x78, 0x8d, 0x94, 0xe0, 0x1c, 0x97, 0x38, - 0xf9, 0x64, 0xe0, 0xff, 0xe2, 0xb8, 0xc0, 0x2f, 0x82, 0xd9, 0xf5, 0x7a, 0x69, 0xbd, 0xb5, 0xd2, - 0xd0, 0xab, 0x3f, 0x8c, 0x6f, 0x21, 0x98, 0x03, 0xd3, 0x4b, 0x0d, 0x7d, 0xb1, 0x5a, 0xa9, 0x68, - 0xf5, 0x62, 0x4e, 0xb9, 0x06, 0x5c, 0xd5, 0xd4, 0xf4, 0xf3, 0xd5, 0xb2, 0xb6, 0xb1, 0x5e, 0x2f, - 0x9d, 0x2f, 0x55, 0x6b, 0xb8, 0x8f, 0xc8, 0xc7, 0x5c, 0x7d, 0x3f, 0xa5, 0xfe, 0x48, 0x16, 0x00, - 0x52, 0x75, 0x7c, 0x09, 0x17, 0x73, 0x41, 0xfa, 0x1f, 0x25, 0x9d, 0xee, 0x85, 0x64, 0x22, 0xda, - 0x6f, 0x15, 0x14, 0x1c, 0xfa, 0x82, 0xae, 0x6b, 0x0e, 0xa3, 0x43, 0xfe, 0xfa, 0xd4, 0xf4, 0xe0, - 0x73, 0xf5, 0x03, 0x49, 0x66, 0x77, 0x91, 0x8c, 0x4d, 0xe4, 0xa6, 0xe7, 0x7e, 0x20, 0xd5, 0x17, - 0x66, 0xc0, 0x3c, 0x5f, 0x31, 0x54, 0x09, 0x6c, 0x4c, 0x89, 0x55, 0x82, 0xff, 0x98, 0x31, 0xb2, - 0xce, 0x3d, 0x8e, 0x0e, 0xa7, 0xc0, 0x6f, 0x99, 0x24, 0x24, 0x83, 0x6f, 0xb1, 0x14, 0x33, 0x88, - 0x79, 0x64, 0x74, 0x14, 0x25, 0x65, 0x0a, 0xc8, 0xad, 0x07, 0xbd, 0xa2, 0xac, 0x7e, 0x3a, 0x0b, - 0xe6, 0xb8, 0x1b, 0xd8, 0xd5, 0x3f, 0xce, 0x88, 0xdc, 0x6e, 0xcc, 0xdc, 0xed, 0x9e, 0x39, 0xec, - 0xdd, 0xee, 0xe7, 0x4c, 0x30, 0x45, 0xd3, 0xb0, 0x7c, 0x1b, 0x75, 0x64, 0x0a, 0x1c, 0x07, 0x33, - 0xcb, 0x5a, 0x6b, 0xa3, 0xd9, 0x2a, 0xe9, 0x2d, 0xad, 0x52, 0xcc, 0xa0, 0x81, 0x4f, 0x5b, 0x5d, - 0x6b, 0x5d, 0x2c, 0x4a, 0x68, 0x4c, 0x5c, 0x5e, 0xaf, 0x56, 0xb4, 0x8d, 0x46, 0xbd, 0x76, 0xb1, - 0x28, 0xa3, 0x1e, 0x90, 0xc9, 0xbb, 0xb1, 0xda, 0x58, 0xac, 0xd6, 0xb4, 0x62, 0x16, 0x35, 0x1b, - 0xfc, 0x89, 0x9f, 0x92, 0xe3, 0x7d, 0xa3, 0x45, 0x56, 0x38, 0xfb, 0xab, 0x70, 0x78, 0x17, 0x91, - 0x24, 0x57, 0xc8, 0x27, 0x5a, 0x3b, 0x8d, 0x63, 0x35, 0xfd, 0x19, 0xf1, 0xe7, 0x65, 0x50, 0x24, - 0x1c, 0x68, 0x0f, 0xf6, 0xa0, 0x63, 0x42, 0xab, 0x0d, 0xd5, 0xcb, 0x22, 0x01, 0x81, 0x0f, 0x84, - 0xc2, 0xc4, 0xa3, 0x06, 0x63, 0x8b, 0x92, 0x87, 0x3e, 0x33, 0x3e, 0x7b, 0xc0, 0x8c, 0xff, 0x9d, - 0xa4, 0x1e, 0xb8, 0xfd, 0xec, 0x8e, 0x65, 0xcf, 0xea, 0x33, 0x49, 0x3c, 0x70, 0x87, 0x70, 0x30, - 0x91, 0x38, 0xdf, 0x11, 0xa3, 0x7c, 0x51, 0x56, 0x5f, 0x20, 0x83, 0xe3, 0x15, 0xc3, 0x83, 0x8b, - 0xfb, 0x2d, 0xff, 0x1e, 0xd5, 0x88, 0xbb, 0xcf, 0x33, 0x07, 0xee, 0x3e, 0x0f, 0xaf, 0x62, 0x95, - 0xfa, 0xae, 0x62, 0x55, 0xdf, 0x93, 0xf4, 0xcc, 0x6e, 0x1f, 0x0f, 0x63, 0x0b, 0xc6, 0x9d, 0xec, - 0x2c, 0x6e, 0x3c, 0x17, 0xe9, 0x37, 0xb0, 0xb7, 0x4f, 0x83, 0x22, 0x61, 0x85, 0x71, 0x32, 0xfd, - 0x59, 0x19, 0xc8, 0xa5, 0x4e, 0x47, 0xdd, 0x48, 0x10, 0xd3, 0xd3, 0x8f, 0x92, 0x22, 0xf1, 0x51, - 0x52, 0xb8, 0x3d, 0x0b, 0xb9, 0xdf, 0x31, 0x28, 0xe9, 0x69, 0x04, 0xc6, 0xa3, 0x34, 0x3a, 0x8c, - 0x72, 0x7a, 0xa7, 0x11, 0x62, 0x8b, 0x9f, 0xcc, 0x95, 0xd6, 0xf4, 0x16, 0x59, 0x4d, 0x14, 0x99, - 0xf8, 0x9b, 0xfb, 0x93, 0x1e, 0x2f, 0xe0, 0x3c, 0x7a, 0x63, 0xae, 0xb3, 0x4f, 0xef, 0x78, 0xc1, - 0x30, 0x0e, 0xd2, 0x47, 0xe1, 0x7b, 0x12, 0xc8, 0x36, 0x6d, 0xc7, 0x1b, 0x17, 0x06, 0x49, 0x5d, - 0x22, 0x18, 0x09, 0x34, 0xa3, 0x67, 0xb6, 0xe9, 0xb9, 0x44, 0xc4, 0x97, 0x3f, 0x81, 0xb0, 0xa8, - 0xc7, 0xc1, 0x3c, 0xe1, 0x24, 0xb8, 0x53, 0xe8, 0x5f, 0x25, 0xd2, 0x5f, 0xdd, 0x2f, 0x8a, 0x08, - 0xde, 0x18, 0x0b, 0x5c, 0x12, 0x7c, 0x50, 0xb8, 0x34, 0xf5, 0x8d, 0x2c, 0x2e, 0x15, 0x1e, 0x97, - 0x41, 0xf3, 0xfa, 0xe0, 0x5a, 0x9e, 0x71, 0xf5, 0x4c, 0x49, 0x22, 0xac, 0xc6, 0x14, 0x9e, 0x3e, - 0x22, 0xcf, 0x91, 0x41, 0x9e, 0xba, 0x84, 0x8e, 0x15, 0x81, 0xa4, 0x2d, 0x23, 0x10, 0x82, 0x98, - 0xeb, 0xa8, 0x3c, 0xee, 0x96, 0x11, 0x5f, 0x7e, 0xfa, 0x38, 0xfc, 0x1b, 0xf5, 0x75, 0x2e, 0xed, - 0x19, 0x66, 0xd7, 0xb8, 0xd4, 0x4d, 0x10, 0xd9, 0xfc, 0x93, 0x09, 0x4f, 0x77, 0x06, 0x55, 0xe5, - 0xca, 0x8b, 0x90, 0xf8, 0x0f, 0x82, 0x69, 0x87, 0xdb, 0x0b, 0x46, 0x56, 0x54, 0x9f, 0x9f, 0x39, - 0x7d, 0xaf, 0x87, 0x39, 0x13, 0x1d, 0xe5, 0x14, 0xe2, 0x67, 0x22, 0x47, 0xcf, 0x66, 0x4a, 0x9d, - 0xce, 0x12, 0x34, 0xbc, 0x5d, 0x07, 0x76, 0x12, 0x0d, 0x11, 0x4e, 0xdf, 0x76, 0x39, 0x23, 0x09, - 0x2e, 0xb6, 0x68, 0x8d, 0x47, 0xe7, 0x09, 0x43, 0x7a, 0x03, 0x9f, 0x97, 0xb1, 0x74, 0x49, 0x6f, - 0x0b, 0x20, 0x69, 0x70, 0x90, 0x3c, 0x69, 0x34, 0x26, 0xd2, 0x07, 0xe4, 0xa5, 0x32, 0x98, 0x27, - 0x76, 0xc2, 0xb8, 0x31, 0xf9, 0x70, 0x42, 0x17, 0x32, 0xe6, 0xd6, 0x36, 0x96, 0x9d, 0xb1, 0xc0, - 0x92, 0xc4, 0xe1, 0x4c, 0x8c, 0x8f, 0xf4, 0x91, 0xf9, 0x9f, 0x57, 0x01, 0xc0, 0xb8, 0x05, 0x7f, - 0x32, 0x1f, 0xc6, 0xf9, 0x54, 0xdf, 0x49, 0xe7, 0x1f, 0x4d, 0x2e, 0xe8, 0x3c, 0xe3, 0xf2, 0x1b, - 0x6c, 0x7b, 0xf1, 0x89, 0x42, 0xa3, 0xca, 0x1f, 0x24, 0xb4, 0x79, 0xa9, 0x53, 0xee, 0xd0, 0xc1, - 0x7d, 0xc4, 0x5e, 0xee, 0x53, 0x09, 0x8c, 0xdf, 0x61, 0xac, 0x24, 0x43, 0xad, 0x36, 0xc2, 0xcc, - 0xfe, 0x34, 0x38, 0xa9, 0x6b, 0xa5, 0x4a, 0xa3, 0x5e, 0xbb, 0xc8, 0x5e, 0xe1, 0x55, 0x94, 0xd9, - 0xc9, 0x49, 0x2a, 0xb0, 0xbd, 0x2e, 0x61, 0x1f, 0xc8, 0xcb, 0x2a, 0x6e, 0xb6, 0xc2, 0x2c, 0xae, - 0x0c, 0xef, 0xd5, 0x04, 0xc8, 0x1e, 0x25, 0x0a, 0xdf, 0xca, 0x83, 0x19, 0x1d, 0xb6, 0xed, 0x9d, - 0x1d, 0x68, 0x75, 0x60, 0x47, 0x7d, 0x9d, 0x0c, 0x66, 0x83, 0x5d, 0xc5, 0x26, 0xf4, 0xd4, 0xff, - 0x14, 0x62, 0x73, 0x0e, 0xcc, 0xa2, 0xca, 0x35, 0xf8, 0x8b, 0x04, 0xb8, 0x34, 0xe5, 0x56, 0x70, - 0xc2, 0x47, 0xa1, 0xd1, 0x37, 0x85, 0x39, 0xf8, 0x82, 0xf7, 0xfb, 0x59, 0xe7, 0x31, 0xba, 0x37, - 0x5a, 0x98, 0x01, 0xbb, 0x0b, 0x2c, 0xab, 0x11, 0x60, 0xfd, 0x5e, 0x00, 0xd6, 0xd3, 0x38, 0xb0, - 0x2a, 0x87, 0xa4, 0x7f, 0x94, 0xa8, 0x7d, 0x48, 0x06, 0x27, 0xfd, 0x8e, 0x78, 0x72, 0x68, 0x7d, - 0x8a, 0x45, 0xeb, 0xe9, 0x3c, 0x5a, 0xcb, 0x22, 0xd2, 0x1c, 0xc4, 0x72, 0x04, 0x6a, 0x5f, 0x0e, - 0x50, 0xfb, 0x2f, 0x1c, 0x6a, 0xb5, 0x31, 0x95, 0x73, 0x94, 0xe8, 0x7d, 0x58, 0x06, 0xa7, 0x91, - 0xd9, 0x59, 0xb6, 0xad, 0xcd, 0xae, 0xd9, 0xf6, 0x4c, 0x6b, 0x2b, 0x74, 0x71, 0x5c, 0x16, 0x59, - 0xd9, 0xec, 0xc7, 0x56, 0x3a, 0x88, 0x2d, 0xbf, 0xc7, 0x20, 0xda, 0xb6, 0xa2, 0xd8, 0x8a, 0x18, - 0xc2, 0x18, 0xe7, 0xfd, 0x50, 0x73, 0xd8, 0xa4, 0xe4, 0xad, 0x4f, 0x90, 0x83, 0xa3, 0xc4, 0xef, - 0xeb, 0x12, 0x38, 0xa5, 0x43, 0xd7, 0xee, 0xee, 0x41, 0xe2, 0xcb, 0xea, 0xf3, 0xeb, 0xaa, 0x8f, - 0x49, 0xd4, 0xfe, 0xd4, 0x97, 0xb2, 0x18, 0x35, 0x79, 0x8c, 0xee, 0x89, 0xd6, 0xf4, 0x41, 0x45, - 0x47, 0xb4, 0xa3, 0xf7, 0x06, 0xf2, 0x3f, 0xcf, 0xc9, 0x7f, 0xf1, 0x50, 0xd4, 0x27, 0xb0, 0x44, - 0x00, 0x18, 0xf3, 0xee, 0xf9, 0x32, 0x28, 0x62, 0x9f, 0x65, 0x3c, 0x7a, 0xd2, 0x3b, 0x84, 0x1b, - 0xfc, 0x69, 0x96, 0x9e, 0xaf, 0x84, 0xfe, 0x69, 0x16, 0x3f, 0x41, 0xb9, 0x09, 0xcc, 0xb7, 0xb7, - 0x61, 0xfb, 0x72, 0xd5, 0xf2, 0xbd, 0xca, 0x88, 0x0b, 0x52, 0x5f, 0x2a, 0x6f, 0x30, 0xdc, 0xcf, - 0x83, 0xc1, 0x2f, 0xee, 0x72, 0x93, 0x47, 0x96, 0xa9, 0x08, 0x10, 0x7e, 0x33, 0x00, 0xa1, 0xce, - 0x81, 0x70, 0xd7, 0x48, 0x54, 0x93, 0x09, 0xbf, 0x3e, 0x82, 0xea, 0xab, 0xe0, 0x54, 0x63, 0xad, - 0x55, 0x6d, 0xd4, 0x37, 0xd6, 0x9b, 0x5a, 0x65, 0x63, 0xd1, 0x6f, 0x00, 0xcd, 0xa2, 0xac, 0x7e, - 0x53, 0x02, 0x53, 0x84, 0x2d, 0x57, 0x7d, 0x74, 0x08, 0xc1, 0xd0, 0x63, 0x3c, 0xea, 0xdb, 0x85, - 0x83, 0x72, 0x05, 0x82, 0xa0, 0xe5, 0x44, 0x74, 0x3e, 0x4f, 0x04, 0x53, 0x04, 0x64, 0x7f, 0xa7, - 0xe5, 0x4c, 0x84, 0xf5, 0x4c, 0xc9, 0xe8, 0x7e, 0x76, 0xc1, 0x00, 0x5d, 0x43, 0xd8, 0x48, 0xbf, - 0x0d, 0x3c, 0x2b, 0x4b, 0x96, 0x67, 0x2e, 0x98, 0xde, 0x36, 0x3e, 0xe5, 0xa3, 0x3e, 0x55, 0x64, - 0x70, 0xb8, 0x15, 0xe4, 0xf6, 0x50, 0xee, 0x21, 0x27, 0xa6, 0x48, 0x26, 0xf5, 0x17, 0x85, 0xe3, - 0xc1, 0x73, 0xfa, 0x19, 0xf0, 0x14, 0x01, 0xce, 0x2a, 0xc8, 0x76, 0x4d, 0xd7, 0xa3, 0xf3, 0x9a, - 0x3b, 0x13, 0x11, 0xf2, 0xff, 0x54, 0x3d, 0xb8, 0xa3, 0x63, 0x32, 0xea, 0x7d, 0xc8, 0x2a, 0x0d, - 0x53, 0x05, 0x4e, 0x8d, 0x9d, 0x06, 0x53, 0x34, 0x9a, 0x01, 0xdd, 0xfa, 0xf3, 0x1f, 0x05, 0xb7, - 0xdb, 0x84, 0x6a, 0x9b, 0xbe, 0x0e, 0xfc, 0xbf, 0xc7, 0xc1, 0xd4, 0x8a, 0xe9, 0x7a, 0xb6, 0xb3, - 0xaf, 0xbe, 0x3e, 0x03, 0xa6, 0xce, 0x43, 0xc7, 0x35, 0x6d, 0xeb, 0x80, 0xa3, 0xdd, 0x59, 0x30, - 0xd3, 0x73, 0xe0, 0x9e, 0x69, 0xef, 0xba, 0xcc, 0x48, 0xcc, 0x24, 0x29, 0x2a, 0x28, 0x18, 0xbb, - 0xde, 0xb6, 0xed, 0x84, 0x41, 0xd0, 0xfc, 0x67, 0xe5, 0x0c, 0x00, 0xe4, 0x7f, 0xdd, 0xd8, 0x81, - 0xd4, 0x7d, 0x90, 0x49, 0x51, 0x14, 0x90, 0xf5, 0xcc, 0x1d, 0x48, 0x6f, 0x45, 0xc0, 0xff, 0x91, - 0x80, 0x71, 0x84, 0x61, 0x1a, 0xc9, 0x59, 0xd6, 0xfd, 0x47, 0xf5, 0x8b, 0x32, 0x98, 0x59, 0x86, - 0x1e, 0x65, 0xd5, 0x55, 0x5f, 0x94, 0x11, 0xba, 0x88, 0x0c, 0xcd, 0xfd, 0xba, 0x86, 0xeb, 0x7f, - 0x17, 0x98, 0x35, 0x7c, 0x62, 0x78, 0x45, 0x83, 0xcc, 0xde, 0xcf, 0x82, 0xe3, 0xf5, 0x7a, 0x55, - 0x72, 0x80, 0x86, 0x66, 0xa6, 0x9b, 0xf3, 0x07, 0x5f, 0xf0, 0xf3, 0x8e, 0xd8, 0x58, 0x37, 0x54, - 0xf6, 0x0b, 0x4c, 0x7d, 0x22, 0xbb, 0xa3, 0xc2, 0x1e, 0xcd, 0x71, 0xe0, 0xea, 0x1d, 0x96, 0x12, - 0x25, 0xa3, 0x07, 0xb9, 0x05, 0xa3, 0xe4, 0x0c, 0xe7, 0x64, 0x02, 0x97, 0x2d, 0xcb, 0x60, 0xa6, - 0xb9, 0x6d, 0x5f, 0xf1, 0xe5, 0xf8, 0x74, 0x31, 0x60, 0xaf, 0x07, 0xd3, 0x7b, 0x7d, 0xa0, 0x86, - 0x09, 0xec, 0xfd, 0x8e, 0x32, 0x7f, 0xbf, 0xe3, 0xf3, 0xe4, 0xa4, 0x30, 0x31, 0xcc, 0x45, 0xc0, - 0xc4, 0x5f, 0xc9, 0x28, 0x25, 0xb8, 0x92, 0x51, 0x79, 0x02, 0x98, 0xa2, 0x5c, 0xd3, 0xad, 0x80, - 0x78, 0x80, 0xfd, 0xcc, 0x6c, 0x05, 0xb3, 0x7c, 0x05, 0x93, 0x21, 0x1f, 0x5d, 0xb9, 0xf4, 0x91, - 0xff, 0x6d, 0x09, 0xc7, 0x48, 0xf3, 0x81, 0x2f, 0x8f, 0x01, 0x78, 0xf5, 0xbb, 0x19, 0xd1, 0x0d, - 0xb3, 0x40, 0x02, 0x01, 0x07, 0x87, 0xba, 0x64, 0x70, 0x28, 0xb9, 0xf4, 0xe5, 0xf9, 0xf2, 0x2c, - 0x98, 0xad, 0x98, 0x9b, 0x9b, 0x41, 0x27, 0xf9, 0x62, 0xc1, 0x4e, 0x32, 0xda, 0x19, 0x0e, 0xd9, - 0xb9, 0xbb, 0x8e, 0x03, 0x2d, 0xbf, 0x52, 0xb4, 0x39, 0xf5, 0xa5, 0x2a, 0x37, 0x83, 0xe3, 0xfe, - 0xb8, 0xc0, 0x76, 0x94, 0xd3, 0x7a, 0x7f, 0xb2, 0xfa, 0x6d, 0x61, 0x6f, 0x0b, 0x5f, 0xa2, 0x6c, - 0x95, 0x22, 0x1a, 0xe0, 0xdd, 0x60, 0x6e, 0x9b, 0xe4, 0xc6, 0x4b, 0xd2, 0x7e, 0x67, 0x79, 0xaa, - 0xef, 0x0e, 0x8a, 0x55, 0xe8, 0xba, 0xc6, 0x16, 0xd4, 0xf9, 0xcc, 0x7d, 0xcd, 0x57, 0x4e, 0x72, - 0xa3, 0xaa, 0x98, 0xe3, 0x86, 0x40, 0x4d, 0xd2, 0xd7, 0x8e, 0x2f, 0x9f, 0x03, 0xd9, 0x25, 0xb3, - 0x0b, 0xd5, 0x1f, 0x97, 0xc0, 0xb4, 0x0e, 0xdb, 0xb6, 0xd5, 0x46, 0x4f, 0x8c, 0x6b, 0xec, 0xb7, - 0x32, 0xa2, 0x37, 0x89, 0x23, 0x3a, 0x0b, 0x01, 0x8d, 0x88, 0x76, 0x23, 0x76, 0x63, 0x78, 0x2c, - 0xa9, 0x09, 0xdc, 0xfb, 0x86, 0xa6, 0x1e, 0x9b, 0x9b, 0x5d, 0xdb, 0xe0, 0x36, 0x65, 0xfa, 0x4d, - 0xa1, 0xf0, 0x20, 0x6e, 0xdd, 0xf6, 0xd6, 0x4c, 0xcb, 0x0a, 0x62, 0xdb, 0x1c, 0x48, 0xe7, 0xfd, - 0x89, 0x62, 0xc3, 0x03, 0xe2, 0xba, 0xd3, 0xd2, 0x23, 0x34, 0xfb, 0x26, 0x30, 0x7f, 0x69, 0xdf, - 0x83, 0x2e, 0xcd, 0x45, 0x8b, 0xcd, 0xea, 0x7d, 0xa9, 0xcc, 0xe5, 0x1e, 0x71, 0x61, 0x04, 0x63, - 0x0a, 0x4c, 0x26, 0xea, 0x95, 0x11, 0x66, 0x80, 0x27, 0x41, 0xb1, 0xde, 0xa8, 0x68, 0xd8, 0x53, - 0xdb, 0xf7, 0x7d, 0xdd, 0x52, 0x7f, 0x46, 0x06, 0xb3, 0xd8, 0xc9, 0xd1, 0x47, 0xe1, 0x11, 0x02, - 0xf3, 0x11, 0xf5, 0xab, 0xc2, 0x5e, 0xdc, 0xb8, 0xca, 0x6c, 0x01, 0xd1, 0x82, 0xde, 0x34, 0xbb, - 0xfd, 0x82, 0xce, 0xe9, 0x7d, 0xa9, 0x03, 0x00, 0x91, 0x07, 0x02, 0xf2, 0x21, 0x21, 0x57, 0xee, - 0x61, 0xdc, 0x1d, 0x15, 0x2a, 0xbf, 0x26, 0x83, 0x19, 0x34, 0x49, 0xf1, 0x41, 0x69, 0x70, 0xa0, - 0xd8, 0x56, 0x77, 0x3f, 0x5c, 0x16, 0xf1, 0x1f, 0x13, 0x35, 0x92, 0x3f, 0x16, 0x9e, 0xb9, 0x63, - 0x11, 0x31, 0xbc, 0x4c, 0x08, 0xbf, 0x0f, 0x0a, 0xcd, 0xe7, 0x87, 0x30, 0x77, 0x54, 0xf0, 0xbd, - 0x36, 0x0f, 0xf2, 0xeb, 0x3d, 0x8c, 0xdc, 0x57, 0x64, 0x91, 0x8b, 0x72, 0x0e, 0x1c, 0xe3, 0x43, - 0x66, 0x56, 0xd7, 0x6e, 0x1b, 0xdd, 0xb5, 0xf0, 0x24, 0x7b, 0x98, 0xa0, 0xdc, 0x45, 0x3d, 0xfb, - 0xc9, 0x81, 0xec, 0x9b, 0x62, 0xef, 0x90, 0xc1, 0x32, 0x62, 0x8e, 0x4c, 0xde, 0x0a, 0x4e, 0x74, - 0x4c, 0xd7, 0xb8, 0xd4, 0x85, 0x9a, 0xd5, 0x76, 0xf6, 0x89, 0x38, 0xe8, 0xb4, 0xea, 0xc0, 0x0b, - 0xe5, 0x1e, 0x90, 0x73, 0xbd, 0xfd, 0x2e, 0x99, 0x27, 0xb2, 0x27, 0x2c, 0x23, 0x8b, 0x6a, 0xa2, - 0xec, 0x3a, 0xf9, 0x8a, 0x75, 0x9d, 0x9d, 0x12, 0x73, 0x9d, 0x55, 0x1e, 0x07, 0xf2, 0xb6, 0x63, - 0x6e, 0x99, 0xe4, 0x5a, 0xc8, 0xf9, 0x03, 0xa1, 0x92, 0x89, 0x29, 0xd0, 0xc0, 0x59, 0x74, 0x9a, - 0x55, 0x79, 0x02, 0x98, 0x36, 0x77, 0x8c, 0x2d, 0x78, 0xbf, 0x69, 0x91, 0x40, 0x12, 0xf3, 0x77, - 0x9c, 0x3e, 0x70, 0x78, 0x94, 0xbe, 0xd7, 0xc3, 0xac, 0xca, 0xdd, 0xe0, 0xda, 0xb6, 0x03, 0x0d, - 0x0f, 0x22, 0x01, 0x5d, 0x30, 0x3b, 0x5b, 0xd0, 0xab, 0x6e, 0xae, 0x9a, 0xae, 0x6b, 0x5a, 0x5b, - 0xf4, 0xe6, 0xd7, 0xe8, 0x0c, 0xea, 0x07, 0x25, 0xd1, 0x68, 0x90, 0x58, 0x32, 0x44, 0x25, 0x46, - 0xb8, 0xa1, 0x9e, 0x91, 0xa2, 0x2c, 0xe8, 0x80, 0xfc, 0x2a, 0xa1, 0x38, 0x8d, 0xd1, 0x6c, 0xa5, - 0x3f, 0xf4, 0xff, 0xa1, 0x04, 0x0a, 0x15, 0xfb, 0x8a, 0x85, 0x9b, 0xc9, 0x9d, 0x62, 0x96, 0xf2, - 0x80, 0xd0, 0x0e, 0xfc, 0x5d, 0xe7, 0xb1, 0xa7, 0x01, 0x71, 0x6d, 0xfd, 0x22, 0x23, 0x60, 0x88, - 0x6d, 0x77, 0x82, 0x01, 0x04, 0xe2, 0xca, 0x49, 0x5f, 0xae, 0xbf, 0x2b, 0x83, 0x6c, 0xc5, 0xb1, - 0x7b, 0xea, 0xdb, 0x32, 0x09, 0x1c, 0xf1, 0x3a, 0x8e, 0xdd, 0x6b, 0xe1, 0x2b, 0x64, 0xc3, 0xbd, - 0x27, 0x36, 0x4d, 0xb9, 0x13, 0x14, 0x7a, 0xb6, 0x6b, 0x7a, 0xfe, 0x24, 0x64, 0xfe, 0x8e, 0x87, - 0x0d, 0xec, 0x0b, 0xd6, 0x68, 0x26, 0x3d, 0xc8, 0x8e, 0xfa, 0x7c, 0x2c, 0x42, 0x24, 0x17, 0x24, - 0x46, 0xff, 0x1a, 0xdd, 0xbe, 0x54, 0xf5, 0x25, 0x2c, 0x92, 0x4f, 0xe2, 0x91, 0x7c, 0xe4, 0x00, - 0x09, 0x3b, 0x76, 0x6f, 0x2c, 0xae, 0x33, 0xaf, 0x08, 0x50, 0x7d, 0x32, 0x87, 0xea, 0x2d, 0x42, - 0x65, 0xa6, 0x8f, 0xe8, 0x07, 0xb3, 0x00, 0x60, 0x23, 0x65, 0x1d, 0x4d, 0x9f, 0xc4, 0x2c, 0xb4, - 0x1f, 0xcb, 0x32, 0xb2, 0x2c, 0xf1, 0xb2, 0x7c, 0x74, 0x84, 0x0d, 0x84, 0xc9, 0x47, 0x48, 0xb4, - 0x04, 0x72, 0xbb, 0xe8, 0x35, 0x95, 0xa8, 0x20, 0x09, 0xfc, 0xa8, 0x93, 0x2f, 0xd5, 0xdf, 0xce, - 0x80, 0x1c, 0x4e, 0x50, 0xce, 0x00, 0x80, 0xcd, 0x02, 0x72, 0x98, 0x36, 0x83, 0x0d, 0x00, 0x26, - 0x05, 0x6b, 0xab, 0xd9, 0xa1, 0xaf, 0x89, 0xc1, 0x1d, 0x26, 0xa0, 0xaf, 0xb1, 0xb1, 0x80, 0x69, - 0x51, 0xf3, 0x81, 0x49, 0x41, 0x5f, 0xe3, 0xa7, 0x1a, 0xdc, 0x24, 0xb7, 0x7b, 0x64, 0xf5, 0x30, - 0x21, 0xf8, 0xba, 0x16, 0xdc, 0x09, 0xeb, 0x7f, 0x8d, 0x53, 0xd0, 0x54, 0x1a, 0xab, 0xe5, 0x62, - 0x58, 0x44, 0x1e, 0x67, 0xea, 0x4f, 0x56, 0x5f, 0x17, 0xa8, 0x4d, 0x85, 0x53, 0x9b, 0xdb, 0x13, - 0x88, 0x37, 0x7d, 0xe5, 0xf9, 0x7a, 0x0e, 0x4c, 0xd7, 0xed, 0x0e, 0xd5, 0x1d, 0x66, 0xba, 0xf9, - 0x99, 0x5c, 0xa2, 0xe9, 0x66, 0x40, 0x23, 0x42, 0x41, 0x9e, 0xc2, 0x2b, 0x88, 0x18, 0x05, 0x56, - 0x3f, 0x94, 0x45, 0x90, 0xc7, 0xda, 0x7b, 0xf0, 0xb2, 0xd1, 0x38, 0x12, 0x58, 0xb4, 0x3a, 0xfd, - 0xf2, 0xdf, 0x9d, 0x8e, 0xfd, 0x37, 0x90, 0xc3, 0x15, 0x8c, 0xd9, 0x1b, 0xe2, 0x2b, 0x2a, 0xc5, - 0x57, 0x54, 0x8e, 0xaf, 0x68, 0xb6, 0xbf, 0xa2, 0x49, 0x56, 0x11, 0xa2, 0x34, 0x24, 0x7d, 0x1d, - 0xff, 0x5f, 0x53, 0x00, 0xd4, 0x8d, 0x3d, 0x73, 0x8b, 0xec, 0x2d, 0x7f, 0xd1, 0x9f, 0x3d, 0xd1, - 0x5d, 0xe0, 0x9f, 0x64, 0x06, 0xc2, 0x3b, 0xc1, 0x14, 0x1d, 0xf7, 0x68, 0x45, 0x6e, 0xe0, 0x2a, - 0x12, 0x52, 0x21, 0x46, 0xed, 0x83, 0x9e, 0xee, 0xe7, 0x47, 0x86, 0xc9, 0xe6, 0x6e, 0xb7, 0xdb, - 0x42, 0xdf, 0x52, 0x0b, 0xcd, 0x7f, 0x8e, 0xd8, 0xc1, 0x08, 0x2f, 0x99, 0x26, 0x41, 0xa7, 0xe8, - 0x93, 0xfa, 0x3e, 0xe1, 0x73, 0x6a, 0x0c, 0x3f, 0x4c, 0x8d, 0x22, 0x9a, 0xe0, 0xe3, 0xc0, 0x94, - 0x1d, 0x6c, 0x87, 0xcb, 0x91, 0xab, 0x68, 0x55, 0x6b, 0xd3, 0xd6, 0xfd, 0x9c, 0x82, 0x5b, 0x67, - 0x42, 0x7c, 0x4c, 0xe4, 0x28, 0xe8, 0xa9, 0x65, 0x3f, 0x52, 0x2a, 0xaa, 0xc7, 0x05, 0xd3, 0xdb, - 0xae, 0x99, 0xd6, 0x65, 0x57, 0xfd, 0x2f, 0x62, 0x16, 0x24, 0x83, 0xbf, 0x94, 0x0c, 0x7f, 0x3e, - 0x52, 0x59, 0xac, 0x67, 0x07, 0x43, 0x65, 0x30, 0xb7, 0x11, 0x00, 0xde, 0x05, 0xf2, 0x84, 0x51, - 0xda, 0x89, 0x9e, 0x8b, 0xc4, 0x2f, 0xa0, 0xa4, 0xd3, 0x2f, 0x04, 0xbd, 0x42, 0x92, 0x72, 0x96, - 0x3a, 0xa4, 0xe7, 0x1e, 0x0b, 0xa6, 0xa8, 0xa4, 0x95, 0x79, 0xb6, 0x15, 0x17, 0x8f, 0x29, 0x00, - 0xe4, 0x57, 0xed, 0x3d, 0xd8, 0xb2, 0x8b, 0x19, 0xf4, 0x1f, 0xf1, 0xd7, 0xb2, 0x8b, 0x92, 0xfa, - 0xca, 0x02, 0x28, 0x04, 0x21, 0x2a, 0xff, 0x50, 0x02, 0xc5, 0x32, 0x9e, 0xa1, 0x2d, 0x39, 0xf6, - 0x0e, 0xa9, 0x91, 0xf8, 0x99, 0x87, 0x97, 0x0a, 0x3b, 0x88, 0x04, 0xa1, 0x23, 0xfb, 0x0b, 0x8b, - 0xc0, 0x92, 0x2c, 0x61, 0x4a, 0xfe, 0x12, 0xa6, 0xfa, 0x56, 0x21, 0x87, 0x11, 0xd1, 0x52, 0xd2, - 0x6f, 0x6a, 0xbf, 0x23, 0x81, 0x5c, 0xb9, 0x6b, 0x5b, 0x90, 0x3d, 0x98, 0x3b, 0xf4, 0x04, 0xe8, - 0xe0, 0x7d, 0x0c, 0xf5, 0x59, 0x92, 0xa8, 0xad, 0x11, 0x0a, 0x00, 0x95, 0x2d, 0x28, 0x5b, 0xb1, - 0x41, 0x2a, 0x96, 0x74, 0xfa, 0x02, 0xfd, 0xa6, 0x04, 0xa6, 0x49, 0x4c, 0xb9, 0x52, 0xb7, 0xab, - 0x3e, 0x2c, 0x14, 0xea, 0x80, 0x30, 0x9f, 0xea, 0x87, 0x84, 0x0f, 0x9e, 0x05, 0xb5, 0x0a, 0x68, - 0x27, 0x08, 0x8b, 0x98, 0xec, 0x1c, 0x94, 0xd8, 0x4e, 0xdc, 0x50, 0x86, 0xd2, 0x17, 0xf5, 0x1f, - 0x49, 0xc8, 0x00, 0xb0, 0x2e, 0xaf, 0x39, 0x70, 0xcf, 0x84, 0x57, 0xd4, 0xeb, 0x42, 0x61, 0x1f, - 0x0c, 0x98, 0xf5, 0x26, 0xe1, 0x45, 0x1c, 0x86, 0x64, 0xe4, 0x46, 0xd8, 0x4c, 0x37, 0xcc, 0x44, - 0x7b, 0xf1, 0xfe, 0x28, 0x66, 0x0c, 0x19, 0x9d, 0xcd, 0x2e, 0xb8, 0x66, 0x13, 0xcd, 0x45, 0xfa, - 0x82, 0xfd, 0xd8, 0x14, 0x28, 0xac, 0x5b, 0x6e, 0xaf, 0x6b, 0xb8, 0xdb, 0xea, 0xbf, 0xca, 0x20, - 0x4f, 0xae, 0xb8, 0x55, 0x7f, 0x90, 0x8b, 0xcb, 0xf3, 0x8c, 0x5d, 0xe8, 0xf8, 0x0e, 0x3c, 0xe4, - 0x21, 0xb4, 0x8f, 0x24, 0xc6, 0x3e, 0x52, 0x3f, 0x28, 0x8b, 0x4e, 0x52, 0xfd, 0x42, 0xe9, 0x9d, - 0xba, 0xd1, 0xa1, 0x60, 0x7a, 0x66, 0xdb, 0xdb, 0x75, 0xa0, 0x3b, 0x30, 0x14, 0x4c, 0x24, 0x95, - 0x35, 0xf2, 0x95, 0x1e, 0x7c, 0xae, 0x1a, 0x60, 0x8a, 0x26, 0x1e, 0xd8, 0x8c, 0x3a, 0x18, 0x55, - 0xe2, 0x14, 0xc8, 0x1b, 0x8e, 0x67, 0xba, 0x1e, 0xdd, 0x9e, 0xa5, 0x4f, 0xa8, 0xbb, 0x24, 0xff, - 0xd6, 0x9d, 0xae, 0x1f, 0xc1, 0x2b, 0x48, 0x50, 0x7f, 0x4d, 0x68, 0xfe, 0x18, 0x5f, 0xf3, 0x64, - 0x90, 0xdf, 0x3f, 0xc2, 0x0a, 0xf7, 0x35, 0xe0, 0x2a, 0xbd, 0xd4, 0xd2, 0x36, 0x48, 0xc0, 0xa7, - 0x20, 0xb6, 0x53, 0x47, 0x7d, 0x8f, 0xcc, 0xac, 0xdf, 0xed, 0x73, 0x63, 0x04, 0x95, 0x62, 0x38, - 0x46, 0x04, 0x09, 0x31, 0x7b, 0xdd, 0xdc, 0x12, 0xae, 0x2c, 0xbc, 0x84, 0xab, 0xfe, 0x8a, 0xf0, - 0x5e, 0x54, 0x20, 0xca, 0x21, 0x6b, 0x80, 0x71, 0x57, 0x60, 0x7e, 0x44, 0x68, 0x5f, 0x69, 0x58, - 0x49, 0x47, 0x08, 0xdb, 0x77, 0x4f, 0x01, 0xa9, 0x54, 0x55, 0x7f, 0x62, 0x0a, 0xcc, 0x5e, 0x70, - 0x4c, 0xcf, 0xb4, 0xb6, 0x5a, 0xb6, 0xdd, 0x75, 0xd5, 0xef, 0x30, 0x1b, 0x15, 0x4f, 0x00, 0xf9, - 0xb6, 0x6d, 0x6d, 0x9a, 0x5b, 0x54, 0x8c, 0x67, 0xb8, 0xca, 0x95, 0xaa, 0x0b, 0x6b, 0x8e, 0xbd, - 0x67, 0x76, 0xa0, 0x53, 0xc6, 0xb9, 0x74, 0x9a, 0x1b, 0xe9, 0x31, 0x13, 0x32, 0xef, 0xf6, 0xfe, - 0xaf, 0xd8, 0xf2, 0x82, 0x98, 0x3d, 0x34, 0x91, 0x89, 0x98, 0x57, 0x05, 0x85, 0xae, 0x61, 0x6d, - 0xed, 0xfa, 0x33, 0xef, 0xfe, 0x5d, 0xd4, 0x28, 0x4a, 0x35, 0xfa, 0x91, 0x1e, 0x7c, 0x8e, 0x9d, - 0xdc, 0x90, 0xa9, 0x4f, 0xda, 0x1e, 0xfe, 0x7f, 0xee, 0xe3, 0x19, 0x30, 0xc3, 0x14, 0xaa, 0xcc, - 0x80, 0xa9, 0x8a, 0xb6, 0x54, 0x5a, 0xaf, 0xb5, 0x8a, 0xc7, 0x90, 0x14, 0x9b, 0xeb, 0xab, 0xab, - 0x25, 0xbd, 0xfa, 0xc3, 0x5a, 0x31, 0x83, 0xde, 0x2d, 0xeb, 0x25, 0xf4, 0x5c, 0x94, 0xd0, 0x43, - 0x73, 0xa5, 0xa1, 0xb7, 0xb4, 0x7a, 0x51, 0x46, 0xf6, 0xa8, 0xf6, 0xb4, 0xb5, 0x52, 0xbd, 0x52, - 0xcc, 0xa2, 0xff, 0x8b, 0xeb, 0xb5, 0x9a, 0xd6, 0x2a, 0xe6, 0xc2, 0x20, 0x7a, 0x79, 0x94, 0x5c, - 0x2e, 0x35, 0xd7, 0x4b, 0xb5, 0xe2, 0x14, 0x4a, 0x5e, 0x5a, 0xaf, 0xd7, 0x2f, 0x16, 0x0b, 0xa8, - 0x88, 0x72, 0xa3, 0xbe, 0x54, 0xad, 0x68, 0xf5, 0x56, 0x71, 0x5a, 0xb9, 0x0a, 0x1c, 0x6f, 0xb6, - 0xf4, 0x52, 0x75, 0x79, 0xa5, 0xb5, 0xd4, 0xd0, 0x2f, 0x94, 0xf4, 0x4a, 0x11, 0x28, 0x45, 0x30, - 0xbb, 0xa6, 0x37, 0x96, 0x34, 0x1c, 0x2f, 0xa5, 0x54, 0x2b, 0xce, 0xa0, 0xaf, 0x5a, 0x7a, 0xa9, - 0xde, 0xac, 0x95, 0x5a, 0x5a, 0x71, 0xf6, 0xdc, 0x7d, 0xa0, 0xe0, 0x57, 0x57, 0xc9, 0x03, 0x49, - 0xab, 0x17, 0x8f, 0xe1, 0xdf, 0x66, 0x31, 0x83, 0x7e, 0x97, 0x10, 0xbf, 0x79, 0x20, 0x55, 0xb4, - 0xa2, 0x8c, 0x7e, 0xab, 0xad, 0x62, 0x16, 0xfd, 0xae, 0x21, 0x16, 0xf3, 0x40, 0x5a, 0xa9, 0x16, - 0xf3, 0xe8, 0xb7, 0xb5, 0x52, 0x9c, 0xe2, 0x6f, 0xba, 0x8f, 0xed, 0x85, 0x0f, 0x4a, 0x3e, 0xc2, - 0xd0, 0xf0, 0xc2, 0x39, 0x32, 0xfe, 0xaf, 0xbe, 0x42, 0x12, 0xe9, 0xeb, 0xe2, 0xe9, 0x27, 0x6b, - 0x34, 0x6f, 0xc9, 0x8c, 0xb1, 0xd5, 0x28, 0x2a, 0x38, 0xa5, 0xd5, 0x2b, 0x6b, 0x8d, 0x6a, 0xbd, - 0x45, 0x42, 0x9d, 0x69, 0xa5, 0xf2, 0x0a, 0xc6, 0x19, 0x22, 0x04, 0x57, 0x1b, 0x15, 0xad, 0x86, - 0x5f, 0x2c, 0x35, 0xd6, 0xeb, 0x95, 0xe2, 0x26, 0x2a, 0xab, 0xb4, 0xde, 0x5a, 0xd9, 0xd0, 0xb5, - 0xa7, 0xae, 0x57, 0x75, 0xad, 0x52, 0xdc, 0x42, 0x34, 0x6a, 0xa5, 0xfa, 0xf2, 0x7a, 0x69, 0x99, - 0xee, 0x17, 0xae, 0xaf, 0xad, 0x35, 0xf0, 0x8e, 0xe1, 0xb6, 0xfa, 0xf7, 0x59, 0x50, 0x28, 0xed, - 0x7a, 0xf6, 0xa6, 0xd9, 0xed, 0xaa, 0xcf, 0x91, 0x0e, 0xdf, 0x14, 0x4b, 0x5c, 0x53, 0x3c, 0xd0, - 0x80, 0xfc, 0xb2, 0x82, 0xc6, 0xe3, 0x27, 0x30, 0xed, 0xf0, 0x74, 0xe8, 0x8c, 0x2d, 0xd3, 0x9d, - 0x66, 0xf2, 0x48, 0x1c, 0x71, 0x2d, 0xda, 0xb2, 0xf0, 0x1b, 0xfa, 0x78, 0xee, 0x7e, 0x30, 0xcb, - 0x52, 0xc2, 0xe1, 0xc0, 0x4a, 0xcb, 0x24, 0x5e, 0x98, 0x1f, 0x21, 0x90, 0xc4, 0x0b, 0xc3, 0x07, - 0x2f, 0x24, 0xdc, 0x5e, 0xaa, 0xad, 0x1a, 0xd2, 0xd3, 0xe3, 0x60, 0xa6, 0xa2, 0x35, 0xcb, 0x7a, - 0x15, 0xfb, 0xa9, 0x17, 0xb3, 0xbc, 0x97, 0x41, 0xac, 0x65, 0xc6, 0xd7, 0x48, 0x54, 0x29, 0xbf, - 0x27, 0x64, 0x6f, 0x45, 0xd3, 0x4e, 0xa6, 0x90, 0x2f, 0x7a, 0xa8, 0x29, 0xa4, 0xfa, 0xa2, 0x2c, - 0x59, 0x27, 0x6b, 0xee, 0xee, 0xec, 0x18, 0xce, 0x3e, 0xe7, 0xaf, 0x36, 0xaa, 0xde, 0x45, 0x8f, - 0xef, 0xb1, 0x51, 0x80, 0x90, 0x09, 0xd5, 0x73, 0xec, 0x9d, 0x9e, 0xdf, 0x57, 0xd3, 0x27, 0xf5, - 0x7f, 0x0a, 0xcf, 0x1c, 0x4b, 0xd5, 0x05, 0xa6, 0x32, 0x23, 0x0c, 0xed, 0x3f, 0x22, 0x89, 0xcc, - 0x22, 0x63, 0x8b, 0xf9, 0x7e, 0xd7, 0x88, 0xbf, 0xce, 0x82, 0xab, 0x68, 0x84, 0x97, 0x60, 0xfd, - 0x01, 0x99, 0xaa, 0xaf, 0x4e, 0x55, 0x33, 0xa8, 0x41, 0x2d, 0x87, 0x06, 0x35, 0xb3, 0xe1, 0x9d, - 0x15, 0xdc, 0xf0, 0x7e, 0x9b, 0xf0, 0xa1, 0x87, 0x52, 0x75, 0x61, 0x40, 0x1d, 0x27, 0xb3, 0x2d, - 0xff, 0x3c, 0x49, 0x64, 0xb5, 0x55, 0x88, 0xc3, 0xef, 0x77, 0x5d, 0x7b, 0x47, 0x06, 0xcc, 0xf3, - 0xaa, 0xa2, 0x3c, 0x1e, 0x14, 0x7a, 0x34, 0x85, 0xca, 0xe5, 0x74, 0x94, 0x72, 0xe9, 0x41, 0x4e, - 0x04, 0x11, 0xb4, 0x3a, 0x3d, 0xdb, 0xb4, 0x82, 0x75, 0x79, 0xff, 0x19, 0xcd, 0x3b, 0xf1, 0xd4, - 0xc1, 0x8f, 0xf7, 0x87, 0x1f, 0xc2, 0xd8, 0xb1, 0x59, 0x26, 0x76, 0x2c, 0x12, 0xa2, 0x07, 0x77, - 0xf0, 0x2d, 0x46, 0xbb, 0x0e, 0x71, 0x78, 0x91, 0x74, 0x36, 0xe9, 0xdc, 0x93, 0x41, 0xc1, 0x2f, - 0x1f, 0x59, 0x77, 0x8d, 0x5a, 0xad, 0xb4, 0x5a, 0x22, 0x0b, 0x95, 0x8d, 0x35, 0xad, 0x5e, 0xaa, - 0x16, 0x33, 0x68, 0xa0, 0xab, 0xad, 0x36, 0x5b, 0xeb, 0x95, 0x6a, 0xa3, 0x28, 0xe1, 0x27, 0x94, - 0xa9, 0xbc, 0xb6, 0x56, 0x94, 0xd5, 0x37, 0x4e, 0x81, 0xa9, 0x65, 0xa3, 0xdb, 0x85, 0xce, 0xbe, - 0xfa, 0x4d, 0x09, 0x14, 0xfd, 0xd9, 0xc1, 0xaa, 0x61, 0x99, 0x9b, 0xd0, 0xf5, 0xe2, 0x17, 0x2a, - 0xde, 0x27, 0x7c, 0xb5, 0x19, 0x2d, 0x63, 0xa1, 0x9f, 0x7e, 0x84, 0x8e, 0xdf, 0x06, 0xb2, 0xa6, - 0xb5, 0x69, 0xd3, 0xe5, 0x8a, 0x7e, 0x7f, 0x1b, 0xff, 0x63, 0xbc, 0x6d, 0x80, 0x33, 0x0a, 0xde, - 0x6e, 0x26, 0xc8, 0x45, 0xfa, 0xab, 0x16, 0xef, 0xc8, 0x82, 0x39, 0x9f, 0x89, 0xaa, 0xd5, 0x81, - 0x0f, 0xb2, 0xdb, 0xa0, 0x3f, 0x93, 0x15, 0x0d, 0x30, 0xd4, 0x5f, 0x1f, 0x4c, 0x2a, 0x42, 0xa4, - 0x2d, 0x00, 0xda, 0x86, 0x07, 0xb7, 0x6c, 0xc7, 0x0c, 0xd6, 0x22, 0x1e, 0x9f, 0x84, 0x5a, 0x99, - 0x7c, 0xbd, 0xaf, 0x33, 0x74, 0x94, 0x7b, 0xc0, 0x0c, 0x0c, 0x22, 0x3a, 0xfa, 0xdb, 0xa4, 0xb1, - 0x78, 0xb1, 0xf9, 0xd5, 0x3f, 0x12, 0x8a, 0x63, 0x24, 0x52, 0xcd, 0x64, 0x98, 0x6d, 0x8c, 0xd6, - 0xf5, 0xac, 0xd7, 0x57, 0x4b, 0x7a, 0x73, 0xa5, 0x54, 0xab, 0x55, 0xeb, 0xcb, 0x41, 0xc0, 0x62, - 0x05, 0xcc, 0x57, 0x1a, 0x17, 0xea, 0x4c, 0x44, 0xe9, 0xac, 0xba, 0x06, 0x0a, 0xbe, 0xbc, 0x06, - 0x9d, 0xa2, 0x62, 0x65, 0x46, 0x4f, 0x51, 0x31, 0x49, 0xc8, 0x34, 0x34, 0xdb, 0x81, 0x6b, 0x3d, - 0xfe, 0xaf, 0xfe, 0x96, 0x01, 0x72, 0xd8, 0x9f, 0x45, 0x7d, 0x17, 0x9e, 0x17, 0xf7, 0xba, 0x46, - 0x1b, 0xaa, 0x3b, 0x09, 0x56, 0xc2, 0xfd, 0xbb, 0x76, 0xa5, 0x03, 0x77, 0xed, 0xe2, 0xbf, 0x74, - 0xc4, 0x38, 0x39, 0xc8, 0x87, 0x46, 0x27, 0x59, 0xf8, 0x90, 0x3f, 0xb1, 0x9e, 0x4d, 0xc4, 0xf5, - 0x86, 0xb2, 0x19, 0xa1, 0x92, 0xd1, 0x3c, 0xa5, 0x71, 0x89, 0x4a, 0x1c, 0x47, 0xe9, 0xb7, 0xf8, - 0xaf, 0x64, 0x41, 0xae, 0xd9, 0xeb, 0x9a, 0x9e, 0xfa, 0x0b, 0xd2, 0x58, 0x30, 0x23, 0xf7, 0x23, - 0xcb, 0x43, 0xef, 0x47, 0x0e, 0xfd, 0x25, 0xb3, 0x02, 0xfe, 0x92, 0x2d, 0xf8, 0xa0, 0xc7, 0xfb, - 0x4b, 0xde, 0x49, 0xa7, 0x6d, 0xc4, 0xdb, 0xf2, 0x91, 0x03, 0x44, 0x8a, 0xab, 0x35, 0xe0, 0x36, - 0x8b, 0x73, 0x8f, 0xa5, 0x41, 0xf5, 0x01, 0xc8, 0x2f, 0x36, 0x5a, 0xad, 0xc6, 0x6a, 0xf1, 0x18, - 0x9e, 0x7e, 0x35, 0xd6, 0x48, 0x88, 0xe3, 0x6a, 0xbd, 0xae, 0xe9, 0xdc, 0x8c, 0x8b, 0xbf, 0x2c, - 0x33, 0x76, 0x82, 0xc5, 0x97, 0x9d, 0xa6, 0x7a, 0x89, 0x2d, 0x82, 0x47, 0xf3, 0x93, 0xbe, 0x72, - 0xfd, 0x9c, 0x0c, 0x72, 0xab, 0xd0, 0xd9, 0x82, 0xea, 0x33, 0x12, 0x38, 0xd8, 0x6d, 0x9a, 0x8e, - 0x4b, 0x2e, 0x45, 0x08, 0x1d, 0xec, 0xd8, 0x34, 0xe5, 0x46, 0x30, 0xe7, 0xc2, 0xb6, 0x6d, 0x75, - 0xfc, 0x4c, 0xa4, 0x3f, 0xe2, 0x13, 0xd5, 0x97, 0x25, 0x84, 0x0c, 0x33, 0x3a, 0x16, 0x2f, 0xb9, - 0x24, 0xc0, 0x0c, 0x2a, 0x35, 0x7d, 0x60, 0xbe, 0x2d, 0xa3, 0x8f, 0x7a, 0xfb, 0xea, 0xcb, 0x84, - 0x3d, 0x1f, 0x6f, 0x05, 0xf9, 0x4b, 0xfe, 0xbd, 0x68, 0x72, 0x64, 0x7f, 0x4c, 0xf3, 0x28, 0x8b, - 0xe0, 0x84, 0x0b, 0xbb, 0xb0, 0xed, 0xc1, 0x0e, 0x6a, 0xba, 0xfa, 0xd0, 0x4e, 0xe1, 0x60, 0x76, - 0xf5, 0xf7, 0x58, 0x00, 0xef, 0xe6, 0x01, 0xbc, 0x69, 0x80, 0x28, 0x51, 0x85, 0xa2, 0xe7, 0x26, - 0xa8, 0x1a, 0xcd, 0xae, 0x1d, 0x18, 0xbe, 0xfe, 0x33, 0x7a, 0xb7, 0xed, 0xed, 0x74, 0xf1, 0x3b, - 0x7a, 0x34, 0xd8, 0x7f, 0x56, 0x16, 0xc0, 0x94, 0x61, 0xed, 0xe3, 0x57, 0xd9, 0x98, 0x5a, 0xfb, - 0x99, 0xd4, 0x57, 0x06, 0xc8, 0xdf, 0xcb, 0x21, 0xff, 0x68, 0x31, 0x76, 0xd3, 0x07, 0xfe, 0x47, - 0xa7, 0x40, 0x6e, 0xcd, 0x70, 0x3d, 0xa8, 0xfe, 0x6f, 0x59, 0x14, 0xf9, 0x9b, 0xc0, 0xfc, 0xa6, - 0xdd, 0xde, 0x75, 0x61, 0x87, 0x6f, 0x94, 0x7d, 0xa9, 0xe3, 0xc0, 0x1c, 0x07, 0x66, 0xa7, 0x89, - 0x94, 0xac, 0xef, 0x02, 0x7b, 0x20, 0x1d, 0x5f, 0xbd, 0xe8, 0xae, 0x19, 0x8e, 0xd7, 0xd8, 0xc4, - 0x69, 0xc1, 0xd5, 0x8b, 0x6c, 0x22, 0x07, 0x7d, 0x3e, 0x06, 0xfa, 0xa9, 0x68, 0xe8, 0x0b, 0x02, - 0xd0, 0x2b, 0x25, 0x50, 0xd8, 0x34, 0xbb, 0x10, 0x7f, 0x30, 0x8d, 0x3f, 0x18, 0x34, 0x26, 0x61, - 0xd9, 0x07, 0x63, 0xd2, 0x92, 0xd9, 0x85, 0x7a, 0xf0, 0x99, 0x3f, 0x91, 0x01, 0xe1, 0x44, 0xa6, - 0x46, 0x4e, 0xc2, 0x21, 0xc3, 0xcb, 0x32, 0x76, 0xa0, 0xbf, 0xf1, 0x6d, 0xd1, 0x63, 0xe9, 0x1d, - 0xc3, 0x33, 0x30, 0x18, 0xb3, 0x3a, 0xfe, 0xcf, 0xfb, 0x64, 0xcb, 0xfd, 0x3e, 0xd9, 0xcf, 0x95, - 0x93, 0xf5, 0x88, 0x3e, 0xb3, 0x11, 0x2d, 0xea, 0x92, 0x0f, 0x10, 0xb1, 0x14, 0x83, 0x67, 0x04, - 0x4c, 0xdb, 0x70, 0xa0, 0xb7, 0xc6, 0x7a, 0x41, 0xe7, 0x74, 0x3e, 0x11, 0x1f, 0xc2, 0x71, 0x9b, - 0xc6, 0x0e, 0xb9, 0x5a, 0xb1, 0x8c, 0xde, 0xd1, 0xc3, 0x15, 0x07, 0xd2, 0xc3, 0xfe, 0x37, 0x37, - 0xee, 0xfe, 0x77, 0x50, 0x1d, 0xd3, 0x6f, 0x86, 0xaf, 0xc9, 0x02, 0xb9, 0xbc, 0xeb, 0x3d, 0xa4, - 0xbb, 0xdf, 0xef, 0x09, 0xfb, 0x98, 0xd3, 0xfe, 0x6c, 0xd7, 0x3b, 0xda, 0xde, 0x37, 0xa1, 0x96, - 0x88, 0xf9, 0xb2, 0x47, 0xd5, 0x2d, 0x7d, 0x1d, 0x79, 0x9b, 0x1c, 0x1c, 0x8d, 0x7a, 0x4e, 0xe6, - 0xf0, 0xa6, 0xb9, 0x4a, 0xfa, 0x27, 0xa6, 0x67, 0x08, 0x9e, 0xfd, 0x8e, 0x27, 0xcb, 0xdd, 0xfe, - 0x80, 0x5d, 0x5b, 0xb1, 0x28, 0x67, 0x75, 0xf2, 0xa0, 0xbe, 0x5c, 0xf8, 0xc0, 0x28, 0x11, 0x5b, - 0xec, 0x31, 0x9e, 0x64, 0x36, 0xd5, 0xab, 0x85, 0x8e, 0x8d, 0xc6, 0x14, 0x9b, 0x3e, 0x60, 0x7f, - 0xc7, 0x1e, 0xd3, 0x29, 0x1d, 0x1a, 0x31, 0xf5, 0x55, 0xc2, 0x0b, 0xfa, 0xa4, 0xda, 0x43, 0xf6, - 0xea, 0x93, 0xc9, 0x5b, 0xcc, 0x51, 0x2c, 0xb6, 0xe0, 0x09, 0xdc, 0x15, 0x2d, 0x83, 0x3c, 0x59, - 0xf8, 0x55, 0xdf, 0x2c, 0xdc, 0x44, 0x50, 0x6f, 0xc4, 0x1f, 0xdf, 0x09, 0x9e, 0x93, 0xac, 0x39, - 0x70, 0xc7, 0x7c, 0xb2, 0x89, 0x8e, 0xf9, 0xf0, 0x11, 0x58, 0x04, 0xda, 0x11, 0xa9, 0x63, 0xca, - 0xd3, 0xc9, 0x24, 0x2d, 0x6c, 0x20, 0x43, 0xe9, 0xe3, 0xfd, 0xfc, 0x1c, 0x98, 0x25, 0x45, 0x93, - 0xf3, 0x85, 0xea, 0x7b, 0xa4, 0xef, 0x1f, 0xd4, 0x95, 0x3a, 0x98, 0xbd, 0x82, 0xd9, 0x26, 0xe1, - 0xe5, 0xe8, 0xca, 0xc5, 0x2d, 0xb1, 0xeb, 0x1e, 0xa4, 0x9e, 0xfe, 0xad, 0xd1, 0xdc, 0xf7, 0x48, - 0xc6, 0x64, 0x83, 0x85, 0x1c, 0x9e, 0xc8, 0x63, 0x23, 0x8b, 0x4d, 0x52, 0x4e, 0x81, 0xfc, 0x9e, - 0x09, 0xaf, 0x54, 0x3b, 0xd4, 0xba, 0xa5, 0x4f, 0xea, 0xaf, 0x0b, 0xfb, 0x4c, 0xb2, 0x70, 0x53, - 0x5e, 0xd2, 0xd5, 0x42, 0x31, 0xcf, 0xc9, 0xa1, 0x6c, 0x4d, 0x20, 0x1a, 0x90, 0x44, 0xee, 0xa9, - 0xa7, 0xa1, 0xfc, 0xcb, 0x09, 0x14, 0x31, 0xca, 0x70, 0xe6, 0x83, 0xf0, 0xc5, 0x9e, 0x35, 0x27, - 0x02, 0x08, 0xcb, 0x1f, 0x4b, 0x9f, 0x2f, 0x16, 0x19, 0x6e, 0x48, 0xd1, 0xe9, 0x4b, 0xfe, 0x75, - 0x32, 0x98, 0x6e, 0x42, 0x6f, 0xc9, 0x84, 0xdd, 0x8e, 0xab, 0x3a, 0x87, 0x37, 0x8d, 0x6e, 0x03, - 0xf9, 0x4d, 0x4c, 0x6c, 0xd8, 0xe6, 0x24, 0xcd, 0xa6, 0xbe, 0x46, 0x12, 0xf5, 0x03, 0xa2, 0xab, - 0x6f, 0x3e, 0xb7, 0x63, 0x81, 0x49, 0xec, 0x34, 0x5d, 0x7c, 0xc9, 0x13, 0xb8, 0x2a, 0x49, 0x06, - 0xb3, 0x78, 0xfb, 0x1f, 0x7a, 0xa5, 0xae, 0xb9, 0x65, 0xb1, 0xb7, 0xab, 0x8f, 0xdc, 0x42, 0x94, - 0xdb, 0x41, 0xce, 0x40, 0xd4, 0xa8, 0xbb, 0x9b, 0x3a, 0xb0, 0xf3, 0xc4, 0xe5, 0xe9, 0x24, 0x63, - 0x82, 0x8b, 0x49, 0x42, 0xc5, 0xf6, 0x79, 0x9e, 0xe0, 0xc5, 0x24, 0x43, 0x0b, 0x4f, 0x1f, 0xb1, - 0xaf, 0xc9, 0xe0, 0x24, 0x65, 0xe0, 0x3c, 0x74, 0x3c, 0xb3, 0x6d, 0x74, 0x09, 0x72, 0x2f, 0xcc, - 0x8c, 0x03, 0xba, 0x15, 0x30, 0xb7, 0xc7, 0x92, 0xa5, 0x10, 0x9e, 0x1b, 0x08, 0x21, 0xc7, 0x80, - 0xce, 0x7f, 0x98, 0xe0, 0x82, 0x07, 0x4e, 0xaa, 0x1c, 0xcd, 0x09, 0x5e, 0xf0, 0x20, 0xcc, 0x44, - 0xfa, 0x10, 0xbf, 0x84, 0x06, 0xd5, 0x0c, 0xbb, 0xcf, 0x2f, 0x0a, 0x63, 0xbb, 0x0e, 0x66, 0x30, - 0x96, 0xe4, 0x43, 0xba, 0x0c, 0x11, 0xa3, 0xc4, 0x41, 0xbf, 0x43, 0x2f, 0xba, 0x0f, 0xbe, 0xd5, - 0x59, 0x3a, 0xea, 0x05, 0x00, 0xc2, 0x57, 0x6c, 0x27, 0x9d, 0x89, 0xea, 0xa4, 0x25, 0xb1, 0x4e, - 0xfa, 0x4d, 0xc2, 0x61, 0x0e, 0x07, 0xb3, 0x7d, 0x78, 0xf5, 0x10, 0x0b, 0x70, 0x37, 0xbc, 0xf4, - 0xf4, 0xf5, 0xe2, 0x95, 0x54, 0x2f, 0x2a, 0xbb, 0xbd, 0xae, 0xd9, 0x46, 0xf3, 0xa9, 0x4f, 0x8e, - 0x65, 0x3e, 0xc5, 0xf6, 0x07, 0x72, 0x5f, 0x7f, 0x70, 0x08, 0x4b, 0xfa, 0x66, 0x70, 0x9c, 0x14, - 0x51, 0x0e, 0xd8, 0xca, 0x91, 0x20, 0x6e, 0x7d, 0xc9, 0x7c, 0xd4, 0x76, 0x41, 0x25, 0x08, 0x84, - 0x30, 0xc2, 0xd2, 0x67, 0x32, 0x63, 0x37, 0xa9, 0x82, 0x44, 0x71, 0x36, 0x81, 0x23, 0x59, 0x59, - 0x62, 0xed, 0xae, 0xf7, 0x3a, 0x48, 0x3b, 0xbe, 0x9c, 0x1d, 0xc7, 0x88, 0xf0, 0x14, 0xea, 0x69, - 0x2a, 0x47, 0x2e, 0x69, 0x84, 0x45, 0x06, 0xfd, 0x48, 0x0b, 0x3e, 0xe8, 0xad, 0x1c, 0x23, 0x7e, - 0xa9, 0xca, 0x2d, 0xe0, 0xf8, 0x25, 0xa3, 0x7d, 0x79, 0xcb, 0xb1, 0x77, 0xf1, 0xad, 0xed, 0x36, - 0xbd, 0xfe, 0x7d, 0xe5, 0x98, 0xde, 0xff, 0x42, 0xb9, 0xc3, 0x37, 0x1d, 0x72, 0xc3, 0x4c, 0x87, - 0x95, 0x63, 0xd4, 0x78, 0x50, 0x1e, 0x1b, 0x74, 0x3a, 0xf9, 0xd8, 0x4e, 0x67, 0xe5, 0x98, 0xdf, - 0xed, 0x28, 0x15, 0x50, 0xe8, 0x98, 0x7b, 0x78, 0xab, 0x1a, 0xcf, 0xba, 0x86, 0x05, 0x1d, 0xaa, - 0x98, 0x7b, 0x64, 0x63, 0x7b, 0xe5, 0x98, 0x1e, 0x7c, 0xa9, 0x2c, 0x83, 0x69, 0xbc, 0x2d, 0x80, - 0xc9, 0x14, 0x12, 0x05, 0x14, 0x5a, 0x39, 0xa6, 0x87, 0xdf, 0x22, 0xeb, 0x23, 0x8b, 0xcf, 0x5d, - 0xdf, 0xeb, 0x6f, 0xb7, 0x67, 0x12, 0x6d, 0xb7, 0x23, 0x59, 0x90, 0x0d, 0xf7, 0x53, 0x20, 0xd7, - 0xc6, 0x12, 0x96, 0xa8, 0x84, 0xc9, 0xa3, 0x72, 0x37, 0xc8, 0xee, 0x18, 0x8e, 0x3f, 0x79, 0xbe, - 0x69, 0x38, 0xdd, 0x55, 0xc3, 0xb9, 0x8c, 0x10, 0x44, 0x5f, 0x2d, 0x4e, 0x81, 0x1c, 0x16, 0x5c, - 0xf0, 0x47, 0x7d, 0x5b, 0x96, 0x98, 0x21, 0x65, 0xdb, 0x42, 0xc3, 0x7e, 0xcb, 0xf6, 0x0f, 0xa7, - 0xff, 0x7a, 0x66, 0x3c, 0x16, 0xe4, 0x55, 0xcc, 0x75, 0x2a, 0x96, 0xf9, 0x8c, 0x5d, 0x78, 0x3f, - 0xdc, 0xa7, 0x4b, 0xa2, 0x83, 0x5e, 0x29, 0x67, 0x00, 0xf0, 0xe8, 0x49, 0xbd, 0x20, 0x88, 0x29, - 0x93, 0x12, 0x2e, 0x1f, 0xe4, 0x86, 0x3b, 0xaa, 0xfc, 0xde, 0x08, 0xa6, 0x4b, 0xbf, 0x20, 0xa2, - 0x67, 0xe0, 0x5d, 0xd3, 0x62, 0xea, 0xec, 0x3f, 0x26, 0xec, 0x94, 0x92, 0x1a, 0x35, 0x43, 0xd8, - 0x4b, 0xbf, 0x6f, 0x7a, 0x4b, 0x96, 0xdc, 0x28, 0x41, 0x4e, 0x40, 0x6b, 0x0f, 0x9a, 0x6e, 0x78, - 0x7f, 0xb3, 0xfa, 0xb9, 0xb1, 0x28, 0xcd, 0x80, 0x01, 0x47, 0x1e, 0x38, 0xe0, 0x1c, 0x08, 0x10, - 0x94, 0x1d, 0x12, 0x20, 0x28, 0x97, 0x6c, 0xe5, 0xf0, 0xa3, 0xac, 0xfe, 0xac, 0xf1, 0xfa, 0x73, - 0x57, 0x04, 0x40, 0x83, 0xe4, 0x32, 0x16, 0xfb, 0xe6, 0x5d, 0x81, 0xa6, 0x34, 0x39, 0x4d, 0xb9, - 0x77, 0x74, 0x46, 0xd2, 0xd7, 0x96, 0x0f, 0x67, 0xc1, 0x55, 0x21, 0x33, 0x75, 0x78, 0x85, 0x2a, - 0xca, 0x1f, 0x8e, 0x45, 0x51, 0x92, 0x3b, 0x3a, 0xa7, 0xad, 0x31, 0xbf, 0x2d, 0x7c, 0x6e, 0xbf, - 0x1f, 0xa8, 0x40, 0x36, 0x11, 0xca, 0x72, 0x0a, 0xe4, 0x49, 0x0f, 0x43, 0xa1, 0xa1, 0x4f, 0x09, - 0xbb, 0x1b, 0xb1, 0xd3, 0xfe, 0xa2, 0xbc, 0x4d, 0x40, 0x7f, 0xe8, 0xba, 0x46, 0x6b, 0xd7, 0xb1, - 0xaa, 0x96, 0x67, 0xab, 0xff, 0x7d, 0x2c, 0x8a, 0x13, 0x78, 0xc3, 0xc9, 0xa3, 0x78, 0xc3, 0x8d, - 0xb4, 0xca, 0xe1, 0xd7, 0xe0, 0x48, 0x56, 0x39, 0x22, 0x0a, 0x4f, 0x1f, 0xbf, 0x77, 0xca, 0xe0, - 0x14, 0x9d, 0x6c, 0x2d, 0xf2, 0x16, 0xa2, 0x7a, 0x71, 0x1c, 0x40, 0x9e, 0xf4, 0xcd, 0x24, 0xea, - 0x47, 0x8f, 0x1f, 0xf8, 0x28, 0x05, 0xb1, 0x37, 0x86, 0x72, 0xd3, 0xc1, 0x3e, 0x0e, 0xc7, 0x82, - 0x94, 0xd8, 0x45, 0xa1, 0x09, 0xd8, 0x48, 0x1f, 0xb3, 0x17, 0xcb, 0x20, 0x4f, 0x62, 0x24, 0xa8, - 0xeb, 0xa9, 0x38, 0x4c, 0xf0, 0xf7, 0xb3, 0x08, 0xec, 0xc8, 0x11, 0x6e, 0x52, 0x8b, 0x1f, 0x91, - 0x64, 0x2f, 0x6e, 0x20, 0x2b, 0x13, 0x70, 0x21, 0x94, 0xc0, 0x4c, 0x13, 0x7a, 0x65, 0xc3, 0x71, - 0x4c, 0x63, 0x6b, 0x5c, 0x1e, 0xdf, 0xa2, 0xde, 0xc3, 0xea, 0x77, 0x32, 0xa2, 0x67, 0xd9, 0x83, - 0x85, 0x70, 0x9f, 0xd5, 0x88, 0x28, 0xe0, 0xaf, 0x17, 0x3a, 0xaf, 0x3e, 0x8c, 0xda, 0x04, 0x3c, - 0xb6, 0x25, 0x30, 0xe5, 0xc7, 0xc1, 0xb8, 0x8d, 0x8b, 0x8d, 0xb2, 0xed, 0xed, 0xf8, 0xc7, 0x60, - 0xf0, 0xff, 0x83, 0xf1, 0x17, 0xd4, 0x57, 0x24, 0x74, 0x94, 0x8f, 0x0f, 0xe2, 0x91, 0xac, 0x8d, - 0x25, 0x71, 0x87, 0x3f, 0xaa, 0xb0, 0x1d, 0x1f, 0x9a, 0xa2, 0xcb, 0x91, 0x35, 0xc3, 0x83, 0x0f, - 0xaa, 0x5f, 0x94, 0xc1, 0x54, 0x13, 0x7a, 0x68, 0xbc, 0x45, 0xec, 0x1f, 0x5a, 0xc3, 0x15, 0x66, - 0xc5, 0x83, 0x9e, 0xad, 0x55, 0xee, 0x03, 0xd3, 0x3d, 0xc7, 0x6e, 0x43, 0xd7, 0xa5, 0xab, 0x17, - 0xac, 0xa3, 0xda, 0xa0, 0xd1, 0x1f, 0xb3, 0xb6, 0xb0, 0xe6, 0x7f, 0xa3, 0x87, 0x9f, 0x27, 0x35, - 0x03, 0x08, 0x25, 0x5a, 0xc1, 0x49, 0x9b, 0x01, 0x71, 0x85, 0xa7, 0x0f, 0xf4, 0xef, 0xcb, 0x60, - 0xb6, 0x09, 0xbd, 0x40, 0x8a, 0x09, 0x36, 0x39, 0xa2, 0xe1, 0xe5, 0xa0, 0x94, 0x0f, 0x07, 0xe5, - 0x3b, 0x85, 0x2f, 0xde, 0xe5, 0xa5, 0x19, 0x10, 0x1b, 0x0b, 0x9e, 0x6f, 0x11, 0xba, 0x6f, 0x57, - 0x8c, 0x83, 0x09, 0x1c, 0x5f, 0x7b, 0x24, 0x98, 0xc6, 0xbc, 0xe0, 0x06, 0xfb, 0x13, 0xd9, 0xb0, - 0xf1, 0x7e, 0x29, 0xa5, 0xc6, 0x7b, 0x0f, 0xc8, 0xed, 0x18, 0xce, 0x65, 0xff, 0xf0, 0xed, 0xa3, - 0xc4, 0x56, 0xbf, 0x5c, 0x9d, 0x7c, 0x35, 0xd8, 0x4f, 0x33, 0x97, 0xcc, 0x4f, 0xf3, 0xf5, 0x52, - 0xa2, 0x91, 0x90, 0xcc, 0x1d, 0xc6, 0xd8, 0xe4, 0x13, 0x8c, 0x9b, 0x31, 0x65, 0xa7, 0xaf, 0x1c, - 0x2f, 0x94, 0x41, 0x01, 0x8d, 0xdb, 0xd8, 0x1e, 0xbf, 0x70, 0x78, 0x75, 0x18, 0x6c, 0xe8, 0x27, - 0xec, 0x81, 0x7d, 0x89, 0x8c, 0xcf, 0xbc, 0x4f, 0xd0, 0x03, 0xc7, 0x15, 0x9e, 0x3e, 0x1e, 0xef, - 0x26, 0x78, 0xe0, 0xf6, 0xa0, 0xbe, 0x41, 0x06, 0xf2, 0x32, 0xf4, 0x26, 0x6d, 0x45, 0xbe, 0x5d, - 0x38, 0xbc, 0x28, 0x27, 0x30, 0xcc, 0xf3, 0xc2, 0x32, 0x1c, 0x4f, 0x03, 0x12, 0x8b, 0x2b, 0x2a, - 0xc4, 0x40, 0xfa, 0xa8, 0xbd, 0x9f, 0xa0, 0x46, 0x36, 0x17, 0x7e, 0x64, 0x0c, 0xbd, 0xea, 0x64, - 0x17, 0x3e, 0x7c, 0x01, 0x62, 0x1a, 0x47, 0xd5, 0xde, 0x06, 0x15, 0x9e, 0x3e, 0x72, 0x2f, 0x95, - 0xf1, 0x25, 0x66, 0xe5, 0x6d, 0xd8, 0xbe, 0x0c, 0x3b, 0xec, 0x65, 0xd9, 0xa3, 0x42, 0x77, 0x1a, - 0x4c, 0xb5, 0x09, 0x35, 0x0c, 0x5e, 0x41, 0xf7, 0x1f, 0xf9, 0x9b, 0x85, 0x62, 0xef, 0xce, 0xe2, - 0x3b, 0x22, 0xf2, 0xf9, 0x58, 0x70, 0x11, 0xbb, 0xf0, 0x4a, 0xa0, 0xf8, 0x09, 0x98, 0x2d, 0x64, - 0x96, 0x51, 0x6d, 0xdb, 0x96, 0xfa, 0x5f, 0x0f, 0x0f, 0xcb, 0xf5, 0x60, 0xda, 0x6c, 0xdb, 0x16, - 0x0e, 0x01, 0xe7, 0x1f, 0x02, 0x0a, 0x12, 0xfc, 0xb7, 0xda, 0x8e, 0xfd, 0x80, 0x49, 0x77, 0xcd, - 0xc3, 0x84, 0x51, 0x8d, 0x09, 0xc4, 0xfa, 0x51, 0x19, 0x13, 0x03, 0xca, 0x4e, 0x1f, 0xb2, 0x4f, - 0x85, 0xde, 0x6d, 0xa4, 0x2b, 0x7c, 0x48, 0xac, 0x02, 0x8f, 0x32, 0x9c, 0xb1, 0xb5, 0x38, 0x92, - 0xe1, 0x2c, 0x86, 0x81, 0x09, 0xdc, 0x44, 0x18, 0xe2, 0x98, 0xfa, 0x1a, 0xf0, 0x21, 0xd0, 0x19, - 0x9f, 0x79, 0x38, 0x22, 0x3a, 0x47, 0x63, 0x22, 0x7e, 0x84, 0x86, 0xa7, 0xa7, 0x16, 0x8f, 0xfa, - 0xdf, 0xc6, 0x01, 0xce, 0x5d, 0xa3, 0xf8, 0x2b, 0x10, 0x6f, 0x05, 0xf5, 0xad, 0x92, 0x68, 0x08, - 0x94, 0x03, 0x12, 0x44, 0x54, 0xc6, 0x82, 0xe0, 0x9b, 0x84, 0x62, 0x93, 0x88, 0x94, 0x9f, 0x3e, - 0x80, 0x2f, 0x90, 0xc1, 0x3c, 0xf6, 0x11, 0xe8, 0x42, 0xc3, 0x21, 0x1d, 0xe5, 0x58, 0x1c, 0xe5, - 0xdf, 0x2d, 0x1c, 0xe0, 0x87, 0x97, 0x43, 0xc8, 0xc7, 0x58, 0xa0, 0x10, 0x8b, 0xee, 0x23, 0xc8, - 0xc2, 0x44, 0xb6, 0x51, 0x8a, 0x01, 0x0b, 0x54, 0xc5, 0xc7, 0x83, 0x47, 0x42, 0x8f, 0x5c, 0x5e, - 0x18, 0x7e, 0x63, 0x9b, 0xb0, 0x47, 0xae, 0x08, 0x13, 0xe9, 0x63, 0xf2, 0x86, 0xdb, 0xe9, 0x82, - 0x73, 0xcb, 0xb8, 0xd4, 0x85, 0xea, 0xab, 0xb2, 0xc1, 0x89, 0xb6, 0xdf, 0x1f, 0x8b, 0x07, 0xe6, - 0x21, 0x2e, 0xa3, 0x52, 0x40, 0xd6, 0xb1, 0xaf, 0x90, 0xa5, 0xad, 0x39, 0x1d, 0xff, 0x27, 0xf1, - 0x2c, 0xbb, 0xbb, 0x3b, 0x16, 0x39, 0x19, 0x3a, 0xa7, 0xfb, 0x8f, 0xca, 0x8d, 0x60, 0xee, 0x8a, - 0xe9, 0x6d, 0xaf, 0x40, 0xa3, 0x03, 0x1d, 0xdd, 0xbe, 0x82, 0x3d, 0xe6, 0x0a, 0x3a, 0x9f, 0xc8, - 0xfb, 0xaf, 0x08, 0xd8, 0x97, 0x48, 0x28, 0x93, 0x39, 0xfe, 0x96, 0xc4, 0xf2, 0x8c, 0xe6, 0x2a, - 0x7d, 0x85, 0xf9, 0x80, 0x0c, 0xa6, 0x75, 0xfb, 0x0a, 0x55, 0x92, 0xff, 0xe7, 0x68, 0x75, 0x24, - 0xf1, 0x44, 0x0f, 0x4b, 0x2e, 0x60, 0x7f, 0xe2, 0x13, 0xbd, 0xd8, 0xe2, 0x27, 0x72, 0x72, 0x69, - 0x56, 0xb7, 0xaf, 0x34, 0xa1, 0x47, 0x5a, 0x84, 0xba, 0x31, 0x26, 0x27, 0x6b, 0xd3, 0x25, 0x04, - 0xe9, 0x3c, 0x3c, 0x78, 0x4e, 0xba, 0x8b, 0x10, 0x08, 0x28, 0x60, 0x71, 0xd2, 0xbb, 0x08, 0x43, - 0x39, 0x98, 0x40, 0x8c, 0x14, 0x19, 0xcc, 0xe8, 0xf6, 0x15, 0x34, 0x34, 0x2c, 0x99, 0xdd, 0xee, - 0x78, 0x46, 0xc8, 0xa4, 0xc6, 0xbf, 0x2f, 0x06, 0x9f, 0x8b, 0x89, 0x1b, 0xff, 0x43, 0x18, 0x48, - 0x1f, 0x86, 0xe7, 0x92, 0xc6, 0xe2, 0x8f, 0xd0, 0xd6, 0x78, 0x70, 0x18, 0xb5, 0x41, 0x04, 0x6c, - 0x1c, 0x59, 0x83, 0x88, 0xe2, 0x60, 0x22, 0x3b, 0x27, 0xf3, 0x65, 0x3c, 0xcc, 0x8f, 0xb7, 0x4d, - 0xbc, 0x37, 0x99, 0x6b, 0x22, 0x1d, 0x76, 0x39, 0x46, 0xc6, 0x82, 0x46, 0x02, 0x17, 0x44, 0x01, - 0x1e, 0xd2, 0xc7, 0xe3, 0xe3, 0x32, 0x98, 0x25, 0x2c, 0x3c, 0x44, 0xac, 0x80, 0x91, 0x1a, 0x15, - 0x5b, 0x83, 0xa3, 0x69, 0x54, 0x31, 0x1c, 0x4c, 0xe4, 0x3e, 0x7f, 0x64, 0xc7, 0x8d, 0x70, 0x7c, - 0x3c, 0x0a, 0xc1, 0x91, 0x8d, 0xb1, 0x31, 0x1e, 0x21, 0x1f, 0xc5, 0x18, 0x3b, 0xa2, 0x63, 0xe4, - 0xcf, 0x0d, 0x5a, 0xd1, 0x38, 0x31, 0x38, 0x44, 0x53, 0x18, 0x23, 0x0c, 0x23, 0x36, 0x85, 0x23, - 0x42, 0xe2, 0xeb, 0x32, 0x00, 0x84, 0x81, 0x55, 0x7b, 0x0f, 0x5f, 0xa4, 0x39, 0x86, 0xee, 0xac, - 0xdf, 0xad, 0x5e, 0x1e, 0xe2, 0x56, 0x9f, 0x30, 0x84, 0x4b, 0xd2, 0x95, 0x40, 0x46, 0xca, 0xa8, - 0x92, 0x13, 0x5f, 0x09, 0x8c, 0x2f, 0x3f, 0x7d, 0x8c, 0xbf, 0x4a, 0xac, 0xb9, 0xf0, 0x80, 0xe9, - 0xcf, 0x8f, 0x05, 0x65, 0x66, 0xf6, 0x2f, 0xf3, 0xb3, 0xff, 0x43, 0x60, 0x3b, 0xaa, 0x8d, 0x38, - 0xec, 0xe0, 0x68, 0xfa, 0x36, 0xe2, 0xd1, 0x1d, 0x10, 0xfd, 0x91, 0x2c, 0x38, 0x4e, 0x3b, 0x91, - 0xef, 0x07, 0x88, 0x13, 0x9e, 0xc3, 0xe3, 0x3a, 0xc9, 0x21, 0x28, 0x8f, 0x6b, 0x41, 0x2a, 0xc9, - 0x52, 0xa6, 0x00, 0x7b, 0x13, 0x59, 0xdd, 0xc8, 0x6b, 0x0f, 0xf6, 0x0c, 0xab, 0x23, 0x1e, 0xee, - 0x77, 0x08, 0xf0, 0xfe, 0x5a, 0xa3, 0xcc, 0xaf, 0x35, 0x0e, 0x58, 0x99, 0x4c, 0xbc, 0x73, 0x8d, - 0x45, 0x46, 0xd8, 0x9d, 0xf8, 0xce, 0x75, 0x74, 0xd9, 0xe9, 0xa3, 0xf4, 0x5e, 0x19, 0x64, 0x9b, - 0xb6, 0xe3, 0xa9, 0xcf, 0x4b, 0xd2, 0x3a, 0x89, 0xe4, 0x43, 0x90, 0xfc, 0x67, 0xa5, 0x0c, 0xb2, - 0xa8, 0x72, 0x74, 0xc6, 0x70, 0x5b, 0xfc, 0x51, 0x67, 0xc3, 0x33, 0xb0, 0x57, 0x37, 0x2a, 0x7f, - 0xa1, 0xb5, 0xdf, 0x83, 0x3a, 0xfe, 0x38, 0x69, 0x3c, 0x1d, 0x22, 0xbf, 0x66, 0xf4, 0x01, 0x8c, - 0xd4, 0xe2, 0xe9, 0x44, 0x96, 0x9c, 0x3e, 0x6e, 0xaf, 0x3d, 0x4e, 0x7d, 0x5b, 0x97, 0xcc, 0x2e, - 0x54, 0x9f, 0x47, 0x5c, 0x46, 0xea, 0xc6, 0x0e, 0x14, 0x3f, 0x12, 0x13, 0xeb, 0xda, 0x8a, 0xe3, - 0xcb, 0xca, 0x61, 0x7c, 0xd9, 0xa4, 0x0d, 0x8a, 0x1c, 0x40, 0x27, 0x2c, 0x4d, 0xba, 0x41, 0xc5, - 0x94, 0x3d, 0x91, 0x38, 0x9d, 0x27, 0x9a, 0xd0, 0x23, 0x46, 0x65, 0xc3, 0xbf, 0x22, 0xe9, 0xe9, - 0x63, 0x89, 0xd8, 0x19, 0x5c, 0xa8, 0x23, 0xf7, 0xdd, 0xc0, 0xf4, 0x01, 0x16, 0x9c, 0x55, 0x1e, - 0x9c, 0x1f, 0x8a, 0x16, 0x10, 0xcf, 0xe4, 0x58, 0x60, 0x7a, 0x7b, 0x00, 0xd3, 0x1a, 0x07, 0xd3, - 0xdd, 0x23, 0x72, 0x91, 0x3e, 0x60, 0x3f, 0x95, 0x03, 0xc7, 0xc9, 0xa4, 0xbf, 0x64, 0x75, 0x68, - 0x84, 0xd5, 0x37, 0x4b, 0x47, 0xbc, 0xd9, 0x76, 0x30, 0x04, 0x2b, 0x17, 0xcb, 0x39, 0xd7, 0x17, - 0xcb, 0x59, 0x59, 0x24, 0xe1, 0x5c, 0x51, 0x27, 0x8a, 0x77, 0xda, 0x86, 0x85, 0x99, 0xc0, 0xb2, - 0xc7, 0x5d, 0x6e, 0xf0, 0x1d, 0x7f, 0x8f, 0xe8, 0x94, 0xf8, 0x3d, 0xa2, 0xbf, 0x9b, 0x6c, 0xdd, - 0x0e, 0x17, 0xdd, 0x27, 0xf0, 0x94, 0x6d, 0xa7, 0x04, 0x2b, 0x7a, 0x02, 0xdc, 0xfd, 0xc7, 0x70, - 0x27, 0x0b, 0x23, 0x88, 0x8c, 0xe8, 0x4e, 0x86, 0x09, 0x1c, 0xa5, 0x3b, 0xd9, 0x30, 0x06, 0xd2, - 0xc7, 0xf1, 0x77, 0x73, 0x74, 0x37, 0x1f, 0xb7, 0x1b, 0xf5, 0x4f, 0xa4, 0xd4, 0x47, 0xe9, 0xef, - 0x66, 0x12, 0xf9, 0x3f, 0x63, 0xbe, 0xe2, 0x87, 0xe9, 0x24, 0x1e, 0xcd, 0x71, 0xe4, 0x26, 0xb0, - 0x6e, 0x24, 0x61, 0x5f, 0xf4, 0x0b, 0x66, 0xc7, 0xdb, 0x1e, 0xd3, 0x89, 0x8e, 0x2b, 0x88, 0x16, - 0x8d, 0x57, 0x4f, 0x1e, 0xd4, 0x7f, 0xc9, 0x24, 0x0a, 0x21, 0x15, 0x88, 0x04, 0xb3, 0x15, 0x21, - 0xe2, 0x04, 0x81, 0x9f, 0x62, 0xe9, 0x4d, 0x50, 0xa3, 0xcf, 0x9b, 0x1d, 0x68, 0x3f, 0x04, 0x35, - 0x1a, 0xf3, 0x35, 0x3e, 0x8d, 0x8e, 0x23, 0xf7, 0x1f, 0x54, 0xa3, 0x03, 0x91, 0x8c, 0x49, 0xa3, - 0x63, 0xe9, 0xa5, 0x2f, 0xe3, 0x57, 0xcc, 0xd2, 0x89, 0x54, 0xcd, 0xb4, 0x2e, 0xab, 0xff, 0x98, - 0x07, 0x45, 0x3f, 0x8e, 0xb0, 0xb7, 0x4d, 0x63, 0xc1, 0x7c, 0x58, 0xf8, 0x6e, 0x94, 0x11, 0xe2, - 0xbd, 0xf0, 0xe1, 0xa4, 0x72, 0x07, 0xc2, 0x49, 0x95, 0xc0, 0x9c, 0x69, 0x79, 0xd0, 0xb1, 0x8c, - 0xee, 0x52, 0xd7, 0xd8, 0x72, 0x4f, 0x4f, 0x0d, 0xbc, 0xbc, 0xae, 0xca, 0xe4, 0xd1, 0xf9, 0x2f, - 0xd8, 0x0b, 0x44, 0x0b, 0xfc, 0x05, 0xa2, 0x11, 0xd1, 0xaf, 0xa6, 0xa3, 0xa3, 0x5f, 0x05, 0xd1, - 0xad, 0xc0, 0xf0, 0xe0, 0xd8, 0xa2, 0xb6, 0x71, 0xc2, 0x70, 0x7f, 0xb7, 0x09, 0x46, 0x61, 0x0b, - 0x42, 0x3f, 0xbe, 0x5a, 0x4e, 0xb4, 0xba, 0x87, 0x14, 0x61, 0xa1, 0x5f, 0x09, 0x12, 0x5b, 0xa8, - 0x6c, 0xe5, 0xe5, 0xbe, 0xca, 0x07, 0x26, 0x4f, 0x56, 0xc0, 0xe4, 0x61, 0x95, 0x2a, 0x27, 0x7a, - 0xa7, 0xab, 0xf8, 0x62, 0xa1, 0x48, 0x6d, 0x27, 0x70, 0x1a, 0x29, 0x07, 0x4e, 0xf8, 0xd1, 0x6e, - 0x7b, 0x3d, 0x68, 0x38, 0x86, 0xd5, 0x86, 0xea, 0xa7, 0xa4, 0x71, 0x98, 0xbd, 0x4b, 0xa0, 0x60, - 0xb6, 0x6d, 0xab, 0x69, 0x3e, 0xd3, 0xbf, 0x5c, 0x2e, 0x3e, 0xc8, 0x3a, 0x96, 0x48, 0x95, 0x7e, - 0xa1, 0x07, 0xdf, 0x2a, 0x55, 0x30, 0xdd, 0x36, 0x9c, 0x0e, 0x09, 0xc2, 0x97, 0xeb, 0xbb, 0xc8, - 0x29, 0x92, 0x50, 0xd9, 0xff, 0x44, 0x0f, 0xbf, 0x56, 0x1a, 0xbc, 0x10, 0xf3, 0x7d, 0xd1, 0x3c, - 0x22, 0x89, 0x55, 0xc2, 0x8f, 0x38, 0x99, 0x23, 0xe9, 0x38, 0xb0, 0x6b, 0x90, 0x4b, 0xc7, 0xa7, - 0xc8, 0x1d, 0xd1, 0x41, 0x42, 0xd2, 0xe5, 0x01, 0x5c, 0xd4, 0x01, 0x34, 0x26, 0xbd, 0x3c, 0x20, - 0xc4, 0x45, 0xfa, 0x9a, 0xf9, 0xae, 0x3c, 0x98, 0x23, 0xbd, 0x1a, 0x15, 0xa7, 0xfa, 0x02, 0x19, - 0xe4, 0x9b, 0xd0, 0xbb, 0x1f, 0xee, 0xab, 0xcd, 0xc3, 0x8f, 0xc9, 0x45, 0x20, 0x5f, 0x0e, 0x02, - 0x0e, 0xa2, 0xbf, 0x49, 0xf7, 0xed, 0x7d, 0xbe, 0x16, 0x08, 0x4f, 0x93, 0xde, 0xb7, 0x8f, 0x2f, - 0x3e, 0x7d, 0x7c, 0x7e, 0x5a, 0x06, 0x72, 0xa9, 0xd3, 0x51, 0xdb, 0x87, 0x87, 0xe2, 0x2c, 0x98, - 0xf1, 0xdb, 0x4c, 0x18, 0x03, 0x92, 0x4d, 0x4a, 0xba, 0x08, 0x1a, 0xc8, 0xa6, 0xd4, 0x99, 0xf8, - 0xae, 0x42, 0x4c, 0xd9, 0xe9, 0x83, 0xf2, 0xa5, 0x29, 0xda, 0x68, 0x16, 0x6d, 0xfb, 0x32, 0x3e, - 0x2a, 0xf3, 0xcb, 0x32, 0xc8, 0x2d, 0x41, 0xaf, 0xbd, 0xad, 0xba, 0x63, 0x69, 0x33, 0x7d, 0xf7, - 0x9e, 0x0f, 0x09, 0xca, 0x99, 0x34, 0xfa, 0xb3, 0xcf, 0xf6, 0x02, 0x66, 0x79, 0xd2, 0xd1, 0x9f, - 0x63, 0x4b, 0x9f, 0xc0, 0x21, 0xb8, 0x2c, 0x98, 0x0f, 0x56, 0xc0, 0x08, 0x66, 0xef, 0xc8, 0x3c, - 0xe4, 0xd6, 0x43, 0x87, 0xd8, 0xcd, 0xea, 0x1f, 0x26, 0x0b, 0xb1, 0x16, 0xc8, 0x9c, 0xaf, 0x79, - 0xca, 0x0b, 0x93, 0x09, 0x82, 0xaf, 0x89, 0x31, 0x38, 0x81, 0x15, 0x00, 0x19, 0x14, 0x30, 0x43, - 0x15, 0x73, 0x0f, 0xbb, 0x1e, 0x72, 0x0b, 0x95, 0xcf, 0x1a, 0xcb, 0x42, 0xe5, 0xdd, 0xfc, 0x42, - 0xa5, 0x60, 0xc4, 0x64, 0x7f, 0x9d, 0x32, 0xa1, 0x2f, 0x0e, 0xfa, 0x7e, 0xec, 0xcb, 0x94, 0x09, - 0x7c, 0x71, 0x86, 0x94, 0x9f, 0x3e, 0xa2, 0x6f, 0xfc, 0xcf, 0xb4, 0xb3, 0xf6, 0x37, 0x64, 0xd5, - 0xff, 0x71, 0x02, 0x64, 0xcf, 0xa3, 0x3f, 0xff, 0x10, 0xde, 0xa8, 0xf5, 0xb2, 0x31, 0x04, 0x77, - 0x78, 0x32, 0xc8, 0x22, 0xfa, 0x74, 0xda, 0x73, 0x8b, 0xd8, 0xee, 0x30, 0x62, 0x44, 0xc7, 0xdf, - 0x29, 0xa7, 0x40, 0xde, 0xb5, 0x77, 0x9d, 0x36, 0x32, 0xbf, 0x91, 0xc6, 0xd0, 0xa7, 0xa4, 0x41, - 0x4d, 0x39, 0xd2, 0x0b, 0xe3, 0x73, 0x39, 0x65, 0x2e, 0x58, 0x92, 0xb9, 0x0b, 0x96, 0x12, 0xec, - 0x3f, 0x08, 0xf0, 0x96, 0xbe, 0x46, 0xfc, 0x09, 0xbe, 0x6b, 0xb0, 0x33, 0x2e, 0xd8, 0x23, 0xc4, - 0x72, 0x58, 0x75, 0x48, 0xea, 0x30, 0xce, 0x8b, 0x36, 0x88, 0x23, 0x3f, 0x51, 0x87, 0x71, 0x01, - 0x1e, 0x26, 0x72, 0xca, 0x3d, 0x4f, 0x9d, 0x5c, 0x2f, 0x8e, 0x13, 0xdd, 0x2c, 0xa7, 0xf4, 0x87, - 0x42, 0x67, 0x8c, 0xce, 0xaf, 0x23, 0xa3, 0x73, 0x44, 0xee, 0xaf, 0xbf, 0x21, 0xe3, 0x48, 0x9a, - 0xbe, 0x11, 0x24, 0x7e, 0x51, 0x52, 0x62, 0x88, 0xd0, 0x18, 0xcc, 0xc5, 0x91, 0x9e, 0x1b, 0x3d, - 0xb4, 0x38, 0x2f, 0x3a, 0x86, 0xff, 0x49, 0x87, 0x16, 0x17, 0x65, 0x24, 0x7d, 0x20, 0x7f, 0x89, - 0x5c, 0x4c, 0x56, 0x6a, 0x7b, 0xe6, 0xde, 0x98, 0x5b, 0x1a, 0x3f, 0xbc, 0x24, 0x8c, 0x26, 0x7c, - 0x40, 0x42, 0x84, 0xc3, 0x49, 0x47, 0x13, 0x16, 0x63, 0x23, 0x7d, 0x98, 0x7e, 0x12, 0x20, 0xe9, - 0xd1, 0xb5, 0x9d, 0x37, 0xc8, 0x40, 0x6e, 0x42, 0x4f, 0x85, 0x87, 0x47, 0xeb, 0x1c, 0x98, 0x65, - 0x96, 0x0e, 0xfc, 0x0b, 0x6f, 0xb8, 0xb4, 0xa4, 0x07, 0xe5, 0x03, 0x91, 0xb1, 0x8b, 0x2e, 0x93, - 0x3e, 0x28, 0x2f, 0xc2, 0xc4, 0x04, 0x0e, 0xca, 0xd3, 0x65, 0x9f, 0xef, 0x17, 0xa0, 0xc6, 0xb5, - 0x02, 0x74, 0x28, 0xa0, 0x8e, 0x62, 0x29, 0xe8, 0xed, 0xa1, 0xb1, 0x31, 0x21, 0xac, 0x3e, 0xcc, - 0x62, 0xd5, 0xe0, 0xb1, 0xba, 0x53, 0x44, 0x4c, 0x62, 0xc6, 0x87, 0xd0, 0x04, 0xff, 0x9d, 0x01, - 0x5c, 0x3a, 0x07, 0xd7, 0x93, 0x47, 0xe6, 0x23, 0x7d, 0xc4, 0x7e, 0x81, 0x8c, 0x5b, 0x4d, 0x32, - 0xb7, 0x1a, 0xcf, 0xb8, 0x45, 0xa7, 0x6d, 0x32, 0x37, 0x6d, 0x4b, 0x78, 0xb0, 0x22, 0xf4, 0x17, - 0xf6, 0x99, 0x1b, 0x06, 0x51, 0x76, 0xcc, 0x07, 0x2b, 0x86, 0x72, 0x90, 0x3e, 0x38, 0xdf, 0x92, - 0x01, 0x58, 0x76, 0xec, 0xdd, 0x5e, 0xc3, 0xe9, 0x40, 0x47, 0xfd, 0xb3, 0x70, 0xa6, 0xf6, 0x33, - 0x63, 0x98, 0xa9, 0xad, 0x01, 0xb0, 0x15, 0x10, 0xa7, 0x1a, 0x7e, 0xbb, 0xd8, 0xbc, 0x2c, 0x64, - 0x4a, 0x67, 0x68, 0xf0, 0x77, 0x0b, 0x3f, 0x95, 0xc7, 0x38, 0xae, 0xcf, 0x0a, 0xc9, 0x8d, 0x73, - 0xa6, 0xf6, 0xee, 0x00, 0xeb, 0x16, 0x87, 0xf5, 0x53, 0x0e, 0xc1, 0x49, 0xfa, 0x98, 0xff, 0xfd, - 0x14, 0x98, 0x21, 0xfb, 0xb2, 0x44, 0xa6, 0x7f, 0x1d, 0x82, 0xfe, 0xf3, 0x63, 0x00, 0x7d, 0x1d, - 0xcc, 0xda, 0x21, 0x75, 0xd2, 0xa7, 0xb2, 0x2b, 0x65, 0xb1, 0xb0, 0x33, 0x7c, 0xe9, 0x1c, 0x19, - 0xf5, 0x13, 0x2c, 0xf2, 0x3a, 0x8f, 0xfc, 0xdd, 0x31, 0xf2, 0x66, 0x28, 0x8e, 0x13, 0xfa, 0xf7, - 0x04, 0xd0, 0xaf, 0x73, 0xd0, 0x97, 0x0e, 0xc3, 0xca, 0x04, 0xee, 0x55, 0x90, 0x41, 0x16, 0x1f, - 0x83, 0x7c, 0x4b, 0x8a, 0x0b, 0x31, 0xa7, 0xc1, 0x14, 0x6e, 0xb2, 0xc1, 0x04, 0xd1, 0x7f, 0x44, - 0x6f, 0x8c, 0x4d, 0x0f, 0x3a, 0xc1, 0x12, 0xbb, 0xff, 0x88, 0x78, 0xf0, 0xdd, 0xcf, 0xdd, 0xd3, - 0x79, 0xb2, 0xe3, 0x1c, 0x24, 0x8c, 0x3c, 0x7b, 0x64, 0x25, 0x3e, 0xb6, 0x83, 0x91, 0xa3, 0xcc, - 0x1e, 0x87, 0x30, 0x92, 0x3e, 0xf0, 0x5f, 0xce, 0x82, 0xd3, 0x64, 0xf9, 0x6f, 0xc9, 0xb1, 0x77, - 0xfa, 0xae, 0x31, 0x33, 0x0f, 0xaf, 0x0b, 0x37, 0x81, 0x79, 0x8f, 0x73, 0xbc, 0xa7, 0x3a, 0xd1, - 0x97, 0xaa, 0xfe, 0x1e, 0xeb, 0x3c, 0xf3, 0x34, 0x1e, 0xc9, 0xc5, 0x18, 0x01, 0x46, 0xf1, 0x9e, - 0x78, 0x47, 0x45, 0x90, 0x51, 0x66, 0x35, 0x51, 0x1e, 0x69, 0x71, 0x39, 0xd0, 0xa9, 0x9c, 0x88, - 0x4e, 0x7d, 0x30, 0xd0, 0xa9, 0xff, 0xc4, 0xe9, 0xd4, 0xf2, 0xe1, 0x45, 0x32, 0x81, 0x25, 0xa6, - 0x79, 0x90, 0x5f, 0x32, 0xbb, 0x1e, 0x74, 0xd4, 0xaf, 0xd2, 0x79, 0xd4, 0xab, 0x52, 0xec, 0x5e, - 0x2a, 0x20, 0xbf, 0x89, 0x4b, 0xa3, 0x06, 0xd9, 0xad, 0x62, 0xd8, 0x10, 0x0e, 0x75, 0xfa, 0x6d, - 0xd2, 0x20, 0x7f, 0x7d, 0x64, 0xc6, 0x36, 0x01, 0x4b, 0x10, 0xe4, 0x6f, 0x38, 0x0b, 0x13, 0xb9, - 0xdf, 0x2a, 0xaf, 0xc3, 0x1d, 0x34, 0x82, 0x5c, 0x4e, 0x0f, 0xe1, 0x22, 0x90, 0xcd, 0x8e, 0x8b, - 0x9b, 0xde, 0xb4, 0x8e, 0xfe, 0x26, 0x75, 0x39, 0xea, 0x17, 0x15, 0x61, 0x79, 0xd2, 0x2e, 0x47, - 0x42, 0x5c, 0xa4, 0x8f, 0xd9, 0x77, 0xb1, 0xbf, 0x69, 0xaf, 0x6b, 0xb4, 0x21, 0xe2, 0x3e, 0x35, - 0xd4, 0xe6, 0x81, 0x64, 0xfa, 0x23, 0xbe, 0x64, 0xb2, 0xed, 0x34, 0x77, 0x88, 0x76, 0x3a, 0xea, - 0x6a, 0x64, 0x20, 0x73, 0x5c, 0xf1, 0x23, 0x5b, 0x8d, 0x8c, 0x65, 0x63, 0x02, 0xb7, 0x97, 0xfa, - 0xe7, 0x71, 0x27, 0xda, 0x5a, 0x47, 0xdd, 0xab, 0xa1, 0xc2, 0x1a, 0xdb, 0xd9, 0xdb, 0x51, 0xf6, - 0x6a, 0xa2, 0x79, 0x98, 0x00, 0x5a, 0xf3, 0x14, 0xad, 0x2f, 0xd0, 0x61, 0x34, 0xe5, 0xed, 0x52, - 0xd7, 0x76, 0xbc, 0x64, 0xdb, 0xa5, 0x88, 0x3b, 0x1d, 0x7f, 0x97, 0xf4, 0xfc, 0x16, 0x7f, 0x3c, - 0x7b, 0x5c, 0xc3, 0x67, 0x82, 0xf3, 0x5b, 0xc3, 0x18, 0x48, 0x1f, 0xde, 0xb7, 0x1e, 0xd1, 0xe0, - 0x39, 0x6a, 0x73, 0xa4, 0x6d, 0x60, 0x6c, 0x43, 0xe7, 0x28, 0xcd, 0x31, 0x9a, 0x87, 0xf4, 0xf1, - 0xfa, 0x3b, 0x66, 0xe0, 0x7c, 0xd3, 0x04, 0x07, 0x4e, 0xbf, 0x65, 0xe6, 0x46, 0x6c, 0x99, 0xa3, - 0xee, 0x2e, 0x50, 0x59, 0x8f, 0x6f, 0xc0, 0x1c, 0x65, 0x77, 0x21, 0x86, 0x89, 0xf4, 0x11, 0x7f, - 0xb3, 0x0c, 0x72, 0xcd, 0xc9, 0x8f, 0x97, 0xa3, 0xce, 0x45, 0xb0, 0xac, 0x9a, 0x63, 0x1b, 0x2e, - 0x47, 0x99, 0x8b, 0x44, 0xb2, 0x30, 0x81, 0xf8, 0xfd, 0xc7, 0xc1, 0x2c, 0x9e, 0x70, 0xfb, 0xbb, - 0xad, 0x7f, 0x47, 0x47, 0xcd, 0xd7, 0xa7, 0xd8, 0x56, 0xef, 0x03, 0x05, 0x7f, 0x77, 0x88, 0x8e, - 0x9c, 0x0b, 0x62, 0xed, 0xd3, 0xe7, 0x52, 0x0f, 0xbe, 0x3f, 0x94, 0x4f, 0xc4, 0xd8, 0x77, 0x02, - 0x47, 0xf5, 0x89, 0x38, 0xd2, 0xdd, 0xc0, 0xdf, 0x0d, 0x47, 0xd4, 0xff, 0x9a, 0x1e, 0xe6, 0xfd, - 0xbb, 0x84, 0xd9, 0x01, 0xbb, 0x84, 0x9f, 0x62, 0xb1, 0x6c, 0xf2, 0x58, 0xde, 0x23, 0x2a, 0xc2, - 0x31, 0x8e, 0xb5, 0xef, 0x0d, 0xe0, 0x3c, 0xcf, 0xc1, 0xb9, 0x78, 0x28, 0x5e, 0x26, 0x70, 0x7e, - 0x32, 0x1b, 0x8e, 0xb9, 0x9f, 0x4e, 0xb1, 0x1d, 0xf7, 0x1d, 0xce, 0xc8, 0x1e, 0x38, 0x9c, 0xc1, - 0xb5, 0xf4, 0xdc, 0x21, 0x5b, 0xfa, 0xa7, 0x59, 0xed, 0x68, 0xf1, 0xda, 0xf1, 0x64, 0x71, 0x44, - 0xc6, 0x37, 0x32, 0xbf, 0x2f, 0x50, 0x8f, 0x0b, 0x9c, 0x7a, 0x94, 0x0f, 0xc7, 0x4c, 0xfa, 0xfa, - 0xf1, 0x9b, 0xfe, 0x84, 0xf6, 0x88, 0xdb, 0xfb, 0xa8, 0x1b, 0x91, 0x9c, 0x10, 0xc7, 0x36, 0x72, - 0x8f, 0xb2, 0x11, 0x39, 0x8c, 0x93, 0x09, 0x84, 0x74, 0x9b, 0x03, 0x33, 0x98, 0xa7, 0x0b, 0x66, - 0x67, 0x0b, 0x7a, 0xea, 0xab, 0x89, 0xab, 0xa2, 0x1f, 0x40, 0x73, 0x4c, 0x51, 0x8e, 0xa2, 0x8e, - 0xcd, 0x26, 0xf5, 0x17, 0x20, 0x4c, 0x2e, 0x30, 0x0c, 0x4e, 0x3a, 0x10, 0xe3, 0x50, 0x0e, 0xd2, - 0x87, 0xec, 0x13, 0xc4, 0x99, 0xa3, 0x66, 0xec, 0xdb, 0xbb, 0x9e, 0xfa, 0x9c, 0x31, 0x74, 0xd0, - 0x8b, 0x20, 0xdf, 0xc5, 0xd4, 0xe8, 0xe9, 0x8c, 0xf8, 0xe9, 0x0e, 0x15, 0x01, 0x29, 0x5f, 0xa7, - 0x5f, 0x26, 0x3d, 0xa2, 0x11, 0xca, 0x91, 0xd0, 0x99, 0xf4, 0x11, 0x8d, 0x21, 0xe5, 0x4f, 0xe4, - 0xaa, 0x9e, 0x02, 0x2a, 0xdd, 0xdc, 0x31, 0xbd, 0x31, 0x05, 0x82, 0xe8, 0x22, 0x5a, 0x7e, 0x20, - 0x08, 0xfc, 0x90, 0xf4, 0xe0, 0x29, 0x23, 0x15, 0xf4, 0xf9, 0xa4, 0x0f, 0x9e, 0xc6, 0x17, 0x9f, - 0x3e, 0x26, 0x3f, 0x47, 0x5a, 0xd6, 0x79, 0xe2, 0x83, 0x9b, 0xa2, 0x7b, 0xef, 0xc8, 0x8d, 0x85, - 0xb0, 0x76, 0x74, 0x8d, 0x65, 0x60, 0xf9, 0xe9, 0x03, 0xf3, 0xcb, 0x3f, 0x00, 0x72, 0x15, 0x78, - 0x69, 0x77, 0x4b, 0xbd, 0x1b, 0x14, 0x5a, 0x0e, 0x84, 0x55, 0x6b, 0xd3, 0x46, 0xd2, 0xf5, 0xd0, - 0x7f, 0x1f, 0x12, 0xfa, 0x84, 0xf0, 0xd8, 0x86, 0x46, 0x27, 0x3c, 0x86, 0xe6, 0x3f, 0xaa, 0x2f, - 0x93, 0x40, 0xb6, 0xe9, 0x19, 0x9e, 0x3a, 0x1d, 0x60, 0xab, 0x3e, 0x87, 0xc5, 0xe2, 0x6e, 0x1e, - 0x8b, 0x9b, 0x38, 0x59, 0x60, 0x0e, 0x16, 0xd0, 0xf7, 0x11, 0x00, 0xa8, 0xa0, 0xf0, 0x80, 0x6b, - 0x5b, 0x28, 0x87, 0x7f, 0x52, 0xd2, 0x7f, 0x56, 0x5f, 0x19, 0x88, 0xfb, 0x5e, 0x4e, 0xdc, 0x8f, - 0x16, 0x2b, 0x62, 0x02, 0x2b, 0x6d, 0x12, 0x98, 0x46, 0xa2, 0x5d, 0x81, 0x46, 0xc7, 0x55, 0x1f, - 0x1e, 0x2a, 0x7f, 0x84, 0x98, 0xd5, 0x8f, 0x08, 0xc7, 0xf4, 0x24, 0xb5, 0x0a, 0x88, 0x47, 0xfb, - 0x0b, 0xf8, 0x31, 0x4d, 0x24, 0x3e, 0xa6, 0xc9, 0x6d, 0x20, 0x6b, 0x5a, 0x9b, 0x36, 0xf5, 0x5e, - 0xbb, 0x2e, 0x82, 0x36, 0xd2, 0x09, 0x1d, 0x67, 0x14, 0x0c, 0xf8, 0x19, 0xcf, 0xd6, 0x44, 0xee, - 0xce, 0xcb, 0xa2, 0xd2, 0xd5, 0xff, 0x7b, 0xa8, 0xb0, 0x15, 0x05, 0x64, 0x7b, 0x86, 0xb7, 0x4d, - 0x8b, 0xc6, 0xff, 0x91, 0x8d, 0xbc, 0x6b, 0x19, 0x96, 0x6d, 0xed, 0xef, 0x98, 0xcf, 0x0c, 0xae, - 0xe8, 0xe5, 0xd2, 0x10, 0xe7, 0x5b, 0xd0, 0x82, 0x8e, 0xe1, 0xc1, 0xe6, 0xde, 0x16, 0x9e, 0x63, - 0x15, 0x74, 0x36, 0x29, 0xb1, 0xfe, 0x23, 0x8e, 0xa3, 0xf5, 0x7f, 0xd3, 0xec, 0x42, 0x1c, 0xf0, - 0x89, 0xea, 0xbf, 0xff, 0x9c, 0x48, 0xff, 0x07, 0x14, 0x91, 0x3e, 0x1a, 0xff, 0x2a, 0x81, 0xd9, - 0x26, 0x52, 0xb8, 0xe6, 0xee, 0xce, 0x8e, 0xe1, 0xec, 0xab, 0x8f, 0x08, 0x51, 0x61, 0x54, 0x33, - 0xc3, 0xa9, 0xa6, 0xfa, 0x1b, 0xc2, 0xb7, 0x53, 0xd3, 0xa6, 0xcd, 0x94, 0x90, 0xb8, 0x1d, 0x3c, - 0x16, 0xe4, 0x90, 0x7a, 0xfb, 0xfe, 0x7c, 0xb1, 0x0d, 0x81, 0xe4, 0x14, 0x0c, 0x8c, 0x35, 0x94, - 0xb7, 0x09, 0x04, 0xe5, 0x90, 0xc0, 0xf1, 0xa6, 0x67, 0xb4, 0x2f, 0x2f, 0xdb, 0x8e, 0xbd, 0xeb, - 0x99, 0x16, 0x74, 0xd5, 0x87, 0x85, 0x08, 0xf8, 0xfa, 0x9f, 0x09, 0xf5, 0x5f, 0xfd, 0xb7, 0x8c, - 0xe8, 0x28, 0x1a, 0x74, 0xab, 0x2c, 0xf9, 0x88, 0x38, 0x57, 0x62, 0xe3, 0xa2, 0x08, 0xc5, 0xf4, - 0x85, 0xf6, 0x26, 0x19, 0x14, 0xb5, 0x07, 0x7b, 0xb6, 0xe3, 0xd5, 0xec, 0xb6, 0xd1, 0x75, 0x3d, - 0xdb, 0x81, 0x6a, 0x23, 0x56, 0x6a, 0xa8, 0x87, 0xe9, 0xd8, 0xed, 0x70, 0x70, 0xa4, 0x4f, 0xac, - 0xda, 0xc9, 0xbc, 0x8e, 0x7f, 0x42, 0x78, 0x97, 0x91, 0x48, 0xa5, 0x9f, 0xa3, 0x08, 0x3d, 0x1f, - 0xd4, 0xa5, 0x25, 0x73, 0xc5, 0x17, 0xdb, 0x79, 0x14, 0x62, 0x6a, 0x02, 0x4b, 0xe5, 0x12, 0x98, - 0x6b, 0xee, 0x5e, 0x0a, 0x88, 0xb8, 0xac, 0x11, 0xf2, 0x1a, 0xe1, 0x60, 0x16, 0x54, 0xf1, 0x58, - 0x42, 0x11, 0xf2, 0xbd, 0x11, 0xcc, 0xb9, 0x6c, 0x36, 0x8a, 0x37, 0x9f, 0x28, 0x18, 0xc4, 0x62, - 0x78, 0xa9, 0xe9, 0x0b, 0xf0, 0x7d, 0x12, 0x98, 0x6b, 0xf4, 0xa0, 0x05, 0x3b, 0xc4, 0xc7, 0x8e, - 0x13, 0xe0, 0xcb, 0x12, 0x0a, 0x90, 0x23, 0x14, 0x21, 0xc0, 0xd0, 0x1f, 0xb6, 0xe2, 0x0b, 0x2f, - 0x4c, 0x48, 0x24, 0xb8, 0xb8, 0xd2, 0xd2, 0x17, 0xdc, 0x57, 0x24, 0x30, 0xa3, 0xef, 0x5a, 0x6b, - 0x8e, 0x8d, 0x46, 0x63, 0x47, 0xbd, 0x27, 0xec, 0x20, 0x6e, 0x05, 0x27, 0x3a, 0xbb, 0x0e, 0x5e, - 0x7f, 0xaa, 0x5a, 0x4d, 0xd8, 0xb6, 0xad, 0x8e, 0x8b, 0xeb, 0x91, 0xd3, 0x0f, 0xbe, 0xb8, 0x2b, - 0xfb, 0xbc, 0xbf, 0x94, 0x33, 0xea, 0x0b, 0x84, 0x23, 0xe6, 0x90, 0xca, 0x33, 0x45, 0x8b, 0xf7, - 0x04, 0x82, 0x71, 0x71, 0x86, 0x95, 0x90, 0xbe, 0x70, 0xbf, 0x20, 0x01, 0xa5, 0xd4, 0x6e, 0xdb, - 0xbb, 0x96, 0xd7, 0x84, 0x5d, 0xd8, 0xf6, 0x5a, 0x8e, 0xd1, 0x86, 0xac, 0xfd, 0x5c, 0x04, 0x72, - 0xc7, 0x74, 0x68, 0x1f, 0x8c, 0xfe, 0x52, 0x39, 0xbe, 0x4c, 0x78, 0xc7, 0x91, 0xd4, 0xf2, 0x60, - 0x29, 0x09, 0xc4, 0x29, 0xb6, 0xaf, 0x28, 0x58, 0x50, 0xfa, 0x52, 0xfd, 0xb4, 0x04, 0xa6, 0xfd, - 0x1e, 0x7b, 0x4b, 0x44, 0x98, 0x3f, 0x97, 0x70, 0x32, 0x12, 0x10, 0x4f, 0x20, 0xc3, 0x77, 0x25, - 0x98, 0x55, 0x44, 0xd1, 0x4f, 0x26, 0xba, 0x52, 0x72, 0xd1, 0xa1, 0xc7, 0x7a, 0x63, 0x63, 0xa9, - 0x51, 0xab, 0x68, 0x7a, 0x51, 0x56, 0xbf, 0x2a, 0x81, 0xec, 0x9a, 0x69, 0x6d, 0xb1, 0x81, 0xcd, - 0x4e, 0x22, 0x3b, 0xb2, 0x03, 0x1f, 0xa4, 0x2d, 0x9d, 0x3c, 0x28, 0x77, 0x80, 0x93, 0xd6, 0xee, - 0xce, 0x25, 0xe8, 0x34, 0x36, 0xf1, 0x28, 0xeb, 0xb6, 0xec, 0x26, 0xb4, 0x88, 0x11, 0x9a, 0xd3, - 0x07, 0xbe, 0xe3, 0x4d, 0x30, 0x81, 0xc9, 0x03, 0xe2, 0x24, 0x42, 0xe2, 0x01, 0x53, 0x12, 0xc3, - 0x54, 0xa2, 0x69, 0xc3, 0x00, 0xe2, 0xe9, 0x6b, 0xea, 0x6f, 0xe5, 0xc0, 0xd5, 0x25, 0x6b, 0x1f, - 0xdb, 0x14, 0xa4, 0x83, 0x2f, 0x6f, 0x1b, 0xd6, 0x16, 0xc4, 0x03, 0x44, 0x20, 0x71, 0x36, 0xd2, - 0x7f, 0x86, 0x8f, 0xf4, 0xaf, 0xe8, 0x60, 0xca, 0x76, 0x3a, 0xd0, 0x59, 0xdc, 0xc7, 0x3c, 0xf5, - 0x2f, 0x3b, 0xd3, 0x36, 0x39, 0xa8, 0x88, 0x05, 0x4a, 0x7e, 0xa1, 0x41, 0xbe, 0xd7, 0x7d, 0x42, - 0xe7, 0x6e, 0x05, 0x53, 0x34, 0x4d, 0x99, 0x05, 0x85, 0x86, 0x5e, 0xd1, 0xf4, 0x8d, 0x6a, 0xa5, - 0x78, 0x4c, 0xb9, 0x0a, 0x1c, 0xaf, 0xb6, 0x34, 0xbd, 0xd4, 0xaa, 0x36, 0xea, 0x1b, 0x38, 0xbd, - 0x98, 0x51, 0x9f, 0x9b, 0x15, 0xf5, 0xec, 0x8d, 0x67, 0x66, 0x10, 0xac, 0x3a, 0x98, 0x6a, 0x93, - 0x0c, 0x78, 0x08, 0x9d, 0x49, 0x54, 0x3b, 0x4a, 0x90, 0x24, 0xe8, 0x3e, 0x21, 0xe5, 0x0c, 0x00, - 0x57, 0x1c, 0xdb, 0xda, 0x0a, 0xcf, 0xb4, 0x15, 0x74, 0x26, 0x45, 0x7d, 0x4e, 0x06, 0xe4, 0xc9, - 0x37, 0xf8, 0x66, 0x13, 0xfc, 0x2f, 0x14, 0xbc, 0xff, 0x8c, 0x2c, 0x5e, 0x2c, 0xaf, 0x70, 0xa2, - 0x45, 0x1f, 0x91, 0x2e, 0x12, 0x19, 0x10, 0x4b, 0x98, 0x56, 0xe5, 0x36, 0x90, 0x27, 0xdf, 0x52, - 0xaf, 0x83, 0xe8, 0x28, 0xa5, 0x24, 0x9b, 0xa0, 0x9f, 0xb2, 0xb8, 0x4c, 0xd3, 0xd7, 0xe6, 0x8f, - 0x4a, 0xa0, 0x50, 0x87, 0x5e, 0x79, 0x1b, 0xb6, 0x2f, 0xab, 0x8f, 0xe2, 0x17, 0x40, 0xbb, 0x26, - 0xb4, 0xbc, 0x8b, 0x3b, 0xdd, 0x60, 0x01, 0xd4, 0x4f, 0x50, 0x9f, 0xcf, 0x76, 0xbe, 0x4f, 0xe1, - 0xf5, 0xe7, 0x96, 0x01, 0x75, 0xf5, 0x4b, 0x88, 0x50, 0x99, 0x53, 0x20, 0xef, 0x40, 0x77, 0xb7, - 0xeb, 0x2f, 0xa2, 0xd1, 0x27, 0xf5, 0xb5, 0x81, 0x38, 0xcb, 0x9c, 0x38, 0x6f, 0x13, 0x2f, 0x62, - 0x02, 0x61, 0x4f, 0xb3, 0x60, 0xaa, 0x6a, 0x99, 0x9e, 0x69, 0x74, 0xd5, 0x17, 0x64, 0xc1, 0x5c, - 0x13, 0x7a, 0x6b, 0x86, 0x63, 0xec, 0x40, 0x0f, 0x3a, 0xae, 0xfa, 0x1d, 0xbe, 0x4f, 0xe8, 0x75, - 0x0d, 0x6f, 0xd3, 0x76, 0x76, 0x7c, 0xd5, 0xf4, 0x9f, 0x91, 0x6a, 0xee, 0x41, 0xc7, 0x0d, 0xf9, - 0xf2, 0x1f, 0xd1, 0x9b, 0x2b, 0xb6, 0x73, 0x19, 0x0d, 0x82, 0x74, 0x9a, 0x46, 0x1f, 0x11, 0xbd, - 0xae, 0xbd, 0x55, 0x83, 0x7b, 0xd0, 0x8f, 0xaa, 0x16, 0x3c, 0xa3, 0xb9, 0x40, 0xc7, 0xae, 0xdb, - 0x1e, 0xea, 0xb4, 0x6b, 0xf6, 0x16, 0x09, 0x3b, 0x5b, 0xd0, 0xf9, 0xc4, 0x30, 0x97, 0xb1, 0x07, - 0x71, 0xae, 0x3c, 0x9b, 0x8b, 0x26, 0x2a, 0x0b, 0x40, 0x09, 0x3e, 0x6b, 0xc1, 0x2e, 0xdc, 0x81, - 0x9e, 0xb3, 0x8f, 0x6f, 0x97, 0x28, 0xe8, 0x03, 0xde, 0xd0, 0x01, 0x5a, 0x7c, 0xb2, 0x4e, 0xa5, - 0xb7, 0xc0, 0x49, 0xee, 0x50, 0x93, 0x75, 0x11, 0x8a, 0x13, 0xb9, 0x3d, 0x4b, 0x46, 0xd6, 0xcc, - 0xcb, 0x65, 0x90, 0xc5, 0x83, 0xe7, 0x9b, 0x33, 0xdc, 0x0a, 0xd3, 0x0e, 0x74, 0x5d, 0x63, 0x0b, - 0xfa, 0x2b, 0x4c, 0xf4, 0x51, 0xb9, 0x13, 0xe4, 0xba, 0x18, 0x53, 0x32, 0x38, 0x3c, 0x82, 0xab, - 0x19, 0x32, 0x30, 0x10, 0xad, 0x60, 0x24, 0xc0, 0x70, 0xeb, 0xe4, 0x8b, 0x73, 0xf7, 0x81, 0x1c, - 0x81, 0x7f, 0x1a, 0xe4, 0x2a, 0xda, 0xe2, 0xfa, 0x72, 0xf1, 0x18, 0xfa, 0xeb, 0xf3, 0x37, 0x0d, - 0x72, 0x4b, 0xa5, 0x56, 0xa9, 0x56, 0x94, 0x50, 0x3d, 0xaa, 0xf5, 0xa5, 0x46, 0x51, 0x46, 0x89, - 0x6b, 0xa5, 0x7a, 0xb5, 0x5c, 0xcc, 0x2a, 0x33, 0x60, 0xea, 0x42, 0x49, 0xaf, 0x57, 0xeb, 0xcb, - 0xc5, 0x9c, 0xfa, 0x17, 0x2c, 0x7e, 0x77, 0xf1, 0xf8, 0xdd, 0x18, 0xc5, 0xd3, 0x20, 0xc8, 0x7e, - 0x31, 0x80, 0xec, 0x1e, 0x0e, 0xb2, 0x1f, 0x10, 0x21, 0x32, 0x01, 0x77, 0xa6, 0x3c, 0x98, 0x5a, - 0x73, 0xec, 0x36, 0x74, 0x5d, 0xf5, 0xa5, 0x12, 0xc8, 0x97, 0x0d, 0xab, 0x0d, 0xbb, 0xea, 0xb5, - 0x21, 0x54, 0xc4, 0x55, 0x34, 0xe3, 0xbb, 0x8a, 0xaa, 0xdf, 0xca, 0x88, 0xf6, 0x7e, 0x94, 0xee, - 0x02, 0xa1, 0x19, 0x21, 0x1f, 0xb1, 0x5e, 0x2e, 0x96, 0xd4, 0x04, 0x6e, 0xd8, 0x91, 0xc0, 0x34, - 0x5d, 0x0d, 0xb8, 0x04, 0xd9, 0x79, 0xf8, 0x77, 0x32, 0xa2, 0x93, 0x43, 0xbf, 0x06, 0x01, 0x99, - 0x08, 0x79, 0x88, 0x4d, 0x04, 0x87, 0x51, 0x9b, 0xc0, 0xe6, 0xa1, 0x04, 0x66, 0xd6, 0x2d, 0x77, - 0x90, 0x50, 0xc4, 0xc3, 0xf1, 0xfb, 0xd5, 0x60, 0x08, 0x1d, 0x2a, 0x1c, 0xff, 0x70, 0x7a, 0xe9, - 0x0b, 0xe6, 0x3b, 0x19, 0x70, 0x72, 0x19, 0x5a, 0xd0, 0x31, 0xdb, 0xa4, 0x06, 0xbe, 0x24, 0xee, - 0xe1, 0x25, 0xf1, 0x28, 0x8e, 0xf3, 0x41, 0x5f, 0xf0, 0x12, 0x78, 0x55, 0x20, 0x81, 0xa7, 0x70, - 0x12, 0xb8, 0x55, 0x90, 0xce, 0x04, 0xae, 0x55, 0x9f, 0x06, 0xb3, 0x75, 0xdb, 0x33, 0x37, 0xcd, - 0x36, 0xf1, 0x41, 0xfb, 0x05, 0x19, 0x64, 0x6b, 0xa6, 0xeb, 0xa9, 0xa5, 0xb0, 0x3b, 0x39, 0x0b, - 0x66, 0x4c, 0xab, 0xdd, 0xdd, 0xed, 0x40, 0x1d, 0x1a, 0xa4, 0x5f, 0x29, 0xe8, 0x6c, 0x52, 0xb8, - 0xb5, 0x8f, 0xd8, 0x92, 0xfd, 0xad, 0xfd, 0xdf, 0x11, 0x5e, 0x86, 0x61, 0x59, 0xc0, 0x71, 0x29, - 0x23, 0xec, 0xae, 0x12, 0x98, 0xb3, 0x98, 0xac, 0xbe, 0xc1, 0xde, 0x7f, 0x2f, 0x01, 0x4b, 0x4e, - 0xe7, 0xbf, 0x50, 0x3f, 0x20, 0xd4, 0x58, 0x87, 0x31, 0x94, 0x0c, 0x99, 0xa5, 0x11, 0x26, 0xc9, - 0x0a, 0x98, 0xaf, 0xd6, 0x5b, 0x9a, 0x5e, 0x2f, 0xd5, 0x68, 0x16, 0x59, 0xfd, 0x57, 0x09, 0xe4, - 0x74, 0xd8, 0xeb, 0xee, 0xb3, 0x81, 0xa7, 0xa9, 0xa3, 0x78, 0x26, 0x70, 0x14, 0x57, 0x96, 0x00, - 0x30, 0xda, 0xa8, 0x60, 0x7c, 0x33, 0x97, 0x34, 0x30, 0x9c, 0x29, 0x57, 0xc1, 0x52, 0x90, 0x5b, - 0x67, 0xbe, 0x54, 0x5f, 0x28, 0xbc, 0x73, 0xc4, 0x51, 0xc3, 0x1c, 0x46, 0xf4, 0x09, 0x1f, 0x14, - 0xda, 0xec, 0x19, 0x4a, 0xee, 0x68, 0xc4, 0xff, 0x35, 0x09, 0x64, 0x5b, 0xa8, 0xb7, 0x64, 0x3a, - 0xce, 0xcf, 0x8d, 0xa6, 0xe3, 0x88, 0x4c, 0x84, 0x8e, 0xdf, 0x0b, 0x66, 0x59, 0x8d, 0xa5, 0xae, - 0x12, 0xb1, 0x2a, 0xce, 0x7d, 0x30, 0x8a, 0x86, 0x0f, 0x60, 0xe7, 0x68, 0x44, 0xfc, 0x99, 0x47, - 0x03, 0xb0, 0x0a, 0x77, 0x2e, 0x41, 0xc7, 0xdd, 0x36, 0x7b, 0xea, 0x5f, 0xc9, 0x60, 0x7a, 0x19, - 0x7a, 0x4d, 0xcf, 0xf0, 0x76, 0xdd, 0xbe, 0xed, 0x4e, 0xcb, 0x2e, 0x1b, 0xed, 0x6d, 0x48, 0xbb, - 0x23, 0xff, 0x51, 0x7d, 0x8f, 0x2c, 0xea, 0x4f, 0x14, 0x96, 0xb3, 0x10, 0x94, 0x11, 0x81, 0xc9, - 0x63, 0x40, 0xb6, 0x63, 0x78, 0x06, 0xc5, 0xe2, 0xda, 0x3e, 0x2c, 0x42, 0x42, 0x3a, 0xce, 0xa6, - 0xbe, 0x43, 0x12, 0x71, 0x28, 0x12, 0x28, 0x3f, 0x19, 0x08, 0x1f, 0xc8, 0x8c, 0x80, 0xc2, 0x09, - 0x30, 0x57, 0x6f, 0xb4, 0x36, 0x6a, 0x8d, 0xe5, 0x65, 0x0d, 0xa5, 0x16, 0x65, 0xe5, 0x14, 0x50, - 0xd6, 0x4a, 0x17, 0x57, 0xb5, 0x7a, 0x6b, 0xa3, 0xde, 0xa8, 0x68, 0xf4, 0xcb, 0xac, 0x72, 0x1c, - 0xcc, 0x94, 0x4b, 0xe5, 0x15, 0x3f, 0x21, 0xa7, 0x9c, 0x06, 0x27, 0x57, 0xb5, 0xd5, 0x45, 0x4d, - 0x6f, 0xae, 0x54, 0xd7, 0x36, 0x10, 0x99, 0xa5, 0xc6, 0x7a, 0xbd, 0x52, 0xcc, 0x2b, 0x2a, 0x38, - 0xc5, 0xbc, 0xb9, 0xa0, 0x37, 0xea, 0xcb, 0x1b, 0xcd, 0x56, 0xa9, 0xa5, 0x15, 0xa7, 0x94, 0xab, - 0xc0, 0xf1, 0x72, 0xa9, 0x8e, 0xb3, 0x97, 0x1b, 0xf5, 0xba, 0x56, 0x6e, 0x15, 0x0b, 0xea, 0xbf, - 0x65, 0xc1, 0x4c, 0xd5, 0xad, 0x1b, 0x3b, 0xf0, 0xbc, 0xd1, 0x35, 0x3b, 0xea, 0x0b, 0x98, 0x99, - 0xc7, 0x8d, 0x60, 0xce, 0x21, 0x7f, 0x61, 0xa7, 0x65, 0x42, 0x82, 0xe6, 0x9c, 0xce, 0x27, 0xa2, - 0x39, 0xb9, 0x85, 0x09, 0xf8, 0x73, 0x72, 0xf2, 0xa4, 0x2c, 0x02, 0x40, 0xfe, 0xb5, 0xc2, 0x3b, - 0x62, 0xcf, 0xf5, 0xb7, 0x26, 0x63, 0x07, 0xba, 0xd0, 0xd9, 0x33, 0xdb, 0xd0, 0xcf, 0xa9, 0x33, - 0x5f, 0xa9, 0x5f, 0x97, 0x45, 0xf7, 0x17, 0x19, 0x50, 0x99, 0xea, 0x44, 0xf4, 0x86, 0x3f, 0x2e, - 0x8b, 0xec, 0x0e, 0x0a, 0x91, 0x4c, 0xa6, 0x29, 0x2f, 0x96, 0x46, 0x5b, 0xb6, 0x6d, 0x35, 0x1a, - 0x1b, 0xcd, 0x95, 0x86, 0xde, 0x2a, 0xca, 0xca, 0x2c, 0x28, 0xa0, 0xc7, 0x5a, 0xa3, 0xbe, 0x5c, - 0xcc, 0x2a, 0x57, 0x83, 0x13, 0x2b, 0xa5, 0xe6, 0x46, 0xb5, 0x7e, 0xbe, 0x54, 0xab, 0x56, 0x36, - 0xca, 0x2b, 0x25, 0xbd, 0x59, 0xcc, 0x29, 0xd7, 0x82, 0xab, 0x5b, 0x55, 0x4d, 0xdf, 0x58, 0xd2, - 0x4a, 0xad, 0x75, 0x5d, 0x6b, 0x6e, 0xd4, 0x1b, 0x1b, 0xf5, 0xd2, 0xaa, 0x56, 0xcc, 0xa3, 0xe6, - 0x8f, 0x5f, 0x85, 0x6a, 0x33, 0x75, 0x50, 0x19, 0x0b, 0x11, 0xca, 0x38, 0xdd, 0xaf, 0x8c, 0x80, - 0x55, 0x2b, 0x5d, 0x6b, 0x6a, 0xfa, 0x79, 0xad, 0x38, 0x33, 0x48, 0xd7, 0x66, 0x95, 0x93, 0xa0, - 0x88, 0x78, 0xd8, 0xa8, 0x36, 0xfd, 0x9c, 0x95, 0xe2, 0x9c, 0xfa, 0xe9, 0x3c, 0x38, 0xa5, 0xc3, - 0x2d, 0xd3, 0xf5, 0xa0, 0xb3, 0x66, 0xec, 0xef, 0x40, 0xcb, 0xf3, 0x3b, 0xf9, 0x7f, 0x4a, 0xac, - 0x8c, 0xab, 0x60, 0xae, 0x47, 0x68, 0xac, 0x42, 0x6f, 0xdb, 0xee, 0xd0, 0x51, 0xf8, 0x51, 0x91, - 0x3d, 0xc7, 0xc2, 0x1a, 0x9b, 0x5d, 0xe7, 0xbf, 0x66, 0x74, 0x5b, 0x8e, 0xd1, 0xed, 0xec, 0x28, - 0xba, 0xad, 0x5c, 0x0f, 0xa6, 0x77, 0x5d, 0xe8, 0x68, 0x3b, 0x86, 0xd9, 0xf5, 0xef, 0xf8, 0x0c, - 0x12, 0xd4, 0x77, 0x66, 0x45, 0x4f, 0xac, 0x30, 0x75, 0x19, 0x2c, 0xc6, 0x88, 0xbe, 0xf5, 0x0c, - 0x00, 0xb4, 0xb2, 0xeb, 0x4e, 0x97, 0x2a, 0x2b, 0x93, 0x82, 0xf8, 0xbb, 0x64, 0x76, 0xbb, 0xa6, - 0xb5, 0x15, 0xec, 0xfb, 0x87, 0x09, 0xea, 0x8b, 0x65, 0x91, 0x13, 0x2c, 0x49, 0x79, 0x4b, 0xd6, - 0x9a, 0x5e, 0x28, 0x4d, 0xb8, 0xdf, 0x3d, 0xd8, 0x74, 0xf2, 0x4a, 0x11, 0xcc, 0xe2, 0x34, 0xda, - 0x02, 0x8b, 0x53, 0xa8, 0x0f, 0xf6, 0xc9, 0xad, 0x6a, 0xad, 0x95, 0x46, 0x25, 0x78, 0x57, 0x40, - 0x24, 0x11, 0x33, 0xa5, 0xfa, 0x45, 0xdc, 0x1a, 0xa7, 0x95, 0x87, 0x81, 0x6b, 0x99, 0x0e, 0xbb, - 0x54, 0xd3, 0xb5, 0x52, 0xe5, 0xe2, 0x86, 0xf6, 0xb4, 0x6a, 0xb3, 0xd5, 0xe4, 0x1b, 0x97, 0xdf, - 0x8e, 0x66, 0x10, 0xbf, 0xda, 0x6a, 0xa9, 0x5a, 0xa3, 0xfd, 0xfb, 0x52, 0x43, 0x5f, 0x2d, 0xb5, - 0x8a, 0xb3, 0xea, 0xcb, 0x65, 0x50, 0x5c, 0x86, 0xde, 0x9a, 0xed, 0x78, 0x46, 0xb7, 0x66, 0x5a, - 0x97, 0xd7, 0x9d, 0x2e, 0x37, 0xd9, 0x14, 0x0e, 0xd3, 0xc1, 0x0f, 0x91, 0x1c, 0xc1, 0xe8, 0x1d, - 0xf1, 0x1e, 0xce, 0x16, 0x2a, 0x53, 0x98, 0xa0, 0x3e, 0x4b, 0x12, 0x59, 0xee, 0x16, 0x2f, 0x35, - 0x99, 0x9e, 0x3c, 0x7b, 0xd2, 0xe3, 0xf3, 0x00, 0xd4, 0xf2, 0xea, 0xf3, 0xb2, 0xa0, 0xb0, 0x64, - 0x5a, 0x46, 0xd7, 0x7c, 0x26, 0x17, 0x1d, 0x33, 0xec, 0x63, 0x32, 0x31, 0x7d, 0x8c, 0x34, 0xd2, - 0xf8, 0xf9, 0xb3, 0xb2, 0xe8, 0xf2, 0x02, 0x23, 0x7b, 0x9f, 0xc9, 0x88, 0xc1, 0xf3, 0x63, 0x92, - 0xc8, 0xf2, 0xc2, 0x70, 0x7a, 0xc9, 0x30, 0xfc, 0xec, 0xf7, 0x87, 0x8d, 0xd5, 0xd7, 0xbe, 0x0b, - 0x83, 0x54, 0x61, 0x5a, 0xfd, 0x03, 0x19, 0xa8, 0xcb, 0xd0, 0x3b, 0x0f, 0x9d, 0x60, 0x2a, 0x80, - 0x7b, 0x7d, 0x6a, 0x6f, 0x33, 0x4d, 0xf6, 0xcd, 0x2c, 0x80, 0x17, 0x78, 0x00, 0x4b, 0x31, 0x8d, - 0x27, 0x82, 0x74, 0x44, 0xe3, 0xad, 0x82, 0xbc, 0x8b, 0xdf, 0x53, 0x35, 0x7b, 0x6c, 0xf4, 0x70, - 0x89, 0x89, 0xb1, 0xd4, 0x09, 0x61, 0x9d, 0x12, 0x50, 0xbf, 0x1b, 0x4c, 0x82, 0x7e, 0x98, 0xd3, - 0x8e, 0xa5, 0x43, 0x33, 0x9b, 0x4c, 0x5f, 0x9c, 0x74, 0xd5, 0x65, 0x90, 0x7d, 0xa3, 0x7e, 0x2c, - 0x07, 0x4e, 0x0e, 0xaa, 0x8e, 0xfa, 0xa1, 0x0c, 0xb7, 0xc3, 0x0e, 0xf1, 0x90, 0x9f, 0xa1, 0x1b, - 0x88, 0xe8, 0x41, 0x79, 0x3c, 0xb8, 0x3a, 0x58, 0x86, 0x6b, 0xd9, 0x75, 0x78, 0xc5, 0xed, 0x42, - 0xcf, 0x83, 0x0e, 0xae, 0x5a, 0x41, 0x1f, 0xfc, 0x52, 0x79, 0x22, 0xb8, 0xc6, 0xb4, 0x5c, 0xb3, - 0x03, 0x9d, 0x96, 0xd9, 0x73, 0x4b, 0x56, 0xa7, 0xb5, 0xeb, 0xd9, 0x8e, 0x69, 0xd0, 0x1b, 0x29, - 0x0b, 0x7a, 0xd4, 0x6b, 0xe5, 0x16, 0x50, 0x34, 0xdd, 0x86, 0x75, 0xc9, 0x36, 0x9c, 0x8e, 0x69, - 0x6d, 0xd5, 0x4c, 0xd7, 0xa3, 0x1e, 0xc0, 0x07, 0xd2, 0xd5, 0xbf, 0x96, 0x45, 0x0f, 0xd3, 0x0d, - 0x81, 0x35, 0xa2, 0x43, 0x79, 0xbe, 0x2c, 0x72, 0x3c, 0x2e, 0x19, 0xed, 0x64, 0xca, 0xf2, 0xdc, - 0x49, 0x1b, 0x12, 0x83, 0x47, 0x70, 0xdc, 0xb5, 0x90, 0x74, 0xdf, 0x10, 0x38, 0xaf, 0xe9, 0xd5, - 0xa5, 0xaa, 0x86, 0xcc, 0x8a, 0xab, 0xc1, 0x89, 0xf0, 0x5d, 0xe5, 0xe2, 0x46, 0x53, 0xab, 0xb7, - 0x8a, 0x05, 0xd4, 0x4f, 0x91, 0xe4, 0xa5, 0x52, 0xb5, 0xa6, 0x55, 0x36, 0x5a, 0x0d, 0xf4, 0xa6, - 0x32, 0x9a, 0x69, 0xa1, 0x3e, 0x27, 0x0b, 0x8e, 0x63, 0xd9, 0xee, 0x63, 0xa9, 0x22, 0xa1, 0xf4, - 0xf9, 0xda, 0x06, 0x00, 0x4d, 0x13, 0xf1, 0xaa, 0xbf, 0x2f, 0x7c, 0xe1, 0x26, 0x03, 0x61, 0x5f, - 0x19, 0x11, 0x9a, 0xf1, 0x1d, 0x49, 0x24, 0x42, 0x85, 0x30, 0xd9, 0x64, 0x4a, 0xf1, 0xcf, 0x93, - 0x1e, 0x71, 0xa2, 0xc1, 0xc7, 0x56, 0x66, 0x19, 0x7f, 0xfc, 0xb4, 0xb5, 0xaa, 0x8e, 0xd5, 0x61, - 0x1e, 0x00, 0x9c, 0x82, 0x35, 0x88, 0xe8, 0xc1, 0xc0, 0xf1, 0x2a, 0x4a, 0x0f, 0x4a, 0xe5, 0x56, - 0xf5, 0xbc, 0x16, 0xa5, 0x07, 0x9f, 0x97, 0x41, 0x61, 0x19, 0x7a, 0x68, 0x4e, 0xe5, 0xaa, 0x4f, - 0x12, 0x58, 0xff, 0x41, 0x66, 0x4c, 0xd7, 0x6e, 0x1b, 0xdd, 0x60, 0x19, 0x80, 0x3c, 0xa9, 0x3f, - 0x36, 0x8a, 0x09, 0xe2, 0x17, 0x1d, 0x31, 0x5e, 0xfd, 0x10, 0xc8, 0x79, 0xe8, 0x35, 0x5d, 0x86, - 0x7e, 0x78, 0xe4, 0x70, 0x85, 0x88, 0x54, 0x0c, 0xcf, 0xd0, 0x49, 0x7e, 0x66, 0x74, 0x12, 0xb4, - 0x5d, 0x22, 0x18, 0xf9, 0x7e, 0xb4, 0x3f, 0xff, 0x42, 0x06, 0x57, 0x93, 0xf6, 0x51, 0xea, 0xf5, - 0x9a, 0x9e, 0xed, 0x40, 0x1d, 0xb6, 0xa1, 0xd9, 0xf3, 0xfa, 0xd6, 0xf7, 0x1c, 0x92, 0xea, 0x6f, - 0x36, 0xd3, 0x47, 0xf5, 0x0d, 0xb2, 0x68, 0x84, 0xdf, 0x03, 0xed, 0xb1, 0xaf, 0xbc, 0x88, 0xc6, - 0xfe, 0x29, 0x49, 0x24, 0x66, 0x6f, 0x42, 0xe2, 0xc9, 0x80, 0xfa, 0xf8, 0x11, 0x00, 0xe5, 0xaf, - 0xdc, 0xe8, 0x5a, 0x59, 0xab, 0xae, 0xa1, 0x41, 0xe0, 0x06, 0x70, 0xdd, 0xda, 0xba, 0x5e, 0x5e, - 0x29, 0x35, 0xb5, 0x0d, 0x5d, 0x5b, 0xae, 0x36, 0x5b, 0xd4, 0x29, 0x8b, 0x7c, 0x35, 0xa5, 0x5c, - 0x0f, 0x4e, 0x37, 0xd7, 0x17, 0x9b, 0x65, 0xbd, 0xba, 0x86, 0xd3, 0x75, 0xad, 0xae, 0x5d, 0xa0, - 0x6f, 0x0b, 0xea, 0x47, 0x8a, 0x60, 0x06, 0x4d, 0x00, 0x9a, 0x64, 0x5e, 0xa0, 0xfe, 0x4d, 0x16, - 0xcc, 0xe8, 0xd0, 0xb5, 0xbb, 0x7b, 0x78, 0x8e, 0x30, 0xa9, 0xa9, 0xc7, 0xb7, 0x65, 0xd1, 0xf3, - 0xdb, 0x0c, 0xb3, 0x0b, 0x0c, 0xa3, 0xd1, 0x13, 0x4d, 0x63, 0xcf, 0x30, 0xbb, 0xc6, 0x25, 0xda, - 0xd5, 0x14, 0xf4, 0x30, 0x41, 0x59, 0x00, 0x8a, 0x7d, 0xc5, 0x82, 0x4e, 0xb3, 0x7d, 0x45, 0xf3, - 0xb6, 0x4b, 0x9d, 0x8e, 0x03, 0x5d, 0x97, 0xae, 0x5e, 0x0c, 0x78, 0xa3, 0xdc, 0x0c, 0x8e, 0xe3, - 0x54, 0x26, 0x33, 0x71, 0x90, 0xe9, 0x4f, 0x0e, 0x72, 0x96, 0xac, 0x7d, 0x3f, 0x67, 0x8e, 0xc9, - 0x19, 0x26, 0xb3, 0xc7, 0x25, 0xf2, 0xfc, 0x29, 0x9d, 0xb3, 0x60, 0xc6, 0x32, 0x76, 0xa0, 0xf6, - 0x60, 0xcf, 0x74, 0xa0, 0x8b, 0x1d, 0x63, 0x64, 0x9d, 0x4d, 0x52, 0x3f, 0x26, 0x74, 0xde, 0x5c, - 0x4c, 0x62, 0xc9, 0x74, 0x7f, 0x79, 0x04, 0xd5, 0x1f, 0xd0, 0xcf, 0xc8, 0xea, 0x47, 0x64, 0x30, - 0x4b, 0x99, 0x2a, 0x59, 0xfb, 0xd5, 0x8e, 0x7a, 0x03, 0x67, 0xfc, 0x1a, 0x28, 0xcd, 0x37, 0x7e, - 0xf1, 0x83, 0xfa, 0x13, 0xb2, 0xa8, 0xbb, 0xf3, 0x80, 0x8a, 0xe3, 0x32, 0xa2, 0x1d, 0x47, 0x37, - 0xed, 0x5d, 0xea, 0xa8, 0x5a, 0xd0, 0xc9, 0x43, 0x9a, 0x8b, 0x7a, 0xea, 0xaf, 0x0b, 0x39, 0x53, - 0x0b, 0x56, 0xe3, 0x88, 0x00, 0xfc, 0x8c, 0x0c, 0xe6, 0x29, 0x57, 0x4d, 0x7a, 0xce, 0x47, 0xe8, - 0xc0, 0xdb, 0x4f, 0x09, 0x1b, 0x82, 0x03, 0xea, 0x4f, 0x4b, 0x7a, 0xc8, 0x00, 0xf9, 0x09, 0xa1, - 0xe0, 0x68, 0xc2, 0x15, 0x39, 0x22, 0x28, 0xdf, 0x95, 0x05, 0x33, 0xeb, 0x2e, 0x74, 0xa8, 0xdf, - 0xbe, 0xfa, 0xda, 0x2c, 0x90, 0x97, 0x21, 0xb7, 0x91, 0xfa, 0x22, 0x61, 0x0f, 0x5f, 0xb6, 0xb2, - 0x0c, 0x51, 0x64, 0x23, 0x45, 0xc0, 0x76, 0x13, 0x98, 0x27, 0x22, 0x2d, 0x79, 0x1e, 0x32, 0x12, - 0x7d, 0x6f, 0xda, 0xbe, 0xd4, 0x71, 0x6c, 0x15, 0xe1, 0xb2, 0x50, 0x96, 0x32, 0xe2, 0xa9, 0x06, - 0x37, 0xc9, 0x7c, 0x36, 0xab, 0xf7, 0xa5, 0x2a, 0xb7, 0x83, 0xab, 0xec, 0x1e, 0x24, 0xe7, 0x57, - 0x98, 0xcc, 0x39, 0x9c, 0x79, 0xd0, 0x2b, 0xf5, 0x6f, 0x84, 0x7c, 0x75, 0xc5, 0xa5, 0x93, 0x4c, - 0x17, 0x7a, 0xe3, 0x31, 0x49, 0x4e, 0x82, 0x22, 0xca, 0x81, 0xf7, 0x5f, 0x74, 0xad, 0xd9, 0xa8, - 0x9d, 0xd7, 0x06, 0x2f, 0x63, 0xe4, 0xd4, 0xe7, 0xca, 0x60, 0x7a, 0xd1, 0xb1, 0x8d, 0x4e, 0xdb, - 0x70, 0x3d, 0xf5, 0xbb, 0x12, 0x98, 0x5d, 0x33, 0xf6, 0xbb, 0xb6, 0xd1, 0xc1, 0xfe, 0xfd, 0x7d, - 0x7d, 0x41, 0x8f, 0xbc, 0xf2, 0xfb, 0x02, 0xfa, 0xc8, 0x1f, 0x0c, 0x0c, 0x8e, 0xee, 0x65, 0x44, - 0xee, 0xd5, 0x0c, 0xb6, 0xf9, 0xa4, 0x41, 0xc1, 0x4a, 0x7d, 0xbe, 0x16, 0x58, 0x9e, 0x22, 0x2c, - 0xca, 0x8f, 0x88, 0x85, 0x1f, 0x15, 0x21, 0x79, 0x34, 0xbb, 0xf2, 0xcf, 0x2b, 0x80, 0x7c, 0x05, - 0x62, 0x2b, 0xee, 0x57, 0x25, 0x30, 0xd5, 0x84, 0x1e, 0xb6, 0xe0, 0xee, 0xe4, 0x3c, 0x85, 0x3b, - 0x38, 0x43, 0xe8, 0xc4, 0xee, 0x3f, 0xa3, 0xc9, 0x3a, 0x73, 0xde, 0x1a, 0xff, 0x4f, 0xe0, 0x91, - 0x48, 0xca, 0x5d, 0xa0, 0x65, 0x1e, 0xca, 0x23, 0x31, 0x96, 0x54, 0xfa, 0xbe, 0x56, 0xef, 0x91, - 0xa8, 0x6b, 0x15, 0xd3, 0xeb, 0xbd, 0x9a, 0xd5, 0xcf, 0x58, 0x6f, 0x33, 0xca, 0x7c, 0x8c, 0x73, - 0xd4, 0xe3, 0xc0, 0x14, 0x91, 0xb9, 0x3f, 0x1f, 0xed, 0xf7, 0x53, 0x20, 0x24, 0xf0, 0xd9, 0x6b, - 0x3f, 0xa7, 0xa0, 0x8b, 0x5a, 0x74, 0xe1, 0x13, 0x89, 0x41, 0x30, 0x5b, 0x87, 0xde, 0x15, 0xdb, - 0xb9, 0xdc, 0xf4, 0x0c, 0x0f, 0xaa, 0xff, 0x2c, 0x91, 0xeb, 0xf2, 0x98, 0xe8, 0x27, 0x75, 0x70, - 0x82, 0x54, 0x88, 0x66, 0xc4, 0xfd, 0x37, 0xa9, 0xc8, 0xd9, 0x81, 0x42, 0x60, 0xf2, 0xe9, 0x07, - 0x3f, 0x55, 0x5f, 0x3a, 0x30, 0xe8, 0x93, 0x34, 0x60, 0xd2, 0x40, 0x25, 0xc3, 0x32, 0x18, 0x7d, - 0x3f, 0x9e, 0xfa, 0x51, 0x21, 0xb3, 0x5a, 0x8c, 0xe6, 0xd1, 0x74, 0x05, 0x1f, 0x7e, 0x34, 0xc8, - 0x96, 0xb7, 0x0d, 0x4f, 0x7d, 0xb7, 0x0c, 0x40, 0xa9, 0xd3, 0x59, 0x25, 0x3e, 0xe0, 0xac, 0x43, - 0xda, 0x39, 0x30, 0xdb, 0xde, 0x36, 0xc2, 0x9b, 0x33, 0x48, 0x7f, 0xc0, 0xa5, 0x29, 0x8f, 0x0f, - 0x9d, 0xc9, 0x89, 0x54, 0xd5, 0x3e, 0x98, 0x50, 0x19, 0x94, 0x76, 0xe0, 0x68, 0xce, 0x87, 0xc2, - 0x8c, 0x3d, 0x42, 0x87, 0x3e, 0x5f, 0x08, 0xd9, 0x8b, 0x9e, 0xc3, 0x51, 0xd2, 0xc1, 0x01, 0x9b, - 0x30, 0x21, 0xe1, 0x49, 0x6f, 0xb1, 0x80, 0x1e, 0xf1, 0x7c, 0x4d, 0x24, 0x74, 0xad, 0xa2, 0x75, - 0x4c, 0x5f, 0xb4, 0x34, 0x60, 0x96, 0xfa, 0xc2, 0x4c, 0x32, 0xf8, 0xe2, 0x05, 0xf7, 0x14, 0x30, - 0x07, 0x3b, 0xa6, 0x07, 0xfd, 0x5a, 0x52, 0x01, 0xc6, 0x41, 0xcc, 0x7f, 0xa0, 0x3e, 0x5b, 0x38, - 0xe8, 0x1a, 0x16, 0xe8, 0xc1, 0x1a, 0x45, 0xb4, 0x3f, 0xb1, 0x30, 0x6a, 0x62, 0x34, 0xd3, 0x07, - 0xeb, 0xc7, 0x64, 0x70, 0x75, 0xcb, 0xde, 0xda, 0xea, 0x42, 0x5f, 0x4c, 0x90, 0x78, 0x67, 0xaa, - 0xc6, 0x38, 0xe1, 0xc2, 0x3b, 0x41, 0xf6, 0x03, 0x66, 0x70, 0x94, 0x0c, 0x3d, 0xf0, 0x27, 0xa6, - 0x62, 0x67, 0x51, 0x58, 0x5c, 0x03, 0xf9, 0x8c, 0x40, 0x41, 0x2c, 0xe0, 0xb3, 0x30, 0xd9, 0xf4, - 0x81, 0xf8, 0x92, 0x04, 0xe6, 0xc8, 0xbd, 0x88, 0xbe, 0x82, 0xde, 0x3f, 0x46, 0x00, 0xd4, 0xef, - 0x66, 0x44, 0xfd, 0x6c, 0xb1, 0x4c, 0x38, 0x4e, 0x22, 0x44, 0x2c, 0x16, 0x54, 0x65, 0x28, 0xb9, - 0x09, 0xdc, 0xd4, 0x99, 0x05, 0x33, 0xcb, 0xd0, 0x6f, 0x69, 0xae, 0xfa, 0xfe, 0x84, 0x3d, 0xd1, - 0x39, 0x30, 0x8b, 0x2f, 0x07, 0x6b, 0xd0, 0x63, 0x92, 0x64, 0xd5, 0x8c, 0x4b, 0x53, 0x6e, 0x04, - 0x73, 0x97, 0xe0, 0xa6, 0xed, 0xc0, 0x06, 0x77, 0x96, 0x92, 0x4f, 0x1c, 0x1c, 0x9e, 0x4e, 0xb9, - 0x19, 0x1c, 0xa7, 0x8e, 0xee, 0x8b, 0x68, 0xae, 0x6f, 0x38, 0xfb, 0xf4, 0x60, 0x5a, 0x7f, 0xb2, - 0xfa, 0x17, 0x6c, 0x83, 0x59, 0xe4, 0x51, 0xbc, 0xf5, 0xa0, 0xd8, 0x99, 0x4a, 0x47, 0x8c, 0x4e, - 0x4f, 0x00, 0x05, 0xaa, 0x23, 0xbe, 0x41, 0x17, 0xd7, 0x83, 0x06, 0x79, 0x95, 0x27, 0x80, 0x69, - 0x24, 0x22, 0x6c, 0x37, 0xd0, 0xae, 0xf7, 0xf4, 0x80, 0x0f, 0xf1, 0x7b, 0x3d, 0xcc, 0xaa, 0xfe, - 0x52, 0xa0, 0x33, 0x1a, 0xa7, 0x33, 0x8f, 0x4d, 0xc2, 0xfc, 0x44, 0x2e, 0x92, 0x2f, 0x32, 0xe5, - 0x2f, 0xee, 0x57, 0x3b, 0xae, 0xba, 0x9a, 0x4c, 0x6b, 0xce, 0x00, 0x10, 0x34, 0x3f, 0x3f, 0x70, - 0x06, 0x93, 0xc2, 0xc7, 0xc6, 0x8f, 0x3d, 0x0a, 0xd8, 0x2f, 0x0e, 0xcc, 0xce, 0x78, 0x01, 0x15, - 0x3c, 0x42, 0x28, 0xc2, 0x49, 0xfa, 0xe8, 0xfc, 0x62, 0x16, 0x5c, 0x1d, 0x9c, 0x70, 0xaa, 0x19, - 0x6e, 0xd8, 0xb2, 0x2f, 0x26, 0x83, 0x88, 0x3b, 0x52, 0x12, 0x34, 0xc7, 0x93, 0x20, 0xe7, 0xee, - 0x5e, 0x0a, 0x1c, 0x01, 0xc9, 0x83, 0xfa, 0x46, 0x39, 0xd1, 0x58, 0x35, 0x90, 0xbf, 0x31, 0x37, - 0xc2, 0x5b, 0xc1, 0x09, 0x6b, 0x77, 0x27, 0xc0, 0x02, 0xf7, 0x34, 0xb4, 0x67, 0x39, 0xf8, 0x82, - 0x6f, 0xb2, 0x59, 0xf1, 0x26, 0x9b, 0x60, 0x24, 0x15, 0xa9, 0x74, 0xfa, 0xea, 0xf1, 0xd9, 0xbe, - 0x23, 0x68, 0xe5, 0xc4, 0x4a, 0x41, 0xe0, 0x97, 0x58, 0xf8, 0xff, 0x31, 0x93, 0xa8, 0xe7, 0x1d, - 0x7e, 0x72, 0x2d, 0x41, 0x4f, 0x78, 0x94, 0xc7, 0xd6, 0x5e, 0x97, 0x03, 0x6a, 0x33, 0x74, 0xc8, - 0xa1, 0xa0, 0xae, 0x39, 0x70, 0xcf, 0x84, 0x57, 0xdc, 0xbe, 0xfd, 0x0e, 0x22, 0xb7, 0x0c, 0x2b, - 0xb7, 0x6f, 0x64, 0x45, 0x1d, 0x6a, 0x78, 0x0d, 0x3a, 0x50, 0x54, 0x44, 0xdb, 0x79, 0x3a, 0x28, - 0xf4, 0x68, 0x0e, 0xda, 0x76, 0x4a, 0xa3, 0x51, 0x45, 0x19, 0x69, 0xaa, 0x1e, 0x90, 0x54, 0xff, - 0x36, 0x03, 0x66, 0x98, 0x37, 0xd1, 0x3b, 0x02, 0x07, 0x54, 0x4b, 0x8a, 0x9f, 0x91, 0xca, 0xc2, - 0x33, 0x52, 0x65, 0x01, 0xe4, 0x5c, 0xa1, 0x46, 0x4b, 0xb2, 0x29, 0x4f, 0x02, 0xb3, 0x1d, 0xd8, - 0x83, 0x56, 0x07, 0x5a, 0x6d, 0x13, 0xba, 0xa7, 0x73, 0x58, 0x2c, 0x91, 0x61, 0x1a, 0xb8, 0xcc, - 0x82, 0xf1, 0xbb, 0x93, 0x61, 0x95, 0xbe, 0x96, 0xfe, 0xa9, 0x04, 0xce, 0x30, 0xad, 0x64, 0xc9, - 0xb1, 0x77, 0x12, 0x6b, 0xea, 0xcb, 0xd9, 0xf1, 0x78, 0x9d, 0xd7, 0xd4, 0x7b, 0x63, 0x1b, 0xe5, - 0x80, 0xe2, 0x22, 0x1a, 0xfd, 0xfb, 0x03, 0xe9, 0x3e, 0x8d, 0x93, 0x6e, 0xe5, 0x90, 0xf4, 0x27, - 0x70, 0x20, 0x3c, 0x0b, 0x66, 0x75, 0x68, 0x74, 0x82, 0xa1, 0xf6, 0x8f, 0x18, 0x23, 0xfa, 0x49, - 0x20, 0xeb, 0x85, 0xab, 0x61, 0x8f, 0x3a, 0x58, 0x19, 0xf6, 0x4b, 0xfc, 0x80, 0x17, 0xc5, 0xf0, - 0x47, 0x42, 0x0d, 0xa7, 0xdf, 0x02, 0x97, 0x45, 0x2c, 0xf0, 0xec, 0x20, 0x0b, 0xfc, 0x2c, 0x98, - 0xe9, 0x1a, 0x2e, 0x69, 0x30, 0xc1, 0xdd, 0xbf, 0x6c, 0x12, 0x7f, 0xcb, 0x7e, 0xec, 0x69, 0xbb, - 0x41, 0x55, 0x3b, 0x7c, 0x44, 0xe2, 0x0f, 0x0b, 0x1d, 0xad, 0x1b, 0x56, 0x76, 0x32, 0x8d, 0xb8, - 0x6f, 0x84, 0x95, 0xbb, 0x53, 0x40, 0x59, 0xd5, 0x9a, 0xcd, 0xd2, 0x32, 0x3e, 0x71, 0xe3, 0xbb, - 0x60, 0x75, 0xce, 0xdd, 0x84, 0xc4, 0x47, 0x10, 0x56, 0x66, 0x41, 0xc1, 0xe7, 0xaf, 0x78, 0x8c, - 0x3c, 0x59, 0x78, 0xc7, 0xa9, 0x98, 0x51, 0xbf, 0x28, 0x83, 0xfc, 0xba, 0xe5, 0x40, 0xa3, 0xa3, - 0x3e, 0x8f, 0xd1, 0xa5, 0x1f, 0xe4, 0x74, 0xe9, 0xe1, 0x83, 0x1a, 0x06, 0xfa, 0x26, 0x25, 0x2d, - 0xe2, 0xc3, 0x91, 0xc5, 0x2e, 0x96, 0xf3, 0xcc, 0x1c, 0x1e, 0x77, 0xb1, 0x55, 0xf2, 0xe8, 0x52, - 0x53, 0xef, 0x03, 0x84, 0x91, 0xfd, 0x6d, 0x19, 0x14, 0xd7, 0x76, 0xdd, 0x6d, 0xee, 0xd0, 0xf7, - 0xaf, 0xca, 0x60, 0xce, 0x3f, 0x17, 0xd3, 0xb2, 0x2f, 0x43, 0x4b, 0x7d, 0x06, 0xd7, 0x23, 0x7b, - 0x28, 0xcd, 0xef, 0x91, 0xf1, 0x83, 0xb2, 0xc6, 0x84, 0x86, 0x91, 0x06, 0x1d, 0xeb, 0xef, 0x2b, - 0x63, 0x81, 0xa3, 0xbf, 0xb0, 0x46, 0xbf, 0x0d, 0x03, 0xca, 0xa8, 0x2f, 0x16, 0xbe, 0xe7, 0x68, - 0x08, 0xed, 0xc1, 0xdd, 0xbb, 0xd8, 0xcd, 0x45, 0x89, 0x48, 0xa7, 0x8f, 0xea, 0x59, 0x50, 0xf0, - 0x25, 0xa5, 0x4c, 0x01, 0xb9, 0xda, 0x68, 0x16, 0x8f, 0x29, 0x33, 0x60, 0xaa, 0x64, 0x75, 0x1c, - 0xdb, 0xec, 0x14, 0x33, 0xe7, 0xa6, 0x40, 0x4e, 0xdb, 0xe9, 0x79, 0xfb, 0xe7, 0x1e, 0x09, 0xe6, - 0x9a, 0x9e, 0x03, 0x8d, 0x9d, 0x58, 0xdc, 0xee, 0xba, 0x13, 0x4c, 0x59, 0xf6, 0x86, 0xb1, 0xeb, - 0x6d, 0x2b, 0x37, 0x1c, 0xb0, 0x3a, 0xa8, 0xd6, 0x34, 0x68, 0x34, 0xce, 0xaf, 0xdf, 0x8d, 0x57, - 0x3a, 0xf2, 0x96, 0x5d, 0xda, 0xf5, 0xb6, 0x17, 0xaf, 0xff, 0xcc, 0x9f, 0x9d, 0xc9, 0x7c, 0xfe, - 0xcf, 0xce, 0x64, 0xbe, 0xf6, 0x67, 0x67, 0x32, 0x3f, 0xf5, 0x8d, 0x33, 0xc7, 0x3e, 0xff, 0x8d, - 0x33, 0xc7, 0xbe, 0xf4, 0x8d, 0x33, 0xc7, 0x7e, 0x58, 0xea, 0x5d, 0xba, 0x94, 0xc7, 0x54, 0x1e, - 0xf7, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x46, 0x98, 0x35, 0x86, 0x0f, 0x33, 0x02, 0x00, + 0x59, 0x2f, 0x3c, 0x95, 0x59, 0x55, 0x5d, 0x1d, 0x7d, 0x99, 0x9c, 0xdc, 0xd9, 0x61, 0x36, 0x77, + 0x19, 0x96, 0x61, 0x59, 0xd6, 0x65, 0xe9, 0x85, 0x05, 0x91, 0x5d, 0x16, 0x96, 0xea, 0xaa, 0xec, + 0xee, 0xda, 0xad, 0xae, 0x6a, 0xb2, 0xaa, 0x67, 0x58, 0xcf, 0xe1, 0x6b, 0x73, 0xaa, 0xa2, 0xbb, + 0x73, 0xa7, 0x3a, 0xb3, 0xc8, 0xcc, 0x9e, 0xd9, 0xe1, 0x7b, 0xce, 0x77, 0x44, 0x44, 0x40, 0x44, + 0x44, 0x45, 0x44, 0xe4, 0x2e, 0x20, 0x20, 0xf7, 0x9b, 0x80, 0x5c, 0xe4, 0x22, 0x88, 0xa8, 0x28, + 0x2a, 0x17, 0xe5, 0x11, 0xbc, 0xe2, 0x39, 0x47, 0x3d, 0xf8, 0x29, 0x88, 0xca, 0xf1, 0x7b, 0xe2, + 0x92, 0x99, 0x11, 0xd5, 0x95, 0x59, 0x91, 0xd5, 0x95, 0xd5, 0x8b, 0x7e, 0x7f, 0x55, 0x65, 0x64, + 0xe4, 0x1b, 0x6f, 0xbc, 0xbf, 0x37, 0x22, 0xde, 0x88, 0x78, 0xe3, 0x0d, 0x70, 0xba, 0x7f, 0xe1, + 0xd6, 0xbe, 0xeb, 0xf8, 0x8e, 0x77, 0x6b, 0xc7, 0xd9, 0xdb, 0x33, 0xed, 0xae, 0xb7, 0x84, 0x9f, + 0xd5, 0x19, 0xd3, 0xbe, 0xe2, 0x5f, 0xe9, 0x43, 0xed, 0x86, 0xfe, 0xc5, 0x9d, 0x5b, 0x7b, 0xd6, + 0x85, 0x5b, 0xfb, 0x17, 0x6e, 0xdd, 0x73, 0xba, 0xb0, 0x17, 0x7c, 0x80, 0x1f, 0x68, 0x76, 0xed, + 0xa6, 0xb8, 0x5c, 0x3d, 0xa7, 0x63, 0xf6, 0x3c, 0xdf, 0x71, 0x21, 0xcd, 0x79, 0x2a, 0x2a, 0x12, + 0x5e, 0x82, 0xb6, 0x1f, 0x50, 0xb8, 0x6e, 0xc7, 0x71, 0x76, 0x7a, 0x90, 0xbc, 0xbb, 0xb0, 0xbf, + 0x7d, 0xab, 0xe7, 0xbb, 0xfb, 0x1d, 0x9f, 0xbe, 0xbd, 0x7e, 0xf0, 0x6d, 0x17, 0x7a, 0x1d, 0xd7, + 0xea, 0xfb, 0x8e, 0x4b, 0x72, 0x9c, 0x7d, 0xf6, 0x5f, 0x97, 0x80, 0x6c, 0xf4, 0x3b, 0xda, 0xb7, + 0x66, 0x80, 0x5c, 0xee, 0xf7, 0xb5, 0x4f, 0x49, 0x00, 0xac, 0x42, 0xff, 0x1c, 0x74, 0x3d, 0xcb, + 0xb1, 0xb5, 0xe3, 0x60, 0xc6, 0x80, 0xcf, 0xd8, 0x87, 0x9e, 0x7f, 0x47, 0xfe, 0x79, 0x7f, 0x25, + 0xe7, 0xb4, 0xd7, 0x4b, 0xa0, 0x64, 0x40, 0xaf, 0xef, 0xd8, 0x1e, 0x54, 0x9f, 0x02, 0x0a, 0xd0, + 0x75, 0x1d, 0xf7, 0x74, 0xee, 0xfa, 0xdc, 0x4d, 0x73, 0xb7, 0xdd, 0xbc, 0x44, 0xab, 0xbf, 0x64, + 0xf4, 0x3b, 0x4b, 0xe5, 0x7e, 0x7f, 0x29, 0xa2, 0xb4, 0x14, 0x7c, 0xb4, 0xa4, 0xa3, 0x2f, 0x0c, + 0xf2, 0xa1, 0x7a, 0x1a, 0xcc, 0x5c, 0x22, 0x19, 0x4e, 0x4b, 0xd7, 0xe7, 0x6e, 0x9a, 0x35, 0x82, + 0x47, 0xf4, 0xa6, 0x0b, 0x7d, 0xd3, 0xea, 0x79, 0xa7, 0x65, 0xf2, 0x86, 0x3e, 0x6a, 0xaf, 0xcd, + 0x81, 0x02, 0x26, 0xa2, 0x56, 0x40, 0xbe, 0xe3, 0x74, 0x21, 0x2e, 0x7e, 0xf1, 0xb6, 0x5b, 0xc5, + 0x8b, 0x5f, 0xaa, 0x38, 0x5d, 0x68, 0xe0, 0x8f, 0xd5, 0xeb, 0xc1, 0x5c, 0x20, 0x96, 0x88, 0x0d, + 0x36, 0xe9, 0xec, 0x6d, 0x20, 0x8f, 0xf2, 0xab, 0x25, 0x90, 0x6f, 0x6c, 0xd6, 0xeb, 0xca, 0x31, + 0xf5, 0x04, 0x58, 0xd8, 0x6c, 0xdc, 0xd3, 0x68, 0x9e, 0x6f, 0x6c, 0xe9, 0x86, 0xd1, 0x34, 0x94, + 0x9c, 0xba, 0x00, 0x66, 0x97, 0xcb, 0xd5, 0xad, 0x5a, 0x63, 0x63, 0xb3, 0xad, 0x48, 0xda, 0x2b, + 0x65, 0xb0, 0xd8, 0x82, 0x7e, 0x15, 0x5e, 0xb2, 0x3a, 0xb0, 0xe5, 0x9b, 0x3e, 0xd4, 0x5e, 0x94, + 0x0b, 0x85, 0xa9, 0x6e, 0xa2, 0x42, 0xc3, 0x57, 0xb4, 0x02, 0x8f, 0x3d, 0x50, 0x01, 0x9e, 0xc2, + 0x12, 0xfd, 0x7a, 0x89, 0x49, 0x33, 0x58, 0x3a, 0x67, 0x1f, 0x05, 0xe6, 0x98, 0x77, 0xea, 0x22, + 0x00, 0xcb, 0xe5, 0xca, 0x3d, 0xab, 0x46, 0x73, 0xb3, 0x51, 0x55, 0x8e, 0xa1, 0xe7, 0x95, 0xa6, + 0xa1, 0xd3, 0xe7, 0x9c, 0xf6, 0x9d, 0x1c, 0x03, 0x66, 0x95, 0x07, 0x73, 0x69, 0x34, 0x33, 0x43, + 0x00, 0xd5, 0xde, 0x10, 0x82, 0xb3, 0xca, 0x81, 0xf3, 0xd8, 0x74, 0xe4, 0xb2, 0x07, 0xe8, 0x39, + 0x12, 0x28, 0xb5, 0x76, 0xf7, 0xfd, 0xae, 0x73, 0xd9, 0xd6, 0x66, 0x43, 0x64, 0xb4, 0xbf, 0x65, + 0x65, 0xf2, 0x64, 0x5e, 0x26, 0x37, 0x1d, 0xac, 0x04, 0xa5, 0x10, 0x23, 0x8d, 0x57, 0x87, 0xd2, + 0x28, 0x73, 0xd2, 0x78, 0x94, 0x28, 0xa1, 0xec, 0xe5, 0xf0, 0xde, 0xa7, 0x80, 0x42, 0xab, 0x6f, + 0x76, 0xa0, 0xf6, 0x39, 0x19, 0xcc, 0xd7, 0xa1, 0x79, 0x09, 0x96, 0xfb, 0x7d, 0xd7, 0xb9, 0x04, + 0xb5, 0x4a, 0xa4, 0xaf, 0xa7, 0xc1, 0x8c, 0x87, 0x32, 0xd5, 0xba, 0xb8, 0x06, 0xb3, 0x46, 0xf0, + 0xa8, 0x9e, 0x01, 0xc0, 0xea, 0x42, 0xdb, 0xb7, 0x7c, 0x0b, 0x7a, 0xa7, 0xa5, 0xeb, 0xe5, 0x9b, + 0x66, 0x0d, 0x26, 0x45, 0xfb, 0x96, 0x24, 0xaa, 0x63, 0x98, 0x8b, 0x25, 0x96, 0x83, 0x18, 0xa9, + 0xbe, 0x4e, 0x12, 0xd1, 0xb1, 0x91, 0xe4, 0xd2, 0xc9, 0xf6, 0x6d, 0xb9, 0xf4, 0xc2, 0x45, 0x39, + 0x1a, 0xcd, 0xad, 0xd6, 0x66, 0x65, 0x6d, 0xab, 0xb5, 0x51, 0xae, 0xe8, 0x0a, 0x54, 0x4f, 0x02, + 0x05, 0xff, 0xdd, 0xaa, 0xb5, 0xb6, 0xaa, 0x7a, 0x5d, 0x6f, 0xeb, 0x55, 0x65, 0x5b, 0x55, 0xc1, + 0xa2, 0xa1, 0x3f, 0x75, 0x53, 0x6f, 0xb5, 0xb7, 0x56, 0xca, 0xb5, 0xba, 0x5e, 0x55, 0x76, 0xd0, + 0xc7, 0xf5, 0xda, 0x7a, 0xad, 0xbd, 0x65, 0xe8, 0xe5, 0xca, 0x9a, 0x5e, 0x55, 0x76, 0xd5, 0x07, + 0x81, 0xab, 0x1a, 0xcd, 0xad, 0xf2, 0xc6, 0x86, 0xd1, 0x3c, 0xa7, 0x6f, 0xd1, 0x2f, 0x5a, 0x8a, + 0x45, 0x0a, 0x6a, 0x6f, 0xb5, 0xd6, 0xca, 0x86, 0x5e, 0x5e, 0xae, 0xeb, 0xca, 0x7d, 0xda, 0xb3, + 0x65, 0xb0, 0xb0, 0x6e, 0x5e, 0x84, 0xad, 0x5d, 0xd3, 0x85, 0xe6, 0x85, 0x1e, 0xd4, 0x1e, 0x26, + 0x80, 0xa7, 0xf6, 0x39, 0x16, 0x2f, 0x9d, 0xc7, 0xeb, 0xd6, 0x21, 0x02, 0xe6, 0x8a, 0x88, 0x01, + 0xec, 0x9f, 0xc3, 0x66, 0xb0, 0xc6, 0x01, 0xf6, 0xb8, 0x94, 0xf4, 0xd2, 0x21, 0xf6, 0x23, 0x0f, + 0x00, 0xc4, 0xb4, 0xdf, 0x93, 0xc1, 0x7c, 0xcd, 0xbe, 0x64, 0xf9, 0xb0, 0xb2, 0x6b, 0xda, 0x3b, + 0x50, 0xeb, 0x89, 0x34, 0xaa, 0x55, 0x30, 0xd7, 0x87, 0xee, 0x9e, 0xe5, 0xa1, 0xb1, 0xcb, 0xc3, + 0x95, 0x5b, 0xbc, 0xed, 0xe1, 0xa1, 0xb4, 0xb0, 0xad, 0xb0, 0xb4, 0x61, 0xba, 0xbe, 0xd5, 0xb1, + 0xfa, 0xa6, 0xed, 0x6f, 0x44, 0x99, 0x0d, 0xf6, 0x4b, 0xed, 0xf7, 0x53, 0xb6, 0x3e, 0x96, 0xd5, + 0x18, 0x30, 0xff, 0x3d, 0x27, 0xde, 0xfa, 0x12, 0xc8, 0xa5, 0xc3, 0xf2, 0xc7, 0xa7, 0x8e, 0xe5, + 0x35, 0xe0, 0xea, 0x5a, 0xa3, 0xd2, 0x34, 0x0c, 0xbd, 0xd2, 0xde, 0xda, 0xd0, 0x8d, 0xf5, 0x5a, + 0xab, 0x55, 0x6b, 0x36, 0x5a, 0x8a, 0xa5, 0xfd, 0x59, 0x1e, 0x2c, 0x92, 0x9a, 0xad, 0x42, 0x1b, + 0xba, 0x68, 0x6c, 0x7f, 0x63, 0x4e, 0x04, 0xd6, 0xdb, 0x01, 0xb0, 0xf0, 0x77, 0xed, 0x2b, 0x7d, + 0x48, 0x51, 0xbd, 0x66, 0x00, 0xd5, 0x5a, 0x98, 0xc1, 0x60, 0x32, 0x0f, 0x6a, 0x84, 0x3c, 0xb6, + 0x46, 0xbc, 0x5e, 0x66, 0x34, 0x62, 0x85, 0xd7, 0x88, 0x47, 0xc7, 0x42, 0x18, 0x54, 0x34, 0xc6, + 0x8c, 0xbb, 0x0e, 0xcc, 0x12, 0x5e, 0x2b, 0x56, 0x97, 0xc2, 0x17, 0x25, 0xa8, 0x37, 0x80, 0x05, + 0xf2, 0xb0, 0x62, 0xf5, 0xe0, 0x3d, 0xf0, 0x0a, 0x35, 0xe8, 0xf8, 0x44, 0xed, 0x27, 0xc2, 0x5e, + 0xbd, 0xc6, 0xe9, 0xd5, 0xf7, 0xa7, 0x65, 0x2a, 0x9d, 0x66, 0xbd, 0xe4, 0x81, 0xd0, 0xaf, 0x1f, + 0xe8, 0xbe, 0x2d, 0xed, 0xbb, 0x12, 0x98, 0x6b, 0xf9, 0x4e, 0x1f, 0xf5, 0x85, 0x96, 0xbd, 0x23, + 0xd6, 0x79, 0x7f, 0x86, 0x6d, 0xee, 0x15, 0x1e, 0xdc, 0x47, 0x0d, 0x91, 0x23, 0x53, 0x40, 0x4c, + 0x6b, 0xff, 0x56, 0xd8, 0xda, 0x57, 0x38, 0x54, 0x6e, 0x4b, 0x45, 0xed, 0x7b, 0xb0, 0xe3, 0x7e, + 0x89, 0x0c, 0x94, 0x40, 0xcd, 0xfc, 0xca, 0xbe, 0xeb, 0x42, 0xdb, 0x17, 0x03, 0xe1, 0x8f, 0x59, + 0x10, 0xd6, 0x78, 0x10, 0x6e, 0x4b, 0x50, 0xe6, 0xa0, 0x94, 0x0c, 0xdb, 0xd8, 0xc7, 0x42, 0x34, + 0xef, 0xe1, 0xd0, 0xfc, 0x81, 0xf4, 0x6c, 0xa5, 0x83, 0x74, 0x6d, 0x0c, 0x44, 0x4f, 0x02, 0x05, + 0x19, 0x3b, 0x95, 0x76, 0xed, 0x9c, 0xbe, 0x55, 0x6b, 0x9c, 0xab, 0xb5, 0x75, 0x05, 0x6a, 0x2f, + 0x96, 0xa3, 0xce, 0xd7, 0x5f, 0xc5, 0x26, 0xbb, 0x10, 0x2a, 0x5f, 0x96, 0xc6, 0xeb, 0xf7, 0x48, + 0x19, 0x53, 0xc1, 0x44, 0xbc, 0xdf, 0x1b, 0xca, 0x54, 0x3a, 0x44, 0xee, 0x1e, 0x03, 0x91, 0x53, + 0x40, 0xad, 0x35, 0xce, 0x95, 0xeb, 0xb5, 0x2a, 0x69, 0x63, 0x5b, 0xed, 0x7b, 0x37, 0x10, 0x26, + 0x3f, 0x13, 0x1a, 0x39, 0x06, 0xbc, 0xe4, 0x5c, 0x14, 0xb4, 0x34, 0xbf, 0x3a, 0x96, 0x6d, 0x42, + 0x4a, 0x88, 0xe9, 0xad, 0x7e, 0x5c, 0x4a, 0x6b, 0x9b, 0x0c, 0x25, 0xf7, 0x40, 0x1a, 0x41, 0x0e, + 0x74, 0x4d, 0x3b, 0x43, 0x7a, 0xb0, 0xa1, 0x23, 0xc8, 0x27, 0xf2, 0x00, 0x90, 0x4a, 0x9e, 0xb3, + 0xe0, 0x65, 0x6d, 0x3d, 0xc2, 0x84, 0x53, 0xdb, 0xdc, 0x48, 0xb5, 0x95, 0x86, 0xa9, 0xed, 0x5f, + 0xb2, 0x76, 0xc4, 0x32, 0x8f, 0xde, 0x2d, 0xb1, 0xe2, 0x46, 0x9c, 0xc4, 0x2f, 0x05, 0x05, 0x8a, + 0x22, 0xf1, 0x66, 0xd3, 0x75, 0x60, 0x16, 0xff, 0x6d, 0x98, 0x7b, 0x90, 0xb6, 0xa1, 0x28, 0x41, + 0x3d, 0x0b, 0xe6, 0x49, 0xc6, 0x8e, 0x63, 0xa3, 0xfa, 0xe4, 0x71, 0x06, 0x2e, 0x0d, 0x81, 0xd8, + 0x71, 0xa1, 0xe9, 0x3b, 0x2e, 0xa6, 0x51, 0x20, 0x20, 0x32, 0x49, 0xea, 0x2d, 0xe0, 0x84, 0xe5, + 0xe1, 0x56, 0xb5, 0xe9, 0x41, 0x97, 0x30, 0x7b, 0xba, 0x78, 0x7d, 0xee, 0xa6, 0x92, 0x71, 0xf0, + 0x85, 0xf6, 0x8d, 0xb0, 0xcd, 0xea, 0x9c, 0x9e, 0x3d, 0x26, 0x4d, 0xc5, 0xd3, 0x69, 0xd9, 0xa5, + 0xf1, 0x7a, 0x50, 0xd2, 0x6f, 0x6e, 0x21, 0xdd, 0x58, 0xc1, 0xab, 0x3e, 0x90, 0xb6, 0x62, 0x94, + 0x8a, 0xf2, 0x56, 0x9a, 0x8d, 0xb6, 0xde, 0x68, 0x2b, 0xdb, 0x43, 0xf5, 0x6f, 0x47, 0x7b, 0x5d, + 0x1e, 0xe4, 0xef, 0x76, 0x2c, 0x5b, 0x7b, 0x4e, 0x8e, 0x53, 0x20, 0x1b, 0xfa, 0x97, 0x1d, 0xf7, + 0x62, 0xd8, 0xac, 0xa3, 0x84, 0x64, 0x24, 0x23, 0xc5, 0x93, 0x47, 0x2a, 0x5e, 0x7e, 0x98, 0xe2, + 0xfd, 0x34, 0xab, 0x78, 0x77, 0xf2, 0x8a, 0x77, 0xe3, 0x10, 0xf9, 0x23, 0xe6, 0x63, 0xba, 0x8b, + 0x4f, 0x87, 0xdd, 0xc5, 0x5d, 0x1c, 0x8c, 0x8f, 0x14, 0x23, 0x93, 0x0e, 0xc0, 0xaf, 0x64, 0xda, + 0x4d, 0x0c, 0x83, 0x7a, 0x27, 0x06, 0xea, 0xdd, 0x21, 0x3d, 0x88, 0x75, 0xb0, 0xa3, 0xb9, 0xef, + 0x60, 0xa7, 0x72, 0x51, 0xbd, 0x1a, 0x9c, 0xa8, 0xd6, 0x56, 0x56, 0x74, 0x43, 0x6f, 0xb4, 0xb7, + 0x1a, 0x7a, 0xfb, 0x7c, 0xd3, 0xb8, 0x47, 0xe9, 0x69, 0xaf, 0x95, 0x01, 0x40, 0x12, 0xaa, 0x98, + 0x76, 0x07, 0xf6, 0xc4, 0xfa, 0xff, 0xbf, 0x93, 0xd2, 0xf5, 0x20, 0x11, 0xfd, 0x18, 0x38, 0x5f, + 0x21, 0x89, 0xb7, 0xca, 0x58, 0x62, 0xe9, 0x40, 0x7d, 0xf3, 0x03, 0x61, 0xf6, 0x70, 0x15, 0x38, + 0x1e, 0xd0, 0xa3, 0xd9, 0x87, 0xaf, 0x08, 0xbd, 0x3d, 0x0f, 0x16, 0x29, 0x2c, 0xc1, 0x12, 0xdf, + 0xf3, 0x84, 0xe6, 0xad, 0x1a, 0x28, 0xd1, 0x15, 0xbd, 0x60, 0x30, 0x08, 0x9f, 0x27, 0x37, 0x31, + 0x7d, 0x71, 0xca, 0x89, 0x29, 0x5f, 0x93, 0x18, 0x95, 0xf8, 0xb5, 0x14, 0x93, 0xca, 0x44, 0x82, + 0xe9, 0xd4, 0xe2, 0x53, 0x99, 0xaa, 0xc5, 0x10, 0xbc, 0x13, 0xd6, 0x2b, 0x0e, 0xd1, 0xda, 0xb5, + 0xcf, 0xca, 0xa1, 0xc6, 0x54, 0x61, 0xa7, 0x67, 0xd9, 0x50, 0xbb, 0xeb, 0x90, 0x0a, 0xc3, 0x2f, + 0x08, 0x8b, 0xe3, 0x4c, 0xcb, 0x8f, 0xc1, 0xf9, 0x35, 0xe9, 0x71, 0x1e, 0x4e, 0xf0, 0x3f, 0x70, + 0xf3, 0xff, 0xaa, 0x0c, 0x4e, 0x30, 0x0d, 0xd1, 0x80, 0x7b, 0x13, 0x5b, 0xe4, 0xff, 0x11, 0xb6, + 0xed, 0xd6, 0x78, 0x4c, 0x87, 0xd9, 0xde, 0x07, 0xd8, 0x88, 0x81, 0xf5, 0xcd, 0x21, 0xac, 0x75, + 0x0e, 0xd6, 0x27, 0x8c, 0x41, 0x33, 0x1d, 0xb2, 0xef, 0xc8, 0x14, 0xd9, 0x6b, 0xc0, 0xd5, 0x1b, + 0x65, 0xa3, 0x5d, 0xab, 0xd4, 0x36, 0xca, 0x68, 0x1c, 0x65, 0x86, 0xec, 0x18, 0xe3, 0x9e, 0x07, + 0x7d, 0x28, 0xbe, 0x1f, 0xcd, 0x83, 0xeb, 0x86, 0x77, 0xb4, 0x74, 0xe9, 0xd9, 0x12, 0x81, 0xba, + 0x0a, 0x66, 0x3a, 0x38, 0x3b, 0xc1, 0x99, 0xdd, 0xd5, 0x4d, 0xe8, 0xcb, 0x49, 0x09, 0x46, 0xf0, + 0xa9, 0xf6, 0x6e, 0x56, 0x21, 0xda, 0xbc, 0x42, 0x3c, 0x39, 0x19, 0xbc, 0x03, 0x7c, 0xc7, 0xe8, + 0xc6, 0xe7, 0x43, 0xdd, 0x38, 0xcf, 0xe9, 0x46, 0xe5, 0x70, 0xe4, 0xd3, 0xa9, 0xc9, 0x6f, 0x3d, + 0x10, 0x3a, 0x80, 0x58, 0x6d, 0xb2, 0xe2, 0x47, 0x85, 0xa1, 0xdd, 0xfd, 0xab, 0x64, 0x50, 0xac, + 0xc2, 0x1e, 0xf4, 0x05, 0x67, 0xf0, 0x7f, 0x2f, 0x89, 0xee, 0x95, 0x12, 0x18, 0x08, 0xed, 0xf8, + 0xb5, 0x14, 0xdf, 0xda, 0x83, 0x9e, 0x6f, 0xee, 0xf5, 0xb1, 0xa8, 0x65, 0x23, 0x4a, 0xd0, 0x7e, + 0x54, 0x12, 0xd9, 0x49, 0x4d, 0x28, 0xe6, 0x3f, 0xc6, 0xaa, 0xf0, 0x17, 0x24, 0x50, 0x6a, 0x41, + 0xbf, 0xe9, 0x76, 0xa1, 0xab, 0xb5, 0x22, 0x8c, 0xae, 0x07, 0x73, 0x18, 0x14, 0x34, 0xcd, 0x0c, + 0x71, 0x62, 0x93, 0xd4, 0x1b, 0xc1, 0x62, 0xf8, 0x88, 0x3f, 0xa7, 0xdd, 0xf8, 0x40, 0xaa, 0xf6, + 0xcd, 0x9c, 0xa8, 0x83, 0x07, 0x5d, 0xf4, 0xa5, 0xdc, 0xc4, 0xb4, 0x52, 0x31, 0x67, 0x8d, 0x44, + 0x52, 0xd9, 0xef, 0x81, 0xbf, 0x53, 0x02, 0x60, 0xd3, 0xf6, 0x02, 0xb9, 0x3e, 0x32, 0x85, 0x5c, + 0xb5, 0x7f, 0xca, 0xa5, 0x9b, 0xc5, 0x44, 0xe5, 0xc4, 0x48, 0xec, 0x97, 0x52, 0xac, 0x2d, 0xc4, + 0x12, 0xcb, 0x5e, 0x66, 0x5f, 0x3a, 0x0e, 0x8a, 0xe7, 0xcd, 0x5e, 0x0f, 0xfa, 0xda, 0x2b, 0x65, + 0x50, 0xac, 0xb8, 0xd0, 0xf4, 0xa1, 0x06, 0x23, 0xd1, 0x69, 0xa0, 0xe4, 0x3a, 0x8e, 0xbf, 0x61, + 0xfa, 0xbb, 0x54, 0x6e, 0xe1, 0xb3, 0xfa, 0x04, 0xf0, 0xa0, 0xed, 0xfd, 0x5e, 0xcf, 0x87, 0xf7, + 0xfb, 0x1b, 0xae, 0xb5, 0x67, 0xba, 0x57, 0xea, 0xa6, 0xbd, 0xb3, 0x6f, 0xee, 0x40, 0xca, 0x5e, + 0xdc, 0x6b, 0xea, 0x85, 0xf4, 0x2b, 0x6c, 0xc7, 0x73, 0x17, 0x2f, 0xf4, 0xef, 0xe3, 0xe4, 0x44, + 0x58, 0x5c, 0x22, 0xec, 0xc5, 0xf4, 0x3c, 0x1a, 0x28, 0xed, 0xd9, 0x70, 0xcf, 0xb1, 0xad, 0x4e, + 0x60, 0xad, 0x06, 0xcf, 0xda, 0xc7, 0x43, 0x34, 0x96, 0x39, 0x34, 0x96, 0x84, 0x4b, 0x49, 0x07, + 0x45, 0x6b, 0x8c, 0x7e, 0xe7, 0x21, 0xe0, 0x5a, 0xd2, 0x8d, 0x6c, 0xb5, 0x9b, 0x5b, 0x15, 0x43, + 0x2f, 0xb7, 0xf5, 0xad, 0x7a, 0xb3, 0x52, 0xae, 0x6f, 0x19, 0xfa, 0x46, 0x53, 0x81, 0x68, 0x76, + 0x3e, 0x63, 0xc0, 0x8e, 0x73, 0x09, 0xba, 0xda, 0xb3, 0x72, 0x62, 0x10, 0x25, 0x08, 0x25, 0x09, + 0x3e, 0x59, 0x04, 0xbe, 0x9f, 0x16, 0x76, 0x22, 0xa3, 0x82, 0xa5, 0xcc, 0xc7, 0xb4, 0x98, 0x4f, + 0x08, 0xf5, 0x31, 0x89, 0xa4, 0x1e, 0x00, 0x20, 0xfd, 0xa3, 0x04, 0x66, 0x2a, 0x8e, 0x7d, 0x09, + 0xba, 0x3e, 0x3b, 0xc9, 0x62, 0x71, 0xc8, 0x0d, 0xe0, 0x70, 0x1a, 0xcc, 0x40, 0xdb, 0x77, 0x9d, + 0x7e, 0x30, 0xcb, 0x0a, 0x1e, 0xb5, 0x37, 0xa6, 0x95, 0x30, 0x2d, 0x39, 0x7e, 0x6d, 0x76, 0x78, + 0x41, 0x1c, 0x7b, 0xf2, 0x40, 0xdb, 0x79, 0x6d, 0x1a, 0x5c, 0x86, 0x33, 0x90, 0x7d, 0x3f, 0xf6, + 0x35, 0x19, 0x2c, 0x90, 0x76, 0xdb, 0x82, 0xd8, 0x2c, 0xd4, 0x9a, 0xec, 0x3a, 0xe7, 0x80, 0xf0, + 0xd7, 0x8e, 0x71, 0xe2, 0x2f, 0x9a, 0xfd, 0x7e, 0xb8, 0x42, 0xbe, 0x76, 0xcc, 0xa0, 0xcf, 0x44, + 0xcd, 0x97, 0x8b, 0x20, 0x6f, 0xee, 0xfb, 0xbb, 0xda, 0x77, 0x85, 0x67, 0xbc, 0x5c, 0x3f, 0x42, + 0xf9, 0x89, 0x81, 0xe4, 0x24, 0x28, 0xf8, 0xce, 0x45, 0x18, 0xc8, 0x81, 0x3c, 0x20, 0x38, 0xcc, + 0x7e, 0xbf, 0x8d, 0x5f, 0x50, 0x38, 0x82, 0x67, 0x64, 0x60, 0x99, 0x9d, 0x8e, 0xb3, 0x6f, 0xfb, + 0xb5, 0x60, 0x95, 0x3c, 0x4a, 0xd0, 0xbe, 0x24, 0xb4, 0x0d, 0x25, 0xc0, 0x60, 0x3a, 0xc8, 0x2e, + 0x8c, 0xd1, 0x94, 0x96, 0xc0, 0xcd, 0xe5, 0x8d, 0x8d, 0xad, 0x76, 0xf3, 0x1e, 0xbd, 0x11, 0x59, + 0xbb, 0x5b, 0xb5, 0xc6, 0x56, 0x7b, 0x4d, 0xdf, 0xaa, 0x6c, 0x1a, 0x78, 0x71, 0xb2, 0x5c, 0xa9, + 0x34, 0x37, 0x1b, 0x6d, 0x05, 0x6a, 0x6f, 0x95, 0xc0, 0x7c, 0xa5, 0xe7, 0x78, 0x21, 0xc2, 0x0f, + 0x89, 0x10, 0x0e, 0xc5, 0x98, 0x63, 0xc4, 0xa8, 0xfd, 0x6b, 0x4e, 0xd4, 0x09, 0x2a, 0x10, 0x08, + 0x43, 0x3e, 0xa6, 0x97, 0x7a, 0xa3, 0x90, 0x13, 0xd4, 0x68, 0x7a, 0xd9, 0x37, 0x89, 0xcf, 0xad, + 0x80, 0x99, 0x32, 0x51, 0x0c, 0xed, 0x4f, 0x73, 0xa0, 0x58, 0x71, 0xec, 0x6d, 0x6b, 0x07, 0x59, + 0x90, 0xd0, 0x36, 0x2f, 0xf4, 0x60, 0xd5, 0xf4, 0xcd, 0x4b, 0x16, 0xbc, 0x8c, 0x2b, 0x50, 0x32, + 0x06, 0x52, 0x11, 0x53, 0x34, 0x05, 0x5e, 0xd8, 0xdf, 0xc1, 0x4c, 0x95, 0x0c, 0x36, 0x09, 0x8d, + 0x1f, 0xe4, 0x71, 0xc3, 0x85, 0x2e, 0xec, 0x41, 0xd3, 0xc3, 0x3e, 0x42, 0x36, 0xec, 0x61, 0xa5, + 0x2d, 0x19, 0x71, 0xaf, 0xd5, 0xb3, 0x60, 0x9e, 0xbc, 0xc2, 0xf6, 0x8f, 0x87, 0xd5, 0xb8, 0x64, + 0x70, 0x69, 0xea, 0xa3, 0x40, 0x01, 0xde, 0xef, 0xbb, 0xe6, 0xe9, 0x2e, 0xc6, 0xeb, 0x41, 0x4b, + 0xc4, 0x0b, 0x7a, 0x29, 0xf0, 0x82, 0x5e, 0x6a, 0x61, 0x1f, 0x69, 0x83, 0xe4, 0xd2, 0xfe, 0x77, + 0x29, 0xb4, 0x5e, 0xbe, 0x20, 0x47, 0x8a, 0xa1, 0x82, 0xbc, 0x6d, 0xee, 0x41, 0xaa, 0x17, 0xf8, + 0xbf, 0x7a, 0x33, 0x38, 0x6e, 0x5e, 0x32, 0x7d, 0xd3, 0xad, 0x3b, 0x1d, 0xb3, 0x87, 0x87, 0xcd, + 0xa0, 0xe5, 0x0f, 0xbe, 0xc0, 0x9b, 0x56, 0xbe, 0xe3, 0x42, 0x9c, 0x2b, 0xd8, 0xb4, 0x0a, 0x12, + 0x10, 0x75, 0xab, 0xe3, 0xd8, 0x98, 0x7f, 0xd9, 0xc0, 0xff, 0x91, 0x54, 0xba, 0x96, 0x87, 0x2a, + 0x82, 0xa9, 0x34, 0xc8, 0x7e, 0x4a, 0xeb, 0x8a, 0xdd, 0xc1, 0x1b, 0x56, 0x25, 0x23, 0xee, 0xb5, + 0xba, 0x0c, 0xe6, 0xe8, 0xee, 0xcb, 0x3a, 0xd2, 0xab, 0x22, 0xd6, 0xab, 0xeb, 0x79, 0x1f, 0x53, + 0x82, 0xe7, 0x52, 0x23, 0xca, 0x67, 0xb0, 0x1f, 0xa9, 0x4f, 0x01, 0xd7, 0xd2, 0xc7, 0xca, 0xbe, + 0xe7, 0x3b, 0x7b, 0x04, 0xf4, 0x15, 0xab, 0x47, 0x6a, 0x30, 0x83, 0x6b, 0x90, 0x94, 0x45, 0xbd, + 0x0d, 0x9c, 0xec, 0xbb, 0x70, 0x1b, 0xba, 0xf7, 0x9a, 0x7b, 0xfb, 0xf7, 0xb7, 0x5d, 0xd3, 0xf6, + 0xfa, 0x8e, 0xeb, 0x9f, 0x2e, 0x61, 0xe6, 0x87, 0xbe, 0x53, 0x6f, 0x01, 0x27, 0xee, 0xf3, 0x1c, + 0xbb, 0xdc, 0xb7, 0xea, 0x96, 0xe7, 0x43, 0xbb, 0xdc, 0xed, 0xba, 0xa7, 0x67, 0x71, 0x59, 0x07, + 0x5f, 0xa8, 0x37, 0x80, 0x85, 0xfb, 0x1c, 0xcb, 0x6e, 0xf9, 0x2e, 0x34, 0xf7, 0x36, 0xdd, 0xde, + 0x69, 0x40, 0x36, 0x88, 0xb8, 0x44, 0xda, 0xf9, 0x96, 0x40, 0x91, 0x40, 0xa2, 0xbd, 0xa8, 0x20, + 0xec, 0xb2, 0x4e, 0x85, 0x94, 0x68, 0x2d, 0x3e, 0x1a, 0xcc, 0xd0, 0x5e, 0x13, 0x83, 0x3f, 0x77, + 0xdb, 0xa9, 0x81, 0x05, 0x12, 0x4a, 0xc5, 0x08, 0xb2, 0xa9, 0x8f, 0x05, 0xc5, 0x0e, 0x16, 0x15, + 0xd6, 0x83, 0xb9, 0xdb, 0xae, 0x1d, 0x5e, 0x28, 0xce, 0x62, 0xd0, 0xac, 0xda, 0x97, 0x65, 0x21, + 0x2f, 0xf7, 0x24, 0x8e, 0xd3, 0xf5, 0x14, 0xdf, 0x90, 0xc6, 0xe8, 0x8a, 0x6f, 0x01, 0x37, 0xd1, + 0x7e, 0x96, 0xda, 0x34, 0xd5, 0xad, 0xe5, 0xcd, 0x60, 0x56, 0x8b, 0x2c, 0x9d, 0x56, 0xbb, 0x6c, + 0xb4, 0xb7, 0x1a, 0xcd, 0x2a, 0x9a, 0x0d, 0xdf, 0x0c, 0x6e, 0x1c, 0x91, 0x5b, 0x6f, 0x6f, 0x35, + 0xca, 0xeb, 0xba, 0xb2, 0xcd, 0xdb, 0x4b, 0xad, 0x76, 0x73, 0x63, 0xcb, 0xd8, 0x6c, 0x34, 0x6a, + 0x8d, 0x55, 0x42, 0x0c, 0x19, 0xa8, 0xa7, 0xa2, 0x0c, 0xe7, 0x8d, 0x5a, 0x5b, 0xdf, 0xaa, 0x34, + 0x1b, 0x2b, 0xb5, 0x55, 0xc5, 0x1a, 0x65, 0x6c, 0xdd, 0xa7, 0x5e, 0x0f, 0xae, 0xe3, 0x38, 0xa9, + 0x35, 0x1b, 0x68, 0x8a, 0x5e, 0x29, 0x37, 0x2a, 0x3a, 0x9a, 0x8f, 0x5f, 0x54, 0x35, 0x70, 0x35, + 0x21, 0xb7, 0xb5, 0x52, 0xab, 0xb3, 0xbb, 0x6a, 0x9f, 0xc9, 0xa9, 0xa7, 0xc1, 0x55, 0xec, 0x3b, + 0xea, 0x13, 0xa1, 0xfc, 0x66, 0x4e, 0xbd, 0x01, 0x3c, 0x84, 0xfb, 0x8a, 0x6c, 0x90, 0x6d, 0xd5, + 0xaa, 0x5b, 0xeb, 0xb5, 0xd6, 0x7a, 0xb9, 0x5d, 0x59, 0x53, 0x3e, 0x8b, 0xa7, 0x2f, 0xa1, 0x3d, + 0xce, 0xb8, 0x9e, 0xbf, 0x84, 0xb5, 0x13, 0xca, 0xbc, 0xa2, 0x3e, 0x72, 0x28, 0xec, 0xc9, 0x76, + 0xf1, 0xa7, 0xc2, 0x11, 0xa7, 0xca, 0xa9, 0xd0, 0xa3, 0x53, 0xd0, 0x4a, 0xa7, 0x43, 0xed, 0x31, + 0x54, 0xe8, 0x7a, 0x70, 0x5d, 0x43, 0x27, 0x48, 0x19, 0x7a, 0xa5, 0x79, 0x4e, 0x37, 0xb6, 0xce, + 0x97, 0xeb, 0x75, 0xbd, 0xbd, 0xb5, 0x52, 0x33, 0x5a, 0x6d, 0x65, 0x5b, 0xfb, 0x27, 0x29, 0x5c, + 0x96, 0x62, 0xa4, 0xf5, 0xa7, 0x52, 0xda, 0x66, 0x9d, 0xb8, 0xfc, 0xf4, 0xfd, 0xa0, 0xe8, 0xf9, + 0xa6, 0xbf, 0xef, 0xd1, 0x56, 0xfd, 0xe0, 0xe1, 0xad, 0x7a, 0xa9, 0x85, 0x33, 0x19, 0x34, 0xb3, + 0xf6, 0xe5, 0x5c, 0x9a, 0x66, 0x3a, 0x81, 0x95, 0x29, 0x6b, 0x0c, 0x11, 0x9f, 0x01, 0x5a, 0xa0, + 0xed, 0xb5, 0xd6, 0x56, 0xb9, 0x6e, 0xe8, 0xe5, 0xea, 0xbd, 0xe1, 0x7a, 0x14, 0x54, 0xaf, 0x06, + 0x27, 0x36, 0x1b, 0xe5, 0xe5, 0xba, 0x8e, 0x9b, 0x4b, 0xb3, 0xd1, 0xd0, 0x2b, 0x48, 0xee, 0x3f, + 0x8a, 0x77, 0x7f, 0x90, 0x55, 0x8e, 0xf9, 0x46, 0x96, 0x13, 0x23, 0xff, 0xbf, 0x12, 0x76, 0x73, + 0x8b, 0x34, 0x8c, 0xa5, 0x35, 0x59, 0x1c, 0xbe, 0x24, 0xe4, 0xd9, 0x26, 0xc4, 0x49, 0x3a, 0x3c, + 0x7e, 0x68, 0x0c, 0x3c, 0xae, 0x06, 0x27, 0x58, 0x3c, 0xb0, 0x87, 0x5b, 0x3c, 0x0c, 0x7f, 0x22, + 0x83, 0x99, 0x75, 0x6b, 0x07, 0xfb, 0x19, 0xef, 0x47, 0x06, 0xca, 0x22, 0x90, 0x42, 0xef, 0x1d, + 0xc9, 0xea, 0x72, 0x93, 0x79, 0x49, 0x7c, 0xbd, 0x45, 0x68, 0xc2, 0xfe, 0xe5, 0xd4, 0x3d, 0x13, + 0x65, 0x38, 0xa6, 0x67, 0x7a, 0xbe, 0x94, 0xa6, 0x67, 0x1a, 0x4e, 0x2b, 0x15, 0x4c, 0xc8, 0x74, + 0x70, 0xe1, 0x33, 0xf6, 0x2d, 0x17, 0x76, 0xb1, 0x99, 0x88, 0xeb, 0x2d, 0x1b, 0x7c, 0xe2, 0x59, + 0xf7, 0x70, 0x60, 0xb2, 0x5e, 0x36, 0xf3, 0xa0, 0x14, 0x8e, 0x26, 0x78, 0xc3, 0x07, 0xbd, 0xd4, + 0x1b, 0xcd, 0xcd, 0xd5, 0xb5, 0xad, 0x15, 0x43, 0xd7, 0xe9, 0x12, 0xf1, 0x8e, 0xf6, 0x2e, 0x09, + 0x2c, 0xd0, 0x1a, 0x52, 0xef, 0x89, 0x87, 0xc4, 0x82, 0x4c, 0xe1, 0xf8, 0x77, 0x76, 0x7a, 0xb2, + 0xca, 0xc3, 0xf1, 0x98, 0x24, 0x11, 0x26, 0xba, 0x4f, 0xbc, 0x29, 0x6c, 0x42, 0x77, 0x73, 0xa0, + 0x3c, 0x3e, 0x35, 0xc5, 0xec, 0xa7, 0x28, 0x2f, 0x02, 0xa0, 0xd8, 0x82, 0x3d, 0xd8, 0xf1, 0xb5, + 0x0f, 0xcb, 0x63, 0xb7, 0x89, 0x38, 0x73, 0x5b, 0x4e, 0x65, 0x6e, 0xe7, 0x33, 0x30, 0xb7, 0x0b, + 0xe3, 0x9b, 0xdb, 0xc5, 0xb4, 0xe6, 0xf6, 0x4c, 0x9c, 0xb9, 0x9d, 0xd0, 0x6b, 0x94, 0x12, 0x7b, + 0x8d, 0x01, 0x43, 0xdd, 0xa8, 0x53, 0x93, 0x9e, 0x4f, 0xa4, 0xca, 0xfc, 0xc9, 0x62, 0xda, 0x71, + 0x9c, 0x00, 0x7f, 0xb4, 0xe6, 0xf9, 0x4f, 0x16, 0xd2, 0x8c, 0xfb, 0x43, 0x39, 0x4e, 0xd7, 0x4a, + 0x5e, 0x91, 0xcf, 0x60, 0xd1, 0x51, 0x7d, 0x18, 0x78, 0x48, 0xf4, 0xbc, 0xa5, 0x3f, 0xad, 0xd6, + 0x6a, 0xb7, 0xb0, 0x4d, 0x5e, 0x69, 0x1a, 0xc6, 0xe6, 0x06, 0xd9, 0xae, 0x3a, 0x05, 0xd4, 0x88, + 0x8a, 0xb1, 0xd9, 0x20, 0x16, 0xf8, 0x0e, 0x4f, 0x7d, 0xa5, 0xd6, 0xa8, 0x6e, 0x85, 0xa3, 0x5a, + 0x63, 0xa5, 0xa9, 0xec, 0xaa, 0x4b, 0xe0, 0x66, 0x86, 0x3a, 0xee, 0x00, 0x49, 0x09, 0xe5, 0x46, + 0x75, 0x6b, 0xbd, 0xa1, 0xaf, 0x37, 0x1b, 0xb5, 0x0a, 0x4e, 0x6f, 0xe9, 0x6d, 0xc5, 0x42, 0xa6, + 0xe0, 0x80, 0xcd, 0xdf, 0xd2, 0xcb, 0x46, 0x65, 0x4d, 0x37, 0x48, 0x91, 0xf7, 0xa9, 0x37, 0x82, + 0xb3, 0xe5, 0x46, 0xb3, 0x8d, 0x52, 0xca, 0x8d, 0x7b, 0xdb, 0xf7, 0x6e, 0xe8, 0x5b, 0x1b, 0x46, + 0xb3, 0xa2, 0xb7, 0x5a, 0x68, 0x24, 0xa5, 0x33, 0x04, 0xa5, 0xa7, 0x3e, 0x19, 0xdc, 0xc1, 0xb0, + 0xa6, 0xb7, 0xb1, 0x6f, 0xc4, 0x7a, 0x13, 0xbb, 0xc7, 0x55, 0xf5, 0xad, 0xb5, 0x72, 0x6b, 0xab, + 0xd6, 0xa8, 0x34, 0xd7, 0x37, 0xca, 0xed, 0x1a, 0x1a, 0x70, 0x37, 0x8c, 0x66, 0xbb, 0xb9, 0x75, + 0x4e, 0x37, 0x5a, 0xb5, 0x66, 0x43, 0xb1, 0x51, 0x95, 0x99, 0x11, 0x3a, 0xb0, 0x94, 0x1c, 0xf5, + 0x3a, 0x70, 0x3a, 0x48, 0xaf, 0x37, 0x91, 0xa0, 0x99, 0x39, 0x43, 0x9f, 0xb5, 0xb3, 0x5a, 0xed, + 0xa6, 0x41, 0x66, 0x0d, 0xeb, 0xb5, 0x55, 0x03, 0x4d, 0x75, 0x94, 0x67, 0x64, 0x3a, 0xa7, 0xf8, + 0x17, 0x09, 0xe4, 0x5b, 0xbe, 0xd3, 0xd7, 0xbe, 0x2f, 0xea, 0x0e, 0xcf, 0x00, 0xe0, 0x62, 0x57, + 0x88, 0xaa, 0xe9, 0x9b, 0x74, 0xb5, 0x86, 0x49, 0xd1, 0x7e, 0x43, 0x78, 0xff, 0x36, 0xb2, 0xba, + 0x9c, 0x7e, 0xcc, 0xf0, 0xf1, 0x1d, 0xb1, 0xb3, 0xae, 0xf1, 0x84, 0xa6, 0x70, 0x22, 0x4c, 0x03, + 0xa7, 0x18, 0x58, 0x91, 0xfc, 0x03, 0x95, 0x81, 0xea, 0x83, 0xc0, 0x55, 0x03, 0xca, 0x87, 0x75, + 0x6e, 0x5b, 0x7d, 0x28, 0x78, 0x30, 0xa3, 0xfe, 0xfa, 0x7a, 0xf3, 0x9c, 0x1e, 0x2a, 0x7a, 0xb5, + 0xdc, 0x2e, 0x2b, 0x3b, 0xda, 0x17, 0x64, 0x90, 0x5f, 0x77, 0x2e, 0x0d, 0x6e, 0x9b, 0xdb, 0xf0, + 0x32, 0xb3, 0xb7, 0x12, 0x3c, 0xf2, 0x47, 0xb0, 0x84, 0xc4, 0xbe, 0x1e, 0xef, 0x22, 0xf3, 0x25, + 0x29, 0x8d, 0xd8, 0xd7, 0x0f, 0xeb, 0x17, 0xf3, 0x37, 0xe3, 0x88, 0x3d, 0x46, 0xb4, 0x50, 0x3d, + 0x0b, 0xce, 0x44, 0x2f, 0x6a, 0x55, 0xbd, 0xd1, 0xae, 0xad, 0xdc, 0x1b, 0x09, 0xb7, 0x66, 0x08, + 0x89, 0x7f, 0x54, 0x37, 0x97, 0xbc, 0x56, 0x70, 0x1a, 0x9c, 0x8c, 0xde, 0xad, 0xea, 0xed, 0xe0, + 0xcd, 0x7d, 0xda, 0x73, 0x0a, 0x60, 0x9e, 0x74, 0xfb, 0x9b, 0xfd, 0x2e, 0xb2, 0xbe, 0x1f, 0x1b, + 0xa1, 0x7b, 0x13, 0x38, 0x5e, 0xdb, 0x58, 0x69, 0xb5, 0x7c, 0xc7, 0x35, 0x77, 0x20, 0x1e, 0x47, + 0x89, 0xb4, 0x06, 0x93, 0xb5, 0xf7, 0x0a, 0xaf, 0xfe, 0xf3, 0x43, 0x0d, 0x29, 0x33, 0x06, 0xf5, + 0xaf, 0x09, 0xad, 0xd6, 0x0b, 0x10, 0x4c, 0x87, 0xfe, 0x7d, 0x13, 0x6e, 0x73, 0xf1, 0xb8, 0x6c, + 0x9f, 0x7d, 0xae, 0x04, 0x66, 0xdb, 0xd6, 0x1e, 0x7c, 0xa6, 0x63, 0x43, 0x4f, 0x9d, 0x01, 0xf2, + 0xea, 0x7a, 0x5b, 0x39, 0x86, 0xfe, 0xa0, 0x69, 0x51, 0x0e, 0xff, 0xd1, 0x51, 0x01, 0xe8, 0x4f, + 0xb9, 0xad, 0xc8, 0xe8, 0xcf, 0xba, 0xde, 0x56, 0xf2, 0xe8, 0x4f, 0x43, 0x6f, 0x2b, 0x05, 0xf4, + 0x67, 0xa3, 0xde, 0x56, 0x8a, 0xe8, 0x4f, 0xad, 0xd5, 0x56, 0x66, 0xd0, 0x9f, 0xe5, 0x56, 0x5b, + 0x29, 0xa1, 0x3f, 0xe7, 0x5a, 0x6d, 0x65, 0x16, 0xfd, 0xa9, 0xb4, 0xdb, 0x0a, 0x40, 0x7f, 0xee, + 0x6e, 0xb5, 0x95, 0x39, 0xf4, 0xa7, 0x5c, 0x69, 0x2b, 0xf3, 0xf8, 0x8f, 0xde, 0x56, 0x16, 0xd0, + 0x9f, 0x56, 0xab, 0xad, 0x2c, 0x62, 0xca, 0xad, 0xb6, 0x72, 0x1c, 0x97, 0x55, 0x6b, 0x2b, 0x0a, + 0xfa, 0xb3, 0xd6, 0x6a, 0x2b, 0x27, 0x70, 0xe6, 0x56, 0x5b, 0x51, 0x71, 0xa1, 0xad, 0xb6, 0x72, + 0x15, 0xce, 0xd3, 0x6a, 0x2b, 0x27, 0x71, 0x11, 0xad, 0xb6, 0x72, 0x35, 0x66, 0x43, 0x6f, 0x2b, + 0xa7, 0x70, 0x1e, 0xa3, 0xad, 0x3c, 0x08, 0xbf, 0x6a, 0xb4, 0x95, 0xd3, 0x98, 0x31, 0xbd, 0xad, + 0x5c, 0x83, 0xff, 0x18, 0x6d, 0x45, 0xc3, 0xaf, 0xca, 0x6d, 0xe5, 0x5a, 0xed, 0xc1, 0x60, 0x76, + 0x15, 0xfa, 0x04, 0x44, 0x4d, 0x01, 0xf2, 0x2a, 0xf4, 0xd9, 0x89, 0xf8, 0x2b, 0xf3, 0xe0, 0x41, + 0x74, 0xf1, 0x66, 0xc5, 0x75, 0xf6, 0xea, 0x70, 0xc7, 0xec, 0x5c, 0xd1, 0xef, 0x47, 0x06, 0x9f, + 0xf6, 0xc2, 0x1c, 0xb7, 0xa2, 0xdd, 0x8f, 0x7a, 0x23, 0xfc, 0x3f, 0xd1, 0x40, 0x0e, 0xd6, 0xa8, + 0x65, 0x7e, 0x8d, 0x3a, 0xce, 0x24, 0xcc, 0x8b, 0x4c, 0x24, 0xff, 0x81, 0x6d, 0x0c, 0xdc, 0x86, + 0x54, 0x6e, 0x60, 0x43, 0x0a, 0xb5, 0xb0, 0x3e, 0x74, 0x3d, 0xc7, 0x36, 0x7b, 0x2d, 0xea, 0x7e, + 0x44, 0xe6, 0xaa, 0x83, 0xc9, 0xea, 0x53, 0x83, 0x46, 0x45, 0x0c, 0xbe, 0x27, 0x26, 0x2d, 0x6f, + 0x0d, 0x4a, 0x28, 0xa6, 0x7d, 0x7d, 0x36, 0x6c, 0x5f, 0x6d, 0xae, 0x7d, 0x3d, 0xe5, 0x10, 0xb4, + 0xd3, 0x35, 0xb5, 0xda, 0x78, 0x53, 0xd1, 0xc8, 0x39, 0x3f, 0xd8, 0xff, 0x92, 0xb5, 0x2f, 0x48, + 0xe0, 0x94, 0x6e, 0x0f, 0x9b, 0xca, 0xb0, 0x6a, 0xf4, 0x56, 0x16, 0x9a, 0x0d, 0x5e, 0xa4, 0x77, + 0x0c, 0xad, 0xf6, 0x70, 0x9a, 0x31, 0x12, 0xfd, 0x9d, 0x50, 0xa2, 0x2d, 0x4e, 0xa2, 0x77, 0x8d, + 0x4f, 0x3a, 0x9d, 0x40, 0x1b, 0x13, 0xed, 0xbb, 0xf2, 0xda, 0x5f, 0x48, 0xe0, 0x04, 0xf1, 0x20, + 0xbc, 0x9b, 0xcc, 0x9c, 0x70, 0x6f, 0xcf, 0x5b, 0x5f, 0xbd, 0x68, 0x96, 0x45, 0xf4, 0x9b, 0x49, + 0xd1, 0x5e, 0xc7, 0x0a, 0xfc, 0x1e, 0x5e, 0xe0, 0x31, 0xfd, 0xf8, 0x60, 0x71, 0x31, 0xb2, 0xfe, + 0xcd, 0x50, 0xd6, 0x0d, 0x4e, 0xd6, 0x77, 0x8c, 0x45, 0xf5, 0x68, 0xc5, 0xfc, 0x8d, 0x3c, 0x78, + 0x30, 0xe1, 0x90, 0x2a, 0x02, 0xe9, 0x07, 0xcb, 0x76, 0xd7, 0x80, 0x9e, 0x6f, 0xba, 0x3e, 0x17, + 0x57, 0x67, 0x60, 0x6a, 0x9e, 0xcb, 0x60, 0x6a, 0x2e, 0x8d, 0x9c, 0x9a, 0x6b, 0xef, 0x61, 0x0d, + 0xbc, 0xf3, 0x3c, 0xb2, 0xe5, 0x04, 0x0c, 0x62, 0x6a, 0x18, 0xd7, 0xa2, 0x42, 0xcb, 0xef, 0x07, + 0x39, 0x94, 0x57, 0x0e, 0x5d, 0x42, 0x3a, 0xc4, 0x7f, 0x63, 0xb2, 0x96, 0x78, 0x9e, 0x7d, 0xc7, + 0x9b, 0x8d, 0x4a, 0x37, 0xd3, 0x29, 0xd4, 0x8b, 0x4b, 0x60, 0x16, 0x77, 0x39, 0x75, 0xcb, 0xbe, + 0xa8, 0xfd, 0xb9, 0x0c, 0xe6, 0x1b, 0xf0, 0x72, 0x65, 0xd7, 0xec, 0xf5, 0xa0, 0xbd, 0x03, 0xb5, + 0xfb, 0x38, 0xdb, 0xde, 0xec, 0xf7, 0x1b, 0xd1, 0xfe, 0x70, 0xf0, 0xa8, 0xde, 0x05, 0x0a, 0x5e, + 0xc7, 0x09, 0xa3, 0x3b, 0x7c, 0x5f, 0xcc, 0xea, 0x75, 0x79, 0xdf, 0xdf, 0x5d, 0xc2, 0x65, 0x95, + 0xfb, 0x56, 0x0b, 0x7d, 0x60, 0x90, 0xef, 0xe8, 0x38, 0xf9, 0x57, 0x43, 0x3b, 0xe3, 0x5c, 0x42, + 0x67, 0x1c, 0x32, 0xbe, 0xc4, 0x32, 0x1d, 0xb3, 0x48, 0x72, 0x3d, 0x98, 0xeb, 0x04, 0x59, 0xc2, + 0x53, 0x7a, 0x6c, 0x92, 0xf6, 0x97, 0xa9, 0xba, 0x6b, 0xa1, 0xc2, 0xd3, 0x69, 0x15, 0x9c, 0xb0, + 0xa9, 0x79, 0x35, 0x38, 0xd1, 0x6e, 0x36, 0xb7, 0xd6, 0xcb, 0x8d, 0x7b, 0xa3, 0xc0, 0x39, 0xdb, + 0xda, 0x2b, 0xf2, 0x60, 0xb1, 0xe5, 0xf4, 0x2e, 0xc1, 0x08, 0xe7, 0x1a, 0xe7, 0xfe, 0xc9, 0xca, + 0x29, 0x77, 0x40, 0x4e, 0xea, 0x29, 0x50, 0x34, 0x6d, 0xef, 0x32, 0x0c, 0xcc, 0x7f, 0xfa, 0x44, + 0x61, 0xfc, 0x28, 0xdb, 0x11, 0x18, 0x3c, 0x8c, 0x77, 0x8e, 0x90, 0x24, 0xcf, 0x55, 0x0c, 0x90, + 0x67, 0xc1, 0xbc, 0x47, 0xbc, 0x44, 0xda, 0x8c, 0x33, 0x10, 0x97, 0x86, 0x59, 0x24, 0x6e, 0x4a, + 0x32, 0x65, 0x11, 0x3f, 0x69, 0xaf, 0x0d, 0xfb, 0x8f, 0x4d, 0x0e, 0xe2, 0xf2, 0x61, 0x18, 0x4b, + 0x07, 0xf2, 0xab, 0x26, 0x3d, 0x89, 0x3f, 0x0d, 0x4e, 0x06, 0x27, 0xd4, 0x2b, 0x6b, 0xe5, 0x7a, + 0x5d, 0x6f, 0xac, 0xea, 0x5b, 0xb5, 0x2a, 0xd9, 0x4f, 0x8e, 0x52, 0xca, 0xed, 0xb6, 0xbe, 0xbe, + 0xd1, 0x6e, 0x6d, 0xe9, 0x4f, 0xab, 0xe8, 0x7a, 0x15, 0x3b, 0x60, 0xe3, 0x13, 0x94, 0x81, 0xab, + 0x7c, 0xb9, 0xd1, 0x3a, 0xaf, 0x1b, 0xca, 0xee, 0xd9, 0x32, 0x98, 0x63, 0x06, 0x0a, 0xc4, 0x5d, + 0x15, 0x6e, 0x9b, 0xfb, 0x3d, 0x6a, 0x8e, 0x2b, 0xc7, 0x10, 0x77, 0x58, 0x36, 0x4d, 0xbb, 0x77, + 0x45, 0xc9, 0xa9, 0x0a, 0x98, 0x67, 0xc7, 0x04, 0x45, 0xd2, 0xbe, 0x79, 0x1d, 0x98, 0x3d, 0xef, + 0xb8, 0x17, 0xb1, 0xd7, 0xb0, 0xf6, 0x01, 0x12, 0x60, 0x2f, 0x88, 0x28, 0xc1, 0x18, 0x60, 0xaf, + 0x12, 0x77, 0x13, 0x0b, 0xa8, 0x2d, 0x8d, 0x8c, 0x1a, 0x71, 0x3d, 0x98, 0xbb, 0x1c, 0xe4, 0x8e, + 0x5a, 0x3a, 0x93, 0xa4, 0xfd, 0xb2, 0x98, 0xe3, 0xd7, 0xe8, 0x22, 0xb3, 0x5f, 0xf5, 0x7f, 0xbb, + 0x04, 0x8a, 0xab, 0xd0, 0x2f, 0xf7, 0x7a, 0xac, 0xdc, 0x5e, 0x26, 0x7c, 0x8e, 0x94, 0xab, 0x44, + 0xb9, 0xd7, 0x8b, 0x6f, 0x54, 0x8c, 0x80, 0x82, 0xf3, 0x4e, 0x5c, 0x9a, 0xa0, 0x97, 0xf6, 0x88, + 0x02, 0xb3, 0x97, 0xd8, 0xdf, 0x45, 0xae, 0xd9, 0xaf, 0x67, 0xcc, 0xa4, 0xc7, 0x44, 0xc1, 0x15, + 0x73, 0xc9, 0x4e, 0x52, 0x41, 0x3e, 0xf5, 0x1e, 0x30, 0xb3, 0xef, 0xc1, 0x8a, 0xe9, 0x05, 0x43, + 0x1b, 0x5f, 0xd3, 0xe6, 0x85, 0xfb, 0x60, 0xc7, 0x5f, 0xaa, 0xed, 0xa1, 0x89, 0xcf, 0x26, 0xc9, + 0x18, 0xc6, 0x2b, 0xa4, 0xcf, 0x46, 0x40, 0x01, 0x4d, 0x3b, 0x2f, 0x5b, 0xfe, 0x6e, 0x65, 0xd7, + 0xf4, 0xe9, 0x66, 0x4b, 0xf8, 0xac, 0x7d, 0x68, 0x0c, 0x38, 0x13, 0x1d, 0x76, 0xe2, 0x8f, 0xa3, + 0xdf, 0x0c, 0x14, 0x6c, 0xfe, 0x58, 0xf6, 0x0e, 0xe1, 0x3f, 0x9c, 0x63, 0x1e, 0x48, 0x4f, 0x0d, + 0xf8, 0x04, 0x3c, 0x72, 0xc6, 0x01, 0xfc, 0x87, 0x65, 0x90, 0x6f, 0xf6, 0xa1, 0x2d, 0x7c, 0x4e, + 0x33, 0xc4, 0x41, 0x1a, 0xc0, 0xe1, 0x7d, 0xe2, 0x2e, 0xc4, 0x61, 0xa5, 0x51, 0xc9, 0x31, 0x28, + 0xdc, 0x0a, 0xf2, 0x96, 0xbd, 0xed, 0x50, 0x2b, 0xf8, 0xda, 0x18, 0xbb, 0xa8, 0x66, 0x6f, 0x3b, + 0x06, 0xce, 0xa8, 0xbd, 0x4f, 0xcc, 0x7b, 0x38, 0xa9, 0xec, 0x74, 0xe2, 0x5e, 0x19, 0x63, 0x2c, + 0x52, 0xc1, 0x62, 0x64, 0xa2, 0xd6, 0x9b, 0xe5, 0xaa, 0xd2, 0xd5, 0xfe, 0xb6, 0x04, 0x8a, 0x44, + 0x6d, 0xb4, 0x97, 0xc8, 0x40, 0x2e, 0x77, 0xbb, 0x31, 0x60, 0x48, 0x07, 0xc0, 0x70, 0x02, 0x2d, + 0xa4, 0x9e, 0xde, 0xc1, 0x33, 0x1f, 0x95, 0x4f, 0x70, 0x6c, 0xa0, 0x4d, 0xb2, 0xdc, 0xed, 0xc6, + 0x9f, 0x7b, 0x08, 0x0b, 0x94, 0xf8, 0x02, 0xd9, 0x1e, 0x42, 0x16, 0xeb, 0x21, 0x52, 0x0f, 0x24, + 0xb1, 0xfc, 0x65, 0xdf, 0x4a, 0xfe, 0x41, 0x02, 0x33, 0x75, 0xcb, 0xf3, 0x11, 0x36, 0x65, 0x11, + 0x6c, 0xae, 0x03, 0xb3, 0x81, 0x68, 0x50, 0x97, 0x89, 0xc6, 0x83, 0x28, 0x81, 0x9f, 0xc9, 0xdf, + 0xcd, 0xa3, 0xf3, 0xb8, 0xe4, 0xda, 0x53, 0x2e, 0xe2, 0xcf, 0xc4, 0x45, 0xc5, 0x4a, 0x83, 0xc5, + 0xfe, 0x4a, 0x28, 0xf0, 0x75, 0x4e, 0xe0, 0xb7, 0x8f, 0x53, 0x64, 0xf6, 0x42, 0xff, 0x43, 0x09, + 0x00, 0x54, 0x36, 0x3d, 0x78, 0xfc, 0x08, 0x2e, 0x9c, 0x48, 0x82, 0x74, 0x5f, 0xc1, 0x4a, 0x77, + 0x9d, 0x97, 0xee, 0x0f, 0x8c, 0xae, 0x6a, 0xd2, 0x01, 0x63, 0x55, 0x01, 0xb2, 0x15, 0x8a, 0x16, + 0xfd, 0xd5, 0xde, 0x1e, 0x0a, 0x75, 0x83, 0x13, 0xea, 0x9d, 0x63, 0x96, 0x94, 0xbd, 0x5c, 0xff, + 0x58, 0x02, 0x33, 0x2d, 0xe8, 0xa3, 0xae, 0x53, 0x3b, 0x27, 0xd2, 0xeb, 0x33, 0x6d, 0x5b, 0x12, + 0x6c, 0xdb, 0xdf, 0xce, 0x89, 0x06, 0x96, 0x8b, 0x24, 0x43, 0x79, 0x8a, 0x59, 0xbd, 0x78, 0xbd, + 0x50, 0x60, 0xb9, 0x51, 0xd4, 0xb2, 0x97, 0xee, 0x5b, 0xa5, 0xd0, 0xd3, 0x84, 0x3f, 0x17, 0xc8, + 0x9a, 0xd5, 0xb9, 0x83, 0x66, 0xb5, 0xf8, 0xb9, 0x40, 0xb6, 0x8e, 0xf1, 0x8e, 0x0d, 0xa9, 0x0d, + 0x90, 0x09, 0xf8, 0x1c, 0x8c, 0x23, 0xaf, 0x67, 0xcb, 0xa0, 0x48, 0x37, 0x1f, 0xee, 0x4a, 0xde, + 0x7b, 0x18, 0x3d, 0x35, 0x79, 0xff, 0x18, 0xa6, 0x60, 0xd2, 0xb2, 0x7e, 0xc8, 0x86, 0xc4, 0xb0, + 0x71, 0x0b, 0x28, 0xe0, 0x90, 0xea, 0x74, 0x9c, 0x8b, 0xdc, 0x45, 0x02, 0x12, 0x3a, 0x7a, 0x6b, + 0x90, 0x4c, 0xa9, 0x51, 0x98, 0xc0, 0x4e, 0xc0, 0x38, 0x28, 0x7c, 0x43, 0x05, 0x60, 0x63, 0xff, + 0x42, 0xcf, 0xf2, 0x76, 0x2d, 0x1b, 0xfb, 0x98, 0xcd, 0xd3, 0x47, 0x12, 0x19, 0x3c, 0xd1, 0x24, + 0x8c, 0x35, 0x0a, 0x14, 0x20, 0xef, 0xbb, 0x16, 0x35, 0x91, 0xd1, 0x5f, 0xf5, 0x49, 0xa1, 0xb7, + 0x66, 0x7e, 0x20, 0xf0, 0x0b, 0x12, 0x43, 0xc4, 0xc1, 0x12, 0x53, 0x7a, 0xe4, 0xb5, 0xc9, 0x86, + 0x7f, 0x2f, 0xf0, 0xe1, 0xdf, 0xb9, 0xd3, 0xe0, 0xc5, 0x81, 0xd3, 0xe0, 0x08, 0x47, 0xcf, 0x7a, + 0x26, 0xc4, 0xae, 0x4b, 0xb2, 0x81, 0xff, 0xa3, 0x2f, 0xb0, 0x7b, 0x11, 0xf6, 0xee, 0x23, 0x67, + 0x0e, 0xa2, 0x04, 0xb6, 0xcf, 0x9b, 0x15, 0xec, 0xf3, 0x3e, 0x16, 0xcd, 0x9d, 0x1c, 0x41, 0x63, + 0x3a, 0x85, 0xe4, 0x38, 0x76, 0xf3, 0x03, 0xec, 0x6a, 0x9f, 0x14, 0x0e, 0xe4, 0xc9, 0xc8, 0x38, + 0x71, 0x16, 0x44, 0x39, 0x90, 0x42, 0x0e, 0x98, 0x3d, 0xe4, 0xa4, 0x1e, 0x78, 0x14, 0xfd, 0x74, + 0xba, 0xbc, 0x37, 0x9e, 0x8d, 0x1d, 0x1c, 0xab, 0x6f, 0x2e, 0xdf, 0xad, 0x57, 0xda, 0x0a, 0x3c, + 0x78, 0xd4, 0x1e, 0x1f, 0xaa, 0x27, 0x07, 0xe8, 0xa3, 0x35, 0x1d, 0xed, 0x7f, 0x48, 0xa0, 0x48, + 0xcd, 0x8d, 0xbb, 0x0e, 0x09, 0xa1, 0xf6, 0xca, 0x71, 0x20, 0x49, 0x8c, 0x6e, 0xf2, 0xb9, 0xb4, + 0x00, 0x4c, 0xc0, 0xc0, 0xb8, 0x37, 0x33, 0x00, 0xb4, 0x7f, 0x96, 0x40, 0x1e, 0x99, 0x41, 0x62, + 0xb1, 0x23, 0x3e, 0x2b, 0xec, 0x52, 0xcc, 0x08, 0x00, 0x91, 0x8f, 0xd1, 0xef, 0x65, 0x30, 0xdb, + 0x27, 0x19, 0xc3, 0xc8, 0x25, 0x37, 0x08, 0x74, 0x46, 0xd0, 0x88, 0x3e, 0x63, 0xa6, 0x9c, 0x49, + 0x6e, 0xc9, 0xc9, 0xfc, 0xa4, 0x83, 0x43, 0x9f, 0x44, 0x98, 0x89, 0x6d, 0xed, 0xdf, 0x24, 0x00, + 0x0c, 0xe8, 0x39, 0xbd, 0x4b, 0x70, 0xd3, 0xb5, 0xb4, 0x6b, 0x23, 0x00, 0x68, 0xb3, 0xcf, 0x45, + 0xcd, 0xfe, 0xf3, 0x92, 0xa8, 0xf3, 0x30, 0xa7, 0x79, 0x01, 0xf1, 0x18, 0xf1, 0x3f, 0x19, 0xcc, + 0x50, 0x39, 0x52, 0x9b, 0x52, 0x4c, 0xf8, 0xc1, 0x47, 0xda, 0x07, 0x85, 0x9c, 0x8f, 0x45, 0x38, + 0x4a, 0x07, 0x40, 0x65, 0x0c, 0x00, 0x8e, 0x83, 0xb9, 0x00, 0x80, 0x4d, 0xa3, 0xa6, 0x40, 0xed, + 0xdd, 0x32, 0xf6, 0xd0, 0x20, 0x83, 0xdb, 0xe1, 0x7b, 0x9a, 0xbf, 0x10, 0x9e, 0xec, 0x33, 0xf2, + 0x08, 0xcb, 0xcf, 0x08, 0xa0, 0xdf, 0x15, 0x9a, 0xdd, 0x0b, 0x30, 0xf4, 0x40, 0xe9, 0xaf, 0xce, + 0xea, 0x60, 0x81, 0xb3, 0x4a, 0xd4, 0xd3, 0xe0, 0x24, 0x97, 0x40, 0xc6, 0xbb, 0xae, 0x72, 0x4c, + 0xd5, 0xc0, 0x29, 0xee, 0x0d, 0x7d, 0x80, 0x5d, 0x25, 0xa7, 0xbd, 0xeb, 0x4f, 0x72, 0xe1, 0x7a, + 0xcf, 0xfb, 0xf3, 0x74, 0xf5, 0xed, 0xd3, 0x7c, 0xb0, 0xcc, 0x8e, 0x63, 0xfb, 0xf0, 0x7e, 0xc6, + 0xcd, 0x25, 0x4c, 0x48, 0xb4, 0x1a, 0x4e, 0x83, 0x19, 0xdf, 0x65, 0x5d, 0x5f, 0x82, 0x47, 0x56, + 0xb1, 0x0a, 0xbc, 0x62, 0x35, 0xc0, 0x59, 0xcb, 0xee, 0xf4, 0xf6, 0xbb, 0xd0, 0x80, 0x3d, 0x13, + 0xc9, 0xd0, 0x2b, 0x7b, 0x55, 0xd8, 0x87, 0x76, 0x17, 0xda, 0x3e, 0xe1, 0x33, 0x38, 0x37, 0x2b, + 0x90, 0x93, 0x57, 0xc6, 0x27, 0xf1, 0xca, 0xf8, 0x88, 0x61, 0x4b, 0xc0, 0x09, 0x6b, 0x80, 0xb7, + 0x03, 0x40, 0xea, 0x76, 0xce, 0x82, 0x97, 0xa9, 0x1a, 0x0e, 0xc6, 0xbf, 0x6f, 0x86, 0x19, 0x0c, + 0x26, 0xb3, 0xf6, 0xd5, 0x50, 0xfd, 0x9e, 0xc2, 0xa9, 0xdf, 0x2d, 0x82, 0x2c, 0xa4, 0xd3, 0xba, + 0xfe, 0x18, 0x5a, 0xb7, 0x00, 0x66, 0xa3, 0xdd, 0x68, 0x59, 0xbd, 0x06, 0x5c, 0x1d, 0x78, 0x28, + 0x37, 0x74, 0xbd, 0xda, 0xda, 0xda, 0xdc, 0x58, 0x35, 0xca, 0x55, 0x5d, 0x01, 0x48, 0x3f, 0x89, + 0x5e, 0x86, 0x8e, 0xc5, 0x79, 0xed, 0x8f, 0x24, 0x50, 0xc0, 0x87, 0xbe, 0xb5, 0xa7, 0x4f, 0x48, + 0x73, 0x3c, 0xce, 0x69, 0x2a, 0x1c, 0x77, 0xc5, 0xef, 0xb7, 0xa1, 0xc2, 0xc4, 0x5c, 0x1d, 0xea, + 0x7e, 0x9b, 0x04, 0x42, 0xd9, 0xcf, 0x84, 0x50, 0x93, 0x6c, 0xed, 0x3a, 0x97, 0xff, 0x33, 0x37, + 0x49, 0x54, 0xff, 0x23, 0x6e, 0x92, 0x43, 0x58, 0x98, 0x7a, 0x93, 0x1c, 0xd2, 0xee, 0x12, 0x9a, + 0xa9, 0xf6, 0xd1, 0x42, 0x38, 0xff, 0xfb, 0x94, 0x74, 0xa8, 0xbd, 0xb3, 0x32, 0x58, 0xb0, 0x6c, + 0x1f, 0xba, 0xb6, 0xd9, 0x5b, 0xe9, 0x99, 0x3b, 0x81, 0x7d, 0x7a, 0xed, 0x81, 0xab, 0x3f, 0xa2, + 0x3c, 0x06, 0xff, 0x85, 0x7a, 0x06, 0x00, 0x1f, 0xee, 0xf5, 0x7b, 0xa6, 0x1f, 0xa9, 0x1e, 0x93, + 0xc2, 0x6a, 0x5f, 0x9e, 0xd7, 0xbe, 0x47, 0x83, 0xab, 0x08, 0x68, 0xed, 0x2b, 0x7d, 0xb8, 0x69, + 0x5b, 0xcf, 0xd8, 0xc7, 0xb1, 0x95, 0x89, 0x8e, 0x0e, 0x7b, 0xc5, 0xed, 0x0a, 0x15, 0xf9, 0x5d, + 0x21, 0xf5, 0x4e, 0x70, 0x0d, 0x0e, 0x9b, 0x8d, 0x6f, 0x25, 0x39, 0x6f, 0x75, 0x77, 0xa0, 0x5f, + 0xdb, 0x5e, 0xb7, 0x3c, 0xcf, 0xb2, 0x77, 0xf0, 0x74, 0xbc, 0x64, 0xc4, 0x67, 0xd0, 0xfe, 0x97, + 0x70, 0xdc, 0xa6, 0xa0, 0xcf, 0x18, 0x11, 0xb7, 0xc9, 0xe1, 0xb7, 0xed, 0xa2, 0x76, 0x1a, 0xae, + 0xea, 0xe4, 0x05, 0x56, 0x75, 0x58, 0x4c, 0x0b, 0x82, 0xab, 0x03, 0xaf, 0x11, 0x0a, 0x0c, 0x95, + 0x54, 0x8d, 0xec, 0xfb, 0xbe, 0x6f, 0xc9, 0x60, 0x91, 0x14, 0xbd, 0xec, 0x38, 0x17, 0xf7, 0x4c, + 0xf7, 0xa2, 0xf6, 0xd3, 0x87, 0xdb, 0x05, 0x4e, 0xdc, 0xbd, 0x8a, 0xdb, 0xd2, 0x1d, 0x50, 0xde, + 0xfc, 0xa0, 0xf2, 0x6a, 0xbf, 0x23, 0x3c, 0x25, 0xe1, 0xe4, 0x19, 0x54, 0x6a, 0x3a, 0xdb, 0x5b, + 0x62, 0xc7, 0x23, 0x45, 0x18, 0xcc, 0x1e, 0xf8, 0xdf, 0x0a, 0x81, 0x0f, 0xc6, 0x11, 0x76, 0x67, + 0x60, 0x92, 0xb8, 0x6b, 0x5f, 0x1b, 0x0f, 0xbb, 0x80, 0xaf, 0x31, 0xb0, 0x53, 0x80, 0x7c, 0x31, + 0x74, 0x66, 0x42, 0x7f, 0xd9, 0x0a, 0xe5, 0xb3, 0x43, 0x33, 0x86, 0xe5, 0xa9, 0xa0, 0x79, 0x92, + 0x67, 0xa1, 0xd9, 0xcf, 0x14, 0xd3, 0xaf, 0x08, 0xef, 0xb8, 0x0d, 0x15, 0x10, 0xe1, 0x6e, 0x3a, + 0xad, 0x52, 0x6c, 0xbb, 0x4e, 0x9c, 0xcd, 0xec, 0xd1, 0x7c, 0x61, 0x01, 0xcc, 0x06, 0xf1, 0xb3, + 0xf0, 0x75, 0x93, 0x21, 0x86, 0xa7, 0x40, 0xd1, 0x73, 0xf6, 0xdd, 0x0e, 0xa4, 0x7b, 0xa0, 0xf4, + 0x69, 0x8c, 0xfd, 0xba, 0x91, 0xe6, 0xc2, 0x01, 0x8b, 0x24, 0x9f, 0xda, 0x22, 0x89, 0xb7, 0x77, + 0x13, 0xec, 0x07, 0xed, 0x45, 0xc2, 0xd7, 0x86, 0x70, 0x98, 0xb5, 0xa0, 0xff, 0x40, 0x34, 0x02, + 0x7e, 0x5d, 0x68, 0x37, 0x68, 0x44, 0x4d, 0xd2, 0xa9, 0x5c, 0x73, 0x0c, 0x3b, 0xf8, 0x5a, 0xf0, + 0xa0, 0x20, 0x07, 0x35, 0x80, 0xb1, 0xc1, 0xbb, 0x69, 0xd4, 0x15, 0x59, 0x7b, 0x76, 0x1e, 0x28, + 0x84, 0xb5, 0x66, 0x68, 0x0b, 0x6a, 0x2f, 0xcb, 0x1d, 0xb5, 0xc1, 0x1b, 0x3f, 0x83, 0xe5, 0xee, + 0x34, 0x4c, 0x0c, 0x36, 0xce, 0x09, 0x3e, 0xaa, 0x5d, 0x8c, 0x26, 0x8d, 0xd1, 0xcc, 0x12, 0x94, + 0x4f, 0x7b, 0x4b, 0x4e, 0x24, 0x76, 0xb9, 0x18, 0x8b, 0xd9, 0xf7, 0x4a, 0xdf, 0xce, 0x07, 0x61, + 0x10, 0x57, 0x5c, 0x67, 0x6f, 0xd3, 0xed, 0x69, 0xff, 0x47, 0xe8, 0x6a, 0x88, 0x98, 0xd9, 0x85, + 0x14, 0x3f, 0xbb, 0xc0, 0x2b, 0xd2, 0xbd, 0x68, 0x2b, 0xac, 0x37, 0xc6, 0xf0, 0xad, 0xde, 0x08, + 0x16, 0xcd, 0x6e, 0x77, 0xc3, 0xdc, 0x81, 0x15, 0x34, 0x6d, 0xb7, 0x7d, 0x1a, 0x22, 0x6d, 0x20, + 0x35, 0x71, 0x2a, 0xc3, 0xf7, 0x91, 0x33, 0x07, 0xac, 0x52, 0xf1, 0x65, 0x58, 0x0e, 0x44, 0x2a, + 0xbf, 0xa9, 0x0c, 0x7f, 0x68, 0xc8, 0xe8, 0xec, 0x9a, 0x51, 0x40, 0x47, 0xfa, 0x24, 0xe8, 0x8b, + 0x25, 0xc0, 0x77, 0xf6, 0x9a, 0xf7, 0x6b, 0x12, 0x98, 0x41, 0x78, 0x94, 0xbb, 0x5d, 0xed, 0xe1, + 0x5c, 0xdc, 0xd3, 0x58, 0x6f, 0xb8, 0xe7, 0x0b, 0xbb, 0x26, 0x06, 0x35, 0x24, 0xf4, 0x63, 0x30, + 0x89, 0x84, 0x28, 0x71, 0x42, 0x14, 0x8b, 0x5f, 0x9a, 0x58, 0x44, 0xf6, 0xe2, 0xfb, 0xac, 0x04, + 0x16, 0x82, 0x79, 0xc6, 0x0a, 0xf4, 0x3b, 0xbb, 0xda, 0xed, 0xa2, 0xeb, 0x5c, 0xb4, 0x25, 0x86, + 0x5b, 0xc2, 0x3d, 0xed, 0xbb, 0xb9, 0x94, 0x2a, 0xcf, 0x95, 0x1c, 0xb3, 0x48, 0x98, 0x4a, 0x17, + 0x93, 0x08, 0x66, 0x2f, 0xcc, 0xaf, 0x4a, 0x00, 0xb4, 0x9d, 0x70, 0xb2, 0x7c, 0x08, 0x49, 0xfe, + 0x8c, 0xf0, 0x6e, 0x31, 0xad, 0x78, 0x54, 0x6c, 0xfa, 0x9e, 0x43, 0xd0, 0x99, 0x6a, 0x54, 0x49, + 0x53, 0x69, 0xeb, 0xb3, 0xd5, 0xfd, 0x7e, 0xcf, 0xea, 0x98, 0xfe, 0xa0, 0x07, 0x60, 0xbc, 0x78, + 0xf1, 0x5d, 0xed, 0xa9, 0x8c, 0xc6, 0xb0, 0x8c, 0x18, 0x59, 0x92, 0x38, 0x41, 0x52, 0x10, 0x27, + 0x48, 0xd0, 0xab, 0x67, 0x04, 0xf1, 0x29, 0xa8, 0xa7, 0x0c, 0x8e, 0x37, 0xfb, 0xd0, 0x5e, 0x76, + 0xa1, 0xd9, 0xed, 0xb8, 0xfb, 0x7b, 0x17, 0x3c, 0xd6, 0x7d, 0x35, 0x59, 0x47, 0x99, 0x95, 0x6b, + 0x89, 0x5b, 0xb9, 0xd6, 0x7e, 0x4c, 0x16, 0x8d, 0xe4, 0xc6, 0xec, 0xaf, 0x30, 0x3c, 0x8c, 0x31, + 0xd4, 0xa5, 0x72, 0xba, 0x1a, 0x58, 0xa4, 0xce, 0xa7, 0x59, 0xa4, 0x7e, 0xb3, 0x50, 0x5c, 0x38, + 0xa1, 0x7a, 0x4d, 0xc5, 0x77, 0x6e, 0xb1, 0x05, 0xfd, 0x18, 0x78, 0x6f, 0x00, 0x0b, 0x17, 0xa2, + 0x37, 0x21, 0xc4, 0x7c, 0xe2, 0x10, 0x8f, 0xd6, 0xb7, 0xa6, 0x5d, 0xa1, 0xe1, 0x59, 0x88, 0x41, + 0x37, 0x44, 0x50, 0x12, 0x71, 0x9b, 0x4b, 0xb5, 0xdc, 0x92, 0x58, 0x7e, 0xf6, 0x28, 0x7c, 0x52, + 0x02, 0x73, 0xf8, 0x06, 0xfa, 0xe5, 0x2b, 0xf8, 0x20, 0xa8, 0xa0, 0x51, 0xf2, 0x42, 0x56, 0xcc, + 0x2a, 0xc8, 0xf7, 0x2c, 0xfb, 0x62, 0xe0, 0xef, 0x88, 0xfe, 0x47, 0x57, 0x9c, 0x4a, 0x43, 0xae, + 0x38, 0x0d, 0xb7, 0x49, 0xc2, 0x72, 0x63, 0x46, 0xd3, 0x37, 0x08, 0x5d, 0xbf, 0x3e, 0x92, 0x5c, + 0xf6, 0x62, 0xfc, 0xeb, 0x3c, 0x28, 0xb6, 0xa0, 0xe9, 0x76, 0x76, 0xb5, 0xf7, 0x4b, 0x43, 0xa7, + 0x12, 0x25, 0x7e, 0x2a, 0xb1, 0x02, 0x66, 0xb6, 0xad, 0x9e, 0x0f, 0x5d, 0xe2, 0x03, 0xce, 0x76, + 0xed, 0xa4, 0x89, 0x2f, 0xf7, 0x9c, 0xce, 0xc5, 0x25, 0x6a, 0xda, 0x2f, 0x05, 0xf1, 0xa6, 0x97, + 0x56, 0xf0, 0x47, 0x46, 0xf0, 0x31, 0x32, 0x08, 0x3d, 0xc7, 0xf5, 0xe3, 0xee, 0x2f, 0x8a, 0xa1, + 0xd2, 0x72, 0x5c, 0xdf, 0x20, 0x1f, 0x22, 0x98, 0xb7, 0xf7, 0x7b, 0xbd, 0x36, 0xbc, 0xdf, 0x0f, + 0xa6, 0x75, 0xc1, 0x33, 0x32, 0x16, 0x9d, 0xed, 0x6d, 0x0f, 0x92, 0x45, 0x85, 0x82, 0x41, 0x9f, + 0xd4, 0x93, 0xa0, 0xd0, 0xb3, 0xf6, 0x2c, 0x32, 0x11, 0x29, 0x18, 0xe4, 0x41, 0xbd, 0x19, 0x28, + 0xd1, 0x1c, 0x88, 0x30, 0x7a, 0xba, 0x88, 0x9b, 0xe6, 0x81, 0x74, 0xa4, 0x33, 0x17, 0xe1, 0x15, + 0xef, 0xf4, 0x0c, 0x7e, 0x8f, 0xff, 0x6b, 0xaf, 0x4d, 0xbb, 0x61, 0x42, 0x24, 0x1e, 0x3f, 0xc3, + 0x75, 0x61, 0xc7, 0x71, 0xbb, 0x81, 0x6c, 0xe2, 0x27, 0x18, 0x34, 0x5f, 0xba, 0x6d, 0x8e, 0xa1, + 0x85, 0x67, 0xaf, 0x69, 0xef, 0x29, 0xa2, 0x6e, 0x13, 0x15, 0x7d, 0xde, 0xf2, 0x77, 0xd7, 0xa1, + 0x6f, 0x6a, 0x7f, 0x2d, 0x0f, 0xd5, 0xb8, 0xb9, 0xff, 0x5f, 0xe3, 0x46, 0x68, 0x1c, 0x89, 0x19, + 0xe6, 0xef, 0xbb, 0x36, 0x92, 0x23, 0xf5, 0xa3, 0x65, 0x52, 0xd4, 0x3b, 0xc1, 0x35, 0xd1, 0x53, + 0xb0, 0x94, 0x5a, 0x65, 0x5c, 0x6b, 0x4b, 0x46, 0x7c, 0x06, 0x75, 0x03, 0x3c, 0x8c, 0xbc, 0x5c, + 0x6b, 0xaf, 0xd7, 0xd7, 0xac, 0x9d, 0xdd, 0x9e, 0xb5, 0xb3, 0xeb, 0x7b, 0x35, 0xdb, 0xf3, 0xa1, + 0xd9, 0x6d, 0x6e, 0x1b, 0xe4, 0xe6, 0x31, 0x80, 0xe9, 0x88, 0x64, 0xe5, 0x7d, 0xc4, 0xc5, 0x46, + 0x37, 0x56, 0x53, 0x62, 0x5a, 0xca, 0xe3, 0x51, 0x4b, 0xf1, 0xf6, 0x7b, 0x21, 0xa6, 0xd7, 0x0d, + 0x60, 0x1a, 0xa9, 0xfa, 0x7e, 0x0f, 0x37, 0x17, 0x9c, 0x39, 0xed, 0x38, 0x97, 0xc0, 0x49, 0xf6, + 0xcd, 0xe6, 0xff, 0x14, 0x41, 0x61, 0xd5, 0x35, 0xfb, 0xbb, 0xda, 0xb3, 0x99, 0xfe, 0x79, 0x52, + 0x6d, 0x22, 0xd4, 0x4e, 0x69, 0x94, 0x76, 0xca, 0x23, 0xb4, 0x33, 0xcf, 0x68, 0x67, 0xfc, 0xa2, + 0xf3, 0x59, 0x30, 0xdf, 0x71, 0x7a, 0x3d, 0xd8, 0x41, 0xf2, 0xa8, 0x75, 0xf1, 0x6a, 0xcf, 0xac, + 0xc1, 0xa5, 0xe1, 0x98, 0xfc, 0xd0, 0x6f, 0x91, 0x35, 0x76, 0xa2, 0xf4, 0x51, 0x82, 0xf6, 0x32, + 0x09, 0xe4, 0xf5, 0xee, 0x0e, 0xe4, 0xd6, 0xe1, 0x73, 0xcc, 0x3a, 0xfc, 0x29, 0x50, 0xf4, 0x4d, + 0x77, 0x07, 0xfa, 0xc1, 0x3a, 0x01, 0x79, 0x0a, 0xaf, 0x0a, 0x90, 0x99, 0xab, 0x02, 0x7e, 0x00, + 0xe4, 0x91, 0xcc, 0xa8, 0x5b, 0xfc, 0xc3, 0x86, 0xc1, 0x8f, 0x65, 0xbf, 0x84, 0x4a, 0x5c, 0x42, + 0xb5, 0x36, 0xf0, 0x07, 0x83, 0x58, 0x17, 0x0e, 0x86, 0xb2, 0xbd, 0x0e, 0xcc, 0x5a, 0x1d, 0xc7, + 0xae, 0xed, 0x99, 0x3b, 0x90, 0x56, 0x33, 0x4a, 0x08, 0xde, 0xea, 0x7b, 0xce, 0x7d, 0x16, 0x5d, + 0xd4, 0x8a, 0x12, 0x50, 0x15, 0x76, 0xad, 0x6e, 0x17, 0xda, 0xb4, 0x65, 0xd3, 0xa7, 0xb3, 0x67, + 0x40, 0x1e, 0xf1, 0x80, 0xf4, 0x07, 0x19, 0x0b, 0xca, 0x31, 0x75, 0x1e, 0x35, 0x2b, 0xd2, 0x78, + 0x95, 0x1c, 0xbf, 0xe6, 0x2a, 0xe2, 0x35, 0x44, 0x2a, 0x37, 0xbc, 0x71, 0x3d, 0x0a, 0x14, 0x6c, + 0xa7, 0x0b, 0x47, 0x0e, 0x42, 0x24, 0x97, 0xfa, 0x38, 0x50, 0x80, 0x5d, 0xd4, 0x2b, 0xc8, 0x38, + 0xfb, 0x99, 0x64, 0x59, 0x1a, 0x24, 0x73, 0x3a, 0xd7, 0xa4, 0x61, 0xdc, 0x66, 0xdf, 0x00, 0x7f, + 0x62, 0x06, 0x1c, 0x27, 0x7d, 0x40, 0x6b, 0xff, 0x02, 0x22, 0x75, 0x01, 0x6a, 0xaf, 0x1f, 0x3e, + 0x70, 0x1d, 0xe7, 0x95, 0xfd, 0x24, 0x28, 0x78, 0xfb, 0x17, 0x42, 0x23, 0x94, 0x3c, 0xb0, 0x4d, + 0x57, 0x9a, 0xc8, 0x70, 0x26, 0x8f, 0x3b, 0x9c, 0x71, 0x43, 0x93, 0x1c, 0x34, 0xfe, 0x68, 0x20, + 0x23, 0x07, 0x3a, 0x82, 0x81, 0x6c, 0xd8, 0x30, 0x74, 0x1a, 0xcc, 0x98, 0xdb, 0x3e, 0x74, 0x23, + 0x33, 0x91, 0x3e, 0xa2, 0xa1, 0xf2, 0x02, 0xdc, 0x76, 0x5c, 0x24, 0x16, 0x12, 0x56, 0x36, 0x7c, + 0x66, 0x5a, 0x2e, 0xe0, 0x76, 0xd0, 0x6e, 0x01, 0x27, 0x6c, 0xa7, 0x0a, 0xfb, 0x54, 0xce, 0x04, + 0xc5, 0x05, 0x72, 0xbb, 0xfb, 0x81, 0x17, 0x07, 0xba, 0x92, 0xc5, 0x83, 0x5d, 0x89, 0xf6, 0xf9, + 0xb4, 0x73, 0xe6, 0x01, 0xa0, 0x27, 0x66, 0xa1, 0xa9, 0x4f, 0x04, 0xf3, 0x5d, 0xea, 0x21, 0xd6, + 0xb1, 0xc2, 0x56, 0x12, 0xfb, 0x1d, 0x97, 0x39, 0x52, 0xa4, 0x3c, 0xab, 0x48, 0xab, 0xa0, 0x84, + 0x8f, 0x63, 0x23, 0x4d, 0x2a, 0x0c, 0x78, 0xe4, 0xe3, 0x69, 0x5d, 0x58, 0x29, 0x46, 0x6c, 0x4b, + 0x15, 0xfa, 0x89, 0x11, 0x7e, 0x9c, 0x6e, 0xf6, 0x9d, 0x2c, 0xa1, 0xec, 0x9b, 0xe3, 0xaf, 0x14, + 0xc1, 0x35, 0x15, 0xd7, 0xf1, 0x3c, 0x7c, 0x04, 0x67, 0xb0, 0x61, 0xbe, 0x51, 0xe2, 0x2e, 0x0d, + 0x7a, 0x40, 0x37, 0xbf, 0x61, 0x0d, 0x6a, 0x7a, 0x4d, 0xe3, 0x2f, 0x84, 0x83, 0xde, 0x84, 0xfb, + 0x0f, 0x31, 0x42, 0xff, 0xcf, 0xd1, 0x48, 0xde, 0x93, 0x13, 0x89, 0xc3, 0x93, 0x52, 0x56, 0xd9, + 0x37, 0x97, 0xaf, 0x48, 0xe0, 0xda, 0x41, 0x6e, 0x36, 0x6d, 0x2f, 0x6c, 0x30, 0x0f, 0x19, 0xd1, + 0x5e, 0xf8, 0xb8, 0x2d, 0x89, 0x77, 0x04, 0xc7, 0xd4, 0x9d, 0x29, 0x2d, 0x66, 0xb1, 0x24, 0x3a, + 0xd0, 0x93, 0x74, 0x47, 0x70, 0x6a, 0xf2, 0xd9, 0x0b, 0xf7, 0xf7, 0xf3, 0xe0, 0xf8, 0xaa, 0xeb, + 0xec, 0xf7, 0xbd, 0xa8, 0x07, 0xfa, 0xd3, 0xe1, 0x1b, 0xb2, 0x45, 0x11, 0xd3, 0xe0, 0x7a, 0x30, + 0xe7, 0x52, 0x6b, 0x2e, 0xda, 0x9e, 0x65, 0x93, 0xd8, 0xde, 0x4b, 0x3e, 0x4c, 0xef, 0x15, 0xf5, + 0x33, 0x79, 0xae, 0x9f, 0x19, 0xec, 0x39, 0x0a, 0x43, 0x7a, 0x8e, 0x3f, 0x91, 0x52, 0x0e, 0xaa, + 0x03, 0x22, 0x8a, 0xe9, 0x2f, 0x2a, 0xa0, 0xb8, 0x83, 0x33, 0xd2, 0xee, 0xe2, 0x91, 0x62, 0x35, + 0xc3, 0xc4, 0x0d, 0xfa, 0x69, 0x24, 0x57, 0x99, 0xd5, 0xe1, 0x54, 0x03, 0x5c, 0x32, 0xb7, 0xd9, + 0x2b, 0xd5, 0x6b, 0xf3, 0x60, 0x3e, 0x2c, 0xbd, 0xd6, 0xf5, 0xb8, 0xe8, 0xb0, 0x8c, 0x46, 0x2d, + 0x88, 0x68, 0xd4, 0x81, 0x75, 0xe6, 0x70, 0xd4, 0x91, 0x99, 0x51, 0x67, 0xe8, 0xe8, 0x32, 0x1f, + 0x33, 0xba, 0x68, 0xcf, 0x92, 0x45, 0xaf, 0xdd, 0xe3, 0xbb, 0x56, 0x5c, 0x9b, 0x07, 0xf2, 0x60, + 0x21, 0x78, 0xf9, 0xdf, 0xe8, 0x5a, 0x65, 0xaf, 0x24, 0x1f, 0x91, 0xc0, 0x89, 0x83, 0x9d, 0xf9, + 0x43, 0x79, 0x2f, 0x35, 0x54, 0x27, 0x2f, 0xf4, 0x52, 0xc3, 0x4f, 0xfc, 0x26, 0x5d, 0x62, 0x10, + 0x14, 0xce, 0xde, 0x1b, 0xdd, 0x89, 0x8b, 0x85, 0x39, 0x11, 0x24, 0x9a, 0xbd, 0x00, 0x7f, 0x56, + 0x06, 0xb3, 0x2d, 0xe8, 0xd7, 0xcd, 0x2b, 0xce, 0xbe, 0xaf, 0x99, 0xa2, 0xdb, 0x73, 0x4f, 0x00, + 0xc5, 0x1e, 0xfe, 0x04, 0x77, 0x30, 0x6c, 0xd0, 0x52, 0x76, 0x7f, 0x0b, 0xfb, 0x06, 0x11, 0xd2, + 0x06, 0xcd, 0xcf, 0x47, 0x9f, 0x11, 0xd9, 0x1d, 0x0d, 0xb9, 0x9b, 0xc8, 0xd6, 0x4e, 0xaa, 0xbd, + 0xd3, 0xb8, 0xa2, 0xb3, 0x87, 0xe5, 0xc7, 0x64, 0xb0, 0xd0, 0x82, 0x7e, 0xcd, 0x5b, 0x31, 0x2f, + 0x39, 0xae, 0xe5, 0x43, 0x6d, 0x55, 0x14, 0x9a, 0x33, 0x00, 0x58, 0xe1, 0x67, 0x34, 0x4e, 0x16, + 0x93, 0xa2, 0xbd, 0x25, 0xad, 0xa3, 0x10, 0xc7, 0xc7, 0x44, 0x40, 0x48, 0xe5, 0x63, 0x91, 0x54, + 0xfc, 0x14, 0x2e, 0x0e, 0x97, 0x28, 0x10, 0x65, 0xb7, 0xb3, 0x6b, 0x5d, 0x82, 0xdd, 0x94, 0x40, + 0x04, 0x9f, 0x45, 0x40, 0x84, 0x84, 0x52, 0xbb, 0xaf, 0x70, 0x7c, 0x4c, 0xc2, 0x7d, 0x25, 0x89, + 0xe0, 0x54, 0xc2, 0x5a, 0xa1, 0xae, 0x87, 0xae, 0x67, 0xde, 0x25, 0x2a, 0xd6, 0xc8, 0x64, 0x93, + 0x58, 0x93, 0x6d, 0xac, 0x8e, 0x85, 0x94, 0x3d, 0x4a, 0xa7, 0xf3, 0x59, 0x74, 0x2c, 0x43, 0x8b, + 0xce, 0x5e, 0xe8, 0xef, 0x93, 0xc1, 0xd5, 0x61, 0xbc, 0x97, 0x16, 0xf4, 0xab, 0xa6, 0xb7, 0x7b, + 0xc1, 0x31, 0xdd, 0xae, 0x56, 0x99, 0xc0, 0x81, 0x43, 0xed, 0x8b, 0x2c, 0x08, 0x0d, 0x1e, 0x84, + 0xa1, 0xae, 0xa4, 0x43, 0x79, 0x99, 0x44, 0x27, 0x93, 0xe8, 0xed, 0xfa, 0x8e, 0x10, 0xac, 0xa7, + 0x72, 0x60, 0x3d, 0x69, 0x5c, 0x16, 0xb3, 0x07, 0xee, 0xe7, 0xc9, 0x88, 0xc0, 0x78, 0x3d, 0xdf, + 0x2b, 0x0a, 0x58, 0x8c, 0xd7, 0xab, 0x1c, 0xeb, 0xf5, 0x3a, 0xd6, 0x18, 0x31, 0xd2, 0x63, 0x39, + 0xdb, 0x31, 0xe2, 0x08, 0xbd, 0x91, 0xdf, 0x25, 0x03, 0x05, 0x07, 0xfc, 0x62, 0x3c, 0xc2, 0xd9, + 0xf8, 0xdb, 0xc9, 0xe8, 0x1c, 0xf0, 0x3e, 0x9f, 0x49, 0xeb, 0x7d, 0xae, 0xbd, 0x33, 0xad, 0x8f, + 0xf9, 0x20, 0xb7, 0x13, 0x41, 0x2c, 0x95, 0x0b, 0xf9, 0x08, 0x0e, 0xb2, 0x07, 0xed, 0x27, 0x65, + 0x00, 0x50, 0x83, 0xa6, 0x67, 0x23, 0x9e, 0x26, 0x0a, 0xd7, 0xad, 0xac, 0xdf, 0x3d, 0x02, 0xea, + 0xea, 0x01, 0xa0, 0x08, 0xc5, 0xe8, 0xd4, 0xc5, 0xeb, 0xd3, 0xfa, 0x56, 0x46, 0x5c, 0x4d, 0x04, + 0x96, 0x54, 0xde, 0x96, 0xb1, 0x65, 0x67, 0x0f, 0xc8, 0xaf, 0x4a, 0xa0, 0xd0, 0x76, 0x5a, 0xd0, + 0x3f, 0xbc, 0x29, 0x90, 0x3a, 0x6a, 0x00, 0x2e, 0x77, 0x12, 0x51, 0x03, 0x86, 0x11, 0xca, 0x5e, + 0x74, 0xef, 0x95, 0xc0, 0x7c, 0xdb, 0xa9, 0x84, 0x8b, 0x53, 0xe2, 0xbe, 0xaa, 0xff, 0x9a, 0x4b, + 0xb9, 0x86, 0xc1, 0x16, 0x13, 0x23, 0xb0, 0x54, 0xab, 0x07, 0x09, 0xf4, 0xb2, 0x97, 0xdb, 0xed, + 0xe0, 0xf8, 0xa6, 0xdd, 0x75, 0x0c, 0xd8, 0x75, 0xe8, 0x4a, 0xb7, 0xaa, 0x82, 0xfc, 0xbe, 0xdd, + 0x75, 0x30, 0xcb, 0x05, 0x03, 0xff, 0x47, 0x69, 0x2e, 0xec, 0x3a, 0xd4, 0x37, 0x00, 0xff, 0xd7, + 0xfe, 0x42, 0x06, 0x79, 0xf4, 0xad, 0xb8, 0xa8, 0xdf, 0x25, 0xa7, 0x8c, 0x83, 0x80, 0xc8, 0x4f, + 0xc4, 0x12, 0xba, 0x8b, 0x59, 0xfb, 0x27, 0x1e, 0xac, 0x0f, 0x8b, 0x2b, 0x8f, 0x11, 0x45, 0xb4, + 0xe6, 0xaf, 0x9e, 0x06, 0x33, 0x17, 0x7a, 0x4e, 0xe7, 0x62, 0x74, 0x5c, 0x9f, 0x3e, 0xaa, 0x37, + 0x83, 0x82, 0x6b, 0xda, 0x3b, 0x90, 0xee, 0x29, 0x9c, 0x1c, 0xe8, 0x0b, 0xb1, 0xd7, 0x8b, 0x41, + 0xb2, 0x68, 0xef, 0x4c, 0x13, 0x81, 0x61, 0x48, 0xe5, 0xd3, 0xe9, 0x43, 0x75, 0x8c, 0x93, 0x67, + 0x0a, 0x98, 0xaf, 0x94, 0x1b, 0xe4, 0x1e, 0xc4, 0xe6, 0x39, 0x5d, 0x91, 0x31, 0xcc, 0x48, 0x26, + 0x19, 0xc2, 0x8c, 0xc8, 0xff, 0xa7, 0x85, 0x79, 0x48, 0xe5, 0x8f, 0x02, 0xe6, 0xcf, 0x4a, 0x60, + 0xa1, 0x6e, 0x79, 0x7e, 0x9c, 0xb7, 0x7f, 0x42, 0xbc, 0xdf, 0x17, 0xa5, 0x35, 0x95, 0xb9, 0x72, + 0x84, 0x03, 0xfd, 0xa6, 0x32, 0x87, 0x93, 0x8a, 0x98, 0xce, 0xb1, 0x14, 0xcc, 0x01, 0xb9, 0x04, + 0x5f, 0x58, 0x92, 0xa9, 0x0d, 0xa5, 0xa8, 0x90, 0xe9, 0x1b, 0x4a, 0xb1, 0x65, 0x67, 0x2f, 0xdf, + 0xbf, 0x90, 0xc0, 0x09, 0x54, 0x7c, 0xd2, 0xb2, 0x54, 0xbc, 0x98, 0x47, 0x2e, 0x4b, 0xa5, 0x5e, + 0x19, 0x3f, 0xc0, 0xcb, 0x24, 0x56, 0xc6, 0x47, 0x11, 0x9d, 0xb2, 0x98, 0x63, 0x96, 0x61, 0x47, + 0x89, 0x39, 0x61, 0x19, 0x76, 0x7c, 0x31, 0x27, 0x2f, 0xc5, 0x8e, 0x29, 0xe6, 0x23, 0x5b, 0x60, + 0xfd, 0x25, 0x39, 0x14, 0x73, 0xec, 0xda, 0x46, 0x82, 0x98, 0x53, 0x9f, 0xe8, 0xd5, 0xde, 0x3d, + 0xa6, 0xe0, 0x27, 0xbc, 0xbe, 0x31, 0x0e, 0x4c, 0x47, 0xb8, 0xc6, 0xf1, 0x0b, 0x32, 0x58, 0xa4, + 0x5c, 0x0c, 0x9f, 0x32, 0x27, 0x60, 0x94, 0x7a, 0xca, 0x9c, 0xfa, 0x0c, 0x10, 0xcf, 0xd9, 0xf4, + 0xcf, 0x00, 0x25, 0x96, 0x9f, 0x3d, 0x38, 0x7f, 0x95, 0x07, 0xa7, 0x10, 0x0b, 0xeb, 0x4e, 0xd7, + 0xda, 0xbe, 0x42, 0xb8, 0x38, 0x67, 0xf6, 0xf6, 0xa1, 0xa7, 0x7d, 0x40, 0x12, 0x45, 0xe9, 0xbf, + 0x02, 0xe0, 0xf4, 0xa1, 0x4b, 0xe2, 0xb8, 0x51, 0xa0, 0xee, 0x8c, 0xab, 0xec, 0xc1, 0x92, 0xc2, + 0xeb, 0x73, 0x9a, 0x01, 0x11, 0x83, 0xa1, 0x87, 0xac, 0xc2, 0xd9, 0xf0, 0xcd, 0xa0, 0x83, 0x47, + 0xee, 0xa0, 0x83, 0xc7, 0x4d, 0x40, 0x36, 0xbb, 0xdd, 0x10, 0xaa, 0xc1, 0xcd, 0x6c, 0x5c, 0xa6, + 0x81, 0xb2, 0xa0, 0x9c, 0x1e, 0x8c, 0x8e, 0xe6, 0xc5, 0xe4, 0xf4, 0xa0, 0xaf, 0x2e, 0x81, 0x22, + 0xb9, 0x4e, 0x3c, 0x5c, 0xd1, 0x1f, 0x9e, 0x99, 0xe6, 0xe2, 0x4d, 0xbb, 0x26, 0xaf, 0x86, 0xb7, + 0xa7, 0x92, 0xcc, 0xb0, 0x7e, 0x3a, 0xb2, 0x93, 0x0d, 0x4e, 0xc1, 0x9e, 0x3c, 0x36, 0xe5, 0xe9, + 0xec, 0x86, 0x95, 0xfb, 0xfd, 0xde, 0x95, 0x36, 0x0d, 0x3c, 0x90, 0x6a, 0x37, 0x8c, 0x89, 0x5f, + 0x20, 0x1d, 0x88, 0x5f, 0x90, 0x7a, 0x37, 0x8c, 0xe3, 0x63, 0x12, 0xbb, 0x61, 0x49, 0x04, 0xb3, + 0x17, 0xed, 0xdf, 0x96, 0x88, 0xd5, 0x4c, 0x6f, 0x23, 0xf8, 0xc7, 0xe1, 0x9e, 0xd5, 0x80, 0x77, + 0x76, 0x19, 0x76, 0x51, 0x41, 0xe2, 0x2d, 0x2c, 0xea, 0xe3, 0x40, 0x71, 0xdb, 0x71, 0xf7, 0xcc, + 0x60, 0xe3, 0x7e, 0xf0, 0xa4, 0x08, 0xbd, 0x01, 0x60, 0x05, 0xe7, 0x31, 0x68, 0x5e, 0x34, 0x1f, + 0x79, 0xa6, 0xd5, 0xa7, 0x41, 0x1f, 0xd1, 0x5f, 0xf5, 0x06, 0xb0, 0x40, 0x63, 0x3f, 0x36, 0xa0, + 0xe7, 0xc3, 0x2e, 0x8d, 0x68, 0xc1, 0x27, 0xaa, 0x67, 0xc1, 0x3c, 0x4d, 0x58, 0xb1, 0x7a, 0xd0, + 0xa3, 0x41, 0x2d, 0xb8, 0x34, 0xf5, 0x14, 0x28, 0x5a, 0xde, 0xdd, 0x9e, 0x63, 0xd3, 0x80, 0x7c, + 0xf4, 0x49, 0xbd, 0x09, 0x1c, 0xa7, 0xf9, 0x42, 0x63, 0x95, 0x1c, 0xd8, 0x19, 0x4c, 0x46, 0xaa, + 0x65, 0x3b, 0x1b, 0xae, 0xb3, 0xe3, 0x42, 0xcf, 0xc3, 0xa7, 0xa6, 0x4a, 0x06, 0x93, 0xa2, 0xde, + 0x0b, 0x4e, 0xf4, 0x2c, 0xfb, 0xa2, 0x87, 0x63, 0x04, 0xaf, 0x50, 0xb7, 0xb1, 0xf9, 0x21, 0xb1, + 0xbb, 0x99, 0xc6, 0x46, 0xe5, 0xc0, 0x7e, 0x62, 0x1c, 0xa4, 0xa2, 0xde, 0x0c, 0x14, 0xca, 0xcd, + 0xb2, 0xd9, 0xb9, 0x88, 0xdf, 0x53, 0x77, 0xd4, 0x03, 0xe9, 0x8c, 0x30, 0x48, 0x18, 0xfd, 0x45, + 0x4e, 0x18, 0x24, 0x92, 0xfe, 0x4b, 0x72, 0x60, 0x9e, 0x2b, 0xc0, 0x04, 0x6a, 0xd0, 0x2d, 0x7a, + 0xe7, 0x77, 0x2d, 0x1f, 0x22, 0xe6, 0xe8, 0x59, 0x97, 0xc7, 0x8c, 0x60, 0xde, 0x38, 0xf0, 0xa1, + 0x31, 0x84, 0x18, 0xe2, 0x8b, 0x74, 0x78, 0xd8, 0xb3, 0xcc, 0xa3, 0xb6, 0x2a, 0x97, 0xa6, 0x3d, + 0x13, 0xa8, 0x07, 0xa9, 0x31, 0x5e, 0x20, 0xb9, 0x74, 0x5e, 0x20, 0x48, 0x6e, 0x66, 0xaf, 0xe7, + 0x5c, 0x86, 0xdd, 0x90, 0x2c, 0xd5, 0xd5, 0x03, 0xe9, 0xda, 0x17, 0xc6, 0x99, 0x17, 0xa6, 0xbe, + 0x58, 0x03, 0x35, 0xb2, 0xfd, 0x4e, 0x07, 0xc2, 0x2e, 0x3d, 0xb8, 0x16, 0x3c, 0xa6, 0xbc, 0x72, + 0x23, 0xf5, 0x2c, 0xf2, 0x88, 0xee, 0xdc, 0x78, 0x7f, 0x74, 0xf3, 0xc9, 0xbe, 0x48, 0x57, 0x93, + 0x74, 0x3e, 0x7e, 0xac, 0x4e, 0x45, 0x7b, 0x6f, 0xda, 0xd3, 0xa2, 0x89, 0x98, 0x9e, 0x42, 0x83, + 0xbb, 0xb7, 0xdf, 0x0b, 0x8f, 0x3b, 0x91, 0xa7, 0x94, 0xe8, 0xa5, 0x3a, 0x40, 0x7a, 0x44, 0xc8, + 0x7d, 0xfc, 0x6a, 0x50, 0x24, 0x37, 0x17, 0x6a, 0x2f, 0x59, 0x1c, 0x0a, 0xdd, 0x22, 0x0f, 0xdd, + 0x26, 0x98, 0xb7, 0x1d, 0x54, 0xdc, 0x86, 0xe9, 0x9a, 0x7b, 0x5e, 0xd2, 0xf2, 0x3e, 0xa1, 0x1b, + 0xda, 0x72, 0x0d, 0xe6, 0xb3, 0xb5, 0x63, 0x06, 0x47, 0x46, 0xfd, 0xbf, 0xc0, 0xf1, 0x0b, 0x34, + 0x34, 0x87, 0x47, 0x29, 0x4b, 0xf1, 0xce, 0xaf, 0x03, 0x94, 0x97, 0xf9, 0x2f, 0xd7, 0x8e, 0x19, + 0x83, 0xc4, 0xd4, 0xff, 0x02, 0x16, 0xd1, 0x63, 0xd7, 0xb9, 0x1c, 0x30, 0x2e, 0xc7, 0xcf, 0x00, + 0x06, 0xc8, 0xaf, 0x73, 0x1f, 0xae, 0x1d, 0x33, 0x06, 0x48, 0xa9, 0x4d, 0x00, 0x76, 0xfd, 0xbd, + 0x1e, 0x25, 0x9c, 0x8f, 0xef, 0x4c, 0x06, 0x08, 0xaf, 0x85, 0x1f, 0xad, 0x1d, 0x33, 0x18, 0x12, + 0x6a, 0x1d, 0xcc, 0xfa, 0xf7, 0xfb, 0x94, 0x5e, 0x21, 0xde, 0xeb, 0x64, 0x80, 0x5e, 0x3b, 0xf8, + 0x66, 0xed, 0x98, 0x11, 0x11, 0x50, 0x6b, 0xa0, 0xd4, 0xbf, 0x40, 0x89, 0x15, 0xe3, 0x47, 0xaa, + 0x01, 0x62, 0x1b, 0x17, 0x42, 0x5a, 0xe1, 0xe7, 0x88, 0xb1, 0x8e, 0x77, 0x89, 0xd2, 0x9a, 0x11, + 0x66, 0xac, 0x12, 0x7c, 0x83, 0x18, 0x0b, 0x09, 0xa8, 0x35, 0x30, 0xeb, 0xd9, 0x66, 0xdf, 0xdb, + 0x75, 0x7c, 0xef, 0x74, 0x69, 0xc0, 0x41, 0x39, 0x9e, 0x5a, 0x8b, 0x7e, 0x63, 0x44, 0x5f, 0xab, + 0x8f, 0x03, 0x57, 0xef, 0xf7, 0xbb, 0xa6, 0x0f, 0xf5, 0xfb, 0x2d, 0x2f, 0xba, 0xbd, 0x32, 0x38, + 0x97, 0x3b, 0xfc, 0xa5, 0xba, 0x44, 0x8f, 0x2a, 0x02, 0xdc, 0x2e, 0xb5, 0xc1, 0x5d, 0x72, 0x52, + 0x2c, 0x73, 0x42, 0xf1, 0x89, 0x20, 0x8f, 0x5e, 0x61, 0xb3, 0x60, 0x71, 0xf8, 0x0a, 0xfc, 0xa0, + 0xee, 0xe0, 0x06, 0x8c, 0x3e, 0x1a, 0xb0, 0x2c, 0xe6, 0x0f, 0x58, 0x16, 0xd7, 0x83, 0x39, 0xcb, + 0x5b, 0xb7, 0x76, 0xc8, 0xb4, 0x86, 0x8e, 0xfc, 0x6c, 0x12, 0x59, 0x06, 0x6a, 0xc0, 0xcb, 0x64, + 0xc8, 0x3f, 0x1e, 0x2c, 0x03, 0x05, 0x29, 0xda, 0x8d, 0x60, 0x9e, 0x6d, 0x64, 0xe4, 0xfa, 0x63, + 0x2b, 0x9a, 0x14, 0xd1, 0x27, 0xed, 0x06, 0xb0, 0xc8, 0xeb, 0x34, 0x63, 0xfb, 0xc9, 0xc1, 0x20, + 0xa6, 0x3d, 0x0c, 0x1c, 0x1f, 0x68, 0x58, 0x41, 0xb0, 0x9f, 0x5c, 0x14, 0xec, 0xe7, 0x7a, 0x00, + 0x22, 0x2d, 0x1e, 0x4a, 0xe6, 0x21, 0x60, 0x36, 0xd4, 0xcb, 0xa1, 0x19, 0xbe, 0x9e, 0x03, 0xa5, + 0x40, 0xd9, 0x86, 0x65, 0x40, 0x36, 0x85, 0xcd, 0xec, 0xec, 0x05, 0x36, 0x05, 0x9b, 0x86, 0x0c, + 0xbc, 0xc8, 0x9f, 0xbe, 0x6d, 0xf9, 0xbd, 0xe0, 0x4c, 0xea, 0x60, 0xb2, 0xba, 0x01, 0x80, 0x85, + 0x31, 0x6a, 0x47, 0x87, 0x54, 0x1f, 0x9d, 0xa2, 0x3d, 0x10, 0x7d, 0x60, 0x68, 0x9c, 0x7d, 0x28, + 0x3d, 0x41, 0x3a, 0x0b, 0x0a, 0xe4, 0x82, 0x85, 0x63, 0xea, 0x22, 0x00, 0xfa, 0xd3, 0x36, 0x74, + 0xa3, 0xa6, 0x37, 0x2a, 0xba, 0x92, 0xd3, 0x5e, 0x2e, 0x81, 0xd9, 0xb0, 0x11, 0x0c, 0xad, 0xa4, + 0x4e, 0x55, 0x6b, 0xe4, 0x0d, 0xb3, 0x07, 0x1b, 0x15, 0xab, 0x64, 0x4f, 0x00, 0x0f, 0xda, 0xf7, + 0xe0, 0x8a, 0xe5, 0x7a, 0xbe, 0xe1, 0x5c, 0x5e, 0x71, 0xdc, 0xc8, 0x24, 0x22, 0xa1, 0x89, 0xe3, + 0x5e, 0x23, 0x53, 0xbf, 0x0b, 0xf1, 0x69, 0x45, 0xe8, 0xd2, 0x2d, 0x9b, 0x28, 0x01, 0xd1, 0xf5, + 0x5d, 0xd3, 0xf6, 0xfa, 0x8e, 0x07, 0x0d, 0xe7, 0xb2, 0x57, 0xb6, 0xbb, 0x15, 0xa7, 0xb7, 0xbf, + 0x67, 0x7b, 0xd4, 0x58, 0x8f, 0x7b, 0x8d, 0xa4, 0x83, 0xef, 0x8f, 0x5e, 0x04, 0xa0, 0xd2, 0xac, + 0xd7, 0xf5, 0x4a, 0xbb, 0xd6, 0x6c, 0x28, 0xc7, 0x90, 0xb4, 0xda, 0xe5, 0xe5, 0x3a, 0x92, 0xce, + 0xd3, 0x41, 0x29, 0x68, 0xd3, 0x34, 0x3e, 0x51, 0x2e, 0x88, 0x4f, 0xa4, 0x96, 0x41, 0x29, 0x68, + 0xe5, 0x74, 0x44, 0x78, 0xf8, 0xe0, 0x79, 0xf4, 0x3d, 0xd3, 0xf5, 0xb1, 0x69, 0x19, 0x10, 0x59, + 0x36, 0x3d, 0x68, 0x84, 0x9f, 0x9d, 0x7d, 0x14, 0xe5, 0x40, 0x05, 0x8b, 0xe5, 0x7a, 0x7d, 0xab, + 0x69, 0x6c, 0x35, 0x9a, 0xed, 0xb5, 0x5a, 0x63, 0x95, 0x8c, 0x90, 0xb5, 0xd5, 0x46, 0xd3, 0xd0, + 0xc9, 0x00, 0xd9, 0x52, 0x72, 0xe4, 0xfe, 0xf2, 0xe5, 0x12, 0x28, 0xf6, 0xb1, 0x74, 0xb5, 0xaf, + 0xc8, 0x29, 0x4d, 0x8b, 0x10, 0xa7, 0x98, 0x1b, 0x96, 0xb9, 0xc3, 0x20, 0xd2, 0x90, 0xc3, 0xda, + 0x67, 0xc1, 0x3c, 0x31, 0x87, 0x3c, 0xbc, 0xaf, 0x86, 0x91, 0x93, 0x0d, 0x2e, 0x4d, 0xfb, 0xa4, + 0x94, 0xc2, 0xb8, 0x18, 0xca, 0x51, 0x3a, 0xe3, 0xe2, 0x0f, 0x72, 0xe3, 0x5d, 0x47, 0x52, 0x6b, + 0xb4, 0x75, 0xa3, 0x51, 0xae, 0xd3, 0x2c, 0xb2, 0x7a, 0x1a, 0x9c, 0x6c, 0x34, 0x69, 0x30, 0xce, + 0xd6, 0x56, 0xbb, 0xb9, 0x55, 0x5b, 0xdf, 0x68, 0x1a, 0x6d, 0xa5, 0xa0, 0x9e, 0x02, 0x2a, 0xf9, + 0xbf, 0x55, 0x6b, 0x6d, 0x55, 0xca, 0x8d, 0x8a, 0x5e, 0xd7, 0xab, 0x4a, 0x51, 0x7d, 0x04, 0x78, + 0x18, 0xb9, 0xde, 0xaa, 0xb9, 0xb2, 0x65, 0x34, 0xcf, 0xb7, 0x10, 0x82, 0x86, 0x5e, 0x2f, 0x23, + 0x45, 0x62, 0xee, 0x31, 0x9f, 0x51, 0xaf, 0x02, 0xc7, 0x57, 0x6a, 0x75, 0x1d, 0xdf, 0x46, 0x4b, + 0xcb, 0x2b, 0xa9, 0xd7, 0x81, 0xd3, 0xb5, 0x46, 0x6b, 0x73, 0x65, 0xa5, 0x56, 0xa9, 0xe9, 0x8d, + 0xf6, 0xd6, 0x86, 0x6e, 0xac, 0xd7, 0x5a, 0x2d, 0xf4, 0xad, 0x32, 0xab, 0x7d, 0x5c, 0x06, 0x45, + 0xd2, 0x67, 0x22, 0x23, 0x76, 0xe1, 0x9c, 0xd9, 0xb3, 0xd0, 0x40, 0x81, 0xaf, 0x8f, 0x1f, 0x38, + 0xc7, 0xe5, 0xe3, 0x6b, 0xe6, 0xe9, 0x49, 0x10, 0xfc, 0xa0, 0xfd, 0xa8, 0x9c, 0xf2, 0x1c, 0x17, + 0x05, 0x82, 0x94, 0xb8, 0xc4, 0x95, 0x16, 0xb3, 0xea, 0xf0, 0x1a, 0x29, 0xc5, 0x39, 0x2e, 0x71, + 0xf2, 0xe9, 0xc0, 0xff, 0xc5, 0x49, 0x81, 0xaf, 0x80, 0xf9, 0xcd, 0x46, 0x79, 0xb3, 0xbd, 0xd6, + 0x34, 0x6a, 0x3f, 0x88, 0x6f, 0x21, 0x58, 0x00, 0xb3, 0x2b, 0x4d, 0x63, 0xb9, 0x56, 0xad, 0xea, + 0x0d, 0xa5, 0xa0, 0x3e, 0x08, 0x5c, 0xd5, 0xd2, 0x8d, 0x73, 0xb5, 0x8a, 0xbe, 0xb5, 0xd9, 0x28, + 0x9f, 0x2b, 0xd7, 0xea, 0xb8, 0x8f, 0x28, 0x26, 0x5c, 0x7d, 0x3f, 0xa3, 0xfd, 0x70, 0x1e, 0x00, + 0x52, 0x75, 0x7c, 0x09, 0x17, 0x73, 0x41, 0xfa, 0x1f, 0xa5, 0x9d, 0xee, 0x45, 0x64, 0x62, 0xda, + 0x6f, 0x0d, 0x94, 0x5c, 0xfa, 0x82, 0xae, 0x6b, 0x8e, 0xa2, 0x43, 0xfe, 0x06, 0xd4, 0x8c, 0xf0, + 0x73, 0xed, 0x03, 0x69, 0x66, 0x77, 0xb1, 0x8c, 0x4d, 0xe5, 0xa6, 0xe7, 0x41, 0x20, 0xb5, 0x17, + 0xe6, 0xc0, 0x22, 0x5f, 0x31, 0x54, 0x09, 0x6c, 0x4c, 0x89, 0x55, 0x82, 0xff, 0x98, 0x31, 0xb2, + 0xce, 0x3e, 0x96, 0x0e, 0xa7, 0x20, 0x68, 0x99, 0x24, 0x24, 0x43, 0x60, 0xb1, 0x28, 0x39, 0xc4, + 0x3c, 0x32, 0x3a, 0x14, 0x49, 0x9d, 0x01, 0x72, 0xfb, 0x7e, 0x5f, 0x91, 0xb5, 0x4f, 0xe7, 0xc1, + 0x02, 0x77, 0x03, 0xbb, 0xf6, 0xc7, 0x39, 0x91, 0xdb, 0x8d, 0x99, 0xbb, 0xdd, 0x73, 0x87, 0xbd, + 0xdb, 0xfd, 0xac, 0x05, 0x66, 0x68, 0x1a, 0x96, 0x6f, 0xb3, 0x81, 0x4c, 0x81, 0xe3, 0x60, 0x6e, + 0x55, 0x6f, 0x6f, 0xb5, 0xda, 0x65, 0xa3, 0xad, 0x57, 0x95, 0x1c, 0x1a, 0xf8, 0xf4, 0xf5, 0x8d, + 0xf6, 0xbd, 0x8a, 0x84, 0xc6, 0xc4, 0xd5, 0xcd, 0x5a, 0x55, 0xdf, 0x6a, 0x36, 0xea, 0xf7, 0x2a, + 0x32, 0xea, 0x01, 0x99, 0xbc, 0x5b, 0xeb, 0xcd, 0xe5, 0x5a, 0x5d, 0x57, 0xf2, 0xa8, 0xd9, 0xe0, + 0x4f, 0x82, 0x94, 0x02, 0xef, 0x1b, 0x2d, 0xb2, 0xc2, 0x39, 0x58, 0x85, 0xc3, 0xbb, 0x88, 0xa4, + 0xb9, 0x42, 0x3e, 0xd5, 0xda, 0x69, 0x12, 0xab, 0xd9, 0xcf, 0x88, 0x3f, 0x2f, 0x03, 0x85, 0x70, + 0xa0, 0xdf, 0xdf, 0x87, 0xae, 0x05, 0xed, 0x0e, 0xd4, 0x2e, 0x8a, 0x04, 0x04, 0x3e, 0x10, 0x0a, + 0x13, 0x8f, 0x1a, 0x8c, 0x2d, 0x4a, 0x1e, 0x06, 0xcc, 0xf8, 0xfc, 0x01, 0x33, 0xfe, 0x77, 0xd2, + 0x7a, 0xe0, 0x0e, 0xb2, 0x3b, 0x91, 0x3d, 0xab, 0xcf, 0xa4, 0xf1, 0xc0, 0x1d, 0xc1, 0xc1, 0x54, + 0xe2, 0x7c, 0xc7, 0x8c, 0xf2, 0x8a, 0xac, 0xbd, 0x40, 0x06, 0xc7, 0xab, 0xa6, 0x0f, 0x97, 0xaf, + 0xb4, 0x83, 0x7b, 0x54, 0x63, 0xee, 0x3e, 0xcf, 0x1d, 0xb8, 0xfb, 0x3c, 0xba, 0x8a, 0x55, 0x1a, + 0xb8, 0x8a, 0x55, 0x7b, 0x4f, 0xda, 0x33, 0xbb, 0x03, 0x3c, 0x4c, 0x2c, 0x18, 0x77, 0xba, 0xb3, + 0xb8, 0xc9, 0x5c, 0x64, 0xdf, 0xc0, 0xde, 0x3e, 0x0b, 0x14, 0xc2, 0x0a, 0xe3, 0x64, 0xfa, 0xb3, + 0x32, 0x90, 0xcb, 0xdd, 0xae, 0xb6, 0x95, 0x22, 0xa6, 0x67, 0x10, 0x25, 0x45, 0xe2, 0xa3, 0xa4, + 0x70, 0x7b, 0x16, 0xf2, 0xa0, 0x63, 0x50, 0xda, 0xd3, 0x08, 0x8c, 0x47, 0x69, 0x7c, 0x18, 0xe5, + 0xec, 0x4e, 0x23, 0x24, 0x16, 0x3f, 0x9d, 0x2b, 0xad, 0xe9, 0x2d, 0xb2, 0xba, 0x28, 0x32, 0xc9, + 0x37, 0xf7, 0xa7, 0x3d, 0x5e, 0xc0, 0x79, 0xf4, 0x26, 0x5c, 0x67, 0x9f, 0xdd, 0xf1, 0x82, 0x51, + 0x1c, 0x64, 0x8f, 0xc2, 0x77, 0x25, 0x90, 0x6f, 0x39, 0xae, 0x3f, 0x29, 0x0c, 0xd2, 0xba, 0x44, + 0x30, 0x12, 0x68, 0xc5, 0xcf, 0x6c, 0xb3, 0x73, 0x89, 0x48, 0x2e, 0x7f, 0x0a, 0x61, 0x51, 0x8f, + 0x83, 0x45, 0xc2, 0x49, 0x78, 0xa7, 0xd0, 0xbf, 0x49, 0xa4, 0xbf, 0xba, 0x47, 0x14, 0x11, 0xbc, + 0x31, 0x16, 0xba, 0x24, 0x04, 0xa0, 0x70, 0x69, 0xda, 0x1b, 0x59, 0x5c, 0xaa, 0x3c, 0x2e, 0xc3, + 0xe6, 0xf5, 0xe1, 0xb5, 0x3c, 0x93, 0xea, 0x99, 0xd2, 0x44, 0x58, 0x4d, 0x28, 0x3c, 0x7b, 0x44, + 0x9e, 0x23, 0x83, 0x22, 0x75, 0x09, 0x9d, 0x28, 0x02, 0x69, 0x5b, 0x46, 0x28, 0x04, 0x31, 0xd7, + 0x51, 0x79, 0xd2, 0x2d, 0x23, 0xb9, 0xfc, 0xec, 0x71, 0xf8, 0x77, 0xea, 0xeb, 0x5c, 0xbe, 0x64, + 0x5a, 0x3d, 0xf3, 0x42, 0x2f, 0x45, 0x64, 0xf3, 0x4f, 0xa6, 0x3c, 0xdd, 0x19, 0x56, 0x95, 0x2b, + 0x2f, 0x46, 0xe2, 0xdf, 0x0f, 0x66, 0x5d, 0x6e, 0x2f, 0x18, 0x59, 0x51, 0x03, 0x7e, 0xe6, 0xf4, + 0xbd, 0x11, 0xe5, 0x4c, 0x75, 0x94, 0x53, 0x88, 0x9f, 0xa9, 0x1c, 0x3d, 0x9b, 0x2b, 0x77, 0xbb, + 0x2b, 0xd0, 0xf4, 0xf7, 0x5d, 0xd8, 0x4d, 0x35, 0x44, 0xb8, 0x03, 0xdb, 0xe5, 0x8c, 0x24, 0xb8, + 0xd8, 0xa2, 0x75, 0x1e, 0x9d, 0xc7, 0x8f, 0xe8, 0x0d, 0x02, 0x5e, 0x26, 0xd2, 0x25, 0xbd, 0x2d, + 0x84, 0xa4, 0xc9, 0x41, 0xf2, 0xc4, 0xf1, 0x98, 0xc8, 0x1e, 0x90, 0x97, 0xca, 0x60, 0x91, 0xd8, + 0x09, 0x93, 0xc6, 0xe4, 0xc3, 0x29, 0x5d, 0xc8, 0x98, 0x5b, 0xdb, 0x58, 0x76, 0x26, 0x02, 0x4b, + 0x1a, 0x87, 0x33, 0x31, 0x3e, 0xb2, 0x47, 0xe6, 0x7f, 0x5e, 0x05, 0x00, 0xe3, 0x16, 0xfc, 0xc9, + 0x62, 0x14, 0xe7, 0x53, 0x7b, 0x27, 0x9d, 0x7f, 0xb4, 0xb8, 0xa0, 0xf3, 0x8c, 0xcb, 0x6f, 0xb8, + 0xed, 0xc5, 0x27, 0x0a, 0x8d, 0x2a, 0x7f, 0x90, 0xd2, 0xe6, 0xa5, 0x4e, 0xb9, 0x23, 0x07, 0xf7, + 0x31, 0x7b, 0xb9, 0x4f, 0xa5, 0x30, 0x7e, 0x47, 0xb1, 0x92, 0x0e, 0xb5, 0xfa, 0x18, 0x33, 0xfb, + 0xd3, 0xe0, 0xa4, 0xa1, 0x97, 0xab, 0xcd, 0x46, 0xfd, 0x5e, 0xf6, 0x0a, 0x2f, 0x45, 0x66, 0x27, + 0x27, 0x99, 0xc0, 0xf6, 0xba, 0x94, 0x7d, 0x20, 0x2f, 0xab, 0xa4, 0xd9, 0x0a, 0xb3, 0xb8, 0x32, + 0xba, 0x57, 0x13, 0x20, 0x7b, 0x94, 0x28, 0x7c, 0xb3, 0x08, 0xe6, 0x0c, 0xd8, 0x71, 0xf6, 0xf6, + 0xa0, 0xdd, 0x85, 0x5d, 0xed, 0x75, 0x32, 0x98, 0x0f, 0x77, 0x15, 0x5b, 0xd0, 0xd7, 0xfe, 0x4b, + 0x84, 0xcd, 0x59, 0x30, 0x8f, 0x2a, 0xd7, 0xe4, 0x2f, 0x12, 0xe0, 0xd2, 0xd4, 0x5b, 0xc0, 0x89, + 0x00, 0x85, 0xe6, 0xc0, 0x14, 0xe6, 0xe0, 0x0b, 0xde, 0xef, 0x67, 0x93, 0xc7, 0xe8, 0xae, 0x78, + 0x61, 0x86, 0xec, 0x2e, 0xb1, 0xac, 0xc6, 0x80, 0xf5, 0x7b, 0x21, 0x58, 0x4f, 0xe3, 0xc0, 0xaa, + 0x1e, 0x92, 0xfe, 0x51, 0xa2, 0xf6, 0x21, 0x19, 0x9c, 0x0c, 0x3a, 0xe2, 0xe9, 0xa1, 0xf5, 0x29, + 0x16, 0xad, 0xa7, 0xf3, 0x68, 0xad, 0x8a, 0x48, 0x73, 0x18, 0xcb, 0x31, 0xa8, 0x7d, 0x39, 0x44, + 0xed, 0x87, 0x38, 0xd4, 0xea, 0x13, 0x2a, 0xe7, 0x28, 0xd1, 0xfb, 0xb0, 0x0c, 0x4e, 0x23, 0xb3, + 0xb3, 0xe2, 0xd8, 0xdb, 0x3d, 0xab, 0xe3, 0x5b, 0xf6, 0x4e, 0xe4, 0xe2, 0xb8, 0x2a, 0xb2, 0xb2, + 0x39, 0x88, 0xad, 0x74, 0x10, 0x5b, 0x7e, 0x8f, 0x41, 0xb4, 0x6d, 0xc5, 0xb1, 0x15, 0x33, 0x84, + 0x31, 0xce, 0xfb, 0x91, 0xe6, 0xb0, 0x49, 0xe9, 0x5b, 0x9f, 0x20, 0x07, 0x47, 0x89, 0xdf, 0xd7, + 0x25, 0x70, 0xca, 0x80, 0x9e, 0xd3, 0xbb, 0x04, 0x89, 0x2f, 0x6b, 0xc0, 0xaf, 0xa7, 0x3d, 0x2a, + 0x55, 0xfb, 0xd3, 0x5e, 0xca, 0x62, 0xd4, 0xe2, 0x31, 0x7a, 0x52, 0xbc, 0xa6, 0x0f, 0x2b, 0x3a, + 0xa6, 0x1d, 0xbd, 0x37, 0x94, 0xff, 0x39, 0x4e, 0xfe, 0xcb, 0x87, 0xa2, 0x3e, 0x85, 0x25, 0x02, + 0xc0, 0x98, 0x77, 0xcf, 0x97, 0x81, 0x82, 0x7d, 0x96, 0xf1, 0xe8, 0x49, 0xef, 0x10, 0x6e, 0xf2, + 0xa7, 0x59, 0xfa, 0x81, 0x12, 0x06, 0xa7, 0x59, 0x82, 0x04, 0xf5, 0x46, 0xb0, 0xd8, 0xd9, 0x85, + 0x9d, 0x8b, 0x35, 0x3b, 0xf0, 0x2a, 0x23, 0x2e, 0x48, 0x03, 0xa9, 0xbc, 0xc1, 0x70, 0x0f, 0x0f, + 0x06, 0xbf, 0xb8, 0xcb, 0x4d, 0x1e, 0x59, 0xa6, 0x62, 0x40, 0xf8, 0xcd, 0x10, 0x84, 0x06, 0x07, + 0xc2, 0x1d, 0x63, 0x51, 0x4d, 0x27, 0xfc, 0xc6, 0x18, 0xaa, 0xaf, 0x81, 0x53, 0xcd, 0x8d, 0x76, + 0xad, 0xd9, 0xd8, 0xda, 0x6c, 0xe9, 0xd5, 0xad, 0xe5, 0xa0, 0x01, 0xb4, 0x14, 0x59, 0xfb, 0x86, + 0x04, 0x66, 0x08, 0x5b, 0x9e, 0xf6, 0xc8, 0x08, 0x82, 0x91, 0xc7, 0x78, 0xb4, 0xb7, 0x0b, 0x07, + 0xe5, 0x0a, 0x05, 0x41, 0xcb, 0x89, 0xe9, 0x7c, 0x9e, 0x00, 0x66, 0x08, 0xc8, 0xc1, 0x4e, 0xcb, + 0x99, 0x18, 0xeb, 0x99, 0x92, 0x31, 0x82, 0xec, 0x82, 0x01, 0xba, 0x46, 0xb0, 0x91, 0x7d, 0x1b, + 0x78, 0x56, 0x9e, 0x2c, 0xcf, 0x9c, 0xb7, 0xfc, 0x5d, 0x7c, 0xca, 0x47, 0x7b, 0xaa, 0xc8, 0xe0, + 0x70, 0x0b, 0x28, 0x5c, 0x42, 0xb9, 0x47, 0x9c, 0x98, 0x22, 0x99, 0xb4, 0x5f, 0x14, 0x8e, 0x07, + 0xcf, 0xe9, 0x67, 0xc8, 0x53, 0x0c, 0x38, 0xeb, 0x20, 0xdf, 0xb3, 0x3c, 0x9f, 0xce, 0x6b, 0x6e, + 0x4f, 0x45, 0x28, 0xf8, 0x53, 0xf3, 0xe1, 0x9e, 0x81, 0xc9, 0x68, 0x77, 0x23, 0xab, 0x34, 0x4a, + 0x15, 0x38, 0x35, 0x76, 0x1a, 0xcc, 0xd0, 0x68, 0x06, 0x74, 0xeb, 0x2f, 0x78, 0x14, 0xdc, 0x6e, + 0x13, 0xaa, 0x6d, 0xf6, 0x3a, 0xf0, 0xff, 0x1e, 0x07, 0x33, 0x6b, 0x96, 0xe7, 0x3b, 0xee, 0x15, + 0xed, 0xf5, 0x39, 0x30, 0x73, 0x0e, 0xba, 0x9e, 0xe5, 0xd8, 0x07, 0x1c, 0xed, 0xae, 0x07, 0x73, + 0x7d, 0x17, 0x5e, 0xb2, 0x9c, 0x7d, 0x8f, 0x19, 0x89, 0x99, 0x24, 0x55, 0x03, 0x25, 0x73, 0xdf, + 0xdf, 0x75, 0xdc, 0x28, 0x08, 0x5a, 0xf0, 0xac, 0x9e, 0x01, 0x80, 0xfc, 0x6f, 0x98, 0x7b, 0x90, + 0xba, 0x0f, 0x32, 0x29, 0xaa, 0x0a, 0xf2, 0xbe, 0xb5, 0x07, 0xe9, 0xad, 0x08, 0xf8, 0x3f, 0x12, + 0x30, 0x8e, 0x30, 0x4c, 0x23, 0x39, 0xcb, 0x46, 0xf0, 0xa8, 0x7d, 0x51, 0x06, 0x73, 0xab, 0xd0, + 0xa7, 0xac, 0x7a, 0xda, 0x8b, 0x72, 0x42, 0x17, 0x91, 0xa1, 0xb9, 0x5f, 0xcf, 0xf4, 0x82, 0xef, + 0x42, 0xb3, 0x86, 0x4f, 0x8c, 0xae, 0x68, 0x90, 0xd9, 0xfb, 0x59, 0x70, 0xbc, 0x5e, 0xbf, 0x46, + 0x0e, 0xd0, 0xd0, 0xcc, 0x74, 0x73, 0xfe, 0xe0, 0x0b, 0x7e, 0xde, 0x91, 0x18, 0xeb, 0x86, 0xca, + 0x7e, 0x89, 0xa9, 0x4f, 0x6c, 0x77, 0x54, 0xba, 0x44, 0x73, 0x1c, 0xb8, 0x7a, 0x87, 0xa5, 0x44, + 0xc9, 0x18, 0x61, 0x6e, 0xc1, 0x28, 0x39, 0xa3, 0x39, 0x99, 0xc2, 0x65, 0xcb, 0x32, 0x98, 0x6b, + 0xed, 0x3a, 0x97, 0x03, 0x39, 0x3e, 0x5d, 0x0c, 0xd8, 0xeb, 0xc0, 0xec, 0xa5, 0x01, 0x50, 0xa3, + 0x04, 0xf6, 0x7e, 0x47, 0x99, 0xbf, 0xdf, 0xf1, 0x79, 0x72, 0x5a, 0x98, 0x18, 0xe6, 0x62, 0x60, + 0xe2, 0xaf, 0x64, 0x94, 0x52, 0x5c, 0xc9, 0xa8, 0x3e, 0x1e, 0xcc, 0x50, 0xae, 0xe9, 0x56, 0x40, + 0x32, 0xc0, 0x41, 0x66, 0xb6, 0x82, 0x79, 0xbe, 0x82, 0xe9, 0x90, 0x8f, 0xaf, 0x5c, 0xf6, 0xc8, + 0xff, 0xb6, 0x84, 0x63, 0xa4, 0x05, 0xc0, 0x57, 0x26, 0x00, 0xbc, 0xf6, 0x9d, 0x9c, 0xe8, 0x86, + 0x59, 0x28, 0x81, 0x90, 0x83, 0x43, 0x5d, 0x32, 0x38, 0x92, 0x5c, 0xf6, 0xf2, 0x7c, 0x79, 0x1e, + 0xcc, 0x57, 0xad, 0xed, 0xed, 0xb0, 0x93, 0x7c, 0xb1, 0x60, 0x27, 0x19, 0xef, 0x0c, 0x87, 0xec, + 0xdc, 0x7d, 0xd7, 0x85, 0x76, 0x50, 0x29, 0xda, 0x9c, 0x06, 0x52, 0xd5, 0x9b, 0xc0, 0xf1, 0x60, + 0x5c, 0x60, 0x3b, 0xca, 0x59, 0x63, 0x30, 0x59, 0xfb, 0x96, 0xb0, 0xb7, 0x45, 0x20, 0x51, 0xb6, + 0x4a, 0x31, 0x0d, 0xf0, 0x4e, 0xb0, 0xb0, 0x4b, 0x72, 0xe3, 0x25, 0xe9, 0xa0, 0xb3, 0x3c, 0x35, + 0x70, 0x07, 0xc5, 0x3a, 0xf4, 0x3c, 0x73, 0x07, 0x1a, 0x7c, 0xe6, 0x81, 0xe6, 0x2b, 0xa7, 0xb9, + 0x51, 0x55, 0xcc, 0x71, 0x43, 0xa0, 0x26, 0xd9, 0x6b, 0xc7, 0x97, 0xcf, 0x82, 0xfc, 0x8a, 0xd5, + 0x83, 0xda, 0x8f, 0x4b, 0x60, 0xd6, 0x80, 0x1d, 0xc7, 0xee, 0xa0, 0x27, 0xc6, 0x35, 0xf6, 0x9b, + 0x39, 0xd1, 0x9b, 0xc4, 0x11, 0x9d, 0xa5, 0x90, 0x46, 0x4c, 0xbb, 0x11, 0xbb, 0x31, 0x3c, 0x91, + 0xd4, 0x14, 0xee, 0x7d, 0x43, 0x53, 0x8f, 0xed, 0xed, 0x9e, 0x63, 0x72, 0x9b, 0x32, 0x83, 0xa6, + 0x50, 0x74, 0x10, 0xb7, 0xe1, 0xf8, 0x1b, 0x96, 0x6d, 0x87, 0xb1, 0x6d, 0x0e, 0xa4, 0xf3, 0xfe, + 0x44, 0x89, 0xe1, 0x01, 0x71, 0xdd, 0x69, 0xe9, 0x31, 0x9a, 0x7d, 0x23, 0x58, 0xbc, 0x70, 0xc5, + 0x87, 0x1e, 0xcd, 0x45, 0x8b, 0xcd, 0x1b, 0x03, 0xa9, 0xcc, 0xe5, 0x1e, 0x49, 0x61, 0x04, 0x13, + 0x0a, 0x4c, 0x27, 0xea, 0xb5, 0x31, 0x66, 0x80, 0x27, 0x81, 0xd2, 0x68, 0x56, 0x75, 0xec, 0xa9, + 0x1d, 0xf8, 0xbe, 0xee, 0x68, 0x3f, 0x23, 0x83, 0x79, 0xec, 0xe4, 0x18, 0xa0, 0xf0, 0x30, 0x81, + 0xf9, 0x88, 0xf6, 0x55, 0x61, 0x2f, 0x6e, 0x5c, 0x65, 0xb6, 0x80, 0x78, 0x41, 0x6f, 0x5b, 0xbd, + 0x41, 0x41, 0x17, 0x8c, 0x81, 0xd4, 0x21, 0x80, 0xc8, 0x43, 0x01, 0xf9, 0x90, 0x90, 0x2b, 0xf7, + 0x28, 0xee, 0x8e, 0x0a, 0x95, 0x5f, 0x93, 0xc1, 0x1c, 0x9a, 0xa4, 0x04, 0xa0, 0x34, 0x39, 0x50, + 0x1c, 0xbb, 0x77, 0x25, 0x5a, 0x16, 0x09, 0x1e, 0x53, 0x35, 0x92, 0x3f, 0x16, 0x9e, 0xb9, 0x63, + 0x11, 0x31, 0xbc, 0x4c, 0x09, 0xbf, 0x0f, 0x0a, 0xcd, 0xe7, 0x47, 0x30, 0x77, 0x54, 0xf0, 0xbd, + 0xb6, 0x08, 0x8a, 0x9b, 0x7d, 0x8c, 0xdc, 0x57, 0x64, 0x91, 0x8b, 0x72, 0x0e, 0x1c, 0xe3, 0x43, + 0x66, 0x56, 0xcf, 0xe9, 0x98, 0xbd, 0x8d, 0xe8, 0x24, 0x7b, 0x94, 0xa0, 0xde, 0x41, 0x3d, 0xfb, + 0xc9, 0x81, 0xec, 0x1b, 0x13, 0xef, 0x90, 0xc1, 0x32, 0x62, 0x8e, 0x4c, 0xde, 0x02, 0x4e, 0x74, + 0x2d, 0xcf, 0xbc, 0xd0, 0x83, 0xba, 0xdd, 0x71, 0xaf, 0x10, 0x71, 0xd0, 0x69, 0xd5, 0x81, 0x17, + 0xea, 0x93, 0x40, 0xc1, 0xf3, 0xaf, 0xf4, 0xc8, 0x3c, 0x91, 0x3d, 0x61, 0x19, 0x5b, 0x54, 0x0b, + 0x65, 0x37, 0xc8, 0x57, 0xac, 0xeb, 0xec, 0x8c, 0x98, 0xeb, 0xac, 0xfa, 0x58, 0x50, 0x74, 0x5c, + 0x6b, 0xc7, 0x22, 0xd7, 0x42, 0x2e, 0x1e, 0x08, 0x95, 0x4c, 0x4c, 0x81, 0x26, 0xce, 0x62, 0xd0, + 0xac, 0xea, 0xe3, 0xc1, 0xac, 0xb5, 0x67, 0xee, 0xc0, 0x7b, 0x2c, 0x9b, 0x04, 0x92, 0x58, 0xbc, + 0xed, 0xf4, 0x81, 0xc3, 0xa3, 0xf4, 0xbd, 0x11, 0x65, 0x55, 0xef, 0x04, 0xd7, 0x74, 0x5c, 0x68, + 0xfa, 0x10, 0x09, 0xe8, 0xbc, 0xd5, 0xdd, 0x81, 0x7e, 0x6d, 0x7b, 0xdd, 0xf2, 0x3c, 0xcb, 0xde, + 0xa1, 0x37, 0xbf, 0xc6, 0x67, 0xd0, 0x3e, 0x28, 0x89, 0x46, 0x83, 0xc4, 0x92, 0x21, 0x2a, 0x31, + 0xc6, 0x0d, 0xf5, 0x8c, 0x14, 0x65, 0x41, 0x07, 0xe4, 0x57, 0x09, 0xc5, 0x69, 0x8c, 0x67, 0x2b, + 0xfb, 0xa1, 0xff, 0x0f, 0x25, 0x50, 0xaa, 0x3a, 0x97, 0x6d, 0xdc, 0x4c, 0x6e, 0x17, 0xb3, 0x94, + 0x87, 0x84, 0x76, 0xe0, 0xef, 0x3a, 0x4f, 0x3c, 0x0d, 0x88, 0x6b, 0x1b, 0x14, 0x19, 0x03, 0x43, + 0x62, 0xbb, 0x13, 0x0c, 0x20, 0x90, 0x54, 0x4e, 0xf6, 0x72, 0xfd, 0x5d, 0x19, 0xe4, 0xab, 0xae, + 0xd3, 0xd7, 0xde, 0x96, 0x4b, 0xe1, 0x88, 0xd7, 0x75, 0x9d, 0x7e, 0x1b, 0x5f, 0x21, 0x1b, 0xed, + 0x3d, 0xb1, 0x69, 0xea, 0xed, 0xa0, 0xd4, 0x77, 0x3c, 0xcb, 0x0f, 0x26, 0x21, 0x8b, 0xb7, 0x3d, + 0x78, 0x68, 0x5f, 0xb0, 0x41, 0x33, 0x19, 0x61, 0x76, 0xd4, 0xe7, 0x63, 0x11, 0x22, 0xb9, 0x20, + 0x31, 0x06, 0xd7, 0xe8, 0x0e, 0xa4, 0x6a, 0x2f, 0x61, 0x91, 0x7c, 0x22, 0x8f, 0xe4, 0xc3, 0x87, + 0x48, 0xd8, 0x75, 0xfa, 0x13, 0x71, 0x9d, 0x79, 0x45, 0x88, 0xea, 0x93, 0x39, 0x54, 0x6f, 0x16, + 0x2a, 0x33, 0x7b, 0x44, 0x3f, 0x98, 0x07, 0x00, 0x1b, 0x29, 0x9b, 0x68, 0xfa, 0x24, 0x66, 0xa1, + 0xfd, 0x58, 0x9e, 0x91, 0x65, 0x99, 0x97, 0xe5, 0x23, 0x63, 0x6c, 0x20, 0x4c, 0x3e, 0x46, 0xa2, + 0x65, 0x50, 0xd8, 0x47, 0xaf, 0xa9, 0x44, 0x05, 0x49, 0xe0, 0x47, 0x83, 0x7c, 0xa9, 0xfd, 0x76, + 0x0e, 0x14, 0x70, 0x82, 0x7a, 0x06, 0x00, 0x6c, 0x16, 0x90, 0xc3, 0xb4, 0x39, 0x6c, 0x00, 0x30, + 0x29, 0x58, 0x5b, 0xad, 0x2e, 0x7d, 0x4d, 0x0c, 0xee, 0x28, 0x01, 0x7d, 0x8d, 0x8d, 0x05, 0x4c, + 0x8b, 0x9a, 0x0f, 0x4c, 0x0a, 0xfa, 0x1a, 0x3f, 0xd5, 0xe1, 0x36, 0xb9, 0xdd, 0x23, 0x6f, 0x44, + 0x09, 0xe1, 0xd7, 0xf5, 0xf0, 0x4e, 0xd8, 0xe0, 0x6b, 0x9c, 0x82, 0xa6, 0xd2, 0x58, 0x2d, 0x97, + 0xa3, 0x22, 0x8a, 0x38, 0xd3, 0x60, 0xb2, 0xf6, 0xba, 0x50, 0x6d, 0xaa, 0x9c, 0xda, 0x3c, 0x3a, + 0x85, 0x78, 0xb3, 0x57, 0x9e, 0xaf, 0x17, 0xc0, 0x6c, 0xc3, 0xe9, 0x52, 0xdd, 0x61, 0xa6, 0x9b, + 0x9f, 0x29, 0xa4, 0x9a, 0x6e, 0x86, 0x34, 0x62, 0x14, 0xe4, 0x29, 0xbc, 0x82, 0x88, 0x51, 0x60, + 0xf5, 0x43, 0x5d, 0x06, 0x45, 0xac, 0xbd, 0x07, 0x2f, 0x1b, 0x4d, 0x22, 0x81, 0x45, 0x6b, 0xd0, + 0x2f, 0xff, 0xc3, 0xe9, 0xd8, 0x7f, 0x07, 0x05, 0x5c, 0xc1, 0x84, 0xbd, 0x21, 0xbe, 0xa2, 0x52, + 0x72, 0x45, 0xe5, 0xe4, 0x8a, 0xe6, 0x07, 0x2b, 0x9a, 0x66, 0x15, 0x21, 0x4e, 0x43, 0xb2, 0xd7, + 0xf1, 0xff, 0x35, 0x03, 0x40, 0xc3, 0xbc, 0x64, 0xed, 0x90, 0xbd, 0xe5, 0x2f, 0x06, 0xb3, 0x27, + 0xba, 0x0b, 0xfc, 0x93, 0xcc, 0x40, 0x78, 0x3b, 0x98, 0xa1, 0xe3, 0x1e, 0xad, 0xc8, 0x43, 0xb8, + 0x8a, 0x44, 0x54, 0x88, 0x51, 0x7b, 0xbf, 0x6f, 0x04, 0xf9, 0x91, 0x61, 0xb2, 0xbd, 0xdf, 0xeb, + 0xb5, 0xd1, 0xb7, 0xd4, 0x42, 0x0b, 0x9e, 0x63, 0x76, 0x30, 0xa2, 0x4b, 0xa6, 0x49, 0xd0, 0x29, + 0xfa, 0xa4, 0xbd, 0x4f, 0xf8, 0x9c, 0x1a, 0xc3, 0x0f, 0x53, 0xa3, 0x98, 0x26, 0xf8, 0x58, 0x30, + 0xe3, 0x84, 0xdb, 0xe1, 0x72, 0xec, 0x2a, 0x5a, 0xcd, 0xde, 0x76, 0x8c, 0x20, 0xa7, 0xe0, 0xd6, + 0x99, 0x10, 0x1f, 0x53, 0x39, 0x0a, 0x7a, 0x6a, 0x35, 0x88, 0x94, 0x8a, 0xea, 0x71, 0xde, 0xf2, + 0x77, 0xeb, 0x96, 0x7d, 0xd1, 0xd3, 0x7e, 0x48, 0xcc, 0x82, 0x64, 0xf0, 0x97, 0xd2, 0xe1, 0xcf, + 0x47, 0x2a, 0x4b, 0xf4, 0xec, 0x60, 0xa8, 0x0c, 0xe7, 0x36, 0x06, 0xc0, 0x3b, 0x40, 0x91, 0x30, + 0x4a, 0x3b, 0xd1, 0xb3, 0xb1, 0xf8, 0x85, 0x94, 0x0c, 0xfa, 0x85, 0xa0, 0x57, 0x48, 0x5a, 0xce, + 0x32, 0x87, 0xf4, 0xec, 0x63, 0xc0, 0x0c, 0x95, 0xb4, 0xba, 0xc8, 0xb6, 0x62, 0xe5, 0x98, 0x0a, + 0x40, 0x71, 0xdd, 0xb9, 0x04, 0xdb, 0x8e, 0x92, 0x43, 0xff, 0x11, 0x7f, 0x6d, 0x47, 0x91, 0xb4, + 0x57, 0x96, 0x40, 0x29, 0x0c, 0x51, 0xf9, 0x87, 0x12, 0x50, 0x2a, 0x78, 0x86, 0xb6, 0xe2, 0x3a, + 0x7b, 0xa4, 0x46, 0xe2, 0x67, 0x1e, 0x5e, 0x2a, 0xec, 0x20, 0x12, 0x86, 0x8e, 0x1c, 0x2c, 0x2c, + 0x06, 0x4b, 0xb2, 0x84, 0x29, 0x05, 0x4b, 0x98, 0xda, 0x5b, 0x85, 0x1c, 0x46, 0x44, 0x4b, 0xc9, + 0xbe, 0xa9, 0xfd, 0x8e, 0x04, 0x0a, 0x95, 0x9e, 0x63, 0x43, 0xf6, 0x60, 0xee, 0xc8, 0x13, 0xa0, + 0xc3, 0xf7, 0x31, 0xb4, 0x67, 0x49, 0xa2, 0xb6, 0x46, 0x24, 0x00, 0x54, 0xb6, 0xa0, 0x6c, 0xc5, + 0x06, 0xa9, 0x44, 0xd2, 0xd9, 0x0b, 0xf4, 0x1b, 0x12, 0x98, 0x25, 0x31, 0xe5, 0xca, 0xbd, 0x9e, + 0xf6, 0xe0, 0x48, 0xa8, 0x43, 0xc2, 0x7c, 0x6a, 0x1f, 0x12, 0x3e, 0x78, 0x16, 0xd6, 0x2a, 0xa4, + 0x9d, 0x22, 0x2c, 0x62, 0xba, 0x73, 0x50, 0x62, 0x3b, 0x71, 0x23, 0x19, 0xca, 0x5e, 0xd4, 0x7f, + 0x24, 0x21, 0x03, 0xc0, 0xbe, 0xb8, 0xe1, 0xc2, 0x4b, 0x16, 0xbc, 0xac, 0x5d, 0x1b, 0x09, 0xfb, + 0x60, 0xc0, 0xac, 0x37, 0x09, 0x2f, 0xe2, 0x30, 0x24, 0x63, 0x37, 0xc2, 0xe6, 0x7a, 0x51, 0x26, + 0xda, 0x8b, 0x0f, 0x46, 0x31, 0x63, 0xc8, 0x18, 0x6c, 0x76, 0xc1, 0x35, 0x9b, 0x78, 0x2e, 0xb2, + 0x17, 0xec, 0xc7, 0x66, 0x40, 0x69, 0xd3, 0xf6, 0xfa, 0x3d, 0xd3, 0xdb, 0xd5, 0xfe, 0x4d, 0x06, + 0x45, 0x72, 0xc5, 0xad, 0xf6, 0xfd, 0x5c, 0x5c, 0x9e, 0x67, 0xec, 0x43, 0x37, 0x70, 0xe0, 0x21, + 0x0f, 0x91, 0x7d, 0x24, 0x31, 0xf6, 0x91, 0xf6, 0x41, 0x59, 0x74, 0x92, 0x1a, 0x14, 0x4a, 0xef, + 0xd4, 0x8d, 0x0f, 0x05, 0xd3, 0xb7, 0x3a, 0xfe, 0xbe, 0x0b, 0xbd, 0xa1, 0xa1, 0x60, 0x62, 0xa9, + 0x6c, 0x90, 0xaf, 0x8c, 0xf0, 0x73, 0xcd, 0x04, 0x33, 0x34, 0xf1, 0xc0, 0x66, 0xd4, 0xc1, 0xa8, + 0x12, 0xa7, 0x40, 0xd1, 0x74, 0x7d, 0xcb, 0xf3, 0xe9, 0xf6, 0x2c, 0x7d, 0x42, 0xdd, 0x25, 0xf9, + 0xb7, 0xe9, 0xf6, 0x82, 0x08, 0x5e, 0x61, 0x82, 0xf6, 0x6b, 0x42, 0xf3, 0xc7, 0xe4, 0x9a, 0xa7, + 0x83, 0xfc, 0x9e, 0x31, 0x56, 0xb8, 0x1f, 0x04, 0xae, 0x32, 0xca, 0x6d, 0x7d, 0x8b, 0x04, 0x7c, + 0x0a, 0x63, 0x3b, 0x75, 0xb5, 0xf7, 0xc8, 0xcc, 0xfa, 0xdd, 0x15, 0x6e, 0x8c, 0xa0, 0x52, 0x8c, + 0xc6, 0x88, 0x30, 0x21, 0x61, 0xaf, 0x9b, 0x5b, 0xc2, 0x95, 0x85, 0x97, 0x70, 0xb5, 0x5f, 0x11, + 0xde, 0x8b, 0x0a, 0x45, 0x39, 0x62, 0x0d, 0x30, 0xe9, 0x0a, 0xcc, 0x8f, 0x08, 0xed, 0x2b, 0x8d, + 0x2a, 0xe9, 0x08, 0x61, 0xfb, 0xce, 0x29, 0x20, 0x95, 0x6b, 0xda, 0x4f, 0xcc, 0x80, 0xf9, 0xf3, + 0xae, 0xe5, 0x5b, 0xf6, 0x4e, 0xdb, 0x71, 0x7a, 0x9e, 0xf6, 0x6d, 0x66, 0xa3, 0xe2, 0xf1, 0xa0, + 0xd8, 0x71, 0xec, 0x6d, 0x6b, 0x87, 0x8a, 0xf1, 0x0c, 0x57, 0xb9, 0x72, 0x6d, 0x69, 0xc3, 0x75, + 0x2e, 0x59, 0x5d, 0xe8, 0x56, 0x70, 0x2e, 0x83, 0xe6, 0x46, 0x7a, 0xcc, 0x84, 0xcc, 0x7b, 0xf4, + 0xe0, 0x57, 0x6c, 0x79, 0x61, 0xcc, 0x1e, 0x9a, 0xc8, 0x44, 0xcc, 0xab, 0x81, 0x52, 0xcf, 0xb4, + 0x77, 0xf6, 0x83, 0x99, 0xf7, 0xe0, 0x2e, 0x6a, 0x1c, 0xa5, 0x3a, 0xfd, 0xc8, 0x08, 0x3f, 0xc7, + 0x4e, 0x6e, 0xc8, 0xd4, 0x27, 0x6d, 0x0f, 0xff, 0x3f, 0xfb, 0xf1, 0x1c, 0x98, 0x63, 0x0a, 0x55, + 0xe7, 0xc0, 0x4c, 0x55, 0x5f, 0x29, 0x6f, 0xd6, 0xdb, 0xca, 0x31, 0x24, 0xc5, 0xd6, 0xe6, 0xfa, + 0x7a, 0xd9, 0xa8, 0xfd, 0xa0, 0xae, 0xe4, 0xd0, 0xbb, 0x55, 0xa3, 0x8c, 0x9e, 0x15, 0x09, 0x3d, + 0xb4, 0xd6, 0x9a, 0x46, 0x5b, 0x6f, 0x28, 0x32, 0xb2, 0x47, 0xf5, 0xa7, 0x6d, 0x94, 0x1b, 0x55, + 0x25, 0x8f, 0xfe, 0x2f, 0x6f, 0xd6, 0xeb, 0x7a, 0x5b, 0x29, 0x44, 0x41, 0xf4, 0x8a, 0x28, 0xb9, + 0x52, 0x6e, 0x6d, 0x96, 0xeb, 0xca, 0x0c, 0x4a, 0x5e, 0xd9, 0x6c, 0x34, 0xee, 0x55, 0x4a, 0xa8, + 0x88, 0x4a, 0xb3, 0xb1, 0x52, 0xab, 0xea, 0x8d, 0xb6, 0x32, 0xab, 0x5e, 0x05, 0x8e, 0xb7, 0xda, + 0x46, 0xb9, 0xb6, 0xba, 0xd6, 0x5e, 0x69, 0x1a, 0xe7, 0xcb, 0x46, 0x55, 0x01, 0xaa, 0x02, 0xe6, + 0x37, 0x8c, 0xe6, 0x8a, 0x8e, 0xe3, 0xa5, 0x94, 0xeb, 0xca, 0x1c, 0xfa, 0xaa, 0x6d, 0x94, 0x1b, + 0xad, 0x7a, 0xb9, 0xad, 0x2b, 0xf3, 0x67, 0xef, 0x06, 0xa5, 0xa0, 0xba, 0x6a, 0x11, 0x48, 0x7a, + 0x43, 0x39, 0x86, 0x7f, 0x5b, 0x4a, 0x0e, 0xfd, 0xae, 0x20, 0x7e, 0x8b, 0x40, 0xaa, 0xea, 0x8a, + 0x8c, 0x7e, 0x6b, 0x6d, 0x25, 0x8f, 0x7e, 0x37, 0x10, 0x8b, 0x45, 0x20, 0xad, 0xd5, 0x94, 0x22, + 0xfa, 0x6d, 0xaf, 0x29, 0x33, 0xfc, 0x4d, 0xf7, 0x89, 0xbd, 0xf0, 0x41, 0xc9, 0xc7, 0x18, 0x1a, + 0x7e, 0x34, 0x47, 0xc6, 0xff, 0xb5, 0x57, 0x48, 0x22, 0x7d, 0x5d, 0x32, 0xfd, 0x74, 0x8d, 0xe6, + 0x2d, 0xb9, 0x09, 0xb6, 0x1a, 0x55, 0x03, 0xa7, 0xf4, 0x46, 0x75, 0xa3, 0x59, 0x6b, 0xb4, 0x49, + 0xa8, 0x33, 0xbd, 0x5c, 0x59, 0xc3, 0x38, 0x43, 0x84, 0xe0, 0x7a, 0xb3, 0xaa, 0xd7, 0xf1, 0x8b, + 0x95, 0xe6, 0x66, 0xa3, 0xaa, 0x6c, 0xa3, 0xb2, 0xca, 0x9b, 0xed, 0xb5, 0x2d, 0x43, 0x7f, 0xea, + 0x66, 0xcd, 0xd0, 0xab, 0xca, 0x0e, 0xa2, 0x51, 0x2f, 0x37, 0x56, 0x37, 0xcb, 0xab, 0x74, 0xbf, + 0x70, 0x73, 0x63, 0xa3, 0x89, 0x77, 0x0c, 0x77, 0xb5, 0x7f, 0xc8, 0x83, 0x52, 0x79, 0xdf, 0x77, + 0xb6, 0xad, 0x5e, 0x4f, 0x7b, 0x8e, 0x74, 0xf8, 0xa6, 0x58, 0xe6, 0x9a, 0xe2, 0x81, 0x06, 0x14, + 0x94, 0x15, 0x36, 0x9e, 0x20, 0x81, 0x69, 0x87, 0xa7, 0x23, 0x67, 0x6c, 0x99, 0xee, 0x34, 0x93, + 0x47, 0xe2, 0x88, 0x6b, 0xd3, 0x96, 0x85, 0xdf, 0xd0, 0xc7, 0xb3, 0xf7, 0x80, 0x79, 0x96, 0x12, + 0x0e, 0x07, 0x56, 0x5e, 0x25, 0xf1, 0xc2, 0x82, 0x08, 0x81, 0x24, 0x5e, 0x18, 0x3e, 0x78, 0x21, + 0xe1, 0xf6, 0x52, 0x6b, 0xd7, 0x91, 0x9e, 0x1e, 0x07, 0x73, 0x55, 0xbd, 0x55, 0x31, 0x6a, 0xd8, + 0x4f, 0x5d, 0xc9, 0xf3, 0x5e, 0x06, 0x89, 0x96, 0x19, 0x5f, 0x23, 0x51, 0xa5, 0xfc, 0xae, 0x90, + 0xbd, 0x15, 0x4f, 0x3b, 0x9d, 0x42, 0xbe, 0xe8, 0x81, 0xa6, 0x90, 0xda, 0x8b, 0xf2, 0x64, 0x9d, + 0xac, 0xb5, 0xbf, 0xb7, 0x67, 0xba, 0x57, 0x38, 0x7f, 0xb5, 0x71, 0xf5, 0x2e, 0x7e, 0x7c, 0x4f, + 0x8c, 0x02, 0x84, 0x4c, 0xa8, 0xbe, 0xeb, 0xec, 0xf5, 0x83, 0xbe, 0x9a, 0x3e, 0x69, 0xff, 0x53, + 0x78, 0xe6, 0x58, 0xae, 0x2d, 0x31, 0x95, 0x19, 0x63, 0x68, 0xff, 0x61, 0x49, 0x64, 0x16, 0x99, + 0x58, 0xcc, 0xf7, 0xba, 0x46, 0xfc, 0x4d, 0x1e, 0x5c, 0x45, 0x23, 0xbc, 0x84, 0xeb, 0x0f, 0xc8, + 0x54, 0x7d, 0x75, 0xa6, 0x9a, 0x41, 0x0d, 0x6a, 0x39, 0x32, 0xa8, 0x99, 0x0d, 0xef, 0xbc, 0xe0, + 0x86, 0xf7, 0xdb, 0x84, 0x0f, 0x3d, 0x94, 0x6b, 0x4b, 0x43, 0xea, 0x38, 0x9d, 0x6d, 0xf9, 0xe7, + 0x49, 0x22, 0xab, 0xad, 0x42, 0x1c, 0x7e, 0xaf, 0xeb, 0xda, 0x3b, 0x72, 0x60, 0x91, 0x57, 0x15, + 0xf5, 0x71, 0xa0, 0xd4, 0xa7, 0x29, 0x54, 0x2e, 0xa7, 0xe3, 0x94, 0xcb, 0x08, 0x73, 0x22, 0x88, + 0xa0, 0xdd, 0xed, 0x3b, 0x96, 0x1d, 0xae, 0xcb, 0x07, 0xcf, 0x68, 0xde, 0x89, 0xa7, 0x0e, 0x41, + 0xbc, 0x3f, 0xfc, 0x10, 0xc5, 0x8e, 0xcd, 0x33, 0xb1, 0x63, 0x91, 0x10, 0x7d, 0xb8, 0x87, 0x6f, + 0x31, 0xda, 0x77, 0x89, 0xc3, 0x8b, 0x64, 0xb0, 0x49, 0x67, 0x9f, 0x0c, 0x4a, 0x41, 0xf9, 0xc8, + 0xba, 0x6b, 0xd6, 0xeb, 0xe5, 0xf5, 0x32, 0x59, 0xa8, 0x6c, 0x6e, 0xe8, 0x8d, 0x72, 0x4d, 0xc9, + 0xa1, 0x81, 0xae, 0xbe, 0xde, 0x6a, 0x6f, 0x56, 0x6b, 0x4d, 0x45, 0xc2, 0x4f, 0x28, 0x53, 0x65, + 0x63, 0x43, 0x91, 0xb5, 0x37, 0xce, 0x80, 0x99, 0x55, 0xb3, 0xd7, 0x83, 0xee, 0x15, 0xed, 0x1b, + 0x12, 0x50, 0x82, 0xd9, 0xc1, 0xba, 0x69, 0x5b, 0xdb, 0xd0, 0xf3, 0x93, 0x17, 0x2a, 0xde, 0x27, + 0x7c, 0xb5, 0x19, 0x2d, 0x63, 0x69, 0x90, 0x7e, 0x8c, 0x8e, 0xdf, 0x0a, 0xf2, 0x96, 0xbd, 0xed, + 0xd0, 0xe5, 0x8a, 0x41, 0x7f, 0x9b, 0xe0, 0x63, 0xbc, 0x6d, 0x80, 0x33, 0x0a, 0xde, 0x6e, 0x26, + 0xc8, 0x45, 0xf6, 0xab, 0x16, 0xef, 0xc8, 0x83, 0x85, 0x80, 0x89, 0x9a, 0xdd, 0x85, 0xf7, 0xb3, + 0xdb, 0xa0, 0x3f, 0x93, 0x17, 0x0d, 0x30, 0x34, 0x58, 0x1f, 0x4c, 0x2a, 0x46, 0xa4, 0x6d, 0x00, + 0x3a, 0xa6, 0x0f, 0x77, 0x1c, 0xd7, 0x0a, 0xd7, 0x22, 0x1e, 0x97, 0x86, 0x5a, 0x85, 0x7c, 0x7d, + 0xc5, 0x60, 0xe8, 0xa8, 0x4f, 0x02, 0x73, 0x30, 0x8c, 0xe8, 0x18, 0x6c, 0x93, 0x26, 0xe2, 0xc5, + 0xe6, 0xd7, 0xfe, 0x48, 0x28, 0x8e, 0x91, 0x48, 0x35, 0xd3, 0x61, 0xb6, 0x35, 0x5e, 0xd7, 0xb3, + 0xd9, 0x58, 0x2f, 0x1b, 0xad, 0xb5, 0x72, 0xbd, 0x5e, 0x6b, 0xac, 0x86, 0x01, 0x8b, 0x55, 0xb0, + 0x58, 0x6d, 0x9e, 0x6f, 0x30, 0x11, 0xa5, 0xf3, 0xda, 0x06, 0x28, 0x05, 0xf2, 0x1a, 0x76, 0x8a, + 0x8a, 0x95, 0x19, 0x3d, 0x45, 0xc5, 0x24, 0x21, 0xd3, 0xd0, 0xea, 0x84, 0xae, 0xf5, 0xf8, 0xbf, + 0xf6, 0x5b, 0x26, 0x28, 0x60, 0x7f, 0x16, 0xed, 0x5d, 0x78, 0x5e, 0xdc, 0xef, 0x99, 0x1d, 0xa8, + 0xed, 0xa5, 0x58, 0x09, 0x0f, 0xee, 0xda, 0x95, 0x0e, 0xdc, 0xb5, 0x8b, 0xff, 0xd2, 0x11, 0xe3, + 0xe4, 0x30, 0x1f, 0x1a, 0x83, 0x64, 0xe1, 0x43, 0xfe, 0x24, 0x7a, 0x36, 0x11, 0xd7, 0x1b, 0xca, + 0x66, 0x8c, 0x4a, 0xc6, 0xf3, 0x94, 0xc5, 0x25, 0x2a, 0x49, 0x1c, 0x65, 0xdf, 0xe2, 0xbf, 0x92, + 0x07, 0x85, 0x56, 0xbf, 0x67, 0xf9, 0xda, 0x2f, 0x48, 0x13, 0xc1, 0x8c, 0xdc, 0x8f, 0x2c, 0x8f, + 0xbc, 0x1f, 0x39, 0xf2, 0x97, 0xcc, 0x0b, 0xf8, 0x4b, 0xb6, 0xe1, 0xfd, 0x3e, 0xef, 0x2f, 0x79, + 0x3b, 0x9d, 0xb6, 0x11, 0x6f, 0xcb, 0x87, 0x0f, 0x11, 0x29, 0xae, 0xd6, 0x90, 0xdb, 0x2c, 0xce, + 0x3e, 0x86, 0x06, 0xd5, 0x07, 0xa0, 0xb8, 0xdc, 0x6c, 0xb7, 0x9b, 0xeb, 0xca, 0x31, 0x3c, 0xfd, + 0x6a, 0x6e, 0x90, 0x10, 0xc7, 0xb5, 0x46, 0x43, 0x37, 0xb8, 0x19, 0x17, 0x7f, 0x59, 0x66, 0xe2, + 0x04, 0x8b, 0x2f, 0x3b, 0x4b, 0xf5, 0x12, 0x5b, 0x04, 0x8f, 0xe7, 0x27, 0x7b, 0xe5, 0xfa, 0x39, + 0x19, 0x14, 0xd6, 0xa1, 0xbb, 0x03, 0xb5, 0x67, 0xa4, 0x70, 0xb0, 0xdb, 0xb6, 0x5c, 0x8f, 0x5c, + 0x8a, 0x10, 0x39, 0xd8, 0xb1, 0x69, 0xea, 0x0d, 0x60, 0xc1, 0x83, 0x1d, 0xc7, 0xee, 0x06, 0x99, + 0x48, 0x7f, 0xc4, 0x27, 0x6a, 0x2f, 0x4b, 0x09, 0x19, 0x66, 0x74, 0x22, 0x5e, 0x72, 0x69, 0x80, + 0x19, 0x56, 0x6a, 0xf6, 0xc0, 0x7c, 0x4b, 0x46, 0x1f, 0xf5, 0xaf, 0x68, 0x2f, 0x13, 0xf6, 0x7c, + 0xbc, 0x05, 0x14, 0x2f, 0x04, 0xf7, 0xa2, 0xc9, 0xb1, 0xfd, 0x31, 0xcd, 0xa3, 0x2e, 0x83, 0x13, + 0x1e, 0xec, 0xc1, 0x8e, 0x0f, 0xbb, 0xa8, 0xe9, 0x1a, 0x23, 0x3b, 0x85, 0x83, 0xd9, 0xb5, 0xdf, + 0x63, 0x01, 0xbc, 0x93, 0x07, 0xf0, 0xc6, 0x21, 0xa2, 0x44, 0x15, 0x8a, 0x9f, 0x9b, 0xa0, 0x6a, + 0xb4, 0x7a, 0x4e, 0x68, 0xf8, 0x06, 0xcf, 0xe8, 0xdd, 0xae, 0xbf, 0xd7, 0xc3, 0xef, 0xe8, 0xd1, + 0xe0, 0xe0, 0x59, 0x5d, 0x02, 0x33, 0xa6, 0x7d, 0x05, 0xbf, 0xca, 0x27, 0xd4, 0x3a, 0xc8, 0xa4, + 0xbd, 0x32, 0x44, 0xfe, 0x2e, 0x0e, 0xf9, 0x47, 0x8a, 0xb1, 0x9b, 0x3d, 0xf0, 0x3f, 0x3a, 0x03, + 0x0a, 0x1b, 0xa6, 0xe7, 0x43, 0xed, 0x7f, 0xcb, 0xa2, 0xc8, 0xdf, 0x08, 0x16, 0xb7, 0x9d, 0xce, + 0xbe, 0x07, 0xbb, 0x7c, 0xa3, 0x1c, 0x48, 0x9d, 0x04, 0xe6, 0x38, 0x30, 0x3b, 0x4d, 0xa4, 0x64, + 0x03, 0x17, 0xd8, 0x03, 0xe9, 0xf8, 0xea, 0x45, 0x6f, 0xc3, 0x74, 0xfd, 0xe6, 0x36, 0x4e, 0x0b, + 0xaf, 0x5e, 0x64, 0x13, 0x39, 0xe8, 0x8b, 0x09, 0xd0, 0xcf, 0xc4, 0x43, 0x5f, 0x12, 0x80, 0x5e, + 0x2d, 0x83, 0xd2, 0xb6, 0xd5, 0x83, 0xf8, 0x83, 0x59, 0xfc, 0xc1, 0xb0, 0x31, 0x09, 0xcb, 0x3e, + 0x1c, 0x93, 0x56, 0xac, 0x1e, 0x34, 0xc2, 0xcf, 0x82, 0x89, 0x0c, 0x88, 0x26, 0x32, 0x75, 0x72, + 0x12, 0x0e, 0x19, 0x5e, 0xb6, 0xb9, 0x07, 0x83, 0x8d, 0x6f, 0x9b, 0x1e, 0x4b, 0xef, 0x9a, 0xbe, + 0x89, 0xc1, 0x98, 0x37, 0xf0, 0x7f, 0xde, 0x27, 0x5b, 0x1e, 0xf4, 0xc9, 0x7e, 0xae, 0x9c, 0xae, + 0x47, 0x0c, 0x98, 0x8d, 0x69, 0x51, 0x17, 0x02, 0x80, 0x88, 0xa5, 0x18, 0x3e, 0x23, 0x60, 0x3a, + 0xa6, 0x0b, 0xfd, 0x0d, 0xd6, 0x0b, 0xba, 0x60, 0xf0, 0x89, 0xf8, 0x10, 0x8e, 0xd7, 0x32, 0xf7, + 0xc8, 0xd5, 0x8a, 0x15, 0xf4, 0x8e, 0x1e, 0xae, 0x38, 0x90, 0x1e, 0xf5, 0xbf, 0x85, 0x49, 0xf7, + 0xbf, 0xc3, 0xea, 0x98, 0x7d, 0x33, 0x7c, 0x4d, 0x1e, 0xc8, 0x95, 0x7d, 0xff, 0x01, 0xdd, 0xfd, + 0x7e, 0x57, 0xd8, 0xc7, 0x9c, 0xf6, 0x67, 0xfb, 0xfe, 0xd1, 0xf6, 0xbe, 0x29, 0xb5, 0x44, 0xcc, + 0x97, 0x3d, 0xae, 0x6e, 0xd9, 0xeb, 0xc8, 0xdb, 0xe4, 0xf0, 0x68, 0xd4, 0x73, 0x72, 0x87, 0x37, + 0xcd, 0x35, 0xd2, 0x3f, 0x31, 0x3d, 0x43, 0xf8, 0x1c, 0x74, 0x3c, 0x79, 0xee, 0xf6, 0x07, 0xec, + 0xda, 0x8a, 0x45, 0x39, 0x6f, 0x90, 0x07, 0xed, 0xe5, 0xc2, 0x07, 0x46, 0x89, 0xd8, 0x12, 0x8f, + 0xf1, 0xa4, 0xb3, 0xa9, 0x5e, 0x2d, 0x74, 0x6c, 0x34, 0xa1, 0xd8, 0xec, 0x01, 0xfb, 0x7b, 0xf6, + 0x98, 0x4e, 0xf9, 0xd0, 0x88, 0x69, 0xaf, 0x12, 0x5e, 0xd0, 0x27, 0xd5, 0x1e, 0xb1, 0x57, 0x9f, + 0x4e, 0xde, 0x62, 0x8e, 0x62, 0x89, 0x05, 0x4f, 0xe1, 0xae, 0x68, 0x19, 0x14, 0xc9, 0xc2, 0xaf, + 0xf6, 0x66, 0xe1, 0x26, 0x82, 0x7a, 0x23, 0xfe, 0xf8, 0x4e, 0xf8, 0x9c, 0x66, 0xcd, 0x81, 0x3b, + 0xe6, 0x93, 0x4f, 0x75, 0xcc, 0x87, 0x8f, 0xc0, 0x22, 0xd0, 0x8e, 0x48, 0x1d, 0x33, 0x9e, 0x4e, + 0xa6, 0x69, 0x61, 0x43, 0x19, 0xca, 0x1e, 0xef, 0xe7, 0x17, 0xc0, 0x3c, 0x29, 0x9a, 0x9c, 0x2f, + 0xd4, 0xde, 0x23, 0x7d, 0xef, 0xa0, 0xae, 0x36, 0xc0, 0xfc, 0x65, 0xcc, 0x36, 0x09, 0x2f, 0x47, + 0x57, 0x2e, 0x6e, 0x4e, 0x5c, 0xf7, 0x20, 0xf5, 0x0c, 0x6e, 0x8d, 0xe6, 0xbe, 0x47, 0x32, 0x26, + 0x1b, 0x2c, 0xe4, 0xf0, 0x44, 0x11, 0x1b, 0x59, 0x6c, 0x92, 0x7a, 0x0a, 0x14, 0x2f, 0x59, 0xf0, + 0x72, 0xad, 0x4b, 0xad, 0x5b, 0xfa, 0xa4, 0xfd, 0xba, 0xb0, 0xcf, 0x24, 0x0b, 0x37, 0xe5, 0x25, + 0x5b, 0x2d, 0x14, 0xf3, 0x9c, 0x1c, 0xc9, 0xd6, 0x14, 0xa2, 0x01, 0x49, 0xe4, 0x9e, 0x7a, 0x1a, + 0xca, 0xbf, 0x92, 0x42, 0x11, 0xe3, 0x0c, 0x67, 0x3e, 0x08, 0x5f, 0xe2, 0x59, 0x73, 0x22, 0x80, + 0xa8, 0xfc, 0x89, 0xf4, 0xf9, 0x62, 0x91, 0xe1, 0x46, 0x14, 0x9d, 0xbd, 0xe4, 0x5f, 0x27, 0x83, + 0xd9, 0x16, 0xf4, 0x57, 0x2c, 0xd8, 0xeb, 0x7a, 0x9a, 0x7b, 0x78, 0xd3, 0xe8, 0x56, 0x50, 0xdc, + 0xc6, 0xc4, 0x46, 0x6d, 0x4e, 0xd2, 0x6c, 0xda, 0x6b, 0x24, 0x51, 0x3f, 0x20, 0xba, 0xfa, 0x16, + 0x70, 0x3b, 0x11, 0x98, 0xc4, 0x4e, 0xd3, 0x25, 0x97, 0x3c, 0x85, 0xab, 0x92, 0x64, 0x30, 0x8f, + 0xb7, 0xff, 0xa1, 0x5f, 0xee, 0x59, 0x3b, 0x36, 0x7b, 0xbb, 0xfa, 0xd8, 0x2d, 0x44, 0x7d, 0x34, + 0x28, 0x98, 0x88, 0x1a, 0x75, 0x77, 0xd3, 0x86, 0x76, 0x9e, 0xb8, 0x3c, 0x83, 0x64, 0x4c, 0x71, + 0x31, 0x49, 0xa4, 0xd8, 0x01, 0xcf, 0x53, 0xbc, 0x98, 0x64, 0x64, 0xe1, 0xd9, 0x23, 0xf6, 0x35, + 0x19, 0x9c, 0xa4, 0x0c, 0x9c, 0x83, 0xae, 0x6f, 0x75, 0xcc, 0x1e, 0x41, 0xee, 0x85, 0xb9, 0x49, + 0x40, 0xb7, 0x06, 0x16, 0x2e, 0xb1, 0x64, 0x29, 0x84, 0x67, 0x87, 0x42, 0xc8, 0x31, 0x60, 0xf0, + 0x1f, 0xa6, 0xb8, 0xe0, 0x81, 0x93, 0x2a, 0x47, 0x73, 0x8a, 0x17, 0x3c, 0x08, 0x33, 0x91, 0x3d, + 0xc4, 0x2f, 0xa1, 0x41, 0x35, 0xa3, 0xee, 0xf3, 0x8b, 0xc2, 0xd8, 0x6e, 0x82, 0x39, 0x8c, 0x25, + 0xf9, 0x90, 0x2e, 0x43, 0x24, 0x28, 0x71, 0xd8, 0xef, 0xd0, 0x8b, 0xee, 0xc3, 0x6f, 0x0d, 0x96, + 0x8e, 0x76, 0x1e, 0x80, 0xe8, 0x15, 0xdb, 0x49, 0xe7, 0xe2, 0x3a, 0x69, 0x49, 0xac, 0x93, 0x7e, + 0x93, 0x70, 0x98, 0xc3, 0xe1, 0x6c, 0x1f, 0x5e, 0x3d, 0xc4, 0x02, 0xdc, 0x8d, 0x2e, 0x3d, 0x7b, + 0xbd, 0x78, 0x25, 0xd5, 0x8b, 0xea, 0x7e, 0xbf, 0x67, 0x75, 0xd0, 0x7c, 0xea, 0x93, 0x13, 0x99, + 0x4f, 0xb1, 0xfd, 0x81, 0x3c, 0xd0, 0x1f, 0x1c, 0xc2, 0x92, 0xbe, 0x09, 0x1c, 0x27, 0x45, 0x54, + 0x42, 0xb6, 0x0a, 0x24, 0x88, 0xdb, 0x40, 0x32, 0x1f, 0xb5, 0x5d, 0x50, 0x09, 0x42, 0x21, 0x8c, + 0xb1, 0xf4, 0x99, 0xce, 0xd8, 0x4d, 0xab, 0x20, 0x71, 0x9c, 0x4d, 0xe1, 0x48, 0x56, 0x9e, 0x58, + 0xbb, 0x9b, 0xfd, 0x2e, 0xd2, 0x8e, 0x2f, 0xe7, 0x27, 0x31, 0x22, 0x3c, 0x85, 0x7a, 0x9a, 0xca, + 0xb1, 0x4b, 0x1a, 0x51, 0x91, 0x61, 0x3f, 0xd2, 0x86, 0xf7, 0xfb, 0x6b, 0xc7, 0x88, 0x5f, 0xaa, + 0x7a, 0x33, 0x38, 0x7e, 0xc1, 0xec, 0x5c, 0xdc, 0x71, 0x9d, 0x7d, 0x7c, 0x6b, 0xbb, 0x43, 0xaf, + 0x7f, 0x5f, 0x3b, 0x66, 0x0c, 0xbe, 0x50, 0x6f, 0x0b, 0x4c, 0x87, 0xc2, 0x28, 0xd3, 0x61, 0xed, + 0x18, 0x35, 0x1e, 0xd4, 0xc7, 0x84, 0x9d, 0x4e, 0x31, 0xb1, 0xd3, 0x59, 0x3b, 0x16, 0x74, 0x3b, + 0x6a, 0x15, 0x94, 0xba, 0xd6, 0x25, 0xbc, 0x55, 0x8d, 0x67, 0x5d, 0xa3, 0x82, 0x0e, 0x55, 0xad, + 0x4b, 0x64, 0x63, 0x7b, 0xed, 0x98, 0x11, 0x7e, 0xa9, 0xae, 0x82, 0x59, 0xbc, 0x2d, 0x80, 0xc9, + 0x94, 0x52, 0x05, 0x14, 0x5a, 0x3b, 0x66, 0x44, 0xdf, 0x22, 0xeb, 0x23, 0x8f, 0xcf, 0x5d, 0xdf, + 0x15, 0x6c, 0xb7, 0xe7, 0x52, 0x6d, 0xb7, 0x23, 0x59, 0x90, 0x0d, 0xf7, 0x53, 0xa0, 0xd0, 0xc1, + 0x12, 0x96, 0xa8, 0x84, 0xc9, 0xa3, 0x7a, 0x27, 0xc8, 0xef, 0x99, 0x6e, 0x30, 0x79, 0xbe, 0x71, + 0x34, 0xdd, 0x75, 0xd3, 0xbd, 0x88, 0x10, 0x44, 0x5f, 0x2d, 0xcf, 0x80, 0x02, 0x16, 0x5c, 0xf8, + 0x47, 0x7b, 0x5b, 0x9e, 0x98, 0x21, 0x15, 0xc7, 0x46, 0xc3, 0x7e, 0xdb, 0x09, 0x0e, 0xa7, 0xff, + 0x7a, 0x6e, 0x32, 0x16, 0xe4, 0x55, 0xcc, 0x75, 0x2a, 0xb6, 0xf5, 0x8c, 0x7d, 0x78, 0x0f, 0xbc, + 0x42, 0x97, 0x44, 0x87, 0xbd, 0x52, 0xcf, 0x00, 0xe0, 0xd3, 0x93, 0x7a, 0x61, 0x10, 0x53, 0x26, + 0x25, 0x5a, 0x3e, 0x28, 0x8c, 0x76, 0x54, 0xf9, 0xbd, 0x31, 0x4c, 0x97, 0x41, 0x41, 0xc4, 0xcf, + 0xc0, 0x7b, 0x96, 0xcd, 0xd4, 0x39, 0x78, 0x4c, 0xd9, 0x29, 0xa5, 0x35, 0x6a, 0x46, 0xb0, 0x97, + 0x7d, 0xdf, 0xf4, 0x96, 0x3c, 0xb9, 0x51, 0x82, 0x9c, 0x80, 0xd6, 0xef, 0xb7, 0xbc, 0xe8, 0xfe, + 0x66, 0xed, 0x73, 0x13, 0x51, 0x9a, 0x21, 0x03, 0x8e, 0x3c, 0x74, 0xc0, 0x39, 0x10, 0x20, 0x28, + 0x3f, 0x22, 0x40, 0x50, 0x21, 0xdd, 0xca, 0xe1, 0x47, 0x59, 0xfd, 0xd9, 0xe0, 0xf5, 0xe7, 0x8e, + 0x18, 0x80, 0x86, 0xc9, 0x65, 0x22, 0xf6, 0xcd, 0xbb, 0x42, 0x4d, 0x69, 0x71, 0x9a, 0x72, 0xd7, + 0xf8, 0x8c, 0x64, 0xaf, 0x2d, 0x1f, 0xce, 0x83, 0xab, 0x22, 0x66, 0x1a, 0xf0, 0x32, 0x55, 0x94, + 0x3f, 0x9c, 0x88, 0xa2, 0xa4, 0x77, 0x74, 0xce, 0x5a, 0x63, 0x7e, 0x5b, 0xf8, 0xdc, 0xfe, 0x20, + 0x50, 0xa1, 0x6c, 0x62, 0x94, 0xe5, 0x14, 0x28, 0x92, 0x1e, 0x86, 0x42, 0x43, 0x9f, 0x52, 0x76, + 0x37, 0x62, 0xa7, 0xfd, 0x45, 0x79, 0x9b, 0x82, 0xfe, 0xd0, 0x75, 0x8d, 0xf6, 0xbe, 0x6b, 0xd7, + 0x6c, 0xdf, 0xd1, 0x7e, 0x64, 0x22, 0x8a, 0x13, 0x7a, 0xc3, 0xc9, 0xe3, 0x78, 0xc3, 0x8d, 0xb5, + 0xca, 0x11, 0xd4, 0xe0, 0x48, 0x56, 0x39, 0x62, 0x0a, 0xcf, 0x1e, 0xbf, 0x77, 0xca, 0xe0, 0x14, + 0x9d, 0x6c, 0x2d, 0xf3, 0x16, 0xa2, 0x76, 0xef, 0x24, 0x80, 0x3c, 0x19, 0x98, 0x49, 0xd4, 0x8f, + 0x1e, 0x3f, 0xf0, 0x51, 0x0a, 0x12, 0x6f, 0x0c, 0xe5, 0xa6, 0x83, 0x03, 0x1c, 0x4e, 0x04, 0x29, + 0xb1, 0x8b, 0x42, 0x53, 0xb0, 0x91, 0x3d, 0x66, 0x2f, 0x96, 0x41, 0x91, 0xc4, 0x48, 0xd0, 0x36, + 0x33, 0x71, 0x98, 0xe0, 0xef, 0x67, 0x11, 0xd8, 0x91, 0x23, 0xdc, 0x64, 0x16, 0x3f, 0x22, 0xcd, + 0x5e, 0xdc, 0x50, 0x56, 0xa6, 0xe0, 0x42, 0x28, 0x81, 0xb9, 0x16, 0xf4, 0x2b, 0xa6, 0xeb, 0x5a, + 0xe6, 0xce, 0xa4, 0x3c, 0xbe, 0x45, 0xbd, 0x87, 0xb5, 0x6f, 0xe7, 0x44, 0xcf, 0xb2, 0x87, 0x0b, + 0xe1, 0x01, 0xab, 0x31, 0x51, 0xc0, 0x5f, 0x2f, 0x74, 0x5e, 0x7d, 0x14, 0xb5, 0x29, 0x78, 0x6c, + 0x4b, 0x60, 0x26, 0x88, 0x83, 0x71, 0x2b, 0x17, 0x1b, 0x65, 0xd7, 0xdf, 0x0b, 0x8e, 0xc1, 0xe0, + 0xff, 0x07, 0xe3, 0x2f, 0x68, 0xaf, 0x48, 0xe9, 0x28, 0x9f, 0x1c, 0xc4, 0x23, 0x5d, 0x1b, 0x4b, + 0xe3, 0x0e, 0x7f, 0x54, 0x61, 0x3b, 0x3e, 0x34, 0x43, 0x97, 0x23, 0xeb, 0xa6, 0x0f, 0xef, 0xd7, + 0xbe, 0x28, 0x83, 0x99, 0x16, 0xf4, 0xd1, 0x78, 0x8b, 0xd8, 0x3f, 0xb4, 0x86, 0xab, 0xcc, 0x8a, + 0x07, 0x3d, 0x5b, 0xab, 0xde, 0x0d, 0x66, 0xfb, 0xae, 0xd3, 0x81, 0x9e, 0x47, 0x57, 0x2f, 0x58, + 0x47, 0xb5, 0x61, 0xa3, 0x3f, 0x66, 0x6d, 0x69, 0x23, 0xf8, 0xc6, 0x88, 0x3e, 0x4f, 0x6b, 0x06, + 0x10, 0x4a, 0xb4, 0x82, 0xd3, 0x36, 0x03, 0x92, 0x0a, 0xcf, 0x1e, 0xe8, 0xdf, 0x97, 0xc1, 0x7c, + 0x0b, 0xfa, 0xa1, 0x14, 0x53, 0x6c, 0x72, 0xc4, 0xc3, 0xcb, 0x41, 0x29, 0x1f, 0x0e, 0xca, 0x77, + 0x0a, 0x5f, 0xbc, 0xcb, 0x4b, 0x33, 0x24, 0x36, 0x11, 0x3c, 0xdf, 0x22, 0x74, 0xdf, 0xae, 0x18, + 0x07, 0x53, 0x38, 0xbe, 0xf6, 0x70, 0x30, 0x8b, 0x79, 0xc1, 0x0d, 0xf6, 0x27, 0xf2, 0x51, 0xe3, + 0xfd, 0x52, 0x46, 0x8d, 0xf7, 0x49, 0xa0, 0xb0, 0x67, 0xba, 0x17, 0x83, 0xc3, 0xb7, 0x8f, 0x10, + 0x5b, 0xfd, 0xf2, 0x0c, 0xf2, 0xd5, 0x70, 0x3f, 0xcd, 0x42, 0x3a, 0x3f, 0xcd, 0xd7, 0x4b, 0xa9, + 0x46, 0x42, 0x32, 0x77, 0x98, 0x60, 0x93, 0x4f, 0x31, 0x6e, 0x26, 0x94, 0x9d, 0xbd, 0x72, 0xbc, + 0x50, 0x06, 0x25, 0x34, 0x6e, 0x63, 0x7b, 0xfc, 0xfc, 0xe1, 0xd5, 0x61, 0xb8, 0xa1, 0x9f, 0xb2, + 0x07, 0x0e, 0x24, 0x32, 0x39, 0xf3, 0x3e, 0x45, 0x0f, 0x9c, 0x54, 0x78, 0xf6, 0x78, 0xbc, 0x9b, + 0xe0, 0x81, 0xdb, 0x83, 0xf6, 0x06, 0x19, 0xc8, 0xab, 0xd0, 0x9f, 0xb6, 0x15, 0xf9, 0x76, 0xe1, + 0xf0, 0xa2, 0x9c, 0xc0, 0x30, 0xcf, 0x4b, 0xab, 0x70, 0x32, 0x0d, 0x48, 0x2c, 0xae, 0xa8, 0x10, + 0x03, 0xd9, 0xa3, 0xf6, 0x7e, 0x82, 0x1a, 0xd9, 0x5c, 0xf8, 0xe1, 0x09, 0xf4, 0xaa, 0xd3, 0x5d, + 0xf8, 0x08, 0x04, 0x88, 0x69, 0x1c, 0x55, 0x7b, 0x1b, 0x56, 0x78, 0xf6, 0xc8, 0xbd, 0x54, 0xc6, + 0x97, 0x98, 0x55, 0x76, 0x61, 0xe7, 0x22, 0xec, 0xb2, 0x97, 0x65, 0x8f, 0x0b, 0xdd, 0x69, 0x30, + 0xd3, 0x21, 0xd4, 0x30, 0x78, 0x25, 0x23, 0x78, 0xe4, 0x6f, 0x16, 0x4a, 0xbc, 0x3b, 0x8b, 0xef, + 0x88, 0xc8, 0xe7, 0x13, 0xc1, 0x45, 0xec, 0xc2, 0x2b, 0x81, 0xe2, 0xa7, 0x60, 0xb6, 0x90, 0x59, + 0x46, 0xad, 0xe3, 0xd8, 0xda, 0x7f, 0x3b, 0x3c, 0x2c, 0xd7, 0x81, 0x59, 0xab, 0xe3, 0xd8, 0x38, + 0x04, 0x5c, 0x70, 0x08, 0x28, 0x4c, 0x08, 0xde, 0xea, 0x7b, 0xce, 0x7d, 0x16, 0xdd, 0x35, 0x8f, + 0x12, 0xc6, 0x35, 0x26, 0x10, 0xeb, 0x47, 0x65, 0x4c, 0x0c, 0x29, 0x3b, 0x7b, 0xc8, 0x3e, 0x15, + 0x79, 0xb7, 0x91, 0xae, 0xf0, 0x01, 0xb1, 0x0a, 0x3c, 0xce, 0x70, 0xc6, 0xd6, 0xe2, 0x48, 0x86, + 0xb3, 0x04, 0x06, 0xa6, 0x70, 0x13, 0x61, 0x84, 0x63, 0xe6, 0x6b, 0xc0, 0x87, 0x40, 0x67, 0x72, + 0xe6, 0xe1, 0x98, 0xe8, 0x1c, 0x8d, 0x89, 0xf8, 0x11, 0x1a, 0x9e, 0x9e, 0x5a, 0x3c, 0xda, 0x7f, + 0x9f, 0x04, 0x38, 0x77, 0x8c, 0xe3, 0xaf, 0x40, 0xbc, 0x15, 0xb4, 0xb7, 0x4a, 0xa2, 0x21, 0x50, + 0x0e, 0x48, 0x10, 0x51, 0x99, 0x08, 0x82, 0x6f, 0x12, 0x8a, 0x4d, 0x22, 0x52, 0x7e, 0xf6, 0x00, + 0xbe, 0x40, 0x06, 0x8b, 0xd8, 0x47, 0xa0, 0x07, 0x4d, 0x97, 0x74, 0x94, 0x13, 0x71, 0x94, 0x7f, + 0xb7, 0x70, 0x80, 0x1f, 0x5e, 0x0e, 0x11, 0x1f, 0x13, 0x81, 0x42, 0x2c, 0xba, 0x8f, 0x20, 0x0b, + 0x53, 0xd9, 0x46, 0x51, 0x42, 0x16, 0xa8, 0x8a, 0x4f, 0x06, 0x8f, 0x94, 0x1e, 0xb9, 0xbc, 0x30, + 0x82, 0xc6, 0x36, 0x65, 0x8f, 0x5c, 0x11, 0x26, 0xb2, 0xc7, 0xe4, 0x0d, 0x8f, 0xa6, 0x0b, 0xce, + 0x6d, 0xf3, 0x42, 0x0f, 0x6a, 0xaf, 0xca, 0x87, 0x27, 0xda, 0x7e, 0x7f, 0x22, 0x1e, 0x98, 0x87, + 0xb8, 0x8c, 0x4a, 0x05, 0x79, 0xd7, 0xb9, 0x4c, 0x96, 0xb6, 0x16, 0x0c, 0xfc, 0x9f, 0xc4, 0xb3, + 0xec, 0xed, 0xef, 0xd9, 0xe4, 0x64, 0xe8, 0x82, 0x11, 0x3c, 0xaa, 0x37, 0x80, 0x85, 0xcb, 0x96, + 0xbf, 0xbb, 0x06, 0xcd, 0x2e, 0x74, 0x0d, 0xe7, 0x32, 0xf6, 0x98, 0x2b, 0x19, 0x7c, 0x22, 0xef, + 0xbf, 0x22, 0x60, 0x5f, 0x22, 0xa1, 0x4c, 0xe7, 0xf8, 0x5b, 0x1a, 0xcb, 0x33, 0x9e, 0xab, 0xec, + 0x15, 0xe6, 0x03, 0x32, 0x98, 0x35, 0x9c, 0xcb, 0x54, 0x49, 0xfe, 0x9f, 0xa3, 0xd5, 0x91, 0xd4, + 0x13, 0x3d, 0x2c, 0xb9, 0x90, 0xfd, 0xa9, 0x4f, 0xf4, 0x12, 0x8b, 0x9f, 0xca, 0xc9, 0xa5, 0x79, + 0xc3, 0xb9, 0xdc, 0x82, 0x3e, 0x69, 0x11, 0xda, 0xd6, 0x84, 0x9c, 0xac, 0x2d, 0x8f, 0x10, 0xa4, + 0xf3, 0xf0, 0xf0, 0x39, 0xed, 0x2e, 0x42, 0x28, 0xa0, 0x90, 0xc5, 0x69, 0xef, 0x22, 0x8c, 0xe4, + 0x60, 0x0a, 0x31, 0x52, 0x64, 0x30, 0x67, 0x38, 0x97, 0xd1, 0xd0, 0xb0, 0x62, 0xf5, 0x7a, 0x93, + 0x19, 0x21, 0xd3, 0x1a, 0xff, 0x81, 0x18, 0x02, 0x2e, 0xa6, 0x6e, 0xfc, 0x8f, 0x60, 0x20, 0x7b, + 0x18, 0x9e, 0x4b, 0x1a, 0x4b, 0x30, 0x42, 0xdb, 0x93, 0xc1, 0x61, 0xdc, 0x06, 0x11, 0xb2, 0x71, + 0x64, 0x0d, 0x22, 0x8e, 0x83, 0xa9, 0xec, 0x9c, 0x2c, 0x56, 0xf0, 0x30, 0x3f, 0xd9, 0x36, 0xf1, + 0xde, 0x74, 0xae, 0x89, 0x74, 0xd8, 0xe5, 0x18, 0x99, 0x08, 0x1a, 0x29, 0x5c, 0x10, 0x05, 0x78, + 0xc8, 0x1e, 0x8f, 0x8f, 0xcb, 0x60, 0x9e, 0xb0, 0xf0, 0x00, 0xb1, 0x02, 0xc6, 0x6a, 0x54, 0x6c, + 0x0d, 0x8e, 0xa6, 0x51, 0x25, 0x70, 0x30, 0x95, 0xfb, 0xfc, 0x91, 0x1d, 0x37, 0xc6, 0xf1, 0xf1, + 0x38, 0x04, 0xc7, 0x36, 0xc6, 0x26, 0x78, 0x84, 0x7c, 0x1c, 0x63, 0xec, 0x88, 0x8e, 0x91, 0x3f, + 0x37, 0x6c, 0x45, 0x93, 0xc4, 0xe0, 0x10, 0x4d, 0x61, 0x82, 0x30, 0x8c, 0xd9, 0x14, 0x8e, 0x08, + 0x89, 0xaf, 0xcb, 0x00, 0x10, 0x06, 0xd6, 0x9d, 0x4b, 0xf8, 0x22, 0xcd, 0x09, 0x74, 0x67, 0x83, + 0x6e, 0xf5, 0xf2, 0x08, 0xb7, 0xfa, 0x94, 0x21, 0x5c, 0xd2, 0xae, 0x04, 0x32, 0x52, 0x46, 0x95, + 0x9c, 0xfa, 0x4a, 0x60, 0x72, 0xf9, 0xd9, 0x63, 0xfc, 0x55, 0x62, 0xcd, 0x45, 0x07, 0x4c, 0x7f, + 0x7e, 0x22, 0x28, 0x33, 0xb3, 0x7f, 0x99, 0x9f, 0xfd, 0x1f, 0x02, 0xdb, 0x71, 0x6d, 0xc4, 0x51, + 0x07, 0x47, 0xb3, 0xb7, 0x11, 0x8f, 0xee, 0x80, 0xe8, 0x0f, 0xe7, 0xc1, 0x71, 0xda, 0x89, 0x7c, + 0x2f, 0x40, 0x9c, 0xf2, 0x1c, 0x1e, 0xd7, 0x49, 0x8e, 0x40, 0x79, 0x52, 0x0b, 0x52, 0x69, 0x96, + 0x32, 0x05, 0xd8, 0x9b, 0xca, 0xea, 0x46, 0x51, 0xbf, 0xbf, 0x6f, 0xda, 0x5d, 0xf1, 0x70, 0xbf, + 0x23, 0x80, 0x0f, 0xd6, 0x1a, 0x65, 0x7e, 0xad, 0x71, 0xc8, 0xca, 0x64, 0xea, 0x9d, 0x6b, 0x2c, + 0x32, 0xc2, 0xee, 0xd4, 0x77, 0xae, 0xe3, 0xcb, 0xce, 0x1e, 0xa5, 0xf7, 0xca, 0x20, 0xdf, 0x72, + 0x5c, 0x5f, 0x7b, 0x5e, 0x9a, 0xd6, 0x49, 0x24, 0x1f, 0x81, 0x14, 0x3c, 0xab, 0x15, 0x90, 0x47, + 0x95, 0xa3, 0x33, 0x86, 0x5b, 0x93, 0x8f, 0x3a, 0x9b, 0xbe, 0x89, 0xbd, 0xba, 0x51, 0xf9, 0x4b, + 0xed, 0x2b, 0x7d, 0x68, 0xe0, 0x8f, 0xd3, 0xc6, 0xd3, 0x21, 0xf2, 0x6b, 0xc5, 0x1f, 0xc0, 0xc8, + 0x2c, 0x9e, 0x4e, 0x6c, 0xc9, 0xd9, 0xe3, 0xf6, 0xda, 0xe3, 0xd4, 0xb7, 0x75, 0xc5, 0xea, 0x41, + 0xed, 0x79, 0xc4, 0x65, 0xa4, 0x61, 0xee, 0x41, 0xf1, 0x23, 0x31, 0x89, 0xae, 0xad, 0x38, 0xbe, + 0xac, 0x1c, 0xc5, 0x97, 0x4d, 0xdb, 0xa0, 0xc8, 0x01, 0x74, 0xc2, 0xd2, 0xb4, 0x1b, 0x54, 0x42, + 0xd9, 0x53, 0x89, 0xd3, 0x79, 0xa2, 0x05, 0x7d, 0x62, 0x54, 0x36, 0x83, 0x2b, 0x92, 0x9e, 0x3e, + 0x91, 0x88, 0x9d, 0xe1, 0x85, 0x3a, 0xf2, 0xc0, 0x0d, 0x4c, 0x1f, 0x60, 0xc1, 0x59, 0xe7, 0xc1, + 0xf9, 0x81, 0x78, 0x01, 0xf1, 0x4c, 0x4e, 0x04, 0xa6, 0xb7, 0x87, 0x30, 0x6d, 0x70, 0x30, 0xdd, + 0x39, 0x26, 0x17, 0xd9, 0x03, 0xf6, 0x53, 0x05, 0x70, 0x9c, 0x4c, 0xfa, 0xcb, 0x76, 0x97, 0x46, + 0x58, 0x7d, 0xb3, 0x74, 0xc4, 0x9b, 0x6d, 0x07, 0x43, 0xb0, 0x72, 0xb1, 0x9c, 0x0b, 0x03, 0xb1, + 0x9c, 0xd5, 0x65, 0x12, 0xce, 0x15, 0x75, 0xa2, 0x78, 0xa7, 0x6d, 0x54, 0x98, 0x09, 0x2c, 0x7b, + 0xdc, 0xe5, 0x86, 0xdf, 0xf1, 0xf7, 0x88, 0xce, 0x88, 0xdf, 0x23, 0xfa, 0xbb, 0xe9, 0xd6, 0xed, + 0x70, 0xd1, 0x03, 0x02, 0xcf, 0xd8, 0x76, 0x4a, 0xb1, 0xa2, 0x27, 0xc0, 0xdd, 0x7f, 0x0e, 0x77, + 0xb2, 0x28, 0x82, 0xc8, 0x98, 0xee, 0x64, 0x98, 0xc0, 0x51, 0xba, 0x93, 0x8d, 0x62, 0x20, 0x7b, + 0x1c, 0x7f, 0xb7, 0x40, 0x77, 0xf3, 0x71, 0xbb, 0xd1, 0xfe, 0x44, 0xca, 0x7c, 0x94, 0xfe, 0x4e, + 0x2e, 0x95, 0xff, 0x33, 0xe6, 0x2b, 0x79, 0x98, 0x4e, 0xe3, 0xd1, 0x9c, 0x44, 0x6e, 0x0a, 0xeb, + 0x46, 0x12, 0xf6, 0x45, 0x3f, 0x6f, 0x75, 0xfd, 0xdd, 0x09, 0x9d, 0xe8, 0xb8, 0x8c, 0x68, 0xd1, + 0x78, 0xf5, 0xe4, 0x41, 0xfb, 0xd7, 0x5c, 0xaa, 0x10, 0x52, 0xa1, 0x48, 0x30, 0x5b, 0x31, 0x22, + 0x4e, 0x11, 0xf8, 0x29, 0x91, 0xde, 0x14, 0x35, 0xfa, 0x9c, 0xd5, 0x85, 0xce, 0x03, 0x50, 0xa3, + 0x31, 0x5f, 0x93, 0xd3, 0xe8, 0x24, 0x72, 0xff, 0x49, 0x35, 0x3a, 0x14, 0xc9, 0x84, 0x34, 0x3a, + 0x91, 0x5e, 0xf6, 0x32, 0x7e, 0xc5, 0x3c, 0x9d, 0x48, 0xd5, 0x2d, 0xfb, 0xa2, 0xf6, 0x4f, 0x45, + 0xa0, 0x04, 0x71, 0x84, 0xfd, 0x5d, 0x1a, 0x0b, 0xe6, 0xc3, 0xc2, 0x77, 0xa3, 0x8c, 0x11, 0xef, + 0x85, 0x0f, 0x27, 0x55, 0x38, 0x10, 0x4e, 0xaa, 0x0c, 0x16, 0x2c, 0xdb, 0x87, 0xae, 0x6d, 0xf6, + 0x56, 0x7a, 0xe6, 0x8e, 0x77, 0x7a, 0x66, 0xe8, 0xe5, 0x75, 0x35, 0x26, 0x8f, 0xc1, 0x7f, 0xc1, + 0x5e, 0x20, 0x5a, 0xe2, 0x2f, 0x10, 0x8d, 0x89, 0x7e, 0x35, 0x1b, 0x1f, 0xfd, 0x2a, 0x8c, 0x6e, + 0x05, 0x46, 0x07, 0xc7, 0x16, 0xb5, 0x8d, 0x53, 0x86, 0xfb, 0xbb, 0x55, 0x30, 0x0a, 0x5b, 0x18, + 0xfa, 0xf1, 0xd5, 0x72, 0xaa, 0xd5, 0x3d, 0xa4, 0x08, 0x4b, 0x83, 0x4a, 0x90, 0xda, 0x42, 0x65, + 0x2b, 0x2f, 0x0f, 0x54, 0x3e, 0x34, 0x79, 0xf2, 0x02, 0x26, 0x0f, 0xab, 0x54, 0x05, 0xd1, 0x3b, + 0x5d, 0xc5, 0x17, 0x0b, 0x45, 0x6a, 0x3b, 0x85, 0xd3, 0x48, 0x05, 0x70, 0x22, 0x88, 0x76, 0xdb, + 0xef, 0x43, 0xd3, 0x35, 0xed, 0x0e, 0xd4, 0x3e, 0x25, 0x4d, 0xc2, 0xec, 0x5d, 0x01, 0x25, 0xab, + 0xe3, 0xd8, 0x2d, 0xeb, 0x99, 0xc1, 0xe5, 0x72, 0xc9, 0x41, 0xd6, 0xb1, 0x44, 0x6a, 0xf4, 0x0b, + 0x23, 0xfc, 0x56, 0xad, 0x81, 0xd9, 0x8e, 0xe9, 0x76, 0x49, 0x10, 0xbe, 0xc2, 0xc0, 0x45, 0x4e, + 0xb1, 0x84, 0x2a, 0xc1, 0x27, 0x46, 0xf4, 0xb5, 0xda, 0xe4, 0x85, 0x58, 0x1c, 0x88, 0xe6, 0x11, + 0x4b, 0xac, 0x1a, 0x7d, 0xc4, 0xc9, 0x1c, 0x49, 0xc7, 0x85, 0x3d, 0x93, 0x5c, 0x3a, 0x3e, 0x43, + 0xee, 0x88, 0x0e, 0x13, 0xd2, 0x2e, 0x0f, 0xe0, 0xa2, 0x0e, 0xa0, 0x31, 0xed, 0xe5, 0x01, 0x21, + 0x2e, 0xb2, 0xd7, 0xcc, 0x77, 0x15, 0xc1, 0x02, 0xe9, 0xd5, 0xa8, 0x38, 0xb5, 0x17, 0xc8, 0xa0, + 0xd8, 0x82, 0xfe, 0x3d, 0xf0, 0x8a, 0xd6, 0x3a, 0xfc, 0x98, 0xac, 0x00, 0xf9, 0x62, 0x18, 0x70, + 0x10, 0xfd, 0x4d, 0xbb, 0x6f, 0x1f, 0xf0, 0xb5, 0x44, 0x78, 0x9a, 0xf6, 0xbe, 0x7d, 0x72, 0xf1, + 0xd9, 0xe3, 0xf3, 0xd3, 0x32, 0x90, 0xcb, 0xdd, 0xae, 0xd6, 0x39, 0x3c, 0x14, 0xd7, 0x83, 0xb9, + 0xa0, 0xcd, 0x44, 0x31, 0x20, 0xd9, 0xa4, 0xb4, 0x8b, 0xa0, 0xa1, 0x6c, 0xca, 0xdd, 0xa9, 0xef, + 0x2a, 0x24, 0x94, 0x9d, 0x3d, 0x28, 0x5f, 0x9a, 0xa1, 0x8d, 0x66, 0xd9, 0x71, 0x2e, 0xe2, 0xa3, + 0x32, 0xbf, 0x2c, 0x83, 0xc2, 0x0a, 0xf4, 0x3b, 0xbb, 0x9a, 0x37, 0x91, 0x36, 0x33, 0x70, 0xef, + 0xf9, 0x88, 0xa0, 0x9c, 0x69, 0xa3, 0x3f, 0x07, 0x6c, 0x2f, 0x61, 0x96, 0xa7, 0x1d, 0xfd, 0x39, + 0xb1, 0xf4, 0x29, 0x1c, 0x82, 0xcb, 0x83, 0xc5, 0x70, 0x05, 0x8c, 0x60, 0xf6, 0x8e, 0xdc, 0x03, + 0x6e, 0x3d, 0x74, 0x84, 0xdd, 0xac, 0xfd, 0x61, 0xba, 0x10, 0x6b, 0xa1, 0xcc, 0xf9, 0x9a, 0x67, + 0xbc, 0x30, 0x99, 0x22, 0xf8, 0x9a, 0x18, 0x83, 0x53, 0x58, 0x01, 0x90, 0x41, 0x09, 0x33, 0x54, + 0xb5, 0x2e, 0x61, 0xd7, 0x43, 0x6e, 0xa1, 0xf2, 0x59, 0x13, 0x59, 0xa8, 0xbc, 0x93, 0x5f, 0xa8, + 0x14, 0x8c, 0x98, 0x1c, 0xac, 0x53, 0xa6, 0xf4, 0xc5, 0x41, 0xdf, 0x4f, 0x7c, 0x99, 0x32, 0x85, + 0x2f, 0xce, 0x88, 0xf2, 0xb3, 0x47, 0xf4, 0x8d, 0xff, 0x95, 0x76, 0xd6, 0xc1, 0x86, 0xac, 0xf6, + 0x3f, 0x4e, 0x80, 0xfc, 0x39, 0xf4, 0xe7, 0x1f, 0xa3, 0x1b, 0xb5, 0x5e, 0x36, 0x81, 0xe0, 0x0e, + 0x4f, 0x06, 0x79, 0x44, 0x9f, 0x4e, 0x7b, 0x6e, 0x16, 0xdb, 0x1d, 0x46, 0x8c, 0x18, 0xf8, 0x3b, + 0xf5, 0x14, 0x28, 0x7a, 0xce, 0xbe, 0xdb, 0x41, 0xe6, 0x37, 0xd2, 0x18, 0xfa, 0x94, 0x36, 0xa8, + 0x29, 0x47, 0x7a, 0x69, 0x72, 0x2e, 0xa7, 0xcc, 0x05, 0x4b, 0x32, 0x77, 0xc1, 0x52, 0x8a, 0xfd, + 0x07, 0x01, 0xde, 0xb2, 0xd7, 0x88, 0x3f, 0xc1, 0x77, 0x0d, 0x76, 0x27, 0x05, 0x7b, 0x8c, 0x58, + 0x0e, 0xab, 0x0e, 0x69, 0x1d, 0xc6, 0x79, 0xd1, 0x86, 0x71, 0xe4, 0xa7, 0xea, 0x30, 0x2e, 0xc0, + 0xc3, 0x54, 0x4e, 0xb9, 0x17, 0xa9, 0x93, 0xeb, 0xbd, 0x93, 0x44, 0x37, 0xcf, 0x29, 0xfd, 0xa1, + 0xd0, 0x99, 0xa0, 0xf3, 0xeb, 0xd8, 0xe8, 0x1c, 0x91, 0xfb, 0xeb, 0x6f, 0xc8, 0x38, 0x92, 0x66, + 0x60, 0x04, 0x89, 0x5f, 0x94, 0x94, 0x1a, 0x22, 0x34, 0x06, 0x73, 0x71, 0xa4, 0x17, 0xc6, 0x0f, + 0x2d, 0xce, 0x8b, 0x8e, 0xe1, 0x7f, 0xda, 0xa1, 0xc5, 0x45, 0x19, 0xc9, 0x1e, 0xc8, 0x5f, 0x22, + 0x17, 0x93, 0x95, 0x3b, 0xbe, 0x75, 0x69, 0xc2, 0x2d, 0x8d, 0x1f, 0x5e, 0x52, 0x46, 0x13, 0x3e, + 0x20, 0x21, 0xc2, 0xe1, 0xb4, 0xa3, 0x09, 0x8b, 0xb1, 0x91, 0x3d, 0x4c, 0x3f, 0x09, 0x90, 0xf4, + 0xe8, 0xda, 0xce, 0x1b, 0x64, 0x20, 0xb7, 0xa0, 0xaf, 0xc1, 0xc3, 0xa3, 0x75, 0x16, 0xcc, 0x33, + 0x4b, 0x07, 0xc1, 0x85, 0x37, 0x5c, 0x5a, 0xda, 0x83, 0xf2, 0xa1, 0xc8, 0xd8, 0x45, 0x97, 0x69, + 0x1f, 0x94, 0x17, 0x61, 0x62, 0x0a, 0x07, 0xe5, 0xe9, 0xb2, 0xcf, 0xf7, 0x0a, 0x50, 0x93, 0x5a, + 0x01, 0x3a, 0x14, 0x50, 0x47, 0xb1, 0x14, 0xf4, 0xf6, 0xc8, 0xd8, 0x98, 0x12, 0x56, 0x1f, 0x66, + 0xb1, 0x6a, 0xf2, 0x58, 0xdd, 0x2e, 0x22, 0x26, 0x31, 0xe3, 0x43, 0x68, 0x82, 0xff, 0xce, 0x10, + 0x2e, 0x83, 0x83, 0xeb, 0xc9, 0x63, 0xf3, 0x91, 0x3d, 0x62, 0xbf, 0x40, 0xc6, 0xad, 0x16, 0x99, + 0x5b, 0x4d, 0x66, 0xdc, 0xa2, 0xd3, 0x36, 0x99, 0x9b, 0xb6, 0xa5, 0x3c, 0x58, 0x11, 0xf9, 0x0b, + 0x07, 0xcc, 0x8d, 0x82, 0x28, 0x3f, 0xe1, 0x83, 0x15, 0x23, 0x39, 0xc8, 0x1e, 0x9c, 0x6f, 0xca, + 0x00, 0xac, 0xba, 0xce, 0x7e, 0xbf, 0xe9, 0x76, 0xa1, 0xab, 0xfd, 0x59, 0x34, 0x53, 0xfb, 0x99, + 0x09, 0xcc, 0xd4, 0x36, 0x00, 0xd8, 0x09, 0x89, 0x53, 0x0d, 0x7f, 0xb4, 0xd8, 0xbc, 0x2c, 0x62, + 0xca, 0x60, 0x68, 0xf0, 0x77, 0x0b, 0x3f, 0x95, 0xc7, 0x38, 0xa9, 0xcf, 0x8a, 0xc8, 0x4d, 0x72, + 0xa6, 0xf6, 0xee, 0x10, 0xeb, 0x36, 0x87, 0xf5, 0x53, 0x0e, 0xc1, 0x49, 0xf6, 0x98, 0xff, 0xc3, + 0x0c, 0x98, 0x23, 0xfb, 0xb2, 0x44, 0xa6, 0x7f, 0x13, 0x81, 0xfe, 0xf3, 0x13, 0x00, 0x7d, 0x13, + 0xcc, 0x3b, 0x11, 0x75, 0xd2, 0xa7, 0xb2, 0x2b, 0x65, 0x89, 0xb0, 0x33, 0x7c, 0x19, 0x1c, 0x19, + 0xed, 0x13, 0x2c, 0xf2, 0x06, 0x8f, 0xfc, 0x9d, 0x09, 0xf2, 0x66, 0x28, 0x4e, 0x12, 0xfa, 0xf7, + 0x84, 0xd0, 0x6f, 0x72, 0xd0, 0x97, 0x0f, 0xc3, 0xca, 0x14, 0xee, 0x55, 0x90, 0x41, 0x1e, 0x1f, + 0x83, 0x7c, 0x4b, 0x86, 0x0b, 0x31, 0xa7, 0xc1, 0x0c, 0x6e, 0xb2, 0xe1, 0x04, 0x31, 0x78, 0x44, + 0x6f, 0xcc, 0x6d, 0x1f, 0xba, 0xe1, 0x12, 0x7b, 0xf0, 0x88, 0x78, 0x08, 0xdc, 0xcf, 0xbd, 0xd3, + 0x45, 0xb2, 0xe3, 0x1c, 0x26, 0x8c, 0x3d, 0x7b, 0x64, 0x25, 0x3e, 0xb1, 0x83, 0x91, 0xe3, 0xcc, + 0x1e, 0x47, 0x30, 0x92, 0x3d, 0xf0, 0x5f, 0xce, 0x83, 0xd3, 0x64, 0xf9, 0x6f, 0xc5, 0x75, 0xf6, + 0x06, 0xae, 0x31, 0xb3, 0x0e, 0xaf, 0x0b, 0x37, 0x82, 0x45, 0x9f, 0x73, 0xbc, 0xa7, 0x3a, 0x31, + 0x90, 0xaa, 0xfd, 0x1e, 0xeb, 0x3c, 0xf3, 0x34, 0x1e, 0xc9, 0xe5, 0x04, 0x01, 0xc6, 0xf1, 0x9e, + 0x7a, 0x47, 0x45, 0x90, 0x51, 0x66, 0x35, 0x51, 0x1e, 0x6b, 0x71, 0x39, 0xd4, 0xa9, 0x82, 0x88, + 0x4e, 0x7d, 0x30, 0xd4, 0xa9, 0xff, 0xc2, 0xe9, 0xd4, 0xea, 0xe1, 0x45, 0x32, 0x85, 0x25, 0xa6, + 0x45, 0x50, 0x5c, 0xb1, 0x7a, 0x3e, 0x74, 0xb5, 0xaf, 0xd2, 0x79, 0xd4, 0xab, 0x32, 0xec, 0x5e, + 0xaa, 0xa0, 0xb8, 0x8d, 0x4b, 0xa3, 0x06, 0xd9, 0x2d, 0x62, 0xd8, 0x10, 0x0e, 0x0d, 0xfa, 0x6d, + 0xda, 0x20, 0x7f, 0x03, 0x64, 0x26, 0x36, 0x01, 0x4b, 0x11, 0xe4, 0x6f, 0x34, 0x0b, 0x53, 0xb9, + 0xdf, 0xaa, 0x68, 0xc0, 0x3d, 0x34, 0x82, 0x5c, 0xcc, 0x0e, 0x61, 0x05, 0xc8, 0x56, 0xd7, 0xc3, + 0x4d, 0x6f, 0xd6, 0x40, 0x7f, 0xd3, 0xba, 0x1c, 0x0d, 0x8a, 0x8a, 0xb0, 0x3c, 0x6d, 0x97, 0x23, + 0x21, 0x2e, 0xb2, 0xc7, 0xec, 0x3b, 0xd8, 0xdf, 0xb4, 0xdf, 0x33, 0x3b, 0x10, 0x71, 0x9f, 0x19, + 0x6a, 0x8b, 0x40, 0xb2, 0x82, 0x11, 0x5f, 0xb2, 0xd8, 0x76, 0x5a, 0x38, 0x44, 0x3b, 0x1d, 0x77, + 0x35, 0x32, 0x94, 0x39, 0xae, 0xf8, 0x91, 0xad, 0x46, 0x26, 0xb2, 0x31, 0x85, 0xdb, 0x4b, 0x83, + 0xf3, 0xb8, 0x53, 0x6d, 0xad, 0xe3, 0xee, 0xd5, 0x50, 0x61, 0x4d, 0xec, 0xec, 0xed, 0x38, 0x7b, + 0x35, 0xf1, 0x3c, 0x4c, 0x01, 0xad, 0x45, 0x8a, 0xd6, 0x17, 0xe8, 0x30, 0x9a, 0xf1, 0x76, 0xa9, + 0xe7, 0xb8, 0x7e, 0xba, 0xed, 0x52, 0xc4, 0x9d, 0x81, 0xbf, 0x4b, 0x7b, 0x7e, 0x8b, 0x3f, 0x9e, + 0x3d, 0xa9, 0xe1, 0x33, 0xc5, 0xf9, 0xad, 0x51, 0x0c, 0x64, 0x0f, 0xef, 0x5b, 0x8f, 0x68, 0xf0, + 0x1c, 0xb7, 0x39, 0xd2, 0x36, 0x30, 0xb1, 0xa1, 0x73, 0x9c, 0xe6, 0x18, 0xcf, 0x43, 0xf6, 0x78, + 0xfd, 0x3d, 0x33, 0x70, 0xbe, 0x69, 0x8a, 0x03, 0x67, 0xd0, 0x32, 0x0b, 0x63, 0xb6, 0xcc, 0x71, + 0x77, 0x17, 0xa8, 0xac, 0x27, 0x37, 0x60, 0x8e, 0xb3, 0xbb, 0x90, 0xc0, 0x44, 0xf6, 0x88, 0xbf, + 0x59, 0x06, 0x85, 0xd6, 0xf4, 0xc7, 0xcb, 0x71, 0xe7, 0x22, 0x58, 0x56, 0xad, 0x89, 0x0d, 0x97, + 0xe3, 0xcc, 0x45, 0x62, 0x59, 0x98, 0x42, 0xfc, 0xfe, 0xe3, 0x60, 0x1e, 0x4f, 0xb8, 0x83, 0xdd, + 0xd6, 0xbf, 0xa7, 0xa3, 0xe6, 0xeb, 0x33, 0x6c, 0xab, 0x77, 0x83, 0x52, 0xb0, 0x3b, 0x44, 0x47, + 0xce, 0x25, 0xb1, 0xf6, 0x19, 0x70, 0x69, 0x84, 0xdf, 0x1f, 0xca, 0x27, 0x62, 0xe2, 0x3b, 0x81, + 0xe3, 0xfa, 0x44, 0x1c, 0xe9, 0x6e, 0xe0, 0xef, 0x46, 0x23, 0xea, 0x7f, 0xcb, 0x0e, 0xf3, 0xc1, + 0x5d, 0xc2, 0xfc, 0x90, 0x5d, 0xc2, 0x4f, 0xb1, 0x58, 0xb6, 0x78, 0x2c, 0x9f, 0x24, 0x2a, 0xc2, + 0x09, 0x8e, 0xb5, 0xef, 0x0d, 0xe1, 0x3c, 0xc7, 0xc1, 0xb9, 0x7c, 0x28, 0x5e, 0xa6, 0x70, 0x7e, + 0x32, 0x1f, 0x8d, 0xb9, 0x9f, 0xce, 0xb0, 0x1d, 0x0f, 0x1c, 0xce, 0xc8, 0x1f, 0x38, 0x9c, 0xc1, + 0xb5, 0xf4, 0xc2, 0x21, 0x5b, 0xfa, 0xa7, 0x59, 0xed, 0x68, 0xf3, 0xda, 0xf1, 0x64, 0x71, 0x44, + 0x26, 0x37, 0x32, 0xbf, 0x2f, 0x54, 0x8f, 0xf3, 0x9c, 0x7a, 0x54, 0x0e, 0xc7, 0x4c, 0xf6, 0xfa, + 0xf1, 0x9b, 0xc1, 0x84, 0xf6, 0x88, 0xdb, 0xfb, 0xb8, 0x1b, 0x91, 0x9c, 0x10, 0x27, 0x36, 0x72, + 0x8f, 0xb3, 0x11, 0x39, 0x8a, 0x93, 0x29, 0x84, 0x74, 0x5b, 0x00, 0x73, 0x98, 0xa7, 0xf3, 0x56, + 0x77, 0x07, 0xfa, 0xda, 0xab, 0x89, 0xab, 0x62, 0x10, 0x40, 0x73, 0x42, 0x51, 0x8e, 0xe2, 0x8e, + 0xcd, 0xa6, 0xf5, 0x17, 0x20, 0x4c, 0x2e, 0x31, 0x0c, 0x4e, 0x3b, 0x10, 0xe3, 0x48, 0x0e, 0xb2, + 0x87, 0xec, 0x13, 0xc4, 0x99, 0xa3, 0x6e, 0x5e, 0x71, 0xf6, 0x7d, 0xed, 0x39, 0x13, 0xe8, 0xa0, + 0x97, 0x41, 0xb1, 0x87, 0xa9, 0xd1, 0xd3, 0x19, 0xc9, 0xd3, 0x1d, 0x2a, 0x02, 0x52, 0xbe, 0x41, + 0xbf, 0x4c, 0x7b, 0x44, 0x23, 0x92, 0x23, 0xa1, 0x33, 0xed, 0x23, 0x1a, 0x23, 0xca, 0x9f, 0xca, + 0x55, 0x3d, 0x25, 0x54, 0xba, 0xb5, 0x67, 0xf9, 0x13, 0x0a, 0x04, 0xd1, 0x43, 0xb4, 0x82, 0x40, + 0x10, 0xf8, 0x21, 0xed, 0xc1, 0x53, 0x46, 0x2a, 0xe8, 0xf3, 0x69, 0x1f, 0x3c, 0x4d, 0x2e, 0x3e, + 0x7b, 0x4c, 0x7e, 0x8e, 0xb4, 0xac, 0x73, 0xc4, 0x07, 0x37, 0x43, 0xf7, 0xde, 0xb1, 0x1b, 0x0b, + 0x61, 0xed, 0xe8, 0x1a, 0xcb, 0xd0, 0xf2, 0xb3, 0x07, 0xe6, 0x97, 0xbf, 0x0f, 0x14, 0xaa, 0xf0, + 0xc2, 0xfe, 0x8e, 0x76, 0x27, 0x28, 0xb5, 0x5d, 0x08, 0x6b, 0xf6, 0xb6, 0x83, 0xa4, 0xeb, 0xa3, + 0xff, 0x01, 0x24, 0xf4, 0x09, 0xe1, 0xb1, 0x0b, 0xcd, 0x6e, 0x74, 0x0c, 0x2d, 0x78, 0xd4, 0x5e, + 0x26, 0x81, 0x7c, 0xcb, 0x37, 0x7d, 0x6d, 0x36, 0xc4, 0x56, 0x7b, 0x0e, 0x8b, 0xc5, 0x9d, 0x3c, + 0x16, 0x37, 0x72, 0xb2, 0xc0, 0x1c, 0x2c, 0xa1, 0xef, 0x63, 0x00, 0xd0, 0x40, 0xe9, 0x3e, 0xcf, + 0xb1, 0x51, 0x8e, 0xe0, 0xa4, 0x64, 0xf0, 0xac, 0xbd, 0x32, 0x14, 0xf7, 0x5d, 0x9c, 0xb8, 0x1f, + 0x29, 0x56, 0xc4, 0x14, 0x56, 0xda, 0x24, 0x30, 0x8b, 0x44, 0xbb, 0x06, 0xcd, 0xae, 0xa7, 0x3d, + 0x34, 0x52, 0xfe, 0x18, 0x31, 0x6b, 0x1f, 0x11, 0x8e, 0xe9, 0x49, 0x6a, 0x15, 0x12, 0x8f, 0xf7, + 0x17, 0x08, 0x62, 0x9a, 0x48, 0x7c, 0x4c, 0x93, 0x5b, 0x41, 0xde, 0xb2, 0xb7, 0x1d, 0xea, 0xbd, + 0x76, 0x6d, 0x0c, 0x6d, 0xa4, 0x13, 0x06, 0xce, 0x28, 0x18, 0xf0, 0x33, 0x99, 0xad, 0xa9, 0xdc, + 0x9d, 0x97, 0x47, 0xa5, 0x6b, 0xff, 0xf7, 0x48, 0x61, 0xab, 0x2a, 0xc8, 0xf7, 0x4d, 0x7f, 0x97, + 0x16, 0x8d, 0xff, 0x23, 0x1b, 0x79, 0xdf, 0x36, 0x6d, 0xc7, 0xbe, 0xb2, 0x67, 0x3d, 0x33, 0xbc, + 0xa2, 0x97, 0x4b, 0x43, 0x9c, 0xef, 0x40, 0x1b, 0xba, 0xa6, 0x0f, 0x5b, 0x97, 0x76, 0xf0, 0x1c, + 0xab, 0x64, 0xb0, 0x49, 0xa9, 0xf5, 0x1f, 0x71, 0x1c, 0xaf, 0xff, 0xdb, 0x56, 0x0f, 0xe2, 0x80, + 0x4f, 0x54, 0xff, 0x83, 0xe7, 0x54, 0xfa, 0x3f, 0xa4, 0x88, 0xec, 0xd1, 0xf8, 0x37, 0x09, 0xcc, + 0xb7, 0x90, 0xc2, 0xb5, 0xf6, 0xf7, 0xf6, 0x4c, 0xf7, 0x8a, 0xf6, 0xb0, 0x08, 0x15, 0x46, 0x35, + 0x73, 0x9c, 0x6a, 0x6a, 0xbf, 0x21, 0x7c, 0x3b, 0x35, 0x6d, 0xda, 0x4c, 0x09, 0xa9, 0xdb, 0xc1, + 0x63, 0x40, 0x01, 0xa9, 0x77, 0xe0, 0xcf, 0x97, 0xd8, 0x10, 0x48, 0x4e, 0xc1, 0xc0, 0x58, 0x23, + 0x79, 0x9b, 0x42, 0x50, 0x0e, 0x09, 0x1c, 0x6f, 0xf9, 0x66, 0xe7, 0xe2, 0xaa, 0xe3, 0x3a, 0xfb, + 0xbe, 0x65, 0x43, 0x4f, 0x7b, 0x70, 0x84, 0x40, 0xa0, 0xff, 0xb9, 0x48, 0xff, 0xb5, 0x7f, 0xcf, + 0x89, 0x8e, 0xa2, 0x61, 0xb7, 0xca, 0x92, 0x8f, 0x89, 0x73, 0x25, 0x36, 0x2e, 0x8a, 0x50, 0xcc, + 0x5e, 0x68, 0x6f, 0x92, 0x81, 0xa2, 0xdf, 0xdf, 0x77, 0x5c, 0xbf, 0xee, 0x74, 0xcc, 0x9e, 0xe7, + 0x3b, 0x2e, 0xd4, 0x9a, 0x89, 0x52, 0x43, 0x3d, 0x4c, 0xd7, 0xe9, 0x44, 0x83, 0x23, 0x7d, 0x62, + 0xd5, 0x4e, 0xe6, 0x75, 0xfc, 0x13, 0xc2, 0xbb, 0x8c, 0x44, 0x2a, 0x83, 0x1c, 0xc5, 0xe8, 0xf9, + 0xb0, 0x2e, 0x2d, 0x9d, 0x2b, 0xbe, 0xd8, 0xce, 0xa3, 0x10, 0x53, 0x53, 0x58, 0x2a, 0x97, 0xc0, + 0x42, 0x6b, 0xff, 0x42, 0x48, 0xc4, 0x63, 0x8d, 0x90, 0xd7, 0x08, 0x07, 0xb3, 0xa0, 0x8a, 0xc7, + 0x12, 0x8a, 0x91, 0xef, 0x0d, 0x60, 0xc1, 0x63, 0xb3, 0x51, 0xbc, 0xf9, 0x44, 0xc1, 0x20, 0x16, + 0xa3, 0x4b, 0xcd, 0x5e, 0x80, 0xef, 0x93, 0xc0, 0x42, 0xb3, 0x0f, 0x6d, 0xd8, 0x25, 0x3e, 0x76, + 0x9c, 0x00, 0x5f, 0x96, 0x52, 0x80, 0x1c, 0xa1, 0x18, 0x01, 0x46, 0xfe, 0xb0, 0xd5, 0x40, 0x78, + 0x51, 0x42, 0x2a, 0xc1, 0x25, 0x95, 0x96, 0xbd, 0xe0, 0xbe, 0x22, 0x81, 0x39, 0x63, 0xdf, 0xde, + 0x70, 0x1d, 0x34, 0x1a, 0xbb, 0xda, 0x93, 0xa2, 0x0e, 0xe2, 0x16, 0x70, 0xa2, 0xbb, 0xef, 0xe2, + 0xf5, 0xa7, 0x9a, 0xdd, 0x82, 0x1d, 0xc7, 0xee, 0x7a, 0xb8, 0x1e, 0x05, 0xe3, 0xe0, 0x8b, 0x3b, + 0xf2, 0xcf, 0xfb, 0x2b, 0x39, 0xa7, 0xbd, 0x40, 0x38, 0x62, 0x0e, 0xa9, 0x3c, 0x53, 0xb4, 0x78, + 0x4f, 0x20, 0x18, 0x17, 0x67, 0x54, 0x09, 0xd9, 0x0b, 0xf7, 0x0b, 0x12, 0x50, 0xcb, 0x9d, 0x8e, + 0xb3, 0x6f, 0xfb, 0x2d, 0xd8, 0x83, 0x1d, 0xbf, 0xed, 0x9a, 0x1d, 0xc8, 0xda, 0xcf, 0x0a, 0x90, + 0xbb, 0x96, 0x4b, 0xfb, 0x60, 0xf4, 0x97, 0xca, 0xf1, 0x65, 0xc2, 0x3b, 0x8e, 0xa4, 0x96, 0x07, + 0x4b, 0x49, 0x21, 0x4e, 0xb1, 0x7d, 0x45, 0xc1, 0x82, 0xb2, 0x97, 0xea, 0xa7, 0x25, 0x30, 0x1b, + 0xf4, 0xd8, 0x3b, 0x22, 0xc2, 0xfc, 0xb9, 0x94, 0x93, 0x91, 0x90, 0x78, 0x0a, 0x19, 0xbe, 0x2b, + 0xc5, 0xac, 0x22, 0x8e, 0x7e, 0x3a, 0xd1, 0x95, 0xd3, 0x8b, 0x0e, 0x3d, 0x36, 0x9a, 0x5b, 0x2b, + 0xcd, 0x7a, 0x55, 0x37, 0x14, 0x59, 0xfb, 0xaa, 0x04, 0xf2, 0x1b, 0x96, 0xbd, 0xc3, 0x06, 0x36, + 0x3b, 0x89, 0xec, 0xc8, 0x2e, 0xbc, 0x9f, 0xb6, 0x74, 0xf2, 0xa0, 0xde, 0x06, 0x4e, 0xda, 0xfb, + 0x7b, 0x17, 0xa0, 0xdb, 0xdc, 0xc6, 0xa3, 0xac, 0xd7, 0x76, 0x5a, 0xd0, 0x26, 0x46, 0x68, 0xc1, + 0x18, 0xfa, 0x8e, 0x37, 0xc1, 0x04, 0x26, 0x0f, 0x88, 0x93, 0x18, 0x89, 0x87, 0x4c, 0x49, 0x0c, + 0x53, 0xa9, 0xa6, 0x0d, 0x43, 0x88, 0x67, 0xaf, 0xa9, 0xbf, 0x55, 0x00, 0x57, 0x97, 0xed, 0x2b, + 0xd8, 0xa6, 0x20, 0x1d, 0x7c, 0x65, 0xd7, 0xb4, 0x77, 0x20, 0x1e, 0x20, 0x42, 0x89, 0xb3, 0x91, + 0xfe, 0x73, 0x7c, 0xa4, 0x7f, 0xd5, 0x00, 0x33, 0x8e, 0xdb, 0x85, 0xee, 0xf2, 0x15, 0xcc, 0xd3, + 0xe0, 0xb2, 0x33, 0x6d, 0x93, 0xc3, 0x8a, 0x58, 0xa2, 0xe4, 0x97, 0x9a, 0xe4, 0x7b, 0x23, 0x20, + 0x74, 0xf6, 0x16, 0x30, 0x43, 0xd3, 0xd4, 0x79, 0x50, 0x6a, 0x1a, 0x55, 0xdd, 0xd8, 0xaa, 0x55, + 0x95, 0x63, 0xea, 0x55, 0xe0, 0x78, 0xad, 0xad, 0x1b, 0xe5, 0x76, 0xad, 0xd9, 0xd8, 0xc2, 0xe9, + 0x4a, 0x4e, 0x7b, 0x6e, 0x5e, 0xd4, 0xb3, 0x37, 0x99, 0x99, 0x61, 0xb0, 0x1a, 0x60, 0xa6, 0x43, + 0x32, 0xe0, 0x21, 0x74, 0x2e, 0x55, 0xed, 0x28, 0x41, 0x92, 0x60, 0x04, 0x84, 0xd4, 0x33, 0x00, + 0x5c, 0x76, 0x1d, 0x7b, 0x27, 0x3a, 0xd3, 0x56, 0x32, 0x98, 0x14, 0xed, 0x39, 0x39, 0x50, 0x24, + 0xdf, 0xe0, 0x9b, 0x4d, 0xf0, 0xbf, 0x48, 0xf0, 0xc1, 0x33, 0xb2, 0x78, 0xb1, 0xbc, 0xa2, 0x89, + 0x16, 0x7d, 0x44, 0xba, 0x48, 0x64, 0x40, 0x2c, 0x61, 0x5a, 0x95, 0x5b, 0x41, 0x91, 0x7c, 0x4b, + 0xbd, 0x0e, 0xe2, 0xa3, 0x94, 0x92, 0x6c, 0x82, 0x7e, 0xca, 0xe2, 0x32, 0xcd, 0x5e, 0x9b, 0x3f, + 0x2a, 0x81, 0x52, 0x03, 0xfa, 0x95, 0x5d, 0xd8, 0xb9, 0xa8, 0x3d, 0x82, 0x5f, 0x00, 0xed, 0x59, + 0xd0, 0xf6, 0xef, 0xdd, 0xeb, 0x85, 0x0b, 0xa0, 0x41, 0x82, 0xf6, 0x7c, 0xb6, 0xf3, 0x7d, 0x0a, + 0xaf, 0x3f, 0x37, 0x0f, 0xa9, 0x6b, 0x50, 0x42, 0x8c, 0xca, 0x9c, 0x02, 0x45, 0x17, 0x7a, 0xfb, + 0xbd, 0x60, 0x11, 0x8d, 0x3e, 0x69, 0xaf, 0x0d, 0xc5, 0x59, 0xe1, 0xc4, 0x79, 0xab, 0x78, 0x11, + 0x53, 0x08, 0x7b, 0x9a, 0x07, 0x33, 0x35, 0xdb, 0xf2, 0x2d, 0xb3, 0xa7, 0xbd, 0x20, 0x0f, 0x16, + 0x5a, 0xd0, 0xdf, 0x30, 0x5d, 0x73, 0x0f, 0xfa, 0xd0, 0xf5, 0xb4, 0x6f, 0xf3, 0x7d, 0x42, 0xbf, + 0x67, 0xfa, 0xdb, 0x8e, 0xbb, 0x17, 0xa8, 0x66, 0xf0, 0x8c, 0x54, 0xf3, 0x12, 0x74, 0xbd, 0x88, + 0xaf, 0xe0, 0x11, 0xbd, 0xb9, 0xec, 0xb8, 0x17, 0xd1, 0x20, 0x48, 0xa7, 0x69, 0xf4, 0x11, 0xd1, + 0xeb, 0x39, 0x3b, 0x75, 0x78, 0x09, 0x06, 0x51, 0xd5, 0xc2, 0x67, 0x34, 0x17, 0xe8, 0x3a, 0x0d, + 0xc7, 0x47, 0x9d, 0x76, 0xdd, 0xd9, 0x21, 0x61, 0x67, 0x4b, 0x06, 0x9f, 0x18, 0xe5, 0x32, 0x2f, + 0x41, 0x9c, 0xab, 0xc8, 0xe6, 0xa2, 0x89, 0xea, 0x12, 0x50, 0xc3, 0xcf, 0xda, 0xb0, 0x07, 0xf7, + 0xa0, 0xef, 0x5e, 0xc1, 0xb7, 0x4b, 0x94, 0x8c, 0x21, 0x6f, 0xe8, 0x00, 0x2d, 0x3e, 0x59, 0xa7, + 0xd2, 0x5b, 0xe2, 0x24, 0x77, 0xa8, 0xc9, 0xba, 0x08, 0xc5, 0xa9, 0xdc, 0x9e, 0x25, 0x23, 0x6b, + 0xe6, 0xe5, 0x32, 0xc8, 0xe3, 0xc1, 0xf3, 0xcd, 0x39, 0x6e, 0x85, 0x69, 0x0f, 0x7a, 0x9e, 0xb9, + 0x03, 0x83, 0x15, 0x26, 0xfa, 0xa8, 0xde, 0x0e, 0x0a, 0x3d, 0x8c, 0x29, 0x19, 0x1c, 0x1e, 0xc6, + 0xd5, 0x0c, 0x19, 0x18, 0x88, 0x56, 0x38, 0x12, 0x60, 0xb8, 0x0d, 0xf2, 0xc5, 0xd9, 0xbb, 0x41, + 0x81, 0xc0, 0x3f, 0x0b, 0x0a, 0x55, 0x7d, 0x79, 0x73, 0x55, 0x39, 0x86, 0xfe, 0x06, 0xfc, 0xcd, + 0x82, 0xc2, 0x4a, 0xb9, 0x5d, 0xae, 0x2b, 0x12, 0xaa, 0x47, 0xad, 0xb1, 0xd2, 0x54, 0x64, 0x94, + 0xb8, 0x51, 0x6e, 0xd4, 0x2a, 0x4a, 0x5e, 0x9d, 0x03, 0x33, 0xe7, 0xcb, 0x46, 0xa3, 0xd6, 0x58, + 0x55, 0x0a, 0xda, 0x5f, 0xb2, 0xf8, 0xdd, 0xc1, 0xe3, 0x77, 0x43, 0x1c, 0x4f, 0xc3, 0x20, 0xfb, + 0xc5, 0x10, 0xb2, 0x27, 0x71, 0x90, 0x7d, 0x9f, 0x08, 0x91, 0x29, 0xb8, 0x33, 0x15, 0xc1, 0xcc, + 0x86, 0xeb, 0x74, 0xa0, 0xe7, 0x69, 0x2f, 0x95, 0x40, 0xb1, 0x62, 0xda, 0x1d, 0xd8, 0xd3, 0xae, + 0x89, 0xa0, 0x22, 0xae, 0xa2, 0xb9, 0xc0, 0x55, 0x54, 0xfb, 0x66, 0x4e, 0xb4, 0xf7, 0xa3, 0x74, + 0x97, 0x08, 0xcd, 0x18, 0xf9, 0x88, 0xf5, 0x72, 0x89, 0xa4, 0xa6, 0x70, 0xc3, 0x8e, 0x04, 0x66, + 0xe9, 0x6a, 0xc0, 0x05, 0xc8, 0xce, 0xc3, 0xbf, 0x9d, 0x13, 0x9d, 0x1c, 0x06, 0x35, 0x08, 0xc9, + 0xc4, 0xc8, 0x43, 0x6c, 0x22, 0x38, 0x8a, 0xda, 0x14, 0x36, 0x0f, 0x25, 0x30, 0xb7, 0x69, 0x7b, + 0xc3, 0x84, 0x22, 0x1e, 0x8e, 0x3f, 0xa8, 0x06, 0x43, 0xe8, 0x50, 0xe1, 0xf8, 0x47, 0xd3, 0xcb, + 0x5e, 0x30, 0xdf, 0xce, 0x81, 0x93, 0xab, 0xd0, 0x86, 0xae, 0xd5, 0x21, 0x35, 0x08, 0x24, 0xf1, + 0x24, 0x5e, 0x12, 0x8f, 0xe0, 0x38, 0x1f, 0xf6, 0x05, 0x2f, 0x81, 0x57, 0x85, 0x12, 0x78, 0x0a, + 0x27, 0x81, 0x5b, 0x04, 0xe9, 0x4c, 0xe1, 0x5a, 0xf5, 0x59, 0x30, 0xdf, 0x70, 0x7c, 0x6b, 0xdb, + 0xea, 0x10, 0x1f, 0xb4, 0x5f, 0x90, 0x41, 0xbe, 0x6e, 0x79, 0xbe, 0x56, 0x8e, 0xba, 0x93, 0xeb, + 0xc1, 0x9c, 0x65, 0x77, 0x7a, 0xfb, 0x5d, 0x68, 0x40, 0x93, 0xf4, 0x2b, 0x25, 0x83, 0x4d, 0x8a, + 0xb6, 0xf6, 0x11, 0x5b, 0x72, 0xb0, 0xb5, 0xff, 0x3b, 0xc2, 0xcb, 0x30, 0x2c, 0x0b, 0x38, 0x2e, + 0x65, 0x8c, 0xdd, 0x55, 0x06, 0x0b, 0x36, 0x93, 0x35, 0x30, 0xd8, 0x07, 0xef, 0x25, 0x60, 0xc9, + 0x19, 0xfc, 0x17, 0xda, 0x07, 0x84, 0x1a, 0xeb, 0x28, 0x86, 0xd2, 0x21, 0xb3, 0x32, 0xc6, 0x24, + 0x59, 0x05, 0x8b, 0xb5, 0x46, 0x5b, 0x37, 0x1a, 0xe5, 0x3a, 0xcd, 0x22, 0x6b, 0xff, 0x26, 0x81, + 0x82, 0x01, 0xfb, 0xbd, 0x2b, 0x6c, 0xe0, 0x69, 0xea, 0x28, 0x9e, 0x0b, 0x1d, 0xc5, 0xd5, 0x15, + 0x00, 0xcc, 0x0e, 0x2a, 0x18, 0xdf, 0xcc, 0x25, 0x0d, 0x0d, 0x67, 0xca, 0x55, 0xb0, 0x1c, 0xe6, + 0x36, 0x98, 0x2f, 0xb5, 0x17, 0x0a, 0xef, 0x1c, 0x71, 0xd4, 0x30, 0x87, 0x31, 0x7d, 0xc2, 0x07, + 0x85, 0x36, 0x7b, 0x46, 0x92, 0x3b, 0x1a, 0xf1, 0x7f, 0x4d, 0x02, 0xf9, 0x36, 0xea, 0x2d, 0x99, + 0x8e, 0xf3, 0x73, 0xe3, 0xe9, 0x38, 0x22, 0x13, 0xa3, 0xe3, 0x77, 0x81, 0x79, 0x56, 0x63, 0xa9, + 0xab, 0x44, 0xa2, 0x8a, 0x73, 0x1f, 0x8c, 0xa3, 0xe1, 0x43, 0xd8, 0x39, 0x1a, 0x11, 0x7f, 0xe6, + 0x91, 0x00, 0xac, 0xc3, 0xbd, 0x0b, 0xd0, 0xf5, 0x76, 0xad, 0xbe, 0xf6, 0xd7, 0x32, 0x98, 0x5d, + 0x85, 0x7e, 0xcb, 0x37, 0xfd, 0x7d, 0x6f, 0x60, 0xbb, 0xd3, 0x76, 0x2a, 0x66, 0x67, 0x17, 0xd2, + 0xee, 0x28, 0x78, 0xd4, 0xde, 0x23, 0x8b, 0xfa, 0x13, 0x45, 0xe5, 0x2c, 0x85, 0x65, 0xc4, 0x60, + 0xf2, 0x28, 0x90, 0xef, 0x9a, 0xbe, 0x49, 0xb1, 0xb8, 0x66, 0x00, 0x8b, 0x88, 0x90, 0x81, 0xb3, + 0x69, 0xef, 0x90, 0x44, 0x1c, 0x8a, 0x04, 0xca, 0x4f, 0x07, 0xc2, 0x07, 0x72, 0x63, 0xa0, 0x70, + 0x02, 0x2c, 0x34, 0x9a, 0xed, 0xad, 0x7a, 0x73, 0x75, 0x55, 0x47, 0xa9, 0x8a, 0xac, 0x9e, 0x02, + 0xea, 0x46, 0xf9, 0xde, 0x75, 0xbd, 0xd1, 0xde, 0x6a, 0x34, 0xab, 0x3a, 0xfd, 0x32, 0xaf, 0x1e, + 0x07, 0x73, 0x95, 0x72, 0x65, 0x2d, 0x48, 0x28, 0xa8, 0xa7, 0xc1, 0xc9, 0x75, 0x7d, 0x7d, 0x59, + 0x37, 0x5a, 0x6b, 0xb5, 0x8d, 0x2d, 0x44, 0x66, 0xa5, 0xb9, 0xd9, 0xa8, 0x2a, 0x45, 0x55, 0x03, + 0xa7, 0x98, 0x37, 0xe7, 0x8d, 0x66, 0x63, 0x75, 0xab, 0xd5, 0x2e, 0xb7, 0x75, 0x65, 0x46, 0xbd, + 0x0a, 0x1c, 0xaf, 0x94, 0x1b, 0x38, 0x7b, 0xa5, 0xd9, 0x68, 0xe8, 0x95, 0xb6, 0x52, 0xd2, 0xfe, + 0x3d, 0x0f, 0xe6, 0x6a, 0x5e, 0xc3, 0xdc, 0x83, 0xe7, 0xcc, 0x9e, 0xd5, 0xd5, 0x5e, 0xc0, 0xcc, + 0x3c, 0x6e, 0x00, 0x0b, 0x2e, 0xf9, 0x0b, 0xbb, 0x6d, 0x0b, 0x12, 0x34, 0x17, 0x0c, 0x3e, 0x11, + 0xcd, 0xc9, 0x6d, 0x4c, 0x20, 0x98, 0x93, 0x93, 0x27, 0x75, 0x19, 0x00, 0xf2, 0xaf, 0x1d, 0xdd, + 0x11, 0x7b, 0x76, 0xb0, 0x35, 0x99, 0x7b, 0xd0, 0x83, 0xee, 0x25, 0xab, 0x03, 0x83, 0x9c, 0x06, + 0xf3, 0x95, 0xf6, 0x75, 0x59, 0x74, 0x7f, 0x91, 0x01, 0x95, 0xa9, 0x4e, 0x4c, 0x6f, 0xf8, 0xe3, + 0xb2, 0xc8, 0xee, 0xa0, 0x10, 0xc9, 0x74, 0x9a, 0xf2, 0x62, 0x69, 0xbc, 0x65, 0xdb, 0x76, 0xb3, + 0xb9, 0xd5, 0x5a, 0x6b, 0x1a, 0x6d, 0x45, 0x56, 0xe7, 0x41, 0x09, 0x3d, 0xd6, 0x9b, 0x8d, 0x55, + 0x25, 0xaf, 0x5e, 0x0d, 0x4e, 0xac, 0x95, 0x5b, 0x5b, 0xb5, 0xc6, 0xb9, 0x72, 0xbd, 0x56, 0xdd, + 0xaa, 0xac, 0x95, 0x8d, 0x96, 0x52, 0x50, 0xaf, 0x01, 0x57, 0xb7, 0x6b, 0xba, 0xb1, 0xb5, 0xa2, + 0x97, 0xdb, 0x9b, 0x86, 0xde, 0xda, 0x6a, 0x34, 0xb7, 0x1a, 0xe5, 0x75, 0x5d, 0x29, 0xa2, 0xe6, + 0x8f, 0x5f, 0x45, 0x6a, 0x33, 0x73, 0x50, 0x19, 0x4b, 0x31, 0xca, 0x38, 0x3b, 0xa8, 0x8c, 0x80, + 0x55, 0x2b, 0x43, 0x6f, 0xe9, 0xc6, 0x39, 0x5d, 0x99, 0x1b, 0xa6, 0x6b, 0xf3, 0xea, 0x49, 0xa0, + 0x20, 0x1e, 0xb6, 0x6a, 0xad, 0x20, 0x67, 0x55, 0x59, 0xd0, 0x3e, 0x5d, 0x04, 0xa7, 0x0c, 0xb8, + 0x63, 0x79, 0x3e, 0x74, 0x37, 0xcc, 0x2b, 0x7b, 0xd0, 0xf6, 0x83, 0x4e, 0xfe, 0x9f, 0x53, 0x2b, + 0xe3, 0x3a, 0x58, 0xe8, 0x13, 0x1a, 0xeb, 0xd0, 0xdf, 0x75, 0xba, 0x74, 0x14, 0x7e, 0x44, 0x6c, + 0xcf, 0xb1, 0xb4, 0xc1, 0x66, 0x37, 0xf8, 0xaf, 0x19, 0xdd, 0x96, 0x13, 0x74, 0x3b, 0x3f, 0x8e, + 0x6e, 0xab, 0xd7, 0x81, 0xd9, 0x7d, 0x0f, 0xba, 0xfa, 0x9e, 0x69, 0xf5, 0x82, 0x3b, 0x3e, 0xc3, + 0x04, 0xed, 0x9d, 0x79, 0xd1, 0x13, 0x2b, 0x4c, 0x5d, 0x86, 0x8b, 0x31, 0xa6, 0x6f, 0x3d, 0x03, + 0x00, 0xad, 0xec, 0xa6, 0xdb, 0xa3, 0xca, 0xca, 0xa4, 0x20, 0xfe, 0x2e, 0x58, 0xbd, 0x9e, 0x65, + 0xef, 0x84, 0xfb, 0xfe, 0x51, 0x82, 0xf6, 0x62, 0x59, 0xe4, 0x04, 0x4b, 0x5a, 0xde, 0xd2, 0xb5, + 0xa6, 0x17, 0x4a, 0x53, 0xee, 0x77, 0x0f, 0x36, 0x9d, 0xa2, 0xaa, 0x80, 0x79, 0x9c, 0x46, 0x5b, + 0xa0, 0x32, 0x83, 0xfa, 0xe0, 0x80, 0xdc, 0xba, 0xde, 0x5e, 0x6b, 0x56, 0xc3, 0x77, 0x25, 0x44, + 0x12, 0x31, 0x53, 0x6e, 0xdc, 0x8b, 0x5b, 0xe3, 0xac, 0xfa, 0x60, 0x70, 0x0d, 0xd3, 0x61, 0x97, + 0xeb, 0x86, 0x5e, 0xae, 0xde, 0xbb, 0xa5, 0x3f, 0xad, 0xd6, 0x6a, 0xb7, 0xf8, 0xc6, 0x15, 0xb4, + 0xa3, 0x39, 0xc4, 0xaf, 0xbe, 0x5e, 0xae, 0xd5, 0x69, 0xff, 0xbe, 0xd2, 0x34, 0xd6, 0xcb, 0x6d, + 0x65, 0x5e, 0x7b, 0xb9, 0x0c, 0x94, 0x55, 0xe8, 0x6f, 0x38, 0xae, 0x6f, 0xf6, 0xea, 0x96, 0x7d, + 0x71, 0xd3, 0xed, 0x71, 0x93, 0x4d, 0xe1, 0x30, 0x1d, 0xfc, 0x10, 0xc9, 0x11, 0x8c, 0xdf, 0x11, + 0xef, 0xe3, 0x6c, 0x91, 0x32, 0x45, 0x09, 0xda, 0xb3, 0x24, 0x91, 0xe5, 0x6e, 0xf1, 0x52, 0xd3, + 0xe9, 0xc9, 0xb3, 0xa7, 0x3d, 0x3e, 0x0f, 0x41, 0xad, 0xa8, 0x3d, 0x2f, 0x0f, 0x4a, 0x2b, 0x96, + 0x6d, 0xf6, 0xac, 0x67, 0x72, 0xd1, 0x31, 0xa3, 0x3e, 0x26, 0x97, 0xd0, 0xc7, 0x48, 0x63, 0x8d, + 0x9f, 0x3f, 0x2b, 0x8b, 0x2e, 0x2f, 0x30, 0xb2, 0x0f, 0x98, 0x8c, 0x19, 0x3c, 0x3f, 0x26, 0x89, + 0x2c, 0x2f, 0x8c, 0xa6, 0x97, 0x0e, 0xc3, 0xcf, 0x7e, 0x6f, 0xd8, 0x58, 0x03, 0xed, 0xbb, 0x34, + 0x4c, 0x15, 0x66, 0xb5, 0x3f, 0x90, 0x81, 0xb6, 0x0a, 0xfd, 0x73, 0xd0, 0x0d, 0xa7, 0x02, 0xb8, + 0xd7, 0xa7, 0xf6, 0x36, 0xd3, 0x64, 0xdf, 0xcc, 0x02, 0x78, 0x9e, 0x07, 0xb0, 0x9c, 0xd0, 0x78, + 0x62, 0x48, 0xc7, 0x34, 0xde, 0x1a, 0x28, 0x7a, 0xf8, 0x3d, 0x55, 0xb3, 0xc7, 0xc4, 0x0f, 0x97, + 0x98, 0x18, 0x4b, 0x9d, 0x10, 0x36, 0x28, 0x01, 0xed, 0x3b, 0xe1, 0x24, 0xe8, 0x07, 0x39, 0xed, + 0x58, 0x39, 0x34, 0xb3, 0xe9, 0xf4, 0xc5, 0xcd, 0x56, 0x5d, 0x86, 0xd9, 0x37, 0xda, 0xc7, 0x0a, + 0xe0, 0xe4, 0xb0, 0xea, 0x68, 0x1f, 0xca, 0x71, 0x3b, 0xec, 0x10, 0x0f, 0xf9, 0x39, 0xba, 0x81, + 0x88, 0x1e, 0xd4, 0xc7, 0x81, 0xab, 0xc3, 0x65, 0xb8, 0xb6, 0xd3, 0x80, 0x97, 0xbd, 0x1e, 0xf4, + 0x7d, 0xe8, 0xe2, 0xaa, 0x95, 0x8c, 0xe1, 0x2f, 0xd5, 0x27, 0x80, 0x07, 0x59, 0xb6, 0x67, 0x75, + 0xa1, 0xdb, 0xb6, 0xfa, 0x5e, 0xd9, 0xee, 0xb6, 0xf7, 0x7d, 0xc7, 0xb5, 0x4c, 0x7a, 0x23, 0x65, + 0xc9, 0x88, 0x7b, 0xad, 0xde, 0x0c, 0x14, 0xcb, 0x6b, 0xda, 0x17, 0x1c, 0xd3, 0xed, 0x5a, 0xf6, + 0x4e, 0xdd, 0xf2, 0x7c, 0xea, 0x01, 0x7c, 0x20, 0x5d, 0xfb, 0x1b, 0x59, 0xf4, 0x30, 0xdd, 0x08, + 0x58, 0x63, 0x3a, 0x94, 0xe7, 0xcb, 0x22, 0xc7, 0xe3, 0xd2, 0xd1, 0x4e, 0xa7, 0x2c, 0xcf, 0x9d, + 0xb6, 0x21, 0x31, 0x7c, 0x04, 0xc7, 0x5d, 0x0b, 0x49, 0x0f, 0x0c, 0x81, 0x73, 0xba, 0x51, 0x5b, + 0xa9, 0xe9, 0xc8, 0xac, 0xb8, 0x1a, 0x9c, 0x88, 0xde, 0x55, 0xef, 0xdd, 0x6a, 0xe9, 0x8d, 0xb6, + 0x52, 0x42, 0xfd, 0x14, 0x49, 0x5e, 0x29, 0xd7, 0xea, 0x7a, 0x75, 0xab, 0xdd, 0x44, 0x6f, 0xaa, + 0xe3, 0x99, 0x16, 0xda, 0x73, 0xf2, 0xe0, 0x38, 0x96, 0xed, 0x15, 0x2c, 0x55, 0x24, 0x94, 0x01, + 0x5f, 0xdb, 0x10, 0xa0, 0x59, 0x22, 0x5e, 0xed, 0xf7, 0x85, 0x2f, 0xdc, 0x64, 0x20, 0x1c, 0x28, + 0x23, 0x46, 0x33, 0xbe, 0x2d, 0x89, 0x44, 0xa8, 0x10, 0x26, 0x9b, 0x4e, 0x29, 0xfe, 0x65, 0xda, + 0x23, 0x4e, 0x3c, 0xf8, 0xd8, 0xca, 0xac, 0xe0, 0x8f, 0x9f, 0xb6, 0x51, 0x33, 0xb0, 0x3a, 0x2c, + 0x02, 0x80, 0x53, 0xb0, 0x06, 0x11, 0x3d, 0x18, 0x3a, 0x5e, 0xc5, 0xe9, 0x41, 0xb9, 0xd2, 0xae, + 0x9d, 0xd3, 0xe3, 0xf4, 0xe0, 0xf3, 0x32, 0x28, 0xad, 0x42, 0x1f, 0xcd, 0xa9, 0x3c, 0xed, 0x89, + 0x02, 0xeb, 0x3f, 0xc8, 0x8c, 0xe9, 0x39, 0x1d, 0xb3, 0x17, 0x2e, 0x03, 0x90, 0x27, 0xed, 0xc7, + 0xc6, 0x31, 0x41, 0x82, 0xa2, 0x63, 0xc6, 0xab, 0x1f, 0x00, 0x05, 0x1f, 0xbd, 0xa6, 0xcb, 0xd0, + 0x0f, 0x8d, 0x1d, 0xae, 0x10, 0x91, 0xaa, 0xe9, 0x9b, 0x06, 0xc9, 0xcf, 0x8c, 0x4e, 0x82, 0xb6, + 0x4b, 0x0c, 0x23, 0xdf, 0x8b, 0xf6, 0xe7, 0x5f, 0xca, 0xe0, 0x6a, 0xd2, 0x3e, 0xca, 0xfd, 0x7e, + 0xcb, 0x77, 0x5c, 0x68, 0xc0, 0x0e, 0xb4, 0xfa, 0xfe, 0xc0, 0xfa, 0x9e, 0x4b, 0x52, 0x83, 0xcd, + 0x66, 0xfa, 0xa8, 0xbd, 0x41, 0x16, 0x8d, 0xf0, 0x7b, 0xa0, 0x3d, 0x0e, 0x94, 0x17, 0xd3, 0xd8, + 0x3f, 0x25, 0x89, 0xc4, 0xec, 0x4d, 0x49, 0x3c, 0x1d, 0x50, 0x1f, 0x3f, 0x02, 0xa0, 0x82, 0x95, + 0x1b, 0x43, 0xaf, 0xe8, 0xb5, 0x0d, 0x34, 0x08, 0x3c, 0x04, 0x5c, 0xbb, 0xb1, 0x69, 0x54, 0xd6, + 0xca, 0x2d, 0x7d, 0xcb, 0xd0, 0x57, 0x6b, 0xad, 0x36, 0x75, 0xca, 0x22, 0x5f, 0xcd, 0xa8, 0xd7, + 0x81, 0xd3, 0xad, 0xcd, 0xe5, 0x56, 0xc5, 0xa8, 0x6d, 0xe0, 0x74, 0x43, 0x6f, 0xe8, 0xe7, 0xe9, + 0xdb, 0x92, 0xf6, 0x11, 0x05, 0xcc, 0xa1, 0x09, 0x40, 0x8b, 0xcc, 0x0b, 0xb4, 0xbf, 0xcd, 0x83, + 0x39, 0x03, 0x7a, 0x4e, 0xef, 0x12, 0x9e, 0x23, 0x4c, 0x6b, 0xea, 0xf1, 0x2d, 0x59, 0xf4, 0xfc, + 0x36, 0xc3, 0xec, 0x12, 0xc3, 0x68, 0xfc, 0x44, 0xd3, 0xbc, 0x64, 0x5a, 0x3d, 0xf3, 0x02, 0xed, + 0x6a, 0x4a, 0x46, 0x94, 0xa0, 0x2e, 0x01, 0xd5, 0xb9, 0x6c, 0x43, 0xb7, 0xd5, 0xb9, 0xac, 0xfb, + 0xbb, 0xe5, 0x6e, 0xd7, 0x85, 0x9e, 0x47, 0x57, 0x2f, 0x86, 0xbc, 0x51, 0x6f, 0x02, 0xc7, 0x71, + 0x2a, 0x93, 0x99, 0x38, 0xc8, 0x0c, 0x26, 0x87, 0x39, 0xcb, 0xf6, 0x95, 0x20, 0x67, 0x81, 0xc9, + 0x19, 0x25, 0xb3, 0xc7, 0x25, 0x8a, 0xfc, 0x29, 0x9d, 0xeb, 0xc1, 0x9c, 0x6d, 0xee, 0x41, 0xfd, + 0xfe, 0xbe, 0xe5, 0x42, 0x0f, 0x3b, 0xc6, 0xc8, 0x06, 0x9b, 0xa4, 0x7d, 0x4c, 0xe8, 0xbc, 0xb9, + 0x98, 0xc4, 0xd2, 0xe9, 0xfe, 0xea, 0x18, 0xaa, 0x3f, 0xa4, 0x9f, 0x91, 0xb5, 0x8f, 0xc8, 0x60, + 0x9e, 0x32, 0x55, 0xb6, 0xaf, 0xd4, 0xba, 0xda, 0x43, 0x38, 0xe3, 0xd7, 0x44, 0x69, 0x81, 0xf1, + 0x8b, 0x1f, 0xb4, 0x9f, 0x90, 0x45, 0xdd, 0x9d, 0x87, 0x54, 0x1c, 0x97, 0x11, 0xef, 0x38, 0xba, + 0xed, 0xec, 0x53, 0x47, 0xd5, 0x92, 0x41, 0x1e, 0xb2, 0x5c, 0xd4, 0xd3, 0x7e, 0x5d, 0xc8, 0x99, + 0x5a, 0xb0, 0x1a, 0x47, 0x04, 0xe0, 0x67, 0x64, 0xb0, 0x48, 0xb9, 0x6a, 0xd1, 0x73, 0x3e, 0x42, + 0x07, 0xde, 0x7e, 0x4a, 0xd8, 0x10, 0x1c, 0x52, 0x7f, 0x5a, 0xd2, 0x03, 0x06, 0xc8, 0x4f, 0x08, + 0x05, 0x47, 0x13, 0xae, 0xc8, 0x11, 0x41, 0xf9, 0xae, 0x3c, 0x98, 0xdb, 0xf4, 0xa0, 0x4b, 0xfd, + 0xf6, 0xb5, 0xd7, 0xe6, 0x81, 0xbc, 0x0a, 0xb9, 0x8d, 0xd4, 0x17, 0x09, 0x7b, 0xf8, 0xb2, 0x95, + 0x65, 0x88, 0x22, 0x1b, 0x29, 0x06, 0xb6, 0x1b, 0xc1, 0x22, 0x11, 0x69, 0xd9, 0xf7, 0x91, 0x91, + 0x18, 0x78, 0xd3, 0x0e, 0xa4, 0x4e, 0x62, 0xab, 0x08, 0x97, 0x85, 0xb2, 0x54, 0x10, 0x4f, 0x75, + 0xb8, 0x4d, 0xe6, 0xb3, 0x79, 0x63, 0x20, 0x55, 0x7d, 0x34, 0xb8, 0xca, 0xe9, 0x43, 0x72, 0x7e, + 0x85, 0xc9, 0x5c, 0xc0, 0x99, 0x87, 0xbd, 0xd2, 0xfe, 0x56, 0xc8, 0x57, 0x57, 0x5c, 0x3a, 0xe9, + 0x74, 0xa1, 0x3f, 0x19, 0x93, 0xe4, 0x24, 0x50, 0x50, 0x0e, 0xbc, 0xff, 0x62, 0xe8, 0xad, 0x66, + 0xfd, 0x9c, 0x3e, 0x7c, 0x19, 0xa3, 0xa0, 0x3d, 0x57, 0x06, 0xb3, 0xcb, 0xae, 0x63, 0x76, 0x3b, + 0xa6, 0xe7, 0x6b, 0xdf, 0x91, 0xc0, 0xfc, 0x86, 0x79, 0xa5, 0xe7, 0x98, 0x5d, 0xec, 0xdf, 0x3f, + 0xd0, 0x17, 0xf4, 0xc9, 0xab, 0xa0, 0x2f, 0xa0, 0x8f, 0xfc, 0xc1, 0xc0, 0xf0, 0xe8, 0x5e, 0x4e, + 0xe4, 0x5e, 0xcd, 0x70, 0x9b, 0x4f, 0x1a, 0x16, 0xac, 0x34, 0xe0, 0x6b, 0x89, 0xe5, 0x29, 0xc6, + 0xa2, 0xfc, 0x88, 0x58, 0xf8, 0x51, 0x11, 0x92, 0x47, 0xb3, 0x2b, 0xff, 0xbc, 0x12, 0x28, 0x56, + 0x21, 0xb6, 0xe2, 0x7e, 0x55, 0x02, 0x33, 0x2d, 0xe8, 0x63, 0x0b, 0xee, 0x76, 0xce, 0x53, 0xb8, + 0x8b, 0x33, 0x44, 0x4e, 0xec, 0xc1, 0x33, 0x9a, 0xac, 0x33, 0xe7, 0xad, 0xf1, 0xff, 0x14, 0x1e, + 0x89, 0xa4, 0xdc, 0x25, 0x5a, 0xe6, 0xa1, 0x3c, 0x12, 0x13, 0x49, 0x65, 0xef, 0x6b, 0xf5, 0x1e, + 0x89, 0xba, 0x56, 0x31, 0xbd, 0xde, 0xab, 0x59, 0xfd, 0x4c, 0xf4, 0x36, 0xa3, 0xcc, 0x27, 0x38, + 0x47, 0x3d, 0x16, 0xcc, 0x10, 0x99, 0x07, 0xf3, 0xd1, 0x41, 0x3f, 0x05, 0x42, 0x02, 0x9f, 0xbd, + 0x0e, 0x72, 0x0a, 0xba, 0xa8, 0xc5, 0x17, 0x3e, 0x95, 0x18, 0x04, 0xf3, 0x0d, 0xe8, 0x5f, 0x76, + 0xdc, 0x8b, 0x2d, 0xdf, 0xf4, 0xa1, 0xf6, 0x2f, 0x12, 0xb9, 0x2e, 0x8f, 0x89, 0x7e, 0xd2, 0x00, + 0x27, 0x48, 0x85, 0x68, 0x46, 0xdc, 0x7f, 0x93, 0x8a, 0x5c, 0x3f, 0x54, 0x08, 0x4c, 0x3e, 0xe3, + 0xe0, 0xa7, 0xda, 0x4b, 0x87, 0x06, 0x7d, 0x92, 0x86, 0x4c, 0x1a, 0xa8, 0x64, 0x58, 0x06, 0xe3, + 0xef, 0xc7, 0xd3, 0x3e, 0x2a, 0x64, 0x56, 0x8b, 0xd1, 0x3c, 0x9a, 0xae, 0xe0, 0xc3, 0x8f, 0x04, + 0xf9, 0xca, 0xae, 0xe9, 0x6b, 0xef, 0x96, 0x01, 0x28, 0x77, 0xbb, 0xeb, 0xc4, 0x07, 0x9c, 0x75, + 0x48, 0x3b, 0x0b, 0xe6, 0x3b, 0xbb, 0x66, 0x74, 0x73, 0x06, 0xe9, 0x0f, 0xb8, 0x34, 0xf5, 0x71, + 0x91, 0x33, 0x39, 0x91, 0xaa, 0x36, 0x00, 0x13, 0x2a, 0x83, 0xd2, 0x0e, 0x1d, 0xcd, 0xf9, 0x50, + 0x98, 0x89, 0x47, 0xe8, 0xd0, 0xe7, 0x4b, 0x11, 0x7b, 0xf1, 0x73, 0x38, 0x4a, 0x3a, 0x3c, 0x60, + 0x13, 0x25, 0xa4, 0x3c, 0xe9, 0x2d, 0x16, 0xd0, 0x23, 0x99, 0xaf, 0xa9, 0x84, 0xae, 0x55, 0xf5, + 0xae, 0x15, 0x88, 0x96, 0x06, 0xcc, 0xd2, 0x5e, 0x98, 0x4b, 0x07, 0x5f, 0xb2, 0xe0, 0x9e, 0x02, + 0x16, 0x60, 0xd7, 0xf2, 0x61, 0x50, 0x4b, 0x2a, 0xc0, 0x24, 0x88, 0xf9, 0x0f, 0xb4, 0x67, 0x0b, + 0x07, 0x5d, 0xc3, 0x02, 0x3d, 0x58, 0xa3, 0x98, 0xf6, 0x27, 0x16, 0x46, 0x4d, 0x8c, 0x66, 0xf6, + 0x60, 0xfd, 0x98, 0x0c, 0xae, 0x6e, 0x3b, 0x3b, 0x3b, 0x3d, 0x18, 0x88, 0x09, 0x12, 0xef, 0x4c, + 0xcd, 0x9c, 0x24, 0x5c, 0x78, 0x27, 0xc8, 0xb9, 0xcf, 0x0a, 0x8f, 0x92, 0xa1, 0x07, 0xfe, 0xc4, + 0x54, 0xe2, 0x2c, 0x0a, 0x8b, 0x6b, 0x28, 0x9f, 0x31, 0x28, 0x88, 0x05, 0x7c, 0x16, 0x26, 0x9b, + 0x3d, 0x10, 0x5f, 0x92, 0xc0, 0x02, 0xb9, 0x17, 0x31, 0x50, 0xd0, 0x7b, 0x26, 0x08, 0x80, 0xf6, + 0x9d, 0x9c, 0xa8, 0x9f, 0x2d, 0x96, 0x09, 0xc7, 0x49, 0x8c, 0x88, 0xc5, 0x82, 0xaa, 0x8c, 0x24, + 0x37, 0x85, 0x9b, 0x3a, 0xf3, 0x60, 0x6e, 0x15, 0x06, 0x2d, 0xcd, 0xd3, 0xde, 0x9f, 0xb2, 0x27, + 0x3a, 0x0b, 0xe6, 0xf1, 0xe5, 0x60, 0x4d, 0x7a, 0x4c, 0x92, 0xac, 0x9a, 0x71, 0x69, 0xea, 0x0d, + 0x60, 0xe1, 0x02, 0xdc, 0x76, 0x5c, 0xd8, 0xe4, 0xce, 0x52, 0xf2, 0x89, 0xc3, 0xc3, 0xd3, 0xa9, + 0x37, 0x81, 0xe3, 0xd4, 0xd1, 0x7d, 0x19, 0xcd, 0xf5, 0x4d, 0xf7, 0x0a, 0x3d, 0x98, 0x36, 0x98, + 0xac, 0xfd, 0x25, 0xdb, 0x60, 0x96, 0x79, 0x14, 0x6f, 0x39, 0x28, 0x76, 0xa6, 0xd2, 0x31, 0xa3, + 0xd3, 0xe3, 0x41, 0x89, 0xea, 0x48, 0x60, 0xd0, 0x25, 0xf5, 0xa0, 0x61, 0x5e, 0xf5, 0xf1, 0x60, + 0x16, 0x89, 0x08, 0xdb, 0x0d, 0xb4, 0xeb, 0x3d, 0x3d, 0xe4, 0x43, 0xfc, 0xde, 0x88, 0xb2, 0x6a, + 0xbf, 0x14, 0xea, 0x8c, 0xce, 0xe9, 0xcc, 0x63, 0xd2, 0x30, 0x3f, 0x95, 0x8b, 0xe4, 0x15, 0xa6, + 0xfc, 0xe5, 0x2b, 0xb5, 0xae, 0xa7, 0xad, 0xa7, 0xd3, 0x9a, 0x33, 0x00, 0x84, 0xcd, 0x2f, 0x08, + 0x9c, 0xc1, 0xa4, 0xf0, 0xb1, 0xf1, 0x13, 0x8f, 0x02, 0x0e, 0x8a, 0x03, 0xb3, 0x33, 0x59, 0x40, + 0x05, 0x8f, 0x10, 0x8a, 0x70, 0x92, 0x3d, 0x3a, 0xbf, 0x98, 0x07, 0x57, 0x87, 0x27, 0x9c, 0xea, + 0xa6, 0x17, 0xb5, 0xec, 0x7b, 0xd3, 0x41, 0xc4, 0x1d, 0x29, 0x09, 0x9b, 0xe3, 0x49, 0x50, 0xf0, + 0xf6, 0x2f, 0x84, 0x8e, 0x80, 0xe4, 0x41, 0x7b, 0xa3, 0x9c, 0x6a, 0xac, 0x1a, 0xca, 0xdf, 0x84, + 0x1b, 0xe1, 0x2d, 0xe0, 0x84, 0xbd, 0xbf, 0x17, 0x62, 0x81, 0x7b, 0x1a, 0xda, 0xb3, 0x1c, 0x7c, + 0xc1, 0x37, 0xd9, 0xbc, 0x78, 0x93, 0x4d, 0x31, 0x92, 0x8a, 0x54, 0x3a, 0x7b, 0xf5, 0xf8, 0xec, + 0xc0, 0x11, 0xb4, 0x4a, 0x6a, 0xa5, 0x20, 0xf0, 0x4b, 0x2c, 0xfc, 0xff, 0x94, 0x4b, 0xd5, 0xf3, + 0x8e, 0x3e, 0xb9, 0x96, 0xa2, 0x27, 0x3c, 0xca, 0x63, 0x6b, 0xaf, 0x2b, 0x00, 0xad, 0x15, 0x39, + 0xe4, 0x50, 0x50, 0x37, 0x5c, 0x78, 0xc9, 0x82, 0x97, 0xbd, 0x81, 0xfd, 0x0e, 0x22, 0xb7, 0x1c, + 0x2b, 0xb7, 0x3f, 0xcf, 0x8b, 0x3a, 0xd4, 0xf0, 0x1a, 0x74, 0xa0, 0xa8, 0x98, 0xb6, 0xf3, 0x74, + 0x50, 0xea, 0xd3, 0x1c, 0xb4, 0xed, 0x94, 0xc7, 0xa3, 0x8a, 0x32, 0xd2, 0x54, 0x23, 0x24, 0xa9, + 0xfd, 0x5d, 0x0e, 0xcc, 0x31, 0x6f, 0xe2, 0x77, 0x04, 0x0e, 0xa8, 0x96, 0x94, 0x3c, 0x23, 0x95, + 0x85, 0x67, 0xa4, 0xea, 0x12, 0x28, 0x78, 0x42, 0x8d, 0x96, 0x64, 0x53, 0x9f, 0x08, 0xe6, 0xbb, + 0xb0, 0x0f, 0xed, 0x2e, 0xb4, 0x3b, 0x16, 0xf4, 0x4e, 0x17, 0xb0, 0x58, 0x62, 0xc3, 0x34, 0x70, + 0x99, 0x05, 0xe3, 0x77, 0xa7, 0xc3, 0x2a, 0x7b, 0x2d, 0xfd, 0x53, 0x09, 0x9c, 0x61, 0x5a, 0xc9, + 0x8a, 0xeb, 0xec, 0xa5, 0xd6, 0xd4, 0x97, 0xb3, 0xe3, 0xf1, 0x26, 0xaf, 0xa9, 0x77, 0x25, 0x36, + 0xca, 0x21, 0xc5, 0xc5, 0x34, 0xfa, 0xf7, 0x87, 0xd2, 0x7d, 0x1a, 0x27, 0xdd, 0xea, 0x21, 0xe9, + 0x4f, 0xe1, 0x40, 0x78, 0x1e, 0xcc, 0x1b, 0xd0, 0xec, 0x86, 0x43, 0xed, 0x1f, 0x31, 0x46, 0xf4, + 0x13, 0x41, 0xde, 0x8f, 0x56, 0xc3, 0x1e, 0x71, 0xb0, 0x32, 0xec, 0x97, 0xf8, 0x01, 0x2f, 0x8a, + 0xe1, 0x8f, 0x84, 0x1a, 0xce, 0xa0, 0x05, 0x2e, 0x8b, 0x58, 0xe0, 0xf9, 0x61, 0x16, 0xf8, 0xf5, + 0x60, 0xae, 0x67, 0x7a, 0xa4, 0xc1, 0x84, 0x77, 0xff, 0xb2, 0x49, 0xfc, 0x2d, 0xfb, 0x89, 0xa7, + 0xed, 0x86, 0x55, 0xed, 0xf0, 0x11, 0x89, 0x3f, 0x2c, 0x74, 0xb4, 0x6e, 0x54, 0xd9, 0xe9, 0x34, + 0xe2, 0xee, 0x31, 0x56, 0xee, 0x4e, 0x01, 0x75, 0x5d, 0x6f, 0xb5, 0xca, 0xab, 0xf8, 0xc4, 0x4d, + 0xe0, 0x82, 0xd5, 0x3d, 0x7b, 0x23, 0x12, 0x1f, 0x41, 0x58, 0x9d, 0x07, 0xa5, 0x80, 0x3f, 0xe5, + 0x18, 0x79, 0xb2, 0xf1, 0x8e, 0x93, 0x92, 0xd3, 0xbe, 0x28, 0x83, 0xe2, 0xa6, 0xed, 0x42, 0xb3, + 0xab, 0x3d, 0x8f, 0xd1, 0xa5, 0xef, 0xe7, 0x74, 0xe9, 0xa1, 0xc3, 0x1a, 0x06, 0xfa, 0x26, 0x23, + 0x2d, 0xe2, 0xc3, 0x91, 0x25, 0x2e, 0x96, 0xf3, 0xcc, 0x1c, 0x1e, 0x77, 0xb1, 0x55, 0xf2, 0xf8, + 0x52, 0x33, 0xef, 0x03, 0x84, 0x91, 0xfd, 0x6d, 0x19, 0x28, 0x1b, 0xfb, 0xde, 0x2e, 0x77, 0xe8, + 0xfb, 0x57, 0x65, 0xb0, 0x10, 0x9c, 0x8b, 0x69, 0x3b, 0x17, 0xa1, 0xad, 0x3d, 0x83, 0xeb, 0x91, + 0x7d, 0x94, 0x16, 0xf4, 0xc8, 0xf8, 0x41, 0xdd, 0x60, 0x42, 0xc3, 0x48, 0xc3, 0x8e, 0xf5, 0x0f, + 0x94, 0xb1, 0xc4, 0xd1, 0x5f, 0xda, 0xa0, 0xdf, 0x46, 0x01, 0x65, 0xb4, 0x17, 0x0b, 0xdf, 0x73, + 0x34, 0x82, 0xf6, 0xf0, 0xee, 0x5d, 0xec, 0xe6, 0xa2, 0x54, 0xa4, 0xb3, 0x47, 0xf5, 0x7a, 0x50, + 0x0a, 0x24, 0xa5, 0xce, 0x00, 0xb9, 0xd6, 0x6c, 0x29, 0xc7, 0xd4, 0x39, 0x30, 0x53, 0xb6, 0xbb, + 0xae, 0x63, 0x75, 0x95, 0xdc, 0xd9, 0x19, 0x50, 0xd0, 0xf7, 0xfa, 0xfe, 0x95, 0xb3, 0x0f, 0x07, + 0x0b, 0x2d, 0xdf, 0x85, 0xe6, 0x5e, 0x22, 0x6e, 0x77, 0xdc, 0x0e, 0x66, 0x6c, 0x67, 0xcb, 0xdc, + 0xf7, 0x77, 0xd5, 0x87, 0x1c, 0xb0, 0x3a, 0xa8, 0xd6, 0x34, 0x69, 0x34, 0xce, 0xaf, 0xdf, 0x89, + 0x57, 0x3a, 0x8a, 0xb6, 0x53, 0xde, 0xf7, 0x77, 0x97, 0xaf, 0xfb, 0xcc, 0x9f, 0x9d, 0xc9, 0x7d, + 0xfe, 0xcf, 0xce, 0xe4, 0xbe, 0xf6, 0x67, 0x67, 0x72, 0x3f, 0xf5, 0xe7, 0x67, 0x8e, 0x7d, 0xfe, + 0xcf, 0xcf, 0x1c, 0xfb, 0xd2, 0x9f, 0x9f, 0x39, 0xf6, 0x83, 0x52, 0xff, 0xc2, 0x85, 0x22, 0xa6, + 0xf2, 0xd8, 0xff, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x6a, 0x2a, 0x5f, 0x0f, 0xe3, 0x34, 0x02, 0x00, } func (m *Rpc) Marshal() (dAtA []byte, err error) { @@ -79254,6 +79485,134 @@ func (m *RpcSpaceMakeShareableResponseError) MarshalToSizedBuffer(dAtA []byte) ( return len(dAtA) - i, nil } +func (m *RpcSpaceInviteChange) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RpcSpaceInviteChange) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RpcSpaceInviteChange) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *RpcSpaceInviteChangeRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RpcSpaceInviteChangeRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RpcSpaceInviteChangeRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Permissions != 0 { + i = encodeVarintCommands(dAtA, i, uint64(m.Permissions)) + i-- + dAtA[i] = 0x10 + } + if len(m.SpaceId) > 0 { + i -= len(m.SpaceId) + copy(dAtA[i:], m.SpaceId) + i = encodeVarintCommands(dAtA, i, uint64(len(m.SpaceId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *RpcSpaceInviteChangeResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RpcSpaceInviteChangeResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RpcSpaceInviteChangeResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Error != nil { + { + size, err := m.Error.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintCommands(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *RpcSpaceInviteChangeResponseError) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RpcSpaceInviteChangeResponseError) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RpcSpaceInviteChangeResponseError) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Description) > 0 { + i -= len(m.Description) + copy(dAtA[i:], m.Description) + i = encodeVarintCommands(dAtA, i, uint64(len(m.Description))) + i-- + dAtA[i] = 0x12 + } + if m.Code != 0 { + i = encodeVarintCommands(dAtA, i, uint64(m.Code)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + func (m *RpcSpaceInviteGenerate) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -127097,6 +127456,60 @@ func (m *RpcSpaceMakeShareableResponseError) Size() (n int) { return n } +func (m *RpcSpaceInviteChange) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *RpcSpaceInviteChangeRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.SpaceId) + if l > 0 { + n += 1 + l + sovCommands(uint64(l)) + } + if m.Permissions != 0 { + n += 1 + sovCommands(uint64(m.Permissions)) + } + return n +} + +func (m *RpcSpaceInviteChangeResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Error != nil { + l = m.Error.Size() + n += 1 + l + sovCommands(uint64(l)) + } + return n +} + +func (m *RpcSpaceInviteChangeResponseError) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Code != 0 { + n += 1 + sovCommands(uint64(m.Code)) + } + l = len(m.Description) + if l > 0 { + n += 1 + l + sovCommands(uint64(l)) + } + return n +} + func (m *RpcSpaceInviteGenerate) Size() (n int) { if m == nil { return 0 @@ -149057,6 +149470,344 @@ func (m *RpcSpaceMakeShareableResponseError) Unmarshal(dAtA []byte) error { } return nil } +func (m *RpcSpaceInviteChange) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: InviteChange: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: InviteChange: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipCommands(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCommands + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RpcSpaceInviteChangeRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Request: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Request: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SpaceId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCommands + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCommands + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SpaceId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Permissions", wireType) + } + m.Permissions = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Permissions |= model.ParticipantPermissions(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipCommands(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCommands + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RpcSpaceInviteChangeResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Response: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Response: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthCommands + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthCommands + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Error == nil { + m.Error = &RpcSpaceInviteChangeResponseError{} + } + if err := m.Error.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCommands(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCommands + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RpcSpaceInviteChangeResponseError) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Error: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Error: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Code", wireType) + } + m.Code = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Code |= RpcSpaceInviteChangeResponseErrorCode(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCommands + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCommands + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Description = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCommands(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCommands + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *RpcSpaceInviteGenerate) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/pb/protos/commands.proto b/pb/protos/commands.proto index cb74f2c7e..c59c8f361 100644 --- a/pb/protos/commands.proto +++ b/pb/protos/commands.proto @@ -148,6 +148,33 @@ message Rpc { } } + message InviteChange { + message Request { + string spaceId = 1; + model.ParticipantPermissions permissions = 2; + } + + message Response { + Error error = 1; + + message Error { + Code code = 1; + string description = 2; + + enum Code { + NULL = 0; + UNKNOWN_ERROR = 1; + BAD_INPUT = 2; + + NO_SUCH_SPACE = 101; + SPACE_IS_DELETED = 102; + REQUEST_FAILED = 103; + INCORRECT_PERMISSIONS = 105; + } + } + } + } + message InviteGenerate { message Request { string spaceId = 1; diff --git a/pb/protos/service/service.proto b/pb/protos/service/service.proto index ad2bf3540..3c28ad75b 100644 --- a/pb/protos/service/service.proto +++ b/pb/protos/service/service.proto @@ -55,6 +55,7 @@ service ClientCommands { // *** rpc SpaceDelete (anytype.Rpc.Space.Delete.Request) returns (anytype.Rpc.Space.Delete.Response); rpc SpaceInviteGenerate (anytype.Rpc.Space.InviteGenerate.Request) returns (anytype.Rpc.Space.InviteGenerate.Response); + rpc SpaceInviteChange (anytype.Rpc.Space.InviteChange.Request) returns (anytype.Rpc.Space.InviteChange.Response); rpc SpaceInviteGetCurrent (anytype.Rpc.Space.InviteGetCurrent.Request) returns (anytype.Rpc.Space.InviteGetCurrent.Response); rpc SpaceInviteGetGuest (anytype.Rpc.Space.InviteGetGuest.Request) returns (anytype.Rpc.Space.InviteGetGuest.Response); rpc SpaceInviteRevoke(anytype.Rpc.Space.InviteRevoke.Request) returns (anytype.Rpc.Space.InviteRevoke.Response); diff --git a/pb/service/service.pb.go b/pb/service/service.pb.go index 0cf2cd505..93ee59327 100644 --- a/pb/service/service.pb.go +++ b/pb/service/service.pb.go @@ -26,368 +26,369 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package func init() { proto.RegisterFile("pb/protos/service/service.proto", fileDescriptor_93a29dc403579097) } var fileDescriptor_93a29dc403579097 = []byte{ - // 5766 bytes of a gzipped FileDescriptorProto + // 5777 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x9d, 0xdd, 0x6f, 0x24, 0x49, - 0x52, 0xc0, 0xd7, 0x2f, 0x2c, 0xd4, 0x71, 0x0b, 0xf4, 0xc2, 0xb2, 0xb7, 0xdc, 0xcd, 0xcc, 0xce, - 0x87, 0x3d, 0x33, 0x1e, 0xb7, 0x67, 0x67, 0xf6, 0x8b, 0x3b, 0x24, 0xe8, 0xb1, 0xc7, 0xde, 0xbe, - 0xb5, 0xbd, 0xc6, 0xdd, 0x9e, 0x11, 0x2b, 0x21, 0x51, 0xee, 0x4a, 0xb7, 0x0b, 0x57, 0x57, 0xd6, - 0x55, 0x65, 0x7b, 0xa6, 0x0f, 0x81, 0x40, 0x20, 0x10, 0x08, 0xc4, 0x89, 0x2f, 0xc1, 0x13, 0x12, - 0x7f, 0x01, 0x7f, 0x06, 0x8f, 0xf7, 0xc8, 0x23, 0xda, 0xfd, 0x33, 0x78, 0x00, 0x55, 0x66, 0x56, - 0x7e, 0x44, 0x45, 0x64, 0x95, 0xf7, 0x9e, 0x66, 0xe4, 0xf8, 0x45, 0x44, 0x7e, 0x44, 0x66, 0x46, - 0x66, 0x65, 0x55, 0x47, 0x37, 0x8b, 0xb3, 0xed, 0xa2, 0xe4, 0x82, 0x57, 0xdb, 0x15, 0x2b, 0xaf, - 0xd2, 0x19, 0x6b, 0xfe, 0x1d, 0xca, 0x3f, 0x0f, 0xde, 0x8c, 0xf3, 0x95, 0x58, 0x15, 0xec, 0xbd, - 0x77, 0x2d, 0x39, 0xe3, 0x8b, 0x45, 0x9c, 0x27, 0x95, 0x42, 0xde, 0x7b, 0xc7, 0x4a, 0xd8, 0x15, - 0xcb, 0x85, 0xfe, 0xfb, 0x93, 0xff, 0xfd, 0xbf, 0xb5, 0xe8, 0xad, 0x9d, 0x2c, 0x65, 0xb9, 0xd8, - 0xd1, 0x1a, 0x83, 0x2f, 0xa3, 0x6f, 0x8f, 0x8a, 0x62, 0x9f, 0x89, 0x17, 0xac, 0xac, 0x52, 0x9e, - 0x0f, 0xee, 0x0c, 0xb5, 0x83, 0xe1, 0x49, 0x31, 0x1b, 0x8e, 0x8a, 0x62, 0x68, 0x85, 0xc3, 0x13, - 0xf6, 0xa3, 0x25, 0xab, 0xc4, 0x7b, 0x77, 0xc3, 0x50, 0x55, 0xf0, 0xbc, 0x62, 0x83, 0xf3, 0xe8, - 0x57, 0x46, 0x45, 0x31, 0x61, 0x62, 0x97, 0xd5, 0x15, 0x98, 0x88, 0x58, 0xb0, 0xc1, 0x46, 0x4b, - 0xd5, 0x07, 0x8c, 0x8f, 0xfb, 0xdd, 0xa0, 0xf6, 0x33, 0x8d, 0xbe, 0x55, 0xfb, 0xb9, 0x58, 0x8a, - 0x84, 0xbf, 0xca, 0x07, 0xef, 0xb7, 0x15, 0xb5, 0xc8, 0xd8, 0xbe, 0x1d, 0x42, 0xb4, 0xd5, 0x97, - 0xd1, 0x2f, 0xbe, 0x8c, 0xb3, 0x8c, 0x89, 0x9d, 0x92, 0xd5, 0x05, 0xf7, 0x75, 0x94, 0x68, 0xa8, - 0x64, 0xc6, 0xee, 0x9d, 0x20, 0xa3, 0x0d, 0x7f, 0x19, 0x7d, 0x5b, 0x49, 0x4e, 0xd8, 0x8c, 0x5f, - 0xb1, 0x72, 0x80, 0x6a, 0x69, 0x21, 0xd1, 0xe4, 0x2d, 0x08, 0xda, 0xde, 0xe1, 0xf9, 0x15, 0x2b, - 0x05, 0x6e, 0x5b, 0x0b, 0xc3, 0xb6, 0x2d, 0xa4, 0x6d, 0xff, 0xf5, 0x5a, 0xf4, 0xdd, 0xd1, 0x6c, - 0xc6, 0x97, 0xb9, 0x38, 0xe0, 0xb3, 0x38, 0x3b, 0x48, 0xf3, 0xcb, 0x23, 0xf6, 0x6a, 0xe7, 0xa2, - 0xe6, 0xf3, 0x39, 0x1b, 0x3c, 0xf5, 0x5b, 0x55, 0xa1, 0x43, 0xc3, 0x0e, 0x5d, 0xd8, 0xf8, 0xfe, - 0xf0, 0x7a, 0x4a, 0xba, 0x2c, 0x7f, 0xbf, 0x16, 0xdd, 0x80, 0x65, 0x99, 0xf0, 0xec, 0x8a, 0xd9, - 0xd2, 0x7c, 0xd4, 0x61, 0xd8, 0xc7, 0x4d, 0x79, 0x3e, 0xbe, 0xae, 0x9a, 0x2e, 0x51, 0x16, 0xbd, - 0xed, 0x86, 0xcb, 0x84, 0x55, 0x72, 0x38, 0x3d, 0xa0, 0x23, 0x42, 0x23, 0xc6, 0xf3, 0xc3, 0x3e, - 0xa8, 0xf6, 0x96, 0x46, 0x03, 0xed, 0x2d, 0xe3, 0x95, 0x71, 0x76, 0x1f, 0xb5, 0xe0, 0x10, 0xc6, - 0xd7, 0x83, 0x1e, 0xa4, 0x76, 0xf5, 0x07, 0xd1, 0x2f, 0xbd, 0xe4, 0xe5, 0x65, 0x55, 0xc4, 0x33, - 0xa6, 0x87, 0xc2, 0x3d, 0x5f, 0xbb, 0x91, 0xc2, 0xd1, 0xb0, 0xde, 0x85, 0x39, 0x41, 0xdb, 0x08, - 0xbf, 0x28, 0x18, 0x9c, 0x83, 0xac, 0x62, 0x2d, 0xa4, 0x82, 0x16, 0x42, 0xda, 0xf6, 0x65, 0x34, - 0xb0, 0xb6, 0xcf, 0xfe, 0x90, 0xcd, 0xc4, 0x28, 0x49, 0x60, 0xaf, 0x58, 0x5d, 0x49, 0x0c, 0x47, - 0x49, 0x42, 0xf5, 0x0a, 0x8e, 0x6a, 0x67, 0xaf, 0xa2, 0x77, 0x80, 0xb3, 0x83, 0xb4, 0x92, 0x0e, - 0xb7, 0xc2, 0x56, 0x34, 0x66, 0x9c, 0x0e, 0xfb, 0xe2, 0xda, 0xf1, 0x9f, 0xae, 0x45, 0xdf, 0x41, - 0x3c, 0x9f, 0xb0, 0x05, 0xbf, 0x62, 0x83, 0xc7, 0xdd, 0xd6, 0x14, 0x69, 0xfc, 0x7f, 0x70, 0x0d, - 0x0d, 0x24, 0x4c, 0x26, 0x2c, 0x63, 0x33, 0x41, 0x86, 0x89, 0x12, 0x77, 0x86, 0x89, 0xc1, 0x9c, - 0x11, 0xd6, 0x08, 0xf7, 0x99, 0xd8, 0x59, 0x96, 0x25, 0xcb, 0x05, 0xd9, 0x97, 0x16, 0xe9, 0xec, - 0x4b, 0x0f, 0x45, 0xea, 0xb3, 0xcf, 0xc4, 0x28, 0xcb, 0xc8, 0xfa, 0x28, 0x71, 0x67, 0x7d, 0x0c, - 0xa6, 0x3d, 0xcc, 0xa2, 0x5f, 0x76, 0x5a, 0x4c, 0x8c, 0xf3, 0x73, 0x3e, 0xa0, 0xdb, 0x42, 0xca, - 0x8d, 0x8f, 0x8d, 0x4e, 0x0e, 0xa9, 0xc6, 0xf3, 0xd7, 0x05, 0x2f, 0xe9, 0x6e, 0x51, 0xe2, 0xce, - 0x6a, 0x18, 0x4c, 0x7b, 0xf8, 0xfd, 0xe8, 0x2d, 0x3d, 0x4b, 0x36, 0xeb, 0xd9, 0x5d, 0x74, 0x0a, - 0x85, 0x0b, 0xda, 0xbd, 0x0e, 0xaa, 0x65, 0xfe, 0x30, 0x9d, 0x97, 0xf5, 0xec, 0x83, 0x9b, 0xd7, - 0xd2, 0x0e, 0xf3, 0x96, 0xd2, 0xe6, 0x79, 0xf4, 0xab, 0xbe, 0xf9, 0x9d, 0x38, 0x9f, 0xb1, 0x6c, - 0xf0, 0x30, 0xa4, 0xae, 0x18, 0xe3, 0x6a, 0xb3, 0x17, 0x6b, 0x27, 0x3b, 0x4d, 0xe8, 0xc9, 0xf4, - 0x0e, 0xaa, 0x0d, 0xa6, 0xd2, 0xbb, 0x61, 0xa8, 0x65, 0x7b, 0x97, 0x65, 0x8c, 0xb4, 0xad, 0x84, - 0x1d, 0xb6, 0x0d, 0xa4, 0x6d, 0x97, 0xd1, 0xaf, 0x99, 0x6e, 0xae, 0xf3, 0x02, 0x29, 0xaf, 0x17, - 0x9d, 0x4d, 0xa2, 0x1f, 0x5d, 0xc8, 0xf8, 0x7a, 0xd4, 0x0f, 0x6e, 0xd5, 0x47, 0xcf, 0x28, 0x78, - 0x7d, 0xc0, 0x7c, 0x72, 0x37, 0x0c, 0x69, 0xdb, 0x7f, 0xb3, 0x16, 0x7d, 0x4f, 0xcb, 0x9e, 0xe7, - 0xf1, 0x59, 0xc6, 0xe4, 0x12, 0x7f, 0xc4, 0xc4, 0x2b, 0x5e, 0x5e, 0x4e, 0x56, 0xf9, 0x8c, 0x48, - 0x67, 0x70, 0xb8, 0x23, 0x9d, 0x21, 0x95, 0x74, 0x61, 0xfe, 0x28, 0x7a, 0xb7, 0x09, 0x8a, 0x8b, - 0x38, 0x9f, 0xb3, 0x1f, 0x56, 0x3c, 0x1f, 0x15, 0xe9, 0x28, 0x49, 0xca, 0xc1, 0x10, 0xef, 0x7a, - 0xc8, 0x99, 0x12, 0x6c, 0xf7, 0xe6, 0x9d, 0xf4, 0x59, 0xb7, 0xb2, 0xe0, 0x05, 0x4c, 0x9f, 0x9b, - 0xe6, 0x13, 0xbc, 0xa0, 0xd2, 0x67, 0x1f, 0x69, 0x59, 0x3d, 0xac, 0xd7, 0x20, 0xdc, 0xea, 0xa1, - 0xbb, 0xe8, 0xdc, 0x0e, 0x21, 0x76, 0x0d, 0x68, 0x1a, 0x8a, 0xe7, 0xe7, 0xe9, 0xfc, 0xb4, 0x48, - 0xea, 0x31, 0xf4, 0x00, 0xaf, 0xb3, 0x83, 0x10, 0x6b, 0x00, 0x81, 0x6a, 0x6f, 0x7f, 0x67, 0xb3, - 0x4c, 0x3d, 0x2f, 0xed, 0x95, 0x7c, 0x71, 0xc0, 0xe6, 0xf1, 0x6c, 0xa5, 0x27, 0xd3, 0x0f, 0x43, - 0xb3, 0x18, 0xa4, 0x4d, 0x21, 0x3e, 0xba, 0xa6, 0x96, 0x2e, 0xcf, 0xbf, 0xaf, 0x45, 0x77, 0xbd, - 0x38, 0xd1, 0xc1, 0xa4, 0x4a, 0x3f, 0xca, 0x93, 0x13, 0x56, 0x89, 0xb8, 0x14, 0x83, 0xef, 0x07, - 0x62, 0x80, 0xd0, 0x31, 0x65, 0xfb, 0xc1, 0x37, 0xd2, 0xb5, 0xbd, 0x3e, 0xa9, 0x57, 0x09, 0x3d, - 0xff, 0xf8, 0xbd, 0x2e, 0x25, 0x70, 0xf6, 0xb9, 0x1d, 0x42, 0x6c, 0xaf, 0x4b, 0xc1, 0x38, 0xbf, - 0x4a, 0x05, 0xdb, 0x67, 0x39, 0x2b, 0xdb, 0xbd, 0xae, 0x54, 0x7d, 0x84, 0xe8, 0x75, 0x02, 0xb5, - 0x33, 0x9d, 0xe7, 0xcd, 0x64, 0x1a, 0x9b, 0x01, 0x23, 0xad, 0x5c, 0xe3, 0x51, 0x3f, 0x98, 0xa8, - 0xa1, 0xd8, 0xaf, 0x8d, 0x04, 0x6b, 0xa8, 0x90, 0x5e, 0x35, 0x34, 0xa8, 0xdd, 0x98, 0x3b, 0xde, - 0x4e, 0xd8, 0x15, 0xbf, 0x84, 0x1b, 0x73, 0xd7, 0x80, 0x02, 0x88, 0x8d, 0x39, 0x0a, 0xda, 0xe4, - 0xc3, 0xf1, 0xf3, 0x22, 0x65, 0xaf, 0x40, 0xf2, 0xe1, 0x2a, 0xd7, 0x62, 0x22, 0xf9, 0x40, 0x30, - 0xed, 0xe1, 0x28, 0xfa, 0x05, 0x29, 0xfc, 0x21, 0x4f, 0xf3, 0xc1, 0x4d, 0x44, 0xa9, 0x16, 0x18, - 0xab, 0xb7, 0x68, 0x00, 0x94, 0xb8, 0xfe, 0xab, 0xce, 0x04, 0xee, 0x11, 0x4a, 0x20, 0x09, 0x58, - 0xef, 0xc2, 0x6c, 0xd6, 0x27, 0x85, 0xf5, 0x6c, 0x39, 0xb9, 0x88, 0xcb, 0x34, 0x9f, 0x0f, 0x30, - 0x5d, 0x47, 0x4e, 0x64, 0x7d, 0x18, 0x07, 0xc2, 0x49, 0x2b, 0x8e, 0x8a, 0xa2, 0xac, 0x27, 0x61, - 0x2c, 0x9c, 0x7c, 0x24, 0x18, 0x4e, 0x2d, 0x14, 0xf7, 0xb6, 0xcb, 0x66, 0x59, 0x9a, 0x07, 0xbd, - 0x69, 0xa4, 0x8f, 0x37, 0x8b, 0x82, 0xe0, 0x3d, 0x60, 0xf1, 0x15, 0x6b, 0x6a, 0x86, 0xb5, 0x8c, - 0x0b, 0x04, 0x83, 0x17, 0x80, 0x76, 0x8b, 0x2d, 0xc5, 0x87, 0xf1, 0x25, 0xab, 0x1b, 0x98, 0xd5, - 0x4b, 0xf8, 0x00, 0xd3, 0xf7, 0x08, 0x62, 0x8b, 0x8d, 0x93, 0xda, 0xd5, 0x32, 0x7a, 0x47, 0xca, - 0x8f, 0xe3, 0x52, 0xa4, 0xb3, 0xb4, 0x88, 0xf3, 0x66, 0xeb, 0x86, 0xcd, 0x22, 0x2d, 0xca, 0xb8, - 0xdc, 0xea, 0x49, 0x6b, 0xb7, 0xff, 0xb2, 0x16, 0xbd, 0x0f, 0xfd, 0x1e, 0xb3, 0x72, 0x91, 0xca, - 0x13, 0x80, 0x4a, 0x4d, 0xf9, 0x83, 0x4f, 0xc2, 0x46, 0x5b, 0x0a, 0xa6, 0x34, 0x9f, 0x5e, 0x5f, - 0xd1, 0xe6, 0x7d, 0x13, 0xbd, 0x2b, 0xfa, 0xa2, 0x4c, 0x5a, 0x27, 0x64, 0x93, 0x66, 0xab, 0x23, - 0x85, 0x44, 0xde, 0xd7, 0x82, 0xc0, 0x08, 0x3f, 0xcd, 0xab, 0xc6, 0x3a, 0x36, 0xc2, 0xad, 0x38, - 0x38, 0xc2, 0x3d, 0xcc, 0x8e, 0xf0, 0xe3, 0xe5, 0x59, 0x96, 0x56, 0x17, 0x69, 0x3e, 0xd7, 0x49, - 0xbe, 0xaf, 0x6b, 0xc5, 0x30, 0xcf, 0xdf, 0xe8, 0xe4, 0x30, 0x27, 0x3a, 0x58, 0x48, 0x27, 0x20, - 0x4c, 0x36, 0x3a, 0x39, 0xbb, 0xf7, 0xb2, 0xd2, 0x7a, 0xd3, 0x0f, 0xf6, 0x5e, 0x8e, 0x6a, 0x2d, - 0x25, 0xf6, 0x5e, 0x6d, 0xca, 0xee, 0xbd, 0xdc, 0x3a, 0x54, 0x3c, 0xbb, 0x62, 0xa7, 0x65, 0x0a, - 0xf6, 0x5e, 0x5e, 0xf9, 0x1a, 0x86, 0xd8, 0x7b, 0x51, 0xac, 0x9d, 0xa8, 0x2c, 0xb1, 0xcf, 0xc4, - 0x44, 0xc4, 0x62, 0x59, 0x81, 0x89, 0xca, 0xb1, 0x61, 0x10, 0x62, 0xa2, 0x22, 0x50, 0xed, 0xed, - 0x77, 0xa3, 0x48, 0x9d, 0x97, 0xc8, 0x33, 0x2d, 0x7f, 0xed, 0xd1, 0x07, 0x29, 0xde, 0x81, 0xd6, - 0xfb, 0x01, 0xc2, 0xa6, 0x57, 0xea, 0xef, 0xf2, 0xa8, 0x6e, 0x80, 0x6a, 0x48, 0x11, 0x91, 0x5e, - 0x01, 0x04, 0x16, 0x74, 0x72, 0xc1, 0x5f, 0xe1, 0x05, 0xad, 0x25, 0xe1, 0x82, 0x6a, 0xc2, 0x1e, - 0x9e, 0xeb, 0x82, 0x62, 0x87, 0xe7, 0x4d, 0x31, 0x42, 0x87, 0xe7, 0x90, 0xb1, 0x31, 0xe3, 0x1a, - 0x7e, 0xc6, 0xf9, 0xe5, 0x22, 0x2e, 0x2f, 0x41, 0xcc, 0x78, 0xca, 0x0d, 0x43, 0xc4, 0x0c, 0xc5, - 0xda, 0x98, 0x71, 0x1d, 0xd6, 0xc9, 0xf9, 0x69, 0x99, 0x81, 0x98, 0xf1, 0x6c, 0x68, 0x84, 0x88, - 0x19, 0x02, 0xb5, 0xb3, 0x93, 0xeb, 0x6d, 0xc2, 0xe0, 0x71, 0x8d, 0xa7, 0x3e, 0x61, 0xd4, 0x71, - 0x0d, 0x82, 0xc1, 0x10, 0xda, 0x2f, 0xe3, 0xe2, 0x02, 0x0f, 0x21, 0x29, 0x0a, 0x87, 0x50, 0x83, - 0xc0, 0xfe, 0x9e, 0xb0, 0xb8, 0x9c, 0x5d, 0xe0, 0xfd, 0xad, 0x64, 0xe1, 0xfe, 0x36, 0x0c, 0xec, - 0x6f, 0x25, 0x78, 0x99, 0x8a, 0x8b, 0x43, 0x26, 0x62, 0xbc, 0xbf, 0x7d, 0x26, 0xdc, 0xdf, 0x2d, - 0xd6, 0x66, 0xff, 0xae, 0xc3, 0xc9, 0xf2, 0xac, 0x9a, 0x95, 0xe9, 0x19, 0x1b, 0x04, 0xac, 0x18, - 0x88, 0xc8, 0xfe, 0x49, 0x58, 0xfb, 0xfc, 0xc9, 0x5a, 0x74, 0xb3, 0xe9, 0x76, 0x5e, 0x55, 0x7a, - 0xed, 0xf3, 0xdd, 0x7f, 0x84, 0xf7, 0x2f, 0x81, 0x13, 0x8f, 0x33, 0x7a, 0xa8, 0x39, 0xb9, 0x01, - 0x5e, 0xa4, 0xd3, 0xbc, 0x32, 0x85, 0xfa, 0xa4, 0x8f, 0x75, 0x47, 0x81, 0xc8, 0x0d, 0x7a, 0x29, - 0xda, 0xb4, 0x4c, 0xf7, 0x4f, 0x23, 0x1b, 0x27, 0x15, 0x48, 0xcb, 0x9a, 0xf6, 0x76, 0x08, 0x22, - 0x2d, 0xc3, 0x49, 0x18, 0x0a, 0xfb, 0x25, 0x5f, 0x16, 0x55, 0x47, 0x28, 0x00, 0x28, 0x1c, 0x0a, - 0x6d, 0x58, 0xfb, 0x7c, 0x1d, 0xfd, 0xba, 0x1b, 0x7e, 0x6e, 0x63, 0x6f, 0xd1, 0x31, 0x85, 0x35, - 0xf1, 0xb0, 0x2f, 0x6e, 0x33, 0x8a, 0xc6, 0xb3, 0xd8, 0x65, 0x22, 0x4e, 0xb3, 0x6a, 0xb0, 0x8e, - 0xdb, 0x68, 0xe4, 0x44, 0x46, 0x81, 0x71, 0x70, 0x7e, 0xdb, 0x5d, 0x16, 0x59, 0x3a, 0x6b, 0x3f, - 0x4c, 0xd2, 0xba, 0x46, 0x1c, 0x9e, 0xdf, 0x5c, 0x0c, 0xce, 0xd7, 0x75, 0xea, 0x27, 0xff, 0x33, - 0x5d, 0x15, 0x0c, 0x9f, 0xaf, 0x3d, 0x24, 0x3c, 0x5f, 0x43, 0x14, 0xd6, 0x67, 0xc2, 0xc4, 0x41, - 0xbc, 0xe2, 0x4b, 0x62, 0xbe, 0x36, 0xe2, 0x70, 0x7d, 0x5c, 0xcc, 0xee, 0x0d, 0x8c, 0x87, 0x71, - 0x2e, 0x58, 0x99, 0xc7, 0xd9, 0x5e, 0x16, 0xcf, 0xab, 0x01, 0x31, 0xc7, 0xf8, 0x14, 0xb1, 0x37, - 0xa0, 0x69, 0xa4, 0x19, 0xc7, 0xd5, 0x5e, 0x7c, 0xc5, 0xcb, 0x54, 0xd0, 0xcd, 0x68, 0x91, 0xce, - 0x66, 0xf4, 0x50, 0xd4, 0xdb, 0xa8, 0x9c, 0x5d, 0xa4, 0x57, 0x2c, 0x09, 0x78, 0x6b, 0x90, 0x1e, - 0xde, 0x1c, 0x14, 0xe9, 0xb4, 0x09, 0x5f, 0x96, 0x33, 0x46, 0x76, 0x9a, 0x12, 0x77, 0x76, 0x9a, - 0xc1, 0xb4, 0x87, 0xbf, 0x58, 0x8b, 0x7e, 0x43, 0x49, 0xdd, 0x27, 0x3c, 0xbb, 0x71, 0x75, 0x71, - 0xc6, 0xe3, 0x32, 0x19, 0x7c, 0x80, 0xd9, 0x41, 0x51, 0xe3, 0xfa, 0xc9, 0x75, 0x54, 0x60, 0xb3, - 0xd6, 0x79, 0xb7, 0x1d, 0x71, 0x68, 0xb3, 0x7a, 0x48, 0xb8, 0x59, 0x21, 0x0a, 0x27, 0x10, 0x29, - 0x57, 0x07, 0x80, 0xeb, 0xa4, 0xbe, 0x7f, 0x0a, 0xb8, 0xd1, 0xc9, 0xc1, 0xf9, 0xb1, 0x16, 0xfa, - 0xd1, 0xb2, 0x45, 0xd9, 0xc0, 0x23, 0x66, 0xd8, 0x17, 0x27, 0x3d, 0x9b, 0x51, 0x11, 0xf6, 0xdc, - 0x1a, 0x19, 0xc3, 0xbe, 0x38, 0xe1, 0xd9, 0x99, 0xd6, 0x42, 0x9e, 0x91, 0xa9, 0x6d, 0xd8, 0x17, - 0x87, 0xd9, 0x97, 0x66, 0x9a, 0x75, 0xe1, 0x61, 0xc0, 0x0e, 0x5c, 0x1b, 0x36, 0x7b, 0xb1, 0xda, - 0xe1, 0x5f, 0xad, 0x45, 0xdf, 0xb5, 0x1e, 0x0f, 0x79, 0x92, 0x9e, 0xaf, 0x14, 0xf4, 0x22, 0xce, - 0x96, 0xac, 0x1a, 0x3c, 0xa1, 0xac, 0xb5, 0x59, 0x53, 0x82, 0xa7, 0xd7, 0xd2, 0x81, 0x63, 0x67, - 0x54, 0x14, 0xd9, 0x6a, 0xca, 0x16, 0x45, 0x46, 0x8e, 0x1d, 0x0f, 0x09, 0x8f, 0x1d, 0x88, 0xc2, - 0xac, 0x7c, 0xca, 0xeb, 0x9c, 0x1f, 0xcd, 0xca, 0xa5, 0x28, 0x9c, 0x95, 0x37, 0x08, 0xcc, 0x95, - 0xa6, 0x7c, 0x87, 0x67, 0x19, 0x9b, 0x89, 0xf6, 0x2d, 0x11, 0xa3, 0x69, 0x89, 0x70, 0xae, 0x04, - 0x48, 0x7b, 0x2a, 0xd7, 0xec, 0x21, 0xe3, 0x92, 0x3d, 0x5b, 0x1d, 0xa4, 0xf9, 0xe5, 0x00, 0x4f, - 0x0b, 0x2c, 0x40, 0x9c, 0xca, 0xa1, 0x20, 0xdc, 0xab, 0x9e, 0xe6, 0x09, 0xc7, 0xf7, 0xaa, 0xb5, - 0x24, 0xbc, 0x57, 0xd5, 0x04, 0x34, 0x79, 0xc2, 0x28, 0x93, 0xb5, 0x24, 0x6c, 0x52, 0x13, 0xd8, - 0x54, 0xa8, 0x9f, 0x14, 0x91, 0x53, 0x21, 0x78, 0x36, 0xb4, 0xd1, 0xc9, 0xc1, 0x3d, 0x97, 0x76, - 0x80, 0x46, 0x04, 0x30, 0x7e, 0x27, 0xc8, 0xc0, 0xd0, 0x6f, 0x76, 0xc3, 0x7b, 0x4c, 0xcc, 0x2e, - 0xf0, 0xd0, 0xf7, 0x90, 0x70, 0xe8, 0x43, 0x14, 0xb6, 0xd5, 0x94, 0x9b, 0xdd, 0xfc, 0x3a, 0x1e, - 0x78, 0xad, 0x9d, 0xfc, 0x46, 0x27, 0x07, 0xdb, 0x6a, 0xbc, 0xa0, 0xdb, 0x4a, 0xc9, 0xc2, 0x6d, - 0x65, 0x18, 0x58, 0x7a, 0x25, 0x90, 0x87, 0x64, 0xeb, 0xb4, 0xa2, 0x77, 0x4c, 0xb6, 0xd1, 0xc9, - 0x69, 0x27, 0xff, 0x64, 0xf6, 0x87, 0x4a, 0x7a, 0xc4, 0xeb, 0xc1, 0xf7, 0x22, 0xce, 0xd2, 0x24, - 0x16, 0x6c, 0xca, 0x2f, 0x59, 0x8e, 0x6f, 0xc5, 0x74, 0x69, 0x15, 0x3f, 0xf4, 0x14, 0xc2, 0x5b, - 0xb1, 0xb0, 0x22, 0x8c, 0x13, 0x45, 0x9f, 0x56, 0x6c, 0x27, 0xae, 0x88, 0x29, 0xd2, 0x43, 0xc2, - 0x71, 0x02, 0x51, 0x98, 0x08, 0x2b, 0xf9, 0xf3, 0xd7, 0x05, 0x2b, 0x53, 0x96, 0xcf, 0x18, 0x9e, - 0x08, 0x43, 0x2a, 0x9c, 0x08, 0x23, 0x34, 0xdc, 0x04, 0xee, 0xc6, 0x82, 0x3d, 0x5b, 0x4d, 0xd3, - 0x05, 0xab, 0x44, 0xbc, 0x28, 0xf0, 0x4d, 0x20, 0x80, 0xc2, 0x9b, 0xc0, 0x36, 0xdc, 0x3a, 0x73, - 0x32, 0x33, 0x6d, 0xfb, 0xd6, 0x1a, 0x24, 0x02, 0xb7, 0xd6, 0x08, 0x14, 0x36, 0xac, 0x05, 0xd0, - 0xa7, 0x0f, 0x2d, 0x2b, 0xc1, 0xa7, 0x0f, 0x34, 0xdd, 0x3a, 0xc9, 0x33, 0xcc, 0xa4, 0x1e, 0x9a, - 0x1d, 0x45, 0x9f, 0xb8, 0x43, 0x74, 0xb3, 0x17, 0x8b, 0x1f, 0x1d, 0x9e, 0xb0, 0x2c, 0x96, 0xeb, - 0x61, 0xe0, 0x7c, 0xae, 0x61, 0xfa, 0x1c, 0x1d, 0x3a, 0xac, 0x76, 0xf8, 0x67, 0x6b, 0xd1, 0x7b, - 0x98, 0xc7, 0x2f, 0x0a, 0xe9, 0xf7, 0x71, 0xb7, 0x2d, 0x45, 0x12, 0xd7, 0xf2, 0xc2, 0x1a, 0xf6, - 0x66, 0x49, 0x23, 0xb2, 0xb7, 0xf6, 0x74, 0x01, 0xfc, 0x6c, 0xd0, 0x94, 0x1f, 0x72, 0xc4, 0xcd, - 0x92, 0x10, 0x6f, 0x37, 0x5a, 0x7e, 0xb9, 0x2a, 0xb0, 0xd1, 0x32, 0x36, 0xb4, 0x98, 0xd8, 0x68, - 0x21, 0x98, 0x1d, 0x9d, 0x6e, 0xf5, 0x5e, 0xa6, 0xe2, 0x42, 0x26, 0x72, 0x60, 0x74, 0x7a, 0x65, - 0x35, 0x10, 0x31, 0x3a, 0x49, 0x18, 0xa6, 0x3a, 0x0d, 0x58, 0x8f, 0x4d, 0x6c, 0x2e, 0x37, 0x86, - 0xdc, 0x91, 0x79, 0xbf, 0x1b, 0x84, 0xf1, 0xda, 0x88, 0xf5, 0x9e, 0xea, 0x61, 0xc8, 0x02, 0xd8, - 0x57, 0x6d, 0xf6, 0x62, 0xb5, 0xc3, 0x3f, 0x89, 0xbe, 0xd3, 0xaa, 0xd8, 0x1e, 0x8b, 0xc5, 0xb2, - 0x64, 0xc9, 0x60, 0xbb, 0xa3, 0xdc, 0x0d, 0x68, 0x5c, 0x3f, 0xee, 0xaf, 0xd0, 0x4a, 0xfe, 0x1b, - 0x4e, 0x85, 0x95, 0x29, 0xc3, 0x93, 0x90, 0x49, 0x9f, 0x0d, 0x26, 0xff, 0xb4, 0x4e, 0x6b, 0xff, - 0xee, 0x46, 0xd7, 0xe8, 0x2a, 0x4e, 0x33, 0xf9, 0x14, 0xf8, 0x83, 0x90, 0x51, 0x0f, 0x0d, 0xee, - 0xdf, 0x49, 0x95, 0xd6, 0xcc, 0x2c, 0xc7, 0xb8, 0xb3, 0xef, 0x7b, 0x44, 0xcf, 0x04, 0xc8, 0xb6, - 0x6f, 0xab, 0x27, 0xad, 0xdd, 0x8a, 0x66, 0xc9, 0xab, 0xff, 0xec, 0x06, 0x39, 0xe6, 0x55, 0xab, - 0x22, 0x91, 0xbe, 0xd5, 0x93, 0xd6, 0x5e, 0xff, 0x38, 0x7a, 0xb7, 0xed, 0x55, 0x2f, 0x44, 0xdb, - 0x9d, 0xa6, 0xc0, 0x5a, 0xf4, 0xb8, 0xbf, 0x82, 0x76, 0xff, 0xaf, 0xe6, 0xc0, 0x5b, 0xf9, 0x9f, - 0xf1, 0xc5, 0x82, 0xe5, 0x09, 0x4b, 0x1a, 0x8d, 0xaa, 0xde, 0x98, 0x7d, 0x4a, 0xdb, 0x35, 0x0a, - 0x43, 0x57, 0xc3, 0x94, 0xe8, 0x37, 0xbf, 0x81, 0xa6, 0x2e, 0xda, 0x7f, 0xae, 0x45, 0x0f, 0xd0, - 0xa2, 0x35, 0x81, 0xeb, 0x15, 0xf1, 0x77, 0xfa, 0x38, 0xc2, 0x34, 0x4d, 0x51, 0x47, 0x3f, 0x83, - 0x05, 0x5d, 0xe4, 0x7f, 0x5b, 0x8b, 0x6e, 0x5b, 0xc5, 0x3a, 0xbc, 0x77, 0x78, 0x7e, 0x9e, 0xa5, - 0x33, 0x21, 0x1f, 0xf5, 0x6a, 0x15, 0xba, 0x39, 0x29, 0x8d, 0xee, 0xe6, 0x0c, 0x68, 0xea, 0xb2, - 0xfd, 0xe3, 0x5a, 0x74, 0xcb, 0x6d, 0x4e, 0xf9, 0x9c, 0x58, 0x1d, 0xbb, 0x36, 0x8a, 0xd5, 0xe0, - 0x63, 0xba, 0x0d, 0x30, 0xde, 0x94, 0xeb, 0x93, 0x6b, 0xeb, 0xd9, 0xbd, 0xfa, 0x67, 0x69, 0x25, - 0x78, 0xb9, 0x9a, 0x5c, 0xf0, 0x57, 0xcd, 0xdb, 0x58, 0xfe, 0x6a, 0xa1, 0x81, 0xa1, 0x43, 0x10, - 0x7b, 0x75, 0x9c, 0x6c, 0xb9, 0xb2, 0x6f, 0x6d, 0x55, 0x84, 0x2b, 0x87, 0xe8, 0x70, 0xe5, 0x93, - 0x76, 0xad, 0x6c, 0x6a, 0x65, 0x5f, 0x31, 0xdb, 0xc0, 0x8b, 0xda, 0x7e, 0xcd, 0xec, 0x7e, 0x37, - 0x68, 0x33, 0x66, 0x2d, 0xde, 0x4d, 0xcf, 0xcf, 0x4d, 0x9d, 0xf0, 0x92, 0xba, 0x08, 0x91, 0x31, - 0x13, 0xa8, 0xdd, 0xf4, 0xed, 0xa5, 0x19, 0x93, 0x8f, 0xaa, 0xbe, 0x38, 0x3f, 0xcf, 0x78, 0x9c, - 0x80, 0x4d, 0x5f, 0x2d, 0x1e, 0xba, 0x72, 0x62, 0xd3, 0x87, 0x71, 0xf6, 0x12, 0x4c, 0x2d, 0xad, - 0xc7, 0x5c, 0x3e, 0x4b, 0x33, 0x78, 0x99, 0x5b, 0x6a, 0x1a, 0x21, 0x71, 0x09, 0xa6, 0x05, 0xd9, - 0xc4, 0xac, 0x16, 0xd5, 0x63, 0xa5, 0x29, 0xff, 0xbd, 0xb6, 0xa2, 0x23, 0x26, 0x12, 0x33, 0x04, - 0xb3, 0x87, 0x2a, 0xb5, 0xf0, 0xb4, 0x90, 0xc6, 0x6f, 0xb5, 0xb5, 0x94, 0x84, 0x38, 0x54, 0xf1, - 0x09, 0xbb, 0x87, 0xaf, 0xff, 0xbe, 0xcb, 0x5f, 0xe5, 0xd2, 0xe8, 0xed, 0xb6, 0x4a, 0x23, 0x23, - 0xf6, 0xf0, 0x90, 0xd1, 0x86, 0x3f, 0x8f, 0x7e, 0x5e, 0x1a, 0x2e, 0x79, 0x31, 0xb8, 0x81, 0x28, - 0x94, 0xce, 0xd5, 0xe7, 0x9b, 0xa4, 0xdc, 0xde, 0x99, 0x31, 0xb1, 0x71, 0x5a, 0xc5, 0x73, 0xf8, - 0xbe, 0x82, 0xed, 0x71, 0x29, 0x25, 0xee, 0xcc, 0xb4, 0x29, 0x3f, 0x2a, 0x8e, 0x78, 0xa2, 0xad, - 0x23, 0x35, 0x34, 0xc2, 0x50, 0x54, 0xb8, 0x90, 0x4d, 0xa6, 0x8f, 0xe2, 0xab, 0x74, 0x6e, 0x12, - 0x1e, 0x35, 0x7d, 0x55, 0x20, 0x99, 0xb6, 0xcc, 0xd0, 0x81, 0x88, 0x64, 0x9a, 0x84, 0x9d, 0xc9, - 0xd8, 0x32, 0xfb, 0xcd, 0x31, 0xf4, 0x38, 0x3f, 0xe7, 0x75, 0xea, 0x7d, 0x90, 0xe6, 0x97, 0x70, - 0x32, 0x76, 0x4c, 0xe2, 0x3c, 0x31, 0x19, 0xf7, 0xd1, 0xb3, 0xbb, 0xa6, 0xe6, 0x8c, 0xd6, 0x5e, - 0xd4, 0x50, 0x1a, 0x60, 0xd7, 0x64, 0x8e, 0x72, 0x21, 0x47, 0xec, 0x9a, 0x42, 0xbc, 0xed, 0x62, - 0xe3, 0x3c, 0xe3, 0x39, 0xec, 0x62, 0x6b, 0xa1, 0x16, 0x12, 0x5d, 0xdc, 0x82, 0xec, 0x7c, 0xdc, - 0x88, 0xd4, 0xa9, 0xdf, 0x28, 0xcb, 0xc0, 0x7c, 0x6c, 0x54, 0x0d, 0x40, 0xcc, 0xc7, 0x28, 0xa8, - 0xfd, 0x9c, 0x44, 0xdf, 0xaa, 0x9b, 0xf4, 0xb8, 0x64, 0x57, 0x29, 0x83, 0x77, 0x8a, 0x1c, 0x09, - 0x31, 0xfe, 0x7d, 0xc2, 0x8e, 0xac, 0xd3, 0xbc, 0x2a, 0xb2, 0xb8, 0xba, 0xd0, 0xb7, 0x4c, 0xfc, - 0x3a, 0x37, 0x42, 0x78, 0xcf, 0xe4, 0x5e, 0x07, 0x65, 0x27, 0xf5, 0x46, 0x66, 0xa6, 0x98, 0x75, - 0x5c, 0xb5, 0x35, 0xcd, 0x6c, 0x74, 0x72, 0xf6, 0x51, 0xce, 0x7e, 0x9c, 0x65, 0xac, 0x5c, 0x35, - 0xb2, 0xc3, 0x38, 0x4f, 0xcf, 0x59, 0x25, 0xc0, 0xa3, 0x1c, 0x4d, 0x0d, 0x21, 0x46, 0x3c, 0xca, - 0x09, 0xe0, 0x76, 0x37, 0x09, 0x3c, 0x8f, 0xf3, 0x84, 0xbd, 0x06, 0xbb, 0x49, 0x68, 0x47, 0x32, - 0xc4, 0x6e, 0x92, 0x62, 0xed, 0x23, 0x8d, 0x67, 0x19, 0x9f, 0x5d, 0xea, 0x25, 0xc0, 0xef, 0x60, - 0x29, 0x81, 0x6b, 0xc0, 0xed, 0x10, 0x62, 0x17, 0x01, 0x29, 0x38, 0x61, 0x45, 0x16, 0xcf, 0xe0, - 0xc5, 0x32, 0xa5, 0xa3, 0x65, 0xc4, 0x22, 0x00, 0x19, 0x50, 0x5c, 0x7d, 0x61, 0x0d, 0x2b, 0x2e, - 0xb8, 0xaf, 0x76, 0x3b, 0x84, 0xd8, 0x65, 0x50, 0x0a, 0x26, 0x45, 0x96, 0x0a, 0x30, 0x0c, 0x94, - 0x86, 0x94, 0x10, 0xc3, 0xc0, 0x27, 0x80, 0xc9, 0x43, 0x56, 0xce, 0x19, 0x6a, 0x52, 0x4a, 0x82, - 0x26, 0x1b, 0xc2, 0xde, 0xa2, 0x57, 0x75, 0xe7, 0xc5, 0x0a, 0xdc, 0xa2, 0xd7, 0xd5, 0xe2, 0xc5, - 0x8a, 0xb8, 0x45, 0xef, 0x01, 0xa0, 0x88, 0xc7, 0x71, 0x25, 0xf0, 0x22, 0x4a, 0x49, 0xb0, 0x88, - 0x0d, 0x61, 0xd7, 0x68, 0x55, 0xc4, 0xa5, 0x00, 0x6b, 0xb4, 0x2e, 0x80, 0x73, 0xb5, 0xe2, 0x26, - 0x29, 0xb7, 0x33, 0x89, 0xea, 0x15, 0x26, 0xf6, 0x52, 0x96, 0x25, 0x15, 0x98, 0x49, 0x74, 0xbb, - 0x37, 0x52, 0x62, 0x26, 0x69, 0x53, 0x20, 0x94, 0xf4, 0x73, 0x19, 0xac, 0x76, 0xe0, 0xb1, 0xcc, - 0xed, 0x10, 0x62, 0xe7, 0xa7, 0xa6, 0xd0, 0x3b, 0x71, 0x59, 0xa6, 0xf5, 0xe2, 0xbf, 0x8e, 0x17, - 0xa8, 0x91, 0x13, 0xf3, 0x13, 0xc6, 0x81, 0xe1, 0xd5, 0x4c, 0xdc, 0x58, 0xc1, 0xe0, 0xd4, 0x7d, - 0x27, 0xc8, 0xd8, 0x8c, 0x53, 0x4a, 0x9c, 0xbb, 0x01, 0x58, 0x6b, 0x22, 0x57, 0x03, 0xd6, 0xbb, - 0x30, 0xe7, 0x85, 0x3e, 0xe3, 0xe2, 0x90, 0x5f, 0xb1, 0x29, 0x7f, 0xfe, 0x3a, 0xad, 0xea, 0x4d, - 0xa0, 0x5e, 0xb9, 0x9f, 0x12, 0x96, 0x30, 0x98, 0x78, 0xa1, 0xaf, 0x53, 0xc9, 0x26, 0x10, 0xa0, - 0x2c, 0x47, 0xec, 0x15, 0x9a, 0x40, 0x40, 0x8b, 0x86, 0x23, 0x12, 0x88, 0x10, 0x6f, 0xcf, 0xf1, - 0x8c, 0x73, 0xfd, 0x15, 0x87, 0x29, 0x6f, 0x72, 0x39, 0xca, 0x1a, 0x04, 0x89, 0xa3, 0x94, 0xa0, - 0x82, 0xdd, 0x5f, 0x1a, 0xff, 0x76, 0x88, 0xdd, 0x27, 0xec, 0xb4, 0x87, 0xd9, 0x83, 0x1e, 0x24, - 0xe2, 0xca, 0x5e, 0x70, 0xa1, 0x5c, 0xb5, 0xef, 0xb7, 0x3c, 0xe8, 0x41, 0x3a, 0x67, 0x82, 0x6e, - 0xb5, 0x9e, 0xc5, 0xb3, 0xcb, 0x79, 0xc9, 0x97, 0x79, 0xb2, 0xc3, 0x33, 0x5e, 0x82, 0x33, 0x41, - 0xaf, 0xd4, 0x00, 0x25, 0xce, 0x04, 0x3b, 0x54, 0x6c, 0x06, 0xe7, 0x96, 0x62, 0x94, 0xa5, 0x73, - 0xb8, 0xa3, 0xf6, 0x0c, 0x49, 0x80, 0xc8, 0xe0, 0x50, 0x10, 0x09, 0x22, 0xb5, 0xe3, 0x16, 0xe9, - 0x2c, 0xce, 0x94, 0xbf, 0x6d, 0xda, 0x8c, 0x07, 0x76, 0x06, 0x11, 0xa2, 0x80, 0xd4, 0x73, 0xba, - 0x2c, 0xf3, 0x71, 0x2e, 0x38, 0x59, 0xcf, 0x06, 0xe8, 0xac, 0xa7, 0x03, 0x82, 0x69, 0x75, 0xca, - 0x5e, 0xd7, 0xa5, 0xa9, 0xff, 0xc1, 0xa6, 0xd5, 0xfa, 0xef, 0x43, 0x2d, 0x0f, 0x4d, 0xab, 0x80, - 0x03, 0x95, 0xd1, 0x4e, 0x54, 0xc0, 0x04, 0xb4, 0xfd, 0x30, 0xb9, 0xdf, 0x0d, 0xe2, 0x7e, 0x26, - 0x62, 0x95, 0xb1, 0x90, 0x1f, 0x09, 0xf4, 0xf1, 0xd3, 0x80, 0xf6, 0xb8, 0xc5, 0xab, 0xcf, 0x05, - 0x9b, 0x5d, 0xb6, 0xee, 0xeb, 0xf9, 0x05, 0x55, 0x08, 0x71, 0xdc, 0x42, 0xa0, 0x78, 0x17, 0x8d, - 0x67, 0x3c, 0x0f, 0x75, 0x51, 0x2d, 0xef, 0xd3, 0x45, 0x9a, 0xb3, 0x9b, 0x5f, 0x23, 0xd5, 0x91, - 0xa9, 0xba, 0x69, 0x93, 0xb0, 0xe0, 0x42, 0xc4, 0xe6, 0x97, 0x84, 0x6d, 0x4e, 0x0e, 0x7d, 0x1e, - 0xb6, 0x5f, 0x66, 0x68, 0x59, 0x39, 0xa4, 0x5f, 0x66, 0xa0, 0x58, 0xba, 0x92, 0x2a, 0x46, 0x3a, - 0xac, 0xf8, 0x71, 0xf2, 0xa8, 0x1f, 0x6c, 0xb7, 0x3c, 0x9e, 0xcf, 0x9d, 0x8c, 0xc5, 0xa5, 0xf2, - 0xba, 0x15, 0x30, 0x64, 0x31, 0x62, 0xcb, 0x13, 0xc0, 0xc1, 0x14, 0xe6, 0x79, 0xde, 0xe1, 0xb9, - 0x60, 0xb9, 0xc0, 0xa6, 0x30, 0xdf, 0x98, 0x06, 0x43, 0x53, 0x18, 0xa5, 0x00, 0xe2, 0x56, 0x9e, - 0x07, 0x31, 0x71, 0x14, 0x2f, 0xd0, 0x8c, 0x4d, 0x9d, 0xf5, 0x28, 0x79, 0x28, 0x6e, 0x01, 0xe7, - 0x3c, 0x64, 0x76, 0xbd, 0x4c, 0xe3, 0x72, 0x6e, 0x4e, 0x37, 0x92, 0xc1, 0x63, 0xda, 0x8e, 0x4f, - 0x12, 0x0f, 0x99, 0xc3, 0x1a, 0x60, 0xda, 0x19, 0x2f, 0xe2, 0xb9, 0xa9, 0x29, 0x52, 0x03, 0x29, - 0x6f, 0x55, 0xf5, 0x7e, 0x37, 0x08, 0xfc, 0xbc, 0x48, 0x13, 0xc6, 0x03, 0x7e, 0xa4, 0xbc, 0x8f, - 0x1f, 0x08, 0x82, 0xec, 0xad, 0xae, 0xb7, 0xda, 0xd1, 0x8d, 0xf2, 0x44, 0xef, 0x63, 0x87, 0x44, - 0xf3, 0x00, 0x2e, 0x94, 0xbd, 0x11, 0x3c, 0x18, 0xa3, 0xcd, 0x01, 0x6d, 0x68, 0x8c, 0x9a, 0xf3, - 0xd7, 0x3e, 0x63, 0x14, 0x83, 0xb5, 0xcf, 0x1f, 0xeb, 0x31, 0xba, 0x1b, 0x8b, 0xb8, 0xce, 0xdb, - 0x5f, 0xa4, 0xec, 0x95, 0xde, 0x08, 0x23, 0xf5, 0x6d, 0xa8, 0xa1, 0x7c, 0x17, 0x1b, 0xec, 0x8a, - 0xb7, 0x7b, 0xf3, 0x01, 0xdf, 0x7a, 0x87, 0xd0, 0xe9, 0x1b, 0x6c, 0x15, 0xb6, 0x7b, 0xf3, 0x01, - 0xdf, 0xfa, 0x93, 0x12, 0x9d, 0xbe, 0xc1, 0x77, 0x25, 0xb6, 0x7b, 0xf3, 0xda, 0xf7, 0x9f, 0x37, - 0x03, 0xd7, 0x75, 0x5e, 0xe7, 0x61, 0x33, 0x91, 0x5e, 0x31, 0x2c, 0x9d, 0xf4, 0xed, 0x19, 0x34, - 0x94, 0x4e, 0xd2, 0x2a, 0xce, 0x47, 0xdd, 0xb0, 0x52, 0x1c, 0xf3, 0x2a, 0x95, 0x97, 0x44, 0x9e, - 0xf6, 0x30, 0xda, 0xc0, 0xa1, 0x4d, 0x53, 0x48, 0xc9, 0x3e, 0xee, 0xf6, 0x50, 0x7b, 0x3d, 0xff, - 0x51, 0xc0, 0x5e, 0xfb, 0x96, 0xfe, 0x56, 0x4f, 0xda, 0x3e, 0x78, 0xf6, 0x98, 0xe6, 0x91, 0xe1, - 0x84, 0xa1, 0xab, 0x84, 0x31, 0x65, 0x1e, 0x25, 0xbb, 0xcf, 0x4e, 0x1f, 0xf7, 0x57, 0xe8, 0x70, - 0x3f, 0x4a, 0x92, 0x7e, 0xee, 0xdd, 0x67, 0xee, 0x8f, 0xfb, 0x2b, 0x68, 0xf7, 0x7f, 0xd9, 0x6c, - 0x6b, 0xa0, 0x7f, 0x3d, 0x06, 0x9f, 0xf4, 0xb1, 0x08, 0xc6, 0xe1, 0xd3, 0x6b, 0xe9, 0xe8, 0x82, - 0xfc, 0x6d, 0xb3, 0x7f, 0x6f, 0x50, 0xf9, 0x8e, 0x94, 0x7c, 0xb7, 0x5a, 0x0f, 0xc9, 0x50, 0x54, - 0x59, 0x18, 0x0e, 0xcc, 0x8f, 0xae, 0xa9, 0xe5, 0x7c, 0x61, 0xd0, 0x83, 0xf5, 0xbb, 0xbc, 0x4e, - 0x79, 0x42, 0x96, 0x1d, 0x1a, 0x16, 0xe8, 0xe3, 0xeb, 0xaa, 0x51, 0x43, 0xd5, 0x81, 0xe5, 0x37, - 0x76, 0x9e, 0xf6, 0x34, 0xec, 0x7d, 0x75, 0xe7, 0xc3, 0xeb, 0x29, 0xe9, 0xb2, 0xfc, 0xc7, 0x5a, - 0x74, 0xcf, 0x63, 0xed, 0xe3, 0x0c, 0x70, 0xe8, 0xf2, 0x83, 0x80, 0x7d, 0x4a, 0xc9, 0x14, 0xee, - 0xb7, 0xbe, 0x99, 0xb2, 0xfd, 0x1c, 0x9f, 0xa7, 0xb2, 0x97, 0x66, 0x82, 0x95, 0xed, 0xcf, 0xf1, - 0xf9, 0x76, 0x15, 0x35, 0xa4, 0x3f, 0xc7, 0x17, 0xc0, 0x9d, 0xcf, 0xf1, 0x21, 0x9e, 0xd1, 0xcf, - 0xf1, 0xa1, 0xd6, 0x82, 0x9f, 0xe3, 0x0b, 0x6b, 0x50, 0xab, 0x4b, 0x53, 0x04, 0x75, 0x6c, 0xde, - 0xcb, 0xa2, 0x7f, 0x8a, 0xfe, 0xe4, 0x3a, 0x2a, 0xc4, 0xfa, 0xaa, 0x38, 0x79, 0xcd, 0xb3, 0x47, - 0x9b, 0x7a, 0x57, 0x3d, 0xb7, 0x7b, 0xf3, 0xda, 0xf7, 0x8f, 0xf4, 0xe6, 0xca, 0xac, 0x26, 0xbc, - 0x94, 0x9f, 0x62, 0xdc, 0x0c, 0xad, 0x0e, 0xb5, 0x05, 0xb7, 0xe7, 0x1f, 0xf5, 0x83, 0x89, 0xea, - 0xd6, 0x84, 0xee, 0xf4, 0x61, 0x97, 0x21, 0xd0, 0xe5, 0xdb, 0xbd, 0x79, 0x62, 0x19, 0x51, 0xbe, - 0x55, 0x6f, 0xf7, 0x30, 0xe6, 0xf7, 0xf5, 0xe3, 0xfe, 0x0a, 0xda, 0xfd, 0x95, 0xce, 0x5a, 0x5d, - 0xf7, 0xb2, 0x9f, 0xb7, 0xba, 0x4c, 0x4d, 0xbc, 0x6e, 0x1e, 0xf6, 0xc5, 0x43, 0xf9, 0x8b, 0xbb, - 0x84, 0x76, 0xe5, 0x2f, 0xe8, 0x32, 0xfa, 0xe1, 0xf5, 0x94, 0x74, 0x59, 0xfe, 0x61, 0x2d, 0xba, - 0x49, 0x96, 0x45, 0xc7, 0xc1, 0xc7, 0x7d, 0x2d, 0x83, 0x78, 0xf8, 0xe4, 0xda, 0x7a, 0xba, 0x50, - 0xff, 0xbc, 0x16, 0xdd, 0x0a, 0x14, 0x4a, 0x05, 0xc8, 0x35, 0xac, 0xfb, 0x81, 0xf2, 0xe9, 0xf5, - 0x15, 0xa9, 0xe5, 0xde, 0xc5, 0x27, 0xed, 0x4f, 0xab, 0x05, 0x6c, 0x4f, 0xe8, 0x4f, 0xab, 0x75, - 0x6b, 0xc1, 0x33, 0xa6, 0xf8, 0xac, 0xd9, 0xf3, 0xa1, 0x67, 0x4c, 0xf2, 0x82, 0x66, 0xf0, 0xa3, - 0x2d, 0x18, 0x87, 0x39, 0x79, 0xfe, 0xba, 0x88, 0xf3, 0x84, 0x76, 0xa2, 0xe4, 0xdd, 0x4e, 0x0c, - 0x07, 0xcf, 0xe6, 0x6a, 0xe9, 0x09, 0x6f, 0xf6, 0x71, 0x0f, 0x28, 0x7d, 0x83, 0x04, 0xcf, 0xe6, - 0x5a, 0x28, 0xe1, 0x4d, 0x67, 0x8d, 0x21, 0x6f, 0x20, 0x59, 0x7c, 0xd8, 0x07, 0x05, 0x3b, 0x04, - 0xe3, 0xcd, 0x1c, 0xf9, 0x3f, 0x0a, 0x59, 0x69, 0x1d, 0xfb, 0x6f, 0xf5, 0xa4, 0x09, 0xb7, 0x13, - 0x26, 0x3e, 0x63, 0x71, 0xc2, 0xca, 0xa0, 0x5b, 0x43, 0xf5, 0x72, 0xeb, 0xd2, 0x98, 0xdb, 0x1d, - 0x9e, 0x2d, 0x17, 0xb9, 0xee, 0x4c, 0xd2, 0xad, 0x4b, 0x75, 0xbb, 0x05, 0x34, 0x3c, 0x95, 0xb4, - 0x6e, 0x65, 0x7a, 0xf9, 0x30, 0x6c, 0xc6, 0xcb, 0x2a, 0x37, 0x7b, 0xb1, 0x74, 0x3d, 0x75, 0x18, - 0x75, 0xd4, 0x13, 0x44, 0xd2, 0x56, 0x4f, 0x1a, 0x1e, 0x0f, 0x3a, 0x6e, 0x4d, 0x3c, 0x6d, 0x77, - 0xd8, 0x6a, 0x85, 0xd4, 0xe3, 0xfe, 0x0a, 0xf0, 0x30, 0x56, 0x47, 0xd5, 0x41, 0x5a, 0x89, 0xbd, - 0x34, 0xcb, 0x06, 0x9b, 0x81, 0x30, 0x69, 0xa0, 0xe0, 0x61, 0x2c, 0x02, 0x13, 0x91, 0xdc, 0x1c, - 0x5e, 0xe6, 0x83, 0x2e, 0x3b, 0x92, 0xea, 0x15, 0xc9, 0x2e, 0x0d, 0x0e, 0xd4, 0x9c, 0xa6, 0x36, - 0xb5, 0x1d, 0x86, 0x1b, 0xae, 0x55, 0xe1, 0xed, 0xde, 0x3c, 0x78, 0xda, 0x2f, 0x29, 0xb9, 0xb2, - 0xdc, 0xa5, 0x4c, 0x78, 0x2b, 0xc9, 0xbd, 0x0e, 0x0a, 0x1c, 0x4a, 0xaa, 0x61, 0xf4, 0x32, 0x4d, - 0xe6, 0x4c, 0xa0, 0x0f, 0xaa, 0x5c, 0x20, 0xf8, 0xa0, 0x0a, 0x80, 0xa0, 0xeb, 0xd4, 0xdf, 0xcd, - 0x69, 0xec, 0x38, 0xc1, 0xba, 0x4e, 0x2b, 0x3b, 0x54, 0xa8, 0xeb, 0x50, 0x1a, 0xcc, 0x06, 0xc6, - 0xad, 0xfe, 0xcc, 0xc5, 0xc3, 0x90, 0x19, 0xf0, 0xad, 0x8b, 0xcd, 0x5e, 0x2c, 0x58, 0x51, 0xac, - 0xc3, 0x74, 0x91, 0x0a, 0x6c, 0x45, 0x71, 0x6c, 0xd4, 0x48, 0x68, 0x45, 0x69, 0xa3, 0x54, 0xf5, - 0xea, 0x1c, 0x61, 0x9c, 0x84, 0xab, 0xa7, 0x98, 0x7e, 0xd5, 0x33, 0x6c, 0xeb, 0xb9, 0x6a, 0x6e, - 0x42, 0x46, 0x5c, 0xe8, 0xcd, 0x32, 0x12, 0xdb, 0xf2, 0xf5, 0x67, 0x08, 0x86, 0x66, 0x1d, 0x4a, - 0x01, 0x3e, 0x2f, 0xa8, 0xb9, 0xe6, 0xd1, 0x6f, 0x51, 0xb0, 0xb8, 0x8c, 0xf3, 0x19, 0xba, 0x39, - 0x95, 0x06, 0x5b, 0x64, 0x68, 0x73, 0x4a, 0x6a, 0x80, 0xa7, 0xf6, 0xfe, 0xfb, 0xc5, 0xc8, 0x50, - 0x30, 0x2f, 0xf2, 0xfa, 0xaf, 0x17, 0x3f, 0xe8, 0x41, 0xc2, 0xa7, 0xf6, 0x0d, 0x60, 0xce, 0xdd, - 0x95, 0xd3, 0x0f, 0x02, 0xa6, 0x7c, 0x34, 0xb4, 0x11, 0xa6, 0x55, 0x40, 0x50, 0x3b, 0x67, 0x8b, - 0x9f, 0xb3, 0x15, 0x16, 0xd4, 0xee, 0x21, 0xe1, 0xe7, 0x6c, 0x15, 0x0a, 0xea, 0x36, 0x0a, 0xf2, - 0x4c, 0x77, 0x1f, 0xb4, 0x1e, 0xd0, 0x77, 0xb7, 0x3e, 0x1b, 0x9d, 0x1c, 0x18, 0x39, 0xbb, 0xe9, - 0x95, 0xf7, 0x98, 0x02, 0x29, 0xe8, 0x6e, 0x7a, 0x85, 0x3f, 0xa5, 0xd8, 0xec, 0xc5, 0xc2, 0x1b, - 0x01, 0xb1, 0x60, 0xaf, 0x9b, 0x47, 0xf5, 0x48, 0x71, 0xa5, 0xbc, 0xf5, 0xac, 0xfe, 0x7e, 0x37, - 0x68, 0xef, 0xdf, 0x1e, 0x97, 0x7c, 0xc6, 0xaa, 0x4a, 0x7f, 0x01, 0xd6, 0xbf, 0xe0, 0xa4, 0x65, - 0x43, 0xf0, 0xfd, 0xd7, 0xbb, 0x61, 0xc8, 0xf9, 0x6c, 0xa3, 0x12, 0xd9, 0xaf, 0x49, 0xad, 0xa3, - 0x9a, 0xed, 0x0f, 0x49, 0x6d, 0x74, 0x72, 0x76, 0x78, 0x69, 0xa9, 0xfb, 0xf9, 0xa8, 0xfb, 0xa8, - 0x3a, 0xf6, 0xe5, 0xa8, 0x07, 0x3d, 0x48, 0xed, 0xea, 0xb3, 0xe8, 0xcd, 0x03, 0x3e, 0x9f, 0xb0, - 0x3c, 0x19, 0x7c, 0xcf, 0xbf, 0xc1, 0xcb, 0xe7, 0xc3, 0xfa, 0xcf, 0xc6, 0xe8, 0x0d, 0x4a, 0x6c, - 0xef, 0x20, 0xee, 0xb2, 0xb3, 0xe5, 0x7c, 0x22, 0x62, 0x01, 0xee, 0x20, 0xca, 0xbf, 0x0f, 0x6b, - 0x01, 0x71, 0x07, 0xd1, 0x03, 0x80, 0xbd, 0x69, 0xc9, 0x18, 0x6a, 0xaf, 0x16, 0x04, 0xed, 0x69, - 0xc0, 0x66, 0x11, 0xc6, 0x5e, 0x9d, 0xa8, 0xc3, 0x3b, 0x83, 0x56, 0x47, 0x4a, 0x89, 0x2c, 0xa2, - 0x4d, 0xd9, 0xe0, 0x56, 0xd5, 0x97, 0x5f, 0xf3, 0x59, 0x2e, 0x16, 0x71, 0xb9, 0x02, 0xc1, 0xad, - 0x6b, 0xe9, 0x00, 0x44, 0x70, 0xa3, 0xa0, 0x1d, 0xb5, 0x4d, 0x33, 0xcf, 0x2e, 0xf7, 0x79, 0xc9, - 0x97, 0x22, 0xcd, 0x19, 0xfc, 0xa2, 0x8b, 0x69, 0x50, 0x97, 0x21, 0x46, 0x2d, 0xc5, 0xda, 0x2c, - 0x57, 0x12, 0xea, 0x3a, 0xa3, 0xfc, 0x04, 0x7e, 0x25, 0x78, 0x09, 0x1f, 0x67, 0x2a, 0x2b, 0x10, - 0x22, 0xb2, 0x5c, 0x12, 0x06, 0x7d, 0x7f, 0x9c, 0xe6, 0x73, 0xb4, 0xef, 0x8f, 0xdd, 0xaf, 0x2a, - 0xdf, 0xa2, 0x01, 0x3b, 0xa0, 0x54, 0xa3, 0xa9, 0x01, 0xa0, 0x5f, 0x65, 0x46, 0x1b, 0xdd, 0x25, - 0x88, 0x01, 0x85, 0x93, 0xc0, 0xd5, 0x17, 0x05, 0xcb, 0x59, 0xd2, 0x5c, 0xda, 0xc3, 0x5c, 0x79, - 0x44, 0xd0, 0x15, 0x24, 0xed, 0x5c, 0x24, 0xe5, 0x27, 0xcb, 0xfc, 0xb8, 0xe4, 0xe7, 0x69, 0xc6, - 0x4a, 0x30, 0x17, 0x29, 0x75, 0x47, 0x4e, 0xcc, 0x45, 0x18, 0x67, 0x6f, 0x7f, 0x48, 0xa9, 0xf7, - 0x3b, 0x0e, 0xd3, 0x32, 0x9e, 0xc1, 0xdb, 0x1f, 0xca, 0x46, 0x1b, 0x23, 0x4e, 0x06, 0x03, 0xb8, - 0x93, 0xe8, 0x28, 0xd7, 0xf9, 0x4a, 0xc6, 0x87, 0x7e, 0x95, 0x56, 0x7e, 0x6b, 0xb8, 0x02, 0x89, - 0x8e, 0x36, 0x87, 0x91, 0x44, 0xa2, 0x13, 0xd6, 0xb0, 0x4b, 0x89, 0xe4, 0x8e, 0xf4, 0xad, 0x26, - 0xb0, 0x94, 0x28, 0x1b, 0x8d, 0x90, 0x58, 0x4a, 0x5a, 0x10, 0x98, 0x90, 0x9a, 0x61, 0x30, 0x47, - 0x27, 0x24, 0x23, 0x0d, 0x4e, 0x48, 0x2e, 0x65, 0x27, 0x8a, 0x71, 0x9e, 0x8a, 0x34, 0xce, 0x26, - 0x4c, 0x1c, 0xc7, 0x65, 0xbc, 0x60, 0x82, 0x95, 0x70, 0xa2, 0xd0, 0xc8, 0xd0, 0x63, 0x88, 0x89, - 0x82, 0x62, 0xb5, 0xc3, 0xdf, 0x8e, 0xde, 0xae, 0xd7, 0x7d, 0x96, 0xeb, 0x5f, 0xa0, 0x7a, 0x2e, - 0x7f, 0xba, 0x6e, 0xf0, 0x8e, 0xb1, 0x31, 0x11, 0x25, 0x8b, 0x17, 0x8d, 0xed, 0xb7, 0xcc, 0xdf, - 0x25, 0xf8, 0x78, 0xad, 0x8e, 0xe7, 0x23, 0x2e, 0xd2, 0xf3, 0x7a, 0x9b, 0xad, 0x5f, 0x60, 0x02, - 0xf1, 0xec, 0x8a, 0x87, 0x81, 0x4f, 0xb1, 0x60, 0x9c, 0x9d, 0xa7, 0x5d, 0xe9, 0x09, 0x2b, 0x32, - 0x38, 0x4f, 0x7b, 0xda, 0x12, 0x20, 0xe6, 0x69, 0x14, 0xb4, 0x83, 0xd3, 0x15, 0x4f, 0x59, 0xb8, - 0x32, 0x53, 0xd6, 0xaf, 0x32, 0x53, 0xef, 0x9d, 0x90, 0x2c, 0x7a, 0xfb, 0x90, 0x2d, 0xce, 0x58, - 0x59, 0x5d, 0xa4, 0x05, 0xf5, 0x3d, 0x64, 0x4b, 0x74, 0x7e, 0x0f, 0x99, 0x40, 0xed, 0x4a, 0x60, - 0x81, 0x71, 0x75, 0x14, 0x2f, 0x98, 0xfc, 0xb0, 0x0c, 0x58, 0x09, 0x1c, 0x23, 0x0e, 0x44, 0xac, - 0x04, 0x24, 0xec, 0xbc, 0x5e, 0x66, 0x99, 0x13, 0x36, 0xaf, 0x23, 0xac, 0x3c, 0x8e, 0x57, 0x0b, - 0x96, 0x0b, 0x6d, 0x12, 0x9c, 0xc9, 0x3b, 0x26, 0x71, 0x9e, 0x38, 0x93, 0xef, 0xa3, 0xe7, 0x4c, - 0x4d, 0x5e, 0xc3, 0x1f, 0xf3, 0x52, 0xa8, 0xdf, 0x97, 0x3b, 0x2d, 0x33, 0x30, 0x35, 0xf9, 0x8d, - 0xea, 0x91, 0xc4, 0xd4, 0x14, 0xd6, 0x70, 0x7e, 0x4b, 0xc4, 0x2b, 0xc3, 0x0b, 0x56, 0x9a, 0x38, - 0x79, 0xbe, 0x88, 0xd3, 0x4c, 0x47, 0xc3, 0xf7, 0x03, 0xb6, 0x09, 0x1d, 0xe2, 0xb7, 0x44, 0xfa, - 0xea, 0x3a, 0xbf, 0xbe, 0x12, 0x2e, 0x21, 0x78, 0x44, 0xd0, 0x61, 0x9f, 0x78, 0x44, 0xd0, 0xad, - 0x65, 0x77, 0xee, 0x96, 0x95, 0xdc, 0x4a, 0x12, 0x3b, 0x3c, 0x81, 0xe7, 0x85, 0x8e, 0x4d, 0x00, - 0x12, 0x3b, 0xf7, 0xa0, 0x82, 0x4d, 0x0d, 0x2c, 0xb6, 0x97, 0xe6, 0x71, 0x96, 0xfe, 0x18, 0xa6, - 0xf5, 0x8e, 0x9d, 0x86, 0x20, 0x52, 0x03, 0x9c, 0xc4, 0x5c, 0xed, 0x33, 0x31, 0x4d, 0xeb, 0xa9, - 0xff, 0x7e, 0xa0, 0xdd, 0x24, 0xd1, 0xed, 0xca, 0x21, 0x9d, 0x6f, 0x1f, 0xc3, 0x66, 0x1d, 0x15, - 0xc5, 0xa4, 0x5e, 0x55, 0x4f, 0xd8, 0x8c, 0xa5, 0x85, 0x18, 0x7c, 0x14, 0x6e, 0x2b, 0x80, 0x13, - 0x17, 0x2d, 0x7a, 0xa8, 0x39, 0x8f, 0xef, 0xeb, 0xb9, 0x64, 0xa2, 0x7e, 0x78, 0xf5, 0xb4, 0x62, - 0xa5, 0x4e, 0x34, 0xf6, 0x99, 0x00, 0xa3, 0xd3, 0xe1, 0x86, 0x0e, 0x58, 0x57, 0x94, 0x18, 0x9d, - 0x61, 0x0d, 0x7b, 0xd8, 0xe7, 0x70, 0xfa, 0xdb, 0x01, 0xf2, 0xba, 0xe3, 0x23, 0xd2, 0x98, 0x43, - 0x11, 0x87, 0x7d, 0x34, 0x6d, 0xb3, 0xb5, 0xb6, 0xdb, 0x51, 0xbe, 0x1a, 0xc3, 0x2b, 0x13, 0x88, - 0x25, 0x89, 0x11, 0xd9, 0x5a, 0x00, 0x77, 0x0e, 0xc3, 0x4b, 0x1e, 0x27, 0xb3, 0xb8, 0x12, 0xc7, - 0xf1, 0x2a, 0xe3, 0x71, 0x22, 0xd7, 0x75, 0x78, 0x18, 0xde, 0x30, 0x43, 0x17, 0xa2, 0x0e, 0xc3, - 0x29, 0xd8, 0xcd, 0xce, 0xe4, 0xef, 0xc9, 0xea, 0xab, 0xa4, 0x30, 0x3b, 0x93, 0xe5, 0x85, 0xd7, - 0x48, 0xef, 0x86, 0x21, 0xfb, 0x0a, 0x9c, 0x12, 0xc9, 0x34, 0xe4, 0x16, 0xa6, 0xe3, 0x25, 0x20, - 0xef, 0x07, 0x08, 0xfb, 0x59, 0x16, 0xf5, 0xf7, 0xe6, 0x27, 0xc4, 0x84, 0xfe, 0x42, 0xfc, 0x23, - 0x4c, 0xd7, 0x85, 0xbc, 0x1b, 0x6a, 0x5b, 0x3d, 0x69, 0x9b, 0x66, 0xee, 0x5c, 0xc4, 0x62, 0x94, - 0x24, 0x87, 0xac, 0x42, 0xde, 0x67, 0xaf, 0x85, 0x43, 0x2b, 0x25, 0xd2, 0xcc, 0x36, 0x65, 0x03, - 0xbd, 0x96, 0x3d, 0x4f, 0x52, 0xa1, 0x65, 0xcd, 0x05, 0xed, 0x47, 0x6d, 0x03, 0x6d, 0x8a, 0xa8, - 0x15, 0x4d, 0xdb, 0xb9, 0xbc, 0x66, 0xa6, 0x7c, 0x3e, 0xcf, 0x98, 0x86, 0x4e, 0x58, 0xac, 0x3e, - 0x90, 0xb9, 0xdd, 0xb6, 0x85, 0x82, 0xc4, 0x5c, 0x1e, 0x54, 0xb0, 0x69, 0x64, 0x8d, 0xa9, 0x47, - 0x52, 0x4d, 0xc3, 0x6e, 0xb4, 0xcd, 0x78, 0x00, 0x91, 0x46, 0xa2, 0xa0, 0x7d, 0xed, 0xae, 0x16, - 0xef, 0xb3, 0xa6, 0x25, 0xe0, 0x17, 0xb8, 0xa4, 0xb2, 0x23, 0x26, 0x5e, 0xbb, 0x43, 0x30, 0xbb, - 0x4f, 0x00, 0x1e, 0x9e, 0xad, 0xc6, 0x09, 0xdc, 0x27, 0x40, 0x7d, 0xc9, 0x10, 0xfb, 0x04, 0x8a, - 0xf5, 0xbb, 0xce, 0x9c, 0x7b, 0x1d, 0xc4, 0x95, 0xad, 0x1c, 0xd2, 0x75, 0x28, 0x18, 0xea, 0x3a, - 0x4a, 0xc1, 0x6f, 0x52, 0xf7, 0x68, 0x0d, 0x69, 0x52, 0xec, 0x5c, 0x6d, 0xbd, 0x0b, 0xb3, 0xb9, - 0x7f, 0x2d, 0x3c, 0x61, 0x71, 0x62, 0x2a, 0x86, 0xe8, 0xba, 0x72, 0x22, 0xf7, 0xc7, 0x38, 0xed, - 0xe4, 0xf7, 0xa2, 0x81, 0xaa, 0x46, 0xe9, 0xba, 0xb9, 0x85, 0x15, 0xb1, 0x26, 0x88, 0x89, 0xca, - 0x27, 0x9c, 0xc4, 0xcd, 0xeb, 0xa2, 0x29, 0xd7, 0x0e, 0xf4, 0x6b, 0xa1, 0x15, 0x48, 0xdc, 0xfc, - 0x66, 0x6f, 0xd1, 0x44, 0xe2, 0xd6, 0xad, 0xe5, 0x7c, 0x8c, 0x08, 0x74, 0xd9, 0x5e, 0xc9, 0x17, - 0xb0, 0x4c, 0x9f, 0x06, 0xbb, 0x07, 0xd1, 0x20, 0x3e, 0x46, 0xd4, 0x4f, 0xd3, 0xae, 0x41, 0xe6, - 0xec, 0x40, 0x5e, 0x4f, 0xc3, 0x7f, 0x05, 0x45, 0x09, 0x89, 0x35, 0xa8, 0x05, 0x39, 0x3f, 0x9d, - 0x3a, 0x7e, 0x59, 0xa6, 0x22, 0xcd, 0xe7, 0x53, 0xce, 0x33, 0x78, 0x64, 0x39, 0x1a, 0x0f, 0x5d, - 0x29, 0xf5, 0xd3, 0xa9, 0x2d, 0xca, 0x2e, 0x71, 0xa3, 0xf1, 0x68, 0x29, 0xf8, 0x79, 0x9a, 0x65, - 0x20, 0x72, 0x46, 0xe3, 0x61, 0x23, 0x21, 0x22, 0xc7, 0x27, 0x9c, 0x1f, 0xfc, 0x1c, 0xcb, 0xd3, - 0x7f, 0x7d, 0x02, 0x7a, 0x07, 0xea, 0x38, 0x42, 0xea, 0x07, 0x3f, 0x21, 0xe4, 0xfc, 0x80, 0xe9, - 0x18, 0xfb, 0x29, 0x97, 0x4d, 0xa8, 0x8e, 0x40, 0xd4, 0x0f, 0x98, 0x52, 0xb0, 0xf3, 0x4e, 0xf2, - 0xf1, 0xb2, 0xba, 0xf0, 0x8f, 0x0c, 0xd4, 0xe6, 0x50, 0x7d, 0xb6, 0xf5, 0x29, 0xf8, 0x41, 0x21, - 0x9f, 0x1d, 0x7a, 0x30, 0x71, 0x3d, 0xad, 0x53, 0x49, 0x15, 0xe6, 0xd9, 0xfb, 0xff, 0xf5, 0xd5, - 0x8d, 0xb5, 0x9f, 0x7e, 0x75, 0x63, 0xed, 0x7f, 0xbe, 0xba, 0xb1, 0xf6, 0x93, 0xaf, 0x6f, 0xbc, - 0xf1, 0xd3, 0xaf, 0x6f, 0xbc, 0xf1, 0xdf, 0x5f, 0xdf, 0x78, 0xe3, 0xcb, 0x37, 0x2b, 0x95, 0x9b, - 0x9d, 0xfd, 0x5c, 0x51, 0x72, 0xc1, 0x9f, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc7, 0xe9, - 0x8b, 0xe6, 0x86, 0x80, 0x00, 0x00, + 0x52, 0xc0, 0xd7, 0x3c, 0xb0, 0x50, 0xc7, 0x2d, 0xd0, 0x0b, 0xcb, 0xde, 0x72, 0x37, 0x33, 0x3b, + 0x1f, 0xf6, 0xcc, 0x78, 0xdc, 0x9e, 0x9d, 0xd9, 0x2f, 0xee, 0x90, 0xa0, 0xc7, 0x1e, 0x7b, 0xfb, + 0xd6, 0xf6, 0x1a, 0x77, 0x7b, 0x46, 0xac, 0x84, 0x44, 0xb9, 0x2b, 0xdd, 0x2e, 0x5c, 0x5d, 0x59, + 0x57, 0x95, 0xed, 0x99, 0x3e, 0x04, 0x3a, 0x04, 0x02, 0x81, 0x40, 0x9c, 0xf8, 0x12, 0x3c, 0x21, + 0xf1, 0x17, 0xf0, 0x67, 0xf0, 0x78, 0x8f, 0x3c, 0xa2, 0xdd, 0x7f, 0x04, 0x55, 0x66, 0x56, 0x7e, + 0x44, 0x45, 0x64, 0x95, 0xf7, 0x9e, 0x66, 0xe4, 0xf8, 0x45, 0x44, 0x7e, 0x44, 0x66, 0x46, 0x66, + 0x65, 0x55, 0x47, 0x37, 0x8b, 0xb3, 0xed, 0xa2, 0xe4, 0x82, 0x57, 0xdb, 0x15, 0x2b, 0xaf, 0xd2, + 0x19, 0x6b, 0xfe, 0x1d, 0xca, 0x3f, 0x0f, 0xde, 0x8c, 0xf3, 0x95, 0x58, 0x15, 0xec, 0xbd, 0x77, + 0x2d, 0x39, 0xe3, 0x8b, 0x45, 0x9c, 0x27, 0x95, 0x42, 0xde, 0x7b, 0xc7, 0x4a, 0xd8, 0x15, 0xcb, + 0x85, 0xfe, 0xfb, 0x93, 0xaf, 0x7f, 0xf2, 0x0b, 0xd1, 0x5b, 0x3b, 0x59, 0xca, 0x72, 0xb1, 0xa3, + 0x35, 0x06, 0x5f, 0x46, 0xdf, 0x1e, 0x15, 0xc5, 0x3e, 0x13, 0x2f, 0x58, 0x59, 0xa5, 0x3c, 0x1f, + 0xdc, 0x19, 0x6a, 0x07, 0xc3, 0x93, 0x62, 0x36, 0x1c, 0x15, 0xc5, 0xd0, 0x0a, 0x87, 0x27, 0xec, + 0x47, 0x4b, 0x56, 0x89, 0xf7, 0xee, 0x86, 0xa1, 0xaa, 0xe0, 0x79, 0xc5, 0x06, 0xe7, 0xd1, 0xaf, + 0x8f, 0x8a, 0x62, 0xc2, 0xc4, 0x2e, 0xab, 0x2b, 0x30, 0x11, 0xb1, 0x60, 0x83, 0x8d, 0x96, 0xaa, + 0x0f, 0x18, 0x1f, 0xf7, 0xbb, 0x41, 0xed, 0x67, 0x1a, 0x7d, 0xab, 0xf6, 0x73, 0xb1, 0x14, 0x09, + 0x7f, 0x95, 0x0f, 0xde, 0x6f, 0x2b, 0x6a, 0x91, 0xb1, 0x7d, 0x3b, 0x84, 0x68, 0xab, 0x2f, 0xa3, + 0x5f, 0x79, 0x19, 0x67, 0x19, 0x13, 0x3b, 0x25, 0xab, 0x0b, 0xee, 0xeb, 0x28, 0xd1, 0x50, 0xc9, + 0x8c, 0xdd, 0x3b, 0x41, 0x46, 0x1b, 0xfe, 0x32, 0xfa, 0xb6, 0x92, 0x9c, 0xb0, 0x19, 0xbf, 0x62, + 0xe5, 0x00, 0xd5, 0xd2, 0x42, 0xa2, 0xc9, 0x5b, 0x10, 0xb4, 0xbd, 0xc3, 0xf3, 0x2b, 0x56, 0x0a, + 0xdc, 0xb6, 0x16, 0x86, 0x6d, 0x5b, 0x48, 0xdb, 0xfe, 0xdb, 0xb5, 0xe8, 0xbb, 0xa3, 0xd9, 0x8c, + 0x2f, 0x73, 0x71, 0xc0, 0x67, 0x71, 0x76, 0x90, 0xe6, 0x97, 0x47, 0xec, 0xd5, 0xce, 0x45, 0xcd, + 0xe7, 0x73, 0x36, 0x78, 0xea, 0xb7, 0xaa, 0x42, 0x87, 0x86, 0x1d, 0xba, 0xb0, 0xf1, 0xfd, 0xe1, + 0xf5, 0x94, 0x74, 0x59, 0xfe, 0x71, 0x2d, 0xba, 0x01, 0xcb, 0x32, 0xe1, 0xd9, 0x15, 0xb3, 0xa5, + 0xf9, 0xa8, 0xc3, 0xb0, 0x8f, 0x9b, 0xf2, 0x7c, 0x7c, 0x5d, 0x35, 0x5d, 0xa2, 0x2c, 0x7a, 0xdb, + 0x0d, 0x97, 0x09, 0xab, 0xe4, 0x70, 0x7a, 0x40, 0x47, 0x84, 0x46, 0x8c, 0xe7, 0x87, 0x7d, 0x50, + 0xed, 0x2d, 0x8d, 0x06, 0xda, 0x5b, 0xc6, 0x2b, 0xe3, 0xec, 0x3e, 0x6a, 0xc1, 0x21, 0x8c, 0xaf, + 0x07, 0x3d, 0x48, 0xed, 0xea, 0x8f, 0xa3, 0x5f, 0x7d, 0xc9, 0xcb, 0xcb, 0xaa, 0x88, 0x67, 0x4c, + 0x0f, 0x85, 0x7b, 0xbe, 0x76, 0x23, 0x85, 0xa3, 0x61, 0xbd, 0x0b, 0x73, 0x82, 0xb6, 0x11, 0x7e, + 0x51, 0x30, 0x38, 0x07, 0x59, 0xc5, 0x5a, 0x48, 0x05, 0x2d, 0x84, 0xb4, 0xed, 0xcb, 0x68, 0x60, + 0x6d, 0x9f, 0xfd, 0x09, 0x9b, 0x89, 0x51, 0x92, 0xc0, 0x5e, 0xb1, 0xba, 0x92, 0x18, 0x8e, 0x92, + 0x84, 0xea, 0x15, 0x1c, 0xd5, 0xce, 0x5e, 0x45, 0xef, 0x00, 0x67, 0x07, 0x69, 0x25, 0x1d, 0x6e, + 0x85, 0xad, 0x68, 0xcc, 0x38, 0x1d, 0xf6, 0xc5, 0xb5, 0xe3, 0x9f, 0xac, 0x45, 0xdf, 0x41, 0x3c, + 0x9f, 0xb0, 0x05, 0xbf, 0x62, 0x83, 0xc7, 0xdd, 0xd6, 0x14, 0x69, 0xfc, 0x7f, 0x70, 0x0d, 0x0d, + 0x24, 0x4c, 0x26, 0x2c, 0x63, 0x33, 0x41, 0x86, 0x89, 0x12, 0x77, 0x86, 0x89, 0xc1, 0x9c, 0x11, + 0xd6, 0x08, 0xf7, 0x99, 0xd8, 0x59, 0x96, 0x25, 0xcb, 0x05, 0xd9, 0x97, 0x16, 0xe9, 0xec, 0x4b, + 0x0f, 0x45, 0xea, 0xb3, 0xcf, 0xc4, 0x28, 0xcb, 0xc8, 0xfa, 0x28, 0x71, 0x67, 0x7d, 0x0c, 0xa6, + 0x3d, 0xcc, 0xa2, 0x5f, 0x73, 0x5a, 0x4c, 0x8c, 0xf3, 0x73, 0x3e, 0xa0, 0xdb, 0x42, 0xca, 0x8d, + 0x8f, 0x8d, 0x4e, 0x0e, 0xa9, 0xc6, 0xf3, 0xd7, 0x05, 0x2f, 0xe9, 0x6e, 0x51, 0xe2, 0xce, 0x6a, + 0x18, 0x4c, 0x7b, 0xf8, 0xa3, 0xe8, 0x2d, 0x3d, 0x4b, 0x36, 0xeb, 0xd9, 0x5d, 0x74, 0x0a, 0x85, + 0x0b, 0xda, 0xbd, 0x0e, 0xaa, 0x65, 0xfe, 0x30, 0x9d, 0x97, 0xf5, 0xec, 0x83, 0x9b, 0xd7, 0xd2, + 0x0e, 0xf3, 0x96, 0xd2, 0xe6, 0x79, 0xf4, 0x1b, 0xbe, 0xf9, 0x9d, 0x38, 0x9f, 0xb1, 0x6c, 0xf0, + 0x30, 0xa4, 0xae, 0x18, 0xe3, 0x6a, 0xb3, 0x17, 0x6b, 0x27, 0x3b, 0x4d, 0xe8, 0xc9, 0xf4, 0x0e, + 0xaa, 0x0d, 0xa6, 0xd2, 0xbb, 0x61, 0xa8, 0x65, 0x7b, 0x97, 0x65, 0x8c, 0xb4, 0xad, 0x84, 0x1d, + 0xb6, 0x0d, 0xa4, 0x6d, 0x97, 0xd1, 0x6f, 0x9a, 0x6e, 0xae, 0xf3, 0x02, 0x29, 0xaf, 0x17, 0x9d, + 0x4d, 0xa2, 0x1f, 0x5d, 0xc8, 0xf8, 0x7a, 0xd4, 0x0f, 0x6e, 0xd5, 0x47, 0xcf, 0x28, 0x78, 0x7d, + 0xc0, 0x7c, 0x72, 0x37, 0x0c, 0x69, 0xdb, 0x7f, 0xb7, 0x16, 0x7d, 0x4f, 0xcb, 0x9e, 0xe7, 0xf1, + 0x59, 0xc6, 0xe4, 0x12, 0x7f, 0xc4, 0xc4, 0x2b, 0x5e, 0x5e, 0x4e, 0x56, 0xf9, 0x8c, 0x48, 0x67, + 0x70, 0xb8, 0x23, 0x9d, 0x21, 0x95, 0x74, 0x61, 0xfe, 0x34, 0x7a, 0xb7, 0x09, 0x8a, 0x8b, 0x38, + 0x9f, 0xb3, 0x1f, 0x56, 0x3c, 0x1f, 0x15, 0xe9, 0x28, 0x49, 0xca, 0xc1, 0x10, 0xef, 0x7a, 0xc8, + 0x99, 0x12, 0x6c, 0xf7, 0xe6, 0x9d, 0xf4, 0x59, 0xb7, 0xb2, 0xe0, 0x05, 0x4c, 0x9f, 0x9b, 0xe6, + 0x13, 0xbc, 0xa0, 0xd2, 0x67, 0x1f, 0x69, 0x59, 0x3d, 0xac, 0xd7, 0x20, 0xdc, 0xea, 0xa1, 0xbb, + 0xe8, 0xdc, 0x0e, 0x21, 0x76, 0x0d, 0x68, 0x1a, 0x8a, 0xe7, 0xe7, 0xe9, 0xfc, 0xb4, 0x48, 0xea, + 0x31, 0xf4, 0x00, 0xaf, 0xb3, 0x83, 0x10, 0x6b, 0x00, 0x81, 0x6a, 0x6f, 0xff, 0x60, 0xb3, 0x4c, + 0x3d, 0x2f, 0xed, 0x95, 0x7c, 0x71, 0xc0, 0xe6, 0xf1, 0x6c, 0xa5, 0x27, 0xd3, 0x0f, 0x43, 0xb3, + 0x18, 0xa4, 0x4d, 0x21, 0x3e, 0xba, 0xa6, 0x96, 0x2e, 0xcf, 0x7f, 0xae, 0x45, 0x77, 0xbd, 0x38, + 0xd1, 0xc1, 0xa4, 0x4a, 0x3f, 0xca, 0x93, 0x13, 0x56, 0x89, 0xb8, 0x14, 0x83, 0xef, 0x07, 0x62, + 0x80, 0xd0, 0x31, 0x65, 0xfb, 0xc1, 0x37, 0xd2, 0xb5, 0xbd, 0x3e, 0xa9, 0x57, 0x09, 0x3d, 0xff, + 0xf8, 0xbd, 0x2e, 0x25, 0x70, 0xf6, 0xb9, 0x1d, 0x42, 0x6c, 0xaf, 0x4b, 0xc1, 0x38, 0xbf, 0x4a, + 0x05, 0xdb, 0x67, 0x39, 0x2b, 0xdb, 0xbd, 0xae, 0x54, 0x7d, 0x84, 0xe8, 0x75, 0x02, 0xb5, 0xdb, + 0x56, 0xc7, 0x9b, 0xaa, 0x38, 0xd8, 0xb6, 0xba, 0x06, 0x14, 0x40, 0x6c, 0x5b, 0x51, 0xd0, 0xce, + 0xa8, 0x5e, 0xad, 0x4c, 0x46, 0xb3, 0x19, 0x28, 0x6c, 0x2b, 0xa7, 0x79, 0xd4, 0x0f, 0x26, 0x5a, + 0x52, 0xec, 0xd7, 0x46, 0x82, 0x2d, 0xa9, 0x90, 0x5e, 0x2d, 0x69, 0x50, 0xb4, 0x25, 0x4f, 0xd8, + 0x15, 0xbf, 0x0c, 0xb5, 0xa4, 0x02, 0x7a, 0xb4, 0xa4, 0x01, 0x6d, 0x92, 0xe3, 0xf8, 0x79, 0x91, + 0xb2, 0x57, 0x20, 0xc9, 0x71, 0x95, 0x6b, 0x31, 0x91, 0xe4, 0x20, 0x98, 0xf6, 0x70, 0x14, 0xfd, + 0xb2, 0x14, 0xfe, 0x90, 0xa7, 0xf9, 0xe0, 0x26, 0xa2, 0x54, 0x0b, 0x8c, 0xd5, 0x5b, 0x34, 0x00, + 0x4a, 0x5c, 0xff, 0x55, 0x67, 0x1c, 0xf7, 0x08, 0x25, 0x90, 0x6c, 0xac, 0x77, 0x61, 0x36, 0xbb, + 0x94, 0xc2, 0x7a, 0x56, 0x9e, 0x5c, 0xc4, 0x65, 0x9a, 0xcf, 0x07, 0x98, 0xae, 0x23, 0x27, 0xb2, + 0x4b, 0x8c, 0x03, 0xe1, 0xa4, 0x15, 0x47, 0x45, 0x51, 0xd6, 0x93, 0x3d, 0x16, 0x4e, 0x3e, 0x12, + 0x0c, 0xa7, 0x16, 0x8a, 0x7b, 0xdb, 0x65, 0xb3, 0x2c, 0xcd, 0x83, 0xde, 0x34, 0xd2, 0xc7, 0x9b, + 0x45, 0x41, 0xf0, 0x1e, 0xb0, 0xf8, 0x8a, 0x35, 0x35, 0xc3, 0x5a, 0xc6, 0x05, 0x82, 0xc1, 0x0b, + 0x40, 0xbb, 0x95, 0x97, 0xe2, 0xc3, 0xf8, 0x92, 0xd5, 0x0d, 0xcc, 0xea, 0x54, 0x61, 0x80, 0xe9, + 0x7b, 0x04, 0xb1, 0x95, 0xc7, 0x49, 0xed, 0x6a, 0x19, 0xbd, 0x23, 0xe5, 0xc7, 0x71, 0x29, 0xd2, + 0x59, 0x5a, 0xc4, 0x79, 0xb3, 0x45, 0xc4, 0x66, 0x91, 0x16, 0x65, 0x5c, 0x6e, 0xf5, 0xa4, 0xb5, + 0xdb, 0x7f, 0x5b, 0x8b, 0xde, 0x87, 0x7e, 0x8f, 0x59, 0xb9, 0x48, 0xe5, 0x49, 0x43, 0xa5, 0x67, + 0xd8, 0x4f, 0xc2, 0x46, 0x5b, 0x0a, 0xa6, 0x34, 0x9f, 0x5e, 0x5f, 0xd1, 0xe6, 0x97, 0x13, 0xbd, + 0xfb, 0xfa, 0xa2, 0x4c, 0x5a, 0x27, 0x71, 0x93, 0x66, 0x4b, 0x25, 0x85, 0x44, 0x7e, 0xd9, 0x82, + 0xc0, 0x08, 0x3f, 0xcd, 0xab, 0xc6, 0x3a, 0x36, 0xc2, 0xad, 0x38, 0x38, 0xc2, 0x3d, 0xcc, 0x8e, + 0xf0, 0xe3, 0xe5, 0x59, 0x96, 0x56, 0x17, 0x69, 0x3e, 0xd7, 0x9b, 0x09, 0x5f, 0xd7, 0x8a, 0xe1, + 0x7e, 0x62, 0xa3, 0x93, 0xc3, 0x9c, 0xe8, 0x60, 0x21, 0x9d, 0x80, 0x30, 0xd9, 0xe8, 0xe4, 0xec, + 0x1e, 0xcf, 0x4a, 0x0f, 0xd2, 0x4a, 0x80, 0x3d, 0x9e, 0xa3, 0x5a, 0x4b, 0x89, 0x3d, 0x5e, 0x9b, + 0xb2, 0x7b, 0x3c, 0xb7, 0x0e, 0x15, 0xcf, 0xae, 0xd8, 0x69, 0x99, 0x82, 0x3d, 0x9e, 0x57, 0xbe, + 0x86, 0x21, 0xf6, 0x78, 0x14, 0x6b, 0x27, 0x2a, 0x4b, 0xec, 0x33, 0x31, 0x11, 0xb1, 0x58, 0x56, + 0x60, 0xa2, 0x72, 0x6c, 0x18, 0x84, 0x98, 0xa8, 0x08, 0x54, 0x7b, 0xfb, 0x83, 0x28, 0x52, 0xe7, + 0x32, 0xf2, 0xec, 0xcc, 0x5f, 0x7b, 0xf4, 0x81, 0x8d, 0x77, 0x70, 0xf6, 0x7e, 0x80, 0xb0, 0x69, + 0x9c, 0xfa, 0xbb, 0x3c, 0x12, 0x1c, 0xa0, 0x1a, 0x52, 0x44, 0xa4, 0x71, 0x00, 0x81, 0x05, 0x9d, + 0x5c, 0xf0, 0x57, 0x78, 0x41, 0x6b, 0x49, 0xb8, 0xa0, 0x9a, 0xb0, 0x87, 0xf4, 0xba, 0xa0, 0xd8, + 0x21, 0x7d, 0x53, 0x8c, 0xd0, 0x21, 0x3d, 0x64, 0x6c, 0xcc, 0xb8, 0x86, 0x9f, 0x71, 0x7e, 0xb9, + 0x88, 0xcb, 0x4b, 0x10, 0x33, 0x9e, 0x72, 0xc3, 0x10, 0x31, 0x43, 0xb1, 0x36, 0x66, 0x5c, 0x87, + 0xf5, 0x26, 0xe0, 0xb4, 0xcc, 0x40, 0xcc, 0x78, 0x36, 0x34, 0x42, 0xc4, 0x0c, 0x81, 0xda, 0xd9, + 0xc9, 0xf5, 0x36, 0x61, 0xf0, 0x58, 0xc8, 0x53, 0x9f, 0x30, 0xea, 0x58, 0x08, 0xc1, 0x60, 0x08, + 0xed, 0x97, 0x71, 0x71, 0x81, 0x87, 0x90, 0x14, 0x85, 0x43, 0xa8, 0x41, 0x60, 0x7f, 0x4f, 0x58, + 0x5c, 0xce, 0x2e, 0xf0, 0xfe, 0x56, 0xb2, 0x70, 0x7f, 0x1b, 0x06, 0xf6, 0xb7, 0x12, 0xbc, 0x4c, + 0xc5, 0xc5, 0x21, 0x13, 0x31, 0xde, 0xdf, 0x3e, 0x13, 0xee, 0xef, 0x16, 0x6b, 0xb3, 0x7f, 0xd7, + 0xe1, 0x64, 0x79, 0x56, 0xcd, 0xca, 0xf4, 0x8c, 0x0d, 0x02, 0x56, 0x0c, 0x44, 0x64, 0xff, 0x24, + 0xac, 0x7d, 0xfe, 0x74, 0x2d, 0xba, 0xd9, 0x74, 0x3b, 0xaf, 0x2a, 0xbd, 0xf6, 0xf9, 0xee, 0x3f, + 0xc2, 0xfb, 0x97, 0xc0, 0x89, 0xc7, 0x26, 0x3d, 0xd4, 0x9c, 0xdc, 0x00, 0x2f, 0xd2, 0x69, 0x5e, + 0x99, 0x42, 0x7d, 0xd2, 0xc7, 0xba, 0xa3, 0x40, 0xe4, 0x06, 0xbd, 0x14, 0x6d, 0x5a, 0xa6, 0xfb, + 0xa7, 0x91, 0x8d, 0x93, 0x0a, 0xa4, 0x65, 0x4d, 0x7b, 0x3b, 0x04, 0x91, 0x96, 0xe1, 0x24, 0x0c, + 0x85, 0xfd, 0x92, 0x2f, 0x8b, 0xaa, 0x23, 0x14, 0x00, 0x14, 0x0e, 0x85, 0x36, 0xac, 0x7d, 0xbe, + 0x8e, 0x7e, 0xcb, 0x0d, 0x3f, 0xb7, 0xb1, 0xb7, 0xe8, 0x98, 0xc2, 0x9a, 0x78, 0xd8, 0x17, 0xb7, + 0x19, 0x45, 0xe3, 0x59, 0xec, 0x32, 0x11, 0xa7, 0x59, 0x35, 0x58, 0xc7, 0x6d, 0x34, 0x72, 0x22, + 0xa3, 0xc0, 0x38, 0x38, 0xbf, 0xed, 0x2e, 0x8b, 0x2c, 0x9d, 0xb5, 0x1f, 0x5a, 0x69, 0x5d, 0x23, + 0x0e, 0xcf, 0x6f, 0x2e, 0x06, 0xe7, 0xeb, 0x3a, 0xf5, 0x93, 0xff, 0x99, 0xae, 0x0a, 0x86, 0xcf, + 0xd7, 0x1e, 0x12, 0x9e, 0xaf, 0x21, 0x0a, 0xeb, 0x33, 0x61, 0xe2, 0x20, 0x5e, 0xf1, 0x25, 0x31, + 0x5f, 0x1b, 0x71, 0xb8, 0x3e, 0x2e, 0x66, 0xf7, 0x06, 0xc6, 0xc3, 0x38, 0x17, 0xac, 0xcc, 0xe3, + 0x6c, 0x2f, 0x8b, 0xe7, 0xd5, 0x80, 0x98, 0x63, 0x7c, 0x8a, 0xd8, 0x1b, 0xd0, 0x34, 0xd2, 0x8c, + 0xe3, 0x6a, 0x2f, 0xbe, 0xe2, 0x65, 0x2a, 0xe8, 0x66, 0xb4, 0x48, 0x67, 0x33, 0x7a, 0x28, 0xea, + 0x6d, 0x54, 0xce, 0x2e, 0xd2, 0x2b, 0x96, 0x04, 0xbc, 0x35, 0x48, 0x0f, 0x6f, 0x0e, 0x8a, 0x74, + 0xda, 0x84, 0x2f, 0xcb, 0x19, 0x23, 0x3b, 0x4d, 0x89, 0x3b, 0x3b, 0xcd, 0x60, 0xda, 0xc3, 0x5f, + 0xad, 0x45, 0xbf, 0xad, 0xa4, 0xee, 0x93, 0xa4, 0xdd, 0xb8, 0xba, 0x38, 0xe3, 0x71, 0x99, 0x0c, + 0x3e, 0xc0, 0xec, 0xa0, 0xa8, 0x71, 0xfd, 0xe4, 0x3a, 0x2a, 0xb0, 0x59, 0xeb, 0xbc, 0xdb, 0x8e, + 0x38, 0xb4, 0x59, 0x3d, 0x24, 0xdc, 0xac, 0x10, 0x85, 0x13, 0x88, 0x94, 0xab, 0x83, 0xc6, 0x75, + 0x52, 0xdf, 0x3f, 0x6d, 0xdc, 0xe8, 0xe4, 0xe0, 0xfc, 0x58, 0x0b, 0xfd, 0x68, 0xd9, 0xa2, 0x6c, + 0xe0, 0x11, 0x33, 0xec, 0x8b, 0x93, 0x9e, 0xcd, 0xa8, 0x08, 0x7b, 0x6e, 0x8d, 0x8c, 0x61, 0x5f, + 0x9c, 0xf0, 0xec, 0x4c, 0x6b, 0x21, 0xcf, 0xc8, 0xd4, 0x36, 0xec, 0x8b, 0xc3, 0xec, 0x4b, 0x33, + 0xcd, 0xba, 0xf0, 0x30, 0x60, 0x07, 0xae, 0x0d, 0x9b, 0xbd, 0x58, 0xed, 0xf0, 0x6f, 0xd6, 0xa2, + 0xef, 0x5a, 0x8f, 0x87, 0x3c, 0x49, 0xcf, 0x57, 0x0a, 0x7a, 0x11, 0x67, 0x4b, 0x56, 0x0d, 0x9e, + 0x50, 0xd6, 0xda, 0xac, 0x29, 0xc1, 0xd3, 0x6b, 0xe9, 0xc0, 0xb1, 0x33, 0x2a, 0x8a, 0x6c, 0x35, + 0x65, 0x8b, 0x22, 0x23, 0xc7, 0x8e, 0x87, 0x84, 0xc7, 0x0e, 0x44, 0x61, 0x56, 0x3e, 0xe5, 0x75, + 0xce, 0x8f, 0x66, 0xe5, 0x52, 0x14, 0xce, 0xca, 0x1b, 0x04, 0xe6, 0x4a, 0x53, 0xbe, 0xc3, 0xb3, + 0x8c, 0xcd, 0x44, 0xfb, 0x36, 0x8a, 0xd1, 0xb4, 0x44, 0x38, 0x57, 0x02, 0xa4, 0x3d, 0x95, 0x6b, + 0xf6, 0x90, 0x71, 0xc9, 0x9e, 0xad, 0x0e, 0xd2, 0xfc, 0x72, 0x80, 0xa7, 0x05, 0x16, 0x20, 0x4e, + 0xe5, 0x50, 0x10, 0xee, 0x55, 0x4f, 0xf3, 0x84, 0xe3, 0x7b, 0xd5, 0x5a, 0x12, 0xde, 0xab, 0x6a, + 0x02, 0x9a, 0x3c, 0x61, 0x94, 0xc9, 0x5a, 0x12, 0x36, 0xa9, 0x09, 0x6c, 0x2a, 0xd4, 0x4f, 0xa4, + 0xc8, 0xa9, 0x10, 0x3c, 0x83, 0xda, 0xe8, 0xe4, 0xe0, 0x9e, 0x4b, 0x3b, 0x40, 0x23, 0x02, 0x18, + 0xbf, 0x13, 0x64, 0x60, 0xe8, 0x37, 0xbb, 0xe1, 0x3d, 0x26, 0x66, 0x17, 0x78, 0xe8, 0x7b, 0x48, + 0x38, 0xf4, 0x21, 0x0a, 0xdb, 0x6a, 0xca, 0xcd, 0x6e, 0x7e, 0x1d, 0x0f, 0xbc, 0xd6, 0x4e, 0x7e, + 0xa3, 0x93, 0x83, 0x6d, 0x35, 0x5e, 0xd0, 0x6d, 0xa5, 0x64, 0xe1, 0xb6, 0x32, 0x0c, 0x2c, 0xbd, + 0x12, 0xc8, 0x43, 0xb2, 0x75, 0x5a, 0xd1, 0x3b, 0x26, 0xdb, 0xe8, 0xe4, 0xb4, 0x93, 0x7f, 0x31, + 0xfb, 0x43, 0x25, 0x3d, 0xe2, 0xf5, 0xe0, 0x7b, 0x11, 0x67, 0x69, 0x12, 0x0b, 0x36, 0xe5, 0x97, + 0x2c, 0xc7, 0xb7, 0x62, 0xba, 0xb4, 0x8a, 0x1f, 0x7a, 0x0a, 0xe1, 0xad, 0x58, 0x58, 0x11, 0xc6, + 0x89, 0xa2, 0x4f, 0x2b, 0xb6, 0x13, 0x57, 0xc4, 0x14, 0xe9, 0x21, 0xe1, 0x38, 0x81, 0x28, 0x4c, + 0x84, 0x95, 0xfc, 0xf9, 0xeb, 0x82, 0x95, 0x29, 0xcb, 0x67, 0x0c, 0x4f, 0x84, 0x21, 0x15, 0x4e, + 0x84, 0x11, 0x1a, 0x6e, 0x02, 0x77, 0x63, 0xc1, 0x9e, 0xad, 0xa6, 0xe9, 0x82, 0x55, 0x22, 0x5e, + 0x14, 0xf8, 0x26, 0x10, 0x40, 0xe1, 0x4d, 0x60, 0x1b, 0x6e, 0x9d, 0x39, 0x99, 0x99, 0xb6, 0x7d, + 0x3b, 0x0e, 0x12, 0x81, 0xdb, 0x71, 0x04, 0x0a, 0x1b, 0xd6, 0x02, 0xe8, 0xd3, 0x87, 0x96, 0x95, + 0xe0, 0xd3, 0x07, 0x9a, 0x6e, 0x9d, 0xe4, 0x19, 0x66, 0x52, 0x0f, 0xcd, 0x8e, 0xa2, 0x4f, 0xdc, + 0x21, 0xba, 0xd9, 0x8b, 0xc5, 0x8f, 0x0e, 0x4f, 0x58, 0x16, 0xcb, 0xf5, 0x30, 0x70, 0x3e, 0xd7, + 0x30, 0x7d, 0x8e, 0x0e, 0x1d, 0x56, 0x3b, 0xfc, 0x8b, 0xb5, 0xe8, 0x3d, 0xcc, 0xe3, 0x17, 0x85, + 0xf4, 0xfb, 0xb8, 0xdb, 0x96, 0x22, 0x89, 0xeb, 0x7f, 0x61, 0x0d, 0x7b, 0x83, 0xa5, 0x11, 0xd9, + 0xdb, 0x81, 0xba, 0x00, 0x7e, 0x36, 0x68, 0xca, 0x0f, 0x39, 0xe2, 0x06, 0x4b, 0x88, 0xb7, 0x1b, + 0x2d, 0xbf, 0x5c, 0x15, 0xd8, 0x68, 0x19, 0x1b, 0x5a, 0x4c, 0x6c, 0xb4, 0x10, 0xcc, 0x8e, 0x4e, + 0xb7, 0x7a, 0x2f, 0x53, 0x71, 0x21, 0x13, 0x39, 0x30, 0x3a, 0xbd, 0xb2, 0x1a, 0x88, 0x18, 0x9d, + 0x24, 0x0c, 0x53, 0x9d, 0x06, 0xac, 0xc7, 0x26, 0x36, 0x97, 0x1b, 0x43, 0xee, 0xc8, 0xbc, 0xdf, + 0x0d, 0xc2, 0x78, 0x6d, 0xc4, 0x7a, 0x4f, 0xf5, 0x30, 0x64, 0x01, 0xec, 0xab, 0x36, 0x7b, 0xb1, + 0xda, 0xe1, 0x9f, 0x47, 0xdf, 0x69, 0x55, 0x6c, 0x8f, 0xc5, 0x62, 0x59, 0xb2, 0x64, 0xb0, 0xdd, + 0x51, 0xee, 0x06, 0x34, 0xae, 0x1f, 0xf7, 0x57, 0x68, 0x25, 0xff, 0x0d, 0xa7, 0xc2, 0xca, 0x94, + 0xe1, 0x49, 0xc8, 0xa4, 0xcf, 0x06, 0x93, 0x7f, 0x5a, 0xa7, 0xb5, 0x7f, 0x77, 0xa3, 0x6b, 0x74, + 0x15, 0xa7, 0x99, 0x7c, 0x0a, 0xfc, 0x41, 0xc8, 0xa8, 0x87, 0x06, 0xf7, 0xef, 0xa4, 0x4a, 0x6b, + 0x66, 0x96, 0x63, 0xdc, 0xd9, 0xf7, 0x3d, 0xa2, 0x67, 0x02, 0x64, 0xdb, 0xb7, 0xd5, 0x93, 0xd6, + 0x6e, 0x45, 0xb3, 0xe4, 0xd5, 0x7f, 0x76, 0x83, 0x1c, 0xf3, 0xaa, 0x55, 0x91, 0x48, 0xdf, 0xea, + 0x49, 0x6b, 0xaf, 0x7f, 0x16, 0xbd, 0xdb, 0xf6, 0xaa, 0x17, 0xa2, 0xed, 0x4e, 0x53, 0x60, 0x2d, + 0x7a, 0xdc, 0x5f, 0x41, 0xbb, 0xff, 0x77, 0x73, 0xe0, 0xad, 0xfc, 0xcf, 0xf8, 0x62, 0xc1, 0xf2, + 0x84, 0x25, 0x8d, 0x46, 0x55, 0x6f, 0xcc, 0x3e, 0xa5, 0xed, 0x1a, 0x85, 0xa1, 0xab, 0x61, 0x4a, + 0xf4, 0x3b, 0xdf, 0x40, 0x53, 0x17, 0xed, 0xbf, 0xd7, 0xa2, 0x07, 0x68, 0xd1, 0x9a, 0xc0, 0xf5, + 0x8a, 0xf8, 0xfb, 0x7d, 0x1c, 0x61, 0x9a, 0xa6, 0xa8, 0xa3, 0x9f, 0xc3, 0x82, 0x2e, 0xf2, 0x7f, + 0xac, 0x45, 0xb7, 0xad, 0x62, 0x1d, 0xde, 0x3b, 0x3c, 0x3f, 0xcf, 0xd2, 0x99, 0x90, 0x8f, 0x7a, + 0xb5, 0x0a, 0xdd, 0x9c, 0x94, 0x46, 0x77, 0x73, 0x06, 0x34, 0x75, 0xd9, 0xfe, 0x79, 0x2d, 0xba, + 0xe5, 0x36, 0xa7, 0x7c, 0x4e, 0xac, 0x8e, 0x5d, 0x1b, 0xc5, 0x6a, 0xf0, 0x31, 0xdd, 0x06, 0x18, + 0x6f, 0xca, 0xf5, 0xc9, 0xb5, 0xf5, 0xec, 0x5e, 0xfd, 0xb3, 0xb4, 0x12, 0xbc, 0x5c, 0x4d, 0x2e, + 0xf8, 0xab, 0xe6, 0xad, 0x2f, 0x7f, 0xb5, 0xd0, 0xc0, 0xd0, 0x21, 0x88, 0xbd, 0x3a, 0x4e, 0xb6, + 0x5c, 0xd9, 0xb7, 0xc3, 0x2a, 0xc2, 0x95, 0x43, 0x74, 0xb8, 0xf2, 0x49, 0xbb, 0x56, 0x36, 0xb5, + 0xb2, 0xaf, 0xb2, 0x6d, 0xe0, 0x45, 0x6d, 0xbf, 0xce, 0x76, 0xbf, 0x1b, 0xb4, 0x19, 0xb3, 0x16, + 0xef, 0xa6, 0xe7, 0xe7, 0xa6, 0x4e, 0x78, 0x49, 0x5d, 0x84, 0xc8, 0x98, 0x09, 0xd4, 0x6e, 0xfa, + 0xf6, 0xd2, 0x8c, 0xc9, 0x47, 0x55, 0x5f, 0x9c, 0x9f, 0x67, 0x3c, 0x4e, 0xc0, 0xa6, 0xaf, 0x16, + 0x0f, 0x5d, 0x39, 0xb1, 0xe9, 0xc3, 0x38, 0x7b, 0x09, 0xa6, 0x96, 0xd6, 0x63, 0x2e, 0x9f, 0xa5, + 0x19, 0xbc, 0x34, 0x2e, 0x35, 0x8d, 0x90, 0xb8, 0x04, 0xd3, 0x82, 0x6c, 0x62, 0x56, 0x8b, 0xea, + 0xb1, 0xd2, 0x94, 0xff, 0x5e, 0x5b, 0xd1, 0x11, 0x13, 0x89, 0x19, 0x82, 0xd9, 0x43, 0x95, 0x5a, + 0x78, 0x5a, 0x48, 0xe3, 0xb7, 0xda, 0x5a, 0x4a, 0x42, 0x1c, 0xaa, 0xf8, 0x84, 0xdd, 0xc3, 0xd7, + 0x7f, 0xdf, 0xe5, 0xaf, 0x72, 0x69, 0xf4, 0x76, 0x5b, 0xa5, 0x91, 0x11, 0x7b, 0x78, 0xc8, 0x68, + 0xc3, 0x9f, 0x47, 0xbf, 0x24, 0x0d, 0x97, 0xbc, 0x18, 0xdc, 0x40, 0x14, 0x4a, 0xe7, 0x8a, 0xf5, + 0x4d, 0x52, 0x6e, 0xef, 0xcc, 0x98, 0xd8, 0x38, 0xad, 0xe2, 0x39, 0x7c, 0x2f, 0xc2, 0xf6, 0xb8, + 0x94, 0x12, 0x77, 0x66, 0xda, 0x94, 0x1f, 0x15, 0x47, 0x3c, 0xd1, 0xd6, 0x91, 0x1a, 0x1a, 0x61, + 0x28, 0x2a, 0x5c, 0xc8, 0x26, 0xd3, 0x47, 0xf1, 0x55, 0x3a, 0x37, 0x09, 0x8f, 0x9a, 0xbe, 0x2a, + 0x90, 0x4c, 0x5b, 0x66, 0xe8, 0x40, 0x44, 0x32, 0x4d, 0xc2, 0xce, 0x64, 0x6c, 0x99, 0xfd, 0xe6, + 0x18, 0x7a, 0x9c, 0x9f, 0xf3, 0x3a, 0xf5, 0x3e, 0x48, 0xf3, 0x4b, 0x38, 0x19, 0x3b, 0x26, 0x71, + 0x9e, 0x98, 0x8c, 0xfb, 0xe8, 0xd9, 0x5d, 0x53, 0x73, 0x46, 0x6b, 0x2f, 0x6a, 0x28, 0x0d, 0xb0, + 0x6b, 0x32, 0x47, 0xb9, 0x90, 0x23, 0x76, 0x4d, 0x21, 0xde, 0x76, 0xb1, 0x71, 0x9e, 0xf1, 0x1c, + 0x76, 0xb1, 0xb5, 0x50, 0x0b, 0x89, 0x2e, 0x6e, 0x41, 0x76, 0x3e, 0x6e, 0x44, 0xea, 0xd4, 0x6f, + 0x94, 0x65, 0x60, 0x3e, 0x36, 0xaa, 0x06, 0x20, 0xe6, 0x63, 0x14, 0xd4, 0x7e, 0x4e, 0xa2, 0x6f, + 0xd5, 0x4d, 0x7a, 0x5c, 0xb2, 0xab, 0x94, 0xc1, 0x3b, 0x45, 0x8e, 0x84, 0x18, 0xff, 0x3e, 0x61, + 0x47, 0xd6, 0x69, 0x5e, 0x15, 0x59, 0x5c, 0x5d, 0xe8, 0x5b, 0x26, 0x7e, 0x9d, 0x1b, 0x21, 0xbc, + 0x67, 0x72, 0xaf, 0x83, 0xb2, 0x93, 0x7a, 0x23, 0x33, 0x53, 0xcc, 0x3a, 0xae, 0xda, 0x9a, 0x66, + 0x36, 0x3a, 0x39, 0xfb, 0x28, 0x67, 0x3f, 0xce, 0x32, 0x56, 0xae, 0x1a, 0xd9, 0x61, 0x9c, 0xa7, + 0xe7, 0xac, 0x12, 0xe0, 0x51, 0x8e, 0xa6, 0x86, 0x10, 0x23, 0x1e, 0xe5, 0x04, 0x70, 0xbb, 0x9b, + 0x04, 0x9e, 0xc7, 0x79, 0xc2, 0x5e, 0x83, 0xdd, 0x24, 0xb4, 0x23, 0x19, 0x62, 0x37, 0x49, 0xb1, + 0xf6, 0x91, 0xc6, 0xb3, 0x8c, 0xcf, 0x2e, 0xf5, 0x12, 0xe0, 0x77, 0xb0, 0x94, 0xc0, 0x35, 0xe0, + 0x76, 0x08, 0xb1, 0x8b, 0x80, 0x14, 0x9c, 0xb0, 0x22, 0x8b, 0x67, 0xf0, 0x62, 0x99, 0xd2, 0xd1, + 0x32, 0x62, 0x11, 0x80, 0x0c, 0x28, 0xae, 0xbe, 0xb0, 0x86, 0x15, 0x17, 0xdc, 0x57, 0xbb, 0x1d, + 0x42, 0xec, 0x32, 0x28, 0x05, 0x93, 0x22, 0x4b, 0x05, 0x18, 0x06, 0x4a, 0x43, 0x4a, 0x88, 0x61, + 0xe0, 0x13, 0xc0, 0xe4, 0x21, 0x2b, 0xe7, 0x0c, 0x35, 0x29, 0x25, 0x41, 0x93, 0x0d, 0x61, 0x6f, + 0xd1, 0xab, 0xba, 0xf3, 0x62, 0x05, 0x6e, 0xd1, 0xeb, 0x6a, 0xf1, 0x62, 0x45, 0xdc, 0xa2, 0xf7, + 0x00, 0x50, 0xc4, 0xe3, 0xb8, 0x12, 0x78, 0x11, 0xa5, 0x24, 0x58, 0xc4, 0x86, 0xb0, 0x6b, 0xb4, + 0x2a, 0xe2, 0x52, 0x80, 0x35, 0x5a, 0x17, 0xc0, 0xb9, 0x5a, 0x71, 0x93, 0x94, 0xdb, 0x99, 0x44, + 0xf5, 0x0a, 0x13, 0x7b, 0x29, 0xcb, 0x92, 0x0a, 0xcc, 0x24, 0xba, 0xdd, 0x1b, 0x29, 0x31, 0x93, + 0xb4, 0x29, 0x10, 0x4a, 0xfa, 0xb9, 0x0c, 0x56, 0x3b, 0xf0, 0x58, 0xe6, 0x76, 0x08, 0xb1, 0xf3, + 0x53, 0x53, 0xe8, 0x9d, 0xb8, 0x2c, 0xd3, 0x7a, 0xf1, 0x5f, 0xc7, 0x0b, 0xd4, 0xc8, 0x89, 0xf9, + 0x09, 0xe3, 0xc0, 0xf0, 0x6a, 0x26, 0x6e, 0xac, 0x60, 0x70, 0xea, 0xbe, 0x13, 0x64, 0x6c, 0xc6, + 0x29, 0x25, 0xce, 0xdd, 0x00, 0xac, 0x35, 0x91, 0xab, 0x01, 0xeb, 0x5d, 0x98, 0xf3, 0xe2, 0xa0, + 0x71, 0x71, 0xc8, 0xaf, 0xd8, 0x94, 0x3f, 0x7f, 0x9d, 0x56, 0xf5, 0x26, 0x50, 0xaf, 0xdc, 0x4f, + 0x09, 0x4b, 0x18, 0x4c, 0xbc, 0x38, 0xd8, 0xa9, 0x64, 0x13, 0x08, 0x50, 0x96, 0x23, 0xf6, 0x0a, + 0x4d, 0x20, 0xa0, 0x45, 0xc3, 0x11, 0x09, 0x44, 0x88, 0xb7, 0xe7, 0x78, 0xc6, 0xb9, 0xfe, 0x5a, + 0xc4, 0x94, 0x37, 0xb9, 0x1c, 0x65, 0x0d, 0x82, 0xc4, 0x51, 0x4a, 0x50, 0xc1, 0xee, 0x2f, 0x8d, + 0x7f, 0x3b, 0xc4, 0xee, 0x13, 0x76, 0xda, 0xc3, 0xec, 0x41, 0x0f, 0x12, 0x71, 0x65, 0x2f, 0xb8, + 0x50, 0xae, 0xda, 0xf7, 0x5b, 0x1e, 0xf4, 0x20, 0x9d, 0x33, 0x41, 0xb7, 0x5a, 0xcf, 0xe2, 0xd9, + 0xe5, 0xbc, 0xe4, 0xcb, 0x3c, 0xd9, 0xe1, 0x19, 0x2f, 0xc1, 0x99, 0xa0, 0x57, 0x6a, 0x80, 0x12, + 0x67, 0x82, 0x1d, 0x2a, 0x36, 0x83, 0x73, 0x4b, 0x31, 0xca, 0xd2, 0x39, 0xdc, 0x51, 0x7b, 0x86, + 0x24, 0x40, 0x64, 0x70, 0x28, 0x88, 0x04, 0x91, 0xda, 0x71, 0x8b, 0x74, 0x16, 0x67, 0xca, 0xdf, + 0x36, 0x6d, 0xc6, 0x03, 0x3b, 0x83, 0x08, 0x51, 0x40, 0xea, 0x39, 0x5d, 0x96, 0xf9, 0x38, 0x17, + 0x9c, 0xac, 0x67, 0x03, 0x74, 0xd6, 0xd3, 0x01, 0xc1, 0xb4, 0x3a, 0x65, 0xaf, 0xeb, 0xd2, 0xd4, + 0xff, 0x60, 0xd3, 0x6a, 0xfd, 0xf7, 0xa1, 0x96, 0x87, 0xa6, 0x55, 0xc0, 0x81, 0xca, 0x68, 0x27, + 0x2a, 0x60, 0x02, 0xda, 0x7e, 0x98, 0xdc, 0xef, 0x06, 0x71, 0x3f, 0x13, 0xb1, 0xca, 0x58, 0xc8, + 0x8f, 0x04, 0xfa, 0xf8, 0x69, 0x40, 0x7b, 0xdc, 0xe2, 0xd5, 0xe7, 0x82, 0xcd, 0x2e, 0x5b, 0xf7, + 0xf5, 0xfc, 0x82, 0x2a, 0x84, 0x38, 0x6e, 0x21, 0x50, 0xbc, 0x8b, 0xc6, 0x33, 0x9e, 0x87, 0xba, + 0xa8, 0x96, 0xf7, 0xe9, 0x22, 0xcd, 0xd9, 0xcd, 0xaf, 0x91, 0xea, 0xc8, 0x54, 0xdd, 0xb4, 0x49, + 0x58, 0x70, 0x21, 0x62, 0xf3, 0x4b, 0xc2, 0x36, 0x27, 0x87, 0x3e, 0x0f, 0xdb, 0x2f, 0x33, 0xb4, + 0xac, 0x1c, 0xd2, 0x2f, 0x33, 0x50, 0x2c, 0x5d, 0x49, 0x15, 0x23, 0x1d, 0x56, 0xfc, 0x38, 0x79, + 0xd4, 0x0f, 0xb6, 0x5b, 0x1e, 0xcf, 0xe7, 0x4e, 0xc6, 0xe2, 0x52, 0x79, 0xdd, 0x0a, 0x18, 0xb2, + 0x18, 0xb1, 0xe5, 0x09, 0xe0, 0x60, 0x0a, 0xf3, 0x3c, 0xef, 0xf0, 0x5c, 0xb0, 0x5c, 0x60, 0x53, + 0x98, 0x6f, 0x4c, 0x83, 0xa1, 0x29, 0x8c, 0x52, 0x00, 0x71, 0x2b, 0xcf, 0x83, 0x98, 0x38, 0x8a, + 0x17, 0x68, 0xc6, 0xa6, 0xce, 0x7a, 0x94, 0x3c, 0x14, 0xb7, 0x80, 0x73, 0x1e, 0x32, 0xbb, 0x5e, + 0xa6, 0x71, 0x39, 0x37, 0xa7, 0x1b, 0xc9, 0xe0, 0x31, 0x6d, 0xc7, 0x27, 0x89, 0x87, 0xcc, 0x61, + 0x0d, 0x30, 0xed, 0x8c, 0x17, 0xf1, 0xdc, 0xd4, 0x14, 0xa9, 0x81, 0x94, 0xb7, 0xaa, 0x7a, 0xbf, + 0x1b, 0x04, 0x7e, 0x5e, 0xa4, 0x09, 0xe3, 0x01, 0x3f, 0x52, 0xde, 0xc7, 0x0f, 0x04, 0x41, 0xf6, + 0x56, 0xd7, 0x5b, 0xed, 0xe8, 0x46, 0x79, 0xa2, 0xf7, 0xb1, 0x43, 0xa2, 0x79, 0x00, 0x17, 0xca, + 0xde, 0x08, 0x1e, 0x8c, 0xd1, 0xe6, 0x80, 0x36, 0x34, 0x46, 0xcd, 0xf9, 0x6b, 0x9f, 0x31, 0x8a, + 0xc1, 0xda, 0xe7, 0x8f, 0xf5, 0x18, 0xdd, 0x8d, 0x45, 0x5c, 0xe7, 0xed, 0x2f, 0x52, 0xf6, 0x4a, + 0x6f, 0x84, 0x91, 0xfa, 0x36, 0xd4, 0x50, 0xbe, 0x8b, 0x0d, 0x76, 0xc5, 0xdb, 0xbd, 0xf9, 0x80, + 0x6f, 0xbd, 0x43, 0xe8, 0xf4, 0x0d, 0xb6, 0x0a, 0xdb, 0xbd, 0xf9, 0x80, 0x6f, 0xfd, 0xe9, 0x8a, + 0x4e, 0xdf, 0xe0, 0xfb, 0x15, 0xdb, 0xbd, 0x79, 0xed, 0xfb, 0x2f, 0x9b, 0x81, 0xeb, 0x3a, 0xaf, + 0xf3, 0xb0, 0x99, 0x48, 0xaf, 0x18, 0x96, 0x4e, 0xfa, 0xf6, 0x0c, 0x1a, 0x4a, 0x27, 0x69, 0x15, + 0xe7, 0xe3, 0x71, 0x58, 0x29, 0x8e, 0x79, 0x95, 0xca, 0x4b, 0x22, 0x4f, 0x7b, 0x18, 0x6d, 0xe0, + 0xd0, 0xa6, 0x29, 0xa4, 0x64, 0x1f, 0x77, 0x7b, 0xa8, 0xbd, 0x9e, 0xff, 0x28, 0x60, 0xaf, 0x7d, + 0x4b, 0x7f, 0xab, 0x27, 0x6d, 0x1f, 0x3c, 0x7b, 0x4c, 0xf3, 0xc8, 0x70, 0xc2, 0xd0, 0x55, 0xc2, + 0x98, 0x32, 0x8f, 0x92, 0xdd, 0x67, 0xa7, 0x8f, 0xfb, 0x2b, 0x74, 0xb8, 0x1f, 0x25, 0x49, 0x3f, + 0xf7, 0xee, 0x33, 0xf7, 0xc7, 0xfd, 0x15, 0xb4, 0xfb, 0xbf, 0x6e, 0xb6, 0x35, 0xd0, 0xbf, 0x1e, + 0x83, 0x4f, 0xfa, 0x58, 0x04, 0xe3, 0xf0, 0xe9, 0xb5, 0x74, 0x74, 0x41, 0xfe, 0xbe, 0xd9, 0xbf, + 0x37, 0xa8, 0x7c, 0x47, 0x4a, 0xbe, 0x5b, 0xad, 0x87, 0x64, 0x28, 0xaa, 0x2c, 0x0c, 0x07, 0xe6, + 0x47, 0xd7, 0xd4, 0x72, 0xbe, 0x64, 0xe8, 0xc1, 0xfa, 0x5d, 0x5e, 0xa7, 0x3c, 0x21, 0xcb, 0x0e, + 0x0d, 0x0b, 0xf4, 0xf1, 0x75, 0xd5, 0xa8, 0xa1, 0xea, 0xc0, 0xf2, 0x5b, 0x3e, 0x4f, 0x7b, 0x1a, + 0xf6, 0xbe, 0xee, 0xf3, 0xe1, 0xf5, 0x94, 0x74, 0x59, 0xfe, 0x6b, 0x2d, 0xba, 0xe7, 0xb1, 0xf6, + 0x71, 0x06, 0x38, 0x74, 0xf9, 0x41, 0xc0, 0x3e, 0xa5, 0x64, 0x0a, 0xf7, 0xbb, 0xdf, 0x4c, 0xd9, + 0x7e, 0xf6, 0xcf, 0x53, 0xd9, 0x4b, 0x33, 0xc1, 0xca, 0xf6, 0x67, 0xff, 0x7c, 0xbb, 0x8a, 0x1a, + 0xd2, 0x9f, 0xfd, 0x0b, 0xe0, 0xce, 0x67, 0xff, 0x10, 0xcf, 0xe8, 0x67, 0xff, 0x50, 0x6b, 0xc1, + 0xcf, 0xfe, 0x85, 0x35, 0xa8, 0xd5, 0xa5, 0x29, 0x82, 0x3a, 0x36, 0xef, 0x65, 0xd1, 0x3f, 0x45, + 0x7f, 0x72, 0x1d, 0x15, 0x62, 0x7d, 0x55, 0x9c, 0xbc, 0xe6, 0xd9, 0xa3, 0x4d, 0xbd, 0xab, 0x9e, + 0xdb, 0xbd, 0x79, 0xed, 0xfb, 0x47, 0x7a, 0x73, 0x65, 0x56, 0x13, 0x5e, 0xca, 0x4f, 0x3e, 0x6e, + 0x86, 0x56, 0x87, 0xda, 0x82, 0xdb, 0xf3, 0x8f, 0xfa, 0xc1, 0x44, 0x75, 0x6b, 0x42, 0x77, 0xfa, + 0xb0, 0xcb, 0x10, 0xe8, 0xf2, 0xed, 0xde, 0x3c, 0xb1, 0x8c, 0x28, 0xdf, 0xaa, 0xb7, 0x7b, 0x18, + 0xf3, 0xfb, 0xfa, 0x71, 0x7f, 0x05, 0xed, 0xfe, 0x4a, 0x67, 0xad, 0xae, 0x7b, 0xd9, 0xcf, 0x5b, + 0x5d, 0xa6, 0x26, 0x5e, 0x37, 0x0f, 0xfb, 0xe2, 0xa1, 0xfc, 0xc5, 0x5d, 0x42, 0xbb, 0xf2, 0x17, + 0x74, 0x19, 0xfd, 0xf0, 0x7a, 0x4a, 0xba, 0x2c, 0xff, 0xb4, 0x16, 0xdd, 0x24, 0xcb, 0xa2, 0xe3, + 0xe0, 0xe3, 0xbe, 0x96, 0x41, 0x3c, 0x7c, 0x72, 0x6d, 0x3d, 0x5d, 0xa8, 0x7f, 0x5d, 0x8b, 0x6e, + 0x05, 0x0a, 0xa5, 0x02, 0xe4, 0x1a, 0xd6, 0xfd, 0x40, 0xf9, 0xf4, 0xfa, 0x8a, 0xd4, 0x72, 0xef, + 0xe2, 0x93, 0xf6, 0x27, 0xdc, 0x02, 0xb6, 0x27, 0xf4, 0x27, 0xdc, 0xba, 0xb5, 0xe0, 0x19, 0x53, + 0x7c, 0xd6, 0xec, 0xf9, 0xd0, 0x33, 0x26, 0x79, 0x41, 0x33, 0xf8, 0xd1, 0x16, 0x8c, 0xc3, 0x9c, + 0x3c, 0x7f, 0x5d, 0xc4, 0x79, 0x42, 0x3b, 0x51, 0xf2, 0x6e, 0x27, 0x86, 0x83, 0x67, 0x73, 0xb5, + 0xf4, 0x84, 0x37, 0xfb, 0xb8, 0x07, 0x94, 0xbe, 0x41, 0x82, 0x67, 0x73, 0x2d, 0x94, 0xf0, 0xa6, + 0xb3, 0xc6, 0x90, 0x37, 0x90, 0x2c, 0x3e, 0xec, 0x83, 0x82, 0x1d, 0x82, 0xf1, 0x66, 0x8e, 0xfc, + 0x1f, 0x85, 0xac, 0xb4, 0x8e, 0xfd, 0xb7, 0x7a, 0xd2, 0x84, 0xdb, 0x09, 0x13, 0x9f, 0xb1, 0x38, + 0x61, 0x65, 0xd0, 0xad, 0xa1, 0x7a, 0xb9, 0x75, 0x69, 0xcc, 0xed, 0x0e, 0xcf, 0x96, 0x8b, 0x5c, + 0x77, 0x26, 0xe9, 0xd6, 0xa5, 0xba, 0xdd, 0x02, 0x1a, 0x9e, 0x4a, 0x5a, 0xb7, 0x32, 0xbd, 0x7c, + 0x18, 0x36, 0xe3, 0x65, 0x95, 0x9b, 0xbd, 0x58, 0xba, 0x9e, 0x3a, 0x8c, 0x3a, 0xea, 0x09, 0x22, + 0x69, 0xab, 0x27, 0x0d, 0x8f, 0x07, 0x1d, 0xb7, 0x26, 0x9e, 0xb6, 0x3b, 0x6c, 0xb5, 0x42, 0xea, + 0x71, 0x7f, 0x05, 0x78, 0x18, 0xab, 0xa3, 0xea, 0x20, 0xad, 0xc4, 0x5e, 0x9a, 0x65, 0x83, 0xcd, + 0x40, 0x98, 0x34, 0x50, 0xf0, 0x30, 0x16, 0x81, 0x89, 0x48, 0x6e, 0x0e, 0x2f, 0xf3, 0x41, 0x97, + 0x1d, 0x49, 0xf5, 0x8a, 0x64, 0x97, 0x06, 0x07, 0x6a, 0x4e, 0x53, 0x9b, 0xda, 0x0e, 0xc3, 0x0d, + 0xd7, 0xaa, 0xf0, 0x76, 0x6f, 0x1e, 0x3c, 0xed, 0x97, 0x94, 0x5c, 0x59, 0xee, 0x52, 0x26, 0xbc, + 0x95, 0xe4, 0x5e, 0x07, 0x05, 0x0e, 0x25, 0xd5, 0x30, 0x7a, 0x99, 0x26, 0x73, 0x26, 0xd0, 0x07, + 0x55, 0x2e, 0x10, 0x7c, 0x50, 0x05, 0x40, 0xd0, 0x75, 0xea, 0xef, 0xe6, 0x34, 0x76, 0x9c, 0x60, + 0x5d, 0xa7, 0x95, 0x1d, 0x2a, 0xd4, 0x75, 0x28, 0x0d, 0x66, 0x03, 0xe3, 0x56, 0x7f, 0xe6, 0xe2, + 0x61, 0xc8, 0x0c, 0xf8, 0xd6, 0xc5, 0x66, 0x2f, 0x16, 0xac, 0x28, 0xd6, 0x61, 0xba, 0x48, 0x05, + 0xb6, 0xa2, 0x38, 0x36, 0x6a, 0x24, 0xb4, 0xa2, 0xb4, 0x51, 0xaa, 0x7a, 0x75, 0x8e, 0x30, 0x4e, + 0xc2, 0xd5, 0x53, 0x4c, 0xbf, 0xea, 0x19, 0xb6, 0xf5, 0x5c, 0x35, 0x37, 0x21, 0x23, 0x2e, 0xf4, + 0x66, 0x19, 0x89, 0x6d, 0xf9, 0xfa, 0x33, 0x04, 0x43, 0xb3, 0x0e, 0xa5, 0x00, 0x9f, 0x17, 0xd4, + 0x5c, 0xf3, 0xe8, 0xb7, 0x28, 0x58, 0x5c, 0xc6, 0xf9, 0x0c, 0xdd, 0x9c, 0x4a, 0x83, 0x2d, 0x32, + 0xb4, 0x39, 0x25, 0x35, 0xc0, 0x53, 0x7b, 0xff, 0xfd, 0x62, 0x64, 0x28, 0x98, 0x17, 0x79, 0xfd, + 0xd7, 0x8b, 0x1f, 0xf4, 0x20, 0xe1, 0x53, 0xfb, 0x06, 0x30, 0xe7, 0xee, 0xca, 0xe9, 0x07, 0x01, + 0x53, 0x3e, 0x1a, 0xda, 0x08, 0xd3, 0x2a, 0x20, 0xa8, 0x9d, 0xb3, 0xc5, 0xcf, 0xd9, 0x0a, 0x0b, + 0x6a, 0xf7, 0x90, 0xf0, 0x73, 0xb6, 0x0a, 0x05, 0x75, 0x1b, 0x05, 0x79, 0xa6, 0xbb, 0x0f, 0x5a, + 0x0f, 0xe8, 0xbb, 0x5b, 0x9f, 0x8d, 0x4e, 0x0e, 0x8c, 0x9c, 0xdd, 0xf4, 0xca, 0x7b, 0x4c, 0x81, + 0x14, 0x74, 0x37, 0xbd, 0xc2, 0x9f, 0x52, 0x6c, 0xf6, 0x62, 0xe1, 0x8d, 0x80, 0x58, 0xb0, 0xd7, + 0xcd, 0xa3, 0x7a, 0xa4, 0xb8, 0x52, 0xde, 0x7a, 0x56, 0x7f, 0xbf, 0x1b, 0xb4, 0xf7, 0x6f, 0x8f, + 0x4b, 0x3e, 0x63, 0x55, 0xa5, 0xbf, 0x00, 0xeb, 0x5f, 0x70, 0xd2, 0xb2, 0x21, 0xf8, 0xfe, 0xeb, + 0xdd, 0x30, 0xe4, 0x7c, 0xb6, 0x51, 0x89, 0xec, 0xd7, 0xa4, 0xd6, 0x51, 0xcd, 0xf6, 0x87, 0xa4, + 0x36, 0x3a, 0x39, 0x3b, 0xbc, 0xb4, 0xd4, 0xfd, 0x7c, 0xd4, 0x7d, 0x54, 0x1d, 0xfb, 0x72, 0xd4, + 0x83, 0x1e, 0xa4, 0x76, 0xf5, 0x59, 0xf4, 0xe6, 0x01, 0x9f, 0x4f, 0x58, 0x9e, 0x0c, 0xbe, 0xe7, + 0xdf, 0xe0, 0xe5, 0xf3, 0x61, 0xfd, 0x67, 0x63, 0xf4, 0x06, 0x25, 0xb6, 0x77, 0x10, 0x77, 0xd9, + 0xd9, 0x72, 0x3e, 0x11, 0xb1, 0x00, 0x77, 0x10, 0xe5, 0xdf, 0x87, 0xb5, 0x80, 0xb8, 0x83, 0xe8, + 0x01, 0xc0, 0xde, 0xb4, 0x64, 0x0c, 0xb5, 0x57, 0x0b, 0x82, 0xf6, 0x34, 0x60, 0xb3, 0x08, 0x63, + 0xaf, 0x4e, 0xd4, 0xe1, 0x9d, 0x41, 0xab, 0x23, 0xa5, 0x44, 0x16, 0xd1, 0xa6, 0x6c, 0x70, 0xab, + 0xea, 0xcb, 0xaf, 0xf9, 0x2c, 0x17, 0x8b, 0xb8, 0x5c, 0x81, 0xe0, 0xd6, 0xb5, 0x74, 0x00, 0x22, + 0xb8, 0x51, 0xd0, 0x8e, 0xda, 0xa6, 0x99, 0x67, 0x97, 0xfb, 0xbc, 0xe4, 0x4b, 0x91, 0xe6, 0x0c, + 0x7e, 0xd1, 0xc5, 0x34, 0xa8, 0xcb, 0x10, 0xa3, 0x96, 0x62, 0x6d, 0x96, 0x2b, 0x09, 0x75, 0x9d, + 0x51, 0x7e, 0x6a, 0xbf, 0x12, 0xbc, 0x84, 0x8f, 0x33, 0x95, 0x15, 0x08, 0x11, 0x59, 0x2e, 0x09, + 0x83, 0xbe, 0x3f, 0x4e, 0xf3, 0x39, 0xda, 0xf7, 0xc7, 0xee, 0x57, 0x95, 0x6f, 0xd1, 0x80, 0x1d, + 0x50, 0xaa, 0xd1, 0xd4, 0x00, 0xd0, 0xaf, 0x32, 0xa3, 0x8d, 0xee, 0x12, 0xc4, 0x80, 0xc2, 0x49, + 0xe0, 0xea, 0x8b, 0x82, 0xe5, 0x2c, 0x69, 0x2e, 0xed, 0x61, 0xae, 0x3c, 0x22, 0xe8, 0x0a, 0x92, + 0x76, 0x2e, 0x92, 0xf2, 0x93, 0x65, 0x7e, 0x5c, 0xf2, 0xf3, 0x34, 0x63, 0x25, 0x98, 0x8b, 0x94, + 0xba, 0x23, 0x27, 0xe6, 0x22, 0x8c, 0xb3, 0xb7, 0x3f, 0xa4, 0xd4, 0xfb, 0xbd, 0x88, 0x69, 0x19, + 0xcf, 0xe0, 0xed, 0x0f, 0x65, 0xa3, 0x8d, 0x11, 0x27, 0x83, 0x01, 0xdc, 0x49, 0x74, 0x94, 0xeb, + 0x7c, 0x25, 0xe3, 0x43, 0xbf, 0x4a, 0x2b, 0xbf, 0x35, 0x5c, 0x81, 0x44, 0x47, 0x9b, 0xc3, 0x48, + 0x22, 0xd1, 0x09, 0x6b, 0xd8, 0xa5, 0x44, 0x72, 0x47, 0xfa, 0x56, 0x13, 0x58, 0x4a, 0x94, 0x8d, + 0x46, 0x48, 0x2c, 0x25, 0x2d, 0x08, 0x4c, 0x48, 0xcd, 0x30, 0x98, 0xa3, 0x13, 0x92, 0x91, 0x06, + 0x27, 0x24, 0x97, 0xb2, 0x13, 0xc5, 0x38, 0x4f, 0x45, 0x1a, 0x67, 0x13, 0x26, 0x8e, 0xe3, 0x32, + 0x5e, 0x30, 0xc1, 0x4a, 0x38, 0x51, 0x68, 0x64, 0xe8, 0x31, 0xc4, 0x44, 0x41, 0xb1, 0xda, 0xe1, + 0xef, 0x45, 0x6f, 0xd7, 0xeb, 0x3e, 0xcb, 0xf5, 0x2f, 0x5d, 0x3d, 0x97, 0x3f, 0x91, 0x37, 0x78, + 0xc7, 0xd8, 0x98, 0x88, 0x92, 0xc5, 0x8b, 0xc6, 0xf6, 0x5b, 0xe6, 0xef, 0x12, 0x7c, 0xbc, 0x56, + 0xc7, 0xf3, 0x11, 0x17, 0xe9, 0x79, 0xbd, 0xcd, 0xd6, 0x2f, 0x30, 0x81, 0x78, 0x76, 0xc5, 0xc3, + 0xc0, 0xa7, 0x58, 0x30, 0xce, 0xce, 0xd3, 0xae, 0xf4, 0x84, 0x15, 0x19, 0x9c, 0xa7, 0x3d, 0x6d, + 0x09, 0x10, 0xf3, 0x34, 0x0a, 0xda, 0xc1, 0xe9, 0x8a, 0xa7, 0x2c, 0x5c, 0x99, 0x29, 0xeb, 0x57, + 0x99, 0xa9, 0xf7, 0x4e, 0x48, 0x16, 0xbd, 0x7d, 0xc8, 0x16, 0x67, 0xac, 0xac, 0x2e, 0xd2, 0x82, + 0xfa, 0x1e, 0xb2, 0x25, 0x3a, 0xbf, 0x87, 0x4c, 0xa0, 0x76, 0x25, 0xb0, 0xc0, 0xb8, 0x3a, 0x8a, + 0x17, 0x4c, 0x7e, 0x58, 0x06, 0xac, 0x04, 0x8e, 0x11, 0x07, 0x22, 0x56, 0x02, 0x12, 0x76, 0x5e, + 0x2f, 0xb3, 0xcc, 0x09, 0x9b, 0xd7, 0x11, 0x56, 0x1e, 0xc7, 0xab, 0x05, 0xcb, 0x85, 0x36, 0x09, + 0xce, 0xe4, 0x1d, 0x93, 0x38, 0x4f, 0x9c, 0xc9, 0xf7, 0xd1, 0x73, 0xa6, 0x26, 0xaf, 0xe1, 0x8f, + 0x79, 0x29, 0xd4, 0xef, 0xd8, 0x9d, 0x96, 0x19, 0x98, 0x9a, 0xfc, 0x46, 0xf5, 0x48, 0x62, 0x6a, + 0x0a, 0x6b, 0x38, 0xbf, 0x59, 0xe2, 0x95, 0xe1, 0x05, 0x2b, 0x4d, 0x9c, 0x3c, 0x5f, 0xc4, 0x69, + 0xa6, 0xa3, 0xe1, 0xfb, 0x01, 0xdb, 0x84, 0x0e, 0xf1, 0x9b, 0x25, 0x7d, 0x75, 0x9d, 0x5f, 0x79, + 0x09, 0x97, 0x10, 0x3c, 0x22, 0xe8, 0xb0, 0x4f, 0x3c, 0x22, 0xe8, 0xd6, 0xb2, 0x3b, 0x77, 0xcb, + 0x4a, 0x6e, 0x25, 0x89, 0x1d, 0x9e, 0xc0, 0xf3, 0x42, 0xc7, 0x26, 0x00, 0x89, 0x9d, 0x7b, 0x50, + 0xc1, 0xa6, 0x06, 0x16, 0xdb, 0x4b, 0xf3, 0x38, 0x4b, 0x7f, 0x0c, 0xd3, 0x7a, 0xc7, 0x4e, 0x43, + 0x10, 0xa9, 0x01, 0x4e, 0x62, 0xae, 0xf6, 0x99, 0x98, 0xa6, 0xf5, 0xd4, 0x7f, 0x3f, 0xd0, 0x6e, + 0x92, 0xe8, 0x76, 0xe5, 0x90, 0xce, 0xb7, 0x8f, 0x61, 0xb3, 0x8e, 0x8a, 0x62, 0x52, 0xaf, 0xaa, + 0x27, 0x6c, 0xc6, 0xd2, 0x42, 0x0c, 0x3e, 0x0a, 0xb7, 0x15, 0xc0, 0x89, 0x8b, 0x16, 0x3d, 0xd4, + 0x9c, 0xc7, 0xf7, 0xf5, 0x5c, 0x32, 0x51, 0x3f, 0xf0, 0x7a, 0x5a, 0xb1, 0x52, 0x27, 0x1a, 0xfb, + 0x4c, 0x80, 0xd1, 0xe9, 0x70, 0x43, 0x07, 0xac, 0x2b, 0x4a, 0x8c, 0xce, 0xb0, 0x86, 0x3d, 0xec, + 0x73, 0x38, 0xfd, 0xed, 0x00, 0x79, 0xdd, 0xf1, 0x11, 0x69, 0xcc, 0xa1, 0x88, 0xc3, 0x3e, 0x9a, + 0xb6, 0xd9, 0x5a, 0xdb, 0xed, 0x28, 0x5f, 0x8d, 0xe1, 0x95, 0x09, 0xc4, 0x92, 0xc4, 0x88, 0x6c, + 0x2d, 0x80, 0x3b, 0x87, 0xe1, 0x25, 0x8f, 0x93, 0x59, 0x5c, 0x89, 0xe3, 0x78, 0x95, 0xf1, 0x38, + 0x91, 0xeb, 0x3a, 0x3c, 0x0c, 0x6f, 0x98, 0xa1, 0x0b, 0x51, 0x87, 0xe1, 0x14, 0xec, 0x66, 0x67, + 0xf2, 0x77, 0x6b, 0xf5, 0x55, 0x52, 0x98, 0x9d, 0xc9, 0xf2, 0xc2, 0x6b, 0xa4, 0x77, 0xc3, 0x90, + 0x7d, 0x05, 0x4e, 0x89, 0x64, 0x1a, 0x72, 0x0b, 0xd3, 0xf1, 0x12, 0x90, 0xf7, 0x03, 0x84, 0xfd, + 0x2c, 0x8b, 0xfa, 0x7b, 0xf3, 0x53, 0x65, 0x42, 0x7f, 0x21, 0xfe, 0x11, 0xa6, 0xeb, 0x42, 0xde, + 0x0d, 0xb5, 0xad, 0x9e, 0xb4, 0x4d, 0x33, 0x77, 0x2e, 0x62, 0x31, 0x4a, 0x92, 0x43, 0x56, 0x21, + 0xef, 0xb3, 0xd7, 0xc2, 0xa1, 0x95, 0x12, 0x69, 0x66, 0x9b, 0xb2, 0x81, 0x5e, 0xcb, 0x9e, 0x27, + 0xa9, 0xd0, 0xb2, 0xe6, 0x82, 0xf6, 0xa3, 0xb6, 0x81, 0x36, 0x45, 0xd4, 0x8a, 0xa6, 0xed, 0x5c, + 0x5e, 0x33, 0x53, 0x3e, 0x9f, 0x67, 0x4c, 0x43, 0x27, 0x2c, 0x56, 0x1f, 0xc8, 0xdc, 0x6e, 0xdb, + 0x42, 0x41, 0x62, 0x2e, 0x0f, 0x2a, 0xd8, 0x34, 0xb2, 0xc6, 0xd4, 0x23, 0xa9, 0xa6, 0x61, 0x37, + 0xda, 0x66, 0x3c, 0x80, 0x48, 0x23, 0x51, 0xd0, 0xbe, 0x76, 0x57, 0x8b, 0xf7, 0x59, 0xd3, 0x12, + 0xf0, 0x0b, 0x5c, 0x52, 0xd9, 0x11, 0x13, 0xaf, 0xdd, 0x21, 0x98, 0xdd, 0x27, 0x00, 0x0f, 0xcf, + 0x56, 0xe3, 0x04, 0xee, 0x13, 0xa0, 0xbe, 0x64, 0x88, 0x7d, 0x02, 0xc5, 0xfa, 0x5d, 0x67, 0xce, + 0xbd, 0x0e, 0xe2, 0xca, 0x56, 0x0e, 0xe9, 0x3a, 0x14, 0x0c, 0x75, 0x1d, 0xa5, 0xe0, 0x37, 0xa9, + 0x7b, 0xb4, 0x86, 0x34, 0x29, 0x76, 0xae, 0xb6, 0xde, 0x85, 0xd9, 0xdc, 0xbf, 0x16, 0x9e, 0xb0, + 0x38, 0x31, 0x15, 0x43, 0x74, 0x5d, 0x39, 0x91, 0xfb, 0x63, 0x9c, 0x76, 0xf2, 0x87, 0xd1, 0x40, + 0x55, 0xa3, 0x74, 0xdd, 0xdc, 0xc2, 0x8a, 0x58, 0x13, 0xc4, 0x44, 0xe5, 0x13, 0x4e, 0xe2, 0xe6, + 0x75, 0xd1, 0x94, 0x6b, 0x07, 0xfa, 0xb5, 0xd0, 0x0a, 0x24, 0x6e, 0x7e, 0xb3, 0xb7, 0x68, 0x22, + 0x71, 0xeb, 0xd6, 0x72, 0x3e, 0x46, 0x04, 0xba, 0x6c, 0xaf, 0xe4, 0x0b, 0x58, 0xa6, 0x4f, 0x83, + 0xdd, 0x83, 0x68, 0x10, 0x1f, 0x23, 0xea, 0xa7, 0x69, 0xd7, 0x20, 0x73, 0x76, 0x20, 0xaf, 0xa7, + 0xe1, 0xbf, 0x82, 0xa2, 0x84, 0xc4, 0x1a, 0xd4, 0x82, 0x9c, 0x9f, 0x68, 0x1d, 0xbf, 0x2c, 0x53, + 0x91, 0xe6, 0xf3, 0x29, 0xe7, 0x19, 0x3c, 0xb2, 0x1c, 0x8d, 0x87, 0xae, 0x94, 0xfa, 0x89, 0xd6, + 0x16, 0x65, 0x97, 0xb8, 0xd1, 0x78, 0xb4, 0x14, 0xfc, 0x3c, 0xcd, 0x32, 0x10, 0x39, 0xa3, 0xf1, + 0xb0, 0x91, 0x10, 0x91, 0xe3, 0x13, 0xce, 0x0f, 0x8b, 0x8e, 0xe5, 0xe9, 0xbf, 0x3e, 0x01, 0xbd, + 0x03, 0x75, 0x1c, 0x21, 0xf5, 0xc3, 0xa2, 0x10, 0x72, 0x7e, 0x28, 0x75, 0x8c, 0xfd, 0x94, 0xcb, + 0x26, 0x54, 0x47, 0x20, 0xea, 0x87, 0x52, 0x29, 0xd8, 0x79, 0x27, 0xf9, 0x78, 0x59, 0x5d, 0xf8, + 0x47, 0x06, 0x6a, 0x73, 0xa8, 0x3e, 0xdb, 0xfa, 0x14, 0xfc, 0xa0, 0x90, 0xcf, 0x0e, 0x3d, 0x98, + 0xb8, 0x9e, 0xd6, 0xa9, 0xa4, 0x0a, 0xf3, 0xec, 0xfd, 0xff, 0xf9, 0xea, 0xc6, 0xda, 0xcf, 0xbe, + 0xba, 0xb1, 0xf6, 0x7f, 0x5f, 0xdd, 0x58, 0xfb, 0xe9, 0xd7, 0x37, 0xde, 0xf8, 0xd9, 0xd7, 0x37, + 0xde, 0xf8, 0xdf, 0xaf, 0x6f, 0xbc, 0xf1, 0xe5, 0x9b, 0x95, 0xca, 0xcd, 0xce, 0x7e, 0xb1, 0x28, + 0xb9, 0xe0, 0x4f, 0xff, 0x3f, 0x00, 0x00, 0xff, 0xff, 0xbe, 0x30, 0xcf, 0xb5, 0xee, 0x80, 0x00, + 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -446,6 +447,7 @@ type ClientCommandsClient interface { // *** SpaceDelete(ctx context.Context, in *pb.RpcSpaceDeleteRequest, opts ...grpc.CallOption) (*pb.RpcSpaceDeleteResponse, error) SpaceInviteGenerate(ctx context.Context, in *pb.RpcSpaceInviteGenerateRequest, opts ...grpc.CallOption) (*pb.RpcSpaceInviteGenerateResponse, error) + SpaceInviteChange(ctx context.Context, in *pb.RpcSpaceInviteChangeRequest, opts ...grpc.CallOption) (*pb.RpcSpaceInviteChangeResponse, error) SpaceInviteGetCurrent(ctx context.Context, in *pb.RpcSpaceInviteGetCurrentRequest, opts ...grpc.CallOption) (*pb.RpcSpaceInviteGetCurrentResponse, error) SpaceInviteGetGuest(ctx context.Context, in *pb.RpcSpaceInviteGetGuestRequest, opts ...grpc.CallOption) (*pb.RpcSpaceInviteGetGuestResponse, error) SpaceInviteRevoke(ctx context.Context, in *pb.RpcSpaceInviteRevokeRequest, opts ...grpc.CallOption) (*pb.RpcSpaceInviteRevokeResponse, error) @@ -1095,6 +1097,15 @@ func (c *clientCommandsClient) SpaceInviteGenerate(ctx context.Context, in *pb.R return out, nil } +func (c *clientCommandsClient) SpaceInviteChange(ctx context.Context, in *pb.RpcSpaceInviteChangeRequest, opts ...grpc.CallOption) (*pb.RpcSpaceInviteChangeResponse, error) { + out := new(pb.RpcSpaceInviteChangeResponse) + err := c.cc.Invoke(ctx, "/anytype.ClientCommands/SpaceInviteChange", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *clientCommandsClient) SpaceInviteGetCurrent(ctx context.Context, in *pb.RpcSpaceInviteGetCurrentRequest, opts ...grpc.CallOption) (*pb.RpcSpaceInviteGetCurrentResponse, error) { out := new(pb.RpcSpaceInviteGetCurrentResponse) err := c.cc.Invoke(ctx, "/anytype.ClientCommands/SpaceInviteGetCurrent", in, out, opts...) @@ -3486,6 +3497,7 @@ type ClientCommandsServer interface { // *** SpaceDelete(context.Context, *pb.RpcSpaceDeleteRequest) *pb.RpcSpaceDeleteResponse SpaceInviteGenerate(context.Context, *pb.RpcSpaceInviteGenerateRequest) *pb.RpcSpaceInviteGenerateResponse + SpaceInviteChange(context.Context, *pb.RpcSpaceInviteChangeRequest) *pb.RpcSpaceInviteChangeResponse SpaceInviteGetCurrent(context.Context, *pb.RpcSpaceInviteGetCurrentRequest) *pb.RpcSpaceInviteGetCurrentResponse SpaceInviteGetGuest(context.Context, *pb.RpcSpaceInviteGetGuestRequest) *pb.RpcSpaceInviteGetGuestResponse SpaceInviteRevoke(context.Context, *pb.RpcSpaceInviteRevokeRequest) *pb.RpcSpaceInviteRevokeResponse @@ -3915,6 +3927,9 @@ func (*UnimplementedClientCommandsServer) SpaceDelete(ctx context.Context, req * func (*UnimplementedClientCommandsServer) SpaceInviteGenerate(ctx context.Context, req *pb.RpcSpaceInviteGenerateRequest) *pb.RpcSpaceInviteGenerateResponse { return nil } +func (*UnimplementedClientCommandsServer) SpaceInviteChange(ctx context.Context, req *pb.RpcSpaceInviteChangeRequest) *pb.RpcSpaceInviteChangeResponse { + return nil +} func (*UnimplementedClientCommandsServer) SpaceInviteGetCurrent(ctx context.Context, req *pb.RpcSpaceInviteGetCurrentRequest) *pb.RpcSpaceInviteGetCurrentResponse { return nil } @@ -5342,6 +5357,24 @@ func _ClientCommands_SpaceInviteGenerate_Handler(srv interface{}, ctx context.Co return interceptor(ctx, in, info, handler) } +func _ClientCommands_SpaceInviteChange_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(pb.RpcSpaceInviteChangeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClientCommandsServer).SpaceInviteChange(ctx, in), nil + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/anytype.ClientCommands/SpaceInviteChange", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClientCommandsServer).SpaceInviteChange(ctx, req.(*pb.RpcSpaceInviteChangeRequest)), nil + } + return interceptor(ctx, in, info, handler) +} + func _ClientCommands_SpaceInviteGetCurrent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(pb.RpcSpaceInviteGetCurrentRequest) if err := dec(in); err != nil { @@ -10138,6 +10171,10 @@ var _ClientCommands_serviceDesc = grpc.ServiceDesc{ MethodName: "SpaceInviteGenerate", Handler: _ClientCommands_SpaceInviteGenerate_Handler, }, + { + MethodName: "SpaceInviteChange", + Handler: _ClientCommands_SpaceInviteChange_Handler, + }, { MethodName: "SpaceInviteGetCurrent", Handler: _ClientCommands_SpaceInviteGetCurrent_Handler, From de4fe0833863aad9dcba8412f55ed16726c1a93f Mon Sep 17 00:00:00 2001 From: Mikhail Rakhmanov Date: Thu, 15 May 2025 10:18:19 +0200 Subject: [PATCH 039/164] GO-4400 Enrich invite info responses with type and permissions --- core/space.go | 4 + docs/proto.md | 4 + go.mod | 2 +- go.sum | 2 + pb/commands.pb.go | 2473 ++++++++++++++++++++------------------ pb/protos/commands.proto | 4 + 6 files changed, 1322 insertions(+), 1167 deletions(-) diff --git a/core/space.go b/core/space.go index f79e8691c..2e8cb61b8 100644 --- a/core/space.go +++ b/core/space.go @@ -83,6 +83,8 @@ func (mw *Middleware) SpaceInviteGenerate(cctx context.Context, req *pb.RpcSpace return &pb.RpcSpaceInviteGenerateResponse{ InviteCid: inviteInfo.InviteFileCid, InviteFileKey: inviteInfo.InviteFileKey, + InviteType: model.InviteType(inviteInfo.InviteType), + Permissions: domain.ConvertAclPermissions(inviteInfo.Permissions), } } @@ -124,6 +126,8 @@ func (mw *Middleware) SpaceInviteGetCurrent(cctx context.Context, req *pb.RpcSpa return &pb.RpcSpaceInviteGetCurrentResponse{ InviteCid: inviteInfo.InviteFileCid, InviteFileKey: inviteInfo.InviteFileKey, + InviteType: model.InviteType(inviteInfo.InviteType), + Permissions: domain.ConvertAclPermissions(inviteInfo.Permissions), } } diff --git a/docs/proto.md b/docs/proto.md index a9b7bcbf4..3ec28e9f5 100644 --- a/docs/proto.md +++ b/docs/proto.md @@ -19946,6 +19946,8 @@ Available undo/redo operations | error | [Rpc.Space.InviteGenerate.Response.Error](#anytype-Rpc-Space-InviteGenerate-Response-Error) | | | | inviteCid | [string](#string) | | | | inviteFileKey | [string](#string) | | | +| inviteType | [model.InviteType](#anytype-model-InviteType) | | | +| permissions | [model.ParticipantPermissions](#anytype-model-ParticipantPermissions) | | | @@ -20004,6 +20006,8 @@ Available undo/redo operations | error | [Rpc.Space.InviteGetCurrent.Response.Error](#anytype-Rpc-Space-InviteGetCurrent-Response-Error) | | | | inviteCid | [string](#string) | | | | inviteFileKey | [string](#string) | | | +| inviteType | [model.InviteType](#anytype-model-InviteType) | | | +| permissions | [model.ParticipantPermissions](#anytype-model-ParticipantPermissions) | | | diff --git a/go.mod b/go.mod index a1ef3bd0e..26ecd062d 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/VividCortex/ewma v1.2.0 github.com/adrium/goheif v0.0.0-20230113233934-ca402e77a786 github.com/anyproto/any-store v0.2.0 - github.com/anyproto/any-sync v0.7.6-0.20250513194226-2f661565dcca + github.com/anyproto/any-sync v0.7.6-0.20250515080349-03fd12ac2a3e github.com/anyproto/anytype-publish-server/publishclient v0.0.0-20250131145601-de288583ff2a github.com/anyproto/anytype-push-server/pushclient v0.0.0-20250402124745-6451298047f7 github.com/anyproto/go-chash v0.1.0 diff --git a/go.sum b/go.sum index 0a57189fc..aa60f704f 100644 --- a/go.sum +++ b/go.sum @@ -86,6 +86,8 @@ github.com/anyproto/any-sync v0.7.6-0.20250513132905-854823d81e74 h1:Io1SWrvvWjn github.com/anyproto/any-sync v0.7.6-0.20250513132905-854823d81e74/go.mod h1:G6i3PT6pN6lcC5rim5Ed7ppUPuQgU5PyHgiqskrggL0= github.com/anyproto/any-sync v0.7.6-0.20250513194226-2f661565dcca h1:DXXRxTfKBA8q22wCDvng182WjRjeAQqmGaZs/hXdMyo= github.com/anyproto/any-sync v0.7.6-0.20250513194226-2f661565dcca/go.mod h1:G6i3PT6pN6lcC5rim5Ed7ppUPuQgU5PyHgiqskrggL0= +github.com/anyproto/any-sync v0.7.6-0.20250515080349-03fd12ac2a3e h1:FIZDZYAVB5ZJOKZZI9cJYcfKeyH51MEOLTqbVC809Js= +github.com/anyproto/any-sync v0.7.6-0.20250515080349-03fd12ac2a3e/go.mod h1:G6i3PT6pN6lcC5rim5Ed7ppUPuQgU5PyHgiqskrggL0= github.com/anyproto/anytype-publish-server/publishclient v0.0.0-20250131145601-de288583ff2a h1:ZZM+0OUCQMWSLSflpkf0ZMVo3V76qEDDIXPpQOClNs0= github.com/anyproto/anytype-publish-server/publishclient v0.0.0-20250131145601-de288583ff2a/go.mod h1:4fkueCZcGniSMXkrwESO8zzERrh/L7WHimRNWecfGM0= github.com/anyproto/anytype-push-server/pushclient v0.0.0-20250402124745-6451298047f7 h1:oKkEnxnN1jeB1Ty20CTMH3w4WkCrV8dOQy1Myetg7XA= diff --git a/pb/commands.pb.go b/pb/commands.pb.go index 29078ac9a..2d069d04c 100644 --- a/pb/commands.pb.go +++ b/pb/commands.pb.go @@ -11391,6 +11391,8 @@ type RpcSpaceInviteGenerateResponse struct { Error *RpcSpaceInviteGenerateResponseError `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` InviteCid string `protobuf:"bytes,2,opt,name=inviteCid,proto3" json:"inviteCid,omitempty"` InviteFileKey string `protobuf:"bytes,3,opt,name=inviteFileKey,proto3" json:"inviteFileKey,omitempty"` + InviteType model.InviteType `protobuf:"varint,4,opt,name=inviteType,proto3,enum=anytype.model.InviteType" json:"inviteType,omitempty"` + Permissions model.ParticipantPermissions `protobuf:"varint,5,opt,name=permissions,proto3,enum=anytype.model.ParticipantPermissions" json:"permissions,omitempty"` } func (m *RpcSpaceInviteGenerateResponse) Reset() { *m = RpcSpaceInviteGenerateResponse{} } @@ -11447,6 +11449,20 @@ func (m *RpcSpaceInviteGenerateResponse) GetInviteFileKey() string { return "" } +func (m *RpcSpaceInviteGenerateResponse) GetInviteType() model.InviteType { + if m != nil { + return m.InviteType + } + return model.InviteType_Member +} + +func (m *RpcSpaceInviteGenerateResponse) GetPermissions() model.ParticipantPermissions { + if m != nil { + return m.Permissions + } + return model.ParticipantPermissions_Reader +} + type RpcSpaceInviteGenerateResponseError struct { Code RpcSpaceInviteGenerateResponseErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=anytype.RpcSpaceInviteGenerateResponseErrorCode" json:"code,omitempty"` Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` @@ -11759,6 +11775,8 @@ type RpcSpaceInviteGetCurrentResponse struct { Error *RpcSpaceInviteGetCurrentResponseError `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` InviteCid string `protobuf:"bytes,2,opt,name=inviteCid,proto3" json:"inviteCid,omitempty"` InviteFileKey string `protobuf:"bytes,3,opt,name=inviteFileKey,proto3" json:"inviteFileKey,omitempty"` + InviteType model.InviteType `protobuf:"varint,4,opt,name=inviteType,proto3,enum=anytype.model.InviteType" json:"inviteType,omitempty"` + Permissions model.ParticipantPermissions `protobuf:"varint,5,opt,name=permissions,proto3,enum=anytype.model.ParticipantPermissions" json:"permissions,omitempty"` } func (m *RpcSpaceInviteGetCurrentResponse) Reset() { *m = RpcSpaceInviteGetCurrentResponse{} } @@ -11815,6 +11833,20 @@ func (m *RpcSpaceInviteGetCurrentResponse) GetInviteFileKey() string { return "" } +func (m *RpcSpaceInviteGetCurrentResponse) GetInviteType() model.InviteType { + if m != nil { + return m.InviteType + } + return model.InviteType_Member +} + +func (m *RpcSpaceInviteGetCurrentResponse) GetPermissions() model.ParticipantPermissions { + if m != nil { + return m.Permissions + } + return model.ParticipantPermissions_Reader +} + type RpcSpaceInviteGetCurrentResponseError struct { Code RpcSpaceInviteGetCurrentResponseErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=anytype.RpcSpaceInviteGetCurrentResponseErrorCode" json:"code,omitempty"` Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` @@ -77427,919 +77459,920 @@ func init() { func init() { proto.RegisterFile("pb/protos/commands.proto", fileDescriptor_8261c968b2e6f45c) } var fileDescriptor_8261c968b2e6f45c = []byte{ - // 21824 bytes of a gzipped FileDescriptorProto + // 21840 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7b, 0x98, 0x24, 0x49, 0x59, 0x2f, 0x3c, 0x95, 0x59, 0x55, 0x5d, 0x1d, 0x7d, 0x99, 0x9c, 0xdc, 0xd9, 0x61, 0x36, 0x77, 0x19, 0x96, 0x61, 0x59, 0xd6, 0x65, 0xe9, 0x85, 0x05, 0x91, 0x5d, 0x16, 0x96, 0xea, 0xaa, 0xec, - 0xee, 0xda, 0xad, 0xae, 0x6a, 0xb2, 0xaa, 0x67, 0x58, 0xcf, 0xe1, 0x6b, 0x73, 0xaa, 0xa2, 0xbb, - 0x73, 0xa7, 0x3a, 0xb3, 0xc8, 0xcc, 0x9e, 0xd9, 0xe1, 0x7b, 0xce, 0x77, 0x44, 0x44, 0x40, 0x44, - 0x44, 0x45, 0x44, 0xe4, 0x2e, 0x20, 0x20, 0xf7, 0x9b, 0x80, 0x5c, 0xe4, 0x22, 0x88, 0xa8, 0x28, - 0x2a, 0x17, 0xe5, 0x11, 0xbc, 0xe2, 0x39, 0x47, 0x3d, 0xf8, 0x29, 0x88, 0xca, 0xf1, 0x7b, 0xe2, - 0x92, 0x99, 0x11, 0xd5, 0x95, 0x59, 0x91, 0xd5, 0x95, 0xd5, 0x8b, 0x7e, 0x7f, 0x55, 0x65, 0x64, - 0xe4, 0x1b, 0x6f, 0xbc, 0xbf, 0x37, 0x22, 0xde, 0x88, 0x78, 0xe3, 0x0d, 0x70, 0xba, 0x7f, 0xe1, - 0xd6, 0xbe, 0xeb, 0xf8, 0x8e, 0x77, 0x6b, 0xc7, 0xd9, 0xdb, 0x33, 0xed, 0xae, 0xb7, 0x84, 0x9f, - 0xd5, 0x19, 0xd3, 0xbe, 0xe2, 0x5f, 0xe9, 0x43, 0xed, 0x86, 0xfe, 0xc5, 0x9d, 0x5b, 0x7b, 0xd6, - 0x85, 0x5b, 0xfb, 0x17, 0x6e, 0xdd, 0x73, 0xba, 0xb0, 0x17, 0x7c, 0x80, 0x1f, 0x68, 0x76, 0xed, - 0xa6, 0xb8, 0x5c, 0x3d, 0xa7, 0x63, 0xf6, 0x3c, 0xdf, 0x71, 0x21, 0xcd, 0x79, 0x2a, 0x2a, 0x12, - 0x5e, 0x82, 0xb6, 0x1f, 0x50, 0xb8, 0x6e, 0xc7, 0x71, 0x76, 0x7a, 0x90, 0xbc, 0xbb, 0xb0, 0xbf, - 0x7d, 0xab, 0xe7, 0xbb, 0xfb, 0x1d, 0x9f, 0xbe, 0xbd, 0x7e, 0xf0, 0x6d, 0x17, 0x7a, 0x1d, 0xd7, - 0xea, 0xfb, 0x8e, 0x4b, 0x72, 0x9c, 0x7d, 0xf6, 0x5f, 0x97, 0x80, 0x6c, 0xf4, 0x3b, 0xda, 0xb7, - 0x66, 0x80, 0x5c, 0xee, 0xf7, 0xb5, 0x4f, 0x49, 0x00, 0xac, 0x42, 0xff, 0x1c, 0x74, 0x3d, 0xcb, - 0xb1, 0xb5, 0xe3, 0x60, 0xc6, 0x80, 0xcf, 0xd8, 0x87, 0x9e, 0x7f, 0x47, 0xfe, 0x79, 0x7f, 0x25, - 0xe7, 0xb4, 0xd7, 0x4b, 0xa0, 0x64, 0x40, 0xaf, 0xef, 0xd8, 0x1e, 0x54, 0x9f, 0x02, 0x0a, 0xd0, - 0x75, 0x1d, 0xf7, 0x74, 0xee, 0xfa, 0xdc, 0x4d, 0x73, 0xb7, 0xdd, 0xbc, 0x44, 0xab, 0xbf, 0x64, - 0xf4, 0x3b, 0x4b, 0xe5, 0x7e, 0x7f, 0x29, 0xa2, 0xb4, 0x14, 0x7c, 0xb4, 0xa4, 0xa3, 0x2f, 0x0c, - 0xf2, 0xa1, 0x7a, 0x1a, 0xcc, 0x5c, 0x22, 0x19, 0x4e, 0x4b, 0xd7, 0xe7, 0x6e, 0x9a, 0x35, 0x82, - 0x47, 0xf4, 0xa6, 0x0b, 0x7d, 0xd3, 0xea, 0x79, 0xa7, 0x65, 0xf2, 0x86, 0x3e, 0x6a, 0xaf, 0xcd, - 0x81, 0x02, 0x26, 0xa2, 0x56, 0x40, 0xbe, 0xe3, 0x74, 0x21, 0x2e, 0x7e, 0xf1, 0xb6, 0x5b, 0xc5, - 0x8b, 0x5f, 0xaa, 0x38, 0x5d, 0x68, 0xe0, 0x8f, 0xd5, 0xeb, 0xc1, 0x5c, 0x20, 0x96, 0x88, 0x0d, - 0x36, 0xe9, 0xec, 0x6d, 0x20, 0x8f, 0xf2, 0xab, 0x25, 0x90, 0x6f, 0x6c, 0xd6, 0xeb, 0xca, 0x31, - 0xf5, 0x04, 0x58, 0xd8, 0x6c, 0xdc, 0xd3, 0x68, 0x9e, 0x6f, 0x6c, 0xe9, 0x86, 0xd1, 0x34, 0x94, - 0x9c, 0xba, 0x00, 0x66, 0x97, 0xcb, 0xd5, 0xad, 0x5a, 0x63, 0x63, 0xb3, 0xad, 0x48, 0xda, 0x2b, - 0x65, 0xb0, 0xd8, 0x82, 0x7e, 0x15, 0x5e, 0xb2, 0x3a, 0xb0, 0xe5, 0x9b, 0x3e, 0xd4, 0x5e, 0x94, - 0x0b, 0x85, 0xa9, 0x6e, 0xa2, 0x42, 0xc3, 0x57, 0xb4, 0x02, 0x8f, 0x3d, 0x50, 0x01, 0x9e, 0xc2, - 0x12, 0xfd, 0x7a, 0x89, 0x49, 0x33, 0x58, 0x3a, 0x67, 0x1f, 0x05, 0xe6, 0x98, 0x77, 0xea, 0x22, - 0x00, 0xcb, 0xe5, 0xca, 0x3d, 0xab, 0x46, 0x73, 0xb3, 0x51, 0x55, 0x8e, 0xa1, 0xe7, 0x95, 0xa6, - 0xa1, 0xd3, 0xe7, 0x9c, 0xf6, 0x9d, 0x1c, 0x03, 0x66, 0x95, 0x07, 0x73, 0x69, 0x34, 0x33, 0x43, - 0x00, 0xd5, 0xde, 0x10, 0x82, 0xb3, 0xca, 0x81, 0xf3, 0xd8, 0x74, 0xe4, 0xb2, 0x07, 0xe8, 0x39, - 0x12, 0x28, 0xb5, 0x76, 0xf7, 0xfd, 0xae, 0x73, 0xd9, 0xd6, 0x66, 0x43, 0x64, 0xb4, 0xbf, 0x65, - 0x65, 0xf2, 0x64, 0x5e, 0x26, 0x37, 0x1d, 0xac, 0x04, 0xa5, 0x10, 0x23, 0x8d, 0x57, 0x87, 0xd2, - 0x28, 0x73, 0xd2, 0x78, 0x94, 0x28, 0xa1, 0xec, 0xe5, 0xf0, 0xde, 0xa7, 0x80, 0x42, 0xab, 0x6f, - 0x76, 0xa0, 0xf6, 0x39, 0x19, 0xcc, 0xd7, 0xa1, 0x79, 0x09, 0x96, 0xfb, 0x7d, 0xd7, 0xb9, 0x04, - 0xb5, 0x4a, 0xa4, 0xaf, 0xa7, 0xc1, 0x8c, 0x87, 0x32, 0xd5, 0xba, 0xb8, 0x06, 0xb3, 0x46, 0xf0, - 0xa8, 0x9e, 0x01, 0xc0, 0xea, 0x42, 0xdb, 0xb7, 0x7c, 0x0b, 0x7a, 0xa7, 0xa5, 0xeb, 0xe5, 0x9b, - 0x66, 0x0d, 0x26, 0x45, 0xfb, 0x96, 0x24, 0xaa, 0x63, 0x98, 0x8b, 0x25, 0x96, 0x83, 0x18, 0xa9, - 0xbe, 0x4e, 0x12, 0xd1, 0xb1, 0x91, 0xe4, 0xd2, 0xc9, 0xf6, 0x6d, 0xb9, 0xf4, 0xc2, 0x45, 0x39, - 0x1a, 0xcd, 0xad, 0xd6, 0x66, 0x65, 0x6d, 0xab, 0xb5, 0x51, 0xae, 0xe8, 0x0a, 0x54, 0x4f, 0x02, - 0x05, 0xff, 0xdd, 0xaa, 0xb5, 0xb6, 0xaa, 0x7a, 0x5d, 0x6f, 0xeb, 0x55, 0x65, 0x5b, 0x55, 0xc1, - 0xa2, 0xa1, 0x3f, 0x75, 0x53, 0x6f, 0xb5, 0xb7, 0x56, 0xca, 0xb5, 0xba, 0x5e, 0x55, 0x76, 0xd0, - 0xc7, 0xf5, 0xda, 0x7a, 0xad, 0xbd, 0x65, 0xe8, 0xe5, 0xca, 0x9a, 0x5e, 0x55, 0x76, 0xd5, 0x07, - 0x81, 0xab, 0x1a, 0xcd, 0xad, 0xf2, 0xc6, 0x86, 0xd1, 0x3c, 0xa7, 0x6f, 0xd1, 0x2f, 0x5a, 0x8a, - 0x45, 0x0a, 0x6a, 0x6f, 0xb5, 0xd6, 0xca, 0x86, 0x5e, 0x5e, 0xae, 0xeb, 0xca, 0x7d, 0xda, 0xb3, - 0x65, 0xb0, 0xb0, 0x6e, 0x5e, 0x84, 0xad, 0x5d, 0xd3, 0x85, 0xe6, 0x85, 0x1e, 0xd4, 0x1e, 0x26, - 0x80, 0xa7, 0xf6, 0x39, 0x16, 0x2f, 0x9d, 0xc7, 0xeb, 0xd6, 0x21, 0x02, 0xe6, 0x8a, 0x88, 0x01, - 0xec, 0x9f, 0xc3, 0x66, 0xb0, 0xc6, 0x01, 0xf6, 0xb8, 0x94, 0xf4, 0xd2, 0x21, 0xf6, 0x23, 0x0f, - 0x00, 0xc4, 0xb4, 0xdf, 0x93, 0xc1, 0x7c, 0xcd, 0xbe, 0x64, 0xf9, 0xb0, 0xb2, 0x6b, 0xda, 0x3b, - 0x50, 0xeb, 0x89, 0x34, 0xaa, 0x55, 0x30, 0xd7, 0x87, 0xee, 0x9e, 0xe5, 0xa1, 0xb1, 0xcb, 0xc3, - 0x95, 0x5b, 0xbc, 0xed, 0xe1, 0xa1, 0xb4, 0xb0, 0xad, 0xb0, 0xb4, 0x61, 0xba, 0xbe, 0xd5, 0xb1, - 0xfa, 0xa6, 0xed, 0x6f, 0x44, 0x99, 0x0d, 0xf6, 0x4b, 0xed, 0xf7, 0x53, 0xb6, 0x3e, 0x96, 0xd5, - 0x18, 0x30, 0xff, 0x3d, 0x27, 0xde, 0xfa, 0x12, 0xc8, 0xa5, 0xc3, 0xf2, 0xc7, 0xa7, 0x8e, 0xe5, - 0x35, 0xe0, 0xea, 0x5a, 0xa3, 0xd2, 0x34, 0x0c, 0xbd, 0xd2, 0xde, 0xda, 0xd0, 0x8d, 0xf5, 0x5a, - 0xab, 0x55, 0x6b, 0x36, 0x5a, 0x8a, 0xa5, 0xfd, 0x59, 0x1e, 0x2c, 0x92, 0x9a, 0xad, 0x42, 0x1b, - 0xba, 0x68, 0x6c, 0x7f, 0x63, 0x4e, 0x04, 0xd6, 0xdb, 0x01, 0xb0, 0xf0, 0x77, 0xed, 0x2b, 0x7d, - 0x48, 0x51, 0xbd, 0x66, 0x00, 0xd5, 0x5a, 0x98, 0xc1, 0x60, 0x32, 0x0f, 0x6a, 0x84, 0x3c, 0xb6, - 0x46, 0xbc, 0x5e, 0x66, 0x34, 0x62, 0x85, 0xd7, 0x88, 0x47, 0xc7, 0x42, 0x18, 0x54, 0x34, 0xc6, - 0x8c, 0xbb, 0x0e, 0xcc, 0x12, 0x5e, 0x2b, 0x56, 0x97, 0xc2, 0x17, 0x25, 0xa8, 0x37, 0x80, 0x05, - 0xf2, 0xb0, 0x62, 0xf5, 0xe0, 0x3d, 0xf0, 0x0a, 0x35, 0xe8, 0xf8, 0x44, 0xed, 0x27, 0xc2, 0x5e, - 0xbd, 0xc6, 0xe9, 0xd5, 0xf7, 0xa7, 0x65, 0x2a, 0x9d, 0x66, 0xbd, 0xe4, 0x81, 0xd0, 0xaf, 0x1f, - 0xe8, 0xbe, 0x2d, 0xed, 0xbb, 0x12, 0x98, 0x6b, 0xf9, 0x4e, 0x1f, 0xf5, 0x85, 0x96, 0xbd, 0x23, - 0xd6, 0x79, 0x7f, 0x86, 0x6d, 0xee, 0x15, 0x1e, 0xdc, 0x47, 0x0d, 0x91, 0x23, 0x53, 0x40, 0x4c, - 0x6b, 0xff, 0x56, 0xd8, 0xda, 0x57, 0x38, 0x54, 0x6e, 0x4b, 0x45, 0xed, 0x7b, 0xb0, 0xe3, 0x7e, - 0x89, 0x0c, 0x94, 0x40, 0xcd, 0xfc, 0xca, 0xbe, 0xeb, 0x42, 0xdb, 0x17, 0x03, 0xe1, 0x8f, 0x59, - 0x10, 0xd6, 0x78, 0x10, 0x6e, 0x4b, 0x50, 0xe6, 0xa0, 0x94, 0x0c, 0xdb, 0xd8, 0xc7, 0x42, 0x34, - 0xef, 0xe1, 0xd0, 0xfc, 0x81, 0xf4, 0x6c, 0xa5, 0x83, 0x74, 0x6d, 0x0c, 0x44, 0x4f, 0x02, 0x05, - 0x19, 0x3b, 0x95, 0x76, 0xed, 0x9c, 0xbe, 0x55, 0x6b, 0x9c, 0xab, 0xb5, 0x75, 0x05, 0x6a, 0x2f, - 0x96, 0xa3, 0xce, 0xd7, 0x5f, 0xc5, 0x26, 0xbb, 0x10, 0x2a, 0x5f, 0x96, 0xc6, 0xeb, 0xf7, 0x48, - 0x19, 0x53, 0xc1, 0x44, 0xbc, 0xdf, 0x1b, 0xca, 0x54, 0x3a, 0x44, 0xee, 0x1e, 0x03, 0x91, 0x53, - 0x40, 0xad, 0x35, 0xce, 0x95, 0xeb, 0xb5, 0x2a, 0x69, 0x63, 0x5b, 0xed, 0x7b, 0x37, 0x10, 0x26, - 0x3f, 0x13, 0x1a, 0x39, 0x06, 0xbc, 0xe4, 0x5c, 0x14, 0xb4, 0x34, 0xbf, 0x3a, 0x96, 0x6d, 0x42, - 0x4a, 0x88, 0xe9, 0xad, 0x7e, 0x5c, 0x4a, 0x6b, 0x9b, 0x0c, 0x25, 0xf7, 0x40, 0x1a, 0x41, 0x0e, - 0x74, 0x4d, 0x3b, 0x43, 0x7a, 0xb0, 0xa1, 0x23, 0xc8, 0x27, 0xf2, 0x00, 0x90, 0x4a, 0x9e, 0xb3, - 0xe0, 0x65, 0x6d, 0x3d, 0xc2, 0x84, 0x53, 0xdb, 0xdc, 0x48, 0xb5, 0x95, 0x86, 0xa9, 0xed, 0x5f, - 0xb2, 0x76, 0xc4, 0x32, 0x8f, 0xde, 0x2d, 0xb1, 0xe2, 0x46, 0x9c, 0xc4, 0x2f, 0x05, 0x05, 0x8a, - 0x22, 0xf1, 0x66, 0xd3, 0x75, 0x60, 0x16, 0xff, 0x6d, 0x98, 0x7b, 0x90, 0xb6, 0xa1, 0x28, 0x41, - 0x3d, 0x0b, 0xe6, 0x49, 0xc6, 0x8e, 0x63, 0xa3, 0xfa, 0xe4, 0x71, 0x06, 0x2e, 0x0d, 0x81, 0xd8, - 0x71, 0xa1, 0xe9, 0x3b, 0x2e, 0xa6, 0x51, 0x20, 0x20, 0x32, 0x49, 0xea, 0x2d, 0xe0, 0x84, 0xe5, - 0xe1, 0x56, 0xb5, 0xe9, 0x41, 0x97, 0x30, 0x7b, 0xba, 0x78, 0x7d, 0xee, 0xa6, 0x92, 0x71, 0xf0, - 0x85, 0xf6, 0x8d, 0xb0, 0xcd, 0xea, 0x9c, 0x9e, 0x3d, 0x26, 0x4d, 0xc5, 0xd3, 0x69, 0xd9, 0xa5, - 0xf1, 0x7a, 0x50, 0xd2, 0x6f, 0x6e, 0x21, 0xdd, 0x58, 0xc1, 0xab, 0x3e, 0x90, 0xb6, 0x62, 0x94, - 0x8a, 0xf2, 0x56, 0x9a, 0x8d, 0xb6, 0xde, 0x68, 0x2b, 0xdb, 0x43, 0xf5, 0x6f, 0x47, 0x7b, 0x5d, - 0x1e, 0xe4, 0xef, 0x76, 0x2c, 0x5b, 0x7b, 0x4e, 0x8e, 0x53, 0x20, 0x1b, 0xfa, 0x97, 0x1d, 0xf7, - 0x62, 0xd8, 0xac, 0xa3, 0x84, 0x64, 0x24, 0x23, 0xc5, 0x93, 0x47, 0x2a, 0x5e, 0x7e, 0x98, 0xe2, - 0xfd, 0x34, 0xab, 0x78, 0x77, 0xf2, 0x8a, 0x77, 0xe3, 0x10, 0xf9, 0x23, 0xe6, 0x63, 0xba, 0x8b, - 0x4f, 0x87, 0xdd, 0xc5, 0x5d, 0x1c, 0x8c, 0x8f, 0x14, 0x23, 0x93, 0x0e, 0xc0, 0xaf, 0x64, 0xda, - 0x4d, 0x0c, 0x83, 0x7a, 0x27, 0x06, 0xea, 0xdd, 0x21, 0x3d, 0x88, 0x75, 0xb0, 0xa3, 0xb9, 0xef, - 0x60, 0xa7, 0x72, 0x51, 0xbd, 0x1a, 0x9c, 0xa8, 0xd6, 0x56, 0x56, 0x74, 0x43, 0x6f, 0xb4, 0xb7, - 0x1a, 0x7a, 0xfb, 0x7c, 0xd3, 0xb8, 0x47, 0xe9, 0x69, 0xaf, 0x95, 0x01, 0x40, 0x12, 0xaa, 0x98, - 0x76, 0x07, 0xf6, 0xc4, 0xfa, 0xff, 0xbf, 0x93, 0xd2, 0xf5, 0x20, 0x11, 0xfd, 0x18, 0x38, 0x5f, - 0x21, 0x89, 0xb7, 0xca, 0x58, 0x62, 0xe9, 0x40, 0x7d, 0xf3, 0x03, 0x61, 0xf6, 0x70, 0x15, 0x38, - 0x1e, 0xd0, 0xa3, 0xd9, 0x87, 0xaf, 0x08, 0xbd, 0x3d, 0x0f, 0x16, 0x29, 0x2c, 0xc1, 0x12, 0xdf, - 0xf3, 0x84, 0xe6, 0xad, 0x1a, 0x28, 0xd1, 0x15, 0xbd, 0x60, 0x30, 0x08, 0x9f, 0x27, 0x37, 0x31, - 0x7d, 0x71, 0xca, 0x89, 0x29, 0x5f, 0x93, 0x18, 0x95, 0xf8, 0xb5, 0x14, 0x93, 0xca, 0x44, 0x82, - 0xe9, 0xd4, 0xe2, 0x53, 0x99, 0xaa, 0xc5, 0x10, 0xbc, 0x13, 0xd6, 0x2b, 0x0e, 0xd1, 0xda, 0xb5, - 0xcf, 0xca, 0xa1, 0xc6, 0x54, 0x61, 0xa7, 0x67, 0xd9, 0x50, 0xbb, 0xeb, 0x90, 0x0a, 0xc3, 0x2f, - 0x08, 0x8b, 0xe3, 0x4c, 0xcb, 0x8f, 0xc1, 0xf9, 0x35, 0xe9, 0x71, 0x1e, 0x4e, 0xf0, 0x3f, 0x70, - 0xf3, 0xff, 0xaa, 0x0c, 0x4e, 0x30, 0x0d, 0xd1, 0x80, 0x7b, 0x13, 0x5b, 0xe4, 0xff, 0x11, 0xb6, - 0xed, 0xd6, 0x78, 0x4c, 0x87, 0xd9, 0xde, 0x07, 0xd8, 0x88, 0x81, 0xf5, 0xcd, 0x21, 0xac, 0x75, - 0x0e, 0xd6, 0x27, 0x8c, 0x41, 0x33, 0x1d, 0xb2, 0xef, 0xc8, 0x14, 0xd9, 0x6b, 0xc0, 0xd5, 0x1b, - 0x65, 0xa3, 0x5d, 0xab, 0xd4, 0x36, 0xca, 0x68, 0x1c, 0x65, 0x86, 0xec, 0x18, 0xe3, 0x9e, 0x07, - 0x7d, 0x28, 0xbe, 0x1f, 0xcd, 0x83, 0xeb, 0x86, 0x77, 0xb4, 0x74, 0xe9, 0xd9, 0x12, 0x81, 0xba, - 0x0a, 0x66, 0x3a, 0x38, 0x3b, 0xc1, 0x99, 0xdd, 0xd5, 0x4d, 0xe8, 0xcb, 0x49, 0x09, 0x46, 0xf0, - 0xa9, 0xf6, 0x6e, 0x56, 0x21, 0xda, 0xbc, 0x42, 0x3c, 0x39, 0x19, 0xbc, 0x03, 0x7c, 0xc7, 0xe8, - 0xc6, 0xe7, 0x43, 0xdd, 0x38, 0xcf, 0xe9, 0x46, 0xe5, 0x70, 0xe4, 0xd3, 0xa9, 0xc9, 0x6f, 0x3d, - 0x10, 0x3a, 0x80, 0x58, 0x6d, 0xb2, 0xe2, 0x47, 0x85, 0xa1, 0xdd, 0xfd, 0xab, 0x64, 0x50, 0xac, - 0xc2, 0x1e, 0xf4, 0x05, 0x67, 0xf0, 0x7f, 0x2f, 0x89, 0xee, 0x95, 0x12, 0x18, 0x08, 0xed, 0xf8, - 0xb5, 0x14, 0xdf, 0xda, 0x83, 0x9e, 0x6f, 0xee, 0xf5, 0xb1, 0xa8, 0x65, 0x23, 0x4a, 0xd0, 0x7e, - 0x54, 0x12, 0xd9, 0x49, 0x4d, 0x28, 0xe6, 0x3f, 0xc6, 0xaa, 0xf0, 0x17, 0x24, 0x50, 0x6a, 0x41, - 0xbf, 0xe9, 0x76, 0xa1, 0xab, 0xb5, 0x22, 0x8c, 0xae, 0x07, 0x73, 0x18, 0x14, 0x34, 0xcd, 0x0c, - 0x71, 0x62, 0x93, 0xd4, 0x1b, 0xc1, 0x62, 0xf8, 0x88, 0x3f, 0xa7, 0xdd, 0xf8, 0x40, 0xaa, 0xf6, - 0xcd, 0x9c, 0xa8, 0x83, 0x07, 0x5d, 0xf4, 0xa5, 0xdc, 0xc4, 0xb4, 0x52, 0x31, 0x67, 0x8d, 0x44, - 0x52, 0xd9, 0xef, 0x81, 0xbf, 0x53, 0x02, 0x60, 0xd3, 0xf6, 0x02, 0xb9, 0x3e, 0x32, 0x85, 0x5c, - 0xb5, 0x7f, 0xca, 0xa5, 0x9b, 0xc5, 0x44, 0xe5, 0xc4, 0x48, 0xec, 0x97, 0x52, 0xac, 0x2d, 0xc4, - 0x12, 0xcb, 0x5e, 0x66, 0x5f, 0x3a, 0x0e, 0x8a, 0xe7, 0xcd, 0x5e, 0x0f, 0xfa, 0xda, 0x2b, 0x65, - 0x50, 0xac, 0xb8, 0xd0, 0xf4, 0xa1, 0x06, 0x23, 0xd1, 0x69, 0xa0, 0xe4, 0x3a, 0x8e, 0xbf, 0x61, - 0xfa, 0xbb, 0x54, 0x6e, 0xe1, 0xb3, 0xfa, 0x04, 0xf0, 0xa0, 0xed, 0xfd, 0x5e, 0xcf, 0x87, 0xf7, - 0xfb, 0x1b, 0xae, 0xb5, 0x67, 0xba, 0x57, 0xea, 0xa6, 0xbd, 0xb3, 0x6f, 0xee, 0x40, 0xca, 0x5e, - 0xdc, 0x6b, 0xea, 0x85, 0xf4, 0x2b, 0x6c, 0xc7, 0x73, 0x17, 0x2f, 0xf4, 0xef, 0xe3, 0xe4, 0x44, - 0x58, 0x5c, 0x22, 0xec, 0xc5, 0xf4, 0x3c, 0x1a, 0x28, 0xed, 0xd9, 0x70, 0xcf, 0xb1, 0xad, 0x4e, - 0x60, 0xad, 0x06, 0xcf, 0xda, 0xc7, 0x43, 0x34, 0x96, 0x39, 0x34, 0x96, 0x84, 0x4b, 0x49, 0x07, - 0x45, 0x6b, 0x8c, 0x7e, 0xe7, 0x21, 0xe0, 0x5a, 0xd2, 0x8d, 0x6c, 0xb5, 0x9b, 0x5b, 0x15, 0x43, - 0x2f, 0xb7, 0xf5, 0xad, 0x7a, 0xb3, 0x52, 0xae, 0x6f, 0x19, 0xfa, 0x46, 0x53, 0x81, 0x68, 0x76, - 0x3e, 0x63, 0xc0, 0x8e, 0x73, 0x09, 0xba, 0xda, 0xb3, 0x72, 0x62, 0x10, 0x25, 0x08, 0x25, 0x09, - 0x3e, 0x59, 0x04, 0xbe, 0x9f, 0x16, 0x76, 0x22, 0xa3, 0x82, 0xa5, 0xcc, 0xc7, 0xb4, 0x98, 0x4f, - 0x08, 0xf5, 0x31, 0x89, 0xa4, 0x1e, 0x00, 0x20, 0xfd, 0xa3, 0x04, 0x66, 0x2a, 0x8e, 0x7d, 0x09, - 0xba, 0x3e, 0x3b, 0xc9, 0x62, 0x71, 0xc8, 0x0d, 0xe0, 0x70, 0x1a, 0xcc, 0x40, 0xdb, 0x77, 0x9d, - 0x7e, 0x30, 0xcb, 0x0a, 0x1e, 0xb5, 0x37, 0xa6, 0x95, 0x30, 0x2d, 0x39, 0x7e, 0x6d, 0x76, 0x78, - 0x41, 0x1c, 0x7b, 0xf2, 0x40, 0xdb, 0x79, 0x6d, 0x1a, 0x5c, 0x86, 0x33, 0x90, 0x7d, 0x3f, 0xf6, - 0x35, 0x19, 0x2c, 0x90, 0x76, 0xdb, 0x82, 0xd8, 0x2c, 0xd4, 0x9a, 0xec, 0x3a, 0xe7, 0x80, 0xf0, - 0xd7, 0x8e, 0x71, 0xe2, 0x2f, 0x9a, 0xfd, 0x7e, 0xb8, 0x42, 0xbe, 0x76, 0xcc, 0xa0, 0xcf, 0x44, - 0xcd, 0x97, 0x8b, 0x20, 0x6f, 0xee, 0xfb, 0xbb, 0xda, 0x77, 0x85, 0x67, 0xbc, 0x5c, 0x3f, 0x42, - 0xf9, 0x89, 0x81, 0xe4, 0x24, 0x28, 0xf8, 0xce, 0x45, 0x18, 0xc8, 0x81, 0x3c, 0x20, 0x38, 0xcc, - 0x7e, 0xbf, 0x8d, 0x5f, 0x50, 0x38, 0x82, 0x67, 0x64, 0x60, 0x99, 0x9d, 0x8e, 0xb3, 0x6f, 0xfb, - 0xb5, 0x60, 0x95, 0x3c, 0x4a, 0xd0, 0xbe, 0x24, 0xb4, 0x0d, 0x25, 0xc0, 0x60, 0x3a, 0xc8, 0x2e, - 0x8c, 0xd1, 0x94, 0x96, 0xc0, 0xcd, 0xe5, 0x8d, 0x8d, 0xad, 0x76, 0xf3, 0x1e, 0xbd, 0x11, 0x59, - 0xbb, 0x5b, 0xb5, 0xc6, 0x56, 0x7b, 0x4d, 0xdf, 0xaa, 0x6c, 0x1a, 0x78, 0x71, 0xb2, 0x5c, 0xa9, - 0x34, 0x37, 0x1b, 0x6d, 0x05, 0x6a, 0x6f, 0x95, 0xc0, 0x7c, 0xa5, 0xe7, 0x78, 0x21, 0xc2, 0x0f, - 0x89, 0x10, 0x0e, 0xc5, 0x98, 0x63, 0xc4, 0xa8, 0xfd, 0x6b, 0x4e, 0xd4, 0x09, 0x2a, 0x10, 0x08, - 0x43, 0x3e, 0xa6, 0x97, 0x7a, 0xa3, 0x90, 0x13, 0xd4, 0x68, 0x7a, 0xd9, 0x37, 0x89, 0xcf, 0xad, - 0x80, 0x99, 0x32, 0x51, 0x0c, 0xed, 0x4f, 0x73, 0xa0, 0x58, 0x71, 0xec, 0x6d, 0x6b, 0x07, 0x59, - 0x90, 0xd0, 0x36, 0x2f, 0xf4, 0x60, 0xd5, 0xf4, 0xcd, 0x4b, 0x16, 0xbc, 0x8c, 0x2b, 0x50, 0x32, - 0x06, 0x52, 0x11, 0x53, 0x34, 0x05, 0x5e, 0xd8, 0xdf, 0xc1, 0x4c, 0x95, 0x0c, 0x36, 0x09, 0x8d, - 0x1f, 0xe4, 0x71, 0xc3, 0x85, 0x2e, 0xec, 0x41, 0xd3, 0xc3, 0x3e, 0x42, 0x36, 0xec, 0x61, 0xa5, - 0x2d, 0x19, 0x71, 0xaf, 0xd5, 0xb3, 0x60, 0x9e, 0xbc, 0xc2, 0xf6, 0x8f, 0x87, 0xd5, 0xb8, 0x64, - 0x70, 0x69, 0xea, 0xa3, 0x40, 0x01, 0xde, 0xef, 0xbb, 0xe6, 0xe9, 0x2e, 0xc6, 0xeb, 0x41, 0x4b, - 0xc4, 0x0b, 0x7a, 0x29, 0xf0, 0x82, 0x5e, 0x6a, 0x61, 0x1f, 0x69, 0x83, 0xe4, 0xd2, 0xfe, 0x77, - 0x29, 0xb4, 0x5e, 0xbe, 0x20, 0x47, 0x8a, 0xa1, 0x82, 0xbc, 0x6d, 0xee, 0x41, 0xaa, 0x17, 0xf8, - 0xbf, 0x7a, 0x33, 0x38, 0x6e, 0x5e, 0x32, 0x7d, 0xd3, 0xad, 0x3b, 0x1d, 0xb3, 0x87, 0x87, 0xcd, - 0xa0, 0xe5, 0x0f, 0xbe, 0xc0, 0x9b, 0x56, 0xbe, 0xe3, 0x42, 0x9c, 0x2b, 0xd8, 0xb4, 0x0a, 0x12, - 0x10, 0x75, 0xab, 0xe3, 0xd8, 0x98, 0x7f, 0xd9, 0xc0, 0xff, 0x91, 0x54, 0xba, 0x96, 0x87, 0x2a, - 0x82, 0xa9, 0x34, 0xc8, 0x7e, 0x4a, 0xeb, 0x8a, 0xdd, 0xc1, 0x1b, 0x56, 0x25, 0x23, 0xee, 0xb5, - 0xba, 0x0c, 0xe6, 0xe8, 0xee, 0xcb, 0x3a, 0xd2, 0xab, 0x22, 0xd6, 0xab, 0xeb, 0x79, 0x1f, 0x53, - 0x82, 0xe7, 0x52, 0x23, 0xca, 0x67, 0xb0, 0x1f, 0xa9, 0x4f, 0x01, 0xd7, 0xd2, 0xc7, 0xca, 0xbe, - 0xe7, 0x3b, 0x7b, 0x04, 0xf4, 0x15, 0xab, 0x47, 0x6a, 0x30, 0x83, 0x6b, 0x90, 0x94, 0x45, 0xbd, - 0x0d, 0x9c, 0xec, 0xbb, 0x70, 0x1b, 0xba, 0xf7, 0x9a, 0x7b, 0xfb, 0xf7, 0xb7, 0x5d, 0xd3, 0xf6, - 0xfa, 0x8e, 0xeb, 0x9f, 0x2e, 0x61, 0xe6, 0x87, 0xbe, 0x53, 0x6f, 0x01, 0x27, 0xee, 0xf3, 0x1c, - 0xbb, 0xdc, 0xb7, 0xea, 0x96, 0xe7, 0x43, 0xbb, 0xdc, 0xed, 0xba, 0xa7, 0x67, 0x71, 0x59, 0x07, - 0x5f, 0xa8, 0x37, 0x80, 0x85, 0xfb, 0x1c, 0xcb, 0x6e, 0xf9, 0x2e, 0x34, 0xf7, 0x36, 0xdd, 0xde, - 0x69, 0x40, 0x36, 0x88, 0xb8, 0x44, 0xda, 0xf9, 0x96, 0x40, 0x91, 0x40, 0xa2, 0xbd, 0xa8, 0x20, - 0xec, 0xb2, 0x4e, 0x85, 0x94, 0x68, 0x2d, 0x3e, 0x1a, 0xcc, 0xd0, 0x5e, 0x13, 0x83, 0x3f, 0x77, - 0xdb, 0xa9, 0x81, 0x05, 0x12, 0x4a, 0xc5, 0x08, 0xb2, 0xa9, 0x8f, 0x05, 0xc5, 0x0e, 0x16, 0x15, - 0xd6, 0x83, 0xb9, 0xdb, 0xae, 0x1d, 0x5e, 0x28, 0xce, 0x62, 0xd0, 0xac, 0xda, 0x97, 0x65, 0x21, - 0x2f, 0xf7, 0x24, 0x8e, 0xd3, 0xf5, 0x14, 0xdf, 0x90, 0xc6, 0xe8, 0x8a, 0x6f, 0x01, 0x37, 0xd1, - 0x7e, 0x96, 0xda, 0x34, 0xd5, 0xad, 0xe5, 0xcd, 0x60, 0x56, 0x8b, 0x2c, 0x9d, 0x56, 0xbb, 0x6c, - 0xb4, 0xb7, 0x1a, 0xcd, 0x2a, 0x9a, 0x0d, 0xdf, 0x0c, 0x6e, 0x1c, 0x91, 0x5b, 0x6f, 0x6f, 0x35, - 0xca, 0xeb, 0xba, 0xb2, 0xcd, 0xdb, 0x4b, 0xad, 0x76, 0x73, 0x63, 0xcb, 0xd8, 0x6c, 0x34, 0x6a, - 0x8d, 0x55, 0x42, 0x0c, 0x19, 0xa8, 0xa7, 0xa2, 0x0c, 0xe7, 0x8d, 0x5a, 0x5b, 0xdf, 0xaa, 0x34, - 0x1b, 0x2b, 0xb5, 0x55, 0xc5, 0x1a, 0x65, 0x6c, 0xdd, 0xa7, 0x5e, 0x0f, 0xae, 0xe3, 0x38, 0xa9, - 0x35, 0x1b, 0x68, 0x8a, 0x5e, 0x29, 0x37, 0x2a, 0x3a, 0x9a, 0x8f, 0x5f, 0x54, 0x35, 0x70, 0x35, - 0x21, 0xb7, 0xb5, 0x52, 0xab, 0xb3, 0xbb, 0x6a, 0x9f, 0xc9, 0xa9, 0xa7, 0xc1, 0x55, 0xec, 0x3b, - 0xea, 0x13, 0xa1, 0xfc, 0x66, 0x4e, 0xbd, 0x01, 0x3c, 0x84, 0xfb, 0x8a, 0x6c, 0x90, 0x6d, 0xd5, - 0xaa, 0x5b, 0xeb, 0xb5, 0xd6, 0x7a, 0xb9, 0x5d, 0x59, 0x53, 0x3e, 0x8b, 0xa7, 0x2f, 0xa1, 0x3d, - 0xce, 0xb8, 0x9e, 0xbf, 0x84, 0xb5, 0x13, 0xca, 0xbc, 0xa2, 0x3e, 0x72, 0x28, 0xec, 0xc9, 0x76, - 0xf1, 0xa7, 0xc2, 0x11, 0xa7, 0xca, 0xa9, 0xd0, 0xa3, 0x53, 0xd0, 0x4a, 0xa7, 0x43, 0xed, 0x31, - 0x54, 0xe8, 0x7a, 0x70, 0x5d, 0x43, 0x27, 0x48, 0x19, 0x7a, 0xa5, 0x79, 0x4e, 0x37, 0xb6, 0xce, - 0x97, 0xeb, 0x75, 0xbd, 0xbd, 0xb5, 0x52, 0x33, 0x5a, 0x6d, 0x65, 0x5b, 0xfb, 0x27, 0x29, 0x5c, - 0x96, 0x62, 0xa4, 0xf5, 0xa7, 0x52, 0xda, 0x66, 0x9d, 0xb8, 0xfc, 0xf4, 0xfd, 0xa0, 0xe8, 0xf9, - 0xa6, 0xbf, 0xef, 0xd1, 0x56, 0xfd, 0xe0, 0xe1, 0xad, 0x7a, 0xa9, 0x85, 0x33, 0x19, 0x34, 0xb3, - 0xf6, 0xe5, 0x5c, 0x9a, 0x66, 0x3a, 0x81, 0x95, 0x29, 0x6b, 0x0c, 0x11, 0x9f, 0x01, 0x5a, 0xa0, - 0xed, 0xb5, 0xd6, 0x56, 0xb9, 0x6e, 0xe8, 0xe5, 0xea, 0xbd, 0xe1, 0x7a, 0x14, 0x54, 0xaf, 0x06, - 0x27, 0x36, 0x1b, 0xe5, 0xe5, 0xba, 0x8e, 0x9b, 0x4b, 0xb3, 0xd1, 0xd0, 0x2b, 0x48, 0xee, 0x3f, - 0x8a, 0x77, 0x7f, 0x90, 0x55, 0x8e, 0xf9, 0x46, 0x96, 0x13, 0x23, 0xff, 0xbf, 0x12, 0x76, 0x73, - 0x8b, 0x34, 0x8c, 0xa5, 0x35, 0x59, 0x1c, 0xbe, 0x24, 0xe4, 0xd9, 0x26, 0xc4, 0x49, 0x3a, 0x3c, - 0x7e, 0x68, 0x0c, 0x3c, 0xae, 0x06, 0x27, 0x58, 0x3c, 0xb0, 0x87, 0x5b, 0x3c, 0x0c, 0x7f, 0x22, - 0x83, 0x99, 0x75, 0x6b, 0x07, 0xfb, 0x19, 0xef, 0x47, 0x06, 0xca, 0x22, 0x90, 0x42, 0xef, 0x1d, - 0xc9, 0xea, 0x72, 0x93, 0x79, 0x49, 0x7c, 0xbd, 0x45, 0x68, 0xc2, 0xfe, 0xe5, 0xd4, 0x3d, 0x13, - 0x65, 0x38, 0xa6, 0x67, 0x7a, 0xbe, 0x94, 0xa6, 0x67, 0x1a, 0x4e, 0x2b, 0x15, 0x4c, 0xc8, 0x74, - 0x70, 0xe1, 0x33, 0xf6, 0x2d, 0x17, 0x76, 0xb1, 0x99, 0x88, 0xeb, 0x2d, 0x1b, 0x7c, 0xe2, 0x59, - 0xf7, 0x70, 0x60, 0xb2, 0x5e, 0x36, 0xf3, 0xa0, 0x14, 0x8e, 0x26, 0x78, 0xc3, 0x07, 0xbd, 0xd4, - 0x1b, 0xcd, 0xcd, 0xd5, 0xb5, 0xad, 0x15, 0x43, 0xd7, 0xe9, 0x12, 0xf1, 0x8e, 0xf6, 0x2e, 0x09, - 0x2c, 0xd0, 0x1a, 0x52, 0xef, 0x89, 0x87, 0xc4, 0x82, 0x4c, 0xe1, 0xf8, 0x77, 0x76, 0x7a, 0xb2, - 0xca, 0xc3, 0xf1, 0x98, 0x24, 0x11, 0x26, 0xba, 0x4f, 0xbc, 0x29, 0x6c, 0x42, 0x77, 0x73, 0xa0, - 0x3c, 0x3e, 0x35, 0xc5, 0xec, 0xa7, 0x28, 0x2f, 0x02, 0xa0, 0xd8, 0x82, 0x3d, 0xd8, 0xf1, 0xb5, - 0x0f, 0xcb, 0x63, 0xb7, 0x89, 0x38, 0x73, 0x5b, 0x4e, 0x65, 0x6e, 0xe7, 0x33, 0x30, 0xb7, 0x0b, - 0xe3, 0x9b, 0xdb, 0xc5, 0xb4, 0xe6, 0xf6, 0x4c, 0x9c, 0xb9, 0x9d, 0xd0, 0x6b, 0x94, 0x12, 0x7b, - 0x8d, 0x01, 0x43, 0xdd, 0xa8, 0x53, 0x93, 0x9e, 0x4f, 0xa4, 0xca, 0xfc, 0xc9, 0x62, 0xda, 0x71, - 0x9c, 0x00, 0x7f, 0xb4, 0xe6, 0xf9, 0x4f, 0x16, 0xd2, 0x8c, 0xfb, 0x43, 0x39, 0x4e, 0xd7, 0x4a, - 0x5e, 0x91, 0xcf, 0x60, 0xd1, 0x51, 0x7d, 0x18, 0x78, 0x48, 0xf4, 0xbc, 0xa5, 0x3f, 0xad, 0xd6, - 0x6a, 0xb7, 0xb0, 0x4d, 0x5e, 0x69, 0x1a, 0xc6, 0xe6, 0x06, 0xd9, 0xae, 0x3a, 0x05, 0xd4, 0x88, - 0x8a, 0xb1, 0xd9, 0x20, 0x16, 0xf8, 0x0e, 0x4f, 0x7d, 0xa5, 0xd6, 0xa8, 0x6e, 0x85, 0xa3, 0x5a, - 0x63, 0xa5, 0xa9, 0xec, 0xaa, 0x4b, 0xe0, 0x66, 0x86, 0x3a, 0xee, 0x00, 0x49, 0x09, 0xe5, 0x46, - 0x75, 0x6b, 0xbd, 0xa1, 0xaf, 0x37, 0x1b, 0xb5, 0x0a, 0x4e, 0x6f, 0xe9, 0x6d, 0xc5, 0x42, 0xa6, - 0xe0, 0x80, 0xcd, 0xdf, 0xd2, 0xcb, 0x46, 0x65, 0x4d, 0x37, 0x48, 0x91, 0xf7, 0xa9, 0x37, 0x82, - 0xb3, 0xe5, 0x46, 0xb3, 0x8d, 0x52, 0xca, 0x8d, 0x7b, 0xdb, 0xf7, 0x6e, 0xe8, 0x5b, 0x1b, 0x46, - 0xb3, 0xa2, 0xb7, 0x5a, 0x68, 0x24, 0xa5, 0x33, 0x04, 0xa5, 0xa7, 0x3e, 0x19, 0xdc, 0xc1, 0xb0, - 0xa6, 0xb7, 0xb1, 0x6f, 0xc4, 0x7a, 0x13, 0xbb, 0xc7, 0x55, 0xf5, 0xad, 0xb5, 0x72, 0x6b, 0xab, - 0xd6, 0xa8, 0x34, 0xd7, 0x37, 0xca, 0xed, 0x1a, 0x1a, 0x70, 0x37, 0x8c, 0x66, 0xbb, 0xb9, 0x75, - 0x4e, 0x37, 0x5a, 0xb5, 0x66, 0x43, 0xb1, 0x51, 0x95, 0x99, 0x11, 0x3a, 0xb0, 0x94, 0x1c, 0xf5, - 0x3a, 0x70, 0x3a, 0x48, 0xaf, 0x37, 0x91, 0xa0, 0x99, 0x39, 0x43, 0x9f, 0xb5, 0xb3, 0x5a, 0xed, - 0xa6, 0x41, 0x66, 0x0d, 0xeb, 0xb5, 0x55, 0x03, 0x4d, 0x75, 0x94, 0x67, 0x64, 0x3a, 0xa7, 0xf8, - 0x17, 0x09, 0xe4, 0x5b, 0xbe, 0xd3, 0xd7, 0xbe, 0x2f, 0xea, 0x0e, 0xcf, 0x00, 0xe0, 0x62, 0x57, - 0x88, 0xaa, 0xe9, 0x9b, 0x74, 0xb5, 0x86, 0x49, 0xd1, 0x7e, 0x43, 0x78, 0xff, 0x36, 0xb2, 0xba, - 0x9c, 0x7e, 0xcc, 0xf0, 0xf1, 0x1d, 0xb1, 0xb3, 0xae, 0xf1, 0x84, 0xa6, 0x70, 0x22, 0x4c, 0x03, - 0xa7, 0x18, 0x58, 0x91, 0xfc, 0x03, 0x95, 0x81, 0xea, 0x83, 0xc0, 0x55, 0x03, 0xca, 0x87, 0x75, - 0x6e, 0x5b, 0x7d, 0x28, 0x78, 0x30, 0xa3, 0xfe, 0xfa, 0x7a, 0xf3, 0x9c, 0x1e, 0x2a, 0x7a, 0xb5, - 0xdc, 0x2e, 0x2b, 0x3b, 0xda, 0x17, 0x64, 0x90, 0x5f, 0x77, 0x2e, 0x0d, 0x6e, 0x9b, 0xdb, 0xf0, - 0x32, 0xb3, 0xb7, 0x12, 0x3c, 0xf2, 0x47, 0xb0, 0x84, 0xc4, 0xbe, 0x1e, 0xef, 0x22, 0xf3, 0x25, - 0x29, 0x8d, 0xd8, 0xd7, 0x0f, 0xeb, 0x17, 0xf3, 0x37, 0xe3, 0x88, 0x3d, 0x46, 0xb4, 0x50, 0x3d, - 0x0b, 0xce, 0x44, 0x2f, 0x6a, 0x55, 0xbd, 0xd1, 0xae, 0xad, 0xdc, 0x1b, 0x09, 0xb7, 0x66, 0x08, - 0x89, 0x7f, 0x54, 0x37, 0x97, 0xbc, 0x56, 0x70, 0x1a, 0x9c, 0x8c, 0xde, 0xad, 0xea, 0xed, 0xe0, - 0xcd, 0x7d, 0xda, 0x73, 0x0a, 0x60, 0x9e, 0x74, 0xfb, 0x9b, 0xfd, 0x2e, 0xb2, 0xbe, 0x1f, 0x1b, - 0xa1, 0x7b, 0x13, 0x38, 0x5e, 0xdb, 0x58, 0x69, 0xb5, 0x7c, 0xc7, 0x35, 0x77, 0x20, 0x1e, 0x47, - 0x89, 0xb4, 0x06, 0x93, 0xb5, 0xf7, 0x0a, 0xaf, 0xfe, 0xf3, 0x43, 0x0d, 0x29, 0x33, 0x06, 0xf5, - 0xaf, 0x09, 0xad, 0xd6, 0x0b, 0x10, 0x4c, 0x87, 0xfe, 0x7d, 0x13, 0x6e, 0x73, 0xf1, 0xb8, 0x6c, - 0x9f, 0x7d, 0xae, 0x04, 0x66, 0xdb, 0xd6, 0x1e, 0x7c, 0xa6, 0x63, 0x43, 0x4f, 0x9d, 0x01, 0xf2, - 0xea, 0x7a, 0x5b, 0x39, 0x86, 0xfe, 0xa0, 0x69, 0x51, 0x0e, 0xff, 0xd1, 0x51, 0x01, 0xe8, 0x4f, - 0xb9, 0xad, 0xc8, 0xe8, 0xcf, 0xba, 0xde, 0x56, 0xf2, 0xe8, 0x4f, 0x43, 0x6f, 0x2b, 0x05, 0xf4, - 0x67, 0xa3, 0xde, 0x56, 0x8a, 0xe8, 0x4f, 0xad, 0xd5, 0x56, 0x66, 0xd0, 0x9f, 0xe5, 0x56, 0x5b, - 0x29, 0xa1, 0x3f, 0xe7, 0x5a, 0x6d, 0x65, 0x16, 0xfd, 0xa9, 0xb4, 0xdb, 0x0a, 0x40, 0x7f, 0xee, - 0x6e, 0xb5, 0x95, 0x39, 0xf4, 0xa7, 0x5c, 0x69, 0x2b, 0xf3, 0xf8, 0x8f, 0xde, 0x56, 0x16, 0xd0, - 0x9f, 0x56, 0xab, 0xad, 0x2c, 0x62, 0xca, 0xad, 0xb6, 0x72, 0x1c, 0x97, 0x55, 0x6b, 0x2b, 0x0a, - 0xfa, 0xb3, 0xd6, 0x6a, 0x2b, 0x27, 0x70, 0xe6, 0x56, 0x5b, 0x51, 0x71, 0xa1, 0xad, 0xb6, 0x72, - 0x15, 0xce, 0xd3, 0x6a, 0x2b, 0x27, 0x71, 0x11, 0xad, 0xb6, 0x72, 0x35, 0x66, 0x43, 0x6f, 0x2b, - 0xa7, 0x70, 0x1e, 0xa3, 0xad, 0x3c, 0x08, 0xbf, 0x6a, 0xb4, 0x95, 0xd3, 0x98, 0x31, 0xbd, 0xad, - 0x5c, 0x83, 0xff, 0x18, 0x6d, 0x45, 0xc3, 0xaf, 0xca, 0x6d, 0xe5, 0x5a, 0xed, 0xc1, 0x60, 0x76, - 0x15, 0xfa, 0x04, 0x44, 0x4d, 0x01, 0xf2, 0x2a, 0xf4, 0xd9, 0x89, 0xf8, 0x2b, 0xf3, 0xe0, 0x41, - 0x74, 0xf1, 0x66, 0xc5, 0x75, 0xf6, 0xea, 0x70, 0xc7, 0xec, 0x5c, 0xd1, 0xef, 0x47, 0x06, 0x9f, - 0xf6, 0xc2, 0x1c, 0xb7, 0xa2, 0xdd, 0x8f, 0x7a, 0x23, 0xfc, 0x3f, 0xd1, 0x40, 0x0e, 0xd6, 0xa8, - 0x65, 0x7e, 0x8d, 0x3a, 0xce, 0x24, 0xcc, 0x8b, 0x4c, 0x24, 0xff, 0x81, 0x6d, 0x0c, 0xdc, 0x86, - 0x54, 0x6e, 0x60, 0x43, 0x0a, 0xb5, 0xb0, 0x3e, 0x74, 0x3d, 0xc7, 0x36, 0x7b, 0x2d, 0xea, 0x7e, - 0x44, 0xe6, 0xaa, 0x83, 0xc9, 0xea, 0x53, 0x83, 0x46, 0x45, 0x0c, 0xbe, 0x27, 0x26, 0x2d, 0x6f, - 0x0d, 0x4a, 0x28, 0xa6, 0x7d, 0x7d, 0x36, 0x6c, 0x5f, 0x6d, 0xae, 0x7d, 0x3d, 0xe5, 0x10, 0xb4, - 0xd3, 0x35, 0xb5, 0xda, 0x78, 0x53, 0xd1, 0xc8, 0x39, 0x3f, 0xd8, 0xff, 0x92, 0xb5, 0x2f, 0x48, - 0xe0, 0x94, 0x6e, 0x0f, 0x9b, 0xca, 0xb0, 0x6a, 0xf4, 0x56, 0x16, 0x9a, 0x0d, 0x5e, 0xa4, 0x77, - 0x0c, 0xad, 0xf6, 0x70, 0x9a, 0x31, 0x12, 0xfd, 0x9d, 0x50, 0xa2, 0x2d, 0x4e, 0xa2, 0x77, 0x8d, - 0x4f, 0x3a, 0x9d, 0x40, 0x1b, 0x13, 0xed, 0xbb, 0xf2, 0xda, 0x5f, 0x48, 0xe0, 0x04, 0xf1, 0x20, - 0xbc, 0x9b, 0xcc, 0x9c, 0x70, 0x6f, 0xcf, 0x5b, 0x5f, 0xbd, 0x68, 0x96, 0x45, 0xf4, 0x9b, 0x49, - 0xd1, 0x5e, 0xc7, 0x0a, 0xfc, 0x1e, 0x5e, 0xe0, 0x31, 0xfd, 0xf8, 0x60, 0x71, 0x31, 0xb2, 0xfe, - 0xcd, 0x50, 0xd6, 0x0d, 0x4e, 0xd6, 0x77, 0x8c, 0x45, 0xf5, 0x68, 0xc5, 0xfc, 0x8d, 0x3c, 0x78, - 0x30, 0xe1, 0x90, 0x2a, 0x02, 0xe9, 0x07, 0xcb, 0x76, 0xd7, 0x80, 0x9e, 0x6f, 0xba, 0x3e, 0x17, - 0x57, 0x67, 0x60, 0x6a, 0x9e, 0xcb, 0x60, 0x6a, 0x2e, 0x8d, 0x9c, 0x9a, 0x6b, 0xef, 0x61, 0x0d, - 0xbc, 0xf3, 0x3c, 0xb2, 0xe5, 0x04, 0x0c, 0x62, 0x6a, 0x18, 0xd7, 0xa2, 0x42, 0xcb, 0xef, 0x07, - 0x39, 0x94, 0x57, 0x0e, 0x5d, 0x42, 0x3a, 0xc4, 0x7f, 0x63, 0xb2, 0x96, 0x78, 0x9e, 0x7d, 0xc7, - 0x9b, 0x8d, 0x4a, 0x37, 0xd3, 0x29, 0xd4, 0x8b, 0x4b, 0x60, 0x16, 0x77, 0x39, 0x75, 0xcb, 0xbe, - 0xa8, 0xfd, 0xb9, 0x0c, 0xe6, 0x1b, 0xf0, 0x72, 0x65, 0xd7, 0xec, 0xf5, 0xa0, 0xbd, 0x03, 0xb5, - 0xfb, 0x38, 0xdb, 0xde, 0xec, 0xf7, 0x1b, 0xd1, 0xfe, 0x70, 0xf0, 0xa8, 0xde, 0x05, 0x0a, 0x5e, - 0xc7, 0x09, 0xa3, 0x3b, 0x7c, 0x5f, 0xcc, 0xea, 0x75, 0x79, 0xdf, 0xdf, 0x5d, 0xc2, 0x65, 0x95, - 0xfb, 0x56, 0x0b, 0x7d, 0x60, 0x90, 0xef, 0xe8, 0x38, 0xf9, 0x57, 0x43, 0x3b, 0xe3, 0x5c, 0x42, - 0x67, 0x1c, 0x32, 0xbe, 0xc4, 0x32, 0x1d, 0xb3, 0x48, 0x72, 0x3d, 0x98, 0xeb, 0x04, 0x59, 0xc2, - 0x53, 0x7a, 0x6c, 0x92, 0xf6, 0x97, 0xa9, 0xba, 0x6b, 0xa1, 0xc2, 0xd3, 0x69, 0x15, 0x9c, 0xb0, - 0xa9, 0x79, 0x35, 0x38, 0xd1, 0x6e, 0x36, 0xb7, 0xd6, 0xcb, 0x8d, 0x7b, 0xa3, 0xc0, 0x39, 0xdb, - 0xda, 0x2b, 0xf2, 0x60, 0xb1, 0xe5, 0xf4, 0x2e, 0xc1, 0x08, 0xe7, 0x1a, 0xe7, 0xfe, 0xc9, 0xca, - 0x29, 0x77, 0x40, 0x4e, 0xea, 0x29, 0x50, 0x34, 0x6d, 0xef, 0x32, 0x0c, 0xcc, 0x7f, 0xfa, 0x44, - 0x61, 0xfc, 0x28, 0xdb, 0x11, 0x18, 0x3c, 0x8c, 0x77, 0x8e, 0x90, 0x24, 0xcf, 0x55, 0x0c, 0x90, - 0x67, 0xc1, 0xbc, 0x47, 0xbc, 0x44, 0xda, 0x8c, 0x33, 0x10, 0x97, 0x86, 0x59, 0x24, 0x6e, 0x4a, - 0x32, 0x65, 0x11, 0x3f, 0x69, 0xaf, 0x0d, 0xfb, 0x8f, 0x4d, 0x0e, 0xe2, 0xf2, 0x61, 0x18, 0x4b, - 0x07, 0xf2, 0xab, 0x26, 0x3d, 0x89, 0x3f, 0x0d, 0x4e, 0x06, 0x27, 0xd4, 0x2b, 0x6b, 0xe5, 0x7a, - 0x5d, 0x6f, 0xac, 0xea, 0x5b, 0xb5, 0x2a, 0xd9, 0x4f, 0x8e, 0x52, 0xca, 0xed, 0xb6, 0xbe, 0xbe, - 0xd1, 0x6e, 0x6d, 0xe9, 0x4f, 0xab, 0xe8, 0x7a, 0x15, 0x3b, 0x60, 0xe3, 0x13, 0x94, 0x81, 0xab, - 0x7c, 0xb9, 0xd1, 0x3a, 0xaf, 0x1b, 0xca, 0xee, 0xd9, 0x32, 0x98, 0x63, 0x06, 0x0a, 0xc4, 0x5d, - 0x15, 0x6e, 0x9b, 0xfb, 0x3d, 0x6a, 0x8e, 0x2b, 0xc7, 0x10, 0x77, 0x58, 0x36, 0x4d, 0xbb, 0x77, - 0x45, 0xc9, 0xa9, 0x0a, 0x98, 0x67, 0xc7, 0x04, 0x45, 0xd2, 0xbe, 0x79, 0x1d, 0x98, 0x3d, 0xef, - 0xb8, 0x17, 0xb1, 0xd7, 0xb0, 0xf6, 0x01, 0x12, 0x60, 0x2f, 0x88, 0x28, 0xc1, 0x18, 0x60, 0xaf, - 0x12, 0x77, 0x13, 0x0b, 0xa8, 0x2d, 0x8d, 0x8c, 0x1a, 0x71, 0x3d, 0x98, 0xbb, 0x1c, 0xe4, 0x8e, - 0x5a, 0x3a, 0x93, 0xa4, 0xfd, 0xb2, 0x98, 0xe3, 0xd7, 0xe8, 0x22, 0xb3, 0x5f, 0xf5, 0x7f, 0xbb, - 0x04, 0x8a, 0xab, 0xd0, 0x2f, 0xf7, 0x7a, 0xac, 0xdc, 0x5e, 0x26, 0x7c, 0x8e, 0x94, 0xab, 0x44, - 0xb9, 0xd7, 0x8b, 0x6f, 0x54, 0x8c, 0x80, 0x82, 0xf3, 0x4e, 0x5c, 0x9a, 0xa0, 0x97, 0xf6, 0x88, - 0x02, 0xb3, 0x97, 0xd8, 0xdf, 0x45, 0xae, 0xd9, 0xaf, 0x67, 0xcc, 0xa4, 0xc7, 0x44, 0xc1, 0x15, - 0x73, 0xc9, 0x4e, 0x52, 0x41, 0x3e, 0xf5, 0x1e, 0x30, 0xb3, 0xef, 0xc1, 0x8a, 0xe9, 0x05, 0x43, - 0x1b, 0x5f, 0xd3, 0xe6, 0x85, 0xfb, 0x60, 0xc7, 0x5f, 0xaa, 0xed, 0xa1, 0x89, 0xcf, 0x26, 0xc9, - 0x18, 0xc6, 0x2b, 0xa4, 0xcf, 0x46, 0x40, 0x01, 0x4d, 0x3b, 0x2f, 0x5b, 0xfe, 0x6e, 0x65, 0xd7, - 0xf4, 0xe9, 0x66, 0x4b, 0xf8, 0xac, 0x7d, 0x68, 0x0c, 0x38, 0x13, 0x1d, 0x76, 0xe2, 0x8f, 0xa3, - 0xdf, 0x0c, 0x14, 0x6c, 0xfe, 0x58, 0xf6, 0x0e, 0xe1, 0x3f, 0x9c, 0x63, 0x1e, 0x48, 0x4f, 0x0d, - 0xf8, 0x04, 0x3c, 0x72, 0xc6, 0x01, 0xfc, 0x87, 0x65, 0x90, 0x6f, 0xf6, 0xa1, 0x2d, 0x7c, 0x4e, - 0x33, 0xc4, 0x41, 0x1a, 0xc0, 0xe1, 0x7d, 0xe2, 0x2e, 0xc4, 0x61, 0xa5, 0x51, 0xc9, 0x31, 0x28, - 0xdc, 0x0a, 0xf2, 0x96, 0xbd, 0xed, 0x50, 0x2b, 0xf8, 0xda, 0x18, 0xbb, 0xa8, 0x66, 0x6f, 0x3b, - 0x06, 0xce, 0xa8, 0xbd, 0x4f, 0xcc, 0x7b, 0x38, 0xa9, 0xec, 0x74, 0xe2, 0x5e, 0x19, 0x63, 0x2c, - 0x52, 0xc1, 0x62, 0x64, 0xa2, 0xd6, 0x9b, 0xe5, 0xaa, 0xd2, 0xd5, 0xfe, 0xb6, 0x04, 0x8a, 0x44, - 0x6d, 0xb4, 0x97, 0xc8, 0x40, 0x2e, 0x77, 0xbb, 0x31, 0x60, 0x48, 0x07, 0xc0, 0x70, 0x02, 0x2d, - 0xa4, 0x9e, 0xde, 0xc1, 0x33, 0x1f, 0x95, 0x4f, 0x70, 0x6c, 0xa0, 0x4d, 0xb2, 0xdc, 0xed, 0xc6, - 0x9f, 0x7b, 0x08, 0x0b, 0x94, 0xf8, 0x02, 0xd9, 0x1e, 0x42, 0x16, 0xeb, 0x21, 0x52, 0x0f, 0x24, - 0xb1, 0xfc, 0x65, 0xdf, 0x4a, 0xfe, 0x41, 0x02, 0x33, 0x75, 0xcb, 0xf3, 0x11, 0x36, 0x65, 0x11, - 0x6c, 0xae, 0x03, 0xb3, 0x81, 0x68, 0x50, 0x97, 0x89, 0xc6, 0x83, 0x28, 0x81, 0x9f, 0xc9, 0xdf, - 0xcd, 0xa3, 0xf3, 0xb8, 0xe4, 0xda, 0x53, 0x2e, 0xe2, 0xcf, 0xc4, 0x45, 0xc5, 0x4a, 0x83, 0xc5, - 0xfe, 0x4a, 0x28, 0xf0, 0x75, 0x4e, 0xe0, 0xb7, 0x8f, 0x53, 0x64, 0xf6, 0x42, 0xff, 0x43, 0x09, - 0x00, 0x54, 0x36, 0x3d, 0x78, 0xfc, 0x08, 0x2e, 0x9c, 0x48, 0x82, 0x74, 0x5f, 0xc1, 0x4a, 0x77, - 0x9d, 0x97, 0xee, 0x0f, 0x8c, 0xae, 0x6a, 0xd2, 0x01, 0x63, 0x55, 0x01, 0xb2, 0x15, 0x8a, 0x16, - 0xfd, 0xd5, 0xde, 0x1e, 0x0a, 0x75, 0x83, 0x13, 0xea, 0x9d, 0x63, 0x96, 0x94, 0xbd, 0x5c, 0xff, - 0x58, 0x02, 0x33, 0x2d, 0xe8, 0xa3, 0xae, 0x53, 0x3b, 0x27, 0xd2, 0xeb, 0x33, 0x6d, 0x5b, 0x12, - 0x6c, 0xdb, 0xdf, 0xce, 0x89, 0x06, 0x96, 0x8b, 0x24, 0x43, 0x79, 0x8a, 0x59, 0xbd, 0x78, 0xbd, - 0x50, 0x60, 0xb9, 0x51, 0xd4, 0xb2, 0x97, 0xee, 0x5b, 0xa5, 0xd0, 0xd3, 0x84, 0x3f, 0x17, 0xc8, - 0x9a, 0xd5, 0xb9, 0x83, 0x66, 0xb5, 0xf8, 0xb9, 0x40, 0xb6, 0x8e, 0xf1, 0x8e, 0x0d, 0xa9, 0x0d, - 0x90, 0x09, 0xf8, 0x1c, 0x8c, 0x23, 0xaf, 0x67, 0xcb, 0xa0, 0x48, 0x37, 0x1f, 0xee, 0x4a, 0xde, - 0x7b, 0x18, 0x3d, 0x35, 0x79, 0xff, 0x18, 0xa6, 0x60, 0xd2, 0xb2, 0x7e, 0xc8, 0x86, 0xc4, 0xb0, - 0x71, 0x0b, 0x28, 0xe0, 0x90, 0xea, 0x74, 0x9c, 0x8b, 0xdc, 0x45, 0x02, 0x12, 0x3a, 0x7a, 0x6b, - 0x90, 0x4c, 0xa9, 0x51, 0x98, 0xc0, 0x4e, 0xc0, 0x38, 0x28, 0x7c, 0x43, 0x05, 0x60, 0x63, 0xff, - 0x42, 0xcf, 0xf2, 0x76, 0x2d, 0x1b, 0xfb, 0x98, 0xcd, 0xd3, 0x47, 0x12, 0x19, 0x3c, 0xd1, 0x24, - 0x8c, 0x35, 0x0a, 0x14, 0x20, 0xef, 0xbb, 0x16, 0x35, 0x91, 0xd1, 0x5f, 0xf5, 0x49, 0xa1, 0xb7, - 0x66, 0x7e, 0x20, 0xf0, 0x0b, 0x12, 0x43, 0xc4, 0xc1, 0x12, 0x53, 0x7a, 0xe4, 0xb5, 0xc9, 0x86, - 0x7f, 0x2f, 0xf0, 0xe1, 0xdf, 0xb9, 0xd3, 0xe0, 0xc5, 0x81, 0xd3, 0xe0, 0x08, 0x47, 0xcf, 0x7a, - 0x26, 0xc4, 0xae, 0x4b, 0xb2, 0x81, 0xff, 0xa3, 0x2f, 0xb0, 0x7b, 0x11, 0xf6, 0xee, 0x23, 0x67, - 0x0e, 0xa2, 0x04, 0xb6, 0xcf, 0x9b, 0x15, 0xec, 0xf3, 0x3e, 0x16, 0xcd, 0x9d, 0x1c, 0x41, 0x63, - 0x3a, 0x85, 0xe4, 0x38, 0x76, 0xf3, 0x03, 0xec, 0x6a, 0x9f, 0x14, 0x0e, 0xe4, 0xc9, 0xc8, 0x38, - 0x71, 0x16, 0x44, 0x39, 0x90, 0x42, 0x0e, 0x98, 0x3d, 0xe4, 0xa4, 0x1e, 0x78, 0x14, 0xfd, 0x74, - 0xba, 0xbc, 0x37, 0x9e, 0x8d, 0x1d, 0x1c, 0xab, 0x6f, 0x2e, 0xdf, 0xad, 0x57, 0xda, 0x0a, 0x3c, - 0x78, 0xd4, 0x1e, 0x1f, 0xaa, 0x27, 0x07, 0xe8, 0xa3, 0x35, 0x1d, 0xed, 0x7f, 0x48, 0xa0, 0x48, - 0xcd, 0x8d, 0xbb, 0x0e, 0x09, 0xa1, 0xf6, 0xca, 0x71, 0x20, 0x49, 0x8c, 0x6e, 0xf2, 0xb9, 0xb4, - 0x00, 0x4c, 0xc0, 0xc0, 0xb8, 0x37, 0x33, 0x00, 0xb4, 0x7f, 0x96, 0x40, 0x1e, 0x99, 0x41, 0x62, - 0xb1, 0x23, 0x3e, 0x2b, 0xec, 0x52, 0xcc, 0x08, 0x00, 0x91, 0x8f, 0xd1, 0xef, 0x65, 0x30, 0xdb, - 0x27, 0x19, 0xc3, 0xc8, 0x25, 0x37, 0x08, 0x74, 0x46, 0xd0, 0x88, 0x3e, 0x63, 0xa6, 0x9c, 0x49, - 0x6e, 0xc9, 0xc9, 0xfc, 0xa4, 0x83, 0x43, 0x9f, 0x44, 0x98, 0x89, 0x6d, 0xed, 0xdf, 0x24, 0x00, - 0x0c, 0xe8, 0x39, 0xbd, 0x4b, 0x70, 0xd3, 0xb5, 0xb4, 0x6b, 0x23, 0x00, 0x68, 0xb3, 0xcf, 0x45, - 0xcd, 0xfe, 0xf3, 0x92, 0xa8, 0xf3, 0x30, 0xa7, 0x79, 0x01, 0xf1, 0x18, 0xf1, 0x3f, 0x19, 0xcc, - 0x50, 0x39, 0x52, 0x9b, 0x52, 0x4c, 0xf8, 0xc1, 0x47, 0xda, 0x07, 0x85, 0x9c, 0x8f, 0x45, 0x38, - 0x4a, 0x07, 0x40, 0x65, 0x0c, 0x00, 0x8e, 0x83, 0xb9, 0x00, 0x80, 0x4d, 0xa3, 0xa6, 0x40, 0xed, - 0xdd, 0x32, 0xf6, 0xd0, 0x20, 0x83, 0xdb, 0xe1, 0x7b, 0x9a, 0xbf, 0x10, 0x9e, 0xec, 0x33, 0xf2, - 0x08, 0xcb, 0xcf, 0x08, 0xa0, 0xdf, 0x15, 0x9a, 0xdd, 0x0b, 0x30, 0xf4, 0x40, 0xe9, 0xaf, 0xce, - 0xea, 0x60, 0x81, 0xb3, 0x4a, 0xd4, 0xd3, 0xe0, 0x24, 0x97, 0x40, 0xc6, 0xbb, 0xae, 0x72, 0x4c, - 0xd5, 0xc0, 0x29, 0xee, 0x0d, 0x7d, 0x80, 0x5d, 0x25, 0xa7, 0xbd, 0xeb, 0x4f, 0x72, 0xe1, 0x7a, - 0xcf, 0xfb, 0xf3, 0x74, 0xf5, 0xed, 0xd3, 0x7c, 0xb0, 0xcc, 0x8e, 0x63, 0xfb, 0xf0, 0x7e, 0xc6, - 0xcd, 0x25, 0x4c, 0x48, 0xb4, 0x1a, 0x4e, 0x83, 0x19, 0xdf, 0x65, 0x5d, 0x5f, 0x82, 0x47, 0x56, - 0xb1, 0x0a, 0xbc, 0x62, 0x35, 0xc0, 0x59, 0xcb, 0xee, 0xf4, 0xf6, 0xbb, 0xd0, 0x80, 0x3d, 0x13, - 0xc9, 0xd0, 0x2b, 0x7b, 0x55, 0xd8, 0x87, 0x76, 0x17, 0xda, 0x3e, 0xe1, 0x33, 0x38, 0x37, 0x2b, - 0x90, 0x93, 0x57, 0xc6, 0x27, 0xf1, 0xca, 0xf8, 0x88, 0x61, 0x4b, 0xc0, 0x09, 0x6b, 0x80, 0xb7, - 0x03, 0x40, 0xea, 0x76, 0xce, 0x82, 0x97, 0xa9, 0x1a, 0x0e, 0xc6, 0xbf, 0x6f, 0x86, 0x19, 0x0c, - 0x26, 0xb3, 0xf6, 0xd5, 0x50, 0xfd, 0x9e, 0xc2, 0xa9, 0xdf, 0x2d, 0x82, 0x2c, 0xa4, 0xd3, 0xba, - 0xfe, 0x18, 0x5a, 0xb7, 0x00, 0x66, 0xa3, 0xdd, 0x68, 0x59, 0xbd, 0x06, 0x5c, 0x1d, 0x78, 0x28, - 0x37, 0x74, 0xbd, 0xda, 0xda, 0xda, 0xdc, 0x58, 0x35, 0xca, 0x55, 0x5d, 0x01, 0x48, 0x3f, 0x89, - 0x5e, 0x86, 0x8e, 0xc5, 0x79, 0xed, 0x8f, 0x24, 0x50, 0xc0, 0x87, 0xbe, 0xb5, 0xa7, 0x4f, 0x48, - 0x73, 0x3c, 0xce, 0x69, 0x2a, 0x1c, 0x77, 0xc5, 0xef, 0xb7, 0xa1, 0xc2, 0xc4, 0x5c, 0x1d, 0xea, - 0x7e, 0x9b, 0x04, 0x42, 0xd9, 0xcf, 0x84, 0x50, 0x93, 0x6c, 0xed, 0x3a, 0x97, 0xff, 0x33, 0x37, - 0x49, 0x54, 0xff, 0x23, 0x6e, 0x92, 0x43, 0x58, 0x98, 0x7a, 0x93, 0x1c, 0xd2, 0xee, 0x12, 0x9a, - 0xa9, 0xf6, 0xd1, 0x42, 0x38, 0xff, 0xfb, 0x94, 0x74, 0xa8, 0xbd, 0xb3, 0x32, 0x58, 0xb0, 0x6c, - 0x1f, 0xba, 0xb6, 0xd9, 0x5b, 0xe9, 0x99, 0x3b, 0x81, 0x7d, 0x7a, 0xed, 0x81, 0xab, 0x3f, 0xa2, - 0x3c, 0x06, 0xff, 0x85, 0x7a, 0x06, 0x00, 0x1f, 0xee, 0xf5, 0x7b, 0xa6, 0x1f, 0xa9, 0x1e, 0x93, - 0xc2, 0x6a, 0x5f, 0x9e, 0xd7, 0xbe, 0x47, 0x83, 0xab, 0x08, 0x68, 0xed, 0x2b, 0x7d, 0xb8, 0x69, - 0x5b, 0xcf, 0xd8, 0xc7, 0xb1, 0x95, 0x89, 0x8e, 0x0e, 0x7b, 0xc5, 0xed, 0x0a, 0x15, 0xf9, 0x5d, - 0x21, 0xf5, 0x4e, 0x70, 0x0d, 0x0e, 0x9b, 0x8d, 0x6f, 0x25, 0x39, 0x6f, 0x75, 0x77, 0xa0, 0x5f, - 0xdb, 0x5e, 0xb7, 0x3c, 0xcf, 0xb2, 0x77, 0xf0, 0x74, 0xbc, 0x64, 0xc4, 0x67, 0xd0, 0xfe, 0x97, - 0x70, 0xdc, 0xa6, 0xa0, 0xcf, 0x18, 0x11, 0xb7, 0xc9, 0xe1, 0xb7, 0xed, 0xa2, 0x76, 0x1a, 0xae, - 0xea, 0xe4, 0x05, 0x56, 0x75, 0x58, 0x4c, 0x0b, 0x82, 0xab, 0x03, 0xaf, 0x11, 0x0a, 0x0c, 0x95, - 0x54, 0x8d, 0xec, 0xfb, 0xbe, 0x6f, 0xc9, 0x60, 0x91, 0x14, 0xbd, 0xec, 0x38, 0x17, 0xf7, 0x4c, - 0xf7, 0xa2, 0xf6, 0xd3, 0x87, 0xdb, 0x05, 0x4e, 0xdc, 0xbd, 0x8a, 0xdb, 0xd2, 0x1d, 0x50, 0xde, - 0xfc, 0xa0, 0xf2, 0x6a, 0xbf, 0x23, 0x3c, 0x25, 0xe1, 0xe4, 0x19, 0x54, 0x6a, 0x3a, 0xdb, 0x5b, - 0x62, 0xc7, 0x23, 0x45, 0x18, 0xcc, 0x1e, 0xf8, 0xdf, 0x0a, 0x81, 0x0f, 0xc6, 0x11, 0x76, 0x67, - 0x60, 0x92, 0xb8, 0x6b, 0x5f, 0x1b, 0x0f, 0xbb, 0x80, 0xaf, 0x31, 0xb0, 0x53, 0x80, 0x7c, 0x31, - 0x74, 0x66, 0x42, 0x7f, 0xd9, 0x0a, 0xe5, 0xb3, 0x43, 0x33, 0x86, 0xe5, 0xa9, 0xa0, 0x79, 0x92, - 0x67, 0xa1, 0xd9, 0xcf, 0x14, 0xd3, 0xaf, 0x08, 0xef, 0xb8, 0x0d, 0x15, 0x10, 0xe1, 0x6e, 0x3a, - 0xad, 0x52, 0x6c, 0xbb, 0x4e, 0x9c, 0xcd, 0xec, 0xd1, 0x7c, 0x61, 0x01, 0xcc, 0x06, 0xf1, 0xb3, - 0xf0, 0x75, 0x93, 0x21, 0x86, 0xa7, 0x40, 0xd1, 0x73, 0xf6, 0xdd, 0x0e, 0xa4, 0x7b, 0xa0, 0xf4, - 0x69, 0x8c, 0xfd, 0xba, 0x91, 0xe6, 0xc2, 0x01, 0x8b, 0x24, 0x9f, 0xda, 0x22, 0x89, 0xb7, 0x77, - 0x13, 0xec, 0x07, 0xed, 0x45, 0xc2, 0xd7, 0x86, 0x70, 0x98, 0xb5, 0xa0, 0xff, 0x40, 0x34, 0x02, - 0x7e, 0x5d, 0x68, 0x37, 0x68, 0x44, 0x4d, 0xd2, 0xa9, 0x5c, 0x73, 0x0c, 0x3b, 0xf8, 0x5a, 0xf0, - 0xa0, 0x20, 0x07, 0x35, 0x80, 0xb1, 0xc1, 0xbb, 0x69, 0xd4, 0x15, 0x59, 0x7b, 0x76, 0x1e, 0x28, - 0x84, 0xb5, 0x66, 0x68, 0x0b, 0x6a, 0x2f, 0xcb, 0x1d, 0xb5, 0xc1, 0x1b, 0x3f, 0x83, 0xe5, 0xee, - 0x34, 0x4c, 0x0c, 0x36, 0xce, 0x09, 0x3e, 0xaa, 0x5d, 0x8c, 0x26, 0x8d, 0xd1, 0xcc, 0x12, 0x94, - 0x4f, 0x7b, 0x4b, 0x4e, 0x24, 0x76, 0xb9, 0x18, 0x8b, 0xd9, 0xf7, 0x4a, 0xdf, 0xce, 0x07, 0x61, - 0x10, 0x57, 0x5c, 0x67, 0x6f, 0xd3, 0xed, 0x69, 0xff, 0x47, 0xe8, 0x6a, 0x88, 0x98, 0xd9, 0x85, - 0x14, 0x3f, 0xbb, 0xc0, 0x2b, 0xd2, 0xbd, 0x68, 0x2b, 0xac, 0x37, 0xc6, 0xf0, 0xad, 0xde, 0x08, - 0x16, 0xcd, 0x6e, 0x77, 0xc3, 0xdc, 0x81, 0x15, 0x34, 0x6d, 0xb7, 0x7d, 0x1a, 0x22, 0x6d, 0x20, - 0x35, 0x71, 0x2a, 0xc3, 0xf7, 0x91, 0x33, 0x07, 0xac, 0x52, 0xf1, 0x65, 0x58, 0x0e, 0x44, 0x2a, - 0xbf, 0xa9, 0x0c, 0x7f, 0x68, 0xc8, 0xe8, 0xec, 0x9a, 0x51, 0x40, 0x47, 0xfa, 0x24, 0xe8, 0x8b, - 0x25, 0xc0, 0x77, 0xf6, 0x9a, 0xf7, 0x6b, 0x12, 0x98, 0x41, 0x78, 0x94, 0xbb, 0x5d, 0xed, 0xe1, - 0x5c, 0xdc, 0xd3, 0x58, 0x6f, 0xb8, 0xe7, 0x0b, 0xbb, 0x26, 0x06, 0x35, 0x24, 0xf4, 0x63, 0x30, - 0x89, 0x84, 0x28, 0x71, 0x42, 0x14, 0x8b, 0x5f, 0x9a, 0x58, 0x44, 0xf6, 0xe2, 0xfb, 0xac, 0x04, - 0x16, 0x82, 0x79, 0xc6, 0x0a, 0xf4, 0x3b, 0xbb, 0xda, 0xed, 0xa2, 0xeb, 0x5c, 0xb4, 0x25, 0x86, - 0x5b, 0xc2, 0x3d, 0xed, 0xbb, 0xb9, 0x94, 0x2a, 0xcf, 0x95, 0x1c, 0xb3, 0x48, 0x98, 0x4a, 0x17, - 0x93, 0x08, 0x66, 0x2f, 0xcc, 0xaf, 0x4a, 0x00, 0xb4, 0x9d, 0x70, 0xb2, 0x7c, 0x08, 0x49, 0xfe, - 0x8c, 0xf0, 0x6e, 0x31, 0xad, 0x78, 0x54, 0x6c, 0xfa, 0x9e, 0x43, 0xd0, 0x99, 0x6a, 0x54, 0x49, - 0x53, 0x69, 0xeb, 0xb3, 0xd5, 0xfd, 0x7e, 0xcf, 0xea, 0x98, 0xfe, 0xa0, 0x07, 0x60, 0xbc, 0x78, - 0xf1, 0x5d, 0xed, 0xa9, 0x8c, 0xc6, 0xb0, 0x8c, 0x18, 0x59, 0x92, 0x38, 0x41, 0x52, 0x10, 0x27, - 0x48, 0xd0, 0xab, 0x67, 0x04, 0xf1, 0x29, 0xa8, 0xa7, 0x0c, 0x8e, 0x37, 0xfb, 0xd0, 0x5e, 0x76, - 0xa1, 0xd9, 0xed, 0xb8, 0xfb, 0x7b, 0x17, 0x3c, 0xd6, 0x7d, 0x35, 0x59, 0x47, 0x99, 0x95, 0x6b, - 0x89, 0x5b, 0xb9, 0xd6, 0x7e, 0x4c, 0x16, 0x8d, 0xe4, 0xc6, 0xec, 0xaf, 0x30, 0x3c, 0x8c, 0x31, - 0xd4, 0xa5, 0x72, 0xba, 0x1a, 0x58, 0xa4, 0xce, 0xa7, 0x59, 0xa4, 0x7e, 0xb3, 0x50, 0x5c, 0x38, - 0xa1, 0x7a, 0x4d, 0xc5, 0x77, 0x6e, 0xb1, 0x05, 0xfd, 0x18, 0x78, 0x6f, 0x00, 0x0b, 0x17, 0xa2, - 0x37, 0x21, 0xc4, 0x7c, 0xe2, 0x10, 0x8f, 0xd6, 0xb7, 0xa6, 0x5d, 0xa1, 0xe1, 0x59, 0x88, 0x41, - 0x37, 0x44, 0x50, 0x12, 0x71, 0x9b, 0x4b, 0xb5, 0xdc, 0x92, 0x58, 0x7e, 0xf6, 0x28, 0x7c, 0x52, - 0x02, 0x73, 0xf8, 0x06, 0xfa, 0xe5, 0x2b, 0xf8, 0x20, 0xa8, 0xa0, 0x51, 0xf2, 0x42, 0x56, 0xcc, - 0x2a, 0xc8, 0xf7, 0x2c, 0xfb, 0x62, 0xe0, 0xef, 0x88, 0xfe, 0x47, 0x57, 0x9c, 0x4a, 0x43, 0xae, - 0x38, 0x0d, 0xb7, 0x49, 0xc2, 0x72, 0x63, 0x46, 0xd3, 0x37, 0x08, 0x5d, 0xbf, 0x3e, 0x92, 0x5c, - 0xf6, 0x62, 0xfc, 0xeb, 0x3c, 0x28, 0xb6, 0xa0, 0xe9, 0x76, 0x76, 0xb5, 0xf7, 0x4b, 0x43, 0xa7, - 0x12, 0x25, 0x7e, 0x2a, 0xb1, 0x02, 0x66, 0xb6, 0xad, 0x9e, 0x0f, 0x5d, 0xe2, 0x03, 0xce, 0x76, - 0xed, 0xa4, 0x89, 0x2f, 0xf7, 0x9c, 0xce, 0xc5, 0x25, 0x6a, 0xda, 0x2f, 0x05, 0xf1, 0xa6, 0x97, - 0x56, 0xf0, 0x47, 0x46, 0xf0, 0x31, 0x32, 0x08, 0x3d, 0xc7, 0xf5, 0xe3, 0xee, 0x2f, 0x8a, 0xa1, - 0xd2, 0x72, 0x5c, 0xdf, 0x20, 0x1f, 0x22, 0x98, 0xb7, 0xf7, 0x7b, 0xbd, 0x36, 0xbc, 0xdf, 0x0f, - 0xa6, 0x75, 0xc1, 0x33, 0x32, 0x16, 0x9d, 0xed, 0x6d, 0x0f, 0x92, 0x45, 0x85, 0x82, 0x41, 0x9f, - 0xd4, 0x93, 0xa0, 0xd0, 0xb3, 0xf6, 0x2c, 0x32, 0x11, 0x29, 0x18, 0xe4, 0x41, 0xbd, 0x19, 0x28, - 0xd1, 0x1c, 0x88, 0x30, 0x7a, 0xba, 0x88, 0x9b, 0xe6, 0x81, 0x74, 0xa4, 0x33, 0x17, 0xe1, 0x15, - 0xef, 0xf4, 0x0c, 0x7e, 0x8f, 0xff, 0x6b, 0xaf, 0x4d, 0xbb, 0x61, 0x42, 0x24, 0x1e, 0x3f, 0xc3, - 0x75, 0x61, 0xc7, 0x71, 0xbb, 0x81, 0x6c, 0xe2, 0x27, 0x18, 0x34, 0x5f, 0xba, 0x6d, 0x8e, 0xa1, - 0x85, 0x67, 0xaf, 0x69, 0xef, 0x29, 0xa2, 0x6e, 0x13, 0x15, 0x7d, 0xde, 0xf2, 0x77, 0xd7, 0xa1, - 0x6f, 0x6a, 0x7f, 0x2d, 0x0f, 0xd5, 0xb8, 0xb9, 0xff, 0x5f, 0xe3, 0x46, 0x68, 0x1c, 0x89, 0x19, - 0xe6, 0xef, 0xbb, 0x36, 0x92, 0x23, 0xf5, 0xa3, 0x65, 0x52, 0xd4, 0x3b, 0xc1, 0x35, 0xd1, 0x53, - 0xb0, 0x94, 0x5a, 0x65, 0x5c, 0x6b, 0x4b, 0x46, 0x7c, 0x06, 0x75, 0x03, 0x3c, 0x8c, 0xbc, 0x5c, - 0x6b, 0xaf, 0xd7, 0xd7, 0xac, 0x9d, 0xdd, 0x9e, 0xb5, 0xb3, 0xeb, 0x7b, 0x35, 0xdb, 0xf3, 0xa1, - 0xd9, 0x6d, 0x6e, 0x1b, 0xe4, 0xe6, 0x31, 0x80, 0xe9, 0x88, 0x64, 0xe5, 0x7d, 0xc4, 0xc5, 0x46, - 0x37, 0x56, 0x53, 0x62, 0x5a, 0xca, 0xe3, 0x51, 0x4b, 0xf1, 0xf6, 0x7b, 0x21, 0xa6, 0xd7, 0x0d, - 0x60, 0x1a, 0xa9, 0xfa, 0x7e, 0x0f, 0x37, 0x17, 0x9c, 0x39, 0xed, 0x38, 0x97, 0xc0, 0x49, 0xf6, - 0xcd, 0xe6, 0xff, 0x14, 0x41, 0x61, 0xd5, 0x35, 0xfb, 0xbb, 0xda, 0xb3, 0x99, 0xfe, 0x79, 0x52, - 0x6d, 0x22, 0xd4, 0x4e, 0x69, 0x94, 0x76, 0xca, 0x23, 0xb4, 0x33, 0xcf, 0x68, 0x67, 0xfc, 0xa2, - 0xf3, 0x59, 0x30, 0xdf, 0x71, 0x7a, 0x3d, 0xd8, 0x41, 0xf2, 0xa8, 0x75, 0xf1, 0x6a, 0xcf, 0xac, - 0xc1, 0xa5, 0xe1, 0x98, 0xfc, 0xd0, 0x6f, 0x91, 0x35, 0x76, 0xa2, 0xf4, 0x51, 0x82, 0xf6, 0x32, - 0x09, 0xe4, 0xf5, 0xee, 0x0e, 0xe4, 0xd6, 0xe1, 0x73, 0xcc, 0x3a, 0xfc, 0x29, 0x50, 0xf4, 0x4d, - 0x77, 0x07, 0xfa, 0xc1, 0x3a, 0x01, 0x79, 0x0a, 0xaf, 0x0a, 0x90, 0x99, 0xab, 0x02, 0x7e, 0x00, - 0xe4, 0x91, 0xcc, 0xa8, 0x5b, 0xfc, 0xc3, 0x86, 0xc1, 0x8f, 0x65, 0xbf, 0x84, 0x4a, 0x5c, 0x42, - 0xb5, 0x36, 0xf0, 0x07, 0x83, 0x58, 0x17, 0x0e, 0x86, 0xb2, 0xbd, 0x0e, 0xcc, 0x5a, 0x1d, 0xc7, - 0xae, 0xed, 0x99, 0x3b, 0x90, 0x56, 0x33, 0x4a, 0x08, 0xde, 0xea, 0x7b, 0xce, 0x7d, 0x16, 0x5d, - 0xd4, 0x8a, 0x12, 0x50, 0x15, 0x76, 0xad, 0x6e, 0x17, 0xda, 0xb4, 0x65, 0xd3, 0xa7, 0xb3, 0x67, - 0x40, 0x1e, 0xf1, 0x80, 0xf4, 0x07, 0x19, 0x0b, 0xca, 0x31, 0x75, 0x1e, 0x35, 0x2b, 0xd2, 0x78, - 0x95, 0x1c, 0xbf, 0xe6, 0x2a, 0xe2, 0x35, 0x44, 0x2a, 0x37, 0xbc, 0x71, 0x3d, 0x0a, 0x14, 0x6c, - 0xa7, 0x0b, 0x47, 0x0e, 0x42, 0x24, 0x97, 0xfa, 0x38, 0x50, 0x80, 0x5d, 0xd4, 0x2b, 0xc8, 0x38, - 0xfb, 0x99, 0x64, 0x59, 0x1a, 0x24, 0x73, 0x3a, 0xd7, 0xa4, 0x61, 0xdc, 0x66, 0xdf, 0x00, 0x7f, - 0x62, 0x06, 0x1c, 0x27, 0x7d, 0x40, 0x6b, 0xff, 0x02, 0x22, 0x75, 0x01, 0x6a, 0xaf, 0x1f, 0x3e, - 0x70, 0x1d, 0xe7, 0x95, 0xfd, 0x24, 0x28, 0x78, 0xfb, 0x17, 0x42, 0x23, 0x94, 0x3c, 0xb0, 0x4d, - 0x57, 0x9a, 0xc8, 0x70, 0x26, 0x8f, 0x3b, 0x9c, 0x71, 0x43, 0x93, 0x1c, 0x34, 0xfe, 0x68, 0x20, - 0x23, 0x07, 0x3a, 0x82, 0x81, 0x6c, 0xd8, 0x30, 0x74, 0x1a, 0xcc, 0x98, 0xdb, 0x3e, 0x74, 0x23, - 0x33, 0x91, 0x3e, 0xa2, 0xa1, 0xf2, 0x02, 0xdc, 0x76, 0x5c, 0x24, 0x16, 0x12, 0x56, 0x36, 0x7c, - 0x66, 0x5a, 0x2e, 0xe0, 0x76, 0xd0, 0x6e, 0x01, 0x27, 0x6c, 0xa7, 0x0a, 0xfb, 0x54, 0xce, 0x04, - 0xc5, 0x05, 0x72, 0xbb, 0xfb, 0x81, 0x17, 0x07, 0xba, 0x92, 0xc5, 0x83, 0x5d, 0x89, 0xf6, 0xf9, - 0xb4, 0x73, 0xe6, 0x01, 0xa0, 0x27, 0x66, 0xa1, 0xa9, 0x4f, 0x04, 0xf3, 0x5d, 0xea, 0x21, 0xd6, - 0xb1, 0xc2, 0x56, 0x12, 0xfb, 0x1d, 0x97, 0x39, 0x52, 0xa4, 0x3c, 0xab, 0x48, 0xab, 0xa0, 0x84, - 0x8f, 0x63, 0x23, 0x4d, 0x2a, 0x0c, 0x78, 0xe4, 0xe3, 0x69, 0x5d, 0x58, 0x29, 0x46, 0x6c, 0x4b, - 0x15, 0xfa, 0x89, 0x11, 0x7e, 0x9c, 0x6e, 0xf6, 0x9d, 0x2c, 0xa1, 0xec, 0x9b, 0xe3, 0xaf, 0x14, - 0xc1, 0x35, 0x15, 0xd7, 0xf1, 0x3c, 0x7c, 0x04, 0x67, 0xb0, 0x61, 0xbe, 0x51, 0xe2, 0x2e, 0x0d, - 0x7a, 0x40, 0x37, 0xbf, 0x61, 0x0d, 0x6a, 0x7a, 0x4d, 0xe3, 0x2f, 0x84, 0x83, 0xde, 0x84, 0xfb, - 0x0f, 0x31, 0x42, 0xff, 0xcf, 0xd1, 0x48, 0xde, 0x93, 0x13, 0x89, 0xc3, 0x93, 0x52, 0x56, 0xd9, - 0x37, 0x97, 0xaf, 0x48, 0xe0, 0xda, 0x41, 0x6e, 0x36, 0x6d, 0x2f, 0x6c, 0x30, 0x0f, 0x19, 0xd1, - 0x5e, 0xf8, 0xb8, 0x2d, 0x89, 0x77, 0x04, 0xc7, 0xd4, 0x9d, 0x29, 0x2d, 0x66, 0xb1, 0x24, 0x3a, - 0xd0, 0x93, 0x74, 0x47, 0x70, 0x6a, 0xf2, 0xd9, 0x0b, 0xf7, 0xf7, 0xf3, 0xe0, 0xf8, 0xaa, 0xeb, - 0xec, 0xf7, 0xbd, 0xa8, 0x07, 0xfa, 0xd3, 0xe1, 0x1b, 0xb2, 0x45, 0x11, 0xd3, 0xe0, 0x7a, 0x30, - 0xe7, 0x52, 0x6b, 0x2e, 0xda, 0x9e, 0x65, 0x93, 0xd8, 0xde, 0x4b, 0x3e, 0x4c, 0xef, 0x15, 0xf5, - 0x33, 0x79, 0xae, 0x9f, 0x19, 0xec, 0x39, 0x0a, 0x43, 0x7a, 0x8e, 0x3f, 0x91, 0x52, 0x0e, 0xaa, - 0x03, 0x22, 0x8a, 0xe9, 0x2f, 0x2a, 0xa0, 0xb8, 0x83, 0x33, 0xd2, 0xee, 0xe2, 0x91, 0x62, 0x35, - 0xc3, 0xc4, 0x0d, 0xfa, 0x69, 0x24, 0x57, 0x99, 0xd5, 0xe1, 0x54, 0x03, 0x5c, 0x32, 0xb7, 0xd9, - 0x2b, 0xd5, 0x6b, 0xf3, 0x60, 0x3e, 0x2c, 0xbd, 0xd6, 0xf5, 0xb8, 0xe8, 0xb0, 0x8c, 0x46, 0x2d, - 0x88, 0x68, 0xd4, 0x81, 0x75, 0xe6, 0x70, 0xd4, 0x91, 0x99, 0x51, 0x67, 0xe8, 0xe8, 0x32, 0x1f, - 0x33, 0xba, 0x68, 0xcf, 0x92, 0x45, 0xaf, 0xdd, 0xe3, 0xbb, 0x56, 0x5c, 0x9b, 0x07, 0xf2, 0x60, - 0x21, 0x78, 0xf9, 0xdf, 0xe8, 0x5a, 0x65, 0xaf, 0x24, 0x1f, 0x91, 0xc0, 0x89, 0x83, 0x9d, 0xf9, - 0x43, 0x79, 0x2f, 0x35, 0x54, 0x27, 0x2f, 0xf4, 0x52, 0xc3, 0x4f, 0xfc, 0x26, 0x5d, 0x62, 0x10, - 0x14, 0xce, 0xde, 0x1b, 0xdd, 0x89, 0x8b, 0x85, 0x39, 0x11, 0x24, 0x9a, 0xbd, 0x00, 0x7f, 0x56, - 0x06, 0xb3, 0x2d, 0xe8, 0xd7, 0xcd, 0x2b, 0xce, 0xbe, 0xaf, 0x99, 0xa2, 0xdb, 0x73, 0x4f, 0x00, - 0xc5, 0x1e, 0xfe, 0x04, 0x77, 0x30, 0x6c, 0xd0, 0x52, 0x76, 0x7f, 0x0b, 0xfb, 0x06, 0x11, 0xd2, - 0x06, 0xcd, 0xcf, 0x47, 0x9f, 0x11, 0xd9, 0x1d, 0x0d, 0xb9, 0x9b, 0xc8, 0xd6, 0x4e, 0xaa, 0xbd, - 0xd3, 0xb8, 0xa2, 0xb3, 0x87, 0xe5, 0xc7, 0x64, 0xb0, 0xd0, 0x82, 0x7e, 0xcd, 0x5b, 0x31, 0x2f, - 0x39, 0xae, 0xe5, 0x43, 0x6d, 0x55, 0x14, 0x9a, 0x33, 0x00, 0x58, 0xe1, 0x67, 0x34, 0x4e, 0x16, - 0x93, 0xa2, 0xbd, 0x25, 0xad, 0xa3, 0x10, 0xc7, 0xc7, 0x44, 0x40, 0x48, 0xe5, 0x63, 0x91, 0x54, - 0xfc, 0x14, 0x2e, 0x0e, 0x97, 0x28, 0x10, 0x65, 0xb7, 0xb3, 0x6b, 0x5d, 0x82, 0xdd, 0x94, 0x40, - 0x04, 0x9f, 0x45, 0x40, 0x84, 0x84, 0x52, 0xbb, 0xaf, 0x70, 0x7c, 0x4c, 0xc2, 0x7d, 0x25, 0x89, - 0xe0, 0x54, 0xc2, 0x5a, 0xa1, 0xae, 0x87, 0xae, 0x67, 0xde, 0x25, 0x2a, 0xd6, 0xc8, 0x64, 0x93, - 0x58, 0x93, 0x6d, 0xac, 0x8e, 0x85, 0x94, 0x3d, 0x4a, 0xa7, 0xf3, 0x59, 0x74, 0x2c, 0x43, 0x8b, - 0xce, 0x5e, 0xe8, 0xef, 0x93, 0xc1, 0xd5, 0x61, 0xbc, 0x97, 0x16, 0xf4, 0xab, 0xa6, 0xb7, 0x7b, - 0xc1, 0x31, 0xdd, 0xae, 0x56, 0x99, 0xc0, 0x81, 0x43, 0xed, 0x8b, 0x2c, 0x08, 0x0d, 0x1e, 0x84, - 0xa1, 0xae, 0xa4, 0x43, 0x79, 0x99, 0x44, 0x27, 0x93, 0xe8, 0xed, 0xfa, 0x8e, 0x10, 0xac, 0xa7, - 0x72, 0x60, 0x3d, 0x69, 0x5c, 0x16, 0xb3, 0x07, 0xee, 0xe7, 0xc9, 0x88, 0xc0, 0x78, 0x3d, 0xdf, - 0x2b, 0x0a, 0x58, 0x8c, 0xd7, 0xab, 0x1c, 0xeb, 0xf5, 0x3a, 0xd6, 0x18, 0x31, 0xd2, 0x63, 0x39, - 0xdb, 0x31, 0xe2, 0x08, 0xbd, 0x91, 0xdf, 0x25, 0x03, 0x05, 0x07, 0xfc, 0x62, 0x3c, 0xc2, 0xd9, - 0xf8, 0xdb, 0xc9, 0xe8, 0x1c, 0xf0, 0x3e, 0x9f, 0x49, 0xeb, 0x7d, 0xae, 0xbd, 0x33, 0xad, 0x8f, - 0xf9, 0x20, 0xb7, 0x13, 0x41, 0x2c, 0x95, 0x0b, 0xf9, 0x08, 0x0e, 0xb2, 0x07, 0xed, 0x27, 0x65, - 0x00, 0x50, 0x83, 0xa6, 0x67, 0x23, 0x9e, 0x26, 0x0a, 0xd7, 0xad, 0xac, 0xdf, 0x3d, 0x02, 0xea, - 0xea, 0x01, 0xa0, 0x08, 0xc5, 0xe8, 0xd4, 0xc5, 0xeb, 0xd3, 0xfa, 0x56, 0x46, 0x5c, 0x4d, 0x04, - 0x96, 0x54, 0xde, 0x96, 0xb1, 0x65, 0x67, 0x0f, 0xc8, 0xaf, 0x4a, 0xa0, 0xd0, 0x76, 0x5a, 0xd0, - 0x3f, 0xbc, 0x29, 0x90, 0x3a, 0x6a, 0x00, 0x2e, 0x77, 0x12, 0x51, 0x03, 0x86, 0x11, 0xca, 0x5e, - 0x74, 0xef, 0x95, 0xc0, 0x7c, 0xdb, 0xa9, 0x84, 0x8b, 0x53, 0xe2, 0xbe, 0xaa, 0xff, 0x9a, 0x4b, - 0xb9, 0x86, 0xc1, 0x16, 0x13, 0x23, 0xb0, 0x54, 0xab, 0x07, 0x09, 0xf4, 0xb2, 0x97, 0xdb, 0xed, - 0xe0, 0xf8, 0xa6, 0xdd, 0x75, 0x0c, 0xd8, 0x75, 0xe8, 0x4a, 0xb7, 0xaa, 0x82, 0xfc, 0xbe, 0xdd, - 0x75, 0x30, 0xcb, 0x05, 0x03, 0xff, 0x47, 0x69, 0x2e, 0xec, 0x3a, 0xd4, 0x37, 0x00, 0xff, 0xd7, - 0xfe, 0x42, 0x06, 0x79, 0xf4, 0xad, 0xb8, 0xa8, 0xdf, 0x25, 0xa7, 0x8c, 0x83, 0x80, 0xc8, 0x4f, - 0xc4, 0x12, 0xba, 0x8b, 0x59, 0xfb, 0x27, 0x1e, 0xac, 0x0f, 0x8b, 0x2b, 0x8f, 0x11, 0x45, 0xb4, - 0xe6, 0xaf, 0x9e, 0x06, 0x33, 0x17, 0x7a, 0x4e, 0xe7, 0x62, 0x74, 0x5c, 0x9f, 0x3e, 0xaa, 0x37, - 0x83, 0x82, 0x6b, 0xda, 0x3b, 0x90, 0xee, 0x29, 0x9c, 0x1c, 0xe8, 0x0b, 0xb1, 0xd7, 0x8b, 0x41, - 0xb2, 0x68, 0xef, 0x4c, 0x13, 0x81, 0x61, 0x48, 0xe5, 0xd3, 0xe9, 0x43, 0x75, 0x8c, 0x93, 0x67, - 0x0a, 0x98, 0xaf, 0x94, 0x1b, 0xe4, 0x1e, 0xc4, 0xe6, 0x39, 0x5d, 0x91, 0x31, 0xcc, 0x48, 0x26, - 0x19, 0xc2, 0x8c, 0xc8, 0xff, 0xa7, 0x85, 0x79, 0x48, 0xe5, 0x8f, 0x02, 0xe6, 0xcf, 0x4a, 0x60, - 0xa1, 0x6e, 0x79, 0x7e, 0x9c, 0xb7, 0x7f, 0x42, 0xbc, 0xdf, 0x17, 0xa5, 0x35, 0x95, 0xb9, 0x72, - 0x84, 0x03, 0xfd, 0xa6, 0x32, 0x87, 0x93, 0x8a, 0x98, 0xce, 0xb1, 0x14, 0xcc, 0x01, 0xb9, 0x04, - 0x5f, 0x58, 0x92, 0xa9, 0x0d, 0xa5, 0xa8, 0x90, 0xe9, 0x1b, 0x4a, 0xb1, 0x65, 0x67, 0x2f, 0xdf, - 0xbf, 0x90, 0xc0, 0x09, 0x54, 0x7c, 0xd2, 0xb2, 0x54, 0xbc, 0x98, 0x47, 0x2e, 0x4b, 0xa5, 0x5e, - 0x19, 0x3f, 0xc0, 0xcb, 0x24, 0x56, 0xc6, 0x47, 0x11, 0x9d, 0xb2, 0x98, 0x63, 0x96, 0x61, 0x47, - 0x89, 0x39, 0x61, 0x19, 0x76, 0x7c, 0x31, 0x27, 0x2f, 0xc5, 0x8e, 0x29, 0xe6, 0x23, 0x5b, 0x60, - 0xfd, 0x25, 0x39, 0x14, 0x73, 0xec, 0xda, 0x46, 0x82, 0x98, 0x53, 0x9f, 0xe8, 0xd5, 0xde, 0x3d, - 0xa6, 0xe0, 0x27, 0xbc, 0xbe, 0x31, 0x0e, 0x4c, 0x47, 0xb8, 0xc6, 0xf1, 0x0b, 0x32, 0x58, 0xa4, - 0x5c, 0x0c, 0x9f, 0x32, 0x27, 0x60, 0x94, 0x7a, 0xca, 0x9c, 0xfa, 0x0c, 0x10, 0xcf, 0xd9, 0xf4, - 0xcf, 0x00, 0x25, 0x96, 0x9f, 0x3d, 0x38, 0x7f, 0x95, 0x07, 0xa7, 0x10, 0x0b, 0xeb, 0x4e, 0xd7, - 0xda, 0xbe, 0x42, 0xb8, 0x38, 0x67, 0xf6, 0xf6, 0xa1, 0xa7, 0x7d, 0x40, 0x12, 0x45, 0xe9, 0xbf, - 0x02, 0xe0, 0xf4, 0xa1, 0x4b, 0xe2, 0xb8, 0x51, 0xa0, 0xee, 0x8c, 0xab, 0xec, 0xc1, 0x92, 0xc2, - 0xeb, 0x73, 0x9a, 0x01, 0x11, 0x83, 0xa1, 0x87, 0xac, 0xc2, 0xd9, 0xf0, 0xcd, 0xa0, 0x83, 0x47, - 0xee, 0xa0, 0x83, 0xc7, 0x4d, 0x40, 0x36, 0xbb, 0xdd, 0x10, 0xaa, 0xc1, 0xcd, 0x6c, 0x5c, 0xa6, - 0x81, 0xb2, 0xa0, 0x9c, 0x1e, 0x8c, 0x8e, 0xe6, 0xc5, 0xe4, 0xf4, 0xa0, 0xaf, 0x2e, 0x81, 0x22, - 0xb9, 0x4e, 0x3c, 0x5c, 0xd1, 0x1f, 0x9e, 0x99, 0xe6, 0xe2, 0x4d, 0xbb, 0x26, 0xaf, 0x86, 0xb7, - 0xa7, 0x92, 0xcc, 0xb0, 0x7e, 0x3a, 0xb2, 0x93, 0x0d, 0x4e, 0xc1, 0x9e, 0x3c, 0x36, 0xe5, 0xe9, - 0xec, 0x86, 0x95, 0xfb, 0xfd, 0xde, 0x95, 0x36, 0x0d, 0x3c, 0x90, 0x6a, 0x37, 0x8c, 0x89, 0x5f, - 0x20, 0x1d, 0x88, 0x5f, 0x90, 0x7a, 0x37, 0x8c, 0xe3, 0x63, 0x12, 0xbb, 0x61, 0x49, 0x04, 0xb3, - 0x17, 0xed, 0xdf, 0x96, 0x88, 0xd5, 0x4c, 0x6f, 0x23, 0xf8, 0xc7, 0xe1, 0x9e, 0xd5, 0x80, 0x77, - 0x76, 0x19, 0x76, 0x51, 0x41, 0xe2, 0x2d, 0x2c, 0xea, 0xe3, 0x40, 0x71, 0xdb, 0x71, 0xf7, 0xcc, - 0x60, 0xe3, 0x7e, 0xf0, 0xa4, 0x08, 0xbd, 0x01, 0x60, 0x05, 0xe7, 0x31, 0x68, 0x5e, 0x34, 0x1f, - 0x79, 0xa6, 0xd5, 0xa7, 0x41, 0x1f, 0xd1, 0x5f, 0xf5, 0x06, 0xb0, 0x40, 0x63, 0x3f, 0x36, 0xa0, - 0xe7, 0xc3, 0x2e, 0x8d, 0x68, 0xc1, 0x27, 0xaa, 0x67, 0xc1, 0x3c, 0x4d, 0x58, 0xb1, 0x7a, 0xd0, - 0xa3, 0x41, 0x2d, 0xb8, 0x34, 0xf5, 0x14, 0x28, 0x5a, 0xde, 0xdd, 0x9e, 0x63, 0xd3, 0x80, 0x7c, - 0xf4, 0x49, 0xbd, 0x09, 0x1c, 0xa7, 0xf9, 0x42, 0x63, 0x95, 0x1c, 0xd8, 0x19, 0x4c, 0x46, 0xaa, - 0x65, 0x3b, 0x1b, 0xae, 0xb3, 0xe3, 0x42, 0xcf, 0xc3, 0xa7, 0xa6, 0x4a, 0x06, 0x93, 0xa2, 0xde, - 0x0b, 0x4e, 0xf4, 0x2c, 0xfb, 0xa2, 0x87, 0x63, 0x04, 0xaf, 0x50, 0xb7, 0xb1, 0xf9, 0x21, 0xb1, - 0xbb, 0x99, 0xc6, 0x46, 0xe5, 0xc0, 0x7e, 0x62, 0x1c, 0xa4, 0xa2, 0xde, 0x0c, 0x14, 0xca, 0xcd, - 0xb2, 0xd9, 0xb9, 0x88, 0xdf, 0x53, 0x77, 0xd4, 0x03, 0xe9, 0x8c, 0x30, 0x48, 0x18, 0xfd, 0x45, - 0x4e, 0x18, 0x24, 0x92, 0xfe, 0x4b, 0x72, 0x60, 0x9e, 0x2b, 0xc0, 0x04, 0x6a, 0xd0, 0x2d, 0x7a, - 0xe7, 0x77, 0x2d, 0x1f, 0x22, 0xe6, 0xe8, 0x59, 0x97, 0xc7, 0x8c, 0x60, 0xde, 0x38, 0xf0, 0xa1, - 0x31, 0x84, 0x18, 0xe2, 0x8b, 0x74, 0x78, 0xd8, 0xb3, 0xcc, 0xa3, 0xb6, 0x2a, 0x97, 0xa6, 0x3d, - 0x13, 0xa8, 0x07, 0xa9, 0x31, 0x5e, 0x20, 0xb9, 0x74, 0x5e, 0x20, 0x48, 0x6e, 0x66, 0xaf, 0xe7, - 0x5c, 0x86, 0xdd, 0x90, 0x2c, 0xd5, 0xd5, 0x03, 0xe9, 0xda, 0x17, 0xc6, 0x99, 0x17, 0xa6, 0xbe, - 0x58, 0x03, 0x35, 0xb2, 0xfd, 0x4e, 0x07, 0xc2, 0x2e, 0x3d, 0xb8, 0x16, 0x3c, 0xa6, 0xbc, 0x72, - 0x23, 0xf5, 0x2c, 0xf2, 0x88, 0xee, 0xdc, 0x78, 0x7f, 0x74, 0xf3, 0xc9, 0xbe, 0x48, 0x57, 0x93, - 0x74, 0x3e, 0x7e, 0xac, 0x4e, 0x45, 0x7b, 0x6f, 0xda, 0xd3, 0xa2, 0x89, 0x98, 0x9e, 0x42, 0x83, - 0xbb, 0xb7, 0xdf, 0x0b, 0x8f, 0x3b, 0x91, 0xa7, 0x94, 0xe8, 0xa5, 0x3a, 0x40, 0x7a, 0x44, 0xc8, - 0x7d, 0xfc, 0x6a, 0x50, 0x24, 0x37, 0x17, 0x6a, 0x2f, 0x59, 0x1c, 0x0a, 0xdd, 0x22, 0x0f, 0xdd, - 0x26, 0x98, 0xb7, 0x1d, 0x54, 0xdc, 0x86, 0xe9, 0x9a, 0x7b, 0x5e, 0xd2, 0xf2, 0x3e, 0xa1, 0x1b, - 0xda, 0x72, 0x0d, 0xe6, 0xb3, 0xb5, 0x63, 0x06, 0x47, 0x46, 0xfd, 0xbf, 0xc0, 0xf1, 0x0b, 0x34, - 0x34, 0x87, 0x47, 0x29, 0x4b, 0xf1, 0xce, 0xaf, 0x03, 0x94, 0x97, 0xf9, 0x2f, 0xd7, 0x8e, 0x19, - 0x83, 0xc4, 0xd4, 0xff, 0x02, 0x16, 0xd1, 0x63, 0xd7, 0xb9, 0x1c, 0x30, 0x2e, 0xc7, 0xcf, 0x00, - 0x06, 0xc8, 0xaf, 0x73, 0x1f, 0xae, 0x1d, 0x33, 0x06, 0x48, 0xa9, 0x4d, 0x00, 0x76, 0xfd, 0xbd, - 0x1e, 0x25, 0x9c, 0x8f, 0xef, 0x4c, 0x06, 0x08, 0xaf, 0x85, 0x1f, 0xad, 0x1d, 0x33, 0x18, 0x12, - 0x6a, 0x1d, 0xcc, 0xfa, 0xf7, 0xfb, 0x94, 0x5e, 0x21, 0xde, 0xeb, 0x64, 0x80, 0x5e, 0x3b, 0xf8, - 0x66, 0xed, 0x98, 0x11, 0x11, 0x50, 0x6b, 0xa0, 0xd4, 0xbf, 0x40, 0x89, 0x15, 0xe3, 0x47, 0xaa, - 0x01, 0x62, 0x1b, 0x17, 0x42, 0x5a, 0xe1, 0xe7, 0x88, 0xb1, 0x8e, 0x77, 0x89, 0xd2, 0x9a, 0x11, - 0x66, 0xac, 0x12, 0x7c, 0x83, 0x18, 0x0b, 0x09, 0xa8, 0x35, 0x30, 0xeb, 0xd9, 0x66, 0xdf, 0xdb, - 0x75, 0x7c, 0xef, 0x74, 0x69, 0xc0, 0x41, 0x39, 0x9e, 0x5a, 0x8b, 0x7e, 0x63, 0x44, 0x5f, 0xab, - 0x8f, 0x03, 0x57, 0xef, 0xf7, 0xbb, 0xa6, 0x0f, 0xf5, 0xfb, 0x2d, 0x2f, 0xba, 0xbd, 0x32, 0x38, - 0x97, 0x3b, 0xfc, 0xa5, 0xba, 0x44, 0x8f, 0x2a, 0x02, 0xdc, 0x2e, 0xb5, 0xc1, 0x5d, 0x72, 0x52, - 0x2c, 0x73, 0x42, 0xf1, 0x89, 0x20, 0x8f, 0x5e, 0x61, 0xb3, 0x60, 0x71, 0xf8, 0x0a, 0xfc, 0xa0, - 0xee, 0xe0, 0x06, 0x8c, 0x3e, 0x1a, 0xb0, 0x2c, 0xe6, 0x0f, 0x58, 0x16, 0xd7, 0x83, 0x39, 0xcb, - 0x5b, 0xb7, 0x76, 0xc8, 0xb4, 0x86, 0x8e, 0xfc, 0x6c, 0x12, 0x59, 0x06, 0x6a, 0xc0, 0xcb, 0x64, - 0xc8, 0x3f, 0x1e, 0x2c, 0x03, 0x05, 0x29, 0xda, 0x8d, 0x60, 0x9e, 0x6d, 0x64, 0xe4, 0xfa, 0x63, - 0x2b, 0x9a, 0x14, 0xd1, 0x27, 0xed, 0x06, 0xb0, 0xc8, 0xeb, 0x34, 0x63, 0xfb, 0xc9, 0xc1, 0x20, - 0xa6, 0x3d, 0x0c, 0x1c, 0x1f, 0x68, 0x58, 0x41, 0xb0, 0x9f, 0x5c, 0x14, 0xec, 0xe7, 0x7a, 0x00, - 0x22, 0x2d, 0x1e, 0x4a, 0xe6, 0x21, 0x60, 0x36, 0xd4, 0xcb, 0xa1, 0x19, 0xbe, 0x9e, 0x03, 0xa5, - 0x40, 0xd9, 0x86, 0x65, 0x40, 0x36, 0x85, 0xcd, 0xec, 0xec, 0x05, 0x36, 0x05, 0x9b, 0x86, 0x0c, - 0xbc, 0xc8, 0x9f, 0xbe, 0x6d, 0xf9, 0xbd, 0xe0, 0x4c, 0xea, 0x60, 0xb2, 0xba, 0x01, 0x80, 0x85, - 0x31, 0x6a, 0x47, 0x87, 0x54, 0x1f, 0x9d, 0xa2, 0x3d, 0x10, 0x7d, 0x60, 0x68, 0x9c, 0x7d, 0x28, - 0x3d, 0x41, 0x3a, 0x0b, 0x0a, 0xe4, 0x82, 0x85, 0x63, 0xea, 0x22, 0x00, 0xfa, 0xd3, 0x36, 0x74, - 0xa3, 0xa6, 0x37, 0x2a, 0xba, 0x92, 0xd3, 0x5e, 0x2e, 0x81, 0xd9, 0xb0, 0x11, 0x0c, 0xad, 0xa4, - 0x4e, 0x55, 0x6b, 0xe4, 0x0d, 0xb3, 0x07, 0x1b, 0x15, 0xab, 0x64, 0x4f, 0x00, 0x0f, 0xda, 0xf7, - 0xe0, 0x8a, 0xe5, 0x7a, 0xbe, 0xe1, 0x5c, 0x5e, 0x71, 0xdc, 0xc8, 0x24, 0x22, 0xa1, 0x89, 0xe3, - 0x5e, 0x23, 0x53, 0xbf, 0x0b, 0xf1, 0x69, 0x45, 0xe8, 0xd2, 0x2d, 0x9b, 0x28, 0x01, 0xd1, 0xf5, - 0x5d, 0xd3, 0xf6, 0xfa, 0x8e, 0x07, 0x0d, 0xe7, 0xb2, 0x57, 0xb6, 0xbb, 0x15, 0xa7, 0xb7, 0xbf, - 0x67, 0x7b, 0xd4, 0x58, 0x8f, 0x7b, 0x8d, 0xa4, 0x83, 0xef, 0x8f, 0x5e, 0x04, 0xa0, 0xd2, 0xac, - 0xd7, 0xf5, 0x4a, 0xbb, 0xd6, 0x6c, 0x28, 0xc7, 0x90, 0xb4, 0xda, 0xe5, 0xe5, 0x3a, 0x92, 0xce, - 0xd3, 0x41, 0x29, 0x68, 0xd3, 0x34, 0x3e, 0x51, 0x2e, 0x88, 0x4f, 0xa4, 0x96, 0x41, 0x29, 0x68, - 0xe5, 0x74, 0x44, 0x78, 0xf8, 0xe0, 0x79, 0xf4, 0x3d, 0xd3, 0xf5, 0xb1, 0x69, 0x19, 0x10, 0x59, - 0x36, 0x3d, 0x68, 0x84, 0x9f, 0x9d, 0x7d, 0x14, 0xe5, 0x40, 0x05, 0x8b, 0xe5, 0x7a, 0x7d, 0xab, - 0x69, 0x6c, 0x35, 0x9a, 0xed, 0xb5, 0x5a, 0x63, 0x95, 0x8c, 0x90, 0xb5, 0xd5, 0x46, 0xd3, 0xd0, - 0xc9, 0x00, 0xd9, 0x52, 0x72, 0xe4, 0xfe, 0xf2, 0xe5, 0x12, 0x28, 0xf6, 0xb1, 0x74, 0xb5, 0xaf, - 0xc8, 0x29, 0x4d, 0x8b, 0x10, 0xa7, 0x98, 0x1b, 0x96, 0xb9, 0xc3, 0x20, 0xd2, 0x90, 0xc3, 0xda, - 0x67, 0xc1, 0x3c, 0x31, 0x87, 0x3c, 0xbc, 0xaf, 0x86, 0x91, 0x93, 0x0d, 0x2e, 0x4d, 0xfb, 0xa4, - 0x94, 0xc2, 0xb8, 0x18, 0xca, 0x51, 0x3a, 0xe3, 0xe2, 0x0f, 0x72, 0xe3, 0x5d, 0x47, 0x52, 0x6b, - 0xb4, 0x75, 0xa3, 0x51, 0xae, 0xd3, 0x2c, 0xb2, 0x7a, 0x1a, 0x9c, 0x6c, 0x34, 0x69, 0x30, 0xce, - 0xd6, 0x56, 0xbb, 0xb9, 0x55, 0x5b, 0xdf, 0x68, 0x1a, 0x6d, 0xa5, 0xa0, 0x9e, 0x02, 0x2a, 0xf9, - 0xbf, 0x55, 0x6b, 0x6d, 0x55, 0xca, 0x8d, 0x8a, 0x5e, 0xd7, 0xab, 0x4a, 0x51, 0x7d, 0x04, 0x78, - 0x18, 0xb9, 0xde, 0xaa, 0xb9, 0xb2, 0x65, 0x34, 0xcf, 0xb7, 0x10, 0x82, 0x86, 0x5e, 0x2f, 0x23, - 0x45, 0x62, 0xee, 0x31, 0x9f, 0x51, 0xaf, 0x02, 0xc7, 0x57, 0x6a, 0x75, 0x1d, 0xdf, 0x46, 0x4b, - 0xcb, 0x2b, 0xa9, 0xd7, 0x81, 0xd3, 0xb5, 0x46, 0x6b, 0x73, 0x65, 0xa5, 0x56, 0xa9, 0xe9, 0x8d, - 0xf6, 0xd6, 0x86, 0x6e, 0xac, 0xd7, 0x5a, 0x2d, 0xf4, 0xad, 0x32, 0xab, 0x7d, 0x5c, 0x06, 0x45, - 0xd2, 0x67, 0x22, 0x23, 0x76, 0xe1, 0x9c, 0xd9, 0xb3, 0xd0, 0x40, 0x81, 0xaf, 0x8f, 0x1f, 0x38, - 0xc7, 0xe5, 0xe3, 0x6b, 0xe6, 0xe9, 0x49, 0x10, 0xfc, 0xa0, 0xfd, 0xa8, 0x9c, 0xf2, 0x1c, 0x17, - 0x05, 0x82, 0x94, 0xb8, 0xc4, 0x95, 0x16, 0xb3, 0xea, 0xf0, 0x1a, 0x29, 0xc5, 0x39, 0x2e, 0x71, - 0xf2, 0xe9, 0xc0, 0xff, 0xc5, 0x49, 0x81, 0xaf, 0x80, 0xf9, 0xcd, 0x46, 0x79, 0xb3, 0xbd, 0xd6, - 0x34, 0x6a, 0x3f, 0x88, 0x6f, 0x21, 0x58, 0x00, 0xb3, 0x2b, 0x4d, 0x63, 0xb9, 0x56, 0xad, 0xea, - 0x0d, 0xa5, 0xa0, 0x3e, 0x08, 0x5c, 0xd5, 0xd2, 0x8d, 0x73, 0xb5, 0x8a, 0xbe, 0xb5, 0xd9, 0x28, - 0x9f, 0x2b, 0xd7, 0xea, 0xb8, 0x8f, 0x28, 0x26, 0x5c, 0x7d, 0x3f, 0xa3, 0xfd, 0x70, 0x1e, 0x00, - 0x52, 0x75, 0x7c, 0x09, 0x17, 0x73, 0x41, 0xfa, 0x1f, 0xa5, 0x9d, 0xee, 0x45, 0x64, 0x62, 0xda, - 0x6f, 0x0d, 0x94, 0x5c, 0xfa, 0x82, 0xae, 0x6b, 0x8e, 0xa2, 0x43, 0xfe, 0x06, 0xd4, 0x8c, 0xf0, - 0x73, 0xed, 0x03, 0x69, 0x66, 0x77, 0xb1, 0x8c, 0x4d, 0xe5, 0xa6, 0xe7, 0x41, 0x20, 0xb5, 0x17, - 0xe6, 0xc0, 0x22, 0x5f, 0x31, 0x54, 0x09, 0x6c, 0x4c, 0x89, 0x55, 0x82, 0xff, 0x98, 0x31, 0xb2, - 0xce, 0x3e, 0x96, 0x0e, 0xa7, 0x20, 0x68, 0x99, 0x24, 0x24, 0x43, 0x60, 0xb1, 0x28, 0x39, 0xc4, - 0x3c, 0x32, 0x3a, 0x14, 0x49, 0x9d, 0x01, 0x72, 0xfb, 0x7e, 0x5f, 0x91, 0xb5, 0x4f, 0xe7, 0xc1, - 0x02, 0x77, 0x03, 0xbb, 0xf6, 0xc7, 0x39, 0x91, 0xdb, 0x8d, 0x99, 0xbb, 0xdd, 0x73, 0x87, 0xbd, - 0xdb, 0xfd, 0xac, 0x05, 0x66, 0x68, 0x1a, 0x96, 0x6f, 0xb3, 0x81, 0x4c, 0x81, 0xe3, 0x60, 0x6e, - 0x55, 0x6f, 0x6f, 0xb5, 0xda, 0x65, 0xa3, 0xad, 0x57, 0x95, 0x1c, 0x1a, 0xf8, 0xf4, 0xf5, 0x8d, - 0xf6, 0xbd, 0x8a, 0x84, 0xc6, 0xc4, 0xd5, 0xcd, 0x5a, 0x55, 0xdf, 0x6a, 0x36, 0xea, 0xf7, 0x2a, - 0x32, 0xea, 0x01, 0x99, 0xbc, 0x5b, 0xeb, 0xcd, 0xe5, 0x5a, 0x5d, 0x57, 0xf2, 0xa8, 0xd9, 0xe0, - 0x4f, 0x82, 0x94, 0x02, 0xef, 0x1b, 0x2d, 0xb2, 0xc2, 0x39, 0x58, 0x85, 0xc3, 0xbb, 0x88, 0xa4, - 0xb9, 0x42, 0x3e, 0xd5, 0xda, 0x69, 0x12, 0xab, 0xd9, 0xcf, 0x88, 0x3f, 0x2f, 0x03, 0x85, 0x70, - 0xa0, 0xdf, 0xdf, 0x87, 0xae, 0x05, 0xed, 0x0e, 0xd4, 0x2e, 0x8a, 0x04, 0x04, 0x3e, 0x10, 0x0a, - 0x13, 0x8f, 0x1a, 0x8c, 0x2d, 0x4a, 0x1e, 0x06, 0xcc, 0xf8, 0xfc, 0x01, 0x33, 0xfe, 0x77, 0xd2, - 0x7a, 0xe0, 0x0e, 0xb2, 0x3b, 0x91, 0x3d, 0xab, 0xcf, 0xa4, 0xf1, 0xc0, 0x1d, 0xc1, 0xc1, 0x54, - 0xe2, 0x7c, 0xc7, 0x8c, 0xf2, 0x8a, 0xac, 0xbd, 0x40, 0x06, 0xc7, 0xab, 0xa6, 0x0f, 0x97, 0xaf, - 0xb4, 0x83, 0x7b, 0x54, 0x63, 0xee, 0x3e, 0xcf, 0x1d, 0xb8, 0xfb, 0x3c, 0xba, 0x8a, 0x55, 0x1a, - 0xb8, 0x8a, 0x55, 0x7b, 0x4f, 0xda, 0x33, 0xbb, 0x03, 0x3c, 0x4c, 0x2c, 0x18, 0x77, 0xba, 0xb3, - 0xb8, 0xc9, 0x5c, 0x64, 0xdf, 0xc0, 0xde, 0x3e, 0x0b, 0x14, 0xc2, 0x0a, 0xe3, 0x64, 0xfa, 0xb3, - 0x32, 0x90, 0xcb, 0xdd, 0xae, 0xb6, 0x95, 0x22, 0xa6, 0x67, 0x10, 0x25, 0x45, 0xe2, 0xa3, 0xa4, - 0x70, 0x7b, 0x16, 0xf2, 0xa0, 0x63, 0x50, 0xda, 0xd3, 0x08, 0x8c, 0x47, 0x69, 0x7c, 0x18, 0xe5, - 0xec, 0x4e, 0x23, 0x24, 0x16, 0x3f, 0x9d, 0x2b, 0xad, 0xe9, 0x2d, 0xb2, 0xba, 0x28, 0x32, 0xc9, - 0x37, 0xf7, 0xa7, 0x3d, 0x5e, 0xc0, 0x79, 0xf4, 0x26, 0x5c, 0x67, 0x9f, 0xdd, 0xf1, 0x82, 0x51, - 0x1c, 0x64, 0x8f, 0xc2, 0x77, 0x25, 0x90, 0x6f, 0x39, 0xae, 0x3f, 0x29, 0x0c, 0xd2, 0xba, 0x44, - 0x30, 0x12, 0x68, 0xc5, 0xcf, 0x6c, 0xb3, 0x73, 0x89, 0x48, 0x2e, 0x7f, 0x0a, 0x61, 0x51, 0x8f, - 0x83, 0x45, 0xc2, 0x49, 0x78, 0xa7, 0xd0, 0xbf, 0x49, 0xa4, 0xbf, 0xba, 0x47, 0x14, 0x11, 0xbc, - 0x31, 0x16, 0xba, 0x24, 0x04, 0xa0, 0x70, 0x69, 0xda, 0x1b, 0x59, 0x5c, 0xaa, 0x3c, 0x2e, 0xc3, - 0xe6, 0xf5, 0xe1, 0xb5, 0x3c, 0x93, 0xea, 0x99, 0xd2, 0x44, 0x58, 0x4d, 0x28, 0x3c, 0x7b, 0x44, - 0x9e, 0x23, 0x83, 0x22, 0x75, 0x09, 0x9d, 0x28, 0x02, 0x69, 0x5b, 0x46, 0x28, 0x04, 0x31, 0xd7, - 0x51, 0x79, 0xd2, 0x2d, 0x23, 0xb9, 0xfc, 0xec, 0x71, 0xf8, 0x77, 0xea, 0xeb, 0x5c, 0xbe, 0x64, - 0x5a, 0x3d, 0xf3, 0x42, 0x2f, 0x45, 0x64, 0xf3, 0x4f, 0xa6, 0x3c, 0xdd, 0x19, 0x56, 0x95, 0x2b, - 0x2f, 0x46, 0xe2, 0xdf, 0x0f, 0x66, 0x5d, 0x6e, 0x2f, 0x18, 0x59, 0x51, 0x03, 0x7e, 0xe6, 0xf4, - 0xbd, 0x11, 0xe5, 0x4c, 0x75, 0x94, 0x53, 0x88, 0x9f, 0xa9, 0x1c, 0x3d, 0x9b, 0x2b, 0x77, 0xbb, - 0x2b, 0xd0, 0xf4, 0xf7, 0x5d, 0xd8, 0x4d, 0x35, 0x44, 0xb8, 0x03, 0xdb, 0xe5, 0x8c, 0x24, 0xb8, - 0xd8, 0xa2, 0x75, 0x1e, 0x9d, 0xc7, 0x8f, 0xe8, 0x0d, 0x02, 0x5e, 0x26, 0xd2, 0x25, 0xbd, 0x2d, - 0x84, 0xa4, 0xc9, 0x41, 0xf2, 0xc4, 0xf1, 0x98, 0xc8, 0x1e, 0x90, 0x97, 0xca, 0x60, 0x91, 0xd8, - 0x09, 0x93, 0xc6, 0xe4, 0xc3, 0x29, 0x5d, 0xc8, 0x98, 0x5b, 0xdb, 0x58, 0x76, 0x26, 0x02, 0x4b, - 0x1a, 0x87, 0x33, 0x31, 0x3e, 0xb2, 0x47, 0xe6, 0x7f, 0x5e, 0x05, 0x00, 0xe3, 0x16, 0xfc, 0xc9, - 0x62, 0x14, 0xe7, 0x53, 0x7b, 0x27, 0x9d, 0x7f, 0xb4, 0xb8, 0xa0, 0xf3, 0x8c, 0xcb, 0x6f, 0xb8, - 0xed, 0xc5, 0x27, 0x0a, 0x8d, 0x2a, 0x7f, 0x90, 0xd2, 0xe6, 0xa5, 0x4e, 0xb9, 0x23, 0x07, 0xf7, - 0x31, 0x7b, 0xb9, 0x4f, 0xa5, 0x30, 0x7e, 0x47, 0xb1, 0x92, 0x0e, 0xb5, 0xfa, 0x18, 0x33, 0xfb, - 0xd3, 0xe0, 0xa4, 0xa1, 0x97, 0xab, 0xcd, 0x46, 0xfd, 0x5e, 0xf6, 0x0a, 0x2f, 0x45, 0x66, 0x27, - 0x27, 0x99, 0xc0, 0xf6, 0xba, 0x94, 0x7d, 0x20, 0x2f, 0xab, 0xa4, 0xd9, 0x0a, 0xb3, 0xb8, 0x32, - 0xba, 0x57, 0x13, 0x20, 0x7b, 0x94, 0x28, 0x7c, 0xb3, 0x08, 0xe6, 0x0c, 0xd8, 0x71, 0xf6, 0xf6, - 0xa0, 0xdd, 0x85, 0x5d, 0xed, 0x75, 0x32, 0x98, 0x0f, 0x77, 0x15, 0x5b, 0xd0, 0xd7, 0xfe, 0x4b, - 0x84, 0xcd, 0x59, 0x30, 0x8f, 0x2a, 0xd7, 0xe4, 0x2f, 0x12, 0xe0, 0xd2, 0xd4, 0x5b, 0xc0, 0x89, - 0x00, 0x85, 0xe6, 0xc0, 0x14, 0xe6, 0xe0, 0x0b, 0xde, 0xef, 0x67, 0x93, 0xc7, 0xe8, 0xae, 0x78, - 0x61, 0x86, 0xec, 0x2e, 0xb1, 0xac, 0xc6, 0x80, 0xf5, 0x7b, 0x21, 0x58, 0x4f, 0xe3, 0xc0, 0xaa, - 0x1e, 0x92, 0xfe, 0x51, 0xa2, 0xf6, 0x21, 0x19, 0x9c, 0x0c, 0x3a, 0xe2, 0xe9, 0xa1, 0xf5, 0x29, - 0x16, 0xad, 0xa7, 0xf3, 0x68, 0xad, 0x8a, 0x48, 0x73, 0x18, 0xcb, 0x31, 0xa8, 0x7d, 0x39, 0x44, - 0xed, 0x87, 0x38, 0xd4, 0xea, 0x13, 0x2a, 0xe7, 0x28, 0xd1, 0xfb, 0xb0, 0x0c, 0x4e, 0x23, 0xb3, - 0xb3, 0xe2, 0xd8, 0xdb, 0x3d, 0xab, 0xe3, 0x5b, 0xf6, 0x4e, 0xe4, 0xe2, 0xb8, 0x2a, 0xb2, 0xb2, - 0x39, 0x88, 0xad, 0x74, 0x10, 0x5b, 0x7e, 0x8f, 0x41, 0xb4, 0x6d, 0xc5, 0xb1, 0x15, 0x33, 0x84, - 0x31, 0xce, 0xfb, 0x91, 0xe6, 0xb0, 0x49, 0xe9, 0x5b, 0x9f, 0x20, 0x07, 0x47, 0x89, 0xdf, 0xd7, - 0x25, 0x70, 0xca, 0x80, 0x9e, 0xd3, 0xbb, 0x04, 0x89, 0x2f, 0x6b, 0xc0, 0xaf, 0xa7, 0x3d, 0x2a, - 0x55, 0xfb, 0xd3, 0x5e, 0xca, 0x62, 0xd4, 0xe2, 0x31, 0x7a, 0x52, 0xbc, 0xa6, 0x0f, 0x2b, 0x3a, - 0xa6, 0x1d, 0xbd, 0x37, 0x94, 0xff, 0x39, 0x4e, 0xfe, 0xcb, 0x87, 0xa2, 0x3e, 0x85, 0x25, 0x02, - 0xc0, 0x98, 0x77, 0xcf, 0x97, 0x81, 0x82, 0x7d, 0x96, 0xf1, 0xe8, 0x49, 0xef, 0x10, 0x6e, 0xf2, - 0xa7, 0x59, 0xfa, 0x81, 0x12, 0x06, 0xa7, 0x59, 0x82, 0x04, 0xf5, 0x46, 0xb0, 0xd8, 0xd9, 0x85, - 0x9d, 0x8b, 0x35, 0x3b, 0xf0, 0x2a, 0x23, 0x2e, 0x48, 0x03, 0xa9, 0xbc, 0xc1, 0x70, 0x0f, 0x0f, - 0x06, 0xbf, 0xb8, 0xcb, 0x4d, 0x1e, 0x59, 0xa6, 0x62, 0x40, 0xf8, 0xcd, 0x10, 0x84, 0x06, 0x07, - 0xc2, 0x1d, 0x63, 0x51, 0x4d, 0x27, 0xfc, 0xc6, 0x18, 0xaa, 0xaf, 0x81, 0x53, 0xcd, 0x8d, 0x76, - 0xad, 0xd9, 0xd8, 0xda, 0x6c, 0xe9, 0xd5, 0xad, 0xe5, 0xa0, 0x01, 0xb4, 0x14, 0x59, 0xfb, 0x86, - 0x04, 0x66, 0x08, 0x5b, 0x9e, 0xf6, 0xc8, 0x08, 0x82, 0x91, 0xc7, 0x78, 0xb4, 0xb7, 0x0b, 0x07, - 0xe5, 0x0a, 0x05, 0x41, 0xcb, 0x89, 0xe9, 0x7c, 0x9e, 0x00, 0x66, 0x08, 0xc8, 0xc1, 0x4e, 0xcb, - 0x99, 0x18, 0xeb, 0x99, 0x92, 0x31, 0x82, 0xec, 0x82, 0x01, 0xba, 0x46, 0xb0, 0x91, 0x7d, 0x1b, - 0x78, 0x56, 0x9e, 0x2c, 0xcf, 0x9c, 0xb7, 0xfc, 0x5d, 0x7c, 0xca, 0x47, 0x7b, 0xaa, 0xc8, 0xe0, - 0x70, 0x0b, 0x28, 0x5c, 0x42, 0xb9, 0x47, 0x9c, 0x98, 0x22, 0x99, 0xb4, 0x5f, 0x14, 0x8e, 0x07, - 0xcf, 0xe9, 0x67, 0xc8, 0x53, 0x0c, 0x38, 0xeb, 0x20, 0xdf, 0xb3, 0x3c, 0x9f, 0xce, 0x6b, 0x6e, - 0x4f, 0x45, 0x28, 0xf8, 0x53, 0xf3, 0xe1, 0x9e, 0x81, 0xc9, 0x68, 0x77, 0x23, 0xab, 0x34, 0x4a, - 0x15, 0x38, 0x35, 0x76, 0x1a, 0xcc, 0xd0, 0x68, 0x06, 0x74, 0xeb, 0x2f, 0x78, 0x14, 0xdc, 0x6e, - 0x13, 0xaa, 0x6d, 0xf6, 0x3a, 0xf0, 0xff, 0x1e, 0x07, 0x33, 0x6b, 0x96, 0xe7, 0x3b, 0xee, 0x15, - 0xed, 0xf5, 0x39, 0x30, 0x73, 0x0e, 0xba, 0x9e, 0xe5, 0xd8, 0x07, 0x1c, 0xed, 0xae, 0x07, 0x73, - 0x7d, 0x17, 0x5e, 0xb2, 0x9c, 0x7d, 0x8f, 0x19, 0x89, 0x99, 0x24, 0x55, 0x03, 0x25, 0x73, 0xdf, - 0xdf, 0x75, 0xdc, 0x28, 0x08, 0x5a, 0xf0, 0xac, 0x9e, 0x01, 0x80, 0xfc, 0x6f, 0x98, 0x7b, 0x90, - 0xba, 0x0f, 0x32, 0x29, 0xaa, 0x0a, 0xf2, 0xbe, 0xb5, 0x07, 0xe9, 0xad, 0x08, 0xf8, 0x3f, 0x12, - 0x30, 0x8e, 0x30, 0x4c, 0x23, 0x39, 0xcb, 0x46, 0xf0, 0xa8, 0x7d, 0x51, 0x06, 0x73, 0xab, 0xd0, - 0xa7, 0xac, 0x7a, 0xda, 0x8b, 0x72, 0x42, 0x17, 0x91, 0xa1, 0xb9, 0x5f, 0xcf, 0xf4, 0x82, 0xef, - 0x42, 0xb3, 0x86, 0x4f, 0x8c, 0xae, 0x68, 0x90, 0xd9, 0xfb, 0x59, 0x70, 0xbc, 0x5e, 0xbf, 0x46, - 0x0e, 0xd0, 0xd0, 0xcc, 0x74, 0x73, 0xfe, 0xe0, 0x0b, 0x7e, 0xde, 0x91, 0x18, 0xeb, 0x86, 0xca, - 0x7e, 0x89, 0xa9, 0x4f, 0x6c, 0x77, 0x54, 0xba, 0x44, 0x73, 0x1c, 0xb8, 0x7a, 0x87, 0xa5, 0x44, - 0xc9, 0x18, 0x61, 0x6e, 0xc1, 0x28, 0x39, 0xa3, 0x39, 0x99, 0xc2, 0x65, 0xcb, 0x32, 0x98, 0x6b, - 0xed, 0x3a, 0x97, 0x03, 0x39, 0x3e, 0x5d, 0x0c, 0xd8, 0xeb, 0xc0, 0xec, 0xa5, 0x01, 0x50, 0xa3, - 0x04, 0xf6, 0x7e, 0x47, 0x99, 0xbf, 0xdf, 0xf1, 0x79, 0x72, 0x5a, 0x98, 0x18, 0xe6, 0x62, 0x60, - 0xe2, 0xaf, 0x64, 0x94, 0x52, 0x5c, 0xc9, 0xa8, 0x3e, 0x1e, 0xcc, 0x50, 0xae, 0xe9, 0x56, 0x40, - 0x32, 0xc0, 0x41, 0x66, 0xb6, 0x82, 0x79, 0xbe, 0x82, 0xe9, 0x90, 0x8f, 0xaf, 0x5c, 0xf6, 0xc8, - 0xff, 0xb6, 0x84, 0x63, 0xa4, 0x05, 0xc0, 0x57, 0x26, 0x00, 0xbc, 0xf6, 0x9d, 0x9c, 0xe8, 0x86, - 0x59, 0x28, 0x81, 0x90, 0x83, 0x43, 0x5d, 0x32, 0x38, 0x92, 0x5c, 0xf6, 0xf2, 0x7c, 0x79, 0x1e, - 0xcc, 0x57, 0xad, 0xed, 0xed, 0xb0, 0x93, 0x7c, 0xb1, 0x60, 0x27, 0x19, 0xef, 0x0c, 0x87, 0xec, - 0xdc, 0x7d, 0xd7, 0x85, 0x76, 0x50, 0x29, 0xda, 0x9c, 0x06, 0x52, 0xd5, 0x9b, 0xc0, 0xf1, 0x60, - 0x5c, 0x60, 0x3b, 0xca, 0x59, 0x63, 0x30, 0x59, 0xfb, 0x96, 0xb0, 0xb7, 0x45, 0x20, 0x51, 0xb6, - 0x4a, 0x31, 0x0d, 0xf0, 0x4e, 0xb0, 0xb0, 0x4b, 0x72, 0xe3, 0x25, 0xe9, 0xa0, 0xb3, 0x3c, 0x35, - 0x70, 0x07, 0xc5, 0x3a, 0xf4, 0x3c, 0x73, 0x07, 0x1a, 0x7c, 0xe6, 0x81, 0xe6, 0x2b, 0xa7, 0xb9, - 0x51, 0x55, 0xcc, 0x71, 0x43, 0xa0, 0x26, 0xd9, 0x6b, 0xc7, 0x97, 0xcf, 0x82, 0xfc, 0x8a, 0xd5, - 0x83, 0xda, 0x8f, 0x4b, 0x60, 0xd6, 0x80, 0x1d, 0xc7, 0xee, 0xa0, 0x27, 0xc6, 0x35, 0xf6, 0x9b, - 0x39, 0xd1, 0x9b, 0xc4, 0x11, 0x9d, 0xa5, 0x90, 0x46, 0x4c, 0xbb, 0x11, 0xbb, 0x31, 0x3c, 0x91, - 0xd4, 0x14, 0xee, 0x7d, 0x43, 0x53, 0x8f, 0xed, 0xed, 0x9e, 0x63, 0x72, 0x9b, 0x32, 0x83, 0xa6, - 0x50, 0x74, 0x10, 0xb7, 0xe1, 0xf8, 0x1b, 0x96, 0x6d, 0x87, 0xb1, 0x6d, 0x0e, 0xa4, 0xf3, 0xfe, - 0x44, 0x89, 0xe1, 0x01, 0x71, 0xdd, 0x69, 0xe9, 0x31, 0x9a, 0x7d, 0x23, 0x58, 0xbc, 0x70, 0xc5, - 0x87, 0x1e, 0xcd, 0x45, 0x8b, 0xcd, 0x1b, 0x03, 0xa9, 0xcc, 0xe5, 0x1e, 0x49, 0x61, 0x04, 0x13, - 0x0a, 0x4c, 0x27, 0xea, 0xb5, 0x31, 0x66, 0x80, 0x27, 0x81, 0xd2, 0x68, 0x56, 0x75, 0xec, 0xa9, - 0x1d, 0xf8, 0xbe, 0xee, 0x68, 0x3f, 0x23, 0x83, 0x79, 0xec, 0xe4, 0x18, 0xa0, 0xf0, 0x30, 0x81, - 0xf9, 0x88, 0xf6, 0x55, 0x61, 0x2f, 0x6e, 0x5c, 0x65, 0xb6, 0x80, 0x78, 0x41, 0x6f, 0x5b, 0xbd, - 0x41, 0x41, 0x17, 0x8c, 0x81, 0xd4, 0x21, 0x80, 0xc8, 0x43, 0x01, 0xf9, 0x90, 0x90, 0x2b, 0xf7, - 0x28, 0xee, 0x8e, 0x0a, 0x95, 0x5f, 0x93, 0xc1, 0x1c, 0x9a, 0xa4, 0x04, 0xa0, 0x34, 0x39, 0x50, - 0x1c, 0xbb, 0x77, 0x25, 0x5a, 0x16, 0x09, 0x1e, 0x53, 0x35, 0x92, 0x3f, 0x16, 0x9e, 0xb9, 0x63, - 0x11, 0x31, 0xbc, 0x4c, 0x09, 0xbf, 0x0f, 0x0a, 0xcd, 0xe7, 0x47, 0x30, 0x77, 0x54, 0xf0, 0xbd, - 0xb6, 0x08, 0x8a, 0x9b, 0x7d, 0x8c, 0xdc, 0x57, 0x64, 0x91, 0x8b, 0x72, 0x0e, 0x1c, 0xe3, 0x43, - 0x66, 0x56, 0xcf, 0xe9, 0x98, 0xbd, 0x8d, 0xe8, 0x24, 0x7b, 0x94, 0xa0, 0xde, 0x41, 0x3d, 0xfb, - 0xc9, 0x81, 0xec, 0x1b, 0x13, 0xef, 0x90, 0xc1, 0x32, 0x62, 0x8e, 0x4c, 0xde, 0x02, 0x4e, 0x74, - 0x2d, 0xcf, 0xbc, 0xd0, 0x83, 0xba, 0xdd, 0x71, 0xaf, 0x10, 0x71, 0xd0, 0x69, 0xd5, 0x81, 0x17, - 0xea, 0x93, 0x40, 0xc1, 0xf3, 0xaf, 0xf4, 0xc8, 0x3c, 0x91, 0x3d, 0x61, 0x19, 0x5b, 0x54, 0x0b, - 0x65, 0x37, 0xc8, 0x57, 0xac, 0xeb, 0xec, 0x8c, 0x98, 0xeb, 0xac, 0xfa, 0x58, 0x50, 0x74, 0x5c, - 0x6b, 0xc7, 0x22, 0xd7, 0x42, 0x2e, 0x1e, 0x08, 0x95, 0x4c, 0x4c, 0x81, 0x26, 0xce, 0x62, 0xd0, - 0xac, 0xea, 0xe3, 0xc1, 0xac, 0xb5, 0x67, 0xee, 0xc0, 0x7b, 0x2c, 0x9b, 0x04, 0x92, 0x58, 0xbc, - 0xed, 0xf4, 0x81, 0xc3, 0xa3, 0xf4, 0xbd, 0x11, 0x65, 0x55, 0xef, 0x04, 0xd7, 0x74, 0x5c, 0x68, - 0xfa, 0x10, 0x09, 0xe8, 0xbc, 0xd5, 0xdd, 0x81, 0x7e, 0x6d, 0x7b, 0xdd, 0xf2, 0x3c, 0xcb, 0xde, - 0xa1, 0x37, 0xbf, 0xc6, 0x67, 0xd0, 0x3e, 0x28, 0x89, 0x46, 0x83, 0xc4, 0x92, 0x21, 0x2a, 0x31, - 0xc6, 0x0d, 0xf5, 0x8c, 0x14, 0x65, 0x41, 0x07, 0xe4, 0x57, 0x09, 0xc5, 0x69, 0x8c, 0x67, 0x2b, - 0xfb, 0xa1, 0xff, 0x0f, 0x25, 0x50, 0xaa, 0x3a, 0x97, 0x6d, 0xdc, 0x4c, 0x6e, 0x17, 0xb3, 0x94, - 0x87, 0x84, 0x76, 0xe0, 0xef, 0x3a, 0x4f, 0x3c, 0x0d, 0x88, 0x6b, 0x1b, 0x14, 0x19, 0x03, 0x43, - 0x62, 0xbb, 0x13, 0x0c, 0x20, 0x90, 0x54, 0x4e, 0xf6, 0x72, 0xfd, 0x5d, 0x19, 0xe4, 0xab, 0xae, - 0xd3, 0xd7, 0xde, 0x96, 0x4b, 0xe1, 0x88, 0xd7, 0x75, 0x9d, 0x7e, 0x1b, 0x5f, 0x21, 0x1b, 0xed, - 0x3d, 0xb1, 0x69, 0xea, 0xed, 0xa0, 0xd4, 0x77, 0x3c, 0xcb, 0x0f, 0x26, 0x21, 0x8b, 0xb7, 0x3d, - 0x78, 0x68, 0x5f, 0xb0, 0x41, 0x33, 0x19, 0x61, 0x76, 0xd4, 0xe7, 0x63, 0x11, 0x22, 0xb9, 0x20, - 0x31, 0x06, 0xd7, 0xe8, 0x0e, 0xa4, 0x6a, 0x2f, 0x61, 0x91, 0x7c, 0x22, 0x8f, 0xe4, 0xc3, 0x87, - 0x48, 0xd8, 0x75, 0xfa, 0x13, 0x71, 0x9d, 0x79, 0x45, 0x88, 0xea, 0x93, 0x39, 0x54, 0x6f, 0x16, - 0x2a, 0x33, 0x7b, 0x44, 0x3f, 0x98, 0x07, 0x00, 0x1b, 0x29, 0x9b, 0x68, 0xfa, 0x24, 0x66, 0xa1, - 0xfd, 0x58, 0x9e, 0x91, 0x65, 0x99, 0x97, 0xe5, 0x23, 0x63, 0x6c, 0x20, 0x4c, 0x3e, 0x46, 0xa2, - 0x65, 0x50, 0xd8, 0x47, 0xaf, 0xa9, 0x44, 0x05, 0x49, 0xe0, 0x47, 0x83, 0x7c, 0xa9, 0xfd, 0x76, - 0x0e, 0x14, 0x70, 0x82, 0x7a, 0x06, 0x00, 0x6c, 0x16, 0x90, 0xc3, 0xb4, 0x39, 0x6c, 0x00, 0x30, - 0x29, 0x58, 0x5b, 0xad, 0x2e, 0x7d, 0x4d, 0x0c, 0xee, 0x28, 0x01, 0x7d, 0x8d, 0x8d, 0x05, 0x4c, - 0x8b, 0x9a, 0x0f, 0x4c, 0x0a, 0xfa, 0x1a, 0x3f, 0xd5, 0xe1, 0x36, 0xb9, 0xdd, 0x23, 0x6f, 0x44, - 0x09, 0xe1, 0xd7, 0xf5, 0xf0, 0x4e, 0xd8, 0xe0, 0x6b, 0x9c, 0x82, 0xa6, 0xd2, 0x58, 0x2d, 0x97, - 0xa3, 0x22, 0x8a, 0x38, 0xd3, 0x60, 0xb2, 0xf6, 0xba, 0x50, 0x6d, 0xaa, 0x9c, 0xda, 0x3c, 0x3a, - 0x85, 0x78, 0xb3, 0x57, 0x9e, 0xaf, 0x17, 0xc0, 0x6c, 0xc3, 0xe9, 0x52, 0xdd, 0x61, 0xa6, 0x9b, - 0x9f, 0x29, 0xa4, 0x9a, 0x6e, 0x86, 0x34, 0x62, 0x14, 0xe4, 0x29, 0xbc, 0x82, 0x88, 0x51, 0x60, - 0xf5, 0x43, 0x5d, 0x06, 0x45, 0xac, 0xbd, 0x07, 0x2f, 0x1b, 0x4d, 0x22, 0x81, 0x45, 0x6b, 0xd0, - 0x2f, 0xff, 0xc3, 0xe9, 0xd8, 0x7f, 0x07, 0x05, 0x5c, 0xc1, 0x84, 0xbd, 0x21, 0xbe, 0xa2, 0x52, - 0x72, 0x45, 0xe5, 0xe4, 0x8a, 0xe6, 0x07, 0x2b, 0x9a, 0x66, 0x15, 0x21, 0x4e, 0x43, 0xb2, 0xd7, - 0xf1, 0xff, 0x35, 0x03, 0x40, 0xc3, 0xbc, 0x64, 0xed, 0x90, 0xbd, 0xe5, 0x2f, 0x06, 0xb3, 0x27, - 0xba, 0x0b, 0xfc, 0x93, 0xcc, 0x40, 0x78, 0x3b, 0x98, 0xa1, 0xe3, 0x1e, 0xad, 0xc8, 0x43, 0xb8, - 0x8a, 0x44, 0x54, 0x88, 0x51, 0x7b, 0xbf, 0x6f, 0x04, 0xf9, 0x91, 0x61, 0xb2, 0xbd, 0xdf, 0xeb, - 0xb5, 0xd1, 0xb7, 0xd4, 0x42, 0x0b, 0x9e, 0x63, 0x76, 0x30, 0xa2, 0x4b, 0xa6, 0x49, 0xd0, 0x29, - 0xfa, 0xa4, 0xbd, 0x4f, 0xf8, 0x9c, 0x1a, 0xc3, 0x0f, 0x53, 0xa3, 0x98, 0x26, 0xf8, 0x58, 0x30, - 0xe3, 0x84, 0xdb, 0xe1, 0x72, 0xec, 0x2a, 0x5a, 0xcd, 0xde, 0x76, 0x8c, 0x20, 0xa7, 0xe0, 0xd6, - 0x99, 0x10, 0x1f, 0x53, 0x39, 0x0a, 0x7a, 0x6a, 0x35, 0x88, 0x94, 0x8a, 0xea, 0x71, 0xde, 0xf2, - 0x77, 0xeb, 0x96, 0x7d, 0xd1, 0xd3, 0x7e, 0x48, 0xcc, 0x82, 0x64, 0xf0, 0x97, 0xd2, 0xe1, 0xcf, - 0x47, 0x2a, 0x4b, 0xf4, 0xec, 0x60, 0xa8, 0x0c, 0xe7, 0x36, 0x06, 0xc0, 0x3b, 0x40, 0x91, 0x30, - 0x4a, 0x3b, 0xd1, 0xb3, 0xb1, 0xf8, 0x85, 0x94, 0x0c, 0xfa, 0x85, 0xa0, 0x57, 0x48, 0x5a, 0xce, - 0x32, 0x87, 0xf4, 0xec, 0x63, 0xc0, 0x0c, 0x95, 0xb4, 0xba, 0xc8, 0xb6, 0x62, 0xe5, 0x98, 0x0a, - 0x40, 0x71, 0xdd, 0xb9, 0x04, 0xdb, 0x8e, 0x92, 0x43, 0xff, 0x11, 0x7f, 0x6d, 0x47, 0x91, 0xb4, - 0x57, 0x96, 0x40, 0x29, 0x0c, 0x51, 0xf9, 0x87, 0x12, 0x50, 0x2a, 0x78, 0x86, 0xb6, 0xe2, 0x3a, - 0x7b, 0xa4, 0x46, 0xe2, 0x67, 0x1e, 0x5e, 0x2a, 0xec, 0x20, 0x12, 0x86, 0x8e, 0x1c, 0x2c, 0x2c, - 0x06, 0x4b, 0xb2, 0x84, 0x29, 0x05, 0x4b, 0x98, 0xda, 0x5b, 0x85, 0x1c, 0x46, 0x44, 0x4b, 0xc9, - 0xbe, 0xa9, 0xfd, 0x8e, 0x04, 0x0a, 0x95, 0x9e, 0x63, 0x43, 0xf6, 0x60, 0xee, 0xc8, 0x13, 0xa0, - 0xc3, 0xf7, 0x31, 0xb4, 0x67, 0x49, 0xa2, 0xb6, 0x46, 0x24, 0x00, 0x54, 0xb6, 0xa0, 0x6c, 0xc5, - 0x06, 0xa9, 0x44, 0xd2, 0xd9, 0x0b, 0xf4, 0x1b, 0x12, 0x98, 0x25, 0x31, 0xe5, 0xca, 0xbd, 0x9e, - 0xf6, 0xe0, 0x48, 0xa8, 0x43, 0xc2, 0x7c, 0x6a, 0x1f, 0x12, 0x3e, 0x78, 0x16, 0xd6, 0x2a, 0xa4, - 0x9d, 0x22, 0x2c, 0x62, 0xba, 0x73, 0x50, 0x62, 0x3b, 0x71, 0x23, 0x19, 0xca, 0x5e, 0xd4, 0x7f, - 0x24, 0x21, 0x03, 0xc0, 0xbe, 0xb8, 0xe1, 0xc2, 0x4b, 0x16, 0xbc, 0xac, 0x5d, 0x1b, 0x09, 0xfb, - 0x60, 0xc0, 0xac, 0x37, 0x09, 0x2f, 0xe2, 0x30, 0x24, 0x63, 0x37, 0xc2, 0xe6, 0x7a, 0x51, 0x26, - 0xda, 0x8b, 0x0f, 0x46, 0x31, 0x63, 0xc8, 0x18, 0x6c, 0x76, 0xc1, 0x35, 0x9b, 0x78, 0x2e, 0xb2, - 0x17, 0xec, 0xc7, 0x66, 0x40, 0x69, 0xd3, 0xf6, 0xfa, 0x3d, 0xd3, 0xdb, 0xd5, 0xfe, 0x4d, 0x06, - 0x45, 0x72, 0xc5, 0xad, 0xf6, 0xfd, 0x5c, 0x5c, 0x9e, 0x67, 0xec, 0x43, 0x37, 0x70, 0xe0, 0x21, - 0x0f, 0x91, 0x7d, 0x24, 0x31, 0xf6, 0x91, 0xf6, 0x41, 0x59, 0x74, 0x92, 0x1a, 0x14, 0x4a, 0xef, - 0xd4, 0x8d, 0x0f, 0x05, 0xd3, 0xb7, 0x3a, 0xfe, 0xbe, 0x0b, 0xbd, 0xa1, 0xa1, 0x60, 0x62, 0xa9, - 0x6c, 0x90, 0xaf, 0x8c, 0xf0, 0x73, 0xcd, 0x04, 0x33, 0x34, 0xf1, 0xc0, 0x66, 0xd4, 0xc1, 0xa8, - 0x12, 0xa7, 0x40, 0xd1, 0x74, 0x7d, 0xcb, 0xf3, 0xe9, 0xf6, 0x2c, 0x7d, 0x42, 0xdd, 0x25, 0xf9, - 0xb7, 0xe9, 0xf6, 0x82, 0x08, 0x5e, 0x61, 0x82, 0xf6, 0x6b, 0x42, 0xf3, 0xc7, 0xe4, 0x9a, 0xa7, - 0x83, 0xfc, 0x9e, 0x31, 0x56, 0xb8, 0x1f, 0x04, 0xae, 0x32, 0xca, 0x6d, 0x7d, 0x8b, 0x04, 0x7c, - 0x0a, 0x63, 0x3b, 0x75, 0xb5, 0xf7, 0xc8, 0xcc, 0xfa, 0xdd, 0x15, 0x6e, 0x8c, 0xa0, 0x52, 0x8c, - 0xc6, 0x88, 0x30, 0x21, 0x61, 0xaf, 0x9b, 0x5b, 0xc2, 0x95, 0x85, 0x97, 0x70, 0xb5, 0x5f, 0x11, - 0xde, 0x8b, 0x0a, 0x45, 0x39, 0x62, 0x0d, 0x30, 0xe9, 0x0a, 0xcc, 0x8f, 0x08, 0xed, 0x2b, 0x8d, - 0x2a, 0xe9, 0x08, 0x61, 0xfb, 0xce, 0x29, 0x20, 0x95, 0x6b, 0xda, 0x4f, 0xcc, 0x80, 0xf9, 0xf3, - 0xae, 0xe5, 0x5b, 0xf6, 0x4e, 0xdb, 0x71, 0x7a, 0x9e, 0xf6, 0x6d, 0x66, 0xa3, 0xe2, 0xf1, 0xa0, - 0xd8, 0x71, 0xec, 0x6d, 0x6b, 0x87, 0x8a, 0xf1, 0x0c, 0x57, 0xb9, 0x72, 0x6d, 0x69, 0xc3, 0x75, - 0x2e, 0x59, 0x5d, 0xe8, 0x56, 0x70, 0x2e, 0x83, 0xe6, 0x46, 0x7a, 0xcc, 0x84, 0xcc, 0x7b, 0xf4, - 0xe0, 0x57, 0x6c, 0x79, 0x61, 0xcc, 0x1e, 0x9a, 0xc8, 0x44, 0xcc, 0xab, 0x81, 0x52, 0xcf, 0xb4, - 0x77, 0xf6, 0x83, 0x99, 0xf7, 0xe0, 0x2e, 0x6a, 0x1c, 0xa5, 0x3a, 0xfd, 0xc8, 0x08, 0x3f, 0xc7, - 0x4e, 0x6e, 0xc8, 0xd4, 0x27, 0x6d, 0x0f, 0xff, 0x3f, 0xfb, 0xf1, 0x1c, 0x98, 0x63, 0x0a, 0x55, - 0xe7, 0xc0, 0x4c, 0x55, 0x5f, 0x29, 0x6f, 0xd6, 0xdb, 0xca, 0x31, 0x24, 0xc5, 0xd6, 0xe6, 0xfa, - 0x7a, 0xd9, 0xa8, 0xfd, 0xa0, 0xae, 0xe4, 0xd0, 0xbb, 0x55, 0xa3, 0x8c, 0x9e, 0x15, 0x09, 0x3d, - 0xb4, 0xd6, 0x9a, 0x46, 0x5b, 0x6f, 0x28, 0x32, 0xb2, 0x47, 0xf5, 0xa7, 0x6d, 0x94, 0x1b, 0x55, - 0x25, 0x8f, 0xfe, 0x2f, 0x6f, 0xd6, 0xeb, 0x7a, 0x5b, 0x29, 0x44, 0x41, 0xf4, 0x8a, 0x28, 0xb9, - 0x52, 0x6e, 0x6d, 0x96, 0xeb, 0xca, 0x0c, 0x4a, 0x5e, 0xd9, 0x6c, 0x34, 0xee, 0x55, 0x4a, 0xa8, - 0x88, 0x4a, 0xb3, 0xb1, 0x52, 0xab, 0xea, 0x8d, 0xb6, 0x32, 0xab, 0x5e, 0x05, 0x8e, 0xb7, 0xda, - 0x46, 0xb9, 0xb6, 0xba, 0xd6, 0x5e, 0x69, 0x1a, 0xe7, 0xcb, 0x46, 0x55, 0x01, 0xaa, 0x02, 0xe6, - 0x37, 0x8c, 0xe6, 0x8a, 0x8e, 0xe3, 0xa5, 0x94, 0xeb, 0xca, 0x1c, 0xfa, 0xaa, 0x6d, 0x94, 0x1b, - 0xad, 0x7a, 0xb9, 0xad, 0x2b, 0xf3, 0x67, 0xef, 0x06, 0xa5, 0xa0, 0xba, 0x6a, 0x11, 0x48, 0x7a, - 0x43, 0x39, 0x86, 0x7f, 0x5b, 0x4a, 0x0e, 0xfd, 0xae, 0x20, 0x7e, 0x8b, 0x40, 0xaa, 0xea, 0x8a, - 0x8c, 0x7e, 0x6b, 0x6d, 0x25, 0x8f, 0x7e, 0x37, 0x10, 0x8b, 0x45, 0x20, 0xad, 0xd5, 0x94, 0x22, - 0xfa, 0x6d, 0xaf, 0x29, 0x33, 0xfc, 0x4d, 0xf7, 0x89, 0xbd, 0xf0, 0x41, 0xc9, 0xc7, 0x18, 0x1a, - 0x7e, 0x34, 0x47, 0xc6, 0xff, 0xb5, 0x57, 0x48, 0x22, 0x7d, 0x5d, 0x32, 0xfd, 0x74, 0x8d, 0xe6, - 0x2d, 0xb9, 0x09, 0xb6, 0x1a, 0x55, 0x03, 0xa7, 0xf4, 0x46, 0x75, 0xa3, 0x59, 0x6b, 0xb4, 0x49, - 0xa8, 0x33, 0xbd, 0x5c, 0x59, 0xc3, 0x38, 0x43, 0x84, 0xe0, 0x7a, 0xb3, 0xaa, 0xd7, 0xf1, 0x8b, - 0x95, 0xe6, 0x66, 0xa3, 0xaa, 0x6c, 0xa3, 0xb2, 0xca, 0x9b, 0xed, 0xb5, 0x2d, 0x43, 0x7f, 0xea, - 0x66, 0xcd, 0xd0, 0xab, 0xca, 0x0e, 0xa2, 0x51, 0x2f, 0x37, 0x56, 0x37, 0xcb, 0xab, 0x74, 0xbf, - 0x70, 0x73, 0x63, 0xa3, 0x89, 0x77, 0x0c, 0x77, 0xb5, 0x7f, 0xc8, 0x83, 0x52, 0x79, 0xdf, 0x77, - 0xb6, 0xad, 0x5e, 0x4f, 0x7b, 0x8e, 0x74, 0xf8, 0xa6, 0x58, 0xe6, 0x9a, 0xe2, 0x81, 0x06, 0x14, - 0x94, 0x15, 0x36, 0x9e, 0x20, 0x81, 0x69, 0x87, 0xa7, 0x23, 0x67, 0x6c, 0x99, 0xee, 0x34, 0x93, - 0x47, 0xe2, 0x88, 0x6b, 0xd3, 0x96, 0x85, 0xdf, 0xd0, 0xc7, 0xb3, 0xf7, 0x80, 0x79, 0x96, 0x12, - 0x0e, 0x07, 0x56, 0x5e, 0x25, 0xf1, 0xc2, 0x82, 0x08, 0x81, 0x24, 0x5e, 0x18, 0x3e, 0x78, 0x21, - 0xe1, 0xf6, 0x52, 0x6b, 0xd7, 0x91, 0x9e, 0x1e, 0x07, 0x73, 0x55, 0xbd, 0x55, 0x31, 0x6a, 0xd8, - 0x4f, 0x5d, 0xc9, 0xf3, 0x5e, 0x06, 0x89, 0x96, 0x19, 0x5f, 0x23, 0x51, 0xa5, 0xfc, 0xae, 0x90, - 0xbd, 0x15, 0x4f, 0x3b, 0x9d, 0x42, 0xbe, 0xe8, 0x81, 0xa6, 0x90, 0xda, 0x8b, 0xf2, 0x64, 0x9d, - 0xac, 0xb5, 0xbf, 0xb7, 0x67, 0xba, 0x57, 0x38, 0x7f, 0xb5, 0x71, 0xf5, 0x2e, 0x7e, 0x7c, 0x4f, - 0x8c, 0x02, 0x84, 0x4c, 0xa8, 0xbe, 0xeb, 0xec, 0xf5, 0x83, 0xbe, 0x9a, 0x3e, 0x69, 0xff, 0x53, - 0x78, 0xe6, 0x58, 0xae, 0x2d, 0x31, 0x95, 0x19, 0x63, 0x68, 0xff, 0x61, 0x49, 0x64, 0x16, 0x99, - 0x58, 0xcc, 0xf7, 0xba, 0x46, 0xfc, 0x4d, 0x1e, 0x5c, 0x45, 0x23, 0xbc, 0x84, 0xeb, 0x0f, 0xc8, - 0x54, 0x7d, 0x75, 0xa6, 0x9a, 0x41, 0x0d, 0x6a, 0x39, 0x32, 0xa8, 0x99, 0x0d, 0xef, 0xbc, 0xe0, - 0x86, 0xf7, 0xdb, 0x84, 0x0f, 0x3d, 0x94, 0x6b, 0x4b, 0x43, 0xea, 0x38, 0x9d, 0x6d, 0xf9, 0xe7, - 0x49, 0x22, 0xab, 0xad, 0x42, 0x1c, 0x7e, 0xaf, 0xeb, 0xda, 0x3b, 0x72, 0x60, 0x91, 0x57, 0x15, - 0xf5, 0x71, 0xa0, 0xd4, 0xa7, 0x29, 0x54, 0x2e, 0xa7, 0xe3, 0x94, 0xcb, 0x08, 0x73, 0x22, 0x88, - 0xa0, 0xdd, 0xed, 0x3b, 0x96, 0x1d, 0xae, 0xcb, 0x07, 0xcf, 0x68, 0xde, 0x89, 0xa7, 0x0e, 0x41, - 0xbc, 0x3f, 0xfc, 0x10, 0xc5, 0x8e, 0xcd, 0x33, 0xb1, 0x63, 0x91, 0x10, 0x7d, 0xb8, 0x87, 0x6f, - 0x31, 0xda, 0x77, 0x89, 0xc3, 0x8b, 0x64, 0xb0, 0x49, 0x67, 0x9f, 0x0c, 0x4a, 0x41, 0xf9, 0xc8, - 0xba, 0x6b, 0xd6, 0xeb, 0xe5, 0xf5, 0x32, 0x59, 0xa8, 0x6c, 0x6e, 0xe8, 0x8d, 0x72, 0x4d, 0xc9, - 0xa1, 0x81, 0xae, 0xbe, 0xde, 0x6a, 0x6f, 0x56, 0x6b, 0x4d, 0x45, 0xc2, 0x4f, 0x28, 0x53, 0x65, - 0x63, 0x43, 0x91, 0xb5, 0x37, 0xce, 0x80, 0x99, 0x55, 0xb3, 0xd7, 0x83, 0xee, 0x15, 0xed, 0x1b, - 0x12, 0x50, 0x82, 0xd9, 0xc1, 0xba, 0x69, 0x5b, 0xdb, 0xd0, 0xf3, 0x93, 0x17, 0x2a, 0xde, 0x27, - 0x7c, 0xb5, 0x19, 0x2d, 0x63, 0x69, 0x90, 0x7e, 0x8c, 0x8e, 0xdf, 0x0a, 0xf2, 0x96, 0xbd, 0xed, - 0xd0, 0xe5, 0x8a, 0x41, 0x7f, 0x9b, 0xe0, 0x63, 0xbc, 0x6d, 0x80, 0x33, 0x0a, 0xde, 0x6e, 0x26, - 0xc8, 0x45, 0xf6, 0xab, 0x16, 0xef, 0xc8, 0x83, 0x85, 0x80, 0x89, 0x9a, 0xdd, 0x85, 0xf7, 0xb3, - 0xdb, 0xa0, 0x3f, 0x93, 0x17, 0x0d, 0x30, 0x34, 0x58, 0x1f, 0x4c, 0x2a, 0x46, 0xa4, 0x6d, 0x00, - 0x3a, 0xa6, 0x0f, 0x77, 0x1c, 0xd7, 0x0a, 0xd7, 0x22, 0x1e, 0x97, 0x86, 0x5a, 0x85, 0x7c, 0x7d, - 0xc5, 0x60, 0xe8, 0xa8, 0x4f, 0x02, 0x73, 0x30, 0x8c, 0xe8, 0x18, 0x6c, 0x93, 0x26, 0xe2, 0xc5, - 0xe6, 0xd7, 0xfe, 0x48, 0x28, 0x8e, 0x91, 0x48, 0x35, 0xd3, 0x61, 0xb6, 0x35, 0x5e, 0xd7, 0xb3, - 0xd9, 0x58, 0x2f, 0x1b, 0xad, 0xb5, 0x72, 0xbd, 0x5e, 0x6b, 0xac, 0x86, 0x01, 0x8b, 0x55, 0xb0, - 0x58, 0x6d, 0x9e, 0x6f, 0x30, 0x11, 0xa5, 0xf3, 0xda, 0x06, 0x28, 0x05, 0xf2, 0x1a, 0x76, 0x8a, - 0x8a, 0x95, 0x19, 0x3d, 0x45, 0xc5, 0x24, 0x21, 0xd3, 0xd0, 0xea, 0x84, 0xae, 0xf5, 0xf8, 0xbf, - 0xf6, 0x5b, 0x26, 0x28, 0x60, 0x7f, 0x16, 0xed, 0x5d, 0x78, 0x5e, 0xdc, 0xef, 0x99, 0x1d, 0xa8, - 0xed, 0xa5, 0x58, 0x09, 0x0f, 0xee, 0xda, 0x95, 0x0e, 0xdc, 0xb5, 0x8b, 0xff, 0xd2, 0x11, 0xe3, - 0xe4, 0x30, 0x1f, 0x1a, 0x83, 0x64, 0xe1, 0x43, 0xfe, 0x24, 0x7a, 0x36, 0x11, 0xd7, 0x1b, 0xca, - 0x66, 0x8c, 0x4a, 0xc6, 0xf3, 0x94, 0xc5, 0x25, 0x2a, 0x49, 0x1c, 0x65, 0xdf, 0xe2, 0xbf, 0x92, - 0x07, 0x85, 0x56, 0xbf, 0x67, 0xf9, 0xda, 0x2f, 0x48, 0x13, 0xc1, 0x8c, 0xdc, 0x8f, 0x2c, 0x8f, - 0xbc, 0x1f, 0x39, 0xf2, 0x97, 0xcc, 0x0b, 0xf8, 0x4b, 0xb6, 0xe1, 0xfd, 0x3e, 0xef, 0x2f, 0x79, - 0x3b, 0x9d, 0xb6, 0x11, 0x6f, 0xcb, 0x87, 0x0f, 0x11, 0x29, 0xae, 0xd6, 0x90, 0xdb, 0x2c, 0xce, - 0x3e, 0x86, 0x06, 0xd5, 0x07, 0xa0, 0xb8, 0xdc, 0x6c, 0xb7, 0x9b, 0xeb, 0xca, 0x31, 0x3c, 0xfd, - 0x6a, 0x6e, 0x90, 0x10, 0xc7, 0xb5, 0x46, 0x43, 0x37, 0xb8, 0x19, 0x17, 0x7f, 0x59, 0x66, 0xe2, - 0x04, 0x8b, 0x2f, 0x3b, 0x4b, 0xf5, 0x12, 0x5b, 0x04, 0x8f, 0xe7, 0x27, 0x7b, 0xe5, 0xfa, 0x39, - 0x19, 0x14, 0xd6, 0xa1, 0xbb, 0x03, 0xb5, 0x67, 0xa4, 0x70, 0xb0, 0xdb, 0xb6, 0x5c, 0x8f, 0x5c, - 0x8a, 0x10, 0x39, 0xd8, 0xb1, 0x69, 0xea, 0x0d, 0x60, 0xc1, 0x83, 0x1d, 0xc7, 0xee, 0x06, 0x99, - 0x48, 0x7f, 0xc4, 0x27, 0x6a, 0x2f, 0x4b, 0x09, 0x19, 0x66, 0x74, 0x22, 0x5e, 0x72, 0x69, 0x80, - 0x19, 0x56, 0x6a, 0xf6, 0xc0, 0x7c, 0x4b, 0x46, 0x1f, 0xf5, 0xaf, 0x68, 0x2f, 0x13, 0xf6, 0x7c, - 0xbc, 0x05, 0x14, 0x2f, 0x04, 0xf7, 0xa2, 0xc9, 0xb1, 0xfd, 0x31, 0xcd, 0xa3, 0x2e, 0x83, 0x13, - 0x1e, 0xec, 0xc1, 0x8e, 0x0f, 0xbb, 0xa8, 0xe9, 0x1a, 0x23, 0x3b, 0x85, 0x83, 0xd9, 0xb5, 0xdf, - 0x63, 0x01, 0xbc, 0x93, 0x07, 0xf0, 0xc6, 0x21, 0xa2, 0x44, 0x15, 0x8a, 0x9f, 0x9b, 0xa0, 0x6a, - 0xb4, 0x7a, 0x4e, 0x68, 0xf8, 0x06, 0xcf, 0xe8, 0xdd, 0xae, 0xbf, 0xd7, 0xc3, 0xef, 0xe8, 0xd1, - 0xe0, 0xe0, 0x59, 0x5d, 0x02, 0x33, 0xa6, 0x7d, 0x05, 0xbf, 0xca, 0x27, 0xd4, 0x3a, 0xc8, 0xa4, - 0xbd, 0x32, 0x44, 0xfe, 0x2e, 0x0e, 0xf9, 0x47, 0x8a, 0xb1, 0x9b, 0x3d, 0xf0, 0x3f, 0x3a, 0x03, - 0x0a, 0x1b, 0xa6, 0xe7, 0x43, 0xed, 0x7f, 0xcb, 0xa2, 0xc8, 0xdf, 0x08, 0x16, 0xb7, 0x9d, 0xce, - 0xbe, 0x07, 0xbb, 0x7c, 0xa3, 0x1c, 0x48, 0x9d, 0x04, 0xe6, 0x38, 0x30, 0x3b, 0x4d, 0xa4, 0x64, - 0x03, 0x17, 0xd8, 0x03, 0xe9, 0xf8, 0xea, 0x45, 0x6f, 0xc3, 0x74, 0xfd, 0xe6, 0x36, 0x4e, 0x0b, - 0xaf, 0x5e, 0x64, 0x13, 0x39, 0xe8, 0x8b, 0x09, 0xd0, 0xcf, 0xc4, 0x43, 0x5f, 0x12, 0x80, 0x5e, - 0x2d, 0x83, 0xd2, 0xb6, 0xd5, 0x83, 0xf8, 0x83, 0x59, 0xfc, 0xc1, 0xb0, 0x31, 0x09, 0xcb, 0x3e, - 0x1c, 0x93, 0x56, 0xac, 0x1e, 0x34, 0xc2, 0xcf, 0x82, 0x89, 0x0c, 0x88, 0x26, 0x32, 0x75, 0x72, - 0x12, 0x0e, 0x19, 0x5e, 0xb6, 0xb9, 0x07, 0x83, 0x8d, 0x6f, 0x9b, 0x1e, 0x4b, 0xef, 0x9a, 0xbe, - 0x89, 0xc1, 0x98, 0x37, 0xf0, 0x7f, 0xde, 0x27, 0x5b, 0x1e, 0xf4, 0xc9, 0x7e, 0xae, 0x9c, 0xae, - 0x47, 0x0c, 0x98, 0x8d, 0x69, 0x51, 0x17, 0x02, 0x80, 0x88, 0xa5, 0x18, 0x3e, 0x23, 0x60, 0x3a, - 0xa6, 0x0b, 0xfd, 0x0d, 0xd6, 0x0b, 0xba, 0x60, 0xf0, 0x89, 0xf8, 0x10, 0x8e, 0xd7, 0x32, 0xf7, - 0xc8, 0xd5, 0x8a, 0x15, 0xf4, 0x8e, 0x1e, 0xae, 0x38, 0x90, 0x1e, 0xf5, 0xbf, 0x85, 0x49, 0xf7, - 0xbf, 0xc3, 0xea, 0x98, 0x7d, 0x33, 0x7c, 0x4d, 0x1e, 0xc8, 0x95, 0x7d, 0xff, 0x01, 0xdd, 0xfd, - 0x7e, 0x57, 0xd8, 0xc7, 0x9c, 0xf6, 0x67, 0xfb, 0xfe, 0xd1, 0xf6, 0xbe, 0x29, 0xb5, 0x44, 0xcc, - 0x97, 0x3d, 0xae, 0x6e, 0xd9, 0xeb, 0xc8, 0xdb, 0xe4, 0xf0, 0x68, 0xd4, 0x73, 0x72, 0x87, 0x37, - 0xcd, 0x35, 0xd2, 0x3f, 0x31, 0x3d, 0x43, 0xf8, 0x1c, 0x74, 0x3c, 0x79, 0xee, 0xf6, 0x07, 0xec, - 0xda, 0x8a, 0x45, 0x39, 0x6f, 0x90, 0x07, 0xed, 0xe5, 0xc2, 0x07, 0x46, 0x89, 0xd8, 0x12, 0x8f, - 0xf1, 0xa4, 0xb3, 0xa9, 0x5e, 0x2d, 0x74, 0x6c, 0x34, 0xa1, 0xd8, 0xec, 0x01, 0xfb, 0x7b, 0xf6, - 0x98, 0x4e, 0xf9, 0xd0, 0x88, 0x69, 0xaf, 0x12, 0x5e, 0xd0, 0x27, 0xd5, 0x1e, 0xb1, 0x57, 0x9f, - 0x4e, 0xde, 0x62, 0x8e, 0x62, 0x89, 0x05, 0x4f, 0xe1, 0xae, 0x68, 0x19, 0x14, 0xc9, 0xc2, 0xaf, - 0xf6, 0x66, 0xe1, 0x26, 0x82, 0x7a, 0x23, 0xfe, 0xf8, 0x4e, 0xf8, 0x9c, 0x66, 0xcd, 0x81, 0x3b, - 0xe6, 0x93, 0x4f, 0x75, 0xcc, 0x87, 0x8f, 0xc0, 0x22, 0xd0, 0x8e, 0x48, 0x1d, 0x33, 0x9e, 0x4e, - 0xa6, 0x69, 0x61, 0x43, 0x19, 0xca, 0x1e, 0xef, 0xe7, 0x17, 0xc0, 0x3c, 0x29, 0x9a, 0x9c, 0x2f, - 0xd4, 0xde, 0x23, 0x7d, 0xef, 0xa0, 0xae, 0x36, 0xc0, 0xfc, 0x65, 0xcc, 0x36, 0x09, 0x2f, 0x47, - 0x57, 0x2e, 0x6e, 0x4e, 0x5c, 0xf7, 0x20, 0xf5, 0x0c, 0x6e, 0x8d, 0xe6, 0xbe, 0x47, 0x32, 0x26, - 0x1b, 0x2c, 0xe4, 0xf0, 0x44, 0x11, 0x1b, 0x59, 0x6c, 0x92, 0x7a, 0x0a, 0x14, 0x2f, 0x59, 0xf0, - 0x72, 0xad, 0x4b, 0xad, 0x5b, 0xfa, 0xa4, 0xfd, 0xba, 0xb0, 0xcf, 0x24, 0x0b, 0x37, 0xe5, 0x25, - 0x5b, 0x2d, 0x14, 0xf3, 0x9c, 0x1c, 0xc9, 0xd6, 0x14, 0xa2, 0x01, 0x49, 0xe4, 0x9e, 0x7a, 0x1a, - 0xca, 0xbf, 0x92, 0x42, 0x11, 0xe3, 0x0c, 0x67, 0x3e, 0x08, 0x5f, 0xe2, 0x59, 0x73, 0x22, 0x80, - 0xa8, 0xfc, 0x89, 0xf4, 0xf9, 0x62, 0x91, 0xe1, 0x46, 0x14, 0x9d, 0xbd, 0xe4, 0x5f, 0x27, 0x83, - 0xd9, 0x16, 0xf4, 0x57, 0x2c, 0xd8, 0xeb, 0x7a, 0x9a, 0x7b, 0x78, 0xd3, 0xe8, 0x56, 0x50, 0xdc, - 0xc6, 0xc4, 0x46, 0x6d, 0x4e, 0xd2, 0x6c, 0xda, 0x6b, 0x24, 0x51, 0x3f, 0x20, 0xba, 0xfa, 0x16, - 0x70, 0x3b, 0x11, 0x98, 0xc4, 0x4e, 0xd3, 0x25, 0x97, 0x3c, 0x85, 0xab, 0x92, 0x64, 0x30, 0x8f, - 0xb7, 0xff, 0xa1, 0x5f, 0xee, 0x59, 0x3b, 0x36, 0x7b, 0xbb, 0xfa, 0xd8, 0x2d, 0x44, 0x7d, 0x34, - 0x28, 0x98, 0x88, 0x1a, 0x75, 0x77, 0xd3, 0x86, 0x76, 0x9e, 0xb8, 0x3c, 0x83, 0x64, 0x4c, 0x71, - 0x31, 0x49, 0xa4, 0xd8, 0x01, 0xcf, 0x53, 0xbc, 0x98, 0x64, 0x64, 0xe1, 0xd9, 0x23, 0xf6, 0x35, - 0x19, 0x9c, 0xa4, 0x0c, 0x9c, 0x83, 0xae, 0x6f, 0x75, 0xcc, 0x1e, 0x41, 0xee, 0x85, 0xb9, 0x49, - 0x40, 0xb7, 0x06, 0x16, 0x2e, 0xb1, 0x64, 0x29, 0x84, 0x67, 0x87, 0x42, 0xc8, 0x31, 0x60, 0xf0, - 0x1f, 0xa6, 0xb8, 0xe0, 0x81, 0x93, 0x2a, 0x47, 0x73, 0x8a, 0x17, 0x3c, 0x08, 0x33, 0x91, 0x3d, - 0xc4, 0x2f, 0xa1, 0x41, 0x35, 0xa3, 0xee, 0xf3, 0x8b, 0xc2, 0xd8, 0x6e, 0x82, 0x39, 0x8c, 0x25, - 0xf9, 0x90, 0x2e, 0x43, 0x24, 0x28, 0x71, 0xd8, 0xef, 0xd0, 0x8b, 0xee, 0xc3, 0x6f, 0x0d, 0x96, - 0x8e, 0x76, 0x1e, 0x80, 0xe8, 0x15, 0xdb, 0x49, 0xe7, 0xe2, 0x3a, 0x69, 0x49, 0xac, 0x93, 0x7e, - 0x93, 0x70, 0x98, 0xc3, 0xe1, 0x6c, 0x1f, 0x5e, 0x3d, 0xc4, 0x02, 0xdc, 0x8d, 0x2e, 0x3d, 0x7b, - 0xbd, 0x78, 0x25, 0xd5, 0x8b, 0xea, 0x7e, 0xbf, 0x67, 0x75, 0xd0, 0x7c, 0xea, 0x93, 0x13, 0x99, - 0x4f, 0xb1, 0xfd, 0x81, 0x3c, 0xd0, 0x1f, 0x1c, 0xc2, 0x92, 0xbe, 0x09, 0x1c, 0x27, 0x45, 0x54, - 0x42, 0xb6, 0x0a, 0x24, 0x88, 0xdb, 0x40, 0x32, 0x1f, 0xb5, 0x5d, 0x50, 0x09, 0x42, 0x21, 0x8c, - 0xb1, 0xf4, 0x99, 0xce, 0xd8, 0x4d, 0xab, 0x20, 0x71, 0x9c, 0x4d, 0xe1, 0x48, 0x56, 0x9e, 0x58, - 0xbb, 0x9b, 0xfd, 0x2e, 0xd2, 0x8e, 0x2f, 0xe7, 0x27, 0x31, 0x22, 0x3c, 0x85, 0x7a, 0x9a, 0xca, - 0xb1, 0x4b, 0x1a, 0x51, 0x91, 0x61, 0x3f, 0xd2, 0x86, 0xf7, 0xfb, 0x6b, 0xc7, 0x88, 0x5f, 0xaa, - 0x7a, 0x33, 0x38, 0x7e, 0xc1, 0xec, 0x5c, 0xdc, 0x71, 0x9d, 0x7d, 0x7c, 0x6b, 0xbb, 0x43, 0xaf, - 0x7f, 0x5f, 0x3b, 0x66, 0x0c, 0xbe, 0x50, 0x6f, 0x0b, 0x4c, 0x87, 0xc2, 0x28, 0xd3, 0x61, 0xed, - 0x18, 0x35, 0x1e, 0xd4, 0xc7, 0x84, 0x9d, 0x4e, 0x31, 0xb1, 0xd3, 0x59, 0x3b, 0x16, 0x74, 0x3b, - 0x6a, 0x15, 0x94, 0xba, 0xd6, 0x25, 0xbc, 0x55, 0x8d, 0x67, 0x5d, 0xa3, 0x82, 0x0e, 0x55, 0xad, - 0x4b, 0x64, 0x63, 0x7b, 0xed, 0x98, 0x11, 0x7e, 0xa9, 0xae, 0x82, 0x59, 0xbc, 0x2d, 0x80, 0xc9, - 0x94, 0x52, 0x05, 0x14, 0x5a, 0x3b, 0x66, 0x44, 0xdf, 0x22, 0xeb, 0x23, 0x8f, 0xcf, 0x5d, 0xdf, - 0x15, 0x6c, 0xb7, 0xe7, 0x52, 0x6d, 0xb7, 0x23, 0x59, 0x90, 0x0d, 0xf7, 0x53, 0xa0, 0xd0, 0xc1, - 0x12, 0x96, 0xa8, 0x84, 0xc9, 0xa3, 0x7a, 0x27, 0xc8, 0xef, 0x99, 0x6e, 0x30, 0x79, 0xbe, 0x71, - 0x34, 0xdd, 0x75, 0xd3, 0xbd, 0x88, 0x10, 0x44, 0x5f, 0x2d, 0xcf, 0x80, 0x02, 0x16, 0x5c, 0xf8, - 0x47, 0x7b, 0x5b, 0x9e, 0x98, 0x21, 0x15, 0xc7, 0x46, 0xc3, 0x7e, 0xdb, 0x09, 0x0e, 0xa7, 0xff, - 0x7a, 0x6e, 0x32, 0x16, 0xe4, 0x55, 0xcc, 0x75, 0x2a, 0xb6, 0xf5, 0x8c, 0x7d, 0x78, 0x0f, 0xbc, - 0x42, 0x97, 0x44, 0x87, 0xbd, 0x52, 0xcf, 0x00, 0xe0, 0xd3, 0x93, 0x7a, 0x61, 0x10, 0x53, 0x26, - 0x25, 0x5a, 0x3e, 0x28, 0x8c, 0x76, 0x54, 0xf9, 0xbd, 0x31, 0x4c, 0x97, 0x41, 0x41, 0xc4, 0xcf, - 0xc0, 0x7b, 0x96, 0xcd, 0xd4, 0x39, 0x78, 0x4c, 0xd9, 0x29, 0xa5, 0x35, 0x6a, 0x46, 0xb0, 0x97, - 0x7d, 0xdf, 0xf4, 0x96, 0x3c, 0xb9, 0x51, 0x82, 0x9c, 0x80, 0xd6, 0xef, 0xb7, 0xbc, 0xe8, 0xfe, - 0x66, 0xed, 0x73, 0x13, 0x51, 0x9a, 0x21, 0x03, 0x8e, 0x3c, 0x74, 0xc0, 0x39, 0x10, 0x20, 0x28, - 0x3f, 0x22, 0x40, 0x50, 0x21, 0xdd, 0xca, 0xe1, 0x47, 0x59, 0xfd, 0xd9, 0xe0, 0xf5, 0xe7, 0x8e, - 0x18, 0x80, 0x86, 0xc9, 0x65, 0x22, 0xf6, 0xcd, 0xbb, 0x42, 0x4d, 0x69, 0x71, 0x9a, 0x72, 0xd7, - 0xf8, 0x8c, 0x64, 0xaf, 0x2d, 0x1f, 0xce, 0x83, 0xab, 0x22, 0x66, 0x1a, 0xf0, 0x32, 0x55, 0x94, - 0x3f, 0x9c, 0x88, 0xa2, 0xa4, 0x77, 0x74, 0xce, 0x5a, 0x63, 0x7e, 0x5b, 0xf8, 0xdc, 0xfe, 0x20, - 0x50, 0xa1, 0x6c, 0x62, 0x94, 0xe5, 0x14, 0x28, 0x92, 0x1e, 0x86, 0x42, 0x43, 0x9f, 0x52, 0x76, - 0x37, 0x62, 0xa7, 0xfd, 0x45, 0x79, 0x9b, 0x82, 0xfe, 0xd0, 0x75, 0x8d, 0xf6, 0xbe, 0x6b, 0xd7, - 0x6c, 0xdf, 0xd1, 0x7e, 0x64, 0x22, 0x8a, 0x13, 0x7a, 0xc3, 0xc9, 0xe3, 0x78, 0xc3, 0x8d, 0xb5, + 0xee, 0xda, 0xad, 0xae, 0x6a, 0xb2, 0xaa, 0x67, 0x58, 0xcf, 0xe1, 0xeb, 0x93, 0x53, 0x15, 0xdd, + 0x9d, 0x3b, 0xd5, 0x99, 0x45, 0x66, 0xf6, 0xcc, 0x0e, 0xdf, 0x73, 0xbe, 0x23, 0x07, 0x11, 0x10, + 0x11, 0x51, 0x11, 0x11, 0xb9, 0x0b, 0x08, 0xc8, 0xfd, 0x26, 0x20, 0x17, 0xb9, 0x08, 0x22, 0x2a, + 0x8a, 0xca, 0x45, 0x79, 0x04, 0x2f, 0x88, 0xe7, 0x1c, 0xf5, 0xe0, 0xa7, 0x20, 0x2a, 0xc7, 0xef, + 0x89, 0x4b, 0x66, 0x46, 0x54, 0x57, 0x66, 0x45, 0x56, 0x57, 0x56, 0x2f, 0xfa, 0xfd, 0x55, 0x95, + 0x91, 0x91, 0x6f, 0xbc, 0xf1, 0xfe, 0xde, 0x88, 0x78, 0x23, 0xe2, 0x8d, 0x37, 0xc0, 0xe9, 0xfe, + 0x85, 0x5b, 0xfb, 0xae, 0xe3, 0x3b, 0xde, 0xad, 0x1d, 0x67, 0x6f, 0xcf, 0xb4, 0xbb, 0xde, 0x12, + 0x7e, 0x56, 0x67, 0x4c, 0xfb, 0x8a, 0x7f, 0xa5, 0x0f, 0xb5, 0x1b, 0xfa, 0x17, 0x77, 0x6e, 0xed, + 0x59, 0x17, 0x6e, 0xed, 0x5f, 0xb8, 0x75, 0xcf, 0xe9, 0xc2, 0x5e, 0xf0, 0x01, 0x7e, 0xa0, 0xd9, + 0xb5, 0x9b, 0xe2, 0x72, 0xf5, 0x9c, 0x8e, 0xd9, 0xf3, 0x7c, 0xc7, 0x85, 0x34, 0xe7, 0xa9, 0xa8, + 0x48, 0x78, 0x09, 0xda, 0x7e, 0x40, 0xe1, 0xba, 0x1d, 0xc7, 0xd9, 0xe9, 0x41, 0xf2, 0xee, 0xc2, + 0xfe, 0xf6, 0xad, 0x9e, 0xef, 0xee, 0x77, 0x7c, 0xfa, 0xf6, 0xfa, 0xc1, 0xb7, 0x5d, 0xe8, 0x75, + 0x5c, 0xab, 0xef, 0x3b, 0x2e, 0xc9, 0x71, 0xf6, 0x05, 0x7f, 0x5d, 0x02, 0xb2, 0xd1, 0xef, 0x68, + 0xdf, 0x9e, 0x01, 0x72, 0xb9, 0xdf, 0xd7, 0x3e, 0x25, 0x01, 0xb0, 0x0a, 0xfd, 0x73, 0xd0, 0xf5, + 0x2c, 0xc7, 0xd6, 0x8e, 0x83, 0x19, 0x03, 0x3e, 0x63, 0x1f, 0x7a, 0xfe, 0x1d, 0xf9, 0xe7, 0x7d, + 0x43, 0xce, 0x69, 0xaf, 0x97, 0x40, 0xc9, 0x80, 0x5e, 0xdf, 0xb1, 0x3d, 0xa8, 0x3e, 0x05, 0x14, + 0xa0, 0xeb, 0x3a, 0xee, 0xe9, 0xdc, 0xf5, 0xb9, 0x9b, 0xe6, 0x6e, 0xbb, 0x79, 0x89, 0x56, 0x7f, + 0xc9, 0xe8, 0x77, 0x96, 0xca, 0xfd, 0xfe, 0x52, 0x44, 0x69, 0x29, 0xf8, 0x68, 0x49, 0x47, 0x5f, + 0x18, 0xe4, 0x43, 0xf5, 0x34, 0x98, 0xb9, 0x44, 0x32, 0x9c, 0x96, 0xae, 0xcf, 0xdd, 0x34, 0x6b, + 0x04, 0x8f, 0xe8, 0x4d, 0x17, 0xfa, 0xa6, 0xd5, 0xf3, 0x4e, 0xcb, 0xe4, 0x0d, 0x7d, 0xd4, 0x5e, + 0x9b, 0x03, 0x05, 0x4c, 0x44, 0xad, 0x80, 0x7c, 0xc7, 0xe9, 0x42, 0x5c, 0xfc, 0xe2, 0x6d, 0xb7, + 0x8a, 0x17, 0xbf, 0x54, 0x71, 0xba, 0xd0, 0xc0, 0x1f, 0xab, 0xd7, 0x83, 0xb9, 0x40, 0x2c, 0x11, + 0x1b, 0x6c, 0xd2, 0xd9, 0xdb, 0x40, 0x1e, 0xe5, 0x57, 0x4b, 0x20, 0xdf, 0xd8, 0xac, 0xd7, 0x95, + 0x63, 0xea, 0x09, 0xb0, 0xb0, 0xd9, 0xb8, 0xa7, 0xd1, 0x3c, 0xdf, 0xd8, 0xd2, 0x0d, 0xa3, 0x69, + 0x28, 0x39, 0x75, 0x01, 0xcc, 0x2e, 0x97, 0xab, 0x5b, 0xb5, 0xc6, 0xc6, 0x66, 0x5b, 0x91, 0xb4, + 0x57, 0xca, 0x60, 0xb1, 0x05, 0xfd, 0x2a, 0xbc, 0x64, 0x75, 0x60, 0xcb, 0x37, 0x7d, 0xa8, 0xbd, + 0x28, 0x17, 0x0a, 0x53, 0xdd, 0x44, 0x85, 0x86, 0xaf, 0x68, 0x05, 0x1e, 0x7b, 0xa0, 0x02, 0x3c, + 0x85, 0x25, 0xfa, 0xf5, 0x12, 0x93, 0x66, 0xb0, 0x74, 0xce, 0x3e, 0x0a, 0xcc, 0x31, 0xef, 0xd4, + 0x45, 0x00, 0x96, 0xcb, 0x95, 0x7b, 0x56, 0x8d, 0xe6, 0x66, 0xa3, 0xaa, 0x1c, 0x43, 0xcf, 0x2b, + 0x4d, 0x43, 0xa7, 0xcf, 0x39, 0xed, 0xbb, 0x39, 0x06, 0xcc, 0x2a, 0x0f, 0xe6, 0xd2, 0x68, 0x66, + 0x86, 0x00, 0xaa, 0xbd, 0x21, 0x04, 0x67, 0x95, 0x03, 0xe7, 0xb1, 0xe9, 0xc8, 0x65, 0x0f, 0xd0, + 0x73, 0x24, 0x50, 0x6a, 0xed, 0xee, 0xfb, 0x5d, 0xe7, 0xb2, 0xad, 0xcd, 0x86, 0xc8, 0x68, 0x7f, + 0xc3, 0xca, 0xe4, 0xc9, 0xbc, 0x4c, 0x6e, 0x3a, 0x58, 0x09, 0x4a, 0x21, 0x46, 0x1a, 0xaf, 0x0e, + 0xa5, 0x51, 0xe6, 0xa4, 0xf1, 0x28, 0x51, 0x42, 0xd9, 0xcb, 0xe1, 0xc3, 0xcb, 0xa0, 0xd0, 0xea, + 0x9b, 0x1d, 0xa8, 0x7d, 0x4e, 0x06, 0xf3, 0x75, 0x68, 0x5e, 0x82, 0xe5, 0x7e, 0xdf, 0x75, 0x2e, + 0x41, 0xad, 0x12, 0xe9, 0xeb, 0x69, 0x30, 0xe3, 0xa1, 0x4c, 0xb5, 0x2e, 0xae, 0xc1, 0xac, 0x11, + 0x3c, 0xaa, 0x67, 0x00, 0xb0, 0xba, 0xd0, 0xf6, 0x2d, 0xdf, 0x82, 0xde, 0x69, 0xe9, 0x7a, 0xf9, + 0xa6, 0x59, 0x83, 0x49, 0xd1, 0xbe, 0x2d, 0x89, 0xea, 0x18, 0xe6, 0x62, 0x89, 0xe5, 0x20, 0x46, + 0xaa, 0xaf, 0x93, 0x44, 0x74, 0x6c, 0x24, 0xb9, 0x74, 0xb2, 0x7d, 0x5b, 0x2e, 0xbd, 0x70, 0x51, + 0x8e, 0x46, 0x73, 0xab, 0xb5, 0x59, 0x59, 0xdb, 0x6a, 0x6d, 0x94, 0x2b, 0xba, 0x02, 0xd5, 0x93, + 0x40, 0xc1, 0x7f, 0xb7, 0x6a, 0xad, 0xad, 0xaa, 0x5e, 0xd7, 0xdb, 0x7a, 0x55, 0xd9, 0x56, 0x55, + 0xb0, 0x68, 0xe8, 0x4f, 0xdd, 0xd4, 0x5b, 0xed, 0xad, 0x95, 0x72, 0xad, 0xae, 0x57, 0x95, 0x1d, + 0xf4, 0x71, 0xbd, 0xb6, 0x5e, 0x6b, 0x6f, 0x19, 0x7a, 0xb9, 0xb2, 0xa6, 0x57, 0x95, 0x5d, 0xf5, + 0x41, 0xe0, 0xaa, 0x46, 0x73, 0xab, 0xbc, 0xb1, 0x61, 0x34, 0xcf, 0xe9, 0x5b, 0xf4, 0x8b, 0x96, + 0x62, 0x91, 0x82, 0xda, 0x5b, 0xad, 0xb5, 0xb2, 0xa1, 0x97, 0x97, 0xeb, 0xba, 0x72, 0x9f, 0xf6, + 0x6c, 0x19, 0x2c, 0xac, 0x9b, 0x17, 0x61, 0x6b, 0xd7, 0x74, 0xa1, 0x79, 0xa1, 0x07, 0xb5, 0x87, + 0x09, 0xe0, 0xa9, 0x7d, 0x8e, 0xc5, 0x4b, 0xe7, 0xf1, 0xba, 0x75, 0x88, 0x80, 0xb9, 0x22, 0x62, + 0x00, 0xfb, 0xa7, 0xb0, 0x19, 0xac, 0x71, 0x80, 0x3d, 0x2e, 0x25, 0xbd, 0x74, 0x88, 0xfd, 0xf7, + 0x07, 0x00, 0x62, 0xda, 0xef, 0xc9, 0x60, 0xbe, 0x66, 0x5f, 0xb2, 0x7c, 0x58, 0xd9, 0x35, 0xed, + 0x1d, 0xa8, 0xf5, 0x44, 0x1a, 0xd5, 0x2a, 0x98, 0xeb, 0x43, 0x77, 0xcf, 0xf2, 0xd0, 0xd8, 0xe5, + 0xe1, 0xca, 0x2d, 0xde, 0xf6, 0xf0, 0x50, 0x5a, 0xd8, 0x56, 0x58, 0xda, 0x30, 0x5d, 0xdf, 0xea, + 0x58, 0x7d, 0xd3, 0xf6, 0x37, 0xa2, 0xcc, 0x06, 0xfb, 0xa5, 0xf6, 0xfb, 0x29, 0x5b, 0x1f, 0xcb, + 0x6a, 0x0c, 0x98, 0xff, 0x96, 0x13, 0x6f, 0x7d, 0x09, 0xe4, 0xd2, 0x61, 0xf9, 0xe3, 0x53, 0xc7, + 0xf2, 0x1a, 0x70, 0x75, 0xad, 0x51, 0x69, 0x1a, 0x86, 0x5e, 0x69, 0x6f, 0x6d, 0xe8, 0xc6, 0x7a, + 0xad, 0xd5, 0xaa, 0x35, 0x1b, 0x2d, 0xc5, 0xd2, 0xbe, 0x51, 0x00, 0x8b, 0xa4, 0x66, 0xab, 0xd0, + 0x86, 0x2e, 0x1a, 0xdb, 0xdf, 0x98, 0x13, 0x81, 0xf5, 0x76, 0x00, 0x2c, 0xfc, 0x5d, 0xfb, 0x4a, + 0x1f, 0x52, 0x54, 0xaf, 0x19, 0x40, 0xb5, 0x16, 0x66, 0x30, 0x98, 0xcc, 0x83, 0x1a, 0x21, 0x8f, + 0xad, 0x11, 0x6f, 0xca, 0x33, 0x1a, 0xb1, 0xc2, 0x6b, 0xc4, 0xa3, 0x63, 0x21, 0x0c, 0x2a, 0x1a, + 0x63, 0xc6, 0x5d, 0x07, 0x66, 0x09, 0xaf, 0x15, 0xab, 0x4b, 0xe1, 0x8b, 0x12, 0xd4, 0x1b, 0xc0, + 0x02, 0x79, 0x58, 0xb1, 0x7a, 0xf0, 0x1e, 0x78, 0x85, 0x1a, 0x74, 0x7c, 0xe2, 0x80, 0x70, 0xf2, + 0x87, 0x10, 0x4e, 0x61, 0x6c, 0xe1, 0xfc, 0x44, 0x38, 0xb2, 0xd4, 0x38, 0xdd, 0xfe, 0xc1, 0xb4, + 0x82, 0x49, 0xa7, 0xdd, 0x2f, 0x79, 0x20, 0x8c, 0x2d, 0x07, 0x86, 0x10, 0x4b, 0xfb, 0x9e, 0x04, + 0xe6, 0x5a, 0xbe, 0xd3, 0x47, 0xfd, 0xb1, 0x65, 0xef, 0x88, 0x0d, 0x20, 0x9f, 0x61, 0xbb, 0x9c, + 0x0a, 0xaf, 0x60, 0x8f, 0x1a, 0x22, 0x47, 0xa6, 0x80, 0x98, 0x1e, 0xe7, 0xdb, 0x61, 0x8f, 0xb3, + 0xc2, 0xa1, 0x72, 0x5b, 0x2a, 0x6a, 0xdf, 0x87, 0x83, 0xc7, 0xcb, 0xf2, 0x40, 0x09, 0xd4, 0xcc, + 0xaf, 0xec, 0xbb, 0x2e, 0xb4, 0x7d, 0x31, 0x10, 0xfe, 0x54, 0x66, 0x40, 0x58, 0xe3, 0x41, 0xb8, + 0x2d, 0x41, 0x99, 0x83, 0x52, 0xfe, 0x9d, 0xb7, 0xf3, 0x8f, 0x85, 0x1a, 0x75, 0x0f, 0xa7, 0x51, + 0x3f, 0x94, 0x5e, 0x34, 0xe9, 0xd4, 0x6a, 0x6d, 0x0c, 0xad, 0x3a, 0x09, 0x14, 0x64, 0xf4, 0x55, + 0xda, 0xb5, 0x73, 0xfa, 0x56, 0xad, 0x71, 0xae, 0xd6, 0xd6, 0x15, 0xa8, 0xbd, 0x58, 0x8e, 0x06, + 0x21, 0x7f, 0x15, 0x4f, 0x5d, 0x84, 0x34, 0xe3, 0xcb, 0xd2, 0x78, 0xfd, 0x3f, 0x29, 0x23, 0x3b, + 0xbd, 0x60, 0x30, 0x11, 0xef, 0x7b, 0x87, 0x32, 0x95, 0x0e, 0x91, 0xbb, 0xc7, 0x40, 0xe4, 0x14, + 0x50, 0x6b, 0x8d, 0x73, 0xe5, 0x7a, 0xad, 0x4a, 0xda, 0xf9, 0x56, 0xfb, 0xde, 0x0d, 0x84, 0xc9, + 0xcf, 0x84, 0xc6, 0x9e, 0x01, 0x2f, 0x39, 0x17, 0x05, 0x2d, 0xee, 0xaf, 0x8e, 0x65, 0xa3, 0x91, + 0x12, 0x62, 0x7a, 0xcc, 0x1f, 0x97, 0xd2, 0xda, 0x68, 0x43, 0xc9, 0x3d, 0x90, 0x46, 0xb1, 0x03, + 0xdd, 0xe3, 0xce, 0x90, 0x5e, 0x74, 0xe8, 0x28, 0xf6, 0x89, 0x3c, 0x00, 0xa4, 0x92, 0xe7, 0x2c, + 0x78, 0x59, 0x5b, 0x8f, 0x30, 0xe1, 0xd4, 0x36, 0x37, 0x52, 0x6d, 0xa5, 0x61, 0x6a, 0xfb, 0x97, + 0x6c, 0x4f, 0xbb, 0xcc, 0xa3, 0x77, 0x4b, 0xac, 0xb8, 0x11, 0x27, 0xf1, 0x4b, 0x62, 0x81, 0xa2, + 0x48, 0xbc, 0xf9, 0x78, 0x1d, 0x98, 0xc5, 0x7f, 0x1b, 0xe6, 0x1e, 0xa4, 0x6d, 0x28, 0x4a, 0x50, + 0xcf, 0x82, 0x79, 0x92, 0xb1, 0xe3, 0xd8, 0xa8, 0x3e, 0x79, 0x9c, 0x81, 0x4b, 0x43, 0x20, 0x76, + 0x5c, 0x68, 0xfa, 0x8e, 0x8b, 0x69, 0x14, 0x08, 0x88, 0x4c, 0x92, 0x7a, 0x0b, 0x38, 0x61, 0x79, + 0xb8, 0x55, 0x6d, 0x7a, 0xd0, 0x25, 0xcc, 0x9e, 0x2e, 0x5e, 0x9f, 0xbb, 0xa9, 0x64, 0x1c, 0x7c, + 0xa1, 0x7d, 0x33, 0x6c, 0xb3, 0x3a, 0xa7, 0x67, 0x8f, 0x49, 0x53, 0xf1, 0x74, 0x5a, 0x76, 0x69, + 0xbc, 0x1e, 0x94, 0xf4, 0x9b, 0x5b, 0x48, 0x37, 0x56, 0xf0, 0xea, 0x17, 0xa4, 0xad, 0x18, 0xa5, + 0xa2, 0xbc, 0x95, 0x66, 0xa3, 0xad, 0x37, 0xda, 0xca, 0xf6, 0x50, 0xfd, 0xdb, 0xd1, 0x5e, 0x97, + 0x07, 0xf9, 0xbb, 0x1d, 0xcb, 0xd6, 0x9e, 0x93, 0xe3, 0x14, 0xc8, 0x86, 0xfe, 0x65, 0xc7, 0xbd, + 0x18, 0x36, 0xeb, 0x28, 0x21, 0x19, 0xc9, 0x48, 0xf1, 0xe4, 0x91, 0x8a, 0x97, 0x1f, 0xa6, 0x78, + 0x3f, 0xcd, 0x2a, 0xde, 0x9d, 0xbc, 0xe2, 0xdd, 0x38, 0x44, 0xfe, 0x88, 0xf9, 0x98, 0xee, 0xe2, + 0xd3, 0x61, 0x77, 0x71, 0x17, 0x07, 0xe3, 0x23, 0xc5, 0xc8, 0xa4, 0x03, 0xf0, 0x2b, 0x99, 0x76, + 0x13, 0xc3, 0xa0, 0xde, 0x89, 0x81, 0x7a, 0x77, 0x48, 0x0f, 0x62, 0x1d, 0xec, 0x68, 0xee, 0x3b, + 0xd8, 0xa9, 0x5c, 0x54, 0xaf, 0x06, 0x27, 0xaa, 0xb5, 0x95, 0x15, 0xdd, 0xd0, 0x1b, 0xed, 0xad, + 0x86, 0xde, 0x3e, 0xdf, 0x34, 0xee, 0x51, 0x7a, 0xda, 0x6b, 0x65, 0x00, 0x90, 0x84, 0x2a, 0xa6, + 0xdd, 0x81, 0x3d, 0xb1, 0xfe, 0xff, 0x6f, 0xa5, 0x74, 0x3d, 0x48, 0x44, 0x3f, 0x06, 0xce, 0x57, + 0x48, 0xe2, 0xad, 0x32, 0x96, 0x58, 0x3a, 0x50, 0xdf, 0xfc, 0x40, 0x98, 0xc1, 0x5c, 0x05, 0x8e, + 0x07, 0xf4, 0x68, 0xf6, 0xe1, 0x2b, 0x63, 0x6f, 0xcf, 0x83, 0x45, 0x0a, 0x4b, 0xb0, 0xd4, 0xf9, + 0x3c, 0xa1, 0xf9, 0xbb, 0x06, 0x4a, 0x74, 0x65, 0x33, 0x18, 0x0c, 0xc2, 0xe7, 0xc9, 0x4d, 0xd0, + 0x5f, 0x2c, 0xa7, 0x33, 0xd0, 0xf8, 0x9a, 0xc4, 0xa8, 0xc4, 0xaf, 0xa5, 0x98, 0xd8, 0x26, 0x12, + 0x4c, 0xa7, 0x16, 0x9f, 0xca, 0x54, 0x2d, 0x86, 0xe0, 0x9d, 0xb0, 0x6e, 0x73, 0x88, 0xd6, 0xae, + 0x7d, 0x56, 0x0e, 0x35, 0xa6, 0x0a, 0x3b, 0x3d, 0xcb, 0x86, 0xda, 0x5d, 0x87, 0x54, 0x18, 0x7e, + 0x61, 0x5c, 0x1c, 0x67, 0x5a, 0x7e, 0x0c, 0xce, 0xaf, 0x49, 0x8f, 0xf3, 0x70, 0x82, 0xff, 0x8e, + 0x9b, 0xff, 0x57, 0x65, 0x70, 0x82, 0x69, 0x88, 0x06, 0xdc, 0x9b, 0xd8, 0x66, 0xc7, 0x7f, 0x67, + 0xdb, 0x6e, 0x8d, 0xc7, 0x74, 0x98, 0xed, 0x7d, 0x80, 0x8d, 0x18, 0x58, 0xdf, 0x1c, 0xc2, 0x5a, + 0xe7, 0x60, 0x7d, 0xc2, 0x18, 0x34, 0xd3, 0x21, 0xfb, 0x8e, 0x4c, 0x91, 0xbd, 0x06, 0x5c, 0xbd, + 0x51, 0x36, 0xda, 0xb5, 0x4a, 0x6d, 0xa3, 0x8c, 0xc6, 0x51, 0x66, 0xc8, 0x8e, 0x31, 0xee, 0x79, + 0xd0, 0x87, 0xe2, 0xfb, 0xd1, 0x3c, 0xb8, 0x6e, 0x78, 0x47, 0x4b, 0x97, 0xe0, 0x2d, 0x11, 0xa8, + 0xab, 0x60, 0xa6, 0x83, 0xb3, 0x13, 0x9c, 0xd9, 0xdd, 0xed, 0x84, 0xbe, 0x9c, 0x94, 0x60, 0x04, + 0x9f, 0x6a, 0xef, 0x66, 0x15, 0xa2, 0xcd, 0x2b, 0xc4, 0x93, 0x93, 0xc1, 0x3b, 0xc0, 0x77, 0x8c, + 0x6e, 0x7c, 0x3e, 0xd4, 0x8d, 0xf3, 0x9c, 0x6e, 0x54, 0x0e, 0x47, 0x3e, 0x9d, 0x9a, 0xfc, 0xd6, + 0x03, 0xa1, 0x03, 0x88, 0xd5, 0x26, 0x2b, 0x7e, 0x54, 0x18, 0xda, 0xdd, 0xbf, 0x4a, 0x06, 0xc5, + 0x2a, 0xec, 0x41, 0x5f, 0x70, 0x06, 0xff, 0x77, 0x92, 0xe8, 0x9e, 0x31, 0x81, 0x81, 0xd0, 0x8e, + 0x5f, 0x4b, 0xf1, 0xad, 0x3d, 0xe8, 0xf9, 0xe6, 0x5e, 0x1f, 0x8b, 0x5a, 0x36, 0xa2, 0x04, 0xed, + 0x47, 0x25, 0x91, 0x1d, 0xe5, 0x84, 0x62, 0xfe, 0x7d, 0xac, 0x4c, 0x7f, 0x41, 0x02, 0xa5, 0x16, + 0xf4, 0x9b, 0x6e, 0x17, 0xba, 0x5a, 0x2b, 0xc2, 0xe8, 0x7a, 0x30, 0x87, 0x41, 0x41, 0xd3, 0xcc, + 0x10, 0x27, 0x36, 0x49, 0xbd, 0x11, 0x2c, 0x86, 0x8f, 0xf8, 0x73, 0xda, 0x8d, 0x0f, 0xa4, 0x6a, + 0xdf, 0xca, 0x89, 0x3a, 0xba, 0xd0, 0x85, 0x67, 0xca, 0x4d, 0x4c, 0x2b, 0x15, 0x73, 0x5a, 0x49, + 0x24, 0x95, 0xbd, 0x2f, 0xc0, 0x3b, 0x25, 0x00, 0x36, 0x6d, 0x2f, 0x90, 0xeb, 0x23, 0x53, 0xc8, + 0x55, 0xfb, 0xc7, 0x5c, 0xba, 0x59, 0x4c, 0x54, 0x4e, 0x8c, 0xc4, 0x7e, 0x29, 0xc5, 0xda, 0x42, + 0x2c, 0xb1, 0xec, 0x65, 0xf6, 0xa5, 0xe3, 0xa0, 0x78, 0xde, 0xec, 0xf5, 0xa0, 0xaf, 0xbd, 0x52, + 0x06, 0xc5, 0x8a, 0x0b, 0x4d, 0x1f, 0x6a, 0x30, 0x12, 0x9d, 0x06, 0x4a, 0xae, 0xe3, 0xf8, 0x1b, + 0xa6, 0xbf, 0x4b, 0xe5, 0x16, 0x3e, 0xab, 0x4f, 0x00, 0x0f, 0xda, 0xde, 0xef, 0xf5, 0x7c, 0x78, + 0xbf, 0xbf, 0xe1, 0x5a, 0x7b, 0xa6, 0x7b, 0xa5, 0x6e, 0xda, 0x3b, 0xfb, 0xe6, 0x0e, 0xa4, 0xec, + 0xc5, 0xbd, 0xa6, 0xde, 0x58, 0xbf, 0xc2, 0x76, 0x3c, 0x77, 0xf1, 0x42, 0xff, 0x01, 0x4e, 0x4e, + 0x84, 0xc5, 0x25, 0xc2, 0x5e, 0x4c, 0xcf, 0xa3, 0x81, 0xd2, 0x9e, 0x0d, 0xf7, 0x1c, 0xdb, 0xea, + 0x04, 0xd6, 0x6a, 0xf0, 0xac, 0x7d, 0x3c, 0x44, 0x63, 0x99, 0x43, 0x63, 0x49, 0xb8, 0x94, 0x74, + 0x50, 0xb4, 0xc6, 0xe8, 0x77, 0x1e, 0x02, 0xae, 0x25, 0xdd, 0xc8, 0x56, 0xbb, 0xb9, 0x55, 0x31, + 0xf4, 0x72, 0x5b, 0xdf, 0xaa, 0x37, 0x2b, 0xe5, 0xfa, 0x96, 0xa1, 0x6f, 0x34, 0x15, 0x88, 0x66, + 0xe7, 0x33, 0x06, 0xec, 0x38, 0x97, 0xa0, 0xab, 0x3d, 0x2b, 0x27, 0x06, 0x51, 0x82, 0x50, 0x92, + 0xe0, 0x93, 0x45, 0xe0, 0xfb, 0x69, 0x61, 0x67, 0x3a, 0x2a, 0x58, 0xca, 0x7c, 0x4c, 0x8b, 0xf9, + 0x84, 0x50, 0x1f, 0x93, 0x48, 0xea, 0x01, 0x00, 0xd2, 0x3f, 0x48, 0x60, 0xa6, 0xe2, 0xd8, 0x97, + 0xa0, 0xeb, 0xb3, 0x93, 0x2c, 0x16, 0x87, 0xdc, 0x00, 0x0e, 0xa7, 0xc1, 0x0c, 0xb4, 0x7d, 0xd7, + 0xe9, 0x07, 0xb3, 0xac, 0xe0, 0x51, 0x7b, 0x63, 0x5a, 0x09, 0xd3, 0x92, 0xe3, 0xd7, 0x66, 0x87, + 0x17, 0xc4, 0xb1, 0x27, 0x0f, 0xb4, 0x9d, 0xd7, 0xa6, 0xc1, 0x65, 0x38, 0x03, 0xd9, 0xf7, 0x63, + 0x5f, 0x93, 0xc1, 0x02, 0x69, 0xb7, 0x2d, 0x88, 0xcd, 0x42, 0xad, 0xc9, 0xae, 0x73, 0x0e, 0x08, + 0x7f, 0xed, 0x18, 0x27, 0xfe, 0xa2, 0xd9, 0xef, 0x87, 0x2b, 0xe4, 0x6b, 0xc7, 0x0c, 0xfa, 0x4c, + 0xd4, 0x7c, 0xb9, 0x08, 0xf2, 0xe6, 0xbe, 0xbf, 0xab, 0x7d, 0x4f, 0x78, 0xc6, 0xcb, 0xf5, 0x23, + 0x94, 0x9f, 0x18, 0x48, 0x4e, 0x82, 0x82, 0xef, 0x5c, 0x84, 0x81, 0x1c, 0xc8, 0x03, 0x82, 0xc3, + 0xec, 0xf7, 0xdb, 0xf8, 0x05, 0x85, 0x23, 0x78, 0x46, 0x06, 0x96, 0xd9, 0xe9, 0x38, 0xfb, 0xb6, + 0x5f, 0x0b, 0x56, 0xc9, 0xa3, 0x04, 0xed, 0x4b, 0x42, 0xdb, 0x50, 0x02, 0x0c, 0xa6, 0x83, 0xec, + 0xc2, 0x18, 0x4d, 0x69, 0x09, 0xdc, 0x5c, 0xde, 0xd8, 0xd8, 0x6a, 0x37, 0xef, 0xd1, 0x1b, 0x91, + 0xb5, 0xbb, 0x55, 0x6b, 0x6c, 0xb5, 0xd7, 0xf4, 0xad, 0xca, 0xa6, 0x81, 0x17, 0x27, 0xcb, 0x95, + 0x4a, 0x73, 0xb3, 0xd1, 0x56, 0xa0, 0xf6, 0x56, 0x09, 0xcc, 0x57, 0x7a, 0x8e, 0x17, 0x22, 0xfc, + 0x90, 0x08, 0xe1, 0x50, 0x8c, 0x39, 0x46, 0x8c, 0xda, 0xbf, 0xe4, 0x44, 0x9d, 0xc1, 0x02, 0x81, + 0x30, 0xe4, 0x63, 0x7a, 0xa9, 0x37, 0x0a, 0x39, 0x83, 0x8d, 0xa6, 0x97, 0x7d, 0x93, 0xf8, 0xdc, + 0x0a, 0x98, 0x29, 0x13, 0xc5, 0xd0, 0xfe, 0x34, 0x07, 0x8a, 0x15, 0xc7, 0xde, 0xb6, 0x76, 0x90, + 0x05, 0x09, 0x6d, 0xf3, 0x42, 0x0f, 0x56, 0x4d, 0xdf, 0xbc, 0x64, 0xc1, 0xcb, 0xb8, 0x02, 0x25, + 0x63, 0x20, 0x15, 0x31, 0x45, 0x53, 0xe0, 0x85, 0xfd, 0x1d, 0xcc, 0x54, 0xc9, 0x60, 0x93, 0xd0, + 0xf8, 0x41, 0x1e, 0x37, 0x5c, 0xe8, 0xc2, 0x1e, 0x34, 0x3d, 0xec, 0x2b, 0x65, 0xc3, 0x1e, 0x56, + 0xda, 0x92, 0x11, 0xf7, 0x5a, 0x3d, 0x0b, 0xe6, 0xc9, 0x2b, 0x6c, 0xff, 0x78, 0x58, 0x8d, 0x4b, + 0x06, 0x97, 0xa6, 0x3e, 0x0a, 0x14, 0xe0, 0xfd, 0xbe, 0x6b, 0x9e, 0xee, 0x62, 0xbc, 0x1e, 0xb4, + 0x44, 0xbc, 0xc1, 0x97, 0x02, 0x6f, 0xf0, 0xa5, 0x16, 0xf6, 0x15, 0x37, 0x48, 0x2e, 0xed, 0x7f, + 0x97, 0x42, 0xeb, 0xe5, 0x0b, 0x72, 0xa4, 0x18, 0x2a, 0xc8, 0xdb, 0xe6, 0x1e, 0xa4, 0x7a, 0x81, + 0xff, 0xab, 0x37, 0x83, 0xe3, 0xe6, 0x25, 0xd3, 0x37, 0xdd, 0xba, 0xd3, 0x31, 0x7b, 0x78, 0xd8, + 0x0c, 0x5a, 0xfe, 0xe0, 0x0b, 0xbc, 0x69, 0xe5, 0x3b, 0x2e, 0xc4, 0xb9, 0x82, 0x4d, 0xab, 0x20, + 0x01, 0x51, 0xb7, 0x3a, 0x8e, 0x8d, 0xf9, 0x97, 0x0d, 0xfc, 0x1f, 0x49, 0xa5, 0x6b, 0x79, 0xa8, + 0x22, 0x98, 0x4a, 0x83, 0xec, 0xa7, 0xb4, 0xae, 0xd8, 0x1d, 0xbc, 0x61, 0x55, 0x32, 0xe2, 0x5e, + 0xab, 0xcb, 0x60, 0x8e, 0xee, 0xbe, 0xac, 0x23, 0xbd, 0x2a, 0x62, 0xbd, 0xba, 0x9e, 0xf7, 0xb5, + 0x25, 0x78, 0x2e, 0x35, 0xa2, 0x7c, 0x06, 0xfb, 0x91, 0xfa, 0x14, 0x70, 0x2d, 0x7d, 0xac, 0xec, + 0x7b, 0xbe, 0xb3, 0x47, 0x40, 0x5f, 0xb1, 0x7a, 0xa4, 0x06, 0x33, 0xb8, 0x06, 0x49, 0x59, 0xd4, + 0xdb, 0xc0, 0xc9, 0xbe, 0x0b, 0xb7, 0xa1, 0x7b, 0xaf, 0xb9, 0xb7, 0x7f, 0x7f, 0xdb, 0x35, 0x6d, + 0xaf, 0xef, 0xb8, 0xfe, 0xe9, 0x12, 0x66, 0x7e, 0xe8, 0x3b, 0xf5, 0x16, 0x70, 0xe2, 0x3e, 0xcf, + 0xb1, 0xcb, 0x7d, 0xab, 0x6e, 0x79, 0x3e, 0xb4, 0xcb, 0xdd, 0xae, 0x7b, 0x7a, 0x16, 0x97, 0x75, + 0xf0, 0x85, 0x7a, 0x03, 0x58, 0xb8, 0xcf, 0xb1, 0xec, 0x96, 0xef, 0x42, 0x73, 0x6f, 0xd3, 0xed, + 0x9d, 0x06, 0x64, 0x83, 0x88, 0x4b, 0xa4, 0x9d, 0x6f, 0x09, 0x14, 0x09, 0x24, 0xda, 0x8b, 0x0a, + 0xc2, 0xae, 0xfb, 0x54, 0x48, 0x89, 0xd6, 0xe2, 0xa3, 0xc1, 0x0c, 0xed, 0x35, 0x31, 0xf8, 0x73, + 0xb7, 0x9d, 0x1a, 0x58, 0x20, 0xa1, 0x54, 0x8c, 0x20, 0x9b, 0xfa, 0x58, 0x50, 0xec, 0x60, 0x51, + 0x61, 0x3d, 0x98, 0xbb, 0xed, 0xda, 0xe1, 0x85, 0xe2, 0x2c, 0x06, 0xcd, 0xaa, 0x7d, 0x59, 0x16, + 0xf2, 0xf6, 0x4f, 0xe2, 0x38, 0x5d, 0x4f, 0xf1, 0x4d, 0x69, 0x8c, 0xae, 0xf8, 0x16, 0x70, 0x13, + 0xed, 0x67, 0xa9, 0x4d, 0x53, 0xdd, 0x5a, 0xde, 0x0c, 0x66, 0xb5, 0xc8, 0xd2, 0x69, 0xb5, 0xcb, + 0x46, 0x7b, 0xab, 0xd1, 0xac, 0xa2, 0xd9, 0xf0, 0xcd, 0xe0, 0xc6, 0x11, 0xb9, 0xf5, 0xf6, 0x56, + 0xa3, 0xbc, 0xae, 0x2b, 0xdb, 0xbc, 0xbd, 0xd4, 0x6a, 0x37, 0x37, 0xb6, 0x8c, 0xcd, 0x46, 0xa3, + 0xd6, 0x58, 0x25, 0xc4, 0x90, 0x81, 0x7a, 0x2a, 0xca, 0x70, 0xde, 0xa8, 0xb5, 0xf5, 0xad, 0x4a, + 0xb3, 0xb1, 0x52, 0x5b, 0x55, 0xac, 0x51, 0xc6, 0xd6, 0x7d, 0xea, 0xf5, 0xe0, 0x3a, 0x8e, 0x93, + 0x5a, 0xb3, 0x81, 0xa6, 0xe8, 0x95, 0x72, 0xa3, 0xa2, 0xa3, 0xf9, 0xf8, 0x45, 0x55, 0x03, 0x57, + 0x13, 0x72, 0x5b, 0x2b, 0xb5, 0x3a, 0xbb, 0xab, 0xf6, 0x99, 0x9c, 0x7a, 0x1a, 0x5c, 0xc5, 0xbe, + 0xa3, 0x3e, 0x11, 0xca, 0x6f, 0xe6, 0xd4, 0x1b, 0xc0, 0x43, 0xb8, 0xaf, 0xc8, 0x06, 0xd9, 0x56, + 0xad, 0xba, 0xb5, 0x5e, 0x6b, 0xad, 0x97, 0xdb, 0x95, 0x35, 0xe5, 0xb3, 0x78, 0xfa, 0x12, 0xda, + 0xe3, 0x8c, 0x0b, 0xfe, 0x4b, 0x58, 0x3b, 0xa1, 0xcc, 0x2b, 0xea, 0x23, 0x87, 0xc2, 0x9e, 0x6c, + 0x17, 0x7f, 0x2a, 0x1c, 0x71, 0xaa, 0x9c, 0x0a, 0x3d, 0x3a, 0x05, 0xad, 0x74, 0x3a, 0xd4, 0x1e, + 0x43, 0x85, 0xae, 0x07, 0xd7, 0x35, 0x74, 0x82, 0x94, 0xa1, 0x57, 0x9a, 0xe7, 0x74, 0x63, 0xeb, + 0x7c, 0xb9, 0x5e, 0xd7, 0xdb, 0x5b, 0x2b, 0x35, 0xa3, 0xd5, 0x56, 0xb6, 0xb5, 0x7f, 0x94, 0xc2, + 0x65, 0x29, 0x46, 0x5a, 0x7f, 0x2a, 0xa5, 0x6d, 0xd6, 0x89, 0xcb, 0x4f, 0x3f, 0x08, 0x8a, 0x9e, + 0x6f, 0xfa, 0xfb, 0x1e, 0x6d, 0xd5, 0x0f, 0x1e, 0xde, 0xaa, 0x97, 0x5a, 0x38, 0x93, 0x41, 0x33, + 0x6b, 0x5f, 0xce, 0xa5, 0x69, 0xa6, 0x13, 0x58, 0x99, 0xb2, 0xc6, 0x10, 0xf1, 0x19, 0xa0, 0x05, + 0xda, 0x5e, 0x6b, 0x6d, 0x95, 0xeb, 0x86, 0x5e, 0xae, 0xde, 0x1b, 0xae, 0x47, 0x41, 0xf5, 0x6a, + 0x70, 0x62, 0xb3, 0x51, 0x5e, 0xae, 0xeb, 0xb8, 0xb9, 0x34, 0x1b, 0x0d, 0xbd, 0x82, 0xe4, 0xfe, + 0xa3, 0x78, 0xf7, 0x07, 0x59, 0xe5, 0x98, 0x6f, 0x64, 0x39, 0x31, 0xf2, 0xff, 0x86, 0x24, 0xea, + 0x6a, 0x17, 0x69, 0x18, 0x4b, 0x6b, 0xb2, 0x38, 0x7c, 0x49, 0xc8, 0xb3, 0x4d, 0x88, 0x93, 0x74, + 0x78, 0xfc, 0x97, 0x31, 0xf0, 0xb8, 0x1a, 0x9c, 0x60, 0xf1, 0xc0, 0x1e, 0x6e, 0xf1, 0x30, 0xfc, + 0x89, 0x0c, 0x66, 0xd6, 0xad, 0x1d, 0xec, 0x6f, 0xbd, 0x1f, 0x19, 0x28, 0x8b, 0x40, 0x0a, 0xbd, + 0x77, 0x24, 0xab, 0xcb, 0x4d, 0xe6, 0x25, 0xf1, 0xf5, 0x16, 0xa1, 0x09, 0xfb, 0x97, 0x53, 0xf7, + 0x4c, 0x94, 0xe1, 0x98, 0x9e, 0xe9, 0xf9, 0x52, 0x9a, 0x9e, 0x69, 0x38, 0xad, 0x54, 0x30, 0x21, + 0xd3, 0xc1, 0x85, 0xcf, 0xd8, 0xb7, 0x5c, 0xd8, 0xc5, 0x66, 0x22, 0xae, 0xb7, 0x6c, 0xf0, 0x89, + 0x67, 0xdd, 0xc3, 0x81, 0xc9, 0x7a, 0xd9, 0xcc, 0x83, 0x52, 0x38, 0x9a, 0xe0, 0x0d, 0x1f, 0xf4, + 0x52, 0x6f, 0x34, 0x37, 0x57, 0xd7, 0xb6, 0x56, 0x0c, 0x5d, 0xa7, 0x4b, 0xc4, 0x3b, 0xda, 0xbb, + 0x24, 0xb0, 0x40, 0x6b, 0x48, 0xbd, 0x27, 0x1e, 0x12, 0x0b, 0x32, 0x85, 0xe3, 0xdf, 0xd8, 0xe9, + 0xc9, 0x2a, 0x0f, 0xc7, 0x63, 0x92, 0x44, 0x98, 0xe8, 0x3e, 0xf1, 0xa6, 0xb0, 0x09, 0xdd, 0xcd, + 0x81, 0xf2, 0xf8, 0xd4, 0x14, 0xb3, 0x9f, 0xa2, 0xbc, 0x08, 0x80, 0x62, 0x0b, 0xf6, 0x60, 0xc7, + 0xd7, 0x3e, 0x2c, 0x8f, 0xdd, 0x26, 0xe2, 0xcc, 0x6d, 0x39, 0x95, 0xb9, 0x9d, 0xcf, 0xc0, 0xdc, + 0x2e, 0x8c, 0x6f, 0x6e, 0x17, 0xd3, 0x9a, 0xdb, 0x33, 0x71, 0xe6, 0x76, 0x42, 0xaf, 0x51, 0x4a, + 0xec, 0x35, 0x06, 0x0c, 0x75, 0xa3, 0x4e, 0x4d, 0x7a, 0x3e, 0x91, 0x2a, 0xf3, 0x27, 0x8b, 0x69, + 0xc7, 0x71, 0x02, 0xfc, 0xd1, 0x9a, 0xe7, 0x3f, 0x59, 0x48, 0x33, 0xee, 0x0f, 0xe5, 0x38, 0x5d, + 0x2b, 0x79, 0x45, 0x3e, 0x83, 0x45, 0x47, 0xf5, 0x61, 0xe0, 0x21, 0xd1, 0xf3, 0x96, 0xfe, 0xb4, + 0x5a, 0xab, 0xdd, 0xc2, 0x36, 0x79, 0xa5, 0x69, 0x18, 0x9b, 0x1b, 0x64, 0xbb, 0xea, 0x14, 0x50, + 0x23, 0x2a, 0xc6, 0x66, 0x83, 0x58, 0xe0, 0x3b, 0x3c, 0xf5, 0x95, 0x5a, 0xa3, 0xba, 0x15, 0x8e, + 0x6a, 0x8d, 0x95, 0xa6, 0xb2, 0xab, 0x2e, 0x81, 0x9b, 0x19, 0xea, 0xb8, 0x03, 0x24, 0x25, 0x94, + 0x1b, 0xd5, 0xad, 0xf5, 0x86, 0xbe, 0xde, 0x6c, 0xd4, 0x2a, 0x38, 0xbd, 0xa5, 0xb7, 0x15, 0x0b, + 0x99, 0x82, 0x03, 0x36, 0x7f, 0x4b, 0x2f, 0x1b, 0x95, 0x35, 0xdd, 0x20, 0x45, 0xde, 0xa7, 0xde, + 0x08, 0xce, 0x96, 0x1b, 0xcd, 0x36, 0x4a, 0x29, 0x37, 0xee, 0x6d, 0xdf, 0xbb, 0xa1, 0x6f, 0x6d, + 0x18, 0xcd, 0x8a, 0xde, 0x6a, 0xa1, 0x91, 0x94, 0xce, 0x10, 0x94, 0x9e, 0xfa, 0x64, 0x70, 0x07, + 0xc3, 0x9a, 0xde, 0xc6, 0xbe, 0x11, 0xeb, 0x4d, 0xec, 0x1e, 0x57, 0xd5, 0xb7, 0xd6, 0xca, 0xad, + 0xad, 0x5a, 0xa3, 0xd2, 0x5c, 0xdf, 0x28, 0xb7, 0x6b, 0x68, 0xc0, 0xdd, 0x30, 0x9a, 0xed, 0xe6, + 0xd6, 0x39, 0xdd, 0x68, 0xd5, 0x9a, 0x0d, 0xc5, 0x46, 0x55, 0x66, 0x46, 0xe8, 0xc0, 0x52, 0x72, + 0xd4, 0xeb, 0xc0, 0xe9, 0x20, 0xbd, 0xde, 0x44, 0x82, 0x66, 0xe6, 0x0c, 0x7d, 0xd6, 0xce, 0x6a, + 0xb5, 0x9b, 0x06, 0x99, 0x35, 0xac, 0xd7, 0x56, 0x0d, 0x34, 0xd5, 0x51, 0x9e, 0x91, 0xe9, 0x9c, + 0xe2, 0x9f, 0x25, 0x90, 0x6f, 0xf9, 0x4e, 0x5f, 0xfb, 0x81, 0xa8, 0x3b, 0x3c, 0x03, 0x80, 0x8b, + 0x5d, 0x21, 0xaa, 0xa6, 0x6f, 0xd2, 0xd5, 0x1a, 0x26, 0x45, 0xfb, 0x0d, 0xe1, 0xfd, 0xdb, 0xc8, + 0xea, 0x72, 0xfa, 0x31, 0xc3, 0xc7, 0x77, 0xc5, 0xce, 0xfc, 0xc6, 0x13, 0x9a, 0xc2, 0xc9, 0x38, + 0x0d, 0x9c, 0x62, 0x60, 0x45, 0xf2, 0x0f, 0x54, 0x06, 0xaa, 0x0f, 0x02, 0x57, 0x0d, 0x28, 0x1f, + 0xd6, 0xb9, 0x6d, 0xf5, 0xa1, 0xe0, 0xc1, 0x8c, 0xfa, 0xeb, 0xeb, 0xcd, 0x73, 0x7a, 0xa8, 0xe8, + 0xd5, 0x72, 0xbb, 0xac, 0xec, 0x68, 0x5f, 0x90, 0x41, 0x7e, 0xdd, 0xb9, 0x34, 0xb8, 0x6d, 0x6e, + 0xc3, 0xcb, 0xcc, 0xde, 0x4a, 0xf0, 0xa8, 0xbd, 0x5e, 0x4e, 0x2b, 0xf6, 0xf5, 0x78, 0x17, 0x99, + 0x2f, 0x49, 0x69, 0xc4, 0xbe, 0x7e, 0x58, 0xbf, 0x98, 0xbf, 0x1e, 0x47, 0xec, 0x31, 0xa2, 0x85, + 0xea, 0x59, 0x70, 0x26, 0x7a, 0x51, 0xab, 0xea, 0x8d, 0x76, 0x6d, 0xe5, 0xde, 0x48, 0xb8, 0x35, + 0x43, 0x48, 0xfc, 0xa3, 0xba, 0xb9, 0xe4, 0xb5, 0x82, 0xd3, 0xe0, 0x64, 0xf4, 0x6e, 0x55, 0x6f, + 0x07, 0x6f, 0xee, 0xd3, 0x9e, 0x53, 0x00, 0xf3, 0xa4, 0xdb, 0xdf, 0xec, 0x77, 0x91, 0xf5, 0xfd, + 0xd8, 0x08, 0xdd, 0x9b, 0xc0, 0xf1, 0xda, 0xc6, 0x4a, 0xab, 0xe5, 0x3b, 0xae, 0xb9, 0x03, 0xf1, + 0x38, 0x4a, 0xa4, 0x35, 0x98, 0xac, 0xbd, 0x57, 0x78, 0xf5, 0x9f, 0x1f, 0x6a, 0x48, 0x99, 0x31, + 0xa8, 0x7f, 0x4d, 0x68, 0xb5, 0x5e, 0x80, 0x60, 0x3a, 0xf4, 0xef, 0x9b, 0x70, 0x9b, 0x8b, 0xc7, + 0x65, 0xfb, 0xec, 0x73, 0x25, 0x30, 0xdb, 0xb6, 0xf6, 0xe0, 0x33, 0x1d, 0x1b, 0x7a, 0xea, 0x0c, + 0x90, 0x57, 0xd7, 0xdb, 0xca, 0x31, 0xf4, 0x07, 0x4d, 0x8b, 0x72, 0xf8, 0x8f, 0x8e, 0x0a, 0x40, + 0x7f, 0xca, 0x6d, 0x45, 0x46, 0x7f, 0xd6, 0xf5, 0xb6, 0x92, 0x47, 0x7f, 0x1a, 0x7a, 0x5b, 0x29, + 0xa0, 0x3f, 0x1b, 0xf5, 0xb6, 0x52, 0x44, 0x7f, 0x6a, 0xad, 0xb6, 0x32, 0x83, 0xfe, 0x2c, 0xb7, + 0xda, 0x4a, 0x09, 0xfd, 0x39, 0xd7, 0x6a, 0x2b, 0xb3, 0xe8, 0x4f, 0xa5, 0xdd, 0x56, 0x00, 0xfa, + 0x73, 0x77, 0xab, 0xad, 0xcc, 0xa1, 0x3f, 0xe5, 0x4a, 0x5b, 0x99, 0xc7, 0x7f, 0xf4, 0xb6, 0xb2, + 0x80, 0xfe, 0xb4, 0x5a, 0x6d, 0x65, 0x11, 0x53, 0x6e, 0xb5, 0x95, 0xe3, 0xb8, 0xac, 0x5a, 0x5b, + 0x51, 0xd0, 0x9f, 0xb5, 0x56, 0x5b, 0x39, 0x81, 0x33, 0xb7, 0xda, 0x8a, 0x8a, 0x0b, 0x6d, 0xb5, + 0x95, 0xab, 0x70, 0x9e, 0x56, 0x5b, 0x39, 0x89, 0x8b, 0x68, 0xb5, 0x95, 0xab, 0x31, 0x1b, 0x7a, + 0x5b, 0x39, 0x85, 0xf3, 0x18, 0x6d, 0xe5, 0x41, 0xf8, 0x55, 0xa3, 0xad, 0x9c, 0xc6, 0x8c, 0xe9, + 0x6d, 0xe5, 0x1a, 0xfc, 0xc7, 0x68, 0x2b, 0x1a, 0x7e, 0x55, 0x6e, 0x2b, 0xd7, 0x6a, 0x0f, 0x06, + 0xb3, 0xab, 0xd0, 0x27, 0x20, 0x6a, 0x0a, 0x90, 0x57, 0xa1, 0xcf, 0x4e, 0xc4, 0x5f, 0x99, 0x07, + 0x0f, 0xa2, 0x8b, 0x37, 0x2b, 0xae, 0xb3, 0x57, 0x87, 0x3b, 0x66, 0xe7, 0x8a, 0x7e, 0x3f, 0x32, + 0xf8, 0xb4, 0x17, 0xe6, 0xb8, 0x15, 0xed, 0x7e, 0xd4, 0x1b, 0xe1, 0xff, 0x89, 0x06, 0x72, 0xb0, + 0x46, 0x2d, 0xf3, 0x6b, 0xd4, 0x71, 0x26, 0x61, 0x5e, 0x64, 0x22, 0xf9, 0xf7, 0x6c, 0x63, 0xe0, + 0x36, 0xa4, 0x72, 0x03, 0x1b, 0x52, 0xa8, 0x85, 0xf5, 0xa1, 0xeb, 0x39, 0xb6, 0xd9, 0x6b, 0x51, + 0xf7, 0x23, 0x32, 0x57, 0x1d, 0x4c, 0x56, 0x9f, 0x1a, 0x34, 0x2a, 0x62, 0xf0, 0x3d, 0x31, 0x69, + 0x79, 0x6b, 0x50, 0x42, 0x31, 0xed, 0xeb, 0xb3, 0x61, 0xfb, 0x6a, 0x73, 0xed, 0xeb, 0x29, 0x87, + 0xa0, 0x9d, 0xae, 0xa9, 0xd5, 0xc6, 0x9b, 0x8a, 0x46, 0xce, 0xf9, 0xc1, 0xfe, 0x97, 0xac, 0x7d, + 0x41, 0x02, 0xa7, 0x74, 0x7b, 0xd8, 0x54, 0x86, 0x55, 0xa3, 0xb7, 0xb2, 0xd0, 0x6c, 0xf0, 0x22, + 0xbd, 0x63, 0x68, 0xb5, 0x87, 0xd3, 0x8c, 0x91, 0xe8, 0xef, 0x84, 0x12, 0x6d, 0x71, 0x12, 0xbd, + 0x6b, 0x7c, 0xd2, 0xe9, 0x04, 0xda, 0x98, 0x68, 0xdf, 0x95, 0xd7, 0xfe, 0x42, 0x02, 0x27, 0x88, + 0x07, 0xe1, 0xdd, 0x64, 0xe6, 0x84, 0x7b, 0x7b, 0xde, 0xfa, 0xea, 0x45, 0xb3, 0x2c, 0xa2, 0xdf, + 0x4c, 0x8a, 0xf6, 0x3a, 0x56, 0xe0, 0xf7, 0xf0, 0x02, 0x8f, 0xe9, 0xc7, 0x07, 0x8b, 0x8b, 0x91, + 0xf5, 0x6f, 0x86, 0xb2, 0x6e, 0x70, 0xb2, 0xbe, 0x63, 0x2c, 0xaa, 0x47, 0x2b, 0xe6, 0x6f, 0xe6, + 0xc1, 0x83, 0x09, 0x87, 0x54, 0x11, 0x48, 0x3f, 0x58, 0xb6, 0xbb, 0x06, 0xf4, 0x7c, 0xd3, 0xf5, + 0xb9, 0xf8, 0x42, 0x03, 0x53, 0xf3, 0x5c, 0x06, 0x53, 0x73, 0x69, 0xe4, 0xd4, 0x5c, 0x7b, 0x0f, + 0x6b, 0xe0, 0x9d, 0xe7, 0x91, 0x2d, 0x27, 0x60, 0x10, 0x53, 0xc3, 0xb8, 0x16, 0x15, 0x5a, 0x7e, + 0x3f, 0xcc, 0xa1, 0xbc, 0x72, 0xe8, 0x12, 0xd2, 0x21, 0xfe, 0x1b, 0x93, 0xb5, 0xc4, 0xf3, 0xec, + 0x3b, 0xde, 0x6c, 0x54, 0xba, 0x99, 0x4e, 0xa1, 0x5e, 0x5c, 0x02, 0xb3, 0xb8, 0xcb, 0xa9, 0x5b, + 0xf6, 0x45, 0xed, 0xcf, 0x65, 0x30, 0xdf, 0x80, 0x97, 0x2b, 0xbb, 0x66, 0xaf, 0x07, 0xed, 0x1d, + 0xa8, 0xdd, 0xc7, 0xd9, 0xf6, 0x66, 0xbf, 0xdf, 0x88, 0xf6, 0x87, 0x83, 0x47, 0xf5, 0x2e, 0x50, + 0xf0, 0x3a, 0x4e, 0x18, 0xe5, 0xe2, 0x07, 0x62, 0x56, 0xaf, 0xcb, 0xfb, 0xfe, 0xee, 0x12, 0x2e, + 0xab, 0xdc, 0xb7, 0x5a, 0xe8, 0x03, 0x83, 0x7c, 0x47, 0xc7, 0xc9, 0x6f, 0x0c, 0xed, 0x8c, 0x73, + 0x09, 0x9d, 0x71, 0xc8, 0xf8, 0x12, 0xcb, 0x74, 0xcc, 0x22, 0xc9, 0xf5, 0x60, 0xae, 0x13, 0x64, + 0x09, 0x4f, 0xe9, 0xb1, 0x49, 0xda, 0x5f, 0xa6, 0xea, 0xae, 0x85, 0x0a, 0x4f, 0xa7, 0x55, 0x70, + 0xc2, 0xa6, 0xe6, 0xd5, 0xe0, 0x44, 0xbb, 0xd9, 0xdc, 0x5a, 0x2f, 0x37, 0xee, 0x8d, 0x02, 0x08, + 0x6d, 0x6b, 0xaf, 0xc8, 0x83, 0xc5, 0x96, 0xd3, 0xbb, 0x04, 0x23, 0x9c, 0x6b, 0x9c, 0xfb, 0x27, + 0x2b, 0xa7, 0xdc, 0x01, 0x39, 0xa9, 0xa7, 0x40, 0xd1, 0xb4, 0xbd, 0xcb, 0x30, 0x30, 0xff, 0xe9, + 0x13, 0x85, 0xf1, 0xa3, 0x6c, 0x47, 0x60, 0xf0, 0x30, 0xde, 0x39, 0x42, 0x92, 0x3c, 0x57, 0x31, + 0x40, 0x9e, 0x05, 0xf3, 0x1e, 0xf1, 0x12, 0x69, 0x33, 0xce, 0x40, 0x5c, 0x1a, 0x66, 0x91, 0xb8, + 0x29, 0xc9, 0x94, 0x45, 0xfc, 0xa4, 0xbd, 0x36, 0xec, 0x3f, 0x36, 0x39, 0x88, 0xcb, 0x87, 0x61, + 0x2c, 0x1d, 0xc8, 0xaf, 0x9a, 0xf4, 0x24, 0xfe, 0x34, 0x38, 0x19, 0x9c, 0x50, 0xaf, 0xac, 0x95, + 0xeb, 0x75, 0xbd, 0xb1, 0xaa, 0x6f, 0xd5, 0xaa, 0x64, 0x3f, 0x39, 0x4a, 0x29, 0xb7, 0xdb, 0xfa, + 0xfa, 0x46, 0xbb, 0xb5, 0xa5, 0x3f, 0xad, 0xa2, 0xeb, 0x55, 0xec, 0x80, 0x8d, 0x4f, 0x50, 0x06, + 0xae, 0xf2, 0xe5, 0x46, 0xeb, 0xbc, 0x6e, 0x28, 0xbb, 0x67, 0xcb, 0x60, 0x8e, 0x19, 0x28, 0x10, + 0x77, 0x55, 0xb8, 0x6d, 0xee, 0xf7, 0xa8, 0x39, 0xae, 0x1c, 0x43, 0xdc, 0x61, 0xd9, 0x34, 0xed, + 0xde, 0x15, 0x25, 0xa7, 0x2a, 0x60, 0x9e, 0x1d, 0x13, 0x14, 0x49, 0xfb, 0xd6, 0x75, 0x60, 0xf6, + 0xbc, 0xe3, 0x5e, 0xc4, 0x5e, 0xc3, 0xda, 0x07, 0x48, 0xa0, 0xc1, 0x20, 0xaa, 0x05, 0x63, 0x80, + 0xbd, 0x4a, 0xdc, 0x4d, 0x2c, 0xa0, 0xb6, 0x34, 0x32, 0x72, 0xc5, 0xf5, 0x60, 0xee, 0x72, 0x90, + 0x3b, 0x6a, 0xe9, 0x4c, 0x92, 0xf6, 0xcb, 0x62, 0x8e, 0x5f, 0xa3, 0x8b, 0xcc, 0x7e, 0xd5, 0xff, + 0xed, 0x12, 0x28, 0xae, 0x42, 0xbf, 0xdc, 0xeb, 0xb1, 0x72, 0x7b, 0x99, 0xf0, 0x39, 0x52, 0xae, + 0x12, 0xe5, 0x5e, 0x2f, 0xbe, 0x51, 0x31, 0x02, 0x0a, 0xce, 0x3b, 0x71, 0x69, 0x82, 0x5e, 0xda, + 0x23, 0x0a, 0xcc, 0x5e, 0x62, 0x7f, 0x1b, 0xb9, 0x66, 0xbf, 0x9e, 0x31, 0x93, 0x1e, 0x13, 0x05, + 0x99, 0xcc, 0x25, 0x3b, 0x49, 0x05, 0xf9, 0xd4, 0x7b, 0xc0, 0xcc, 0xbe, 0x07, 0x2b, 0xa6, 0x17, + 0x0c, 0x6d, 0x7c, 0x4d, 0x9b, 0x17, 0xee, 0x83, 0x1d, 0x7f, 0xa9, 0xb6, 0x87, 0x26, 0x3e, 0x9b, + 0x24, 0x63, 0x18, 0xb7, 0x91, 0x3e, 0x1b, 0x01, 0x05, 0x34, 0xed, 0xbc, 0x6c, 0xf9, 0xbb, 0x95, + 0x5d, 0xd3, 0xa7, 0x9b, 0x2d, 0xe1, 0xb3, 0xf6, 0xa1, 0x31, 0xe0, 0x4c, 0x74, 0xd8, 0x89, 0x3f, + 0x8e, 0x7e, 0x33, 0x50, 0xb0, 0xf9, 0x63, 0xd9, 0x3b, 0x84, 0xff, 0x70, 0x8e, 0x79, 0x20, 0x3d, + 0x35, 0xe0, 0x13, 0xf0, 0xc8, 0x19, 0x07, 0xf0, 0x1f, 0x91, 0x41, 0xbe, 0xd9, 0x87, 0xb6, 0xf0, + 0x39, 0xcd, 0x10, 0x07, 0x69, 0x00, 0x87, 0xf7, 0x89, 0xbb, 0x10, 0x87, 0x95, 0x46, 0x25, 0xc7, + 0xa0, 0x70, 0x2b, 0xc8, 0x5b, 0xf6, 0xb6, 0x43, 0xad, 0xe0, 0x6b, 0x63, 0xec, 0xa2, 0x9a, 0xbd, + 0xed, 0x18, 0x38, 0xa3, 0xf6, 0x3e, 0x31, 0xef, 0xe1, 0xa4, 0xb2, 0xd3, 0x89, 0x7b, 0x65, 0x8c, + 0xb1, 0x48, 0x05, 0x8b, 0x91, 0x89, 0x5a, 0x6f, 0x96, 0xab, 0x4a, 0x57, 0xfb, 0x9b, 0x12, 0x28, + 0x12, 0xb5, 0xd1, 0x5e, 0x22, 0x03, 0xb9, 0xdc, 0xed, 0xc6, 0x80, 0x21, 0x1d, 0x00, 0xc3, 0x09, + 0xb4, 0x90, 0x7a, 0x7a, 0x07, 0xcf, 0x7c, 0x74, 0x42, 0xc1, 0xb1, 0x81, 0x36, 0xc9, 0x72, 0xb7, + 0x1b, 0x7f, 0xee, 0x21, 0x2c, 0x50, 0xe2, 0x0b, 0x64, 0x7b, 0x08, 0x59, 0xac, 0x87, 0x48, 0x3d, + 0x90, 0xc4, 0xf2, 0x97, 0x7d, 0x2b, 0xf9, 0x7b, 0x09, 0xcc, 0xd4, 0x2d, 0xcf, 0x47, 0xd8, 0x94, + 0x45, 0xb0, 0xb9, 0x0e, 0xcc, 0x06, 0xa2, 0x41, 0x5d, 0x26, 0x1a, 0x0f, 0xa2, 0x04, 0x7e, 0x26, + 0x7f, 0x37, 0x8f, 0xce, 0xe3, 0x92, 0x6b, 0x4f, 0xb9, 0x88, 0x3f, 0x13, 0x17, 0x15, 0x2b, 0x0d, + 0x16, 0xfb, 0x2b, 0xa1, 0xc0, 0xd7, 0x39, 0x81, 0xdf, 0x3e, 0x4e, 0x91, 0xd9, 0x0b, 0xfd, 0x0f, + 0x25, 0x00, 0x50, 0xd9, 0xf4, 0xe0, 0xf1, 0x23, 0xb8, 0x70, 0x22, 0x09, 0xd2, 0x7d, 0x05, 0x2b, + 0xdd, 0x75, 0x5e, 0xba, 0x3f, 0x34, 0xba, 0xaa, 0x49, 0x07, 0x8c, 0x55, 0x05, 0xc8, 0x56, 0x28, + 0x5a, 0xf4, 0x57, 0x7b, 0x7b, 0x28, 0xd4, 0x0d, 0x4e, 0xa8, 0x77, 0x8e, 0x59, 0x52, 0xf6, 0x72, + 0xfd, 0x63, 0x09, 0xcc, 0xb4, 0xa0, 0x8f, 0xba, 0x4e, 0xed, 0x9c, 0x48, 0xaf, 0xcf, 0xb4, 0x6d, + 0x49, 0xb0, 0x6d, 0x7f, 0x27, 0x27, 0x1a, 0xdc, 0x2e, 0x92, 0x0c, 0xe5, 0x29, 0x66, 0xf5, 0xe2, + 0xf5, 0x42, 0xc1, 0xed, 0x46, 0x51, 0xcb, 0x5e, 0xba, 0x6f, 0x95, 0x42, 0x4f, 0x13, 0xfe, 0x5c, + 0x20, 0x6b, 0x56, 0xe7, 0x0e, 0x9a, 0xd5, 0xe2, 0xe7, 0x02, 0xd9, 0x3a, 0xc6, 0x3b, 0x36, 0xa4, + 0x36, 0x40, 0x26, 0xe0, 0x73, 0x30, 0x8e, 0xbc, 0x9e, 0x2d, 0x83, 0x22, 0xdd, 0x7c, 0xb8, 0x2b, + 0x79, 0xef, 0x61, 0xf4, 0xd4, 0xe4, 0xfd, 0x63, 0x98, 0x82, 0x49, 0xcb, 0xfa, 0x21, 0x1b, 0x12, + 0xc3, 0xc6, 0x2d, 0xa0, 0x80, 0x43, 0xcb, 0xd3, 0x71, 0x2e, 0x72, 0x17, 0x09, 0x48, 0xe8, 0xe8, + 0xad, 0x41, 0x32, 0xa5, 0x46, 0x61, 0x02, 0x3b, 0x01, 0xe3, 0xa0, 0xf0, 0x4d, 0x15, 0x80, 0x8d, + 0xfd, 0x0b, 0x3d, 0xcb, 0xdb, 0xb5, 0x6c, 0xec, 0x63, 0x36, 0x4f, 0x1f, 0x49, 0x84, 0xf4, 0x44, + 0x93, 0x30, 0xd6, 0x28, 0x50, 0x80, 0xbc, 0xef, 0x5a, 0xd4, 0x44, 0x46, 0x7f, 0xd5, 0x27, 0x85, + 0xde, 0x9a, 0xf9, 0x81, 0xc0, 0x2f, 0x48, 0x0c, 0x11, 0x07, 0x4b, 0x4c, 0xe9, 0x91, 0xd7, 0x26, + 0x1b, 0x06, 0xbf, 0xc0, 0x87, 0xc1, 0xe7, 0x4e, 0x83, 0x17, 0x07, 0x4e, 0x83, 0x23, 0x1c, 0x3d, + 0xeb, 0x99, 0x10, 0xbb, 0x2e, 0xc9, 0x06, 0xfe, 0x8f, 0xbe, 0xc0, 0xee, 0x45, 0xd8, 0xbb, 0x8f, + 0x9c, 0x39, 0x88, 0x12, 0xd8, 0x3e, 0x6f, 0x56, 0xb0, 0xcf, 0xfb, 0x58, 0x34, 0x77, 0x72, 0x04, + 0x8d, 0xe9, 0x14, 0x92, 0xe3, 0xd8, 0xcd, 0x0f, 0xb0, 0xab, 0x7d, 0x52, 0x38, 0x98, 0x28, 0x23, + 0xe3, 0xc4, 0x59, 0x10, 0xe5, 0x40, 0x0a, 0x39, 0x60, 0xf6, 0x90, 0x93, 0x7a, 0xe0, 0x51, 0xf4, + 0xd3, 0xe9, 0xf2, 0xde, 0x78, 0x36, 0x76, 0x70, 0xac, 0xbe, 0xb9, 0x7c, 0xb7, 0x5e, 0x69, 0x2b, + 0xf0, 0xe0, 0x51, 0x7b, 0x7c, 0xa8, 0x9e, 0x1c, 0xa0, 0x8f, 0xd6, 0x74, 0xb4, 0xff, 0x21, 0x81, + 0x22, 0x35, 0x37, 0xee, 0x3a, 0x24, 0x84, 0xda, 0x2b, 0xc7, 0x81, 0x24, 0x31, 0xba, 0xc9, 0xe7, + 0xd2, 0x02, 0x30, 0x01, 0x03, 0xe3, 0xde, 0xcc, 0x00, 0xd0, 0xfe, 0x49, 0x02, 0x79, 0x64, 0x06, + 0x89, 0xc5, 0x8e, 0xf8, 0xac, 0xb0, 0x4b, 0x31, 0x23, 0x00, 0x44, 0x3e, 0x46, 0xbf, 0x97, 0xc1, + 0x6c, 0x9f, 0x64, 0x0c, 0x23, 0x97, 0xdc, 0x20, 0xd0, 0x19, 0x41, 0x23, 0xfa, 0x8c, 0x99, 0x72, + 0x26, 0xb9, 0x25, 0x27, 0xf3, 0x93, 0x0e, 0x0e, 0x7d, 0x12, 0x61, 0x26, 0xb6, 0xb5, 0x7f, 0x95, + 0x00, 0x30, 0xa0, 0xe7, 0xf4, 0x2e, 0xc1, 0x4d, 0xd7, 0xd2, 0xae, 0x8d, 0x00, 0xa0, 0xcd, 0x3e, + 0x17, 0x35, 0xfb, 0xcf, 0x4b, 0xa2, 0xce, 0xc3, 0x9c, 0xe6, 0x05, 0xc4, 0x63, 0xc4, 0xff, 0x64, + 0x30, 0x43, 0xe5, 0x48, 0x6d, 0x4a, 0x31, 0xe1, 0x07, 0x1f, 0x69, 0x1f, 0x14, 0x72, 0x3e, 0x16, + 0xe1, 0x28, 0x1d, 0x00, 0x95, 0x31, 0x00, 0x38, 0x0e, 0xe6, 0x02, 0x00, 0x36, 0x8d, 0x9a, 0x02, + 0xb5, 0x77, 0xcb, 0xd8, 0x43, 0x83, 0x0c, 0x6e, 0x87, 0xef, 0x69, 0xfe, 0x42, 0x78, 0xb2, 0xcf, + 0xc8, 0x23, 0x2c, 0x3f, 0x23, 0x80, 0x7e, 0x57, 0x68, 0x76, 0x2f, 0xc0, 0xd0, 0x03, 0xa5, 0xbf, + 0x3a, 0xab, 0x83, 0x05, 0xce, 0x2a, 0x51, 0x4f, 0x83, 0x93, 0x5c, 0x02, 0x19, 0xef, 0xba, 0xca, + 0x31, 0x55, 0x03, 0xa7, 0xb8, 0x37, 0xf4, 0x01, 0x76, 0x95, 0x9c, 0xf6, 0xae, 0x3f, 0xc9, 0x85, + 0xeb, 0x3d, 0xef, 0xcf, 0xd3, 0xd5, 0xb7, 0x4f, 0xf3, 0xc1, 0x32, 0x3b, 0x8e, 0xed, 0xc3, 0xfb, + 0x19, 0x37, 0x97, 0x30, 0x21, 0xd1, 0x6a, 0x38, 0x0d, 0x66, 0x7c, 0x97, 0x75, 0x7d, 0x09, 0x1e, + 0x59, 0xc5, 0x2a, 0xf0, 0x8a, 0xd5, 0x00, 0x67, 0x2d, 0xbb, 0xd3, 0xdb, 0xef, 0x42, 0x03, 0xf6, + 0x4c, 0x24, 0x43, 0xaf, 0xec, 0x55, 0x61, 0x1f, 0xda, 0x5d, 0x68, 0xfb, 0x84, 0xcf, 0xe0, 0xdc, + 0xac, 0x40, 0x4e, 0x5e, 0x19, 0x9f, 0xc4, 0x2b, 0xe3, 0x23, 0x86, 0x2d, 0x01, 0x27, 0xac, 0x01, + 0xde, 0x0e, 0x00, 0xa9, 0xdb, 0x39, 0x0b, 0x5e, 0xa6, 0x6a, 0x38, 0x18, 0x02, 0xbb, 0x19, 0x66, + 0x30, 0x98, 0xcc, 0xda, 0x57, 0x43, 0xf5, 0x7b, 0x0a, 0xa7, 0x7e, 0xb7, 0x08, 0xb2, 0x90, 0x4e, + 0xeb, 0xfa, 0x63, 0x68, 0xdd, 0x02, 0x98, 0x8d, 0x76, 0xa3, 0x65, 0xf5, 0x1a, 0x70, 0x75, 0xe0, + 0xa1, 0xdc, 0xd0, 0xf5, 0x6a, 0x6b, 0x6b, 0x73, 0x63, 0xd5, 0x28, 0x57, 0x75, 0x05, 0x20, 0xfd, + 0x24, 0x7a, 0x19, 0x3a, 0x16, 0xe7, 0xb5, 0x3f, 0x92, 0x40, 0x01, 0x1f, 0xfa, 0xd6, 0x9e, 0x3e, + 0x21, 0xcd, 0xf1, 0x38, 0xa7, 0xa9, 0x70, 0xdc, 0x15, 0xbf, 0xe7, 0x87, 0x0a, 0x13, 0x73, 0x75, + 0xa8, 0x7b, 0x7e, 0x12, 0x08, 0x65, 0x3f, 0x13, 0x42, 0x4d, 0xb2, 0xb5, 0xeb, 0x5c, 0xfe, 0x8f, + 0xdc, 0x24, 0x51, 0xfd, 0x8f, 0xb8, 0x49, 0x0e, 0x61, 0x61, 0xea, 0x4d, 0x72, 0x48, 0xbb, 0x4b, + 0x68, 0xa6, 0xda, 0x47, 0x0b, 0xe1, 0xfc, 0xef, 0x53, 0xd2, 0xa1, 0xf6, 0xce, 0xca, 0x60, 0xc1, + 0xb2, 0x7d, 0xe8, 0xda, 0x66, 0x6f, 0xa5, 0x67, 0xee, 0x04, 0xf6, 0xe9, 0xb5, 0x07, 0xa2, 0xff, + 0x47, 0x79, 0x0c, 0xfe, 0x0b, 0xf5, 0x0c, 0x00, 0x3e, 0xdc, 0xeb, 0xf7, 0x4c, 0x3f, 0x52, 0x3d, + 0x26, 0x85, 0xd5, 0xbe, 0x3c, 0xaf, 0x7d, 0x8f, 0x06, 0x57, 0x11, 0xd0, 0xda, 0x57, 0xfa, 0x70, + 0xd3, 0xb6, 0x9e, 0xb1, 0x8f, 0x63, 0x2b, 0x13, 0x1d, 0x1d, 0xf6, 0x8a, 0xdb, 0x15, 0x2a, 0xf2, + 0xbb, 0x42, 0xea, 0x9d, 0xe0, 0x1a, 0x1c, 0x36, 0x1b, 0x5f, 0x4c, 0x70, 0xde, 0xea, 0xee, 0x40, + 0xbf, 0xb6, 0xbd, 0x6e, 0x79, 0x9e, 0x65, 0xef, 0xe0, 0xe9, 0x78, 0xc9, 0x88, 0xcf, 0xa0, 0xfd, + 0x2f, 0xe1, 0xb8, 0x4d, 0x41, 0x9f, 0x31, 0x22, 0x6e, 0x93, 0xc3, 0x6f, 0xdb, 0x45, 0xed, 0x34, + 0x5c, 0xd5, 0xc9, 0x0b, 0xac, 0xea, 0xb0, 0x98, 0x16, 0x04, 0x57, 0x07, 0x5e, 0x23, 0x14, 0x18, + 0x2a, 0xa9, 0x1a, 0xd9, 0xf7, 0x7d, 0xdf, 0x96, 0xc1, 0x22, 0x29, 0x7a, 0xd9, 0x71, 0x2e, 0xee, + 0x99, 0xee, 0x45, 0xed, 0xa7, 0x0f, 0xb7, 0x0b, 0x9c, 0xb8, 0x7b, 0x15, 0xb7, 0xa5, 0x3b, 0xa0, + 0xbc, 0xf9, 0x41, 0xe5, 0xd5, 0x7e, 0x47, 0x78, 0x4a, 0xc2, 0xc9, 0x33, 0xa8, 0xd4, 0x74, 0xb6, + 0xb7, 0xc4, 0x8e, 0x47, 0x8a, 0x30, 0x98, 0x3d, 0xf0, 0xbf, 0x15, 0x02, 0x1f, 0x8c, 0x23, 0xec, + 0xce, 0xc0, 0x24, 0x71, 0xd7, 0xbe, 0x36, 0x1e, 0x76, 0x01, 0x5f, 0x63, 0x60, 0xa7, 0x00, 0xf9, + 0x62, 0xe8, 0xcc, 0x84, 0xfe, 0xb2, 0x15, 0xca, 0x67, 0x87, 0x66, 0x0c, 0xcb, 0x53, 0x41, 0xf3, + 0x24, 0xcf, 0x42, 0xb3, 0x9f, 0x29, 0xa6, 0x5f, 0x11, 0xde, 0x71, 0x1b, 0x2a, 0x20, 0xc2, 0xdd, + 0x74, 0x5a, 0xa5, 0xd8, 0x76, 0x9d, 0x38, 0x9b, 0xd9, 0xa3, 0xf9, 0xc2, 0x02, 0x98, 0x0d, 0xe2, + 0x67, 0xe1, 0x6b, 0x37, 0x43, 0x0c, 0x4f, 0x81, 0xa2, 0xe7, 0xec, 0xbb, 0x1d, 0x48, 0xf7, 0x40, + 0xe9, 0xd3, 0x18, 0xfb, 0x75, 0x23, 0xcd, 0x85, 0x03, 0x16, 0x49, 0x3e, 0xb5, 0x45, 0x12, 0x6f, + 0xef, 0x26, 0xd8, 0x0f, 0xda, 0x8b, 0x84, 0xaf, 0x0d, 0xe1, 0x30, 0x6b, 0x41, 0xff, 0x81, 0x68, + 0x04, 0xfc, 0xba, 0xd0, 0x6e, 0xd0, 0x88, 0x9a, 0xa4, 0x53, 0xb9, 0xe6, 0x18, 0x76, 0xf0, 0xb5, + 0xe0, 0x41, 0x41, 0x0e, 0x6a, 0x00, 0x63, 0x83, 0x77, 0xd3, 0xa8, 0x2b, 0xb2, 0xf6, 0xec, 0x3c, + 0x50, 0x08, 0x6b, 0xcd, 0xd0, 0x16, 0xd4, 0x5e, 0x96, 0x3b, 0x6a, 0x83, 0x37, 0x7e, 0x06, 0xcb, + 0xdd, 0xed, 0x98, 0x18, 0x6c, 0x9c, 0x13, 0x7c, 0x54, 0xbb, 0x18, 0x4d, 0x1a, 0xa3, 0x99, 0x25, + 0x28, 0x9f, 0xf6, 0x96, 0x9c, 0x48, 0xec, 0x72, 0x31, 0x16, 0xb3, 0xef, 0x95, 0xbe, 0x93, 0x0f, + 0xc2, 0x20, 0xae, 0xb8, 0xce, 0xde, 0xa6, 0xdb, 0xd3, 0xfe, 0x8f, 0xd0, 0xd5, 0x10, 0x31, 0xb3, + 0x0b, 0x29, 0x7e, 0x76, 0x81, 0x57, 0xa4, 0x7b, 0xd1, 0x56, 0x58, 0x6f, 0x8c, 0xe1, 0x5b, 0xbd, + 0x11, 0x2c, 0x9a, 0xdd, 0xee, 0x86, 0xb9, 0x03, 0x2b, 0x68, 0xda, 0x6e, 0xfb, 0x34, 0x44, 0xda, + 0x40, 0x6a, 0xe2, 0x54, 0x86, 0xef, 0x23, 0x67, 0x0e, 0x58, 0xa5, 0xe2, 0xcb, 0xb0, 0x1c, 0x88, + 0x54, 0x7e, 0x53, 0x19, 0xfe, 0xd0, 0x90, 0xd1, 0xd9, 0x35, 0xa3, 0x80, 0x8e, 0xf4, 0x49, 0xd0, + 0x17, 0x4b, 0x80, 0xef, 0xec, 0x35, 0xef, 0xd7, 0x24, 0x30, 0x83, 0xf0, 0x28, 0x77, 0xbb, 0xda, + 0xc3, 0xb9, 0xb8, 0xa7, 0xb1, 0xde, 0x70, 0xcf, 0x17, 0x76, 0x4d, 0x0c, 0x6a, 0x48, 0xe8, 0xc7, + 0x60, 0x12, 0x09, 0x51, 0xe2, 0x84, 0x28, 0x16, 0xbf, 0x34, 0xb1, 0x88, 0xec, 0xc5, 0xf7, 0x59, + 0x09, 0x2c, 0x04, 0xf3, 0x8c, 0x15, 0xe8, 0x77, 0x76, 0xb5, 0xdb, 0x45, 0xd7, 0xb9, 0x68, 0x4b, + 0x0c, 0xb7, 0x84, 0x7b, 0xda, 0xf7, 0x72, 0x29, 0x55, 0x9e, 0x2b, 0x39, 0x66, 0x91, 0x30, 0x95, + 0x2e, 0x26, 0x11, 0xcc, 0x5e, 0x98, 0x5f, 0x95, 0x00, 0x68, 0x3b, 0xe1, 0x64, 0xf9, 0x10, 0x92, + 0xfc, 0x19, 0xe1, 0xdd, 0x62, 0x5a, 0xf1, 0xa8, 0xd8, 0xf4, 0x3d, 0x87, 0xa0, 0x33, 0xd5, 0xa8, + 0x92, 0xa6, 0xd2, 0xd6, 0x67, 0xab, 0xfb, 0xfd, 0x9e, 0xd5, 0x31, 0xfd, 0x41, 0x0f, 0xc0, 0x78, + 0xf1, 0xe2, 0x3b, 0xeb, 0x53, 0x19, 0x8d, 0x61, 0x19, 0x31, 0xb2, 0x24, 0x71, 0x82, 0xa4, 0x20, + 0x4e, 0x90, 0xa0, 0x57, 0xcf, 0x08, 0xe2, 0x53, 0x50, 0x4f, 0x19, 0x1c, 0x6f, 0xf6, 0xa1, 0xbd, + 0xec, 0x42, 0xb3, 0xdb, 0x71, 0xf7, 0xf7, 0x2e, 0x78, 0xac, 0xfb, 0x6a, 0xb2, 0x8e, 0x32, 0x2b, + 0xd7, 0x12, 0xb7, 0x72, 0xad, 0xfd, 0x98, 0xf0, 0xa5, 0xa9, 0xcc, 0xfe, 0x0a, 0xc3, 0xc3, 0x18, + 0x43, 0x5d, 0x2a, 0xa7, 0xab, 0x81, 0x45, 0xea, 0x7c, 0x9a, 0x45, 0xea, 0x37, 0x0b, 0xc5, 0x85, + 0x13, 0xaa, 0xd7, 0x54, 0x7c, 0xe7, 0x16, 0x5b, 0xd0, 0x8f, 0x81, 0xf7, 0x06, 0xb0, 0x70, 0x21, + 0x7a, 0x13, 0x42, 0xcc, 0x27, 0x0e, 0xf1, 0x68, 0x7d, 0x6b, 0xda, 0x15, 0x1a, 0x9e, 0x85, 0x18, + 0x74, 0x43, 0x04, 0x25, 0x11, 0xb7, 0xb9, 0x54, 0xcb, 0x2d, 0x89, 0xe5, 0x67, 0x8f, 0xc2, 0x27, + 0x25, 0x30, 0x87, 0x6f, 0xe2, 0x5f, 0xbe, 0x82, 0x0f, 0x82, 0x0a, 0x1a, 0x25, 0x2f, 0x64, 0xc5, + 0xac, 0x82, 0x7c, 0xcf, 0xb2, 0x2f, 0x06, 0xfe, 0x8e, 0xe8, 0x7f, 0x74, 0xc5, 0xa9, 0x34, 0xe4, + 0x8a, 0xd3, 0x70, 0x9b, 0x24, 0x2c, 0x37, 0x66, 0x34, 0x7d, 0x83, 0xd0, 0x35, 0xf4, 0x23, 0xc9, + 0x65, 0x2f, 0xc6, 0xbf, 0xca, 0x83, 0x62, 0x0b, 0x9a, 0x6e, 0x67, 0x57, 0x7b, 0xbf, 0x34, 0x74, + 0x2a, 0x51, 0xe2, 0xa7, 0x12, 0x2b, 0x60, 0x66, 0xdb, 0xea, 0xf9, 0xd0, 0x25, 0x3e, 0xe0, 0x6c, + 0xd7, 0x4e, 0x9a, 0xf8, 0x72, 0xcf, 0xe9, 0x5c, 0x5c, 0xa2, 0xa6, 0xfd, 0x52, 0x10, 0x6f, 0x7a, + 0x69, 0x05, 0x7f, 0x64, 0x04, 0x1f, 0x23, 0x83, 0xd0, 0x73, 0x5c, 0x3f, 0xee, 0xfe, 0xa2, 0x18, + 0x2a, 0x2d, 0xc7, 0xf5, 0x0d, 0xf2, 0x21, 0x82, 0x79, 0x7b, 0xbf, 0xd7, 0x6b, 0xc3, 0xfb, 0xfd, + 0x60, 0x5a, 0x17, 0x3c, 0x23, 0x63, 0xd1, 0xd9, 0xde, 0xf6, 0x20, 0x59, 0x54, 0x28, 0x18, 0xf4, + 0x49, 0x3d, 0x09, 0x0a, 0x3d, 0x6b, 0xcf, 0x22, 0x13, 0x91, 0x82, 0x41, 0x1e, 0xd4, 0x9b, 0x81, + 0x12, 0xcd, 0x81, 0x08, 0xa3, 0xa7, 0x8b, 0xb8, 0x69, 0x1e, 0x48, 0x47, 0x3a, 0x73, 0x11, 0x5e, + 0xf1, 0x4e, 0xcf, 0xe0, 0xf7, 0xf8, 0xbf, 0xf6, 0xda, 0xb4, 0x1b, 0x26, 0x44, 0xe2, 0xf1, 0x33, + 0x5c, 0x17, 0x76, 0x1c, 0xb7, 0x1b, 0xc8, 0x26, 0x7e, 0x82, 0x41, 0xf3, 0xa5, 0xdb, 0xe6, 0x18, + 0x5a, 0x78, 0xf6, 0x9a, 0xf6, 0x9e, 0x22, 0xea, 0x36, 0x51, 0xd1, 0xe7, 0x2d, 0x7f, 0x77, 0x1d, + 0xfa, 0xa6, 0xf6, 0x57, 0xf2, 0x50, 0x8d, 0x9b, 0xfb, 0xff, 0x35, 0x6e, 0x84, 0xc6, 0x91, 0x98, + 0x61, 0xfe, 0xbe, 0x6b, 0x23, 0x39, 0x52, 0x3f, 0x5a, 0x26, 0x45, 0xbd, 0x13, 0x5c, 0x13, 0x3d, + 0x05, 0x4b, 0xa9, 0x55, 0xc6, 0xb5, 0xb6, 0x64, 0xc4, 0x67, 0x50, 0x37, 0xc0, 0xc3, 0xc8, 0xcb, + 0xb5, 0xf6, 0x7a, 0x7d, 0xcd, 0xda, 0xd9, 0xed, 0x59, 0x3b, 0xbb, 0xbe, 0x57, 0xb3, 0x3d, 0x1f, + 0x9a, 0xdd, 0xe6, 0xb6, 0x41, 0x6e, 0x1e, 0x03, 0x98, 0x8e, 0x48, 0x56, 0xde, 0x47, 0x5c, 0x6c, + 0x74, 0x63, 0x35, 0x25, 0xa6, 0xa5, 0x3c, 0x1e, 0xb5, 0x14, 0x6f, 0xbf, 0x17, 0x62, 0x7a, 0xdd, + 0x00, 0xa6, 0x91, 0xaa, 0xef, 0xf7, 0x70, 0x73, 0xc1, 0x99, 0xd3, 0x8e, 0x73, 0x09, 0x9c, 0x64, + 0xdf, 0x6c, 0xfe, 0x4f, 0x11, 0x14, 0x56, 0x5d, 0xb3, 0xbf, 0xab, 0x3d, 0x9b, 0xe9, 0x9f, 0x27, + 0xd5, 0x26, 0x42, 0xed, 0x94, 0x46, 0x69, 0xa7, 0x3c, 0x42, 0x3b, 0xf3, 0x8c, 0x76, 0xc6, 0x2f, + 0x3a, 0x9f, 0x05, 0xf3, 0x1d, 0xa7, 0xd7, 0x83, 0x1d, 0x24, 0x8f, 0x5a, 0x17, 0xaf, 0xf6, 0xcc, + 0x1a, 0x5c, 0x1a, 0x8e, 0xc9, 0x0f, 0xfd, 0x16, 0x59, 0x63, 0x27, 0x4a, 0x1f, 0x25, 0x68, 0x2f, + 0x93, 0x40, 0x5e, 0xef, 0xee, 0x40, 0x6e, 0x1d, 0x3e, 0xc7, 0xac, 0xc3, 0x9f, 0x02, 0x45, 0xdf, + 0x74, 0x77, 0xa0, 0x1f, 0xac, 0x13, 0x90, 0xa7, 0xf0, 0xaa, 0x00, 0x99, 0xb9, 0x2a, 0xe0, 0x87, + 0x40, 0xde, 0x8f, 0xee, 0xf9, 0x7f, 0xd8, 0x30, 0xf8, 0xb1, 0xec, 0x97, 0x50, 0x89, 0x4b, 0xf8, + 0xc6, 0x7f, 0xfc, 0xc1, 0x20, 0xd6, 0x85, 0x83, 0xa1, 0x6c, 0xaf, 0x03, 0xb3, 0x56, 0xc7, 0xb1, + 0x6b, 0x7b, 0xe6, 0x0e, 0xa4, 0xd5, 0x8c, 0x12, 0x82, 0xb7, 0xfa, 0x9e, 0x73, 0x9f, 0x45, 0x17, + 0xb5, 0xa2, 0x04, 0x54, 0x85, 0x5d, 0xab, 0xdb, 0x85, 0x36, 0x6d, 0xd9, 0xf4, 0xe9, 0xec, 0x19, + 0x90, 0x47, 0x3c, 0x20, 0xfd, 0x41, 0xc6, 0x82, 0x72, 0x4c, 0x9d, 0x47, 0xcd, 0x8a, 0x34, 0x5e, + 0x25, 0xc7, 0xaf, 0xb9, 0x8a, 0x78, 0x0d, 0x91, 0xca, 0x0d, 0x6f, 0x5c, 0x8f, 0x02, 0x05, 0xdb, + 0xe9, 0xc2, 0x91, 0x83, 0x10, 0xc9, 0xa5, 0x3e, 0x0e, 0x14, 0x60, 0x17, 0xf5, 0x0a, 0x32, 0xce, + 0x7e, 0x26, 0x59, 0x96, 0x06, 0xc9, 0x9c, 0xce, 0x35, 0x69, 0x18, 0xb7, 0xd9, 0x37, 0xc0, 0x9f, + 0x98, 0x01, 0xc7, 0x49, 0x1f, 0xd0, 0xda, 0xbf, 0x80, 0x48, 0x5d, 0x80, 0xda, 0xeb, 0x87, 0x0f, + 0x5c, 0xc7, 0x79, 0x65, 0x3f, 0x09, 0x0a, 0xde, 0xfe, 0x85, 0xd0, 0x08, 0x25, 0x0f, 0x6c, 0xd3, + 0x95, 0x26, 0x32, 0x9c, 0xc9, 0xe3, 0x0e, 0x67, 0xdc, 0xd0, 0x24, 0x07, 0x8d, 0x3f, 0x1a, 0xc8, + 0xc8, 0x81, 0x8e, 0x60, 0x20, 0x1b, 0x36, 0x0c, 0x9d, 0x06, 0x33, 0xe6, 0xb6, 0x0f, 0xdd, 0xc8, + 0x4c, 0xa4, 0x8f, 0x68, 0xa8, 0xbc, 0x00, 0xb7, 0x1d, 0x17, 0x89, 0x85, 0x84, 0x95, 0x0d, 0x9f, + 0x99, 0x96, 0x0b, 0xb8, 0x1d, 0xb4, 0x5b, 0xc0, 0x09, 0xdb, 0xa9, 0xc2, 0x3e, 0x95, 0x33, 0x41, + 0x71, 0x81, 0xdc, 0xee, 0x7e, 0xe0, 0xc5, 0x81, 0xae, 0x64, 0xf1, 0x60, 0x57, 0xa2, 0x7d, 0x3e, + 0xed, 0x9c, 0x79, 0x00, 0xe8, 0x89, 0x59, 0x68, 0xea, 0x13, 0xc1, 0x7c, 0x97, 0x7a, 0x88, 0x75, + 0xac, 0xb0, 0x95, 0xc4, 0x7e, 0xc7, 0x65, 0x8e, 0x14, 0x29, 0xcf, 0x2a, 0xd2, 0x2a, 0x28, 0xe1, + 0xe3, 0xd8, 0x48, 0x93, 0x0a, 0x03, 0x1e, 0xf9, 0x78, 0x5a, 0x17, 0x56, 0x8a, 0x11, 0xdb, 0x52, + 0x85, 0x7e, 0x62, 0x84, 0x1f, 0xa7, 0x9b, 0x7d, 0x27, 0x4b, 0x28, 0xfb, 0xe6, 0xf8, 0x2b, 0x45, + 0x70, 0x4d, 0xc5, 0x75, 0x3c, 0x0f, 0x1f, 0xc1, 0x19, 0x6c, 0x98, 0x6f, 0x94, 0xb8, 0x4b, 0x83, + 0x1e, 0xd0, 0xcd, 0x6f, 0x58, 0x83, 0x9a, 0x5e, 0xd3, 0xf8, 0x0b, 0xe1, 0xa0, 0x37, 0xe1, 0xfe, + 0x43, 0x8c, 0xd0, 0xff, 0x63, 0x34, 0x92, 0xf7, 0xe4, 0x44, 0xe2, 0xf0, 0xa4, 0x94, 0x55, 0xf6, + 0xcd, 0xe5, 0x2b, 0x12, 0xb8, 0x76, 0x90, 0x9b, 0x4d, 0xdb, 0x0b, 0x1b, 0xcc, 0x43, 0x46, 0xb4, + 0x17, 0x3e, 0x6e, 0x4b, 0xe2, 0x1d, 0xc1, 0x31, 0x75, 0x67, 0x4a, 0x8b, 0x59, 0x2c, 0x89, 0x0e, + 0xf4, 0x24, 0xdd, 0x11, 0x9c, 0x9a, 0x7c, 0xf6, 0xc2, 0xfd, 0xfd, 0x3c, 0x38, 0xbe, 0xea, 0x3a, + 0xfb, 0x7d, 0x2f, 0xea, 0x81, 0xfe, 0x74, 0xf8, 0x86, 0x6c, 0x51, 0xc4, 0x34, 0xb8, 0x1e, 0xcc, + 0xb9, 0xd4, 0x9a, 0x8b, 0xb6, 0x67, 0xd9, 0x24, 0xb6, 0xf7, 0x92, 0x0f, 0xd3, 0x7b, 0x45, 0xfd, + 0x4c, 0x9e, 0xeb, 0x67, 0x06, 0x7b, 0x8e, 0xc2, 0x90, 0x9e, 0xe3, 0x4f, 0xa4, 0x94, 0x83, 0xea, + 0x80, 0x88, 0x62, 0xfa, 0x8b, 0x0a, 0x28, 0xee, 0xe0, 0x8c, 0xb4, 0xbb, 0x78, 0xa4, 0x58, 0xcd, + 0x30, 0x71, 0x83, 0x7e, 0x1a, 0xc9, 0x55, 0x66, 0x75, 0x38, 0xd5, 0x00, 0x97, 0xcc, 0x6d, 0xf6, + 0x4a, 0xf5, 0xda, 0x3c, 0x98, 0x0f, 0x4b, 0xaf, 0x75, 0x3d, 0x2e, 0x3a, 0x2c, 0xa3, 0x51, 0x0b, + 0x22, 0x1a, 0x75, 0x60, 0x9d, 0x39, 0x1c, 0x75, 0x64, 0x66, 0xd4, 0x19, 0x3a, 0xba, 0xcc, 0xc7, + 0x8c, 0x2e, 0xda, 0xb3, 0x64, 0xd1, 0x6b, 0xf7, 0xf8, 0xae, 0x15, 0xd7, 0xe6, 0x81, 0x3c, 0x58, + 0x08, 0x5e, 0xfe, 0x37, 0xba, 0x56, 0xd9, 0x2b, 0xc9, 0x47, 0x24, 0x70, 0xe2, 0x60, 0x67, 0xfe, + 0x50, 0xde, 0x4b, 0x0d, 0xd5, 0xc9, 0x0b, 0xbd, 0xd4, 0xf0, 0x13, 0xbf, 0x49, 0x97, 0x18, 0x04, + 0x85, 0xb3, 0xf7, 0x46, 0x77, 0xe2, 0x62, 0x61, 0x4e, 0x04, 0x89, 0x66, 0x2f, 0xc0, 0x9f, 0x95, + 0xc1, 0x6c, 0x0b, 0xfa, 0x75, 0xf3, 0x8a, 0xb3, 0xef, 0x6b, 0xa6, 0xe8, 0xf6, 0xdc, 0x13, 0x40, + 0xb1, 0x87, 0x3f, 0xc1, 0x1d, 0x0c, 0x1b, 0xb4, 0x94, 0xdd, 0xdf, 0xc2, 0xbe, 0x41, 0x84, 0xb4, + 0x41, 0xf3, 0xf3, 0xd1, 0x67, 0x44, 0x76, 0x47, 0x43, 0xee, 0x26, 0xb2, 0xb5, 0x93, 0x6a, 0xef, + 0x34, 0xae, 0xe8, 0xec, 0x61, 0xf9, 0x31, 0x19, 0x2c, 0xb4, 0xa0, 0x5f, 0xf3, 0x56, 0xcc, 0x4b, + 0x8e, 0x6b, 0xf9, 0x50, 0x5b, 0x15, 0x85, 0xe6, 0x0c, 0x00, 0x56, 0xf8, 0x19, 0x8d, 0x93, 0xc5, + 0xa4, 0x68, 0x6f, 0x49, 0xeb, 0x28, 0xc4, 0xf1, 0x31, 0x11, 0x10, 0x52, 0xf9, 0x58, 0x24, 0x15, + 0x3f, 0x85, 0x8b, 0xc3, 0x25, 0x0a, 0x44, 0xd9, 0xed, 0xec, 0x5a, 0x97, 0x60, 0x37, 0x25, 0x10, + 0xc1, 0x67, 0x11, 0x10, 0x21, 0xa1, 0xd4, 0xee, 0x2b, 0x1c, 0x1f, 0x93, 0x70, 0x5f, 0x49, 0x22, + 0x38, 0x95, 0xb0, 0x56, 0xa8, 0xeb, 0xa1, 0xeb, 0x99, 0x77, 0x89, 0x8a, 0x35, 0x32, 0xd9, 0x24, + 0xd6, 0x64, 0x1b, 0xab, 0x63, 0x21, 0x65, 0x8f, 0xd2, 0xe9, 0x7c, 0x16, 0x1d, 0xcb, 0xd0, 0xa2, + 0xb3, 0x17, 0xfa, 0xfb, 0x64, 0x70, 0x75, 0x18, 0xef, 0xa5, 0x05, 0xfd, 0xaa, 0xe9, 0xed, 0x5e, + 0x70, 0x4c, 0xb7, 0xab, 0x55, 0x26, 0x70, 0xe0, 0x50, 0xfb, 0x22, 0x0b, 0x42, 0x83, 0x07, 0x61, + 0xa8, 0x2b, 0xe9, 0x50, 0x5e, 0x26, 0xd1, 0xc9, 0x24, 0x7a, 0xbb, 0xbe, 0x23, 0x04, 0xeb, 0xa9, + 0x1c, 0x58, 0x4f, 0x1a, 0x97, 0xc5, 0xec, 0x81, 0xfb, 0x79, 0x32, 0x22, 0x30, 0x5e, 0xcf, 0xf7, + 0x8a, 0x02, 0x16, 0xe3, 0xf5, 0x2a, 0xc7, 0x7a, 0xbd, 0x8e, 0x35, 0x46, 0x8c, 0xf4, 0x58, 0xce, + 0x76, 0x8c, 0x38, 0x42, 0x6f, 0xe4, 0x77, 0xc9, 0x40, 0xc1, 0x01, 0xbf, 0x18, 0x8f, 0x70, 0x36, + 0xfe, 0x76, 0x32, 0x3a, 0x07, 0xbc, 0xcf, 0x67, 0xd2, 0x7a, 0x9f, 0x6b, 0xef, 0x4c, 0xeb, 0x63, + 0x3e, 0xc8, 0xed, 0x44, 0x10, 0x4b, 0xe5, 0x42, 0x3e, 0x82, 0x83, 0xec, 0x41, 0xfb, 0x49, 0x19, + 0x00, 0xd4, 0xa0, 0xe9, 0xd9, 0x88, 0xa7, 0x89, 0xc2, 0x75, 0x2b, 0xeb, 0x77, 0x8f, 0x80, 0xba, + 0x7a, 0x00, 0x28, 0x42, 0x31, 0x3a, 0x75, 0xf1, 0xfa, 0xb4, 0xbe, 0x95, 0x11, 0x57, 0x13, 0x81, + 0x25, 0x95, 0xb7, 0x65, 0x6c, 0xd9, 0xd9, 0x03, 0xf2, 0xab, 0x12, 0x28, 0xb4, 0x9d, 0x16, 0xf4, + 0x0f, 0x6f, 0x0a, 0xa4, 0x8e, 0x1a, 0x80, 0xcb, 0x9d, 0x44, 0xd4, 0x80, 0x61, 0x84, 0xb2, 0x17, + 0xdd, 0x7b, 0x25, 0x30, 0xdf, 0x76, 0x2a, 0xe1, 0xe2, 0x94, 0xb8, 0xaf, 0xea, 0xbf, 0xe4, 0x52, + 0xae, 0x61, 0xb0, 0xc5, 0xc4, 0x08, 0x2c, 0xd5, 0xea, 0x41, 0x02, 0xbd, 0xec, 0xe5, 0x76, 0x3b, + 0x38, 0xbe, 0x69, 0x77, 0x1d, 0x03, 0x76, 0x1d, 0xba, 0xd2, 0xad, 0xaa, 0x20, 0xbf, 0x6f, 0x77, + 0x1d, 0xcc, 0x72, 0xc1, 0xc0, 0xff, 0x51, 0x9a, 0x0b, 0xbb, 0x0e, 0xf5, 0x0d, 0xc0, 0xff, 0xb5, + 0xbf, 0x90, 0x41, 0x1e, 0x7d, 0x2b, 0x2e, 0xea, 0x77, 0xc9, 0x29, 0xe3, 0x20, 0x20, 0xf2, 0x13, + 0xb1, 0x84, 0xee, 0x62, 0xd6, 0xfe, 0x89, 0x07, 0xeb, 0xc3, 0xe2, 0xca, 0x63, 0x44, 0x11, 0xad, + 0xf9, 0xab, 0xa7, 0xc1, 0xcc, 0x85, 0x9e, 0xd3, 0xb9, 0x18, 0x1d, 0xd7, 0xa7, 0x8f, 0xea, 0xcd, + 0xa0, 0xe0, 0x9a, 0xf6, 0x0e, 0xa4, 0x7b, 0x0a, 0x27, 0x07, 0xfa, 0x42, 0xec, 0xf5, 0x62, 0x90, + 0x2c, 0xda, 0x3b, 0xd3, 0x44, 0x60, 0x18, 0x52, 0xf9, 0x74, 0xfa, 0x50, 0x1d, 0xe3, 0xe4, 0x99, + 0x02, 0xe6, 0x2b, 0xe5, 0x06, 0xb9, 0x07, 0xb1, 0x79, 0x4e, 0x57, 0x64, 0x0c, 0x33, 0x92, 0x49, + 0x86, 0x30, 0x23, 0xf2, 0xff, 0x61, 0x61, 0x1e, 0x52, 0xf9, 0xa3, 0x80, 0xf9, 0xb3, 0x12, 0x58, + 0xa8, 0x5b, 0x9e, 0x1f, 0xe7, 0xed, 0x9f, 0x10, 0xef, 0xf7, 0x45, 0x69, 0x4d, 0x65, 0xae, 0x1c, + 0xe1, 0x40, 0xbf, 0xa9, 0xcc, 0xe1, 0xa4, 0x22, 0xa6, 0x73, 0x2c, 0x05, 0x73, 0x40, 0x2e, 0xc1, + 0x17, 0x96, 0x64, 0x6a, 0x43, 0x29, 0x2a, 0x64, 0xfa, 0x86, 0x52, 0x6c, 0xd9, 0xd9, 0xcb, 0xf7, + 0x2f, 0x24, 0x70, 0x02, 0x15, 0x9f, 0xb4, 0x2c, 0x15, 0x2f, 0xe6, 0x91, 0xcb, 0x52, 0xa9, 0x57, + 0xc6, 0x0f, 0xf0, 0x32, 0x89, 0x95, 0xf1, 0x51, 0x44, 0xa7, 0x2c, 0xe6, 0x98, 0x65, 0xd8, 0x51, + 0x62, 0x4e, 0x58, 0x86, 0x1d, 0x5f, 0xcc, 0xc9, 0x4b, 0xb1, 0x63, 0x8a, 0xf9, 0xc8, 0x16, 0x58, + 0x7f, 0x49, 0x0e, 0xc5, 0x1c, 0xbb, 0xb6, 0x91, 0x20, 0xe6, 0xd4, 0x27, 0x7a, 0xb5, 0x77, 0x8f, + 0x29, 0xf8, 0x09, 0xaf, 0x6f, 0x8c, 0x03, 0xd3, 0x11, 0xae, 0x71, 0xfc, 0x82, 0x0c, 0x16, 0x29, + 0x17, 0xc3, 0xa7, 0xcc, 0x09, 0x18, 0xa5, 0x9e, 0x32, 0xa7, 0x3e, 0x03, 0xc4, 0x73, 0x36, 0xfd, + 0x33, 0x40, 0x89, 0xe5, 0x67, 0x0f, 0xce, 0x37, 0xf2, 0xe0, 0x14, 0x62, 0x61, 0xdd, 0xe9, 0x5a, + 0xdb, 0x57, 0x08, 0x17, 0xe7, 0xcc, 0xde, 0x3e, 0xf4, 0xb4, 0x0f, 0x48, 0xa2, 0x28, 0xfd, 0x67, + 0x00, 0x9c, 0x3e, 0x74, 0x49, 0x1c, 0x37, 0x0a, 0xd4, 0x9d, 0x71, 0x95, 0x3d, 0x58, 0x52, 0x78, + 0x7d, 0x4e, 0x33, 0x20, 0x62, 0x30, 0xf4, 0x90, 0x55, 0x38, 0x1b, 0xbe, 0x19, 0x74, 0xf0, 0xc8, + 0x1d, 0x74, 0xf0, 0xb8, 0x09, 0xc8, 0x66, 0xb7, 0x1b, 0x42, 0x35, 0xb8, 0x99, 0x8d, 0xcb, 0x34, + 0x50, 0x16, 0x94, 0xd3, 0x83, 0xd1, 0xd1, 0xbc, 0x98, 0x9c, 0x1e, 0xf4, 0xd5, 0x25, 0x50, 0x24, + 0xd7, 0x89, 0x87, 0x2b, 0xfa, 0xc3, 0x33, 0xd3, 0x5c, 0xbc, 0x69, 0xd7, 0xe4, 0xd5, 0xf0, 0xf6, + 0x54, 0x92, 0x19, 0xd6, 0x4f, 0x47, 0x76, 0xb2, 0xc1, 0x29, 0xd8, 0x93, 0xc7, 0xa6, 0x3c, 0x9d, + 0xdd, 0xb0, 0x72, 0xbf, 0xdf, 0xbb, 0xd2, 0xa6, 0x81, 0x07, 0x52, 0xed, 0x86, 0x31, 0xf1, 0x0b, + 0xa4, 0x03, 0xf1, 0x0b, 0x52, 0xef, 0x86, 0x71, 0x7c, 0x4c, 0x62, 0x37, 0x2c, 0x89, 0x60, 0xf6, + 0xa2, 0xfd, 0x9b, 0x12, 0xb1, 0x9a, 0xe9, 0x6d, 0x04, 0xff, 0x30, 0xdc, 0xb3, 0x1a, 0xf0, 0xce, + 0x2e, 0xc3, 0x2e, 0x2a, 0x48, 0xbc, 0x85, 0x45, 0x7d, 0x1c, 0x28, 0x6e, 0x3b, 0xee, 0x9e, 0x19, + 0x6c, 0xdc, 0x0f, 0x9e, 0x14, 0xa1, 0x37, 0x00, 0xac, 0xe0, 0x3c, 0x06, 0xcd, 0x8b, 0xe6, 0x23, + 0xcf, 0xb4, 0xfa, 0x34, 0xe8, 0x23, 0xfa, 0xab, 0xde, 0x00, 0x16, 0x68, 0xec, 0xc7, 0x06, 0xf4, + 0x7c, 0xd8, 0xa5, 0x11, 0x2d, 0xf8, 0x44, 0xf5, 0x2c, 0x98, 0xa7, 0x09, 0x2b, 0x56, 0x0f, 0x7a, + 0x34, 0xa8, 0x05, 0x97, 0xa6, 0x9e, 0x02, 0x45, 0xcb, 0xbb, 0xdb, 0x73, 0x6c, 0x1a, 0x90, 0x8f, + 0x3e, 0xa9, 0x37, 0x81, 0xe3, 0x34, 0x5f, 0x68, 0xac, 0x92, 0x03, 0x3b, 0x83, 0xc9, 0x48, 0xb5, + 0x6c, 0x67, 0xc3, 0x75, 0x76, 0x5c, 0xe8, 0x79, 0xf8, 0xd4, 0x54, 0xc9, 0x60, 0x52, 0xd4, 0x7b, + 0xc1, 0x89, 0x9e, 0x65, 0x5f, 0xf4, 0x70, 0x8c, 0xe0, 0x15, 0xea, 0x36, 0x36, 0x3f, 0x24, 0x76, + 0x37, 0xd3, 0xd8, 0xa8, 0x1c, 0xd8, 0x4f, 0x8c, 0x83, 0x54, 0xd4, 0x9b, 0x81, 0x42, 0xb9, 0x59, + 0x36, 0x3b, 0x17, 0xf1, 0x7b, 0xea, 0x8e, 0x7a, 0x20, 0x9d, 0x11, 0x06, 0x09, 0xa3, 0xbf, 0xc8, + 0x09, 0x83, 0x44, 0xd2, 0x7f, 0x49, 0x0e, 0xcc, 0x73, 0x05, 0x98, 0x40, 0x0d, 0xba, 0x45, 0xef, + 0xfc, 0xae, 0xe5, 0x43, 0xc4, 0x1c, 0x3d, 0xeb, 0xf2, 0x98, 0x11, 0xcc, 0x1b, 0x07, 0x3e, 0x34, + 0x86, 0x10, 0x43, 0x7c, 0x91, 0x0e, 0x0f, 0x7b, 0x96, 0x79, 0xd4, 0x56, 0xe5, 0xd2, 0xb4, 0x67, + 0x02, 0xf5, 0x20, 0x35, 0xc6, 0x0b, 0x24, 0x97, 0xce, 0x0b, 0x04, 0xc9, 0xcd, 0xec, 0xf5, 0x9c, + 0xcb, 0xb0, 0x1b, 0x92, 0xa5, 0xba, 0x7a, 0x20, 0x5d, 0xfb, 0xc2, 0x38, 0xf3, 0xc2, 0xd4, 0x17, + 0x6b, 0xa0, 0x46, 0xb6, 0xdf, 0xe9, 0x40, 0xd8, 0xa5, 0x07, 0xd7, 0x82, 0xc7, 0x94, 0x57, 0x6e, + 0xa4, 0x9e, 0x45, 0x1e, 0xd1, 0x9d, 0x1b, 0xef, 0x8f, 0x6e, 0x3e, 0xd9, 0x17, 0xe9, 0x6a, 0x92, + 0xce, 0xc7, 0x8f, 0xd5, 0xa9, 0x68, 0xef, 0x4d, 0x7b, 0x5a, 0x34, 0x11, 0xd3, 0x53, 0x68, 0x70, + 0xf7, 0xf6, 0x7b, 0xe1, 0x71, 0x27, 0xf2, 0x94, 0x12, 0xbd, 0x54, 0x07, 0x48, 0x8f, 0x08, 0xb9, + 0x8f, 0x5f, 0x0d, 0x8a, 0xe4, 0xe6, 0x42, 0xed, 0x25, 0x8b, 0x43, 0xa1, 0x5b, 0xe4, 0xa1, 0xdb, + 0x04, 0xf3, 0xb6, 0x83, 0x8a, 0xdb, 0x30, 0x5d, 0x73, 0xcf, 0x4b, 0x5a, 0xde, 0x27, 0x74, 0x43, + 0x5b, 0xae, 0xc1, 0x7c, 0xb6, 0x76, 0xcc, 0xe0, 0xc8, 0xa8, 0xff, 0x17, 0x38, 0x7e, 0x81, 0x86, + 0xe6, 0xf0, 0x28, 0x65, 0x29, 0xde, 0xf9, 0x75, 0x80, 0xf2, 0x32, 0xff, 0xe5, 0xda, 0x31, 0x63, + 0x90, 0x98, 0xfa, 0x9f, 0xc0, 0x22, 0x7a, 0xec, 0x3a, 0x97, 0x03, 0xc6, 0xe5, 0xf8, 0x19, 0xc0, + 0x00, 0xf9, 0x75, 0xee, 0xc3, 0xb5, 0x63, 0xc6, 0x00, 0x29, 0xb5, 0x09, 0xc0, 0xae, 0xbf, 0xd7, + 0xa3, 0x84, 0xf3, 0xf1, 0x9d, 0xc9, 0x00, 0xe1, 0xb5, 0xf0, 0xa3, 0xb5, 0x63, 0x06, 0x43, 0x42, + 0xad, 0x83, 0x59, 0xff, 0x7e, 0x9f, 0xd2, 0x2b, 0xc4, 0x7b, 0x9d, 0x0c, 0xd0, 0x6b, 0x07, 0xdf, + 0xac, 0x1d, 0x33, 0x22, 0x02, 0x6a, 0x0d, 0x94, 0xfa, 0x17, 0x28, 0xb1, 0x62, 0xfc, 0x48, 0x35, + 0x40, 0x6c, 0xe3, 0x42, 0x48, 0x2b, 0xfc, 0x1c, 0x31, 0xd6, 0xf1, 0x2e, 0x51, 0x5a, 0x33, 0xc2, + 0x8c, 0x55, 0x82, 0x6f, 0x10, 0x63, 0x21, 0x01, 0xb5, 0x06, 0x66, 0x3d, 0xdb, 0xec, 0x7b, 0xbb, + 0x8e, 0xef, 0x9d, 0x2e, 0x0d, 0x38, 0x28, 0xc7, 0x53, 0x6b, 0xd1, 0x6f, 0x8c, 0xe8, 0x6b, 0xf5, + 0x71, 0xe0, 0xea, 0xfd, 0x7e, 0xd7, 0xf4, 0xa1, 0x7e, 0xbf, 0xe5, 0x45, 0xb7, 0x57, 0x06, 0xe7, + 0x72, 0x87, 0xbf, 0x54, 0x97, 0xe8, 0x51, 0x45, 0x80, 0xdb, 0xa5, 0x36, 0xb8, 0x4b, 0x4e, 0x8a, + 0x65, 0x4e, 0x28, 0x3e, 0x11, 0xe4, 0xd1, 0x2b, 0x6c, 0x16, 0x2c, 0x0e, 0x5f, 0x81, 0x1f, 0xd4, + 0x1d, 0xdc, 0x80, 0xd1, 0x47, 0x03, 0x96, 0xc5, 0xfc, 0x01, 0xcb, 0xe2, 0x7a, 0x30, 0x67, 0x79, + 0xeb, 0xd6, 0x0e, 0x99, 0xd6, 0xd0, 0x91, 0x9f, 0x4d, 0x22, 0xcb, 0x40, 0x0d, 0x78, 0x99, 0x0c, + 0xf9, 0xc7, 0x83, 0x65, 0xa0, 0x20, 0x45, 0xbb, 0x11, 0xcc, 0xb3, 0x8d, 0x8c, 0x5c, 0x7f, 0x6c, + 0x45, 0x93, 0x22, 0xfa, 0xa4, 0xdd, 0x00, 0x16, 0x79, 0x9d, 0x66, 0x6c, 0x3f, 0x39, 0x18, 0xc4, + 0xb4, 0x87, 0x81, 0xe3, 0x03, 0x0d, 0x2b, 0x08, 0xf6, 0x93, 0x8b, 0x82, 0xfd, 0x5c, 0x0f, 0x40, + 0xa4, 0xc5, 0x43, 0xc9, 0x3c, 0x04, 0xcc, 0x86, 0x7a, 0x39, 0x34, 0xc3, 0xd7, 0x73, 0xa0, 0x14, + 0x28, 0xdb, 0xb0, 0x0c, 0xc8, 0xa6, 0xb0, 0x99, 0x9d, 0xbd, 0xc0, 0xa6, 0x60, 0xd3, 0x90, 0x81, + 0x17, 0xf9, 0xd3, 0xb7, 0x2d, 0xbf, 0x17, 0x9c, 0x49, 0x1d, 0x4c, 0x56, 0x37, 0x00, 0xb0, 0x30, + 0x46, 0xed, 0xe8, 0x90, 0xea, 0xa3, 0x53, 0xb4, 0x07, 0xa2, 0x0f, 0x0c, 0x8d, 0xb3, 0x0f, 0xa5, + 0x27, 0x48, 0x67, 0x41, 0x81, 0x5c, 0xb0, 0x70, 0x4c, 0x5d, 0x04, 0x40, 0x7f, 0xda, 0x86, 0x6e, + 0xd4, 0xf4, 0x46, 0x45, 0x57, 0x72, 0xda, 0xcb, 0x25, 0x30, 0x1b, 0x36, 0x82, 0xa1, 0x95, 0xd4, + 0xa9, 0x6a, 0x8d, 0xbc, 0x61, 0xf6, 0x60, 0xa3, 0x62, 0x95, 0xec, 0x09, 0xe0, 0x41, 0xfb, 0x1e, + 0x5c, 0xb1, 0x5c, 0xcf, 0x37, 0x9c, 0xcb, 0x2b, 0x8e, 0x1b, 0x99, 0x44, 0x24, 0x34, 0x71, 0xdc, + 0x6b, 0x64, 0xea, 0x77, 0x21, 0x3e, 0xad, 0x08, 0x5d, 0xba, 0x65, 0x13, 0x25, 0x20, 0xba, 0xbe, + 0x6b, 0xda, 0x5e, 0xdf, 0xf1, 0xa0, 0xe1, 0x5c, 0xf6, 0xca, 0x76, 0xb7, 0xe2, 0xf4, 0xf6, 0xf7, + 0x6c, 0x8f, 0x1a, 0xeb, 0x71, 0xaf, 0x91, 0x74, 0xf0, 0xfd, 0xd1, 0x8b, 0x00, 0x54, 0x9a, 0xf5, + 0xba, 0x5e, 0x69, 0xd7, 0x9a, 0x0d, 0xe5, 0x18, 0x92, 0x56, 0xbb, 0xbc, 0x5c, 0x47, 0xd2, 0x79, + 0x3a, 0x28, 0x05, 0x6d, 0x9a, 0xc6, 0x27, 0xca, 0x05, 0xf1, 0x89, 0xd4, 0x32, 0x28, 0x05, 0xad, + 0x9c, 0x8e, 0x08, 0x0f, 0x1f, 0x3c, 0x8f, 0xbe, 0x67, 0xba, 0x3e, 0x36, 0x2d, 0x03, 0x22, 0xcb, + 0xa6, 0x07, 0x8d, 0xf0, 0xb3, 0xb3, 0x8f, 0xa2, 0x1c, 0xa8, 0x60, 0xb1, 0x5c, 0xaf, 0x6f, 0x35, + 0x8d, 0xad, 0x46, 0xb3, 0xbd, 0x56, 0x6b, 0xac, 0x92, 0x11, 0xb2, 0xb6, 0xda, 0x68, 0x1a, 0x3a, + 0x19, 0x20, 0x5b, 0x4a, 0x8e, 0xdc, 0x5f, 0xbe, 0x5c, 0x02, 0xc5, 0x3e, 0x96, 0xae, 0xf6, 0x15, + 0x39, 0xa5, 0x69, 0x11, 0xe2, 0x14, 0x73, 0xc3, 0x32, 0x77, 0x18, 0x44, 0x1a, 0x72, 0x58, 0xfb, + 0x2c, 0x98, 0x27, 0xe6, 0x90, 0x87, 0xf7, 0xd5, 0x30, 0x72, 0xb2, 0xc1, 0xa5, 0x69, 0x9f, 0x94, + 0x52, 0x18, 0x17, 0x43, 0x39, 0x4a, 0x67, 0x5c, 0xfc, 0x41, 0x6e, 0xbc, 0xeb, 0x48, 0x6a, 0x8d, + 0xb6, 0x6e, 0x34, 0xca, 0x75, 0x9a, 0x45, 0x56, 0x4f, 0x83, 0x93, 0x8d, 0x26, 0x0d, 0xc6, 0xd9, + 0xda, 0x6a, 0x37, 0xb7, 0x6a, 0xeb, 0x1b, 0x4d, 0xa3, 0xad, 0x14, 0xd4, 0x53, 0x40, 0x25, 0xff, + 0xb7, 0x6a, 0xad, 0xad, 0x4a, 0xb9, 0x51, 0xd1, 0xeb, 0x7a, 0x55, 0x29, 0xaa, 0x8f, 0x00, 0x0f, + 0x23, 0xd7, 0x5b, 0x35, 0x57, 0xb6, 0x8c, 0xe6, 0xf9, 0x16, 0x42, 0xd0, 0xd0, 0xeb, 0x65, 0xa4, + 0x48, 0xcc, 0x3d, 0xe6, 0x33, 0xea, 0x55, 0xe0, 0xf8, 0x4a, 0xad, 0xae, 0xe3, 0xdb, 0x68, 0x69, + 0x79, 0x25, 0xf5, 0x3a, 0x70, 0xba, 0xd6, 0x68, 0x6d, 0xae, 0xac, 0xd4, 0x2a, 0x35, 0xbd, 0xd1, + 0xde, 0xda, 0xd0, 0x8d, 0xf5, 0x5a, 0xab, 0x85, 0xbe, 0x55, 0x66, 0xb5, 0x8f, 0xcb, 0xa0, 0x48, + 0xfa, 0x4c, 0x64, 0xc4, 0x2e, 0x9c, 0x33, 0x7b, 0x16, 0x1a, 0x28, 0xf0, 0xf5, 0xf1, 0x03, 0xe7, + 0xb8, 0x7c, 0x7c, 0xcd, 0x3c, 0x3d, 0x09, 0x82, 0x1f, 0xb4, 0x1f, 0x95, 0x53, 0x9e, 0xe3, 0xa2, + 0x40, 0x90, 0x12, 0x97, 0xb8, 0xd2, 0x62, 0x56, 0x1d, 0x5e, 0x23, 0xa5, 0x38, 0xc7, 0x25, 0x4e, + 0x3e, 0x1d, 0xf8, 0xbf, 0x38, 0x29, 0xf0, 0x15, 0x30, 0xbf, 0xd9, 0x28, 0x6f, 0xb6, 0xd7, 0x9a, + 0x46, 0xed, 0x87, 0xf1, 0x2d, 0x04, 0x0b, 0x60, 0x76, 0xa5, 0x69, 0x2c, 0xd7, 0xaa, 0x55, 0xbd, + 0xa1, 0x14, 0xd4, 0x07, 0x81, 0xab, 0x5a, 0xba, 0x71, 0xae, 0x56, 0xd1, 0xb7, 0x36, 0x1b, 0xe5, + 0x73, 0xe5, 0x5a, 0x1d, 0xf7, 0x11, 0xc5, 0x84, 0xab, 0xef, 0x67, 0xb4, 0x1f, 0xc9, 0x03, 0x40, + 0xaa, 0x8e, 0x2f, 0xe1, 0x62, 0x2e, 0x48, 0xff, 0xa3, 0xb4, 0xd3, 0xbd, 0x88, 0x4c, 0x4c, 0xfb, + 0xad, 0x81, 0x92, 0x4b, 0x5f, 0xd0, 0x75, 0xcd, 0x51, 0x74, 0xc8, 0xdf, 0x80, 0x9a, 0x11, 0x7e, + 0xae, 0x7d, 0x20, 0xcd, 0xec, 0x2e, 0x96, 0xb1, 0xa9, 0xdc, 0xf4, 0x3c, 0x08, 0xa4, 0xf6, 0xc2, + 0x1c, 0x58, 0xe4, 0x2b, 0x86, 0x2a, 0x81, 0x8d, 0x29, 0xb1, 0x4a, 0xf0, 0x1f, 0x33, 0x46, 0xd6, + 0xd9, 0xc7, 0xd2, 0xe1, 0x14, 0x04, 0x2d, 0x93, 0x84, 0x64, 0x08, 0x2c, 0x16, 0x25, 0x87, 0x98, + 0x47, 0x46, 0x87, 0x22, 0xa9, 0x33, 0x40, 0x6e, 0xdf, 0xef, 0x2b, 0xb2, 0xf6, 0xe9, 0x3c, 0x58, + 0xe0, 0x6e, 0x60, 0xd7, 0xfe, 0x38, 0x27, 0x72, 0xbb, 0x31, 0x73, 0xb7, 0x7b, 0xee, 0xb0, 0x77, + 0xbb, 0x9f, 0xb5, 0xc0, 0x0c, 0x4d, 0xc3, 0xf2, 0x6d, 0x36, 0x90, 0x29, 0x70, 0x1c, 0xcc, 0xad, + 0xea, 0xed, 0xad, 0x56, 0xbb, 0x6c, 0xb4, 0xf5, 0xaa, 0x92, 0x43, 0x03, 0x9f, 0xbe, 0xbe, 0xd1, + 0xbe, 0x57, 0x91, 0xd0, 0x98, 0xb8, 0xba, 0x59, 0xab, 0xea, 0x5b, 0xcd, 0x46, 0xfd, 0x5e, 0x45, + 0x46, 0x3d, 0x20, 0x93, 0x77, 0x6b, 0xbd, 0xb9, 0x5c, 0xab, 0xeb, 0x4a, 0x1e, 0x35, 0x1b, 0xfc, + 0x49, 0x90, 0x52, 0xe0, 0x7d, 0xa3, 0x45, 0x56, 0x38, 0x07, 0xab, 0x70, 0x78, 0x17, 0x91, 0x34, + 0x57, 0xc8, 0xa7, 0x5a, 0x3b, 0x4d, 0x62, 0x35, 0xfb, 0x19, 0xf1, 0xe7, 0x65, 0xa0, 0x10, 0x0e, + 0xf4, 0xfb, 0xfb, 0xd0, 0xb5, 0xa0, 0xdd, 0x81, 0xda, 0x45, 0x91, 0x80, 0xc0, 0x07, 0x42, 0x61, + 0xe2, 0x51, 0x83, 0xb1, 0x45, 0xc9, 0xc3, 0x80, 0x19, 0x9f, 0x3f, 0x60, 0xc6, 0xff, 0x4e, 0x5a, + 0x0f, 0xdc, 0x41, 0x76, 0x27, 0xb2, 0x67, 0xf5, 0x99, 0x34, 0x1e, 0xb8, 0x23, 0x38, 0x98, 0x4a, + 0x9c, 0xef, 0x98, 0x51, 0x5e, 0x91, 0xb5, 0x17, 0xc8, 0xe0, 0x78, 0xd5, 0xf4, 0xe1, 0xf2, 0x95, + 0x76, 0x70, 0x8f, 0x6a, 0xcc, 0xdd, 0xe7, 0xb9, 0x03, 0x77, 0x9f, 0x47, 0x57, 0xb1, 0x4a, 0x03, + 0x57, 0xb1, 0x6a, 0xef, 0x49, 0x7b, 0x66, 0x77, 0x80, 0x87, 0x89, 0x05, 0xe3, 0x4e, 0x77, 0x16, + 0x37, 0x99, 0x8b, 0xec, 0x1b, 0xd8, 0xdb, 0x67, 0x81, 0x42, 0x58, 0x61, 0x9c, 0x4c, 0x7f, 0x56, + 0x06, 0x72, 0xb9, 0xdb, 0xd5, 0xb6, 0x52, 0xc4, 0xf4, 0x0c, 0xa2, 0xa4, 0x48, 0x7c, 0x94, 0x14, + 0x6e, 0xcf, 0x42, 0x1e, 0x74, 0x0c, 0x4a, 0x7b, 0x1a, 0x81, 0xf1, 0x28, 0x8d, 0x0f, 0xa3, 0x9c, + 0xdd, 0x69, 0x84, 0xc4, 0xe2, 0xa7, 0x73, 0xa5, 0x35, 0xbd, 0x45, 0x56, 0x17, 0x45, 0x26, 0xf9, + 0xe6, 0xfe, 0xb4, 0xc7, 0x0b, 0x38, 0x8f, 0xde, 0x84, 0xeb, 0xec, 0xb3, 0x3b, 0x5e, 0x30, 0x8a, + 0x83, 0xec, 0x51, 0xf8, 0x9e, 0x04, 0xf2, 0x2d, 0xc7, 0xf5, 0x27, 0x85, 0x41, 0x5a, 0x97, 0x08, + 0x46, 0x02, 0xad, 0xf8, 0x99, 0x6d, 0x76, 0x2e, 0x11, 0xc9, 0xe5, 0x4f, 0x21, 0x2c, 0xea, 0x71, + 0xb0, 0x48, 0x38, 0x09, 0xef, 0x14, 0xfa, 0x57, 0x89, 0xf4, 0x57, 0xf7, 0x88, 0x22, 0x82, 0x37, + 0xc6, 0x42, 0x97, 0x84, 0x00, 0x14, 0x2e, 0x4d, 0x7b, 0x23, 0x8b, 0x4b, 0x95, 0xc7, 0x65, 0xd8, + 0xbc, 0x3e, 0xbc, 0x96, 0x67, 0x52, 0x3d, 0x53, 0x9a, 0x08, 0xab, 0x09, 0x85, 0x67, 0x8f, 0xc8, + 0x73, 0x64, 0x50, 0xa4, 0x2e, 0xa1, 0x13, 0x45, 0x20, 0x6d, 0xcb, 0x08, 0x85, 0x20, 0xe6, 0x3a, + 0x2a, 0x4f, 0xba, 0x65, 0x24, 0x97, 0x9f, 0x3d, 0x0e, 0xff, 0x46, 0x7d, 0x9d, 0xcb, 0x97, 0x4c, + 0xab, 0x67, 0x5e, 0xe8, 0xa5, 0x88, 0x6c, 0xfe, 0xc9, 0x94, 0xa7, 0x3b, 0xc3, 0xaa, 0x72, 0xe5, + 0xc5, 0x48, 0xfc, 0x07, 0xc1, 0xac, 0xcb, 0xed, 0x05, 0x23, 0x2b, 0x6a, 0xc0, 0xcf, 0x9c, 0xbe, + 0x37, 0xa2, 0x9c, 0xa9, 0x8e, 0x72, 0x0a, 0xf1, 0x33, 0x95, 0xa3, 0x67, 0x73, 0xe5, 0x6e, 0x77, + 0x05, 0x9a, 0xfe, 0xbe, 0x0b, 0xbb, 0xa9, 0x86, 0x08, 0x77, 0x60, 0xbb, 0x9c, 0x91, 0x04, 0x17, + 0x5b, 0xb4, 0xce, 0xa3, 0xf3, 0xf8, 0x11, 0xbd, 0x41, 0xc0, 0xcb, 0x44, 0xba, 0xa4, 0xb7, 0x85, + 0x90, 0x34, 0x39, 0x48, 0x9e, 0x38, 0x1e, 0x13, 0xd9, 0x03, 0xf2, 0x52, 0x19, 0x2c, 0x12, 0x3b, + 0x61, 0xd2, 0x98, 0x7c, 0x38, 0xa5, 0x0b, 0x19, 0x73, 0x6b, 0x1b, 0xcb, 0xce, 0x44, 0x60, 0x49, + 0xe3, 0x70, 0x26, 0xc6, 0x47, 0xf6, 0xc8, 0xfc, 0xcf, 0xab, 0x00, 0x60, 0xdc, 0x82, 0x3f, 0x59, + 0x8c, 0xe2, 0x7c, 0x6a, 0xef, 0xa4, 0xf3, 0x8f, 0x16, 0x17, 0x74, 0x9e, 0x71, 0xf9, 0x0d, 0xb7, + 0xbd, 0xf8, 0x44, 0xa1, 0x51, 0xe5, 0x0f, 0x52, 0xda, 0xbc, 0xd4, 0x29, 0x77, 0xe4, 0xe0, 0x3e, + 0x66, 0x2f, 0xf7, 0xa9, 0x14, 0xc6, 0xef, 0x28, 0x56, 0xd2, 0xa1, 0x56, 0x1f, 0x63, 0x66, 0x7f, + 0x1a, 0x9c, 0x34, 0xf4, 0x72, 0xb5, 0xd9, 0xa8, 0xdf, 0xcb, 0x5e, 0xe1, 0xa5, 0xc8, 0xec, 0xe4, + 0x24, 0x13, 0xd8, 0x5e, 0x97, 0xb2, 0x0f, 0xe4, 0x65, 0x95, 0x34, 0x5b, 0x61, 0x16, 0x57, 0x46, + 0xf7, 0x6a, 0x02, 0x64, 0x8f, 0x12, 0x85, 0x6f, 0x15, 0xc1, 0x9c, 0x01, 0x3b, 0xce, 0xde, 0x1e, + 0xb4, 0xbb, 0xb0, 0xab, 0xbd, 0x4e, 0x06, 0xf3, 0xe1, 0xae, 0x62, 0x0b, 0xfa, 0xda, 0x7f, 0x8a, + 0xb0, 0x39, 0x0b, 0xe6, 0x51, 0xe5, 0x9a, 0xfc, 0x45, 0x02, 0x5c, 0x9a, 0x7a, 0x0b, 0x38, 0x11, + 0xa0, 0xd0, 0x1c, 0x98, 0xc2, 0x1c, 0x7c, 0xc1, 0xfb, 0xfd, 0x6c, 0xf2, 0x18, 0xdd, 0x15, 0x2f, + 0xcc, 0x90, 0xdd, 0x25, 0x96, 0xd5, 0x18, 0xb0, 0x7e, 0x2f, 0x04, 0xeb, 0x69, 0x1c, 0x58, 0xd5, + 0x43, 0xd2, 0x3f, 0x4a, 0xd4, 0x3e, 0x24, 0x83, 0x93, 0x41, 0x47, 0x3c, 0x3d, 0xb4, 0x3e, 0xc5, + 0xa2, 0xf5, 0x74, 0x1e, 0xad, 0x55, 0x11, 0x69, 0x0e, 0x63, 0x39, 0x06, 0xb5, 0x2f, 0x87, 0xa8, + 0xfd, 0x17, 0x0e, 0xb5, 0xfa, 0x84, 0xca, 0x39, 0x4a, 0xf4, 0x3e, 0x2c, 0x83, 0xd3, 0xc8, 0xec, + 0xac, 0x38, 0xf6, 0x76, 0xcf, 0xea, 0xf8, 0x96, 0xbd, 0x13, 0xb9, 0x38, 0xae, 0x8a, 0xac, 0x6c, + 0x0e, 0x62, 0x2b, 0x1d, 0xc4, 0x96, 0xdf, 0x63, 0x10, 0x6d, 0x5b, 0x71, 0x6c, 0xc5, 0x0c, 0x61, + 0x8c, 0xf3, 0x7e, 0xa4, 0x39, 0x6c, 0x52, 0xfa, 0xd6, 0x27, 0xc8, 0xc1, 0x51, 0xe2, 0xf7, 0x75, + 0x09, 0x9c, 0x32, 0xa0, 0xe7, 0xf4, 0x2e, 0x41, 0xe2, 0xcb, 0x1a, 0xf0, 0xeb, 0x69, 0x8f, 0x4a, + 0xd5, 0xfe, 0xb4, 0x97, 0xb2, 0x18, 0xb5, 0x78, 0x8c, 0x9e, 0x14, 0xaf, 0xe9, 0xc3, 0x8a, 0x8e, + 0x69, 0x47, 0xef, 0x0d, 0xe5, 0x7f, 0x8e, 0x93, 0xff, 0xf2, 0xa1, 0xa8, 0x4f, 0x61, 0x89, 0x00, + 0x30, 0xe6, 0xdd, 0xf3, 0x65, 0xa0, 0x60, 0x9f, 0x65, 0x3c, 0x7a, 0xd2, 0x3b, 0x84, 0x9b, 0xfc, + 0x69, 0x96, 0x7e, 0xa0, 0x84, 0xc1, 0x69, 0x96, 0x20, 0x41, 0xbd, 0x11, 0x2c, 0x76, 0x76, 0x61, + 0xe7, 0x62, 0xcd, 0x0e, 0xbc, 0xca, 0x88, 0x0b, 0xd2, 0x40, 0x2a, 0x6f, 0x30, 0xdc, 0xc3, 0x83, + 0xc1, 0x2f, 0xee, 0x72, 0x93, 0x47, 0x96, 0xa9, 0x18, 0x10, 0x7e, 0x33, 0x04, 0xa1, 0xc1, 0x81, + 0x70, 0xc7, 0x58, 0x54, 0xd3, 0x09, 0xbf, 0x31, 0x86, 0xea, 0x6b, 0xe0, 0x54, 0x73, 0xa3, 0x5d, + 0x6b, 0x36, 0xb6, 0x36, 0x5b, 0x7a, 0x75, 0x6b, 0x39, 0x68, 0x00, 0x2d, 0x45, 0xd6, 0xbe, 0x29, + 0x81, 0x19, 0xc2, 0x96, 0xa7, 0x3d, 0x32, 0x82, 0x60, 0xe4, 0x31, 0x1e, 0xed, 0xed, 0xc2, 0x41, + 0xb9, 0x42, 0x41, 0xd0, 0x72, 0x62, 0x3a, 0x9f, 0x27, 0x80, 0x19, 0x02, 0x72, 0xb0, 0xd3, 0x72, + 0x26, 0xc6, 0x7a, 0xa6, 0x64, 0x8c, 0x20, 0xbb, 0x60, 0x80, 0xae, 0x11, 0x6c, 0x64, 0xdf, 0x06, + 0x9e, 0x95, 0x27, 0xcb, 0x33, 0xe7, 0x2d, 0x7f, 0x17, 0x9f, 0xf2, 0xd1, 0x9e, 0x2a, 0x32, 0x38, + 0xdc, 0x02, 0x0a, 0x97, 0x50, 0xee, 0x11, 0x27, 0xa6, 0x48, 0x26, 0xed, 0x17, 0x85, 0xe3, 0xc1, + 0x73, 0xfa, 0x19, 0xf2, 0x14, 0x03, 0xce, 0x3a, 0xc8, 0xf7, 0x2c, 0xcf, 0xa7, 0xf3, 0x9a, 0xdb, + 0x53, 0x11, 0x0a, 0xfe, 0xd4, 0x7c, 0xb8, 0x67, 0x60, 0x32, 0xda, 0xdd, 0xc8, 0x2a, 0x8d, 0x52, + 0x05, 0x4e, 0x8d, 0x9d, 0x06, 0x33, 0x34, 0x9a, 0x01, 0xdd, 0xfa, 0x0b, 0x1e, 0x05, 0xb7, 0xdb, + 0x84, 0x6a, 0x9b, 0xbd, 0x0e, 0xfc, 0xbf, 0xc7, 0xc1, 0xcc, 0x9a, 0xe5, 0xf9, 0x8e, 0x7b, 0x45, + 0x7b, 0x7d, 0x0e, 0xcc, 0x9c, 0x83, 0xae, 0x67, 0x39, 0xf6, 0x01, 0x47, 0xbb, 0xeb, 0xc1, 0x5c, + 0xdf, 0x85, 0x97, 0x2c, 0x67, 0xdf, 0x63, 0x46, 0x62, 0x26, 0x49, 0xd5, 0x40, 0xc9, 0xdc, 0xf7, + 0x77, 0x1d, 0x37, 0x0a, 0x82, 0x16, 0x3c, 0xab, 0x67, 0x00, 0x20, 0xff, 0x1b, 0xe6, 0x1e, 0xa4, + 0xee, 0x83, 0x4c, 0x8a, 0xaa, 0x82, 0xbc, 0x6f, 0xed, 0x41, 0x7a, 0x2b, 0x02, 0xfe, 0x8f, 0x04, + 0x8c, 0x23, 0x0c, 0xd3, 0x48, 0xce, 0xb2, 0x11, 0x3c, 0x6a, 0x5f, 0x94, 0xc1, 0xdc, 0x2a, 0xf4, + 0x29, 0xab, 0x9e, 0xf6, 0xa2, 0x9c, 0xd0, 0x45, 0x64, 0x68, 0xee, 0xd7, 0x33, 0xbd, 0xe0, 0xbb, + 0xd0, 0xac, 0xe1, 0x13, 0xa3, 0x2b, 0x1a, 0x64, 0xf6, 0x7e, 0x16, 0x1c, 0xaf, 0xd7, 0xaf, 0x91, + 0x03, 0x34, 0x34, 0x33, 0xdd, 0x9c, 0x3f, 0xf8, 0x82, 0x9f, 0x77, 0x24, 0xc6, 0xba, 0xa1, 0xb2, + 0x5f, 0x62, 0xea, 0x13, 0xdb, 0x1d, 0x95, 0x2e, 0xd1, 0x1c, 0x07, 0xae, 0xde, 0x61, 0x29, 0x51, + 0x32, 0x46, 0x98, 0x5b, 0x30, 0x4a, 0xce, 0x68, 0x4e, 0xa6, 0x70, 0xd9, 0xb2, 0x0c, 0xe6, 0x5a, + 0xbb, 0xce, 0xe5, 0x40, 0x8e, 0x4f, 0x17, 0x03, 0xf6, 0x3a, 0x30, 0x7b, 0x69, 0x00, 0xd4, 0x28, + 0x81, 0xbd, 0xdf, 0x51, 0xe6, 0xef, 0x77, 0x7c, 0x9e, 0x9c, 0x16, 0x26, 0x86, 0xb9, 0x18, 0x98, + 0xf8, 0x2b, 0x19, 0xa5, 0x14, 0x57, 0x32, 0xaa, 0x8f, 0x07, 0x33, 0x94, 0x6b, 0xba, 0x15, 0x90, + 0x0c, 0x70, 0x90, 0x99, 0xad, 0x60, 0x9e, 0xaf, 0x60, 0x3a, 0xe4, 0xe3, 0x2b, 0x97, 0x3d, 0xf2, + 0xbf, 0x2d, 0xe1, 0x18, 0x69, 0x01, 0xf0, 0x95, 0x09, 0x00, 0xaf, 0x7d, 0x37, 0x27, 0xba, 0x61, + 0x16, 0x4a, 0x20, 0xe4, 0xe0, 0x50, 0x97, 0x0c, 0x8e, 0x24, 0x97, 0xbd, 0x3c, 0x5f, 0x9e, 0x07, + 0xf3, 0x55, 0x6b, 0x7b, 0x3b, 0xec, 0x24, 0x5f, 0x2c, 0xd8, 0x49, 0xc6, 0x3b, 0xc3, 0x21, 0x3b, + 0x77, 0xdf, 0x75, 0xa1, 0x1d, 0x54, 0x8a, 0x36, 0xa7, 0x81, 0x54, 0xf5, 0x26, 0x70, 0x3c, 0x18, + 0x17, 0xd8, 0x8e, 0x72, 0xd6, 0x18, 0x4c, 0xd6, 0xbe, 0x2d, 0xec, 0x6d, 0x11, 0x48, 0x94, 0xad, + 0x52, 0x4c, 0x03, 0xbc, 0x13, 0x2c, 0xec, 0x92, 0xdc, 0x78, 0x49, 0x3a, 0xe8, 0x2c, 0x4f, 0x0d, + 0xdc, 0x41, 0xb1, 0x0e, 0x3d, 0xcf, 0xdc, 0x81, 0x06, 0x9f, 0x79, 0xa0, 0xf9, 0xca, 0x69, 0x6e, + 0x54, 0x15, 0x73, 0xdc, 0x10, 0xa8, 0x49, 0xf6, 0xda, 0xf1, 0xe5, 0xb3, 0x20, 0xbf, 0x62, 0xf5, + 0xa0, 0xf6, 0xe3, 0x12, 0x98, 0x35, 0x60, 0xc7, 0xb1, 0x3b, 0xe8, 0x89, 0x71, 0x8d, 0xfd, 0x56, + 0x4e, 0xf4, 0x26, 0x71, 0x44, 0x67, 0x29, 0xa4, 0x11, 0xd3, 0x6e, 0xc4, 0x6e, 0x0c, 0x4f, 0x24, + 0x35, 0x85, 0x7b, 0xdf, 0xd0, 0xd4, 0x63, 0x7b, 0xbb, 0xe7, 0x98, 0xdc, 0xa6, 0xcc, 0xa0, 0x29, + 0x14, 0x1d, 0xc4, 0x6d, 0x38, 0xfe, 0x86, 0x65, 0xdb, 0x61, 0x6c, 0x9b, 0x03, 0xe9, 0xbc, 0x3f, + 0x51, 0x62, 0x78, 0x40, 0x5c, 0x77, 0x5a, 0x7a, 0x8c, 0x66, 0xdf, 0x08, 0x16, 0x2f, 0x5c, 0xf1, + 0xa1, 0x47, 0x73, 0xd1, 0x62, 0xf3, 0xc6, 0x40, 0x2a, 0x73, 0xb9, 0x47, 0x52, 0x18, 0xc1, 0x84, + 0x02, 0xd3, 0x89, 0x7a, 0x6d, 0x8c, 0x19, 0xe0, 0x49, 0xa0, 0x34, 0x9a, 0x55, 0x1d, 0x7b, 0x6a, + 0x07, 0xbe, 0xaf, 0x3b, 0xda, 0xcf, 0xc8, 0x60, 0x1e, 0x3b, 0x39, 0x06, 0x28, 0x3c, 0x4c, 0x60, + 0x3e, 0xa2, 0x7d, 0x55, 0xd8, 0x8b, 0x1b, 0x57, 0x99, 0x2d, 0x20, 0x5e, 0xd0, 0xdb, 0x56, 0x6f, + 0x50, 0xd0, 0x05, 0x63, 0x20, 0x75, 0x08, 0x20, 0xf2, 0x50, 0x40, 0x3e, 0x24, 0xe4, 0xca, 0x3d, + 0x8a, 0xbb, 0xa3, 0x42, 0xe5, 0xd7, 0x64, 0x30, 0x87, 0x26, 0x29, 0x01, 0x28, 0x4d, 0x0e, 0x14, + 0xc7, 0xee, 0x5d, 0x89, 0x96, 0x45, 0x82, 0xc7, 0x54, 0x8d, 0xe4, 0x8f, 0x85, 0x67, 0xee, 0x58, + 0x44, 0x0c, 0x2f, 0x53, 0xc2, 0xef, 0x83, 0x42, 0xf3, 0xf9, 0x11, 0xcc, 0x1d, 0x15, 0x7c, 0xaf, + 0x2d, 0x82, 0xe2, 0x66, 0x1f, 0x23, 0xf7, 0x15, 0x59, 0xe4, 0xa2, 0x9c, 0x03, 0xc7, 0xf8, 0x90, + 0x99, 0xd5, 0x73, 0x3a, 0x66, 0x6f, 0x23, 0x3a, 0xc9, 0x1e, 0x25, 0xa8, 0x77, 0x50, 0xcf, 0x7e, + 0x72, 0x20, 0xfb, 0xc6, 0xc4, 0x3b, 0x64, 0xb0, 0x8c, 0x98, 0x23, 0x93, 0xb7, 0x80, 0x13, 0x5d, + 0xcb, 0x33, 0x2f, 0xf4, 0xa0, 0x6e, 0x77, 0xdc, 0x2b, 0x44, 0x1c, 0x74, 0x5a, 0x75, 0xe0, 0x85, + 0xfa, 0x24, 0x50, 0xf0, 0xfc, 0x2b, 0x3d, 0x32, 0x4f, 0x64, 0x4f, 0x58, 0xc6, 0x16, 0xd5, 0x42, + 0xd9, 0x0d, 0xf2, 0x15, 0xeb, 0x3a, 0x3b, 0x23, 0xe6, 0x3a, 0xab, 0x3e, 0x16, 0x14, 0x1d, 0xd7, + 0xda, 0xb1, 0xc8, 0xb5, 0x90, 0x8b, 0x07, 0x42, 0x25, 0x13, 0x53, 0xa0, 0x89, 0xb3, 0x18, 0x34, + 0xab, 0xfa, 0x78, 0x30, 0x6b, 0xed, 0x99, 0x3b, 0xf0, 0x1e, 0xcb, 0x26, 0x81, 0x24, 0x16, 0x6f, + 0x3b, 0x7d, 0xe0, 0xf0, 0x28, 0x7d, 0x6f, 0x44, 0x59, 0xd5, 0x3b, 0xc1, 0x35, 0x1d, 0x17, 0x9a, + 0x3e, 0x44, 0x02, 0x3a, 0x6f, 0x75, 0x77, 0xa0, 0x5f, 0xdb, 0x5e, 0xb7, 0x3c, 0xcf, 0xb2, 0x77, + 0xe8, 0xcd, 0xaf, 0xf1, 0x19, 0xb4, 0x0f, 0x4a, 0xa2, 0xd1, 0x20, 0xb1, 0x64, 0x88, 0x4a, 0x8c, + 0x71, 0x43, 0x3d, 0x23, 0x45, 0x59, 0xd0, 0x01, 0xf9, 0x55, 0x42, 0x71, 0x1a, 0xe3, 0xd9, 0xca, + 0x7e, 0xe8, 0xff, 0x43, 0x09, 0x94, 0xaa, 0xce, 0x65, 0x1b, 0x37, 0x93, 0xdb, 0xc5, 0x2c, 0xe5, + 0x21, 0xa1, 0x1d, 0xf8, 0xbb, 0xce, 0x13, 0x4f, 0x03, 0xe2, 0xda, 0x06, 0x45, 0xc6, 0xc0, 0x90, + 0xd8, 0xee, 0x04, 0x03, 0x08, 0x24, 0x95, 0x93, 0xbd, 0x5c, 0x7f, 0x57, 0x06, 0xf9, 0xaa, 0xeb, + 0xf4, 0xb5, 0xb7, 0xe5, 0x52, 0x38, 0xe2, 0x75, 0x5d, 0xa7, 0xdf, 0xc6, 0x57, 0xc8, 0x46, 0x7b, + 0x4f, 0x6c, 0x9a, 0x7a, 0x3b, 0x28, 0xf5, 0x1d, 0xcf, 0xf2, 0x83, 0x49, 0xc8, 0xe2, 0x6d, 0x0f, + 0x1e, 0xda, 0x17, 0x6c, 0xd0, 0x4c, 0x46, 0x98, 0x1d, 0xf5, 0xf9, 0x58, 0x84, 0x48, 0x2e, 0x48, + 0x8c, 0xc1, 0x35, 0xba, 0x03, 0xa9, 0xda, 0x4b, 0x58, 0x24, 0x9f, 0xc8, 0x23, 0xf9, 0xf0, 0x21, + 0x12, 0x76, 0x9d, 0xfe, 0x44, 0x5c, 0x67, 0x5e, 0x11, 0xa2, 0xfa, 0x64, 0x0e, 0xd5, 0x9b, 0x85, + 0xca, 0xcc, 0x1e, 0xd1, 0x0f, 0xe6, 0x01, 0xc0, 0x46, 0xca, 0x26, 0x9a, 0x3e, 0x89, 0x59, 0x68, + 0x3f, 0x96, 0x67, 0x64, 0x59, 0xe6, 0x65, 0xf9, 0xc8, 0x18, 0x1b, 0x08, 0x93, 0x8f, 0x91, 0x68, + 0x19, 0x14, 0xf6, 0xd1, 0x6b, 0x2a, 0x51, 0x41, 0x12, 0xf8, 0xd1, 0x20, 0x5f, 0x6a, 0xbf, 0x9d, + 0x03, 0x05, 0x9c, 0xa0, 0x9e, 0x01, 0x00, 0x9b, 0x05, 0xe4, 0x30, 0x6d, 0x0e, 0x1b, 0x00, 0x4c, + 0x0a, 0xd6, 0x56, 0xab, 0x4b, 0x5f, 0x13, 0x83, 0x3b, 0x4a, 0x40, 0x5f, 0x63, 0x63, 0x01, 0xd3, + 0xa2, 0xe6, 0x03, 0x93, 0x82, 0xbe, 0xc6, 0x4f, 0x75, 0xb8, 0x4d, 0x6e, 0xf7, 0xc8, 0x1b, 0x51, + 0x42, 0xf8, 0x75, 0x3d, 0xbc, 0x13, 0x36, 0xf8, 0x1a, 0xa7, 0xa0, 0xa9, 0x34, 0x56, 0xcb, 0xe5, + 0xa8, 0x88, 0x22, 0xce, 0x34, 0x98, 0xac, 0xbd, 0x2e, 0x54, 0x9b, 0x2a, 0xa7, 0x36, 0x8f, 0x4e, + 0x21, 0xde, 0xec, 0x95, 0xe7, 0xeb, 0x05, 0x30, 0xdb, 0x70, 0xba, 0x54, 0x77, 0x98, 0xe9, 0xe6, + 0x67, 0x0a, 0xa9, 0xa6, 0x9b, 0x21, 0x8d, 0x18, 0x05, 0x79, 0x0a, 0xaf, 0x20, 0x62, 0x14, 0x58, + 0xfd, 0x50, 0x97, 0x41, 0x11, 0x6b, 0xef, 0xc1, 0xcb, 0x46, 0x93, 0x48, 0x60, 0xd1, 0x1a, 0xf4, + 0xcb, 0x7f, 0x77, 0x3a, 0xf6, 0xdf, 0x40, 0x01, 0x57, 0x30, 0x61, 0x6f, 0x88, 0xaf, 0xa8, 0x94, + 0x5c, 0x51, 0x39, 0xb9, 0xa2, 0xf9, 0xc1, 0x8a, 0xa6, 0x59, 0x45, 0x88, 0xd3, 0x90, 0xec, 0x75, + 0xfc, 0x7f, 0xcd, 0x00, 0xd0, 0x30, 0x2f, 0x59, 0x3b, 0x64, 0x6f, 0xf9, 0x8b, 0xc1, 0xec, 0x89, + 0xee, 0x02, 0xff, 0x24, 0x33, 0x10, 0xde, 0x0e, 0x66, 0xe8, 0xb8, 0x47, 0x2b, 0xf2, 0x10, 0xae, + 0x22, 0x11, 0x15, 0x62, 0xd4, 0xde, 0xef, 0x1b, 0x41, 0x7e, 0x64, 0x98, 0x6c, 0xef, 0xf7, 0x7a, + 0x6d, 0xf4, 0x2d, 0xb5, 0xd0, 0x82, 0xe7, 0x98, 0x1d, 0x8c, 0xe8, 0x92, 0x69, 0x12, 0x74, 0x8a, + 0x3e, 0x69, 0xef, 0x13, 0x3e, 0xa7, 0xc6, 0xf0, 0xc3, 0xd4, 0x28, 0xa6, 0x09, 0x3e, 0x16, 0xcc, + 0x38, 0xe1, 0x76, 0xb8, 0x1c, 0xbb, 0x8a, 0x56, 0xb3, 0xb7, 0x1d, 0x23, 0xc8, 0x29, 0xb8, 0x75, + 0x26, 0xc4, 0xc7, 0x54, 0x8e, 0x82, 0x9e, 0x5a, 0x0d, 0x22, 0xa5, 0xa2, 0x7a, 0x9c, 0xb7, 0xfc, + 0xdd, 0xba, 0x65, 0x5f, 0xf4, 0xb4, 0xff, 0x22, 0x66, 0x41, 0x32, 0xf8, 0x4b, 0xe9, 0xf0, 0xe7, + 0x23, 0x95, 0x25, 0x7a, 0x76, 0x30, 0x54, 0x86, 0x73, 0x1b, 0x03, 0xe0, 0x1d, 0xa0, 0x48, 0x18, + 0xa5, 0x9d, 0xe8, 0xd9, 0x58, 0xfc, 0x42, 0x4a, 0x06, 0xfd, 0x42, 0xd0, 0x2b, 0x24, 0x2d, 0x67, + 0x99, 0x43, 0x7a, 0xf6, 0x31, 0x60, 0x86, 0x4a, 0x5a, 0x5d, 0x64, 0x5b, 0xb1, 0x72, 0x4c, 0x05, + 0xa0, 0xb8, 0xee, 0x5c, 0x82, 0x6d, 0x47, 0xc9, 0xa1, 0xff, 0x88, 0xbf, 0xb6, 0xa3, 0x48, 0xda, + 0x2b, 0x4b, 0xa0, 0x14, 0x86, 0xa8, 0xfc, 0x43, 0x09, 0x28, 0x15, 0x3c, 0x43, 0x5b, 0x71, 0x9d, + 0x3d, 0x52, 0x23, 0xf1, 0x33, 0x0f, 0x2f, 0x15, 0x76, 0x10, 0x09, 0x43, 0x47, 0x0e, 0x16, 0x16, + 0x83, 0x25, 0x59, 0xc2, 0x94, 0x82, 0x25, 0x4c, 0xed, 0xad, 0x42, 0x0e, 0x23, 0xa2, 0xa5, 0x64, + 0xdf, 0xd4, 0x7e, 0x47, 0x02, 0x85, 0x4a, 0xcf, 0xb1, 0x21, 0x7b, 0x30, 0x77, 0xe4, 0x09, 0xd0, + 0xe1, 0xfb, 0x18, 0xda, 0xb3, 0x24, 0x51, 0x5b, 0x23, 0x12, 0x00, 0x2a, 0x5b, 0x50, 0xb6, 0x62, + 0x83, 0x54, 0x22, 0xe9, 0xec, 0x05, 0xfa, 0x4d, 0x09, 0xcc, 0x92, 0x98, 0x72, 0xe5, 0x5e, 0x4f, + 0x7b, 0x70, 0x24, 0xd4, 0x21, 0x61, 0x3e, 0xb5, 0x0f, 0x09, 0x1f, 0x3c, 0x0b, 0x6b, 0x15, 0xd2, + 0x4e, 0x11, 0x16, 0x31, 0xdd, 0x39, 0x28, 0xb1, 0x9d, 0xb8, 0x91, 0x0c, 0x65, 0x2f, 0xea, 0x3f, + 0x92, 0x90, 0x01, 0x60, 0x5f, 0xdc, 0x70, 0xe1, 0x25, 0x0b, 0x5e, 0xd6, 0xae, 0x8d, 0x84, 0x7d, + 0x30, 0x60, 0xd6, 0x9b, 0x84, 0x17, 0x71, 0x18, 0x92, 0xb1, 0x1b, 0x61, 0x73, 0xbd, 0x28, 0x13, + 0xed, 0xc5, 0x07, 0xa3, 0x98, 0x31, 0x64, 0x0c, 0x36, 0xbb, 0xe0, 0x9a, 0x4d, 0x3c, 0x17, 0xd9, + 0x0b, 0xf6, 0x63, 0x33, 0xa0, 0xb4, 0x69, 0x7b, 0xfd, 0x9e, 0xe9, 0xed, 0x6a, 0xff, 0x2a, 0x83, + 0x22, 0xb9, 0xe2, 0x56, 0xfb, 0x41, 0x2e, 0x2e, 0xcf, 0x33, 0xf6, 0xa1, 0x1b, 0x38, 0xf0, 0x90, + 0x87, 0xc8, 0x3e, 0x92, 0x18, 0xfb, 0x48, 0xfb, 0xa0, 0x2c, 0x3a, 0x49, 0x0d, 0x0a, 0xa5, 0x77, + 0xea, 0xc6, 0x87, 0x82, 0xe9, 0x5b, 0x1d, 0x7f, 0xdf, 0x85, 0xde, 0xd0, 0x50, 0x30, 0xb1, 0x54, + 0x36, 0xc8, 0x57, 0x46, 0xf8, 0xb9, 0x66, 0x82, 0x19, 0x9a, 0x78, 0x60, 0x33, 0xea, 0x60, 0x54, + 0x89, 0x53, 0xa0, 0x68, 0xba, 0xbe, 0xe5, 0xf9, 0x74, 0x7b, 0x96, 0x3e, 0xa1, 0xee, 0x92, 0xfc, + 0xdb, 0x74, 0x7b, 0x41, 0x04, 0xaf, 0x30, 0x41, 0xfb, 0x35, 0xa1, 0xf9, 0x63, 0x72, 0xcd, 0xd3, + 0x41, 0x7e, 0xcf, 0x18, 0x2b, 0xdc, 0x0f, 0x02, 0x57, 0x19, 0xe5, 0xb6, 0xbe, 0x45, 0x02, 0x3e, + 0x85, 0xb1, 0x9d, 0xba, 0xda, 0x7b, 0x64, 0x66, 0xfd, 0xee, 0x0a, 0x37, 0x46, 0x50, 0x29, 0x46, + 0x63, 0x44, 0x98, 0x90, 0xb0, 0xd7, 0xcd, 0x2d, 0xe1, 0xca, 0xc2, 0x4b, 0xb8, 0xda, 0xaf, 0x08, + 0xef, 0x45, 0x85, 0xa2, 0x1c, 0xb1, 0x06, 0x98, 0x74, 0x05, 0xe6, 0x47, 0x84, 0xf6, 0x95, 0x46, + 0x95, 0x74, 0x84, 0xb0, 0x7d, 0xf7, 0x14, 0x90, 0xca, 0x35, 0xed, 0x27, 0x66, 0xc0, 0xfc, 0x79, + 0xd7, 0xf2, 0x2d, 0x7b, 0xa7, 0xed, 0x38, 0x3d, 0x4f, 0xfb, 0x0e, 0xb3, 0x51, 0xf1, 0x78, 0x50, + 0xec, 0x38, 0xf6, 0xb6, 0xb5, 0x43, 0xc5, 0x78, 0x86, 0xab, 0x5c, 0xb9, 0xb6, 0xb4, 0xe1, 0x3a, + 0x97, 0xac, 0x2e, 0x74, 0x2b, 0x38, 0x97, 0x41, 0x73, 0x23, 0x3d, 0x66, 0x42, 0xe6, 0x3d, 0x7a, + 0xf0, 0x2b, 0xb6, 0xbc, 0x30, 0x66, 0x0f, 0x4d, 0x64, 0x22, 0xe6, 0xd5, 0x40, 0xa9, 0x67, 0xda, + 0x3b, 0xfb, 0xc1, 0xcc, 0x7b, 0x70, 0x17, 0x35, 0x8e, 0x52, 0x9d, 0x7e, 0x64, 0x84, 0x9f, 0x63, + 0x27, 0x37, 0x64, 0xea, 0x93, 0xb6, 0x87, 0xff, 0x9f, 0xfd, 0x78, 0x0e, 0xcc, 0x31, 0x85, 0xaa, + 0x73, 0x60, 0xa6, 0xaa, 0xaf, 0x94, 0x37, 0xeb, 0x6d, 0xe5, 0x18, 0x92, 0x62, 0x6b, 0x73, 0x7d, + 0xbd, 0x6c, 0xd4, 0x7e, 0x58, 0x57, 0x72, 0xe8, 0xdd, 0xaa, 0x51, 0x46, 0xcf, 0x8a, 0x84, 0x1e, + 0x5a, 0x6b, 0x4d, 0xa3, 0xad, 0x37, 0x14, 0x19, 0xd9, 0xa3, 0xfa, 0xd3, 0x36, 0xca, 0x8d, 0xaa, + 0x92, 0x47, 0xff, 0x97, 0x37, 0xeb, 0x75, 0xbd, 0xad, 0x14, 0xa2, 0x20, 0x7a, 0x45, 0x94, 0x5c, + 0x29, 0xb7, 0x36, 0xcb, 0x75, 0x65, 0x06, 0x25, 0xaf, 0x6c, 0x36, 0x1a, 0xf7, 0x2a, 0x25, 0x54, + 0x44, 0xa5, 0xd9, 0x58, 0xa9, 0x55, 0xf5, 0x46, 0x5b, 0x99, 0x55, 0xaf, 0x02, 0xc7, 0x5b, 0x6d, + 0xa3, 0x5c, 0x5b, 0x5d, 0x6b, 0xaf, 0x34, 0x8d, 0xf3, 0x65, 0xa3, 0xaa, 0x00, 0x55, 0x01, 0xf3, + 0x1b, 0x46, 0x73, 0x45, 0xc7, 0xf1, 0x52, 0xca, 0x75, 0x65, 0x0e, 0x7d, 0xd5, 0x36, 0xca, 0x8d, + 0x56, 0xbd, 0xdc, 0xd6, 0x95, 0xf9, 0xb3, 0x77, 0x83, 0x52, 0x50, 0x5d, 0xb5, 0x08, 0x24, 0xbd, + 0xa1, 0x1c, 0xc3, 0xbf, 0x2d, 0x25, 0x87, 0x7e, 0x57, 0x10, 0xbf, 0x45, 0x20, 0x55, 0x75, 0x45, + 0x46, 0xbf, 0xb5, 0xb6, 0x92, 0x47, 0xbf, 0x1b, 0x88, 0xc5, 0x22, 0x90, 0xd6, 0x6a, 0x4a, 0x11, + 0xfd, 0xb6, 0xd7, 0x94, 0x19, 0xfe, 0xa6, 0xfb, 0xc4, 0x5e, 0xf8, 0xa0, 0xe4, 0x63, 0x0c, 0x0d, + 0x3f, 0x9a, 0x23, 0xe3, 0xff, 0xda, 0x2b, 0x24, 0x91, 0xbe, 0x2e, 0x99, 0x7e, 0xba, 0x46, 0xf3, + 0x96, 0xdc, 0x04, 0x5b, 0x8d, 0xaa, 0x81, 0x53, 0x7a, 0xa3, 0xba, 0xd1, 0xac, 0x35, 0xda, 0x24, + 0xd4, 0x99, 0x5e, 0xae, 0xac, 0x61, 0x9c, 0x21, 0x42, 0x70, 0xbd, 0x59, 0xd5, 0xeb, 0xf8, 0xc5, + 0x4a, 0x73, 0xb3, 0x51, 0x55, 0xb6, 0x51, 0x59, 0xe5, 0xcd, 0xf6, 0xda, 0x96, 0xa1, 0x3f, 0x75, + 0xb3, 0x66, 0xe8, 0x55, 0x65, 0x07, 0xd1, 0xa8, 0x97, 0x1b, 0xab, 0x9b, 0xe5, 0x55, 0xba, 0x5f, + 0xb8, 0xb9, 0xb1, 0xd1, 0xc4, 0x3b, 0x86, 0xbb, 0xda, 0xdf, 0xe7, 0x41, 0xa9, 0xbc, 0xef, 0x3b, + 0xdb, 0x56, 0xaf, 0xa7, 0x3d, 0x47, 0x3a, 0x7c, 0x53, 0x2c, 0x73, 0x4d, 0xf1, 0x40, 0x03, 0x0a, + 0xca, 0x0a, 0x1b, 0x4f, 0x90, 0xc0, 0xb4, 0xc3, 0xd3, 0x91, 0x33, 0xb6, 0x4c, 0x77, 0x9a, 0xc9, + 0x23, 0x71, 0xc4, 0xb5, 0x69, 0xcb, 0xc2, 0x6f, 0xe8, 0xe3, 0xd9, 0x7b, 0xc0, 0x3c, 0x4b, 0x09, + 0x87, 0x03, 0x2b, 0xaf, 0x92, 0x78, 0x61, 0x41, 0x84, 0x40, 0x12, 0x2f, 0x0c, 0x1f, 0xbc, 0x90, + 0x70, 0x7b, 0xa9, 0xb5, 0xeb, 0x48, 0x4f, 0x8f, 0x83, 0xb9, 0xaa, 0xde, 0xaa, 0x18, 0x35, 0xec, + 0xa7, 0xae, 0xe4, 0x79, 0x2f, 0x83, 0x44, 0xcb, 0x8c, 0xaf, 0x91, 0xa8, 0x52, 0x7e, 0x4f, 0xc8, + 0xde, 0x8a, 0xa7, 0x9d, 0x4e, 0x21, 0x5f, 0xf4, 0x40, 0x53, 0x48, 0xed, 0x45, 0x79, 0xb2, 0x4e, + 0xd6, 0xda, 0xdf, 0xdb, 0x33, 0xdd, 0x2b, 0x9c, 0xbf, 0xda, 0xb8, 0x7a, 0x17, 0x3f, 0xbe, 0x27, + 0x46, 0x01, 0x42, 0x26, 0x54, 0xdf, 0x75, 0xf6, 0xfa, 0x41, 0x5f, 0x4d, 0x9f, 0xb4, 0xff, 0x29, + 0x3c, 0x73, 0x2c, 0xd7, 0x96, 0x98, 0xca, 0x8c, 0x31, 0xb4, 0xff, 0x88, 0x24, 0x32, 0x8b, 0x4c, + 0x2c, 0xe6, 0xfb, 0x5d, 0x23, 0xfe, 0x3a, 0x0f, 0xae, 0xa2, 0x11, 0x5e, 0xc2, 0xf5, 0x07, 0x64, + 0xaa, 0xbe, 0x3a, 0x53, 0xcd, 0xa0, 0x06, 0xb5, 0x1c, 0x19, 0xd4, 0xcc, 0x86, 0x77, 0x5e, 0x70, + 0xc3, 0xfb, 0x6d, 0xc2, 0x87, 0x1e, 0xca, 0xb5, 0xa5, 0x21, 0x75, 0x9c, 0xce, 0xb6, 0xfc, 0xf3, + 0x24, 0x91, 0xd5, 0x56, 0x21, 0x0e, 0xbf, 0xdf, 0x75, 0xed, 0x1d, 0x39, 0xb0, 0xc8, 0xab, 0x8a, + 0xfa, 0x38, 0x50, 0xea, 0xd3, 0x14, 0x2a, 0x97, 0xd3, 0x71, 0xca, 0x65, 0x84, 0x39, 0x11, 0x44, + 0xd0, 0xee, 0xf6, 0x1d, 0xcb, 0x0e, 0xd7, 0xe5, 0x83, 0x67, 0x34, 0xef, 0xc4, 0x53, 0x87, 0x20, + 0xde, 0x1f, 0x7e, 0x88, 0x62, 0xc7, 0xe6, 0x99, 0xd8, 0xb1, 0x48, 0x88, 0x3e, 0xdc, 0xc3, 0xb7, + 0x18, 0xed, 0xbb, 0xc4, 0xe1, 0x45, 0x32, 0xd8, 0xa4, 0xb3, 0x4f, 0x06, 0xa5, 0xa0, 0x7c, 0x64, + 0xdd, 0x35, 0xeb, 0xf5, 0xf2, 0x7a, 0x99, 0x2c, 0x54, 0x36, 0x37, 0xf4, 0x46, 0xb9, 0xa6, 0xe4, + 0xd0, 0x40, 0x57, 0x5f, 0x6f, 0xb5, 0x37, 0xab, 0xb5, 0xa6, 0x22, 0xe1, 0x27, 0x94, 0xa9, 0xb2, + 0xb1, 0xa1, 0xc8, 0xda, 0x1b, 0x67, 0xc0, 0xcc, 0xaa, 0xd9, 0xeb, 0x41, 0xf7, 0x8a, 0xf6, 0x4d, + 0x09, 0x28, 0xc1, 0xec, 0x60, 0xdd, 0xb4, 0xad, 0x6d, 0xe8, 0xf9, 0xc9, 0x0b, 0x15, 0xef, 0x13, + 0xbe, 0xda, 0x8c, 0x96, 0xb1, 0x34, 0x48, 0x3f, 0x46, 0xc7, 0x6f, 0x05, 0x79, 0xcb, 0xde, 0x76, + 0xe8, 0x72, 0xc5, 0xa0, 0xbf, 0x4d, 0xf0, 0x31, 0xde, 0x36, 0xc0, 0x19, 0x05, 0x6f, 0x37, 0x13, + 0xe4, 0x22, 0xfb, 0x55, 0x8b, 0x77, 0xe4, 0xc1, 0x42, 0xc0, 0x44, 0xcd, 0xee, 0xc2, 0xfb, 0xd9, + 0x6d, 0xd0, 0x9f, 0xc9, 0x8b, 0x06, 0x18, 0x1a, 0xac, 0x0f, 0x26, 0x15, 0x23, 0xd2, 0x36, 0x00, + 0x1d, 0xd3, 0x87, 0x3b, 0x8e, 0x6b, 0x85, 0x6b, 0x11, 0x8f, 0x4b, 0x43, 0xad, 0x42, 0xbe, 0xbe, + 0x62, 0x30, 0x74, 0xd4, 0x27, 0x81, 0x39, 0x18, 0x46, 0x74, 0x0c, 0xb6, 0x49, 0x13, 0xf1, 0x62, + 0xf3, 0x6b, 0x7f, 0x24, 0x14, 0xc7, 0x48, 0xa4, 0x9a, 0xe9, 0x30, 0xdb, 0x1a, 0xaf, 0xeb, 0xd9, + 0x6c, 0xac, 0x97, 0x8d, 0xd6, 0x5a, 0xb9, 0x5e, 0xaf, 0x35, 0x56, 0xc3, 0x80, 0xc5, 0x2a, 0x58, + 0xac, 0x36, 0xcf, 0x37, 0x98, 0x88, 0xd2, 0x79, 0x6d, 0x03, 0x94, 0x02, 0x79, 0x0d, 0x3b, 0x45, + 0xc5, 0xca, 0x8c, 0x9e, 0xa2, 0x62, 0x92, 0x90, 0x69, 0x68, 0x75, 0x42, 0xd7, 0x7a, 0xfc, 0x5f, + 0xfb, 0x2d, 0x13, 0x14, 0xb0, 0x3f, 0x8b, 0xf6, 0x2e, 0x3c, 0x2f, 0xee, 0xf7, 0xcc, 0x0e, 0xd4, + 0xf6, 0x52, 0xac, 0x84, 0x07, 0x77, 0xed, 0x4a, 0x07, 0xee, 0xda, 0xc5, 0x7f, 0xe9, 0x88, 0x71, + 0x72, 0x98, 0x0f, 0x8d, 0x41, 0xb2, 0xf0, 0x21, 0x7f, 0x12, 0x3d, 0x9b, 0x88, 0xeb, 0x0d, 0x65, + 0x33, 0x46, 0x25, 0xe3, 0x79, 0xca, 0xe2, 0x12, 0x95, 0x24, 0x8e, 0xb2, 0x6f, 0xf1, 0x5f, 0xc9, + 0x83, 0x42, 0xab, 0xdf, 0xb3, 0x7c, 0xed, 0x17, 0xa4, 0x89, 0x60, 0x46, 0xee, 0x47, 0x96, 0x47, + 0xde, 0x8f, 0x1c, 0xf9, 0x4b, 0xe6, 0x05, 0xfc, 0x25, 0xdb, 0xf0, 0x7e, 0x9f, 0xf7, 0x97, 0xbc, + 0x9d, 0x4e, 0xdb, 0x88, 0xb7, 0xe5, 0xc3, 0x87, 0x88, 0x14, 0x57, 0x6b, 0xc8, 0x6d, 0x16, 0x67, + 0x1f, 0x43, 0x83, 0xea, 0x03, 0x50, 0x5c, 0x6e, 0xb6, 0xdb, 0xcd, 0x75, 0xe5, 0x18, 0x9e, 0x7e, + 0x35, 0x37, 0x48, 0x88, 0xe3, 0x5a, 0xa3, 0xa1, 0x1b, 0xdc, 0x8c, 0x8b, 0xbf, 0x2c, 0x33, 0x71, + 0x82, 0xc5, 0x97, 0x9d, 0xa5, 0x7a, 0x89, 0x2d, 0x82, 0xc7, 0xf3, 0x93, 0xbd, 0x72, 0xfd, 0x9c, + 0x0c, 0x0a, 0xeb, 0xd0, 0xdd, 0x81, 0xda, 0x33, 0x52, 0x38, 0xd8, 0x6d, 0x5b, 0xae, 0x47, 0x2e, + 0x45, 0x88, 0x1c, 0xec, 0xd8, 0x34, 0xf5, 0x06, 0xb0, 0xe0, 0xc1, 0x8e, 0x63, 0x77, 0x83, 0x4c, + 0xa4, 0x3f, 0xe2, 0x13, 0xb5, 0x97, 0xa5, 0x84, 0x0c, 0x33, 0x3a, 0x11, 0x2f, 0xb9, 0x34, 0xc0, + 0x0c, 0x2b, 0x35, 0x7b, 0x60, 0xbe, 0x2d, 0xa3, 0x8f, 0xfa, 0x57, 0xb4, 0x97, 0x09, 0x7b, 0x3e, + 0xde, 0x02, 0x8a, 0x17, 0x82, 0x7b, 0xd1, 0xe4, 0xd8, 0xfe, 0x98, 0xe6, 0x51, 0x97, 0xc1, 0x09, + 0x0f, 0xf6, 0x60, 0xc7, 0x87, 0x5d, 0xd4, 0x74, 0x8d, 0x91, 0x9d, 0xc2, 0xc1, 0xec, 0xda, 0xef, + 0xb1, 0x00, 0xde, 0xc9, 0x03, 0x78, 0xe3, 0x10, 0x51, 0xa2, 0x0a, 0xc5, 0xcf, 0x4d, 0x50, 0x35, + 0x5a, 0x3d, 0x27, 0x34, 0x7c, 0x83, 0x67, 0xf4, 0x6e, 0xd7, 0xdf, 0xeb, 0xe1, 0x77, 0xf4, 0x68, + 0x70, 0xf0, 0xac, 0x2e, 0x81, 0x19, 0xd3, 0xbe, 0x82, 0x5f, 0xe5, 0x13, 0x6a, 0x1d, 0x64, 0xd2, + 0x5e, 0x19, 0x22, 0x7f, 0x17, 0x87, 0xfc, 0x23, 0xc5, 0xd8, 0xcd, 0x1e, 0xf8, 0x1f, 0x9d, 0x01, + 0x85, 0x0d, 0xd3, 0xf3, 0xa1, 0xf6, 0xbf, 0x65, 0x51, 0xe4, 0x6f, 0x04, 0x8b, 0xdb, 0x4e, 0x67, + 0xdf, 0x83, 0x5d, 0xbe, 0x51, 0x0e, 0xa4, 0x4e, 0x02, 0x73, 0x1c, 0x98, 0x9d, 0x26, 0x52, 0xb2, + 0x81, 0x0b, 0xec, 0x81, 0x74, 0x7c, 0xf5, 0xa2, 0xb7, 0x61, 0xba, 0x7e, 0x73, 0x1b, 0xa7, 0x85, + 0x57, 0x2f, 0xb2, 0x89, 0x1c, 0xf4, 0xc5, 0x04, 0xe8, 0x67, 0xe2, 0xa1, 0x2f, 0x09, 0x40, 0xaf, + 0x96, 0x41, 0x69, 0xdb, 0xea, 0x41, 0xfc, 0xc1, 0x2c, 0xfe, 0x60, 0xd8, 0x98, 0x84, 0x65, 0x1f, + 0x8e, 0x49, 0x2b, 0x56, 0x0f, 0x1a, 0xe1, 0x67, 0xc1, 0x44, 0x06, 0x44, 0x13, 0x99, 0x3a, 0x39, + 0x09, 0x87, 0x0c, 0x2f, 0xdb, 0xdc, 0x83, 0xc1, 0xc6, 0xb7, 0x4d, 0x8f, 0xa5, 0x77, 0x4d, 0xdf, + 0xc4, 0x60, 0xcc, 0x1b, 0xf8, 0x3f, 0xef, 0x93, 0x2d, 0x0f, 0xfa, 0x64, 0x3f, 0x57, 0x4e, 0xd7, + 0x23, 0x06, 0xcc, 0xc6, 0xb4, 0xa8, 0x0b, 0x01, 0x40, 0xc4, 0x52, 0x0c, 0x9f, 0x11, 0x30, 0x1d, + 0xd3, 0x85, 0xfe, 0x06, 0xeb, 0x05, 0x5d, 0x30, 0xf8, 0x44, 0x7c, 0x08, 0xc7, 0x6b, 0x99, 0x7b, + 0xe4, 0x6a, 0xc5, 0x0a, 0x7a, 0x47, 0x0f, 0x57, 0x1c, 0x48, 0x8f, 0xfa, 0xdf, 0xc2, 0xa4, 0xfb, + 0xdf, 0x61, 0x75, 0xcc, 0xbe, 0x19, 0xbe, 0x26, 0x0f, 0xe4, 0xca, 0xbe, 0xff, 0x80, 0xee, 0x7e, + 0xbf, 0x27, 0xec, 0x63, 0x4e, 0xfb, 0xb3, 0x7d, 0xff, 0x68, 0x7b, 0xdf, 0x94, 0x5a, 0x22, 0xe6, + 0xcb, 0x1e, 0x57, 0xb7, 0xec, 0x75, 0xe4, 0x6d, 0x72, 0x78, 0x34, 0xea, 0x39, 0xb9, 0xc3, 0x9b, + 0xe6, 0x1a, 0xe9, 0x9f, 0x98, 0x9e, 0x21, 0x7c, 0x0e, 0x3a, 0x9e, 0x3c, 0x77, 0xfb, 0x03, 0x76, + 0x6d, 0xc5, 0xa2, 0x9c, 0x37, 0xc8, 0x83, 0xf6, 0x72, 0xe1, 0x03, 0xa3, 0x44, 0x6c, 0x89, 0xc7, + 0x78, 0xd2, 0xd9, 0x54, 0xaf, 0x16, 0x3a, 0x36, 0x9a, 0x50, 0x6c, 0xf6, 0x80, 0xfd, 0x1d, 0x7b, + 0x4c, 0xa7, 0x7c, 0x68, 0xc4, 0xb4, 0x57, 0x09, 0x2f, 0xe8, 0x93, 0x6a, 0x8f, 0xd8, 0xab, 0x4f, + 0x27, 0x6f, 0x31, 0x47, 0xb1, 0xc4, 0x82, 0xa7, 0x70, 0x57, 0xb4, 0x0c, 0x8a, 0x64, 0xe1, 0x57, + 0x7b, 0xb3, 0x70, 0x13, 0x41, 0xbd, 0x11, 0x7f, 0x7c, 0x27, 0x7c, 0x4e, 0xb3, 0xe6, 0xc0, 0x1d, + 0xf3, 0xc9, 0xa7, 0x3a, 0xe6, 0xc3, 0x47, 0x60, 0x11, 0x68, 0x47, 0xa4, 0x8e, 0x19, 0x4f, 0x27, + 0xd3, 0xb4, 0xb0, 0xa1, 0x0c, 0x65, 0x8f, 0xf7, 0xf3, 0x0b, 0x60, 0x9e, 0x14, 0x4d, 0xce, 0x17, + 0x6a, 0xef, 0x91, 0xbe, 0x7f, 0x50, 0x57, 0x1b, 0x60, 0xfe, 0x32, 0x66, 0x9b, 0x84, 0x97, 0xa3, + 0x2b, 0x17, 0x37, 0x27, 0xae, 0x7b, 0x90, 0x7a, 0x06, 0xb7, 0x46, 0x73, 0xdf, 0x23, 0x19, 0x93, + 0x0d, 0x16, 0x72, 0x78, 0xa2, 0x88, 0x8d, 0x2c, 0x36, 0x49, 0x3d, 0x05, 0x8a, 0x97, 0x2c, 0x78, + 0xb9, 0xd6, 0xa5, 0xd6, 0x2d, 0x7d, 0xd2, 0x7e, 0x5d, 0xd8, 0x67, 0x92, 0x85, 0x9b, 0xf2, 0x92, + 0xad, 0x16, 0x8a, 0x79, 0x4e, 0x8e, 0x64, 0x6b, 0x0a, 0xd1, 0x80, 0x24, 0x72, 0x4f, 0x3d, 0x0d, + 0xe5, 0x5f, 0x49, 0xa1, 0x88, 0x71, 0x86, 0x33, 0x1f, 0x84, 0x2f, 0xf1, 0xac, 0x39, 0x11, 0x40, + 0x54, 0xfe, 0x44, 0xfa, 0x7c, 0xb1, 0xc8, 0x70, 0x23, 0x8a, 0xce, 0x5e, 0xf2, 0xaf, 0x93, 0xc1, + 0x6c, 0x0b, 0xfa, 0x2b, 0x16, 0xec, 0x75, 0x3d, 0xcd, 0x3d, 0xbc, 0x69, 0x74, 0x2b, 0x28, 0x6e, + 0x63, 0x62, 0xa3, 0x36, 0x27, 0x69, 0x36, 0xed, 0x35, 0x92, 0xa8, 0x1f, 0x10, 0x5d, 0x7d, 0x0b, + 0xb8, 0x9d, 0x08, 0x4c, 0x62, 0xa7, 0xe9, 0x92, 0x4b, 0x9e, 0xc2, 0x55, 0x49, 0x32, 0x98, 0xc7, + 0xdb, 0xff, 0xd0, 0x2f, 0xf7, 0xac, 0x1d, 0x9b, 0xbd, 0x5d, 0x7d, 0xec, 0x16, 0xa2, 0x3e, 0x1a, + 0x14, 0x4c, 0x44, 0x8d, 0xba, 0xbb, 0x69, 0x43, 0x3b, 0x4f, 0x5c, 0x9e, 0x41, 0x32, 0xa6, 0xb8, + 0x98, 0x24, 0x52, 0xec, 0x80, 0xe7, 0x29, 0x5e, 0x4c, 0x32, 0xb2, 0xf0, 0xec, 0x11, 0xfb, 0x9a, + 0x0c, 0x4e, 0x52, 0x06, 0xce, 0x41, 0xd7, 0xb7, 0x3a, 0x66, 0x8f, 0x20, 0xf7, 0xc2, 0xdc, 0x24, + 0xa0, 0x5b, 0x03, 0x0b, 0x97, 0x58, 0xb2, 0x14, 0xc2, 0xb3, 0x43, 0x21, 0xe4, 0x18, 0x30, 0xf8, + 0x0f, 0x53, 0x5c, 0xf0, 0xc0, 0x49, 0x95, 0xa3, 0x39, 0xc5, 0x0b, 0x1e, 0x84, 0x99, 0xc8, 0x1e, + 0xe2, 0x97, 0xd0, 0xa0, 0x9a, 0x51, 0xf7, 0xf9, 0x45, 0x61, 0x6c, 0x37, 0xc1, 0x1c, 0xc6, 0x92, + 0x7c, 0x48, 0x97, 0x21, 0x12, 0x94, 0x38, 0xec, 0x77, 0xe8, 0x45, 0xf7, 0xe1, 0xb7, 0x06, 0x4b, + 0x47, 0x3b, 0x0f, 0x40, 0xf4, 0x8a, 0xed, 0xa4, 0x73, 0x71, 0x9d, 0xb4, 0x24, 0xd6, 0x49, 0xbf, + 0x49, 0x38, 0xcc, 0xe1, 0x70, 0xb6, 0x0f, 0xaf, 0x1e, 0x62, 0x01, 0xee, 0x46, 0x97, 0x9e, 0xbd, + 0x5e, 0xbc, 0x92, 0xea, 0x45, 0x75, 0xbf, 0xdf, 0xb3, 0x3a, 0x68, 0x3e, 0xf5, 0xc9, 0x89, 0xcc, + 0xa7, 0xd8, 0xfe, 0x40, 0x1e, 0xe8, 0x0f, 0x0e, 0x61, 0x49, 0xdf, 0x04, 0x8e, 0x93, 0x22, 0x2a, + 0x21, 0x5b, 0x05, 0x12, 0xc4, 0x6d, 0x20, 0x99, 0x8f, 0xda, 0x2e, 0xa8, 0x04, 0xa1, 0x10, 0xc6, + 0x58, 0xfa, 0x4c, 0x67, 0xec, 0xa6, 0x55, 0x90, 0x38, 0xce, 0xa6, 0x70, 0x24, 0x2b, 0x4f, 0xac, + 0xdd, 0xcd, 0x7e, 0x17, 0x69, 0xc7, 0x97, 0xf3, 0x93, 0x18, 0x11, 0x9e, 0x42, 0x3d, 0x4d, 0xe5, + 0xd8, 0x25, 0x8d, 0xa8, 0xc8, 0xb0, 0x1f, 0x69, 0xc3, 0xfb, 0xfd, 0xb5, 0x63, 0xc4, 0x2f, 0x55, + 0xbd, 0x19, 0x1c, 0xbf, 0x60, 0x76, 0x2e, 0xee, 0xb8, 0xce, 0x3e, 0xbe, 0xb5, 0xdd, 0xa1, 0xd7, + 0xbf, 0xaf, 0x1d, 0x33, 0x06, 0x5f, 0xa8, 0xb7, 0x05, 0xa6, 0x43, 0x61, 0x94, 0xe9, 0xb0, 0x76, + 0x8c, 0x1a, 0x0f, 0xea, 0x63, 0xc2, 0x4e, 0xa7, 0x98, 0xd8, 0xe9, 0xac, 0x1d, 0x0b, 0xba, 0x1d, + 0xb5, 0x0a, 0x4a, 0x5d, 0xeb, 0x12, 0xde, 0xaa, 0xc6, 0xb3, 0xae, 0x51, 0x41, 0x87, 0xaa, 0xd6, + 0x25, 0xb2, 0xb1, 0xbd, 0x76, 0xcc, 0x08, 0xbf, 0x54, 0x57, 0xc1, 0x2c, 0xde, 0x16, 0xc0, 0x64, + 0x4a, 0xa9, 0x02, 0x0a, 0xad, 0x1d, 0x33, 0xa2, 0x6f, 0x91, 0xf5, 0x91, 0xc7, 0xe7, 0xae, 0xef, + 0x0a, 0xb6, 0xdb, 0x73, 0xa9, 0xb6, 0xdb, 0x91, 0x2c, 0xc8, 0x86, 0xfb, 0x29, 0x50, 0xe8, 0x60, + 0x09, 0x4b, 0x54, 0xc2, 0xe4, 0x51, 0xbd, 0x13, 0xe4, 0xf7, 0x4c, 0x37, 0x98, 0x3c, 0xdf, 0x38, + 0x9a, 0xee, 0xba, 0xe9, 0x5e, 0x44, 0x08, 0xa2, 0xaf, 0x96, 0x67, 0x40, 0x01, 0x0b, 0x2e, 0xfc, + 0xa3, 0xbd, 0x2d, 0x4f, 0xcc, 0x90, 0x8a, 0x63, 0xa3, 0x61, 0xbf, 0xed, 0x04, 0x87, 0xd3, 0x7f, + 0x3d, 0x37, 0x19, 0x0b, 0xf2, 0x2a, 0xe6, 0x3a, 0x15, 0xdb, 0x7a, 0xc6, 0x3e, 0xbc, 0x07, 0x5e, + 0xa1, 0x4b, 0xa2, 0xc3, 0x5e, 0xa9, 0x67, 0x00, 0xf0, 0xe9, 0x49, 0xbd, 0x30, 0x88, 0x29, 0x93, + 0x12, 0x2d, 0x1f, 0x14, 0x46, 0x3b, 0xaa, 0xfc, 0xde, 0x18, 0xa6, 0xcb, 0xa0, 0x20, 0xe2, 0x67, + 0xe0, 0x3d, 0xcb, 0x66, 0xea, 0x1c, 0x3c, 0xa6, 0xec, 0x94, 0xd2, 0x1a, 0x35, 0x23, 0xd8, 0xcb, + 0xbe, 0x6f, 0x7a, 0x4b, 0x9e, 0xdc, 0x28, 0x41, 0x4e, 0x40, 0xeb, 0xf7, 0x5b, 0x5e, 0x74, 0x7f, + 0xb3, 0xf6, 0xb9, 0x89, 0x28, 0xcd, 0x90, 0x01, 0x47, 0x1e, 0x3a, 0xe0, 0x1c, 0x08, 0x10, 0x94, + 0x1f, 0x11, 0x20, 0xa8, 0x90, 0x6e, 0xe5, 0xf0, 0xa3, 0xac, 0xfe, 0x6c, 0xf0, 0xfa, 0x73, 0x47, + 0x0c, 0x40, 0xc3, 0xe4, 0x32, 0x11, 0xfb, 0xe6, 0x5d, 0xa1, 0xa6, 0xb4, 0x38, 0x4d, 0xb9, 0x6b, + 0x7c, 0x46, 0xb2, 0xd7, 0x96, 0x0f, 0xe7, 0xc1, 0x55, 0x11, 0x33, 0x0d, 0x78, 0x99, 0x2a, 0xca, + 0x1f, 0x4e, 0x44, 0x51, 0xd2, 0x3b, 0x3a, 0x67, 0xad, 0x31, 0xbf, 0x2d, 0x7c, 0x6e, 0x7f, 0x10, + 0xa8, 0x50, 0x36, 0x31, 0xca, 0x72, 0x0a, 0x14, 0x49, 0x0f, 0x43, 0xa1, 0xa1, 0x4f, 0x29, 0xbb, + 0x1b, 0xb1, 0xd3, 0xfe, 0xa2, 0xbc, 0x4d, 0x41, 0x7f, 0xe8, 0xba, 0x46, 0x7b, 0xdf, 0xb5, 0x6b, + 0xb6, 0xef, 0x68, 0xff, 0x7d, 0x22, 0x8a, 0x13, 0x7a, 0xc3, 0xc9, 0xe3, 0x78, 0xc3, 0x8d, 0xb5, 0xca, 0x11, 0xd4, 0xe0, 0x48, 0x56, 0x39, 0x62, 0x0a, 0xcf, 0x1e, 0xbf, 0x77, 0xca, 0xe0, 0x14, 0x9d, 0x6c, 0x2d, 0xf3, 0x16, 0xa2, 0x76, 0xef, 0x24, 0x80, 0x3c, 0x19, 0x98, 0x49, 0xd4, 0x8f, 0x1e, 0x3f, 0xf0, 0x51, 0x0a, 0x12, 0x6f, 0x0c, 0xe5, 0xa6, 0x83, 0x03, 0x1c, 0x4e, 0x04, 0x29, 0xb1, 0x8b, 0x42, 0x53, 0xb0, 0x91, 0x3d, 0x66, 0x2f, 0x96, 0x41, 0x91, 0xc4, 0x48, 0xd0, 0x36, 0x33, 0x71, 0x98, 0xe0, 0xef, 0x67, 0x11, 0xd8, 0x91, 0x23, 0xdc, 0x64, 0x16, 0x3f, 0x22, 0xcd, 0x5e, 0xdc, 0x50, 0x56, 0xa6, 0xe0, 0x42, 0x28, 0x81, 0xb9, 0x16, 0xf4, 0x2b, 0xa6, 0xeb, 0x5a, - 0xe6, 0xce, 0xa4, 0x3c, 0xbe, 0x45, 0xbd, 0x87, 0xb5, 0x6f, 0xe7, 0x44, 0xcf, 0xb2, 0x87, 0x0b, + 0xe6, 0xce, 0xa4, 0x3c, 0xbe, 0x45, 0xbd, 0x87, 0xb5, 0xef, 0xe4, 0x44, 0xcf, 0xb2, 0x87, 0x0b, 0xe1, 0x01, 0xab, 0x31, 0x51, 0xc0, 0x5f, 0x2f, 0x74, 0x5e, 0x7d, 0x14, 0xb5, 0x29, 0x78, 0x6c, 0x4b, 0x60, 0x26, 0x88, 0x83, 0x71, 0x2b, 0x17, 0x1b, 0x65, 0xd7, 0xdf, 0x0b, 0x8e, 0xc1, 0xe0, 0xff, 0x07, 0xe3, 0x2f, 0x68, 0xaf, 0x48, 0xe9, 0x28, 0x9f, 0x1c, 0xc4, 0x23, 0x5d, 0x1b, 0x4b, @@ -78358,18 +78391,18 @@ var fileDescriptor_8261c968b2e6f45c = []byte{ 0x07, 0x0e, 0x24, 0x32, 0x39, 0xf3, 0x3e, 0x45, 0x0f, 0x9c, 0x54, 0x78, 0xf6, 0x78, 0xbc, 0x9b, 0xe0, 0x81, 0xdb, 0x83, 0xf6, 0x06, 0x19, 0xc8, 0xab, 0xd0, 0x9f, 0xb6, 0x15, 0xf9, 0x76, 0xe1, 0xf0, 0xa2, 0x9c, 0xc0, 0x30, 0xcf, 0x4b, 0xab, 0x70, 0x32, 0x0d, 0x48, 0x2c, 0xae, 0xa8, 0x10, - 0x03, 0xd9, 0xa3, 0xf6, 0x7e, 0x82, 0x1a, 0xd9, 0x5c, 0xf8, 0xe1, 0x09, 0xf4, 0xaa, 0xd3, 0x5d, + 0x03, 0xd9, 0xa3, 0xf6, 0x7e, 0x82, 0x1a, 0xd9, 0x5c, 0xf8, 0x91, 0x09, 0xf4, 0xaa, 0xd3, 0x5d, 0xf8, 0x08, 0x04, 0x88, 0x69, 0x1c, 0x55, 0x7b, 0x1b, 0x56, 0x78, 0xf6, 0xc8, 0xbd, 0x54, 0xc6, 0x97, 0x98, 0x55, 0x76, 0x61, 0xe7, 0x22, 0xec, 0xb2, 0x97, 0x65, 0x8f, 0x0b, 0xdd, 0x69, 0x30, 0xd3, 0x21, 0xd4, 0x30, 0x78, 0x25, 0x23, 0x78, 0xe4, 0x6f, 0x16, 0x4a, 0xbc, 0x3b, 0x8b, 0xef, 0x88, 0xc8, 0xe7, 0x13, 0xc1, 0x45, 0xec, 0xc2, 0x2b, 0x81, 0xe2, 0xa7, 0x60, 0xb6, 0x90, 0x59, - 0x46, 0xad, 0xe3, 0xd8, 0xda, 0x7f, 0x3b, 0x3c, 0x2c, 0xd7, 0x81, 0x59, 0xab, 0xe3, 0xd8, 0x38, + 0x46, 0xad, 0xe3, 0xd8, 0xda, 0x7f, 0x3d, 0x3c, 0x2c, 0xd7, 0x81, 0x59, 0xab, 0xe3, 0xd8, 0x38, 0x04, 0x5c, 0x70, 0x08, 0x28, 0x4c, 0x08, 0xde, 0xea, 0x7b, 0xce, 0x7d, 0x16, 0xdd, 0x35, 0x8f, 0x12, 0xc6, 0x35, 0x26, 0x10, 0xeb, 0x47, 0x65, 0x4c, 0x0c, 0x29, 0x3b, 0x7b, 0xc8, 0x3e, 0x15, 0x79, 0xb7, 0x91, 0xae, 0xf0, 0x01, 0xb1, 0x0a, 0x3c, 0xce, 0x70, 0xc6, 0xd6, 0xe2, 0x48, 0x86, 0xb3, 0x04, 0x06, 0xa6, 0x70, 0x13, 0x61, 0x84, 0x63, 0xe6, 0x6b, 0xc0, 0x87, 0x40, 0x67, 0x72, 0xe6, 0xe1, 0x98, 0xe8, 0x1c, 0x8d, 0x89, 0xf8, 0x11, 0x1a, 0x9e, 0x9e, 0x5a, 0x3c, 0xda, 0x7f, - 0x9f, 0x04, 0x38, 0x77, 0x8c, 0xe3, 0xaf, 0x40, 0xbc, 0x15, 0xb4, 0xb7, 0x4a, 0xa2, 0x21, 0x50, + 0x9b, 0x04, 0x38, 0x77, 0x8c, 0xe3, 0xaf, 0x40, 0xbc, 0x15, 0xb4, 0xb7, 0x4a, 0xa2, 0x21, 0x50, 0x0e, 0x48, 0x10, 0x51, 0x99, 0x08, 0x82, 0x6f, 0x12, 0x8a, 0x4d, 0x22, 0x52, 0x7e, 0xf6, 0x00, 0xbe, 0x40, 0x06, 0x8b, 0xd8, 0x47, 0xa0, 0x07, 0x4d, 0x97, 0x74, 0x94, 0x13, 0x71, 0x94, 0x7f, 0xb7, 0x70, 0x80, 0x1f, 0x5e, 0x0e, 0x11, 0x1f, 0x13, 0x81, 0x42, 0x2c, 0xba, 0x8f, 0x20, 0x0b, @@ -78397,8 +78430,8 @@ var fileDescriptor_8261c968b2e6f45c = []byte{ 0x6e, 0xf5, 0xf2, 0x08, 0xb7, 0xfa, 0x94, 0x21, 0x5c, 0xd2, 0xae, 0x04, 0x32, 0x52, 0x46, 0x95, 0x9c, 0xfa, 0x4a, 0x60, 0x72, 0xf9, 0xd9, 0x63, 0xfc, 0x55, 0x62, 0xcd, 0x45, 0x07, 0x4c, 0x7f, 0x7e, 0x22, 0x28, 0x33, 0xb3, 0x7f, 0x99, 0x9f, 0xfd, 0x1f, 0x02, 0xdb, 0x71, 0x6d, 0xc4, 0x51, - 0x07, 0x47, 0xb3, 0xb7, 0x11, 0x8f, 0xee, 0x80, 0xe8, 0x0f, 0xe7, 0xc1, 0x71, 0xda, 0x89, 0x7c, - 0x2f, 0x40, 0x9c, 0xf2, 0x1c, 0x1e, 0xd7, 0x49, 0x8e, 0x40, 0x79, 0x52, 0x0b, 0x52, 0x69, 0x96, + 0x07, 0x47, 0xb3, 0xb7, 0x11, 0x8f, 0xee, 0x80, 0xe8, 0x8f, 0xe4, 0xc1, 0x71, 0xda, 0x89, 0x7c, + 0x3f, 0x40, 0x9c, 0xf2, 0x1c, 0x1e, 0xd7, 0x49, 0x8e, 0x40, 0x79, 0x52, 0x0b, 0x52, 0x69, 0x96, 0x32, 0x05, 0xd8, 0x9b, 0xca, 0xea, 0x46, 0x51, 0xbf, 0xbf, 0x6f, 0xda, 0x5d, 0xf1, 0x70, 0xbf, 0x23, 0x80, 0x0f, 0xd6, 0x1a, 0x65, 0x7e, 0xad, 0x71, 0xc8, 0xca, 0x64, 0xea, 0x9d, 0x6b, 0x2c, 0x32, 0xc2, 0xee, 0xd4, 0x77, 0xae, 0xe3, 0xcb, 0xce, 0x1e, 0xa5, 0xf7, 0xca, 0x20, 0xdf, 0x72, @@ -78410,20 +78443,20 @@ var fileDescriptor_8261c968b2e6f45c = []byte{ 0xac, 0x1c, 0xc5, 0x97, 0x4d, 0xdb, 0xa0, 0xc8, 0x01, 0x74, 0xc2, 0xd2, 0xb4, 0x1b, 0x54, 0x42, 0xd9, 0x53, 0x89, 0xd3, 0x79, 0xa2, 0x05, 0x7d, 0x62, 0x54, 0x36, 0x83, 0x2b, 0x92, 0x9e, 0x3e, 0x91, 0x88, 0x9d, 0xe1, 0x85, 0x3a, 0xf2, 0xc0, 0x0d, 0x4c, 0x1f, 0x60, 0xc1, 0x59, 0xe7, 0xc1, - 0xf9, 0x81, 0x78, 0x01, 0xf1, 0x4c, 0x4e, 0x04, 0xa6, 0xb7, 0x87, 0x30, 0x6d, 0x70, 0x30, 0xdd, + 0xf9, 0xa1, 0x78, 0x01, 0xf1, 0x4c, 0x4e, 0x04, 0xa6, 0xb7, 0x87, 0x30, 0x6d, 0x70, 0x30, 0xdd, 0x39, 0x26, 0x17, 0xd9, 0x03, 0xf6, 0x53, 0x05, 0x70, 0x9c, 0x4c, 0xfa, 0xcb, 0x76, 0x97, 0x46, 0x58, 0x7d, 0xb3, 0x74, 0xc4, 0x9b, 0x6d, 0x07, 0x43, 0xb0, 0x72, 0xb1, 0x9c, 0x0b, 0x03, 0xb1, 0x9c, 0xd5, 0x65, 0x12, 0xce, 0x15, 0x75, 0xa2, 0x78, 0xa7, 0x6d, 0x54, 0x98, 0x09, 0x2c, 0x7b, 0xdc, 0xe5, 0x86, 0xdf, 0xf1, 0xf7, 0x88, 0xce, 0x88, 0xdf, 0x23, 0xfa, 0xbb, 0xe9, 0xd6, 0xed, - 0x70, 0xd1, 0x03, 0x02, 0xcf, 0xd8, 0x76, 0x4a, 0xb1, 0xa2, 0x27, 0xc0, 0xdd, 0x7f, 0x0e, 0x77, + 0x70, 0xd1, 0x03, 0x02, 0xcf, 0xd8, 0x76, 0x4a, 0xb1, 0xa2, 0x27, 0xc0, 0xdd, 0x7f, 0x0c, 0x77, 0xb2, 0x28, 0x82, 0xc8, 0x98, 0xee, 0x64, 0x98, 0xc0, 0x51, 0xba, 0x93, 0x8d, 0x62, 0x20, 0x7b, - 0x1c, 0x7f, 0xb7, 0x40, 0x77, 0xf3, 0x71, 0xbb, 0xd1, 0xfe, 0x44, 0xca, 0x7c, 0x94, 0xfe, 0x4e, + 0x1c, 0x7f, 0xb7, 0x40, 0x77, 0xf3, 0x71, 0xbb, 0xd1, 0xfe, 0x44, 0xca, 0x7c, 0x94, 0xfe, 0x6e, 0x2e, 0x95, 0xff, 0x33, 0xe6, 0x2b, 0x79, 0x98, 0x4e, 0xe3, 0xd1, 0x9c, 0x44, 0x6e, 0x0a, 0xeb, 0x46, 0x12, 0xf6, 0x45, 0x3f, 0x6f, 0x75, 0xfd, 0xdd, 0x09, 0x9d, 0xe8, 0xb8, 0x8c, 0x68, 0xd1, - 0x78, 0xf5, 0xe4, 0x41, 0xfb, 0xd7, 0x5c, 0xaa, 0x10, 0x52, 0xa1, 0x48, 0x30, 0x5b, 0x31, 0x22, + 0x78, 0xf5, 0xe4, 0x41, 0xfb, 0x97, 0x5c, 0xaa, 0x10, 0x52, 0xa1, 0x48, 0x30, 0x5b, 0x31, 0x22, 0x4e, 0x11, 0xf8, 0x29, 0x91, 0xde, 0x14, 0x35, 0xfa, 0x9c, 0xd5, 0x85, 0xce, 0x03, 0x50, 0xa3, - 0x31, 0x5f, 0x93, 0xd3, 0xe8, 0x24, 0x72, 0xff, 0x49, 0x35, 0x3a, 0x14, 0xc9, 0x84, 0x34, 0x3a, - 0x91, 0x5e, 0xf6, 0x32, 0x7e, 0xc5, 0x3c, 0x9d, 0x48, 0xd5, 0x2d, 0xfb, 0xa2, 0xf6, 0x4f, 0x45, + 0x31, 0x5f, 0x93, 0xd3, 0xe8, 0x24, 0x72, 0xff, 0x41, 0x35, 0x3a, 0x14, 0xc9, 0x84, 0x34, 0x3a, + 0x91, 0x5e, 0xf6, 0x32, 0x7e, 0xc5, 0x3c, 0x9d, 0x48, 0xd5, 0x2d, 0xfb, 0xa2, 0xf6, 0x8f, 0x45, 0xa0, 0x04, 0x71, 0x84, 0xfd, 0x5d, 0x1a, 0x0b, 0xe6, 0xc3, 0xc2, 0x77, 0xa3, 0x8c, 0x11, 0xef, 0x85, 0x0f, 0x27, 0x55, 0x38, 0x10, 0x4e, 0xaa, 0x0c, 0x16, 0x2c, 0xdb, 0x87, 0xae, 0x6d, 0xf6, 0x56, 0x7a, 0xe6, 0x8e, 0x77, 0x7a, 0x66, 0xe8, 0xe5, 0x75, 0x35, 0x26, 0x8f, 0xc1, 0x7f, 0xc1, @@ -78451,8 +78484,8 @@ var fileDescriptor_8261c968b2e6f45c = []byte{ 0xbc, 0x30, 0x99, 0x22, 0xf8, 0x9a, 0x18, 0x83, 0x53, 0x58, 0x01, 0x90, 0x41, 0x09, 0x33, 0x54, 0xb5, 0x2e, 0x61, 0xd7, 0x43, 0x6e, 0xa1, 0xf2, 0x59, 0x13, 0x59, 0xa8, 0xbc, 0x93, 0x5f, 0xa8, 0x14, 0x8c, 0x98, 0x1c, 0xac, 0x53, 0xa6, 0xf4, 0xc5, 0x41, 0xdf, 0x4f, 0x7c, 0x99, 0x32, 0x85, - 0x2f, 0xce, 0x88, 0xf2, 0xb3, 0x47, 0xf4, 0x8d, 0xff, 0x95, 0x76, 0xd6, 0xc1, 0x86, 0xac, 0xf6, - 0x3f, 0x4e, 0x80, 0xfc, 0x39, 0xf4, 0xe7, 0x1f, 0xa3, 0x1b, 0xb5, 0x5e, 0x36, 0x81, 0xe0, 0x0e, + 0x2f, 0xce, 0x88, 0xf2, 0xb3, 0x47, 0xf4, 0x8d, 0xff, 0x99, 0x76, 0xd6, 0xc1, 0x86, 0xac, 0xf6, + 0x3f, 0x4e, 0x80, 0xfc, 0x39, 0xf4, 0xe7, 0x1f, 0xa2, 0x1b, 0xb5, 0x5e, 0x36, 0x81, 0xe0, 0x0e, 0x4f, 0x06, 0x79, 0x44, 0x9f, 0x4e, 0x7b, 0x6e, 0x16, 0xdb, 0x1d, 0x46, 0x8c, 0x18, 0xf8, 0x3b, 0xf5, 0x14, 0x28, 0x7a, 0xce, 0xbe, 0xdb, 0x41, 0xe6, 0x37, 0xd2, 0x18, 0xfa, 0x94, 0x36, 0xa8, 0x29, 0x47, 0x7a, 0x69, 0x72, 0x2e, 0xa7, 0xcc, 0x05, 0x4b, 0x32, 0x77, 0xc1, 0x52, 0x8a, 0xfd, @@ -78466,17 +78499,17 @@ var fileDescriptor_8261c968b2e6f45c = []byte{ 0x20, 0x21, 0xc2, 0xe1, 0xb4, 0xa3, 0x09, 0x8b, 0xb1, 0x91, 0x3d, 0x4c, 0x3f, 0x09, 0x90, 0xf4, 0xe8, 0xda, 0xce, 0x1b, 0x64, 0x20, 0xb7, 0xa0, 0xaf, 0xc1, 0xc3, 0xa3, 0x75, 0x16, 0xcc, 0x33, 0x4b, 0x07, 0xc1, 0x85, 0x37, 0x5c, 0x5a, 0xda, 0x83, 0xf2, 0xa1, 0xc8, 0xd8, 0x45, 0x97, 0x69, - 0x1f, 0x94, 0x17, 0x61, 0x62, 0x0a, 0x07, 0xe5, 0xe9, 0xb2, 0xcf, 0xf7, 0x0a, 0x50, 0x93, 0x5a, + 0x1f, 0x94, 0x17, 0x61, 0x62, 0x0a, 0x07, 0xe5, 0xe9, 0xb2, 0xcf, 0xf7, 0x0b, 0x50, 0x93, 0x5a, 0x01, 0x3a, 0x14, 0x50, 0x47, 0xb1, 0x14, 0xf4, 0xf6, 0xc8, 0xd8, 0x98, 0x12, 0x56, 0x1f, 0x66, 0xb1, 0x6a, 0xf2, 0x58, 0xdd, 0x2e, 0x22, 0x26, 0x31, 0xe3, 0x43, 0x68, 0x82, 0xff, 0xce, 0x10, 0x2e, 0x83, 0x83, 0xeb, 0xc9, 0x63, 0xf3, 0x91, 0x3d, 0x62, 0xbf, 0x40, 0xc6, 0xad, 0x16, 0x99, 0x5b, 0x4d, 0x66, 0xdc, 0xa2, 0xd3, 0x36, 0x99, 0x9b, 0xb6, 0xa5, 0x3c, 0x58, 0x11, 0xf9, 0x0b, - 0x07, 0xcc, 0x8d, 0x82, 0x28, 0x3f, 0xe1, 0x83, 0x15, 0x23, 0x39, 0xc8, 0x1e, 0x9c, 0x6f, 0xca, + 0x07, 0xcc, 0x8d, 0x82, 0x28, 0x3f, 0xe1, 0x83, 0x15, 0x23, 0x39, 0xc8, 0x1e, 0x9c, 0x6f, 0xc9, 0x00, 0xac, 0xba, 0xce, 0x7e, 0xbf, 0xe9, 0x76, 0xa1, 0xab, 0xfd, 0x59, 0x34, 0x53, 0xfb, 0x99, 0x09, 0xcc, 0xd4, 0x36, 0x00, 0xd8, 0x09, 0x89, 0x53, 0x0d, 0x7f, 0xb4, 0xd8, 0xbc, 0x2c, 0x62, 0xca, 0x60, 0x68, 0xf0, 0x77, 0x0b, 0x3f, 0x95, 0xc7, 0x38, 0xa9, 0xcf, 0x8a, 0xc8, 0x4d, 0x72, - 0xa6, 0xf6, 0xee, 0x10, 0xeb, 0x36, 0x87, 0xf5, 0x53, 0x0e, 0xc1, 0x49, 0xf6, 0x98, 0xff, 0xc3, - 0x0c, 0x98, 0x23, 0xfb, 0xb2, 0x44, 0xa6, 0x7f, 0x13, 0x81, 0xfe, 0xf3, 0x13, 0x00, 0x7d, 0x13, + 0xa6, 0xf6, 0xee, 0x10, 0xeb, 0x36, 0x87, 0xf5, 0x53, 0x0e, 0xc1, 0x49, 0xf6, 0x98, 0xff, 0xfd, + 0x0c, 0x98, 0x23, 0xfb, 0xb2, 0x44, 0xa6, 0x7f, 0x1d, 0x81, 0xfe, 0xf3, 0x13, 0x00, 0x7d, 0x13, 0xcc, 0x3b, 0x11, 0x75, 0xd2, 0xa7, 0xb2, 0x2b, 0x65, 0x89, 0xb0, 0x33, 0x7c, 0x19, 0x1c, 0x19, 0xed, 0x13, 0x2c, 0xf2, 0x06, 0x8f, 0xfc, 0x9d, 0x09, 0xf2, 0x66, 0x28, 0x4e, 0x12, 0xfa, 0xf7, 0x84, 0xd0, 0x6f, 0x72, 0xd0, 0x97, 0x0f, 0xc3, 0xca, 0x14, 0xee, 0x55, 0x90, 0x41, 0x1e, 0x1f, @@ -78487,13 +78520,13 @@ var fileDescriptor_8261c968b2e6f45c = []byte{ 0x06, 0xae, 0x31, 0xb3, 0x0e, 0xaf, 0x0b, 0x37, 0x82, 0x45, 0x9f, 0x73, 0xbc, 0xa7, 0x3a, 0x31, 0x90, 0xaa, 0xfd, 0x1e, 0xeb, 0x3c, 0xf3, 0x34, 0x1e, 0xc9, 0xe5, 0x04, 0x01, 0xc6, 0xf1, 0x9e, 0x7a, 0x47, 0x45, 0x90, 0x51, 0x66, 0x35, 0x51, 0x1e, 0x6b, 0x71, 0x39, 0xd4, 0xa9, 0x82, 0x88, - 0x4e, 0x7d, 0x30, 0xd4, 0xa9, 0xff, 0xc2, 0xe9, 0xd4, 0xea, 0xe1, 0x45, 0x32, 0x85, 0x25, 0xa6, + 0x4e, 0x7d, 0x30, 0xd4, 0xa9, 0xff, 0xc4, 0xe9, 0xd4, 0xea, 0xe1, 0x45, 0x32, 0x85, 0x25, 0xa6, 0x45, 0x50, 0x5c, 0xb1, 0x7a, 0x3e, 0x74, 0xb5, 0xaf, 0xd2, 0x79, 0xd4, 0xab, 0x32, 0xec, 0x5e, 0xaa, 0xa0, 0xb8, 0x8d, 0x4b, 0xa3, 0x06, 0xd9, 0x2d, 0x62, 0xd8, 0x10, 0x0e, 0x0d, 0xfa, 0x6d, 0xda, 0x20, 0x7f, 0x03, 0x64, 0x26, 0x36, 0x01, 0x4b, 0x11, 0xe4, 0x6f, 0x34, 0x0b, 0x53, 0xb9, 0xdf, 0xaa, 0x68, 0xc0, 0x3d, 0x34, 0x82, 0x5c, 0xcc, 0x0e, 0x61, 0x05, 0xc8, 0x56, 0xd7, 0xc3, 0x4d, 0x6f, 0xd6, 0x40, 0x7f, 0xd3, 0xba, 0x1c, 0x0d, 0x8a, 0x8a, 0xb0, 0x3c, 0x6d, 0x97, 0x23, - 0x21, 0x2e, 0xb2, 0xc7, 0xec, 0x3b, 0xd8, 0xdf, 0xb4, 0xdf, 0x33, 0x3b, 0x10, 0x71, 0x9f, 0x19, + 0x21, 0x2e, 0xb2, 0xc7, 0xec, 0xbb, 0xd8, 0xdf, 0xb4, 0xdf, 0x33, 0x3b, 0x10, 0x71, 0x9f, 0x19, 0x6a, 0x8b, 0x40, 0xb2, 0x82, 0x11, 0x5f, 0xb2, 0xd8, 0x76, 0x5a, 0x38, 0x44, 0x3b, 0x1d, 0x77, 0x35, 0x32, 0x94, 0x39, 0xae, 0xf8, 0x91, 0xad, 0x46, 0x26, 0xb2, 0x31, 0x85, 0xdb, 0x4b, 0x83, 0xf3, 0xb8, 0x53, 0x6d, 0xad, 0xe3, 0xee, 0xd5, 0x50, 0x61, 0x4d, 0xec, 0xec, 0xed, 0x38, 0x7b, @@ -78501,13 +78534,13 @@ var fileDescriptor_8261c968b2e6f45c = []byte{ 0xe7, 0xb8, 0x7e, 0xba, 0xed, 0x52, 0xc4, 0x9d, 0x81, 0xbf, 0x4b, 0x7b, 0x7e, 0x8b, 0x3f, 0x9e, 0x3d, 0xa9, 0xe1, 0x33, 0xc5, 0xf9, 0xad, 0x51, 0x0c, 0x64, 0x0f, 0xef, 0x5b, 0x8f, 0x68, 0xf0, 0x1c, 0xb7, 0x39, 0xd2, 0x36, 0x30, 0xb1, 0xa1, 0x73, 0x9c, 0xe6, 0x18, 0xcf, 0x43, 0xf6, 0x78, - 0xfd, 0x3d, 0x33, 0x70, 0xbe, 0x69, 0x8a, 0x03, 0x67, 0xd0, 0x32, 0x0b, 0x63, 0xb6, 0xcc, 0x71, + 0xfd, 0x1d, 0x33, 0x70, 0xbe, 0x69, 0x8a, 0x03, 0x67, 0xd0, 0x32, 0x0b, 0x63, 0xb6, 0xcc, 0x71, 0x77, 0x17, 0xa8, 0xac, 0x27, 0x37, 0x60, 0x8e, 0xb3, 0xbb, 0x90, 0xc0, 0x44, 0xf6, 0x88, 0xbf, 0x59, 0x06, 0x85, 0xd6, 0xf4, 0xc7, 0xcb, 0x71, 0xe7, 0x22, 0x58, 0x56, 0xad, 0x89, 0x0d, 0x97, 0xe3, 0xcc, 0x45, 0x62, 0x59, 0x98, 0x42, 0xfc, 0xfe, 0xe3, 0x60, 0x1e, 0x4f, 0xb8, 0x83, 0xdd, - 0xd6, 0xbf, 0xa7, 0xa3, 0xe6, 0xeb, 0x33, 0x6c, 0xab, 0x77, 0x83, 0x52, 0xb0, 0x3b, 0x44, 0x47, + 0xd6, 0xbf, 0xa3, 0xa3, 0xe6, 0xeb, 0x33, 0x6c, 0xab, 0x77, 0x83, 0x52, 0xb0, 0x3b, 0x44, 0x47, 0xce, 0x25, 0xb1, 0xf6, 0x19, 0x70, 0x69, 0x84, 0xdf, 0x1f, 0xca, 0x27, 0x62, 0xe2, 0x3b, 0x81, - 0xe3, 0xfa, 0x44, 0x1c, 0xe9, 0x6e, 0xe0, 0xef, 0x46, 0x23, 0xea, 0x7f, 0xcb, 0x0e, 0xf3, 0xc1, + 0xe3, 0xfa, 0x44, 0x1c, 0xe9, 0x6e, 0xe0, 0xef, 0x46, 0x23, 0xea, 0x7f, 0xcd, 0x0e, 0xf3, 0xc1, 0x5d, 0xc2, 0xfc, 0x90, 0x5d, 0xc2, 0x4f, 0xb1, 0x58, 0xb6, 0x78, 0x2c, 0x9f, 0x24, 0x2a, 0xc2, 0x09, 0x8e, 0xb5, 0xef, 0x0d, 0xe1, 0x3c, 0xc7, 0xc1, 0xb9, 0x7c, 0x28, 0x5e, 0xa6, 0x70, 0x7e, 0x32, 0x1f, 0x8d, 0xb9, 0x9f, 0xce, 0xb0, 0x1d, 0x0f, 0x1c, 0xce, 0xc8, 0x1f, 0x38, 0x9c, 0xc1, @@ -78523,7 +78556,7 @@ var fileDescriptor_8261c968b2e6f45c = []byte{ 0x55, 0x3d, 0x25, 0x54, 0xba, 0xb5, 0x67, 0xf9, 0x13, 0x0a, 0x04, 0xd1, 0x43, 0xb4, 0x82, 0x40, 0x10, 0xf8, 0x21, 0xed, 0xc1, 0x53, 0x46, 0x2a, 0xe8, 0xf3, 0x69, 0x1f, 0x3c, 0x4d, 0x2e, 0x3e, 0x7b, 0x4c, 0x7e, 0x8e, 0xb4, 0xac, 0x73, 0xc4, 0x07, 0x37, 0x43, 0xf7, 0xde, 0xb1, 0x1b, 0x0b, - 0x61, 0xed, 0xe8, 0x1a, 0xcb, 0xd0, 0xf2, 0xb3, 0x07, 0xe6, 0x97, 0xbf, 0x0f, 0x14, 0xaa, 0xf0, + 0x61, 0xed, 0xe8, 0x1a, 0xcb, 0xd0, 0xf2, 0xb3, 0x07, 0xe6, 0x97, 0x7f, 0x00, 0x14, 0xaa, 0xf0, 0xc2, 0xfe, 0x8e, 0x76, 0x27, 0x28, 0xb5, 0x5d, 0x08, 0x6b, 0xf6, 0xb6, 0x83, 0xa4, 0xeb, 0xa3, 0xff, 0x01, 0x24, 0xf4, 0x09, 0xe1, 0xb1, 0x0b, 0xcd, 0x6e, 0x74, 0x0c, 0x2d, 0x78, 0xd4, 0x5e, 0x26, 0x81, 0x7c, 0xcb, 0x37, 0x7d, 0x6d, 0x36, 0xc4, 0x56, 0x7b, 0x0e, 0x8b, 0xc5, 0x9d, 0x3c, @@ -78537,12 +78570,12 @@ var fileDescriptor_8261c968b2e6f45c = []byte{ 0x16, 0x8d, 0xff, 0x23, 0x1b, 0x79, 0xdf, 0x36, 0x6d, 0xc7, 0xbe, 0xb2, 0x67, 0x3d, 0x33, 0xbc, 0xa2, 0x97, 0x4b, 0x43, 0x9c, 0xef, 0x40, 0x1b, 0xba, 0xa6, 0x0f, 0x5b, 0x97, 0x76, 0xf0, 0x1c, 0xab, 0x64, 0xb0, 0x49, 0xa9, 0xf5, 0x1f, 0x71, 0x1c, 0xaf, 0xff, 0xdb, 0x56, 0x0f, 0xe2, 0x80, - 0x4f, 0x54, 0xff, 0x83, 0xe7, 0x54, 0xfa, 0x3f, 0xa4, 0x88, 0xec, 0xd1, 0xf8, 0x37, 0x09, 0xcc, + 0x4f, 0x54, 0xff, 0x83, 0xe7, 0x54, 0xfa, 0x3f, 0xa4, 0x88, 0xec, 0xd1, 0xf8, 0x57, 0x09, 0xcc, 0xb7, 0x90, 0xc2, 0xb5, 0xf6, 0xf7, 0xf6, 0x4c, 0xf7, 0x8a, 0xf6, 0xb0, 0x08, 0x15, 0x46, 0x35, 0x73, 0x9c, 0x6a, 0x6a, 0xbf, 0x21, 0x7c, 0x3b, 0x35, 0x6d, 0xda, 0x4c, 0x09, 0xa9, 0xdb, 0xc1, 0x63, 0x40, 0x01, 0xa9, 0x77, 0xe0, 0xcf, 0x97, 0xd8, 0x10, 0x48, 0x4e, 0xc1, 0xc0, 0x58, 0x23, 0x79, 0x9b, 0x42, 0x50, 0x0e, 0x09, 0x1c, 0x6f, 0xf9, 0x66, 0xe7, 0xe2, 0xaa, 0xe3, 0x3a, 0xfb, - 0xbe, 0x65, 0x43, 0x4f, 0x7b, 0x70, 0x84, 0x40, 0xa0, 0xff, 0xb9, 0x48, 0xff, 0xb5, 0x7f, 0xcf, + 0xbe, 0x65, 0x43, 0x4f, 0x7b, 0x70, 0x84, 0x40, 0xa0, 0xff, 0xb9, 0x48, 0xff, 0xb5, 0x7f, 0xcb, 0x89, 0x8e, 0xa2, 0x61, 0xb7, 0xca, 0x92, 0x8f, 0x89, 0x73, 0x25, 0x36, 0x2e, 0x8a, 0x50, 0xcc, 0x5e, 0x68, 0x6f, 0x92, 0x81, 0xa2, 0xdf, 0xdf, 0x77, 0x5c, 0xbf, 0xee, 0x74, 0xcc, 0x9e, 0xe7, 0x3b, 0x2e, 0xd4, 0x9a, 0x89, 0x52, 0x43, 0x3d, 0x4c, 0xd7, 0xe9, 0x44, 0x83, 0x23, 0x7d, 0x62, @@ -78555,243 +78588,243 @@ var fileDescriptor_8261c968b2e6f45c = []byte{ 0x51, 0x42, 0x2a, 0xc1, 0x25, 0x95, 0x96, 0xbd, 0xe0, 0xbe, 0x22, 0x81, 0x39, 0x63, 0xdf, 0xde, 0x70, 0x1d, 0x34, 0x1a, 0xbb, 0xda, 0x93, 0xa2, 0x0e, 0xe2, 0x16, 0x70, 0xa2, 0xbb, 0xef, 0xe2, 0xf5, 0xa7, 0x9a, 0xdd, 0x82, 0x1d, 0xc7, 0xee, 0x7a, 0xb8, 0x1e, 0x05, 0xe3, 0xe0, 0x8b, 0x3b, - 0xf2, 0xcf, 0xfb, 0x2b, 0x39, 0xa7, 0xbd, 0x40, 0x38, 0x62, 0x0e, 0xa9, 0x3c, 0x53, 0xb4, 0x78, - 0x4f, 0x20, 0x18, 0x17, 0x67, 0x54, 0x09, 0xd9, 0x0b, 0xf7, 0x0b, 0x12, 0x50, 0xcb, 0x9d, 0x8e, - 0xb3, 0x6f, 0xfb, 0x2d, 0xd8, 0x83, 0x1d, 0xbf, 0xed, 0x9a, 0x1d, 0xc8, 0xda, 0xcf, 0x0a, 0x90, - 0xbb, 0x96, 0x4b, 0xfb, 0x60, 0xf4, 0x97, 0xca, 0xf1, 0x65, 0xc2, 0x3b, 0x8e, 0xa4, 0x96, 0x07, - 0x4b, 0x49, 0x21, 0x4e, 0xb1, 0x7d, 0x45, 0xc1, 0x82, 0xb2, 0x97, 0xea, 0xa7, 0x25, 0x30, 0x1b, - 0xf4, 0xd8, 0x3b, 0x22, 0xc2, 0xfc, 0xb9, 0x94, 0x93, 0x91, 0x90, 0x78, 0x0a, 0x19, 0xbe, 0x2b, - 0xc5, 0xac, 0x22, 0x8e, 0x7e, 0x3a, 0xd1, 0x95, 0xd3, 0x8b, 0x0e, 0x3d, 0x36, 0x9a, 0x5b, 0x2b, - 0xcd, 0x7a, 0x55, 0x37, 0x14, 0x59, 0xfb, 0xaa, 0x04, 0xf2, 0x1b, 0x96, 0xbd, 0xc3, 0x06, 0x36, - 0x3b, 0x89, 0xec, 0xc8, 0x2e, 0xbc, 0x9f, 0xb6, 0x74, 0xf2, 0xa0, 0xde, 0x06, 0x4e, 0xda, 0xfb, - 0x7b, 0x17, 0xa0, 0xdb, 0xdc, 0xc6, 0xa3, 0xac, 0xd7, 0x76, 0x5a, 0xd0, 0x26, 0x46, 0x68, 0xc1, - 0x18, 0xfa, 0x8e, 0x37, 0xc1, 0x04, 0x26, 0x0f, 0x88, 0x93, 0x18, 0x89, 0x87, 0x4c, 0x49, 0x0c, - 0x53, 0xa9, 0xa6, 0x0d, 0x43, 0x88, 0x67, 0xaf, 0xa9, 0xbf, 0x55, 0x00, 0x57, 0x97, 0xed, 0x2b, - 0xd8, 0xa6, 0x20, 0x1d, 0x7c, 0x65, 0xd7, 0xb4, 0x77, 0x20, 0x1e, 0x20, 0x42, 0x89, 0xb3, 0x91, - 0xfe, 0x73, 0x7c, 0xa4, 0x7f, 0xd5, 0x00, 0x33, 0x8e, 0xdb, 0x85, 0xee, 0xf2, 0x15, 0xcc, 0xd3, - 0xe0, 0xb2, 0x33, 0x6d, 0x93, 0xc3, 0x8a, 0x58, 0xa2, 0xe4, 0x97, 0x9a, 0xe4, 0x7b, 0x23, 0x20, - 0x74, 0xf6, 0x16, 0x30, 0x43, 0xd3, 0xd4, 0x79, 0x50, 0x6a, 0x1a, 0x55, 0xdd, 0xd8, 0xaa, 0x55, - 0x95, 0x63, 0xea, 0x55, 0xe0, 0x78, 0xad, 0xad, 0x1b, 0xe5, 0x76, 0xad, 0xd9, 0xd8, 0xc2, 0xe9, - 0x4a, 0x4e, 0x7b, 0x6e, 0x5e, 0xd4, 0xb3, 0x37, 0x99, 0x99, 0x61, 0xb0, 0x1a, 0x60, 0xa6, 0x43, - 0x32, 0xe0, 0x21, 0x74, 0x2e, 0x55, 0xed, 0x28, 0x41, 0x92, 0x60, 0x04, 0x84, 0xd4, 0x33, 0x00, - 0x5c, 0x76, 0x1d, 0x7b, 0x27, 0x3a, 0xd3, 0x56, 0x32, 0x98, 0x14, 0xed, 0x39, 0x39, 0x50, 0x24, - 0xdf, 0xe0, 0x9b, 0x4d, 0xf0, 0xbf, 0x48, 0xf0, 0xc1, 0x33, 0xb2, 0x78, 0xb1, 0xbc, 0xa2, 0x89, - 0x16, 0x7d, 0x44, 0xba, 0x48, 0x64, 0x40, 0x2c, 0x61, 0x5a, 0x95, 0x5b, 0x41, 0x91, 0x7c, 0x4b, - 0xbd, 0x0e, 0xe2, 0xa3, 0x94, 0x92, 0x6c, 0x82, 0x7e, 0xca, 0xe2, 0x32, 0xcd, 0x5e, 0x9b, 0x3f, - 0x2a, 0x81, 0x52, 0x03, 0xfa, 0x95, 0x5d, 0xd8, 0xb9, 0xa8, 0x3d, 0x82, 0x5f, 0x00, 0xed, 0x59, - 0xd0, 0xf6, 0xef, 0xdd, 0xeb, 0x85, 0x0b, 0xa0, 0x41, 0x82, 0xf6, 0x7c, 0xb6, 0xf3, 0x7d, 0x0a, - 0xaf, 0x3f, 0x37, 0x0f, 0xa9, 0x6b, 0x50, 0x42, 0x8c, 0xca, 0x9c, 0x02, 0x45, 0x17, 0x7a, 0xfb, - 0xbd, 0x60, 0x11, 0x8d, 0x3e, 0x69, 0xaf, 0x0d, 0xc5, 0x59, 0xe1, 0xc4, 0x79, 0xab, 0x78, 0x11, - 0x53, 0x08, 0x7b, 0x9a, 0x07, 0x33, 0x35, 0xdb, 0xf2, 0x2d, 0xb3, 0xa7, 0xbd, 0x20, 0x0f, 0x16, - 0x5a, 0xd0, 0xdf, 0x30, 0x5d, 0x73, 0x0f, 0xfa, 0xd0, 0xf5, 0xb4, 0x6f, 0xf3, 0x7d, 0x42, 0xbf, - 0x67, 0xfa, 0xdb, 0x8e, 0xbb, 0x17, 0xa8, 0x66, 0xf0, 0x8c, 0x54, 0xf3, 0x12, 0x74, 0xbd, 0x88, - 0xaf, 0xe0, 0x11, 0xbd, 0xb9, 0xec, 0xb8, 0x17, 0xd1, 0x20, 0x48, 0xa7, 0x69, 0xf4, 0x11, 0xd1, - 0xeb, 0x39, 0x3b, 0x75, 0x78, 0x09, 0x06, 0x51, 0xd5, 0xc2, 0x67, 0x34, 0x17, 0xe8, 0x3a, 0x0d, - 0xc7, 0x47, 0x9d, 0x76, 0xdd, 0xd9, 0x21, 0x61, 0x67, 0x4b, 0x06, 0x9f, 0x18, 0xe5, 0x32, 0x2f, - 0x41, 0x9c, 0xab, 0xc8, 0xe6, 0xa2, 0x89, 0xea, 0x12, 0x50, 0xc3, 0xcf, 0xda, 0xb0, 0x07, 0xf7, - 0xa0, 0xef, 0x5e, 0xc1, 0xb7, 0x4b, 0x94, 0x8c, 0x21, 0x6f, 0xe8, 0x00, 0x2d, 0x3e, 0x59, 0xa7, - 0xd2, 0x5b, 0xe2, 0x24, 0x77, 0xa8, 0xc9, 0xba, 0x08, 0xc5, 0xa9, 0xdc, 0x9e, 0x25, 0x23, 0x6b, - 0xe6, 0xe5, 0x32, 0xc8, 0xe3, 0xc1, 0xf3, 0xcd, 0x39, 0x6e, 0x85, 0x69, 0x0f, 0x7a, 0x9e, 0xb9, - 0x03, 0x83, 0x15, 0x26, 0xfa, 0xa8, 0xde, 0x0e, 0x0a, 0x3d, 0x8c, 0x29, 0x19, 0x1c, 0x1e, 0xc6, - 0xd5, 0x0c, 0x19, 0x18, 0x88, 0x56, 0x38, 0x12, 0x60, 0xb8, 0x0d, 0xf2, 0xc5, 0xd9, 0xbb, 0x41, - 0x81, 0xc0, 0x3f, 0x0b, 0x0a, 0x55, 0x7d, 0x79, 0x73, 0x55, 0x39, 0x86, 0xfe, 0x06, 0xfc, 0xcd, - 0x82, 0xc2, 0x4a, 0xb9, 0x5d, 0xae, 0x2b, 0x12, 0xaa, 0x47, 0xad, 0xb1, 0xd2, 0x54, 0x64, 0x94, - 0xb8, 0x51, 0x6e, 0xd4, 0x2a, 0x4a, 0x5e, 0x9d, 0x03, 0x33, 0xe7, 0xcb, 0x46, 0xa3, 0xd6, 0x58, - 0x55, 0x0a, 0xda, 0x5f, 0xb2, 0xf8, 0xdd, 0xc1, 0xe3, 0x77, 0x43, 0x1c, 0x4f, 0xc3, 0x20, 0xfb, - 0xc5, 0x10, 0xb2, 0x27, 0x71, 0x90, 0x7d, 0x9f, 0x08, 0x91, 0x29, 0xb8, 0x33, 0x15, 0xc1, 0xcc, - 0x86, 0xeb, 0x74, 0xa0, 0xe7, 0x69, 0x2f, 0x95, 0x40, 0xb1, 0x62, 0xda, 0x1d, 0xd8, 0xd3, 0xae, - 0x89, 0xa0, 0x22, 0xae, 0xa2, 0xb9, 0xc0, 0x55, 0x54, 0xfb, 0x66, 0x4e, 0xb4, 0xf7, 0xa3, 0x74, - 0x97, 0x08, 0xcd, 0x18, 0xf9, 0x88, 0xf5, 0x72, 0x89, 0xa4, 0xa6, 0x70, 0xc3, 0x8e, 0x04, 0x66, - 0xe9, 0x6a, 0xc0, 0x05, 0xc8, 0xce, 0xc3, 0xbf, 0x9d, 0x13, 0x9d, 0x1c, 0x06, 0x35, 0x08, 0xc9, - 0xc4, 0xc8, 0x43, 0x6c, 0x22, 0x38, 0x8a, 0xda, 0x14, 0x36, 0x0f, 0x25, 0x30, 0xb7, 0x69, 0x7b, - 0xc3, 0x84, 0x22, 0x1e, 0x8e, 0x3f, 0xa8, 0x06, 0x43, 0xe8, 0x50, 0xe1, 0xf8, 0x47, 0xd3, 0xcb, - 0x5e, 0x30, 0xdf, 0xce, 0x81, 0x93, 0xab, 0xd0, 0x86, 0xae, 0xd5, 0x21, 0x35, 0x08, 0x24, 0xf1, - 0x24, 0x5e, 0x12, 0x8f, 0xe0, 0x38, 0x1f, 0xf6, 0x05, 0x2f, 0x81, 0x57, 0x85, 0x12, 0x78, 0x0a, - 0x27, 0x81, 0x5b, 0x04, 0xe9, 0x4c, 0xe1, 0x5a, 0xf5, 0x59, 0x30, 0xdf, 0x70, 0x7c, 0x6b, 0xdb, - 0xea, 0x10, 0x1f, 0xb4, 0x5f, 0x90, 0x41, 0xbe, 0x6e, 0x79, 0xbe, 0x56, 0x8e, 0xba, 0x93, 0xeb, - 0xc1, 0x9c, 0x65, 0x77, 0x7a, 0xfb, 0x5d, 0x68, 0x40, 0x93, 0xf4, 0x2b, 0x25, 0x83, 0x4d, 0x8a, - 0xb6, 0xf6, 0x11, 0x5b, 0x72, 0xb0, 0xb5, 0xff, 0x3b, 0xc2, 0xcb, 0x30, 0x2c, 0x0b, 0x38, 0x2e, - 0x65, 0x8c, 0xdd, 0x55, 0x06, 0x0b, 0x36, 0x93, 0x35, 0x30, 0xd8, 0x07, 0xef, 0x25, 0x60, 0xc9, - 0x19, 0xfc, 0x17, 0xda, 0x07, 0x84, 0x1a, 0xeb, 0x28, 0x86, 0xd2, 0x21, 0xb3, 0x32, 0xc6, 0x24, - 0x59, 0x05, 0x8b, 0xb5, 0x46, 0x5b, 0x37, 0x1a, 0xe5, 0x3a, 0xcd, 0x22, 0x6b, 0xff, 0x26, 0x81, - 0x82, 0x01, 0xfb, 0xbd, 0x2b, 0x6c, 0xe0, 0x69, 0xea, 0x28, 0x9e, 0x0b, 0x1d, 0xc5, 0xd5, 0x15, - 0x00, 0xcc, 0x0e, 0x2a, 0x18, 0xdf, 0xcc, 0x25, 0x0d, 0x0d, 0x67, 0xca, 0x55, 0xb0, 0x1c, 0xe6, - 0x36, 0x98, 0x2f, 0xb5, 0x17, 0x0a, 0xef, 0x1c, 0x71, 0xd4, 0x30, 0x87, 0x31, 0x7d, 0xc2, 0x07, - 0x85, 0x36, 0x7b, 0x46, 0x92, 0x3b, 0x1a, 0xf1, 0x7f, 0x4d, 0x02, 0xf9, 0x36, 0xea, 0x2d, 0x99, - 0x8e, 0xf3, 0x73, 0xe3, 0xe9, 0x38, 0x22, 0x13, 0xa3, 0xe3, 0x77, 0x81, 0x79, 0x56, 0x63, 0xa9, - 0xab, 0x44, 0xa2, 0x8a, 0x73, 0x1f, 0x8c, 0xa3, 0xe1, 0x43, 0xd8, 0x39, 0x1a, 0x11, 0x7f, 0xe6, - 0x91, 0x00, 0xac, 0xc3, 0xbd, 0x0b, 0xd0, 0xf5, 0x76, 0xad, 0xbe, 0xf6, 0xd7, 0x32, 0x98, 0x5d, - 0x85, 0x7e, 0xcb, 0x37, 0xfd, 0x7d, 0x6f, 0x60, 0xbb, 0xd3, 0x76, 0x2a, 0x66, 0x67, 0x17, 0xd2, - 0xee, 0x28, 0x78, 0xd4, 0xde, 0x23, 0x8b, 0xfa, 0x13, 0x45, 0xe5, 0x2c, 0x85, 0x65, 0xc4, 0x60, - 0xf2, 0x28, 0x90, 0xef, 0x9a, 0xbe, 0x49, 0xb1, 0xb8, 0x66, 0x00, 0x8b, 0x88, 0x90, 0x81, 0xb3, - 0x69, 0xef, 0x90, 0x44, 0x1c, 0x8a, 0x04, 0xca, 0x4f, 0x07, 0xc2, 0x07, 0x72, 0x63, 0xa0, 0x70, - 0x02, 0x2c, 0x34, 0x9a, 0xed, 0xad, 0x7a, 0x73, 0x75, 0x55, 0x47, 0xa9, 0x8a, 0xac, 0x9e, 0x02, - 0xea, 0x46, 0xf9, 0xde, 0x75, 0xbd, 0xd1, 0xde, 0x6a, 0x34, 0xab, 0x3a, 0xfd, 0x32, 0xaf, 0x1e, - 0x07, 0x73, 0x95, 0x72, 0x65, 0x2d, 0x48, 0x28, 0xa8, 0xa7, 0xc1, 0xc9, 0x75, 0x7d, 0x7d, 0x59, - 0x37, 0x5a, 0x6b, 0xb5, 0x8d, 0x2d, 0x44, 0x66, 0xa5, 0xb9, 0xd9, 0xa8, 0x2a, 0x45, 0x55, 0x03, - 0xa7, 0x98, 0x37, 0xe7, 0x8d, 0x66, 0x63, 0x75, 0xab, 0xd5, 0x2e, 0xb7, 0x75, 0x65, 0x46, 0xbd, - 0x0a, 0x1c, 0xaf, 0x94, 0x1b, 0x38, 0x7b, 0xa5, 0xd9, 0x68, 0xe8, 0x95, 0xb6, 0x52, 0xd2, 0xfe, - 0x3d, 0x0f, 0xe6, 0x6a, 0x5e, 0xc3, 0xdc, 0x83, 0xe7, 0xcc, 0x9e, 0xd5, 0xd5, 0x5e, 0xc0, 0xcc, - 0x3c, 0x6e, 0x00, 0x0b, 0x2e, 0xf9, 0x0b, 0xbb, 0x6d, 0x0b, 0x12, 0x34, 0x17, 0x0c, 0x3e, 0x11, - 0xcd, 0xc9, 0x6d, 0x4c, 0x20, 0x98, 0x93, 0x93, 0x27, 0x75, 0x19, 0x00, 0xf2, 0xaf, 0x1d, 0xdd, - 0x11, 0x7b, 0x76, 0xb0, 0x35, 0x99, 0x7b, 0xd0, 0x83, 0xee, 0x25, 0xab, 0x03, 0x83, 0x9c, 0x06, - 0xf3, 0x95, 0xf6, 0x75, 0x59, 0x74, 0x7f, 0x91, 0x01, 0x95, 0xa9, 0x4e, 0x4c, 0x6f, 0xf8, 0xe3, - 0xb2, 0xc8, 0xee, 0xa0, 0x10, 0xc9, 0x74, 0x9a, 0xf2, 0x62, 0x69, 0xbc, 0x65, 0xdb, 0x76, 0xb3, - 0xb9, 0xd5, 0x5a, 0x6b, 0x1a, 0x6d, 0x45, 0x56, 0xe7, 0x41, 0x09, 0x3d, 0xd6, 0x9b, 0x8d, 0x55, - 0x25, 0xaf, 0x5e, 0x0d, 0x4e, 0xac, 0x95, 0x5b, 0x5b, 0xb5, 0xc6, 0xb9, 0x72, 0xbd, 0x56, 0xdd, - 0xaa, 0xac, 0x95, 0x8d, 0x96, 0x52, 0x50, 0xaf, 0x01, 0x57, 0xb7, 0x6b, 0xba, 0xb1, 0xb5, 0xa2, - 0x97, 0xdb, 0x9b, 0x86, 0xde, 0xda, 0x6a, 0x34, 0xb7, 0x1a, 0xe5, 0x75, 0x5d, 0x29, 0xa2, 0xe6, - 0x8f, 0x5f, 0x45, 0x6a, 0x33, 0x73, 0x50, 0x19, 0x4b, 0x31, 0xca, 0x38, 0x3b, 0xa8, 0x8c, 0x80, - 0x55, 0x2b, 0x43, 0x6f, 0xe9, 0xc6, 0x39, 0x5d, 0x99, 0x1b, 0xa6, 0x6b, 0xf3, 0xea, 0x49, 0xa0, - 0x20, 0x1e, 0xb6, 0x6a, 0xad, 0x20, 0x67, 0x55, 0x59, 0xd0, 0x3e, 0x5d, 0x04, 0xa7, 0x0c, 0xb8, - 0x63, 0x79, 0x3e, 0x74, 0x37, 0xcc, 0x2b, 0x7b, 0xd0, 0xf6, 0x83, 0x4e, 0xfe, 0x9f, 0x53, 0x2b, - 0xe3, 0x3a, 0x58, 0xe8, 0x13, 0x1a, 0xeb, 0xd0, 0xdf, 0x75, 0xba, 0x74, 0x14, 0x7e, 0x44, 0x6c, - 0xcf, 0xb1, 0xb4, 0xc1, 0x66, 0x37, 0xf8, 0xaf, 0x19, 0xdd, 0x96, 0x13, 0x74, 0x3b, 0x3f, 0x8e, - 0x6e, 0xab, 0xd7, 0x81, 0xd9, 0x7d, 0x0f, 0xba, 0xfa, 0x9e, 0x69, 0xf5, 0x82, 0x3b, 0x3e, 0xc3, - 0x04, 0xed, 0x9d, 0x79, 0xd1, 0x13, 0x2b, 0x4c, 0x5d, 0x86, 0x8b, 0x31, 0xa6, 0x6f, 0x3d, 0x03, - 0x00, 0xad, 0xec, 0xa6, 0xdb, 0xa3, 0xca, 0xca, 0xa4, 0x20, 0xfe, 0x2e, 0x58, 0xbd, 0x9e, 0x65, - 0xef, 0x84, 0xfb, 0xfe, 0x51, 0x82, 0xf6, 0x62, 0x59, 0xe4, 0x04, 0x4b, 0x5a, 0xde, 0xd2, 0xb5, - 0xa6, 0x17, 0x4a, 0x53, 0xee, 0x77, 0x0f, 0x36, 0x9d, 0xa2, 0xaa, 0x80, 0x79, 0x9c, 0x46, 0x5b, - 0xa0, 0x32, 0x83, 0xfa, 0xe0, 0x80, 0xdc, 0xba, 0xde, 0x5e, 0x6b, 0x56, 0xc3, 0x77, 0x25, 0x44, - 0x12, 0x31, 0x53, 0x6e, 0xdc, 0x8b, 0x5b, 0xe3, 0xac, 0xfa, 0x60, 0x70, 0x0d, 0xd3, 0x61, 0x97, - 0xeb, 0x86, 0x5e, 0xae, 0xde, 0xbb, 0xa5, 0x3f, 0xad, 0xd6, 0x6a, 0xb7, 0xf8, 0xc6, 0x15, 0xb4, - 0xa3, 0x39, 0xc4, 0xaf, 0xbe, 0x5e, 0xae, 0xd5, 0x69, 0xff, 0xbe, 0xd2, 0x34, 0xd6, 0xcb, 0x6d, - 0x65, 0x5e, 0x7b, 0xb9, 0x0c, 0x94, 0x55, 0xe8, 0x6f, 0x38, 0xae, 0x6f, 0xf6, 0xea, 0x96, 0x7d, - 0x71, 0xd3, 0xed, 0x71, 0x93, 0x4d, 0xe1, 0x30, 0x1d, 0xfc, 0x10, 0xc9, 0x11, 0x8c, 0xdf, 0x11, - 0xef, 0xe3, 0x6c, 0x91, 0x32, 0x45, 0x09, 0xda, 0xb3, 0x24, 0x91, 0xe5, 0x6e, 0xf1, 0x52, 0xd3, - 0xe9, 0xc9, 0xb3, 0xa7, 0x3d, 0x3e, 0x0f, 0x41, 0xad, 0xa8, 0x3d, 0x2f, 0x0f, 0x4a, 0x2b, 0x96, - 0x6d, 0xf6, 0xac, 0x67, 0x72, 0xd1, 0x31, 0xa3, 0x3e, 0x26, 0x97, 0xd0, 0xc7, 0x48, 0x63, 0x8d, - 0x9f, 0x3f, 0x2b, 0x8b, 0x2e, 0x2f, 0x30, 0xb2, 0x0f, 0x98, 0x8c, 0x19, 0x3c, 0x3f, 0x26, 0x89, - 0x2c, 0x2f, 0x8c, 0xa6, 0x97, 0x0e, 0xc3, 0xcf, 0x7e, 0x6f, 0xd8, 0x58, 0x03, 0xed, 0xbb, 0x34, - 0x4c, 0x15, 0x66, 0xb5, 0x3f, 0x90, 0x81, 0xb6, 0x0a, 0xfd, 0x73, 0xd0, 0x0d, 0xa7, 0x02, 0xb8, - 0xd7, 0xa7, 0xf6, 0x36, 0xd3, 0x64, 0xdf, 0xcc, 0x02, 0x78, 0x9e, 0x07, 0xb0, 0x9c, 0xd0, 0x78, - 0x62, 0x48, 0xc7, 0x34, 0xde, 0x1a, 0x28, 0x7a, 0xf8, 0x3d, 0x55, 0xb3, 0xc7, 0xc4, 0x0f, 0x97, - 0x98, 0x18, 0x4b, 0x9d, 0x10, 0x36, 0x28, 0x01, 0xed, 0x3b, 0xe1, 0x24, 0xe8, 0x07, 0x39, 0xed, - 0x58, 0x39, 0x34, 0xb3, 0xe9, 0xf4, 0xc5, 0xcd, 0x56, 0x5d, 0x86, 0xd9, 0x37, 0xda, 0xc7, 0x0a, - 0xe0, 0xe4, 0xb0, 0xea, 0x68, 0x1f, 0xca, 0x71, 0x3b, 0xec, 0x10, 0x0f, 0xf9, 0x39, 0xba, 0x81, - 0x88, 0x1e, 0xd4, 0xc7, 0x81, 0xab, 0xc3, 0x65, 0xb8, 0xb6, 0xd3, 0x80, 0x97, 0xbd, 0x1e, 0xf4, - 0x7d, 0xe8, 0xe2, 0xaa, 0x95, 0x8c, 0xe1, 0x2f, 0xd5, 0x27, 0x80, 0x07, 0x59, 0xb6, 0x67, 0x75, - 0xa1, 0xdb, 0xb6, 0xfa, 0x5e, 0xd9, 0xee, 0xb6, 0xf7, 0x7d, 0xc7, 0xb5, 0x4c, 0x7a, 0x23, 0x65, - 0xc9, 0x88, 0x7b, 0xad, 0xde, 0x0c, 0x14, 0xcb, 0x6b, 0xda, 0x17, 0x1c, 0xd3, 0xed, 0x5a, 0xf6, - 0x4e, 0xdd, 0xf2, 0x7c, 0xea, 0x01, 0x7c, 0x20, 0x5d, 0xfb, 0x1b, 0x59, 0xf4, 0x30, 0xdd, 0x08, - 0x58, 0x63, 0x3a, 0x94, 0xe7, 0xcb, 0x22, 0xc7, 0xe3, 0xd2, 0xd1, 0x4e, 0xa7, 0x2c, 0xcf, 0x9d, - 0xb6, 0x21, 0x31, 0x7c, 0x04, 0xc7, 0x5d, 0x0b, 0x49, 0x0f, 0x0c, 0x81, 0x73, 0xba, 0x51, 0x5b, - 0xa9, 0xe9, 0xc8, 0xac, 0xb8, 0x1a, 0x9c, 0x88, 0xde, 0x55, 0xef, 0xdd, 0x6a, 0xe9, 0x8d, 0xb6, - 0x52, 0x42, 0xfd, 0x14, 0x49, 0x5e, 0x29, 0xd7, 0xea, 0x7a, 0x75, 0xab, 0xdd, 0x44, 0x6f, 0xaa, - 0xe3, 0x99, 0x16, 0xda, 0x73, 0xf2, 0xe0, 0x38, 0x96, 0xed, 0x15, 0x2c, 0x55, 0x24, 0x94, 0x01, - 0x5f, 0xdb, 0x10, 0xa0, 0x59, 0x22, 0x5e, 0xed, 0xf7, 0x85, 0x2f, 0xdc, 0x64, 0x20, 0x1c, 0x28, - 0x23, 0x46, 0x33, 0xbe, 0x2d, 0x89, 0x44, 0xa8, 0x10, 0x26, 0x9b, 0x4e, 0x29, 0xfe, 0x65, 0xda, - 0x23, 0x4e, 0x3c, 0xf8, 0xd8, 0xca, 0xac, 0xe0, 0x8f, 0x9f, 0xb6, 0x51, 0x33, 0xb0, 0x3a, 0x2c, - 0x02, 0x80, 0x53, 0xb0, 0x06, 0x11, 0x3d, 0x18, 0x3a, 0x5e, 0xc5, 0xe9, 0x41, 0xb9, 0xd2, 0xae, - 0x9d, 0xd3, 0xe3, 0xf4, 0xe0, 0xf3, 0x32, 0x28, 0xad, 0x42, 0x1f, 0xcd, 0xa9, 0x3c, 0xed, 0x89, - 0x02, 0xeb, 0x3f, 0xc8, 0x8c, 0xe9, 0x39, 0x1d, 0xb3, 0x17, 0x2e, 0x03, 0x90, 0x27, 0xed, 0xc7, - 0xc6, 0x31, 0x41, 0x82, 0xa2, 0x63, 0xc6, 0xab, 0x1f, 0x00, 0x05, 0x1f, 0xbd, 0xa6, 0xcb, 0xd0, - 0x0f, 0x8d, 0x1d, 0xae, 0x10, 0x91, 0xaa, 0xe9, 0x9b, 0x06, 0xc9, 0xcf, 0x8c, 0x4e, 0x82, 0xb6, - 0x4b, 0x0c, 0x23, 0xdf, 0x8b, 0xf6, 0xe7, 0x5f, 0xca, 0xe0, 0x6a, 0xd2, 0x3e, 0xca, 0xfd, 0x7e, - 0xcb, 0x77, 0x5c, 0x68, 0xc0, 0x0e, 0xb4, 0xfa, 0xfe, 0xc0, 0xfa, 0x9e, 0x4b, 0x52, 0x83, 0xcd, - 0x66, 0xfa, 0xa8, 0xbd, 0x41, 0x16, 0x8d, 0xf0, 0x7b, 0xa0, 0x3d, 0x0e, 0x94, 0x17, 0xd3, 0xd8, - 0x3f, 0x25, 0x89, 0xc4, 0xec, 0x4d, 0x49, 0x3c, 0x1d, 0x50, 0x1f, 0x3f, 0x02, 0xa0, 0x82, 0x95, - 0x1b, 0x43, 0xaf, 0xe8, 0xb5, 0x0d, 0x34, 0x08, 0x3c, 0x04, 0x5c, 0xbb, 0xb1, 0x69, 0x54, 0xd6, - 0xca, 0x2d, 0x7d, 0xcb, 0xd0, 0x57, 0x6b, 0xad, 0x36, 0x75, 0xca, 0x22, 0x5f, 0xcd, 0xa8, 0xd7, - 0x81, 0xd3, 0xad, 0xcd, 0xe5, 0x56, 0xc5, 0xa8, 0x6d, 0xe0, 0x74, 0x43, 0x6f, 0xe8, 0xe7, 0xe9, - 0xdb, 0x92, 0xf6, 0x11, 0x05, 0xcc, 0xa1, 0x09, 0x40, 0x8b, 0xcc, 0x0b, 0xb4, 0xbf, 0xcd, 0x83, - 0x39, 0x03, 0x7a, 0x4e, 0xef, 0x12, 0x9e, 0x23, 0x4c, 0x6b, 0xea, 0xf1, 0x2d, 0x59, 0xf4, 0xfc, - 0x36, 0xc3, 0xec, 0x12, 0xc3, 0x68, 0xfc, 0x44, 0xd3, 0xbc, 0x64, 0x5a, 0x3d, 0xf3, 0x02, 0xed, - 0x6a, 0x4a, 0x46, 0x94, 0xa0, 0x2e, 0x01, 0xd5, 0xb9, 0x6c, 0x43, 0xb7, 0xd5, 0xb9, 0xac, 0xfb, - 0xbb, 0xe5, 0x6e, 0xd7, 0x85, 0x9e, 0x47, 0x57, 0x2f, 0x86, 0xbc, 0x51, 0x6f, 0x02, 0xc7, 0x71, - 0x2a, 0x93, 0x99, 0x38, 0xc8, 0x0c, 0x26, 0x87, 0x39, 0xcb, 0xf6, 0x95, 0x20, 0x67, 0x81, 0xc9, - 0x19, 0x25, 0xb3, 0xc7, 0x25, 0x8a, 0xfc, 0x29, 0x9d, 0xeb, 0xc1, 0x9c, 0x6d, 0xee, 0x41, 0xfd, - 0xfe, 0xbe, 0xe5, 0x42, 0x0f, 0x3b, 0xc6, 0xc8, 0x06, 0x9b, 0xa4, 0x7d, 0x4c, 0xe8, 0xbc, 0xb9, - 0x98, 0xc4, 0xd2, 0xe9, 0xfe, 0xea, 0x18, 0xaa, 0x3f, 0xa4, 0x9f, 0x91, 0xb5, 0x8f, 0xc8, 0x60, - 0x9e, 0x32, 0x55, 0xb6, 0xaf, 0xd4, 0xba, 0xda, 0x43, 0x38, 0xe3, 0xd7, 0x44, 0x69, 0x81, 0xf1, - 0x8b, 0x1f, 0xb4, 0x9f, 0x90, 0x45, 0xdd, 0x9d, 0x87, 0x54, 0x1c, 0x97, 0x11, 0xef, 0x38, 0xba, - 0xed, 0xec, 0x53, 0x47, 0xd5, 0x92, 0x41, 0x1e, 0xb2, 0x5c, 0xd4, 0xd3, 0x7e, 0x5d, 0xc8, 0x99, - 0x5a, 0xb0, 0x1a, 0x47, 0x04, 0xe0, 0x67, 0x64, 0xb0, 0x48, 0xb9, 0x6a, 0xd1, 0x73, 0x3e, 0x42, - 0x07, 0xde, 0x7e, 0x4a, 0xd8, 0x10, 0x1c, 0x52, 0x7f, 0x5a, 0xd2, 0x03, 0x06, 0xc8, 0x4f, 0x08, - 0x05, 0x47, 0x13, 0xae, 0xc8, 0x11, 0x41, 0xf9, 0xae, 0x3c, 0x98, 0xdb, 0xf4, 0xa0, 0x4b, 0xfd, - 0xf6, 0xb5, 0xd7, 0xe6, 0x81, 0xbc, 0x0a, 0xb9, 0x8d, 0xd4, 0x17, 0x09, 0x7b, 0xf8, 0xb2, 0x95, - 0x65, 0x88, 0x22, 0x1b, 0x29, 0x06, 0xb6, 0x1b, 0xc1, 0x22, 0x11, 0x69, 0xd9, 0xf7, 0x91, 0x91, - 0x18, 0x78, 0xd3, 0x0e, 0xa4, 0x4e, 0x62, 0xab, 0x08, 0x97, 0x85, 0xb2, 0x54, 0x10, 0x4f, 0x75, - 0xb8, 0x4d, 0xe6, 0xb3, 0x79, 0x63, 0x20, 0x55, 0x7d, 0x34, 0xb8, 0xca, 0xe9, 0x43, 0x72, 0x7e, - 0x85, 0xc9, 0x5c, 0xc0, 0x99, 0x87, 0xbd, 0xd2, 0xfe, 0x56, 0xc8, 0x57, 0x57, 0x5c, 0x3a, 0xe9, - 0x74, 0xa1, 0x3f, 0x19, 0x93, 0xe4, 0x24, 0x50, 0x50, 0x0e, 0xbc, 0xff, 0x62, 0xe8, 0xad, 0x66, - 0xfd, 0x9c, 0x3e, 0x7c, 0x19, 0xa3, 0xa0, 0x3d, 0x57, 0x06, 0xb3, 0xcb, 0xae, 0x63, 0x76, 0x3b, - 0xa6, 0xe7, 0x6b, 0xdf, 0x91, 0xc0, 0xfc, 0x86, 0x79, 0xa5, 0xe7, 0x98, 0x5d, 0xec, 0xdf, 0x3f, - 0xd0, 0x17, 0xf4, 0xc9, 0xab, 0xa0, 0x2f, 0xa0, 0x8f, 0xfc, 0xc1, 0xc0, 0xf0, 0xe8, 0x5e, 0x4e, - 0xe4, 0x5e, 0xcd, 0x70, 0x9b, 0x4f, 0x1a, 0x16, 0xac, 0x34, 0xe0, 0x6b, 0x89, 0xe5, 0x29, 0xc6, - 0xa2, 0xfc, 0x88, 0x58, 0xf8, 0x51, 0x11, 0x92, 0x47, 0xb3, 0x2b, 0xff, 0xbc, 0x12, 0x28, 0x56, - 0x21, 0xb6, 0xe2, 0x7e, 0x55, 0x02, 0x33, 0x2d, 0xe8, 0x63, 0x0b, 0xee, 0x76, 0xce, 0x53, 0xb8, - 0x8b, 0x33, 0x44, 0x4e, 0xec, 0xc1, 0x33, 0x9a, 0xac, 0x33, 0xe7, 0xad, 0xf1, 0xff, 0x14, 0x1e, - 0x89, 0xa4, 0xdc, 0x25, 0x5a, 0xe6, 0xa1, 0x3c, 0x12, 0x13, 0x49, 0x65, 0xef, 0x6b, 0xf5, 0x1e, - 0x89, 0xba, 0x56, 0x31, 0xbd, 0xde, 0xab, 0x59, 0xfd, 0x4c, 0xf4, 0x36, 0xa3, 0xcc, 0x27, 0x38, - 0x47, 0x3d, 0x16, 0xcc, 0x10, 0x99, 0x07, 0xf3, 0xd1, 0x41, 0x3f, 0x05, 0x42, 0x02, 0x9f, 0xbd, - 0x0e, 0x72, 0x0a, 0xba, 0xa8, 0xc5, 0x17, 0x3e, 0x95, 0x18, 0x04, 0xf3, 0x0d, 0xe8, 0x5f, 0x76, - 0xdc, 0x8b, 0x2d, 0xdf, 0xf4, 0xa1, 0xf6, 0x2f, 0x12, 0xb9, 0x2e, 0x8f, 0x89, 0x7e, 0xd2, 0x00, - 0x27, 0x48, 0x85, 0x68, 0x46, 0xdc, 0x7f, 0x93, 0x8a, 0x5c, 0x3f, 0x54, 0x08, 0x4c, 0x3e, 0xe3, - 0xe0, 0xa7, 0xda, 0x4b, 0x87, 0x06, 0x7d, 0x92, 0x86, 0x4c, 0x1a, 0xa8, 0x64, 0x58, 0x06, 0xe3, - 0xef, 0xc7, 0xd3, 0x3e, 0x2a, 0x64, 0x56, 0x8b, 0xd1, 0x3c, 0x9a, 0xae, 0xe0, 0xc3, 0x8f, 0x04, - 0xf9, 0xca, 0xae, 0xe9, 0x6b, 0xef, 0x96, 0x01, 0x28, 0x77, 0xbb, 0xeb, 0xc4, 0x07, 0x9c, 0x75, - 0x48, 0x3b, 0x0b, 0xe6, 0x3b, 0xbb, 0x66, 0x74, 0x73, 0x06, 0xe9, 0x0f, 0xb8, 0x34, 0xf5, 0x71, - 0x91, 0x33, 0x39, 0x91, 0xaa, 0x36, 0x00, 0x13, 0x2a, 0x83, 0xd2, 0x0e, 0x1d, 0xcd, 0xf9, 0x50, - 0x98, 0x89, 0x47, 0xe8, 0xd0, 0xe7, 0x4b, 0x11, 0x7b, 0xf1, 0x73, 0x38, 0x4a, 0x3a, 0x3c, 0x60, - 0x13, 0x25, 0xa4, 0x3c, 0xe9, 0x2d, 0x16, 0xd0, 0x23, 0x99, 0xaf, 0xa9, 0x84, 0xae, 0x55, 0xf5, - 0xae, 0x15, 0x88, 0x96, 0x06, 0xcc, 0xd2, 0x5e, 0x98, 0x4b, 0x07, 0x5f, 0xb2, 0xe0, 0x9e, 0x02, - 0x16, 0x60, 0xd7, 0xf2, 0x61, 0x50, 0x4b, 0x2a, 0xc0, 0x24, 0x88, 0xf9, 0x0f, 0xb4, 0x67, 0x0b, - 0x07, 0x5d, 0xc3, 0x02, 0x3d, 0x58, 0xa3, 0x98, 0xf6, 0x27, 0x16, 0x46, 0x4d, 0x8c, 0x66, 0xf6, - 0x60, 0xfd, 0x98, 0x0c, 0xae, 0x6e, 0x3b, 0x3b, 0x3b, 0x3d, 0x18, 0x88, 0x09, 0x12, 0xef, 0x4c, - 0xcd, 0x9c, 0x24, 0x5c, 0x78, 0x27, 0xc8, 0xb9, 0xcf, 0x0a, 0x8f, 0x92, 0xa1, 0x07, 0xfe, 0xc4, - 0x54, 0xe2, 0x2c, 0x0a, 0x8b, 0x6b, 0x28, 0x9f, 0x31, 0x28, 0x88, 0x05, 0x7c, 0x16, 0x26, 0x9b, - 0x3d, 0x10, 0x5f, 0x92, 0xc0, 0x02, 0xb9, 0x17, 0x31, 0x50, 0xd0, 0x7b, 0x26, 0x08, 0x80, 0xf6, - 0x9d, 0x9c, 0xa8, 0x9f, 0x2d, 0x96, 0x09, 0xc7, 0x49, 0x8c, 0x88, 0xc5, 0x82, 0xaa, 0x8c, 0x24, - 0x37, 0x85, 0x9b, 0x3a, 0xf3, 0x60, 0x6e, 0x15, 0x06, 0x2d, 0xcd, 0xd3, 0xde, 0x9f, 0xb2, 0x27, - 0x3a, 0x0b, 0xe6, 0xf1, 0xe5, 0x60, 0x4d, 0x7a, 0x4c, 0x92, 0xac, 0x9a, 0x71, 0x69, 0xea, 0x0d, - 0x60, 0xe1, 0x02, 0xdc, 0x76, 0x5c, 0xd8, 0xe4, 0xce, 0x52, 0xf2, 0x89, 0xc3, 0xc3, 0xd3, 0xa9, - 0x37, 0x81, 0xe3, 0xd4, 0xd1, 0x7d, 0x19, 0xcd, 0xf5, 0x4d, 0xf7, 0x0a, 0x3d, 0x98, 0x36, 0x98, - 0xac, 0xfd, 0x25, 0xdb, 0x60, 0x96, 0x79, 0x14, 0x6f, 0x39, 0x28, 0x76, 0xa6, 0xd2, 0x31, 0xa3, - 0xd3, 0xe3, 0x41, 0x89, 0xea, 0x48, 0x60, 0xd0, 0x25, 0xf5, 0xa0, 0x61, 0x5e, 0xf5, 0xf1, 0x60, - 0x16, 0x89, 0x08, 0xdb, 0x0d, 0xb4, 0xeb, 0x3d, 0x3d, 0xe4, 0x43, 0xfc, 0xde, 0x88, 0xb2, 0x6a, - 0xbf, 0x14, 0xea, 0x8c, 0xce, 0xe9, 0xcc, 0x63, 0xd2, 0x30, 0x3f, 0x95, 0x8b, 0xe4, 0x15, 0xa6, - 0xfc, 0xe5, 0x2b, 0xb5, 0xae, 0xa7, 0xad, 0xa7, 0xd3, 0x9a, 0x33, 0x00, 0x84, 0xcd, 0x2f, 0x08, - 0x9c, 0xc1, 0xa4, 0xf0, 0xb1, 0xf1, 0x13, 0x8f, 0x02, 0x0e, 0x8a, 0x03, 0xb3, 0x33, 0x59, 0x40, - 0x05, 0x8f, 0x10, 0x8a, 0x70, 0x92, 0x3d, 0x3a, 0xbf, 0x98, 0x07, 0x57, 0x87, 0x27, 0x9c, 0xea, - 0xa6, 0x17, 0xb5, 0xec, 0x7b, 0xd3, 0x41, 0xc4, 0x1d, 0x29, 0x09, 0x9b, 0xe3, 0x49, 0x50, 0xf0, - 0xf6, 0x2f, 0x84, 0x8e, 0x80, 0xe4, 0x41, 0x7b, 0xa3, 0x9c, 0x6a, 0xac, 0x1a, 0xca, 0xdf, 0x84, - 0x1b, 0xe1, 0x2d, 0xe0, 0x84, 0xbd, 0xbf, 0x17, 0x62, 0x81, 0x7b, 0x1a, 0xda, 0xb3, 0x1c, 0x7c, - 0xc1, 0x37, 0xd9, 0xbc, 0x78, 0x93, 0x4d, 0x31, 0x92, 0x8a, 0x54, 0x3a, 0x7b, 0xf5, 0xf8, 0xec, - 0xc0, 0x11, 0xb4, 0x4a, 0x6a, 0xa5, 0x20, 0xf0, 0x4b, 0x2c, 0xfc, 0xff, 0x94, 0x4b, 0xd5, 0xf3, - 0x8e, 0x3e, 0xb9, 0x96, 0xa2, 0x27, 0x3c, 0xca, 0x63, 0x6b, 0xaf, 0x2b, 0x00, 0xad, 0x15, 0x39, - 0xe4, 0x50, 0x50, 0x37, 0x5c, 0x78, 0xc9, 0x82, 0x97, 0xbd, 0x81, 0xfd, 0x0e, 0x22, 0xb7, 0x1c, - 0x2b, 0xb7, 0x3f, 0xcf, 0x8b, 0x3a, 0xd4, 0xf0, 0x1a, 0x74, 0xa0, 0xa8, 0x98, 0xb6, 0xf3, 0x74, - 0x50, 0xea, 0xd3, 0x1c, 0xb4, 0xed, 0x94, 0xc7, 0xa3, 0x8a, 0x32, 0xd2, 0x54, 0x23, 0x24, 0xa9, - 0xfd, 0x5d, 0x0e, 0xcc, 0x31, 0x6f, 0xe2, 0x77, 0x04, 0x0e, 0xa8, 0x96, 0x94, 0x3c, 0x23, 0x95, - 0x85, 0x67, 0xa4, 0xea, 0x12, 0x28, 0x78, 0x42, 0x8d, 0x96, 0x64, 0x53, 0x9f, 0x08, 0xe6, 0xbb, - 0xb0, 0x0f, 0xed, 0x2e, 0xb4, 0x3b, 0x16, 0xf4, 0x4e, 0x17, 0xb0, 0x58, 0x62, 0xc3, 0x34, 0x70, - 0x99, 0x05, 0xe3, 0x77, 0xa7, 0xc3, 0x2a, 0x7b, 0x2d, 0xfd, 0x53, 0x09, 0x9c, 0x61, 0x5a, 0xc9, - 0x8a, 0xeb, 0xec, 0xa5, 0xd6, 0xd4, 0x97, 0xb3, 0xe3, 0xf1, 0x26, 0xaf, 0xa9, 0x77, 0x25, 0x36, - 0xca, 0x21, 0xc5, 0xc5, 0x34, 0xfa, 0xf7, 0x87, 0xd2, 0x7d, 0x1a, 0x27, 0xdd, 0xea, 0x21, 0xe9, - 0x4f, 0xe1, 0x40, 0x78, 0x1e, 0xcc, 0x1b, 0xd0, 0xec, 0x86, 0x43, 0xed, 0x1f, 0x31, 0x46, 0xf4, - 0x13, 0x41, 0xde, 0x8f, 0x56, 0xc3, 0x1e, 0x71, 0xb0, 0x32, 0xec, 0x97, 0xf8, 0x01, 0x2f, 0x8a, - 0xe1, 0x8f, 0x84, 0x1a, 0xce, 0xa0, 0x05, 0x2e, 0x8b, 0x58, 0xe0, 0xf9, 0x61, 0x16, 0xf8, 0xf5, - 0x60, 0xae, 0x67, 0x7a, 0xa4, 0xc1, 0x84, 0x77, 0xff, 0xb2, 0x49, 0xfc, 0x2d, 0xfb, 0x89, 0xa7, - 0xed, 0x86, 0x55, 0xed, 0xf0, 0x11, 0x89, 0x3f, 0x2c, 0x74, 0xb4, 0x6e, 0x54, 0xd9, 0xe9, 0x34, - 0xe2, 0xee, 0x31, 0x56, 0xee, 0x4e, 0x01, 0x75, 0x5d, 0x6f, 0xb5, 0xca, 0xab, 0xf8, 0xc4, 0x4d, - 0xe0, 0x82, 0xd5, 0x3d, 0x7b, 0x23, 0x12, 0x1f, 0x41, 0x58, 0x9d, 0x07, 0xa5, 0x80, 0x3f, 0xe5, - 0x18, 0x79, 0xb2, 0xf1, 0x8e, 0x93, 0x92, 0xd3, 0xbe, 0x28, 0x83, 0xe2, 0xa6, 0xed, 0x42, 0xb3, - 0xab, 0x3d, 0x8f, 0xd1, 0xa5, 0xef, 0xe7, 0x74, 0xe9, 0xa1, 0xc3, 0x1a, 0x06, 0xfa, 0x26, 0x23, - 0x2d, 0xe2, 0xc3, 0x91, 0x25, 0x2e, 0x96, 0xf3, 0xcc, 0x1c, 0x1e, 0x77, 0xb1, 0x55, 0xf2, 0xf8, - 0x52, 0x33, 0xef, 0x03, 0x84, 0x91, 0xfd, 0x6d, 0x19, 0x28, 0x1b, 0xfb, 0xde, 0x2e, 0x77, 0xe8, - 0xfb, 0x57, 0x65, 0xb0, 0x10, 0x9c, 0x8b, 0x69, 0x3b, 0x17, 0xa1, 0xad, 0x3d, 0x83, 0xeb, 0x91, - 0x7d, 0x94, 0x16, 0xf4, 0xc8, 0xf8, 0x41, 0xdd, 0x60, 0x42, 0xc3, 0x48, 0xc3, 0x8e, 0xf5, 0x0f, - 0x94, 0xb1, 0xc4, 0xd1, 0x5f, 0xda, 0xa0, 0xdf, 0x46, 0x01, 0x65, 0xb4, 0x17, 0x0b, 0xdf, 0x73, - 0x34, 0x82, 0xf6, 0xf0, 0xee, 0x5d, 0xec, 0xe6, 0xa2, 0x54, 0xa4, 0xb3, 0x47, 0xf5, 0x7a, 0x50, - 0x0a, 0x24, 0xa5, 0xce, 0x00, 0xb9, 0xd6, 0x6c, 0x29, 0xc7, 0xd4, 0x39, 0x30, 0x53, 0xb6, 0xbb, - 0xae, 0x63, 0x75, 0x95, 0xdc, 0xd9, 0x19, 0x50, 0xd0, 0xf7, 0xfa, 0xfe, 0x95, 0xb3, 0x0f, 0x07, - 0x0b, 0x2d, 0xdf, 0x85, 0xe6, 0x5e, 0x22, 0x6e, 0x77, 0xdc, 0x0e, 0x66, 0x6c, 0x67, 0xcb, 0xdc, - 0xf7, 0x77, 0xd5, 0x87, 0x1c, 0xb0, 0x3a, 0xa8, 0xd6, 0x34, 0x69, 0x34, 0xce, 0xaf, 0xdf, 0x89, - 0x57, 0x3a, 0x8a, 0xb6, 0x53, 0xde, 0xf7, 0x77, 0x97, 0xaf, 0xfb, 0xcc, 0x9f, 0x9d, 0xc9, 0x7d, - 0xfe, 0xcf, 0xce, 0xe4, 0xbe, 0xf6, 0x67, 0x67, 0x72, 0x3f, 0xf5, 0xe7, 0x67, 0x8e, 0x7d, 0xfe, - 0xcf, 0xcf, 0x1c, 0xfb, 0xd2, 0x9f, 0x9f, 0x39, 0xf6, 0x83, 0x52, 0xff, 0xc2, 0x85, 0x22, 0xa6, - 0xf2, 0xd8, 0xff, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x6a, 0x2a, 0x5f, 0x0f, 0xe3, 0x34, 0x02, 0x00, + 0xf2, 0xcf, 0xfb, 0x86, 0x9c, 0xd3, 0x5e, 0x20, 0x1c, 0x31, 0x87, 0x54, 0x9e, 0x29, 0x5a, 0xbc, + 0x27, 0x10, 0x8c, 0x8b, 0x33, 0xaa, 0x84, 0xec, 0x85, 0xfb, 0x05, 0x09, 0xa8, 0xe5, 0x4e, 0xc7, + 0xd9, 0xb7, 0xfd, 0x16, 0xec, 0xc1, 0x8e, 0xdf, 0x76, 0xcd, 0x0e, 0x64, 0xed, 0x67, 0x05, 0xc8, + 0x5d, 0xcb, 0xa5, 0x7d, 0x30, 0xfa, 0x4b, 0xe5, 0xf8, 0x32, 0xe1, 0x1d, 0x47, 0x52, 0xcb, 0x83, + 0xa5, 0xa4, 0x10, 0xa7, 0xd8, 0xbe, 0xa2, 0x60, 0x41, 0xd9, 0x4b, 0xf5, 0xd3, 0x12, 0x98, 0x0d, + 0x7a, 0xec, 0x1d, 0x11, 0x61, 0xfe, 0x5c, 0xca, 0xc9, 0x48, 0x48, 0x3c, 0x85, 0x0c, 0xdf, 0x95, + 0x62, 0x56, 0x11, 0x47, 0x3f, 0x9d, 0xe8, 0xca, 0xe9, 0x45, 0x87, 0x1e, 0x1b, 0xcd, 0xad, 0x95, + 0x66, 0xbd, 0xaa, 0x1b, 0x8a, 0xac, 0x7d, 0x55, 0x02, 0xf9, 0x0d, 0xcb, 0xde, 0x61, 0x03, 0x9b, + 0x9d, 0x44, 0x76, 0x64, 0x17, 0xde, 0x4f, 0x5b, 0x3a, 0x79, 0x50, 0x6f, 0x03, 0x27, 0xed, 0xfd, + 0xbd, 0x0b, 0xd0, 0x6d, 0x6e, 0xe3, 0x51, 0xd6, 0x6b, 0x3b, 0x2d, 0x68, 0x13, 0x23, 0xb4, 0x60, + 0x0c, 0x7d, 0xc7, 0x9b, 0x60, 0x02, 0x93, 0x07, 0xc4, 0x49, 0x8c, 0xc4, 0x43, 0xa6, 0x24, 0x86, + 0xa9, 0x54, 0xd3, 0x86, 0x21, 0xc4, 0xb3, 0xd7, 0xd4, 0xdf, 0x2a, 0x80, 0xab, 0xcb, 0xf6, 0x15, + 0x6c, 0x53, 0x90, 0x0e, 0xbe, 0xb2, 0x6b, 0xda, 0x3b, 0x10, 0x0f, 0x10, 0xa1, 0xc4, 0xd9, 0x48, + 0xff, 0x39, 0x3e, 0xd2, 0xbf, 0x6a, 0x80, 0x19, 0xc7, 0xed, 0x42, 0x77, 0xf9, 0x0a, 0xe6, 0x69, + 0x70, 0xd9, 0x99, 0xb6, 0xc9, 0x61, 0x45, 0x2c, 0x51, 0xf2, 0x4b, 0x4d, 0xf2, 0xbd, 0x11, 0x10, + 0x3a, 0x7b, 0x0b, 0x98, 0xa1, 0x69, 0xea, 0x3c, 0x28, 0x35, 0x8d, 0xaa, 0x6e, 0x6c, 0xd5, 0xaa, + 0xca, 0x31, 0xf5, 0x2a, 0x70, 0xbc, 0xd6, 0xd6, 0x8d, 0x72, 0xbb, 0xd6, 0x6c, 0x6c, 0xe1, 0x74, + 0x25, 0xa7, 0x3d, 0x37, 0x2f, 0xea, 0xd9, 0x9b, 0xcc, 0xcc, 0x30, 0x58, 0x0d, 0x30, 0xd3, 0x21, + 0x19, 0xf0, 0x10, 0x3a, 0x97, 0xaa, 0x76, 0x94, 0x20, 0x49, 0x30, 0x02, 0x42, 0xea, 0x19, 0x00, + 0x2e, 0xbb, 0x8e, 0xbd, 0x13, 0x9d, 0x69, 0x2b, 0x19, 0x4c, 0x8a, 0xf6, 0x9c, 0x1c, 0x28, 0x92, + 0x6f, 0xf0, 0xcd, 0x26, 0xf8, 0x5f, 0x24, 0xf8, 0xe0, 0x19, 0x59, 0xbc, 0x58, 0x5e, 0xd1, 0x44, + 0x8b, 0x3e, 0x22, 0x5d, 0x24, 0x32, 0x20, 0x96, 0x30, 0xad, 0xca, 0xad, 0xa0, 0x48, 0xbe, 0xa5, + 0x5e, 0x07, 0xf1, 0x51, 0x4a, 0x49, 0x36, 0x41, 0x3f, 0x65, 0x71, 0x99, 0x66, 0xaf, 0xcd, 0x1f, + 0x95, 0x40, 0xa9, 0x01, 0xfd, 0xca, 0x2e, 0xec, 0x5c, 0xd4, 0x1e, 0xc1, 0x2f, 0x80, 0xf6, 0x2c, + 0x68, 0xfb, 0xf7, 0xee, 0xf5, 0xc2, 0x05, 0xd0, 0x20, 0x41, 0x7b, 0x3e, 0xdb, 0xf9, 0x3e, 0x85, + 0xd7, 0x9f, 0x9b, 0x87, 0xd4, 0x35, 0x28, 0x21, 0x46, 0x65, 0x4e, 0x81, 0xa2, 0x0b, 0xbd, 0xfd, + 0x5e, 0xb0, 0x88, 0x46, 0x9f, 0xb4, 0xd7, 0x86, 0xe2, 0xac, 0x70, 0xe2, 0xbc, 0x55, 0xbc, 0x88, + 0x29, 0x84, 0x3d, 0xcd, 0x83, 0x99, 0x9a, 0x6d, 0xf9, 0x96, 0xd9, 0xd3, 0x5e, 0x90, 0x07, 0x0b, + 0x2d, 0xe8, 0x6f, 0x98, 0xae, 0xb9, 0x07, 0x7d, 0xe8, 0x7a, 0xda, 0x77, 0xf8, 0x3e, 0xa1, 0xdf, + 0x33, 0xfd, 0x6d, 0xc7, 0xdd, 0x0b, 0x54, 0x33, 0x78, 0x46, 0xaa, 0x79, 0x09, 0xba, 0x5e, 0xc4, + 0x57, 0xf0, 0x88, 0xde, 0x5c, 0x76, 0xdc, 0x8b, 0x68, 0x10, 0xa4, 0xd3, 0x34, 0xfa, 0x88, 0xe8, + 0xf5, 0x9c, 0x9d, 0x3a, 0xbc, 0x04, 0x83, 0xa8, 0x6a, 0xe1, 0x33, 0x9a, 0x0b, 0x74, 0x9d, 0x86, + 0xe3, 0xa3, 0x4e, 0xbb, 0xee, 0xec, 0x90, 0xb0, 0xb3, 0x25, 0x83, 0x4f, 0x8c, 0x72, 0x99, 0x97, + 0x20, 0xce, 0x55, 0x64, 0x73, 0xd1, 0x44, 0x75, 0x09, 0xa8, 0xe1, 0x67, 0x6d, 0xd8, 0x83, 0x7b, + 0xd0, 0x77, 0xaf, 0xe0, 0xdb, 0x25, 0x4a, 0xc6, 0x90, 0x37, 0x74, 0x80, 0x16, 0x9f, 0xac, 0x53, + 0xe9, 0x2d, 0x71, 0x92, 0x3b, 0xd4, 0x64, 0x5d, 0x84, 0xe2, 0x54, 0x6e, 0xcf, 0x92, 0x91, 0x35, + 0xf3, 0x72, 0x19, 0xe4, 0xf1, 0xe0, 0xf9, 0xe6, 0x1c, 0xb7, 0xc2, 0xb4, 0x07, 0x3d, 0xcf, 0xdc, + 0x81, 0xc1, 0x0a, 0x13, 0x7d, 0x54, 0x6f, 0x07, 0x85, 0x1e, 0xc6, 0x94, 0x0c, 0x0e, 0x0f, 0xe3, + 0x6a, 0x86, 0x0c, 0x0c, 0x44, 0x2b, 0x1c, 0x09, 0x30, 0xdc, 0x06, 0xf9, 0xe2, 0xec, 0xdd, 0xa0, + 0x40, 0xe0, 0x9f, 0x05, 0x85, 0xaa, 0xbe, 0xbc, 0xb9, 0xaa, 0x1c, 0x43, 0x7f, 0x03, 0xfe, 0x66, + 0x41, 0x61, 0xa5, 0xdc, 0x2e, 0xd7, 0x15, 0x09, 0xd5, 0xa3, 0xd6, 0x58, 0x69, 0x2a, 0x32, 0x4a, + 0xdc, 0x28, 0x37, 0x6a, 0x15, 0x25, 0xaf, 0xce, 0x81, 0x99, 0xf3, 0x65, 0xa3, 0x51, 0x6b, 0xac, + 0x2a, 0x05, 0xed, 0x2f, 0x59, 0xfc, 0xee, 0xe0, 0xf1, 0xbb, 0x21, 0x8e, 0xa7, 0x61, 0x90, 0xfd, + 0x62, 0x08, 0xd9, 0x93, 0x38, 0xc8, 0x7e, 0x40, 0x84, 0xc8, 0x14, 0xdc, 0x99, 0x8a, 0x60, 0x66, + 0xc3, 0x75, 0x3a, 0xd0, 0xf3, 0xb4, 0x97, 0x4a, 0xa0, 0x58, 0x31, 0xed, 0x0e, 0xec, 0x69, 0xd7, + 0x44, 0x50, 0x11, 0x57, 0xd1, 0x5c, 0xe0, 0x2a, 0xaa, 0x7d, 0x2b, 0x27, 0xda, 0xfb, 0x51, 0xba, + 0x4b, 0x84, 0x66, 0x8c, 0x7c, 0xc4, 0x7a, 0xb9, 0x44, 0x52, 0x53, 0xb8, 0x61, 0x47, 0x02, 0xb3, + 0x74, 0x35, 0xe0, 0x02, 0x64, 0xe7, 0xe1, 0xdf, 0xc9, 0x89, 0x4e, 0x0e, 0x83, 0x1a, 0x84, 0x64, + 0x62, 0xe4, 0x21, 0x36, 0x11, 0x1c, 0x45, 0x6d, 0x0a, 0x9b, 0x87, 0x12, 0x98, 0xdb, 0xb4, 0xbd, + 0x61, 0x42, 0x11, 0x0f, 0xc7, 0x1f, 0x54, 0x83, 0x21, 0x74, 0xa8, 0x70, 0xfc, 0xa3, 0xe9, 0x65, + 0x2f, 0x98, 0xef, 0xe4, 0xc0, 0xc9, 0x55, 0x68, 0x43, 0xd7, 0xea, 0x90, 0x1a, 0x04, 0x92, 0x78, + 0x12, 0x2f, 0x89, 0x47, 0x70, 0x9c, 0x0f, 0xfb, 0x82, 0x97, 0xc0, 0xab, 0x42, 0x09, 0x3c, 0x85, + 0x93, 0xc0, 0x2d, 0x82, 0x74, 0xa6, 0x70, 0xad, 0xfa, 0x2c, 0x98, 0x6f, 0x38, 0xbe, 0xb5, 0x6d, + 0x75, 0x88, 0x0f, 0xda, 0x2f, 0xc8, 0x20, 0x5f, 0xb7, 0x3c, 0x5f, 0x2b, 0x47, 0xdd, 0xc9, 0xf5, + 0x60, 0xce, 0xb2, 0x3b, 0xbd, 0xfd, 0x2e, 0x34, 0xa0, 0x49, 0xfa, 0x95, 0x92, 0xc1, 0x26, 0x45, + 0x5b, 0xfb, 0x88, 0x2d, 0x39, 0xd8, 0xda, 0xff, 0x1d, 0xe1, 0x65, 0x18, 0x96, 0x05, 0x1c, 0x97, + 0x32, 0xc6, 0xee, 0x2a, 0x83, 0x05, 0x9b, 0xc9, 0x1a, 0x18, 0xec, 0x83, 0xf7, 0x12, 0xb0, 0xe4, + 0x0c, 0xfe, 0x0b, 0xed, 0x03, 0x42, 0x8d, 0x75, 0x14, 0x43, 0xe9, 0x90, 0x59, 0x19, 0x63, 0x92, + 0xac, 0x82, 0xc5, 0x5a, 0xa3, 0xad, 0x1b, 0x8d, 0x72, 0x9d, 0x66, 0x91, 0xb5, 0x7f, 0x95, 0x40, + 0xc1, 0x80, 0xfd, 0xde, 0x15, 0x36, 0xf0, 0x34, 0x75, 0x14, 0xcf, 0x85, 0x8e, 0xe2, 0xea, 0x0a, + 0x00, 0x66, 0x07, 0x15, 0x8c, 0x6f, 0xe6, 0x92, 0x86, 0x86, 0x33, 0xe5, 0x2a, 0x58, 0x0e, 0x73, + 0x1b, 0xcc, 0x97, 0xda, 0x0b, 0x85, 0x77, 0x8e, 0x38, 0x6a, 0x98, 0xc3, 0x98, 0x3e, 0xe1, 0x83, + 0x42, 0x9b, 0x3d, 0x23, 0xc9, 0x1d, 0x8d, 0xf8, 0xbf, 0x26, 0x81, 0x7c, 0x1b, 0xf5, 0x96, 0x4c, + 0xc7, 0xf9, 0xb9, 0xf1, 0x74, 0x1c, 0x91, 0x89, 0xd1, 0xf1, 0xbb, 0xc0, 0x3c, 0xab, 0xb1, 0xd4, + 0x55, 0x22, 0x51, 0xc5, 0xb9, 0x0f, 0xc6, 0xd1, 0xf0, 0x21, 0xec, 0x1c, 0x8d, 0x88, 0x3f, 0xf3, + 0x48, 0x00, 0xd6, 0xe1, 0xde, 0x05, 0xe8, 0x7a, 0xbb, 0x56, 0x5f, 0xfb, 0x2b, 0x19, 0xcc, 0xae, + 0x42, 0xbf, 0xe5, 0x9b, 0xfe, 0xbe, 0x37, 0xb0, 0xdd, 0x69, 0x3b, 0x15, 0xb3, 0xb3, 0x0b, 0x69, + 0x77, 0x14, 0x3c, 0x6a, 0xef, 0x91, 0x45, 0xfd, 0x89, 0xa2, 0x72, 0x96, 0xc2, 0x32, 0x62, 0x30, + 0x79, 0x14, 0xc8, 0x77, 0x4d, 0xdf, 0xa4, 0x58, 0x5c, 0x33, 0x80, 0x45, 0x44, 0xc8, 0xc0, 0xd9, + 0xb4, 0x77, 0x48, 0x22, 0x0e, 0x45, 0x02, 0xe5, 0xa7, 0x03, 0xe1, 0x03, 0xb9, 0x31, 0x50, 0x38, + 0x01, 0x16, 0x1a, 0xcd, 0xf6, 0x56, 0xbd, 0xb9, 0xba, 0xaa, 0xa3, 0x54, 0x45, 0x56, 0x4f, 0x01, + 0x75, 0xa3, 0x7c, 0xef, 0xba, 0xde, 0x68, 0x6f, 0x35, 0x9a, 0x55, 0x9d, 0x7e, 0x99, 0x57, 0x8f, + 0x83, 0xb9, 0x4a, 0xb9, 0xb2, 0x16, 0x24, 0x14, 0xd4, 0xd3, 0xe0, 0xe4, 0xba, 0xbe, 0xbe, 0xac, + 0x1b, 0xad, 0xb5, 0xda, 0xc6, 0x16, 0x22, 0xb3, 0xd2, 0xdc, 0x6c, 0x54, 0x95, 0xa2, 0xaa, 0x81, + 0x53, 0xcc, 0x9b, 0xf3, 0x46, 0xb3, 0xb1, 0xba, 0xd5, 0x6a, 0x97, 0xdb, 0xba, 0x32, 0xa3, 0x5e, + 0x05, 0x8e, 0x57, 0xca, 0x0d, 0x9c, 0xbd, 0xd2, 0x6c, 0x34, 0xf4, 0x4a, 0x5b, 0x29, 0x69, 0xff, + 0x96, 0x07, 0x73, 0x35, 0xaf, 0x61, 0xee, 0xc1, 0x73, 0x66, 0xcf, 0xea, 0x6a, 0x2f, 0x60, 0x66, + 0x1e, 0x37, 0x80, 0x05, 0x97, 0xfc, 0x85, 0xdd, 0xb6, 0x05, 0x09, 0x9a, 0x0b, 0x06, 0x9f, 0x88, + 0xe6, 0xe4, 0x36, 0x26, 0x10, 0xcc, 0xc9, 0xc9, 0x93, 0xba, 0x0c, 0x00, 0xf9, 0xd7, 0x8e, 0xee, + 0x88, 0x3d, 0x3b, 0xd8, 0x9a, 0xcc, 0x3d, 0xe8, 0x41, 0xf7, 0x92, 0xd5, 0x81, 0x41, 0x4e, 0x83, + 0xf9, 0x4a, 0xfb, 0xba, 0x2c, 0xba, 0xbf, 0xc8, 0x80, 0xca, 0x54, 0x27, 0xa6, 0x37, 0xfc, 0x71, + 0x59, 0x64, 0x77, 0x50, 0x88, 0x64, 0x3a, 0x4d, 0x79, 0xb1, 0x34, 0xde, 0xb2, 0x6d, 0xbb, 0xd9, + 0xdc, 0x6a, 0xad, 0x35, 0x8d, 0xb6, 0x22, 0xab, 0xf3, 0xa0, 0x84, 0x1e, 0xeb, 0xcd, 0xc6, 0xaa, + 0x92, 0x57, 0xaf, 0x06, 0x27, 0xd6, 0xca, 0xad, 0xad, 0x5a, 0xe3, 0x5c, 0xb9, 0x5e, 0xab, 0x6e, + 0x55, 0xd6, 0xca, 0x46, 0x4b, 0x29, 0xa8, 0xd7, 0x80, 0xab, 0xdb, 0x35, 0xdd, 0xd8, 0x5a, 0xd1, + 0xcb, 0xed, 0x4d, 0x43, 0x6f, 0x6d, 0x35, 0x9a, 0x5b, 0x8d, 0xf2, 0xba, 0xae, 0x14, 0x51, 0xf3, + 0xc7, 0xaf, 0x22, 0xb5, 0x99, 0x39, 0xa8, 0x8c, 0xa5, 0x18, 0x65, 0x9c, 0x1d, 0x54, 0x46, 0xc0, + 0xaa, 0x95, 0xa1, 0xb7, 0x74, 0xe3, 0x9c, 0xae, 0xcc, 0x0d, 0xd3, 0xb5, 0x79, 0xf5, 0x24, 0x50, + 0x10, 0x0f, 0x5b, 0xb5, 0x56, 0x90, 0xb3, 0xaa, 0x2c, 0x68, 0x9f, 0x2e, 0x82, 0x53, 0x06, 0xdc, + 0xb1, 0x3c, 0x1f, 0xba, 0x1b, 0xe6, 0x95, 0x3d, 0x68, 0xfb, 0x41, 0x27, 0xff, 0x4f, 0xa9, 0x95, + 0x71, 0x1d, 0x2c, 0xf4, 0x09, 0x8d, 0x75, 0xe8, 0xef, 0x3a, 0x5d, 0x3a, 0x0a, 0x3f, 0x22, 0xb6, + 0xe7, 0x58, 0xda, 0x60, 0xb3, 0x1b, 0xfc, 0xd7, 0x8c, 0x6e, 0xcb, 0x09, 0xba, 0x9d, 0x1f, 0x47, + 0xb7, 0xd5, 0xeb, 0xc0, 0xec, 0xbe, 0x07, 0x5d, 0x7d, 0xcf, 0xb4, 0x7a, 0xc1, 0x1d, 0x9f, 0x61, + 0x82, 0xf6, 0xce, 0xbc, 0xe8, 0x89, 0x15, 0xa6, 0x2e, 0xc3, 0xc5, 0x18, 0xd3, 0xb7, 0x9e, 0x01, + 0x80, 0x56, 0x76, 0xd3, 0xed, 0x51, 0x65, 0x65, 0x52, 0x10, 0x7f, 0x17, 0xac, 0x5e, 0xcf, 0xb2, + 0x77, 0xc2, 0x7d, 0xff, 0x28, 0x41, 0x7b, 0xb1, 0x2c, 0x72, 0x82, 0x25, 0x2d, 0x6f, 0xe9, 0x5a, + 0xd3, 0x0b, 0xa5, 0x29, 0xf7, 0xbb, 0x07, 0x9b, 0x4e, 0x51, 0x55, 0xc0, 0x3c, 0x4e, 0xa3, 0x2d, + 0x50, 0x99, 0x41, 0x7d, 0x70, 0x40, 0x6e, 0x5d, 0x6f, 0xaf, 0x35, 0xab, 0xe1, 0xbb, 0x12, 0x22, + 0x89, 0x98, 0x29, 0x37, 0xee, 0xc5, 0xad, 0x71, 0x56, 0x7d, 0x30, 0xb8, 0x86, 0xe9, 0xb0, 0xcb, + 0x75, 0x43, 0x2f, 0x57, 0xef, 0xdd, 0xd2, 0x9f, 0x56, 0x6b, 0xb5, 0x5b, 0x7c, 0xe3, 0x0a, 0xda, + 0xd1, 0x1c, 0xe2, 0x57, 0x5f, 0x2f, 0xd7, 0xea, 0xb4, 0x7f, 0x5f, 0x69, 0x1a, 0xeb, 0xe5, 0xb6, + 0x32, 0xaf, 0xbd, 0x5c, 0x06, 0xca, 0x2a, 0xf4, 0x37, 0x1c, 0xd7, 0x37, 0x7b, 0x75, 0xcb, 0xbe, + 0xb8, 0xe9, 0xf6, 0xb8, 0xc9, 0xa6, 0x70, 0x98, 0x0e, 0x7e, 0x88, 0xe4, 0x08, 0xc6, 0xef, 0x88, + 0xf7, 0x71, 0xb6, 0x48, 0x99, 0xa2, 0x04, 0xed, 0x59, 0x92, 0xc8, 0x72, 0xb7, 0x78, 0xa9, 0xe9, + 0xf4, 0xe4, 0xd9, 0xd3, 0x1e, 0x9f, 0x87, 0xa0, 0x56, 0xd4, 0x9e, 0x97, 0x07, 0xa5, 0x15, 0xcb, + 0x36, 0x7b, 0xd6, 0x33, 0xb9, 0xe8, 0x98, 0x51, 0x1f, 0x93, 0x4b, 0xe8, 0x63, 0xa4, 0xb1, 0xc6, + 0xcf, 0x9f, 0x95, 0x45, 0x97, 0x17, 0x18, 0xd9, 0x07, 0x4c, 0xc6, 0x0c, 0x9e, 0x1f, 0x93, 0x44, + 0x96, 0x17, 0x46, 0xd3, 0x4b, 0x87, 0xe1, 0x67, 0xbf, 0x3f, 0x6c, 0xac, 0x81, 0xf6, 0x5d, 0x1a, + 0xa6, 0x0a, 0xb3, 0xda, 0x1f, 0xc8, 0x40, 0x5b, 0x85, 0xfe, 0x39, 0xe8, 0x86, 0x53, 0x01, 0xdc, + 0xeb, 0x53, 0x7b, 0x9b, 0x69, 0xb2, 0x6f, 0x66, 0x01, 0x3c, 0xcf, 0x03, 0x58, 0x4e, 0x68, 0x3c, + 0x31, 0xa4, 0x63, 0x1a, 0x6f, 0x0d, 0x14, 0x3d, 0xfc, 0x9e, 0xaa, 0xd9, 0x63, 0xe2, 0x87, 0x4b, + 0x4c, 0x8c, 0xa5, 0x4e, 0x08, 0x1b, 0x94, 0x80, 0xf6, 0xdd, 0x70, 0x12, 0xf4, 0xc3, 0x9c, 0x76, + 0xac, 0x1c, 0x9a, 0xd9, 0x74, 0xfa, 0xe2, 0x66, 0xab, 0x2e, 0xc3, 0xec, 0x1b, 0xed, 0x63, 0x05, + 0x70, 0x72, 0x58, 0x75, 0xb4, 0x0f, 0xe5, 0xb8, 0x1d, 0x76, 0x88, 0x87, 0xfc, 0x1c, 0xdd, 0x40, + 0x44, 0x0f, 0xea, 0xe3, 0xc0, 0xd5, 0xe1, 0x32, 0x5c, 0xdb, 0x69, 0xc0, 0xcb, 0x5e, 0x0f, 0xfa, + 0x3e, 0x74, 0x71, 0xd5, 0x4a, 0xc6, 0xf0, 0x97, 0xea, 0x13, 0xc0, 0x83, 0x2c, 0xdb, 0xb3, 0xba, + 0xd0, 0x6d, 0x5b, 0x7d, 0xaf, 0x6c, 0x77, 0xdb, 0xfb, 0xbe, 0xe3, 0x5a, 0x26, 0xbd, 0x91, 0xb2, + 0x64, 0xc4, 0xbd, 0x56, 0x6f, 0x06, 0x8a, 0xe5, 0x35, 0xed, 0x0b, 0x8e, 0xe9, 0x76, 0x2d, 0x7b, + 0xa7, 0x6e, 0x79, 0x3e, 0xf5, 0x00, 0x3e, 0x90, 0xae, 0xfd, 0xb5, 0x2c, 0x7a, 0x98, 0x6e, 0x04, + 0xac, 0x31, 0x1d, 0xca, 0xf3, 0x65, 0x91, 0xe3, 0x71, 0xe9, 0x68, 0xa7, 0x53, 0x96, 0xe7, 0x4e, + 0xdb, 0x90, 0x18, 0x3e, 0x82, 0xe3, 0xae, 0x85, 0xa4, 0x07, 0x86, 0xc0, 0x39, 0xdd, 0xa8, 0xad, + 0xd4, 0x74, 0x64, 0x56, 0x5c, 0x0d, 0x4e, 0x44, 0xef, 0xaa, 0xf7, 0x6e, 0xb5, 0xf4, 0x46, 0x5b, + 0x29, 0xa1, 0x7e, 0x8a, 0x24, 0xaf, 0x94, 0x6b, 0x75, 0xbd, 0xba, 0xd5, 0x6e, 0xa2, 0x37, 0xd5, + 0xf1, 0x4c, 0x0b, 0xed, 0x39, 0x79, 0x70, 0x1c, 0xcb, 0xf6, 0x0a, 0x96, 0x2a, 0x12, 0xca, 0x80, + 0xaf, 0x6d, 0x08, 0xd0, 0x2c, 0x11, 0xaf, 0xf6, 0xfb, 0xc2, 0x17, 0x6e, 0x32, 0x10, 0x0e, 0x94, + 0x11, 0xa3, 0x19, 0xdf, 0x91, 0x44, 0x22, 0x54, 0x08, 0x93, 0x4d, 0xa7, 0x14, 0xff, 0x3c, 0xed, + 0x11, 0x27, 0x1e, 0x7c, 0x6c, 0x65, 0x56, 0xf0, 0xc7, 0x4f, 0xdb, 0xa8, 0x19, 0x58, 0x1d, 0x16, + 0x01, 0xc0, 0x29, 0x58, 0x83, 0x88, 0x1e, 0x0c, 0x1d, 0xaf, 0xe2, 0xf4, 0xa0, 0x5c, 0x69, 0xd7, + 0xce, 0xe9, 0x71, 0x7a, 0xf0, 0x79, 0x19, 0x94, 0x56, 0xa1, 0x8f, 0xe6, 0x54, 0x9e, 0xf6, 0x44, + 0x81, 0xf5, 0x1f, 0x64, 0xc6, 0xf4, 0x9c, 0x8e, 0xd9, 0x0b, 0x97, 0x01, 0xc8, 0x93, 0xf6, 0x63, + 0xe3, 0x98, 0x20, 0x41, 0xd1, 0x31, 0xe3, 0xd5, 0x0f, 0x81, 0x82, 0x8f, 0x5e, 0xd3, 0x65, 0xe8, + 0x87, 0xc6, 0x0e, 0x57, 0x88, 0x48, 0xd5, 0xf4, 0x4d, 0x83, 0xe4, 0x67, 0x46, 0x27, 0x41, 0xdb, + 0x25, 0x86, 0x91, 0xef, 0x47, 0xfb, 0xf3, 0x2f, 0x65, 0x70, 0x35, 0x69, 0x1f, 0xe5, 0x7e, 0xbf, + 0xe5, 0x3b, 0x2e, 0x34, 0x60, 0x07, 0x5a, 0x7d, 0x7f, 0x60, 0x7d, 0xcf, 0x25, 0xa9, 0xc1, 0x66, + 0x33, 0x7d, 0xd4, 0xde, 0x20, 0x8b, 0x46, 0xf8, 0x3d, 0xd0, 0x1e, 0x07, 0xca, 0x8b, 0x69, 0xec, + 0x9f, 0x92, 0x44, 0x62, 0xf6, 0xa6, 0x24, 0x9e, 0x0e, 0xa8, 0x8f, 0x1f, 0x01, 0x50, 0xc1, 0xca, + 0x8d, 0xa1, 0x57, 0xf4, 0xda, 0x06, 0x1a, 0x04, 0x1e, 0x02, 0xae, 0xdd, 0xd8, 0x34, 0x2a, 0x6b, + 0xe5, 0x96, 0xbe, 0x65, 0xe8, 0xab, 0xb5, 0x56, 0x9b, 0x3a, 0x65, 0x91, 0xaf, 0x66, 0xd4, 0xeb, + 0xc0, 0xe9, 0xd6, 0xe6, 0x72, 0xab, 0x62, 0xd4, 0x36, 0x70, 0xba, 0xa1, 0x37, 0xf4, 0xf3, 0xf4, + 0x6d, 0x49, 0xfb, 0x88, 0x02, 0xe6, 0xd0, 0x04, 0xa0, 0x45, 0xe6, 0x05, 0xda, 0xdf, 0xe4, 0xc1, + 0x9c, 0x01, 0x3d, 0xa7, 0x77, 0x09, 0xcf, 0x11, 0xa6, 0x35, 0xf5, 0xf8, 0xb6, 0x2c, 0x7a, 0x7e, + 0x9b, 0x61, 0x76, 0x89, 0x61, 0x34, 0x7e, 0xa2, 0x69, 0x5e, 0x32, 0xad, 0x9e, 0x79, 0x81, 0x76, + 0x35, 0x25, 0x23, 0x4a, 0x50, 0x97, 0x80, 0xea, 0x5c, 0xb6, 0xa1, 0xdb, 0xea, 0x5c, 0xd6, 0xfd, + 0xdd, 0x72, 0xb7, 0xeb, 0x42, 0xcf, 0xa3, 0xab, 0x17, 0x43, 0xde, 0xa8, 0x37, 0x81, 0xe3, 0x38, + 0x95, 0xc9, 0x4c, 0x1c, 0x64, 0x06, 0x93, 0xc3, 0x9c, 0x65, 0xfb, 0x4a, 0x90, 0xb3, 0xc0, 0xe4, + 0x8c, 0x92, 0xd9, 0xe3, 0x12, 0x45, 0xfe, 0x94, 0xce, 0xf5, 0x60, 0xce, 0x36, 0xf7, 0xa0, 0x7e, + 0x7f, 0xdf, 0x72, 0xa1, 0x87, 0x1d, 0x63, 0x64, 0x83, 0x4d, 0xd2, 0x3e, 0x26, 0x74, 0xde, 0x5c, + 0x4c, 0x62, 0xe9, 0x74, 0x7f, 0x75, 0x0c, 0xd5, 0x1f, 0xd2, 0xcf, 0xc8, 0xda, 0x47, 0x64, 0x30, + 0x4f, 0x99, 0x2a, 0xdb, 0x57, 0x6a, 0x5d, 0xed, 0x21, 0x9c, 0xf1, 0x6b, 0xa2, 0xb4, 0xc0, 0xf8, + 0xc5, 0x0f, 0xda, 0x4f, 0xc8, 0xa2, 0xee, 0xce, 0x43, 0x2a, 0x8e, 0xcb, 0x88, 0x77, 0x1c, 0xdd, + 0x76, 0xf6, 0xa9, 0xa3, 0x6a, 0xc9, 0x20, 0x0f, 0x59, 0x2e, 0xea, 0x69, 0xbf, 0x2e, 0xe4, 0x4c, + 0x2d, 0x58, 0x8d, 0x23, 0x02, 0xf0, 0x33, 0x32, 0x58, 0xa4, 0x5c, 0xb5, 0xe8, 0x39, 0x1f, 0xa1, + 0x03, 0x6f, 0x3f, 0x25, 0x6c, 0x08, 0x0e, 0xa9, 0x3f, 0x2d, 0xe9, 0x01, 0x03, 0xe4, 0x27, 0x84, + 0x82, 0xa3, 0x09, 0x57, 0xe4, 0x88, 0xa0, 0x7c, 0x57, 0x1e, 0xcc, 0x6d, 0x7a, 0xd0, 0xa5, 0x7e, + 0xfb, 0xda, 0x6b, 0xf3, 0x40, 0x5e, 0x85, 0xdc, 0x46, 0xea, 0x8b, 0x84, 0x3d, 0x7c, 0xd9, 0xca, + 0x32, 0x44, 0x91, 0x8d, 0x14, 0x03, 0xdb, 0x8d, 0x60, 0x91, 0x88, 0xb4, 0xec, 0xfb, 0xc8, 0x48, + 0x0c, 0xbc, 0x69, 0x07, 0x52, 0x27, 0xb1, 0x55, 0x84, 0xcb, 0x42, 0x59, 0x2a, 0x88, 0xa7, 0x3a, + 0xdc, 0x26, 0xf3, 0xd9, 0xbc, 0x31, 0x90, 0xaa, 0x3e, 0x1a, 0x5c, 0xe5, 0xf4, 0x21, 0x39, 0xbf, + 0xc2, 0x64, 0x2e, 0xe0, 0xcc, 0xc3, 0x5e, 0x69, 0x7f, 0x23, 0xe4, 0xab, 0x2b, 0x2e, 0x9d, 0x74, + 0xba, 0xd0, 0x9f, 0x8c, 0x49, 0x72, 0x12, 0x28, 0x28, 0x07, 0xde, 0x7f, 0x31, 0xf4, 0x56, 0xb3, + 0x7e, 0x4e, 0x1f, 0xbe, 0x8c, 0x51, 0xd0, 0x9e, 0x2b, 0x83, 0xd9, 0x65, 0xd7, 0x31, 0xbb, 0x1d, + 0xd3, 0xf3, 0xb5, 0xef, 0x4a, 0x60, 0x7e, 0xc3, 0xbc, 0xd2, 0x73, 0xcc, 0x2e, 0xf6, 0xef, 0x1f, + 0xe8, 0x0b, 0xfa, 0xe4, 0x55, 0xd0, 0x17, 0xd0, 0x47, 0xfe, 0x60, 0x60, 0x78, 0x74, 0x2f, 0x27, + 0x72, 0xaf, 0x66, 0xb8, 0xcd, 0x27, 0x0d, 0x0b, 0x56, 0x1a, 0xf0, 0xb5, 0xc4, 0xf2, 0x14, 0x63, + 0x51, 0x7e, 0x44, 0x2c, 0xfc, 0xa8, 0x08, 0xc9, 0xa3, 0xd9, 0x95, 0x7f, 0x5e, 0x09, 0x14, 0xab, + 0x10, 0x5b, 0x71, 0xbf, 0x2a, 0x81, 0x99, 0x16, 0xf4, 0xb1, 0x05, 0x77, 0x3b, 0xe7, 0x29, 0xdc, + 0xc5, 0x19, 0x22, 0x27, 0xf6, 0xe0, 0x19, 0x4d, 0xd6, 0x99, 0xf3, 0xd6, 0xf8, 0x7f, 0x0a, 0x8f, + 0x44, 0x52, 0xee, 0x12, 0x2d, 0xf3, 0x50, 0x1e, 0x89, 0x89, 0xa4, 0xb2, 0xf7, 0xb5, 0x7a, 0x8f, + 0x44, 0x5d, 0xab, 0x98, 0x5e, 0xef, 0xd5, 0xac, 0x7e, 0x26, 0x7a, 0x9b, 0x51, 0xe6, 0x13, 0x9c, + 0xa3, 0x1e, 0x0b, 0x66, 0x88, 0xcc, 0x83, 0xf9, 0xe8, 0xa0, 0x9f, 0x02, 0x21, 0x81, 0xcf, 0x5e, + 0x07, 0x39, 0x05, 0x5d, 0xd4, 0xe2, 0x0b, 0x9f, 0x4a, 0x0c, 0x82, 0xf9, 0x06, 0xf4, 0x2f, 0x3b, + 0xee, 0xc5, 0x96, 0x6f, 0xfa, 0x50, 0xfb, 0x67, 0x89, 0x5c, 0x97, 0xc7, 0x44, 0x3f, 0x69, 0x80, + 0x13, 0xa4, 0x42, 0x34, 0x23, 0xee, 0xbf, 0x49, 0x45, 0xae, 0x1f, 0x2a, 0x04, 0x26, 0x9f, 0x71, + 0xf0, 0x53, 0xed, 0xa5, 0x43, 0x83, 0x3e, 0x49, 0x43, 0x26, 0x0d, 0x54, 0x32, 0x2c, 0x83, 0xf1, + 0xf7, 0xe3, 0x69, 0x1f, 0x15, 0x32, 0xab, 0xc5, 0x68, 0x1e, 0x4d, 0x57, 0xf0, 0xe1, 0x47, 0x82, + 0x7c, 0x65, 0xd7, 0xf4, 0xb5, 0x77, 0xcb, 0x00, 0x94, 0xbb, 0xdd, 0x75, 0xe2, 0x03, 0xce, 0x3a, + 0xa4, 0x9d, 0x05, 0xf3, 0x9d, 0x5d, 0x33, 0xba, 0x39, 0x83, 0xf4, 0x07, 0x5c, 0x9a, 0xfa, 0xb8, + 0xc8, 0x99, 0x9c, 0x48, 0x55, 0x1b, 0x80, 0x09, 0x95, 0x41, 0x69, 0x87, 0x8e, 0xe6, 0x7c, 0x28, + 0xcc, 0xc4, 0x23, 0x74, 0xe8, 0xf3, 0xa5, 0x88, 0xbd, 0xf8, 0x39, 0x1c, 0x25, 0x1d, 0x1e, 0xb0, + 0x89, 0x12, 0x52, 0x9e, 0xf4, 0x16, 0x0b, 0xe8, 0x91, 0xcc, 0xd7, 0x54, 0x42, 0xd7, 0xaa, 0x7a, + 0xd7, 0x0a, 0x44, 0x4b, 0x03, 0x66, 0x69, 0x2f, 0xcc, 0xa5, 0x83, 0x2f, 0x59, 0x70, 0x4f, 0x01, + 0x0b, 0xb0, 0x6b, 0xf9, 0x30, 0xa8, 0x25, 0x15, 0x60, 0x12, 0xc4, 0xfc, 0x07, 0xda, 0xb3, 0x85, + 0x83, 0xae, 0x61, 0x81, 0x1e, 0xac, 0x51, 0x4c, 0xfb, 0x13, 0x0b, 0xa3, 0x26, 0x46, 0x33, 0x7b, + 0xb0, 0x7e, 0x4c, 0x06, 0x57, 0xb7, 0x9d, 0x9d, 0x9d, 0x1e, 0x0c, 0xc4, 0x04, 0x89, 0x77, 0xa6, + 0x66, 0x4e, 0x12, 0x2e, 0xbc, 0x13, 0xe4, 0xdc, 0x67, 0x85, 0x47, 0xc9, 0xd0, 0x03, 0x7f, 0x62, + 0x2a, 0x71, 0x16, 0x85, 0xc5, 0x35, 0x94, 0xcf, 0x18, 0x14, 0xc4, 0x02, 0x3e, 0x0b, 0x93, 0xcd, + 0x1e, 0x88, 0x2f, 0x49, 0x60, 0x81, 0xdc, 0x8b, 0x18, 0x28, 0xe8, 0x3d, 0x13, 0x04, 0x40, 0xfb, + 0x6e, 0x4e, 0xd4, 0xcf, 0x16, 0xcb, 0x84, 0xe3, 0x24, 0x46, 0xc4, 0x62, 0x41, 0x55, 0x46, 0x92, + 0x9b, 0xc2, 0x4d, 0x9d, 0x79, 0x30, 0xb7, 0x0a, 0x83, 0x96, 0xe6, 0x69, 0xef, 0x4f, 0xd9, 0x13, + 0x9d, 0x05, 0xf3, 0xf8, 0x72, 0xb0, 0x26, 0x3d, 0x26, 0x49, 0x56, 0xcd, 0xb8, 0x34, 0xf5, 0x06, + 0xb0, 0x70, 0x01, 0x6e, 0x3b, 0x2e, 0x6c, 0x72, 0x67, 0x29, 0xf9, 0xc4, 0xe1, 0xe1, 0xe9, 0xd4, + 0x9b, 0xc0, 0x71, 0xea, 0xe8, 0xbe, 0x8c, 0xe6, 0xfa, 0xa6, 0x7b, 0x85, 0x1e, 0x4c, 0x1b, 0x4c, + 0xd6, 0xfe, 0x92, 0x6d, 0x30, 0xcb, 0x3c, 0x8a, 0xb7, 0x1c, 0x14, 0x3b, 0x53, 0xe9, 0x98, 0xd1, + 0xe9, 0xf1, 0xa0, 0x44, 0x75, 0x24, 0x30, 0xe8, 0x92, 0x7a, 0xd0, 0x30, 0xaf, 0xfa, 0x78, 0x30, + 0x8b, 0x44, 0x84, 0xed, 0x06, 0xda, 0xf5, 0x9e, 0x1e, 0xf2, 0x21, 0x7e, 0x6f, 0x44, 0x59, 0xb5, + 0x5f, 0x0a, 0x75, 0x46, 0xe7, 0x74, 0xe6, 0x31, 0x69, 0x98, 0x9f, 0xca, 0x45, 0xf2, 0x0a, 0x53, + 0xfe, 0xf2, 0x95, 0x5a, 0xd7, 0xd3, 0xd6, 0xd3, 0x69, 0xcd, 0x19, 0x00, 0xc2, 0xe6, 0x17, 0x04, + 0xce, 0x60, 0x52, 0xf8, 0xd8, 0xf8, 0x89, 0x47, 0x01, 0x07, 0xc5, 0x81, 0xd9, 0x99, 0x2c, 0xa0, + 0x82, 0x47, 0x08, 0x45, 0x38, 0xc9, 0x1e, 0x9d, 0x5f, 0xcc, 0x83, 0xab, 0xc3, 0x13, 0x4e, 0x75, + 0xd3, 0x8b, 0x5a, 0xf6, 0xbd, 0xe9, 0x20, 0xe2, 0x8e, 0x94, 0x84, 0xcd, 0xf1, 0x24, 0x28, 0x78, + 0xfb, 0x17, 0x42, 0x47, 0x40, 0xf2, 0xa0, 0xbd, 0x51, 0x4e, 0x35, 0x56, 0x0d, 0xe5, 0x6f, 0xc2, + 0x8d, 0xf0, 0x16, 0x70, 0xc2, 0xde, 0xdf, 0x0b, 0xb1, 0xc0, 0x3d, 0x0d, 0xed, 0x59, 0x0e, 0xbe, + 0xe0, 0x9b, 0x6c, 0x5e, 0xbc, 0xc9, 0xa6, 0x18, 0x49, 0x45, 0x2a, 0x9d, 0xbd, 0x7a, 0x7c, 0x76, + 0xe0, 0x08, 0x5a, 0x25, 0xb5, 0x52, 0x10, 0xf8, 0x25, 0x16, 0xfe, 0x7f, 0xcc, 0xa5, 0xea, 0x79, + 0x47, 0x9f, 0x5c, 0x4b, 0xd1, 0x13, 0x1e, 0xe5, 0xb1, 0xb5, 0xd7, 0x15, 0x80, 0xd6, 0x8a, 0x1c, + 0x72, 0x28, 0xa8, 0x1b, 0x2e, 0xbc, 0x64, 0xc1, 0xcb, 0xde, 0xc0, 0x7e, 0x07, 0x91, 0x5b, 0x8e, + 0x95, 0xdb, 0x9f, 0xe7, 0x45, 0x1d, 0x6a, 0x78, 0x0d, 0x3a, 0x50, 0x54, 0x4c, 0xdb, 0x79, 0x3a, + 0x28, 0xf5, 0x69, 0x0e, 0xda, 0x76, 0xca, 0xe3, 0x51, 0x45, 0x19, 0x69, 0xaa, 0x11, 0x92, 0xd4, + 0xfe, 0x36, 0x07, 0xe6, 0x98, 0x37, 0xf1, 0x3b, 0x02, 0x07, 0x54, 0x4b, 0x4a, 0x9e, 0x91, 0xca, + 0xc2, 0x33, 0x52, 0x75, 0x09, 0x14, 0x3c, 0xa1, 0x46, 0x4b, 0xb2, 0xa9, 0x4f, 0x04, 0xf3, 0x5d, + 0xd8, 0x87, 0x76, 0x17, 0xda, 0x1d, 0x0b, 0x7a, 0xa7, 0x0b, 0x58, 0x2c, 0xb1, 0x61, 0x1a, 0xb8, + 0xcc, 0x82, 0xf1, 0xbb, 0xd3, 0x61, 0x95, 0xbd, 0x96, 0xfe, 0xa9, 0x04, 0xce, 0x30, 0xad, 0x64, + 0xc5, 0x75, 0xf6, 0x52, 0x6b, 0xea, 0xcb, 0xd9, 0xf1, 0x78, 0x93, 0xd7, 0xd4, 0xbb, 0x12, 0x1b, + 0xe5, 0x90, 0xe2, 0x62, 0x1a, 0xfd, 0xfb, 0x43, 0xe9, 0x3e, 0x8d, 0x93, 0x6e, 0xf5, 0x90, 0xf4, + 0xa7, 0x70, 0x20, 0x3c, 0x0f, 0xe6, 0x0d, 0x68, 0x76, 0xc3, 0xa1, 0xf6, 0x8f, 0x18, 0x23, 0xfa, + 0x89, 0x20, 0xef, 0x47, 0xab, 0x61, 0x8f, 0x38, 0x58, 0x19, 0xf6, 0x4b, 0xfc, 0x80, 0x17, 0xc5, + 0xf0, 0x47, 0x42, 0x0d, 0x67, 0xd0, 0x02, 0x97, 0x45, 0x2c, 0xf0, 0xfc, 0x30, 0x0b, 0xfc, 0x7a, + 0x30, 0xd7, 0x33, 0x3d, 0xd2, 0x60, 0xc2, 0xbb, 0x7f, 0xd9, 0x24, 0xfe, 0x96, 0xfd, 0xc4, 0xd3, + 0x76, 0xc3, 0xaa, 0x76, 0xf8, 0x88, 0xc4, 0x1f, 0x16, 0x3a, 0x5a, 0x37, 0xaa, 0xec, 0x74, 0x1a, + 0x71, 0xf7, 0x18, 0x2b, 0x77, 0xa7, 0x80, 0xba, 0xae, 0xb7, 0x5a, 0xe5, 0x55, 0x7c, 0xe2, 0x26, + 0x70, 0xc1, 0xea, 0x9e, 0xbd, 0x11, 0x89, 0x8f, 0x20, 0xac, 0xce, 0x83, 0x52, 0xc0, 0x9f, 0x72, + 0x8c, 0x3c, 0xd9, 0x78, 0xc7, 0x49, 0xc9, 0x69, 0x5f, 0x94, 0x41, 0x71, 0xd3, 0x76, 0xa1, 0xd9, + 0xd5, 0x9e, 0xc7, 0xe8, 0xd2, 0x0f, 0x72, 0xba, 0xf4, 0xd0, 0x61, 0x0d, 0x03, 0x7d, 0x93, 0x91, + 0x16, 0xf1, 0xe1, 0xc8, 0x12, 0x17, 0xcb, 0x79, 0x66, 0x0e, 0x8f, 0xbb, 0xd8, 0x2a, 0x79, 0x7c, + 0xa9, 0x99, 0xf7, 0x01, 0xc2, 0xc8, 0xfe, 0xb6, 0x0c, 0x94, 0x8d, 0x7d, 0x6f, 0x97, 0x3b, 0xf4, + 0xfd, 0xab, 0x32, 0x58, 0x08, 0xce, 0xc5, 0xb4, 0x9d, 0x8b, 0xd0, 0xd6, 0x9e, 0xc1, 0xf5, 0xc8, + 0x3e, 0x4a, 0x0b, 0x7a, 0x64, 0xfc, 0xa0, 0x6e, 0x30, 0xa1, 0x61, 0xa4, 0x61, 0xc7, 0xfa, 0x07, + 0xca, 0x58, 0xe2, 0xe8, 0x2f, 0x6d, 0xd0, 0x6f, 0xa3, 0x80, 0x32, 0xda, 0x8b, 0x85, 0xef, 0x39, + 0x1a, 0x41, 0x7b, 0x78, 0xf7, 0x2e, 0x76, 0x73, 0x51, 0x2a, 0xd2, 0xd9, 0xa3, 0x7a, 0x3d, 0x28, + 0x05, 0x92, 0x52, 0x67, 0x80, 0x5c, 0x6b, 0xb6, 0x94, 0x63, 0xea, 0x1c, 0x98, 0x29, 0xdb, 0x5d, + 0xd7, 0xb1, 0xba, 0x4a, 0xee, 0xec, 0x0c, 0x28, 0xe8, 0x7b, 0x7d, 0xff, 0xca, 0xd9, 0x87, 0x83, + 0x85, 0x96, 0xef, 0x42, 0x73, 0x2f, 0x11, 0xb7, 0x3b, 0x6e, 0x07, 0x33, 0xb6, 0xb3, 0x65, 0xee, + 0xfb, 0xbb, 0xea, 0x43, 0x0e, 0x58, 0x1d, 0x54, 0x6b, 0x9a, 0x34, 0x1a, 0xe7, 0xd7, 0xef, 0xc4, + 0x2b, 0x1d, 0x45, 0xdb, 0x29, 0xef, 0xfb, 0xbb, 0xcb, 0xd7, 0x7d, 0xe6, 0xcf, 0xce, 0xe4, 0x3e, + 0xff, 0x67, 0x67, 0x72, 0x5f, 0xfb, 0xb3, 0x33, 0xb9, 0x9f, 0xfa, 0xf3, 0x33, 0xc7, 0x3e, 0xff, + 0xe7, 0x67, 0x8e, 0x7d, 0xe9, 0xcf, 0xcf, 0x1c, 0xfb, 0x61, 0xa9, 0x7f, 0xe1, 0x42, 0x11, 0x53, + 0x79, 0xec, 0xff, 0x17, 0x00, 0x00, 0xff, 0xff, 0xae, 0x1f, 0xb9, 0x2f, 0xeb, 0x35, 0x02, 0x00, } func (m *Rpc) Marshal() (dAtA []byte, err error) { @@ -79696,6 +79729,16 @@ func (m *RpcSpaceInviteGenerateResponse) MarshalToSizedBuffer(dAtA []byte) (int, _ = i var l int _ = l + if m.Permissions != 0 { + i = encodeVarintCommands(dAtA, i, uint64(m.Permissions)) + i-- + dAtA[i] = 0x28 + } + if m.InviteType != 0 { + i = encodeVarintCommands(dAtA, i, uint64(m.InviteType)) + i-- + dAtA[i] = 0x20 + } if len(m.InviteFileKey) > 0 { i -= len(m.InviteFileKey) copy(dAtA[i:], m.InviteFileKey) @@ -79956,6 +79999,16 @@ func (m *RpcSpaceInviteGetCurrentResponse) MarshalToSizedBuffer(dAtA []byte) (in _ = i var l int _ = l + if m.Permissions != 0 { + i = encodeVarintCommands(dAtA, i, uint64(m.Permissions)) + i-- + dAtA[i] = 0x28 + } + if m.InviteType != 0 { + i = encodeVarintCommands(dAtA, i, uint64(m.InviteType)) + i-- + dAtA[i] = 0x20 + } if len(m.InviteFileKey) > 0 { i -= len(m.InviteFileKey) copy(dAtA[i:], m.InviteFileKey) @@ -127556,6 +127609,12 @@ func (m *RpcSpaceInviteGenerateResponse) Size() (n int) { if l > 0 { n += 1 + l + sovCommands(uint64(l)) } + if m.InviteType != 0 { + n += 1 + sovCommands(uint64(m.InviteType)) + } + if m.Permissions != 0 { + n += 1 + sovCommands(uint64(m.Permissions)) + } return n } @@ -127666,6 +127725,12 @@ func (m *RpcSpaceInviteGetCurrentResponse) Size() (n int) { if l > 0 { n += 1 + l + sovCommands(uint64(l)) } + if m.InviteType != 0 { + n += 1 + sovCommands(uint64(m.InviteType)) + } + if m.Permissions != 0 { + n += 1 + sovCommands(uint64(m.Permissions)) + } return n } @@ -150107,6 +150172,44 @@ func (m *RpcSpaceInviteGenerateResponse) Unmarshal(dAtA []byte) error { } m.InviteFileKey = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field InviteType", wireType) + } + m.InviteType = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.InviteType |= model.InviteType(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Permissions", wireType) + } + m.Permissions = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Permissions |= model.ParticipantPermissions(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipCommands(dAtA[iNdEx:]) @@ -150809,6 +150912,44 @@ func (m *RpcSpaceInviteGetCurrentResponse) Unmarshal(dAtA []byte) error { } m.InviteFileKey = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field InviteType", wireType) + } + m.InviteType = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.InviteType |= model.InviteType(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Permissions", wireType) + } + m.Permissions = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Permissions |= model.ParticipantPermissions(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipCommands(dAtA[iNdEx:]) diff --git a/pb/protos/commands.proto b/pb/protos/commands.proto index c59c8f361..d71de014f 100644 --- a/pb/protos/commands.proto +++ b/pb/protos/commands.proto @@ -186,6 +186,8 @@ message Rpc { Error error = 1; string inviteCid = 2; string inviteFileKey = 3; + model.InviteType inviteType = 4; + model.ParticipantPermissions permissions = 5; message Error { Code code = 1; @@ -241,6 +243,8 @@ message Rpc { Error error = 1; string inviteCid = 2; string inviteFileKey = 3; + model.InviteType inviteType = 4; + model.ParticipantPermissions permissions = 5; message Error { Code code = 1; From 8a1f7ab21f0befbfeb1e139334791106306bc005 Mon Sep 17 00:00:00 2001 From: Mikhail Rakhmanov Date: Thu, 15 May 2025 10:49:50 +0200 Subject: [PATCH 040/164] GO-4400 Fix invite permissions get from workspace --- core/block/editor/workspaces.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/block/editor/workspaces.go b/core/block/editor/workspaces.go index 1d26b0795..c7f8011fc 100644 --- a/core/block/editor/workspaces.go +++ b/core/block/editor/workspaces.go @@ -107,7 +107,7 @@ func (w *Workspaces) SetInviteFileInfo(info domain.InviteInfo) (err error) { func (w *Workspaces) GetExistingInviteInfo() (inviteInfo domain.InviteInfo) { details := w.CombinedDetails() inviteInfo.InviteType = domain.InviteType(details.GetInt64(bundle.RelationKeySpaceInviteType)) - inviteInfo.Permissions = domain.ConvertParticipantPermissions(model.ParticipantPermissions(details.GetInt64(bundle.RelationKeySpaceInviteType))) + inviteInfo.Permissions = domain.ConvertParticipantPermissions(model.ParticipantPermissions(details.GetInt64(bundle.RelationKeySpaceInvitePermissions))) inviteInfo.InviteFileCid = details.GetString(bundle.RelationKeySpaceInviteFileCid) inviteInfo.InviteFileKey = details.GetString(bundle.RelationKeySpaceInviteFileKey) return From e0acaebba33be2aa68e09984d6beca153e115766 Mon Sep 17 00:00:00 2001 From: Mikhail Rakhmanov Date: Thu, 15 May 2025 11:29:09 +0200 Subject: [PATCH 041/164] GO-4400 Refactor invite view and invite types in payload --- core/acl/aclservice.go | 6 +- core/domain/invite.go | 1 + core/inviteservice/inviteservice.go | 52 +- core/space.go | 1 + docs/proto.md | 19 +- pb/commands.pb.go | 2760 +++++++++++++------------- pb/protos/commands.proto | 3 +- pkg/lib/pb/model/models.pb.go | 1215 ++++++------ pkg/lib/pb/model/protos/models.proto | 5 - 9 files changed, 2027 insertions(+), 2035 deletions(-) diff --git a/core/acl/aclservice.go b/core/acl/aclservice.go index cc310cc0a..11c201ff1 100644 --- a/core/acl/aclservice.go +++ b/core/acl/aclservice.go @@ -402,13 +402,13 @@ func (a *aclService) Join(ctx context.Context, spaceId, networkId string, invite return convertedOrInternalError("get invite payload", err) } switch invitePayload.InviteType { - case model.InvitePayload_JoinAsGuest: + case model.InviteType_Guest: guestKey, err := crypto.UnmarshalEd25519PrivateKeyProto(invitePayload.GuestKey) if err != nil { return convertedOrInternalError("unmarshal invite key", err) } return a.joinAsGuest(ctx, invitePayload.SpaceId, guestKey) - case model.InvitePayload_JoinAsMember: + case model.InviteType_Member: inviteKey, err := crypto.UnmarshalEd25519PrivateKeyProto(invitePayload.AclKey) if err != nil { return convertedOrInternalError("unmarshal invite key", err) @@ -444,7 +444,7 @@ func (a *aclService) Join(ctx context.Context, spaceId, networkId string, invite if err != nil { return convertedOrInternalError("set space data", err) } - case model.InvitePayload_JoinAsMemberWithoutApprove: + case model.InviteType_WithoutApprove: inviteKey, err := crypto.UnmarshalEd25519PrivateKeyProto(invitePayload.AclKey) if err != nil { return convertedOrInternalError("unmarshal invite key", err) diff --git a/core/domain/invite.go b/core/domain/invite.go index c4bdbf6c4..6b58dce9c 100644 --- a/core/domain/invite.go +++ b/core/domain/invite.go @@ -14,6 +14,7 @@ type InviteView struct { CreatorName string AclKey []byte GuestKey []byte + InviteType InviteType } func (i InviteView) IsGuestUserInvite() bool { diff --git a/core/inviteservice/inviteservice.go b/core/inviteservice/inviteservice.go index 49f7d704a..f79de3ce0 100644 --- a/core/inviteservice/inviteservice.go +++ b/core/inviteservice/inviteservice.go @@ -94,6 +94,7 @@ func (i *inviteService) View(ctx context.Context, inviteCid cid.Cid, inviteFileK CreatorName: invitePayload.CreatorName, AclKey: invitePayload.AclKey, GuestKey: invitePayload.GuestKey, + InviteType: domain.InviteType(invitePayload.InviteType), }, nil } @@ -177,7 +178,7 @@ func (i *inviteService) Generate(ctx context.Context, params GenerateInviteParam if result.InviteFileCid != "" && result.InviteType == params.InviteType { return result, nil } - invite, err := i.buildInvite(ctx, spaceId, params.Key, nil) + invite, err := i.buildInvite(ctx, params) if err != nil { return domain.InviteInfo{}, generateInviteError("build invite", err) } @@ -224,7 +225,11 @@ func (i *inviteService) generateGuestInvite(ctx context.Context, spaceId string, if spaceId == i.accountService.PersonalSpaceID() { return domain.InviteInfo{}, ErrPersonalSpace } - invite, err := i.buildInvite(ctx, spaceId, nil, guestUserKey) + invite, err := i.buildInvite(ctx, GenerateInviteParams{ + SpaceId: spaceId, + Key: guestUserKey, + InviteType: domain.InviteTypeGuest, + }) if err != nil { return domain.InviteInfo{}, generateInviteError("build invite", err) } @@ -287,13 +292,11 @@ func (i *inviteService) GetPayload(ctx context.Context, inviteCid cid.Cid, invit return &invitePayload, nil } -// buildInvite creates invite payload and signs it -// you should provide either aclKey or guestUserKey -func (i *inviteService) buildInvite(ctx context.Context, spaceId string, aclKey, guestUserKey crypto.PrivKey) (*model.Invite, error) { - if aclKey != nil && guestUserKey != nil { +func (i *inviteService) buildInvite(ctx context.Context, params GenerateInviteParams) (*model.Invite, error) { + if params.Key == nil { return nil, fmt.Errorf("you should provide either acl key or guest user key") } - invitePayload, err := i.buildInvitePayload(ctx, spaceId, aclKey, guestUserKey) + invitePayload, err := i.buildInvitePayload(ctx, params) if err != nil { return nil, fmt.Errorf("build invite payload: %w", err) } @@ -311,36 +314,35 @@ func (i *inviteService) buildInvite(ctx context.Context, spaceId string, aclKey, }, nil } -func (i *inviteService) buildInvitePayload(ctx context.Context, spaceId string, aclKey crypto.PrivKey, guestKey crypto.PrivKey) (*model.InvitePayload, error) { +func (i *inviteService) buildInvitePayload(ctx context.Context, params GenerateInviteParams) (*model.InvitePayload, error) { profile, err := i.accountService.ProfileInfo() if err != nil { return nil, fmt.Errorf("get profile info: %w", err) } invitePayload := &model.InvitePayload{ - SpaceId: spaceId, + SpaceId: params.SpaceId, CreatorIdentity: i.accountService.AccountID(), CreatorName: profile.Name, } - if aclKey != nil { - rawAclKey, err := aclKey.Marshall() - if err != nil { - return nil, fmt.Errorf("marshal invite priv key: %w", err) - } - invitePayload.AclKey = rawAclKey - } else if guestKey != nil { - rawGuestKey, err := guestKey.Marshall() - if err != nil { - return nil, fmt.Errorf("marshal invite priv key: %w", err) - } - invitePayload.GuestKey = rawGuestKey - invitePayload.InviteType = model.InvitePayload_JoinAsGuest - } else { - return nil, fmt.Errorf("acl key or guest key should be provided") + rawKey, err := params.Key.Marshall() + if err != nil { + return nil, fmt.Errorf("marshal invite priv key: %w", err) + } + switch params.InviteType { + case domain.InviteTypeGuest: + invitePayload.GuestKey = rawKey + invitePayload.InviteType = model.InviteType_Guest + case domain.InviteTypeAnyone: + invitePayload.AclKey = rawKey + invitePayload.InviteType = model.InviteType_WithoutApprove + case domain.InviteTypeDefault: + invitePayload.AclKey = rawKey + invitePayload.InviteType = model.InviteType_Member } var description spaceinfo.SpaceDescription - err = i.spaceService.TechSpace().DoSpaceView(ctx, spaceId, func(spaceView techspace.SpaceView) error { + err = i.spaceService.TechSpace().DoSpaceView(ctx, params.SpaceId, func(spaceView techspace.SpaceView) error { description = spaceView.GetSpaceDescription() return nil }) diff --git a/core/space.go b/core/space.go index 2e8cb61b8..9bede2714 100644 --- a/core/space.go +++ b/core/space.go @@ -192,6 +192,7 @@ func (mw *Middleware) SpaceInviteView(cctx context.Context, req *pb.RpcSpaceInvi SpaceName: inviteView.SpaceName, SpaceIconCid: inviteView.SpaceIconCid, IsGuestUserInvite: inviteView.IsGuestUserInvite(), + InviteType: model.InviteType(inviteView.InviteType), } } diff --git a/docs/proto.md b/docs/proto.md index 3ec28e9f5..d0936711e 100644 --- a/docs/proto.md +++ b/docs/proto.md @@ -2064,7 +2064,6 @@ - [Import.ErrorCode](#anytype-model-Import-ErrorCode) - [Import.Type](#anytype-model-Import-Type) - [InternalFlag.Value](#anytype-model-InternalFlag-Value) - - [InvitePayload.InviteType](#anytype-model-InvitePayload-InviteType) - [InviteType](#anytype-model-InviteType) - [LinkPreview.Type](#anytype-model-LinkPreview-Type) - [Membership.EmailVerificationStatus](#anytype-model-Membership-EmailVerificationStatus) @@ -20183,7 +20182,8 @@ Available undo/redo operations | spaceName | [string](#string) | | | | spaceIconCid | [string](#string) | | | | creatorName | [string](#string) | | | -| isGuestUserInvite | [bool](#bool) | | | +| isGuestUserInvite | [bool](#bool) | | deprecated, use inviteType | +| inviteType | [model.InviteType](#anytype-model-InviteType) | | | @@ -31367,7 +31367,7 @@ Used to decode block meta only, without the content itself | spaceName | [string](#string) | | | | spaceIconCid | [string](#string) | | | | spaceIconEncryptionKeys | [FileEncryptionKey](#anytype-model-FileEncryptionKey) | repeated | | -| inviteType | [InvitePayload.InviteType](#anytype-model-InvitePayload-InviteType) | | | +| inviteType | [InviteType](#anytype-model-InviteType) | | | | guestKey | [bytes](#bytes) | | | @@ -32750,19 +32750,6 @@ Look https://github.com/golang/protobuf/issues/1135 for more information. - - -### InvitePayload.InviteType - - -| Name | Number | Description | -| ---- | ------ | ----------- | -| JoinAsMember | 0 | aclKey contains the key to sign the ACL record | -| JoinAsGuest | 1 | guestKey contains the privateKey of the guest user | -| JoinAsMemberWithoutApprove | 2 | aclKey contains the key to sign the ACL record and decrypt the read key | - - - ### InviteType diff --git a/pb/commands.pb.go b/pb/commands.pb.go index 2d069d04c..80a25cd9a 100644 --- a/pb/commands.pb.go +++ b/pb/commands.pb.go @@ -12362,6 +12362,7 @@ type RpcSpaceInviteViewResponse struct { SpaceIconCid string `protobuf:"bytes,4,opt,name=spaceIconCid,proto3" json:"spaceIconCid,omitempty"` CreatorName string `protobuf:"bytes,5,opt,name=creatorName,proto3" json:"creatorName,omitempty"` IsGuestUserInvite bool `protobuf:"varint,6,opt,name=isGuestUserInvite,proto3" json:"isGuestUserInvite,omitempty"` + InviteType model.InviteType `protobuf:"varint,7,opt,name=inviteType,proto3,enum=anytype.model.InviteType" json:"inviteType,omitempty"` } func (m *RpcSpaceInviteViewResponse) Reset() { *m = RpcSpaceInviteViewResponse{} } @@ -12439,6 +12440,13 @@ func (m *RpcSpaceInviteViewResponse) GetIsGuestUserInvite() bool { return false } +func (m *RpcSpaceInviteViewResponse) GetInviteType() model.InviteType { + if m != nil { + return m.InviteType + } + return model.InviteType_Member +} + type RpcSpaceInviteViewResponseError struct { Code RpcSpaceInviteViewResponseErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=anytype.RpcSpaceInviteViewResponseErrorCode" json:"code,omitempty"` Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` @@ -77459,1372 +77467,1373 @@ func init() { func init() { proto.RegisterFile("pb/protos/commands.proto", fileDescriptor_8261c968b2e6f45c) } var fileDescriptor_8261c968b2e6f45c = []byte{ - // 21840 bytes of a gzipped FileDescriptorProto + // 21848 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7b, 0x98, 0x24, 0x49, 0x59, 0x2f, 0x3c, 0x95, 0x59, 0x55, 0x5d, 0x1d, 0x7d, 0x99, 0x9c, 0xdc, 0xd9, 0x61, 0x36, 0x77, 0x19, 0x96, 0x61, 0x59, 0xd6, 0x65, 0xe9, 0x85, 0x05, 0x91, 0x5d, 0x16, 0x96, 0xea, 0xaa, 0xec, 0xee, 0xda, 0xad, 0xae, 0x6a, 0xb2, 0xaa, 0x67, 0x58, 0xcf, 0xe1, 0xeb, 0x93, 0x53, 0x15, 0xdd, - 0x9d, 0x3b, 0xd5, 0x99, 0x45, 0x66, 0xf6, 0xcc, 0x0e, 0xdf, 0x73, 0xbe, 0x23, 0x07, 0x11, 0x10, - 0x11, 0x51, 0x11, 0x11, 0xb9, 0x0b, 0x08, 0xc8, 0xfd, 0x26, 0x20, 0x17, 0xb9, 0x08, 0x22, 0x2a, - 0x8a, 0xca, 0x45, 0x79, 0x04, 0x2f, 0x88, 0xe7, 0x1c, 0xf5, 0xe0, 0xa7, 0x20, 0x2a, 0xc7, 0xef, - 0x89, 0x4b, 0x66, 0x46, 0x54, 0x57, 0x66, 0x45, 0x56, 0x57, 0x56, 0x2f, 0xfa, 0xfd, 0x55, 0x95, - 0x91, 0x91, 0x6f, 0xbc, 0xf1, 0xfe, 0xde, 0x88, 0x78, 0x23, 0xe2, 0x8d, 0x37, 0xc0, 0xe9, 0xfe, - 0x85, 0x5b, 0xfb, 0xae, 0xe3, 0x3b, 0xde, 0xad, 0x1d, 0x67, 0x6f, 0xcf, 0xb4, 0xbb, 0xde, 0x12, - 0x7e, 0x56, 0x67, 0x4c, 0xfb, 0x8a, 0x7f, 0xa5, 0x0f, 0xb5, 0x1b, 0xfa, 0x17, 0x77, 0x6e, 0xed, - 0x59, 0x17, 0x6e, 0xed, 0x5f, 0xb8, 0x75, 0xcf, 0xe9, 0xc2, 0x5e, 0xf0, 0x01, 0x7e, 0xa0, 0xd9, - 0xb5, 0x9b, 0xe2, 0x72, 0xf5, 0x9c, 0x8e, 0xd9, 0xf3, 0x7c, 0xc7, 0x85, 0x34, 0xe7, 0xa9, 0xa8, - 0x48, 0x78, 0x09, 0xda, 0x7e, 0x40, 0xe1, 0xba, 0x1d, 0xc7, 0xd9, 0xe9, 0x41, 0xf2, 0xee, 0xc2, - 0xfe, 0xf6, 0xad, 0x9e, 0xef, 0xee, 0x77, 0x7c, 0xfa, 0xf6, 0xfa, 0xc1, 0xb7, 0x5d, 0xe8, 0x75, - 0x5c, 0xab, 0xef, 0x3b, 0x2e, 0xc9, 0x71, 0xf6, 0x05, 0x7f, 0x5d, 0x02, 0xb2, 0xd1, 0xef, 0x68, - 0xdf, 0x9e, 0x01, 0x72, 0xb9, 0xdf, 0xd7, 0x3e, 0x25, 0x01, 0xb0, 0x0a, 0xfd, 0x73, 0xd0, 0xf5, - 0x2c, 0xc7, 0xd6, 0x8e, 0x83, 0x19, 0x03, 0x3e, 0x63, 0x1f, 0x7a, 0xfe, 0x1d, 0xf9, 0xe7, 0x7d, - 0x43, 0xce, 0x69, 0xaf, 0x97, 0x40, 0xc9, 0x80, 0x5e, 0xdf, 0xb1, 0x3d, 0xa8, 0x3e, 0x05, 0x14, - 0xa0, 0xeb, 0x3a, 0xee, 0xe9, 0xdc, 0xf5, 0xb9, 0x9b, 0xe6, 0x6e, 0xbb, 0x79, 0x89, 0x56, 0x7f, - 0xc9, 0xe8, 0x77, 0x96, 0xca, 0xfd, 0xfe, 0x52, 0x44, 0x69, 0x29, 0xf8, 0x68, 0x49, 0x47, 0x5f, - 0x18, 0xe4, 0x43, 0xf5, 0x34, 0x98, 0xb9, 0x44, 0x32, 0x9c, 0x96, 0xae, 0xcf, 0xdd, 0x34, 0x6b, - 0x04, 0x8f, 0xe8, 0x4d, 0x17, 0xfa, 0xa6, 0xd5, 0xf3, 0x4e, 0xcb, 0xe4, 0x0d, 0x7d, 0xd4, 0x5e, - 0x9b, 0x03, 0x05, 0x4c, 0x44, 0xad, 0x80, 0x7c, 0xc7, 0xe9, 0x42, 0x5c, 0xfc, 0xe2, 0x6d, 0xb7, - 0x8a, 0x17, 0xbf, 0x54, 0x71, 0xba, 0xd0, 0xc0, 0x1f, 0xab, 0xd7, 0x83, 0xb9, 0x40, 0x2c, 0x11, - 0x1b, 0x6c, 0xd2, 0xd9, 0xdb, 0x40, 0x1e, 0xe5, 0x57, 0x4b, 0x20, 0xdf, 0xd8, 0xac, 0xd7, 0x95, - 0x63, 0xea, 0x09, 0xb0, 0xb0, 0xd9, 0xb8, 0xa7, 0xd1, 0x3c, 0xdf, 0xd8, 0xd2, 0x0d, 0xa3, 0x69, - 0x28, 0x39, 0x75, 0x01, 0xcc, 0x2e, 0x97, 0xab, 0x5b, 0xb5, 0xc6, 0xc6, 0x66, 0x5b, 0x91, 0xb4, - 0x57, 0xca, 0x60, 0xb1, 0x05, 0xfd, 0x2a, 0xbc, 0x64, 0x75, 0x60, 0xcb, 0x37, 0x7d, 0xa8, 0xbd, - 0x28, 0x17, 0x0a, 0x53, 0xdd, 0x44, 0x85, 0x86, 0xaf, 0x68, 0x05, 0x1e, 0x7b, 0xa0, 0x02, 0x3c, - 0x85, 0x25, 0xfa, 0xf5, 0x12, 0x93, 0x66, 0xb0, 0x74, 0xce, 0x3e, 0x0a, 0xcc, 0x31, 0xef, 0xd4, - 0x45, 0x00, 0x96, 0xcb, 0x95, 0x7b, 0x56, 0x8d, 0xe6, 0x66, 0xa3, 0xaa, 0x1c, 0x43, 0xcf, 0x2b, - 0x4d, 0x43, 0xa7, 0xcf, 0x39, 0xed, 0xbb, 0x39, 0x06, 0xcc, 0x2a, 0x0f, 0xe6, 0xd2, 0x68, 0x66, - 0x86, 0x00, 0xaa, 0xbd, 0x21, 0x04, 0x67, 0x95, 0x03, 0xe7, 0xb1, 0xe9, 0xc8, 0x65, 0x0f, 0xd0, - 0x73, 0x24, 0x50, 0x6a, 0xed, 0xee, 0xfb, 0x5d, 0xe7, 0xb2, 0xad, 0xcd, 0x86, 0xc8, 0x68, 0x7f, - 0xc3, 0xca, 0xe4, 0xc9, 0xbc, 0x4c, 0x6e, 0x3a, 0x58, 0x09, 0x4a, 0x21, 0x46, 0x1a, 0xaf, 0x0e, - 0xa5, 0x51, 0xe6, 0xa4, 0xf1, 0x28, 0x51, 0x42, 0xd9, 0xcb, 0xe1, 0xc3, 0xcb, 0xa0, 0xd0, 0xea, - 0x9b, 0x1d, 0xa8, 0x7d, 0x4e, 0x06, 0xf3, 0x75, 0x68, 0x5e, 0x82, 0xe5, 0x7e, 0xdf, 0x75, 0x2e, - 0x41, 0xad, 0x12, 0xe9, 0xeb, 0x69, 0x30, 0xe3, 0xa1, 0x4c, 0xb5, 0x2e, 0xae, 0xc1, 0xac, 0x11, - 0x3c, 0xaa, 0x67, 0x00, 0xb0, 0xba, 0xd0, 0xf6, 0x2d, 0xdf, 0x82, 0xde, 0x69, 0xe9, 0x7a, 0xf9, - 0xa6, 0x59, 0x83, 0x49, 0xd1, 0xbe, 0x2d, 0x89, 0xea, 0x18, 0xe6, 0x62, 0x89, 0xe5, 0x20, 0x46, - 0xaa, 0xaf, 0x93, 0x44, 0x74, 0x6c, 0x24, 0xb9, 0x74, 0xb2, 0x7d, 0x5b, 0x2e, 0xbd, 0x70, 0x51, - 0x8e, 0x46, 0x73, 0xab, 0xb5, 0x59, 0x59, 0xdb, 0x6a, 0x6d, 0x94, 0x2b, 0xba, 0x02, 0xd5, 0x93, - 0x40, 0xc1, 0x7f, 0xb7, 0x6a, 0xad, 0xad, 0xaa, 0x5e, 0xd7, 0xdb, 0x7a, 0x55, 0xd9, 0x56, 0x55, - 0xb0, 0x68, 0xe8, 0x4f, 0xdd, 0xd4, 0x5b, 0xed, 0xad, 0x95, 0x72, 0xad, 0xae, 0x57, 0x95, 0x1d, - 0xf4, 0x71, 0xbd, 0xb6, 0x5e, 0x6b, 0x6f, 0x19, 0x7a, 0xb9, 0xb2, 0xa6, 0x57, 0x95, 0x5d, 0xf5, - 0x41, 0xe0, 0xaa, 0x46, 0x73, 0xab, 0xbc, 0xb1, 0x61, 0x34, 0xcf, 0xe9, 0x5b, 0xf4, 0x8b, 0x96, - 0x62, 0x91, 0x82, 0xda, 0x5b, 0xad, 0xb5, 0xb2, 0xa1, 0x97, 0x97, 0xeb, 0xba, 0x72, 0x9f, 0xf6, - 0x6c, 0x19, 0x2c, 0xac, 0x9b, 0x17, 0x61, 0x6b, 0xd7, 0x74, 0xa1, 0x79, 0xa1, 0x07, 0xb5, 0x87, - 0x09, 0xe0, 0xa9, 0x7d, 0x8e, 0xc5, 0x4b, 0xe7, 0xf1, 0xba, 0x75, 0x88, 0x80, 0xb9, 0x22, 0x62, - 0x00, 0xfb, 0xa7, 0xb0, 0x19, 0xac, 0x71, 0x80, 0x3d, 0x2e, 0x25, 0xbd, 0x74, 0x88, 0xfd, 0xf7, - 0x07, 0x00, 0x62, 0xda, 0xef, 0xc9, 0x60, 0xbe, 0x66, 0x5f, 0xb2, 0x7c, 0x58, 0xd9, 0x35, 0xed, - 0x1d, 0xa8, 0xf5, 0x44, 0x1a, 0xd5, 0x2a, 0x98, 0xeb, 0x43, 0x77, 0xcf, 0xf2, 0xd0, 0xd8, 0xe5, - 0xe1, 0xca, 0x2d, 0xde, 0xf6, 0xf0, 0x50, 0x5a, 0xd8, 0x56, 0x58, 0xda, 0x30, 0x5d, 0xdf, 0xea, - 0x58, 0x7d, 0xd3, 0xf6, 0x37, 0xa2, 0xcc, 0x06, 0xfb, 0xa5, 0xf6, 0xfb, 0x29, 0x5b, 0x1f, 0xcb, - 0x6a, 0x0c, 0x98, 0xff, 0x96, 0x13, 0x6f, 0x7d, 0x09, 0xe4, 0xd2, 0x61, 0xf9, 0xe3, 0x53, 0xc7, - 0xf2, 0x1a, 0x70, 0x75, 0xad, 0x51, 0x69, 0x1a, 0x86, 0x5e, 0x69, 0x6f, 0x6d, 0xe8, 0xc6, 0x7a, - 0xad, 0xd5, 0xaa, 0x35, 0x1b, 0x2d, 0xc5, 0xd2, 0xbe, 0x51, 0x00, 0x8b, 0xa4, 0x66, 0xab, 0xd0, - 0x86, 0x2e, 0x1a, 0xdb, 0xdf, 0x98, 0x13, 0x81, 0xf5, 0x76, 0x00, 0x2c, 0xfc, 0x5d, 0xfb, 0x4a, - 0x1f, 0x52, 0x54, 0xaf, 0x19, 0x40, 0xb5, 0x16, 0x66, 0x30, 0x98, 0xcc, 0x83, 0x1a, 0x21, 0x8f, - 0xad, 0x11, 0x6f, 0xca, 0x33, 0x1a, 0xb1, 0xc2, 0x6b, 0xc4, 0xa3, 0x63, 0x21, 0x0c, 0x2a, 0x1a, - 0x63, 0xc6, 0x5d, 0x07, 0x66, 0x09, 0xaf, 0x15, 0xab, 0x4b, 0xe1, 0x8b, 0x12, 0xd4, 0x1b, 0xc0, - 0x02, 0x79, 0x58, 0xb1, 0x7a, 0xf0, 0x1e, 0x78, 0x85, 0x1a, 0x74, 0x7c, 0xe2, 0x80, 0x70, 0xf2, - 0x87, 0x10, 0x4e, 0x61, 0x6c, 0xe1, 0xfc, 0x44, 0x38, 0xb2, 0xd4, 0x38, 0xdd, 0xfe, 0xc1, 0xb4, - 0x82, 0x49, 0xa7, 0xdd, 0x2f, 0x79, 0x20, 0x8c, 0x2d, 0x07, 0x86, 0x10, 0x4b, 0xfb, 0x9e, 0x04, - 0xe6, 0x5a, 0xbe, 0xd3, 0x47, 0xfd, 0xb1, 0x65, 0xef, 0x88, 0x0d, 0x20, 0x9f, 0x61, 0xbb, 0x9c, - 0x0a, 0xaf, 0x60, 0x8f, 0x1a, 0x22, 0x47, 0xa6, 0x80, 0x98, 0x1e, 0xe7, 0xdb, 0x61, 0x8f, 0xb3, - 0xc2, 0xa1, 0x72, 0x5b, 0x2a, 0x6a, 0xdf, 0x87, 0x83, 0xc7, 0xcb, 0xf2, 0x40, 0x09, 0xd4, 0xcc, - 0xaf, 0xec, 0xbb, 0x2e, 0xb4, 0x7d, 0x31, 0x10, 0xfe, 0x54, 0x66, 0x40, 0x58, 0xe3, 0x41, 0xb8, - 0x2d, 0x41, 0x99, 0x83, 0x52, 0xfe, 0x9d, 0xb7, 0xf3, 0x8f, 0x85, 0x1a, 0x75, 0x0f, 0xa7, 0x51, - 0x3f, 0x94, 0x5e, 0x34, 0xe9, 0xd4, 0x6a, 0x6d, 0x0c, 0xad, 0x3a, 0x09, 0x14, 0x64, 0xf4, 0x55, - 0xda, 0xb5, 0x73, 0xfa, 0x56, 0xad, 0x71, 0xae, 0xd6, 0xd6, 0x15, 0xa8, 0xbd, 0x58, 0x8e, 0x06, - 0x21, 0x7f, 0x15, 0x4f, 0x5d, 0x84, 0x34, 0xe3, 0xcb, 0xd2, 0x78, 0xfd, 0x3f, 0x29, 0x23, 0x3b, - 0xbd, 0x60, 0x30, 0x11, 0xef, 0x7b, 0x87, 0x32, 0x95, 0x0e, 0x91, 0xbb, 0xc7, 0x40, 0xe4, 0x14, - 0x50, 0x6b, 0x8d, 0x73, 0xe5, 0x7a, 0xad, 0x4a, 0xda, 0xf9, 0x56, 0xfb, 0xde, 0x0d, 0x84, 0xc9, - 0xcf, 0x84, 0xc6, 0x9e, 0x01, 0x2f, 0x39, 0x17, 0x05, 0x2d, 0xee, 0xaf, 0x8e, 0x65, 0xa3, 0x91, - 0x12, 0x62, 0x7a, 0xcc, 0x1f, 0x97, 0xd2, 0xda, 0x68, 0x43, 0xc9, 0x3d, 0x90, 0x46, 0xb1, 0x03, - 0xdd, 0xe3, 0xce, 0x90, 0x5e, 0x74, 0xe8, 0x28, 0xf6, 0x89, 0x3c, 0x00, 0xa4, 0x92, 0xe7, 0x2c, - 0x78, 0x59, 0x5b, 0x8f, 0x30, 0xe1, 0xd4, 0x36, 0x37, 0x52, 0x6d, 0xa5, 0x61, 0x6a, 0xfb, 0x97, - 0x6c, 0x4f, 0xbb, 0xcc, 0xa3, 0x77, 0x4b, 0xac, 0xb8, 0x11, 0x27, 0xf1, 0x4b, 0x62, 0x81, 0xa2, - 0x48, 0xbc, 0xf9, 0x78, 0x1d, 0x98, 0xc5, 0x7f, 0x1b, 0xe6, 0x1e, 0xa4, 0x6d, 0x28, 0x4a, 0x50, - 0xcf, 0x82, 0x79, 0x92, 0xb1, 0xe3, 0xd8, 0xa8, 0x3e, 0x79, 0x9c, 0x81, 0x4b, 0x43, 0x20, 0x76, - 0x5c, 0x68, 0xfa, 0x8e, 0x8b, 0x69, 0x14, 0x08, 0x88, 0x4c, 0x92, 0x7a, 0x0b, 0x38, 0x61, 0x79, - 0xb8, 0x55, 0x6d, 0x7a, 0xd0, 0x25, 0xcc, 0x9e, 0x2e, 0x5e, 0x9f, 0xbb, 0xa9, 0x64, 0x1c, 0x7c, - 0xa1, 0x7d, 0x33, 0x6c, 0xb3, 0x3a, 0xa7, 0x67, 0x8f, 0x49, 0x53, 0xf1, 0x74, 0x5a, 0x76, 0x69, - 0xbc, 0x1e, 0x94, 0xf4, 0x9b, 0x5b, 0x48, 0x37, 0x56, 0xf0, 0xea, 0x17, 0xa4, 0xad, 0x18, 0xa5, - 0xa2, 0xbc, 0x95, 0x66, 0xa3, 0xad, 0x37, 0xda, 0xca, 0xf6, 0x50, 0xfd, 0xdb, 0xd1, 0x5e, 0x97, - 0x07, 0xf9, 0xbb, 0x1d, 0xcb, 0xd6, 0x9e, 0x93, 0xe3, 0x14, 0xc8, 0x86, 0xfe, 0x65, 0xc7, 0xbd, - 0x18, 0x36, 0xeb, 0x28, 0x21, 0x19, 0xc9, 0x48, 0xf1, 0xe4, 0x91, 0x8a, 0x97, 0x1f, 0xa6, 0x78, - 0x3f, 0xcd, 0x2a, 0xde, 0x9d, 0xbc, 0xe2, 0xdd, 0x38, 0x44, 0xfe, 0x88, 0xf9, 0x98, 0xee, 0xe2, - 0xd3, 0x61, 0x77, 0x71, 0x17, 0x07, 0xe3, 0x23, 0xc5, 0xc8, 0xa4, 0x03, 0xf0, 0x2b, 0x99, 0x76, - 0x13, 0xc3, 0xa0, 0xde, 0x89, 0x81, 0x7a, 0x77, 0x48, 0x0f, 0x62, 0x1d, 0xec, 0x68, 0xee, 0x3b, - 0xd8, 0xa9, 0x5c, 0x54, 0xaf, 0x06, 0x27, 0xaa, 0xb5, 0x95, 0x15, 0xdd, 0xd0, 0x1b, 0xed, 0xad, - 0x86, 0xde, 0x3e, 0xdf, 0x34, 0xee, 0x51, 0x7a, 0xda, 0x6b, 0x65, 0x00, 0x90, 0x84, 0x2a, 0xa6, - 0xdd, 0x81, 0x3d, 0xb1, 0xfe, 0xff, 0x6f, 0xa5, 0x74, 0x3d, 0x48, 0x44, 0x3f, 0x06, 0xce, 0x57, - 0x48, 0xe2, 0xad, 0x32, 0x96, 0x58, 0x3a, 0x50, 0xdf, 0xfc, 0x40, 0x98, 0xc1, 0x5c, 0x05, 0x8e, - 0x07, 0xf4, 0x68, 0xf6, 0xe1, 0x2b, 0x63, 0x6f, 0xcf, 0x83, 0x45, 0x0a, 0x4b, 0xb0, 0xd4, 0xf9, - 0x3c, 0xa1, 0xf9, 0xbb, 0x06, 0x4a, 0x74, 0x65, 0x33, 0x18, 0x0c, 0xc2, 0xe7, 0xc9, 0x4d, 0xd0, - 0x5f, 0x2c, 0xa7, 0x33, 0xd0, 0xf8, 0x9a, 0xc4, 0xa8, 0xc4, 0xaf, 0xa5, 0x98, 0xd8, 0x26, 0x12, - 0x4c, 0xa7, 0x16, 0x9f, 0xca, 0x54, 0x2d, 0x86, 0xe0, 0x9d, 0xb0, 0x6e, 0x73, 0x88, 0xd6, 0xae, - 0x7d, 0x56, 0x0e, 0x35, 0xa6, 0x0a, 0x3b, 0x3d, 0xcb, 0x86, 0xda, 0x5d, 0x87, 0x54, 0x18, 0x7e, - 0x61, 0x5c, 0x1c, 0x67, 0x5a, 0x7e, 0x0c, 0xce, 0xaf, 0x49, 0x8f, 0xf3, 0x70, 0x82, 0xff, 0x8e, - 0x9b, 0xff, 0x57, 0x65, 0x70, 0x82, 0x69, 0x88, 0x06, 0xdc, 0x9b, 0xd8, 0x66, 0xc7, 0x7f, 0x67, - 0xdb, 0x6e, 0x8d, 0xc7, 0x74, 0x98, 0xed, 0x7d, 0x80, 0x8d, 0x18, 0x58, 0xdf, 0x1c, 0xc2, 0x5a, - 0xe7, 0x60, 0x7d, 0xc2, 0x18, 0x34, 0xd3, 0x21, 0xfb, 0x8e, 0x4c, 0x91, 0xbd, 0x06, 0x5c, 0xbd, - 0x51, 0x36, 0xda, 0xb5, 0x4a, 0x6d, 0xa3, 0x8c, 0xc6, 0x51, 0x66, 0xc8, 0x8e, 0x31, 0xee, 0x79, - 0xd0, 0x87, 0xe2, 0xfb, 0xd1, 0x3c, 0xb8, 0x6e, 0x78, 0x47, 0x4b, 0x97, 0xe0, 0x2d, 0x11, 0xa8, - 0xab, 0x60, 0xa6, 0x83, 0xb3, 0x13, 0x9c, 0xd9, 0xdd, 0xed, 0x84, 0xbe, 0x9c, 0x94, 0x60, 0x04, - 0x9f, 0x6a, 0xef, 0x66, 0x15, 0xa2, 0xcd, 0x2b, 0xc4, 0x93, 0x93, 0xc1, 0x3b, 0xc0, 0x77, 0x8c, - 0x6e, 0x7c, 0x3e, 0xd4, 0x8d, 0xf3, 0x9c, 0x6e, 0x54, 0x0e, 0x47, 0x3e, 0x9d, 0x9a, 0xfc, 0xd6, - 0x03, 0xa1, 0x03, 0x88, 0xd5, 0x26, 0x2b, 0x7e, 0x54, 0x18, 0xda, 0xdd, 0xbf, 0x4a, 0x06, 0xc5, - 0x2a, 0xec, 0x41, 0x5f, 0x70, 0x06, 0xff, 0x77, 0x92, 0xe8, 0x9e, 0x31, 0x81, 0x81, 0xd0, 0x8e, - 0x5f, 0x4b, 0xf1, 0xad, 0x3d, 0xe8, 0xf9, 0xe6, 0x5e, 0x1f, 0x8b, 0x5a, 0x36, 0xa2, 0x04, 0xed, - 0x47, 0x25, 0x91, 0x1d, 0xe5, 0x84, 0x62, 0xfe, 0x7d, 0xac, 0x4c, 0x7f, 0x41, 0x02, 0xa5, 0x16, - 0xf4, 0x9b, 0x6e, 0x17, 0xba, 0x5a, 0x2b, 0xc2, 0xe8, 0x7a, 0x30, 0x87, 0x41, 0x41, 0xd3, 0xcc, - 0x10, 0x27, 0x36, 0x49, 0xbd, 0x11, 0x2c, 0x86, 0x8f, 0xf8, 0x73, 0xda, 0x8d, 0x0f, 0xa4, 0x6a, - 0xdf, 0xca, 0x89, 0x3a, 0xba, 0xd0, 0x85, 0x67, 0xca, 0x4d, 0x4c, 0x2b, 0x15, 0x73, 0x5a, 0x49, - 0x24, 0x95, 0xbd, 0x2f, 0xc0, 0x3b, 0x25, 0x00, 0x36, 0x6d, 0x2f, 0x90, 0xeb, 0x23, 0x53, 0xc8, - 0x55, 0xfb, 0xc7, 0x5c, 0xba, 0x59, 0x4c, 0x54, 0x4e, 0x8c, 0xc4, 0x7e, 0x29, 0xc5, 0xda, 0x42, - 0x2c, 0xb1, 0xec, 0x65, 0xf6, 0xa5, 0xe3, 0xa0, 0x78, 0xde, 0xec, 0xf5, 0xa0, 0xaf, 0xbd, 0x52, - 0x06, 0xc5, 0x8a, 0x0b, 0x4d, 0x1f, 0x6a, 0x30, 0x12, 0x9d, 0x06, 0x4a, 0xae, 0xe3, 0xf8, 0x1b, - 0xa6, 0xbf, 0x4b, 0xe5, 0x16, 0x3e, 0xab, 0x4f, 0x00, 0x0f, 0xda, 0xde, 0xef, 0xf5, 0x7c, 0x78, - 0xbf, 0xbf, 0xe1, 0x5a, 0x7b, 0xa6, 0x7b, 0xa5, 0x6e, 0xda, 0x3b, 0xfb, 0xe6, 0x0e, 0xa4, 0xec, - 0xc5, 0xbd, 0xa6, 0xde, 0x58, 0xbf, 0xc2, 0x76, 0x3c, 0x77, 0xf1, 0x42, 0xff, 0x01, 0x4e, 0x4e, - 0x84, 0xc5, 0x25, 0xc2, 0x5e, 0x4c, 0xcf, 0xa3, 0x81, 0xd2, 0x9e, 0x0d, 0xf7, 0x1c, 0xdb, 0xea, - 0x04, 0xd6, 0x6a, 0xf0, 0xac, 0x7d, 0x3c, 0x44, 0x63, 0x99, 0x43, 0x63, 0x49, 0xb8, 0x94, 0x74, - 0x50, 0xb4, 0xc6, 0xe8, 0x77, 0x1e, 0x02, 0xae, 0x25, 0xdd, 0xc8, 0x56, 0xbb, 0xb9, 0x55, 0x31, - 0xf4, 0x72, 0x5b, 0xdf, 0xaa, 0x37, 0x2b, 0xe5, 0xfa, 0x96, 0xa1, 0x6f, 0x34, 0x15, 0x88, 0x66, - 0xe7, 0x33, 0x06, 0xec, 0x38, 0x97, 0xa0, 0xab, 0x3d, 0x2b, 0x27, 0x06, 0x51, 0x82, 0x50, 0x92, - 0xe0, 0x93, 0x45, 0xe0, 0xfb, 0x69, 0x61, 0x67, 0x3a, 0x2a, 0x58, 0xca, 0x7c, 0x4c, 0x8b, 0xf9, - 0x84, 0x50, 0x1f, 0x93, 0x48, 0xea, 0x01, 0x00, 0xd2, 0x3f, 0x48, 0x60, 0xa6, 0xe2, 0xd8, 0x97, - 0xa0, 0xeb, 0xb3, 0x93, 0x2c, 0x16, 0x87, 0xdc, 0x00, 0x0e, 0xa7, 0xc1, 0x0c, 0xb4, 0x7d, 0xd7, - 0xe9, 0x07, 0xb3, 0xac, 0xe0, 0x51, 0x7b, 0x63, 0x5a, 0x09, 0xd3, 0x92, 0xe3, 0xd7, 0x66, 0x87, - 0x17, 0xc4, 0xb1, 0x27, 0x0f, 0xb4, 0x9d, 0xd7, 0xa6, 0xc1, 0x65, 0x38, 0x03, 0xd9, 0xf7, 0x63, - 0x5f, 0x93, 0xc1, 0x02, 0x69, 0xb7, 0x2d, 0x88, 0xcd, 0x42, 0xad, 0xc9, 0xae, 0x73, 0x0e, 0x08, - 0x7f, 0xed, 0x18, 0x27, 0xfe, 0xa2, 0xd9, 0xef, 0x87, 0x2b, 0xe4, 0x6b, 0xc7, 0x0c, 0xfa, 0x4c, - 0xd4, 0x7c, 0xb9, 0x08, 0xf2, 0xe6, 0xbe, 0xbf, 0xab, 0x7d, 0x4f, 0x78, 0xc6, 0xcb, 0xf5, 0x23, - 0x94, 0x9f, 0x18, 0x48, 0x4e, 0x82, 0x82, 0xef, 0x5c, 0x84, 0x81, 0x1c, 0xc8, 0x03, 0x82, 0xc3, - 0xec, 0xf7, 0xdb, 0xf8, 0x05, 0x85, 0x23, 0x78, 0x46, 0x06, 0x96, 0xd9, 0xe9, 0x38, 0xfb, 0xb6, - 0x5f, 0x0b, 0x56, 0xc9, 0xa3, 0x04, 0xed, 0x4b, 0x42, 0xdb, 0x50, 0x02, 0x0c, 0xa6, 0x83, 0xec, - 0xc2, 0x18, 0x4d, 0x69, 0x09, 0xdc, 0x5c, 0xde, 0xd8, 0xd8, 0x6a, 0x37, 0xef, 0xd1, 0x1b, 0x91, - 0xb5, 0xbb, 0x55, 0x6b, 0x6c, 0xb5, 0xd7, 0xf4, 0xad, 0xca, 0xa6, 0x81, 0x17, 0x27, 0xcb, 0x95, - 0x4a, 0x73, 0xb3, 0xd1, 0x56, 0xa0, 0xf6, 0x56, 0x09, 0xcc, 0x57, 0x7a, 0x8e, 0x17, 0x22, 0xfc, - 0x90, 0x08, 0xe1, 0x50, 0x8c, 0x39, 0x46, 0x8c, 0xda, 0xbf, 0xe4, 0x44, 0x9d, 0xc1, 0x02, 0x81, - 0x30, 0xe4, 0x63, 0x7a, 0xa9, 0x37, 0x0a, 0x39, 0x83, 0x8d, 0xa6, 0x97, 0x7d, 0x93, 0xf8, 0xdc, - 0x0a, 0x98, 0x29, 0x13, 0xc5, 0xd0, 0xfe, 0x34, 0x07, 0x8a, 0x15, 0xc7, 0xde, 0xb6, 0x76, 0x90, - 0x05, 0x09, 0x6d, 0xf3, 0x42, 0x0f, 0x56, 0x4d, 0xdf, 0xbc, 0x64, 0xc1, 0xcb, 0xb8, 0x02, 0x25, - 0x63, 0x20, 0x15, 0x31, 0x45, 0x53, 0xe0, 0x85, 0xfd, 0x1d, 0xcc, 0x54, 0xc9, 0x60, 0x93, 0xd0, - 0xf8, 0x41, 0x1e, 0x37, 0x5c, 0xe8, 0xc2, 0x1e, 0x34, 0x3d, 0xec, 0x2b, 0x65, 0xc3, 0x1e, 0x56, - 0xda, 0x92, 0x11, 0xf7, 0x5a, 0x3d, 0x0b, 0xe6, 0xc9, 0x2b, 0x6c, 0xff, 0x78, 0x58, 0x8d, 0x4b, - 0x06, 0x97, 0xa6, 0x3e, 0x0a, 0x14, 0xe0, 0xfd, 0xbe, 0x6b, 0x9e, 0xee, 0x62, 0xbc, 0x1e, 0xb4, - 0x44, 0xbc, 0xc1, 0x97, 0x02, 0x6f, 0xf0, 0xa5, 0x16, 0xf6, 0x15, 0x37, 0x48, 0x2e, 0xed, 0x7f, - 0x97, 0x42, 0xeb, 0xe5, 0x0b, 0x72, 0xa4, 0x18, 0x2a, 0xc8, 0xdb, 0xe6, 0x1e, 0xa4, 0x7a, 0x81, - 0xff, 0xab, 0x37, 0x83, 0xe3, 0xe6, 0x25, 0xd3, 0x37, 0xdd, 0xba, 0xd3, 0x31, 0x7b, 0x78, 0xd8, - 0x0c, 0x5a, 0xfe, 0xe0, 0x0b, 0xbc, 0x69, 0xe5, 0x3b, 0x2e, 0xc4, 0xb9, 0x82, 0x4d, 0xab, 0x20, - 0x01, 0x51, 0xb7, 0x3a, 0x8e, 0x8d, 0xf9, 0x97, 0x0d, 0xfc, 0x1f, 0x49, 0xa5, 0x6b, 0x79, 0xa8, - 0x22, 0x98, 0x4a, 0x83, 0xec, 0xa7, 0xb4, 0xae, 0xd8, 0x1d, 0xbc, 0x61, 0x55, 0x32, 0xe2, 0x5e, - 0xab, 0xcb, 0x60, 0x8e, 0xee, 0xbe, 0xac, 0x23, 0xbd, 0x2a, 0x62, 0xbd, 0xba, 0x9e, 0xf7, 0xb5, - 0x25, 0x78, 0x2e, 0x35, 0xa2, 0x7c, 0x06, 0xfb, 0x91, 0xfa, 0x14, 0x70, 0x2d, 0x7d, 0xac, 0xec, - 0x7b, 0xbe, 0xb3, 0x47, 0x40, 0x5f, 0xb1, 0x7a, 0xa4, 0x06, 0x33, 0xb8, 0x06, 0x49, 0x59, 0xd4, - 0xdb, 0xc0, 0xc9, 0xbe, 0x0b, 0xb7, 0xa1, 0x7b, 0xaf, 0xb9, 0xb7, 0x7f, 0x7f, 0xdb, 0x35, 0x6d, - 0xaf, 0xef, 0xb8, 0xfe, 0xe9, 0x12, 0x66, 0x7e, 0xe8, 0x3b, 0xf5, 0x16, 0x70, 0xe2, 0x3e, 0xcf, - 0xb1, 0xcb, 0x7d, 0xab, 0x6e, 0x79, 0x3e, 0xb4, 0xcb, 0xdd, 0xae, 0x7b, 0x7a, 0x16, 0x97, 0x75, - 0xf0, 0x85, 0x7a, 0x03, 0x58, 0xb8, 0xcf, 0xb1, 0xec, 0x96, 0xef, 0x42, 0x73, 0x6f, 0xd3, 0xed, - 0x9d, 0x06, 0x64, 0x83, 0x88, 0x4b, 0xa4, 0x9d, 0x6f, 0x09, 0x14, 0x09, 0x24, 0xda, 0x8b, 0x0a, - 0xc2, 0xae, 0xfb, 0x54, 0x48, 0x89, 0xd6, 0xe2, 0xa3, 0xc1, 0x0c, 0xed, 0x35, 0x31, 0xf8, 0x73, - 0xb7, 0x9d, 0x1a, 0x58, 0x20, 0xa1, 0x54, 0x8c, 0x20, 0x9b, 0xfa, 0x58, 0x50, 0xec, 0x60, 0x51, - 0x61, 0x3d, 0x98, 0xbb, 0xed, 0xda, 0xe1, 0x85, 0xe2, 0x2c, 0x06, 0xcd, 0xaa, 0x7d, 0x59, 0x16, - 0xf2, 0xf6, 0x4f, 0xe2, 0x38, 0x5d, 0x4f, 0xf1, 0x4d, 0x69, 0x8c, 0xae, 0xf8, 0x16, 0x70, 0x13, - 0xed, 0x67, 0xa9, 0x4d, 0x53, 0xdd, 0x5a, 0xde, 0x0c, 0x66, 0xb5, 0xc8, 0xd2, 0x69, 0xb5, 0xcb, - 0x46, 0x7b, 0xab, 0xd1, 0xac, 0xa2, 0xd9, 0xf0, 0xcd, 0xe0, 0xc6, 0x11, 0xb9, 0xf5, 0xf6, 0x56, - 0xa3, 0xbc, 0xae, 0x2b, 0xdb, 0xbc, 0xbd, 0xd4, 0x6a, 0x37, 0x37, 0xb6, 0x8c, 0xcd, 0x46, 0xa3, - 0xd6, 0x58, 0x25, 0xc4, 0x90, 0x81, 0x7a, 0x2a, 0xca, 0x70, 0xde, 0xa8, 0xb5, 0xf5, 0xad, 0x4a, - 0xb3, 0xb1, 0x52, 0x5b, 0x55, 0xac, 0x51, 0xc6, 0xd6, 0x7d, 0xea, 0xf5, 0xe0, 0x3a, 0x8e, 0x93, - 0x5a, 0xb3, 0x81, 0xa6, 0xe8, 0x95, 0x72, 0xa3, 0xa2, 0xa3, 0xf9, 0xf8, 0x45, 0x55, 0x03, 0x57, - 0x13, 0x72, 0x5b, 0x2b, 0xb5, 0x3a, 0xbb, 0xab, 0xf6, 0x99, 0x9c, 0x7a, 0x1a, 0x5c, 0xc5, 0xbe, - 0xa3, 0x3e, 0x11, 0xca, 0x6f, 0xe6, 0xd4, 0x1b, 0xc0, 0x43, 0xb8, 0xaf, 0xc8, 0x06, 0xd9, 0x56, - 0xad, 0xba, 0xb5, 0x5e, 0x6b, 0xad, 0x97, 0xdb, 0x95, 0x35, 0xe5, 0xb3, 0x78, 0xfa, 0x12, 0xda, - 0xe3, 0x8c, 0x0b, 0xfe, 0x4b, 0x58, 0x3b, 0xa1, 0xcc, 0x2b, 0xea, 0x23, 0x87, 0xc2, 0x9e, 0x6c, - 0x17, 0x7f, 0x2a, 0x1c, 0x71, 0xaa, 0x9c, 0x0a, 0x3d, 0x3a, 0x05, 0xad, 0x74, 0x3a, 0xd4, 0x1e, - 0x43, 0x85, 0xae, 0x07, 0xd7, 0x35, 0x74, 0x82, 0x94, 0xa1, 0x57, 0x9a, 0xe7, 0x74, 0x63, 0xeb, - 0x7c, 0xb9, 0x5e, 0xd7, 0xdb, 0x5b, 0x2b, 0x35, 0xa3, 0xd5, 0x56, 0xb6, 0xb5, 0x7f, 0x94, 0xc2, - 0x65, 0x29, 0x46, 0x5a, 0x7f, 0x2a, 0xa5, 0x6d, 0xd6, 0x89, 0xcb, 0x4f, 0x3f, 0x08, 0x8a, 0x9e, - 0x6f, 0xfa, 0xfb, 0x1e, 0x6d, 0xd5, 0x0f, 0x1e, 0xde, 0xaa, 0x97, 0x5a, 0x38, 0x93, 0x41, 0x33, - 0x6b, 0x5f, 0xce, 0xa5, 0x69, 0xa6, 0x13, 0x58, 0x99, 0xb2, 0xc6, 0x10, 0xf1, 0x19, 0xa0, 0x05, - 0xda, 0x5e, 0x6b, 0x6d, 0x95, 0xeb, 0x86, 0x5e, 0xae, 0xde, 0x1b, 0xae, 0x47, 0x41, 0xf5, 0x6a, - 0x70, 0x62, 0xb3, 0x51, 0x5e, 0xae, 0xeb, 0xb8, 0xb9, 0x34, 0x1b, 0x0d, 0xbd, 0x82, 0xe4, 0xfe, - 0xa3, 0x78, 0xf7, 0x07, 0x59, 0xe5, 0x98, 0x6f, 0x64, 0x39, 0x31, 0xf2, 0xff, 0x86, 0x24, 0xea, - 0x6a, 0x17, 0x69, 0x18, 0x4b, 0x6b, 0xb2, 0x38, 0x7c, 0x49, 0xc8, 0xb3, 0x4d, 0x88, 0x93, 0x74, - 0x78, 0xfc, 0x97, 0x31, 0xf0, 0xb8, 0x1a, 0x9c, 0x60, 0xf1, 0xc0, 0x1e, 0x6e, 0xf1, 0x30, 0xfc, - 0x89, 0x0c, 0x66, 0xd6, 0xad, 0x1d, 0xec, 0x6f, 0xbd, 0x1f, 0x19, 0x28, 0x8b, 0x40, 0x0a, 0xbd, - 0x77, 0x24, 0xab, 0xcb, 0x4d, 0xe6, 0x25, 0xf1, 0xf5, 0x16, 0xa1, 0x09, 0xfb, 0x97, 0x53, 0xf7, - 0x4c, 0x94, 0xe1, 0x98, 0x9e, 0xe9, 0xf9, 0x52, 0x9a, 0x9e, 0x69, 0x38, 0xad, 0x54, 0x30, 0x21, - 0xd3, 0xc1, 0x85, 0xcf, 0xd8, 0xb7, 0x5c, 0xd8, 0xc5, 0x66, 0x22, 0xae, 0xb7, 0x6c, 0xf0, 0x89, - 0x67, 0xdd, 0xc3, 0x81, 0xc9, 0x7a, 0xd9, 0xcc, 0x83, 0x52, 0x38, 0x9a, 0xe0, 0x0d, 0x1f, 0xf4, - 0x52, 0x6f, 0x34, 0x37, 0x57, 0xd7, 0xb6, 0x56, 0x0c, 0x5d, 0xa7, 0x4b, 0xc4, 0x3b, 0xda, 0xbb, - 0x24, 0xb0, 0x40, 0x6b, 0x48, 0xbd, 0x27, 0x1e, 0x12, 0x0b, 0x32, 0x85, 0xe3, 0xdf, 0xd8, 0xe9, - 0xc9, 0x2a, 0x0f, 0xc7, 0x63, 0x92, 0x44, 0x98, 0xe8, 0x3e, 0xf1, 0xa6, 0xb0, 0x09, 0xdd, 0xcd, - 0x81, 0xf2, 0xf8, 0xd4, 0x14, 0xb3, 0x9f, 0xa2, 0xbc, 0x08, 0x80, 0x62, 0x0b, 0xf6, 0x60, 0xc7, - 0xd7, 0x3e, 0x2c, 0x8f, 0xdd, 0x26, 0xe2, 0xcc, 0x6d, 0x39, 0x95, 0xb9, 0x9d, 0xcf, 0xc0, 0xdc, - 0x2e, 0x8c, 0x6f, 0x6e, 0x17, 0xd3, 0x9a, 0xdb, 0x33, 0x71, 0xe6, 0x76, 0x42, 0xaf, 0x51, 0x4a, - 0xec, 0x35, 0x06, 0x0c, 0x75, 0xa3, 0x4e, 0x4d, 0x7a, 0x3e, 0x91, 0x2a, 0xf3, 0x27, 0x8b, 0x69, - 0xc7, 0x71, 0x02, 0xfc, 0xd1, 0x9a, 0xe7, 0x3f, 0x59, 0x48, 0x33, 0xee, 0x0f, 0xe5, 0x38, 0x5d, - 0x2b, 0x79, 0x45, 0x3e, 0x83, 0x45, 0x47, 0xf5, 0x61, 0xe0, 0x21, 0xd1, 0xf3, 0x96, 0xfe, 0xb4, - 0x5a, 0xab, 0xdd, 0xc2, 0x36, 0x79, 0xa5, 0x69, 0x18, 0x9b, 0x1b, 0x64, 0xbb, 0xea, 0x14, 0x50, - 0x23, 0x2a, 0xc6, 0x66, 0x83, 0x58, 0xe0, 0x3b, 0x3c, 0xf5, 0x95, 0x5a, 0xa3, 0xba, 0x15, 0x8e, - 0x6a, 0x8d, 0x95, 0xa6, 0xb2, 0xab, 0x2e, 0x81, 0x9b, 0x19, 0xea, 0xb8, 0x03, 0x24, 0x25, 0x94, - 0x1b, 0xd5, 0xad, 0xf5, 0x86, 0xbe, 0xde, 0x6c, 0xd4, 0x2a, 0x38, 0xbd, 0xa5, 0xb7, 0x15, 0x0b, - 0x99, 0x82, 0x03, 0x36, 0x7f, 0x4b, 0x2f, 0x1b, 0x95, 0x35, 0xdd, 0x20, 0x45, 0xde, 0xa7, 0xde, - 0x08, 0xce, 0x96, 0x1b, 0xcd, 0x36, 0x4a, 0x29, 0x37, 0xee, 0x6d, 0xdf, 0xbb, 0xa1, 0x6f, 0x6d, - 0x18, 0xcd, 0x8a, 0xde, 0x6a, 0xa1, 0x91, 0x94, 0xce, 0x10, 0x94, 0x9e, 0xfa, 0x64, 0x70, 0x07, - 0xc3, 0x9a, 0xde, 0xc6, 0xbe, 0x11, 0xeb, 0x4d, 0xec, 0x1e, 0x57, 0xd5, 0xb7, 0xd6, 0xca, 0xad, - 0xad, 0x5a, 0xa3, 0xd2, 0x5c, 0xdf, 0x28, 0xb7, 0x6b, 0x68, 0xc0, 0xdd, 0x30, 0x9a, 0xed, 0xe6, - 0xd6, 0x39, 0xdd, 0x68, 0xd5, 0x9a, 0x0d, 0xc5, 0x46, 0x55, 0x66, 0x46, 0xe8, 0xc0, 0x52, 0x72, - 0xd4, 0xeb, 0xc0, 0xe9, 0x20, 0xbd, 0xde, 0x44, 0x82, 0x66, 0xe6, 0x0c, 0x7d, 0xd6, 0xce, 0x6a, - 0xb5, 0x9b, 0x06, 0x99, 0x35, 0xac, 0xd7, 0x56, 0x0d, 0x34, 0xd5, 0x51, 0x9e, 0x91, 0xe9, 0x9c, - 0xe2, 0x9f, 0x25, 0x90, 0x6f, 0xf9, 0x4e, 0x5f, 0xfb, 0x81, 0xa8, 0x3b, 0x3c, 0x03, 0x80, 0x8b, - 0x5d, 0x21, 0xaa, 0xa6, 0x6f, 0xd2, 0xd5, 0x1a, 0x26, 0x45, 0xfb, 0x0d, 0xe1, 0xfd, 0xdb, 0xc8, - 0xea, 0x72, 0xfa, 0x31, 0xc3, 0xc7, 0x77, 0xc5, 0xce, 0xfc, 0xc6, 0x13, 0x9a, 0xc2, 0xc9, 0x38, - 0x0d, 0x9c, 0x62, 0x60, 0x45, 0xf2, 0x0f, 0x54, 0x06, 0xaa, 0x0f, 0x02, 0x57, 0x0d, 0x28, 0x1f, - 0xd6, 0xb9, 0x6d, 0xf5, 0xa1, 0xe0, 0xc1, 0x8c, 0xfa, 0xeb, 0xeb, 0xcd, 0x73, 0x7a, 0xa8, 0xe8, - 0xd5, 0x72, 0xbb, 0xac, 0xec, 0x68, 0x5f, 0x90, 0x41, 0x7e, 0xdd, 0xb9, 0x34, 0xb8, 0x6d, 0x6e, - 0xc3, 0xcb, 0xcc, 0xde, 0x4a, 0xf0, 0xa8, 0xbd, 0x5e, 0x4e, 0x2b, 0xf6, 0xf5, 0x78, 0x17, 0x99, - 0x2f, 0x49, 0x69, 0xc4, 0xbe, 0x7e, 0x58, 0xbf, 0x98, 0xbf, 0x1e, 0x47, 0xec, 0x31, 0xa2, 0x85, - 0xea, 0x59, 0x70, 0x26, 0x7a, 0x51, 0xab, 0xea, 0x8d, 0x76, 0x6d, 0xe5, 0xde, 0x48, 0xb8, 0x35, - 0x43, 0x48, 0xfc, 0xa3, 0xba, 0xb9, 0xe4, 0xb5, 0x82, 0xd3, 0xe0, 0x64, 0xf4, 0x6e, 0x55, 0x6f, - 0x07, 0x6f, 0xee, 0xd3, 0x9e, 0x53, 0x00, 0xf3, 0xa4, 0xdb, 0xdf, 0xec, 0x77, 0x91, 0xf5, 0xfd, - 0xd8, 0x08, 0xdd, 0x9b, 0xc0, 0xf1, 0xda, 0xc6, 0x4a, 0xab, 0xe5, 0x3b, 0xae, 0xb9, 0x03, 0xf1, - 0x38, 0x4a, 0xa4, 0x35, 0x98, 0xac, 0xbd, 0x57, 0x78, 0xf5, 0x9f, 0x1f, 0x6a, 0x48, 0x99, 0x31, - 0xa8, 0x7f, 0x4d, 0x68, 0xb5, 0x5e, 0x80, 0x60, 0x3a, 0xf4, 0xef, 0x9b, 0x70, 0x9b, 0x8b, 0xc7, - 0x65, 0xfb, 0xec, 0x73, 0x25, 0x30, 0xdb, 0xb6, 0xf6, 0xe0, 0x33, 0x1d, 0x1b, 0x7a, 0xea, 0x0c, - 0x90, 0x57, 0xd7, 0xdb, 0xca, 0x31, 0xf4, 0x07, 0x4d, 0x8b, 0x72, 0xf8, 0x8f, 0x8e, 0x0a, 0x40, - 0x7f, 0xca, 0x6d, 0x45, 0x46, 0x7f, 0xd6, 0xf5, 0xb6, 0x92, 0x47, 0x7f, 0x1a, 0x7a, 0x5b, 0x29, - 0xa0, 0x3f, 0x1b, 0xf5, 0xb6, 0x52, 0x44, 0x7f, 0x6a, 0xad, 0xb6, 0x32, 0x83, 0xfe, 0x2c, 0xb7, - 0xda, 0x4a, 0x09, 0xfd, 0x39, 0xd7, 0x6a, 0x2b, 0xb3, 0xe8, 0x4f, 0xa5, 0xdd, 0x56, 0x00, 0xfa, - 0x73, 0x77, 0xab, 0xad, 0xcc, 0xa1, 0x3f, 0xe5, 0x4a, 0x5b, 0x99, 0xc7, 0x7f, 0xf4, 0xb6, 0xb2, - 0x80, 0xfe, 0xb4, 0x5a, 0x6d, 0x65, 0x11, 0x53, 0x6e, 0xb5, 0x95, 0xe3, 0xb8, 0xac, 0x5a, 0x5b, - 0x51, 0xd0, 0x9f, 0xb5, 0x56, 0x5b, 0x39, 0x81, 0x33, 0xb7, 0xda, 0x8a, 0x8a, 0x0b, 0x6d, 0xb5, - 0x95, 0xab, 0x70, 0x9e, 0x56, 0x5b, 0x39, 0x89, 0x8b, 0x68, 0xb5, 0x95, 0xab, 0x31, 0x1b, 0x7a, - 0x5b, 0x39, 0x85, 0xf3, 0x18, 0x6d, 0xe5, 0x41, 0xf8, 0x55, 0xa3, 0xad, 0x9c, 0xc6, 0x8c, 0xe9, - 0x6d, 0xe5, 0x1a, 0xfc, 0xc7, 0x68, 0x2b, 0x1a, 0x7e, 0x55, 0x6e, 0x2b, 0xd7, 0x6a, 0x0f, 0x06, - 0xb3, 0xab, 0xd0, 0x27, 0x20, 0x6a, 0x0a, 0x90, 0x57, 0xa1, 0xcf, 0x4e, 0xc4, 0x5f, 0x99, 0x07, - 0x0f, 0xa2, 0x8b, 0x37, 0x2b, 0xae, 0xb3, 0x57, 0x87, 0x3b, 0x66, 0xe7, 0x8a, 0x7e, 0x3f, 0x32, - 0xf8, 0xb4, 0x17, 0xe6, 0xb8, 0x15, 0xed, 0x7e, 0xd4, 0x1b, 0xe1, 0xff, 0x89, 0x06, 0x72, 0xb0, - 0x46, 0x2d, 0xf3, 0x6b, 0xd4, 0x71, 0x26, 0x61, 0x5e, 0x64, 0x22, 0xf9, 0xf7, 0x6c, 0x63, 0xe0, - 0x36, 0xa4, 0x72, 0x03, 0x1b, 0x52, 0xa8, 0x85, 0xf5, 0xa1, 0xeb, 0x39, 0xb6, 0xd9, 0x6b, 0x51, - 0xf7, 0x23, 0x32, 0x57, 0x1d, 0x4c, 0x56, 0x9f, 0x1a, 0x34, 0x2a, 0x62, 0xf0, 0x3d, 0x31, 0x69, - 0x79, 0x6b, 0x50, 0x42, 0x31, 0xed, 0xeb, 0xb3, 0x61, 0xfb, 0x6a, 0x73, 0xed, 0xeb, 0x29, 0x87, - 0xa0, 0x9d, 0xae, 0xa9, 0xd5, 0xc6, 0x9b, 0x8a, 0x46, 0xce, 0xf9, 0xc1, 0xfe, 0x97, 0xac, 0x7d, - 0x41, 0x02, 0xa7, 0x74, 0x7b, 0xd8, 0x54, 0x86, 0x55, 0xa3, 0xb7, 0xb2, 0xd0, 0x6c, 0xf0, 0x22, - 0xbd, 0x63, 0x68, 0xb5, 0x87, 0xd3, 0x8c, 0x91, 0xe8, 0xef, 0x84, 0x12, 0x6d, 0x71, 0x12, 0xbd, - 0x6b, 0x7c, 0xd2, 0xe9, 0x04, 0xda, 0x98, 0x68, 0xdf, 0x95, 0xd7, 0xfe, 0x42, 0x02, 0x27, 0x88, - 0x07, 0xe1, 0xdd, 0x64, 0xe6, 0x84, 0x7b, 0x7b, 0xde, 0xfa, 0xea, 0x45, 0xb3, 0x2c, 0xa2, 0xdf, - 0x4c, 0x8a, 0xf6, 0x3a, 0x56, 0xe0, 0xf7, 0xf0, 0x02, 0x8f, 0xe9, 0xc7, 0x07, 0x8b, 0x8b, 0x91, - 0xf5, 0x6f, 0x86, 0xb2, 0x6e, 0x70, 0xb2, 0xbe, 0x63, 0x2c, 0xaa, 0x47, 0x2b, 0xe6, 0x6f, 0xe6, - 0xc1, 0x83, 0x09, 0x87, 0x54, 0x11, 0x48, 0x3f, 0x58, 0xb6, 0xbb, 0x06, 0xf4, 0x7c, 0xd3, 0xf5, - 0xb9, 0xf8, 0x42, 0x03, 0x53, 0xf3, 0x5c, 0x06, 0x53, 0x73, 0x69, 0xe4, 0xd4, 0x5c, 0x7b, 0x0f, - 0x6b, 0xe0, 0x9d, 0xe7, 0x91, 0x2d, 0x27, 0x60, 0x10, 0x53, 0xc3, 0xb8, 0x16, 0x15, 0x5a, 0x7e, - 0x3f, 0xcc, 0xa1, 0xbc, 0x72, 0xe8, 0x12, 0xd2, 0x21, 0xfe, 0x1b, 0x93, 0xb5, 0xc4, 0xf3, 0xec, - 0x3b, 0xde, 0x6c, 0x54, 0xba, 0x99, 0x4e, 0xa1, 0x5e, 0x5c, 0x02, 0xb3, 0xb8, 0xcb, 0xa9, 0x5b, - 0xf6, 0x45, 0xed, 0xcf, 0x65, 0x30, 0xdf, 0x80, 0x97, 0x2b, 0xbb, 0x66, 0xaf, 0x07, 0xed, 0x1d, - 0xa8, 0xdd, 0xc7, 0xd9, 0xf6, 0x66, 0xbf, 0xdf, 0x88, 0xf6, 0x87, 0x83, 0x47, 0xf5, 0x2e, 0x50, - 0xf0, 0x3a, 0x4e, 0x18, 0xe5, 0xe2, 0x07, 0x62, 0x56, 0xaf, 0xcb, 0xfb, 0xfe, 0xee, 0x12, 0x2e, - 0xab, 0xdc, 0xb7, 0x5a, 0xe8, 0x03, 0x83, 0x7c, 0x47, 0xc7, 0xc9, 0x6f, 0x0c, 0xed, 0x8c, 0x73, - 0x09, 0x9d, 0x71, 0xc8, 0xf8, 0x12, 0xcb, 0x74, 0xcc, 0x22, 0xc9, 0xf5, 0x60, 0xae, 0x13, 0x64, - 0x09, 0x4f, 0xe9, 0xb1, 0x49, 0xda, 0x5f, 0xa6, 0xea, 0xae, 0x85, 0x0a, 0x4f, 0xa7, 0x55, 0x70, - 0xc2, 0xa6, 0xe6, 0xd5, 0xe0, 0x44, 0xbb, 0xd9, 0xdc, 0x5a, 0x2f, 0x37, 0xee, 0x8d, 0x02, 0x08, - 0x6d, 0x6b, 0xaf, 0xc8, 0x83, 0xc5, 0x96, 0xd3, 0xbb, 0x04, 0x23, 0x9c, 0x6b, 0x9c, 0xfb, 0x27, - 0x2b, 0xa7, 0xdc, 0x01, 0x39, 0xa9, 0xa7, 0x40, 0xd1, 0xb4, 0xbd, 0xcb, 0x30, 0x30, 0xff, 0xe9, - 0x13, 0x85, 0xf1, 0xa3, 0x6c, 0x47, 0x60, 0xf0, 0x30, 0xde, 0x39, 0x42, 0x92, 0x3c, 0x57, 0x31, - 0x40, 0x9e, 0x05, 0xf3, 0x1e, 0xf1, 0x12, 0x69, 0x33, 0xce, 0x40, 0x5c, 0x1a, 0x66, 0x91, 0xb8, - 0x29, 0xc9, 0x94, 0x45, 0xfc, 0xa4, 0xbd, 0x36, 0xec, 0x3f, 0x36, 0x39, 0x88, 0xcb, 0x87, 0x61, - 0x2c, 0x1d, 0xc8, 0xaf, 0x9a, 0xf4, 0x24, 0xfe, 0x34, 0x38, 0x19, 0x9c, 0x50, 0xaf, 0xac, 0x95, - 0xeb, 0x75, 0xbd, 0xb1, 0xaa, 0x6f, 0xd5, 0xaa, 0x64, 0x3f, 0x39, 0x4a, 0x29, 0xb7, 0xdb, 0xfa, - 0xfa, 0x46, 0xbb, 0xb5, 0xa5, 0x3f, 0xad, 0xa2, 0xeb, 0x55, 0xec, 0x80, 0x8d, 0x4f, 0x50, 0x06, - 0xae, 0xf2, 0xe5, 0x46, 0xeb, 0xbc, 0x6e, 0x28, 0xbb, 0x67, 0xcb, 0x60, 0x8e, 0x19, 0x28, 0x10, - 0x77, 0x55, 0xb8, 0x6d, 0xee, 0xf7, 0xa8, 0x39, 0xae, 0x1c, 0x43, 0xdc, 0x61, 0xd9, 0x34, 0xed, - 0xde, 0x15, 0x25, 0xa7, 0x2a, 0x60, 0x9e, 0x1d, 0x13, 0x14, 0x49, 0xfb, 0xd6, 0x75, 0x60, 0xf6, - 0xbc, 0xe3, 0x5e, 0xc4, 0x5e, 0xc3, 0xda, 0x07, 0x48, 0xa0, 0xc1, 0x20, 0xaa, 0x05, 0x63, 0x80, - 0xbd, 0x4a, 0xdc, 0x4d, 0x2c, 0xa0, 0xb6, 0x34, 0x32, 0x72, 0xc5, 0xf5, 0x60, 0xee, 0x72, 0x90, - 0x3b, 0x6a, 0xe9, 0x4c, 0x92, 0xf6, 0xcb, 0x62, 0x8e, 0x5f, 0xa3, 0x8b, 0xcc, 0x7e, 0xd5, 0xff, - 0xed, 0x12, 0x28, 0xae, 0x42, 0xbf, 0xdc, 0xeb, 0xb1, 0x72, 0x7b, 0x99, 0xf0, 0x39, 0x52, 0xae, - 0x12, 0xe5, 0x5e, 0x2f, 0xbe, 0x51, 0x31, 0x02, 0x0a, 0xce, 0x3b, 0x71, 0x69, 0x82, 0x5e, 0xda, - 0x23, 0x0a, 0xcc, 0x5e, 0x62, 0x7f, 0x1b, 0xb9, 0x66, 0xbf, 0x9e, 0x31, 0x93, 0x1e, 0x13, 0x05, - 0x99, 0xcc, 0x25, 0x3b, 0x49, 0x05, 0xf9, 0xd4, 0x7b, 0xc0, 0xcc, 0xbe, 0x07, 0x2b, 0xa6, 0x17, - 0x0c, 0x6d, 0x7c, 0x4d, 0x9b, 0x17, 0xee, 0x83, 0x1d, 0x7f, 0xa9, 0xb6, 0x87, 0x26, 0x3e, 0x9b, - 0x24, 0x63, 0x18, 0xb7, 0x91, 0x3e, 0x1b, 0x01, 0x05, 0x34, 0xed, 0xbc, 0x6c, 0xf9, 0xbb, 0x95, - 0x5d, 0xd3, 0xa7, 0x9b, 0x2d, 0xe1, 0xb3, 0xf6, 0xa1, 0x31, 0xe0, 0x4c, 0x74, 0xd8, 0x89, 0x3f, - 0x8e, 0x7e, 0x33, 0x50, 0xb0, 0xf9, 0x63, 0xd9, 0x3b, 0x84, 0xff, 0x70, 0x8e, 0x79, 0x20, 0x3d, - 0x35, 0xe0, 0x13, 0xf0, 0xc8, 0x19, 0x07, 0xf0, 0x1f, 0x91, 0x41, 0xbe, 0xd9, 0x87, 0xb6, 0xf0, - 0x39, 0xcd, 0x10, 0x07, 0x69, 0x00, 0x87, 0xf7, 0x89, 0xbb, 0x10, 0x87, 0x95, 0x46, 0x25, 0xc7, - 0xa0, 0x70, 0x2b, 0xc8, 0x5b, 0xf6, 0xb6, 0x43, 0xad, 0xe0, 0x6b, 0x63, 0xec, 0xa2, 0x9a, 0xbd, - 0xed, 0x18, 0x38, 0xa3, 0xf6, 0x3e, 0x31, 0xef, 0xe1, 0xa4, 0xb2, 0xd3, 0x89, 0x7b, 0x65, 0x8c, - 0xb1, 0x48, 0x05, 0x8b, 0x91, 0x89, 0x5a, 0x6f, 0x96, 0xab, 0x4a, 0x57, 0xfb, 0x9b, 0x12, 0x28, - 0x12, 0xb5, 0xd1, 0x5e, 0x22, 0x03, 0xb9, 0xdc, 0xed, 0xc6, 0x80, 0x21, 0x1d, 0x00, 0xc3, 0x09, - 0xb4, 0x90, 0x7a, 0x7a, 0x07, 0xcf, 0x7c, 0x74, 0x42, 0xc1, 0xb1, 0x81, 0x36, 0xc9, 0x72, 0xb7, - 0x1b, 0x7f, 0xee, 0x21, 0x2c, 0x50, 0xe2, 0x0b, 0x64, 0x7b, 0x08, 0x59, 0xac, 0x87, 0x48, 0x3d, - 0x90, 0xc4, 0xf2, 0x97, 0x7d, 0x2b, 0xf9, 0x7b, 0x09, 0xcc, 0xd4, 0x2d, 0xcf, 0x47, 0xd8, 0x94, - 0x45, 0xb0, 0xb9, 0x0e, 0xcc, 0x06, 0xa2, 0x41, 0x5d, 0x26, 0x1a, 0x0f, 0xa2, 0x04, 0x7e, 0x26, - 0x7f, 0x37, 0x8f, 0xce, 0xe3, 0x92, 0x6b, 0x4f, 0xb9, 0x88, 0x3f, 0x13, 0x17, 0x15, 0x2b, 0x0d, - 0x16, 0xfb, 0x2b, 0xa1, 0xc0, 0xd7, 0x39, 0x81, 0xdf, 0x3e, 0x4e, 0x91, 0xd9, 0x0b, 0xfd, 0x0f, - 0x25, 0x00, 0x50, 0xd9, 0xf4, 0xe0, 0xf1, 0x23, 0xb8, 0x70, 0x22, 0x09, 0xd2, 0x7d, 0x05, 0x2b, - 0xdd, 0x75, 0x5e, 0xba, 0x3f, 0x34, 0xba, 0xaa, 0x49, 0x07, 0x8c, 0x55, 0x05, 0xc8, 0x56, 0x28, - 0x5a, 0xf4, 0x57, 0x7b, 0x7b, 0x28, 0xd4, 0x0d, 0x4e, 0xa8, 0x77, 0x8e, 0x59, 0x52, 0xf6, 0x72, - 0xfd, 0x63, 0x09, 0xcc, 0xb4, 0xa0, 0x8f, 0xba, 0x4e, 0xed, 0x9c, 0x48, 0xaf, 0xcf, 0xb4, 0x6d, - 0x49, 0xb0, 0x6d, 0x7f, 0x27, 0x27, 0x1a, 0xdc, 0x2e, 0x92, 0x0c, 0xe5, 0x29, 0x66, 0xf5, 0xe2, - 0xf5, 0x42, 0xc1, 0xed, 0x46, 0x51, 0xcb, 0x5e, 0xba, 0x6f, 0x95, 0x42, 0x4f, 0x13, 0xfe, 0x5c, - 0x20, 0x6b, 0x56, 0xe7, 0x0e, 0x9a, 0xd5, 0xe2, 0xe7, 0x02, 0xd9, 0x3a, 0xc6, 0x3b, 0x36, 0xa4, - 0x36, 0x40, 0x26, 0xe0, 0x73, 0x30, 0x8e, 0xbc, 0x9e, 0x2d, 0x83, 0x22, 0xdd, 0x7c, 0xb8, 0x2b, - 0x79, 0xef, 0x61, 0xf4, 0xd4, 0xe4, 0xfd, 0x63, 0x98, 0x82, 0x49, 0xcb, 0xfa, 0x21, 0x1b, 0x12, - 0xc3, 0xc6, 0x2d, 0xa0, 0x80, 0x43, 0xcb, 0xd3, 0x71, 0x2e, 0x72, 0x17, 0x09, 0x48, 0xe8, 0xe8, - 0xad, 0x41, 0x32, 0xa5, 0x46, 0x61, 0x02, 0x3b, 0x01, 0xe3, 0xa0, 0xf0, 0x4d, 0x15, 0x80, 0x8d, - 0xfd, 0x0b, 0x3d, 0xcb, 0xdb, 0xb5, 0x6c, 0xec, 0x63, 0x36, 0x4f, 0x1f, 0x49, 0x84, 0xf4, 0x44, - 0x93, 0x30, 0xd6, 0x28, 0x50, 0x80, 0xbc, 0xef, 0x5a, 0xd4, 0x44, 0x46, 0x7f, 0xd5, 0x27, 0x85, - 0xde, 0x9a, 0xf9, 0x81, 0xc0, 0x2f, 0x48, 0x0c, 0x11, 0x07, 0x4b, 0x4c, 0xe9, 0x91, 0xd7, 0x26, - 0x1b, 0x06, 0xbf, 0xc0, 0x87, 0xc1, 0xe7, 0x4e, 0x83, 0x17, 0x07, 0x4e, 0x83, 0x23, 0x1c, 0x3d, - 0xeb, 0x99, 0x10, 0xbb, 0x2e, 0xc9, 0x06, 0xfe, 0x8f, 0xbe, 0xc0, 0xee, 0x45, 0xd8, 0xbb, 0x8f, - 0x9c, 0x39, 0x88, 0x12, 0xd8, 0x3e, 0x6f, 0x56, 0xb0, 0xcf, 0xfb, 0x58, 0x34, 0x77, 0x72, 0x04, - 0x8d, 0xe9, 0x14, 0x92, 0xe3, 0xd8, 0xcd, 0x0f, 0xb0, 0xab, 0x7d, 0x52, 0x38, 0x98, 0x28, 0x23, - 0xe3, 0xc4, 0x59, 0x10, 0xe5, 0x40, 0x0a, 0x39, 0x60, 0xf6, 0x90, 0x93, 0x7a, 0xe0, 0x51, 0xf4, - 0xd3, 0xe9, 0xf2, 0xde, 0x78, 0x36, 0x76, 0x70, 0xac, 0xbe, 0xb9, 0x7c, 0xb7, 0x5e, 0x69, 0x2b, - 0xf0, 0xe0, 0x51, 0x7b, 0x7c, 0xa8, 0x9e, 0x1c, 0xa0, 0x8f, 0xd6, 0x74, 0xb4, 0xff, 0x21, 0x81, - 0x22, 0x35, 0x37, 0xee, 0x3a, 0x24, 0x84, 0xda, 0x2b, 0xc7, 0x81, 0x24, 0x31, 0xba, 0xc9, 0xe7, - 0xd2, 0x02, 0x30, 0x01, 0x03, 0xe3, 0xde, 0xcc, 0x00, 0xd0, 0xfe, 0x49, 0x02, 0x79, 0x64, 0x06, - 0x89, 0xc5, 0x8e, 0xf8, 0xac, 0xb0, 0x4b, 0x31, 0x23, 0x00, 0x44, 0x3e, 0x46, 0xbf, 0x97, 0xc1, - 0x6c, 0x9f, 0x64, 0x0c, 0x23, 0x97, 0xdc, 0x20, 0xd0, 0x19, 0x41, 0x23, 0xfa, 0x8c, 0x99, 0x72, - 0x26, 0xb9, 0x25, 0x27, 0xf3, 0x93, 0x0e, 0x0e, 0x7d, 0x12, 0x61, 0x26, 0xb6, 0xb5, 0x7f, 0x95, - 0x00, 0x30, 0xa0, 0xe7, 0xf4, 0x2e, 0xc1, 0x4d, 0xd7, 0xd2, 0xae, 0x8d, 0x00, 0xa0, 0xcd, 0x3e, - 0x17, 0x35, 0xfb, 0xcf, 0x4b, 0xa2, 0xce, 0xc3, 0x9c, 0xe6, 0x05, 0xc4, 0x63, 0xc4, 0xff, 0x64, - 0x30, 0x43, 0xe5, 0x48, 0x6d, 0x4a, 0x31, 0xe1, 0x07, 0x1f, 0x69, 0x1f, 0x14, 0x72, 0x3e, 0x16, - 0xe1, 0x28, 0x1d, 0x00, 0x95, 0x31, 0x00, 0x38, 0x0e, 0xe6, 0x02, 0x00, 0x36, 0x8d, 0x9a, 0x02, - 0xb5, 0x77, 0xcb, 0xd8, 0x43, 0x83, 0x0c, 0x6e, 0x87, 0xef, 0x69, 0xfe, 0x42, 0x78, 0xb2, 0xcf, - 0xc8, 0x23, 0x2c, 0x3f, 0x23, 0x80, 0x7e, 0x57, 0x68, 0x76, 0x2f, 0xc0, 0xd0, 0x03, 0xa5, 0xbf, - 0x3a, 0xab, 0x83, 0x05, 0xce, 0x2a, 0x51, 0x4f, 0x83, 0x93, 0x5c, 0x02, 0x19, 0xef, 0xba, 0xca, - 0x31, 0x55, 0x03, 0xa7, 0xb8, 0x37, 0xf4, 0x01, 0x76, 0x95, 0x9c, 0xf6, 0xae, 0x3f, 0xc9, 0x85, - 0xeb, 0x3d, 0xef, 0xcf, 0xd3, 0xd5, 0xb7, 0x4f, 0xf3, 0xc1, 0x32, 0x3b, 0x8e, 0xed, 0xc3, 0xfb, - 0x19, 0x37, 0x97, 0x30, 0x21, 0xd1, 0x6a, 0x38, 0x0d, 0x66, 0x7c, 0x97, 0x75, 0x7d, 0x09, 0x1e, - 0x59, 0xc5, 0x2a, 0xf0, 0x8a, 0xd5, 0x00, 0x67, 0x2d, 0xbb, 0xd3, 0xdb, 0xef, 0x42, 0x03, 0xf6, - 0x4c, 0x24, 0x43, 0xaf, 0xec, 0x55, 0x61, 0x1f, 0xda, 0x5d, 0x68, 0xfb, 0x84, 0xcf, 0xe0, 0xdc, - 0xac, 0x40, 0x4e, 0x5e, 0x19, 0x9f, 0xc4, 0x2b, 0xe3, 0x23, 0x86, 0x2d, 0x01, 0x27, 0xac, 0x01, - 0xde, 0x0e, 0x00, 0xa9, 0xdb, 0x39, 0x0b, 0x5e, 0xa6, 0x6a, 0x38, 0x18, 0x02, 0xbb, 0x19, 0x66, - 0x30, 0x98, 0xcc, 0xda, 0x57, 0x43, 0xf5, 0x7b, 0x0a, 0xa7, 0x7e, 0xb7, 0x08, 0xb2, 0x90, 0x4e, - 0xeb, 0xfa, 0x63, 0x68, 0xdd, 0x02, 0x98, 0x8d, 0x76, 0xa3, 0x65, 0xf5, 0x1a, 0x70, 0x75, 0xe0, - 0xa1, 0xdc, 0xd0, 0xf5, 0x6a, 0x6b, 0x6b, 0x73, 0x63, 0xd5, 0x28, 0x57, 0x75, 0x05, 0x20, 0xfd, - 0x24, 0x7a, 0x19, 0x3a, 0x16, 0xe7, 0xb5, 0x3f, 0x92, 0x40, 0x01, 0x1f, 0xfa, 0xd6, 0x9e, 0x3e, - 0x21, 0xcd, 0xf1, 0x38, 0xa7, 0xa9, 0x70, 0xdc, 0x15, 0xbf, 0xe7, 0x87, 0x0a, 0x13, 0x73, 0x75, - 0xa8, 0x7b, 0x7e, 0x12, 0x08, 0x65, 0x3f, 0x13, 0x42, 0x4d, 0xb2, 0xb5, 0xeb, 0x5c, 0xfe, 0x8f, - 0xdc, 0x24, 0x51, 0xfd, 0x8f, 0xb8, 0x49, 0x0e, 0x61, 0x61, 0xea, 0x4d, 0x72, 0x48, 0xbb, 0x4b, - 0x68, 0xa6, 0xda, 0x47, 0x0b, 0xe1, 0xfc, 0xef, 0x53, 0xd2, 0xa1, 0xf6, 0xce, 0xca, 0x60, 0xc1, - 0xb2, 0x7d, 0xe8, 0xda, 0x66, 0x6f, 0xa5, 0x67, 0xee, 0x04, 0xf6, 0xe9, 0xb5, 0x07, 0xa2, 0xff, - 0x47, 0x79, 0x0c, 0xfe, 0x0b, 0xf5, 0x0c, 0x00, 0x3e, 0xdc, 0xeb, 0xf7, 0x4c, 0x3f, 0x52, 0x3d, - 0x26, 0x85, 0xd5, 0xbe, 0x3c, 0xaf, 0x7d, 0x8f, 0x06, 0x57, 0x11, 0xd0, 0xda, 0x57, 0xfa, 0x70, - 0xd3, 0xb6, 0x9e, 0xb1, 0x8f, 0x63, 0x2b, 0x13, 0x1d, 0x1d, 0xf6, 0x8a, 0xdb, 0x15, 0x2a, 0xf2, - 0xbb, 0x42, 0xea, 0x9d, 0xe0, 0x1a, 0x1c, 0x36, 0x1b, 0x5f, 0x4c, 0x70, 0xde, 0xea, 0xee, 0x40, - 0xbf, 0xb6, 0xbd, 0x6e, 0x79, 0x9e, 0x65, 0xef, 0xe0, 0xe9, 0x78, 0xc9, 0x88, 0xcf, 0xa0, 0xfd, - 0x2f, 0xe1, 0xb8, 0x4d, 0x41, 0x9f, 0x31, 0x22, 0x6e, 0x93, 0xc3, 0x6f, 0xdb, 0x45, 0xed, 0x34, - 0x5c, 0xd5, 0xc9, 0x0b, 0xac, 0xea, 0xb0, 0x98, 0x16, 0x04, 0x57, 0x07, 0x5e, 0x23, 0x14, 0x18, - 0x2a, 0xa9, 0x1a, 0xd9, 0xf7, 0x7d, 0xdf, 0x96, 0xc1, 0x22, 0x29, 0x7a, 0xd9, 0x71, 0x2e, 0xee, - 0x99, 0xee, 0x45, 0xed, 0xa7, 0x0f, 0xb7, 0x0b, 0x9c, 0xb8, 0x7b, 0x15, 0xb7, 0xa5, 0x3b, 0xa0, - 0xbc, 0xf9, 0x41, 0xe5, 0xd5, 0x7e, 0x47, 0x78, 0x4a, 0xc2, 0xc9, 0x33, 0xa8, 0xd4, 0x74, 0xb6, - 0xb7, 0xc4, 0x8e, 0x47, 0x8a, 0x30, 0x98, 0x3d, 0xf0, 0xbf, 0x15, 0x02, 0x1f, 0x8c, 0x23, 0xec, - 0xce, 0xc0, 0x24, 0x71, 0xd7, 0xbe, 0x36, 0x1e, 0x76, 0x01, 0x5f, 0x63, 0x60, 0xa7, 0x00, 0xf9, - 0x62, 0xe8, 0xcc, 0x84, 0xfe, 0xb2, 0x15, 0xca, 0x67, 0x87, 0x66, 0x0c, 0xcb, 0x53, 0x41, 0xf3, - 0x24, 0xcf, 0x42, 0xb3, 0x9f, 0x29, 0xa6, 0x5f, 0x11, 0xde, 0x71, 0x1b, 0x2a, 0x20, 0xc2, 0xdd, - 0x74, 0x5a, 0xa5, 0xd8, 0x76, 0x9d, 0x38, 0x9b, 0xd9, 0xa3, 0xf9, 0xc2, 0x02, 0x98, 0x0d, 0xe2, - 0x67, 0xe1, 0x6b, 0x37, 0x43, 0x0c, 0x4f, 0x81, 0xa2, 0xe7, 0xec, 0xbb, 0x1d, 0x48, 0xf7, 0x40, - 0xe9, 0xd3, 0x18, 0xfb, 0x75, 0x23, 0xcd, 0x85, 0x03, 0x16, 0x49, 0x3e, 0xb5, 0x45, 0x12, 0x6f, - 0xef, 0x26, 0xd8, 0x0f, 0xda, 0x8b, 0x84, 0xaf, 0x0d, 0xe1, 0x30, 0x6b, 0x41, 0xff, 0x81, 0x68, - 0x04, 0xfc, 0xba, 0xd0, 0x6e, 0xd0, 0x88, 0x9a, 0xa4, 0x53, 0xb9, 0xe6, 0x18, 0x76, 0xf0, 0xb5, - 0xe0, 0x41, 0x41, 0x0e, 0x6a, 0x00, 0x63, 0x83, 0x77, 0xd3, 0xa8, 0x2b, 0xb2, 0xf6, 0xec, 0x3c, - 0x50, 0x08, 0x6b, 0xcd, 0xd0, 0x16, 0xd4, 0x5e, 0x96, 0x3b, 0x6a, 0x83, 0x37, 0x7e, 0x06, 0xcb, - 0xdd, 0xed, 0x98, 0x18, 0x6c, 0x9c, 0x13, 0x7c, 0x54, 0xbb, 0x18, 0x4d, 0x1a, 0xa3, 0x99, 0x25, - 0x28, 0x9f, 0xf6, 0x96, 0x9c, 0x48, 0xec, 0x72, 0x31, 0x16, 0xb3, 0xef, 0x95, 0xbe, 0x93, 0x0f, - 0xc2, 0x20, 0xae, 0xb8, 0xce, 0xde, 0xa6, 0xdb, 0xd3, 0xfe, 0x8f, 0xd0, 0xd5, 0x10, 0x31, 0xb3, - 0x0b, 0x29, 0x7e, 0x76, 0x81, 0x57, 0xa4, 0x7b, 0xd1, 0x56, 0x58, 0x6f, 0x8c, 0xe1, 0x5b, 0xbd, - 0x11, 0x2c, 0x9a, 0xdd, 0xee, 0x86, 0xb9, 0x03, 0x2b, 0x68, 0xda, 0x6e, 0xfb, 0x34, 0x44, 0xda, - 0x40, 0x6a, 0xe2, 0x54, 0x86, 0xef, 0x23, 0x67, 0x0e, 0x58, 0xa5, 0xe2, 0xcb, 0xb0, 0x1c, 0x88, - 0x54, 0x7e, 0x53, 0x19, 0xfe, 0xd0, 0x90, 0xd1, 0xd9, 0x35, 0xa3, 0x80, 0x8e, 0xf4, 0x49, 0xd0, - 0x17, 0x4b, 0x80, 0xef, 0xec, 0x35, 0xef, 0xd7, 0x24, 0x30, 0x83, 0xf0, 0x28, 0x77, 0xbb, 0xda, - 0xc3, 0xb9, 0xb8, 0xa7, 0xb1, 0xde, 0x70, 0xcf, 0x17, 0x76, 0x4d, 0x0c, 0x6a, 0x48, 0xe8, 0xc7, - 0x60, 0x12, 0x09, 0x51, 0xe2, 0x84, 0x28, 0x16, 0xbf, 0x34, 0xb1, 0x88, 0xec, 0xc5, 0xf7, 0x59, - 0x09, 0x2c, 0x04, 0xf3, 0x8c, 0x15, 0xe8, 0x77, 0x76, 0xb5, 0xdb, 0x45, 0xd7, 0xb9, 0x68, 0x4b, - 0x0c, 0xb7, 0x84, 0x7b, 0xda, 0xf7, 0x72, 0x29, 0x55, 0x9e, 0x2b, 0x39, 0x66, 0x91, 0x30, 0x95, - 0x2e, 0x26, 0x11, 0xcc, 0x5e, 0x98, 0x5f, 0x95, 0x00, 0x68, 0x3b, 0xe1, 0x64, 0xf9, 0x10, 0x92, - 0xfc, 0x19, 0xe1, 0xdd, 0x62, 0x5a, 0xf1, 0xa8, 0xd8, 0xf4, 0x3d, 0x87, 0xa0, 0x33, 0xd5, 0xa8, - 0x92, 0xa6, 0xd2, 0xd6, 0x67, 0xab, 0xfb, 0xfd, 0x9e, 0xd5, 0x31, 0xfd, 0x41, 0x0f, 0xc0, 0x78, - 0xf1, 0xe2, 0x3b, 0xeb, 0x53, 0x19, 0x8d, 0x61, 0x19, 0x31, 0xb2, 0x24, 0x71, 0x82, 0xa4, 0x20, - 0x4e, 0x90, 0xa0, 0x57, 0xcf, 0x08, 0xe2, 0x53, 0x50, 0x4f, 0x19, 0x1c, 0x6f, 0xf6, 0xa1, 0xbd, - 0xec, 0x42, 0xb3, 0xdb, 0x71, 0xf7, 0xf7, 0x2e, 0x78, 0xac, 0xfb, 0x6a, 0xb2, 0x8e, 0x32, 0x2b, - 0xd7, 0x12, 0xb7, 0x72, 0xad, 0xfd, 0x98, 0xf0, 0xa5, 0xa9, 0xcc, 0xfe, 0x0a, 0xc3, 0xc3, 0x18, - 0x43, 0x5d, 0x2a, 0xa7, 0xab, 0x81, 0x45, 0xea, 0x7c, 0x9a, 0x45, 0xea, 0x37, 0x0b, 0xc5, 0x85, - 0x13, 0xaa, 0xd7, 0x54, 0x7c, 0xe7, 0x16, 0x5b, 0xd0, 0x8f, 0x81, 0xf7, 0x06, 0xb0, 0x70, 0x21, - 0x7a, 0x13, 0x42, 0xcc, 0x27, 0x0e, 0xf1, 0x68, 0x7d, 0x6b, 0xda, 0x15, 0x1a, 0x9e, 0x85, 0x18, - 0x74, 0x43, 0x04, 0x25, 0x11, 0xb7, 0xb9, 0x54, 0xcb, 0x2d, 0x89, 0xe5, 0x67, 0x8f, 0xc2, 0x27, - 0x25, 0x30, 0x87, 0x6f, 0xe2, 0x5f, 0xbe, 0x82, 0x0f, 0x82, 0x0a, 0x1a, 0x25, 0x2f, 0x64, 0xc5, - 0xac, 0x82, 0x7c, 0xcf, 0xb2, 0x2f, 0x06, 0xfe, 0x8e, 0xe8, 0x7f, 0x74, 0xc5, 0xa9, 0x34, 0xe4, - 0x8a, 0xd3, 0x70, 0x9b, 0x24, 0x2c, 0x37, 0x66, 0x34, 0x7d, 0x83, 0xd0, 0x35, 0xf4, 0x23, 0xc9, - 0x65, 0x2f, 0xc6, 0xbf, 0xca, 0x83, 0x62, 0x0b, 0x9a, 0x6e, 0x67, 0x57, 0x7b, 0xbf, 0x34, 0x74, - 0x2a, 0x51, 0xe2, 0xa7, 0x12, 0x2b, 0x60, 0x66, 0xdb, 0xea, 0xf9, 0xd0, 0x25, 0x3e, 0xe0, 0x6c, - 0xd7, 0x4e, 0x9a, 0xf8, 0x72, 0xcf, 0xe9, 0x5c, 0x5c, 0xa2, 0xa6, 0xfd, 0x52, 0x10, 0x6f, 0x7a, - 0x69, 0x05, 0x7f, 0x64, 0x04, 0x1f, 0x23, 0x83, 0xd0, 0x73, 0x5c, 0x3f, 0xee, 0xfe, 0xa2, 0x18, - 0x2a, 0x2d, 0xc7, 0xf5, 0x0d, 0xf2, 0x21, 0x82, 0x79, 0x7b, 0xbf, 0xd7, 0x6b, 0xc3, 0xfb, 0xfd, - 0x60, 0x5a, 0x17, 0x3c, 0x23, 0x63, 0xd1, 0xd9, 0xde, 0xf6, 0x20, 0x59, 0x54, 0x28, 0x18, 0xf4, - 0x49, 0x3d, 0x09, 0x0a, 0x3d, 0x6b, 0xcf, 0x22, 0x13, 0x91, 0x82, 0x41, 0x1e, 0xd4, 0x9b, 0x81, - 0x12, 0xcd, 0x81, 0x08, 0xa3, 0xa7, 0x8b, 0xb8, 0x69, 0x1e, 0x48, 0x47, 0x3a, 0x73, 0x11, 0x5e, - 0xf1, 0x4e, 0xcf, 0xe0, 0xf7, 0xf8, 0xbf, 0xf6, 0xda, 0xb4, 0x1b, 0x26, 0x44, 0xe2, 0xf1, 0x33, - 0x5c, 0x17, 0x76, 0x1c, 0xb7, 0x1b, 0xc8, 0x26, 0x7e, 0x82, 0x41, 0xf3, 0xa5, 0xdb, 0xe6, 0x18, - 0x5a, 0x78, 0xf6, 0x9a, 0xf6, 0x9e, 0x22, 0xea, 0x36, 0x51, 0xd1, 0xe7, 0x2d, 0x7f, 0x77, 0x1d, - 0xfa, 0xa6, 0xf6, 0x57, 0xf2, 0x50, 0x8d, 0x9b, 0xfb, 0xff, 0x35, 0x6e, 0x84, 0xc6, 0x91, 0x98, - 0x61, 0xfe, 0xbe, 0x6b, 0x23, 0x39, 0x52, 0x3f, 0x5a, 0x26, 0x45, 0xbd, 0x13, 0x5c, 0x13, 0x3d, - 0x05, 0x4b, 0xa9, 0x55, 0xc6, 0xb5, 0xb6, 0x64, 0xc4, 0x67, 0x50, 0x37, 0xc0, 0xc3, 0xc8, 0xcb, - 0xb5, 0xf6, 0x7a, 0x7d, 0xcd, 0xda, 0xd9, 0xed, 0x59, 0x3b, 0xbb, 0xbe, 0x57, 0xb3, 0x3d, 0x1f, - 0x9a, 0xdd, 0xe6, 0xb6, 0x41, 0x6e, 0x1e, 0x03, 0x98, 0x8e, 0x48, 0x56, 0xde, 0x47, 0x5c, 0x6c, - 0x74, 0x63, 0x35, 0x25, 0xa6, 0xa5, 0x3c, 0x1e, 0xb5, 0x14, 0x6f, 0xbf, 0x17, 0x62, 0x7a, 0xdd, - 0x00, 0xa6, 0x91, 0xaa, 0xef, 0xf7, 0x70, 0x73, 0xc1, 0x99, 0xd3, 0x8e, 0x73, 0x09, 0x9c, 0x64, - 0xdf, 0x6c, 0xfe, 0x4f, 0x11, 0x14, 0x56, 0x5d, 0xb3, 0xbf, 0xab, 0x3d, 0x9b, 0xe9, 0x9f, 0x27, - 0xd5, 0x26, 0x42, 0xed, 0x94, 0x46, 0x69, 0xa7, 0x3c, 0x42, 0x3b, 0xf3, 0x8c, 0x76, 0xc6, 0x2f, - 0x3a, 0x9f, 0x05, 0xf3, 0x1d, 0xa7, 0xd7, 0x83, 0x1d, 0x24, 0x8f, 0x5a, 0x17, 0xaf, 0xf6, 0xcc, - 0x1a, 0x5c, 0x1a, 0x8e, 0xc9, 0x0f, 0xfd, 0x16, 0x59, 0x63, 0x27, 0x4a, 0x1f, 0x25, 0x68, 0x2f, - 0x93, 0x40, 0x5e, 0xef, 0xee, 0x40, 0x6e, 0x1d, 0x3e, 0xc7, 0xac, 0xc3, 0x9f, 0x02, 0x45, 0xdf, - 0x74, 0x77, 0xa0, 0x1f, 0xac, 0x13, 0x90, 0xa7, 0xf0, 0xaa, 0x00, 0x99, 0xb9, 0x2a, 0xe0, 0x87, - 0x40, 0xde, 0x8f, 0xee, 0xf9, 0x7f, 0xd8, 0x30, 0xf8, 0xb1, 0xec, 0x97, 0x50, 0x89, 0x4b, 0xf8, - 0xc6, 0x7f, 0xfc, 0xc1, 0x20, 0xd6, 0x85, 0x83, 0xa1, 0x6c, 0xaf, 0x03, 0xb3, 0x56, 0xc7, 0xb1, - 0x6b, 0x7b, 0xe6, 0x0e, 0xa4, 0xd5, 0x8c, 0x12, 0x82, 0xb7, 0xfa, 0x9e, 0x73, 0x9f, 0x45, 0x17, - 0xb5, 0xa2, 0x04, 0x54, 0x85, 0x5d, 0xab, 0xdb, 0x85, 0x36, 0x6d, 0xd9, 0xf4, 0xe9, 0xec, 0x19, - 0x90, 0x47, 0x3c, 0x20, 0xfd, 0x41, 0xc6, 0x82, 0x72, 0x4c, 0x9d, 0x47, 0xcd, 0x8a, 0x34, 0x5e, - 0x25, 0xc7, 0xaf, 0xb9, 0x8a, 0x78, 0x0d, 0x91, 0xca, 0x0d, 0x6f, 0x5c, 0x8f, 0x02, 0x05, 0xdb, - 0xe9, 0xc2, 0x91, 0x83, 0x10, 0xc9, 0xa5, 0x3e, 0x0e, 0x14, 0x60, 0x17, 0xf5, 0x0a, 0x32, 0xce, - 0x7e, 0x26, 0x59, 0x96, 0x06, 0xc9, 0x9c, 0xce, 0x35, 0x69, 0x18, 0xb7, 0xd9, 0x37, 0xc0, 0x9f, - 0x98, 0x01, 0xc7, 0x49, 0x1f, 0xd0, 0xda, 0xbf, 0x80, 0x48, 0x5d, 0x80, 0xda, 0xeb, 0x87, 0x0f, - 0x5c, 0xc7, 0x79, 0x65, 0x3f, 0x09, 0x0a, 0xde, 0xfe, 0x85, 0xd0, 0x08, 0x25, 0x0f, 0x6c, 0xd3, - 0x95, 0x26, 0x32, 0x9c, 0xc9, 0xe3, 0x0e, 0x67, 0xdc, 0xd0, 0x24, 0x07, 0x8d, 0x3f, 0x1a, 0xc8, - 0xc8, 0x81, 0x8e, 0x60, 0x20, 0x1b, 0x36, 0x0c, 0x9d, 0x06, 0x33, 0xe6, 0xb6, 0x0f, 0xdd, 0xc8, - 0x4c, 0xa4, 0x8f, 0x68, 0xa8, 0xbc, 0x00, 0xb7, 0x1d, 0x17, 0x89, 0x85, 0x84, 0x95, 0x0d, 0x9f, - 0x99, 0x96, 0x0b, 0xb8, 0x1d, 0xb4, 0x5b, 0xc0, 0x09, 0xdb, 0xa9, 0xc2, 0x3e, 0x95, 0x33, 0x41, - 0x71, 0x81, 0xdc, 0xee, 0x7e, 0xe0, 0xc5, 0x81, 0xae, 0x64, 0xf1, 0x60, 0x57, 0xa2, 0x7d, 0x3e, - 0xed, 0x9c, 0x79, 0x00, 0xe8, 0x89, 0x59, 0x68, 0xea, 0x13, 0xc1, 0x7c, 0x97, 0x7a, 0x88, 0x75, - 0xac, 0xb0, 0x95, 0xc4, 0x7e, 0xc7, 0x65, 0x8e, 0x14, 0x29, 0xcf, 0x2a, 0xd2, 0x2a, 0x28, 0xe1, - 0xe3, 0xd8, 0x48, 0x93, 0x0a, 0x03, 0x1e, 0xf9, 0x78, 0x5a, 0x17, 0x56, 0x8a, 0x11, 0xdb, 0x52, - 0x85, 0x7e, 0x62, 0x84, 0x1f, 0xa7, 0x9b, 0x7d, 0x27, 0x4b, 0x28, 0xfb, 0xe6, 0xf8, 0x2b, 0x45, - 0x70, 0x4d, 0xc5, 0x75, 0x3c, 0x0f, 0x1f, 0xc1, 0x19, 0x6c, 0x98, 0x6f, 0x94, 0xb8, 0x4b, 0x83, - 0x1e, 0xd0, 0xcd, 0x6f, 0x58, 0x83, 0x9a, 0x5e, 0xd3, 0xf8, 0x0b, 0xe1, 0xa0, 0x37, 0xe1, 0xfe, - 0x43, 0x8c, 0xd0, 0xff, 0x63, 0x34, 0x92, 0xf7, 0xe4, 0x44, 0xe2, 0xf0, 0xa4, 0x94, 0x55, 0xf6, - 0xcd, 0xe5, 0x2b, 0x12, 0xb8, 0x76, 0x90, 0x9b, 0x4d, 0xdb, 0x0b, 0x1b, 0xcc, 0x43, 0x46, 0xb4, - 0x17, 0x3e, 0x6e, 0x4b, 0xe2, 0x1d, 0xc1, 0x31, 0x75, 0x67, 0x4a, 0x8b, 0x59, 0x2c, 0x89, 0x0e, - 0xf4, 0x24, 0xdd, 0x11, 0x9c, 0x9a, 0x7c, 0xf6, 0xc2, 0xfd, 0xfd, 0x3c, 0x38, 0xbe, 0xea, 0x3a, - 0xfb, 0x7d, 0x2f, 0xea, 0x81, 0xfe, 0x74, 0xf8, 0x86, 0x6c, 0x51, 0xc4, 0x34, 0xb8, 0x1e, 0xcc, - 0xb9, 0xd4, 0x9a, 0x8b, 0xb6, 0x67, 0xd9, 0x24, 0xb6, 0xf7, 0x92, 0x0f, 0xd3, 0x7b, 0x45, 0xfd, - 0x4c, 0x9e, 0xeb, 0x67, 0x06, 0x7b, 0x8e, 0xc2, 0x90, 0x9e, 0xe3, 0x4f, 0xa4, 0x94, 0x83, 0xea, - 0x80, 0x88, 0x62, 0xfa, 0x8b, 0x0a, 0x28, 0xee, 0xe0, 0x8c, 0xb4, 0xbb, 0x78, 0xa4, 0x58, 0xcd, - 0x30, 0x71, 0x83, 0x7e, 0x1a, 0xc9, 0x55, 0x66, 0x75, 0x38, 0xd5, 0x00, 0x97, 0xcc, 0x6d, 0xf6, - 0x4a, 0xf5, 0xda, 0x3c, 0x98, 0x0f, 0x4b, 0xaf, 0x75, 0x3d, 0x2e, 0x3a, 0x2c, 0xa3, 0x51, 0x0b, - 0x22, 0x1a, 0x75, 0x60, 0x9d, 0x39, 0x1c, 0x75, 0x64, 0x66, 0xd4, 0x19, 0x3a, 0xba, 0xcc, 0xc7, - 0x8c, 0x2e, 0xda, 0xb3, 0x64, 0xd1, 0x6b, 0xf7, 0xf8, 0xae, 0x15, 0xd7, 0xe6, 0x81, 0x3c, 0x58, - 0x08, 0x5e, 0xfe, 0x37, 0xba, 0x56, 0xd9, 0x2b, 0xc9, 0x47, 0x24, 0x70, 0xe2, 0x60, 0x67, 0xfe, - 0x50, 0xde, 0x4b, 0x0d, 0xd5, 0xc9, 0x0b, 0xbd, 0xd4, 0xf0, 0x13, 0xbf, 0x49, 0x97, 0x18, 0x04, - 0x85, 0xb3, 0xf7, 0x46, 0x77, 0xe2, 0x62, 0x61, 0x4e, 0x04, 0x89, 0x66, 0x2f, 0xc0, 0x9f, 0x95, - 0xc1, 0x6c, 0x0b, 0xfa, 0x75, 0xf3, 0x8a, 0xb3, 0xef, 0x6b, 0xa6, 0xe8, 0xf6, 0xdc, 0x13, 0x40, - 0xb1, 0x87, 0x3f, 0xc1, 0x1d, 0x0c, 0x1b, 0xb4, 0x94, 0xdd, 0xdf, 0xc2, 0xbe, 0x41, 0x84, 0xb4, - 0x41, 0xf3, 0xf3, 0xd1, 0x67, 0x44, 0x76, 0x47, 0x43, 0xee, 0x26, 0xb2, 0xb5, 0x93, 0x6a, 0xef, - 0x34, 0xae, 0xe8, 0xec, 0x61, 0xf9, 0x31, 0x19, 0x2c, 0xb4, 0xa0, 0x5f, 0xf3, 0x56, 0xcc, 0x4b, - 0x8e, 0x6b, 0xf9, 0x50, 0x5b, 0x15, 0x85, 0xe6, 0x0c, 0x00, 0x56, 0xf8, 0x19, 0x8d, 0x93, 0xc5, - 0xa4, 0x68, 0x6f, 0x49, 0xeb, 0x28, 0xc4, 0xf1, 0x31, 0x11, 0x10, 0x52, 0xf9, 0x58, 0x24, 0x15, - 0x3f, 0x85, 0x8b, 0xc3, 0x25, 0x0a, 0x44, 0xd9, 0xed, 0xec, 0x5a, 0x97, 0x60, 0x37, 0x25, 0x10, - 0xc1, 0x67, 0x11, 0x10, 0x21, 0xa1, 0xd4, 0xee, 0x2b, 0x1c, 0x1f, 0x93, 0x70, 0x5f, 0x49, 0x22, - 0x38, 0x95, 0xb0, 0x56, 0xa8, 0xeb, 0xa1, 0xeb, 0x99, 0x77, 0x89, 0x8a, 0x35, 0x32, 0xd9, 0x24, - 0xd6, 0x64, 0x1b, 0xab, 0x63, 0x21, 0x65, 0x8f, 0xd2, 0xe9, 0x7c, 0x16, 0x1d, 0xcb, 0xd0, 0xa2, - 0xb3, 0x17, 0xfa, 0xfb, 0x64, 0x70, 0x75, 0x18, 0xef, 0xa5, 0x05, 0xfd, 0xaa, 0xe9, 0xed, 0x5e, - 0x70, 0x4c, 0xb7, 0xab, 0x55, 0x26, 0x70, 0xe0, 0x50, 0xfb, 0x22, 0x0b, 0x42, 0x83, 0x07, 0x61, - 0xa8, 0x2b, 0xe9, 0x50, 0x5e, 0x26, 0xd1, 0xc9, 0x24, 0x7a, 0xbb, 0xbe, 0x23, 0x04, 0xeb, 0xa9, - 0x1c, 0x58, 0x4f, 0x1a, 0x97, 0xc5, 0xec, 0x81, 0xfb, 0x79, 0x32, 0x22, 0x30, 0x5e, 0xcf, 0xf7, - 0x8a, 0x02, 0x16, 0xe3, 0xf5, 0x2a, 0xc7, 0x7a, 0xbd, 0x8e, 0x35, 0x46, 0x8c, 0xf4, 0x58, 0xce, - 0x76, 0x8c, 0x38, 0x42, 0x6f, 0xe4, 0x77, 0xc9, 0x40, 0xc1, 0x01, 0xbf, 0x18, 0x8f, 0x70, 0x36, - 0xfe, 0x76, 0x32, 0x3a, 0x07, 0xbc, 0xcf, 0x67, 0xd2, 0x7a, 0x9f, 0x6b, 0xef, 0x4c, 0xeb, 0x63, - 0x3e, 0xc8, 0xed, 0x44, 0x10, 0x4b, 0xe5, 0x42, 0x3e, 0x82, 0x83, 0xec, 0x41, 0xfb, 0x49, 0x19, - 0x00, 0xd4, 0xa0, 0xe9, 0xd9, 0x88, 0xa7, 0x89, 0xc2, 0x75, 0x2b, 0xeb, 0x77, 0x8f, 0x80, 0xba, - 0x7a, 0x00, 0x28, 0x42, 0x31, 0x3a, 0x75, 0xf1, 0xfa, 0xb4, 0xbe, 0x95, 0x11, 0x57, 0x13, 0x81, - 0x25, 0x95, 0xb7, 0x65, 0x6c, 0xd9, 0xd9, 0x03, 0xf2, 0xab, 0x12, 0x28, 0xb4, 0x9d, 0x16, 0xf4, - 0x0f, 0x6f, 0x0a, 0xa4, 0x8e, 0x1a, 0x80, 0xcb, 0x9d, 0x44, 0xd4, 0x80, 0x61, 0x84, 0xb2, 0x17, - 0xdd, 0x7b, 0x25, 0x30, 0xdf, 0x76, 0x2a, 0xe1, 0xe2, 0x94, 0xb8, 0xaf, 0xea, 0xbf, 0xe4, 0x52, - 0xae, 0x61, 0xb0, 0xc5, 0xc4, 0x08, 0x2c, 0xd5, 0xea, 0x41, 0x02, 0xbd, 0xec, 0xe5, 0x76, 0x3b, - 0x38, 0xbe, 0x69, 0x77, 0x1d, 0x03, 0x76, 0x1d, 0xba, 0xd2, 0xad, 0xaa, 0x20, 0xbf, 0x6f, 0x77, - 0x1d, 0xcc, 0x72, 0xc1, 0xc0, 0xff, 0x51, 0x9a, 0x0b, 0xbb, 0x0e, 0xf5, 0x0d, 0xc0, 0xff, 0xb5, - 0xbf, 0x90, 0x41, 0x1e, 0x7d, 0x2b, 0x2e, 0xea, 0x77, 0xc9, 0x29, 0xe3, 0x20, 0x20, 0xf2, 0x13, - 0xb1, 0x84, 0xee, 0x62, 0xd6, 0xfe, 0x89, 0x07, 0xeb, 0xc3, 0xe2, 0xca, 0x63, 0x44, 0x11, 0xad, - 0xf9, 0xab, 0xa7, 0xc1, 0xcc, 0x85, 0x9e, 0xd3, 0xb9, 0x18, 0x1d, 0xd7, 0xa7, 0x8f, 0xea, 0xcd, - 0xa0, 0xe0, 0x9a, 0xf6, 0x0e, 0xa4, 0x7b, 0x0a, 0x27, 0x07, 0xfa, 0x42, 0xec, 0xf5, 0x62, 0x90, - 0x2c, 0xda, 0x3b, 0xd3, 0x44, 0x60, 0x18, 0x52, 0xf9, 0x74, 0xfa, 0x50, 0x1d, 0xe3, 0xe4, 0x99, - 0x02, 0xe6, 0x2b, 0xe5, 0x06, 0xb9, 0x07, 0xb1, 0x79, 0x4e, 0x57, 0x64, 0x0c, 0x33, 0x92, 0x49, - 0x86, 0x30, 0x23, 0xf2, 0xff, 0x61, 0x61, 0x1e, 0x52, 0xf9, 0xa3, 0x80, 0xf9, 0xb3, 0x12, 0x58, - 0xa8, 0x5b, 0x9e, 0x1f, 0xe7, 0xed, 0x9f, 0x10, 0xef, 0xf7, 0x45, 0x69, 0x4d, 0x65, 0xae, 0x1c, - 0xe1, 0x40, 0xbf, 0xa9, 0xcc, 0xe1, 0xa4, 0x22, 0xa6, 0x73, 0x2c, 0x05, 0x73, 0x40, 0x2e, 0xc1, - 0x17, 0x96, 0x64, 0x6a, 0x43, 0x29, 0x2a, 0x64, 0xfa, 0x86, 0x52, 0x6c, 0xd9, 0xd9, 0xcb, 0xf7, - 0x2f, 0x24, 0x70, 0x02, 0x15, 0x9f, 0xb4, 0x2c, 0x15, 0x2f, 0xe6, 0x91, 0xcb, 0x52, 0xa9, 0x57, - 0xc6, 0x0f, 0xf0, 0x32, 0x89, 0x95, 0xf1, 0x51, 0x44, 0xa7, 0x2c, 0xe6, 0x98, 0x65, 0xd8, 0x51, - 0x62, 0x4e, 0x58, 0x86, 0x1d, 0x5f, 0xcc, 0xc9, 0x4b, 0xb1, 0x63, 0x8a, 0xf9, 0xc8, 0x16, 0x58, - 0x7f, 0x49, 0x0e, 0xc5, 0x1c, 0xbb, 0xb6, 0x91, 0x20, 0xe6, 0xd4, 0x27, 0x7a, 0xb5, 0x77, 0x8f, - 0x29, 0xf8, 0x09, 0xaf, 0x6f, 0x8c, 0x03, 0xd3, 0x11, 0xae, 0x71, 0xfc, 0x82, 0x0c, 0x16, 0x29, - 0x17, 0xc3, 0xa7, 0xcc, 0x09, 0x18, 0xa5, 0x9e, 0x32, 0xa7, 0x3e, 0x03, 0xc4, 0x73, 0x36, 0xfd, - 0x33, 0x40, 0x89, 0xe5, 0x67, 0x0f, 0xce, 0x37, 0xf2, 0xe0, 0x14, 0x62, 0x61, 0xdd, 0xe9, 0x5a, - 0xdb, 0x57, 0x08, 0x17, 0xe7, 0xcc, 0xde, 0x3e, 0xf4, 0xb4, 0x0f, 0x48, 0xa2, 0x28, 0xfd, 0x67, - 0x00, 0x9c, 0x3e, 0x74, 0x49, 0x1c, 0x37, 0x0a, 0xd4, 0x9d, 0x71, 0x95, 0x3d, 0x58, 0x52, 0x78, - 0x7d, 0x4e, 0x33, 0x20, 0x62, 0x30, 0xf4, 0x90, 0x55, 0x38, 0x1b, 0xbe, 0x19, 0x74, 0xf0, 0xc8, - 0x1d, 0x74, 0xf0, 0xb8, 0x09, 0xc8, 0x66, 0xb7, 0x1b, 0x42, 0x35, 0xb8, 0x99, 0x8d, 0xcb, 0x34, - 0x50, 0x16, 0x94, 0xd3, 0x83, 0xd1, 0xd1, 0xbc, 0x98, 0x9c, 0x1e, 0xf4, 0xd5, 0x25, 0x50, 0x24, - 0xd7, 0x89, 0x87, 0x2b, 0xfa, 0xc3, 0x33, 0xd3, 0x5c, 0xbc, 0x69, 0xd7, 0xe4, 0xd5, 0xf0, 0xf6, - 0x54, 0x92, 0x19, 0xd6, 0x4f, 0x47, 0x76, 0xb2, 0xc1, 0x29, 0xd8, 0x93, 0xc7, 0xa6, 0x3c, 0x9d, - 0xdd, 0xb0, 0x72, 0xbf, 0xdf, 0xbb, 0xd2, 0xa6, 0x81, 0x07, 0x52, 0xed, 0x86, 0x31, 0xf1, 0x0b, - 0xa4, 0x03, 0xf1, 0x0b, 0x52, 0xef, 0x86, 0x71, 0x7c, 0x4c, 0x62, 0x37, 0x2c, 0x89, 0x60, 0xf6, - 0xa2, 0xfd, 0x9b, 0x12, 0xb1, 0x9a, 0xe9, 0x6d, 0x04, 0xff, 0x30, 0xdc, 0xb3, 0x1a, 0xf0, 0xce, - 0x2e, 0xc3, 0x2e, 0x2a, 0x48, 0xbc, 0x85, 0x45, 0x7d, 0x1c, 0x28, 0x6e, 0x3b, 0xee, 0x9e, 0x19, - 0x6c, 0xdc, 0x0f, 0x9e, 0x14, 0xa1, 0x37, 0x00, 0xac, 0xe0, 0x3c, 0x06, 0xcd, 0x8b, 0xe6, 0x23, - 0xcf, 0xb4, 0xfa, 0x34, 0xe8, 0x23, 0xfa, 0xab, 0xde, 0x00, 0x16, 0x68, 0xec, 0xc7, 0x06, 0xf4, - 0x7c, 0xd8, 0xa5, 0x11, 0x2d, 0xf8, 0x44, 0xf5, 0x2c, 0x98, 0xa7, 0x09, 0x2b, 0x56, 0x0f, 0x7a, - 0x34, 0xa8, 0x05, 0x97, 0xa6, 0x9e, 0x02, 0x45, 0xcb, 0xbb, 0xdb, 0x73, 0x6c, 0x1a, 0x90, 0x8f, - 0x3e, 0xa9, 0x37, 0x81, 0xe3, 0x34, 0x5f, 0x68, 0xac, 0x92, 0x03, 0x3b, 0x83, 0xc9, 0x48, 0xb5, - 0x6c, 0x67, 0xc3, 0x75, 0x76, 0x5c, 0xe8, 0x79, 0xf8, 0xd4, 0x54, 0xc9, 0x60, 0x52, 0xd4, 0x7b, - 0xc1, 0x89, 0x9e, 0x65, 0x5f, 0xf4, 0x70, 0x8c, 0xe0, 0x15, 0xea, 0x36, 0x36, 0x3f, 0x24, 0x76, - 0x37, 0xd3, 0xd8, 0xa8, 0x1c, 0xd8, 0x4f, 0x8c, 0x83, 0x54, 0xd4, 0x9b, 0x81, 0x42, 0xb9, 0x59, - 0x36, 0x3b, 0x17, 0xf1, 0x7b, 0xea, 0x8e, 0x7a, 0x20, 0x9d, 0x11, 0x06, 0x09, 0xa3, 0xbf, 0xc8, - 0x09, 0x83, 0x44, 0xd2, 0x7f, 0x49, 0x0e, 0xcc, 0x73, 0x05, 0x98, 0x40, 0x0d, 0xba, 0x45, 0xef, - 0xfc, 0xae, 0xe5, 0x43, 0xc4, 0x1c, 0x3d, 0xeb, 0xf2, 0x98, 0x11, 0xcc, 0x1b, 0x07, 0x3e, 0x34, - 0x86, 0x10, 0x43, 0x7c, 0x91, 0x0e, 0x0f, 0x7b, 0x96, 0x79, 0xd4, 0x56, 0xe5, 0xd2, 0xb4, 0x67, - 0x02, 0xf5, 0x20, 0x35, 0xc6, 0x0b, 0x24, 0x97, 0xce, 0x0b, 0x04, 0xc9, 0xcd, 0xec, 0xf5, 0x9c, - 0xcb, 0xb0, 0x1b, 0x92, 0xa5, 0xba, 0x7a, 0x20, 0x5d, 0xfb, 0xc2, 0x38, 0xf3, 0xc2, 0xd4, 0x17, - 0x6b, 0xa0, 0x46, 0xb6, 0xdf, 0xe9, 0x40, 0xd8, 0xa5, 0x07, 0xd7, 0x82, 0xc7, 0x94, 0x57, 0x6e, - 0xa4, 0x9e, 0x45, 0x1e, 0xd1, 0x9d, 0x1b, 0xef, 0x8f, 0x6e, 0x3e, 0xd9, 0x17, 0xe9, 0x6a, 0x92, - 0xce, 0xc7, 0x8f, 0xd5, 0xa9, 0x68, 0xef, 0x4d, 0x7b, 0x5a, 0x34, 0x11, 0xd3, 0x53, 0x68, 0x70, - 0xf7, 0xf6, 0x7b, 0xe1, 0x71, 0x27, 0xf2, 0x94, 0x12, 0xbd, 0x54, 0x07, 0x48, 0x8f, 0x08, 0xb9, - 0x8f, 0x5f, 0x0d, 0x8a, 0xe4, 0xe6, 0x42, 0xed, 0x25, 0x8b, 0x43, 0xa1, 0x5b, 0xe4, 0xa1, 0xdb, - 0x04, 0xf3, 0xb6, 0x83, 0x8a, 0xdb, 0x30, 0x5d, 0x73, 0xcf, 0x4b, 0x5a, 0xde, 0x27, 0x74, 0x43, - 0x5b, 0xae, 0xc1, 0x7c, 0xb6, 0x76, 0xcc, 0xe0, 0xc8, 0xa8, 0xff, 0x17, 0x38, 0x7e, 0x81, 0x86, - 0xe6, 0xf0, 0x28, 0x65, 0x29, 0xde, 0xf9, 0x75, 0x80, 0xf2, 0x32, 0xff, 0xe5, 0xda, 0x31, 0x63, - 0x90, 0x98, 0xfa, 0x9f, 0xc0, 0x22, 0x7a, 0xec, 0x3a, 0x97, 0x03, 0xc6, 0xe5, 0xf8, 0x19, 0xc0, - 0x00, 0xf9, 0x75, 0xee, 0xc3, 0xb5, 0x63, 0xc6, 0x00, 0x29, 0xb5, 0x09, 0xc0, 0xae, 0xbf, 0xd7, - 0xa3, 0x84, 0xf3, 0xf1, 0x9d, 0xc9, 0x00, 0xe1, 0xb5, 0xf0, 0xa3, 0xb5, 0x63, 0x06, 0x43, 0x42, - 0xad, 0x83, 0x59, 0xff, 0x7e, 0x9f, 0xd2, 0x2b, 0xc4, 0x7b, 0x9d, 0x0c, 0xd0, 0x6b, 0x07, 0xdf, - 0xac, 0x1d, 0x33, 0x22, 0x02, 0x6a, 0x0d, 0x94, 0xfa, 0x17, 0x28, 0xb1, 0x62, 0xfc, 0x48, 0x35, - 0x40, 0x6c, 0xe3, 0x42, 0x48, 0x2b, 0xfc, 0x1c, 0x31, 0xd6, 0xf1, 0x2e, 0x51, 0x5a, 0x33, 0xc2, - 0x8c, 0x55, 0x82, 0x6f, 0x10, 0x63, 0x21, 0x01, 0xb5, 0x06, 0x66, 0x3d, 0xdb, 0xec, 0x7b, 0xbb, - 0x8e, 0xef, 0x9d, 0x2e, 0x0d, 0x38, 0x28, 0xc7, 0x53, 0x6b, 0xd1, 0x6f, 0x8c, 0xe8, 0x6b, 0xf5, - 0x71, 0xe0, 0xea, 0xfd, 0x7e, 0xd7, 0xf4, 0xa1, 0x7e, 0xbf, 0xe5, 0x45, 0xb7, 0x57, 0x06, 0xe7, - 0x72, 0x87, 0xbf, 0x54, 0x97, 0xe8, 0x51, 0x45, 0x80, 0xdb, 0xa5, 0x36, 0xb8, 0x4b, 0x4e, 0x8a, - 0x65, 0x4e, 0x28, 0x3e, 0x11, 0xe4, 0xd1, 0x2b, 0x6c, 0x16, 0x2c, 0x0e, 0x5f, 0x81, 0x1f, 0xd4, - 0x1d, 0xdc, 0x80, 0xd1, 0x47, 0x03, 0x96, 0xc5, 0xfc, 0x01, 0xcb, 0xe2, 0x7a, 0x30, 0x67, 0x79, - 0xeb, 0xd6, 0x0e, 0x99, 0xd6, 0xd0, 0x91, 0x9f, 0x4d, 0x22, 0xcb, 0x40, 0x0d, 0x78, 0x99, 0x0c, - 0xf9, 0xc7, 0x83, 0x65, 0xa0, 0x20, 0x45, 0xbb, 0x11, 0xcc, 0xb3, 0x8d, 0x8c, 0x5c, 0x7f, 0x6c, - 0x45, 0x93, 0x22, 0xfa, 0xa4, 0xdd, 0x00, 0x16, 0x79, 0x9d, 0x66, 0x6c, 0x3f, 0x39, 0x18, 0xc4, - 0xb4, 0x87, 0x81, 0xe3, 0x03, 0x0d, 0x2b, 0x08, 0xf6, 0x93, 0x8b, 0x82, 0xfd, 0x5c, 0x0f, 0x40, - 0xa4, 0xc5, 0x43, 0xc9, 0x3c, 0x04, 0xcc, 0x86, 0x7a, 0x39, 0x34, 0xc3, 0xd7, 0x73, 0xa0, 0x14, - 0x28, 0xdb, 0xb0, 0x0c, 0xc8, 0xa6, 0xb0, 0x99, 0x9d, 0xbd, 0xc0, 0xa6, 0x60, 0xd3, 0x90, 0x81, - 0x17, 0xf9, 0xd3, 0xb7, 0x2d, 0xbf, 0x17, 0x9c, 0x49, 0x1d, 0x4c, 0x56, 0x37, 0x00, 0xb0, 0x30, - 0x46, 0xed, 0xe8, 0x90, 0xea, 0xa3, 0x53, 0xb4, 0x07, 0xa2, 0x0f, 0x0c, 0x8d, 0xb3, 0x0f, 0xa5, - 0x27, 0x48, 0x67, 0x41, 0x81, 0x5c, 0xb0, 0x70, 0x4c, 0x5d, 0x04, 0x40, 0x7f, 0xda, 0x86, 0x6e, - 0xd4, 0xf4, 0x46, 0x45, 0x57, 0x72, 0xda, 0xcb, 0x25, 0x30, 0x1b, 0x36, 0x82, 0xa1, 0x95, 0xd4, - 0xa9, 0x6a, 0x8d, 0xbc, 0x61, 0xf6, 0x60, 0xa3, 0x62, 0x95, 0xec, 0x09, 0xe0, 0x41, 0xfb, 0x1e, - 0x5c, 0xb1, 0x5c, 0xcf, 0x37, 0x9c, 0xcb, 0x2b, 0x8e, 0x1b, 0x99, 0x44, 0x24, 0x34, 0x71, 0xdc, - 0x6b, 0x64, 0xea, 0x77, 0x21, 0x3e, 0xad, 0x08, 0x5d, 0xba, 0x65, 0x13, 0x25, 0x20, 0xba, 0xbe, - 0x6b, 0xda, 0x5e, 0xdf, 0xf1, 0xa0, 0xe1, 0x5c, 0xf6, 0xca, 0x76, 0xb7, 0xe2, 0xf4, 0xf6, 0xf7, - 0x6c, 0x8f, 0x1a, 0xeb, 0x71, 0xaf, 0x91, 0x74, 0xf0, 0xfd, 0xd1, 0x8b, 0x00, 0x54, 0x9a, 0xf5, - 0xba, 0x5e, 0x69, 0xd7, 0x9a, 0x0d, 0xe5, 0x18, 0x92, 0x56, 0xbb, 0xbc, 0x5c, 0x47, 0xd2, 0x79, - 0x3a, 0x28, 0x05, 0x6d, 0x9a, 0xc6, 0x27, 0xca, 0x05, 0xf1, 0x89, 0xd4, 0x32, 0x28, 0x05, 0xad, - 0x9c, 0x8e, 0x08, 0x0f, 0x1f, 0x3c, 0x8f, 0xbe, 0x67, 0xba, 0x3e, 0x36, 0x2d, 0x03, 0x22, 0xcb, - 0xa6, 0x07, 0x8d, 0xf0, 0xb3, 0xb3, 0x8f, 0xa2, 0x1c, 0xa8, 0x60, 0xb1, 0x5c, 0xaf, 0x6f, 0x35, - 0x8d, 0xad, 0x46, 0xb3, 0xbd, 0x56, 0x6b, 0xac, 0x92, 0x11, 0xb2, 0xb6, 0xda, 0x68, 0x1a, 0x3a, - 0x19, 0x20, 0x5b, 0x4a, 0x8e, 0xdc, 0x5f, 0xbe, 0x5c, 0x02, 0xc5, 0x3e, 0x96, 0xae, 0xf6, 0x15, - 0x39, 0xa5, 0x69, 0x11, 0xe2, 0x14, 0x73, 0xc3, 0x32, 0x77, 0x18, 0x44, 0x1a, 0x72, 0x58, 0xfb, - 0x2c, 0x98, 0x27, 0xe6, 0x90, 0x87, 0xf7, 0xd5, 0x30, 0x72, 0xb2, 0xc1, 0xa5, 0x69, 0x9f, 0x94, - 0x52, 0x18, 0x17, 0x43, 0x39, 0x4a, 0x67, 0x5c, 0xfc, 0x41, 0x6e, 0xbc, 0xeb, 0x48, 0x6a, 0x8d, - 0xb6, 0x6e, 0x34, 0xca, 0x75, 0x9a, 0x45, 0x56, 0x4f, 0x83, 0x93, 0x8d, 0x26, 0x0d, 0xc6, 0xd9, - 0xda, 0x6a, 0x37, 0xb7, 0x6a, 0xeb, 0x1b, 0x4d, 0xa3, 0xad, 0x14, 0xd4, 0x53, 0x40, 0x25, 0xff, - 0xb7, 0x6a, 0xad, 0xad, 0x4a, 0xb9, 0x51, 0xd1, 0xeb, 0x7a, 0x55, 0x29, 0xaa, 0x8f, 0x00, 0x0f, - 0x23, 0xd7, 0x5b, 0x35, 0x57, 0xb6, 0x8c, 0xe6, 0xf9, 0x16, 0x42, 0xd0, 0xd0, 0xeb, 0x65, 0xa4, - 0x48, 0xcc, 0x3d, 0xe6, 0x33, 0xea, 0x55, 0xe0, 0xf8, 0x4a, 0xad, 0xae, 0xe3, 0xdb, 0x68, 0x69, - 0x79, 0x25, 0xf5, 0x3a, 0x70, 0xba, 0xd6, 0x68, 0x6d, 0xae, 0xac, 0xd4, 0x2a, 0x35, 0xbd, 0xd1, - 0xde, 0xda, 0xd0, 0x8d, 0xf5, 0x5a, 0xab, 0x85, 0xbe, 0x55, 0x66, 0xb5, 0x8f, 0xcb, 0xa0, 0x48, - 0xfa, 0x4c, 0x64, 0xc4, 0x2e, 0x9c, 0x33, 0x7b, 0x16, 0x1a, 0x28, 0xf0, 0xf5, 0xf1, 0x03, 0xe7, - 0xb8, 0x7c, 0x7c, 0xcd, 0x3c, 0x3d, 0x09, 0x82, 0x1f, 0xb4, 0x1f, 0x95, 0x53, 0x9e, 0xe3, 0xa2, - 0x40, 0x90, 0x12, 0x97, 0xb8, 0xd2, 0x62, 0x56, 0x1d, 0x5e, 0x23, 0xa5, 0x38, 0xc7, 0x25, 0x4e, - 0x3e, 0x1d, 0xf8, 0xbf, 0x38, 0x29, 0xf0, 0x15, 0x30, 0xbf, 0xd9, 0x28, 0x6f, 0xb6, 0xd7, 0x9a, - 0x46, 0xed, 0x87, 0xf1, 0x2d, 0x04, 0x0b, 0x60, 0x76, 0xa5, 0x69, 0x2c, 0xd7, 0xaa, 0x55, 0xbd, - 0xa1, 0x14, 0xd4, 0x07, 0x81, 0xab, 0x5a, 0xba, 0x71, 0xae, 0x56, 0xd1, 0xb7, 0x36, 0x1b, 0xe5, - 0x73, 0xe5, 0x5a, 0x1d, 0xf7, 0x11, 0xc5, 0x84, 0xab, 0xef, 0x67, 0xb4, 0x1f, 0xc9, 0x03, 0x40, - 0xaa, 0x8e, 0x2f, 0xe1, 0x62, 0x2e, 0x48, 0xff, 0xa3, 0xb4, 0xd3, 0xbd, 0x88, 0x4c, 0x4c, 0xfb, - 0xad, 0x81, 0x92, 0x4b, 0x5f, 0xd0, 0x75, 0xcd, 0x51, 0x74, 0xc8, 0xdf, 0x80, 0x9a, 0x11, 0x7e, - 0xae, 0x7d, 0x20, 0xcd, 0xec, 0x2e, 0x96, 0xb1, 0xa9, 0xdc, 0xf4, 0x3c, 0x08, 0xa4, 0xf6, 0xc2, - 0x1c, 0x58, 0xe4, 0x2b, 0x86, 0x2a, 0x81, 0x8d, 0x29, 0xb1, 0x4a, 0xf0, 0x1f, 0x33, 0x46, 0xd6, - 0xd9, 0xc7, 0xd2, 0xe1, 0x14, 0x04, 0x2d, 0x93, 0x84, 0x64, 0x08, 0x2c, 0x16, 0x25, 0x87, 0x98, - 0x47, 0x46, 0x87, 0x22, 0xa9, 0x33, 0x40, 0x6e, 0xdf, 0xef, 0x2b, 0xb2, 0xf6, 0xe9, 0x3c, 0x58, - 0xe0, 0x6e, 0x60, 0xd7, 0xfe, 0x38, 0x27, 0x72, 0xbb, 0x31, 0x73, 0xb7, 0x7b, 0xee, 0xb0, 0x77, - 0xbb, 0x9f, 0xb5, 0xc0, 0x0c, 0x4d, 0xc3, 0xf2, 0x6d, 0x36, 0x90, 0x29, 0x70, 0x1c, 0xcc, 0xad, - 0xea, 0xed, 0xad, 0x56, 0xbb, 0x6c, 0xb4, 0xf5, 0xaa, 0x92, 0x43, 0x03, 0x9f, 0xbe, 0xbe, 0xd1, - 0xbe, 0x57, 0x91, 0xd0, 0x98, 0xb8, 0xba, 0x59, 0xab, 0xea, 0x5b, 0xcd, 0x46, 0xfd, 0x5e, 0x45, - 0x46, 0x3d, 0x20, 0x93, 0x77, 0x6b, 0xbd, 0xb9, 0x5c, 0xab, 0xeb, 0x4a, 0x1e, 0x35, 0x1b, 0xfc, - 0x49, 0x90, 0x52, 0xe0, 0x7d, 0xa3, 0x45, 0x56, 0x38, 0x07, 0xab, 0x70, 0x78, 0x17, 0x91, 0x34, - 0x57, 0xc8, 0xa7, 0x5a, 0x3b, 0x4d, 0x62, 0x35, 0xfb, 0x19, 0xf1, 0xe7, 0x65, 0xa0, 0x10, 0x0e, - 0xf4, 0xfb, 0xfb, 0xd0, 0xb5, 0xa0, 0xdd, 0x81, 0xda, 0x45, 0x91, 0x80, 0xc0, 0x07, 0x42, 0x61, - 0xe2, 0x51, 0x83, 0xb1, 0x45, 0xc9, 0xc3, 0x80, 0x19, 0x9f, 0x3f, 0x60, 0xc6, 0xff, 0x4e, 0x5a, - 0x0f, 0xdc, 0x41, 0x76, 0x27, 0xb2, 0x67, 0xf5, 0x99, 0x34, 0x1e, 0xb8, 0x23, 0x38, 0x98, 0x4a, - 0x9c, 0xef, 0x98, 0x51, 0x5e, 0x91, 0xb5, 0x17, 0xc8, 0xe0, 0x78, 0xd5, 0xf4, 0xe1, 0xf2, 0x95, - 0x76, 0x70, 0x8f, 0x6a, 0xcc, 0xdd, 0xe7, 0xb9, 0x03, 0x77, 0x9f, 0x47, 0x57, 0xb1, 0x4a, 0x03, - 0x57, 0xb1, 0x6a, 0xef, 0x49, 0x7b, 0x66, 0x77, 0x80, 0x87, 0x89, 0x05, 0xe3, 0x4e, 0x77, 0x16, - 0x37, 0x99, 0x8b, 0xec, 0x1b, 0xd8, 0xdb, 0x67, 0x81, 0x42, 0x58, 0x61, 0x9c, 0x4c, 0x7f, 0x56, - 0x06, 0x72, 0xb9, 0xdb, 0xd5, 0xb6, 0x52, 0xc4, 0xf4, 0x0c, 0xa2, 0xa4, 0x48, 0x7c, 0x94, 0x14, - 0x6e, 0xcf, 0x42, 0x1e, 0x74, 0x0c, 0x4a, 0x7b, 0x1a, 0x81, 0xf1, 0x28, 0x8d, 0x0f, 0xa3, 0x9c, - 0xdd, 0x69, 0x84, 0xc4, 0xe2, 0xa7, 0x73, 0xa5, 0x35, 0xbd, 0x45, 0x56, 0x17, 0x45, 0x26, 0xf9, - 0xe6, 0xfe, 0xb4, 0xc7, 0x0b, 0x38, 0x8f, 0xde, 0x84, 0xeb, 0xec, 0xb3, 0x3b, 0x5e, 0x30, 0x8a, - 0x83, 0xec, 0x51, 0xf8, 0x9e, 0x04, 0xf2, 0x2d, 0xc7, 0xf5, 0x27, 0x85, 0x41, 0x5a, 0x97, 0x08, - 0x46, 0x02, 0xad, 0xf8, 0x99, 0x6d, 0x76, 0x2e, 0x11, 0xc9, 0xe5, 0x4f, 0x21, 0x2c, 0xea, 0x71, - 0xb0, 0x48, 0x38, 0x09, 0xef, 0x14, 0xfa, 0x57, 0x89, 0xf4, 0x57, 0xf7, 0x88, 0x22, 0x82, 0x37, - 0xc6, 0x42, 0x97, 0x84, 0x00, 0x14, 0x2e, 0x4d, 0x7b, 0x23, 0x8b, 0x4b, 0x95, 0xc7, 0x65, 0xd8, - 0xbc, 0x3e, 0xbc, 0x96, 0x67, 0x52, 0x3d, 0x53, 0x9a, 0x08, 0xab, 0x09, 0x85, 0x67, 0x8f, 0xc8, - 0x73, 0x64, 0x50, 0xa4, 0x2e, 0xa1, 0x13, 0x45, 0x20, 0x6d, 0xcb, 0x08, 0x85, 0x20, 0xe6, 0x3a, - 0x2a, 0x4f, 0xba, 0x65, 0x24, 0x97, 0x9f, 0x3d, 0x0e, 0xff, 0x46, 0x7d, 0x9d, 0xcb, 0x97, 0x4c, - 0xab, 0x67, 0x5e, 0xe8, 0xa5, 0x88, 0x6c, 0xfe, 0xc9, 0x94, 0xa7, 0x3b, 0xc3, 0xaa, 0x72, 0xe5, - 0xc5, 0x48, 0xfc, 0x07, 0xc1, 0xac, 0xcb, 0xed, 0x05, 0x23, 0x2b, 0x6a, 0xc0, 0xcf, 0x9c, 0xbe, - 0x37, 0xa2, 0x9c, 0xa9, 0x8e, 0x72, 0x0a, 0xf1, 0x33, 0x95, 0xa3, 0x67, 0x73, 0xe5, 0x6e, 0x77, - 0x05, 0x9a, 0xfe, 0xbe, 0x0b, 0xbb, 0xa9, 0x86, 0x08, 0x77, 0x60, 0xbb, 0x9c, 0x91, 0x04, 0x17, - 0x5b, 0xb4, 0xce, 0xa3, 0xf3, 0xf8, 0x11, 0xbd, 0x41, 0xc0, 0xcb, 0x44, 0xba, 0xa4, 0xb7, 0x85, - 0x90, 0x34, 0x39, 0x48, 0x9e, 0x38, 0x1e, 0x13, 0xd9, 0x03, 0xf2, 0x52, 0x19, 0x2c, 0x12, 0x3b, - 0x61, 0xd2, 0x98, 0x7c, 0x38, 0xa5, 0x0b, 0x19, 0x73, 0x6b, 0x1b, 0xcb, 0xce, 0x44, 0x60, 0x49, - 0xe3, 0x70, 0x26, 0xc6, 0x47, 0xf6, 0xc8, 0xfc, 0xcf, 0xab, 0x00, 0x60, 0xdc, 0x82, 0x3f, 0x59, - 0x8c, 0xe2, 0x7c, 0x6a, 0xef, 0xa4, 0xf3, 0x8f, 0x16, 0x17, 0x74, 0x9e, 0x71, 0xf9, 0x0d, 0xb7, - 0xbd, 0xf8, 0x44, 0xa1, 0x51, 0xe5, 0x0f, 0x52, 0xda, 0xbc, 0xd4, 0x29, 0x77, 0xe4, 0xe0, 0x3e, - 0x66, 0x2f, 0xf7, 0xa9, 0x14, 0xc6, 0xef, 0x28, 0x56, 0xd2, 0xa1, 0x56, 0x1f, 0x63, 0x66, 0x7f, - 0x1a, 0x9c, 0x34, 0xf4, 0x72, 0xb5, 0xd9, 0xa8, 0xdf, 0xcb, 0x5e, 0xe1, 0xa5, 0xc8, 0xec, 0xe4, - 0x24, 0x13, 0xd8, 0x5e, 0x97, 0xb2, 0x0f, 0xe4, 0x65, 0x95, 0x34, 0x5b, 0x61, 0x16, 0x57, 0x46, - 0xf7, 0x6a, 0x02, 0x64, 0x8f, 0x12, 0x85, 0x6f, 0x15, 0xc1, 0x9c, 0x01, 0x3b, 0xce, 0xde, 0x1e, - 0xb4, 0xbb, 0xb0, 0xab, 0xbd, 0x4e, 0x06, 0xf3, 0xe1, 0xae, 0x62, 0x0b, 0xfa, 0xda, 0x7f, 0x8a, - 0xb0, 0x39, 0x0b, 0xe6, 0x51, 0xe5, 0x9a, 0xfc, 0x45, 0x02, 0x5c, 0x9a, 0x7a, 0x0b, 0x38, 0x11, - 0xa0, 0xd0, 0x1c, 0x98, 0xc2, 0x1c, 0x7c, 0xc1, 0xfb, 0xfd, 0x6c, 0xf2, 0x18, 0xdd, 0x15, 0x2f, - 0xcc, 0x90, 0xdd, 0x25, 0x96, 0xd5, 0x18, 0xb0, 0x7e, 0x2f, 0x04, 0xeb, 0x69, 0x1c, 0x58, 0xd5, - 0x43, 0xd2, 0x3f, 0x4a, 0xd4, 0x3e, 0x24, 0x83, 0x93, 0x41, 0x47, 0x3c, 0x3d, 0xb4, 0x3e, 0xc5, - 0xa2, 0xf5, 0x74, 0x1e, 0xad, 0x55, 0x11, 0x69, 0x0e, 0x63, 0x39, 0x06, 0xb5, 0x2f, 0x87, 0xa8, - 0xfd, 0x17, 0x0e, 0xb5, 0xfa, 0x84, 0xca, 0x39, 0x4a, 0xf4, 0x3e, 0x2c, 0x83, 0xd3, 0xc8, 0xec, - 0xac, 0x38, 0xf6, 0x76, 0xcf, 0xea, 0xf8, 0x96, 0xbd, 0x13, 0xb9, 0x38, 0xae, 0x8a, 0xac, 0x6c, - 0x0e, 0x62, 0x2b, 0x1d, 0xc4, 0x96, 0xdf, 0x63, 0x10, 0x6d, 0x5b, 0x71, 0x6c, 0xc5, 0x0c, 0x61, - 0x8c, 0xf3, 0x7e, 0xa4, 0x39, 0x6c, 0x52, 0xfa, 0xd6, 0x27, 0xc8, 0xc1, 0x51, 0xe2, 0xf7, 0x75, - 0x09, 0x9c, 0x32, 0xa0, 0xe7, 0xf4, 0x2e, 0x41, 0xe2, 0xcb, 0x1a, 0xf0, 0xeb, 0x69, 0x8f, 0x4a, - 0xd5, 0xfe, 0xb4, 0x97, 0xb2, 0x18, 0xb5, 0x78, 0x8c, 0x9e, 0x14, 0xaf, 0xe9, 0xc3, 0x8a, 0x8e, - 0x69, 0x47, 0xef, 0x0d, 0xe5, 0x7f, 0x8e, 0x93, 0xff, 0xf2, 0xa1, 0xa8, 0x4f, 0x61, 0x89, 0x00, - 0x30, 0xe6, 0xdd, 0xf3, 0x65, 0xa0, 0x60, 0x9f, 0x65, 0x3c, 0x7a, 0xd2, 0x3b, 0x84, 0x9b, 0xfc, - 0x69, 0x96, 0x7e, 0xa0, 0x84, 0xc1, 0x69, 0x96, 0x20, 0x41, 0xbd, 0x11, 0x2c, 0x76, 0x76, 0x61, - 0xe7, 0x62, 0xcd, 0x0e, 0xbc, 0xca, 0x88, 0x0b, 0xd2, 0x40, 0x2a, 0x6f, 0x30, 0xdc, 0xc3, 0x83, - 0xc1, 0x2f, 0xee, 0x72, 0x93, 0x47, 0x96, 0xa9, 0x18, 0x10, 0x7e, 0x33, 0x04, 0xa1, 0xc1, 0x81, - 0x70, 0xc7, 0x58, 0x54, 0xd3, 0x09, 0xbf, 0x31, 0x86, 0xea, 0x6b, 0xe0, 0x54, 0x73, 0xa3, 0x5d, - 0x6b, 0x36, 0xb6, 0x36, 0x5b, 0x7a, 0x75, 0x6b, 0x39, 0x68, 0x00, 0x2d, 0x45, 0xd6, 0xbe, 0x29, - 0x81, 0x19, 0xc2, 0x96, 0xa7, 0x3d, 0x32, 0x82, 0x60, 0xe4, 0x31, 0x1e, 0xed, 0xed, 0xc2, 0x41, - 0xb9, 0x42, 0x41, 0xd0, 0x72, 0x62, 0x3a, 0x9f, 0x27, 0x80, 0x19, 0x02, 0x72, 0xb0, 0xd3, 0x72, - 0x26, 0xc6, 0x7a, 0xa6, 0x64, 0x8c, 0x20, 0xbb, 0x60, 0x80, 0xae, 0x11, 0x6c, 0x64, 0xdf, 0x06, - 0x9e, 0x95, 0x27, 0xcb, 0x33, 0xe7, 0x2d, 0x7f, 0x17, 0x9f, 0xf2, 0xd1, 0x9e, 0x2a, 0x32, 0x38, - 0xdc, 0x02, 0x0a, 0x97, 0x50, 0xee, 0x11, 0x27, 0xa6, 0x48, 0x26, 0xed, 0x17, 0x85, 0xe3, 0xc1, - 0x73, 0xfa, 0x19, 0xf2, 0x14, 0x03, 0xce, 0x3a, 0xc8, 0xf7, 0x2c, 0xcf, 0xa7, 0xf3, 0x9a, 0xdb, - 0x53, 0x11, 0x0a, 0xfe, 0xd4, 0x7c, 0xb8, 0x67, 0x60, 0x32, 0xda, 0xdd, 0xc8, 0x2a, 0x8d, 0x52, - 0x05, 0x4e, 0x8d, 0x9d, 0x06, 0x33, 0x34, 0x9a, 0x01, 0xdd, 0xfa, 0x0b, 0x1e, 0x05, 0xb7, 0xdb, - 0x84, 0x6a, 0x9b, 0xbd, 0x0e, 0xfc, 0xbf, 0xc7, 0xc1, 0xcc, 0x9a, 0xe5, 0xf9, 0x8e, 0x7b, 0x45, - 0x7b, 0x7d, 0x0e, 0xcc, 0x9c, 0x83, 0xae, 0x67, 0x39, 0xf6, 0x01, 0x47, 0xbb, 0xeb, 0xc1, 0x5c, - 0xdf, 0x85, 0x97, 0x2c, 0x67, 0xdf, 0x63, 0x46, 0x62, 0x26, 0x49, 0xd5, 0x40, 0xc9, 0xdc, 0xf7, - 0x77, 0x1d, 0x37, 0x0a, 0x82, 0x16, 0x3c, 0xab, 0x67, 0x00, 0x20, 0xff, 0x1b, 0xe6, 0x1e, 0xa4, - 0xee, 0x83, 0x4c, 0x8a, 0xaa, 0x82, 0xbc, 0x6f, 0xed, 0x41, 0x7a, 0x2b, 0x02, 0xfe, 0x8f, 0x04, - 0x8c, 0x23, 0x0c, 0xd3, 0x48, 0xce, 0xb2, 0x11, 0x3c, 0x6a, 0x5f, 0x94, 0xc1, 0xdc, 0x2a, 0xf4, - 0x29, 0xab, 0x9e, 0xf6, 0xa2, 0x9c, 0xd0, 0x45, 0x64, 0x68, 0xee, 0xd7, 0x33, 0xbd, 0xe0, 0xbb, - 0xd0, 0xac, 0xe1, 0x13, 0xa3, 0x2b, 0x1a, 0x64, 0xf6, 0x7e, 0x16, 0x1c, 0xaf, 0xd7, 0xaf, 0x91, - 0x03, 0x34, 0x34, 0x33, 0xdd, 0x9c, 0x3f, 0xf8, 0x82, 0x9f, 0x77, 0x24, 0xc6, 0xba, 0xa1, 0xb2, - 0x5f, 0x62, 0xea, 0x13, 0xdb, 0x1d, 0x95, 0x2e, 0xd1, 0x1c, 0x07, 0xae, 0xde, 0x61, 0x29, 0x51, - 0x32, 0x46, 0x98, 0x5b, 0x30, 0x4a, 0xce, 0x68, 0x4e, 0xa6, 0x70, 0xd9, 0xb2, 0x0c, 0xe6, 0x5a, - 0xbb, 0xce, 0xe5, 0x40, 0x8e, 0x4f, 0x17, 0x03, 0xf6, 0x3a, 0x30, 0x7b, 0x69, 0x00, 0xd4, 0x28, - 0x81, 0xbd, 0xdf, 0x51, 0xe6, 0xef, 0x77, 0x7c, 0x9e, 0x9c, 0x16, 0x26, 0x86, 0xb9, 0x18, 0x98, - 0xf8, 0x2b, 0x19, 0xa5, 0x14, 0x57, 0x32, 0xaa, 0x8f, 0x07, 0x33, 0x94, 0x6b, 0xba, 0x15, 0x90, - 0x0c, 0x70, 0x90, 0x99, 0xad, 0x60, 0x9e, 0xaf, 0x60, 0x3a, 0xe4, 0xe3, 0x2b, 0x97, 0x3d, 0xf2, - 0xbf, 0x2d, 0xe1, 0x18, 0x69, 0x01, 0xf0, 0x95, 0x09, 0x00, 0xaf, 0x7d, 0x37, 0x27, 0xba, 0x61, - 0x16, 0x4a, 0x20, 0xe4, 0xe0, 0x50, 0x97, 0x0c, 0x8e, 0x24, 0x97, 0xbd, 0x3c, 0x5f, 0x9e, 0x07, - 0xf3, 0x55, 0x6b, 0x7b, 0x3b, 0xec, 0x24, 0x5f, 0x2c, 0xd8, 0x49, 0xc6, 0x3b, 0xc3, 0x21, 0x3b, - 0x77, 0xdf, 0x75, 0xa1, 0x1d, 0x54, 0x8a, 0x36, 0xa7, 0x81, 0x54, 0xf5, 0x26, 0x70, 0x3c, 0x18, - 0x17, 0xd8, 0x8e, 0x72, 0xd6, 0x18, 0x4c, 0xd6, 0xbe, 0x2d, 0xec, 0x6d, 0x11, 0x48, 0x94, 0xad, - 0x52, 0x4c, 0x03, 0xbc, 0x13, 0x2c, 0xec, 0x92, 0xdc, 0x78, 0x49, 0x3a, 0xe8, 0x2c, 0x4f, 0x0d, - 0xdc, 0x41, 0xb1, 0x0e, 0x3d, 0xcf, 0xdc, 0x81, 0x06, 0x9f, 0x79, 0xa0, 0xf9, 0xca, 0x69, 0x6e, - 0x54, 0x15, 0x73, 0xdc, 0x10, 0xa8, 0x49, 0xf6, 0xda, 0xf1, 0xe5, 0xb3, 0x20, 0xbf, 0x62, 0xf5, - 0xa0, 0xf6, 0xe3, 0x12, 0x98, 0x35, 0x60, 0xc7, 0xb1, 0x3b, 0xe8, 0x89, 0x71, 0x8d, 0xfd, 0x56, - 0x4e, 0xf4, 0x26, 0x71, 0x44, 0x67, 0x29, 0xa4, 0x11, 0xd3, 0x6e, 0xc4, 0x6e, 0x0c, 0x4f, 0x24, - 0x35, 0x85, 0x7b, 0xdf, 0xd0, 0xd4, 0x63, 0x7b, 0xbb, 0xe7, 0x98, 0xdc, 0xa6, 0xcc, 0xa0, 0x29, - 0x14, 0x1d, 0xc4, 0x6d, 0x38, 0xfe, 0x86, 0x65, 0xdb, 0x61, 0x6c, 0x9b, 0x03, 0xe9, 0xbc, 0x3f, - 0x51, 0x62, 0x78, 0x40, 0x5c, 0x77, 0x5a, 0x7a, 0x8c, 0x66, 0xdf, 0x08, 0x16, 0x2f, 0x5c, 0xf1, - 0xa1, 0x47, 0x73, 0xd1, 0x62, 0xf3, 0xc6, 0x40, 0x2a, 0x73, 0xb9, 0x47, 0x52, 0x18, 0xc1, 0x84, - 0x02, 0xd3, 0x89, 0x7a, 0x6d, 0x8c, 0x19, 0xe0, 0x49, 0xa0, 0x34, 0x9a, 0x55, 0x1d, 0x7b, 0x6a, - 0x07, 0xbe, 0xaf, 0x3b, 0xda, 0xcf, 0xc8, 0x60, 0x1e, 0x3b, 0x39, 0x06, 0x28, 0x3c, 0x4c, 0x60, - 0x3e, 0xa2, 0x7d, 0x55, 0xd8, 0x8b, 0x1b, 0x57, 0x99, 0x2d, 0x20, 0x5e, 0xd0, 0xdb, 0x56, 0x6f, - 0x50, 0xd0, 0x05, 0x63, 0x20, 0x75, 0x08, 0x20, 0xf2, 0x50, 0x40, 0x3e, 0x24, 0xe4, 0xca, 0x3d, - 0x8a, 0xbb, 0xa3, 0x42, 0xe5, 0xd7, 0x64, 0x30, 0x87, 0x26, 0x29, 0x01, 0x28, 0x4d, 0x0e, 0x14, - 0xc7, 0xee, 0x5d, 0x89, 0x96, 0x45, 0x82, 0xc7, 0x54, 0x8d, 0xe4, 0x8f, 0x85, 0x67, 0xee, 0x58, - 0x44, 0x0c, 0x2f, 0x53, 0xc2, 0xef, 0x83, 0x42, 0xf3, 0xf9, 0x11, 0xcc, 0x1d, 0x15, 0x7c, 0xaf, - 0x2d, 0x82, 0xe2, 0x66, 0x1f, 0x23, 0xf7, 0x15, 0x59, 0xe4, 0xa2, 0x9c, 0x03, 0xc7, 0xf8, 0x90, - 0x99, 0xd5, 0x73, 0x3a, 0x66, 0x6f, 0x23, 0x3a, 0xc9, 0x1e, 0x25, 0xa8, 0x77, 0x50, 0xcf, 0x7e, - 0x72, 0x20, 0xfb, 0xc6, 0xc4, 0x3b, 0x64, 0xb0, 0x8c, 0x98, 0x23, 0x93, 0xb7, 0x80, 0x13, 0x5d, - 0xcb, 0x33, 0x2f, 0xf4, 0xa0, 0x6e, 0x77, 0xdc, 0x2b, 0x44, 0x1c, 0x74, 0x5a, 0x75, 0xe0, 0x85, - 0xfa, 0x24, 0x50, 0xf0, 0xfc, 0x2b, 0x3d, 0x32, 0x4f, 0x64, 0x4f, 0x58, 0xc6, 0x16, 0xd5, 0x42, - 0xd9, 0x0d, 0xf2, 0x15, 0xeb, 0x3a, 0x3b, 0x23, 0xe6, 0x3a, 0xab, 0x3e, 0x16, 0x14, 0x1d, 0xd7, - 0xda, 0xb1, 0xc8, 0xb5, 0x90, 0x8b, 0x07, 0x42, 0x25, 0x13, 0x53, 0xa0, 0x89, 0xb3, 0x18, 0x34, - 0xab, 0xfa, 0x78, 0x30, 0x6b, 0xed, 0x99, 0x3b, 0xf0, 0x1e, 0xcb, 0x26, 0x81, 0x24, 0x16, 0x6f, - 0x3b, 0x7d, 0xe0, 0xf0, 0x28, 0x7d, 0x6f, 0x44, 0x59, 0xd5, 0x3b, 0xc1, 0x35, 0x1d, 0x17, 0x9a, - 0x3e, 0x44, 0x02, 0x3a, 0x6f, 0x75, 0x77, 0xa0, 0x5f, 0xdb, 0x5e, 0xb7, 0x3c, 0xcf, 0xb2, 0x77, - 0xe8, 0xcd, 0xaf, 0xf1, 0x19, 0xb4, 0x0f, 0x4a, 0xa2, 0xd1, 0x20, 0xb1, 0x64, 0x88, 0x4a, 0x8c, - 0x71, 0x43, 0x3d, 0x23, 0x45, 0x59, 0xd0, 0x01, 0xf9, 0x55, 0x42, 0x71, 0x1a, 0xe3, 0xd9, 0xca, - 0x7e, 0xe8, 0xff, 0x43, 0x09, 0x94, 0xaa, 0xce, 0x65, 0x1b, 0x37, 0x93, 0xdb, 0xc5, 0x2c, 0xe5, - 0x21, 0xa1, 0x1d, 0xf8, 0xbb, 0xce, 0x13, 0x4f, 0x03, 0xe2, 0xda, 0x06, 0x45, 0xc6, 0xc0, 0x90, - 0xd8, 0xee, 0x04, 0x03, 0x08, 0x24, 0x95, 0x93, 0xbd, 0x5c, 0x7f, 0x57, 0x06, 0xf9, 0xaa, 0xeb, - 0xf4, 0xb5, 0xb7, 0xe5, 0x52, 0x38, 0xe2, 0x75, 0x5d, 0xa7, 0xdf, 0xc6, 0x57, 0xc8, 0x46, 0x7b, - 0x4f, 0x6c, 0x9a, 0x7a, 0x3b, 0x28, 0xf5, 0x1d, 0xcf, 0xf2, 0x83, 0x49, 0xc8, 0xe2, 0x6d, 0x0f, - 0x1e, 0xda, 0x17, 0x6c, 0xd0, 0x4c, 0x46, 0x98, 0x1d, 0xf5, 0xf9, 0x58, 0x84, 0x48, 0x2e, 0x48, - 0x8c, 0xc1, 0x35, 0xba, 0x03, 0xa9, 0xda, 0x4b, 0x58, 0x24, 0x9f, 0xc8, 0x23, 0xf9, 0xf0, 0x21, - 0x12, 0x76, 0x9d, 0xfe, 0x44, 0x5c, 0x67, 0x5e, 0x11, 0xa2, 0xfa, 0x64, 0x0e, 0xd5, 0x9b, 0x85, - 0xca, 0xcc, 0x1e, 0xd1, 0x0f, 0xe6, 0x01, 0xc0, 0x46, 0xca, 0x26, 0x9a, 0x3e, 0x89, 0x59, 0x68, - 0x3f, 0x96, 0x67, 0x64, 0x59, 0xe6, 0x65, 0xf9, 0xc8, 0x18, 0x1b, 0x08, 0x93, 0x8f, 0x91, 0x68, - 0x19, 0x14, 0xf6, 0xd1, 0x6b, 0x2a, 0x51, 0x41, 0x12, 0xf8, 0xd1, 0x20, 0x5f, 0x6a, 0xbf, 0x9d, - 0x03, 0x05, 0x9c, 0xa0, 0x9e, 0x01, 0x00, 0x9b, 0x05, 0xe4, 0x30, 0x6d, 0x0e, 0x1b, 0x00, 0x4c, - 0x0a, 0xd6, 0x56, 0xab, 0x4b, 0x5f, 0x13, 0x83, 0x3b, 0x4a, 0x40, 0x5f, 0x63, 0x63, 0x01, 0xd3, - 0xa2, 0xe6, 0x03, 0x93, 0x82, 0xbe, 0xc6, 0x4f, 0x75, 0xb8, 0x4d, 0x6e, 0xf7, 0xc8, 0x1b, 0x51, - 0x42, 0xf8, 0x75, 0x3d, 0xbc, 0x13, 0x36, 0xf8, 0x1a, 0xa7, 0xa0, 0xa9, 0x34, 0x56, 0xcb, 0xe5, - 0xa8, 0x88, 0x22, 0xce, 0x34, 0x98, 0xac, 0xbd, 0x2e, 0x54, 0x9b, 0x2a, 0xa7, 0x36, 0x8f, 0x4e, - 0x21, 0xde, 0xec, 0x95, 0xe7, 0xeb, 0x05, 0x30, 0xdb, 0x70, 0xba, 0x54, 0x77, 0x98, 0xe9, 0xe6, - 0x67, 0x0a, 0xa9, 0xa6, 0x9b, 0x21, 0x8d, 0x18, 0x05, 0x79, 0x0a, 0xaf, 0x20, 0x62, 0x14, 0x58, - 0xfd, 0x50, 0x97, 0x41, 0x11, 0x6b, 0xef, 0xc1, 0xcb, 0x46, 0x93, 0x48, 0x60, 0xd1, 0x1a, 0xf4, - 0xcb, 0x7f, 0x77, 0x3a, 0xf6, 0xdf, 0x40, 0x01, 0x57, 0x30, 0x61, 0x6f, 0x88, 0xaf, 0xa8, 0x94, - 0x5c, 0x51, 0x39, 0xb9, 0xa2, 0xf9, 0xc1, 0x8a, 0xa6, 0x59, 0x45, 0x88, 0xd3, 0x90, 0xec, 0x75, - 0xfc, 0x7f, 0xcd, 0x00, 0xd0, 0x30, 0x2f, 0x59, 0x3b, 0x64, 0x6f, 0xf9, 0x8b, 0xc1, 0xec, 0x89, - 0xee, 0x02, 0xff, 0x24, 0x33, 0x10, 0xde, 0x0e, 0x66, 0xe8, 0xb8, 0x47, 0x2b, 0xf2, 0x10, 0xae, - 0x22, 0x11, 0x15, 0x62, 0xd4, 0xde, 0xef, 0x1b, 0x41, 0x7e, 0x64, 0x98, 0x6c, 0xef, 0xf7, 0x7a, - 0x6d, 0xf4, 0x2d, 0xb5, 0xd0, 0x82, 0xe7, 0x98, 0x1d, 0x8c, 0xe8, 0x92, 0x69, 0x12, 0x74, 0x8a, - 0x3e, 0x69, 0xef, 0x13, 0x3e, 0xa7, 0xc6, 0xf0, 0xc3, 0xd4, 0x28, 0xa6, 0x09, 0x3e, 0x16, 0xcc, - 0x38, 0xe1, 0x76, 0xb8, 0x1c, 0xbb, 0x8a, 0x56, 0xb3, 0xb7, 0x1d, 0x23, 0xc8, 0x29, 0xb8, 0x75, - 0x26, 0xc4, 0xc7, 0x54, 0x8e, 0x82, 0x9e, 0x5a, 0x0d, 0x22, 0xa5, 0xa2, 0x7a, 0x9c, 0xb7, 0xfc, - 0xdd, 0xba, 0x65, 0x5f, 0xf4, 0xb4, 0xff, 0x22, 0x66, 0x41, 0x32, 0xf8, 0x4b, 0xe9, 0xf0, 0xe7, - 0x23, 0x95, 0x25, 0x7a, 0x76, 0x30, 0x54, 0x86, 0x73, 0x1b, 0x03, 0xe0, 0x1d, 0xa0, 0x48, 0x18, - 0xa5, 0x9d, 0xe8, 0xd9, 0x58, 0xfc, 0x42, 0x4a, 0x06, 0xfd, 0x42, 0xd0, 0x2b, 0x24, 0x2d, 0x67, - 0x99, 0x43, 0x7a, 0xf6, 0x31, 0x60, 0x86, 0x4a, 0x5a, 0x5d, 0x64, 0x5b, 0xb1, 0x72, 0x4c, 0x05, - 0xa0, 0xb8, 0xee, 0x5c, 0x82, 0x6d, 0x47, 0xc9, 0xa1, 0xff, 0x88, 0xbf, 0xb6, 0xa3, 0x48, 0xda, - 0x2b, 0x4b, 0xa0, 0x14, 0x86, 0xa8, 0xfc, 0x43, 0x09, 0x28, 0x15, 0x3c, 0x43, 0x5b, 0x71, 0x9d, - 0x3d, 0x52, 0x23, 0xf1, 0x33, 0x0f, 0x2f, 0x15, 0x76, 0x10, 0x09, 0x43, 0x47, 0x0e, 0x16, 0x16, - 0x83, 0x25, 0x59, 0xc2, 0x94, 0x82, 0x25, 0x4c, 0xed, 0xad, 0x42, 0x0e, 0x23, 0xa2, 0xa5, 0x64, - 0xdf, 0xd4, 0x7e, 0x47, 0x02, 0x85, 0x4a, 0xcf, 0xb1, 0x21, 0x7b, 0x30, 0x77, 0xe4, 0x09, 0xd0, - 0xe1, 0xfb, 0x18, 0xda, 0xb3, 0x24, 0x51, 0x5b, 0x23, 0x12, 0x00, 0x2a, 0x5b, 0x50, 0xb6, 0x62, - 0x83, 0x54, 0x22, 0xe9, 0xec, 0x05, 0xfa, 0x4d, 0x09, 0xcc, 0x92, 0x98, 0x72, 0xe5, 0x5e, 0x4f, - 0x7b, 0x70, 0x24, 0xd4, 0x21, 0x61, 0x3e, 0xb5, 0x0f, 0x09, 0x1f, 0x3c, 0x0b, 0x6b, 0x15, 0xd2, - 0x4e, 0x11, 0x16, 0x31, 0xdd, 0x39, 0x28, 0xb1, 0x9d, 0xb8, 0x91, 0x0c, 0x65, 0x2f, 0xea, 0x3f, - 0x92, 0x90, 0x01, 0x60, 0x5f, 0xdc, 0x70, 0xe1, 0x25, 0x0b, 0x5e, 0xd6, 0xae, 0x8d, 0x84, 0x7d, - 0x30, 0x60, 0xd6, 0x9b, 0x84, 0x17, 0x71, 0x18, 0x92, 0xb1, 0x1b, 0x61, 0x73, 0xbd, 0x28, 0x13, - 0xed, 0xc5, 0x07, 0xa3, 0x98, 0x31, 0x64, 0x0c, 0x36, 0xbb, 0xe0, 0x9a, 0x4d, 0x3c, 0x17, 0xd9, - 0x0b, 0xf6, 0x63, 0x33, 0xa0, 0xb4, 0x69, 0x7b, 0xfd, 0x9e, 0xe9, 0xed, 0x6a, 0xff, 0x2a, 0x83, - 0x22, 0xb9, 0xe2, 0x56, 0xfb, 0x41, 0x2e, 0x2e, 0xcf, 0x33, 0xf6, 0xa1, 0x1b, 0x38, 0xf0, 0x90, - 0x87, 0xc8, 0x3e, 0x92, 0x18, 0xfb, 0x48, 0xfb, 0xa0, 0x2c, 0x3a, 0x49, 0x0d, 0x0a, 0xa5, 0x77, - 0xea, 0xc6, 0x87, 0x82, 0xe9, 0x5b, 0x1d, 0x7f, 0xdf, 0x85, 0xde, 0xd0, 0x50, 0x30, 0xb1, 0x54, - 0x36, 0xc8, 0x57, 0x46, 0xf8, 0xb9, 0x66, 0x82, 0x19, 0x9a, 0x78, 0x60, 0x33, 0xea, 0x60, 0x54, - 0x89, 0x53, 0xa0, 0x68, 0xba, 0xbe, 0xe5, 0xf9, 0x74, 0x7b, 0x96, 0x3e, 0xa1, 0xee, 0x92, 0xfc, - 0xdb, 0x74, 0x7b, 0x41, 0x04, 0xaf, 0x30, 0x41, 0xfb, 0x35, 0xa1, 0xf9, 0x63, 0x72, 0xcd, 0xd3, - 0x41, 0x7e, 0xcf, 0x18, 0x2b, 0xdc, 0x0f, 0x02, 0x57, 0x19, 0xe5, 0xb6, 0xbe, 0x45, 0x02, 0x3e, - 0x85, 0xb1, 0x9d, 0xba, 0xda, 0x7b, 0x64, 0x66, 0xfd, 0xee, 0x0a, 0x37, 0x46, 0x50, 0x29, 0x46, - 0x63, 0x44, 0x98, 0x90, 0xb0, 0xd7, 0xcd, 0x2d, 0xe1, 0xca, 0xc2, 0x4b, 0xb8, 0xda, 0xaf, 0x08, - 0xef, 0x45, 0x85, 0xa2, 0x1c, 0xb1, 0x06, 0x98, 0x74, 0x05, 0xe6, 0x47, 0x84, 0xf6, 0x95, 0x46, - 0x95, 0x74, 0x84, 0xb0, 0x7d, 0xf7, 0x14, 0x90, 0xca, 0x35, 0xed, 0x27, 0x66, 0xc0, 0xfc, 0x79, - 0xd7, 0xf2, 0x2d, 0x7b, 0xa7, 0xed, 0x38, 0x3d, 0x4f, 0xfb, 0x0e, 0xb3, 0x51, 0xf1, 0x78, 0x50, - 0xec, 0x38, 0xf6, 0xb6, 0xb5, 0x43, 0xc5, 0x78, 0x86, 0xab, 0x5c, 0xb9, 0xb6, 0xb4, 0xe1, 0x3a, - 0x97, 0xac, 0x2e, 0x74, 0x2b, 0x38, 0x97, 0x41, 0x73, 0x23, 0x3d, 0x66, 0x42, 0xe6, 0x3d, 0x7a, - 0xf0, 0x2b, 0xb6, 0xbc, 0x30, 0x66, 0x0f, 0x4d, 0x64, 0x22, 0xe6, 0xd5, 0x40, 0xa9, 0x67, 0xda, - 0x3b, 0xfb, 0xc1, 0xcc, 0x7b, 0x70, 0x17, 0x35, 0x8e, 0x52, 0x9d, 0x7e, 0x64, 0x84, 0x9f, 0x63, - 0x27, 0x37, 0x64, 0xea, 0x93, 0xb6, 0x87, 0xff, 0x9f, 0xfd, 0x78, 0x0e, 0xcc, 0x31, 0x85, 0xaa, - 0x73, 0x60, 0xa6, 0xaa, 0xaf, 0x94, 0x37, 0xeb, 0x6d, 0xe5, 0x18, 0x92, 0x62, 0x6b, 0x73, 0x7d, - 0xbd, 0x6c, 0xd4, 0x7e, 0x58, 0x57, 0x72, 0xe8, 0xdd, 0xaa, 0x51, 0x46, 0xcf, 0x8a, 0x84, 0x1e, - 0x5a, 0x6b, 0x4d, 0xa3, 0xad, 0x37, 0x14, 0x19, 0xd9, 0xa3, 0xfa, 0xd3, 0x36, 0xca, 0x8d, 0xaa, - 0x92, 0x47, 0xff, 0x97, 0x37, 0xeb, 0x75, 0xbd, 0xad, 0x14, 0xa2, 0x20, 0x7a, 0x45, 0x94, 0x5c, - 0x29, 0xb7, 0x36, 0xcb, 0x75, 0x65, 0x06, 0x25, 0xaf, 0x6c, 0x36, 0x1a, 0xf7, 0x2a, 0x25, 0x54, - 0x44, 0xa5, 0xd9, 0x58, 0xa9, 0x55, 0xf5, 0x46, 0x5b, 0x99, 0x55, 0xaf, 0x02, 0xc7, 0x5b, 0x6d, - 0xa3, 0x5c, 0x5b, 0x5d, 0x6b, 0xaf, 0x34, 0x8d, 0xf3, 0x65, 0xa3, 0xaa, 0x00, 0x55, 0x01, 0xf3, - 0x1b, 0x46, 0x73, 0x45, 0xc7, 0xf1, 0x52, 0xca, 0x75, 0x65, 0x0e, 0x7d, 0xd5, 0x36, 0xca, 0x8d, - 0x56, 0xbd, 0xdc, 0xd6, 0x95, 0xf9, 0xb3, 0x77, 0x83, 0x52, 0x50, 0x5d, 0xb5, 0x08, 0x24, 0xbd, - 0xa1, 0x1c, 0xc3, 0xbf, 0x2d, 0x25, 0x87, 0x7e, 0x57, 0x10, 0xbf, 0x45, 0x20, 0x55, 0x75, 0x45, - 0x46, 0xbf, 0xb5, 0xb6, 0x92, 0x47, 0xbf, 0x1b, 0x88, 0xc5, 0x22, 0x90, 0xd6, 0x6a, 0x4a, 0x11, - 0xfd, 0xb6, 0xd7, 0x94, 0x19, 0xfe, 0xa6, 0xfb, 0xc4, 0x5e, 0xf8, 0xa0, 0xe4, 0x63, 0x0c, 0x0d, - 0x3f, 0x9a, 0x23, 0xe3, 0xff, 0xda, 0x2b, 0x24, 0x91, 0xbe, 0x2e, 0x99, 0x7e, 0xba, 0x46, 0xf3, - 0x96, 0xdc, 0x04, 0x5b, 0x8d, 0xaa, 0x81, 0x53, 0x7a, 0xa3, 0xba, 0xd1, 0xac, 0x35, 0xda, 0x24, - 0xd4, 0x99, 0x5e, 0xae, 0xac, 0x61, 0x9c, 0x21, 0x42, 0x70, 0xbd, 0x59, 0xd5, 0xeb, 0xf8, 0xc5, - 0x4a, 0x73, 0xb3, 0x51, 0x55, 0xb6, 0x51, 0x59, 0xe5, 0xcd, 0xf6, 0xda, 0x96, 0xa1, 0x3f, 0x75, - 0xb3, 0x66, 0xe8, 0x55, 0x65, 0x07, 0xd1, 0xa8, 0x97, 0x1b, 0xab, 0x9b, 0xe5, 0x55, 0xba, 0x5f, - 0xb8, 0xb9, 0xb1, 0xd1, 0xc4, 0x3b, 0x86, 0xbb, 0xda, 0xdf, 0xe7, 0x41, 0xa9, 0xbc, 0xef, 0x3b, - 0xdb, 0x56, 0xaf, 0xa7, 0x3d, 0x47, 0x3a, 0x7c, 0x53, 0x2c, 0x73, 0x4d, 0xf1, 0x40, 0x03, 0x0a, - 0xca, 0x0a, 0x1b, 0x4f, 0x90, 0xc0, 0xb4, 0xc3, 0xd3, 0x91, 0x33, 0xb6, 0x4c, 0x77, 0x9a, 0xc9, - 0x23, 0x71, 0xc4, 0xb5, 0x69, 0xcb, 0xc2, 0x6f, 0xe8, 0xe3, 0xd9, 0x7b, 0xc0, 0x3c, 0x4b, 0x09, - 0x87, 0x03, 0x2b, 0xaf, 0x92, 0x78, 0x61, 0x41, 0x84, 0x40, 0x12, 0x2f, 0x0c, 0x1f, 0xbc, 0x90, - 0x70, 0x7b, 0xa9, 0xb5, 0xeb, 0x48, 0x4f, 0x8f, 0x83, 0xb9, 0xaa, 0xde, 0xaa, 0x18, 0x35, 0xec, - 0xa7, 0xae, 0xe4, 0x79, 0x2f, 0x83, 0x44, 0xcb, 0x8c, 0xaf, 0x91, 0xa8, 0x52, 0x7e, 0x4f, 0xc8, - 0xde, 0x8a, 0xa7, 0x9d, 0x4e, 0x21, 0x5f, 0xf4, 0x40, 0x53, 0x48, 0xed, 0x45, 0x79, 0xb2, 0x4e, - 0xd6, 0xda, 0xdf, 0xdb, 0x33, 0xdd, 0x2b, 0x9c, 0xbf, 0xda, 0xb8, 0x7a, 0x17, 0x3f, 0xbe, 0x27, - 0x46, 0x01, 0x42, 0x26, 0x54, 0xdf, 0x75, 0xf6, 0xfa, 0x41, 0x5f, 0x4d, 0x9f, 0xb4, 0xff, 0x29, - 0x3c, 0x73, 0x2c, 0xd7, 0x96, 0x98, 0xca, 0x8c, 0x31, 0xb4, 0xff, 0x88, 0x24, 0x32, 0x8b, 0x4c, - 0x2c, 0xe6, 0xfb, 0x5d, 0x23, 0xfe, 0x3a, 0x0f, 0xae, 0xa2, 0x11, 0x5e, 0xc2, 0xf5, 0x07, 0x64, - 0xaa, 0xbe, 0x3a, 0x53, 0xcd, 0xa0, 0x06, 0xb5, 0x1c, 0x19, 0xd4, 0xcc, 0x86, 0x77, 0x5e, 0x70, - 0xc3, 0xfb, 0x6d, 0xc2, 0x87, 0x1e, 0xca, 0xb5, 0xa5, 0x21, 0x75, 0x9c, 0xce, 0xb6, 0xfc, 0xf3, - 0x24, 0x91, 0xd5, 0x56, 0x21, 0x0e, 0xbf, 0xdf, 0x75, 0xed, 0x1d, 0x39, 0xb0, 0xc8, 0xab, 0x8a, - 0xfa, 0x38, 0x50, 0xea, 0xd3, 0x14, 0x2a, 0x97, 0xd3, 0x71, 0xca, 0x65, 0x84, 0x39, 0x11, 0x44, - 0xd0, 0xee, 0xf6, 0x1d, 0xcb, 0x0e, 0xd7, 0xe5, 0x83, 0x67, 0x34, 0xef, 0xc4, 0x53, 0x87, 0x20, - 0xde, 0x1f, 0x7e, 0x88, 0x62, 0xc7, 0xe6, 0x99, 0xd8, 0xb1, 0x48, 0x88, 0x3e, 0xdc, 0xc3, 0xb7, - 0x18, 0xed, 0xbb, 0xc4, 0xe1, 0x45, 0x32, 0xd8, 0xa4, 0xb3, 0x4f, 0x06, 0xa5, 0xa0, 0x7c, 0x64, - 0xdd, 0x35, 0xeb, 0xf5, 0xf2, 0x7a, 0x99, 0x2c, 0x54, 0x36, 0x37, 0xf4, 0x46, 0xb9, 0xa6, 0xe4, - 0xd0, 0x40, 0x57, 0x5f, 0x6f, 0xb5, 0x37, 0xab, 0xb5, 0xa6, 0x22, 0xe1, 0x27, 0x94, 0xa9, 0xb2, - 0xb1, 0xa1, 0xc8, 0xda, 0x1b, 0x67, 0xc0, 0xcc, 0xaa, 0xd9, 0xeb, 0x41, 0xf7, 0x8a, 0xf6, 0x4d, - 0x09, 0x28, 0xc1, 0xec, 0x60, 0xdd, 0xb4, 0xad, 0x6d, 0xe8, 0xf9, 0xc9, 0x0b, 0x15, 0xef, 0x13, - 0xbe, 0xda, 0x8c, 0x96, 0xb1, 0x34, 0x48, 0x3f, 0x46, 0xc7, 0x6f, 0x05, 0x79, 0xcb, 0xde, 0x76, - 0xe8, 0x72, 0xc5, 0xa0, 0xbf, 0x4d, 0xf0, 0x31, 0xde, 0x36, 0xc0, 0x19, 0x05, 0x6f, 0x37, 0x13, - 0xe4, 0x22, 0xfb, 0x55, 0x8b, 0x77, 0xe4, 0xc1, 0x42, 0xc0, 0x44, 0xcd, 0xee, 0xc2, 0xfb, 0xd9, - 0x6d, 0xd0, 0x9f, 0xc9, 0x8b, 0x06, 0x18, 0x1a, 0xac, 0x0f, 0x26, 0x15, 0x23, 0xd2, 0x36, 0x00, - 0x1d, 0xd3, 0x87, 0x3b, 0x8e, 0x6b, 0x85, 0x6b, 0x11, 0x8f, 0x4b, 0x43, 0xad, 0x42, 0xbe, 0xbe, - 0x62, 0x30, 0x74, 0xd4, 0x27, 0x81, 0x39, 0x18, 0x46, 0x74, 0x0c, 0xb6, 0x49, 0x13, 0xf1, 0x62, - 0xf3, 0x6b, 0x7f, 0x24, 0x14, 0xc7, 0x48, 0xa4, 0x9a, 0xe9, 0x30, 0xdb, 0x1a, 0xaf, 0xeb, 0xd9, - 0x6c, 0xac, 0x97, 0x8d, 0xd6, 0x5a, 0xb9, 0x5e, 0xaf, 0x35, 0x56, 0xc3, 0x80, 0xc5, 0x2a, 0x58, - 0xac, 0x36, 0xcf, 0x37, 0x98, 0x88, 0xd2, 0x79, 0x6d, 0x03, 0x94, 0x02, 0x79, 0x0d, 0x3b, 0x45, - 0xc5, 0xca, 0x8c, 0x9e, 0xa2, 0x62, 0x92, 0x90, 0x69, 0x68, 0x75, 0x42, 0xd7, 0x7a, 0xfc, 0x5f, - 0xfb, 0x2d, 0x13, 0x14, 0xb0, 0x3f, 0x8b, 0xf6, 0x2e, 0x3c, 0x2f, 0xee, 0xf7, 0xcc, 0x0e, 0xd4, - 0xf6, 0x52, 0xac, 0x84, 0x07, 0x77, 0xed, 0x4a, 0x07, 0xee, 0xda, 0xc5, 0x7f, 0xe9, 0x88, 0x71, - 0x72, 0x98, 0x0f, 0x8d, 0x41, 0xb2, 0xf0, 0x21, 0x7f, 0x12, 0x3d, 0x9b, 0x88, 0xeb, 0x0d, 0x65, - 0x33, 0x46, 0x25, 0xe3, 0x79, 0xca, 0xe2, 0x12, 0x95, 0x24, 0x8e, 0xb2, 0x6f, 0xf1, 0x5f, 0xc9, - 0x83, 0x42, 0xab, 0xdf, 0xb3, 0x7c, 0xed, 0x17, 0xa4, 0x89, 0x60, 0x46, 0xee, 0x47, 0x96, 0x47, - 0xde, 0x8f, 0x1c, 0xf9, 0x4b, 0xe6, 0x05, 0xfc, 0x25, 0xdb, 0xf0, 0x7e, 0x9f, 0xf7, 0x97, 0xbc, - 0x9d, 0x4e, 0xdb, 0x88, 0xb7, 0xe5, 0xc3, 0x87, 0x88, 0x14, 0x57, 0x6b, 0xc8, 0x6d, 0x16, 0x67, - 0x1f, 0x43, 0x83, 0xea, 0x03, 0x50, 0x5c, 0x6e, 0xb6, 0xdb, 0xcd, 0x75, 0xe5, 0x18, 0x9e, 0x7e, - 0x35, 0x37, 0x48, 0x88, 0xe3, 0x5a, 0xa3, 0xa1, 0x1b, 0xdc, 0x8c, 0x8b, 0xbf, 0x2c, 0x33, 0x71, - 0x82, 0xc5, 0x97, 0x9d, 0xa5, 0x7a, 0x89, 0x2d, 0x82, 0xc7, 0xf3, 0x93, 0xbd, 0x72, 0xfd, 0x9c, - 0x0c, 0x0a, 0xeb, 0xd0, 0xdd, 0x81, 0xda, 0x33, 0x52, 0x38, 0xd8, 0x6d, 0x5b, 0xae, 0x47, 0x2e, - 0x45, 0x88, 0x1c, 0xec, 0xd8, 0x34, 0xf5, 0x06, 0xb0, 0xe0, 0xc1, 0x8e, 0x63, 0x77, 0x83, 0x4c, - 0xa4, 0x3f, 0xe2, 0x13, 0xb5, 0x97, 0xa5, 0x84, 0x0c, 0x33, 0x3a, 0x11, 0x2f, 0xb9, 0x34, 0xc0, - 0x0c, 0x2b, 0x35, 0x7b, 0x60, 0xbe, 0x2d, 0xa3, 0x8f, 0xfa, 0x57, 0xb4, 0x97, 0x09, 0x7b, 0x3e, - 0xde, 0x02, 0x8a, 0x17, 0x82, 0x7b, 0xd1, 0xe4, 0xd8, 0xfe, 0x98, 0xe6, 0x51, 0x97, 0xc1, 0x09, - 0x0f, 0xf6, 0x60, 0xc7, 0x87, 0x5d, 0xd4, 0x74, 0x8d, 0x91, 0x9d, 0xc2, 0xc1, 0xec, 0xda, 0xef, - 0xb1, 0x00, 0xde, 0xc9, 0x03, 0x78, 0xe3, 0x10, 0x51, 0xa2, 0x0a, 0xc5, 0xcf, 0x4d, 0x50, 0x35, - 0x5a, 0x3d, 0x27, 0x34, 0x7c, 0x83, 0x67, 0xf4, 0x6e, 0xd7, 0xdf, 0xeb, 0xe1, 0x77, 0xf4, 0x68, - 0x70, 0xf0, 0xac, 0x2e, 0x81, 0x19, 0xd3, 0xbe, 0x82, 0x5f, 0xe5, 0x13, 0x6a, 0x1d, 0x64, 0xd2, - 0x5e, 0x19, 0x22, 0x7f, 0x17, 0x87, 0xfc, 0x23, 0xc5, 0xd8, 0xcd, 0x1e, 0xf8, 0x1f, 0x9d, 0x01, - 0x85, 0x0d, 0xd3, 0xf3, 0xa1, 0xf6, 0xbf, 0x65, 0x51, 0xe4, 0x6f, 0x04, 0x8b, 0xdb, 0x4e, 0x67, - 0xdf, 0x83, 0x5d, 0xbe, 0x51, 0x0e, 0xa4, 0x4e, 0x02, 0x73, 0x1c, 0x98, 0x9d, 0x26, 0x52, 0xb2, - 0x81, 0x0b, 0xec, 0x81, 0x74, 0x7c, 0xf5, 0xa2, 0xb7, 0x61, 0xba, 0x7e, 0x73, 0x1b, 0xa7, 0x85, - 0x57, 0x2f, 0xb2, 0x89, 0x1c, 0xf4, 0xc5, 0x04, 0xe8, 0x67, 0xe2, 0xa1, 0x2f, 0x09, 0x40, 0xaf, - 0x96, 0x41, 0x69, 0xdb, 0xea, 0x41, 0xfc, 0xc1, 0x2c, 0xfe, 0x60, 0xd8, 0x98, 0x84, 0x65, 0x1f, - 0x8e, 0x49, 0x2b, 0x56, 0x0f, 0x1a, 0xe1, 0x67, 0xc1, 0x44, 0x06, 0x44, 0x13, 0x99, 0x3a, 0x39, - 0x09, 0x87, 0x0c, 0x2f, 0xdb, 0xdc, 0x83, 0xc1, 0xc6, 0xb7, 0x4d, 0x8f, 0xa5, 0x77, 0x4d, 0xdf, - 0xc4, 0x60, 0xcc, 0x1b, 0xf8, 0x3f, 0xef, 0x93, 0x2d, 0x0f, 0xfa, 0x64, 0x3f, 0x57, 0x4e, 0xd7, - 0x23, 0x06, 0xcc, 0xc6, 0xb4, 0xa8, 0x0b, 0x01, 0x40, 0xc4, 0x52, 0x0c, 0x9f, 0x11, 0x30, 0x1d, - 0xd3, 0x85, 0xfe, 0x06, 0xeb, 0x05, 0x5d, 0x30, 0xf8, 0x44, 0x7c, 0x08, 0xc7, 0x6b, 0x99, 0x7b, - 0xe4, 0x6a, 0xc5, 0x0a, 0x7a, 0x47, 0x0f, 0x57, 0x1c, 0x48, 0x8f, 0xfa, 0xdf, 0xc2, 0xa4, 0xfb, - 0xdf, 0x61, 0x75, 0xcc, 0xbe, 0x19, 0xbe, 0x26, 0x0f, 0xe4, 0xca, 0xbe, 0xff, 0x80, 0xee, 0x7e, - 0xbf, 0x27, 0xec, 0x63, 0x4e, 0xfb, 0xb3, 0x7d, 0xff, 0x68, 0x7b, 0xdf, 0x94, 0x5a, 0x22, 0xe6, - 0xcb, 0x1e, 0x57, 0xb7, 0xec, 0x75, 0xe4, 0x6d, 0x72, 0x78, 0x34, 0xea, 0x39, 0xb9, 0xc3, 0x9b, - 0xe6, 0x1a, 0xe9, 0x9f, 0x98, 0x9e, 0x21, 0x7c, 0x0e, 0x3a, 0x9e, 0x3c, 0x77, 0xfb, 0x03, 0x76, - 0x6d, 0xc5, 0xa2, 0x9c, 0x37, 0xc8, 0x83, 0xf6, 0x72, 0xe1, 0x03, 0xa3, 0x44, 0x6c, 0x89, 0xc7, - 0x78, 0xd2, 0xd9, 0x54, 0xaf, 0x16, 0x3a, 0x36, 0x9a, 0x50, 0x6c, 0xf6, 0x80, 0xfd, 0x1d, 0x7b, - 0x4c, 0xa7, 0x7c, 0x68, 0xc4, 0xb4, 0x57, 0x09, 0x2f, 0xe8, 0x93, 0x6a, 0x8f, 0xd8, 0xab, 0x4f, - 0x27, 0x6f, 0x31, 0x47, 0xb1, 0xc4, 0x82, 0xa7, 0x70, 0x57, 0xb4, 0x0c, 0x8a, 0x64, 0xe1, 0x57, - 0x7b, 0xb3, 0x70, 0x13, 0x41, 0xbd, 0x11, 0x7f, 0x7c, 0x27, 0x7c, 0x4e, 0xb3, 0xe6, 0xc0, 0x1d, - 0xf3, 0xc9, 0xa7, 0x3a, 0xe6, 0xc3, 0x47, 0x60, 0x11, 0x68, 0x47, 0xa4, 0x8e, 0x19, 0x4f, 0x27, - 0xd3, 0xb4, 0xb0, 0xa1, 0x0c, 0x65, 0x8f, 0xf7, 0xf3, 0x0b, 0x60, 0x9e, 0x14, 0x4d, 0xce, 0x17, - 0x6a, 0xef, 0x91, 0xbe, 0x7f, 0x50, 0x57, 0x1b, 0x60, 0xfe, 0x32, 0x66, 0x9b, 0x84, 0x97, 0xa3, - 0x2b, 0x17, 0x37, 0x27, 0xae, 0x7b, 0x90, 0x7a, 0x06, 0xb7, 0x46, 0x73, 0xdf, 0x23, 0x19, 0x93, - 0x0d, 0x16, 0x72, 0x78, 0xa2, 0x88, 0x8d, 0x2c, 0x36, 0x49, 0x3d, 0x05, 0x8a, 0x97, 0x2c, 0x78, - 0xb9, 0xd6, 0xa5, 0xd6, 0x2d, 0x7d, 0xd2, 0x7e, 0x5d, 0xd8, 0x67, 0x92, 0x85, 0x9b, 0xf2, 0x92, - 0xad, 0x16, 0x8a, 0x79, 0x4e, 0x8e, 0x64, 0x6b, 0x0a, 0xd1, 0x80, 0x24, 0x72, 0x4f, 0x3d, 0x0d, - 0xe5, 0x5f, 0x49, 0xa1, 0x88, 0x71, 0x86, 0x33, 0x1f, 0x84, 0x2f, 0xf1, 0xac, 0x39, 0x11, 0x40, - 0x54, 0xfe, 0x44, 0xfa, 0x7c, 0xb1, 0xc8, 0x70, 0x23, 0x8a, 0xce, 0x5e, 0xf2, 0xaf, 0x93, 0xc1, - 0x6c, 0x0b, 0xfa, 0x2b, 0x16, 0xec, 0x75, 0x3d, 0xcd, 0x3d, 0xbc, 0x69, 0x74, 0x2b, 0x28, 0x6e, - 0x63, 0x62, 0xa3, 0x36, 0x27, 0x69, 0x36, 0xed, 0x35, 0x92, 0xa8, 0x1f, 0x10, 0x5d, 0x7d, 0x0b, - 0xb8, 0x9d, 0x08, 0x4c, 0x62, 0xa7, 0xe9, 0x92, 0x4b, 0x9e, 0xc2, 0x55, 0x49, 0x32, 0x98, 0xc7, - 0xdb, 0xff, 0xd0, 0x2f, 0xf7, 0xac, 0x1d, 0x9b, 0xbd, 0x5d, 0x7d, 0xec, 0x16, 0xa2, 0x3e, 0x1a, - 0x14, 0x4c, 0x44, 0x8d, 0xba, 0xbb, 0x69, 0x43, 0x3b, 0x4f, 0x5c, 0x9e, 0x41, 0x32, 0xa6, 0xb8, - 0x98, 0x24, 0x52, 0xec, 0x80, 0xe7, 0x29, 0x5e, 0x4c, 0x32, 0xb2, 0xf0, 0xec, 0x11, 0xfb, 0x9a, - 0x0c, 0x4e, 0x52, 0x06, 0xce, 0x41, 0xd7, 0xb7, 0x3a, 0x66, 0x8f, 0x20, 0xf7, 0xc2, 0xdc, 0x24, - 0xa0, 0x5b, 0x03, 0x0b, 0x97, 0x58, 0xb2, 0x14, 0xc2, 0xb3, 0x43, 0x21, 0xe4, 0x18, 0x30, 0xf8, - 0x0f, 0x53, 0x5c, 0xf0, 0xc0, 0x49, 0x95, 0xa3, 0x39, 0xc5, 0x0b, 0x1e, 0x84, 0x99, 0xc8, 0x1e, - 0xe2, 0x97, 0xd0, 0xa0, 0x9a, 0x51, 0xf7, 0xf9, 0x45, 0x61, 0x6c, 0x37, 0xc1, 0x1c, 0xc6, 0x92, - 0x7c, 0x48, 0x97, 0x21, 0x12, 0x94, 0x38, 0xec, 0x77, 0xe8, 0x45, 0xf7, 0xe1, 0xb7, 0x06, 0x4b, - 0x47, 0x3b, 0x0f, 0x40, 0xf4, 0x8a, 0xed, 0xa4, 0x73, 0x71, 0x9d, 0xb4, 0x24, 0xd6, 0x49, 0xbf, - 0x49, 0x38, 0xcc, 0xe1, 0x70, 0xb6, 0x0f, 0xaf, 0x1e, 0x62, 0x01, 0xee, 0x46, 0x97, 0x9e, 0xbd, - 0x5e, 0xbc, 0x92, 0xea, 0x45, 0x75, 0xbf, 0xdf, 0xb3, 0x3a, 0x68, 0x3e, 0xf5, 0xc9, 0x89, 0xcc, - 0xa7, 0xd8, 0xfe, 0x40, 0x1e, 0xe8, 0x0f, 0x0e, 0x61, 0x49, 0xdf, 0x04, 0x8e, 0x93, 0x22, 0x2a, - 0x21, 0x5b, 0x05, 0x12, 0xc4, 0x6d, 0x20, 0x99, 0x8f, 0xda, 0x2e, 0xa8, 0x04, 0xa1, 0x10, 0xc6, - 0x58, 0xfa, 0x4c, 0x67, 0xec, 0xa6, 0x55, 0x90, 0x38, 0xce, 0xa6, 0x70, 0x24, 0x2b, 0x4f, 0xac, - 0xdd, 0xcd, 0x7e, 0x17, 0x69, 0xc7, 0x97, 0xf3, 0x93, 0x18, 0x11, 0x9e, 0x42, 0x3d, 0x4d, 0xe5, - 0xd8, 0x25, 0x8d, 0xa8, 0xc8, 0xb0, 0x1f, 0x69, 0xc3, 0xfb, 0xfd, 0xb5, 0x63, 0xc4, 0x2f, 0x55, - 0xbd, 0x19, 0x1c, 0xbf, 0x60, 0x76, 0x2e, 0xee, 0xb8, 0xce, 0x3e, 0xbe, 0xb5, 0xdd, 0xa1, 0xd7, - 0xbf, 0xaf, 0x1d, 0x33, 0x06, 0x5f, 0xa8, 0xb7, 0x05, 0xa6, 0x43, 0x61, 0x94, 0xe9, 0xb0, 0x76, - 0x8c, 0x1a, 0x0f, 0xea, 0x63, 0xc2, 0x4e, 0xa7, 0x98, 0xd8, 0xe9, 0xac, 0x1d, 0x0b, 0xba, 0x1d, - 0xb5, 0x0a, 0x4a, 0x5d, 0xeb, 0x12, 0xde, 0xaa, 0xc6, 0xb3, 0xae, 0x51, 0x41, 0x87, 0xaa, 0xd6, - 0x25, 0xb2, 0xb1, 0xbd, 0x76, 0xcc, 0x08, 0xbf, 0x54, 0x57, 0xc1, 0x2c, 0xde, 0x16, 0xc0, 0x64, - 0x4a, 0xa9, 0x02, 0x0a, 0xad, 0x1d, 0x33, 0xa2, 0x6f, 0x91, 0xf5, 0x91, 0xc7, 0xe7, 0xae, 0xef, - 0x0a, 0xb6, 0xdb, 0x73, 0xa9, 0xb6, 0xdb, 0x91, 0x2c, 0xc8, 0x86, 0xfb, 0x29, 0x50, 0xe8, 0x60, - 0x09, 0x4b, 0x54, 0xc2, 0xe4, 0x51, 0xbd, 0x13, 0xe4, 0xf7, 0x4c, 0x37, 0x98, 0x3c, 0xdf, 0x38, - 0x9a, 0xee, 0xba, 0xe9, 0x5e, 0x44, 0x08, 0xa2, 0xaf, 0x96, 0x67, 0x40, 0x01, 0x0b, 0x2e, 0xfc, - 0xa3, 0xbd, 0x2d, 0x4f, 0xcc, 0x90, 0x8a, 0x63, 0xa3, 0x61, 0xbf, 0xed, 0x04, 0x87, 0xd3, 0x7f, - 0x3d, 0x37, 0x19, 0x0b, 0xf2, 0x2a, 0xe6, 0x3a, 0x15, 0xdb, 0x7a, 0xc6, 0x3e, 0xbc, 0x07, 0x5e, - 0xa1, 0x4b, 0xa2, 0xc3, 0x5e, 0xa9, 0x67, 0x00, 0xf0, 0xe9, 0x49, 0xbd, 0x30, 0x88, 0x29, 0x93, - 0x12, 0x2d, 0x1f, 0x14, 0x46, 0x3b, 0xaa, 0xfc, 0xde, 0x18, 0xa6, 0xcb, 0xa0, 0x20, 0xe2, 0x67, - 0xe0, 0x3d, 0xcb, 0x66, 0xea, 0x1c, 0x3c, 0xa6, 0xec, 0x94, 0xd2, 0x1a, 0x35, 0x23, 0xd8, 0xcb, - 0xbe, 0x6f, 0x7a, 0x4b, 0x9e, 0xdc, 0x28, 0x41, 0x4e, 0x40, 0xeb, 0xf7, 0x5b, 0x5e, 0x74, 0x7f, - 0xb3, 0xf6, 0xb9, 0x89, 0x28, 0xcd, 0x90, 0x01, 0x47, 0x1e, 0x3a, 0xe0, 0x1c, 0x08, 0x10, 0x94, - 0x1f, 0x11, 0x20, 0xa8, 0x90, 0x6e, 0xe5, 0xf0, 0xa3, 0xac, 0xfe, 0x6c, 0xf0, 0xfa, 0x73, 0x47, - 0x0c, 0x40, 0xc3, 0xe4, 0x32, 0x11, 0xfb, 0xe6, 0x5d, 0xa1, 0xa6, 0xb4, 0x38, 0x4d, 0xb9, 0x6b, - 0x7c, 0x46, 0xb2, 0xd7, 0x96, 0x0f, 0xe7, 0xc1, 0x55, 0x11, 0x33, 0x0d, 0x78, 0x99, 0x2a, 0xca, - 0x1f, 0x4e, 0x44, 0x51, 0xd2, 0x3b, 0x3a, 0x67, 0xad, 0x31, 0xbf, 0x2d, 0x7c, 0x6e, 0x7f, 0x10, - 0xa8, 0x50, 0x36, 0x31, 0xca, 0x72, 0x0a, 0x14, 0x49, 0x0f, 0x43, 0xa1, 0xa1, 0x4f, 0x29, 0xbb, - 0x1b, 0xb1, 0xd3, 0xfe, 0xa2, 0xbc, 0x4d, 0x41, 0x7f, 0xe8, 0xba, 0x46, 0x7b, 0xdf, 0xb5, 0x6b, - 0xb6, 0xef, 0x68, 0xff, 0x7d, 0x22, 0x8a, 0x13, 0x7a, 0xc3, 0xc9, 0xe3, 0x78, 0xc3, 0x8d, 0xb5, - 0xca, 0x11, 0xd4, 0xe0, 0x48, 0x56, 0x39, 0x62, 0x0a, 0xcf, 0x1e, 0xbf, 0x77, 0xca, 0xe0, 0x14, - 0x9d, 0x6c, 0x2d, 0xf3, 0x16, 0xa2, 0x76, 0xef, 0x24, 0x80, 0x3c, 0x19, 0x98, 0x49, 0xd4, 0x8f, - 0x1e, 0x3f, 0xf0, 0x51, 0x0a, 0x12, 0x6f, 0x0c, 0xe5, 0xa6, 0x83, 0x03, 0x1c, 0x4e, 0x04, 0x29, - 0xb1, 0x8b, 0x42, 0x53, 0xb0, 0x91, 0x3d, 0x66, 0x2f, 0x96, 0x41, 0x91, 0xc4, 0x48, 0xd0, 0x36, - 0x33, 0x71, 0x98, 0xe0, 0xef, 0x67, 0x11, 0xd8, 0x91, 0x23, 0xdc, 0x64, 0x16, 0x3f, 0x22, 0xcd, - 0x5e, 0xdc, 0x50, 0x56, 0xa6, 0xe0, 0x42, 0x28, 0x81, 0xb9, 0x16, 0xf4, 0x2b, 0xa6, 0xeb, 0x5a, - 0xe6, 0xce, 0xa4, 0x3c, 0xbe, 0x45, 0xbd, 0x87, 0xb5, 0xef, 0xe4, 0x44, 0xcf, 0xb2, 0x87, 0x0b, - 0xe1, 0x01, 0xab, 0x31, 0x51, 0xc0, 0x5f, 0x2f, 0x74, 0x5e, 0x7d, 0x14, 0xb5, 0x29, 0x78, 0x6c, - 0x4b, 0x60, 0x26, 0x88, 0x83, 0x71, 0x2b, 0x17, 0x1b, 0x65, 0xd7, 0xdf, 0x0b, 0x8e, 0xc1, 0xe0, - 0xff, 0x07, 0xe3, 0x2f, 0x68, 0xaf, 0x48, 0xe9, 0x28, 0x9f, 0x1c, 0xc4, 0x23, 0x5d, 0x1b, 0x4b, - 0xe3, 0x0e, 0x7f, 0x54, 0x61, 0x3b, 0x3e, 0x34, 0x43, 0x97, 0x23, 0xeb, 0xa6, 0x0f, 0xef, 0xd7, - 0xbe, 0x28, 0x83, 0x99, 0x16, 0xf4, 0xd1, 0x78, 0x8b, 0xd8, 0x3f, 0xb4, 0x86, 0xab, 0xcc, 0x8a, - 0x07, 0x3d, 0x5b, 0xab, 0xde, 0x0d, 0x66, 0xfb, 0xae, 0xd3, 0x81, 0x9e, 0x47, 0x57, 0x2f, 0x58, - 0x47, 0xb5, 0x61, 0xa3, 0x3f, 0x66, 0x6d, 0x69, 0x23, 0xf8, 0xc6, 0x88, 0x3e, 0x4f, 0x6b, 0x06, - 0x10, 0x4a, 0xb4, 0x82, 0xd3, 0x36, 0x03, 0x92, 0x0a, 0xcf, 0x1e, 0xe8, 0xdf, 0x97, 0xc1, 0x7c, - 0x0b, 0xfa, 0xa1, 0x14, 0x53, 0x6c, 0x72, 0xc4, 0xc3, 0xcb, 0x41, 0x29, 0x1f, 0x0e, 0xca, 0x77, - 0x0a, 0x5f, 0xbc, 0xcb, 0x4b, 0x33, 0x24, 0x36, 0x11, 0x3c, 0xdf, 0x22, 0x74, 0xdf, 0xae, 0x18, - 0x07, 0x53, 0x38, 0xbe, 0xf6, 0x70, 0x30, 0x8b, 0x79, 0xc1, 0x0d, 0xf6, 0x27, 0xf2, 0x51, 0xe3, - 0xfd, 0x52, 0x46, 0x8d, 0xf7, 0x49, 0xa0, 0xb0, 0x67, 0xba, 0x17, 0x83, 0xc3, 0xb7, 0x8f, 0x10, - 0x5b, 0xfd, 0xf2, 0x0c, 0xf2, 0xd5, 0x70, 0x3f, 0xcd, 0x42, 0x3a, 0x3f, 0xcd, 0xd7, 0x4b, 0xa9, - 0x46, 0x42, 0x32, 0x77, 0x98, 0x60, 0x93, 0x4f, 0x31, 0x6e, 0x26, 0x94, 0x9d, 0xbd, 0x72, 0xbc, - 0x50, 0x06, 0x25, 0x34, 0x6e, 0x63, 0x7b, 0xfc, 0xfc, 0xe1, 0xd5, 0x61, 0xb8, 0xa1, 0x9f, 0xb2, - 0x07, 0x0e, 0x24, 0x32, 0x39, 0xf3, 0x3e, 0x45, 0x0f, 0x9c, 0x54, 0x78, 0xf6, 0x78, 0xbc, 0x9b, - 0xe0, 0x81, 0xdb, 0x83, 0xf6, 0x06, 0x19, 0xc8, 0xab, 0xd0, 0x9f, 0xb6, 0x15, 0xf9, 0x76, 0xe1, - 0xf0, 0xa2, 0x9c, 0xc0, 0x30, 0xcf, 0x4b, 0xab, 0x70, 0x32, 0x0d, 0x48, 0x2c, 0xae, 0xa8, 0x10, - 0x03, 0xd9, 0xa3, 0xf6, 0x7e, 0x82, 0x1a, 0xd9, 0x5c, 0xf8, 0x91, 0x09, 0xf4, 0xaa, 0xd3, 0x5d, - 0xf8, 0x08, 0x04, 0x88, 0x69, 0x1c, 0x55, 0x7b, 0x1b, 0x56, 0x78, 0xf6, 0xc8, 0xbd, 0x54, 0xc6, - 0x97, 0x98, 0x55, 0x76, 0x61, 0xe7, 0x22, 0xec, 0xb2, 0x97, 0x65, 0x8f, 0x0b, 0xdd, 0x69, 0x30, - 0xd3, 0x21, 0xd4, 0x30, 0x78, 0x25, 0x23, 0x78, 0xe4, 0x6f, 0x16, 0x4a, 0xbc, 0x3b, 0x8b, 0xef, - 0x88, 0xc8, 0xe7, 0x13, 0xc1, 0x45, 0xec, 0xc2, 0x2b, 0x81, 0xe2, 0xa7, 0x60, 0xb6, 0x90, 0x59, - 0x46, 0xad, 0xe3, 0xd8, 0xda, 0x7f, 0x3d, 0x3c, 0x2c, 0xd7, 0x81, 0x59, 0xab, 0xe3, 0xd8, 0x38, - 0x04, 0x5c, 0x70, 0x08, 0x28, 0x4c, 0x08, 0xde, 0xea, 0x7b, 0xce, 0x7d, 0x16, 0xdd, 0x35, 0x8f, - 0x12, 0xc6, 0x35, 0x26, 0x10, 0xeb, 0x47, 0x65, 0x4c, 0x0c, 0x29, 0x3b, 0x7b, 0xc8, 0x3e, 0x15, - 0x79, 0xb7, 0x91, 0xae, 0xf0, 0x01, 0xb1, 0x0a, 0x3c, 0xce, 0x70, 0xc6, 0xd6, 0xe2, 0x48, 0x86, - 0xb3, 0x04, 0x06, 0xa6, 0x70, 0x13, 0x61, 0x84, 0x63, 0xe6, 0x6b, 0xc0, 0x87, 0x40, 0x67, 0x72, - 0xe6, 0xe1, 0x98, 0xe8, 0x1c, 0x8d, 0x89, 0xf8, 0x11, 0x1a, 0x9e, 0x9e, 0x5a, 0x3c, 0xda, 0x7f, - 0x9b, 0x04, 0x38, 0x77, 0x8c, 0xe3, 0xaf, 0x40, 0xbc, 0x15, 0xb4, 0xb7, 0x4a, 0xa2, 0x21, 0x50, - 0x0e, 0x48, 0x10, 0x51, 0x99, 0x08, 0x82, 0x6f, 0x12, 0x8a, 0x4d, 0x22, 0x52, 0x7e, 0xf6, 0x00, - 0xbe, 0x40, 0x06, 0x8b, 0xd8, 0x47, 0xa0, 0x07, 0x4d, 0x97, 0x74, 0x94, 0x13, 0x71, 0x94, 0x7f, - 0xb7, 0x70, 0x80, 0x1f, 0x5e, 0x0e, 0x11, 0x1f, 0x13, 0x81, 0x42, 0x2c, 0xba, 0x8f, 0x20, 0x0b, - 0x53, 0xd9, 0x46, 0x51, 0x42, 0x16, 0xa8, 0x8a, 0x4f, 0x06, 0x8f, 0x94, 0x1e, 0xb9, 0xbc, 0x30, - 0x82, 0xc6, 0x36, 0x65, 0x8f, 0x5c, 0x11, 0x26, 0xb2, 0xc7, 0xe4, 0x0d, 0x8f, 0xa6, 0x0b, 0xce, - 0x6d, 0xf3, 0x42, 0x0f, 0x6a, 0xaf, 0xca, 0x87, 0x27, 0xda, 0x7e, 0x7f, 0x22, 0x1e, 0x98, 0x87, - 0xb8, 0x8c, 0x4a, 0x05, 0x79, 0xd7, 0xb9, 0x4c, 0x96, 0xb6, 0x16, 0x0c, 0xfc, 0x9f, 0xc4, 0xb3, - 0xec, 0xed, 0xef, 0xd9, 0xe4, 0x64, 0xe8, 0x82, 0x11, 0x3c, 0xaa, 0x37, 0x80, 0x85, 0xcb, 0x96, - 0xbf, 0xbb, 0x06, 0xcd, 0x2e, 0x74, 0x0d, 0xe7, 0x32, 0xf6, 0x98, 0x2b, 0x19, 0x7c, 0x22, 0xef, - 0xbf, 0x22, 0x60, 0x5f, 0x22, 0xa1, 0x4c, 0xe7, 0xf8, 0x5b, 0x1a, 0xcb, 0x33, 0x9e, 0xab, 0xec, - 0x15, 0xe6, 0x03, 0x32, 0x98, 0x35, 0x9c, 0xcb, 0x54, 0x49, 0xfe, 0x9f, 0xa3, 0xd5, 0x91, 0xd4, - 0x13, 0x3d, 0x2c, 0xb9, 0x90, 0xfd, 0xa9, 0x4f, 0xf4, 0x12, 0x8b, 0x9f, 0xca, 0xc9, 0xa5, 0x79, - 0xc3, 0xb9, 0xdc, 0x82, 0x3e, 0x69, 0x11, 0xda, 0xd6, 0x84, 0x9c, 0xac, 0x2d, 0x8f, 0x10, 0xa4, - 0xf3, 0xf0, 0xf0, 0x39, 0xed, 0x2e, 0x42, 0x28, 0xa0, 0x90, 0xc5, 0x69, 0xef, 0x22, 0x8c, 0xe4, - 0x60, 0x0a, 0x31, 0x52, 0x64, 0x30, 0x67, 0x38, 0x97, 0xd1, 0xd0, 0xb0, 0x62, 0xf5, 0x7a, 0x93, - 0x19, 0x21, 0xd3, 0x1a, 0xff, 0x81, 0x18, 0x02, 0x2e, 0xa6, 0x6e, 0xfc, 0x8f, 0x60, 0x20, 0x7b, - 0x18, 0x9e, 0x4b, 0x1a, 0x4b, 0x30, 0x42, 0xdb, 0x93, 0xc1, 0x61, 0xdc, 0x06, 0x11, 0xb2, 0x71, - 0x64, 0x0d, 0x22, 0x8e, 0x83, 0xa9, 0xec, 0x9c, 0x2c, 0x56, 0xf0, 0x30, 0x3f, 0xd9, 0x36, 0xf1, - 0xde, 0x74, 0xae, 0x89, 0x74, 0xd8, 0xe5, 0x18, 0x99, 0x08, 0x1a, 0x29, 0x5c, 0x10, 0x05, 0x78, - 0xc8, 0x1e, 0x8f, 0x8f, 0xcb, 0x60, 0x9e, 0xb0, 0xf0, 0x00, 0xb1, 0x02, 0xc6, 0x6a, 0x54, 0x6c, - 0x0d, 0x8e, 0xa6, 0x51, 0x25, 0x70, 0x30, 0x95, 0xfb, 0xfc, 0x91, 0x1d, 0x37, 0xc6, 0xf1, 0xf1, - 0x38, 0x04, 0xc7, 0x36, 0xc6, 0x26, 0x78, 0x84, 0x7c, 0x1c, 0x63, 0xec, 0x88, 0x8e, 0x91, 0x3f, - 0x37, 0x6c, 0x45, 0x93, 0xc4, 0xe0, 0x10, 0x4d, 0x61, 0x82, 0x30, 0x8c, 0xd9, 0x14, 0x8e, 0x08, - 0x89, 0xaf, 0xcb, 0x00, 0x10, 0x06, 0xd6, 0x9d, 0x4b, 0xf8, 0x22, 0xcd, 0x09, 0x74, 0x67, 0x83, - 0x6e, 0xf5, 0xf2, 0x08, 0xb7, 0xfa, 0x94, 0x21, 0x5c, 0xd2, 0xae, 0x04, 0x32, 0x52, 0x46, 0x95, - 0x9c, 0xfa, 0x4a, 0x60, 0x72, 0xf9, 0xd9, 0x63, 0xfc, 0x55, 0x62, 0xcd, 0x45, 0x07, 0x4c, 0x7f, - 0x7e, 0x22, 0x28, 0x33, 0xb3, 0x7f, 0x99, 0x9f, 0xfd, 0x1f, 0x02, 0xdb, 0x71, 0x6d, 0xc4, 0x51, - 0x07, 0x47, 0xb3, 0xb7, 0x11, 0x8f, 0xee, 0x80, 0xe8, 0x8f, 0xe4, 0xc1, 0x71, 0xda, 0x89, 0x7c, - 0x3f, 0x40, 0x9c, 0xf2, 0x1c, 0x1e, 0xd7, 0x49, 0x8e, 0x40, 0x79, 0x52, 0x0b, 0x52, 0x69, 0x96, - 0x32, 0x05, 0xd8, 0x9b, 0xca, 0xea, 0x46, 0x51, 0xbf, 0xbf, 0x6f, 0xda, 0x5d, 0xf1, 0x70, 0xbf, - 0x23, 0x80, 0x0f, 0xd6, 0x1a, 0x65, 0x7e, 0xad, 0x71, 0xc8, 0xca, 0x64, 0xea, 0x9d, 0x6b, 0x2c, - 0x32, 0xc2, 0xee, 0xd4, 0x77, 0xae, 0xe3, 0xcb, 0xce, 0x1e, 0xa5, 0xf7, 0xca, 0x20, 0xdf, 0x72, - 0x5c, 0x5f, 0x7b, 0x5e, 0x9a, 0xd6, 0x49, 0x24, 0x1f, 0x81, 0x14, 0x3c, 0xab, 0x15, 0x90, 0x47, - 0x95, 0xa3, 0x33, 0x86, 0x5b, 0x93, 0x8f, 0x3a, 0x9b, 0xbe, 0x89, 0xbd, 0xba, 0x51, 0xf9, 0x4b, - 0xed, 0x2b, 0x7d, 0x68, 0xe0, 0x8f, 0xd3, 0xc6, 0xd3, 0x21, 0xf2, 0x6b, 0xc5, 0x1f, 0xc0, 0xc8, - 0x2c, 0x9e, 0x4e, 0x6c, 0xc9, 0xd9, 0xe3, 0xf6, 0xda, 0xe3, 0xd4, 0xb7, 0x75, 0xc5, 0xea, 0x41, - 0xed, 0x79, 0xc4, 0x65, 0xa4, 0x61, 0xee, 0x41, 0xf1, 0x23, 0x31, 0x89, 0xae, 0xad, 0x38, 0xbe, - 0xac, 0x1c, 0xc5, 0x97, 0x4d, 0xdb, 0xa0, 0xc8, 0x01, 0x74, 0xc2, 0xd2, 0xb4, 0x1b, 0x54, 0x42, - 0xd9, 0x53, 0x89, 0xd3, 0x79, 0xa2, 0x05, 0x7d, 0x62, 0x54, 0x36, 0x83, 0x2b, 0x92, 0x9e, 0x3e, - 0x91, 0x88, 0x9d, 0xe1, 0x85, 0x3a, 0xf2, 0xc0, 0x0d, 0x4c, 0x1f, 0x60, 0xc1, 0x59, 0xe7, 0xc1, - 0xf9, 0xa1, 0x78, 0x01, 0xf1, 0x4c, 0x4e, 0x04, 0xa6, 0xb7, 0x87, 0x30, 0x6d, 0x70, 0x30, 0xdd, - 0x39, 0x26, 0x17, 0xd9, 0x03, 0xf6, 0x53, 0x05, 0x70, 0x9c, 0x4c, 0xfa, 0xcb, 0x76, 0x97, 0x46, - 0x58, 0x7d, 0xb3, 0x74, 0xc4, 0x9b, 0x6d, 0x07, 0x43, 0xb0, 0x72, 0xb1, 0x9c, 0x0b, 0x03, 0xb1, - 0x9c, 0xd5, 0x65, 0x12, 0xce, 0x15, 0x75, 0xa2, 0x78, 0xa7, 0x6d, 0x54, 0x98, 0x09, 0x2c, 0x7b, - 0xdc, 0xe5, 0x86, 0xdf, 0xf1, 0xf7, 0x88, 0xce, 0x88, 0xdf, 0x23, 0xfa, 0xbb, 0xe9, 0xd6, 0xed, - 0x70, 0xd1, 0x03, 0x02, 0xcf, 0xd8, 0x76, 0x4a, 0xb1, 0xa2, 0x27, 0xc0, 0xdd, 0x7f, 0x0c, 0x77, - 0xb2, 0x28, 0x82, 0xc8, 0x98, 0xee, 0x64, 0x98, 0xc0, 0x51, 0xba, 0x93, 0x8d, 0x62, 0x20, 0x7b, - 0x1c, 0x7f, 0xb7, 0x40, 0x77, 0xf3, 0x71, 0xbb, 0xd1, 0xfe, 0x44, 0xca, 0x7c, 0x94, 0xfe, 0x6e, - 0x2e, 0x95, 0xff, 0x33, 0xe6, 0x2b, 0x79, 0x98, 0x4e, 0xe3, 0xd1, 0x9c, 0x44, 0x6e, 0x0a, 0xeb, - 0x46, 0x12, 0xf6, 0x45, 0x3f, 0x6f, 0x75, 0xfd, 0xdd, 0x09, 0x9d, 0xe8, 0xb8, 0x8c, 0x68, 0xd1, - 0x78, 0xf5, 0xe4, 0x41, 0xfb, 0x97, 0x5c, 0xaa, 0x10, 0x52, 0xa1, 0x48, 0x30, 0x5b, 0x31, 0x22, - 0x4e, 0x11, 0xf8, 0x29, 0x91, 0xde, 0x14, 0x35, 0xfa, 0x9c, 0xd5, 0x85, 0xce, 0x03, 0x50, 0xa3, - 0x31, 0x5f, 0x93, 0xd3, 0xe8, 0x24, 0x72, 0xff, 0x41, 0x35, 0x3a, 0x14, 0xc9, 0x84, 0x34, 0x3a, - 0x91, 0x5e, 0xf6, 0x32, 0x7e, 0xc5, 0x3c, 0x9d, 0x48, 0xd5, 0x2d, 0xfb, 0xa2, 0xf6, 0x8f, 0x45, - 0xa0, 0x04, 0x71, 0x84, 0xfd, 0x5d, 0x1a, 0x0b, 0xe6, 0xc3, 0xc2, 0x77, 0xa3, 0x8c, 0x11, 0xef, - 0x85, 0x0f, 0x27, 0x55, 0x38, 0x10, 0x4e, 0xaa, 0x0c, 0x16, 0x2c, 0xdb, 0x87, 0xae, 0x6d, 0xf6, - 0x56, 0x7a, 0xe6, 0x8e, 0x77, 0x7a, 0x66, 0xe8, 0xe5, 0x75, 0x35, 0x26, 0x8f, 0xc1, 0x7f, 0xc1, - 0x5e, 0x20, 0x5a, 0xe2, 0x2f, 0x10, 0x8d, 0x89, 0x7e, 0x35, 0x1b, 0x1f, 0xfd, 0x2a, 0x8c, 0x6e, - 0x05, 0x46, 0x07, 0xc7, 0x16, 0xb5, 0x8d, 0x53, 0x86, 0xfb, 0xbb, 0x55, 0x30, 0x0a, 0x5b, 0x18, - 0xfa, 0xf1, 0xd5, 0x72, 0xaa, 0xd5, 0x3d, 0xa4, 0x08, 0x4b, 0x83, 0x4a, 0x90, 0xda, 0x42, 0x65, - 0x2b, 0x2f, 0x0f, 0x54, 0x3e, 0x34, 0x79, 0xf2, 0x02, 0x26, 0x0f, 0xab, 0x54, 0x05, 0xd1, 0x3b, - 0x5d, 0xc5, 0x17, 0x0b, 0x45, 0x6a, 0x3b, 0x85, 0xd3, 0x48, 0x05, 0x70, 0x22, 0x88, 0x76, 0xdb, - 0xef, 0x43, 0xd3, 0x35, 0xed, 0x0e, 0xd4, 0x3e, 0x25, 0x4d, 0xc2, 0xec, 0x5d, 0x01, 0x25, 0xab, - 0xe3, 0xd8, 0x2d, 0xeb, 0x99, 0xc1, 0xe5, 0x72, 0xc9, 0x41, 0xd6, 0xb1, 0x44, 0x6a, 0xf4, 0x0b, - 0x23, 0xfc, 0x56, 0xad, 0x81, 0xd9, 0x8e, 0xe9, 0x76, 0x49, 0x10, 0xbe, 0xc2, 0xc0, 0x45, 0x4e, - 0xb1, 0x84, 0x2a, 0xc1, 0x27, 0x46, 0xf4, 0xb5, 0xda, 0xe4, 0x85, 0x58, 0x1c, 0x88, 0xe6, 0x11, - 0x4b, 0xac, 0x1a, 0x7d, 0xc4, 0xc9, 0x1c, 0x49, 0xc7, 0x85, 0x3d, 0x93, 0x5c, 0x3a, 0x3e, 0x43, - 0xee, 0x88, 0x0e, 0x13, 0xd2, 0x2e, 0x0f, 0xe0, 0xa2, 0x0e, 0xa0, 0x31, 0xed, 0xe5, 0x01, 0x21, - 0x2e, 0xb2, 0xd7, 0xcc, 0x77, 0x15, 0xc1, 0x02, 0xe9, 0xd5, 0xa8, 0x38, 0xb5, 0x17, 0xc8, 0xa0, - 0xd8, 0x82, 0xfe, 0x3d, 0xf0, 0x8a, 0xd6, 0x3a, 0xfc, 0x98, 0xac, 0x00, 0xf9, 0x62, 0x18, 0x70, - 0x10, 0xfd, 0x4d, 0xbb, 0x6f, 0x1f, 0xf0, 0xb5, 0x44, 0x78, 0x9a, 0xf6, 0xbe, 0x7d, 0x72, 0xf1, - 0xd9, 0xe3, 0xf3, 0xd3, 0x32, 0x90, 0xcb, 0xdd, 0xae, 0xd6, 0x39, 0x3c, 0x14, 0xd7, 0x83, 0xb9, - 0xa0, 0xcd, 0x44, 0x31, 0x20, 0xd9, 0xa4, 0xb4, 0x8b, 0xa0, 0xa1, 0x6c, 0xca, 0xdd, 0xa9, 0xef, - 0x2a, 0x24, 0x94, 0x9d, 0x3d, 0x28, 0x5f, 0x9a, 0xa1, 0x8d, 0x66, 0xd9, 0x71, 0x2e, 0xe2, 0xa3, - 0x32, 0xbf, 0x2c, 0x83, 0xc2, 0x0a, 0xf4, 0x3b, 0xbb, 0x9a, 0x37, 0x91, 0x36, 0x33, 0x70, 0xef, - 0xf9, 0x88, 0xa0, 0x9c, 0x69, 0xa3, 0x3f, 0x07, 0x6c, 0x2f, 0x61, 0x96, 0xa7, 0x1d, 0xfd, 0x39, - 0xb1, 0xf4, 0x29, 0x1c, 0x82, 0xcb, 0x83, 0xc5, 0x70, 0x05, 0x8c, 0x60, 0xf6, 0x8e, 0xdc, 0x03, - 0x6e, 0x3d, 0x74, 0x84, 0xdd, 0xac, 0xfd, 0x61, 0xba, 0x10, 0x6b, 0xa1, 0xcc, 0xf9, 0x9a, 0x67, - 0xbc, 0x30, 0x99, 0x22, 0xf8, 0x9a, 0x18, 0x83, 0x53, 0x58, 0x01, 0x90, 0x41, 0x09, 0x33, 0x54, - 0xb5, 0x2e, 0x61, 0xd7, 0x43, 0x6e, 0xa1, 0xf2, 0x59, 0x13, 0x59, 0xa8, 0xbc, 0x93, 0x5f, 0xa8, - 0x14, 0x8c, 0x98, 0x1c, 0xac, 0x53, 0xa6, 0xf4, 0xc5, 0x41, 0xdf, 0x4f, 0x7c, 0x99, 0x32, 0x85, - 0x2f, 0xce, 0x88, 0xf2, 0xb3, 0x47, 0xf4, 0x8d, 0xff, 0x99, 0x76, 0xd6, 0xc1, 0x86, 0xac, 0xf6, - 0x3f, 0x4e, 0x80, 0xfc, 0x39, 0xf4, 0xe7, 0x1f, 0xa2, 0x1b, 0xb5, 0x5e, 0x36, 0x81, 0xe0, 0x0e, - 0x4f, 0x06, 0x79, 0x44, 0x9f, 0x4e, 0x7b, 0x6e, 0x16, 0xdb, 0x1d, 0x46, 0x8c, 0x18, 0xf8, 0x3b, - 0xf5, 0x14, 0x28, 0x7a, 0xce, 0xbe, 0xdb, 0x41, 0xe6, 0x37, 0xd2, 0x18, 0xfa, 0x94, 0x36, 0xa8, - 0x29, 0x47, 0x7a, 0x69, 0x72, 0x2e, 0xa7, 0xcc, 0x05, 0x4b, 0x32, 0x77, 0xc1, 0x52, 0x8a, 0xfd, - 0x07, 0x01, 0xde, 0xb2, 0xd7, 0x88, 0x3f, 0xc1, 0x77, 0x0d, 0x76, 0x27, 0x05, 0x7b, 0x8c, 0x58, - 0x0e, 0xab, 0x0e, 0x69, 0x1d, 0xc6, 0x79, 0xd1, 0x86, 0x71, 0xe4, 0xa7, 0xea, 0x30, 0x2e, 0xc0, - 0xc3, 0x54, 0x4e, 0xb9, 0x17, 0xa9, 0x93, 0xeb, 0xbd, 0x93, 0x44, 0x37, 0xcf, 0x29, 0xfd, 0xa1, - 0xd0, 0x99, 0xa0, 0xf3, 0xeb, 0xd8, 0xe8, 0x1c, 0x91, 0xfb, 0xeb, 0x6f, 0xc8, 0x38, 0x92, 0x66, - 0x60, 0x04, 0x89, 0x5f, 0x94, 0x94, 0x1a, 0x22, 0x34, 0x06, 0x73, 0x71, 0xa4, 0x17, 0xc6, 0x0f, - 0x2d, 0xce, 0x8b, 0x8e, 0xe1, 0x7f, 0xda, 0xa1, 0xc5, 0x45, 0x19, 0xc9, 0x1e, 0xc8, 0x5f, 0x22, - 0x17, 0x93, 0x95, 0x3b, 0xbe, 0x75, 0x69, 0xc2, 0x2d, 0x8d, 0x1f, 0x5e, 0x52, 0x46, 0x13, 0x3e, - 0x20, 0x21, 0xc2, 0xe1, 0xb4, 0xa3, 0x09, 0x8b, 0xb1, 0x91, 0x3d, 0x4c, 0x3f, 0x09, 0x90, 0xf4, - 0xe8, 0xda, 0xce, 0x1b, 0x64, 0x20, 0xb7, 0xa0, 0xaf, 0xc1, 0xc3, 0xa3, 0x75, 0x16, 0xcc, 0x33, - 0x4b, 0x07, 0xc1, 0x85, 0x37, 0x5c, 0x5a, 0xda, 0x83, 0xf2, 0xa1, 0xc8, 0xd8, 0x45, 0x97, 0x69, - 0x1f, 0x94, 0x17, 0x61, 0x62, 0x0a, 0x07, 0xe5, 0xe9, 0xb2, 0xcf, 0xf7, 0x0b, 0x50, 0x93, 0x5a, - 0x01, 0x3a, 0x14, 0x50, 0x47, 0xb1, 0x14, 0xf4, 0xf6, 0xc8, 0xd8, 0x98, 0x12, 0x56, 0x1f, 0x66, - 0xb1, 0x6a, 0xf2, 0x58, 0xdd, 0x2e, 0x22, 0x26, 0x31, 0xe3, 0x43, 0x68, 0x82, 0xff, 0xce, 0x10, - 0x2e, 0x83, 0x83, 0xeb, 0xc9, 0x63, 0xf3, 0x91, 0x3d, 0x62, 0xbf, 0x40, 0xc6, 0xad, 0x16, 0x99, - 0x5b, 0x4d, 0x66, 0xdc, 0xa2, 0xd3, 0x36, 0x99, 0x9b, 0xb6, 0xa5, 0x3c, 0x58, 0x11, 0xf9, 0x0b, - 0x07, 0xcc, 0x8d, 0x82, 0x28, 0x3f, 0xe1, 0x83, 0x15, 0x23, 0x39, 0xc8, 0x1e, 0x9c, 0x6f, 0xc9, - 0x00, 0xac, 0xba, 0xce, 0x7e, 0xbf, 0xe9, 0x76, 0xa1, 0xab, 0xfd, 0x59, 0x34, 0x53, 0xfb, 0x99, - 0x09, 0xcc, 0xd4, 0x36, 0x00, 0xd8, 0x09, 0x89, 0x53, 0x0d, 0x7f, 0xb4, 0xd8, 0xbc, 0x2c, 0x62, - 0xca, 0x60, 0x68, 0xf0, 0x77, 0x0b, 0x3f, 0x95, 0xc7, 0x38, 0xa9, 0xcf, 0x8a, 0xc8, 0x4d, 0x72, - 0xa6, 0xf6, 0xee, 0x10, 0xeb, 0x36, 0x87, 0xf5, 0x53, 0x0e, 0xc1, 0x49, 0xf6, 0x98, 0xff, 0xfd, - 0x0c, 0x98, 0x23, 0xfb, 0xb2, 0x44, 0xa6, 0x7f, 0x1d, 0x81, 0xfe, 0xf3, 0x13, 0x00, 0x7d, 0x13, - 0xcc, 0x3b, 0x11, 0x75, 0xd2, 0xa7, 0xb2, 0x2b, 0x65, 0x89, 0xb0, 0x33, 0x7c, 0x19, 0x1c, 0x19, - 0xed, 0x13, 0x2c, 0xf2, 0x06, 0x8f, 0xfc, 0x9d, 0x09, 0xf2, 0x66, 0x28, 0x4e, 0x12, 0xfa, 0xf7, - 0x84, 0xd0, 0x6f, 0x72, 0xd0, 0x97, 0x0f, 0xc3, 0xca, 0x14, 0xee, 0x55, 0x90, 0x41, 0x1e, 0x1f, - 0x83, 0x7c, 0x4b, 0x86, 0x0b, 0x31, 0xa7, 0xc1, 0x0c, 0x6e, 0xb2, 0xe1, 0x04, 0x31, 0x78, 0x44, - 0x6f, 0xcc, 0x6d, 0x1f, 0xba, 0xe1, 0x12, 0x7b, 0xf0, 0x88, 0x78, 0x08, 0xdc, 0xcf, 0xbd, 0xd3, - 0x45, 0xb2, 0xe3, 0x1c, 0x26, 0x8c, 0x3d, 0x7b, 0x64, 0x25, 0x3e, 0xb1, 0x83, 0x91, 0xe3, 0xcc, - 0x1e, 0x47, 0x30, 0x92, 0x3d, 0xf0, 0x5f, 0xce, 0x83, 0xd3, 0x64, 0xf9, 0x6f, 0xc5, 0x75, 0xf6, - 0x06, 0xae, 0x31, 0xb3, 0x0e, 0xaf, 0x0b, 0x37, 0x82, 0x45, 0x9f, 0x73, 0xbc, 0xa7, 0x3a, 0x31, - 0x90, 0xaa, 0xfd, 0x1e, 0xeb, 0x3c, 0xf3, 0x34, 0x1e, 0xc9, 0xe5, 0x04, 0x01, 0xc6, 0xf1, 0x9e, - 0x7a, 0x47, 0x45, 0x90, 0x51, 0x66, 0x35, 0x51, 0x1e, 0x6b, 0x71, 0x39, 0xd4, 0xa9, 0x82, 0x88, - 0x4e, 0x7d, 0x30, 0xd4, 0xa9, 0xff, 0xc4, 0xe9, 0xd4, 0xea, 0xe1, 0x45, 0x32, 0x85, 0x25, 0xa6, - 0x45, 0x50, 0x5c, 0xb1, 0x7a, 0x3e, 0x74, 0xb5, 0xaf, 0xd2, 0x79, 0xd4, 0xab, 0x32, 0xec, 0x5e, - 0xaa, 0xa0, 0xb8, 0x8d, 0x4b, 0xa3, 0x06, 0xd9, 0x2d, 0x62, 0xd8, 0x10, 0x0e, 0x0d, 0xfa, 0x6d, - 0xda, 0x20, 0x7f, 0x03, 0x64, 0x26, 0x36, 0x01, 0x4b, 0x11, 0xe4, 0x6f, 0x34, 0x0b, 0x53, 0xb9, - 0xdf, 0xaa, 0x68, 0xc0, 0x3d, 0x34, 0x82, 0x5c, 0xcc, 0x0e, 0x61, 0x05, 0xc8, 0x56, 0xd7, 0xc3, - 0x4d, 0x6f, 0xd6, 0x40, 0x7f, 0xd3, 0xba, 0x1c, 0x0d, 0x8a, 0x8a, 0xb0, 0x3c, 0x6d, 0x97, 0x23, - 0x21, 0x2e, 0xb2, 0xc7, 0xec, 0xbb, 0xd8, 0xdf, 0xb4, 0xdf, 0x33, 0x3b, 0x10, 0x71, 0x9f, 0x19, - 0x6a, 0x8b, 0x40, 0xb2, 0x82, 0x11, 0x5f, 0xb2, 0xd8, 0x76, 0x5a, 0x38, 0x44, 0x3b, 0x1d, 0x77, - 0x35, 0x32, 0x94, 0x39, 0xae, 0xf8, 0x91, 0xad, 0x46, 0x26, 0xb2, 0x31, 0x85, 0xdb, 0x4b, 0x83, - 0xf3, 0xb8, 0x53, 0x6d, 0xad, 0xe3, 0xee, 0xd5, 0x50, 0x61, 0x4d, 0xec, 0xec, 0xed, 0x38, 0x7b, - 0x35, 0xf1, 0x3c, 0x4c, 0x01, 0xad, 0x45, 0x8a, 0xd6, 0x17, 0xe8, 0x30, 0x9a, 0xf1, 0x76, 0xa9, - 0xe7, 0xb8, 0x7e, 0xba, 0xed, 0x52, 0xc4, 0x9d, 0x81, 0xbf, 0x4b, 0x7b, 0x7e, 0x8b, 0x3f, 0x9e, - 0x3d, 0xa9, 0xe1, 0x33, 0xc5, 0xf9, 0xad, 0x51, 0x0c, 0x64, 0x0f, 0xef, 0x5b, 0x8f, 0x68, 0xf0, - 0x1c, 0xb7, 0x39, 0xd2, 0x36, 0x30, 0xb1, 0xa1, 0x73, 0x9c, 0xe6, 0x18, 0xcf, 0x43, 0xf6, 0x78, - 0xfd, 0x1d, 0x33, 0x70, 0xbe, 0x69, 0x8a, 0x03, 0x67, 0xd0, 0x32, 0x0b, 0x63, 0xb6, 0xcc, 0x71, - 0x77, 0x17, 0xa8, 0xac, 0x27, 0x37, 0x60, 0x8e, 0xb3, 0xbb, 0x90, 0xc0, 0x44, 0xf6, 0x88, 0xbf, - 0x59, 0x06, 0x85, 0xd6, 0xf4, 0xc7, 0xcb, 0x71, 0xe7, 0x22, 0x58, 0x56, 0xad, 0x89, 0x0d, 0x97, - 0xe3, 0xcc, 0x45, 0x62, 0x59, 0x98, 0x42, 0xfc, 0xfe, 0xe3, 0x60, 0x1e, 0x4f, 0xb8, 0x83, 0xdd, - 0xd6, 0xbf, 0xa3, 0xa3, 0xe6, 0xeb, 0x33, 0x6c, 0xab, 0x77, 0x83, 0x52, 0xb0, 0x3b, 0x44, 0x47, - 0xce, 0x25, 0xb1, 0xf6, 0x19, 0x70, 0x69, 0x84, 0xdf, 0x1f, 0xca, 0x27, 0x62, 0xe2, 0x3b, 0x81, - 0xe3, 0xfa, 0x44, 0x1c, 0xe9, 0x6e, 0xe0, 0xef, 0x46, 0x23, 0xea, 0x7f, 0xcd, 0x0e, 0xf3, 0xc1, - 0x5d, 0xc2, 0xfc, 0x90, 0x5d, 0xc2, 0x4f, 0xb1, 0x58, 0xb6, 0x78, 0x2c, 0x9f, 0x24, 0x2a, 0xc2, - 0x09, 0x8e, 0xb5, 0xef, 0x0d, 0xe1, 0x3c, 0xc7, 0xc1, 0xb9, 0x7c, 0x28, 0x5e, 0xa6, 0x70, 0x7e, - 0x32, 0x1f, 0x8d, 0xb9, 0x9f, 0xce, 0xb0, 0x1d, 0x0f, 0x1c, 0xce, 0xc8, 0x1f, 0x38, 0x9c, 0xc1, - 0xb5, 0xf4, 0xc2, 0x21, 0x5b, 0xfa, 0xa7, 0x59, 0xed, 0x68, 0xf3, 0xda, 0xf1, 0x64, 0x71, 0x44, - 0x26, 0x37, 0x32, 0xbf, 0x2f, 0x54, 0x8f, 0xf3, 0x9c, 0x7a, 0x54, 0x0e, 0xc7, 0x4c, 0xf6, 0xfa, - 0xf1, 0x9b, 0xc1, 0x84, 0xf6, 0x88, 0xdb, 0xfb, 0xb8, 0x1b, 0x91, 0x9c, 0x10, 0x27, 0x36, 0x72, - 0x8f, 0xb3, 0x11, 0x39, 0x8a, 0x93, 0x29, 0x84, 0x74, 0x5b, 0x00, 0x73, 0x98, 0xa7, 0xf3, 0x56, - 0x77, 0x07, 0xfa, 0xda, 0xab, 0x89, 0xab, 0x62, 0x10, 0x40, 0x73, 0x42, 0x51, 0x8e, 0xe2, 0x8e, - 0xcd, 0xa6, 0xf5, 0x17, 0x20, 0x4c, 0x2e, 0x31, 0x0c, 0x4e, 0x3b, 0x10, 0xe3, 0x48, 0x0e, 0xb2, - 0x87, 0xec, 0x13, 0xc4, 0x99, 0xa3, 0x6e, 0x5e, 0x71, 0xf6, 0x7d, 0xed, 0x39, 0x13, 0xe8, 0xa0, - 0x97, 0x41, 0xb1, 0x87, 0xa9, 0xd1, 0xd3, 0x19, 0xc9, 0xd3, 0x1d, 0x2a, 0x02, 0x52, 0xbe, 0x41, - 0xbf, 0x4c, 0x7b, 0x44, 0x23, 0x92, 0x23, 0xa1, 0x33, 0xed, 0x23, 0x1a, 0x23, 0xca, 0x9f, 0xca, - 0x55, 0x3d, 0x25, 0x54, 0xba, 0xb5, 0x67, 0xf9, 0x13, 0x0a, 0x04, 0xd1, 0x43, 0xb4, 0x82, 0x40, - 0x10, 0xf8, 0x21, 0xed, 0xc1, 0x53, 0x46, 0x2a, 0xe8, 0xf3, 0x69, 0x1f, 0x3c, 0x4d, 0x2e, 0x3e, - 0x7b, 0x4c, 0x7e, 0x8e, 0xb4, 0xac, 0x73, 0xc4, 0x07, 0x37, 0x43, 0xf7, 0xde, 0xb1, 0x1b, 0x0b, - 0x61, 0xed, 0xe8, 0x1a, 0xcb, 0xd0, 0xf2, 0xb3, 0x07, 0xe6, 0x97, 0x7f, 0x00, 0x14, 0xaa, 0xf0, - 0xc2, 0xfe, 0x8e, 0x76, 0x27, 0x28, 0xb5, 0x5d, 0x08, 0x6b, 0xf6, 0xb6, 0x83, 0xa4, 0xeb, 0xa3, - 0xff, 0x01, 0x24, 0xf4, 0x09, 0xe1, 0xb1, 0x0b, 0xcd, 0x6e, 0x74, 0x0c, 0x2d, 0x78, 0xd4, 0x5e, - 0x26, 0x81, 0x7c, 0xcb, 0x37, 0x7d, 0x6d, 0x36, 0xc4, 0x56, 0x7b, 0x0e, 0x8b, 0xc5, 0x9d, 0x3c, - 0x16, 0x37, 0x72, 0xb2, 0xc0, 0x1c, 0x2c, 0xa1, 0xef, 0x63, 0x00, 0xd0, 0x40, 0xe9, 0x3e, 0xcf, - 0xb1, 0x51, 0x8e, 0xe0, 0xa4, 0x64, 0xf0, 0xac, 0xbd, 0x32, 0x14, 0xf7, 0x5d, 0x9c, 0xb8, 0x1f, - 0x29, 0x56, 0xc4, 0x14, 0x56, 0xda, 0x24, 0x30, 0x8b, 0x44, 0xbb, 0x06, 0xcd, 0xae, 0xa7, 0x3d, - 0x34, 0x52, 0xfe, 0x18, 0x31, 0x6b, 0x1f, 0x11, 0x8e, 0xe9, 0x49, 0x6a, 0x15, 0x12, 0x8f, 0xf7, - 0x17, 0x08, 0x62, 0x9a, 0x48, 0x7c, 0x4c, 0x93, 0x5b, 0x41, 0xde, 0xb2, 0xb7, 0x1d, 0xea, 0xbd, - 0x76, 0x6d, 0x0c, 0x6d, 0xa4, 0x13, 0x06, 0xce, 0x28, 0x18, 0xf0, 0x33, 0x99, 0xad, 0xa9, 0xdc, - 0x9d, 0x97, 0x47, 0xa5, 0x6b, 0xff, 0xf7, 0x48, 0x61, 0xab, 0x2a, 0xc8, 0xf7, 0x4d, 0x7f, 0x97, - 0x16, 0x8d, 0xff, 0x23, 0x1b, 0x79, 0xdf, 0x36, 0x6d, 0xc7, 0xbe, 0xb2, 0x67, 0x3d, 0x33, 0xbc, - 0xa2, 0x97, 0x4b, 0x43, 0x9c, 0xef, 0x40, 0x1b, 0xba, 0xa6, 0x0f, 0x5b, 0x97, 0x76, 0xf0, 0x1c, - 0xab, 0x64, 0xb0, 0x49, 0xa9, 0xf5, 0x1f, 0x71, 0x1c, 0xaf, 0xff, 0xdb, 0x56, 0x0f, 0xe2, 0x80, - 0x4f, 0x54, 0xff, 0x83, 0xe7, 0x54, 0xfa, 0x3f, 0xa4, 0x88, 0xec, 0xd1, 0xf8, 0x57, 0x09, 0xcc, - 0xb7, 0x90, 0xc2, 0xb5, 0xf6, 0xf7, 0xf6, 0x4c, 0xf7, 0x8a, 0xf6, 0xb0, 0x08, 0x15, 0x46, 0x35, - 0x73, 0x9c, 0x6a, 0x6a, 0xbf, 0x21, 0x7c, 0x3b, 0x35, 0x6d, 0xda, 0x4c, 0x09, 0xa9, 0xdb, 0xc1, - 0x63, 0x40, 0x01, 0xa9, 0x77, 0xe0, 0xcf, 0x97, 0xd8, 0x10, 0x48, 0x4e, 0xc1, 0xc0, 0x58, 0x23, - 0x79, 0x9b, 0x42, 0x50, 0x0e, 0x09, 0x1c, 0x6f, 0xf9, 0x66, 0xe7, 0xe2, 0xaa, 0xe3, 0x3a, 0xfb, - 0xbe, 0x65, 0x43, 0x4f, 0x7b, 0x70, 0x84, 0x40, 0xa0, 0xff, 0xb9, 0x48, 0xff, 0xb5, 0x7f, 0xcb, - 0x89, 0x8e, 0xa2, 0x61, 0xb7, 0xca, 0x92, 0x8f, 0x89, 0x73, 0x25, 0x36, 0x2e, 0x8a, 0x50, 0xcc, - 0x5e, 0x68, 0x6f, 0x92, 0x81, 0xa2, 0xdf, 0xdf, 0x77, 0x5c, 0xbf, 0xee, 0x74, 0xcc, 0x9e, 0xe7, - 0x3b, 0x2e, 0xd4, 0x9a, 0x89, 0x52, 0x43, 0x3d, 0x4c, 0xd7, 0xe9, 0x44, 0x83, 0x23, 0x7d, 0x62, - 0xd5, 0x4e, 0xe6, 0x75, 0xfc, 0x13, 0xc2, 0xbb, 0x8c, 0x44, 0x2a, 0x83, 0x1c, 0xc5, 0xe8, 0xf9, - 0xb0, 0x2e, 0x2d, 0x9d, 0x2b, 0xbe, 0xd8, 0xce, 0xa3, 0x10, 0x53, 0x53, 0x58, 0x2a, 0x97, 0xc0, - 0x42, 0x6b, 0xff, 0x42, 0x48, 0xc4, 0x63, 0x8d, 0x90, 0xd7, 0x08, 0x07, 0xb3, 0xa0, 0x8a, 0xc7, - 0x12, 0x8a, 0x91, 0xef, 0x0d, 0x60, 0xc1, 0x63, 0xb3, 0x51, 0xbc, 0xf9, 0x44, 0xc1, 0x20, 0x16, - 0xa3, 0x4b, 0xcd, 0x5e, 0x80, 0xef, 0x93, 0xc0, 0x42, 0xb3, 0x0f, 0x6d, 0xd8, 0x25, 0x3e, 0x76, - 0x9c, 0x00, 0x5f, 0x96, 0x52, 0x80, 0x1c, 0xa1, 0x18, 0x01, 0x46, 0xfe, 0xb0, 0xd5, 0x40, 0x78, - 0x51, 0x42, 0x2a, 0xc1, 0x25, 0x95, 0x96, 0xbd, 0xe0, 0xbe, 0x22, 0x81, 0x39, 0x63, 0xdf, 0xde, - 0x70, 0x1d, 0x34, 0x1a, 0xbb, 0xda, 0x93, 0xa2, 0x0e, 0xe2, 0x16, 0x70, 0xa2, 0xbb, 0xef, 0xe2, - 0xf5, 0xa7, 0x9a, 0xdd, 0x82, 0x1d, 0xc7, 0xee, 0x7a, 0xb8, 0x1e, 0x05, 0xe3, 0xe0, 0x8b, 0x3b, - 0xf2, 0xcf, 0xfb, 0x86, 0x9c, 0xd3, 0x5e, 0x20, 0x1c, 0x31, 0x87, 0x54, 0x9e, 0x29, 0x5a, 0xbc, - 0x27, 0x10, 0x8c, 0x8b, 0x33, 0xaa, 0x84, 0xec, 0x85, 0xfb, 0x05, 0x09, 0xa8, 0xe5, 0x4e, 0xc7, - 0xd9, 0xb7, 0xfd, 0x16, 0xec, 0xc1, 0x8e, 0xdf, 0x76, 0xcd, 0x0e, 0x64, 0xed, 0x67, 0x05, 0xc8, - 0x5d, 0xcb, 0xa5, 0x7d, 0x30, 0xfa, 0x4b, 0xe5, 0xf8, 0x32, 0xe1, 0x1d, 0x47, 0x52, 0xcb, 0x83, - 0xa5, 0xa4, 0x10, 0xa7, 0xd8, 0xbe, 0xa2, 0x60, 0x41, 0xd9, 0x4b, 0xf5, 0xd3, 0x12, 0x98, 0x0d, - 0x7a, 0xec, 0x1d, 0x11, 0x61, 0xfe, 0x5c, 0xca, 0xc9, 0x48, 0x48, 0x3c, 0x85, 0x0c, 0xdf, 0x95, - 0x62, 0x56, 0x11, 0x47, 0x3f, 0x9d, 0xe8, 0xca, 0xe9, 0x45, 0x87, 0x1e, 0x1b, 0xcd, 0xad, 0x95, - 0x66, 0xbd, 0xaa, 0x1b, 0x8a, 0xac, 0x7d, 0x55, 0x02, 0xf9, 0x0d, 0xcb, 0xde, 0x61, 0x03, 0x9b, - 0x9d, 0x44, 0x76, 0x64, 0x17, 0xde, 0x4f, 0x5b, 0x3a, 0x79, 0x50, 0x6f, 0x03, 0x27, 0xed, 0xfd, - 0xbd, 0x0b, 0xd0, 0x6d, 0x6e, 0xe3, 0x51, 0xd6, 0x6b, 0x3b, 0x2d, 0x68, 0x13, 0x23, 0xb4, 0x60, - 0x0c, 0x7d, 0xc7, 0x9b, 0x60, 0x02, 0x93, 0x07, 0xc4, 0x49, 0x8c, 0xc4, 0x43, 0xa6, 0x24, 0x86, - 0xa9, 0x54, 0xd3, 0x86, 0x21, 0xc4, 0xb3, 0xd7, 0xd4, 0xdf, 0x2a, 0x80, 0xab, 0xcb, 0xf6, 0x15, - 0x6c, 0x53, 0x90, 0x0e, 0xbe, 0xb2, 0x6b, 0xda, 0x3b, 0x10, 0x0f, 0x10, 0xa1, 0xc4, 0xd9, 0x48, - 0xff, 0x39, 0x3e, 0xd2, 0xbf, 0x6a, 0x80, 0x19, 0xc7, 0xed, 0x42, 0x77, 0xf9, 0x0a, 0xe6, 0x69, - 0x70, 0xd9, 0x99, 0xb6, 0xc9, 0x61, 0x45, 0x2c, 0x51, 0xf2, 0x4b, 0x4d, 0xf2, 0xbd, 0x11, 0x10, - 0x3a, 0x7b, 0x0b, 0x98, 0xa1, 0x69, 0xea, 0x3c, 0x28, 0x35, 0x8d, 0xaa, 0x6e, 0x6c, 0xd5, 0xaa, - 0xca, 0x31, 0xf5, 0x2a, 0x70, 0xbc, 0xd6, 0xd6, 0x8d, 0x72, 0xbb, 0xd6, 0x6c, 0x6c, 0xe1, 0x74, - 0x25, 0xa7, 0x3d, 0x37, 0x2f, 0xea, 0xd9, 0x9b, 0xcc, 0xcc, 0x30, 0x58, 0x0d, 0x30, 0xd3, 0x21, - 0x19, 0xf0, 0x10, 0x3a, 0x97, 0xaa, 0x76, 0x94, 0x20, 0x49, 0x30, 0x02, 0x42, 0xea, 0x19, 0x00, - 0x2e, 0xbb, 0x8e, 0xbd, 0x13, 0x9d, 0x69, 0x2b, 0x19, 0x4c, 0x8a, 0xf6, 0x9c, 0x1c, 0x28, 0x92, - 0x6f, 0xf0, 0xcd, 0x26, 0xf8, 0x5f, 0x24, 0xf8, 0xe0, 0x19, 0x59, 0xbc, 0x58, 0x5e, 0xd1, 0x44, - 0x8b, 0x3e, 0x22, 0x5d, 0x24, 0x32, 0x20, 0x96, 0x30, 0xad, 0xca, 0xad, 0xa0, 0x48, 0xbe, 0xa5, - 0x5e, 0x07, 0xf1, 0x51, 0x4a, 0x49, 0x36, 0x41, 0x3f, 0x65, 0x71, 0x99, 0x66, 0xaf, 0xcd, 0x1f, - 0x95, 0x40, 0xa9, 0x01, 0xfd, 0xca, 0x2e, 0xec, 0x5c, 0xd4, 0x1e, 0xc1, 0x2f, 0x80, 0xf6, 0x2c, - 0x68, 0xfb, 0xf7, 0xee, 0xf5, 0xc2, 0x05, 0xd0, 0x20, 0x41, 0x7b, 0x3e, 0xdb, 0xf9, 0x3e, 0x85, - 0xd7, 0x9f, 0x9b, 0x87, 0xd4, 0x35, 0x28, 0x21, 0x46, 0x65, 0x4e, 0x81, 0xa2, 0x0b, 0xbd, 0xfd, - 0x5e, 0xb0, 0x88, 0x46, 0x9f, 0xb4, 0xd7, 0x86, 0xe2, 0xac, 0x70, 0xe2, 0xbc, 0x55, 0xbc, 0x88, - 0x29, 0x84, 0x3d, 0xcd, 0x83, 0x99, 0x9a, 0x6d, 0xf9, 0x96, 0xd9, 0xd3, 0x5e, 0x90, 0x07, 0x0b, - 0x2d, 0xe8, 0x6f, 0x98, 0xae, 0xb9, 0x07, 0x7d, 0xe8, 0x7a, 0xda, 0x77, 0xf8, 0x3e, 0xa1, 0xdf, - 0x33, 0xfd, 0x6d, 0xc7, 0xdd, 0x0b, 0x54, 0x33, 0x78, 0x46, 0xaa, 0x79, 0x09, 0xba, 0x5e, 0xc4, - 0x57, 0xf0, 0x88, 0xde, 0x5c, 0x76, 0xdc, 0x8b, 0x68, 0x10, 0xa4, 0xd3, 0x34, 0xfa, 0x88, 0xe8, - 0xf5, 0x9c, 0x9d, 0x3a, 0xbc, 0x04, 0x83, 0xa8, 0x6a, 0xe1, 0x33, 0x9a, 0x0b, 0x74, 0x9d, 0x86, - 0xe3, 0xa3, 0x4e, 0xbb, 0xee, 0xec, 0x90, 0xb0, 0xb3, 0x25, 0x83, 0x4f, 0x8c, 0x72, 0x99, 0x97, - 0x20, 0xce, 0x55, 0x64, 0x73, 0xd1, 0x44, 0x75, 0x09, 0xa8, 0xe1, 0x67, 0x6d, 0xd8, 0x83, 0x7b, - 0xd0, 0x77, 0xaf, 0xe0, 0xdb, 0x25, 0x4a, 0xc6, 0x90, 0x37, 0x74, 0x80, 0x16, 0x9f, 0xac, 0x53, - 0xe9, 0x2d, 0x71, 0x92, 0x3b, 0xd4, 0x64, 0x5d, 0x84, 0xe2, 0x54, 0x6e, 0xcf, 0x92, 0x91, 0x35, - 0xf3, 0x72, 0x19, 0xe4, 0xf1, 0xe0, 0xf9, 0xe6, 0x1c, 0xb7, 0xc2, 0xb4, 0x07, 0x3d, 0xcf, 0xdc, - 0x81, 0xc1, 0x0a, 0x13, 0x7d, 0x54, 0x6f, 0x07, 0x85, 0x1e, 0xc6, 0x94, 0x0c, 0x0e, 0x0f, 0xe3, - 0x6a, 0x86, 0x0c, 0x0c, 0x44, 0x2b, 0x1c, 0x09, 0x30, 0xdc, 0x06, 0xf9, 0xe2, 0xec, 0xdd, 0xa0, - 0x40, 0xe0, 0x9f, 0x05, 0x85, 0xaa, 0xbe, 0xbc, 0xb9, 0xaa, 0x1c, 0x43, 0x7f, 0x03, 0xfe, 0x66, - 0x41, 0x61, 0xa5, 0xdc, 0x2e, 0xd7, 0x15, 0x09, 0xd5, 0xa3, 0xd6, 0x58, 0x69, 0x2a, 0x32, 0x4a, - 0xdc, 0x28, 0x37, 0x6a, 0x15, 0x25, 0xaf, 0xce, 0x81, 0x99, 0xf3, 0x65, 0xa3, 0x51, 0x6b, 0xac, - 0x2a, 0x05, 0xed, 0x2f, 0x59, 0xfc, 0xee, 0xe0, 0xf1, 0xbb, 0x21, 0x8e, 0xa7, 0x61, 0x90, 0xfd, - 0x62, 0x08, 0xd9, 0x93, 0x38, 0xc8, 0x7e, 0x40, 0x84, 0xc8, 0x14, 0xdc, 0x99, 0x8a, 0x60, 0x66, - 0xc3, 0x75, 0x3a, 0xd0, 0xf3, 0xb4, 0x97, 0x4a, 0xa0, 0x58, 0x31, 0xed, 0x0e, 0xec, 0x69, 0xd7, - 0x44, 0x50, 0x11, 0x57, 0xd1, 0x5c, 0xe0, 0x2a, 0xaa, 0x7d, 0x2b, 0x27, 0xda, 0xfb, 0x51, 0xba, - 0x4b, 0x84, 0x66, 0x8c, 0x7c, 0xc4, 0x7a, 0xb9, 0x44, 0x52, 0x53, 0xb8, 0x61, 0x47, 0x02, 0xb3, - 0x74, 0x35, 0xe0, 0x02, 0x64, 0xe7, 0xe1, 0xdf, 0xc9, 0x89, 0x4e, 0x0e, 0x83, 0x1a, 0x84, 0x64, - 0x62, 0xe4, 0x21, 0x36, 0x11, 0x1c, 0x45, 0x6d, 0x0a, 0x9b, 0x87, 0x12, 0x98, 0xdb, 0xb4, 0xbd, - 0x61, 0x42, 0x11, 0x0f, 0xc7, 0x1f, 0x54, 0x83, 0x21, 0x74, 0xa8, 0x70, 0xfc, 0xa3, 0xe9, 0x65, - 0x2f, 0x98, 0xef, 0xe4, 0xc0, 0xc9, 0x55, 0x68, 0x43, 0xd7, 0xea, 0x90, 0x1a, 0x04, 0x92, 0x78, - 0x12, 0x2f, 0x89, 0x47, 0x70, 0x9c, 0x0f, 0xfb, 0x82, 0x97, 0xc0, 0xab, 0x42, 0x09, 0x3c, 0x85, - 0x93, 0xc0, 0x2d, 0x82, 0x74, 0xa6, 0x70, 0xad, 0xfa, 0x2c, 0x98, 0x6f, 0x38, 0xbe, 0xb5, 0x6d, - 0x75, 0x88, 0x0f, 0xda, 0x2f, 0xc8, 0x20, 0x5f, 0xb7, 0x3c, 0x5f, 0x2b, 0x47, 0xdd, 0xc9, 0xf5, - 0x60, 0xce, 0xb2, 0x3b, 0xbd, 0xfd, 0x2e, 0x34, 0xa0, 0x49, 0xfa, 0x95, 0x92, 0xc1, 0x26, 0x45, - 0x5b, 0xfb, 0x88, 0x2d, 0x39, 0xd8, 0xda, 0xff, 0x1d, 0xe1, 0x65, 0x18, 0x96, 0x05, 0x1c, 0x97, - 0x32, 0xc6, 0xee, 0x2a, 0x83, 0x05, 0x9b, 0xc9, 0x1a, 0x18, 0xec, 0x83, 0xf7, 0x12, 0xb0, 0xe4, - 0x0c, 0xfe, 0x0b, 0xed, 0x03, 0x42, 0x8d, 0x75, 0x14, 0x43, 0xe9, 0x90, 0x59, 0x19, 0x63, 0x92, - 0xac, 0x82, 0xc5, 0x5a, 0xa3, 0xad, 0x1b, 0x8d, 0x72, 0x9d, 0x66, 0x91, 0xb5, 0x7f, 0x95, 0x40, - 0xc1, 0x80, 0xfd, 0xde, 0x15, 0x36, 0xf0, 0x34, 0x75, 0x14, 0xcf, 0x85, 0x8e, 0xe2, 0xea, 0x0a, - 0x00, 0x66, 0x07, 0x15, 0x8c, 0x6f, 0xe6, 0x92, 0x86, 0x86, 0x33, 0xe5, 0x2a, 0x58, 0x0e, 0x73, - 0x1b, 0xcc, 0x97, 0xda, 0x0b, 0x85, 0x77, 0x8e, 0x38, 0x6a, 0x98, 0xc3, 0x98, 0x3e, 0xe1, 0x83, - 0x42, 0x9b, 0x3d, 0x23, 0xc9, 0x1d, 0x8d, 0xf8, 0xbf, 0x26, 0x81, 0x7c, 0x1b, 0xf5, 0x96, 0x4c, - 0xc7, 0xf9, 0xb9, 0xf1, 0x74, 0x1c, 0x91, 0x89, 0xd1, 0xf1, 0xbb, 0xc0, 0x3c, 0xab, 0xb1, 0xd4, - 0x55, 0x22, 0x51, 0xc5, 0xb9, 0x0f, 0xc6, 0xd1, 0xf0, 0x21, 0xec, 0x1c, 0x8d, 0x88, 0x3f, 0xf3, - 0x48, 0x00, 0xd6, 0xe1, 0xde, 0x05, 0xe8, 0x7a, 0xbb, 0x56, 0x5f, 0xfb, 0x2b, 0x19, 0xcc, 0xae, - 0x42, 0xbf, 0xe5, 0x9b, 0xfe, 0xbe, 0x37, 0xb0, 0xdd, 0x69, 0x3b, 0x15, 0xb3, 0xb3, 0x0b, 0x69, - 0x77, 0x14, 0x3c, 0x6a, 0xef, 0x91, 0x45, 0xfd, 0x89, 0xa2, 0x72, 0x96, 0xc2, 0x32, 0x62, 0x30, - 0x79, 0x14, 0xc8, 0x77, 0x4d, 0xdf, 0xa4, 0x58, 0x5c, 0x33, 0x80, 0x45, 0x44, 0xc8, 0xc0, 0xd9, - 0xb4, 0x77, 0x48, 0x22, 0x0e, 0x45, 0x02, 0xe5, 0xa7, 0x03, 0xe1, 0x03, 0xb9, 0x31, 0x50, 0x38, - 0x01, 0x16, 0x1a, 0xcd, 0xf6, 0x56, 0xbd, 0xb9, 0xba, 0xaa, 0xa3, 0x54, 0x45, 0x56, 0x4f, 0x01, - 0x75, 0xa3, 0x7c, 0xef, 0xba, 0xde, 0x68, 0x6f, 0x35, 0x9a, 0x55, 0x9d, 0x7e, 0x99, 0x57, 0x8f, - 0x83, 0xb9, 0x4a, 0xb9, 0xb2, 0x16, 0x24, 0x14, 0xd4, 0xd3, 0xe0, 0xe4, 0xba, 0xbe, 0xbe, 0xac, - 0x1b, 0xad, 0xb5, 0xda, 0xc6, 0x16, 0x22, 0xb3, 0xd2, 0xdc, 0x6c, 0x54, 0x95, 0xa2, 0xaa, 0x81, - 0x53, 0xcc, 0x9b, 0xf3, 0x46, 0xb3, 0xb1, 0xba, 0xd5, 0x6a, 0x97, 0xdb, 0xba, 0x32, 0xa3, 0x5e, - 0x05, 0x8e, 0x57, 0xca, 0x0d, 0x9c, 0xbd, 0xd2, 0x6c, 0x34, 0xf4, 0x4a, 0x5b, 0x29, 0x69, 0xff, - 0x96, 0x07, 0x73, 0x35, 0xaf, 0x61, 0xee, 0xc1, 0x73, 0x66, 0xcf, 0xea, 0x6a, 0x2f, 0x60, 0x66, - 0x1e, 0x37, 0x80, 0x05, 0x97, 0xfc, 0x85, 0xdd, 0xb6, 0x05, 0x09, 0x9a, 0x0b, 0x06, 0x9f, 0x88, - 0xe6, 0xe4, 0x36, 0x26, 0x10, 0xcc, 0xc9, 0xc9, 0x93, 0xba, 0x0c, 0x00, 0xf9, 0xd7, 0x8e, 0xee, - 0x88, 0x3d, 0x3b, 0xd8, 0x9a, 0xcc, 0x3d, 0xe8, 0x41, 0xf7, 0x92, 0xd5, 0x81, 0x41, 0x4e, 0x83, - 0xf9, 0x4a, 0xfb, 0xba, 0x2c, 0xba, 0xbf, 0xc8, 0x80, 0xca, 0x54, 0x27, 0xa6, 0x37, 0xfc, 0x71, - 0x59, 0x64, 0x77, 0x50, 0x88, 0x64, 0x3a, 0x4d, 0x79, 0xb1, 0x34, 0xde, 0xb2, 0x6d, 0xbb, 0xd9, - 0xdc, 0x6a, 0xad, 0x35, 0x8d, 0xb6, 0x22, 0xab, 0xf3, 0xa0, 0x84, 0x1e, 0xeb, 0xcd, 0xc6, 0xaa, - 0x92, 0x57, 0xaf, 0x06, 0x27, 0xd6, 0xca, 0xad, 0xad, 0x5a, 0xe3, 0x5c, 0xb9, 0x5e, 0xab, 0x6e, - 0x55, 0xd6, 0xca, 0x46, 0x4b, 0x29, 0xa8, 0xd7, 0x80, 0xab, 0xdb, 0x35, 0xdd, 0xd8, 0x5a, 0xd1, - 0xcb, 0xed, 0x4d, 0x43, 0x6f, 0x6d, 0x35, 0x9a, 0x5b, 0x8d, 0xf2, 0xba, 0xae, 0x14, 0x51, 0xf3, - 0xc7, 0xaf, 0x22, 0xb5, 0x99, 0x39, 0xa8, 0x8c, 0xa5, 0x18, 0x65, 0x9c, 0x1d, 0x54, 0x46, 0xc0, - 0xaa, 0x95, 0xa1, 0xb7, 0x74, 0xe3, 0x9c, 0xae, 0xcc, 0x0d, 0xd3, 0xb5, 0x79, 0xf5, 0x24, 0x50, - 0x10, 0x0f, 0x5b, 0xb5, 0x56, 0x90, 0xb3, 0xaa, 0x2c, 0x68, 0x9f, 0x2e, 0x82, 0x53, 0x06, 0xdc, - 0xb1, 0x3c, 0x1f, 0xba, 0x1b, 0xe6, 0x95, 0x3d, 0x68, 0xfb, 0x41, 0x27, 0xff, 0x4f, 0xa9, 0x95, - 0x71, 0x1d, 0x2c, 0xf4, 0x09, 0x8d, 0x75, 0xe8, 0xef, 0x3a, 0x5d, 0x3a, 0x0a, 0x3f, 0x22, 0xb6, - 0xe7, 0x58, 0xda, 0x60, 0xb3, 0x1b, 0xfc, 0xd7, 0x8c, 0x6e, 0xcb, 0x09, 0xba, 0x9d, 0x1f, 0x47, - 0xb7, 0xd5, 0xeb, 0xc0, 0xec, 0xbe, 0x07, 0x5d, 0x7d, 0xcf, 0xb4, 0x7a, 0xc1, 0x1d, 0x9f, 0x61, - 0x82, 0xf6, 0xce, 0xbc, 0xe8, 0x89, 0x15, 0xa6, 0x2e, 0xc3, 0xc5, 0x18, 0xd3, 0xb7, 0x9e, 0x01, - 0x80, 0x56, 0x76, 0xd3, 0xed, 0x51, 0x65, 0x65, 0x52, 0x10, 0x7f, 0x17, 0xac, 0x5e, 0xcf, 0xb2, - 0x77, 0xc2, 0x7d, 0xff, 0x28, 0x41, 0x7b, 0xb1, 0x2c, 0x72, 0x82, 0x25, 0x2d, 0x6f, 0xe9, 0x5a, - 0xd3, 0x0b, 0xa5, 0x29, 0xf7, 0xbb, 0x07, 0x9b, 0x4e, 0x51, 0x55, 0xc0, 0x3c, 0x4e, 0xa3, 0x2d, - 0x50, 0x99, 0x41, 0x7d, 0x70, 0x40, 0x6e, 0x5d, 0x6f, 0xaf, 0x35, 0xab, 0xe1, 0xbb, 0x12, 0x22, - 0x89, 0x98, 0x29, 0x37, 0xee, 0xc5, 0xad, 0x71, 0x56, 0x7d, 0x30, 0xb8, 0x86, 0xe9, 0xb0, 0xcb, - 0x75, 0x43, 0x2f, 0x57, 0xef, 0xdd, 0xd2, 0x9f, 0x56, 0x6b, 0xb5, 0x5b, 0x7c, 0xe3, 0x0a, 0xda, - 0xd1, 0x1c, 0xe2, 0x57, 0x5f, 0x2f, 0xd7, 0xea, 0xb4, 0x7f, 0x5f, 0x69, 0x1a, 0xeb, 0xe5, 0xb6, - 0x32, 0xaf, 0xbd, 0x5c, 0x06, 0xca, 0x2a, 0xf4, 0x37, 0x1c, 0xd7, 0x37, 0x7b, 0x75, 0xcb, 0xbe, - 0xb8, 0xe9, 0xf6, 0xb8, 0xc9, 0xa6, 0x70, 0x98, 0x0e, 0x7e, 0x88, 0xe4, 0x08, 0xc6, 0xef, 0x88, - 0xf7, 0x71, 0xb6, 0x48, 0x99, 0xa2, 0x04, 0xed, 0x59, 0x92, 0xc8, 0x72, 0xb7, 0x78, 0xa9, 0xe9, - 0xf4, 0xe4, 0xd9, 0xd3, 0x1e, 0x9f, 0x87, 0xa0, 0x56, 0xd4, 0x9e, 0x97, 0x07, 0xa5, 0x15, 0xcb, - 0x36, 0x7b, 0xd6, 0x33, 0xb9, 0xe8, 0x98, 0x51, 0x1f, 0x93, 0x4b, 0xe8, 0x63, 0xa4, 0xb1, 0xc6, - 0xcf, 0x9f, 0x95, 0x45, 0x97, 0x17, 0x18, 0xd9, 0x07, 0x4c, 0xc6, 0x0c, 0x9e, 0x1f, 0x93, 0x44, - 0x96, 0x17, 0x46, 0xd3, 0x4b, 0x87, 0xe1, 0x67, 0xbf, 0x3f, 0x6c, 0xac, 0x81, 0xf6, 0x5d, 0x1a, - 0xa6, 0x0a, 0xb3, 0xda, 0x1f, 0xc8, 0x40, 0x5b, 0x85, 0xfe, 0x39, 0xe8, 0x86, 0x53, 0x01, 0xdc, - 0xeb, 0x53, 0x7b, 0x9b, 0x69, 0xb2, 0x6f, 0x66, 0x01, 0x3c, 0xcf, 0x03, 0x58, 0x4e, 0x68, 0x3c, - 0x31, 0xa4, 0x63, 0x1a, 0x6f, 0x0d, 0x14, 0x3d, 0xfc, 0x9e, 0xaa, 0xd9, 0x63, 0xe2, 0x87, 0x4b, - 0x4c, 0x8c, 0xa5, 0x4e, 0x08, 0x1b, 0x94, 0x80, 0xf6, 0xdd, 0x70, 0x12, 0xf4, 0xc3, 0x9c, 0x76, - 0xac, 0x1c, 0x9a, 0xd9, 0x74, 0xfa, 0xe2, 0x66, 0xab, 0x2e, 0xc3, 0xec, 0x1b, 0xed, 0x63, 0x05, - 0x70, 0x72, 0x58, 0x75, 0xb4, 0x0f, 0xe5, 0xb8, 0x1d, 0x76, 0x88, 0x87, 0xfc, 0x1c, 0xdd, 0x40, - 0x44, 0x0f, 0xea, 0xe3, 0xc0, 0xd5, 0xe1, 0x32, 0x5c, 0xdb, 0x69, 0xc0, 0xcb, 0x5e, 0x0f, 0xfa, - 0x3e, 0x74, 0x71, 0xd5, 0x4a, 0xc6, 0xf0, 0x97, 0xea, 0x13, 0xc0, 0x83, 0x2c, 0xdb, 0xb3, 0xba, - 0xd0, 0x6d, 0x5b, 0x7d, 0xaf, 0x6c, 0x77, 0xdb, 0xfb, 0xbe, 0xe3, 0x5a, 0x26, 0xbd, 0x91, 0xb2, - 0x64, 0xc4, 0xbd, 0x56, 0x6f, 0x06, 0x8a, 0xe5, 0x35, 0xed, 0x0b, 0x8e, 0xe9, 0x76, 0x2d, 0x7b, - 0xa7, 0x6e, 0x79, 0x3e, 0xf5, 0x00, 0x3e, 0x90, 0xae, 0xfd, 0xb5, 0x2c, 0x7a, 0x98, 0x6e, 0x04, - 0xac, 0x31, 0x1d, 0xca, 0xf3, 0x65, 0x91, 0xe3, 0x71, 0xe9, 0x68, 0xa7, 0x53, 0x96, 0xe7, 0x4e, - 0xdb, 0x90, 0x18, 0x3e, 0x82, 0xe3, 0xae, 0x85, 0xa4, 0x07, 0x86, 0xc0, 0x39, 0xdd, 0xa8, 0xad, - 0xd4, 0x74, 0x64, 0x56, 0x5c, 0x0d, 0x4e, 0x44, 0xef, 0xaa, 0xf7, 0x6e, 0xb5, 0xf4, 0x46, 0x5b, - 0x29, 0xa1, 0x7e, 0x8a, 0x24, 0xaf, 0x94, 0x6b, 0x75, 0xbd, 0xba, 0xd5, 0x6e, 0xa2, 0x37, 0xd5, - 0xf1, 0x4c, 0x0b, 0xed, 0x39, 0x79, 0x70, 0x1c, 0xcb, 0xf6, 0x0a, 0x96, 0x2a, 0x12, 0xca, 0x80, - 0xaf, 0x6d, 0x08, 0xd0, 0x2c, 0x11, 0xaf, 0xf6, 0xfb, 0xc2, 0x17, 0x6e, 0x32, 0x10, 0x0e, 0x94, - 0x11, 0xa3, 0x19, 0xdf, 0x91, 0x44, 0x22, 0x54, 0x08, 0x93, 0x4d, 0xa7, 0x14, 0xff, 0x3c, 0xed, - 0x11, 0x27, 0x1e, 0x7c, 0x6c, 0x65, 0x56, 0xf0, 0xc7, 0x4f, 0xdb, 0xa8, 0x19, 0x58, 0x1d, 0x16, - 0x01, 0xc0, 0x29, 0x58, 0x83, 0x88, 0x1e, 0x0c, 0x1d, 0xaf, 0xe2, 0xf4, 0xa0, 0x5c, 0x69, 0xd7, - 0xce, 0xe9, 0x71, 0x7a, 0xf0, 0x79, 0x19, 0x94, 0x56, 0xa1, 0x8f, 0xe6, 0x54, 0x9e, 0xf6, 0x44, - 0x81, 0xf5, 0x1f, 0x64, 0xc6, 0xf4, 0x9c, 0x8e, 0xd9, 0x0b, 0x97, 0x01, 0xc8, 0x93, 0xf6, 0x63, - 0xe3, 0x98, 0x20, 0x41, 0xd1, 0x31, 0xe3, 0xd5, 0x0f, 0x81, 0x82, 0x8f, 0x5e, 0xd3, 0x65, 0xe8, - 0x87, 0xc6, 0x0e, 0x57, 0x88, 0x48, 0xd5, 0xf4, 0x4d, 0x83, 0xe4, 0x67, 0x46, 0x27, 0x41, 0xdb, - 0x25, 0x86, 0x91, 0xef, 0x47, 0xfb, 0xf3, 0x2f, 0x65, 0x70, 0x35, 0x69, 0x1f, 0xe5, 0x7e, 0xbf, - 0xe5, 0x3b, 0x2e, 0x34, 0x60, 0x07, 0x5a, 0x7d, 0x7f, 0x60, 0x7d, 0xcf, 0x25, 0xa9, 0xc1, 0x66, - 0x33, 0x7d, 0xd4, 0xde, 0x20, 0x8b, 0x46, 0xf8, 0x3d, 0xd0, 0x1e, 0x07, 0xca, 0x8b, 0x69, 0xec, - 0x9f, 0x92, 0x44, 0x62, 0xf6, 0xa6, 0x24, 0x9e, 0x0e, 0xa8, 0x8f, 0x1f, 0x01, 0x50, 0xc1, 0xca, - 0x8d, 0xa1, 0x57, 0xf4, 0xda, 0x06, 0x1a, 0x04, 0x1e, 0x02, 0xae, 0xdd, 0xd8, 0x34, 0x2a, 0x6b, - 0xe5, 0x96, 0xbe, 0x65, 0xe8, 0xab, 0xb5, 0x56, 0x9b, 0x3a, 0x65, 0x91, 0xaf, 0x66, 0xd4, 0xeb, - 0xc0, 0xe9, 0xd6, 0xe6, 0x72, 0xab, 0x62, 0xd4, 0x36, 0x70, 0xba, 0xa1, 0x37, 0xf4, 0xf3, 0xf4, - 0x6d, 0x49, 0xfb, 0x88, 0x02, 0xe6, 0xd0, 0x04, 0xa0, 0x45, 0xe6, 0x05, 0xda, 0xdf, 0xe4, 0xc1, - 0x9c, 0x01, 0x3d, 0xa7, 0x77, 0x09, 0xcf, 0x11, 0xa6, 0x35, 0xf5, 0xf8, 0xb6, 0x2c, 0x7a, 0x7e, - 0x9b, 0x61, 0x76, 0x89, 0x61, 0x34, 0x7e, 0xa2, 0x69, 0x5e, 0x32, 0xad, 0x9e, 0x79, 0x81, 0x76, - 0x35, 0x25, 0x23, 0x4a, 0x50, 0x97, 0x80, 0xea, 0x5c, 0xb6, 0xa1, 0xdb, 0xea, 0x5c, 0xd6, 0xfd, - 0xdd, 0x72, 0xb7, 0xeb, 0x42, 0xcf, 0xa3, 0xab, 0x17, 0x43, 0xde, 0xa8, 0x37, 0x81, 0xe3, 0x38, - 0x95, 0xc9, 0x4c, 0x1c, 0x64, 0x06, 0x93, 0xc3, 0x9c, 0x65, 0xfb, 0x4a, 0x90, 0xb3, 0xc0, 0xe4, - 0x8c, 0x92, 0xd9, 0xe3, 0x12, 0x45, 0xfe, 0x94, 0xce, 0xf5, 0x60, 0xce, 0x36, 0xf7, 0xa0, 0x7e, - 0x7f, 0xdf, 0x72, 0xa1, 0x87, 0x1d, 0x63, 0x64, 0x83, 0x4d, 0xd2, 0x3e, 0x26, 0x74, 0xde, 0x5c, - 0x4c, 0x62, 0xe9, 0x74, 0x7f, 0x75, 0x0c, 0xd5, 0x1f, 0xd2, 0xcf, 0xc8, 0xda, 0x47, 0x64, 0x30, - 0x4f, 0x99, 0x2a, 0xdb, 0x57, 0x6a, 0x5d, 0xed, 0x21, 0x9c, 0xf1, 0x6b, 0xa2, 0xb4, 0xc0, 0xf8, - 0xc5, 0x0f, 0xda, 0x4f, 0xc8, 0xa2, 0xee, 0xce, 0x43, 0x2a, 0x8e, 0xcb, 0x88, 0x77, 0x1c, 0xdd, - 0x76, 0xf6, 0xa9, 0xa3, 0x6a, 0xc9, 0x20, 0x0f, 0x59, 0x2e, 0xea, 0x69, 0xbf, 0x2e, 0xe4, 0x4c, - 0x2d, 0x58, 0x8d, 0x23, 0x02, 0xf0, 0x33, 0x32, 0x58, 0xa4, 0x5c, 0xb5, 0xe8, 0x39, 0x1f, 0xa1, - 0x03, 0x6f, 0x3f, 0x25, 0x6c, 0x08, 0x0e, 0xa9, 0x3f, 0x2d, 0xe9, 0x01, 0x03, 0xe4, 0x27, 0x84, - 0x82, 0xa3, 0x09, 0x57, 0xe4, 0x88, 0xa0, 0x7c, 0x57, 0x1e, 0xcc, 0x6d, 0x7a, 0xd0, 0xa5, 0x7e, - 0xfb, 0xda, 0x6b, 0xf3, 0x40, 0x5e, 0x85, 0xdc, 0x46, 0xea, 0x8b, 0x84, 0x3d, 0x7c, 0xd9, 0xca, - 0x32, 0x44, 0x91, 0x8d, 0x14, 0x03, 0xdb, 0x8d, 0x60, 0x91, 0x88, 0xb4, 0xec, 0xfb, 0xc8, 0x48, - 0x0c, 0xbc, 0x69, 0x07, 0x52, 0x27, 0xb1, 0x55, 0x84, 0xcb, 0x42, 0x59, 0x2a, 0x88, 0xa7, 0x3a, - 0xdc, 0x26, 0xf3, 0xd9, 0xbc, 0x31, 0x90, 0xaa, 0x3e, 0x1a, 0x5c, 0xe5, 0xf4, 0x21, 0x39, 0xbf, - 0xc2, 0x64, 0x2e, 0xe0, 0xcc, 0xc3, 0x5e, 0x69, 0x7f, 0x23, 0xe4, 0xab, 0x2b, 0x2e, 0x9d, 0x74, - 0xba, 0xd0, 0x9f, 0x8c, 0x49, 0x72, 0x12, 0x28, 0x28, 0x07, 0xde, 0x7f, 0x31, 0xf4, 0x56, 0xb3, - 0x7e, 0x4e, 0x1f, 0xbe, 0x8c, 0x51, 0xd0, 0x9e, 0x2b, 0x83, 0xd9, 0x65, 0xd7, 0x31, 0xbb, 0x1d, - 0xd3, 0xf3, 0xb5, 0xef, 0x4a, 0x60, 0x7e, 0xc3, 0xbc, 0xd2, 0x73, 0xcc, 0x2e, 0xf6, 0xef, 0x1f, - 0xe8, 0x0b, 0xfa, 0xe4, 0x55, 0xd0, 0x17, 0xd0, 0x47, 0xfe, 0x60, 0x60, 0x78, 0x74, 0x2f, 0x27, - 0x72, 0xaf, 0x66, 0xb8, 0xcd, 0x27, 0x0d, 0x0b, 0x56, 0x1a, 0xf0, 0xb5, 0xc4, 0xf2, 0x14, 0x63, - 0x51, 0x7e, 0x44, 0x2c, 0xfc, 0xa8, 0x08, 0xc9, 0xa3, 0xd9, 0x95, 0x7f, 0x5e, 0x09, 0x14, 0xab, - 0x10, 0x5b, 0x71, 0xbf, 0x2a, 0x81, 0x99, 0x16, 0xf4, 0xb1, 0x05, 0x77, 0x3b, 0xe7, 0x29, 0xdc, - 0xc5, 0x19, 0x22, 0x27, 0xf6, 0xe0, 0x19, 0x4d, 0xd6, 0x99, 0xf3, 0xd6, 0xf8, 0x7f, 0x0a, 0x8f, - 0x44, 0x52, 0xee, 0x12, 0x2d, 0xf3, 0x50, 0x1e, 0x89, 0x89, 0xa4, 0xb2, 0xf7, 0xb5, 0x7a, 0x8f, - 0x44, 0x5d, 0xab, 0x98, 0x5e, 0xef, 0xd5, 0xac, 0x7e, 0x26, 0x7a, 0x9b, 0x51, 0xe6, 0x13, 0x9c, - 0xa3, 0x1e, 0x0b, 0x66, 0x88, 0xcc, 0x83, 0xf9, 0xe8, 0xa0, 0x9f, 0x02, 0x21, 0x81, 0xcf, 0x5e, - 0x07, 0x39, 0x05, 0x5d, 0xd4, 0xe2, 0x0b, 0x9f, 0x4a, 0x0c, 0x82, 0xf9, 0x06, 0xf4, 0x2f, 0x3b, - 0xee, 0xc5, 0x96, 0x6f, 0xfa, 0x50, 0xfb, 0x67, 0x89, 0x5c, 0x97, 0xc7, 0x44, 0x3f, 0x69, 0x80, - 0x13, 0xa4, 0x42, 0x34, 0x23, 0xee, 0xbf, 0x49, 0x45, 0xae, 0x1f, 0x2a, 0x04, 0x26, 0x9f, 0x71, - 0xf0, 0x53, 0xed, 0xa5, 0x43, 0x83, 0x3e, 0x49, 0x43, 0x26, 0x0d, 0x54, 0x32, 0x2c, 0x83, 0xf1, - 0xf7, 0xe3, 0x69, 0x1f, 0x15, 0x32, 0xab, 0xc5, 0x68, 0x1e, 0x4d, 0x57, 0xf0, 0xe1, 0x47, 0x82, - 0x7c, 0x65, 0xd7, 0xf4, 0xb5, 0x77, 0xcb, 0x00, 0x94, 0xbb, 0xdd, 0x75, 0xe2, 0x03, 0xce, 0x3a, - 0xa4, 0x9d, 0x05, 0xf3, 0x9d, 0x5d, 0x33, 0xba, 0x39, 0x83, 0xf4, 0x07, 0x5c, 0x9a, 0xfa, 0xb8, - 0xc8, 0x99, 0x9c, 0x48, 0x55, 0x1b, 0x80, 0x09, 0x95, 0x41, 0x69, 0x87, 0x8e, 0xe6, 0x7c, 0x28, - 0xcc, 0xc4, 0x23, 0x74, 0xe8, 0xf3, 0xa5, 0x88, 0xbd, 0xf8, 0x39, 0x1c, 0x25, 0x1d, 0x1e, 0xb0, - 0x89, 0x12, 0x52, 0x9e, 0xf4, 0x16, 0x0b, 0xe8, 0x91, 0xcc, 0xd7, 0x54, 0x42, 0xd7, 0xaa, 0x7a, - 0xd7, 0x0a, 0x44, 0x4b, 0x03, 0x66, 0x69, 0x2f, 0xcc, 0xa5, 0x83, 0x2f, 0x59, 0x70, 0x4f, 0x01, - 0x0b, 0xb0, 0x6b, 0xf9, 0x30, 0xa8, 0x25, 0x15, 0x60, 0x12, 0xc4, 0xfc, 0x07, 0xda, 0xb3, 0x85, - 0x83, 0xae, 0x61, 0x81, 0x1e, 0xac, 0x51, 0x4c, 0xfb, 0x13, 0x0b, 0xa3, 0x26, 0x46, 0x33, 0x7b, - 0xb0, 0x7e, 0x4c, 0x06, 0x57, 0xb7, 0x9d, 0x9d, 0x9d, 0x1e, 0x0c, 0xc4, 0x04, 0x89, 0x77, 0xa6, - 0x66, 0x4e, 0x12, 0x2e, 0xbc, 0x13, 0xe4, 0xdc, 0x67, 0x85, 0x47, 0xc9, 0xd0, 0x03, 0x7f, 0x62, - 0x2a, 0x71, 0x16, 0x85, 0xc5, 0x35, 0x94, 0xcf, 0x18, 0x14, 0xc4, 0x02, 0x3e, 0x0b, 0x93, 0xcd, - 0x1e, 0x88, 0x2f, 0x49, 0x60, 0x81, 0xdc, 0x8b, 0x18, 0x28, 0xe8, 0x3d, 0x13, 0x04, 0x40, 0xfb, - 0x6e, 0x4e, 0xd4, 0xcf, 0x16, 0xcb, 0x84, 0xe3, 0x24, 0x46, 0xc4, 0x62, 0x41, 0x55, 0x46, 0x92, - 0x9b, 0xc2, 0x4d, 0x9d, 0x79, 0x30, 0xb7, 0x0a, 0x83, 0x96, 0xe6, 0x69, 0xef, 0x4f, 0xd9, 0x13, - 0x9d, 0x05, 0xf3, 0xf8, 0x72, 0xb0, 0x26, 0x3d, 0x26, 0x49, 0x56, 0xcd, 0xb8, 0x34, 0xf5, 0x06, - 0xb0, 0x70, 0x01, 0x6e, 0x3b, 0x2e, 0x6c, 0x72, 0x67, 0x29, 0xf9, 0xc4, 0xe1, 0xe1, 0xe9, 0xd4, - 0x9b, 0xc0, 0x71, 0xea, 0xe8, 0xbe, 0x8c, 0xe6, 0xfa, 0xa6, 0x7b, 0x85, 0x1e, 0x4c, 0x1b, 0x4c, - 0xd6, 0xfe, 0x92, 0x6d, 0x30, 0xcb, 0x3c, 0x8a, 0xb7, 0x1c, 0x14, 0x3b, 0x53, 0xe9, 0x98, 0xd1, - 0xe9, 0xf1, 0xa0, 0x44, 0x75, 0x24, 0x30, 0xe8, 0x92, 0x7a, 0xd0, 0x30, 0xaf, 0xfa, 0x78, 0x30, - 0x8b, 0x44, 0x84, 0xed, 0x06, 0xda, 0xf5, 0x9e, 0x1e, 0xf2, 0x21, 0x7e, 0x6f, 0x44, 0x59, 0xb5, - 0x5f, 0x0a, 0x75, 0x46, 0xe7, 0x74, 0xe6, 0x31, 0x69, 0x98, 0x9f, 0xca, 0x45, 0xf2, 0x0a, 0x53, - 0xfe, 0xf2, 0x95, 0x5a, 0xd7, 0xd3, 0xd6, 0xd3, 0x69, 0xcd, 0x19, 0x00, 0xc2, 0xe6, 0x17, 0x04, - 0xce, 0x60, 0x52, 0xf8, 0xd8, 0xf8, 0x89, 0x47, 0x01, 0x07, 0xc5, 0x81, 0xd9, 0x99, 0x2c, 0xa0, - 0x82, 0x47, 0x08, 0x45, 0x38, 0xc9, 0x1e, 0x9d, 0x5f, 0xcc, 0x83, 0xab, 0xc3, 0x13, 0x4e, 0x75, - 0xd3, 0x8b, 0x5a, 0xf6, 0xbd, 0xe9, 0x20, 0xe2, 0x8e, 0x94, 0x84, 0xcd, 0xf1, 0x24, 0x28, 0x78, - 0xfb, 0x17, 0x42, 0x47, 0x40, 0xf2, 0xa0, 0xbd, 0x51, 0x4e, 0x35, 0x56, 0x0d, 0xe5, 0x6f, 0xc2, - 0x8d, 0xf0, 0x16, 0x70, 0xc2, 0xde, 0xdf, 0x0b, 0xb1, 0xc0, 0x3d, 0x0d, 0xed, 0x59, 0x0e, 0xbe, - 0xe0, 0x9b, 0x6c, 0x5e, 0xbc, 0xc9, 0xa6, 0x18, 0x49, 0x45, 0x2a, 0x9d, 0xbd, 0x7a, 0x7c, 0x76, - 0xe0, 0x08, 0x5a, 0x25, 0xb5, 0x52, 0x10, 0xf8, 0x25, 0x16, 0xfe, 0x7f, 0xcc, 0xa5, 0xea, 0x79, - 0x47, 0x9f, 0x5c, 0x4b, 0xd1, 0x13, 0x1e, 0xe5, 0xb1, 0xb5, 0xd7, 0x15, 0x80, 0xd6, 0x8a, 0x1c, - 0x72, 0x28, 0xa8, 0x1b, 0x2e, 0xbc, 0x64, 0xc1, 0xcb, 0xde, 0xc0, 0x7e, 0x07, 0x91, 0x5b, 0x8e, - 0x95, 0xdb, 0x9f, 0xe7, 0x45, 0x1d, 0x6a, 0x78, 0x0d, 0x3a, 0x50, 0x54, 0x4c, 0xdb, 0x79, 0x3a, - 0x28, 0xf5, 0x69, 0x0e, 0xda, 0x76, 0xca, 0xe3, 0x51, 0x45, 0x19, 0x69, 0xaa, 0x11, 0x92, 0xd4, - 0xfe, 0x36, 0x07, 0xe6, 0x98, 0x37, 0xf1, 0x3b, 0x02, 0x07, 0x54, 0x4b, 0x4a, 0x9e, 0x91, 0xca, - 0xc2, 0x33, 0x52, 0x75, 0x09, 0x14, 0x3c, 0xa1, 0x46, 0x4b, 0xb2, 0xa9, 0x4f, 0x04, 0xf3, 0x5d, - 0xd8, 0x87, 0x76, 0x17, 0xda, 0x1d, 0x0b, 0x7a, 0xa7, 0x0b, 0x58, 0x2c, 0xb1, 0x61, 0x1a, 0xb8, - 0xcc, 0x82, 0xf1, 0xbb, 0xd3, 0x61, 0x95, 0xbd, 0x96, 0xfe, 0xa9, 0x04, 0xce, 0x30, 0xad, 0x64, - 0xc5, 0x75, 0xf6, 0x52, 0x6b, 0xea, 0xcb, 0xd9, 0xf1, 0x78, 0x93, 0xd7, 0xd4, 0xbb, 0x12, 0x1b, - 0xe5, 0x90, 0xe2, 0x62, 0x1a, 0xfd, 0xfb, 0x43, 0xe9, 0x3e, 0x8d, 0x93, 0x6e, 0xf5, 0x90, 0xf4, - 0xa7, 0x70, 0x20, 0x3c, 0x0f, 0xe6, 0x0d, 0x68, 0x76, 0xc3, 0xa1, 0xf6, 0x8f, 0x18, 0x23, 0xfa, - 0x89, 0x20, 0xef, 0x47, 0xab, 0x61, 0x8f, 0x38, 0x58, 0x19, 0xf6, 0x4b, 0xfc, 0x80, 0x17, 0xc5, - 0xf0, 0x47, 0x42, 0x0d, 0x67, 0xd0, 0x02, 0x97, 0x45, 0x2c, 0xf0, 0xfc, 0x30, 0x0b, 0xfc, 0x7a, - 0x30, 0xd7, 0x33, 0x3d, 0xd2, 0x60, 0xc2, 0xbb, 0x7f, 0xd9, 0x24, 0xfe, 0x96, 0xfd, 0xc4, 0xd3, - 0x76, 0xc3, 0xaa, 0x76, 0xf8, 0x88, 0xc4, 0x1f, 0x16, 0x3a, 0x5a, 0x37, 0xaa, 0xec, 0x74, 0x1a, - 0x71, 0xf7, 0x18, 0x2b, 0x77, 0xa7, 0x80, 0xba, 0xae, 0xb7, 0x5a, 0xe5, 0x55, 0x7c, 0xe2, 0x26, - 0x70, 0xc1, 0xea, 0x9e, 0xbd, 0x11, 0x89, 0x8f, 0x20, 0xac, 0xce, 0x83, 0x52, 0xc0, 0x9f, 0x72, - 0x8c, 0x3c, 0xd9, 0x78, 0xc7, 0x49, 0xc9, 0x69, 0x5f, 0x94, 0x41, 0x71, 0xd3, 0x76, 0xa1, 0xd9, - 0xd5, 0x9e, 0xc7, 0xe8, 0xd2, 0x0f, 0x72, 0xba, 0xf4, 0xd0, 0x61, 0x0d, 0x03, 0x7d, 0x93, 0x91, - 0x16, 0xf1, 0xe1, 0xc8, 0x12, 0x17, 0xcb, 0x79, 0x66, 0x0e, 0x8f, 0xbb, 0xd8, 0x2a, 0x79, 0x7c, - 0xa9, 0x99, 0xf7, 0x01, 0xc2, 0xc8, 0xfe, 0xb6, 0x0c, 0x94, 0x8d, 0x7d, 0x6f, 0x97, 0x3b, 0xf4, - 0xfd, 0xab, 0x32, 0x58, 0x08, 0xce, 0xc5, 0xb4, 0x9d, 0x8b, 0xd0, 0xd6, 0x9e, 0xc1, 0xf5, 0xc8, - 0x3e, 0x4a, 0x0b, 0x7a, 0x64, 0xfc, 0xa0, 0x6e, 0x30, 0xa1, 0x61, 0xa4, 0x61, 0xc7, 0xfa, 0x07, - 0xca, 0x58, 0xe2, 0xe8, 0x2f, 0x6d, 0xd0, 0x6f, 0xa3, 0x80, 0x32, 0xda, 0x8b, 0x85, 0xef, 0x39, - 0x1a, 0x41, 0x7b, 0x78, 0xf7, 0x2e, 0x76, 0x73, 0x51, 0x2a, 0xd2, 0xd9, 0xa3, 0x7a, 0x3d, 0x28, - 0x05, 0x92, 0x52, 0x67, 0x80, 0x5c, 0x6b, 0xb6, 0x94, 0x63, 0xea, 0x1c, 0x98, 0x29, 0xdb, 0x5d, - 0xd7, 0xb1, 0xba, 0x4a, 0xee, 0xec, 0x0c, 0x28, 0xe8, 0x7b, 0x7d, 0xff, 0xca, 0xd9, 0x87, 0x83, - 0x85, 0x96, 0xef, 0x42, 0x73, 0x2f, 0x11, 0xb7, 0x3b, 0x6e, 0x07, 0x33, 0xb6, 0xb3, 0x65, 0xee, - 0xfb, 0xbb, 0xea, 0x43, 0x0e, 0x58, 0x1d, 0x54, 0x6b, 0x9a, 0x34, 0x1a, 0xe7, 0xd7, 0xef, 0xc4, - 0x2b, 0x1d, 0x45, 0xdb, 0x29, 0xef, 0xfb, 0xbb, 0xcb, 0xd7, 0x7d, 0xe6, 0xcf, 0xce, 0xe4, 0x3e, - 0xff, 0x67, 0x67, 0x72, 0x5f, 0xfb, 0xb3, 0x33, 0xb9, 0x9f, 0xfa, 0xf3, 0x33, 0xc7, 0x3e, 0xff, - 0xe7, 0x67, 0x8e, 0x7d, 0xe9, 0xcf, 0xcf, 0x1c, 0xfb, 0x61, 0xa9, 0x7f, 0xe1, 0x42, 0x11, 0x53, - 0x79, 0xec, 0xff, 0x17, 0x00, 0x00, 0xff, 0xff, 0xae, 0x1f, 0xb9, 0x2f, 0xeb, 0x35, 0x02, 0x00, + 0x9d, 0x3b, 0xd5, 0x99, 0x45, 0x66, 0xf6, 0xcc, 0x0e, 0xdf, 0x73, 0xbe, 0x23, 0x22, 0x02, 0x22, + 0x22, 0x2a, 0x22, 0x22, 0x77, 0x01, 0x01, 0xb9, 0xdf, 0x04, 0xe4, 0x22, 0x82, 0x20, 0xa2, 0xa2, + 0xa8, 0x5c, 0x94, 0x47, 0xf0, 0x82, 0x78, 0xce, 0x51, 0x0f, 0x7e, 0x0a, 0xa2, 0xa2, 0xdf, 0x13, + 0x97, 0xcc, 0x8c, 0xa8, 0xae, 0xcc, 0x8a, 0xac, 0xae, 0xac, 0x5e, 0xf4, 0xfb, 0xab, 0x2a, 0x23, + 0x23, 0xdf, 0x78, 0xe3, 0xfd, 0xbd, 0x11, 0xf1, 0x46, 0xc4, 0x1b, 0x6f, 0x80, 0xd3, 0xfd, 0x0b, + 0xb7, 0xf6, 0x5d, 0xc7, 0x77, 0xbc, 0x5b, 0x3b, 0xce, 0xde, 0x9e, 0x69, 0x77, 0xbd, 0x25, 0xfc, + 0xac, 0xce, 0x98, 0xf6, 0x15, 0xff, 0x4a, 0x1f, 0x6a, 0x37, 0xf4, 0x2f, 0xee, 0xdc, 0xda, 0xb3, + 0x2e, 0xdc, 0xda, 0xbf, 0x70, 0xeb, 0x9e, 0xd3, 0x85, 0xbd, 0xe0, 0x03, 0xfc, 0x40, 0xb3, 0x6b, + 0x37, 0xc5, 0xe5, 0xea, 0x39, 0x1d, 0xb3, 0xe7, 0xf9, 0x8e, 0x0b, 0x69, 0xce, 0x53, 0x51, 0x91, + 0xf0, 0x12, 0xb4, 0xfd, 0x80, 0xc2, 0x75, 0x3b, 0x8e, 0xb3, 0xd3, 0x83, 0xe4, 0xdd, 0x85, 0xfd, + 0xed, 0x5b, 0x3d, 0xdf, 0xdd, 0xef, 0xf8, 0xf4, 0xed, 0xf5, 0x83, 0x6f, 0xbb, 0xd0, 0xeb, 0xb8, + 0x56, 0xdf, 0x77, 0x5c, 0x92, 0xe3, 0xec, 0x6f, 0xfc, 0x75, 0x09, 0xc8, 0x46, 0xbf, 0xa3, 0x7d, + 0x6b, 0x06, 0xc8, 0xe5, 0x7e, 0x5f, 0xfb, 0xa4, 0x04, 0xc0, 0x2a, 0xf4, 0xcf, 0x41, 0xd7, 0xb3, + 0x1c, 0x5b, 0x3b, 0x0e, 0x66, 0x0c, 0xf8, 0x8c, 0x7d, 0xe8, 0xf9, 0x77, 0xe4, 0x9f, 0xf7, 0x75, + 0x39, 0xa7, 0xbd, 0x5e, 0x02, 0x25, 0x03, 0x7a, 0x7d, 0xc7, 0xf6, 0xa0, 0xfa, 0x14, 0x50, 0x80, + 0xae, 0xeb, 0xb8, 0xa7, 0x73, 0xd7, 0xe7, 0x6e, 0x9a, 0xbb, 0xed, 0xe6, 0x25, 0x5a, 0xfd, 0x25, + 0xa3, 0xdf, 0x59, 0x2a, 0xf7, 0xfb, 0x4b, 0x11, 0xa5, 0xa5, 0xe0, 0xa3, 0x25, 0x1d, 0x7d, 0x61, + 0x90, 0x0f, 0xd5, 0xd3, 0x60, 0xe6, 0x12, 0xc9, 0x70, 0x5a, 0xba, 0x3e, 0x77, 0xd3, 0xac, 0x11, + 0x3c, 0xa2, 0x37, 0x5d, 0xe8, 0x9b, 0x56, 0xcf, 0x3b, 0x2d, 0x93, 0x37, 0xf4, 0x51, 0x7b, 0x6d, + 0x0e, 0x14, 0x30, 0x11, 0xb5, 0x02, 0xf2, 0x1d, 0xa7, 0x0b, 0x71, 0xf1, 0x8b, 0xb7, 0xdd, 0x2a, + 0x5e, 0xfc, 0x52, 0xc5, 0xe9, 0x42, 0x03, 0x7f, 0xac, 0x5e, 0x0f, 0xe6, 0x02, 0xb1, 0x44, 0x6c, + 0xb0, 0x49, 0x67, 0x6f, 0x03, 0x79, 0x94, 0x5f, 0x2d, 0x81, 0x7c, 0x63, 0xb3, 0x5e, 0x57, 0x8e, + 0xa9, 0x27, 0xc0, 0xc2, 0x66, 0xe3, 0x9e, 0x46, 0xf3, 0x7c, 0x63, 0x4b, 0x37, 0x8c, 0xa6, 0xa1, + 0xe4, 0xd4, 0x05, 0x30, 0xbb, 0x5c, 0xae, 0x6e, 0xd5, 0x1a, 0x1b, 0x9b, 0x6d, 0x45, 0xd2, 0x5e, + 0x29, 0x83, 0xc5, 0x16, 0xf4, 0xab, 0xf0, 0x92, 0xd5, 0x81, 0x2d, 0xdf, 0xf4, 0xa1, 0xf6, 0xa2, + 0x5c, 0x28, 0x4c, 0x75, 0x13, 0x15, 0x1a, 0xbe, 0xa2, 0x15, 0x78, 0xec, 0x81, 0x0a, 0xf0, 0x14, + 0x96, 0xe8, 0xd7, 0x4b, 0x4c, 0x9a, 0xc1, 0xd2, 0x39, 0xfb, 0x28, 0x30, 0xc7, 0xbc, 0x53, 0x17, + 0x01, 0x58, 0x2e, 0x57, 0xee, 0x59, 0x35, 0x9a, 0x9b, 0x8d, 0xaa, 0x72, 0x0c, 0x3d, 0xaf, 0x34, + 0x0d, 0x9d, 0x3e, 0xe7, 0xb4, 0xef, 0xe4, 0x18, 0x30, 0xab, 0x3c, 0x98, 0x4b, 0xa3, 0x99, 0x19, + 0x02, 0xa8, 0xf6, 0x86, 0x10, 0x9c, 0x55, 0x0e, 0x9c, 0xc7, 0xa6, 0x23, 0x97, 0x3d, 0x40, 0xcf, + 0x91, 0x40, 0xa9, 0xb5, 0xbb, 0xef, 0x77, 0x9d, 0xcb, 0xb6, 0x36, 0x1b, 0x22, 0xa3, 0xfd, 0x0d, + 0x2b, 0x93, 0x27, 0xf3, 0x32, 0xb9, 0xe9, 0x60, 0x25, 0x28, 0x85, 0x18, 0x69, 0xbc, 0x3a, 0x94, + 0x46, 0x99, 0x93, 0xc6, 0xa3, 0x44, 0x09, 0x65, 0x2f, 0x87, 0x7f, 0x5a, 0x06, 0x85, 0x56, 0xdf, + 0xec, 0x40, 0xed, 0xb3, 0x32, 0x98, 0xaf, 0x43, 0xf3, 0x12, 0x2c, 0xf7, 0xfb, 0xae, 0x73, 0x09, + 0x6a, 0x95, 0x48, 0x5f, 0x4f, 0x83, 0x19, 0x0f, 0x65, 0xaa, 0x75, 0x71, 0x0d, 0x66, 0x8d, 0xe0, + 0x51, 0x3d, 0x03, 0x80, 0xd5, 0x85, 0xb6, 0x6f, 0xf9, 0x16, 0xf4, 0x4e, 0x4b, 0xd7, 0xcb, 0x37, + 0xcd, 0x1a, 0x4c, 0x8a, 0xf6, 0x2d, 0x49, 0x54, 0xc7, 0x30, 0x17, 0x4b, 0x2c, 0x07, 0x31, 0x52, + 0x7d, 0x9d, 0x24, 0xa2, 0x63, 0x23, 0xc9, 0xa5, 0x93, 0xed, 0xdb, 0x72, 0xe9, 0x85, 0x8b, 0x72, + 0x34, 0x9a, 0x5b, 0xad, 0xcd, 0xca, 0xda, 0x56, 0x6b, 0xa3, 0x5c, 0xd1, 0x15, 0xa8, 0x9e, 0x04, + 0x0a, 0xfe, 0xbb, 0x55, 0x6b, 0x6d, 0x55, 0xf5, 0xba, 0xde, 0xd6, 0xab, 0xca, 0xb6, 0xaa, 0x82, + 0x45, 0x43, 0x7f, 0xea, 0xa6, 0xde, 0x6a, 0x6f, 0xad, 0x94, 0x6b, 0x75, 0xbd, 0xaa, 0xec, 0xa0, + 0x8f, 0xeb, 0xb5, 0xf5, 0x5a, 0x7b, 0xcb, 0xd0, 0xcb, 0x95, 0x35, 0xbd, 0xaa, 0xec, 0xaa, 0x0f, + 0x02, 0x57, 0x35, 0x9a, 0x5b, 0xe5, 0x8d, 0x0d, 0xa3, 0x79, 0x4e, 0xdf, 0xa2, 0x5f, 0xb4, 0x14, + 0x8b, 0x14, 0xd4, 0xde, 0x6a, 0xad, 0x95, 0x0d, 0xbd, 0xbc, 0x5c, 0xd7, 0x95, 0xfb, 0xb4, 0x67, + 0xcb, 0x60, 0x61, 0xdd, 0xbc, 0x08, 0x5b, 0xbb, 0xa6, 0x0b, 0xcd, 0x0b, 0x3d, 0xa8, 0x3d, 0x4c, + 0x00, 0x4f, 0xed, 0xb3, 0x2c, 0x5e, 0x3a, 0x8f, 0xd7, 0xad, 0x43, 0x04, 0xcc, 0x15, 0x11, 0x03, + 0xd8, 0x3f, 0x85, 0xcd, 0x60, 0x8d, 0x03, 0xec, 0x71, 0x29, 0xe9, 0xa5, 0x43, 0xec, 0x87, 0x1f, + 0x00, 0x88, 0x69, 0xbf, 0x27, 0x83, 0xf9, 0x9a, 0x7d, 0xc9, 0xf2, 0x61, 0x65, 0xd7, 0xb4, 0x77, + 0xa0, 0xd6, 0x13, 0x69, 0x54, 0xab, 0x60, 0xae, 0x0f, 0xdd, 0x3d, 0xcb, 0x43, 0x63, 0x97, 0x87, + 0x2b, 0xb7, 0x78, 0xdb, 0xc3, 0x43, 0x69, 0x61, 0x5b, 0x61, 0x69, 0xc3, 0x74, 0x7d, 0xab, 0x63, + 0xf5, 0x4d, 0xdb, 0xdf, 0x88, 0x32, 0x1b, 0xec, 0x97, 0xda, 0xef, 0xa7, 0x6c, 0x7d, 0x2c, 0xab, + 0x31, 0x60, 0xfe, 0x7b, 0x4e, 0xbc, 0xf5, 0x25, 0x90, 0x4b, 0x87, 0xe5, 0x8f, 0x4d, 0x1d, 0xcb, + 0x6b, 0xc0, 0xd5, 0xb5, 0x46, 0xa5, 0x69, 0x18, 0x7a, 0xa5, 0xbd, 0xb5, 0xa1, 0x1b, 0xeb, 0xb5, + 0x56, 0xab, 0xd6, 0x6c, 0xb4, 0x14, 0x4b, 0xfb, 0x7a, 0x01, 0x2c, 0x92, 0x9a, 0xad, 0x42, 0x1b, + 0xba, 0x68, 0x6c, 0x7f, 0x63, 0x4e, 0x04, 0xd6, 0xdb, 0x01, 0xb0, 0xf0, 0x77, 0xed, 0x2b, 0x7d, + 0x48, 0x51, 0xbd, 0x66, 0x00, 0xd5, 0x5a, 0x98, 0xc1, 0x60, 0x32, 0x0f, 0x6a, 0x84, 0x3c, 0xb6, + 0x46, 0xbc, 0x29, 0xcf, 0x68, 0xc4, 0x0a, 0xaf, 0x11, 0x8f, 0x8e, 0x85, 0x30, 0xa8, 0x68, 0x8c, + 0x19, 0x77, 0x1d, 0x98, 0x25, 0xbc, 0x56, 0xac, 0x2e, 0x85, 0x2f, 0x4a, 0x50, 0x6f, 0x00, 0x0b, + 0xe4, 0x61, 0xc5, 0xea, 0xc1, 0x7b, 0xe0, 0x15, 0x6a, 0xd0, 0xf1, 0x89, 0x03, 0xc2, 0xc9, 0x1f, + 0x42, 0x38, 0x85, 0xb1, 0x85, 0xf3, 0xe3, 0xe1, 0xc8, 0x52, 0xe3, 0x74, 0xfb, 0xfb, 0xd3, 0x0a, + 0x26, 0x9d, 0x76, 0xbf, 0xe4, 0x81, 0x30, 0xb6, 0x1c, 0x18, 0x42, 0x2c, 0xed, 0xbb, 0x12, 0x98, + 0x6b, 0xf9, 0x4e, 0x1f, 0xf5, 0xc7, 0x96, 0xbd, 0x23, 0x36, 0x80, 0x7c, 0x9a, 0xed, 0x72, 0x2a, + 0xbc, 0x82, 0x3d, 0x6a, 0x88, 0x1c, 0x99, 0x02, 0x62, 0x7a, 0x9c, 0x6f, 0x85, 0x3d, 0xce, 0x0a, + 0x87, 0xca, 0x6d, 0xa9, 0xa8, 0x7d, 0x0f, 0x0e, 0x1e, 0x2f, 0xcb, 0x03, 0x25, 0x50, 0x33, 0xbf, + 0xb2, 0xef, 0xba, 0xd0, 0xf6, 0xc5, 0x40, 0xf8, 0x53, 0x99, 0x01, 0x61, 0x8d, 0x07, 0xe1, 0xb6, + 0x04, 0x65, 0x0e, 0x4a, 0xf9, 0x0f, 0xde, 0xce, 0x3f, 0x16, 0x6a, 0xd4, 0x3d, 0x9c, 0x46, 0xfd, + 0x40, 0x7a, 0xd1, 0xa4, 0x53, 0xab, 0xb5, 0x31, 0xb4, 0xea, 0x24, 0x50, 0x90, 0xd1, 0x57, 0x69, + 0xd7, 0xce, 0xe9, 0x5b, 0xb5, 0xc6, 0xb9, 0x5a, 0x5b, 0x57, 0xa0, 0xf6, 0x62, 0x39, 0x1a, 0x84, + 0xfc, 0x55, 0x3c, 0x75, 0x11, 0xd2, 0x8c, 0x2f, 0x49, 0xe3, 0xf5, 0xff, 0xa4, 0x8c, 0xec, 0xf4, + 0x82, 0xc1, 0x44, 0xbc, 0xef, 0x1d, 0xca, 0x54, 0x3a, 0x44, 0xee, 0x1e, 0x03, 0x91, 0x53, 0x40, + 0xad, 0x35, 0xce, 0x95, 0xeb, 0xb5, 0x2a, 0x69, 0xe7, 0x5b, 0xed, 0x7b, 0x37, 0x10, 0x26, 0x3f, + 0x1d, 0x1a, 0x7b, 0x06, 0xbc, 0xe4, 0x5c, 0x14, 0xb4, 0xb8, 0xbf, 0x32, 0x96, 0x8d, 0x46, 0x4a, + 0x88, 0xe9, 0x31, 0x7f, 0x4c, 0x4a, 0x6b, 0xa3, 0x0d, 0x25, 0xf7, 0x40, 0x1a, 0xc5, 0x0e, 0x74, + 0x8f, 0x3b, 0x43, 0x7a, 0xd1, 0xa1, 0xa3, 0xd8, 0xbf, 0xe5, 0x01, 0x20, 0x95, 0x3c, 0x67, 0xc1, + 0xcb, 0xda, 0x7a, 0x84, 0x09, 0xa7, 0xb6, 0xb9, 0x91, 0x6a, 0x2b, 0x0d, 0x53, 0xdb, 0x57, 0xb3, + 0xf6, 0xd4, 0x32, 0x8f, 0xde, 0x2d, 0xb1, 0xe2, 0x46, 0x9c, 0xc4, 0x2f, 0x89, 0x05, 0x8a, 0x22, + 0xf1, 0xe6, 0xe3, 0x75, 0x60, 0x16, 0xff, 0x6d, 0x98, 0x7b, 0x90, 0xb6, 0xa1, 0x28, 0x41, 0x3d, + 0x0b, 0xe6, 0x49, 0xc6, 0x8e, 0x63, 0xa3, 0xfa, 0xe4, 0x71, 0x06, 0x2e, 0x0d, 0x81, 0xd8, 0x71, + 0xa1, 0xe9, 0x3b, 0x2e, 0xa6, 0x51, 0x20, 0x20, 0x32, 0x49, 0xea, 0x2d, 0xe0, 0x84, 0xe5, 0xe1, + 0x56, 0xb5, 0xe9, 0x41, 0x97, 0x30, 0x7b, 0xba, 0x78, 0x7d, 0xee, 0xa6, 0x92, 0x71, 0xf0, 0xc5, + 0x40, 0x5f, 0x3e, 0x93, 0xa2, 0x2f, 0xd7, 0xbe, 0x11, 0x36, 0x77, 0x9d, 0x53, 0xd1, 0xc7, 0xa4, + 0x91, 0x59, 0x3a, 0x05, 0xbd, 0x34, 0x5e, 0xe7, 0x4b, 0xba, 0xdc, 0x2d, 0xa4, 0x56, 0x2b, 0x78, + 0xe1, 0x0c, 0xd2, 0x0e, 0x00, 0xa5, 0xa2, 0xbc, 0x95, 0x66, 0xa3, 0xad, 0x37, 0xda, 0xca, 0xf6, + 0x50, 0xd5, 0xdd, 0xd1, 0x5e, 0x97, 0x07, 0xf9, 0xbb, 0x1d, 0xcb, 0xd6, 0x9e, 0x93, 0xe3, 0x74, + 0xcf, 0x86, 0xfe, 0x65, 0xc7, 0xbd, 0x18, 0xf6, 0x08, 0x51, 0x42, 0xb2, 0x12, 0x44, 0x3a, 0x2b, + 0x8f, 0xd4, 0xd9, 0xfc, 0x30, 0x9d, 0xfd, 0x29, 0xd6, 0x3a, 0xb8, 0x93, 0xd7, 0xd9, 0x1b, 0x87, + 0xc8, 0x1f, 0x31, 0x1f, 0xd3, 0xd3, 0x7c, 0x2a, 0xec, 0x69, 0xee, 0xe2, 0x60, 0x7c, 0xa4, 0x18, + 0x99, 0x74, 0x00, 0x7e, 0x39, 0xd3, 0x1e, 0x66, 0x18, 0xd4, 0x3b, 0x31, 0x50, 0xef, 0x0e, 0xe9, + 0x7c, 0xac, 0x83, 0x7d, 0xd4, 0x7d, 0x07, 0xfb, 0xa3, 0x8b, 0xea, 0xd5, 0xe0, 0x44, 0xb5, 0xb6, + 0xb2, 0xa2, 0x1b, 0x7a, 0xa3, 0xbd, 0xd5, 0xd0, 0xdb, 0xe7, 0x9b, 0xc6, 0x3d, 0x4a, 0x4f, 0x7b, + 0xad, 0x0c, 0x00, 0x92, 0x50, 0xc5, 0xb4, 0x3b, 0xb0, 0x27, 0x36, 0x74, 0xfc, 0xad, 0x94, 0xae, + 0xf3, 0x89, 0xe8, 0xc7, 0xc0, 0xf9, 0x0a, 0x49, 0xbc, 0x55, 0xc6, 0x12, 0x4b, 0x07, 0xea, 0x9b, + 0x1f, 0x08, 0x93, 0x9f, 0xab, 0xc0, 0xf1, 0x80, 0x1e, 0xcd, 0x3e, 0x7c, 0x51, 0xed, 0xed, 0x79, + 0xb0, 0x48, 0x61, 0x09, 0x56, 0x49, 0x9f, 0x27, 0x34, 0xf5, 0xd7, 0x40, 0x89, 0x2e, 0x8a, 0x06, + 0xe3, 0x48, 0xf8, 0x3c, 0xb9, 0xb9, 0xfd, 0x8b, 0xe5, 0x74, 0xb6, 0x1d, 0x5f, 0x93, 0x18, 0x95, + 0xf8, 0xd5, 0x14, 0x73, 0xe2, 0x44, 0x82, 0xe9, 0xd4, 0xe2, 0x93, 0x99, 0xaa, 0xc5, 0x10, 0xbc, + 0x13, 0x96, 0x7c, 0x0e, 0xd1, 0xda, 0xb5, 0xcf, 0xc8, 0xa1, 0xc6, 0x54, 0x61, 0xa7, 0x67, 0xd9, + 0x50, 0xbb, 0xeb, 0x90, 0x0a, 0xc3, 0xaf, 0xa9, 0x8b, 0xe3, 0x4c, 0xcb, 0x8f, 0xc1, 0xf9, 0x35, + 0xe9, 0x71, 0x1e, 0x4e, 0xf0, 0x3f, 0x70, 0xf3, 0xff, 0x8a, 0x0c, 0x4e, 0x30, 0x0d, 0xd1, 0x80, + 0x7b, 0x13, 0xdb, 0x27, 0xf9, 0x61, 0xb6, 0xed, 0xd6, 0x78, 0x4c, 0x87, 0x99, 0xed, 0x07, 0xd8, + 0x88, 0x81, 0xf5, 0xcd, 0x21, 0xac, 0x75, 0x0e, 0xd6, 0x27, 0x8c, 0x41, 0x33, 0x1d, 0xb2, 0xef, + 0xc8, 0x14, 0xd9, 0x6b, 0xc0, 0xd5, 0x1b, 0x65, 0xa3, 0x5d, 0xab, 0xd4, 0x36, 0xca, 0x68, 0x1c, + 0x65, 0x86, 0xec, 0x98, 0x79, 0x01, 0x0f, 0xfa, 0x50, 0x7c, 0x3f, 0x9a, 0x07, 0xd7, 0x0d, 0xef, + 0x68, 0xe9, 0xea, 0xbd, 0x25, 0x02, 0x75, 0x15, 0xcc, 0x74, 0x70, 0x76, 0x82, 0x33, 0xbb, 0x31, + 0x9e, 0xd0, 0x97, 0x93, 0x12, 0x8c, 0xe0, 0x53, 0xed, 0xdd, 0xac, 0x42, 0xb4, 0x79, 0x85, 0x78, + 0x72, 0x32, 0x78, 0x07, 0xf8, 0x8e, 0xd1, 0x8d, 0xcf, 0x85, 0xba, 0x71, 0x9e, 0xd3, 0x8d, 0xca, + 0xe1, 0xc8, 0xa7, 0x53, 0x93, 0xdf, 0x7a, 0x20, 0x74, 0x00, 0xb1, 0xda, 0x64, 0xc5, 0x8f, 0x0a, + 0x43, 0xbb, 0xfb, 0x57, 0xc9, 0xa0, 0x58, 0x85, 0x3d, 0xe8, 0x0b, 0x4e, 0xfe, 0xff, 0x4e, 0x12, + 0xdd, 0x6e, 0x26, 0x30, 0x10, 0xda, 0xf1, 0xcb, 0x30, 0xbe, 0xb5, 0x07, 0x3d, 0xdf, 0xdc, 0xeb, + 0x63, 0x51, 0xcb, 0x46, 0x94, 0xa0, 0xfd, 0x88, 0x24, 0xb2, 0x19, 0x9d, 0x50, 0xcc, 0x7f, 0x8c, + 0x45, 0xed, 0xcf, 0x4b, 0xa0, 0xd4, 0x82, 0x7e, 0xd3, 0xed, 0x42, 0x57, 0x6b, 0x45, 0x18, 0x5d, + 0x0f, 0xe6, 0x30, 0x28, 0x68, 0x9a, 0x19, 0xe2, 0xc4, 0x26, 0xa9, 0x37, 0x82, 0xc5, 0xf0, 0x11, + 0x7f, 0x4e, 0xbb, 0xf1, 0x81, 0x54, 0xed, 0x9b, 0x39, 0x51, 0x1f, 0x19, 0xba, 0x66, 0x4d, 0xb9, + 0x89, 0x69, 0xa5, 0x62, 0xfe, 0x2e, 0x89, 0xa4, 0xb2, 0x77, 0x23, 0x78, 0xa7, 0x04, 0xc0, 0xa6, + 0xed, 0x05, 0x72, 0x7d, 0x64, 0x0a, 0xb9, 0x6a, 0xff, 0x98, 0x4b, 0x37, 0x8b, 0x89, 0xca, 0x89, + 0x91, 0xd8, 0x2f, 0xa6, 0x58, 0x5b, 0x88, 0x25, 0x96, 0xbd, 0xcc, 0xbe, 0x78, 0x1c, 0x14, 0xcf, + 0x9b, 0xbd, 0x1e, 0xf4, 0xb5, 0x57, 0xca, 0xa0, 0x58, 0x71, 0xa1, 0xe9, 0x43, 0x0d, 0x46, 0xa2, + 0xd3, 0x40, 0xc9, 0x75, 0x1c, 0x7f, 0xc3, 0xf4, 0x77, 0xa9, 0xdc, 0xc2, 0x67, 0xf5, 0x09, 0xe0, + 0x41, 0xdb, 0xfb, 0xbd, 0x9e, 0x0f, 0xef, 0xf7, 0x37, 0x5c, 0x6b, 0xcf, 0x74, 0xaf, 0xd4, 0x4d, + 0x7b, 0x67, 0xdf, 0xdc, 0x81, 0x94, 0xbd, 0xb8, 0xd7, 0xd4, 0x91, 0xeb, 0x97, 0xd9, 0x8e, 0xe7, + 0x2e, 0x5e, 0xe8, 0xdf, 0xc7, 0xc9, 0x89, 0xb0, 0xb8, 0x44, 0xd8, 0x8b, 0xe9, 0x79, 0x34, 0x50, + 0xda, 0xb3, 0xe1, 0x9e, 0x63, 0x5b, 0x9d, 0xc0, 0x5a, 0x0d, 0x9e, 0xb5, 0x8f, 0x87, 0x68, 0x2c, + 0x73, 0x68, 0x2c, 0x09, 0x97, 0x92, 0x0e, 0x8a, 0xd6, 0x18, 0xfd, 0xce, 0x43, 0xc0, 0xb5, 0xa4, + 0x1b, 0xd9, 0x6a, 0x37, 0xb7, 0x2a, 0x86, 0x5e, 0x6e, 0xeb, 0x5b, 0xf5, 0x66, 0xa5, 0x5c, 0xdf, + 0x32, 0xf4, 0x8d, 0xa6, 0x02, 0xd1, 0xec, 0x7c, 0xc6, 0x80, 0x1d, 0xe7, 0x12, 0x74, 0xb5, 0x67, + 0xe5, 0xc4, 0x20, 0x4a, 0x10, 0x4a, 0x12, 0x7c, 0xb2, 0x08, 0x7c, 0x3f, 0x25, 0xec, 0x87, 0x47, + 0x05, 0x4b, 0x99, 0x8f, 0x69, 0x31, 0xbf, 0x2e, 0xd4, 0xc7, 0x24, 0x92, 0x7a, 0x00, 0x80, 0xf4, + 0x0f, 0x12, 0x98, 0xa9, 0x38, 0xf6, 0x25, 0xe8, 0xfa, 0xec, 0x24, 0x8b, 0xc5, 0x21, 0x37, 0x80, + 0xc3, 0x69, 0x30, 0x03, 0x6d, 0xdf, 0x75, 0xfa, 0xc1, 0x2c, 0x2b, 0x78, 0xd4, 0xde, 0x98, 0x56, + 0xc2, 0xb4, 0xe4, 0xf8, 0x65, 0xdd, 0xe1, 0x05, 0x71, 0xec, 0xc9, 0x03, 0x6d, 0xe7, 0xb5, 0x69, + 0x70, 0x19, 0xce, 0x40, 0xf6, 0xfd, 0xd8, 0x57, 0x65, 0xb0, 0x40, 0xda, 0x6d, 0x0b, 0x62, 0xb3, + 0x50, 0x6b, 0xb2, 0xeb, 0x9c, 0x03, 0xc2, 0x5f, 0x3b, 0xc6, 0x89, 0xbf, 0x68, 0xf6, 0xfb, 0xe1, + 0xe2, 0xfa, 0xda, 0x31, 0x83, 0x3e, 0x13, 0x35, 0x5f, 0x2e, 0x82, 0xbc, 0xb9, 0xef, 0xef, 0x6a, + 0xdf, 0x15, 0x9e, 0xf1, 0x72, 0xfd, 0x08, 0xe5, 0x27, 0x06, 0x92, 0x93, 0xa0, 0xe0, 0x3b, 0x17, + 0x61, 0x20, 0x07, 0xf2, 0x80, 0xe0, 0x30, 0xfb, 0xfd, 0x36, 0x7e, 0x41, 0xe1, 0x08, 0x9e, 0x91, + 0x81, 0x65, 0x76, 0x3a, 0xce, 0xbe, 0xed, 0xd7, 0x82, 0x05, 0xf6, 0x28, 0x41, 0xfb, 0xa2, 0xd0, + 0x0e, 0x96, 0x00, 0x83, 0xe9, 0x20, 0xbb, 0x30, 0x46, 0x53, 0x5a, 0x02, 0x37, 0x97, 0x37, 0x36, + 0xb6, 0xda, 0xcd, 0x7b, 0xf4, 0x46, 0x64, 0xed, 0x6e, 0xd5, 0x1a, 0x5b, 0xed, 0x35, 0x7d, 0xab, + 0xb2, 0x69, 0xe0, 0xc5, 0xc9, 0x72, 0xa5, 0xd2, 0xdc, 0x6c, 0xb4, 0x15, 0xa8, 0xbd, 0x55, 0x02, + 0xf3, 0x95, 0x9e, 0xe3, 0x85, 0x08, 0x3f, 0x24, 0x42, 0x38, 0x14, 0x63, 0x8e, 0x11, 0xa3, 0xf6, + 0x2f, 0x39, 0x51, 0x3f, 0xb2, 0x40, 0x20, 0x0c, 0xf9, 0x98, 0x5e, 0xea, 0x8d, 0x42, 0x7e, 0x64, + 0xa3, 0xe9, 0x65, 0xdf, 0x24, 0x3e, 0xbb, 0x02, 0x66, 0xca, 0x44, 0x31, 0xb4, 0x3f, 0xcd, 0x81, + 0x62, 0xc5, 0xb1, 0xb7, 0xad, 0x1d, 0x64, 0x41, 0x42, 0xdb, 0xbc, 0xd0, 0x83, 0x55, 0xd3, 0x37, + 0x2f, 0x59, 0xf0, 0x32, 0xae, 0x40, 0xc9, 0x18, 0x48, 0x45, 0x4c, 0xd1, 0x14, 0x78, 0x61, 0x7f, + 0x07, 0x33, 0x55, 0x32, 0xd8, 0x24, 0x34, 0x7e, 0x90, 0xc7, 0x0d, 0x17, 0xba, 0xb0, 0x07, 0x4d, + 0x0f, 0xbb, 0x59, 0xd9, 0xb0, 0x87, 0x95, 0xb6, 0x64, 0xc4, 0xbd, 0x56, 0xcf, 0x82, 0x79, 0xf2, + 0x0a, 0xdb, 0x3f, 0x1e, 0x56, 0xe3, 0x92, 0xc1, 0xa5, 0xa9, 0x8f, 0x02, 0x05, 0x78, 0xbf, 0xef, + 0x9a, 0xa7, 0xbb, 0x18, 0xaf, 0x07, 0x2d, 0x11, 0x47, 0xf2, 0xa5, 0xc0, 0x91, 0x7c, 0xa9, 0x85, + 0xdd, 0xcc, 0x0d, 0x92, 0x4b, 0xfb, 0x3f, 0xa5, 0xd0, 0x7a, 0xf9, 0xbc, 0x1c, 0x29, 0x86, 0x0a, + 0xf2, 0xb6, 0xb9, 0x07, 0xa9, 0x5e, 0xe0, 0xff, 0xea, 0xcd, 0xe0, 0xb8, 0x79, 0xc9, 0xf4, 0x4d, + 0xb7, 0xee, 0x74, 0xcc, 0x1e, 0x1e, 0x36, 0x83, 0x96, 0x3f, 0xf8, 0x02, 0xef, 0x77, 0xf9, 0x8e, + 0x0b, 0x71, 0xae, 0x60, 0xbf, 0x2b, 0x48, 0x40, 0xd4, 0xad, 0x8e, 0x63, 0x63, 0xfe, 0x65, 0x03, + 0xff, 0x47, 0x52, 0xe9, 0x5a, 0x1e, 0xaa, 0x08, 0xa6, 0xd2, 0x20, 0xfb, 0x29, 0xad, 0x2b, 0x76, + 0x07, 0xef, 0x75, 0x95, 0x8c, 0xb8, 0xd7, 0xea, 0x32, 0x98, 0xa3, 0xbb, 0x2f, 0xeb, 0x48, 0xaf, + 0x8a, 0x58, 0xaf, 0xae, 0xe7, 0xdd, 0x74, 0x09, 0x9e, 0x4b, 0x8d, 0x28, 0x9f, 0xc1, 0x7e, 0xa4, + 0x3e, 0x05, 0x5c, 0x4b, 0x1f, 0x2b, 0xfb, 0x9e, 0xef, 0xec, 0x11, 0xd0, 0x57, 0xac, 0x1e, 0xa9, + 0xc1, 0x0c, 0xae, 0x41, 0x52, 0x16, 0xf5, 0x36, 0x70, 0xb2, 0xef, 0xc2, 0x6d, 0xe8, 0xde, 0x6b, + 0xee, 0xed, 0xdf, 0xdf, 0x76, 0x4d, 0xdb, 0xeb, 0x3b, 0xae, 0x7f, 0xba, 0x84, 0x99, 0x1f, 0xfa, + 0x4e, 0xbd, 0x05, 0x9c, 0xb8, 0xcf, 0x73, 0xec, 0x72, 0xdf, 0xaa, 0x5b, 0x9e, 0x0f, 0xed, 0x72, + 0xb7, 0xeb, 0x9e, 0x9e, 0xc5, 0x65, 0x1d, 0x7c, 0xa1, 0xde, 0x00, 0x16, 0xee, 0x73, 0x2c, 0xbb, + 0xe5, 0xbb, 0xd0, 0xdc, 0xdb, 0x74, 0x7b, 0xa7, 0x01, 0xd9, 0x20, 0xe2, 0x12, 0x69, 0xe7, 0x5b, + 0x02, 0x45, 0x02, 0x89, 0xf6, 0xa2, 0x82, 0xb0, 0xd7, 0x3f, 0x15, 0x52, 0xa2, 0xb5, 0xf8, 0x68, + 0x30, 0x43, 0x7b, 0x4d, 0x0c, 0xfe, 0xdc, 0x6d, 0xa7, 0x06, 0x16, 0x48, 0x28, 0x15, 0x23, 0xc8, + 0xa6, 0x3e, 0x16, 0x14, 0x3b, 0x58, 0x54, 0x58, 0x0f, 0xe6, 0x6e, 0xbb, 0x76, 0x78, 0xa1, 0x38, + 0x8b, 0x41, 0xb3, 0x6a, 0x5f, 0x92, 0x85, 0x0e, 0x0a, 0x24, 0x71, 0x9c, 0xae, 0xa7, 0xf8, 0x86, + 0x34, 0x46, 0x57, 0x7c, 0x0b, 0xb8, 0x89, 0xf6, 0xb3, 0xd4, 0xa6, 0xa9, 0x6e, 0x2d, 0x6f, 0x06, + 0xb3, 0x5a, 0x64, 0xe9, 0xb4, 0xda, 0x65, 0xa3, 0xbd, 0xd5, 0x68, 0x56, 0xd1, 0x6c, 0xf8, 0x66, + 0x70, 0xe3, 0x88, 0xdc, 0x7a, 0x7b, 0xab, 0x51, 0x5e, 0xd7, 0x95, 0x6d, 0xde, 0x5e, 0x6a, 0xb5, + 0x9b, 0x1b, 0x5b, 0xc6, 0x66, 0xa3, 0x51, 0x6b, 0xac, 0x12, 0x62, 0xc8, 0x40, 0x3d, 0x15, 0x65, + 0x38, 0x6f, 0xd4, 0xda, 0xfa, 0x56, 0xa5, 0xd9, 0x58, 0xa9, 0xad, 0x2a, 0xd6, 0x28, 0x63, 0xeb, + 0x3e, 0xf5, 0x7a, 0x70, 0x1d, 0xc7, 0x49, 0xad, 0xd9, 0x40, 0x53, 0xf4, 0x4a, 0xb9, 0x51, 0xd1, + 0xd1, 0x7c, 0xfc, 0xa2, 0xaa, 0x81, 0xab, 0x09, 0xb9, 0xad, 0x95, 0x5a, 0x9d, 0xdd, 0x55, 0xfb, + 0x74, 0x4e, 0x3d, 0x0d, 0xae, 0x62, 0xdf, 0x51, 0x77, 0x0a, 0xe5, 0x37, 0x73, 0xea, 0x0d, 0xe0, + 0x21, 0xdc, 0x57, 0x64, 0x83, 0x6c, 0xab, 0x56, 0xdd, 0x5a, 0xaf, 0xb5, 0xd6, 0xcb, 0xed, 0xca, + 0x9a, 0xf2, 0x19, 0x3c, 0x7d, 0x09, 0xed, 0x71, 0xc6, 0x7b, 0xff, 0x25, 0xac, 0x9d, 0x50, 0xe6, + 0x15, 0xf5, 0x91, 0x43, 0x61, 0x4f, 0xb6, 0x8b, 0x3f, 0x19, 0x8e, 0x38, 0x55, 0x4e, 0x85, 0x1e, + 0x9d, 0x82, 0x56, 0x3a, 0x1d, 0x6a, 0x8f, 0xa1, 0x42, 0xd7, 0x83, 0xeb, 0x1a, 0x3a, 0x41, 0xca, + 0xd0, 0x2b, 0xcd, 0x73, 0xba, 0xb1, 0x75, 0xbe, 0x5c, 0xaf, 0xeb, 0xed, 0xad, 0x95, 0x9a, 0xd1, + 0x6a, 0x2b, 0xdb, 0xda, 0x3f, 0x4a, 0xe1, 0xb2, 0x14, 0x23, 0xad, 0x3f, 0x95, 0xd2, 0x36, 0xeb, + 0xc4, 0xe5, 0xa7, 0xef, 0x07, 0x45, 0xcf, 0x37, 0xfd, 0x7d, 0x8f, 0xb6, 0xea, 0x07, 0x0f, 0x6f, + 0xd5, 0x4b, 0x2d, 0x9c, 0xc9, 0xa0, 0x99, 0xb5, 0x2f, 0xe5, 0xd2, 0x34, 0xd3, 0x09, 0xac, 0x4c, + 0x59, 0x63, 0x88, 0xf8, 0x0c, 0xd0, 0x02, 0x6d, 0xaf, 0xb5, 0xb6, 0xca, 0x75, 0x43, 0x2f, 0x57, + 0xef, 0x0d, 0xd7, 0xa3, 0xa0, 0x7a, 0x35, 0x38, 0xb1, 0xd9, 0x28, 0x2f, 0xd7, 0x75, 0xdc, 0x5c, + 0x9a, 0x8d, 0x86, 0x5e, 0x41, 0x72, 0xff, 0x11, 0xbc, 0xfb, 0x83, 0xac, 0x72, 0xcc, 0x37, 0xb2, + 0x9c, 0x18, 0xf9, 0x7f, 0x5d, 0x12, 0xf5, 0xd2, 0x8b, 0x34, 0x8c, 0xa5, 0x35, 0x59, 0x1c, 0xbe, + 0x28, 0xe4, 0x14, 0x27, 0xc4, 0x49, 0x3a, 0x3c, 0xfe, 0xdb, 0x18, 0x78, 0x5c, 0x0d, 0x4e, 0xb0, + 0x78, 0x60, 0xe7, 0xb8, 0x78, 0x18, 0xfe, 0x44, 0x06, 0x33, 0xeb, 0xd6, 0x0e, 0x76, 0xd5, 0xde, + 0x8f, 0x0c, 0x94, 0x45, 0x20, 0x85, 0x8e, 0x3f, 0x92, 0xd5, 0xe5, 0x26, 0xf3, 0x92, 0xf8, 0x7a, + 0x8b, 0xd0, 0x84, 0xfd, 0x4b, 0xa9, 0x7b, 0x26, 0xca, 0x70, 0x4c, 0xcf, 0xf4, 0x7c, 0x29, 0x4d, + 0xcf, 0x34, 0x9c, 0x56, 0x2a, 0x98, 0x90, 0xe9, 0xe0, 0xc2, 0x67, 0xec, 0x5b, 0x2e, 0xec, 0x62, + 0x33, 0x11, 0xd7, 0x5b, 0x36, 0xf8, 0xc4, 0xb3, 0xee, 0xe1, 0xc0, 0x64, 0xbd, 0x6c, 0xe6, 0x41, + 0x29, 0x1c, 0x4d, 0xf0, 0x86, 0x0f, 0x7a, 0xa9, 0x37, 0x9a, 0x9b, 0xab, 0x6b, 0x5b, 0x2b, 0x86, + 0xae, 0xd3, 0x25, 0xe2, 0x1d, 0xed, 0x5d, 0x12, 0x58, 0xa0, 0x35, 0xa4, 0xde, 0x13, 0x0f, 0x89, + 0x05, 0x99, 0xc2, 0xf1, 0xef, 0xec, 0xf4, 0x64, 0x95, 0x87, 0xe3, 0x31, 0x49, 0x22, 0x4c, 0x74, + 0x9f, 0x78, 0x53, 0xd8, 0x84, 0xee, 0xe6, 0x40, 0x79, 0x7c, 0x6a, 0x8a, 0xd9, 0x4f, 0x51, 0x5e, + 0x04, 0x40, 0xb1, 0x05, 0x7b, 0xb0, 0xe3, 0x6b, 0x1f, 0x96, 0xc7, 0x6e, 0x13, 0x71, 0xe6, 0xb6, + 0x9c, 0xca, 0xdc, 0xce, 0x67, 0x60, 0x6e, 0x17, 0xc6, 0x37, 0xb7, 0x8b, 0x69, 0xcd, 0xed, 0x99, + 0x38, 0x73, 0x3b, 0xa1, 0xd7, 0x28, 0x25, 0xf6, 0x1a, 0x03, 0x86, 0xba, 0x51, 0xa7, 0x26, 0x3d, + 0x9f, 0x48, 0x95, 0xf9, 0x13, 0xc5, 0xb4, 0xe3, 0x38, 0x01, 0xfe, 0x68, 0xcd, 0xf3, 0x9f, 0x28, + 0xa4, 0x19, 0xf7, 0x87, 0x72, 0x9c, 0xae, 0x95, 0xbc, 0x22, 0x9f, 0xc1, 0xa2, 0xa3, 0xfa, 0x30, + 0xf0, 0x90, 0xe8, 0x79, 0x4b, 0x7f, 0x5a, 0xad, 0xd5, 0x6e, 0x61, 0x9b, 0xbc, 0xd2, 0x34, 0x8c, + 0xcd, 0x0d, 0xb2, 0x5d, 0x75, 0x0a, 0xa8, 0x11, 0x15, 0x63, 0xb3, 0x41, 0x2c, 0xf0, 0x1d, 0x9e, + 0xfa, 0x4a, 0xad, 0x51, 0xdd, 0x0a, 0x47, 0xb5, 0xc6, 0x4a, 0x53, 0xd9, 0x55, 0x97, 0xc0, 0xcd, + 0x0c, 0x75, 0xdc, 0x01, 0x92, 0x12, 0xca, 0x8d, 0xea, 0xd6, 0x7a, 0x43, 0x5f, 0x6f, 0x36, 0x6a, + 0x15, 0x9c, 0xde, 0xd2, 0xdb, 0x8a, 0x85, 0x4c, 0xc1, 0x01, 0x9b, 0xbf, 0xa5, 0x97, 0x8d, 0xca, + 0x9a, 0x6e, 0x90, 0x22, 0xef, 0x53, 0x6f, 0x04, 0x67, 0xcb, 0x8d, 0x66, 0x1b, 0xa5, 0x94, 0x1b, + 0xf7, 0xb6, 0xef, 0xdd, 0xd0, 0xb7, 0x36, 0x8c, 0x66, 0x45, 0x6f, 0xb5, 0xd0, 0x48, 0x4a, 0x67, + 0x08, 0x4a, 0x4f, 0x7d, 0x32, 0xb8, 0x83, 0x61, 0x4d, 0x6f, 0x63, 0xdf, 0x88, 0xf5, 0x26, 0x76, + 0x8f, 0xab, 0xea, 0x5b, 0x6b, 0xe5, 0xd6, 0x56, 0xad, 0x51, 0x69, 0xae, 0x6f, 0x94, 0xdb, 0x35, + 0x34, 0xe0, 0x6e, 0x18, 0xcd, 0x76, 0x73, 0xeb, 0x9c, 0x6e, 0xb4, 0x6a, 0xcd, 0x86, 0x62, 0xa3, + 0x2a, 0x33, 0x23, 0x74, 0x60, 0x29, 0x39, 0xea, 0x75, 0xe0, 0x74, 0x90, 0x5e, 0x6f, 0x22, 0x41, + 0x33, 0x73, 0x86, 0x3e, 0x6b, 0x67, 0xb5, 0xda, 0x4d, 0x83, 0xcc, 0x1a, 0xd6, 0x6b, 0xab, 0x06, + 0x9a, 0xea, 0x28, 0xcf, 0xc8, 0x74, 0x4e, 0xf1, 0xcf, 0x12, 0xc8, 0xb7, 0x7c, 0xa7, 0xaf, 0x7d, + 0x5f, 0xd4, 0x1d, 0x9e, 0x01, 0xc0, 0xc5, 0xae, 0x10, 0x55, 0xd3, 0x37, 0xe9, 0x6a, 0x0d, 0x93, + 0xa2, 0xfd, 0x86, 0xf0, 0xfe, 0x6d, 0x64, 0x75, 0x39, 0xfd, 0x98, 0xe1, 0xe3, 0x3b, 0x62, 0xc7, + 0x85, 0xe3, 0x09, 0x4d, 0xe1, 0x50, 0x9d, 0x06, 0x4e, 0x31, 0xb0, 0x22, 0xf9, 0x07, 0x2a, 0x03, + 0xd5, 0x07, 0x81, 0xab, 0x06, 0x94, 0x0f, 0xeb, 0xdc, 0xb6, 0xfa, 0x50, 0xf0, 0x60, 0x46, 0xfd, + 0xf5, 0xf5, 0xe6, 0x39, 0x3d, 0x54, 0xf4, 0x6a, 0xb9, 0x5d, 0x56, 0x76, 0xb4, 0xcf, 0xcb, 0x20, + 0xbf, 0xee, 0x5c, 0x1a, 0xdc, 0x36, 0xb7, 0xe1, 0x65, 0x66, 0x6f, 0x25, 0x78, 0xd4, 0x5e, 0x2f, + 0xa7, 0x15, 0xfb, 0x7a, 0xbc, 0x8b, 0xcc, 0x17, 0xa5, 0x34, 0x62, 0x5f, 0x3f, 0xac, 0x5f, 0xcc, + 0x5f, 0x8f, 0x23, 0xf6, 0x18, 0xd1, 0x42, 0xf5, 0x2c, 0x38, 0x13, 0xbd, 0xa8, 0x55, 0xf5, 0x46, + 0xbb, 0xb6, 0x72, 0x6f, 0x24, 0xdc, 0x9a, 0x21, 0x24, 0xfe, 0x51, 0xdd, 0x5c, 0xf2, 0x5a, 0xc1, + 0x69, 0x70, 0x32, 0x7a, 0xb7, 0xaa, 0xb7, 0x83, 0x37, 0xf7, 0x69, 0xcf, 0x29, 0x80, 0x79, 0xd2, + 0xed, 0x6f, 0xf6, 0xbb, 0xc8, 0xfa, 0x7e, 0x6c, 0x84, 0xee, 0x4d, 0xe0, 0x78, 0x6d, 0x63, 0xa5, + 0xd5, 0xf2, 0x1d, 0xd7, 0xdc, 0x81, 0x78, 0x1c, 0x25, 0xd2, 0x1a, 0x4c, 0xd6, 0xde, 0x2b, 0xbc, + 0xfa, 0xcf, 0x0f, 0x35, 0xa4, 0xcc, 0x18, 0xd4, 0xbf, 0x2a, 0xb4, 0x5a, 0x2f, 0x40, 0x30, 0x1d, + 0xfa, 0xf7, 0x4d, 0xb8, 0xcd, 0xc5, 0xe3, 0xb2, 0x7d, 0xf6, 0xb9, 0x12, 0x98, 0x6d, 0x5b, 0x7b, + 0xf0, 0x99, 0x8e, 0x0d, 0x3d, 0x75, 0x06, 0xc8, 0xab, 0xeb, 0x6d, 0xe5, 0x18, 0xfa, 0x83, 0xa6, + 0x45, 0x39, 0xfc, 0x47, 0x47, 0x05, 0xa0, 0x3f, 0xe5, 0xb6, 0x22, 0xa3, 0x3f, 0xeb, 0x7a, 0x5b, + 0xc9, 0xa3, 0x3f, 0x0d, 0xbd, 0xad, 0x14, 0xd0, 0x9f, 0x8d, 0x7a, 0x5b, 0x29, 0xa2, 0x3f, 0xb5, + 0x56, 0x5b, 0x99, 0x41, 0x7f, 0x96, 0x5b, 0x6d, 0xa5, 0x84, 0xfe, 0x9c, 0x6b, 0xb5, 0x95, 0x59, + 0xf4, 0xa7, 0xd2, 0x6e, 0x2b, 0x00, 0xfd, 0xb9, 0xbb, 0xd5, 0x56, 0xe6, 0xd0, 0x9f, 0x72, 0xa5, + 0xad, 0xcc, 0xe3, 0x3f, 0x7a, 0x5b, 0x59, 0x40, 0x7f, 0x5a, 0xad, 0xb6, 0xb2, 0x88, 0x29, 0xb7, + 0xda, 0xca, 0x71, 0x5c, 0x56, 0xad, 0xad, 0x28, 0xe8, 0xcf, 0x5a, 0xab, 0xad, 0x9c, 0xc0, 0x99, + 0x5b, 0x6d, 0x45, 0xc5, 0x85, 0xb6, 0xda, 0xca, 0x55, 0x38, 0x4f, 0xab, 0xad, 0x9c, 0xc4, 0x45, + 0xb4, 0xda, 0xca, 0xd5, 0x98, 0x0d, 0xbd, 0xad, 0x9c, 0xc2, 0x79, 0x8c, 0xb6, 0xf2, 0x20, 0xfc, + 0xaa, 0xd1, 0x56, 0x4e, 0x63, 0xc6, 0xf4, 0xb6, 0x72, 0x0d, 0xfe, 0x63, 0xb4, 0x15, 0x0d, 0xbf, + 0x2a, 0xb7, 0x95, 0x6b, 0xb5, 0x07, 0x83, 0xd9, 0x55, 0xe8, 0x13, 0x10, 0x35, 0x05, 0xc8, 0xab, + 0xd0, 0x67, 0x27, 0xe2, 0xaf, 0xcc, 0x83, 0x07, 0xd1, 0xc5, 0x9b, 0x15, 0xd7, 0xd9, 0xab, 0xc3, + 0x1d, 0xb3, 0x73, 0x45, 0xbf, 0x1f, 0x19, 0x7c, 0xda, 0x0b, 0x73, 0xdc, 0x8a, 0x76, 0x3f, 0xea, + 0x8d, 0xf0, 0xff, 0x44, 0x03, 0x39, 0x58, 0xa3, 0x96, 0xf9, 0x35, 0xea, 0x38, 0x93, 0x30, 0x2f, + 0x32, 0x91, 0xfc, 0x7b, 0xb6, 0x31, 0x70, 0x1b, 0x52, 0xb9, 0x81, 0x0d, 0x29, 0xd4, 0xc2, 0xfa, + 0xd0, 0xf5, 0x1c, 0xdb, 0xec, 0xb5, 0xa8, 0xfb, 0x11, 0x99, 0xab, 0x0e, 0x26, 0xab, 0x4f, 0x0d, + 0x1a, 0x15, 0x31, 0xf8, 0x9e, 0x98, 0xb4, 0xbc, 0x35, 0x28, 0xa1, 0x98, 0xf6, 0xf5, 0x99, 0xb0, + 0x7d, 0xb5, 0xb9, 0xf6, 0xf5, 0x94, 0x43, 0xd0, 0x4e, 0xd7, 0xd4, 0x6a, 0xe3, 0x4d, 0x45, 0x23, + 0xe7, 0xfc, 0x60, 0xff, 0x4b, 0xd6, 0x3e, 0x2f, 0x81, 0x53, 0xba, 0x3d, 0x6c, 0x2a, 0xc3, 0xaa, + 0xd1, 0x5b, 0x59, 0x68, 0x36, 0x78, 0x91, 0xde, 0x31, 0xb4, 0xda, 0xc3, 0x69, 0xc6, 0x48, 0xf4, + 0x77, 0x42, 0x89, 0xb6, 0x38, 0x89, 0xde, 0x35, 0x3e, 0xe9, 0x74, 0x02, 0x6d, 0x4c, 0xb4, 0xef, + 0xca, 0x6b, 0x7f, 0x21, 0x81, 0x13, 0xc4, 0x83, 0xf0, 0x6e, 0x32, 0x73, 0xc2, 0xbd, 0x3d, 0x6f, + 0x7d, 0xf5, 0xa2, 0x59, 0x16, 0xd1, 0x6f, 0x26, 0x45, 0x7b, 0x1d, 0x2b, 0xf0, 0x7b, 0x78, 0x81, + 0xc7, 0xf4, 0xe3, 0x83, 0xc5, 0xc5, 0xc8, 0xfa, 0x37, 0x43, 0x59, 0x37, 0x38, 0x59, 0xdf, 0x31, + 0x16, 0xd5, 0xa3, 0x15, 0xf3, 0x37, 0xf2, 0xe0, 0xc1, 0x84, 0x43, 0xaa, 0x08, 0xa4, 0x1f, 0x2c, + 0xdb, 0x5d, 0x03, 0x7a, 0xbe, 0xe9, 0xfa, 0x5c, 0x68, 0xa2, 0x81, 0xa9, 0x79, 0x2e, 0x83, 0xa9, + 0xb9, 0x34, 0x72, 0x6a, 0xae, 0xbd, 0x87, 0x35, 0xf0, 0xce, 0xf3, 0xc8, 0x96, 0x13, 0x30, 0x88, + 0xa9, 0x61, 0x5c, 0x8b, 0x0a, 0x2d, 0xbf, 0x1f, 0xe4, 0x50, 0x5e, 0x39, 0x74, 0x09, 0xe9, 0x10, + 0xff, 0x8d, 0xc9, 0x5a, 0xe2, 0x79, 0xf6, 0x1d, 0x6f, 0x36, 0x2a, 0xdd, 0x4c, 0xa7, 0x50, 0x2f, + 0x2e, 0x81, 0x59, 0xdc, 0xe5, 0xd4, 0x2d, 0xfb, 0xa2, 0xf6, 0xe7, 0x32, 0x98, 0x6f, 0xc0, 0xcb, + 0x95, 0x5d, 0xb3, 0xd7, 0x83, 0xf6, 0x0e, 0xd4, 0xee, 0xe3, 0x6c, 0x7b, 0xb3, 0xdf, 0x6f, 0x44, + 0xfb, 0xc3, 0xc1, 0xa3, 0x7a, 0x17, 0x28, 0x78, 0x1d, 0x27, 0x0c, 0x90, 0xf1, 0x7d, 0x31, 0xab, + 0xd7, 0xe5, 0x7d, 0x7f, 0x77, 0x09, 0x97, 0x55, 0xee, 0x5b, 0x2d, 0xf4, 0x81, 0x41, 0xbe, 0xa3, + 0xe3, 0xe4, 0xd7, 0x87, 0x76, 0xc6, 0xb9, 0x84, 0xce, 0x38, 0x64, 0x7c, 0x89, 0x65, 0x3a, 0x66, + 0x91, 0xe4, 0x7a, 0x30, 0xd7, 0x09, 0xb2, 0x84, 0xa7, 0xf4, 0xd8, 0x24, 0xed, 0x2f, 0x53, 0x75, + 0xd7, 0x42, 0x85, 0xa7, 0xd3, 0x2a, 0x38, 0x61, 0x53, 0xf3, 0x6a, 0x70, 0xa2, 0xdd, 0x6c, 0x6e, + 0xad, 0x97, 0x1b, 0xf7, 0x46, 0xb1, 0x87, 0xb6, 0xb5, 0x57, 0xe4, 0xc1, 0x62, 0xcb, 0xe9, 0x5d, + 0x82, 0x11, 0xce, 0x35, 0xce, 0xfd, 0x93, 0x95, 0x53, 0xee, 0x80, 0x9c, 0xd4, 0x53, 0xa0, 0x68, + 0xda, 0xde, 0x65, 0x18, 0x98, 0xff, 0xf4, 0x89, 0xc2, 0xf8, 0x51, 0xb6, 0x23, 0x30, 0x78, 0x18, + 0xef, 0x1c, 0x21, 0x49, 0x9e, 0xab, 0x18, 0x20, 0xcf, 0x82, 0x79, 0x8f, 0x78, 0x89, 0xb4, 0x19, + 0x67, 0x20, 0x2e, 0x0d, 0xb3, 0x48, 0xdc, 0x94, 0x64, 0xca, 0x22, 0x7e, 0xd2, 0x5e, 0x1b, 0xf6, + 0x1f, 0x9b, 0x1c, 0xc4, 0xe5, 0xc3, 0x30, 0x96, 0x0e, 0xe4, 0x57, 0x4d, 0x7a, 0x12, 0x7f, 0x1a, + 0x9c, 0x0c, 0x0e, 0xb7, 0x57, 0xd6, 0xca, 0xf5, 0xba, 0xde, 0x58, 0xd5, 0xb7, 0x6a, 0x55, 0xb2, + 0x9f, 0x1c, 0xa5, 0x94, 0xdb, 0x6d, 0x7d, 0x7d, 0xa3, 0xdd, 0xda, 0xd2, 0x9f, 0x56, 0xd1, 0xf5, + 0x2a, 0x76, 0xc0, 0xc6, 0x27, 0x28, 0x03, 0x57, 0xf9, 0x72, 0xa3, 0x75, 0x5e, 0x37, 0x94, 0xdd, + 0xb3, 0x65, 0x30, 0xc7, 0x0c, 0x14, 0x88, 0xbb, 0x2a, 0xdc, 0x36, 0xf7, 0x7b, 0xd4, 0x1c, 0x57, + 0x8e, 0x21, 0xee, 0xb0, 0x6c, 0x9a, 0x76, 0xef, 0x8a, 0x92, 0x53, 0x15, 0x30, 0xcf, 0x8e, 0x09, + 0x8a, 0xa4, 0x7d, 0xf3, 0x3a, 0x30, 0x7b, 0xde, 0x71, 0x2f, 0x62, 0xaf, 0x61, 0xed, 0x03, 0x24, + 0x46, 0x61, 0x10, 0x10, 0x83, 0x31, 0xc0, 0x5e, 0x25, 0xee, 0x26, 0x16, 0x50, 0x5b, 0x1a, 0x19, + 0xf4, 0xe2, 0x7a, 0x30, 0x77, 0x39, 0xc8, 0x1d, 0xb5, 0x74, 0x26, 0x49, 0xfb, 0x25, 0x31, 0xc7, + 0xaf, 0xd1, 0x45, 0x66, 0xbf, 0xea, 0xff, 0x76, 0x09, 0x14, 0x57, 0xa1, 0x5f, 0xee, 0xf5, 0x58, + 0xb9, 0xbd, 0x4c, 0xf8, 0x1c, 0x29, 0x57, 0x89, 0x72, 0xaf, 0x17, 0xdf, 0xa8, 0x18, 0x01, 0x05, + 0xe7, 0x9d, 0xb8, 0x34, 0x41, 0x2f, 0xed, 0x11, 0x05, 0x66, 0x2f, 0xb1, 0xbf, 0x8d, 0x5c, 0xb3, + 0x5f, 0xcf, 0x98, 0x49, 0x8f, 0x89, 0xe2, 0x53, 0xe6, 0x92, 0x9d, 0xa4, 0x82, 0x7c, 0xea, 0x3d, + 0x60, 0x66, 0xdf, 0x83, 0x15, 0xd3, 0x0b, 0x86, 0x36, 0xbe, 0xa6, 0xcd, 0x0b, 0xf7, 0xc1, 0x8e, + 0xbf, 0x54, 0xdb, 0x43, 0x13, 0x9f, 0x4d, 0x92, 0x31, 0x0c, 0xf9, 0x48, 0x9f, 0x8d, 0x80, 0x02, + 0x9a, 0x76, 0x5e, 0xb6, 0xfc, 0xdd, 0xca, 0xae, 0xe9, 0xd3, 0xcd, 0x96, 0xf0, 0x59, 0xfb, 0xd0, + 0x18, 0x70, 0x26, 0x3a, 0xec, 0xc4, 0x1f, 0x47, 0xbf, 0x19, 0x28, 0xd8, 0xfc, 0xb1, 0xec, 0x1d, + 0xc2, 0x7f, 0x38, 0xc7, 0x3c, 0x90, 0x9e, 0x1a, 0xf0, 0x09, 0x78, 0xe4, 0x8c, 0x03, 0xf8, 0x0f, + 0xc9, 0x20, 0xdf, 0xec, 0x43, 0x5b, 0xf8, 0x9c, 0x66, 0x88, 0x83, 0x34, 0x80, 0xc3, 0xfb, 0xc4, + 0x5d, 0x88, 0xc3, 0x4a, 0xa3, 0x92, 0x63, 0x50, 0xb8, 0x15, 0xe4, 0x2d, 0x7b, 0xdb, 0xa1, 0x56, + 0xf0, 0xb5, 0x31, 0x76, 0x51, 0xcd, 0xde, 0x76, 0x0c, 0x9c, 0x51, 0x7b, 0x9f, 0x98, 0xf7, 0x70, + 0x52, 0xd9, 0xe9, 0xc4, 0xbd, 0x32, 0xc6, 0x58, 0xa4, 0x82, 0xc5, 0xc8, 0x44, 0xad, 0x37, 0xcb, + 0x55, 0xa5, 0xab, 0xfd, 0x4d, 0x09, 0x14, 0x89, 0xda, 0x68, 0x2f, 0x91, 0x81, 0x5c, 0xee, 0x76, + 0x63, 0xc0, 0x90, 0x0e, 0x80, 0xe1, 0x04, 0x5a, 0x48, 0x3d, 0xbd, 0x83, 0x67, 0x3e, 0xb0, 0xa1, + 0xe0, 0xd8, 0x40, 0x9b, 0x64, 0xb9, 0xdb, 0x8d, 0x3f, 0xf7, 0x10, 0x16, 0x28, 0xf1, 0x05, 0xb2, + 0x3d, 0x84, 0x2c, 0xd6, 0x43, 0xa4, 0x1e, 0x48, 0x62, 0xf9, 0xcb, 0xbe, 0x95, 0xfc, 0xbd, 0x04, + 0x66, 0xea, 0x96, 0xe7, 0x23, 0x6c, 0xca, 0x22, 0xd8, 0x5c, 0x07, 0x66, 0x03, 0xd1, 0xa0, 0x2e, + 0x13, 0x8d, 0x07, 0x51, 0x02, 0x3f, 0x93, 0xbf, 0x9b, 0x47, 0xe7, 0x71, 0xc9, 0xb5, 0xa7, 0x5c, + 0xc4, 0x9f, 0x89, 0x8b, 0x8a, 0x95, 0x06, 0x8b, 0xfd, 0xe5, 0x50, 0xe0, 0xeb, 0x9c, 0xc0, 0x6f, + 0x1f, 0xa7, 0xc8, 0xec, 0x85, 0xfe, 0x87, 0x12, 0x00, 0xa8, 0x6c, 0x7a, 0xf0, 0xf8, 0x11, 0x5c, + 0x38, 0x91, 0x04, 0xe9, 0xbe, 0x82, 0x95, 0xee, 0x3a, 0x2f, 0xdd, 0x1f, 0x18, 0x5d, 0xd5, 0xa4, + 0x03, 0xc6, 0xaa, 0x02, 0x64, 0x2b, 0x14, 0x2d, 0xfa, 0xab, 0xbd, 0x3d, 0x14, 0xea, 0x06, 0x27, + 0xd4, 0x3b, 0xc7, 0x2c, 0x29, 0x7b, 0xb9, 0xfe, 0xb1, 0x04, 0x66, 0x5a, 0xd0, 0x47, 0x5d, 0xa7, + 0x76, 0x4e, 0xa4, 0xd7, 0x67, 0xda, 0xb6, 0x24, 0xd8, 0xb6, 0xbf, 0x9d, 0x13, 0x8d, 0x8b, 0x17, + 0x49, 0x86, 0xf2, 0x14, 0xb3, 0x7a, 0xf1, 0x7a, 0xa1, 0xb8, 0x78, 0xa3, 0xa8, 0x65, 0x2f, 0xdd, + 0xb7, 0x4a, 0xa1, 0xa7, 0x09, 0x7f, 0x2e, 0x90, 0x35, 0xab, 0x73, 0x07, 0xcd, 0x6a, 0xf1, 0x73, + 0x81, 0x6c, 0x1d, 0xe3, 0x1d, 0x1b, 0x52, 0x1b, 0x20, 0x13, 0xf0, 0x39, 0x18, 0x47, 0x5e, 0xcf, + 0x96, 0x41, 0x91, 0x6e, 0x3e, 0xdc, 0x95, 0xbc, 0xf7, 0x30, 0x7a, 0x6a, 0xf2, 0xfe, 0x31, 0x4c, + 0xc1, 0xa4, 0x65, 0xfd, 0x90, 0x0d, 0x89, 0x61, 0xe3, 0x16, 0x50, 0xc0, 0x51, 0xe9, 0xe9, 0x38, + 0x17, 0xb9, 0x8b, 0x04, 0x24, 0x74, 0xf4, 0xd6, 0x20, 0x99, 0x52, 0xa3, 0x30, 0x81, 0x9d, 0x80, + 0x71, 0x50, 0xf8, 0x86, 0x0a, 0xc0, 0xc6, 0xfe, 0x85, 0x9e, 0xe5, 0xed, 0x5a, 0x36, 0xf6, 0x31, + 0x9b, 0xa7, 0x8f, 0x24, 0xb8, 0x7a, 0xa2, 0x49, 0x18, 0x6b, 0x14, 0x28, 0x40, 0xde, 0x77, 0x2d, + 0x6a, 0x22, 0xa3, 0xbf, 0xea, 0x93, 0x42, 0x6f, 0xcd, 0xfc, 0x40, 0xe0, 0x17, 0x24, 0x86, 0x88, + 0x83, 0x25, 0xa6, 0xf4, 0xc8, 0x6b, 0x93, 0x8d, 0xa0, 0x5f, 0xe0, 0x23, 0xe8, 0x73, 0xa7, 0xc1, + 0x8b, 0x03, 0xa7, 0xc1, 0x11, 0x8e, 0x9e, 0xf5, 0x4c, 0x12, 0xb4, 0x4b, 0x36, 0xf0, 0x7f, 0xf4, + 0x05, 0x76, 0x2f, 0xc2, 0xde, 0x7d, 0xe4, 0xcc, 0x41, 0x94, 0xc0, 0xf6, 0x79, 0xb3, 0x82, 0x7d, + 0xde, 0xc7, 0xa2, 0xb9, 0x93, 0x23, 0x68, 0x4c, 0xa7, 0x90, 0x1c, 0xc7, 0x6e, 0x7e, 0x80, 0x5d, + 0xed, 0x13, 0xc2, 0x71, 0x48, 0x19, 0x19, 0x27, 0xce, 0x82, 0x28, 0x07, 0x52, 0xc8, 0x01, 0xb3, + 0x87, 0x9c, 0xd4, 0x03, 0x8f, 0xa2, 0x9f, 0x4e, 0x97, 0xf7, 0xc6, 0xb3, 0xb1, 0x83, 0x63, 0xf5, + 0xcd, 0xe5, 0xbb, 0xf5, 0x4a, 0x5b, 0x81, 0x07, 0x8f, 0xda, 0xe3, 0x43, 0xf5, 0xe4, 0x00, 0x7d, + 0xb4, 0xa6, 0xa3, 0xfd, 0x4f, 0x09, 0x14, 0xa9, 0xb9, 0x71, 0xd7, 0x21, 0x21, 0xd4, 0x5e, 0x39, + 0x0e, 0x24, 0x89, 0xd1, 0x4d, 0x3e, 0x9b, 0x16, 0x80, 0x09, 0x18, 0x18, 0xf7, 0x66, 0x06, 0x80, + 0xf6, 0x4f, 0x12, 0xc8, 0x23, 0x33, 0x48, 0x2c, 0x76, 0xc4, 0x67, 0x84, 0x5d, 0x8a, 0x19, 0x01, + 0x20, 0xf2, 0x31, 0xfa, 0xbd, 0x0c, 0x66, 0xfb, 0x24, 0x63, 0x18, 0xb9, 0xe4, 0x06, 0x81, 0xce, + 0x08, 0x1a, 0xd1, 0x67, 0xcc, 0x94, 0x33, 0xc9, 0x2d, 0x39, 0x99, 0x9f, 0x74, 0x70, 0xe8, 0x93, + 0x08, 0x33, 0xb1, 0xad, 0xfd, 0xab, 0x04, 0x80, 0x01, 0x3d, 0xa7, 0x77, 0x09, 0x6e, 0xba, 0x96, + 0x76, 0x6d, 0x04, 0x00, 0x6d, 0xf6, 0xb9, 0xa8, 0xd9, 0x7f, 0x4e, 0x12, 0x75, 0x1e, 0xe6, 0x34, + 0x2f, 0x20, 0x1e, 0x23, 0xfe, 0x27, 0x83, 0x19, 0x2a, 0x47, 0x6a, 0x53, 0x8a, 0x09, 0x3f, 0xf8, + 0x48, 0xfb, 0xa0, 0x90, 0xf3, 0xb1, 0x08, 0x47, 0xe9, 0x00, 0xa8, 0x8c, 0x01, 0xc0, 0x71, 0x30, + 0x17, 0x00, 0xb0, 0x69, 0xd4, 0x14, 0xa8, 0xbd, 0x5b, 0xc6, 0x1e, 0x1a, 0x64, 0x70, 0x3b, 0x7c, + 0x4f, 0xf3, 0x17, 0xc2, 0x93, 0x7d, 0x46, 0x1e, 0x61, 0xf9, 0x19, 0x01, 0xf4, 0xbb, 0x42, 0xb3, + 0x7b, 0x01, 0x86, 0x1e, 0x28, 0xfd, 0xd5, 0x59, 0x1d, 0x2c, 0x70, 0x56, 0x89, 0x7a, 0x1a, 0x9c, + 0xe4, 0x12, 0xc8, 0x78, 0xd7, 0x55, 0x8e, 0xa9, 0x1a, 0x38, 0xc5, 0xbd, 0xa1, 0x0f, 0xb0, 0xab, + 0xe4, 0xb4, 0x77, 0xfd, 0x49, 0x2e, 0x5c, 0xef, 0x79, 0x7f, 0x9e, 0xae, 0xbe, 0x7d, 0x8a, 0x0f, + 0x96, 0xd9, 0x71, 0x6c, 0x1f, 0xde, 0xcf, 0xb8, 0xb9, 0x84, 0x09, 0x89, 0x56, 0xc3, 0x69, 0x30, + 0xe3, 0xbb, 0xac, 0xeb, 0x4b, 0xf0, 0xc8, 0x2a, 0x56, 0x81, 0x57, 0xac, 0x06, 0x38, 0x6b, 0xd9, + 0x9d, 0xde, 0x7e, 0x17, 0x1a, 0xb0, 0x67, 0x22, 0x19, 0x7a, 0x65, 0xaf, 0x0a, 0xfb, 0xd0, 0xee, + 0x42, 0xdb, 0x27, 0x7c, 0x06, 0xe7, 0x66, 0x05, 0x72, 0xf2, 0xca, 0xf8, 0x24, 0x5e, 0x19, 0x1f, + 0x31, 0x6c, 0x09, 0x38, 0x61, 0x0d, 0xf0, 0x76, 0x00, 0x48, 0xdd, 0xce, 0x59, 0xf0, 0x32, 0x55, + 0xc3, 0xc1, 0x88, 0xab, 0xcd, 0x30, 0x83, 0xc1, 0x64, 0xd6, 0xbe, 0x12, 0xaa, 0xdf, 0x53, 0x38, + 0xf5, 0xbb, 0x45, 0x90, 0x85, 0x74, 0x5a, 0xd7, 0x1f, 0x43, 0xeb, 0x16, 0xc0, 0x6c, 0xb4, 0x1b, + 0x2d, 0xab, 0xd7, 0x80, 0xab, 0x03, 0x0f, 0xe5, 0x86, 0xae, 0x57, 0x5b, 0x5b, 0x9b, 0x1b, 0xab, + 0x46, 0xb9, 0xaa, 0x2b, 0x00, 0xe9, 0x27, 0xd1, 0xcb, 0xd0, 0xb1, 0x38, 0xaf, 0xfd, 0x91, 0x04, + 0x0a, 0xf8, 0xd0, 0xb7, 0xf6, 0xf4, 0x09, 0x69, 0x8e, 0xc7, 0x39, 0x4d, 0x85, 0xe3, 0xae, 0xf8, + 0x15, 0x41, 0x54, 0x98, 0x98, 0xab, 0x43, 0x5d, 0x11, 0x94, 0x40, 0x28, 0xfb, 0x99, 0x10, 0x6a, + 0x92, 0xad, 0x5d, 0xe7, 0xf2, 0x7f, 0xe6, 0x26, 0x89, 0xea, 0x7f, 0xc4, 0x4d, 0x72, 0x08, 0x0b, + 0x53, 0x6f, 0x92, 0x43, 0xda, 0x5d, 0x42, 0x33, 0xd5, 0x3e, 0x5a, 0x08, 0xe7, 0x7f, 0x9f, 0x94, + 0x0e, 0xb5, 0x77, 0x56, 0x06, 0x0b, 0x96, 0xed, 0x43, 0xd7, 0x36, 0x7b, 0x2b, 0x3d, 0x73, 0x27, + 0xb0, 0x4f, 0xaf, 0x3d, 0x10, 0x6c, 0x3a, 0xca, 0x63, 0xf0, 0x5f, 0xa8, 0x67, 0x00, 0xf0, 0xe1, + 0x5e, 0xbf, 0x67, 0xfa, 0x91, 0xea, 0x31, 0x29, 0xac, 0xf6, 0xe5, 0x79, 0xed, 0x7b, 0x34, 0xb8, + 0x8a, 0x80, 0xd6, 0xbe, 0xd2, 0x87, 0x9b, 0xb6, 0xf5, 0x8c, 0x7d, 0x1c, 0x5b, 0x99, 0xe8, 0xe8, + 0xb0, 0x57, 0xdc, 0xae, 0x50, 0x91, 0xdf, 0x15, 0x52, 0xef, 0x04, 0xd7, 0xe0, 0x88, 0xdb, 0x38, + 0x0e, 0xf6, 0x79, 0xab, 0xbb, 0x03, 0xfd, 0xda, 0xf6, 0xba, 0xe5, 0x79, 0x96, 0xbd, 0x83, 0xa7, + 0xe3, 0x25, 0x23, 0x3e, 0x83, 0xf6, 0xbf, 0x85, 0xe3, 0x36, 0x05, 0x7d, 0xc6, 0x88, 0xb8, 0x4d, + 0x0e, 0xbf, 0x6d, 0x17, 0xb5, 0xd3, 0x70, 0x55, 0x27, 0x2f, 0xb0, 0xaa, 0xc3, 0x62, 0x5a, 0x10, + 0x5c, 0x1d, 0x78, 0x8d, 0x50, 0x60, 0xa8, 0xa4, 0x6a, 0x64, 0xdf, 0xf7, 0x7d, 0x4b, 0x06, 0x8b, + 0xa4, 0xe8, 0x65, 0xc7, 0xb9, 0xb8, 0x67, 0xba, 0x17, 0xb5, 0x9f, 0x3a, 0xdc, 0x2e, 0x70, 0xe2, + 0xee, 0x55, 0xdc, 0x96, 0xee, 0x80, 0xf2, 0xe6, 0x07, 0x95, 0x57, 0xfb, 0x1d, 0xe1, 0x29, 0x09, + 0x27, 0xcf, 0xa0, 0x52, 0xd3, 0xd9, 0xde, 0x12, 0x3b, 0x1e, 0x29, 0xc2, 0x60, 0xf6, 0xc0, 0xff, + 0x56, 0x08, 0x7c, 0x30, 0x8e, 0xb0, 0x3b, 0x03, 0x93, 0xc4, 0x5d, 0xfb, 0xea, 0x78, 0xd8, 0x05, + 0x7c, 0x8d, 0x81, 0x9d, 0x02, 0xe4, 0x8b, 0xa1, 0x33, 0x13, 0xfa, 0xcb, 0x56, 0x28, 0x9f, 0x1d, + 0x9a, 0x31, 0x2c, 0x4f, 0x05, 0xcd, 0x93, 0x3c, 0x0b, 0xcd, 0x7e, 0xa6, 0x98, 0x7e, 0x59, 0x78, + 0xc7, 0x6d, 0xa8, 0x80, 0x08, 0x77, 0xd3, 0x69, 0x95, 0x62, 0xdb, 0x75, 0xe2, 0x6c, 0x66, 0x8f, + 0xe6, 0x0b, 0x0b, 0x60, 0x36, 0x88, 0x9f, 0x85, 0x6f, 0xec, 0x0c, 0x31, 0x3c, 0x05, 0x8a, 0x9e, + 0xb3, 0xef, 0x76, 0x20, 0xdd, 0x03, 0xa5, 0x4f, 0x63, 0xec, 0xd7, 0x8d, 0x34, 0x17, 0x0e, 0x58, + 0x24, 0xf9, 0xd4, 0x16, 0x49, 0xbc, 0xbd, 0x9b, 0x60, 0x3f, 0x68, 0x2f, 0x92, 0x45, 0xb7, 0x74, + 0x38, 0xcc, 0x5a, 0xd0, 0x7f, 0x20, 0x1a, 0x01, 0xbf, 0x26, 0xb4, 0x1b, 0x34, 0xa2, 0x26, 0xe9, + 0x54, 0xae, 0x39, 0x86, 0x1d, 0x7c, 0x2d, 0x78, 0x50, 0x90, 0x83, 0x1a, 0xc0, 0xd8, 0xe0, 0xdd, + 0x34, 0xea, 0x8a, 0xac, 0x3d, 0x3b, 0x0f, 0x14, 0xc2, 0x5a, 0x33, 0xb4, 0x05, 0xb5, 0x97, 0xe5, + 0x8e, 0xda, 0xe0, 0x8d, 0x9f, 0xc1, 0x72, 0xd7, 0x42, 0x26, 0x06, 0x1b, 0xe7, 0x04, 0x1f, 0xd5, + 0x2e, 0x46, 0x93, 0xc6, 0x68, 0x66, 0x09, 0xca, 0xa7, 0xbd, 0x25, 0x27, 0x12, 0xbb, 0x5c, 0x8c, + 0xc5, 0xec, 0x7b, 0xa5, 0x6f, 0xe7, 0x83, 0x30, 0x88, 0x2b, 0xae, 0xb3, 0xb7, 0xe9, 0xf6, 0xb4, + 0x7f, 0x13, 0xba, 0x1a, 0x22, 0x66, 0x76, 0x21, 0xc5, 0xcf, 0x2e, 0xf0, 0x8a, 0x74, 0x2f, 0xda, + 0x0a, 0xeb, 0x8d, 0x31, 0x7c, 0xab, 0x37, 0x82, 0x45, 0xb3, 0xdb, 0xdd, 0x30, 0x77, 0x60, 0x05, + 0x4d, 0xdb, 0x6d, 0x9f, 0x86, 0x48, 0x1b, 0x48, 0x4d, 0x9c, 0xca, 0xf0, 0x7d, 0xe4, 0xcc, 0x01, + 0xab, 0x54, 0x7c, 0x19, 0x96, 0x03, 0x91, 0xca, 0x6f, 0x2a, 0xc3, 0x1f, 0x1a, 0x32, 0x3a, 0xbb, + 0x66, 0x14, 0xd0, 0x91, 0x3e, 0x09, 0xfa, 0x62, 0x09, 0xf0, 0x9d, 0xbd, 0xe6, 0xfd, 0xaa, 0x04, + 0x66, 0x10, 0x1e, 0xe5, 0x6e, 0x57, 0x7b, 0x38, 0x17, 0xf7, 0x34, 0xd6, 0x1b, 0xee, 0xf9, 0xc2, + 0xae, 0x89, 0x41, 0x0d, 0x09, 0xfd, 0x18, 0x4c, 0x22, 0x21, 0x4a, 0x9c, 0x10, 0xc5, 0xe2, 0x97, + 0x26, 0x16, 0x91, 0xbd, 0xf8, 0x3e, 0x23, 0x81, 0x85, 0x60, 0x9e, 0xb1, 0x02, 0xfd, 0xce, 0xae, + 0x76, 0xbb, 0xe8, 0x3a, 0x17, 0x6d, 0x89, 0xe1, 0x96, 0x70, 0x4f, 0xfb, 0x6e, 0x2e, 0xa5, 0xca, + 0x73, 0x25, 0xc7, 0x2c, 0x12, 0xa6, 0xd2, 0xc5, 0x24, 0x82, 0xd9, 0x0b, 0xf3, 0x2b, 0x12, 0x00, + 0x6d, 0x27, 0x9c, 0x2c, 0x1f, 0x42, 0x92, 0x3f, 0x2d, 0xbc, 0x5b, 0x4c, 0x2b, 0x1e, 0x15, 0x9b, + 0xbe, 0xe7, 0x10, 0x74, 0xa6, 0x1a, 0x55, 0xd2, 0x54, 0xda, 0xfa, 0x6c, 0x75, 0xbf, 0xdf, 0xb3, + 0x3a, 0xa6, 0x3f, 0xe8, 0x01, 0x18, 0x2f, 0x5e, 0x7c, 0xdd, 0x7d, 0x2a, 0xa3, 0x31, 0x2c, 0x23, + 0x46, 0x96, 0x24, 0x4e, 0x90, 0x14, 0xc4, 0x09, 0x12, 0xf4, 0xea, 0x19, 0x41, 0x7c, 0x0a, 0xea, + 0x29, 0x83, 0xe3, 0xcd, 0x3e, 0xb4, 0x97, 0x5d, 0x68, 0x76, 0x3b, 0xee, 0xfe, 0xde, 0x05, 0x8f, + 0x75, 0x5f, 0x4d, 0xd6, 0x51, 0x66, 0xe5, 0x5a, 0xe2, 0x56, 0xae, 0xb5, 0x1f, 0x15, 0xbe, 0x6f, + 0x95, 0xd9, 0x5f, 0x61, 0x78, 0x18, 0x63, 0xa8, 0x4b, 0xe5, 0x74, 0x35, 0xb0, 0x48, 0x9d, 0x4f, + 0xb3, 0x48, 0xfd, 0x66, 0xa1, 0xb8, 0x70, 0x42, 0xf5, 0x9a, 0x8a, 0xef, 0xdc, 0x62, 0x0b, 0xfa, + 0x31, 0xf0, 0xde, 0x00, 0x16, 0x2e, 0x44, 0x6f, 0x42, 0x88, 0xf9, 0xc4, 0x21, 0x1e, 0xad, 0x6f, + 0x4d, 0xbb, 0x42, 0xc3, 0xb3, 0x10, 0x83, 0x6e, 0x88, 0xa0, 0x24, 0xe2, 0x36, 0x97, 0x6a, 0xb9, + 0x25, 0xb1, 0xfc, 0xec, 0x51, 0xf8, 0x84, 0x04, 0xe6, 0xf0, 0x25, 0xfe, 0xcb, 0x57, 0xf0, 0x41, + 0x50, 0x41, 0xa3, 0xe4, 0x85, 0xac, 0x98, 0x55, 0x90, 0xef, 0x59, 0xf6, 0xc5, 0xc0, 0xdf, 0x11, + 0xfd, 0x8f, 0x6e, 0x47, 0x95, 0x86, 0xdc, 0x8e, 0x1a, 0x6e, 0x93, 0x84, 0xe5, 0xc6, 0x8c, 0xa6, + 0x6f, 0x10, 0xba, 0xc1, 0x7e, 0x24, 0xb9, 0xec, 0xc5, 0xf8, 0x57, 0x79, 0x50, 0x6c, 0x41, 0xd3, + 0xed, 0xec, 0x6a, 0xef, 0x97, 0x86, 0x4e, 0x25, 0x4a, 0xfc, 0x54, 0x62, 0x05, 0xcc, 0x6c, 0x5b, + 0x3d, 0x1f, 0xba, 0xc4, 0x07, 0x9c, 0xed, 0xda, 0x49, 0x13, 0x5f, 0xee, 0x39, 0x9d, 0x8b, 0x4b, + 0xd4, 0xb4, 0x5f, 0x0a, 0xe2, 0x4d, 0x2f, 0xad, 0xe0, 0x8f, 0x8c, 0xe0, 0x63, 0x64, 0x10, 0x7a, + 0x8e, 0xeb, 0xc7, 0xdd, 0x5f, 0x14, 0x43, 0xa5, 0xe5, 0xb8, 0xbe, 0x41, 0x3e, 0x44, 0x30, 0x6f, + 0xef, 0xf7, 0x7a, 0x6d, 0x78, 0xbf, 0x1f, 0x4c, 0xeb, 0x82, 0x67, 0x64, 0x2c, 0x3a, 0xdb, 0xdb, + 0x1e, 0x24, 0x8b, 0x0a, 0x05, 0x83, 0x3e, 0xa9, 0x27, 0x41, 0xa1, 0x67, 0xed, 0x59, 0x64, 0x22, + 0x52, 0x30, 0xc8, 0x83, 0x7a, 0x33, 0x50, 0xa2, 0x39, 0x10, 0x61, 0xf4, 0x74, 0x11, 0x37, 0xcd, + 0x03, 0xe9, 0x48, 0x67, 0x2e, 0xc2, 0x2b, 0xde, 0xe9, 0x19, 0xfc, 0x1e, 0xff, 0xd7, 0x5e, 0x9b, + 0x76, 0xc3, 0x84, 0x48, 0x3c, 0x7e, 0x86, 0xeb, 0xc2, 0x8e, 0xe3, 0x76, 0x03, 0xd9, 0xc4, 0x4f, + 0x30, 0x68, 0xbe, 0x74, 0xdb, 0x1c, 0x43, 0x0b, 0xcf, 0x5e, 0xd3, 0xde, 0x53, 0x44, 0xdd, 0x26, + 0x2a, 0xfa, 0xbc, 0xe5, 0xef, 0xae, 0x43, 0xdf, 0xd4, 0xfe, 0x4a, 0x1e, 0xaa, 0x71, 0x73, 0xff, + 0xbf, 0xc6, 0x8d, 0xd0, 0x38, 0x12, 0x33, 0xcc, 0xdf, 0x77, 0x6d, 0x24, 0x47, 0xea, 0x47, 0xcb, + 0xa4, 0xa8, 0x77, 0x82, 0x6b, 0xa2, 0xa7, 0x60, 0x29, 0xb5, 0xca, 0xb8, 0xd6, 0x96, 0x8c, 0xf8, + 0x0c, 0xea, 0x06, 0x78, 0x18, 0x79, 0xb9, 0xd6, 0x5e, 0xaf, 0xaf, 0x59, 0x3b, 0xbb, 0x3d, 0x6b, + 0x67, 0xd7, 0xf7, 0x6a, 0xb6, 0xe7, 0x43, 0xb3, 0xdb, 0xdc, 0x36, 0xc8, 0xcd, 0x63, 0x00, 0xd3, + 0x11, 0xc9, 0xca, 0xfb, 0x88, 0x8b, 0x8d, 0x6e, 0xac, 0xa6, 0xc4, 0xb4, 0x94, 0xc7, 0xa3, 0x96, + 0xe2, 0xed, 0xf7, 0x42, 0x4c, 0xaf, 0x1b, 0xc0, 0x34, 0x52, 0xf5, 0xfd, 0x1e, 0x6e, 0x2e, 0x38, + 0x73, 0xda, 0x71, 0x2e, 0x81, 0x93, 0xec, 0x9b, 0xcd, 0xbf, 0x15, 0x41, 0x61, 0xd5, 0x35, 0xfb, + 0xbb, 0xda, 0xb3, 0x99, 0xfe, 0x79, 0x52, 0x6d, 0x22, 0xd4, 0x4e, 0x69, 0x94, 0x76, 0xca, 0x23, + 0xb4, 0x33, 0xcf, 0x68, 0x67, 0xfc, 0xa2, 0xf3, 0x59, 0x30, 0xdf, 0x71, 0x7a, 0x3d, 0xd8, 0x41, + 0xf2, 0xa8, 0x75, 0xf1, 0x6a, 0xcf, 0xac, 0xc1, 0xa5, 0xe1, 0x98, 0xfc, 0xd0, 0x6f, 0x91, 0x35, + 0x76, 0xa2, 0xf4, 0x51, 0x82, 0xf6, 0x32, 0x09, 0xe4, 0xf5, 0xee, 0x0e, 0xe4, 0xd6, 0xe1, 0x73, + 0xcc, 0x3a, 0xfc, 0x29, 0x50, 0xf4, 0x4d, 0x77, 0x07, 0xfa, 0xc1, 0x3a, 0x01, 0x79, 0x0a, 0xaf, + 0x0a, 0x90, 0x99, 0xab, 0x02, 0x7e, 0x00, 0xe4, 0x91, 0xcc, 0xa8, 0x5b, 0xfc, 0xc3, 0x86, 0xc1, + 0x8f, 0x65, 0xbf, 0x84, 0x4a, 0x5c, 0xc2, 0x17, 0x4c, 0xe3, 0x0f, 0x06, 0xb1, 0x2e, 0x1c, 0x0c, + 0x65, 0x7b, 0x1d, 0x98, 0xb5, 0x3a, 0x8e, 0x5d, 0xdb, 0x33, 0x77, 0x20, 0xad, 0x66, 0x94, 0x10, + 0xbc, 0xd5, 0xf7, 0x9c, 0xfb, 0x2c, 0xba, 0xa8, 0x15, 0x25, 0xa0, 0x2a, 0xec, 0x5a, 0xdd, 0x2e, + 0xb4, 0x69, 0xcb, 0xa6, 0x4f, 0x67, 0xcf, 0x80, 0x3c, 0xe2, 0x01, 0xe9, 0x0f, 0x32, 0x16, 0x94, + 0x63, 0xea, 0x3c, 0x6a, 0x56, 0xa4, 0xf1, 0x2a, 0x39, 0x7e, 0xcd, 0x55, 0xc4, 0x6b, 0x88, 0x54, + 0x6e, 0x78, 0xe3, 0x7a, 0x14, 0x28, 0xd8, 0x4e, 0x17, 0x8e, 0x1c, 0x84, 0x48, 0x2e, 0xf5, 0x71, + 0xa0, 0x00, 0xbb, 0xa8, 0x57, 0x90, 0x71, 0xf6, 0x33, 0xc9, 0xb2, 0x34, 0x48, 0xe6, 0x74, 0xae, + 0x49, 0xc3, 0xb8, 0xcd, 0xbe, 0x01, 0xfe, 0xf8, 0x0c, 0x38, 0x4e, 0xfa, 0x80, 0xd6, 0xfe, 0x05, + 0x44, 0xea, 0x02, 0xd4, 0x5e, 0x3f, 0x7c, 0xe0, 0x3a, 0xce, 0x2b, 0xfb, 0x49, 0x50, 0xf0, 0xf6, + 0x2f, 0x84, 0x46, 0x28, 0x79, 0x60, 0x9b, 0xae, 0x34, 0x91, 0xe1, 0x4c, 0x1e, 0x77, 0x38, 0xe3, + 0x86, 0x26, 0x39, 0x68, 0xfc, 0xd1, 0x40, 0x46, 0x0e, 0x74, 0x04, 0x03, 0xd9, 0xb0, 0x61, 0xe8, + 0x34, 0x98, 0x31, 0xb7, 0x7d, 0xe8, 0x46, 0x66, 0x22, 0x7d, 0x44, 0x43, 0xe5, 0x05, 0xb8, 0xed, + 0xb8, 0x48, 0x2c, 0x24, 0xac, 0x6c, 0xf8, 0xcc, 0xb4, 0x5c, 0xc0, 0xed, 0xa0, 0xdd, 0x02, 0x4e, + 0xd8, 0x4e, 0x15, 0xf6, 0xa9, 0x9c, 0x09, 0x8a, 0x0b, 0xe4, 0x62, 0xf8, 0x03, 0x2f, 0x0e, 0x74, + 0x25, 0x8b, 0x07, 0xbb, 0x12, 0xed, 0x73, 0x69, 0xe7, 0xcc, 0x03, 0x40, 0x4f, 0xcc, 0x42, 0x53, + 0x9f, 0x08, 0xe6, 0xbb, 0xd4, 0x43, 0xac, 0x63, 0x85, 0xad, 0x24, 0xf6, 0x3b, 0x2e, 0x73, 0xa4, + 0x48, 0x79, 0x56, 0x91, 0x56, 0x41, 0x09, 0x1f, 0xc7, 0x46, 0x9a, 0x54, 0x18, 0xf0, 0xc8, 0xc7, + 0xd3, 0xba, 0xb0, 0x52, 0x8c, 0xd8, 0x96, 0x2a, 0xf4, 0x13, 0x23, 0xfc, 0x38, 0xdd, 0xec, 0x3b, + 0x59, 0x42, 0xd9, 0x37, 0xc7, 0x5f, 0x2e, 0x82, 0x6b, 0x2a, 0xae, 0xe3, 0x79, 0xf8, 0x08, 0xce, + 0x60, 0xc3, 0x7c, 0xa3, 0xc4, 0x5d, 0x1a, 0xf4, 0x80, 0x6e, 0x7e, 0xc3, 0x1a, 0xd4, 0xf4, 0x9a, + 0xc6, 0x5f, 0x08, 0x07, 0xbd, 0x09, 0xf7, 0x1f, 0x62, 0x84, 0xfe, 0x9f, 0xa3, 0x91, 0xbc, 0x27, + 0x27, 0x12, 0x87, 0x27, 0xa5, 0xac, 0xb2, 0x6f, 0x2e, 0x5f, 0x96, 0xc0, 0xb5, 0x83, 0xdc, 0x6c, + 0xda, 0x5e, 0xd8, 0x60, 0x1e, 0x32, 0xa2, 0xbd, 0xf0, 0x71, 0x5b, 0x12, 0xef, 0x08, 0x8e, 0xa9, + 0x3b, 0x53, 0x5a, 0xcc, 0x62, 0x49, 0x74, 0xa0, 0x27, 0xe9, 0x8e, 0xe0, 0xd4, 0xe4, 0xb3, 0x17, + 0xee, 0xef, 0xe7, 0xc1, 0xf1, 0x55, 0xd7, 0xd9, 0xef, 0x7b, 0x51, 0x0f, 0xf4, 0xa7, 0xc3, 0x37, + 0x64, 0x8b, 0x22, 0xa6, 0xc1, 0xf5, 0x60, 0xce, 0xa5, 0xd6, 0x5c, 0xb4, 0x3d, 0xcb, 0x26, 0xb1, + 0xbd, 0x97, 0x7c, 0x98, 0xde, 0x2b, 0xea, 0x67, 0xf2, 0x5c, 0x3f, 0x33, 0xd8, 0x73, 0x14, 0x86, + 0xf4, 0x1c, 0x7f, 0x22, 0xa5, 0x1c, 0x54, 0x07, 0x44, 0x14, 0xd3, 0x5f, 0x54, 0x40, 0x71, 0x07, + 0x67, 0xa4, 0xdd, 0xc5, 0x23, 0xc5, 0x6a, 0x86, 0x89, 0x1b, 0xf4, 0xd3, 0x48, 0xae, 0x32, 0xab, + 0xc3, 0xa9, 0x06, 0xb8, 0x64, 0x6e, 0xb3, 0x57, 0xaa, 0xd7, 0xe6, 0xc1, 0x7c, 0x58, 0x7a, 0xad, + 0xeb, 0x71, 0xd1, 0x61, 0x19, 0x8d, 0x5a, 0x10, 0xd1, 0xa8, 0x03, 0xeb, 0xcc, 0xe1, 0xa8, 0x23, + 0x33, 0xa3, 0xce, 0xd0, 0xd1, 0x65, 0x3e, 0x66, 0x74, 0xd1, 0x9e, 0x25, 0x8b, 0x5e, 0xbb, 0xc7, + 0x77, 0xad, 0xb8, 0x36, 0x0f, 0xe4, 0xc1, 0x42, 0xf0, 0xf2, 0xbf, 0xd1, 0xb5, 0xca, 0x5e, 0x49, + 0x3e, 0x22, 0x81, 0x13, 0x07, 0x3b, 0xf3, 0x87, 0xf2, 0x5e, 0x6a, 0xa8, 0x4e, 0x5e, 0xe8, 0xa5, + 0x86, 0x9f, 0xf8, 0x4d, 0xba, 0xc4, 0x20, 0x28, 0x9c, 0xbd, 0x37, 0xba, 0x13, 0x17, 0x0b, 0x73, + 0x22, 0x48, 0x34, 0x7b, 0x01, 0xfe, 0x8c, 0x0c, 0x66, 0x5b, 0xd0, 0xaf, 0x9b, 0x57, 0x9c, 0x7d, + 0x5f, 0x33, 0x45, 0xb7, 0xe7, 0x9e, 0x00, 0x8a, 0x3d, 0xfc, 0x09, 0xee, 0x60, 0xd8, 0xa0, 0xa5, + 0xec, 0xfe, 0x16, 0xf6, 0x0d, 0x22, 0xa4, 0x0d, 0x9a, 0x9f, 0x8f, 0x3e, 0x23, 0xb2, 0x3b, 0x1a, + 0x72, 0x37, 0x91, 0xad, 0x9d, 0x54, 0x7b, 0xa7, 0x71, 0x45, 0x67, 0x0f, 0xcb, 0x8f, 0xca, 0x60, + 0xa1, 0x05, 0xfd, 0x9a, 0xb7, 0x62, 0x5e, 0x72, 0x5c, 0xcb, 0x87, 0xda, 0xaa, 0x28, 0x34, 0x67, + 0x00, 0xb0, 0xc2, 0xcf, 0x68, 0x9c, 0x2c, 0x26, 0x45, 0x7b, 0x4b, 0x5a, 0x47, 0x21, 0x8e, 0x8f, + 0x89, 0x80, 0x90, 0xca, 0xc7, 0x22, 0xa9, 0xf8, 0x29, 0x5c, 0x1c, 0x2e, 0x51, 0x20, 0xca, 0x6e, + 0x67, 0xd7, 0xba, 0x04, 0xbb, 0x29, 0x81, 0x08, 0x3e, 0x8b, 0x80, 0x08, 0x09, 0xa5, 0x76, 0x5f, + 0xe1, 0xf8, 0x98, 0x84, 0xfb, 0x4a, 0x12, 0xc1, 0xa9, 0x84, 0xb5, 0x42, 0x5d, 0x0f, 0x5d, 0xcf, + 0xbc, 0x4b, 0x54, 0xac, 0x91, 0xc9, 0x26, 0xb1, 0x26, 0xdb, 0x58, 0x1d, 0x0b, 0x29, 0x7b, 0x94, + 0x4e, 0xe7, 0xb3, 0xe8, 0x58, 0x86, 0x16, 0x9d, 0xbd, 0xd0, 0xdf, 0x27, 0x83, 0xab, 0xc3, 0x78, + 0x2f, 0x2d, 0xe8, 0x57, 0x4d, 0x6f, 0xf7, 0x82, 0x63, 0xba, 0x5d, 0xad, 0x32, 0x81, 0x03, 0x87, + 0xda, 0x17, 0x58, 0x10, 0x1a, 0x3c, 0x08, 0x43, 0x5d, 0x49, 0x87, 0xf2, 0x32, 0x89, 0x4e, 0x26, + 0xd1, 0xdb, 0xf5, 0x1d, 0x21, 0x58, 0x4f, 0xe5, 0xc0, 0x7a, 0xd2, 0xb8, 0x2c, 0x66, 0x0f, 0xdc, + 0xcf, 0x91, 0x11, 0x81, 0xf1, 0x7a, 0xbe, 0x57, 0x14, 0xb0, 0x18, 0xaf, 0x57, 0x39, 0xd6, 0xeb, + 0x75, 0xac, 0x31, 0x62, 0xa4, 0xc7, 0x72, 0xb6, 0x63, 0xc4, 0x11, 0x7a, 0x23, 0xbf, 0x4b, 0x06, + 0x0a, 0x0e, 0xf8, 0xc5, 0x78, 0x84, 0xb3, 0xf1, 0xb7, 0x93, 0xd1, 0x39, 0xe0, 0x7d, 0x3e, 0x93, + 0xd6, 0xfb, 0x5c, 0x7b, 0x67, 0x5a, 0x1f, 0xf3, 0x41, 0x6e, 0x27, 0x82, 0x58, 0x2a, 0x17, 0xf2, + 0x11, 0x1c, 0x64, 0x0f, 0xda, 0x4f, 0xc8, 0x00, 0xa0, 0x06, 0x4d, 0xcf, 0x46, 0x3c, 0x4d, 0x14, + 0xae, 0x5b, 0x59, 0xbf, 0x7b, 0x04, 0xd4, 0xd5, 0x03, 0x40, 0x11, 0x8a, 0xd1, 0xa9, 0x8b, 0xd7, + 0xa7, 0xf5, 0xad, 0x8c, 0xb8, 0x9a, 0x08, 0x2c, 0xa9, 0xbc, 0x2d, 0x63, 0xcb, 0xce, 0x1e, 0x90, + 0x5f, 0x91, 0x40, 0xa1, 0xed, 0xb4, 0xa0, 0x7f, 0x78, 0x53, 0x20, 0x75, 0xd4, 0x00, 0x5c, 0xee, + 0x24, 0xa2, 0x06, 0x0c, 0x23, 0x94, 0xbd, 0xe8, 0xde, 0x2b, 0x81, 0xf9, 0xb6, 0x53, 0x09, 0x17, + 0xa7, 0xc4, 0x7d, 0x55, 0xff, 0x25, 0x97, 0x72, 0x0d, 0x83, 0x2d, 0x26, 0x46, 0x60, 0xa9, 0x56, + 0x0f, 0x12, 0xe8, 0x65, 0x2f, 0xb7, 0xdb, 0xc1, 0xf1, 0x4d, 0xbb, 0xeb, 0x18, 0xb0, 0xeb, 0xd0, + 0x95, 0x6e, 0x55, 0x05, 0xf9, 0x7d, 0xbb, 0xeb, 0x60, 0x96, 0x0b, 0x06, 0xfe, 0x8f, 0xd2, 0x5c, + 0xd8, 0x75, 0xa8, 0x6f, 0x00, 0xfe, 0xaf, 0xfd, 0x85, 0x0c, 0xf2, 0xe8, 0x5b, 0x71, 0x51, 0xbf, + 0x4b, 0x4e, 0x19, 0x07, 0x01, 0x91, 0x9f, 0x88, 0x25, 0x74, 0x17, 0xb3, 0xf6, 0x4f, 0x3c, 0x58, + 0x1f, 0x16, 0x57, 0x1e, 0x23, 0x8a, 0x68, 0xcd, 0x5f, 0x3d, 0x0d, 0x66, 0x2e, 0xf4, 0x9c, 0xce, + 0xc5, 0xe8, 0xb8, 0x3e, 0x7d, 0x54, 0x6f, 0x06, 0x05, 0xd7, 0xb4, 0x77, 0x20, 0xdd, 0x53, 0x38, + 0x39, 0xd0, 0x17, 0x62, 0xaf, 0x17, 0x83, 0x64, 0xd1, 0xde, 0x99, 0x26, 0x02, 0xc3, 0x90, 0xca, + 0xa7, 0xd3, 0x87, 0xea, 0x18, 0x27, 0xcf, 0x14, 0x30, 0x5f, 0x29, 0x37, 0xc8, 0x3d, 0x88, 0xcd, + 0x73, 0xba, 0x22, 0x63, 0x98, 0x91, 0x4c, 0x32, 0x84, 0x19, 0x91, 0xff, 0x4f, 0x0b, 0xf3, 0x90, + 0xca, 0x1f, 0x05, 0xcc, 0x9f, 0x91, 0xc0, 0x42, 0xdd, 0xf2, 0xfc, 0x38, 0x6f, 0xff, 0x84, 0x78, + 0xbf, 0x2f, 0x4a, 0x6b, 0x2a, 0x73, 0xe5, 0x08, 0x07, 0xfa, 0x4d, 0x65, 0x0e, 0x27, 0x15, 0x31, + 0x9d, 0x63, 0x29, 0x98, 0x03, 0x72, 0x09, 0xbe, 0xb0, 0x24, 0x53, 0x1b, 0x4a, 0x51, 0x21, 0xd3, + 0x37, 0x94, 0x62, 0xcb, 0xce, 0x5e, 0xbe, 0x7f, 0x21, 0x81, 0x13, 0xa8, 0xf8, 0xa4, 0x65, 0xa9, + 0x78, 0x31, 0x8f, 0x5c, 0x96, 0x4a, 0xbd, 0x32, 0x7e, 0x80, 0x97, 0x49, 0xac, 0x8c, 0x8f, 0x22, + 0x3a, 0x65, 0x31, 0xc7, 0x2c, 0xc3, 0x8e, 0x12, 0x73, 0xc2, 0x32, 0xec, 0xf8, 0x62, 0x4e, 0x5e, + 0x8a, 0x1d, 0x53, 0xcc, 0x47, 0xb6, 0xc0, 0xfa, 0x8b, 0x72, 0x28, 0xe6, 0xd8, 0xb5, 0x8d, 0x04, + 0x31, 0xa7, 0x3e, 0xd1, 0xab, 0xbd, 0x7b, 0x4c, 0xc1, 0x4f, 0x78, 0x7d, 0x63, 0x1c, 0x98, 0x8e, + 0x70, 0x8d, 0xe3, 0xe7, 0x65, 0xb0, 0x48, 0xb9, 0x18, 0x3e, 0x65, 0x4e, 0xc0, 0x28, 0xf5, 0x94, + 0x39, 0xf5, 0x19, 0x20, 0x9e, 0xb3, 0xe9, 0x9f, 0x01, 0x4a, 0x2c, 0x3f, 0x7b, 0x70, 0xbe, 0x9e, + 0x07, 0xa7, 0x10, 0x0b, 0xeb, 0x4e, 0xd7, 0xda, 0xbe, 0x42, 0xb8, 0x38, 0x67, 0xf6, 0xf6, 0xa1, + 0xa7, 0x7d, 0x40, 0x12, 0x45, 0xe9, 0xbf, 0x02, 0xe0, 0xf4, 0xa1, 0x4b, 0xe2, 0xb8, 0x51, 0xa0, + 0xee, 0x8c, 0xab, 0xec, 0xc1, 0x92, 0xc2, 0xeb, 0x73, 0x9a, 0x01, 0x11, 0x83, 0xa1, 0x87, 0xac, + 0xc2, 0xd9, 0xf0, 0xcd, 0xa0, 0x83, 0x47, 0xee, 0xa0, 0x83, 0xc7, 0x4d, 0x40, 0x36, 0xbb, 0xdd, + 0x10, 0xaa, 0xc1, 0xcd, 0x6c, 0x5c, 0xa6, 0x81, 0xb2, 0xa0, 0x9c, 0x1e, 0x8c, 0x8e, 0xe6, 0xc5, + 0xe4, 0xf4, 0xa0, 0xaf, 0x2e, 0x81, 0x22, 0xb9, 0x4e, 0x3c, 0x5c, 0xd1, 0x1f, 0x9e, 0x99, 0xe6, + 0xe2, 0x4d, 0xbb, 0x26, 0xaf, 0x86, 0xb7, 0xa7, 0x92, 0xcc, 0xb0, 0x7e, 0x3a, 0xb2, 0x93, 0x0d, + 0x4e, 0xc1, 0x9e, 0x3c, 0x36, 0xe5, 0xe9, 0xec, 0x86, 0x95, 0xfb, 0xfd, 0xde, 0x95, 0x36, 0x0d, + 0x3c, 0x90, 0x6a, 0x37, 0x8c, 0x89, 0x5f, 0x20, 0x1d, 0x88, 0x5f, 0x90, 0x7a, 0x37, 0x8c, 0xe3, + 0x63, 0x12, 0xbb, 0x61, 0x49, 0x04, 0xb3, 0x17, 0xed, 0xdf, 0x94, 0x88, 0xd5, 0x4c, 0x6f, 0x23, + 0xf8, 0x87, 0xe1, 0x9e, 0xd5, 0x80, 0x77, 0x76, 0x19, 0x76, 0x51, 0x41, 0xe2, 0x2d, 0x2c, 0xea, + 0xe3, 0x40, 0x71, 0xdb, 0x71, 0xf7, 0xcc, 0x60, 0xe3, 0x7e, 0xf0, 0xa4, 0x08, 0xbd, 0x01, 0x60, + 0x05, 0xe7, 0x31, 0x68, 0x5e, 0x34, 0x1f, 0x79, 0xa6, 0xd5, 0xa7, 0x41, 0x1f, 0xd1, 0x5f, 0xf5, + 0x06, 0xb0, 0x40, 0x63, 0x3f, 0x36, 0xa0, 0xe7, 0xc3, 0x2e, 0x8d, 0x68, 0xc1, 0x27, 0xaa, 0x67, + 0xc1, 0x3c, 0x4d, 0x58, 0xb1, 0x7a, 0xd0, 0xa3, 0x41, 0x2d, 0xb8, 0x34, 0xf5, 0x14, 0x28, 0x5a, + 0xde, 0xdd, 0x9e, 0x63, 0xd3, 0x80, 0x7c, 0xf4, 0x49, 0xbd, 0x09, 0x1c, 0xa7, 0xf9, 0x42, 0x63, + 0x95, 0x1c, 0xd8, 0x19, 0x4c, 0x46, 0xaa, 0x65, 0x3b, 0x1b, 0xae, 0xb3, 0xe3, 0x42, 0xcf, 0xc3, + 0xa7, 0xa6, 0x4a, 0x06, 0x93, 0xa2, 0xde, 0x0b, 0x4e, 0xf4, 0x2c, 0xfb, 0xa2, 0x87, 0x63, 0x04, + 0xaf, 0x50, 0xb7, 0xb1, 0xf9, 0x21, 0xb1, 0xbb, 0x99, 0xc6, 0x46, 0xe5, 0xc0, 0x7e, 0x62, 0x1c, + 0xa4, 0xa2, 0xde, 0x0c, 0x14, 0xca, 0xcd, 0xb2, 0xd9, 0xb9, 0x88, 0xdf, 0x53, 0x77, 0xd4, 0x03, + 0xe9, 0x8c, 0x30, 0x48, 0x18, 0xfd, 0x45, 0x4e, 0x18, 0x24, 0x92, 0xfe, 0x4b, 0x72, 0x60, 0x9e, + 0x2b, 0xc0, 0x04, 0x6a, 0xd0, 0x2d, 0x7a, 0xe7, 0x77, 0x2d, 0x1f, 0x22, 0xe6, 0xe8, 0x59, 0x97, + 0xc7, 0x8c, 0x60, 0xde, 0x38, 0xf0, 0xa1, 0x31, 0x84, 0x18, 0xe2, 0x8b, 0x74, 0x78, 0xd8, 0xb3, + 0xcc, 0xa3, 0xb6, 0x2a, 0x97, 0xa6, 0x3d, 0x13, 0xa8, 0x07, 0xa9, 0x31, 0x5e, 0x20, 0xb9, 0x74, + 0x5e, 0x20, 0x48, 0x6e, 0x66, 0xaf, 0xe7, 0x5c, 0x86, 0xdd, 0x90, 0x2c, 0xd5, 0xd5, 0x03, 0xe9, + 0xda, 0xe7, 0xc7, 0x99, 0x17, 0xa6, 0xbe, 0x58, 0x03, 0x35, 0xb2, 0xfd, 0x4e, 0x07, 0xc2, 0x2e, + 0x3d, 0xb8, 0x16, 0x3c, 0xa6, 0xbc, 0x72, 0x23, 0xf5, 0x2c, 0xf2, 0x88, 0xee, 0xdc, 0x78, 0x7f, + 0x74, 0xf3, 0xc9, 0xbe, 0x48, 0x57, 0x93, 0x74, 0x3e, 0x7e, 0xac, 0x4e, 0x45, 0x7b, 0x6f, 0xda, + 0xd3, 0xa2, 0x89, 0x98, 0x9e, 0x42, 0x83, 0xbb, 0xb7, 0xdf, 0x0b, 0x8f, 0x3b, 0x91, 0xa7, 0x94, + 0xe8, 0xa5, 0x3a, 0x40, 0x7a, 0x44, 0xc8, 0x7d, 0xfc, 0x6a, 0x50, 0x24, 0x37, 0x17, 0x6a, 0x2f, + 0x59, 0x1c, 0x0a, 0xdd, 0x22, 0x0f, 0xdd, 0x26, 0x98, 0xb7, 0x1d, 0x54, 0xdc, 0x86, 0xe9, 0x9a, + 0x7b, 0x5e, 0xd2, 0xf2, 0x3e, 0xa1, 0x1b, 0xda, 0x72, 0x0d, 0xe6, 0xb3, 0xb5, 0x63, 0x06, 0x47, + 0x46, 0xfd, 0xbf, 0xc0, 0xf1, 0x0b, 0x34, 0x34, 0x87, 0x47, 0x29, 0x4b, 0xf1, 0xce, 0xaf, 0x03, + 0x94, 0x97, 0xf9, 0x2f, 0xd7, 0x8e, 0x19, 0x83, 0xc4, 0xd4, 0xff, 0x02, 0x16, 0xd1, 0x63, 0xd7, + 0xb9, 0x1c, 0x30, 0x2e, 0xc7, 0xcf, 0x00, 0x06, 0xc8, 0xaf, 0x73, 0x1f, 0xae, 0x1d, 0x33, 0x06, + 0x48, 0xa9, 0x4d, 0x00, 0x76, 0xfd, 0xbd, 0x1e, 0x25, 0x9c, 0x8f, 0xef, 0x4c, 0x06, 0x08, 0xaf, + 0x85, 0x1f, 0xad, 0x1d, 0x33, 0x18, 0x12, 0x6a, 0x1d, 0xcc, 0xfa, 0xf7, 0xfb, 0x94, 0x5e, 0x21, + 0xde, 0xeb, 0x64, 0x80, 0x5e, 0x3b, 0xf8, 0x66, 0xed, 0x98, 0x11, 0x11, 0x50, 0x6b, 0xa0, 0xd4, + 0xbf, 0x40, 0x89, 0x15, 0xe3, 0x47, 0xaa, 0x01, 0x62, 0x1b, 0x17, 0x42, 0x5a, 0xe1, 0xe7, 0x88, + 0xb1, 0x8e, 0x77, 0x89, 0xd2, 0x9a, 0x11, 0x66, 0xac, 0x12, 0x7c, 0x83, 0x18, 0x0b, 0x09, 0xa8, + 0x35, 0x30, 0xeb, 0xd9, 0x66, 0xdf, 0xdb, 0x75, 0x7c, 0xef, 0x74, 0x69, 0xc0, 0x41, 0x39, 0x9e, + 0x5a, 0x8b, 0x7e, 0x63, 0x44, 0x5f, 0xab, 0x8f, 0x03, 0x57, 0xef, 0xf7, 0xbb, 0xa6, 0x0f, 0xf5, + 0xfb, 0x2d, 0x2f, 0xba, 0xbd, 0x32, 0x38, 0x97, 0x3b, 0xfc, 0xa5, 0xba, 0x44, 0x8f, 0x2a, 0x02, + 0xdc, 0x2e, 0xb5, 0xc1, 0x5d, 0x72, 0x52, 0x2c, 0x73, 0x42, 0xf1, 0x89, 0x20, 0x8f, 0x5e, 0x61, + 0xb3, 0x60, 0x71, 0xf8, 0x0a, 0xfc, 0xa0, 0xee, 0xe0, 0x06, 0x8c, 0x3e, 0x1a, 0xb0, 0x2c, 0xe6, + 0x0f, 0x58, 0x16, 0xd7, 0x83, 0x39, 0xcb, 0x5b, 0xb7, 0x76, 0xc8, 0xb4, 0x86, 0x8e, 0xfc, 0x6c, + 0x12, 0x59, 0x06, 0x6a, 0xc0, 0xcb, 0x64, 0xc8, 0x3f, 0x1e, 0x2c, 0x03, 0x05, 0x29, 0xda, 0x8d, + 0x60, 0x9e, 0x6d, 0x64, 0xe4, 0xfa, 0x63, 0x2b, 0x9a, 0x14, 0xd1, 0x27, 0xed, 0x06, 0xb0, 0xc8, + 0xeb, 0x34, 0x63, 0xfb, 0xc9, 0xc1, 0x20, 0xa6, 0x3d, 0x0c, 0x1c, 0x1f, 0x68, 0x58, 0x41, 0xb0, + 0x9f, 0x5c, 0x14, 0xec, 0xe7, 0x7a, 0x00, 0x22, 0x2d, 0x1e, 0x4a, 0xe6, 0x21, 0x60, 0x36, 0xd4, + 0xcb, 0xa1, 0x19, 0xbe, 0x96, 0x03, 0xa5, 0x40, 0xd9, 0x86, 0x65, 0x40, 0x36, 0x85, 0xcd, 0xec, + 0xec, 0x05, 0x36, 0x05, 0x9b, 0x86, 0x0c, 0xbc, 0xc8, 0x9f, 0xbe, 0x6d, 0xf9, 0xbd, 0xe0, 0x4c, + 0xea, 0x60, 0xb2, 0xba, 0x01, 0x80, 0x85, 0x31, 0x6a, 0x47, 0x87, 0x54, 0x1f, 0x9d, 0xa2, 0x3d, + 0x10, 0x7d, 0x60, 0x68, 0x9c, 0x7d, 0x28, 0x3d, 0x41, 0x3a, 0x0b, 0x0a, 0xe4, 0x82, 0x85, 0x63, + 0xea, 0x22, 0x00, 0xfa, 0xd3, 0x36, 0x74, 0xa3, 0xa6, 0x37, 0x2a, 0xba, 0x92, 0xd3, 0x5e, 0x2e, + 0x81, 0xd9, 0xb0, 0x11, 0x0c, 0xad, 0xa4, 0x4e, 0x55, 0x6b, 0xe4, 0x0d, 0xb3, 0x07, 0x1b, 0x15, + 0xab, 0x64, 0x4f, 0x00, 0x0f, 0xda, 0xf7, 0xe0, 0x8a, 0xe5, 0x7a, 0xbe, 0xe1, 0x5c, 0x5e, 0x71, + 0xdc, 0xc8, 0x24, 0x22, 0xa1, 0x89, 0xe3, 0x5e, 0x23, 0x53, 0xbf, 0x0b, 0xf1, 0x69, 0x45, 0xe8, + 0xd2, 0x2d, 0x9b, 0x28, 0x01, 0xd1, 0xf5, 0x5d, 0xd3, 0xf6, 0xfa, 0x8e, 0x07, 0x0d, 0xe7, 0xb2, + 0x57, 0xb6, 0xbb, 0x15, 0xa7, 0xb7, 0xbf, 0x67, 0x7b, 0xd4, 0x58, 0x8f, 0x7b, 0x8d, 0xa4, 0x83, + 0xef, 0x8f, 0x5e, 0x04, 0xa0, 0xd2, 0xac, 0xd7, 0xf5, 0x4a, 0xbb, 0xd6, 0x6c, 0x28, 0xc7, 0x90, + 0xb4, 0xda, 0xe5, 0xe5, 0x3a, 0x92, 0xce, 0xd3, 0x41, 0x29, 0x68, 0xd3, 0x34, 0x3e, 0x51, 0x2e, + 0x88, 0x4f, 0xa4, 0x96, 0x41, 0x29, 0x68, 0xe5, 0x74, 0x44, 0x78, 0xf8, 0xe0, 0x79, 0xf4, 0x3d, + 0xd3, 0xf5, 0xb1, 0x69, 0x19, 0x10, 0x59, 0x36, 0x3d, 0x68, 0x84, 0x9f, 0x9d, 0x7d, 0x14, 0xe5, + 0x40, 0x05, 0x8b, 0xe5, 0x7a, 0x7d, 0xab, 0x69, 0x6c, 0x35, 0x9a, 0xed, 0xb5, 0x5a, 0x63, 0x95, + 0x8c, 0x90, 0xb5, 0xd5, 0x46, 0xd3, 0xd0, 0xc9, 0x00, 0xd9, 0x52, 0x72, 0xe4, 0xfe, 0xf2, 0xe5, + 0x12, 0x28, 0xf6, 0xb1, 0x74, 0xb5, 0x2f, 0xcb, 0x29, 0x4d, 0x8b, 0x10, 0xa7, 0x98, 0x1b, 0x96, + 0xb9, 0xc3, 0x20, 0xd2, 0x90, 0xc3, 0xda, 0x67, 0xc1, 0x3c, 0x31, 0x87, 0x3c, 0xbc, 0xaf, 0x86, + 0x91, 0x93, 0x0d, 0x2e, 0x4d, 0xfb, 0x84, 0x94, 0xc2, 0xb8, 0x18, 0xca, 0x51, 0x3a, 0xe3, 0xe2, + 0x0f, 0x72, 0xe3, 0x5d, 0x47, 0x52, 0x6b, 0xb4, 0x75, 0xa3, 0x51, 0xae, 0xd3, 0x2c, 0xb2, 0x7a, + 0x1a, 0x9c, 0x6c, 0x34, 0x69, 0x30, 0xce, 0xd6, 0x56, 0xbb, 0xb9, 0x55, 0x5b, 0xdf, 0x68, 0x1a, + 0x6d, 0xa5, 0xa0, 0x9e, 0x02, 0x2a, 0xf9, 0xbf, 0x55, 0x6b, 0x6d, 0x55, 0xca, 0x8d, 0x8a, 0x5e, + 0xd7, 0xab, 0x4a, 0x51, 0x7d, 0x04, 0x78, 0x18, 0xb9, 0xde, 0xaa, 0xb9, 0xb2, 0x65, 0x34, 0xcf, + 0xb7, 0x10, 0x82, 0x86, 0x5e, 0x2f, 0x23, 0x45, 0x62, 0xee, 0x31, 0x9f, 0x51, 0xaf, 0x02, 0xc7, + 0x57, 0x6a, 0x75, 0x1d, 0xdf, 0x46, 0x4b, 0xcb, 0x2b, 0xa9, 0xd7, 0x81, 0xd3, 0xb5, 0x46, 0x6b, + 0x73, 0x65, 0xa5, 0x56, 0xa9, 0xe9, 0x8d, 0xf6, 0xd6, 0x86, 0x6e, 0xac, 0xd7, 0x5a, 0x2d, 0xf4, + 0xad, 0x32, 0xab, 0x7d, 0x5c, 0x06, 0x45, 0xd2, 0x67, 0x22, 0x23, 0x76, 0xe1, 0x9c, 0xd9, 0xb3, + 0xd0, 0x40, 0x81, 0xaf, 0x8f, 0x1f, 0x38, 0xc7, 0xe5, 0xe3, 0x6b, 0xe6, 0xe9, 0x49, 0x10, 0xfc, + 0xa0, 0xfd, 0x88, 0x9c, 0xf2, 0x1c, 0x17, 0x05, 0x82, 0x94, 0xb8, 0xc4, 0x95, 0x16, 0xb3, 0xea, + 0xf0, 0x1a, 0x29, 0xc5, 0x39, 0x2e, 0x71, 0xf2, 0xe9, 0xc0, 0xff, 0x85, 0x49, 0x81, 0xaf, 0x80, + 0xf9, 0xcd, 0x46, 0x79, 0xb3, 0xbd, 0xd6, 0x34, 0x6a, 0x3f, 0x88, 0x6f, 0x21, 0x58, 0x00, 0xb3, + 0x2b, 0x4d, 0x63, 0xb9, 0x56, 0xad, 0xea, 0x0d, 0xa5, 0xa0, 0x3e, 0x08, 0x5c, 0xd5, 0xd2, 0x8d, + 0x73, 0xb5, 0x8a, 0xbe, 0xb5, 0xd9, 0x28, 0x9f, 0x2b, 0xd7, 0xea, 0xb8, 0x8f, 0x28, 0x26, 0x5c, + 0x7d, 0x3f, 0xa3, 0xfd, 0x50, 0x1e, 0x00, 0x52, 0x75, 0x7c, 0x09, 0x17, 0x73, 0x41, 0xfa, 0x1f, + 0xa5, 0x9d, 0xee, 0x45, 0x64, 0x62, 0xda, 0x6f, 0x0d, 0x94, 0x5c, 0xfa, 0x82, 0xae, 0x6b, 0x8e, + 0xa2, 0x43, 0xfe, 0x06, 0xd4, 0x8c, 0xf0, 0x73, 0xed, 0x03, 0x69, 0x66, 0x77, 0xb1, 0x8c, 0x4d, + 0xe5, 0xa6, 0xe7, 0x41, 0x20, 0xb5, 0x17, 0xe6, 0xc0, 0x22, 0x5f, 0x31, 0x54, 0x09, 0x6c, 0x4c, + 0x89, 0x55, 0x82, 0xff, 0x98, 0x31, 0xb2, 0xce, 0x3e, 0x96, 0x0e, 0xa7, 0x20, 0x68, 0x99, 0x24, + 0x24, 0x43, 0x60, 0xb1, 0x28, 0x39, 0xc4, 0x3c, 0x32, 0x3a, 0x14, 0x49, 0x9d, 0x01, 0x72, 0xfb, + 0x7e, 0x5f, 0x91, 0xb5, 0x4f, 0xe5, 0xc1, 0x02, 0x77, 0x03, 0xbb, 0xf6, 0xc7, 0x39, 0x91, 0xdb, + 0x8d, 0x99, 0xbb, 0xdd, 0x73, 0x87, 0xbd, 0xdb, 0xfd, 0xac, 0x05, 0x66, 0x68, 0x1a, 0x96, 0x6f, + 0xb3, 0x81, 0x4c, 0x81, 0xe3, 0x60, 0x6e, 0x55, 0x6f, 0x6f, 0xb5, 0xda, 0x65, 0xa3, 0xad, 0x57, + 0x95, 0x1c, 0x1a, 0xf8, 0xf4, 0xf5, 0x8d, 0xf6, 0xbd, 0x8a, 0x84, 0xc6, 0xc4, 0xd5, 0xcd, 0x5a, + 0x55, 0xdf, 0x6a, 0x36, 0xea, 0xf7, 0x2a, 0x32, 0xea, 0x01, 0x99, 0xbc, 0x5b, 0xeb, 0xcd, 0xe5, + 0x5a, 0x5d, 0x57, 0xf2, 0xa8, 0xd9, 0xe0, 0x4f, 0x82, 0x94, 0x02, 0xef, 0x1b, 0x2d, 0xb2, 0xc2, + 0x39, 0x58, 0x85, 0xc3, 0xbb, 0x88, 0xa4, 0xb9, 0x42, 0x3e, 0xd5, 0xda, 0x69, 0x12, 0xab, 0xd9, + 0xcf, 0x88, 0x3f, 0x27, 0x03, 0x85, 0x70, 0xa0, 0xdf, 0xdf, 0x87, 0xae, 0x05, 0xed, 0x0e, 0xd4, + 0x2e, 0x8a, 0x04, 0x04, 0x3e, 0x10, 0x0a, 0x13, 0x8f, 0x1a, 0x8c, 0x2d, 0x4a, 0x1e, 0x06, 0xcc, + 0xf8, 0xfc, 0x01, 0x33, 0xfe, 0x77, 0xd2, 0x7a, 0xe0, 0x0e, 0xb2, 0x3b, 0x91, 0x3d, 0xab, 0x4f, + 0xa7, 0xf1, 0xc0, 0x1d, 0xc1, 0xc1, 0x54, 0xe2, 0x7c, 0xc7, 0x8c, 0xf2, 0x8a, 0xac, 0xbd, 0x40, + 0x06, 0xc7, 0xab, 0xa6, 0x0f, 0x97, 0xaf, 0xb4, 0x83, 0x7b, 0x54, 0x63, 0xee, 0x3e, 0xcf, 0x1d, + 0xb8, 0xfb, 0x3c, 0xba, 0x8a, 0x55, 0x1a, 0xb8, 0x8a, 0x55, 0x7b, 0x4f, 0xda, 0x33, 0xbb, 0x03, + 0x3c, 0x4c, 0x2c, 0x18, 0x77, 0xba, 0xb3, 0xb8, 0xc9, 0x5c, 0x64, 0xdf, 0xc0, 0xde, 0x3e, 0x0b, + 0x14, 0xc2, 0x0a, 0xe3, 0x64, 0xfa, 0x33, 0x32, 0x90, 0xcb, 0xdd, 0xae, 0xb6, 0x95, 0x22, 0xa6, + 0x67, 0x10, 0x25, 0x45, 0xe2, 0xa3, 0xa4, 0x70, 0x7b, 0x16, 0xf2, 0xa0, 0x63, 0x50, 0xda, 0xd3, + 0x08, 0x8c, 0x47, 0x69, 0x7c, 0x18, 0xe5, 0xec, 0x4e, 0x23, 0x24, 0x16, 0x3f, 0x9d, 0x2b, 0xad, + 0xe9, 0x2d, 0xb2, 0xba, 0x28, 0x32, 0xc9, 0x37, 0xf7, 0xa7, 0x3d, 0x5e, 0xc0, 0x79, 0xf4, 0x26, + 0x5c, 0x67, 0x9f, 0xdd, 0xf1, 0x82, 0x51, 0x1c, 0x64, 0x8f, 0xc2, 0x77, 0x25, 0x90, 0x6f, 0x39, + 0xae, 0x3f, 0x29, 0x0c, 0xd2, 0xba, 0x44, 0x30, 0x12, 0x68, 0xc5, 0xcf, 0x6c, 0xb3, 0x73, 0x89, + 0x48, 0x2e, 0x7f, 0x0a, 0x61, 0x51, 0x8f, 0x83, 0x45, 0xc2, 0x49, 0x78, 0xa7, 0xd0, 0xbf, 0x4a, + 0xa4, 0xbf, 0xba, 0x47, 0x14, 0x11, 0xbc, 0x31, 0x16, 0xba, 0x24, 0x04, 0xa0, 0x70, 0x69, 0xda, + 0x1b, 0x59, 0x5c, 0xaa, 0x3c, 0x2e, 0xc3, 0xe6, 0xf5, 0xe1, 0xb5, 0x3c, 0x93, 0xea, 0x99, 0xd2, + 0x44, 0x58, 0x4d, 0x28, 0x3c, 0x7b, 0x44, 0x9e, 0x23, 0x83, 0x22, 0x75, 0x09, 0x9d, 0x28, 0x02, + 0x69, 0x5b, 0x46, 0x28, 0x04, 0x31, 0xd7, 0x51, 0x79, 0xd2, 0x2d, 0x23, 0xb9, 0xfc, 0xec, 0x71, + 0xf8, 0x77, 0xea, 0xeb, 0x5c, 0xbe, 0x64, 0x5a, 0x3d, 0xf3, 0x42, 0x2f, 0x45, 0x64, 0xf3, 0x4f, + 0xa4, 0x3c, 0xdd, 0x19, 0x56, 0x95, 0x2b, 0x2f, 0x46, 0xe2, 0xdf, 0x0f, 0x66, 0x5d, 0x6e, 0x2f, + 0x18, 0x59, 0x51, 0x03, 0x7e, 0xe6, 0xf4, 0xbd, 0x11, 0xe5, 0x4c, 0x75, 0x94, 0x53, 0x88, 0x9f, + 0xa9, 0x1c, 0x3d, 0x9b, 0x2b, 0x77, 0xbb, 0x2b, 0xd0, 0xf4, 0xf7, 0x5d, 0xd8, 0x4d, 0x35, 0x44, + 0xb8, 0x03, 0xdb, 0xe5, 0x8c, 0x24, 0xb8, 0xd8, 0xa2, 0x75, 0x1e, 0x9d, 0xc7, 0x8f, 0xe8, 0x0d, + 0x02, 0x5e, 0x26, 0xd2, 0x25, 0xbd, 0x2d, 0x84, 0xa4, 0xc9, 0x41, 0xf2, 0xc4, 0xf1, 0x98, 0xc8, + 0x1e, 0x90, 0x97, 0xca, 0x60, 0x91, 0xd8, 0x09, 0x93, 0xc6, 0xe4, 0xc3, 0x29, 0x5d, 0xc8, 0x98, + 0x5b, 0xdb, 0x58, 0x76, 0x26, 0x02, 0x4b, 0x1a, 0x87, 0x33, 0x31, 0x3e, 0xb2, 0x47, 0xe6, 0x7f, + 0x5d, 0x05, 0x00, 0xe3, 0x16, 0xfc, 0x89, 0x62, 0x14, 0xe7, 0x53, 0x7b, 0x27, 0x9d, 0x7f, 0xb4, + 0xb8, 0xa0, 0xf3, 0x8c, 0xcb, 0x6f, 0xb8, 0xed, 0xc5, 0x27, 0x0a, 0x8d, 0x2a, 0x7f, 0x90, 0xd2, + 0xe6, 0xa5, 0x4e, 0xb9, 0x23, 0x07, 0xf7, 0x31, 0x7b, 0xb9, 0x4f, 0xa6, 0x30, 0x7e, 0x47, 0xb1, + 0x92, 0x0e, 0xb5, 0xfa, 0x18, 0x33, 0xfb, 0xd3, 0xe0, 0xa4, 0xa1, 0x97, 0xab, 0xcd, 0x46, 0xfd, + 0x5e, 0xf6, 0x0a, 0x2f, 0x45, 0x66, 0x27, 0x27, 0x99, 0xc0, 0xf6, 0xba, 0x94, 0x7d, 0x20, 0x2f, + 0xab, 0xa4, 0xd9, 0x0a, 0xb3, 0xb8, 0x32, 0xba, 0x57, 0x13, 0x20, 0x7b, 0x94, 0x28, 0x7c, 0xb3, + 0x08, 0xe6, 0x0c, 0xd8, 0x71, 0xf6, 0xf6, 0xa0, 0xdd, 0x85, 0x5d, 0xed, 0x75, 0x32, 0x98, 0x0f, + 0x77, 0x15, 0x5b, 0xd0, 0xd7, 0xfe, 0x4b, 0x84, 0xcd, 0x59, 0x30, 0x8f, 0x2a, 0xd7, 0xe4, 0x2f, + 0x12, 0xe0, 0xd2, 0xd4, 0x5b, 0xc0, 0x89, 0x00, 0x85, 0xe6, 0xc0, 0x14, 0xe6, 0xe0, 0x0b, 0xde, + 0xef, 0x67, 0x93, 0xc7, 0xe8, 0xae, 0x78, 0x61, 0x86, 0xec, 0x2e, 0xb1, 0xac, 0xc6, 0x80, 0xf5, + 0x7b, 0x21, 0x58, 0x4f, 0xe3, 0xc0, 0xaa, 0x1e, 0x92, 0xfe, 0x51, 0xa2, 0xf6, 0x21, 0x19, 0x9c, + 0x0c, 0x3a, 0xe2, 0xe9, 0xa1, 0xf5, 0x49, 0x16, 0xad, 0xa7, 0xf3, 0x68, 0xad, 0x8a, 0x48, 0x73, + 0x18, 0xcb, 0x31, 0xa8, 0x7d, 0x29, 0x44, 0xed, 0xbf, 0x71, 0xa8, 0xd5, 0x27, 0x54, 0xce, 0x51, + 0xa2, 0xf7, 0x61, 0x19, 0x9c, 0x46, 0x66, 0x67, 0xc5, 0xb1, 0xb7, 0x7b, 0x56, 0xc7, 0xb7, 0xec, + 0x9d, 0xc8, 0xc5, 0x71, 0x55, 0x64, 0x65, 0x73, 0x10, 0x5b, 0xe9, 0x20, 0xb6, 0xfc, 0x1e, 0x83, + 0x68, 0xdb, 0x8a, 0x63, 0x2b, 0x66, 0x08, 0x63, 0x9c, 0xf7, 0x23, 0xcd, 0x61, 0x93, 0xd2, 0xb7, + 0x3e, 0x41, 0x0e, 0x8e, 0x12, 0xbf, 0xaf, 0x49, 0xe0, 0x94, 0x01, 0x3d, 0xa7, 0x77, 0x09, 0x12, + 0x5f, 0xd6, 0x80, 0x5f, 0x4f, 0x7b, 0x54, 0xaa, 0xf6, 0xa7, 0xbd, 0x94, 0xc5, 0xa8, 0xc5, 0x63, + 0xf4, 0xa4, 0x78, 0x4d, 0x1f, 0x56, 0x74, 0x4c, 0x3b, 0x7a, 0x6f, 0x28, 0xff, 0x73, 0x9c, 0xfc, + 0x97, 0x0f, 0x45, 0x7d, 0x0a, 0x4b, 0x04, 0x80, 0x31, 0xef, 0x9e, 0x2f, 0x03, 0x05, 0xfb, 0x2c, + 0xe3, 0xd1, 0x93, 0xde, 0x21, 0xdc, 0xe4, 0x4f, 0xb3, 0xf4, 0x03, 0x25, 0x0c, 0x4e, 0xb3, 0x04, + 0x09, 0xea, 0x8d, 0x60, 0xb1, 0xb3, 0x0b, 0x3b, 0x17, 0x6b, 0x76, 0xe0, 0x55, 0x46, 0x5c, 0x90, + 0x06, 0x52, 0x79, 0x83, 0xe1, 0x1e, 0x1e, 0x0c, 0x7e, 0x71, 0x97, 0x9b, 0x3c, 0xb2, 0x4c, 0xc5, + 0x80, 0xf0, 0x9b, 0x21, 0x08, 0x0d, 0x0e, 0x84, 0x3b, 0xc6, 0xa2, 0x9a, 0x4e, 0xf8, 0x8d, 0x31, + 0x54, 0x5f, 0x03, 0xa7, 0x9a, 0x1b, 0xed, 0x5a, 0xb3, 0xb1, 0xb5, 0xd9, 0xd2, 0xab, 0x5b, 0xcb, + 0x41, 0x03, 0x68, 0x29, 0xb2, 0xf6, 0x0d, 0x09, 0xcc, 0x10, 0xb6, 0x3c, 0xed, 0x91, 0x11, 0x04, + 0x23, 0x8f, 0xf1, 0x68, 0x6f, 0x17, 0x0e, 0xca, 0x15, 0x0a, 0x82, 0x96, 0x13, 0xd3, 0xf9, 0x3c, + 0x01, 0xcc, 0x10, 0x90, 0x83, 0x9d, 0x96, 0x33, 0x31, 0xd6, 0x33, 0x25, 0x63, 0x04, 0xd9, 0x05, + 0x03, 0x74, 0x8d, 0x60, 0x23, 0xfb, 0x36, 0xf0, 0xac, 0x3c, 0x59, 0x9e, 0x39, 0x6f, 0xf9, 0xbb, + 0xf8, 0x94, 0x8f, 0xf6, 0x54, 0x91, 0xc1, 0xe1, 0x16, 0x50, 0xb8, 0x84, 0x72, 0x8f, 0x38, 0x31, + 0x45, 0x32, 0x69, 0xbf, 0x20, 0x1c, 0x0f, 0x9e, 0xd3, 0xcf, 0x90, 0xa7, 0x18, 0x70, 0xd6, 0x41, + 0xbe, 0x67, 0x79, 0x3e, 0x9d, 0xd7, 0xdc, 0x9e, 0x8a, 0x50, 0xf0, 0xa7, 0xe6, 0xc3, 0x3d, 0x03, + 0x93, 0xd1, 0xee, 0x46, 0x56, 0x69, 0x94, 0x2a, 0x70, 0x6a, 0xec, 0x34, 0x98, 0xa1, 0xd1, 0x0c, + 0xe8, 0xd6, 0x5f, 0xf0, 0x28, 0xb8, 0xdd, 0x26, 0x54, 0xdb, 0xec, 0x75, 0xe0, 0xff, 0x3d, 0x0e, + 0x66, 0xd6, 0x2c, 0xcf, 0x77, 0xdc, 0x2b, 0xda, 0xeb, 0x73, 0x60, 0xe6, 0x1c, 0x74, 0x3d, 0xcb, + 0xb1, 0x0f, 0x38, 0xda, 0x5d, 0x0f, 0xe6, 0xfa, 0x2e, 0xbc, 0x64, 0x39, 0xfb, 0x1e, 0x33, 0x12, + 0x33, 0x49, 0xaa, 0x06, 0x4a, 0xe6, 0xbe, 0xbf, 0xeb, 0xb8, 0x51, 0x10, 0xb4, 0xe0, 0x59, 0x3d, + 0x03, 0x00, 0xf9, 0xdf, 0x30, 0xf7, 0x20, 0x75, 0x1f, 0x64, 0x52, 0x54, 0x15, 0xe4, 0x7d, 0x6b, + 0x0f, 0xd2, 0x5b, 0x11, 0xf0, 0x7f, 0x24, 0x60, 0x1c, 0x61, 0x98, 0x46, 0x72, 0x96, 0x8d, 0xe0, + 0x51, 0xfb, 0x82, 0x0c, 0xe6, 0x56, 0xa1, 0x4f, 0x59, 0xf5, 0xb4, 0x17, 0xe5, 0x84, 0x2e, 0x22, + 0x43, 0x73, 0xbf, 0x9e, 0xe9, 0x05, 0xdf, 0x85, 0x66, 0x0d, 0x9f, 0x18, 0x5d, 0xd1, 0x20, 0xb3, + 0xf7, 0xb3, 0xe0, 0x78, 0xbd, 0x7e, 0x8d, 0x1c, 0xa0, 0xa1, 0x99, 0xe9, 0xe6, 0xfc, 0xc1, 0x17, + 0xfc, 0xbc, 0x23, 0x31, 0xd6, 0x0d, 0x95, 0xfd, 0x12, 0x53, 0x9f, 0xd8, 0xee, 0xa8, 0x74, 0x89, + 0xe6, 0x38, 0x70, 0xf5, 0x0e, 0x4b, 0x89, 0x92, 0x31, 0xc2, 0xdc, 0x82, 0x51, 0x72, 0x46, 0x73, + 0x32, 0x85, 0xcb, 0x96, 0x65, 0x30, 0xd7, 0xda, 0x75, 0x2e, 0x07, 0x72, 0x7c, 0xba, 0x18, 0xb0, + 0xd7, 0x81, 0xd9, 0x4b, 0x03, 0xa0, 0x46, 0x09, 0xec, 0xfd, 0x8e, 0x32, 0x7f, 0xbf, 0xe3, 0xf3, + 0xe4, 0xb4, 0x30, 0x31, 0xcc, 0xc5, 0xc0, 0xc4, 0x5f, 0xc9, 0x28, 0xa5, 0xb8, 0x92, 0x51, 0x7d, + 0x3c, 0x98, 0xa1, 0x5c, 0xd3, 0xad, 0x80, 0x64, 0x80, 0x83, 0xcc, 0x6c, 0x05, 0xf3, 0x7c, 0x05, + 0xd3, 0x21, 0x1f, 0x5f, 0xb9, 0xec, 0x91, 0xff, 0x6d, 0x09, 0xc7, 0x48, 0x0b, 0x80, 0xaf, 0x4c, + 0x00, 0x78, 0xed, 0x3b, 0x39, 0xd1, 0x0d, 0xb3, 0x50, 0x02, 0x21, 0x07, 0x87, 0xba, 0x64, 0x70, + 0x24, 0xb9, 0xec, 0xe5, 0xf9, 0xf2, 0x3c, 0x98, 0xaf, 0x5a, 0xdb, 0xdb, 0x61, 0x27, 0xf9, 0x62, + 0xc1, 0x4e, 0x32, 0xde, 0x19, 0x0e, 0xd9, 0xb9, 0xfb, 0xae, 0x0b, 0xed, 0xa0, 0x52, 0xb4, 0x39, + 0x0d, 0xa4, 0xaa, 0x37, 0x81, 0xe3, 0xc1, 0xb8, 0xc0, 0x76, 0x94, 0xb3, 0xc6, 0x60, 0xb2, 0xf6, + 0x2d, 0x61, 0x6f, 0x8b, 0x40, 0xa2, 0x6c, 0x95, 0x62, 0x1a, 0xe0, 0x9d, 0x60, 0x61, 0x97, 0xe4, + 0xc6, 0x4b, 0xd2, 0x41, 0x67, 0x79, 0x6a, 0xe0, 0x0e, 0x8a, 0x75, 0xe8, 0x79, 0xe6, 0x0e, 0x34, + 0xf8, 0xcc, 0x03, 0xcd, 0x57, 0x4e, 0x73, 0xa3, 0xaa, 0x98, 0xe3, 0x86, 0x40, 0x4d, 0xb2, 0xd7, + 0x8e, 0x2f, 0x9d, 0x05, 0xf9, 0x15, 0xab, 0x07, 0xb5, 0x1f, 0x93, 0xc0, 0xac, 0x01, 0x3b, 0x8e, + 0xdd, 0x41, 0x4f, 0x8c, 0x6b, 0xec, 0x37, 0x73, 0xa2, 0x37, 0x89, 0x23, 0x3a, 0x4b, 0x21, 0x8d, + 0x98, 0x76, 0x23, 0x76, 0x63, 0x78, 0x22, 0xa9, 0x29, 0xdc, 0xfb, 0x86, 0xa6, 0x1e, 0xdb, 0xdb, + 0x3d, 0xc7, 0xe4, 0x36, 0x65, 0x06, 0x4d, 0xa1, 0xe8, 0x20, 0x6e, 0xc3, 0xf1, 0x37, 0x2c, 0xdb, + 0x0e, 0x63, 0xdb, 0x1c, 0x48, 0xe7, 0xfd, 0x89, 0x12, 0xc3, 0x03, 0xe2, 0xba, 0xd3, 0xd2, 0x63, + 0x34, 0xfb, 0x46, 0xb0, 0x78, 0xe1, 0x8a, 0x0f, 0x3d, 0x9a, 0x8b, 0x16, 0x9b, 0x37, 0x06, 0x52, + 0x99, 0xcb, 0x3d, 0x92, 0xc2, 0x08, 0x26, 0x14, 0x98, 0x4e, 0xd4, 0x6b, 0x63, 0xcc, 0x00, 0x4f, + 0x02, 0xa5, 0xd1, 0xac, 0xea, 0xd8, 0x53, 0x3b, 0xf0, 0x7d, 0xdd, 0xd1, 0x7e, 0x5a, 0x06, 0xf3, + 0xd8, 0xc9, 0x31, 0x40, 0xe1, 0x61, 0x02, 0xf3, 0x11, 0xed, 0x2b, 0xc2, 0x5e, 0xdc, 0xb8, 0xca, + 0x6c, 0x01, 0xf1, 0x82, 0xde, 0xb6, 0x7a, 0x83, 0x82, 0x2e, 0x18, 0x03, 0xa9, 0x43, 0x00, 0x91, + 0x87, 0x02, 0xf2, 0x21, 0x21, 0x57, 0xee, 0x51, 0xdc, 0x1d, 0x15, 0x2a, 0xbf, 0x2a, 0x83, 0x39, + 0x34, 0x49, 0x09, 0x40, 0x69, 0x72, 0xa0, 0x38, 0x76, 0xef, 0x4a, 0xb4, 0x2c, 0x12, 0x3c, 0xa6, + 0x6a, 0x24, 0x7f, 0x2c, 0x3c, 0x73, 0xc7, 0x22, 0x62, 0x78, 0x99, 0x12, 0x7e, 0x1f, 0x14, 0x9a, + 0xcf, 0x8f, 0x60, 0xee, 0xa8, 0xe0, 0x7b, 0x6d, 0x11, 0x14, 0x37, 0xfb, 0x18, 0xb9, 0x2f, 0xcb, + 0x22, 0x17, 0xe5, 0x1c, 0x38, 0xc6, 0x87, 0xcc, 0xac, 0x9e, 0xd3, 0x31, 0x7b, 0x1b, 0xd1, 0x49, + 0xf6, 0x28, 0x41, 0xbd, 0x83, 0x7a, 0xf6, 0x93, 0x03, 0xd9, 0x37, 0x26, 0xde, 0x21, 0x83, 0x65, + 0xc4, 0x1c, 0x99, 0xbc, 0x05, 0x9c, 0xe8, 0x5a, 0x9e, 0x79, 0xa1, 0x07, 0x75, 0xbb, 0xe3, 0x5e, + 0x21, 0xe2, 0xa0, 0xd3, 0xaa, 0x03, 0x2f, 0xd4, 0x27, 0x81, 0x82, 0xe7, 0x5f, 0xe9, 0x91, 0x79, + 0x22, 0x7b, 0xc2, 0x32, 0xb6, 0xa8, 0x16, 0xca, 0x6e, 0x90, 0xaf, 0x58, 0xd7, 0xd9, 0x19, 0x31, + 0xd7, 0x59, 0xf5, 0xb1, 0xa0, 0xe8, 0xb8, 0xd6, 0x8e, 0x45, 0xae, 0x85, 0x5c, 0x3c, 0x10, 0x2a, + 0x99, 0x98, 0x02, 0x4d, 0x9c, 0xc5, 0xa0, 0x59, 0xd5, 0xc7, 0x83, 0x59, 0x6b, 0xcf, 0xdc, 0x81, + 0xf7, 0x58, 0x36, 0x09, 0x24, 0xb1, 0x78, 0xdb, 0xe9, 0x03, 0x87, 0x47, 0xe9, 0x7b, 0x23, 0xca, + 0xaa, 0xde, 0x09, 0xae, 0xe9, 0xb8, 0xd0, 0xf4, 0x21, 0x12, 0xd0, 0x79, 0xab, 0xbb, 0x03, 0xfd, + 0xda, 0xf6, 0xba, 0xe5, 0x79, 0x96, 0xbd, 0x43, 0x6f, 0x7e, 0x8d, 0xcf, 0xa0, 0x7d, 0x50, 0x12, + 0x8d, 0x06, 0x89, 0x25, 0x43, 0x54, 0x62, 0x8c, 0x1b, 0xea, 0x19, 0x29, 0xca, 0x82, 0x0e, 0xc8, + 0xaf, 0x12, 0x8a, 0xd3, 0x18, 0xcf, 0x56, 0xf6, 0x43, 0xff, 0x1f, 0x4a, 0xa0, 0x54, 0x75, 0x2e, + 0xdb, 0xb8, 0x99, 0xdc, 0x2e, 0x66, 0x29, 0x0f, 0x09, 0xed, 0xc0, 0xdf, 0x75, 0x9e, 0x78, 0x1a, + 0x10, 0xd7, 0x36, 0x28, 0x32, 0x06, 0x86, 0xc4, 0x76, 0x27, 0x18, 0x40, 0x20, 0xa9, 0x9c, 0xec, + 0xe5, 0xfa, 0xbb, 0x32, 0xc8, 0x57, 0x5d, 0xa7, 0xaf, 0xbd, 0x2d, 0x97, 0xc2, 0x11, 0xaf, 0xeb, + 0x3a, 0xfd, 0x36, 0xbe, 0x42, 0x36, 0xda, 0x7b, 0x62, 0xd3, 0xd4, 0xdb, 0x41, 0xa9, 0xef, 0x78, + 0x96, 0x1f, 0x4c, 0x42, 0x16, 0x6f, 0x7b, 0xf0, 0xd0, 0xbe, 0x60, 0x83, 0x66, 0x32, 0xc2, 0xec, + 0xa8, 0xcf, 0xc7, 0x22, 0x44, 0x72, 0x41, 0x62, 0x0c, 0xae, 0xd1, 0x1d, 0x48, 0xd5, 0x5e, 0xc2, + 0x22, 0xf9, 0x44, 0x1e, 0xc9, 0x87, 0x0f, 0x91, 0xb0, 0xeb, 0xf4, 0x27, 0xe2, 0x3a, 0xf3, 0x8a, + 0x10, 0xd5, 0x27, 0x73, 0xa8, 0xde, 0x2c, 0x54, 0x66, 0xf6, 0x88, 0x7e, 0x30, 0x0f, 0x00, 0x36, + 0x52, 0x36, 0xd1, 0xf4, 0x49, 0xcc, 0x42, 0xfb, 0xd1, 0x3c, 0x23, 0xcb, 0x32, 0x2f, 0xcb, 0x47, + 0xc6, 0xd8, 0x40, 0x98, 0x7c, 0x8c, 0x44, 0xcb, 0xa0, 0xb0, 0x8f, 0x5e, 0x53, 0x89, 0x0a, 0x92, + 0xc0, 0x8f, 0x06, 0xf9, 0x52, 0xfb, 0xed, 0x1c, 0x28, 0xe0, 0x04, 0xf5, 0x0c, 0x00, 0xd8, 0x2c, + 0x20, 0x87, 0x69, 0x73, 0xd8, 0x00, 0x60, 0x52, 0xb0, 0xb6, 0x5a, 0x5d, 0xfa, 0x9a, 0x18, 0xdc, + 0x51, 0x02, 0xfa, 0x1a, 0x1b, 0x0b, 0x98, 0x16, 0x35, 0x1f, 0x98, 0x14, 0xf4, 0x35, 0x7e, 0xaa, + 0xc3, 0x6d, 0x72, 0xbb, 0x47, 0xde, 0x88, 0x12, 0xc2, 0xaf, 0xeb, 0xe1, 0x9d, 0xb0, 0xc1, 0xd7, + 0x38, 0x05, 0x4d, 0xa5, 0xb1, 0x5a, 0x2e, 0x47, 0x45, 0x14, 0x71, 0xa6, 0xc1, 0x64, 0xed, 0x75, + 0xa1, 0xda, 0x54, 0x39, 0xb5, 0x79, 0x74, 0x0a, 0xf1, 0x66, 0xaf, 0x3c, 0x5f, 0x2b, 0x80, 0xd9, + 0x86, 0xd3, 0xa5, 0xba, 0xc3, 0x4c, 0x37, 0x3f, 0x5d, 0x48, 0x35, 0xdd, 0x0c, 0x69, 0xc4, 0x28, + 0xc8, 0x53, 0x78, 0x05, 0x11, 0xa3, 0xc0, 0xea, 0x87, 0xba, 0x0c, 0x8a, 0x58, 0x7b, 0x0f, 0x5e, + 0x36, 0x9a, 0x44, 0x02, 0x8b, 0xd6, 0xa0, 0x5f, 0xfe, 0x87, 0xd3, 0xb1, 0xff, 0x01, 0x0a, 0xb8, + 0x82, 0x09, 0x7b, 0x43, 0x7c, 0x45, 0xa5, 0xe4, 0x8a, 0xca, 0xc9, 0x15, 0xcd, 0x0f, 0x56, 0x34, + 0xcd, 0x2a, 0x42, 0x9c, 0x86, 0x64, 0xaf, 0xe3, 0xff, 0x7b, 0x06, 0x80, 0x86, 0x79, 0xc9, 0xda, + 0x21, 0x7b, 0xcb, 0x5f, 0x08, 0x66, 0x4f, 0x74, 0x17, 0xf8, 0x27, 0x98, 0x81, 0xf0, 0x76, 0x30, + 0x43, 0xc7, 0x3d, 0x5a, 0x91, 0x87, 0x70, 0x15, 0x89, 0xa8, 0x10, 0xa3, 0xf6, 0x7e, 0xdf, 0x08, + 0xf2, 0x23, 0xc3, 0x64, 0x7b, 0xbf, 0xd7, 0x6b, 0xa3, 0x6f, 0xa9, 0x85, 0x16, 0x3c, 0xc7, 0xec, + 0x60, 0x44, 0x97, 0x4c, 0x93, 0xa0, 0x53, 0xf4, 0x49, 0x7b, 0x9f, 0xf0, 0x39, 0x35, 0x86, 0x1f, + 0xa6, 0x46, 0x31, 0x4d, 0xf0, 0xb1, 0x60, 0xc6, 0x09, 0xb7, 0xc3, 0xe5, 0xd8, 0x55, 0xb4, 0x9a, + 0xbd, 0xed, 0x18, 0x41, 0x4e, 0xc1, 0xad, 0x33, 0x21, 0x3e, 0xa6, 0x72, 0x14, 0xf4, 0xd4, 0x6a, + 0x10, 0x29, 0x15, 0xd5, 0xe3, 0xbc, 0xe5, 0xef, 0xd6, 0x2d, 0xfb, 0xa2, 0xa7, 0xfd, 0x37, 0x31, + 0x0b, 0x92, 0xc1, 0x5f, 0x4a, 0x87, 0x3f, 0x1f, 0xa9, 0x2c, 0xd1, 0xb3, 0x83, 0xa1, 0x32, 0x9c, + 0xdb, 0x18, 0x00, 0xef, 0x00, 0x45, 0xc2, 0x28, 0xed, 0x44, 0xcf, 0xc6, 0xe2, 0x17, 0x52, 0x32, + 0xe8, 0x17, 0x82, 0x5e, 0x21, 0x69, 0x39, 0xcb, 0x1c, 0xd2, 0xb3, 0x8f, 0x01, 0x33, 0x54, 0xd2, + 0xea, 0x22, 0xdb, 0x8a, 0x95, 0x63, 0x2a, 0x00, 0xc5, 0x75, 0xe7, 0x12, 0x6c, 0x3b, 0x4a, 0x0e, + 0xfd, 0x47, 0xfc, 0xb5, 0x1d, 0x45, 0xd2, 0x5e, 0x59, 0x02, 0xa5, 0x30, 0x44, 0xe5, 0x1f, 0x4a, + 0x40, 0xa9, 0xe0, 0x19, 0xda, 0x8a, 0xeb, 0xec, 0x91, 0x1a, 0x89, 0x9f, 0x79, 0x78, 0xa9, 0xb0, + 0x83, 0x48, 0x18, 0x3a, 0x72, 0xb0, 0xb0, 0x18, 0x2c, 0xc9, 0x12, 0xa6, 0x14, 0x2c, 0x61, 0x6a, + 0x6f, 0x15, 0x72, 0x18, 0x11, 0x2d, 0x25, 0xfb, 0xa6, 0xf6, 0x3b, 0x12, 0x28, 0x54, 0x7a, 0x8e, + 0x0d, 0xd9, 0x83, 0xb9, 0x23, 0x4f, 0x80, 0x0e, 0xdf, 0xc7, 0xd0, 0x9e, 0x25, 0x89, 0xda, 0x1a, + 0x91, 0x00, 0x50, 0xd9, 0x82, 0xb2, 0x15, 0x1b, 0xa4, 0x12, 0x49, 0x67, 0x2f, 0xd0, 0x6f, 0x48, + 0x60, 0x96, 0xc4, 0x94, 0x2b, 0xf7, 0x7a, 0xda, 0x83, 0x23, 0xa1, 0x0e, 0x09, 0xf3, 0xa9, 0x7d, + 0x48, 0xf8, 0xe0, 0x59, 0x58, 0xab, 0x90, 0x76, 0x8a, 0xb0, 0x88, 0xe9, 0xce, 0x41, 0x89, 0xed, + 0xc4, 0x8d, 0x64, 0x28, 0x7b, 0x51, 0xff, 0x91, 0x84, 0x0c, 0x00, 0xfb, 0xe2, 0x86, 0x0b, 0x2f, + 0x59, 0xf0, 0xb2, 0x76, 0x6d, 0x24, 0xec, 0x83, 0x01, 0xb3, 0xde, 0x24, 0xbc, 0x88, 0xc3, 0x90, + 0x8c, 0xdd, 0x08, 0x9b, 0xeb, 0x45, 0x99, 0x68, 0x2f, 0x3e, 0x18, 0xc5, 0x8c, 0x21, 0x63, 0xb0, + 0xd9, 0x05, 0xd7, 0x6c, 0xe2, 0xb9, 0xc8, 0x5e, 0xb0, 0x1f, 0x9b, 0x01, 0xa5, 0x4d, 0xdb, 0xeb, + 0xf7, 0x4c, 0x6f, 0x57, 0xfb, 0x57, 0x19, 0x14, 0xc9, 0x15, 0xb7, 0xda, 0xf7, 0x73, 0x71, 0x79, + 0x9e, 0xb1, 0x0f, 0xdd, 0xc0, 0x81, 0x87, 0x3c, 0x44, 0xf6, 0x91, 0xc4, 0xd8, 0x47, 0xda, 0x07, + 0x65, 0xd1, 0x49, 0x6a, 0x50, 0x28, 0xbd, 0x53, 0x37, 0x3e, 0x14, 0x4c, 0xdf, 0xea, 0xf8, 0xfb, + 0x2e, 0xf4, 0x86, 0x86, 0x82, 0x89, 0xa5, 0xb2, 0x41, 0xbe, 0x32, 0xc2, 0xcf, 0x35, 0x13, 0xcc, + 0xd0, 0xc4, 0x03, 0x9b, 0x51, 0x07, 0xa3, 0x4a, 0x9c, 0x02, 0x45, 0xd3, 0xf5, 0x2d, 0xcf, 0xa7, + 0xdb, 0xb3, 0xf4, 0x09, 0x75, 0x97, 0xe4, 0xdf, 0xa6, 0xdb, 0x0b, 0x22, 0x78, 0x85, 0x09, 0xda, + 0xaf, 0x0a, 0xcd, 0x1f, 0x93, 0x6b, 0x9e, 0x0e, 0xf2, 0x7b, 0xc6, 0x58, 0xe1, 0x7e, 0x10, 0xb8, + 0xca, 0x28, 0xb7, 0xf5, 0x2d, 0x12, 0xf0, 0x29, 0x8c, 0xed, 0xd4, 0xd5, 0xde, 0x23, 0x33, 0xeb, + 0x77, 0x57, 0xb8, 0x31, 0x82, 0x4a, 0x31, 0x1a, 0x23, 0xc2, 0x84, 0x84, 0xbd, 0x6e, 0x6e, 0x09, + 0x57, 0x16, 0x5e, 0xc2, 0xd5, 0x7e, 0x59, 0x78, 0x2f, 0x2a, 0x14, 0xe5, 0x88, 0x35, 0xc0, 0xa4, + 0x2b, 0x30, 0x3f, 0x22, 0xb4, 0xaf, 0x34, 0xaa, 0xa4, 0x23, 0x84, 0xed, 0x3b, 0xa7, 0x80, 0x54, + 0xae, 0x69, 0x3f, 0x3e, 0x03, 0xe6, 0xcf, 0xbb, 0x96, 0x6f, 0xd9, 0x3b, 0x6d, 0xc7, 0xe9, 0x79, + 0xda, 0xb7, 0x99, 0x8d, 0x8a, 0xc7, 0x83, 0x62, 0xc7, 0xb1, 0xb7, 0xad, 0x1d, 0x2a, 0xc6, 0x33, + 0x5c, 0xe5, 0xca, 0xb5, 0xa5, 0x0d, 0xd7, 0xb9, 0x64, 0x75, 0xa1, 0x5b, 0xc1, 0xb9, 0x0c, 0x9a, + 0x1b, 0xe9, 0x31, 0x13, 0x32, 0xef, 0xd1, 0x83, 0x5f, 0xb1, 0xe5, 0x85, 0x31, 0x7b, 0x68, 0x22, + 0x13, 0x31, 0xaf, 0x06, 0x4a, 0x3d, 0xd3, 0xde, 0xd9, 0x0f, 0x66, 0xde, 0x83, 0xbb, 0xa8, 0x71, + 0x94, 0xea, 0xf4, 0x23, 0x23, 0xfc, 0x1c, 0x3b, 0xb9, 0x21, 0x53, 0x9f, 0xb4, 0x3d, 0xfc, 0xff, + 0xec, 0xc7, 0x73, 0x60, 0x8e, 0x29, 0x54, 0x9d, 0x03, 0x33, 0x55, 0x7d, 0xa5, 0xbc, 0x59, 0x6f, + 0x2b, 0xc7, 0x90, 0x14, 0x5b, 0x9b, 0xeb, 0xeb, 0x65, 0xa3, 0xf6, 0x83, 0xba, 0x92, 0x43, 0xef, + 0x56, 0x8d, 0x32, 0x7a, 0x56, 0x24, 0xf4, 0xd0, 0x5a, 0x6b, 0x1a, 0x6d, 0xbd, 0xa1, 0xc8, 0xc8, + 0x1e, 0xd5, 0x9f, 0xb6, 0x51, 0x6e, 0x54, 0x95, 0x3c, 0xfa, 0xbf, 0xbc, 0x59, 0xaf, 0xeb, 0x6d, + 0xa5, 0x10, 0x05, 0xd1, 0x2b, 0xa2, 0xe4, 0x4a, 0xb9, 0xb5, 0x59, 0xae, 0x2b, 0x33, 0x28, 0x79, + 0x65, 0xb3, 0xd1, 0xb8, 0x57, 0x29, 0xa1, 0x22, 0x2a, 0xcd, 0xc6, 0x4a, 0xad, 0xaa, 0x37, 0xda, + 0xca, 0xac, 0x7a, 0x15, 0x38, 0xde, 0x6a, 0x1b, 0xe5, 0xda, 0xea, 0x5a, 0x7b, 0xa5, 0x69, 0x9c, + 0x2f, 0x1b, 0x55, 0x05, 0xa8, 0x0a, 0x98, 0xdf, 0x30, 0x9a, 0x2b, 0x3a, 0x8e, 0x97, 0x52, 0xae, + 0x2b, 0x73, 0xe8, 0xab, 0xb6, 0x51, 0x6e, 0xb4, 0xea, 0xe5, 0xb6, 0xae, 0xcc, 0x9f, 0xbd, 0x1b, + 0x94, 0x82, 0xea, 0xaa, 0x45, 0x20, 0xe9, 0x0d, 0xe5, 0x18, 0xfe, 0x6d, 0x29, 0x39, 0xf4, 0xbb, + 0x82, 0xf8, 0x2d, 0x02, 0xa9, 0xaa, 0x2b, 0x32, 0xfa, 0xad, 0xb5, 0x95, 0x3c, 0xfa, 0xdd, 0x40, + 0x2c, 0x16, 0x81, 0xb4, 0x56, 0x53, 0x8a, 0xe8, 0xb7, 0xbd, 0xa6, 0xcc, 0xf0, 0x37, 0xdd, 0x27, + 0xf6, 0xc2, 0x07, 0x25, 0x1f, 0x63, 0x68, 0xf8, 0xd1, 0x1c, 0x19, 0xff, 0xd7, 0x5e, 0x21, 0x89, + 0xf4, 0x75, 0xc9, 0xf4, 0xd3, 0x35, 0x9a, 0xb7, 0xe4, 0x26, 0xd8, 0x6a, 0x54, 0x0d, 0x9c, 0xd2, + 0x1b, 0xd5, 0x8d, 0x66, 0xad, 0xd1, 0x26, 0xa1, 0xce, 0xf4, 0x72, 0x65, 0x0d, 0xe3, 0x0c, 0x11, + 0x82, 0xeb, 0xcd, 0xaa, 0x5e, 0xc7, 0x2f, 0x56, 0x9a, 0x9b, 0x8d, 0xaa, 0xb2, 0x8d, 0xca, 0x2a, + 0x6f, 0xb6, 0xd7, 0xb6, 0x0c, 0xfd, 0xa9, 0x9b, 0x35, 0x43, 0xaf, 0x2a, 0x3b, 0x88, 0x46, 0xbd, + 0xdc, 0x58, 0xdd, 0x2c, 0xaf, 0xd2, 0xfd, 0xc2, 0xcd, 0x8d, 0x8d, 0x26, 0xde, 0x31, 0xdc, 0xd5, + 0xfe, 0x3e, 0x0f, 0x4a, 0xe5, 0x7d, 0xdf, 0xd9, 0xb6, 0x7a, 0x3d, 0xed, 0x39, 0xd2, 0xe1, 0x9b, + 0x62, 0x99, 0x6b, 0x8a, 0x07, 0x1a, 0x50, 0x50, 0x56, 0xd8, 0x78, 0x82, 0x04, 0xa6, 0x1d, 0x9e, + 0x8e, 0x9c, 0xb1, 0x65, 0xba, 0xd3, 0x4c, 0x1e, 0x89, 0x23, 0xae, 0x4d, 0x5b, 0x16, 0x7e, 0x43, + 0x1f, 0xcf, 0xde, 0x03, 0xe6, 0x59, 0x4a, 0x38, 0x1c, 0x58, 0x79, 0x95, 0xc4, 0x0b, 0x0b, 0x22, + 0x04, 0x92, 0x78, 0x61, 0xf8, 0xe0, 0x85, 0x84, 0xdb, 0x4b, 0xad, 0x5d, 0x47, 0x7a, 0x7a, 0x1c, + 0xcc, 0x55, 0xf5, 0x56, 0xc5, 0xa8, 0x61, 0x3f, 0x75, 0x25, 0xcf, 0x7b, 0x19, 0x24, 0x5a, 0x66, + 0x7c, 0x8d, 0x44, 0x95, 0xf2, 0xbb, 0x42, 0xf6, 0x56, 0x3c, 0xed, 0x74, 0x0a, 0xf9, 0xa2, 0x07, + 0x9a, 0x42, 0x6a, 0x2f, 0xca, 0x93, 0x75, 0xb2, 0xd6, 0xfe, 0xde, 0x9e, 0xe9, 0x5e, 0xe1, 0xfc, + 0xd5, 0xc6, 0xd5, 0xbb, 0xf8, 0xf1, 0x3d, 0x31, 0x0a, 0x10, 0x32, 0xa1, 0xfa, 0xae, 0xb3, 0xd7, + 0x0f, 0xfa, 0x6a, 0xfa, 0xa4, 0xfd, 0x2f, 0xe1, 0x99, 0x63, 0xb9, 0xb6, 0xc4, 0x54, 0x66, 0x8c, + 0xa1, 0xfd, 0x87, 0x24, 0x91, 0x59, 0x64, 0x62, 0x31, 0xdf, 0xeb, 0x1a, 0xf1, 0xd7, 0x79, 0x70, + 0x15, 0x8d, 0xf0, 0x12, 0xae, 0x3f, 0x20, 0x53, 0xf5, 0xd5, 0x99, 0x6a, 0x06, 0x35, 0xa8, 0xe5, + 0xc8, 0xa0, 0x66, 0x36, 0xbc, 0xf3, 0x82, 0x1b, 0xde, 0x6f, 0x13, 0x3e, 0xf4, 0x50, 0xae, 0x2d, + 0x0d, 0xa9, 0xe3, 0x74, 0xb6, 0xe5, 0x9f, 0x27, 0x89, 0xac, 0xb6, 0x0a, 0x71, 0xf8, 0xbd, 0xae, + 0x6b, 0xef, 0xc8, 0x81, 0x45, 0x5e, 0x55, 0xd4, 0xc7, 0x81, 0x52, 0x9f, 0xa6, 0x50, 0xb9, 0x9c, + 0x8e, 0x53, 0x2e, 0x23, 0xcc, 0x89, 0x20, 0x82, 0x76, 0xb7, 0xef, 0x58, 0x76, 0xb8, 0x2e, 0x1f, + 0x3c, 0xa3, 0x79, 0x27, 0x9e, 0x3a, 0x04, 0xf1, 0xfe, 0xf0, 0x43, 0x14, 0x3b, 0x36, 0xcf, 0xc4, + 0x8e, 0x45, 0x42, 0xf4, 0xe1, 0x1e, 0xbe, 0xc5, 0x68, 0xdf, 0x25, 0x0e, 0x2f, 0x92, 0xc1, 0x26, + 0x9d, 0x7d, 0x32, 0x28, 0x05, 0xe5, 0x23, 0xeb, 0xae, 0x59, 0xaf, 0x97, 0xd7, 0xcb, 0x64, 0xa1, + 0xb2, 0xb9, 0xa1, 0x37, 0xca, 0x35, 0x25, 0x87, 0x06, 0xba, 0xfa, 0x7a, 0xab, 0xbd, 0x59, 0xad, + 0x35, 0x15, 0x09, 0x3f, 0xa1, 0x4c, 0x95, 0x8d, 0x0d, 0x45, 0xd6, 0xde, 0x38, 0x03, 0x66, 0x56, + 0xcd, 0x5e, 0x0f, 0xba, 0x57, 0xb4, 0x6f, 0x48, 0x40, 0x09, 0x66, 0x07, 0xeb, 0xa6, 0x6d, 0x6d, + 0x43, 0xcf, 0x4f, 0x5e, 0xa8, 0x78, 0x9f, 0xf0, 0xd5, 0x66, 0xb4, 0x8c, 0xa5, 0x41, 0xfa, 0x31, + 0x3a, 0x7e, 0x2b, 0xc8, 0x5b, 0xf6, 0xb6, 0x43, 0x97, 0x2b, 0x06, 0xfd, 0x6d, 0x82, 0x8f, 0xf1, + 0xb6, 0x01, 0xce, 0x28, 0x78, 0xbb, 0x99, 0x20, 0x17, 0xd9, 0xaf, 0x5a, 0xbc, 0x23, 0x0f, 0x16, + 0x02, 0x26, 0x6a, 0x76, 0x17, 0xde, 0xcf, 0x6e, 0x83, 0xfe, 0x74, 0x5e, 0x34, 0xc0, 0xd0, 0x60, + 0x7d, 0x30, 0xa9, 0x18, 0x91, 0xb6, 0x01, 0xe8, 0x98, 0x3e, 0xdc, 0x71, 0x5c, 0x2b, 0x5c, 0x8b, + 0x78, 0x5c, 0x1a, 0x6a, 0x15, 0xf2, 0xf5, 0x15, 0x83, 0xa1, 0xa3, 0x3e, 0x09, 0xcc, 0xc1, 0x30, + 0xa2, 0x63, 0xb0, 0x4d, 0x9a, 0x88, 0x17, 0x9b, 0x5f, 0xfb, 0x23, 0xa1, 0x38, 0x46, 0x22, 0xd5, + 0x4c, 0x87, 0xd9, 0xd6, 0x78, 0x5d, 0xcf, 0x66, 0x63, 0xbd, 0x6c, 0xb4, 0xd6, 0xca, 0xf5, 0x7a, + 0xad, 0xb1, 0x1a, 0x06, 0x2c, 0x56, 0xc1, 0x62, 0xb5, 0x79, 0xbe, 0xc1, 0x44, 0x94, 0xce, 0x6b, + 0x1b, 0xa0, 0x14, 0xc8, 0x6b, 0xd8, 0x29, 0x2a, 0x56, 0x66, 0xf4, 0x14, 0x15, 0x93, 0x84, 0x4c, + 0x43, 0xab, 0x13, 0xba, 0xd6, 0xe3, 0xff, 0xda, 0x6f, 0x99, 0xa0, 0x80, 0xfd, 0x59, 0xb4, 0x77, + 0xe1, 0x79, 0x71, 0xbf, 0x67, 0x76, 0xa0, 0xb6, 0x97, 0x62, 0x25, 0x3c, 0xb8, 0x6b, 0x57, 0x3a, + 0x70, 0xd7, 0x2e, 0xfe, 0x4b, 0x47, 0x8c, 0x93, 0xc3, 0x7c, 0x68, 0x0c, 0x92, 0x85, 0x0f, 0xf9, + 0x93, 0xe8, 0xd9, 0x44, 0x5c, 0x6f, 0x28, 0x9b, 0x31, 0x2a, 0x19, 0xcf, 0x53, 0x16, 0x97, 0xa8, + 0x24, 0x71, 0x94, 0x7d, 0x8b, 0xff, 0x72, 0x1e, 0x14, 0x5a, 0xfd, 0x9e, 0xe5, 0x6b, 0x3f, 0x2f, + 0x4d, 0x04, 0x33, 0x72, 0x3f, 0xb2, 0x3c, 0xf2, 0x7e, 0xe4, 0xc8, 0x5f, 0x32, 0x2f, 0xe0, 0x2f, + 0xd9, 0x86, 0xf7, 0xfb, 0xbc, 0xbf, 0xe4, 0xed, 0x74, 0xda, 0x46, 0xbc, 0x2d, 0x1f, 0x3e, 0x44, + 0xa4, 0xb8, 0x5a, 0x43, 0x6e, 0xb3, 0x38, 0xfb, 0x18, 0x1a, 0x54, 0x1f, 0x80, 0xe2, 0x72, 0xb3, + 0xdd, 0x6e, 0xae, 0x2b, 0xc7, 0xf0, 0xf4, 0xab, 0xb9, 0x41, 0x42, 0x1c, 0xd7, 0x1a, 0x0d, 0xdd, + 0xe0, 0x66, 0x5c, 0xfc, 0x65, 0x99, 0x89, 0x13, 0x2c, 0xbe, 0xec, 0x2c, 0xd5, 0x4b, 0x6c, 0x11, + 0x3c, 0x9e, 0x9f, 0xec, 0x95, 0xeb, 0x67, 0x65, 0x50, 0x58, 0x87, 0xee, 0x0e, 0xd4, 0x9e, 0x91, + 0xc2, 0xc1, 0x6e, 0xdb, 0x72, 0x3d, 0x72, 0x29, 0x42, 0xe4, 0x60, 0xc7, 0xa6, 0xa9, 0x37, 0x80, + 0x05, 0x0f, 0x76, 0x1c, 0xbb, 0x1b, 0x64, 0x22, 0xfd, 0x11, 0x9f, 0xa8, 0xbd, 0x2c, 0x25, 0x64, + 0x98, 0xd1, 0x89, 0x78, 0xc9, 0xa5, 0x01, 0x66, 0x58, 0xa9, 0xd9, 0x03, 0xf3, 0x2d, 0x19, 0x7d, + 0xd4, 0xbf, 0xa2, 0xbd, 0x4c, 0xd8, 0xf3, 0xf1, 0x16, 0x50, 0xbc, 0x10, 0xdc, 0x8b, 0x26, 0xc7, + 0xf6, 0xc7, 0x34, 0x8f, 0xba, 0x0c, 0x4e, 0x78, 0xb0, 0x07, 0x3b, 0x3e, 0xec, 0xa2, 0xa6, 0x6b, + 0x8c, 0xec, 0x14, 0x0e, 0x66, 0xd7, 0x7e, 0x8f, 0x05, 0xf0, 0x4e, 0x1e, 0xc0, 0x1b, 0x87, 0x88, + 0x12, 0x55, 0x28, 0x7e, 0x6e, 0x82, 0xaa, 0xd1, 0xea, 0x39, 0xa1, 0xe1, 0x1b, 0x3c, 0xa3, 0x77, + 0xbb, 0xfe, 0x5e, 0x0f, 0xbf, 0xa3, 0x47, 0x83, 0x83, 0x67, 0x75, 0x09, 0xcc, 0x98, 0xf6, 0x15, + 0xfc, 0x2a, 0x9f, 0x50, 0xeb, 0x20, 0x93, 0xf6, 0xca, 0x10, 0xf9, 0xbb, 0x38, 0xe4, 0x1f, 0x29, + 0xc6, 0x6e, 0xf6, 0xc0, 0xff, 0xc8, 0x0c, 0x28, 0x6c, 0x98, 0x9e, 0x0f, 0xb5, 0xff, 0x23, 0x8b, + 0x22, 0x7f, 0x23, 0x58, 0xdc, 0x76, 0x3a, 0xfb, 0x1e, 0xec, 0xf2, 0x8d, 0x72, 0x20, 0x75, 0x12, + 0x98, 0xe3, 0xc0, 0xec, 0x34, 0x91, 0x92, 0x0d, 0x5c, 0x60, 0x0f, 0xa4, 0xe3, 0xab, 0x17, 0xbd, + 0x0d, 0xd3, 0xf5, 0x9b, 0xdb, 0x38, 0x2d, 0xbc, 0x7a, 0x91, 0x4d, 0xe4, 0xa0, 0x2f, 0x26, 0x40, + 0x3f, 0x13, 0x0f, 0x7d, 0x49, 0x00, 0x7a, 0xb5, 0x0c, 0x4a, 0xdb, 0x56, 0x0f, 0xe2, 0x0f, 0x66, + 0xf1, 0x07, 0xc3, 0xc6, 0x24, 0x2c, 0xfb, 0x70, 0x4c, 0x5a, 0xb1, 0x7a, 0xd0, 0x08, 0x3f, 0x0b, + 0x26, 0x32, 0x20, 0x9a, 0xc8, 0xd4, 0xc9, 0x49, 0x38, 0x64, 0x78, 0xd9, 0xe6, 0x1e, 0x0c, 0x36, + 0xbe, 0x6d, 0x7a, 0x2c, 0xbd, 0x6b, 0xfa, 0x26, 0x06, 0x63, 0xde, 0xc0, 0xff, 0x79, 0x9f, 0x6c, + 0x79, 0xd0, 0x27, 0xfb, 0xb9, 0x72, 0xba, 0x1e, 0x31, 0x60, 0x36, 0xa6, 0x45, 0x5d, 0x08, 0x00, + 0x22, 0x96, 0x62, 0xf8, 0x8c, 0x80, 0xe9, 0x98, 0x2e, 0xf4, 0x37, 0x58, 0x2f, 0xe8, 0x82, 0xc1, + 0x27, 0xe2, 0x43, 0x38, 0x5e, 0xcb, 0xdc, 0x23, 0x57, 0x2b, 0x56, 0xd0, 0x3b, 0x7a, 0xb8, 0xe2, + 0x40, 0x7a, 0xd4, 0xff, 0x16, 0x26, 0xdd, 0xff, 0x0e, 0xab, 0x63, 0xf6, 0xcd, 0xf0, 0x35, 0x79, + 0x20, 0x57, 0xf6, 0xfd, 0x07, 0x74, 0xf7, 0xfb, 0x5d, 0x61, 0x1f, 0x73, 0xda, 0x9f, 0xed, 0xfb, + 0x47, 0xdb, 0xfb, 0xa6, 0xd4, 0x12, 0x31, 0x5f, 0xf6, 0xb8, 0xba, 0x65, 0xaf, 0x23, 0x6f, 0x93, + 0xc3, 0xa3, 0x51, 0xcf, 0xc9, 0x1d, 0xde, 0x34, 0xd7, 0x48, 0xff, 0xc4, 0xf4, 0x0c, 0xe1, 0x73, + 0xd0, 0xf1, 0xe4, 0xb9, 0xdb, 0x1f, 0xb0, 0x6b, 0x2b, 0x16, 0xe5, 0xbc, 0x41, 0x1e, 0xb4, 0x97, + 0x0b, 0x1f, 0x18, 0x25, 0x62, 0x4b, 0x3c, 0xc6, 0x93, 0xce, 0xa6, 0x7a, 0xb5, 0xd0, 0xb1, 0xd1, + 0x84, 0x62, 0xb3, 0x07, 0xec, 0xef, 0xd8, 0x63, 0x3a, 0xe5, 0x43, 0x23, 0xa6, 0xbd, 0x4a, 0x78, + 0x41, 0x9f, 0x54, 0x7b, 0xc4, 0x5e, 0x7d, 0x3a, 0x79, 0x8b, 0x39, 0x8a, 0x25, 0x16, 0x3c, 0x85, + 0xbb, 0xa2, 0x65, 0x50, 0x24, 0x0b, 0xbf, 0xda, 0x9b, 0x85, 0x9b, 0x08, 0xea, 0x8d, 0xf8, 0xe3, + 0x3b, 0xe1, 0x73, 0x9a, 0x35, 0x07, 0xee, 0x98, 0x4f, 0x3e, 0xd5, 0x31, 0x1f, 0x3e, 0x02, 0x8b, + 0x40, 0x3b, 0x22, 0x75, 0xcc, 0x78, 0x3a, 0x99, 0xa6, 0x85, 0x0d, 0x65, 0x28, 0x7b, 0xbc, 0x9f, + 0x5f, 0x00, 0xf3, 0xa4, 0x68, 0x72, 0xbe, 0x50, 0x7b, 0x8f, 0xf4, 0xbd, 0x83, 0xba, 0xda, 0x00, + 0xf3, 0x97, 0x31, 0xdb, 0x24, 0xbc, 0x1c, 0x5d, 0xb9, 0xb8, 0x39, 0x71, 0xdd, 0x83, 0xd4, 0x33, + 0xb8, 0x35, 0x9a, 0xfb, 0x1e, 0xc9, 0x98, 0x6c, 0xb0, 0x90, 0xc3, 0x13, 0x45, 0x6c, 0x64, 0xb1, + 0x49, 0xea, 0x29, 0x50, 0xbc, 0x64, 0xc1, 0xcb, 0xb5, 0x2e, 0xb5, 0x6e, 0xe9, 0x93, 0xf6, 0x6b, + 0xc2, 0x3e, 0x93, 0x2c, 0xdc, 0x94, 0x97, 0x6c, 0xb5, 0x50, 0xcc, 0x73, 0x72, 0x24, 0x5b, 0x53, + 0x88, 0x06, 0x24, 0x91, 0x7b, 0xea, 0x69, 0x28, 0xff, 0x4a, 0x0a, 0x45, 0x8c, 0x33, 0x9c, 0xf9, + 0x20, 0x7c, 0x89, 0x67, 0xcd, 0x89, 0x00, 0xa2, 0xf2, 0x27, 0xd2, 0xe7, 0x8b, 0x45, 0x86, 0x1b, + 0x51, 0x74, 0xf6, 0x92, 0x7f, 0x9d, 0x0c, 0x66, 0x5b, 0xd0, 0x5f, 0xb1, 0x60, 0xaf, 0xeb, 0x69, + 0xee, 0xe1, 0x4d, 0xa3, 0x5b, 0x41, 0x71, 0x1b, 0x13, 0x1b, 0xb5, 0x39, 0x49, 0xb3, 0x69, 0xaf, + 0x91, 0x44, 0xfd, 0x80, 0xe8, 0xea, 0x5b, 0xc0, 0xed, 0x44, 0x60, 0x12, 0x3b, 0x4d, 0x97, 0x5c, + 0xf2, 0x14, 0xae, 0x4a, 0x92, 0xc1, 0x3c, 0xde, 0xfe, 0x87, 0x7e, 0xb9, 0x67, 0xed, 0xd8, 0xec, + 0xed, 0xea, 0x63, 0xb7, 0x10, 0xf5, 0xd1, 0xa0, 0x60, 0x22, 0x6a, 0xd4, 0xdd, 0x4d, 0x1b, 0xda, + 0x79, 0xe2, 0xf2, 0x0c, 0x92, 0x31, 0xc5, 0xc5, 0x24, 0x91, 0x62, 0x07, 0x3c, 0x4f, 0xf1, 0x62, + 0x92, 0x91, 0x85, 0x67, 0x8f, 0xd8, 0x57, 0x65, 0x70, 0x92, 0x32, 0x70, 0x0e, 0xba, 0xbe, 0xd5, + 0x31, 0x7b, 0x04, 0xb9, 0x17, 0xe6, 0x26, 0x01, 0xdd, 0x1a, 0x58, 0xb8, 0xc4, 0x92, 0xa5, 0x10, + 0x9e, 0x1d, 0x0a, 0x21, 0xc7, 0x80, 0xc1, 0x7f, 0x98, 0xe2, 0x82, 0x07, 0x4e, 0xaa, 0x1c, 0xcd, + 0x29, 0x5e, 0xf0, 0x20, 0xcc, 0x44, 0xf6, 0x10, 0xbf, 0x84, 0x06, 0xd5, 0x8c, 0xba, 0xcf, 0x2f, + 0x08, 0x63, 0xbb, 0x09, 0xe6, 0x30, 0x96, 0xe4, 0x43, 0xba, 0x0c, 0x91, 0xa0, 0xc4, 0x61, 0xbf, + 0x43, 0x2f, 0xba, 0x0f, 0xbf, 0x35, 0x58, 0x3a, 0xda, 0x79, 0x00, 0xa2, 0x57, 0x6c, 0x27, 0x9d, + 0x8b, 0xeb, 0xa4, 0x25, 0xb1, 0x4e, 0xfa, 0x4d, 0xc2, 0x61, 0x0e, 0x87, 0xb3, 0x7d, 0x78, 0xf5, + 0x10, 0x0b, 0x70, 0x37, 0xba, 0xf4, 0xec, 0xf5, 0xe2, 0x95, 0x54, 0x2f, 0xaa, 0xfb, 0xfd, 0x9e, + 0xd5, 0x41, 0xf3, 0xa9, 0x4f, 0x4c, 0x64, 0x3e, 0xc5, 0xf6, 0x07, 0xf2, 0x40, 0x7f, 0x70, 0x08, + 0x4b, 0xfa, 0x26, 0x70, 0x9c, 0x14, 0x51, 0x09, 0xd9, 0x2a, 0x90, 0x20, 0x6e, 0x03, 0xc9, 0x7c, + 0xd4, 0x76, 0x41, 0x25, 0x08, 0x85, 0x30, 0xc6, 0xd2, 0x67, 0x3a, 0x63, 0x37, 0xad, 0x82, 0xc4, + 0x71, 0x36, 0x85, 0x23, 0x59, 0x79, 0x62, 0xed, 0x6e, 0xf6, 0xbb, 0x48, 0x3b, 0xbe, 0x94, 0x9f, + 0xc4, 0x88, 0xf0, 0x14, 0xea, 0x69, 0x2a, 0xc7, 0x2e, 0x69, 0x44, 0x45, 0x86, 0xfd, 0x48, 0x1b, + 0xde, 0xef, 0xaf, 0x1d, 0x23, 0x7e, 0xa9, 0xea, 0xcd, 0xe0, 0xf8, 0x05, 0xb3, 0x73, 0x71, 0xc7, + 0x75, 0xf6, 0xf1, 0xad, 0xed, 0x0e, 0xbd, 0xfe, 0x7d, 0xed, 0x98, 0x31, 0xf8, 0x42, 0xbd, 0x2d, + 0x30, 0x1d, 0x0a, 0xa3, 0x4c, 0x87, 0xb5, 0x63, 0xd4, 0x78, 0x50, 0x1f, 0x13, 0x76, 0x3a, 0xc5, + 0xc4, 0x4e, 0x67, 0xed, 0x58, 0xd0, 0xed, 0xa8, 0x55, 0x50, 0xea, 0x5a, 0x97, 0xf0, 0x56, 0x35, + 0x9e, 0x75, 0x8d, 0x0a, 0x3a, 0x54, 0xb5, 0x2e, 0x91, 0x8d, 0xed, 0xb5, 0x63, 0x46, 0xf8, 0xa5, + 0xba, 0x0a, 0x66, 0xf1, 0xb6, 0x00, 0x26, 0x53, 0x4a, 0x15, 0x50, 0x68, 0xed, 0x98, 0x11, 0x7d, + 0x8b, 0xac, 0x8f, 0x3c, 0x3e, 0x77, 0x7d, 0x57, 0xb0, 0xdd, 0x9e, 0x4b, 0xb5, 0xdd, 0x8e, 0x64, + 0x41, 0x36, 0xdc, 0x4f, 0x81, 0x42, 0x07, 0x4b, 0x58, 0xa2, 0x12, 0x26, 0x8f, 0xea, 0x9d, 0x20, + 0xbf, 0x67, 0xba, 0xc1, 0xe4, 0xf9, 0xc6, 0xd1, 0x74, 0xd7, 0x4d, 0xf7, 0x22, 0x42, 0x10, 0x7d, + 0xb5, 0x3c, 0x03, 0x0a, 0x58, 0x70, 0xe1, 0x1f, 0xed, 0x6d, 0x79, 0x62, 0x86, 0x54, 0x1c, 0x1b, + 0x0d, 0xfb, 0x6d, 0x27, 0x38, 0x9c, 0xfe, 0x6b, 0xb9, 0xc9, 0x58, 0x90, 0x57, 0x31, 0xd7, 0xa9, + 0xd8, 0xd6, 0x33, 0xf6, 0xe1, 0x3d, 0xf0, 0x0a, 0x5d, 0x12, 0x1d, 0xf6, 0x4a, 0x3d, 0x03, 0x80, + 0x4f, 0x4f, 0xea, 0x85, 0x41, 0x4c, 0x99, 0x94, 0x68, 0xf9, 0xa0, 0x30, 0xda, 0x51, 0xe5, 0xf7, + 0xc6, 0x30, 0x5d, 0x06, 0x05, 0x11, 0x3f, 0x03, 0xef, 0x59, 0x36, 0x53, 0xe7, 0xe0, 0x31, 0x65, + 0xa7, 0x94, 0xd6, 0xa8, 0x19, 0xc1, 0x5e, 0xf6, 0x7d, 0xd3, 0x5b, 0xf2, 0xe4, 0x46, 0x09, 0x72, + 0x02, 0x5a, 0xbf, 0xdf, 0xf2, 0xa2, 0xfb, 0x9b, 0xb5, 0xcf, 0x4e, 0x44, 0x69, 0x86, 0x0c, 0x38, + 0xf2, 0xd0, 0x01, 0xe7, 0x40, 0x80, 0xa0, 0xfc, 0x88, 0x00, 0x41, 0x85, 0x74, 0x2b, 0x87, 0x1f, + 0x65, 0xf5, 0x67, 0x83, 0xd7, 0x9f, 0x3b, 0x62, 0x00, 0x1a, 0x26, 0x97, 0x89, 0xd8, 0x37, 0xef, + 0x0a, 0x35, 0xa5, 0xc5, 0x69, 0xca, 0x5d, 0xe3, 0x33, 0x92, 0xbd, 0xb6, 0x7c, 0x38, 0x0f, 0xae, + 0x8a, 0x98, 0x69, 0xc0, 0xcb, 0x54, 0x51, 0xfe, 0x70, 0x22, 0x8a, 0x92, 0xde, 0xd1, 0x39, 0x6b, + 0x8d, 0xf9, 0x6d, 0xe1, 0x73, 0xfb, 0x83, 0x40, 0x85, 0xb2, 0x89, 0x51, 0x96, 0x53, 0xa0, 0x48, + 0x7a, 0x18, 0x0a, 0x0d, 0x7d, 0x4a, 0xd9, 0xdd, 0x88, 0x9d, 0xf6, 0x17, 0xe5, 0x6d, 0x0a, 0xfa, + 0x43, 0xd7, 0x35, 0xda, 0xfb, 0xae, 0x5d, 0xb3, 0x7d, 0x47, 0xfb, 0xe1, 0x89, 0x28, 0x4e, 0xe8, + 0x0d, 0x27, 0x8f, 0xe3, 0x0d, 0x37, 0xd6, 0x2a, 0x47, 0x50, 0x83, 0x23, 0x59, 0xe5, 0x88, 0x29, + 0x3c, 0x7b, 0xfc, 0xde, 0x29, 0x83, 0x53, 0x74, 0xb2, 0xb5, 0xcc, 0x5b, 0x88, 0xda, 0xbd, 0x93, + 0x00, 0xf2, 0x64, 0x60, 0x26, 0x51, 0x3f, 0x7a, 0xfc, 0xc0, 0x47, 0x29, 0x48, 0xbc, 0x31, 0x94, + 0x9b, 0x0e, 0x0e, 0x70, 0x38, 0x11, 0xa4, 0xc4, 0x2e, 0x0a, 0x4d, 0xc1, 0x46, 0xf6, 0x98, 0xbd, + 0x58, 0x06, 0x45, 0x12, 0x23, 0x41, 0xdb, 0xcc, 0xc4, 0x61, 0x82, 0xbf, 0x9f, 0x45, 0x60, 0x47, + 0x8e, 0x70, 0x93, 0x59, 0xfc, 0x88, 0x34, 0x7b, 0x71, 0x43, 0x59, 0x99, 0x82, 0x0b, 0xa1, 0x04, + 0xe6, 0x5a, 0xd0, 0xaf, 0x98, 0xae, 0x6b, 0x99, 0x3b, 0x93, 0xf2, 0xf8, 0x16, 0xf5, 0x1e, 0xd6, + 0xbe, 0x9d, 0x13, 0x3d, 0xcb, 0x1e, 0x2e, 0x84, 0x07, 0xac, 0xc6, 0x44, 0x01, 0x7f, 0xbd, 0xd0, + 0x79, 0xf5, 0x51, 0xd4, 0xa6, 0xe0, 0xb1, 0x2d, 0x81, 0x99, 0x20, 0x0e, 0xc6, 0xad, 0x5c, 0x6c, + 0x94, 0x5d, 0x7f, 0x2f, 0x38, 0x06, 0x83, 0xff, 0x1f, 0x8c, 0xbf, 0xa0, 0xbd, 0x22, 0xa5, 0xa3, + 0x7c, 0x72, 0x10, 0x8f, 0x74, 0x6d, 0x2c, 0x8d, 0x3b, 0xfc, 0x51, 0x85, 0xed, 0xf8, 0xd0, 0x0c, + 0x5d, 0x8e, 0xac, 0x9b, 0x3e, 0xbc, 0x5f, 0xfb, 0x82, 0x0c, 0x66, 0x5a, 0xd0, 0x47, 0xe3, 0x2d, + 0x62, 0xff, 0xd0, 0x1a, 0xae, 0x32, 0x2b, 0x1e, 0xf4, 0x6c, 0xad, 0x7a, 0x37, 0x98, 0xed, 0xbb, + 0x4e, 0x07, 0x7a, 0x1e, 0x5d, 0xbd, 0x60, 0x1d, 0xd5, 0x86, 0x8d, 0xfe, 0x98, 0xb5, 0xa5, 0x8d, + 0xe0, 0x1b, 0x23, 0xfa, 0x3c, 0xad, 0x19, 0x40, 0x28, 0xd1, 0x0a, 0x4e, 0xdb, 0x0c, 0x48, 0x2a, + 0x3c, 0x7b, 0xa0, 0x7f, 0x5f, 0x06, 0xf3, 0x2d, 0xe8, 0x87, 0x52, 0x4c, 0xb1, 0xc9, 0x11, 0x0f, + 0x2f, 0x07, 0xa5, 0x7c, 0x38, 0x28, 0xdf, 0x29, 0x7c, 0xf1, 0x2e, 0x2f, 0xcd, 0x90, 0xd8, 0x44, + 0xf0, 0x7c, 0x8b, 0xd0, 0x7d, 0xbb, 0x62, 0x1c, 0x4c, 0xe1, 0xf8, 0xda, 0xc3, 0xc1, 0x2c, 0xe6, + 0x05, 0x37, 0xd8, 0x1f, 0xcf, 0x47, 0x8d, 0xf7, 0x8b, 0x19, 0x35, 0xde, 0x27, 0x81, 0xc2, 0x9e, + 0xe9, 0x5e, 0x0c, 0x0e, 0xdf, 0x3e, 0x42, 0x6c, 0xf5, 0xcb, 0x33, 0xc8, 0x57, 0xc3, 0xfd, 0x34, + 0x0b, 0xe9, 0xfc, 0x34, 0x5f, 0x2f, 0xa5, 0x1a, 0x09, 0xc9, 0xdc, 0x61, 0x82, 0x4d, 0x3e, 0xc5, + 0xb8, 0x99, 0x50, 0x76, 0xf6, 0xca, 0xf1, 0x42, 0x19, 0x94, 0xd0, 0xb8, 0x8d, 0xed, 0xf1, 0xf3, + 0x87, 0x57, 0x87, 0xe1, 0x86, 0x7e, 0xca, 0x1e, 0x38, 0x90, 0xc8, 0xe4, 0xcc, 0xfb, 0x14, 0x3d, + 0x70, 0x52, 0xe1, 0xd9, 0xe3, 0xf1, 0x6e, 0x82, 0x07, 0x6e, 0x0f, 0xda, 0x1b, 0x64, 0x20, 0xaf, + 0x42, 0x7f, 0xda, 0x56, 0xe4, 0xdb, 0x85, 0xc3, 0x8b, 0x72, 0x02, 0xc3, 0x3c, 0x2f, 0xad, 0xc2, + 0xc9, 0x34, 0x20, 0xb1, 0xb8, 0xa2, 0x42, 0x0c, 0x64, 0x8f, 0xda, 0xfb, 0x09, 0x6a, 0x64, 0x73, + 0xe1, 0x87, 0x26, 0xd0, 0xab, 0x4e, 0x77, 0xe1, 0x23, 0x10, 0x20, 0xa6, 0x71, 0x54, 0xed, 0x6d, + 0x58, 0xe1, 0xd9, 0x23, 0xf7, 0x52, 0x19, 0x5f, 0x62, 0x56, 0xd9, 0x85, 0x9d, 0x8b, 0xb0, 0xcb, + 0x5e, 0x96, 0x3d, 0x2e, 0x74, 0xa7, 0xc1, 0x4c, 0x87, 0x50, 0xc3, 0xe0, 0x95, 0x8c, 0xe0, 0x91, + 0xbf, 0x59, 0x28, 0xf1, 0xee, 0x2c, 0xbe, 0x23, 0x22, 0x9f, 0x4f, 0x04, 0x17, 0xb1, 0x0b, 0xaf, + 0x04, 0x8a, 0x9f, 0x82, 0xd9, 0x42, 0x66, 0x19, 0xb5, 0x8e, 0x63, 0x6b, 0xff, 0xfd, 0xf0, 0xb0, + 0x5c, 0x07, 0x66, 0xad, 0x8e, 0x63, 0xe3, 0x10, 0x70, 0xc1, 0x21, 0xa0, 0x30, 0x21, 0x78, 0xab, + 0xef, 0x39, 0xf7, 0x59, 0x74, 0xd7, 0x3c, 0x4a, 0x18, 0xd7, 0x98, 0x40, 0xac, 0x1f, 0x95, 0x31, + 0x31, 0xa4, 0xec, 0xec, 0x21, 0xfb, 0x64, 0xe4, 0xdd, 0x46, 0xba, 0xc2, 0x07, 0xc4, 0x2a, 0xf0, + 0x38, 0xc3, 0x19, 0x5b, 0x8b, 0x23, 0x19, 0xce, 0x12, 0x18, 0x98, 0xc2, 0x4d, 0x84, 0x11, 0x8e, + 0x99, 0xaf, 0x01, 0x1f, 0x02, 0x9d, 0xc9, 0x99, 0x87, 0x63, 0xa2, 0x73, 0x34, 0x26, 0xe2, 0x47, + 0x68, 0x78, 0x7a, 0x6a, 0xf1, 0x68, 0xff, 0x63, 0x12, 0xe0, 0xdc, 0x31, 0x8e, 0xbf, 0x02, 0xf1, + 0x56, 0xd0, 0xde, 0x2a, 0x89, 0x86, 0x40, 0x39, 0x20, 0x41, 0x44, 0x65, 0x22, 0x08, 0xbe, 0x49, + 0x28, 0x36, 0x89, 0x48, 0xf9, 0xd9, 0x03, 0xf8, 0x02, 0x19, 0x2c, 0x62, 0x1f, 0x81, 0x1e, 0x34, + 0x5d, 0xd2, 0x51, 0x4e, 0xc4, 0x51, 0xfe, 0xdd, 0xc2, 0x01, 0x7e, 0x78, 0x39, 0x44, 0x7c, 0x4c, + 0x04, 0x0a, 0xb1, 0xe8, 0x3e, 0x82, 0x2c, 0x4c, 0x65, 0x1b, 0x45, 0x09, 0x59, 0xa0, 0x2a, 0x3e, + 0x19, 0x3c, 0x52, 0x7a, 0xe4, 0xf2, 0xc2, 0x08, 0x1a, 0xdb, 0x94, 0x3d, 0x72, 0x45, 0x98, 0xc8, + 0x1e, 0x93, 0x37, 0x3c, 0x9a, 0x2e, 0x38, 0xb7, 0xcd, 0x0b, 0x3d, 0xa8, 0xbd, 0x2a, 0x1f, 0x9e, + 0x68, 0xfb, 0xfd, 0x89, 0x78, 0x60, 0x1e, 0xe2, 0x32, 0x2a, 0x15, 0xe4, 0x5d, 0xe7, 0x32, 0x59, + 0xda, 0x5a, 0x30, 0xf0, 0x7f, 0x12, 0xcf, 0xb2, 0xb7, 0xbf, 0x67, 0x93, 0x93, 0xa1, 0x0b, 0x46, + 0xf0, 0xa8, 0xde, 0x00, 0x16, 0x2e, 0x5b, 0xfe, 0xee, 0x1a, 0x34, 0xbb, 0xd0, 0x35, 0x9c, 0xcb, + 0xd8, 0x63, 0xae, 0x64, 0xf0, 0x89, 0xbc, 0xff, 0x8a, 0x80, 0x7d, 0x89, 0x84, 0x32, 0x9d, 0xe3, + 0x6f, 0x69, 0x2c, 0xcf, 0x78, 0xae, 0xb2, 0x57, 0x98, 0x0f, 0xc8, 0x60, 0xd6, 0x70, 0x2e, 0x53, + 0x25, 0xf9, 0x7f, 0x8e, 0x56, 0x47, 0x52, 0x4f, 0xf4, 0xb0, 0xe4, 0x42, 0xf6, 0xa7, 0x3e, 0xd1, + 0x4b, 0x2c, 0x7e, 0x2a, 0x27, 0x97, 0xe6, 0x0d, 0xe7, 0x72, 0x0b, 0xfa, 0xa4, 0x45, 0x68, 0x5b, + 0x13, 0x72, 0xb2, 0xb6, 0x3c, 0x42, 0x90, 0xce, 0xc3, 0xc3, 0xe7, 0xb4, 0xbb, 0x08, 0xa1, 0x80, + 0x42, 0x16, 0xa7, 0xbd, 0x8b, 0x30, 0x92, 0x83, 0x29, 0xc4, 0x48, 0x91, 0xc1, 0x9c, 0xe1, 0x5c, + 0x46, 0x43, 0xc3, 0x8a, 0xd5, 0xeb, 0x4d, 0x66, 0x84, 0x4c, 0x6b, 0xfc, 0x07, 0x62, 0x08, 0xb8, + 0x98, 0xba, 0xf1, 0x3f, 0x82, 0x81, 0xec, 0x61, 0x78, 0x2e, 0x69, 0x2c, 0xc1, 0x08, 0x6d, 0x4f, + 0x06, 0x87, 0x71, 0x1b, 0x44, 0xc8, 0xc6, 0x91, 0x35, 0x88, 0x38, 0x0e, 0xa6, 0xb2, 0x73, 0xb2, + 0x58, 0xc1, 0xc3, 0xfc, 0x64, 0xdb, 0xc4, 0x7b, 0xd3, 0xb9, 0x26, 0xd2, 0x61, 0x97, 0x63, 0x64, + 0x22, 0x68, 0xa4, 0x70, 0x41, 0x14, 0xe0, 0x21, 0x7b, 0x3c, 0x3e, 0x2e, 0x83, 0x79, 0xc2, 0xc2, + 0x03, 0xc4, 0x0a, 0x18, 0xab, 0x51, 0xb1, 0x35, 0x38, 0x9a, 0x46, 0x95, 0xc0, 0xc1, 0x54, 0xee, + 0xf3, 0x47, 0x76, 0xdc, 0x18, 0xc7, 0xc7, 0xe3, 0x10, 0x1c, 0xdb, 0x18, 0x9b, 0xe0, 0x11, 0xf2, + 0x71, 0x8c, 0xb1, 0x23, 0x3a, 0x46, 0xfe, 0xdc, 0xb0, 0x15, 0x4d, 0x12, 0x83, 0x43, 0x34, 0x85, + 0x09, 0xc2, 0x30, 0x66, 0x53, 0x38, 0x22, 0x24, 0xbe, 0x26, 0x03, 0x40, 0x18, 0x58, 0x77, 0x2e, + 0xe1, 0x8b, 0x34, 0x27, 0xd0, 0x9d, 0x0d, 0xba, 0xd5, 0xcb, 0x23, 0xdc, 0xea, 0x53, 0x86, 0x70, + 0x49, 0xbb, 0x12, 0xc8, 0x48, 0x19, 0x55, 0x72, 0xea, 0x2b, 0x81, 0xc9, 0xe5, 0x67, 0x8f, 0xf1, + 0x57, 0x88, 0x35, 0x17, 0x1d, 0x30, 0xfd, 0xb9, 0x89, 0xa0, 0xcc, 0xcc, 0xfe, 0x65, 0x7e, 0xf6, + 0x7f, 0x08, 0x6c, 0xc7, 0xb5, 0x11, 0x47, 0x1d, 0x1c, 0xcd, 0xde, 0x46, 0x3c, 0xba, 0x03, 0xa2, + 0x3f, 0x94, 0x07, 0xc7, 0x69, 0x27, 0xf2, 0xbd, 0x00, 0x71, 0xca, 0x73, 0x78, 0x5c, 0x27, 0x39, + 0x02, 0xe5, 0x49, 0x2d, 0x48, 0xa5, 0x59, 0xca, 0x14, 0x60, 0x6f, 0x2a, 0xab, 0x1b, 0x45, 0xfd, + 0xfe, 0xbe, 0x69, 0x77, 0xc5, 0xc3, 0xfd, 0x8e, 0x00, 0x3e, 0x58, 0x6b, 0x94, 0xf9, 0xb5, 0xc6, + 0x21, 0x2b, 0x93, 0xa9, 0x77, 0xae, 0xb1, 0xc8, 0x08, 0xbb, 0x53, 0xdf, 0xb9, 0x8e, 0x2f, 0x3b, + 0x7b, 0x94, 0xde, 0x2b, 0x83, 0x7c, 0xcb, 0x71, 0x7d, 0xed, 0x79, 0x69, 0x5a, 0x27, 0x91, 0x7c, + 0x04, 0x52, 0xf0, 0xac, 0x56, 0x40, 0x1e, 0x55, 0x8e, 0xce, 0x18, 0x6e, 0x4d, 0x3e, 0xea, 0x6c, + 0xfa, 0x26, 0xf6, 0xea, 0x46, 0xe5, 0x2f, 0xb5, 0xaf, 0xf4, 0xa1, 0x81, 0x3f, 0x4e, 0x1b, 0x4f, + 0x87, 0xc8, 0xaf, 0x15, 0x7f, 0x00, 0x23, 0xb3, 0x78, 0x3a, 0xb1, 0x25, 0x67, 0x8f, 0xdb, 0x6b, + 0x8f, 0x53, 0xdf, 0xd6, 0x15, 0xab, 0x07, 0xb5, 0xe7, 0x11, 0x97, 0x91, 0x86, 0xb9, 0x07, 0xc5, + 0x8f, 0xc4, 0x24, 0xba, 0xb6, 0xe2, 0xf8, 0xb2, 0x72, 0x14, 0x5f, 0x36, 0x6d, 0x83, 0x22, 0x07, + 0xd0, 0x09, 0x4b, 0xd3, 0x6e, 0x50, 0x09, 0x65, 0x4f, 0x25, 0x4e, 0xe7, 0x89, 0x16, 0xf4, 0x89, + 0x51, 0xd9, 0x0c, 0xae, 0x48, 0x7a, 0xfa, 0x44, 0x22, 0x76, 0x86, 0x17, 0xea, 0xc8, 0x03, 0x37, + 0x30, 0x7d, 0x80, 0x05, 0x67, 0x9d, 0x07, 0xe7, 0x07, 0xe2, 0x05, 0xc4, 0x33, 0x39, 0x11, 0x98, + 0xde, 0x1e, 0xc2, 0xb4, 0xc1, 0xc1, 0x74, 0xe7, 0x98, 0x5c, 0x64, 0x0f, 0xd8, 0x4f, 0x16, 0xc0, + 0x71, 0x32, 0xe9, 0x2f, 0xdb, 0x5d, 0x1a, 0x61, 0xf5, 0xcd, 0xd2, 0x11, 0x6f, 0xb6, 0x1d, 0x0c, + 0xc1, 0xca, 0xc5, 0x72, 0x2e, 0x0c, 0xc4, 0x72, 0x56, 0x97, 0x49, 0x38, 0x57, 0xd4, 0x89, 0xe2, + 0x9d, 0xb6, 0x51, 0x61, 0x26, 0xb0, 0xec, 0x71, 0x97, 0x1b, 0x7e, 0xc7, 0xdf, 0x23, 0x3a, 0x23, + 0x7e, 0x8f, 0xe8, 0xef, 0xa6, 0x5b, 0xb7, 0xc3, 0x45, 0x0f, 0x08, 0x3c, 0x63, 0xdb, 0x29, 0xc5, + 0x8a, 0x9e, 0x00, 0x77, 0xff, 0x39, 0xdc, 0xc9, 0xa2, 0x08, 0x22, 0x63, 0xba, 0x93, 0x61, 0x02, + 0x47, 0xe9, 0x4e, 0x36, 0x8a, 0x81, 0xec, 0x71, 0xfc, 0xdd, 0x02, 0xdd, 0xcd, 0xc7, 0xed, 0x46, + 0xfb, 0x13, 0x29, 0xf3, 0x51, 0xfa, 0x3b, 0xb9, 0x54, 0xfe, 0xcf, 0x98, 0xaf, 0xe4, 0x61, 0x3a, + 0x8d, 0x47, 0x73, 0x12, 0xb9, 0x29, 0xac, 0x1b, 0x49, 0xd8, 0x17, 0xfd, 0xbc, 0xd5, 0xf5, 0x77, + 0x27, 0x74, 0xa2, 0xe3, 0x32, 0xa2, 0x45, 0xe3, 0xd5, 0x93, 0x07, 0xed, 0x5f, 0x72, 0xa9, 0x42, + 0x48, 0x85, 0x22, 0xc1, 0x6c, 0xc5, 0x88, 0x38, 0x45, 0xe0, 0xa7, 0x44, 0x7a, 0x53, 0xd4, 0xe8, + 0x73, 0x56, 0x17, 0x3a, 0x0f, 0x40, 0x8d, 0xc6, 0x7c, 0x4d, 0x4e, 0xa3, 0x93, 0xc8, 0xfd, 0x27, + 0xd5, 0xe8, 0x50, 0x24, 0x13, 0xd2, 0xe8, 0x44, 0x7a, 0xd9, 0xcb, 0xf8, 0x15, 0xf3, 0x74, 0x22, + 0x55, 0xb7, 0xec, 0x8b, 0xda, 0x3f, 0x16, 0x81, 0x12, 0xc4, 0x11, 0xf6, 0x77, 0x69, 0x2c, 0x98, + 0x0f, 0x0b, 0xdf, 0x8d, 0x32, 0x46, 0xbc, 0x17, 0x3e, 0x9c, 0x54, 0xe1, 0x40, 0x38, 0xa9, 0x32, + 0x58, 0xb0, 0x6c, 0x1f, 0xba, 0xb6, 0xd9, 0x5b, 0xe9, 0x99, 0x3b, 0xde, 0xe9, 0x99, 0xa1, 0x97, + 0xd7, 0xd5, 0x98, 0x3c, 0x06, 0xff, 0x05, 0x7b, 0x81, 0x68, 0x89, 0xbf, 0x40, 0x34, 0x26, 0xfa, + 0xd5, 0x6c, 0x7c, 0xf4, 0xab, 0x30, 0xba, 0x15, 0x18, 0x1d, 0x1c, 0x5b, 0xd4, 0x36, 0x4e, 0x19, + 0xee, 0xef, 0x56, 0xc1, 0x28, 0x6c, 0x61, 0xe8, 0xc7, 0x57, 0xcb, 0xa9, 0x56, 0xf7, 0x90, 0x22, + 0x2c, 0x0d, 0x2a, 0x41, 0x6a, 0x0b, 0x95, 0xad, 0xbc, 0x3c, 0x50, 0xf9, 0xd0, 0xe4, 0xc9, 0x0b, + 0x98, 0x3c, 0xac, 0x52, 0x15, 0x44, 0xef, 0x74, 0x15, 0x5f, 0x2c, 0x14, 0xa9, 0xed, 0x14, 0x4e, + 0x23, 0x15, 0xc0, 0x89, 0x20, 0xda, 0x6d, 0xbf, 0x0f, 0x4d, 0xd7, 0xb4, 0x3b, 0x50, 0xfb, 0xa4, + 0x34, 0x09, 0xb3, 0x77, 0x05, 0x94, 0xac, 0x8e, 0x63, 0xb7, 0xac, 0x67, 0x06, 0x97, 0xcb, 0x25, + 0x07, 0x59, 0xc7, 0x12, 0xa9, 0xd1, 0x2f, 0x8c, 0xf0, 0x5b, 0xb5, 0x06, 0x66, 0x3b, 0xa6, 0xdb, + 0x25, 0x41, 0xf8, 0x0a, 0x03, 0x17, 0x39, 0xc5, 0x12, 0xaa, 0x04, 0x9f, 0x18, 0xd1, 0xd7, 0x6a, + 0x93, 0x17, 0x62, 0x71, 0x20, 0x9a, 0x47, 0x2c, 0xb1, 0x6a, 0xf4, 0x11, 0x27, 0x73, 0x24, 0x1d, + 0x17, 0xf6, 0x4c, 0x72, 0xe9, 0xf8, 0x0c, 0xb9, 0x23, 0x3a, 0x4c, 0x48, 0xbb, 0x3c, 0x80, 0x8b, + 0x3a, 0x80, 0xc6, 0xb4, 0x97, 0x07, 0x84, 0xb8, 0xc8, 0x5e, 0x33, 0xdf, 0x55, 0x04, 0x0b, 0xa4, + 0x57, 0xa3, 0xe2, 0xd4, 0x5e, 0x20, 0x83, 0x62, 0x0b, 0xfa, 0xf7, 0xc0, 0x2b, 0x5a, 0xeb, 0xf0, + 0x63, 0xb2, 0x02, 0xe4, 0x8b, 0x61, 0xc0, 0x41, 0xf4, 0x37, 0xed, 0xbe, 0x7d, 0xc0, 0xd7, 0x12, + 0xe1, 0x69, 0xda, 0xfb, 0xf6, 0xc9, 0xc5, 0x67, 0x8f, 0xcf, 0x4f, 0xc9, 0x40, 0x2e, 0x77, 0xbb, + 0x5a, 0xe7, 0xf0, 0x50, 0x5c, 0x0f, 0xe6, 0x82, 0x36, 0x13, 0xc5, 0x80, 0x64, 0x93, 0xd2, 0x2e, + 0x82, 0x86, 0xb2, 0x29, 0x77, 0xa7, 0xbe, 0xab, 0x90, 0x50, 0x76, 0xf6, 0xa0, 0x7c, 0x71, 0x86, + 0x36, 0x9a, 0x65, 0xc7, 0xb9, 0x88, 0x8f, 0xca, 0xfc, 0x92, 0x0c, 0x0a, 0x2b, 0xd0, 0xef, 0xec, + 0x6a, 0xde, 0x44, 0xda, 0xcc, 0xc0, 0xbd, 0xe7, 0x23, 0x82, 0x72, 0xa6, 0x8d, 0xfe, 0x1c, 0xb0, + 0xbd, 0x84, 0x59, 0x9e, 0x76, 0xf4, 0xe7, 0xc4, 0xd2, 0xa7, 0x70, 0x08, 0x2e, 0x0f, 0x16, 0xc3, + 0x15, 0x30, 0x82, 0xd9, 0x3b, 0x72, 0x0f, 0xb8, 0xf5, 0xd0, 0x11, 0x76, 0xb3, 0xf6, 0x87, 0xe9, + 0x42, 0xac, 0x85, 0x32, 0xe7, 0x6b, 0x9e, 0xf1, 0xc2, 0x64, 0x8a, 0xe0, 0x6b, 0x62, 0x0c, 0x4e, + 0x61, 0x05, 0x40, 0x06, 0x25, 0xcc, 0x50, 0xd5, 0xba, 0x84, 0x5d, 0x0f, 0xb9, 0x85, 0xca, 0x67, + 0x4d, 0x64, 0xa1, 0xf2, 0x4e, 0x7e, 0xa1, 0x52, 0x30, 0x62, 0x72, 0xb0, 0x4e, 0x99, 0xd2, 0x17, + 0x07, 0x7d, 0x3f, 0xf1, 0x65, 0xca, 0x14, 0xbe, 0x38, 0x23, 0xca, 0xcf, 0x1e, 0xd1, 0x37, 0xfe, + 0x57, 0xda, 0x59, 0x07, 0x1b, 0xb2, 0xda, 0xff, 0x3c, 0x01, 0xf2, 0xe7, 0xd0, 0x9f, 0x7f, 0x88, + 0x6e, 0xd4, 0x7a, 0xd9, 0x04, 0x82, 0x3b, 0x3c, 0x19, 0xe4, 0x11, 0x7d, 0x3a, 0xed, 0xb9, 0x59, + 0x6c, 0x77, 0x18, 0x31, 0x62, 0xe0, 0xef, 0xd4, 0x53, 0xa0, 0xe8, 0x39, 0xfb, 0x6e, 0x07, 0x99, + 0xdf, 0x48, 0x63, 0xe8, 0x53, 0xda, 0xa0, 0xa6, 0x1c, 0xe9, 0xa5, 0xc9, 0xb9, 0x9c, 0x32, 0x17, + 0x2c, 0xc9, 0xdc, 0x05, 0x4b, 0x29, 0xf6, 0x1f, 0x04, 0x78, 0xcb, 0x5e, 0x23, 0xfe, 0x04, 0xdf, + 0x35, 0xd8, 0x9d, 0x14, 0xec, 0x31, 0x62, 0x39, 0xac, 0x3a, 0xa4, 0x75, 0x18, 0xe7, 0x45, 0x1b, + 0xc6, 0x91, 0x9f, 0xaa, 0xc3, 0xb8, 0x00, 0x0f, 0x53, 0x39, 0xe5, 0x5e, 0xa4, 0x4e, 0xae, 0xf7, + 0x4e, 0x12, 0xdd, 0x3c, 0xa7, 0xf4, 0x87, 0x42, 0x67, 0x82, 0xce, 0xaf, 0x63, 0xa3, 0x73, 0x44, + 0xee, 0xaf, 0xbf, 0x21, 0xe3, 0x48, 0x9a, 0x81, 0x11, 0x24, 0x7e, 0x51, 0x52, 0x6a, 0x88, 0xd0, + 0x18, 0xcc, 0xc5, 0x91, 0x5e, 0x18, 0x3f, 0xb4, 0x38, 0x2f, 0x3a, 0x86, 0xff, 0x69, 0x87, 0x16, + 0x17, 0x65, 0x24, 0x7b, 0x20, 0x7f, 0x91, 0x5c, 0x4c, 0x56, 0xee, 0xf8, 0xd6, 0xa5, 0x09, 0xb7, + 0x34, 0x7e, 0x78, 0x49, 0x19, 0x4d, 0xf8, 0x80, 0x84, 0x08, 0x87, 0xd3, 0x8e, 0x26, 0x2c, 0xc6, + 0x46, 0xf6, 0x30, 0xfd, 0x04, 0x40, 0xd2, 0xa3, 0x6b, 0x3b, 0x6f, 0x90, 0x81, 0xdc, 0x82, 0xbe, + 0x06, 0x0f, 0x8f, 0xd6, 0x59, 0x30, 0xcf, 0x2c, 0x1d, 0x04, 0x17, 0xde, 0x70, 0x69, 0x69, 0x0f, + 0xca, 0x87, 0x22, 0x63, 0x17, 0x5d, 0xa6, 0x7d, 0x50, 0x5e, 0x84, 0x89, 0x29, 0x1c, 0x94, 0xa7, + 0xcb, 0x3e, 0xdf, 0x2b, 0x40, 0x4d, 0x6a, 0x05, 0xe8, 0x50, 0x40, 0x1d, 0xc5, 0x52, 0xd0, 0xdb, + 0x23, 0x63, 0x63, 0x4a, 0x58, 0x7d, 0x98, 0xc5, 0xaa, 0xc9, 0x63, 0x75, 0xbb, 0x88, 0x98, 0xc4, + 0x8c, 0x0f, 0xa1, 0x09, 0xfe, 0x3b, 0x43, 0xb8, 0x0c, 0x0e, 0xae, 0x27, 0x8f, 0xcd, 0x47, 0xf6, + 0x88, 0xfd, 0x3c, 0x19, 0xb7, 0x5a, 0x64, 0x6e, 0x35, 0x99, 0x71, 0x8b, 0x4e, 0xdb, 0x64, 0x6e, + 0xda, 0x96, 0xf2, 0x60, 0x45, 0xe4, 0x2f, 0x1c, 0x30, 0x37, 0x0a, 0xa2, 0xfc, 0x84, 0x0f, 0x56, + 0x8c, 0xe4, 0x20, 0x7b, 0x70, 0xbe, 0x29, 0x03, 0xb0, 0xea, 0x3a, 0xfb, 0xfd, 0xa6, 0xdb, 0x85, + 0xae, 0xf6, 0x67, 0xd1, 0x4c, 0xed, 0xa7, 0x27, 0x30, 0x53, 0xdb, 0x00, 0x60, 0x27, 0x24, 0x4e, + 0x35, 0xfc, 0xd1, 0x62, 0xf3, 0xb2, 0x88, 0x29, 0x83, 0xa1, 0xc1, 0xdf, 0x2d, 0xfc, 0x54, 0x1e, + 0xe3, 0xa4, 0x3e, 0x2b, 0x22, 0x37, 0xc9, 0x99, 0xda, 0xbb, 0x43, 0xac, 0xdb, 0x1c, 0xd6, 0x4f, + 0x39, 0x04, 0x27, 0xd9, 0x63, 0xfe, 0xf7, 0x33, 0x60, 0x8e, 0xec, 0xcb, 0x12, 0x99, 0xfe, 0x75, + 0x04, 0xfa, 0xcf, 0x4d, 0x00, 0xf4, 0x4d, 0x30, 0xef, 0x44, 0xd4, 0x49, 0x9f, 0xca, 0xae, 0x94, + 0x25, 0xc2, 0xce, 0xf0, 0x65, 0x70, 0x64, 0xb4, 0x5f, 0x67, 0x91, 0x37, 0x78, 0xe4, 0xef, 0x4c, + 0x90, 0x37, 0x43, 0x71, 0x92, 0xd0, 0xbf, 0x27, 0x84, 0x7e, 0x93, 0x83, 0xbe, 0x7c, 0x18, 0x56, + 0xa6, 0x70, 0xaf, 0x82, 0x0c, 0xf2, 0xf8, 0x18, 0xe4, 0x5b, 0x32, 0x5c, 0x88, 0x39, 0x0d, 0x66, + 0x70, 0x93, 0x0d, 0x27, 0x88, 0xc1, 0x23, 0x7a, 0x63, 0x6e, 0xfb, 0xd0, 0x0d, 0x97, 0xd8, 0x83, + 0x47, 0xc4, 0x43, 0xe0, 0x7e, 0xee, 0x9d, 0x2e, 0x92, 0x1d, 0xe7, 0x30, 0x61, 0xec, 0xd9, 0x23, + 0x2b, 0xf1, 0x89, 0x1d, 0x8c, 0x1c, 0x67, 0xf6, 0x38, 0x82, 0x91, 0xec, 0x81, 0xff, 0x52, 0x1e, + 0x9c, 0x26, 0xcb, 0x7f, 0x2b, 0xae, 0xb3, 0x37, 0x70, 0x8d, 0x99, 0x75, 0x78, 0x5d, 0xb8, 0x11, + 0x2c, 0xfa, 0x9c, 0xe3, 0x3d, 0xd5, 0x89, 0x81, 0x54, 0xed, 0xf7, 0x58, 0xe7, 0x99, 0xa7, 0xf1, + 0x48, 0x2e, 0x27, 0x08, 0x30, 0x8e, 0xf7, 0xd4, 0x3b, 0x2a, 0x82, 0x8c, 0x32, 0xab, 0x89, 0xf2, + 0x58, 0x8b, 0xcb, 0xa1, 0x4e, 0x15, 0x44, 0x74, 0xea, 0x83, 0xa1, 0x4e, 0xfd, 0x17, 0x4e, 0xa7, + 0x56, 0x0f, 0x2f, 0x92, 0x29, 0x2c, 0x31, 0x2d, 0x82, 0xe2, 0x8a, 0xd5, 0xf3, 0xa1, 0xab, 0x7d, + 0x85, 0xce, 0xa3, 0x5e, 0x95, 0x61, 0xf7, 0x52, 0x05, 0xc5, 0x6d, 0x5c, 0x1a, 0x35, 0xc8, 0x6e, + 0x11, 0xc3, 0x86, 0x70, 0x68, 0xd0, 0x6f, 0xd3, 0x06, 0xf9, 0x1b, 0x20, 0x33, 0xb1, 0x09, 0x58, + 0x8a, 0x20, 0x7f, 0xa3, 0x59, 0x98, 0xca, 0xfd, 0x56, 0x45, 0x03, 0xee, 0xa1, 0x11, 0xe4, 0x62, + 0x76, 0x08, 0x2b, 0x40, 0xb6, 0xba, 0x1e, 0x6e, 0x7a, 0xb3, 0x06, 0xfa, 0x9b, 0xd6, 0xe5, 0x68, + 0x50, 0x54, 0x84, 0xe5, 0x69, 0xbb, 0x1c, 0x09, 0x71, 0x91, 0x3d, 0x66, 0xdf, 0xc1, 0xfe, 0xa6, + 0xfd, 0x9e, 0xd9, 0x81, 0x88, 0xfb, 0xcc, 0x50, 0x5b, 0x04, 0x92, 0x15, 0x8c, 0xf8, 0x92, 0xc5, + 0xb6, 0xd3, 0xc2, 0x21, 0xda, 0xe9, 0xb8, 0xab, 0x91, 0xa1, 0xcc, 0x71, 0xc5, 0x8f, 0x6c, 0x35, + 0x32, 0x91, 0x8d, 0x29, 0xdc, 0x5e, 0x1a, 0x9c, 0xc7, 0x9d, 0x6a, 0x6b, 0x1d, 0x77, 0xaf, 0x86, + 0x0a, 0x6b, 0x62, 0x67, 0x6f, 0xc7, 0xd9, 0xab, 0x89, 0xe7, 0x61, 0x0a, 0x68, 0x2d, 0x52, 0xb4, + 0x3e, 0x4f, 0x87, 0xd1, 0x8c, 0xb7, 0x4b, 0x3d, 0xc7, 0xf5, 0xd3, 0x6d, 0x97, 0x22, 0xee, 0x0c, + 0xfc, 0x5d, 0xda, 0xf3, 0x5b, 0xfc, 0xf1, 0xec, 0x49, 0x0d, 0x9f, 0x29, 0xce, 0x6f, 0x8d, 0x62, + 0x20, 0x7b, 0x78, 0xdf, 0x7a, 0x44, 0x83, 0xe7, 0xb8, 0xcd, 0x91, 0xb6, 0x81, 0x89, 0x0d, 0x9d, + 0xe3, 0x34, 0xc7, 0x78, 0x1e, 0xb2, 0xc7, 0xeb, 0xef, 0x98, 0x81, 0xf3, 0x4d, 0x53, 0x1c, 0x38, + 0x83, 0x96, 0x59, 0x18, 0xb3, 0x65, 0x8e, 0xbb, 0xbb, 0x40, 0x65, 0x3d, 0xb9, 0x01, 0x73, 0x9c, + 0xdd, 0x85, 0x04, 0x26, 0xb2, 0x47, 0xfc, 0xcd, 0x32, 0x28, 0xb4, 0xa6, 0x3f, 0x5e, 0x8e, 0x3b, + 0x17, 0xc1, 0xb2, 0x6a, 0x4d, 0x6c, 0xb8, 0x1c, 0x67, 0x2e, 0x12, 0xcb, 0xc2, 0x14, 0xe2, 0xf7, + 0x1f, 0x07, 0xf3, 0x78, 0xc2, 0x1d, 0xec, 0xb6, 0xfe, 0x1d, 0x1d, 0x35, 0x5f, 0x9f, 0x61, 0x5b, + 0xbd, 0x1b, 0x94, 0x82, 0xdd, 0x21, 0x3a, 0x72, 0x2e, 0x89, 0xb5, 0xcf, 0x80, 0x4b, 0x23, 0xfc, + 0xfe, 0x50, 0x3e, 0x11, 0x13, 0xdf, 0x09, 0x1c, 0xd7, 0x27, 0xe2, 0x48, 0x77, 0x03, 0x7f, 0x37, + 0x1a, 0x51, 0xff, 0x7b, 0x76, 0x98, 0x0f, 0xee, 0x12, 0xe6, 0x87, 0xec, 0x12, 0x7e, 0x92, 0xc5, + 0xb2, 0xc5, 0x63, 0xf9, 0x24, 0x51, 0x11, 0x4e, 0x70, 0xac, 0x7d, 0x6f, 0x08, 0xe7, 0x39, 0x0e, + 0xce, 0xe5, 0x43, 0xf1, 0x32, 0x85, 0xf3, 0x93, 0xf9, 0x68, 0xcc, 0xfd, 0x54, 0x86, 0xed, 0x78, + 0xe0, 0x70, 0x46, 0xfe, 0xc0, 0xe1, 0x0c, 0xae, 0xa5, 0x17, 0x0e, 0xd9, 0xd2, 0x3f, 0xc5, 0x6a, + 0x47, 0x9b, 0xd7, 0x8e, 0x27, 0x8b, 0x23, 0x32, 0xb9, 0x91, 0xf9, 0x7d, 0xa1, 0x7a, 0x9c, 0xe7, + 0xd4, 0xa3, 0x72, 0x38, 0x66, 0xb2, 0xd7, 0x8f, 0xdf, 0x0c, 0x26, 0xb4, 0x47, 0xdc, 0xde, 0xc7, + 0xdd, 0x88, 0xe4, 0x84, 0x38, 0xb1, 0x91, 0x7b, 0x9c, 0x8d, 0xc8, 0x51, 0x9c, 0x4c, 0x21, 0xa4, + 0xdb, 0x02, 0x98, 0xc3, 0x3c, 0x9d, 0xb7, 0xba, 0x3b, 0xd0, 0xd7, 0x5e, 0x4d, 0x5c, 0x15, 0x83, + 0x00, 0x9a, 0x13, 0x8a, 0x72, 0x14, 0x77, 0x6c, 0x36, 0xad, 0xbf, 0x00, 0x61, 0x72, 0x89, 0x61, + 0x70, 0xda, 0x81, 0x18, 0x47, 0x72, 0x90, 0x3d, 0x64, 0xbf, 0x4e, 0x9c, 0x39, 0xea, 0xe6, 0x15, + 0x67, 0xdf, 0xd7, 0x9e, 0x33, 0x81, 0x0e, 0x7a, 0x19, 0x14, 0x7b, 0x98, 0x1a, 0x3d, 0x9d, 0x91, + 0x3c, 0xdd, 0xa1, 0x22, 0x20, 0xe5, 0x1b, 0xf4, 0xcb, 0xb4, 0x47, 0x34, 0x22, 0x39, 0x12, 0x3a, + 0xd3, 0x3e, 0xa2, 0x31, 0xa2, 0xfc, 0xa9, 0x5c, 0xd5, 0x53, 0x42, 0xa5, 0x5b, 0x7b, 0x96, 0x3f, + 0xa1, 0x40, 0x10, 0x3d, 0x44, 0x2b, 0x08, 0x04, 0x81, 0x1f, 0xd2, 0x1e, 0x3c, 0x65, 0xa4, 0x82, + 0x3e, 0x9f, 0xf6, 0xc1, 0xd3, 0xe4, 0xe2, 0xb3, 0xc7, 0xe4, 0x67, 0x49, 0xcb, 0x3a, 0x47, 0x7c, + 0x70, 0x33, 0x74, 0xef, 0x1d, 0xbb, 0xb1, 0x10, 0xd6, 0x8e, 0xae, 0xb1, 0x0c, 0x2d, 0x3f, 0x7b, + 0x60, 0x7e, 0xe9, 0xfb, 0x40, 0xa1, 0x0a, 0x2f, 0xec, 0xef, 0x68, 0x77, 0x82, 0x52, 0xdb, 0x85, + 0xb0, 0x66, 0x6f, 0x3b, 0x48, 0xba, 0x3e, 0xfa, 0x1f, 0x40, 0x42, 0x9f, 0x10, 0x1e, 0xbb, 0xd0, + 0xec, 0x46, 0xc7, 0xd0, 0x82, 0x47, 0xed, 0x65, 0x12, 0xc8, 0xb7, 0x7c, 0xd3, 0xd7, 0x66, 0x43, + 0x6c, 0xb5, 0xe7, 0xb0, 0x58, 0xdc, 0xc9, 0x63, 0x71, 0x23, 0x27, 0x0b, 0xcc, 0xc1, 0x12, 0xfa, + 0x3e, 0x06, 0x00, 0x0d, 0x94, 0xee, 0xf3, 0x1c, 0x1b, 0xe5, 0x08, 0x4e, 0x4a, 0x06, 0xcf, 0xda, + 0x2b, 0x43, 0x71, 0xdf, 0xc5, 0x89, 0xfb, 0x91, 0x62, 0x45, 0x4c, 0x61, 0xa5, 0x4d, 0x02, 0xb3, + 0x48, 0xb4, 0x6b, 0xd0, 0xec, 0x7a, 0xda, 0x43, 0x23, 0xe5, 0x8f, 0x11, 0xb3, 0xf6, 0x11, 0xe1, + 0x98, 0x9e, 0xa4, 0x56, 0x21, 0xf1, 0x78, 0x7f, 0x81, 0x20, 0xa6, 0x89, 0xc4, 0xc7, 0x34, 0xb9, + 0x15, 0xe4, 0x2d, 0x7b, 0xdb, 0xa1, 0xde, 0x6b, 0xd7, 0xc6, 0xd0, 0x46, 0x3a, 0x61, 0xe0, 0x8c, + 0x82, 0x01, 0x3f, 0x93, 0xd9, 0x9a, 0xca, 0xdd, 0x79, 0x79, 0x54, 0xba, 0xf6, 0x7f, 0x8f, 0x14, + 0xb6, 0xaa, 0x82, 0x7c, 0xdf, 0xf4, 0x77, 0x69, 0xd1, 0xf8, 0x3f, 0xb2, 0x91, 0xf7, 0x6d, 0xd3, + 0x76, 0xec, 0x2b, 0x7b, 0xd6, 0x33, 0xc3, 0x2b, 0x7a, 0xb9, 0x34, 0xc4, 0xf9, 0x0e, 0xb4, 0xa1, + 0x6b, 0xfa, 0xb0, 0x75, 0x69, 0x07, 0xcf, 0xb1, 0x4a, 0x06, 0x9b, 0x94, 0x5a, 0xff, 0x11, 0xc7, + 0xf1, 0xfa, 0xbf, 0x6d, 0xf5, 0x20, 0x0e, 0xf8, 0x44, 0xf5, 0x3f, 0x78, 0x4e, 0xa5, 0xff, 0x43, + 0x8a, 0xc8, 0x1e, 0x8d, 0x7f, 0x95, 0xc0, 0x7c, 0x0b, 0x29, 0x5c, 0x6b, 0x7f, 0x6f, 0xcf, 0x74, + 0xaf, 0x68, 0x0f, 0x8b, 0x50, 0x61, 0x54, 0x33, 0xc7, 0xa9, 0xa6, 0xf6, 0x1b, 0xc2, 0xb7, 0x53, + 0xd3, 0xa6, 0xcd, 0x94, 0x90, 0xba, 0x1d, 0x3c, 0x06, 0x14, 0x90, 0x7a, 0x07, 0xfe, 0x7c, 0x89, + 0x0d, 0x81, 0xe4, 0x14, 0x0c, 0x8c, 0x35, 0x92, 0xb7, 0x29, 0x04, 0xe5, 0x90, 0xc0, 0xf1, 0x96, + 0x6f, 0x76, 0x2e, 0xae, 0x3a, 0xae, 0xb3, 0xef, 0x5b, 0x36, 0xf4, 0xb4, 0x07, 0x47, 0x08, 0x04, + 0xfa, 0x9f, 0x8b, 0xf4, 0x5f, 0xfb, 0xf7, 0x9c, 0xe8, 0x28, 0x1a, 0x76, 0xab, 0x2c, 0xf9, 0x98, + 0x38, 0x57, 0x62, 0xe3, 0xa2, 0x08, 0xc5, 0xec, 0x85, 0xf6, 0x26, 0x19, 0x28, 0xfa, 0xfd, 0x7d, + 0xc7, 0xf5, 0xeb, 0x4e, 0xc7, 0xec, 0x79, 0xbe, 0xe3, 0x42, 0xad, 0x99, 0x28, 0x35, 0xd4, 0xc3, + 0x74, 0x9d, 0x4e, 0x34, 0x38, 0xd2, 0x27, 0x56, 0xed, 0x64, 0x5e, 0xc7, 0x7f, 0x5d, 0x78, 0x97, + 0x91, 0x48, 0x65, 0x90, 0xa3, 0x18, 0x3d, 0x1f, 0xd6, 0xa5, 0xa5, 0x73, 0xc5, 0x17, 0xdb, 0x79, + 0x14, 0x62, 0x6a, 0x0a, 0x4b, 0xe5, 0x12, 0x58, 0x68, 0xed, 0x5f, 0x08, 0x89, 0x78, 0xac, 0x11, + 0xf2, 0x1a, 0xe1, 0x60, 0x16, 0x54, 0xf1, 0x58, 0x42, 0x31, 0xf2, 0xbd, 0x01, 0x2c, 0x78, 0x6c, + 0x36, 0x8a, 0x37, 0x9f, 0x28, 0x18, 0xc4, 0x62, 0x74, 0xa9, 0xd9, 0x0b, 0xf0, 0x7d, 0x12, 0x58, + 0x68, 0xf6, 0xa1, 0x0d, 0xbb, 0xc4, 0xc7, 0x8e, 0x13, 0xe0, 0xcb, 0x52, 0x0a, 0x90, 0x23, 0x14, + 0x23, 0xc0, 0xc8, 0x1f, 0xb6, 0x1a, 0x08, 0x2f, 0x4a, 0x48, 0x25, 0xb8, 0xa4, 0xd2, 0xb2, 0x17, + 0xdc, 0x97, 0x25, 0x30, 0x67, 0xec, 0xdb, 0x1b, 0xae, 0x83, 0x46, 0x63, 0x57, 0x7b, 0x52, 0xd4, + 0x41, 0xdc, 0x02, 0x4e, 0x74, 0xf7, 0x5d, 0xbc, 0xfe, 0x54, 0xb3, 0x5b, 0xb0, 0xe3, 0xd8, 0x5d, + 0x0f, 0xd7, 0xa3, 0x60, 0x1c, 0x7c, 0x71, 0x47, 0xfe, 0x79, 0x5f, 0x97, 0x73, 0xda, 0x0b, 0x84, + 0x23, 0xe6, 0x90, 0xca, 0x33, 0x45, 0x8b, 0xf7, 0x04, 0x82, 0x71, 0x71, 0x46, 0x95, 0x90, 0xbd, + 0x70, 0x3f, 0x2f, 0x01, 0xb5, 0xdc, 0xe9, 0x38, 0xfb, 0xb6, 0xdf, 0x82, 0x3d, 0xd8, 0xf1, 0xdb, + 0xae, 0xd9, 0x81, 0xac, 0xfd, 0xac, 0x00, 0xb9, 0x6b, 0xb9, 0xb4, 0x0f, 0x46, 0x7f, 0xa9, 0x1c, + 0x5f, 0x26, 0xbc, 0xe3, 0x48, 0x6a, 0x79, 0xb0, 0x94, 0x14, 0xe2, 0x14, 0xdb, 0x57, 0x14, 0x2c, + 0x28, 0x7b, 0xa9, 0x7e, 0x4a, 0x02, 0xb3, 0x41, 0x8f, 0xbd, 0x23, 0x22, 0xcc, 0x9f, 0x4d, 0x39, + 0x19, 0x09, 0x89, 0xa7, 0x90, 0xe1, 0xbb, 0x52, 0xcc, 0x2a, 0xe2, 0xe8, 0xa7, 0x13, 0x5d, 0x39, + 0xbd, 0xe8, 0xd0, 0x63, 0xa3, 0xb9, 0xb5, 0xd2, 0xac, 0x57, 0x75, 0x43, 0x91, 0xb5, 0xaf, 0x48, + 0x20, 0xbf, 0x61, 0xd9, 0x3b, 0x6c, 0x60, 0xb3, 0x93, 0xc8, 0x8e, 0xec, 0xc2, 0xfb, 0x69, 0x4b, + 0x27, 0x0f, 0xea, 0x6d, 0xe0, 0xa4, 0xbd, 0xbf, 0x77, 0x01, 0xba, 0xcd, 0x6d, 0x3c, 0xca, 0x7a, + 0x6d, 0xa7, 0x05, 0x6d, 0x62, 0x84, 0x16, 0x8c, 0xa1, 0xef, 0x78, 0x13, 0x4c, 0x60, 0xf2, 0x80, + 0x38, 0x89, 0x91, 0x78, 0xc8, 0x94, 0xc4, 0x30, 0x95, 0x6a, 0xda, 0x30, 0x84, 0x78, 0xf6, 0x9a, + 0xfa, 0x5b, 0x05, 0x70, 0x75, 0xd9, 0xbe, 0x82, 0x6d, 0x0a, 0xd2, 0xc1, 0x57, 0x76, 0x4d, 0x7b, + 0x07, 0xe2, 0x01, 0x22, 0x94, 0x38, 0x1b, 0xe9, 0x3f, 0xc7, 0x47, 0xfa, 0x57, 0x0d, 0x30, 0xe3, + 0xb8, 0x5d, 0xe8, 0x2e, 0x5f, 0xc1, 0x3c, 0x0d, 0x2e, 0x3b, 0xd3, 0x36, 0x39, 0xac, 0x88, 0x25, + 0x4a, 0x7e, 0xa9, 0x49, 0xbe, 0x37, 0x02, 0x42, 0x67, 0x6f, 0x01, 0x33, 0x34, 0x4d, 0x9d, 0x07, + 0xa5, 0xa6, 0x51, 0xd5, 0x8d, 0xad, 0x5a, 0x55, 0x39, 0xa6, 0x5e, 0x05, 0x8e, 0xd7, 0xda, 0xba, + 0x51, 0x6e, 0xd7, 0x9a, 0x8d, 0x2d, 0x9c, 0xae, 0xe4, 0xb4, 0xe7, 0xe6, 0x45, 0x3d, 0x7b, 0x93, + 0x99, 0x19, 0x06, 0xab, 0x01, 0x66, 0x3a, 0x24, 0x03, 0x1e, 0x42, 0xe7, 0x52, 0xd5, 0x8e, 0x12, + 0x24, 0x09, 0x46, 0x40, 0x48, 0x3d, 0x03, 0xc0, 0x65, 0xd7, 0xb1, 0x77, 0xa2, 0x33, 0x6d, 0x25, + 0x83, 0x49, 0xd1, 0x9e, 0x93, 0x03, 0x45, 0xf2, 0x0d, 0xbe, 0xd9, 0x04, 0xff, 0x8b, 0x04, 0x1f, + 0x3c, 0x23, 0x8b, 0x17, 0xcb, 0x2b, 0x9a, 0x68, 0xd1, 0x47, 0xa4, 0x8b, 0x44, 0x06, 0xc4, 0x12, + 0xa6, 0x55, 0xb9, 0x15, 0x14, 0xc9, 0xb7, 0xd4, 0xeb, 0x20, 0x3e, 0x4a, 0x29, 0xc9, 0x26, 0xe8, + 0xa7, 0x2c, 0x2e, 0xd3, 0xec, 0xb5, 0xf9, 0xa3, 0x12, 0x28, 0x35, 0xa0, 0x5f, 0xd9, 0x85, 0x9d, + 0x8b, 0xda, 0x23, 0xf8, 0x05, 0xd0, 0x9e, 0x05, 0x6d, 0xff, 0xde, 0xbd, 0x5e, 0xb8, 0x00, 0x1a, + 0x24, 0x68, 0xcf, 0x67, 0x3b, 0xdf, 0xa7, 0xf0, 0xfa, 0x73, 0xf3, 0x90, 0xba, 0x06, 0x25, 0xc4, + 0xa8, 0xcc, 0x29, 0x50, 0x74, 0xa1, 0xb7, 0xdf, 0x0b, 0x16, 0xd1, 0xe8, 0x93, 0xf6, 0xda, 0x50, + 0x9c, 0x15, 0x4e, 0x9c, 0xb7, 0x8a, 0x17, 0x31, 0x85, 0xb0, 0xa7, 0x79, 0x30, 0x53, 0xb3, 0x2d, + 0xdf, 0x32, 0x7b, 0xda, 0x0b, 0xf2, 0x60, 0xa1, 0x05, 0xfd, 0x0d, 0xd3, 0x35, 0xf7, 0xa0, 0x0f, + 0x5d, 0x4f, 0xfb, 0x36, 0xdf, 0x27, 0xf4, 0x7b, 0xa6, 0xbf, 0xed, 0xb8, 0x7b, 0x81, 0x6a, 0x06, + 0xcf, 0x48, 0x35, 0x2f, 0x41, 0xd7, 0x8b, 0xf8, 0x0a, 0x1e, 0xd1, 0x9b, 0xcb, 0x8e, 0x7b, 0x11, + 0x0d, 0x82, 0x74, 0x9a, 0x46, 0x1f, 0x11, 0xbd, 0x9e, 0xb3, 0x53, 0x87, 0x97, 0x60, 0x10, 0x55, + 0x2d, 0x7c, 0x46, 0x73, 0x81, 0xae, 0xd3, 0x70, 0x7c, 0xd4, 0x69, 0xd7, 0x9d, 0x1d, 0x12, 0x76, + 0xb6, 0x64, 0xf0, 0x89, 0x51, 0x2e, 0xf3, 0x12, 0xc4, 0xb9, 0x8a, 0x6c, 0x2e, 0x9a, 0xa8, 0x2e, + 0x01, 0x35, 0xfc, 0xac, 0x0d, 0x7b, 0x70, 0x0f, 0xfa, 0xee, 0x15, 0x7c, 0xbb, 0x44, 0xc9, 0x18, + 0xf2, 0x86, 0x0e, 0xd0, 0xe2, 0x93, 0x75, 0x2a, 0xbd, 0x25, 0x4e, 0x72, 0x87, 0x9a, 0xac, 0x8b, + 0x50, 0x9c, 0xca, 0xed, 0x59, 0x32, 0xb2, 0x66, 0x5e, 0x2e, 0x83, 0x3c, 0x1e, 0x3c, 0xdf, 0x9c, + 0xe3, 0x56, 0x98, 0xf6, 0xa0, 0xe7, 0x99, 0x3b, 0x30, 0x58, 0x61, 0xa2, 0x8f, 0xea, 0xed, 0xa0, + 0xd0, 0xc3, 0x98, 0x92, 0xc1, 0xe1, 0x61, 0x5c, 0xcd, 0x90, 0x81, 0x81, 0x68, 0x85, 0x23, 0x01, + 0x86, 0xdb, 0x20, 0x5f, 0x9c, 0xbd, 0x1b, 0x14, 0x08, 0xfc, 0xb3, 0xa0, 0x50, 0xd5, 0x97, 0x37, + 0x57, 0x95, 0x63, 0xe8, 0x6f, 0xc0, 0xdf, 0x2c, 0x28, 0xac, 0x94, 0xdb, 0xe5, 0xba, 0x22, 0xa1, + 0x7a, 0xd4, 0x1a, 0x2b, 0x4d, 0x45, 0x46, 0x89, 0x1b, 0xe5, 0x46, 0xad, 0xa2, 0xe4, 0xd5, 0x39, + 0x30, 0x73, 0xbe, 0x6c, 0x34, 0x6a, 0x8d, 0x55, 0xa5, 0xa0, 0xfd, 0x25, 0x8b, 0xdf, 0x1d, 0x3c, + 0x7e, 0x37, 0xc4, 0xf1, 0x34, 0x0c, 0xb2, 0x5f, 0x08, 0x21, 0x7b, 0x12, 0x07, 0xd9, 0xf7, 0x89, + 0x10, 0x99, 0x82, 0x3b, 0x53, 0x11, 0xcc, 0x6c, 0xb8, 0x4e, 0x07, 0x7a, 0x9e, 0xf6, 0x52, 0x09, + 0x14, 0x2b, 0xa6, 0xdd, 0x81, 0x3d, 0xed, 0x9a, 0x08, 0x2a, 0xe2, 0x2a, 0x9a, 0x0b, 0x5c, 0x45, + 0xb5, 0x6f, 0xe6, 0x44, 0x7b, 0x3f, 0x4a, 0x77, 0x89, 0xd0, 0x8c, 0x91, 0x8f, 0x58, 0x2f, 0x97, + 0x48, 0x6a, 0x0a, 0x37, 0xec, 0x48, 0x60, 0x96, 0xae, 0x06, 0x5c, 0x80, 0xec, 0x3c, 0xfc, 0xdb, + 0x39, 0xd1, 0xc9, 0x61, 0x50, 0x83, 0x90, 0x4c, 0x8c, 0x3c, 0xc4, 0x26, 0x82, 0xa3, 0xa8, 0x4d, + 0x61, 0xf3, 0x50, 0x02, 0x73, 0x9b, 0xb6, 0x37, 0x4c, 0x28, 0xe2, 0xe1, 0xf8, 0x83, 0x6a, 0x30, + 0x84, 0x0e, 0x15, 0x8e, 0x7f, 0x34, 0xbd, 0xec, 0x05, 0xf3, 0xed, 0x1c, 0x38, 0xb9, 0x0a, 0x6d, + 0xe8, 0x5a, 0x1d, 0x52, 0x83, 0x40, 0x12, 0x4f, 0xe2, 0x25, 0xf1, 0x08, 0x8e, 0xf3, 0x61, 0x5f, + 0xf0, 0x12, 0x78, 0x55, 0x28, 0x81, 0xa7, 0x70, 0x12, 0xb8, 0x45, 0x90, 0xce, 0x14, 0xae, 0x55, + 0x9f, 0x05, 0xf3, 0x0d, 0xc7, 0xb7, 0xb6, 0xad, 0x0e, 0xf1, 0x41, 0xfb, 0x79, 0x19, 0xe4, 0xeb, + 0x96, 0xe7, 0x6b, 0xe5, 0xa8, 0x3b, 0xb9, 0x1e, 0xcc, 0x59, 0x76, 0xa7, 0xb7, 0xdf, 0x85, 0x06, + 0x34, 0x49, 0xbf, 0x52, 0x32, 0xd8, 0xa4, 0x68, 0x6b, 0x1f, 0xb1, 0x25, 0x07, 0x5b, 0xfb, 0xbf, + 0x23, 0xbc, 0x0c, 0xc3, 0xb2, 0x80, 0xe3, 0x52, 0xc6, 0xd8, 0x5d, 0x65, 0xb0, 0x60, 0x33, 0x59, + 0x03, 0x83, 0x7d, 0xf0, 0x5e, 0x02, 0x96, 0x9c, 0xc1, 0x7f, 0xa1, 0x7d, 0x40, 0xa8, 0xb1, 0x8e, + 0x62, 0x28, 0x1d, 0x32, 0x2b, 0x63, 0x4c, 0x92, 0x55, 0xb0, 0x58, 0x6b, 0xb4, 0x75, 0xa3, 0x51, + 0xae, 0xd3, 0x2c, 0xb2, 0xf6, 0xaf, 0x12, 0x28, 0x18, 0xb0, 0xdf, 0xbb, 0xc2, 0x06, 0x9e, 0xa6, + 0x8e, 0xe2, 0xb9, 0xd0, 0x51, 0x5c, 0x5d, 0x01, 0xc0, 0xec, 0xa0, 0x82, 0xf1, 0xcd, 0x5c, 0xd2, + 0xd0, 0x70, 0xa6, 0x5c, 0x05, 0xcb, 0x61, 0x6e, 0x83, 0xf9, 0x52, 0x7b, 0xa1, 0xf0, 0xce, 0x11, + 0x47, 0x0d, 0x73, 0x18, 0xd3, 0x27, 0x7c, 0x50, 0x68, 0xb3, 0x67, 0x24, 0xb9, 0xa3, 0x11, 0xff, + 0x57, 0x25, 0x90, 0x6f, 0xa3, 0xde, 0x92, 0xe9, 0x38, 0x3f, 0x3b, 0x9e, 0x8e, 0x23, 0x32, 0x31, + 0x3a, 0x7e, 0x17, 0x98, 0x67, 0x35, 0x96, 0xba, 0x4a, 0x24, 0xaa, 0x38, 0xf7, 0xc1, 0x38, 0x1a, + 0x3e, 0x84, 0x9d, 0xa3, 0x11, 0xf1, 0xa7, 0x1f, 0x09, 0xc0, 0x3a, 0xdc, 0xbb, 0x00, 0x5d, 0x6f, + 0xd7, 0xea, 0x6b, 0x7f, 0x25, 0x83, 0xd9, 0x55, 0xe8, 0xb7, 0x7c, 0xd3, 0xdf, 0xf7, 0x06, 0xb6, + 0x3b, 0x6d, 0xa7, 0x62, 0x76, 0x76, 0x21, 0xed, 0x8e, 0x82, 0x47, 0xed, 0x3d, 0xb2, 0xa8, 0x3f, + 0x51, 0x54, 0xce, 0x52, 0x58, 0x46, 0x0c, 0x26, 0x8f, 0x02, 0xf9, 0xae, 0xe9, 0x9b, 0x14, 0x8b, + 0x6b, 0x06, 0xb0, 0x88, 0x08, 0x19, 0x38, 0x9b, 0xf6, 0x0e, 0x49, 0xc4, 0xa1, 0x48, 0xa0, 0xfc, + 0x74, 0x20, 0x7c, 0x20, 0x37, 0x06, 0x0a, 0x27, 0xc0, 0x42, 0xa3, 0xd9, 0xde, 0xaa, 0x37, 0x57, + 0x57, 0x75, 0x94, 0xaa, 0xc8, 0xea, 0x29, 0xa0, 0x6e, 0x94, 0xef, 0x5d, 0xd7, 0x1b, 0xed, 0xad, + 0x46, 0xb3, 0xaa, 0xd3, 0x2f, 0xf3, 0xea, 0x71, 0x30, 0x57, 0x29, 0x57, 0xd6, 0x82, 0x84, 0x82, + 0x7a, 0x1a, 0x9c, 0x5c, 0xd7, 0xd7, 0x97, 0x75, 0xa3, 0xb5, 0x56, 0xdb, 0xd8, 0x42, 0x64, 0x56, + 0x9a, 0x9b, 0x8d, 0xaa, 0x52, 0x54, 0x35, 0x70, 0x8a, 0x79, 0x73, 0xde, 0x68, 0x36, 0x56, 0xb7, + 0x5a, 0xed, 0x72, 0x5b, 0x57, 0x66, 0xd4, 0xab, 0xc0, 0xf1, 0x4a, 0xb9, 0x81, 0xb3, 0x57, 0x9a, + 0x8d, 0x86, 0x5e, 0x69, 0x2b, 0x25, 0xed, 0xdf, 0xf3, 0x60, 0xae, 0xe6, 0x35, 0xcc, 0x3d, 0x78, + 0xce, 0xec, 0x59, 0x5d, 0xed, 0x05, 0xcc, 0xcc, 0xe3, 0x06, 0xb0, 0xe0, 0x92, 0xbf, 0xb0, 0xdb, + 0xb6, 0x20, 0x41, 0x73, 0xc1, 0xe0, 0x13, 0xd1, 0x9c, 0xdc, 0xc6, 0x04, 0x82, 0x39, 0x39, 0x79, + 0x52, 0x97, 0x01, 0x20, 0xff, 0xda, 0xd1, 0x1d, 0xb1, 0x67, 0x07, 0x5b, 0x93, 0xb9, 0x07, 0x3d, + 0xe8, 0x5e, 0xb2, 0x3a, 0x30, 0xc8, 0x69, 0x30, 0x5f, 0x69, 0x5f, 0x93, 0x45, 0xf7, 0x17, 0x19, + 0x50, 0x99, 0xea, 0xc4, 0xf4, 0x86, 0x3f, 0x26, 0x8b, 0xec, 0x0e, 0x0a, 0x91, 0x4c, 0xa7, 0x29, + 0x2f, 0x96, 0xc6, 0x5b, 0xb6, 0x6d, 0x37, 0x9b, 0x5b, 0xad, 0xb5, 0xa6, 0xd1, 0x56, 0x64, 0x75, + 0x1e, 0x94, 0xd0, 0x63, 0xbd, 0xd9, 0x58, 0x55, 0xf2, 0xea, 0xd5, 0xe0, 0xc4, 0x5a, 0xb9, 0xb5, + 0x55, 0x6b, 0x9c, 0x2b, 0xd7, 0x6b, 0xd5, 0xad, 0xca, 0x5a, 0xd9, 0x68, 0x29, 0x05, 0xf5, 0x1a, + 0x70, 0x75, 0xbb, 0xa6, 0x1b, 0x5b, 0x2b, 0x7a, 0xb9, 0xbd, 0x69, 0xe8, 0xad, 0xad, 0x46, 0x73, + 0xab, 0x51, 0x5e, 0xd7, 0x95, 0x22, 0x6a, 0xfe, 0xf8, 0x55, 0xa4, 0x36, 0x33, 0x07, 0x95, 0xb1, + 0x14, 0xa3, 0x8c, 0xb3, 0x83, 0xca, 0x08, 0x58, 0xb5, 0x32, 0xf4, 0x96, 0x6e, 0x9c, 0xd3, 0x95, + 0xb9, 0x61, 0xba, 0x36, 0xaf, 0x9e, 0x04, 0x0a, 0xe2, 0x61, 0xab, 0xd6, 0x0a, 0x72, 0x56, 0x95, + 0x05, 0xed, 0x53, 0x45, 0x70, 0xca, 0x80, 0x3b, 0x96, 0xe7, 0x43, 0x77, 0xc3, 0xbc, 0xb2, 0x07, + 0x6d, 0x3f, 0xe8, 0xe4, 0xff, 0x29, 0xb5, 0x32, 0xae, 0x83, 0x85, 0x3e, 0xa1, 0xb1, 0x0e, 0xfd, + 0x5d, 0xa7, 0x4b, 0x47, 0xe1, 0x47, 0xc4, 0xf6, 0x1c, 0x4b, 0x1b, 0x6c, 0x76, 0x83, 0xff, 0x9a, + 0xd1, 0x6d, 0x39, 0x41, 0xb7, 0xf3, 0xe3, 0xe8, 0xb6, 0x7a, 0x1d, 0x98, 0xdd, 0xf7, 0xa0, 0xab, + 0xef, 0x99, 0x56, 0x2f, 0xb8, 0xe3, 0x33, 0x4c, 0xd0, 0xde, 0x99, 0x17, 0x3d, 0xb1, 0xc2, 0xd4, + 0x65, 0xb8, 0x18, 0x63, 0xfa, 0xd6, 0x33, 0x00, 0xd0, 0xca, 0x6e, 0xba, 0x3d, 0xaa, 0xac, 0x4c, + 0x0a, 0xe2, 0xef, 0x82, 0xd5, 0xeb, 0x59, 0xf6, 0x4e, 0xb8, 0xef, 0x1f, 0x25, 0x68, 0x2f, 0x96, + 0x45, 0x4e, 0xb0, 0xa4, 0xe5, 0x2d, 0x5d, 0x6b, 0x7a, 0xa1, 0x34, 0xe5, 0x7e, 0xf7, 0x60, 0xd3, + 0x29, 0xaa, 0x0a, 0x98, 0xc7, 0x69, 0xb4, 0x05, 0x2a, 0x33, 0xa8, 0x0f, 0x0e, 0xc8, 0xad, 0xeb, + 0xed, 0xb5, 0x66, 0x35, 0x7c, 0x57, 0x42, 0x24, 0x11, 0x33, 0xe5, 0xc6, 0xbd, 0xb8, 0x35, 0xce, + 0xaa, 0x0f, 0x06, 0xd7, 0x30, 0x1d, 0x76, 0xb9, 0x6e, 0xe8, 0xe5, 0xea, 0xbd, 0x5b, 0xfa, 0xd3, + 0x6a, 0xad, 0x76, 0x8b, 0x6f, 0x5c, 0x41, 0x3b, 0x9a, 0x43, 0xfc, 0xea, 0xeb, 0xe5, 0x5a, 0x9d, + 0xf6, 0xef, 0x2b, 0x4d, 0x63, 0xbd, 0xdc, 0x56, 0xe6, 0xb5, 0x97, 0xcb, 0x40, 0x59, 0x85, 0xfe, + 0x86, 0xe3, 0xfa, 0x66, 0xaf, 0x6e, 0xd9, 0x17, 0x37, 0xdd, 0x1e, 0x37, 0xd9, 0x14, 0x0e, 0xd3, + 0xc1, 0x0f, 0x91, 0x1c, 0xc1, 0xf8, 0x1d, 0xf1, 0x3e, 0xce, 0x16, 0x29, 0x53, 0x94, 0xa0, 0x3d, + 0x4b, 0x12, 0x59, 0xee, 0x16, 0x2f, 0x35, 0x9d, 0x9e, 0x3c, 0x7b, 0xda, 0xe3, 0xf3, 0x10, 0xd4, + 0x8a, 0xda, 0xf3, 0xf2, 0xa0, 0xb4, 0x62, 0xd9, 0x66, 0xcf, 0x7a, 0x26, 0x17, 0x1d, 0x33, 0xea, + 0x63, 0x72, 0x09, 0x7d, 0x8c, 0x34, 0xd6, 0xf8, 0xf9, 0x33, 0xb2, 0xe8, 0xf2, 0x02, 0x23, 0xfb, + 0x80, 0xc9, 0x98, 0xc1, 0xf3, 0x63, 0x92, 0xc8, 0xf2, 0xc2, 0x68, 0x7a, 0xe9, 0x30, 0xfc, 0xcc, + 0xf7, 0x86, 0x8d, 0x35, 0xd0, 0xbe, 0x4b, 0xc3, 0x54, 0x61, 0x56, 0xfb, 0x03, 0x19, 0x68, 0xab, + 0xd0, 0x3f, 0x07, 0xdd, 0x70, 0x2a, 0x80, 0x7b, 0x7d, 0x6a, 0x6f, 0x33, 0x4d, 0xf6, 0xcd, 0x2c, + 0x80, 0xe7, 0x79, 0x00, 0xcb, 0x09, 0x8d, 0x27, 0x86, 0x74, 0x4c, 0xe3, 0xad, 0x81, 0xa2, 0x87, + 0xdf, 0x53, 0x35, 0x7b, 0x4c, 0xfc, 0x70, 0x89, 0x89, 0xb1, 0xd4, 0x09, 0x61, 0x83, 0x12, 0xd0, + 0xbe, 0x13, 0x4e, 0x82, 0x7e, 0x90, 0xd3, 0x8e, 0x95, 0x43, 0x33, 0x9b, 0x4e, 0x5f, 0xdc, 0x6c, + 0xd5, 0x65, 0x98, 0x7d, 0xa3, 0x7d, 0xac, 0x00, 0x4e, 0x0e, 0xab, 0x8e, 0xf6, 0xa1, 0x1c, 0xb7, + 0xc3, 0x0e, 0xf1, 0x90, 0x9f, 0xa3, 0x1b, 0x88, 0xe8, 0x41, 0x7d, 0x1c, 0xb8, 0x3a, 0x5c, 0x86, + 0x6b, 0x3b, 0x0d, 0x78, 0xd9, 0xeb, 0x41, 0xdf, 0x87, 0x2e, 0xae, 0x5a, 0xc9, 0x18, 0xfe, 0x52, + 0x7d, 0x02, 0x78, 0x90, 0x65, 0x7b, 0x56, 0x17, 0xba, 0x6d, 0xab, 0xef, 0x95, 0xed, 0x6e, 0x7b, + 0xdf, 0x77, 0x5c, 0xcb, 0xa4, 0x37, 0x52, 0x96, 0x8c, 0xb8, 0xd7, 0xea, 0xcd, 0x40, 0xb1, 0xbc, + 0xa6, 0x7d, 0xc1, 0x31, 0xdd, 0xae, 0x65, 0xef, 0xd4, 0x2d, 0xcf, 0xa7, 0x1e, 0xc0, 0x07, 0xd2, + 0xb5, 0xbf, 0x96, 0x45, 0x0f, 0xd3, 0x8d, 0x80, 0x35, 0xa6, 0x43, 0x79, 0xbe, 0x2c, 0x72, 0x3c, + 0x2e, 0x1d, 0xed, 0x74, 0xca, 0xf2, 0xdc, 0x69, 0x1b, 0x12, 0xc3, 0x47, 0x70, 0xdc, 0xb5, 0x90, + 0xf4, 0xc0, 0x10, 0x38, 0xa7, 0x1b, 0xb5, 0x95, 0x9a, 0x8e, 0xcc, 0x8a, 0xab, 0xc1, 0x89, 0xe8, + 0x5d, 0xf5, 0xde, 0xad, 0x96, 0xde, 0x68, 0x2b, 0x25, 0xd4, 0x4f, 0x91, 0xe4, 0x95, 0x72, 0xad, + 0xae, 0x57, 0xb7, 0xda, 0x4d, 0xf4, 0xa6, 0x3a, 0x9e, 0x69, 0xa1, 0x3d, 0x27, 0x0f, 0x8e, 0x63, + 0xd9, 0x5e, 0xc1, 0x52, 0x45, 0x42, 0x19, 0xf0, 0xb5, 0x0d, 0x01, 0x9a, 0x25, 0xe2, 0xd5, 0x7e, + 0x5f, 0xf8, 0xc2, 0x4d, 0x06, 0xc2, 0x81, 0x32, 0x62, 0x34, 0xe3, 0xdb, 0x92, 0x48, 0x84, 0x0a, + 0x61, 0xb2, 0xe9, 0x94, 0xe2, 0x9f, 0xa7, 0x3d, 0xe2, 0xc4, 0x83, 0x8f, 0xad, 0xcc, 0x0a, 0xfe, + 0xf8, 0x69, 0x1b, 0x35, 0x03, 0xab, 0xc3, 0x22, 0x00, 0x38, 0x05, 0x6b, 0x10, 0xd1, 0x83, 0xa1, + 0xe3, 0x55, 0x9c, 0x1e, 0x94, 0x2b, 0xed, 0xda, 0x39, 0x3d, 0x4e, 0x0f, 0x3e, 0x27, 0x83, 0xd2, + 0x2a, 0xf4, 0xd1, 0x9c, 0xca, 0xd3, 0x9e, 0x28, 0xb0, 0xfe, 0x83, 0xcc, 0x98, 0x9e, 0xd3, 0x31, + 0x7b, 0xe1, 0x32, 0x00, 0x79, 0xd2, 0x7e, 0x74, 0x1c, 0x13, 0x24, 0x28, 0x3a, 0x66, 0xbc, 0xfa, + 0x01, 0x50, 0xf0, 0xd1, 0x6b, 0xba, 0x0c, 0xfd, 0xd0, 0xd8, 0xe1, 0x0a, 0x11, 0xa9, 0x9a, 0xbe, + 0x69, 0x90, 0xfc, 0xcc, 0xe8, 0x24, 0x68, 0xbb, 0xc4, 0x30, 0xf2, 0xbd, 0x68, 0x7f, 0xfe, 0xa5, + 0x0c, 0xae, 0x26, 0xed, 0xa3, 0xdc, 0xef, 0xb7, 0x7c, 0xc7, 0x85, 0x06, 0xec, 0x40, 0xab, 0xef, + 0x0f, 0xac, 0xef, 0xb9, 0x24, 0x35, 0xd8, 0x6c, 0xa6, 0x8f, 0xda, 0x1b, 0x64, 0xd1, 0x08, 0xbf, + 0x07, 0xda, 0xe3, 0x40, 0x79, 0x31, 0x8d, 0xfd, 0x93, 0x92, 0x48, 0xcc, 0xde, 0x94, 0xc4, 0xd3, + 0x01, 0xf5, 0xf1, 0x23, 0x00, 0x2a, 0x58, 0xb9, 0x31, 0xf4, 0x8a, 0x5e, 0xdb, 0x40, 0x83, 0xc0, + 0x43, 0xc0, 0xb5, 0x1b, 0x9b, 0x46, 0x65, 0xad, 0xdc, 0xd2, 0xb7, 0x0c, 0x7d, 0xb5, 0xd6, 0x6a, + 0x53, 0xa7, 0x2c, 0xf2, 0xd5, 0x8c, 0x7a, 0x1d, 0x38, 0xdd, 0xda, 0x5c, 0x6e, 0x55, 0x8c, 0xda, + 0x06, 0x4e, 0x37, 0xf4, 0x86, 0x7e, 0x9e, 0xbe, 0x2d, 0x69, 0x1f, 0x51, 0xc0, 0x1c, 0x9a, 0x00, + 0xb4, 0xc8, 0xbc, 0x40, 0xfb, 0x9b, 0x3c, 0x98, 0x33, 0xa0, 0xe7, 0xf4, 0x2e, 0xe1, 0x39, 0xc2, + 0xb4, 0xa6, 0x1e, 0xdf, 0x92, 0x45, 0xcf, 0x6f, 0x33, 0xcc, 0x2e, 0x31, 0x8c, 0xc6, 0x4f, 0x34, + 0xcd, 0x4b, 0xa6, 0xd5, 0x33, 0x2f, 0xd0, 0xae, 0xa6, 0x64, 0x44, 0x09, 0xea, 0x12, 0x50, 0x9d, + 0xcb, 0x36, 0x74, 0x5b, 0x9d, 0xcb, 0xba, 0xbf, 0x5b, 0xee, 0x76, 0x5d, 0xe8, 0x79, 0x74, 0xf5, + 0x62, 0xc8, 0x1b, 0xf5, 0x26, 0x70, 0x1c, 0xa7, 0x32, 0x99, 0x89, 0x83, 0xcc, 0x60, 0x72, 0x98, + 0xb3, 0x6c, 0x5f, 0x09, 0x72, 0x16, 0x98, 0x9c, 0x51, 0x32, 0x7b, 0x5c, 0xa2, 0xc8, 0x9f, 0xd2, + 0xb9, 0x1e, 0xcc, 0xd9, 0xe6, 0x1e, 0xd4, 0xef, 0xef, 0x5b, 0x2e, 0xf4, 0xb0, 0x63, 0x8c, 0x6c, + 0xb0, 0x49, 0xda, 0xc7, 0x84, 0xce, 0x9b, 0x8b, 0x49, 0x2c, 0x9d, 0xee, 0xaf, 0x8e, 0xa1, 0xfa, + 0x43, 0xfa, 0x19, 0x59, 0xfb, 0x88, 0x0c, 0xe6, 0x29, 0x53, 0x65, 0xfb, 0x4a, 0xad, 0xab, 0x3d, + 0x84, 0x33, 0x7e, 0x4d, 0x94, 0x16, 0x18, 0xbf, 0xf8, 0x41, 0xfb, 0x71, 0x59, 0xd4, 0xdd, 0x79, + 0x48, 0xc5, 0x71, 0x19, 0xf1, 0x8e, 0xa3, 0xdb, 0xce, 0x3e, 0x75, 0x54, 0x2d, 0x19, 0xe4, 0x21, + 0xcb, 0x45, 0x3d, 0xed, 0xd7, 0x84, 0x9c, 0xa9, 0x05, 0xab, 0x71, 0x44, 0x00, 0x7e, 0x5a, 0x06, + 0x8b, 0x94, 0xab, 0x16, 0x3d, 0xe7, 0x23, 0x74, 0xe0, 0xed, 0x27, 0x85, 0x0d, 0xc1, 0x21, 0xf5, + 0xa7, 0x25, 0x3d, 0x60, 0x80, 0xfc, 0x75, 0xa1, 0xe0, 0x68, 0xc2, 0x15, 0x39, 0x22, 0x28, 0xdf, + 0x95, 0x07, 0x73, 0x9b, 0x1e, 0x74, 0xa9, 0xdf, 0xbe, 0xf6, 0xda, 0x3c, 0x90, 0x57, 0x21, 0xb7, + 0x91, 0xfa, 0x22, 0x61, 0x0f, 0x5f, 0xb6, 0xb2, 0x0c, 0x51, 0x64, 0x23, 0xc5, 0xc0, 0x76, 0x23, + 0x58, 0x24, 0x22, 0x2d, 0xfb, 0x3e, 0x32, 0x12, 0x03, 0x6f, 0xda, 0x81, 0xd4, 0x49, 0x6c, 0x15, + 0xe1, 0xb2, 0x50, 0x96, 0x0a, 0xe2, 0xa9, 0x0e, 0xb7, 0xc9, 0x7c, 0x36, 0x6f, 0x0c, 0xa4, 0xaa, + 0x8f, 0x06, 0x57, 0x39, 0x7d, 0x48, 0xce, 0xaf, 0x30, 0x99, 0x0b, 0x38, 0xf3, 0xb0, 0x57, 0xda, + 0xdf, 0x08, 0xf9, 0xea, 0x8a, 0x4b, 0x27, 0x9d, 0x2e, 0xf4, 0x27, 0x63, 0x92, 0x9c, 0x04, 0x0a, + 0xca, 0x81, 0xf7, 0x5f, 0x0c, 0xbd, 0xd5, 0xac, 0x9f, 0xd3, 0x87, 0x2f, 0x63, 0x14, 0xb4, 0xe7, + 0xca, 0x60, 0x76, 0xd9, 0x75, 0xcc, 0x6e, 0xc7, 0xf4, 0x7c, 0xed, 0x3b, 0x12, 0x98, 0xdf, 0x30, + 0xaf, 0xf4, 0x1c, 0xb3, 0x8b, 0xfd, 0xfb, 0x07, 0xfa, 0x82, 0x3e, 0x79, 0x15, 0xf4, 0x05, 0xf4, + 0x91, 0x3f, 0x18, 0x18, 0x1e, 0xdd, 0xcb, 0x89, 0xdc, 0xab, 0x19, 0x6e, 0xf3, 0x49, 0xc3, 0x82, + 0x95, 0x06, 0x7c, 0x2d, 0xb1, 0x3c, 0xc5, 0x58, 0x94, 0x1f, 0x11, 0x0b, 0x3f, 0x2a, 0x42, 0xf2, + 0x68, 0x76, 0xe5, 0x9f, 0x57, 0x02, 0xc5, 0x2a, 0xc4, 0x56, 0xdc, 0xaf, 0x48, 0x60, 0xa6, 0x05, + 0x7d, 0x6c, 0xc1, 0xdd, 0xce, 0x79, 0x0a, 0x77, 0x71, 0x86, 0xc8, 0x89, 0x3d, 0x78, 0x46, 0x93, + 0x75, 0xe6, 0xbc, 0x35, 0xfe, 0x9f, 0xc2, 0x23, 0x91, 0x94, 0xbb, 0x44, 0xcb, 0x3c, 0x94, 0x47, + 0x62, 0x22, 0xa9, 0xec, 0x7d, 0xad, 0xde, 0x23, 0x51, 0xd7, 0x2a, 0xa6, 0xd7, 0x7b, 0x35, 0xab, + 0x9f, 0x89, 0xde, 0x66, 0x94, 0xf9, 0x04, 0xe7, 0xa8, 0xc7, 0x82, 0x19, 0x22, 0xf3, 0x60, 0x3e, + 0x3a, 0xe8, 0xa7, 0x40, 0x48, 0xe0, 0xb3, 0xd7, 0x41, 0x4e, 0x41, 0x17, 0xb5, 0xf8, 0xc2, 0xa7, + 0x12, 0x83, 0x60, 0xbe, 0x01, 0xfd, 0xcb, 0x8e, 0x7b, 0xb1, 0xe5, 0x9b, 0x3e, 0xd4, 0xfe, 0x59, + 0x22, 0xd7, 0xe5, 0x31, 0xd1, 0x4f, 0x1a, 0xe0, 0x04, 0xa9, 0x10, 0xcd, 0x88, 0xfb, 0x6f, 0x52, + 0x91, 0xeb, 0x87, 0x0a, 0x81, 0xc9, 0x67, 0x1c, 0xfc, 0x54, 0x7b, 0xe9, 0xd0, 0xa0, 0x4f, 0xd2, + 0x90, 0x49, 0x03, 0x95, 0x0c, 0xcb, 0x60, 0xfc, 0xfd, 0x78, 0xda, 0x47, 0x85, 0xcc, 0x6a, 0x31, + 0x9a, 0x47, 0xd3, 0x15, 0x7c, 0xf8, 0x91, 0x20, 0x5f, 0xd9, 0x35, 0x7d, 0xed, 0xdd, 0x32, 0x00, + 0xe5, 0x6e, 0x77, 0x9d, 0xf8, 0x80, 0xb3, 0x0e, 0x69, 0x67, 0xc1, 0x7c, 0x67, 0xd7, 0x8c, 0x6e, + 0xce, 0x20, 0xfd, 0x01, 0x97, 0xa6, 0x3e, 0x2e, 0x72, 0x26, 0x27, 0x52, 0xd5, 0x06, 0x60, 0x42, + 0x65, 0x50, 0xda, 0xa1, 0xa3, 0x39, 0x1f, 0x0a, 0x33, 0xf1, 0x08, 0x1d, 0xfa, 0x7c, 0x29, 0x62, + 0x2f, 0x7e, 0x0e, 0x47, 0x49, 0x87, 0x07, 0x6c, 0xa2, 0x84, 0x94, 0x27, 0xbd, 0xc5, 0x02, 0x7a, + 0x24, 0xf3, 0x35, 0x95, 0xd0, 0xb5, 0xaa, 0xde, 0xb5, 0x02, 0xd1, 0xd2, 0x80, 0x59, 0xda, 0x0b, + 0x73, 0xe9, 0xe0, 0x4b, 0x16, 0xdc, 0x53, 0xc0, 0x02, 0xec, 0x5a, 0x3e, 0x0c, 0x6a, 0x49, 0x05, + 0x98, 0x04, 0x31, 0xff, 0x81, 0xf6, 0x6c, 0xe1, 0xa0, 0x6b, 0x58, 0xa0, 0x07, 0x6b, 0x14, 0xd3, + 0xfe, 0xc4, 0xc2, 0xa8, 0x89, 0xd1, 0xcc, 0x1e, 0xac, 0x1f, 0x95, 0xc1, 0xd5, 0x6d, 0x67, 0x67, + 0xa7, 0x07, 0x03, 0x31, 0x41, 0xe2, 0x9d, 0xa9, 0x99, 0x93, 0x84, 0x0b, 0xef, 0x04, 0x39, 0xf7, + 0x59, 0xe1, 0x51, 0x32, 0xf4, 0xc0, 0x9f, 0x98, 0x4a, 0x9c, 0x45, 0x61, 0x71, 0x0d, 0xe5, 0x33, + 0x06, 0x05, 0xb1, 0x80, 0xcf, 0xc2, 0x64, 0xb3, 0x07, 0xe2, 0x8b, 0x12, 0x58, 0x20, 0xf7, 0x22, + 0x06, 0x0a, 0x7a, 0xcf, 0x04, 0x01, 0xd0, 0xbe, 0x93, 0x13, 0xf5, 0xb3, 0xc5, 0x32, 0xe1, 0x38, + 0x89, 0x11, 0xb1, 0x58, 0x50, 0x95, 0x91, 0xe4, 0xa6, 0x70, 0x53, 0x67, 0x1e, 0xcc, 0xad, 0xc2, + 0xa0, 0xa5, 0x79, 0xda, 0xfb, 0x53, 0xf6, 0x44, 0x67, 0xc1, 0x3c, 0xbe, 0x1c, 0xac, 0x49, 0x8f, + 0x49, 0x92, 0x55, 0x33, 0x2e, 0x4d, 0xbd, 0x01, 0x2c, 0x5c, 0x80, 0xdb, 0x8e, 0x0b, 0x9b, 0xdc, + 0x59, 0x4a, 0x3e, 0x71, 0x78, 0x78, 0x3a, 0xf5, 0x26, 0x70, 0x9c, 0x3a, 0xba, 0x2f, 0xa3, 0xb9, + 0xbe, 0xe9, 0x5e, 0xa1, 0x07, 0xd3, 0x06, 0x93, 0xb5, 0xbf, 0x64, 0x1b, 0xcc, 0x32, 0x8f, 0xe2, + 0x2d, 0x07, 0xc5, 0xce, 0x54, 0x3a, 0x66, 0x74, 0x7a, 0x3c, 0x28, 0x51, 0x1d, 0x09, 0x0c, 0xba, + 0xa4, 0x1e, 0x34, 0xcc, 0xab, 0x3e, 0x1e, 0xcc, 0x22, 0x11, 0x61, 0xbb, 0x81, 0x76, 0xbd, 0xa7, + 0x87, 0x7c, 0x88, 0xdf, 0x1b, 0x51, 0x56, 0xed, 0x17, 0x43, 0x9d, 0xd1, 0x39, 0x9d, 0x79, 0x4c, + 0x1a, 0xe6, 0xa7, 0x72, 0x91, 0xbc, 0xc2, 0x94, 0xbf, 0x7c, 0xa5, 0xd6, 0xf5, 0xb4, 0xf5, 0x74, + 0x5a, 0x73, 0x06, 0x80, 0xb0, 0xf9, 0x05, 0x81, 0x33, 0x98, 0x14, 0x3e, 0x36, 0x7e, 0xe2, 0x51, + 0xc0, 0x41, 0x71, 0x60, 0x76, 0x26, 0x0b, 0xa8, 0xe0, 0x11, 0x42, 0x11, 0x4e, 0xb2, 0x47, 0xe7, + 0x17, 0xf2, 0xe0, 0xea, 0xf0, 0x84, 0x53, 0xdd, 0xf4, 0xa2, 0x96, 0x7d, 0x6f, 0x3a, 0x88, 0xb8, + 0x23, 0x25, 0x61, 0x73, 0x3c, 0x09, 0x0a, 0xde, 0xfe, 0x85, 0xd0, 0x11, 0x90, 0x3c, 0x68, 0x6f, + 0x94, 0x53, 0x8d, 0x55, 0x43, 0xf9, 0x9b, 0x70, 0x23, 0xbc, 0x05, 0x9c, 0xb0, 0xf7, 0xf7, 0x42, + 0x2c, 0x70, 0x4f, 0x43, 0x7b, 0x96, 0x83, 0x2f, 0xf8, 0x26, 0x9b, 0x17, 0x6f, 0xb2, 0x29, 0x46, + 0x52, 0x91, 0x4a, 0x67, 0xaf, 0x1e, 0x9f, 0x19, 0x38, 0x82, 0x56, 0x49, 0xad, 0x14, 0x04, 0x7e, + 0x89, 0x85, 0xff, 0x1f, 0x73, 0xa9, 0x7a, 0xde, 0xd1, 0x27, 0xd7, 0x52, 0xf4, 0x84, 0x47, 0x79, + 0x6c, 0xed, 0x75, 0x05, 0xa0, 0xb5, 0x22, 0x87, 0x1c, 0x0a, 0xea, 0x86, 0x0b, 0x2f, 0x59, 0xf0, + 0xb2, 0x37, 0xb0, 0xdf, 0x41, 0xe4, 0x96, 0x63, 0xe5, 0xf6, 0xe7, 0x79, 0x51, 0x87, 0x1a, 0x5e, + 0x83, 0x0e, 0x14, 0x15, 0xd3, 0x76, 0x9e, 0x0e, 0x4a, 0x7d, 0x9a, 0x83, 0xb6, 0x9d, 0xf2, 0x78, + 0x54, 0x51, 0x46, 0x9a, 0x6a, 0x84, 0x24, 0xb5, 0xbf, 0xcd, 0x81, 0x39, 0xe6, 0x4d, 0xfc, 0x8e, + 0xc0, 0x01, 0xd5, 0x92, 0x92, 0x67, 0xa4, 0xb2, 0xf0, 0x8c, 0x54, 0x5d, 0x02, 0x05, 0x4f, 0xa8, + 0xd1, 0x92, 0x6c, 0xea, 0x13, 0xc1, 0x7c, 0x17, 0xf6, 0xa1, 0xdd, 0x85, 0x76, 0xc7, 0x82, 0xde, + 0xe9, 0x02, 0x16, 0x4b, 0x6c, 0x98, 0x06, 0x2e, 0xb3, 0x60, 0xfc, 0xee, 0x74, 0x58, 0x65, 0xaf, + 0xa5, 0x7f, 0x2a, 0x81, 0x33, 0x4c, 0x2b, 0x59, 0x71, 0x9d, 0xbd, 0xd4, 0x9a, 0xfa, 0x72, 0x76, + 0x3c, 0xde, 0xe4, 0x35, 0xf5, 0xae, 0xc4, 0x46, 0x39, 0xa4, 0xb8, 0x98, 0x46, 0xff, 0xfe, 0x50, + 0xba, 0x4f, 0xe3, 0xa4, 0x5b, 0x3d, 0x24, 0xfd, 0x29, 0x1c, 0x08, 0xcf, 0x83, 0x79, 0x03, 0x9a, + 0xdd, 0x70, 0xa8, 0xfd, 0x23, 0xc6, 0x88, 0x7e, 0x22, 0xc8, 0xfb, 0xd1, 0x6a, 0xd8, 0x23, 0x0e, + 0x56, 0x86, 0xfd, 0x12, 0x3f, 0xe0, 0x45, 0x31, 0xfc, 0x91, 0x50, 0xc3, 0x19, 0xb4, 0xc0, 0x65, + 0x11, 0x0b, 0x3c, 0x3f, 0xcc, 0x02, 0xbf, 0x1e, 0xcc, 0xf5, 0x4c, 0x8f, 0x34, 0x98, 0xf0, 0xee, + 0x5f, 0x36, 0x89, 0xbf, 0x65, 0x3f, 0xf1, 0xb4, 0xdd, 0xb0, 0xaa, 0x1d, 0x3e, 0x22, 0xf1, 0x87, + 0x85, 0x8e, 0xd6, 0x8d, 0x2a, 0x3b, 0x9d, 0x46, 0xdc, 0x3d, 0xc6, 0xca, 0xdd, 0x29, 0xa0, 0xae, + 0xeb, 0xad, 0x56, 0x79, 0x15, 0x9f, 0xb8, 0x09, 0x5c, 0xb0, 0xba, 0x67, 0x6f, 0x44, 0xe2, 0x23, + 0x08, 0xab, 0xf3, 0xa0, 0x14, 0xf0, 0xa7, 0x1c, 0x23, 0x4f, 0x36, 0xde, 0x71, 0x52, 0x72, 0xda, + 0x17, 0x64, 0x50, 0xdc, 0xb4, 0x5d, 0x68, 0x76, 0xb5, 0xe7, 0x31, 0xba, 0xf4, 0xfd, 0x9c, 0x2e, + 0x3d, 0x74, 0x58, 0xc3, 0x40, 0xdf, 0x64, 0xa4, 0x45, 0x7c, 0x38, 0xb2, 0xc4, 0xc5, 0x72, 0x9e, + 0x99, 0xc3, 0xe3, 0x2e, 0xb6, 0x4a, 0x1e, 0x5f, 0x6a, 0xe6, 0x7d, 0x80, 0x30, 0xb2, 0xbf, 0x2d, + 0x03, 0x65, 0x63, 0xdf, 0xdb, 0xe5, 0x0e, 0x7d, 0xff, 0x8a, 0x0c, 0x16, 0x82, 0x73, 0x31, 0x6d, + 0xe7, 0x22, 0xb4, 0xb5, 0x67, 0x70, 0x3d, 0xb2, 0x8f, 0xd2, 0x82, 0x1e, 0x19, 0x3f, 0xa8, 0x1b, + 0x4c, 0x68, 0x18, 0x69, 0xd8, 0xb1, 0xfe, 0x81, 0x32, 0x96, 0x38, 0xfa, 0x4b, 0x1b, 0xf4, 0xdb, + 0x28, 0xa0, 0x8c, 0xf6, 0x62, 0xe1, 0x7b, 0x8e, 0x46, 0xd0, 0x1e, 0xde, 0xbd, 0x8b, 0xdd, 0x5c, + 0x94, 0x8a, 0x74, 0xf6, 0xa8, 0x5e, 0x0f, 0x4a, 0x81, 0xa4, 0xd4, 0x19, 0x20, 0xd7, 0x9a, 0x2d, + 0xe5, 0x98, 0x3a, 0x07, 0x66, 0xca, 0x76, 0xd7, 0x75, 0xac, 0xae, 0x92, 0x3b, 0x3b, 0x03, 0x0a, + 0xfa, 0x5e, 0xdf, 0xbf, 0x72, 0xf6, 0xe1, 0x60, 0xa1, 0xe5, 0xbb, 0xd0, 0xdc, 0x4b, 0xc4, 0xed, + 0x8e, 0xdb, 0xc1, 0x8c, 0xed, 0x6c, 0x99, 0xfb, 0xfe, 0xae, 0xfa, 0x90, 0x03, 0x56, 0x07, 0xd5, + 0x9a, 0x26, 0x8d, 0xc6, 0xf9, 0xb5, 0x3b, 0xf1, 0x4a, 0x47, 0xd1, 0x76, 0xca, 0xfb, 0xfe, 0xee, + 0xf2, 0x75, 0x9f, 0xfe, 0xb3, 0x33, 0xb9, 0xcf, 0xfd, 0xd9, 0x99, 0xdc, 0x57, 0xff, 0xec, 0x4c, + 0xee, 0x27, 0xff, 0xfc, 0xcc, 0xb1, 0xcf, 0xfd, 0xf9, 0x99, 0x63, 0x5f, 0xfc, 0xf3, 0x33, 0xc7, + 0x7e, 0x50, 0xea, 0x5f, 0xb8, 0x50, 0xc4, 0x54, 0x1e, 0xfb, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, + 0xe0, 0x0b, 0xea, 0x45, 0x26, 0x36, 0x02, 0x00, } func (m *Rpc) Marshal() (dAtA []byte, err error) { @@ -80413,6 +80422,11 @@ func (m *RpcSpaceInviteViewResponse) MarshalToSizedBuffer(dAtA []byte) (int, err _ = i var l int _ = l + if m.InviteType != 0 { + i = encodeVarintCommands(dAtA, i, uint64(m.InviteType)) + i-- + dAtA[i] = 0x38 + } if m.IsGuestUserInvite { i-- if m.IsGuestUserInvite { @@ -127915,6 +127929,9 @@ func (m *RpcSpaceInviteViewResponse) Size() (n int) { if m.IsGuestUserInvite { n += 2 } + if m.InviteType != 0 { + n += 1 + sovCommands(uint64(m.InviteType)) + } return n } @@ -152151,6 +152168,25 @@ func (m *RpcSpaceInviteViewResponse) Unmarshal(dAtA []byte) error { } } m.IsGuestUserInvite = bool(v != 0) + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field InviteType", wireType) + } + m.InviteType = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.InviteType |= model.InviteType(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipCommands(dAtA[iNdEx:]) diff --git a/pb/protos/commands.proto b/pb/protos/commands.proto index d71de014f..ea51a3020 100644 --- a/pb/protos/commands.proto +++ b/pb/protos/commands.proto @@ -326,7 +326,8 @@ message Rpc { string spaceName = 3; string spaceIconCid = 4; string creatorName = 5; - bool isGuestUserInvite = 6; + bool isGuestUserInvite = 6; // deprecated, use inviteType + model.InviteType inviteType = 7; message Error { Code code = 1; diff --git a/pkg/lib/pb/model/models.pb.go b/pkg/lib/pb/model/models.pb.go index e4f07bd29..bd7ff885a 100644 --- a/pkg/lib/pb/model/models.pb.go +++ b/pkg/lib/pb/model/models.pb.go @@ -2229,34 +2229,6 @@ func (ImportErrorCode) EnumDescriptor() ([]byte, []int) { return fileDescriptor_98a910b73321e591, []int{23, 1} } -type InvitePayloadInviteType int32 - -const ( - InvitePayload_JoinAsMember InvitePayloadInviteType = 0 - InvitePayload_JoinAsGuest InvitePayloadInviteType = 1 - InvitePayload_JoinAsMemberWithoutApprove InvitePayloadInviteType = 2 -) - -var InvitePayloadInviteType_name = map[int32]string{ - 0: "JoinAsMember", - 1: "JoinAsGuest", - 2: "JoinAsMemberWithoutApprove", -} - -var InvitePayloadInviteType_value = map[string]int32{ - "JoinAsMember": 0, - "JoinAsGuest": 1, - "JoinAsMemberWithoutApprove": 2, -} - -func (x InvitePayloadInviteType) String() string { - return proto.EnumName(InvitePayloadInviteType_name, int32(x)) -} - -func (InvitePayloadInviteType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_98a910b73321e591, []int{25, 0} -} - type MembershipStatus int32 const ( @@ -8392,15 +8364,15 @@ func (m *Invite) GetSignature() []byte { } type InvitePayload struct { - CreatorIdentity string `protobuf:"bytes,1,opt,name=creatorIdentity,proto3" json:"creatorIdentity,omitempty"` - CreatorName string `protobuf:"bytes,2,opt,name=creatorName,proto3" json:"creatorName,omitempty"` - AclKey []byte `protobuf:"bytes,3,opt,name=aclKey,proto3" json:"aclKey,omitempty"` - SpaceId string `protobuf:"bytes,4,opt,name=spaceId,proto3" json:"spaceId,omitempty"` - SpaceName string `protobuf:"bytes,5,opt,name=spaceName,proto3" json:"spaceName,omitempty"` - SpaceIconCid string `protobuf:"bytes,6,opt,name=spaceIconCid,proto3" json:"spaceIconCid,omitempty"` - SpaceIconEncryptionKeys []*FileEncryptionKey `protobuf:"bytes,7,rep,name=spaceIconEncryptionKeys,proto3" json:"spaceIconEncryptionKeys,omitempty"` - InviteType InvitePayloadInviteType `protobuf:"varint,8,opt,name=inviteType,proto3,enum=anytype.model.InvitePayloadInviteType" json:"inviteType,omitempty"` - GuestKey []byte `protobuf:"bytes,9,opt,name=guestKey,proto3" json:"guestKey,omitempty"` + CreatorIdentity string `protobuf:"bytes,1,opt,name=creatorIdentity,proto3" json:"creatorIdentity,omitempty"` + CreatorName string `protobuf:"bytes,2,opt,name=creatorName,proto3" json:"creatorName,omitempty"` + AclKey []byte `protobuf:"bytes,3,opt,name=aclKey,proto3" json:"aclKey,omitempty"` + SpaceId string `protobuf:"bytes,4,opt,name=spaceId,proto3" json:"spaceId,omitempty"` + SpaceName string `protobuf:"bytes,5,opt,name=spaceName,proto3" json:"spaceName,omitempty"` + SpaceIconCid string `protobuf:"bytes,6,opt,name=spaceIconCid,proto3" json:"spaceIconCid,omitempty"` + SpaceIconEncryptionKeys []*FileEncryptionKey `protobuf:"bytes,7,rep,name=spaceIconEncryptionKeys,proto3" json:"spaceIconEncryptionKeys,omitempty"` + InviteType InviteType `protobuf:"varint,8,opt,name=inviteType,proto3,enum=anytype.model.InviteType" json:"inviteType,omitempty"` + GuestKey []byte `protobuf:"bytes,9,opt,name=guestKey,proto3" json:"guestKey,omitempty"` } func (m *InvitePayload) Reset() { *m = InvitePayload{} } @@ -8485,11 +8457,11 @@ func (m *InvitePayload) GetSpaceIconEncryptionKeys() []*FileEncryptionKey { return nil } -func (m *InvitePayload) GetInviteType() InvitePayloadInviteType { +func (m *InvitePayload) GetInviteType() InviteType { if m != nil { return m.InviteType } - return InvitePayload_JoinAsMember + return InviteType_Member } func (m *InvitePayload) GetGuestKey() []byte { @@ -9765,7 +9737,6 @@ func init() { proto.RegisterEnum("anytype.model.ExportFormat", ExportFormat_name, ExportFormat_value) proto.RegisterEnum("anytype.model.ImportType", ImportType_name, ImportType_value) proto.RegisterEnum("anytype.model.ImportErrorCode", ImportErrorCode_name, ImportErrorCode_value) - proto.RegisterEnum("anytype.model.InvitePayloadInviteType", InvitePayloadInviteType_name, InvitePayloadInviteType_value) proto.RegisterEnum("anytype.model.MembershipStatus", MembershipStatus_name, MembershipStatus_value) proto.RegisterEnum("anytype.model.MembershipPaymentMethod", MembershipPaymentMethod_name, MembershipPaymentMethod_value) proto.RegisterEnum("anytype.model.MembershipEmailVerificationStatus", MembershipEmailVerificationStatus_name, MembershipEmailVerificationStatus_value) @@ -9879,588 +9850,586 @@ func init() { } var fileDescriptor_98a910b73321e591 = []byte{ - // 9285 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x7d, 0x5b, 0x6c, 0x63, 0xd9, - 0x91, 0x98, 0xf8, 0x26, 0x8b, 0xa2, 0x74, 0x74, 0xfa, 0x45, 0xd3, 0xbd, 0x9d, 0x36, 0x3d, 0x9e, - 0x69, 0xcb, 0x63, 0xcd, 0x4c, 0xcf, 0x8c, 0x67, 0x3c, 0xf6, 0x8c, 0x4d, 0x49, 0x54, 0x8b, 0xd3, - 0x7a, 0xf9, 0x92, 0xdd, 0xed, 0x19, 0xec, 0x46, 0xb9, 0xe2, 0x3d, 0x22, 0xaf, 0x75, 0x79, 0x2f, - 0x7d, 0xef, 0xa1, 0x5a, 0x32, 0x92, 0xc0, 0x79, 0xed, 0x66, 0xff, 0x9c, 0x20, 0x9b, 0xcd, 0x22, - 0x08, 0xd6, 0xfe, 0x08, 0x10, 0x64, 0x37, 0xc8, 0xd7, 0x22, 0xd9, 0x3c, 0x80, 0x64, 0xbf, 0x02, - 0xec, 0x8f, 0x93, 0xaf, 0x00, 0x09, 0x90, 0xc4, 0x06, 0xf2, 0x13, 0x24, 0xc1, 0xe6, 0xcb, 0x08, - 0xf2, 0x11, 0x54, 0x9d, 0x73, 0x5f, 0x24, 0xa5, 0x66, 0xcf, 0xee, 0x06, 0xf9, 0x12, 0xab, 0x6e, - 0x55, 0xdd, 0xf3, 0xa8, 0x53, 0xa7, 0xaa, 0x4e, 0x9d, 0x2b, 0x78, 0x65, 0x7c, 0x36, 0x78, 0xc3, - 0xb1, 0x4f, 0xde, 0x18, 0x9f, 0xbc, 0x31, 0xf2, 0x2c, 0xe1, 0xbc, 0x31, 0xf6, 0x3d, 0xe9, 0x05, - 0x0a, 0x08, 0x36, 0x08, 0xe2, 0x35, 0xd3, 0xbd, 0x94, 0x97, 0x63, 0xb1, 0x41, 0xd8, 0xc6, 0xdd, - 0x81, 0xe7, 0x0d, 0x1c, 0xa1, 0x48, 0x4f, 0x26, 0xa7, 0x6f, 0x04, 0xd2, 0x9f, 0xf4, 0xa5, 0x22, - 0x6e, 0xfe, 0x34, 0x0f, 0xb7, 0xbb, 0x23, 0xd3, 0x97, 0x9b, 0x8e, 0xd7, 0x3f, 0xeb, 0xba, 0xe6, - 0x38, 0x18, 0x7a, 0x72, 0xd3, 0x0c, 0x04, 0x7f, 0x1d, 0x8a, 0x27, 0x88, 0x0c, 0xea, 0x99, 0xfb, - 0xb9, 0x07, 0xd5, 0x87, 0x37, 0x37, 0x52, 0x82, 0x37, 0x88, 0xc3, 0xd0, 0x34, 0xfc, 0x2d, 0x28, - 0x59, 0x42, 0x9a, 0xb6, 0x13, 0xd4, 0xb3, 0xf7, 0x33, 0x0f, 0xaa, 0x0f, 0xef, 0x6c, 0xa8, 0x17, - 0x6f, 0x84, 0x2f, 0xde, 0xe8, 0xd2, 0x8b, 0x8d, 0x90, 0x8e, 0xbf, 0x07, 0xe5, 0x53, 0xdb, 0x11, - 0x8f, 0xc5, 0x65, 0x50, 0xcf, 0x5d, 0xcb, 0xb3, 0x99, 0xad, 0x67, 0x8c, 0x88, 0x98, 0x6f, 0xc1, - 0x8a, 0xb8, 0x90, 0xbe, 0x69, 0x08, 0xc7, 0x94, 0xb6, 0xe7, 0x06, 0xf5, 0x3c, 0xb5, 0xf0, 0xce, - 0x54, 0x0b, 0xc3, 0xe7, 0xc4, 0x3e, 0xc5, 0xc2, 0xef, 0x43, 0xd5, 0x3b, 0xf9, 0x9e, 0xe8, 0xcb, - 0xde, 0xe5, 0x58, 0x04, 0xf5, 0xc2, 0xfd, 0xdc, 0x83, 0x8a, 0x91, 0x44, 0xf1, 0xaf, 0x43, 0xb5, - 0xef, 0x39, 0x8e, 0xe8, 0xab, 0x77, 0x14, 0xaf, 0xef, 0x56, 0x92, 0x96, 0xbf, 0x03, 0xb7, 0x7c, - 0x31, 0xf2, 0xce, 0x85, 0xb5, 0x15, 0x61, 0xa9, 0x9f, 0x65, 0x7a, 0xcd, 0xfc, 0x87, 0xbc, 0x05, - 0x35, 0x5f, 0xb7, 0x6f, 0xcf, 0x76, 0xcf, 0x82, 0x7a, 0x89, 0xba, 0xf5, 0xf9, 0x2b, 0xba, 0x85, - 0x34, 0x46, 0x9a, 0x83, 0x33, 0xc8, 0x9d, 0x89, 0xcb, 0x7a, 0xe5, 0x7e, 0xe6, 0x41, 0xc5, 0xc0, - 0x9f, 0xfc, 0x03, 0xa8, 0x7b, 0xbe, 0x3d, 0xb0, 0x5d, 0xd3, 0xd9, 0xf2, 0x85, 0x29, 0x85, 0xd5, - 0xb3, 0x47, 0x22, 0x90, 0xe6, 0x68, 0x5c, 0x87, 0xfb, 0x99, 0x07, 0x39, 0xe3, 0xca, 0xe7, 0xfc, - 0x6d, 0x35, 0x43, 0x1d, 0xf7, 0xd4, 0xab, 0x57, 0x75, 0xf7, 0xd3, 0x6d, 0xd9, 0xd1, 0x8f, 0x8d, - 0x88, 0xb0, 0xf9, 0x8b, 0x2c, 0x14, 0xbb, 0xc2, 0xf4, 0xfb, 0xc3, 0xc6, 0xaf, 0x65, 0xa0, 0x68, - 0x88, 0x60, 0xe2, 0x48, 0xde, 0x80, 0xb2, 0x1a, 0xdb, 0x8e, 0x55, 0xcf, 0x50, 0xeb, 0x22, 0xf8, - 0xb3, 0xe8, 0xce, 0x06, 0xe4, 0x47, 0x42, 0x9a, 0xf5, 0x1c, 0x8d, 0x50, 0x63, 0xaa, 0x55, 0xea, - 0xf5, 0x1b, 0xfb, 0x42, 0x9a, 0x06, 0xd1, 0x35, 0x7e, 0x9e, 0x81, 0x3c, 0x82, 0xfc, 0x2e, 0x54, - 0x86, 0xf6, 0x60, 0xe8, 0xd8, 0x83, 0xa1, 0xd4, 0x0d, 0x89, 0x11, 0xfc, 0x23, 0x58, 0x8d, 0x00, - 0xc3, 0x74, 0x07, 0x02, 0x5b, 0x34, 0x4f, 0xf9, 0xe9, 0xa1, 0x31, 0x4d, 0xcc, 0xeb, 0x50, 0xa2, - 0xf5, 0xd0, 0xb1, 0x48, 0xa3, 0x2b, 0x46, 0x08, 0xa2, 0xba, 0x85, 0x33, 0xf5, 0x58, 0x5c, 0xd6, - 0xf3, 0xf4, 0x34, 0x89, 0xe2, 0x2d, 0x58, 0x0d, 0xc1, 0x6d, 0x3d, 0x1a, 0x85, 0xeb, 0x47, 0x63, - 0x9a, 0xbe, 0xf9, 0xc3, 0x7d, 0x28, 0xd0, 0xb2, 0xe4, 0x2b, 0x90, 0xb5, 0xc3, 0x81, 0xce, 0xda, - 0x16, 0x7f, 0x03, 0x8a, 0xa7, 0xb6, 0x70, 0xac, 0x17, 0x8e, 0xb0, 0x26, 0xe3, 0x6d, 0x58, 0xf6, - 0x45, 0x20, 0x7d, 0x5b, 0x6b, 0xbf, 0x5a, 0xa0, 0x5f, 0x98, 0x67, 0x03, 0x36, 0x8c, 0x04, 0xa1, - 0x91, 0x62, 0xc3, 0x6e, 0xf7, 0x87, 0xb6, 0x63, 0xf9, 0xc2, 0xed, 0x58, 0x6a, 0x9d, 0x56, 0x8c, - 0x24, 0x8a, 0x3f, 0x80, 0xd5, 0x13, 0xb3, 0x7f, 0x36, 0xf0, 0xbd, 0x89, 0x8b, 0x0b, 0xc2, 0xf3, - 0xa9, 0xdb, 0x15, 0x63, 0x1a, 0xcd, 0xdf, 0x84, 0x82, 0xe9, 0xd8, 0x03, 0x97, 0x56, 0xe2, 0xca, - 0xcc, 0xa4, 0xab, 0xb6, 0xb4, 0x90, 0xc2, 0x50, 0x84, 0x7c, 0x17, 0x6a, 0xe7, 0xc2, 0x97, 0x76, - 0xdf, 0x74, 0x08, 0x5f, 0x2f, 0x11, 0x67, 0x73, 0x2e, 0xe7, 0xd3, 0x24, 0xa5, 0x91, 0x66, 0xe4, - 0x1d, 0x80, 0x00, 0xcd, 0x24, 0x4d, 0xa7, 0x5e, 0x0b, 0xaf, 0xcd, 0x15, 0xb3, 0xe5, 0xb9, 0x52, - 0xb8, 0x72, 0xa3, 0x1b, 0x91, 0xef, 0x2e, 0x19, 0x09, 0x66, 0xfe, 0x1e, 0xe4, 0xa5, 0xb8, 0x90, - 0xf5, 0x95, 0x6b, 0x46, 0x34, 0x14, 0xd2, 0x13, 0x17, 0x72, 0x77, 0xc9, 0x20, 0x06, 0x64, 0xc4, - 0x45, 0x56, 0x5f, 0x5d, 0x80, 0x11, 0xd7, 0x25, 0x32, 0x22, 0x03, 0xff, 0x10, 0x8a, 0x8e, 0x79, - 0xe9, 0x4d, 0x64, 0x9d, 0x11, 0xeb, 0x17, 0xaf, 0x65, 0xdd, 0x23, 0xd2, 0xdd, 0x25, 0x43, 0x33, - 0xf1, 0x77, 0x20, 0x67, 0xd9, 0xe7, 0xf5, 0x35, 0xe2, 0xbd, 0x7f, 0x2d, 0xef, 0xb6, 0x7d, 0xbe, - 0xbb, 0x64, 0x20, 0x39, 0xdf, 0x82, 0xf2, 0x89, 0xe7, 0x9d, 0x8d, 0x4c, 0xff, 0xac, 0xce, 0x89, - 0xf5, 0x4b, 0xd7, 0xb2, 0x6e, 0x6a, 0xe2, 0xdd, 0x25, 0x23, 0x62, 0xc4, 0x2e, 0xdb, 0x7d, 0xcf, - 0xad, 0xdf, 0x58, 0xa0, 0xcb, 0x9d, 0xbe, 0xe7, 0x62, 0x97, 0x91, 0x01, 0x19, 0x1d, 0xdb, 0x3d, - 0xab, 0xdf, 0x5c, 0x80, 0x11, 0x2d, 0x27, 0x32, 0x22, 0x03, 0x36, 0xdb, 0x32, 0xa5, 0x79, 0x6e, - 0x8b, 0xe7, 0xf5, 0x5b, 0x0b, 0x34, 0x7b, 0x5b, 0x13, 0x63, 0xb3, 0x43, 0x46, 0x14, 0x12, 0x2e, - 0xcd, 0xfa, 0xed, 0x05, 0x84, 0x84, 0x16, 0x1d, 0x85, 0x84, 0x8c, 0xfc, 0xcf, 0xc2, 0xda, 0xa9, - 0x30, 0xe5, 0xc4, 0x17, 0x56, 0xbc, 0xd1, 0xdd, 0x21, 0x69, 0x1b, 0xd7, 0xcf, 0xfd, 0x34, 0xd7, - 0xee, 0x92, 0x31, 0x2b, 0x8a, 0x7f, 0x00, 0x05, 0xc7, 0x94, 0xe2, 0xa2, 0x5e, 0x27, 0x99, 0xcd, - 0x17, 0x28, 0x85, 0x14, 0x17, 0xbb, 0x4b, 0x86, 0x62, 0xe1, 0xdf, 0x85, 0x55, 0x69, 0x9e, 0x38, - 0xe2, 0xf0, 0x54, 0x13, 0x04, 0xf5, 0xcf, 0x91, 0x94, 0xd7, 0xaf, 0x57, 0xe7, 0x34, 0xcf, 0xee, - 0x92, 0x31, 0x2d, 0x06, 0x5b, 0x45, 0xa8, 0x7a, 0x63, 0x81, 0x56, 0x91, 0x3c, 0x6c, 0x15, 0xb1, - 0xf0, 0x3d, 0xa8, 0xd2, 0x8f, 0x2d, 0xcf, 0x99, 0x8c, 0xdc, 0xfa, 0xe7, 0x49, 0xc2, 0x83, 0x17, - 0x4b, 0x50, 0xf4, 0xbb, 0x4b, 0x46, 0x92, 0x1d, 0x27, 0x91, 0x40, 0xc3, 0x7b, 0x5e, 0xbf, 0xbb, - 0xc0, 0x24, 0xf6, 0x34, 0x31, 0x4e, 0x62, 0xc8, 0x88, 0x4b, 0xef, 0xb9, 0x6d, 0x0d, 0x84, 0xac, - 0xff, 0xd2, 0x02, 0x4b, 0xef, 0x19, 0x91, 0xe2, 0xd2, 0x53, 0x4c, 0xa8, 0xc6, 0xfd, 0xa1, 0x29, - 0xeb, 0xf7, 0x16, 0x50, 0xe3, 0xad, 0xa1, 0x49, 0xb6, 0x02, 0x19, 0x1a, 0x3f, 0x80, 0xe5, 0xa4, - 0x55, 0xe6, 0x1c, 0xf2, 0xbe, 0x30, 0xd5, 0x8e, 0x50, 0x36, 0xe8, 0x37, 0xe2, 0x84, 0x65, 0x4b, - 0xda, 0x11, 0xca, 0x06, 0xfd, 0xe6, 0xb7, 0xa1, 0xa8, 0x7c, 0x13, 0x32, 0xf8, 0x65, 0x43, 0x43, - 0x48, 0x6b, 0xf9, 0xe6, 0x80, 0xf6, 0xad, 0xb2, 0x41, 0xbf, 0x91, 0xd6, 0xf2, 0xbd, 0xf1, 0xa1, - 0x4b, 0x06, 0xbb, 0x6c, 0x68, 0xa8, 0xf1, 0xf3, 0x0f, 0xa1, 0xa4, 0x1b, 0xd5, 0xf8, 0x7b, 0x19, - 0x28, 0x2a, 0x83, 0xc2, 0xbf, 0x05, 0x85, 0x40, 0x5e, 0x3a, 0x82, 0xda, 0xb0, 0xf2, 0xf0, 0xcb, - 0x0b, 0x18, 0xa1, 0x8d, 0x2e, 0x32, 0x18, 0x8a, 0xaf, 0x69, 0x40, 0x81, 0x60, 0x5e, 0x82, 0x9c, - 0xe1, 0x3d, 0x67, 0x4b, 0x1c, 0xa0, 0xa8, 0x26, 0x8b, 0x65, 0x10, 0xb9, 0x6d, 0x9f, 0xb3, 0x2c, - 0x22, 0x77, 0x85, 0x69, 0x09, 0x9f, 0xe5, 0x78, 0x0d, 0x2a, 0xe1, 0xb4, 0x04, 0x2c, 0xcf, 0x19, - 0x2c, 0x27, 0x26, 0x3c, 0x60, 0x85, 0xc6, 0xff, 0xca, 0x43, 0x1e, 0xd7, 0x3f, 0x7f, 0x05, 0x6a, - 0xd2, 0xf4, 0x07, 0x42, 0x39, 0xc2, 0x91, 0x93, 0x92, 0x46, 0xf2, 0x0f, 0xc3, 0x3e, 0x64, 0xa9, - 0x0f, 0xaf, 0xbd, 0xd0, 0xae, 0xa4, 0x7a, 0x90, 0xd8, 0x85, 0x73, 0x8b, 0xed, 0xc2, 0x3b, 0x50, - 0x46, 0x73, 0xd6, 0xb5, 0x7f, 0x20, 0x68, 0xe8, 0x57, 0x1e, 0xae, 0xbf, 0xf8, 0x95, 0x1d, 0xcd, - 0x61, 0x44, 0xbc, 0xbc, 0x03, 0x95, 0xbe, 0xe9, 0x5b, 0xd4, 0x18, 0x9a, 0xad, 0x95, 0x87, 0x5f, - 0x79, 0xb1, 0xa0, 0xad, 0x90, 0xc5, 0x88, 0xb9, 0xf9, 0x21, 0x54, 0x2d, 0x11, 0xf4, 0x7d, 0x7b, - 0x4c, 0xe6, 0x4d, 0xed, 0xc5, 0x5f, 0x7d, 0xb1, 0xb0, 0xed, 0x98, 0xc9, 0x48, 0x4a, 0x40, 0x8f, - 0xcc, 0x8f, 0xec, 0x5b, 0x89, 0x1c, 0x84, 0x18, 0xd1, 0x7c, 0x0f, 0xca, 0x61, 0x7f, 0xf8, 0x32, - 0x94, 0xf1, 0xef, 0x81, 0xe7, 0x0a, 0xb6, 0x84, 0x73, 0x8b, 0x50, 0x77, 0x64, 0x3a, 0x0e, 0xcb, - 0xf0, 0x15, 0x00, 0x04, 0xf7, 0x85, 0x65, 0x4f, 0x46, 0x2c, 0xdb, 0xfc, 0x46, 0xa8, 0x2d, 0x65, - 0xc8, 0x1f, 0x99, 0x03, 0xe4, 0x58, 0x86, 0x72, 0x68, 0xae, 0x59, 0x06, 0xf9, 0xb7, 0xcd, 0x60, - 0x78, 0xe2, 0x99, 0xbe, 0xc5, 0xb2, 0xbc, 0x0a, 0xa5, 0x96, 0xdf, 0x1f, 0xda, 0xe7, 0x82, 0xe5, - 0x9a, 0x6f, 0x40, 0x35, 0xd1, 0x5e, 0x14, 0xa1, 0x5f, 0x5a, 0x81, 0x42, 0xcb, 0xb2, 0x84, 0xc5, - 0x32, 0xc8, 0xa0, 0x3b, 0xc8, 0xb2, 0xcd, 0xaf, 0x40, 0x25, 0x1a, 0x2d, 0x24, 0xc7, 0x8d, 0x9b, - 0x2d, 0xe1, 0x2f, 0x44, 0xb3, 0x0c, 0x6a, 0x65, 0xc7, 0x75, 0x6c, 0x57, 0xb0, 0x6c, 0xe3, 0xcf, - 0x91, 0xaa, 0xf2, 0x6f, 0xa6, 0x17, 0xc4, 0xab, 0x2f, 0xda, 0x59, 0xd3, 0xab, 0xe1, 0xf3, 0x89, - 0xfe, 0xed, 0xd9, 0xd4, 0xb8, 0x32, 0xe4, 0xb7, 0x3d, 0x19, 0xb0, 0x4c, 0xe3, 0xbf, 0x65, 0xa1, - 0x1c, 0x6e, 0xa8, 0x18, 0x13, 0x4c, 0x7c, 0x47, 0x2b, 0x34, 0xfe, 0xe4, 0x37, 0xa1, 0x20, 0x6d, - 0xa9, 0xd5, 0xb8, 0x62, 0x28, 0x00, 0x7d, 0xb5, 0xe4, 0xcc, 0x2a, 0x07, 0x76, 0x7a, 0xaa, 0xec, - 0x91, 0x39, 0x10, 0xbb, 0x66, 0x30, 0xd4, 0x2e, 0x6c, 0x8c, 0x40, 0xfe, 0x53, 0xf3, 0x1c, 0x75, - 0x8e, 0x9e, 0x2b, 0x2f, 0x2e, 0x89, 0xe2, 0x6f, 0x43, 0x1e, 0x3b, 0xa8, 0x95, 0xe6, 0xcf, 0x4c, - 0x75, 0x18, 0xd5, 0xe4, 0xc8, 0x17, 0x38, 0x3d, 0x1b, 0x18, 0x81, 0x19, 0x44, 0xcc, 0x5f, 0x85, - 0x15, 0xb5, 0x08, 0x0f, 0xc3, 0xf8, 0xa1, 0x44, 0x92, 0xa7, 0xb0, 0xbc, 0x85, 0xc3, 0x69, 0x4a, - 0x51, 0x2f, 0x2f, 0xa0, 0xdf, 0xe1, 0xe0, 0x6c, 0x74, 0x91, 0xc5, 0x50, 0x9c, 0xcd, 0x77, 0x71, - 0x4c, 0x4d, 0x29, 0x70, 0x9a, 0xdb, 0xa3, 0xb1, 0xbc, 0x54, 0x4a, 0xb3, 0x23, 0x64, 0x7f, 0x68, - 0xbb, 0x03, 0x96, 0x51, 0x43, 0x8c, 0x93, 0x48, 0x24, 0xbe, 0xef, 0xf9, 0x2c, 0xd7, 0x68, 0x40, - 0x1e, 0x75, 0x14, 0x8d, 0xa4, 0x6b, 0x8e, 0x84, 0x1e, 0x69, 0xfa, 0xdd, 0xb8, 0x01, 0x6b, 0x33, - 0xfb, 0x71, 0xe3, 0xf7, 0x8b, 0x4a, 0x43, 0x90, 0x83, 0x7c, 0x41, 0xcd, 0x41, 0x6e, 0xde, 0x4b, - 0xd9, 0x18, 0x94, 0x92, 0xb6, 0x31, 0x1f, 0x42, 0x01, 0x3b, 0x16, 0x9a, 0x98, 0x05, 0xd8, 0xf7, - 0x91, 0xdc, 0x50, 0x5c, 0x18, 0xc1, 0xf4, 0x87, 0xa2, 0x7f, 0x26, 0x2c, 0x6d, 0xeb, 0x43, 0x10, - 0x95, 0xa6, 0x9f, 0x70, 0xcf, 0x15, 0x40, 0x2a, 0xd1, 0xf7, 0xdc, 0xf6, 0xc8, 0xfb, 0x9e, 0x4d, - 0xf3, 0x8a, 0x2a, 0x11, 0x22, 0xc2, 0xa7, 0x1d, 0xd4, 0x11, 0x3d, 0x6d, 0x31, 0xa2, 0xd1, 0x86, - 0x02, 0xbd, 0x1b, 0x57, 0x82, 0x6a, 0xb3, 0xca, 0x34, 0xbc, 0xba, 0x58, 0x9b, 0x75, 0x93, 0x1b, - 0xbf, 0x9b, 0x85, 0x3c, 0xc2, 0x7c, 0x1d, 0x0a, 0x3e, 0xc6, 0x61, 0x34, 0x9c, 0x57, 0xc5, 0x6c, - 0x8a, 0x84, 0x7f, 0x4b, 0xab, 0x62, 0x76, 0x01, 0x65, 0x89, 0xde, 0x98, 0x54, 0xcb, 0x9b, 0x50, - 0x18, 0x9b, 0xbe, 0x39, 0xd2, 0xeb, 0x44, 0x01, 0xcd, 0x1f, 0x67, 0x20, 0x8f, 0x44, 0x7c, 0x0d, - 0x6a, 0x5d, 0xe9, 0xdb, 0x67, 0x42, 0x0e, 0x7d, 0x6f, 0x32, 0x18, 0x2a, 0x4d, 0x7a, 0x2c, 0x2e, - 0x95, 0xbd, 0x51, 0x06, 0x41, 0x9a, 0x8e, 0xdd, 0x67, 0x59, 0xd4, 0xaa, 0x4d, 0xcf, 0xb1, 0x58, - 0x8e, 0xaf, 0x42, 0xf5, 0x89, 0x6b, 0x09, 0x3f, 0xe8, 0x7b, 0xbe, 0xb0, 0x58, 0x5e, 0xaf, 0xee, - 0x33, 0x56, 0xa0, 0xbd, 0x4c, 0x5c, 0x48, 0x8a, 0x85, 0x58, 0x91, 0xdf, 0x80, 0xd5, 0xcd, 0x74, - 0x80, 0xc4, 0x4a, 0x68, 0x93, 0xf6, 0x85, 0x8b, 0x4a, 0xc6, 0xca, 0x4a, 0x89, 0xbd, 0xef, 0xd9, - 0xac, 0x82, 0x2f, 0x53, 0xeb, 0x84, 0x41, 0xf3, 0x5f, 0x64, 0x42, 0xcb, 0x51, 0x83, 0xca, 0x91, - 0xe9, 0x9b, 0x03, 0xdf, 0x1c, 0x63, 0xfb, 0xaa, 0x50, 0x52, 0x1b, 0xe7, 0x5b, 0xca, 0xba, 0x29, - 0xe0, 0xa1, 0xb2, 0x8d, 0x0a, 0x78, 0x9b, 0xe5, 0x62, 0xe0, 0x1d, 0x96, 0xc7, 0x77, 0x7c, 0x67, - 0xe2, 0x49, 0xc1, 0x0a, 0x64, 0xeb, 0x3c, 0x4b, 0xb0, 0x22, 0x22, 0x7b, 0x68, 0x51, 0x58, 0x09, - 0xfb, 0xbc, 0x85, 0xfa, 0x73, 0xe2, 0x5d, 0xb0, 0x32, 0x36, 0x03, 0x87, 0x51, 0x58, 0xac, 0x82, - 0x4f, 0x0e, 0x26, 0xa3, 0x13, 0x81, 0xdd, 0x04, 0x7c, 0xd2, 0xf3, 0x06, 0x03, 0x47, 0xb0, 0x2a, - 0x8e, 0x41, 0xc2, 0xf8, 0xb2, 0x65, 0xb2, 0xb4, 0xa6, 0xe3, 0x78, 0x13, 0xc9, 0x6a, 0x8d, 0x5f, - 0xe4, 0x20, 0x8f, 0xd1, 0x0d, 0xae, 0x9d, 0x21, 0xda, 0x19, 0xbd, 0x76, 0xf0, 0x77, 0xb4, 0x02, - 0xb3, 0xf1, 0x0a, 0xe4, 0x1f, 0xe8, 0x99, 0xce, 0x2d, 0x60, 0x65, 0x51, 0x70, 0x72, 0x92, 0x39, - 0xe4, 0x47, 0xf6, 0x48, 0x68, 0x5b, 0x47, 0xbf, 0x11, 0x17, 0xe0, 0x7e, 0x5c, 0xa0, 0xe4, 0x09, - 0xfd, 0xc6, 0x55, 0x63, 0xe2, 0xb6, 0xd0, 0x92, 0xb4, 0x06, 0x72, 0x46, 0x08, 0xce, 0xb1, 0x5e, - 0x95, 0xb9, 0xd6, 0xeb, 0xc3, 0xd0, 0x7a, 0x95, 0x16, 0x58, 0xf5, 0xd4, 0xcc, 0xa4, 0xe5, 0x8a, - 0x8d, 0x46, 0x79, 0x71, 0xf6, 0xc4, 0x66, 0xb2, 0xad, 0xb5, 0x36, 0xde, 0xe8, 0xca, 0x6a, 0x94, - 0x59, 0x06, 0x67, 0x93, 0x96, 0xab, 0xb2, 0x79, 0x4f, 0x6d, 0x4b, 0x78, 0x2c, 0x47, 0x1b, 0xe1, - 0xc4, 0xb2, 0x3d, 0x96, 0x47, 0xcf, 0xeb, 0x68, 0x7b, 0x87, 0x15, 0x9a, 0xaf, 0x26, 0xb6, 0xa4, - 0xd6, 0x44, 0x7a, 0x4a, 0x0c, 0xa9, 0x6f, 0x46, 0x69, 0xe3, 0x89, 0xb0, 0x58, 0xb6, 0xf9, 0xb5, - 0x39, 0x66, 0xb6, 0x06, 0x95, 0x27, 0x63, 0xc7, 0x33, 0xad, 0x6b, 0xec, 0xec, 0x32, 0x40, 0x1c, - 0x55, 0x37, 0x7e, 0xd1, 0x8c, 0xb7, 0x73, 0xf4, 0x45, 0x03, 0x6f, 0xe2, 0xf7, 0x05, 0x99, 0x90, - 0x8a, 0xa1, 0x21, 0xfe, 0x6d, 0x28, 0xe0, 0xf3, 0x30, 0x8d, 0xb3, 0xbe, 0x50, 0x2c, 0xb7, 0xf1, - 0xd4, 0x16, 0xcf, 0x0d, 0xc5, 0xc8, 0xef, 0x01, 0x98, 0x7d, 0x69, 0x9f, 0x0b, 0x44, 0xea, 0xc5, - 0x9e, 0xc0, 0xf0, 0x77, 0x93, 0xee, 0xcb, 0xf5, 0x79, 0xc8, 0x84, 0x5f, 0xc3, 0x0d, 0xa8, 0xe2, - 0xd2, 0x1d, 0x1f, 0xfa, 0xb8, 0xda, 0xeb, 0xcb, 0xc4, 0xf8, 0xe6, 0x62, 0xcd, 0x7b, 0x14, 0x31, - 0x1a, 0x49, 0x21, 0xfc, 0x09, 0x2c, 0xab, 0x9c, 0x9a, 0x16, 0x5a, 0x23, 0xa1, 0x6f, 0x2d, 0x26, - 0xf4, 0x30, 0xe6, 0x34, 0x52, 0x62, 0x66, 0xd3, 0x92, 0x85, 0x97, 0x4e, 0x4b, 0xbe, 0x0a, 0x2b, - 0xbd, 0xf4, 0x2a, 0x50, 0x5b, 0xc5, 0x14, 0x96, 0x37, 0x61, 0xd9, 0x0e, 0xe2, 0xac, 0x28, 0xe5, - 0x48, 0xca, 0x46, 0x0a, 0xd7, 0xf8, 0xb7, 0x45, 0xc8, 0xd3, 0xc8, 0x4f, 0xe7, 0xb8, 0xb6, 0x52, - 0x26, 0xfd, 0x8d, 0xc5, 0xa7, 0x7a, 0x6a, 0xc5, 0x93, 0x05, 0xc9, 0x25, 0x2c, 0xc8, 0xb7, 0xa1, - 0x10, 0x78, 0xbe, 0x0c, 0xa7, 0x77, 0x41, 0x25, 0xea, 0x7a, 0xbe, 0x34, 0x14, 0x23, 0xdf, 0x81, - 0xd2, 0xa9, 0xed, 0x48, 0x9c, 0x14, 0x35, 0x78, 0xaf, 0x2f, 0x26, 0x63, 0x87, 0x98, 0x8c, 0x90, - 0x99, 0xef, 0x25, 0x95, 0xad, 0x48, 0x92, 0x36, 0x16, 0x93, 0x34, 0x4f, 0x07, 0xd7, 0x81, 0xf5, - 0xbd, 0x73, 0xe1, 0x1b, 0x89, 0xc4, 0xa4, 0xda, 0xa4, 0x67, 0xf0, 0xbc, 0x01, 0xe5, 0xa1, 0x6d, - 0x09, 0xf4, 0x73, 0xc8, 0xc6, 0x94, 0x8d, 0x08, 0xe6, 0x8f, 0xa1, 0x4c, 0xf1, 0x01, 0x5a, 0xc5, - 0xca, 0x4b, 0x0f, 0xbe, 0x0a, 0x55, 0x42, 0x01, 0xf8, 0x22, 0x7a, 0xf9, 0x8e, 0x2d, 0x29, 0x3f, - 0x5d, 0x36, 0x22, 0x18, 0x1b, 0x4c, 0xfa, 0x9e, 0x6c, 0x70, 0x55, 0x35, 0x78, 0x1a, 0xcf, 0xdf, - 0x81, 0x5b, 0x84, 0x9b, 0xda, 0x24, 0x71, 0xa9, 0xa1, 0xd0, 0xf9, 0x0f, 0xd1, 0x61, 0x19, 0x9b, - 0x03, 0xb1, 0x67, 0x8f, 0x6c, 0x59, 0xaf, 0xdd, 0xcf, 0x3c, 0x28, 0x18, 0x31, 0x82, 0xbf, 0x0e, - 0x6b, 0x96, 0x38, 0x35, 0x27, 0x8e, 0xec, 0x89, 0xd1, 0xd8, 0x31, 0xa5, 0xe8, 0x58, 0xa4, 0xa3, - 0x15, 0x63, 0xf6, 0x01, 0x7f, 0x13, 0x6e, 0x68, 0xe4, 0x61, 0x74, 0xaa, 0xd0, 0xb1, 0x28, 0x7d, - 0x57, 0x31, 0xe6, 0x3d, 0x6a, 0xee, 0x6b, 0x33, 0x8c, 0x1b, 0x28, 0xc6, 0xa9, 0xa1, 0x01, 0x0d, - 0xa4, 0xda, 0x91, 0x1f, 0x99, 0x8e, 0x23, 0xfc, 0x4b, 0x15, 0xe4, 0x3e, 0x36, 0xdd, 0x13, 0xd3, - 0x65, 0x39, 0xda, 0x63, 0x4d, 0x47, 0xb8, 0x96, 0xe9, 0xab, 0x1d, 0xf9, 0x11, 0x6d, 0xe8, 0x85, - 0xe6, 0x03, 0xc8, 0xd3, 0x90, 0x56, 0xa0, 0xa0, 0xa2, 0x24, 0x8a, 0x98, 0x75, 0x84, 0x44, 0x16, - 0x79, 0x0f, 0x97, 0x1f, 0xcb, 0x36, 0xfe, 0x7e, 0x11, 0xca, 0xe1, 0xe0, 0x85, 0x67, 0x08, 0x99, - 0xf8, 0x0c, 0x01, 0xdd, 0xb8, 0xe0, 0xa9, 0x1d, 0xd8, 0x27, 0xda, 0x2d, 0x2d, 0x1b, 0x31, 0x02, - 0x3d, 0xa1, 0xe7, 0xb6, 0x25, 0x87, 0xb4, 0x66, 0x0a, 0x86, 0x02, 0xf8, 0x03, 0x58, 0xb5, 0x70, - 0x1c, 0xdc, 0xbe, 0x33, 0xb1, 0x44, 0x0f, 0x77, 0x51, 0x95, 0x26, 0x98, 0x46, 0xf3, 0x4f, 0x00, - 0xa4, 0x3d, 0x12, 0x3b, 0x9e, 0x3f, 0x32, 0xa5, 0x8e, 0x0d, 0xbe, 0xfe, 0x72, 0x5a, 0xbd, 0xd1, - 0x8b, 0x04, 0x18, 0x09, 0x61, 0x28, 0x1a, 0xdf, 0xa6, 0x45, 0x97, 0x3e, 0x93, 0xe8, 0xed, 0x48, - 0x80, 0x91, 0x10, 0xc6, 0x7b, 0x50, 0x3a, 0xf5, 0xfc, 0xd1, 0xc4, 0x31, 0xf5, 0x9e, 0xfb, 0xc1, - 0x4b, 0xca, 0xdd, 0x51, 0xdc, 0x64, 0x7b, 0x42, 0x51, 0x71, 0x8e, 0xbb, 0xb2, 0x60, 0x8e, 0xbb, - 0xf9, 0xcb, 0x00, 0x71, 0x0b, 0xf9, 0x6d, 0xe0, 0xfb, 0x9e, 0x2b, 0x87, 0xad, 0x93, 0x13, 0x7f, - 0x53, 0x9c, 0x7a, 0xbe, 0xd8, 0x36, 0x71, 0x7b, 0xbd, 0x05, 0x6b, 0x11, 0xbe, 0x75, 0x2a, 0x85, - 0x8f, 0x68, 0x52, 0x81, 0xee, 0xd0, 0xf3, 0xa5, 0xf2, 0xf1, 0xe8, 0xe7, 0x93, 0x2e, 0xcb, 0xe1, - 0x96, 0xde, 0xe9, 0x1e, 0xb2, 0x7c, 0xf3, 0x01, 0x40, 0x3c, 0xb4, 0x14, 0x0b, 0xd1, 0xaf, 0xb7, - 0x1e, 0xea, 0xc8, 0x88, 0xa0, 0x87, 0xef, 0xb0, 0x4c, 0xf3, 0x67, 0x19, 0xa8, 0x26, 0xba, 0x94, - 0x8e, 0x99, 0xb7, 0xbc, 0x89, 0x2b, 0x55, 0x90, 0x4e, 0x3f, 0x9f, 0x9a, 0xce, 0x04, 0x37, 0xf7, - 0x35, 0xa8, 0x11, 0xbc, 0x6d, 0x07, 0xd2, 0x76, 0xfb, 0x92, 0xe5, 0x22, 0x12, 0xe5, 0x18, 0xe4, - 0x23, 0x92, 0x03, 0x4f, 0xa3, 0x0a, 0x9c, 0xc1, 0xf2, 0x91, 0xf0, 0xfb, 0x22, 0x24, 0x22, 0x67, - 0x58, 0x63, 0x22, 0x32, 0xe5, 0x0c, 0x9b, 0x72, 0xd8, 0x9d, 0x8c, 0x58, 0x19, 0x9d, 0x4a, 0x04, - 0x5a, 0xe7, 0xc2, 0x47, 0x5f, 0xa6, 0x82, 0xef, 0x41, 0x04, 0xae, 0x06, 0xd3, 0x65, 0x10, 0x52, - 0xef, 0xdb, 0x2e, 0xab, 0x46, 0x80, 0x79, 0xc1, 0x96, 0xb1, 0xfd, 0x14, 0x3a, 0xb0, 0x5a, 0xe3, - 0xbf, 0xe6, 0x20, 0x8f, 0x76, 0x1d, 0x63, 0xdd, 0xa4, 0x11, 0x52, 0x6b, 0x25, 0x89, 0xfa, 0x6c, - 0xbb, 0x11, 0xca, 0x4e, 0xee, 0x46, 0xef, 0x43, 0xb5, 0x3f, 0x09, 0xa4, 0x37, 0xa2, 0xad, 0x58, - 0x9f, 0x76, 0xdd, 0x9e, 0xc9, 0x1a, 0xd1, 0x70, 0x1a, 0x49, 0x52, 0xfe, 0x2e, 0x14, 0x4f, 0x95, - 0xd6, 0xab, 0xbc, 0xd1, 0x2f, 0x5d, 0xb1, 0x5b, 0x6b, 0xcd, 0xd6, 0xc4, 0xd8, 0x2f, 0x7b, 0x66, - 0xc5, 0x26, 0x51, 0x7a, 0xd7, 0x2d, 0x46, 0xbb, 0xee, 0x2f, 0xc3, 0x8a, 0xc0, 0x01, 0x3f, 0x72, - 0xcc, 0xbe, 0x18, 0x09, 0x37, 0x5c, 0x66, 0xef, 0xbc, 0x44, 0x8f, 0x69, 0xc6, 0xa8, 0xdb, 0x53, - 0xb2, 0xd0, 0xf2, 0xb8, 0x1e, 0x6e, 0xfe, 0x61, 0x60, 0x5f, 0x36, 0x62, 0x44, 0xf3, 0x4b, 0xda, - 0x5e, 0x96, 0x20, 0xd7, 0x0a, 0xfa, 0x3a, 0x03, 0x22, 0x82, 0xbe, 0x0a, 0xaf, 0xb6, 0x68, 0x38, - 0x58, 0xb6, 0xf9, 0x16, 0x54, 0xa2, 0x37, 0xa0, 0xf2, 0x1c, 0x78, 0xb2, 0x3b, 0x16, 0x7d, 0xfb, - 0xd4, 0x16, 0x96, 0xd2, 0xcf, 0xae, 0x34, 0x7d, 0xa9, 0x92, 0x88, 0x6d, 0xd7, 0x62, 0xd9, 0xc6, - 0xef, 0x94, 0xa1, 0xa8, 0x36, 0x5f, 0xdd, 0xe1, 0x4a, 0xd4, 0xe1, 0xef, 0x40, 0xd9, 0x1b, 0x0b, - 0xdf, 0x94, 0x9e, 0xaf, 0x33, 0x37, 0xef, 0xbe, 0xcc, 0x66, 0xbe, 0x71, 0xa8, 0x99, 0x8d, 0x48, - 0xcc, 0xb4, 0x36, 0x65, 0x67, 0xb5, 0x69, 0x1d, 0x58, 0xb8, 0x6f, 0x1f, 0xf9, 0xc8, 0x27, 0x2f, - 0x75, 0x1c, 0x3e, 0x83, 0xe7, 0x3d, 0xa8, 0xf4, 0x3d, 0xd7, 0xb2, 0xa3, 0x2c, 0xce, 0xca, 0xc3, - 0xaf, 0xbd, 0x54, 0x0b, 0xb7, 0x42, 0x6e, 0x23, 0x16, 0xc4, 0x5f, 0x87, 0xc2, 0x39, 0xaa, 0x19, - 0xe9, 0xd3, 0xd5, 0x4a, 0xa8, 0x88, 0xf8, 0xa7, 0x50, 0xfd, 0xfe, 0xc4, 0xee, 0x9f, 0x1d, 0x26, - 0xb3, 0x84, 0xef, 0xbf, 0x54, 0x2b, 0xbe, 0x13, 0xf3, 0x1b, 0x49, 0x61, 0x09, 0xd5, 0x2e, 0xfd, - 0x31, 0x54, 0xbb, 0x3c, 0xab, 0xda, 0x06, 0xd4, 0x5c, 0x11, 0x48, 0x61, 0xed, 0x68, 0x5f, 0x0d, - 0x3e, 0x83, 0xaf, 0x96, 0x16, 0xd1, 0xfc, 0x22, 0x94, 0xc3, 0x09, 0xe7, 0x45, 0xc8, 0x1e, 0x60, - 0x50, 0x54, 0x84, 0xec, 0xa1, 0xaf, 0xb4, 0xad, 0x85, 0xda, 0xd6, 0xfc, 0x9f, 0x19, 0xa8, 0x44, - 0x83, 0x9e, 0xb6, 0x9c, 0xed, 0xef, 0x4f, 0x4c, 0x87, 0x65, 0x28, 0x5c, 0xf6, 0xa4, 0x82, 0xc8, - 0x58, 0x3f, 0xa2, 0xc3, 0x7a, 0x9f, 0xe5, 0xc8, 0x45, 0x10, 0x41, 0xc0, 0xf2, 0x9c, 0xc3, 0x8a, - 0x46, 0x1f, 0xfa, 0x8a, 0xb4, 0x80, 0x86, 0x0f, 0x9f, 0x86, 0x88, 0xa2, 0xf2, 0x28, 0xce, 0x84, - 0x32, 0x90, 0x07, 0x9e, 0x24, 0xa0, 0x8c, 0x8d, 0xea, 0xb8, 0xac, 0x82, 0xef, 0x3c, 0xf0, 0x64, - 0x07, 0x4d, 0x62, 0x14, 0x9e, 0x55, 0xc3, 0xd7, 0x13, 0x44, 0x16, 0xb1, 0xe5, 0x38, 0x1d, 0x97, - 0xd5, 0xf4, 0x03, 0x05, 0xad, 0xa0, 0xc4, 0xf6, 0x85, 0xd9, 0x47, 0xf6, 0x55, 0xb4, 0xb0, 0xc8, - 0xa3, 0x61, 0x86, 0x4b, 0xb2, 0x7d, 0x61, 0x07, 0x32, 0x60, 0x6b, 0xcd, 0x3f, 0xcc, 0x40, 0x35, - 0x31, 0xc1, 0x18, 0xfe, 0x11, 0x21, 0x6e, 0x65, 0x2a, 0x1a, 0xfc, 0x04, 0x87, 0xd1, 0xb7, 0xc2, - 0x6d, 0xaa, 0xe7, 0xe1, 0xcf, 0x2c, 0xbe, 0xaf, 0xe7, 0x8d, 0x3c, 0xdf, 0xf7, 0x9e, 0x2b, 0xd7, - 0x67, 0xcf, 0x0c, 0xe4, 0x33, 0x21, 0xce, 0x58, 0x1e, 0xbb, 0xba, 0x35, 0xf1, 0x7d, 0xe1, 0x2a, - 0x44, 0x81, 0x1a, 0x27, 0x2e, 0x14, 0x54, 0x44, 0xa1, 0x48, 0x4c, 0xfb, 0x20, 0x2b, 0xa1, 0x21, - 0xd0, 0xd4, 0x0a, 0x53, 0x46, 0x02, 0x24, 0x57, 0x60, 0x05, 0x37, 0x15, 0x95, 0xa1, 0x38, 0x3c, - 0xdd, 0x36, 0x2f, 0x83, 0xd6, 0xc0, 0x63, 0x30, 0x8d, 0x3c, 0xf0, 0x9e, 0xb3, 0x6a, 0x63, 0x02, - 0x10, 0xc7, 0x64, 0x18, 0x8b, 0xa2, 0x42, 0x44, 0x67, 0x08, 0x1a, 0xe2, 0x87, 0x00, 0xf8, 0x8b, - 0x28, 0xc3, 0x80, 0xf4, 0x25, 0x1c, 0x65, 0xe2, 0x33, 0x12, 0x22, 0x1a, 0x7f, 0x01, 0x2a, 0xd1, - 0x03, 0x5e, 0x87, 0x12, 0xb9, 0xb4, 0xd1, 0x6b, 0x43, 0x10, 0xfd, 0x33, 0xdb, 0xb5, 0xc4, 0x05, - 0xd9, 0x95, 0x82, 0xa1, 0x00, 0x6c, 0xe5, 0xd0, 0xb6, 0x2c, 0xe1, 0x86, 0x27, 0x3d, 0x0a, 0x9a, - 0x77, 0x1e, 0x9f, 0x9f, 0x7b, 0x1e, 0xdf, 0xf8, 0x15, 0xa8, 0x26, 0x82, 0xc6, 0x2b, 0xbb, 0x9d, - 0x68, 0x58, 0x36, 0xdd, 0xb0, 0xbb, 0x50, 0x09, 0x6b, 0x40, 0x02, 0xda, 0xdb, 0x2a, 0x46, 0x8c, - 0x68, 0xfc, 0x93, 0x2c, 0x7a, 0xb2, 0xd8, 0xb5, 0xe9, 0x40, 0x6f, 0x07, 0x8a, 0x81, 0x34, 0xe5, - 0x24, 0x2c, 0x66, 0x58, 0x70, 0x81, 0x76, 0x89, 0x67, 0x77, 0xc9, 0xd0, 0xdc, 0xfc, 0x43, 0xc8, - 0x49, 0x73, 0xa0, 0x13, 0xa5, 0x5f, 0x5e, 0x4c, 0x48, 0xcf, 0x1c, 0xec, 0x2e, 0x19, 0xc8, 0xc7, - 0xf7, 0xa0, 0xdc, 0xd7, 0xb9, 0x2d, 0x6d, 0x14, 0x17, 0x8c, 0xc5, 0xc2, 0x8c, 0xd8, 0xee, 0x92, - 0x11, 0x49, 0xe0, 0xdf, 0x86, 0x3c, 0x7a, 0x97, 0xba, 0xe6, 0x63, 0xc1, 0x18, 0x13, 0x97, 0xcb, - 0xee, 0x92, 0x41, 0x9c, 0x9b, 0x25, 0x28, 0x90, 0x0d, 0x6e, 0xd4, 0xa1, 0xa8, 0xfa, 0x3a, 0x3d, - 0x72, 0x8d, 0x3b, 0x90, 0xeb, 0x99, 0x03, 0xf4, 0xf0, 0x6d, 0x2b, 0xd0, 0xa9, 0x12, 0xfc, 0xd9, - 0x78, 0x25, 0xce, 0xd3, 0x25, 0x53, 0xc0, 0x99, 0x54, 0x0a, 0xb8, 0x51, 0x84, 0x3c, 0xbe, 0xb1, - 0x71, 0xf7, 0xba, 0x68, 0xa1, 0xf1, 0x0f, 0x73, 0x18, 0x58, 0x48, 0x71, 0x31, 0x37, 0xbd, 0xfd, - 0x31, 0x54, 0xc6, 0xbe, 0xd7, 0x17, 0x41, 0xe0, 0xf9, 0xda, 0x39, 0x7a, 0xfd, 0xc5, 0x47, 0xcf, - 0x1b, 0x47, 0x21, 0x8f, 0x11, 0xb3, 0x37, 0xff, 0x55, 0x16, 0x2a, 0xd1, 0x03, 0x15, 0xcf, 0x48, - 0x71, 0xa1, 0x52, 0x99, 0xfb, 0xc2, 0x1f, 0x99, 0xb6, 0xa5, 0xac, 0xc7, 0xd6, 0xd0, 0x0c, 0x9d, - 0xdc, 0x4f, 0xbc, 0x89, 0x9c, 0x9c, 0x08, 0x95, 0xc2, 0x7a, 0x6a, 0x8f, 0x84, 0xc7, 0xf2, 0x74, - 0x78, 0x84, 0x8a, 0xdd, 0x77, 0xbc, 0x89, 0xc5, 0x0a, 0x08, 0x3f, 0xa2, 0xed, 0x6d, 0xdf, 0x1c, - 0x07, 0xca, 0x66, 0xee, 0xdb, 0xbe, 0xc7, 0x4a, 0xc8, 0xb4, 0x63, 0x0f, 0x46, 0x26, 0x2b, 0xa3, - 0xb0, 0xde, 0x73, 0x5b, 0xa2, 0x11, 0xae, 0xa0, 0x9b, 0x7a, 0x38, 0x16, 0x6e, 0x57, 0xfa, 0x42, - 0xc8, 0x7d, 0x73, 0xac, 0x72, 0x9a, 0x86, 0xb0, 0x2c, 0x5b, 0x2a, 0xfb, 0xb9, 0x63, 0xf6, 0xc5, - 0x89, 0xe7, 0x9d, 0xb1, 0x65, 0x34, 0x34, 0x1d, 0x37, 0x90, 0xe6, 0xc0, 0x37, 0x47, 0xca, 0x86, - 0xf6, 0x84, 0x23, 0x08, 0x5a, 0xa1, 0x77, 0xdb, 0x72, 0x38, 0x39, 0x79, 0x84, 0x71, 0xdf, 0xaa, - 0x3a, 0x67, 0xb2, 0xc4, 0x58, 0xa0, 0x0d, 0x5d, 0x86, 0xf2, 0xa6, 0xed, 0xd8, 0x27, 0xb6, 0x63, - 0xb3, 0x35, 0x24, 0x6d, 0x5f, 0xf4, 0x4d, 0xc7, 0xb6, 0x7c, 0xf3, 0x39, 0xe3, 0xd8, 0xb8, 0xc7, - 0xbe, 0x77, 0x66, 0xb3, 0x1b, 0x48, 0x48, 0x61, 0xe0, 0xb9, 0xfd, 0x03, 0x76, 0x93, 0xce, 0xca, - 0xce, 0x84, 0xec, 0x0f, 0x4f, 0xcd, 0x13, 0x76, 0x2b, 0x4e, 0xe9, 0xdd, 0x6e, 0xac, 0xc1, 0xea, - 0xd4, 0xa9, 0x7c, 0xa3, 0xa4, 0xa3, 0xcf, 0x46, 0x0d, 0xaa, 0x89, 0xe3, 0xd2, 0xc6, 0xab, 0x50, - 0x0e, 0x0f, 0x53, 0x31, 0x4a, 0xb7, 0x03, 0x95, 0x06, 0xd6, 0x4a, 0x12, 0xc1, 0x8d, 0xff, 0x90, - 0x81, 0xa2, 0x3a, 0xc9, 0xe6, 0x9b, 0x51, 0xe5, 0x49, 0x66, 0x81, 0xd3, 0x4b, 0xc5, 0xa4, 0xcf, - 0x7e, 0xa3, 0xf2, 0x93, 0x9b, 0x50, 0x70, 0x28, 0x1c, 0xd7, 0xe6, 0x8b, 0x80, 0x84, 0xb5, 0xc9, - 0xa5, 0xac, 0xcd, 0x5d, 0xa8, 0x98, 0x13, 0xe9, 0xd1, 0x21, 0x9d, 0x3e, 0xc1, 0x88, 0x11, 0xcd, - 0x56, 0x74, 0x1a, 0x1d, 0x26, 0x26, 0xc9, 0x67, 0xec, 0xf9, 0x42, 0xa8, 0xa4, 0x23, 0xc5, 0xda, - 0x59, 0xda, 0x49, 0xbc, 0xd1, 0xd8, 0xec, 0x4b, 0x42, 0xd0, 0x1e, 0x8b, 0xa6, 0x96, 0xe5, 0x71, - 0x0d, 0x6c, 0x0d, 0x4d, 0xd9, 0x3c, 0x85, 0xf2, 0x91, 0x17, 0x4c, 0xef, 0xd8, 0x25, 0xc8, 0xf5, - 0xbc, 0xb1, 0xf2, 0x3f, 0x37, 0x3d, 0x49, 0xfe, 0xa7, 0xda, 0xa0, 0x4f, 0xa5, 0x52, 0x39, 0xc3, - 0x1e, 0x0c, 0xa5, 0x8a, 0xd3, 0x3b, 0xae, 0x2b, 0x7c, 0x56, 0xc0, 0x19, 0x36, 0xc4, 0x18, 0x7d, - 0x5e, 0x56, 0xc4, 0x39, 0x25, 0xfc, 0x8e, 0xed, 0x07, 0x92, 0x95, 0x9a, 0x1d, 0xdc, 0x6b, 0xed, - 0x01, 0x6d, 0x91, 0xf4, 0x83, 0x44, 0x2d, 0x61, 0x13, 0x09, 0xdc, 0x12, 0x2e, 0x6a, 0x20, 0xc5, - 0x56, 0x2a, 0x30, 0xa4, 0x17, 0x64, 0x71, 0x7f, 0x23, 0xf8, 0xe3, 0x49, 0x20, 0xed, 0xd3, 0x4b, - 0x96, 0x6b, 0x3e, 0x83, 0x5a, 0xaa, 0xc8, 0x89, 0xdf, 0x04, 0x96, 0x42, 0x60, 0xd3, 0x97, 0xf8, - 0x1d, 0xb8, 0x91, 0xc2, 0xee, 0xdb, 0x96, 0x45, 0x99, 0xe0, 0xe9, 0x07, 0x61, 0x07, 0x37, 0x2b, - 0x50, 0xea, 0xab, 0x39, 0x6c, 0x1e, 0x41, 0x8d, 0x26, 0x75, 0x5f, 0x48, 0xf3, 0xd0, 0x75, 0x2e, - 0xff, 0xd8, 0x95, 0x68, 0xcd, 0xaf, 0xe8, 0xf0, 0x0b, 0xad, 0xc9, 0xa9, 0xef, 0x8d, 0x48, 0x56, - 0xc1, 0xa0, 0xdf, 0x28, 0x5d, 0x7a, 0x5a, 0x33, 0xb2, 0xd2, 0x6b, 0xfe, 0xa2, 0x02, 0xa5, 0x56, - 0xbf, 0x8f, 0x01, 0xe3, 0xcc, 0x9b, 0xdf, 0x85, 0x62, 0xdf, 0x73, 0x4f, 0xed, 0x81, 0xb6, 0xd6, - 0xd3, 0x7e, 0xa3, 0xe6, 0x43, 0x75, 0x3c, 0xb5, 0x07, 0x86, 0x26, 0x46, 0x36, 0xbd, 0xdb, 0x14, - 0xae, 0x65, 0x53, 0x26, 0x37, 0xda, 0x5c, 0xde, 0x80, 0xbc, 0xed, 0x9e, 0x7a, 0xba, 0x6c, 0xf4, - 0xf3, 0x57, 0x30, 0x51, 0xed, 0x24, 0x11, 0x36, 0xfe, 0x53, 0x06, 0x8a, 0xea, 0xd5, 0xfc, 0x55, - 0x58, 0x11, 0x2e, 0x2e, 0xb5, 0xd0, 0xd0, 0xeb, 0x35, 0x36, 0x85, 0x45, 0x97, 0x56, 0x63, 0xc4, - 0xc9, 0x64, 0xa0, 0x33, 0x33, 0x49, 0x14, 0x7f, 0x1f, 0xee, 0x28, 0xf0, 0xc8, 0x17, 0xbe, 0x70, - 0x84, 0x19, 0x88, 0xad, 0xa1, 0xe9, 0xba, 0xc2, 0xd1, 0xdb, 0xfe, 0x55, 0x8f, 0x79, 0x13, 0x96, - 0xd5, 0xa3, 0xee, 0xd8, 0xec, 0x8b, 0x40, 0xaf, 0xa5, 0x14, 0x8e, 0x7f, 0x15, 0x0a, 0x54, 0x55, - 0x5b, 0xb7, 0xae, 0x9f, 0x4a, 0x45, 0xd5, 0xf0, 0xa2, 0x7d, 0xa9, 0x05, 0xa0, 0x86, 0x09, 0x43, - 0x32, 0x6d, 0x1b, 0xbe, 0x70, 0xed, 0xb8, 0x52, 0x74, 0x98, 0x60, 0xc2, 0xf6, 0x59, 0xc2, 0x11, - 0x54, 0xfe, 0x88, 0xfb, 0x66, 0x96, 0xce, 0x5d, 0x52, 0xb8, 0xc6, 0x7f, 0xcc, 0x43, 0x1e, 0x47, - 0x18, 0x89, 0x87, 0xde, 0x48, 0x44, 0xd9, 0x67, 0xe5, 0x88, 0xa4, 0x70, 0xe8, 0xf8, 0x98, 0xaa, - 0x00, 0x20, 0x22, 0x53, 0xa6, 0x65, 0x1a, 0x8d, 0x94, 0x63, 0xdf, 0x3b, 0xb5, 0x9d, 0x98, 0x52, - 0xbb, 0x48, 0x53, 0x68, 0xfe, 0x35, 0xb8, 0x3d, 0x32, 0xfd, 0x33, 0x21, 0x69, 0x75, 0x3f, 0xf3, - 0xfc, 0xb3, 0x00, 0x47, 0xae, 0x63, 0xe9, 0xb4, 0xe5, 0x15, 0x4f, 0xf9, 0xeb, 0xb0, 0xf6, 0x3c, - 0x04, 0xa3, 0x77, 0xa8, 0xc4, 0xe1, 0xec, 0x03, 0x34, 0xc6, 0x96, 0x38, 0xb7, 0x49, 0x6e, 0x59, - 0xd5, 0xd6, 0x86, 0x30, 0xaa, 0x92, 0xa9, 0x06, 0xb2, 0xab, 0xdf, 0xac, 0xcf, 0x9f, 0xd2, 0x58, - 0xb4, 0x9b, 0xaa, 0xe6, 0x28, 0xe8, 0x58, 0x94, 0x77, 0xad, 0x18, 0x31, 0x02, 0x15, 0x8d, 0x5e, - 0xf9, 0x54, 0x99, 0xdc, 0x9a, 0x0a, 0x50, 0x13, 0x28, 0xa4, 0x90, 0xa2, 0x3f, 0x0c, 0x5f, 0xa2, - 0x92, 0xa2, 0x49, 0x14, 0xbf, 0x07, 0x30, 0x30, 0xa5, 0x78, 0x6e, 0x5e, 0x3e, 0xf1, 0x9d, 0xba, - 0x50, 0x07, 0x29, 0x31, 0x06, 0x43, 0x5c, 0xc7, 0xeb, 0x9b, 0x4e, 0x57, 0x7a, 0xbe, 0x39, 0x10, - 0x47, 0xa6, 0x1c, 0xd6, 0x07, 0x2a, 0xc4, 0x9d, 0xc6, 0x63, 0x8f, 0xa5, 0x3d, 0x12, 0x9f, 0x7a, - 0xae, 0xa8, 0x0f, 0x55, 0x8f, 0x43, 0x18, 0x5b, 0x62, 0xba, 0xa6, 0x73, 0x29, 0xed, 0x3e, 0xf6, - 0xc5, 0x56, 0x2d, 0x49, 0xa0, 0x28, 0xa9, 0x20, 0x24, 0x8e, 0x63, 0xc7, 0xaa, 0x7f, 0x4f, 0xf5, - 0x35, 0x42, 0xe0, 0xec, 0x0a, 0x39, 0x14, 0xbe, 0x98, 0x8c, 0x5a, 0x96, 0xe5, 0x8b, 0x20, 0xa8, - 0x9f, 0xa9, 0xd9, 0x9d, 0x42, 0x37, 0xbe, 0x41, 0xc7, 0x5c, 0xc3, 0xe6, 0xdb, 0x50, 0xdb, 0xc3, - 0x16, 0xb6, 0xc6, 0x76, 0xb7, 0xef, 0x8d, 0x05, 0x1a, 0x74, 0x4a, 0x18, 0x53, 0x7a, 0xa1, 0x0a, - 0xa5, 0x8f, 0x03, 0xcf, 0x6d, 0x1d, 0x75, 0xd4, 0x16, 0xb3, 0x33, 0x71, 0x1c, 0x96, 0x6d, 0x1e, - 0x02, 0xc4, 0x9a, 0x8d, 0xdb, 0x45, 0x8b, 0xce, 0x94, 0xd8, 0x92, 0x4a, 0x66, 0xb9, 0x96, 0xed, - 0x0e, 0xb6, 0xb5, 0x32, 0xb3, 0x0c, 0x22, 0x29, 0x49, 0x21, 0xac, 0x08, 0x49, 0xee, 0x0c, 0x41, - 0xc2, 0x62, 0xb9, 0xe6, 0xff, 0xc9, 0x40, 0x35, 0x51, 0x42, 0xf1, 0x27, 0x58, 0xf6, 0x81, 0x9b, - 0x3d, 0xba, 0x0b, 0x38, 0x6f, 0x4a, 0xd1, 0x23, 0x18, 0x67, 0x55, 0x57, 0x78, 0xe0, 0x53, 0x95, - 0x92, 0x48, 0x60, 0x3e, 0x53, 0xc9, 0x47, 0xf3, 0xa1, 0xce, 0xeb, 0x54, 0xa1, 0xf4, 0xc4, 0x3d, - 0x73, 0xbd, 0xe7, 0xae, 0xda, 0xa7, 0xa9, 0x8e, 0x27, 0x75, 0x22, 0x19, 0x96, 0xda, 0xe4, 0x9a, - 0xff, 0x3c, 0x3f, 0x55, 0xf2, 0xd6, 0x86, 0xa2, 0x0a, 0x26, 0xc8, 0xcf, 0x9d, 0xad, 0x51, 0x4a, - 0x12, 0xeb, 0xd3, 0xaf, 0x04, 0xca, 0xd0, 0xcc, 0xe8, 0xe5, 0x47, 0x05, 0xa1, 0xd9, 0xb9, 0xa7, - 0x74, 0x29, 0x41, 0xa1, 0x6d, 0x4e, 0xd5, 0x44, 0x47, 0x12, 0x1a, 0x7f, 0x2d, 0x03, 0x37, 0xe7, - 0x91, 0x24, 0x2b, 0xc7, 0x33, 0xe9, 0xca, 0xf1, 0xee, 0x54, 0x25, 0x76, 0x96, 0x7a, 0xf3, 0xc6, - 0x4b, 0x36, 0x22, 0x5d, 0x97, 0xdd, 0xfc, 0xfd, 0x0c, 0xac, 0xcd, 0xf4, 0x39, 0xe1, 0xc7, 0x00, - 0x14, 0x95, 0x66, 0xa9, 0x42, 0xa9, 0xa8, 0x74, 0x45, 0x1d, 0x3d, 0xd0, 0x0e, 0x1f, 0xa8, 0x5a, - 0x00, 0x5d, 0x7b, 0xae, 0x9c, 0x68, 0x9c, 0x35, 0xdc, 0x40, 0x06, 0x42, 0xa5, 0x69, 0x95, 0xb3, - 0xa5, 0x31, 0x45, 0xe5, 0xe8, 0xaa, 0xf3, 0x11, 0x56, 0xa2, 0x02, 0xac, 0xc9, 0xd8, 0xb1, 0xfb, - 0x08, 0x96, 0x79, 0x03, 0x6e, 0xab, 0x0b, 0x08, 0x3a, 0xa8, 0x3c, 0xed, 0x0d, 0x6d, 0x5a, 0x1c, - 0xac, 0x82, 0xef, 0x39, 0x9a, 0x9c, 0x38, 0x76, 0x30, 0x64, 0xd0, 0x34, 0xe0, 0xc6, 0x9c, 0x0e, - 0x52, 0x93, 0x9f, 0xea, 0xe6, 0xaf, 0x00, 0x6c, 0x3f, 0x0d, 0x1b, 0xcd, 0x32, 0x9c, 0xc3, 0xca, - 0xf6, 0xd3, 0xa4, 0x74, 0xbd, 0x78, 0x9e, 0xa2, 0xf5, 0x0a, 0x58, 0xae, 0xf9, 0xab, 0x99, 0xb0, - 0x42, 0xa2, 0xf1, 0xe7, 0xa1, 0xa6, 0x1a, 0x7c, 0x64, 0x5e, 0x3a, 0x9e, 0x69, 0xf1, 0x36, 0xac, - 0x04, 0xd1, 0x15, 0x99, 0xc4, 0x86, 0x35, 0xed, 0x08, 0x74, 0x53, 0x44, 0xc6, 0x14, 0x53, 0x18, - 0x28, 0x65, 0xe3, 0x63, 0x15, 0x4e, 0x21, 0x9f, 0x49, 0x4b, 0x6e, 0x99, 0x82, 0x38, 0xb3, 0xf9, - 0x55, 0x58, 0xeb, 0xc6, 0xc6, 0x5d, 0x79, 0xd4, 0xa8, 0x1c, 0x6a, 0x67, 0xd8, 0x0e, 0x95, 0x43, - 0x83, 0xcd, 0x7f, 0x54, 0x02, 0x88, 0x8f, 0x90, 0xe6, 0xac, 0xf9, 0x79, 0x15, 0x11, 0x33, 0x07, - 0xba, 0xb9, 0x97, 0x3e, 0xd0, 0x7d, 0x3f, 0x72, 0xec, 0x55, 0x7a, 0x79, 0xba, 0x2c, 0x3c, 0x6e, - 0xd3, 0xb4, 0x3b, 0x9f, 0x2a, 0x18, 0x2a, 0x4c, 0x17, 0x0c, 0xdd, 0x9f, 0xad, 0x2e, 0x9c, 0x32, - 0x46, 0x71, 0xde, 0xa2, 0x94, 0xca, 0x5b, 0x34, 0xa0, 0xec, 0x0b, 0xd3, 0xf2, 0x5c, 0xe7, 0x32, - 0x3c, 0x37, 0x0c, 0x61, 0xfe, 0x36, 0x14, 0x24, 0xdd, 0xf2, 0x29, 0xd3, 0xda, 0x79, 0xc1, 0xc4, - 0x29, 0x5a, 0xb4, 0x6c, 0x76, 0xa0, 0x4b, 0x02, 0xd5, 0xae, 0x59, 0x36, 0x12, 0x18, 0xbe, 0x01, - 0xdc, 0xc6, 0x20, 0xce, 0x71, 0x84, 0xb5, 0x79, 0xb9, 0xad, 0x8e, 0xf3, 0x68, 0x5f, 0x2f, 0x1b, - 0x73, 0x9e, 0x84, 0xf3, 0xbf, 0x1c, 0xcf, 0x3f, 0x35, 0xf9, 0xdc, 0x0e, 0xb0, 0xa7, 0x35, 0x72, - 0x5f, 0x22, 0x18, 0x3d, 0x87, 0x70, 0xc1, 0xaa, 0xb1, 0x24, 0xed, 0x8d, 0xcf, 0xc4, 0xaf, 0x78, - 0x1a, 0x0e, 0xaf, 0x4a, 0xdc, 0xac, 0x92, 0xd0, 0x18, 0x41, 0x96, 0xbc, 0xef, 0xb9, 0x07, 0xa8, - 0x11, 0x4c, 0x5b, 0x72, 0x0d, 0x63, 0x7f, 0xc7, 0xce, 0xc4, 0x37, 0x1d, 0x7a, 0xba, 0xa6, 0x2c, - 0x79, 0x8c, 0x69, 0xfe, 0x41, 0x36, 0x0a, 0x9e, 0x2a, 0x50, 0x38, 0x31, 0x03, 0xbb, 0xaf, 0x76, - 0x37, 0xed, 0xf4, 0xa8, 0xdd, 0x4d, 0x7a, 0x96, 0xc7, 0xb2, 0x18, 0x07, 0x05, 0x42, 0x1f, 0xe7, - 0xc4, 0x77, 0xaa, 0x58, 0x1e, 0x4d, 0x40, 0xa8, 0x49, 0xaa, 0x66, 0x88, 0x58, 0x29, 0x39, 0x67, - 0x45, 0xd5, 0x98, 0x14, 0x66, 0xd3, 0x16, 0xc3, 0xca, 0x48, 0xe3, 0x7a, 0x52, 0xa8, 0xd4, 0x24, - 0xe9, 0x3d, 0x03, 0x14, 0x13, 0x5e, 0x12, 0x60, 0x55, 0x0c, 0x4c, 0x42, 0xa1, 0x2a, 0x9f, 0x18, - 0x50, 0xd8, 0xb6, 0x8c, 0xeb, 0x3e, 0xfd, 0x80, 0xd5, 0xb0, 0x45, 0xf1, 0x55, 0x2d, 0xb6, 0x82, - 0x52, 0x4d, 0xaa, 0x64, 0x59, 0xc5, 0x9f, 0xe7, 0x54, 0xdf, 0xc2, 0xf0, 0xad, 0x16, 0xda, 0xa5, - 0x35, 0x6c, 0x59, 0xe4, 0xe8, 0x30, 0x8e, 0x71, 0xd7, 0xd8, 0xc4, 0x20, 0xc8, 0x1e, 0x9b, 0xae, - 0x64, 0x37, 0xb0, 0xab, 0x63, 0xeb, 0x94, 0xdd, 0x44, 0x96, 0xfe, 0xd0, 0x94, 0xec, 0x16, 0xd2, - 0xe0, 0xaf, 0x6d, 0xe1, 0xa3, 0xa6, 0xb0, 0xdb, 0x48, 0x23, 0xcd, 0x01, 0xbb, 0xd3, 0xfc, 0x8d, - 0xb8, 0x1e, 0xfa, 0xcd, 0x28, 0x3c, 0x59, 0x64, 0xf9, 0x60, 0x00, 0x33, 0x6f, 0x2d, 0xb7, 0x61, - 0xcd, 0x17, 0xdf, 0x9f, 0xd8, 0xa9, 0x5b, 0x02, 0xb9, 0xeb, 0xcb, 0x50, 0x66, 0x39, 0x9a, 0xe7, - 0xb0, 0x16, 0x02, 0xcf, 0x6c, 0x39, 0xa4, 0x3c, 0x12, 0x7f, 0x3b, 0x71, 0x8d, 0x21, 0x33, 0xf7, - 0xfa, 0x57, 0x24, 0x32, 0xbe, 0xb6, 0x10, 0x9d, 0x13, 0x64, 0x17, 0x38, 0x27, 0x68, 0xfe, 0xef, - 0xe4, 0xc1, 0xb3, 0x0a, 0xd8, 0xac, 0x28, 0x60, 0x9b, 0x3d, 0x88, 0x8e, 0x53, 0xff, 0xd9, 0x97, - 0x49, 0xfd, 0xcf, 0x2b, 0xea, 0xf8, 0x00, 0xe3, 0x07, 0x5a, 0x99, 0x4f, 0x17, 0x38, 0xd6, 0x48, - 0xd1, 0xf2, 0x4d, 0x3a, 0x56, 0x36, 0xbb, 0xaa, 0xe2, 0xa8, 0x30, 0xf7, 0x52, 0x51, 0xf2, 0xfc, - 0x58, 0x53, 0x1a, 0x09, 0xae, 0x84, 0x1d, 0x2b, 0xce, 0xb3, 0x63, 0x18, 0x3b, 0x6b, 0x0b, 0x17, - 0xc1, 0xea, 0x14, 0x48, 0xfd, 0x0e, 0xc5, 0xd3, 0x1a, 0x2f, 0x1b, 0x33, 0x78, 0x74, 0xf6, 0x46, - 0x13, 0x47, 0xda, 0xfa, 0xa0, 0x43, 0x01, 0xd3, 0xb7, 0x1e, 0x2b, 0xb3, 0xb7, 0x1e, 0x3f, 0x02, - 0x08, 0x04, 0xae, 0x8e, 0x6d, 0xbb, 0x2f, 0x75, 0x5d, 0xd2, 0xbd, 0xab, 0xfa, 0xa6, 0x8f, 0x67, - 0x12, 0x1c, 0xd8, 0xfe, 0x91, 0x79, 0x41, 0x47, 0xb6, 0xba, 0x80, 0x22, 0x82, 0xa7, 0xad, 0xfb, - 0xca, 0xac, 0x75, 0x7f, 0x1b, 0x0a, 0x01, 0xba, 0xd0, 0x74, 0x71, 0xe7, 0xea, 0xf9, 0xdd, 0x20, - 0x3f, 0xdb, 0x50, 0xb4, 0x94, 0xb0, 0x44, 0xfb, 0xe7, 0xf9, 0x74, 0x65, 0xa7, 0x62, 0x84, 0x60, - 0xca, 0xc2, 0xde, 0x4e, 0x5b, 0xd8, 0x86, 0x05, 0x45, 0x7d, 0xf8, 0x30, 0x9d, 0x28, 0x08, 0xd3, - 0x96, 0xd9, 0x44, 0xda, 0x32, 0xaa, 0x7e, 0xcd, 0x25, 0xab, 0x5f, 0xa7, 0x6e, 0xf5, 0x15, 0x66, - 0x6e, 0xf5, 0x35, 0x3f, 0x85, 0x82, 0x8a, 0x09, 0x20, 0x74, 0x47, 0x95, 0x2b, 0x8b, 0x9d, 0x62, - 0x19, 0x7e, 0x13, 0x58, 0x20, 0xc8, 0xd7, 0x11, 0x5d, 0x73, 0x24, 0xc8, 0x48, 0x66, 0x79, 0x1d, - 0x6e, 0x2a, 0xda, 0x20, 0xfd, 0x84, 0x1c, 0x2e, 0xc7, 0x3e, 0xf1, 0x4d, 0xff, 0x92, 0xe5, 0x9b, - 0x1f, 0xd1, 0xd1, 0x7f, 0xa8, 0x50, 0xd5, 0xe8, 0x16, 0xa5, 0x32, 0xcb, 0x96, 0xb6, 0x3e, 0x54, - 0x39, 0xa2, 0xa3, 0x3d, 0x55, 0x4f, 0x47, 0xe1, 0x14, 0xe5, 0x83, 0x96, 0x93, 0x7b, 0xfc, 0x9f, - 0xd8, 0x7a, 0x6b, 0x6e, 0x26, 0x3c, 0xc6, 0x74, 0x81, 0x5c, 0x66, 0xd1, 0x02, 0xb9, 0xe6, 0x63, - 0x58, 0x35, 0xd2, 0x36, 0x9d, 0xbf, 0x0f, 0x25, 0x6f, 0x9c, 0x94, 0xf3, 0x22, 0xbd, 0x0c, 0xc9, - 0x9b, 0xbf, 0x97, 0x81, 0xe5, 0x8e, 0x2b, 0x85, 0xef, 0x9a, 0xce, 0x8e, 0x63, 0x0e, 0xf8, 0x7b, - 0xa1, 0x95, 0x9a, 0x9f, 0x7b, 0x48, 0xd2, 0xa6, 0x0d, 0x96, 0xa3, 0x93, 0xec, 0xfc, 0x16, 0xac, - 0x09, 0xcb, 0x96, 0x9e, 0xaf, 0xfc, 0xe4, 0xb0, 0x8e, 0xf1, 0x26, 0x30, 0x85, 0xee, 0xd2, 0x92, - 0xe8, 0xa9, 0x69, 0xae, 0xc3, 0xcd, 0x14, 0x36, 0x74, 0x82, 0xb3, 0xfc, 0x2e, 0xd4, 0xe3, 0xdd, - 0x68, 0xdb, 0x73, 0x65, 0xc7, 0xb5, 0xc4, 0x05, 0x39, 0x59, 0x2c, 0xd7, 0xfc, 0xf5, 0xc8, 0xbd, - 0x7b, 0xaa, 0xab, 0x1c, 0x7d, 0xcf, 0x8b, 0xaf, 0xd0, 0x6a, 0x28, 0x71, 0x55, 0x3b, 0xbb, 0xc0, - 0x55, 0xed, 0x8f, 0xe2, 0xeb, 0xb6, 0x6a, 0xa3, 0x78, 0x65, 0xee, 0xee, 0x43, 0xc5, 0x59, 0xda, - 0xbb, 0xef, 0x8a, 0xc4, 0xdd, 0xdb, 0xb7, 0x74, 0x48, 0x97, 0x5f, 0xc4, 0x0b, 0x56, 0x75, 0x0c, - 0xef, 0x4e, 0xdf, 0xf1, 0x58, 0xac, 0x48, 0x72, 0xc6, 0x51, 0x85, 0x97, 0x76, 0x54, 0xbf, 0x35, - 0x15, 0x3d, 0x95, 0xe7, 0xa6, 0xe3, 0xae, 0xb9, 0xc1, 0xfa, 0x2d, 0x28, 0x0d, 0xed, 0x40, 0x7a, - 0xbe, 0xba, 0x55, 0x3d, 0x7b, 0x0b, 0x2c, 0x31, 0x5a, 0xbb, 0x8a, 0x90, 0x2a, 0xda, 0x42, 0x2e, - 0xfe, 0x5d, 0x58, 0xa3, 0x81, 0x3f, 0x8a, 0xbd, 0x86, 0xa0, 0x5e, 0x9d, 0x5b, 0x49, 0x98, 0x10, - 0xb5, 0x39, 0xc5, 0x62, 0xcc, 0x0a, 0x69, 0x0c, 0x00, 0xe2, 0xf9, 0x99, 0xb1, 0x62, 0x9f, 0xe1, - 0x56, 0xf5, 0x6d, 0x28, 0x06, 0x93, 0x93, 0xf8, 0x34, 0x4e, 0x43, 0x8d, 0x0b, 0x68, 0xcc, 0x78, - 0x07, 0x47, 0xc2, 0x57, 0xcd, 0xbd, 0xf6, 0x6a, 0xf7, 0x47, 0xc9, 0x89, 0x57, 0xca, 0x79, 0xff, - 0x8a, 0xd9, 0x8b, 0x24, 0x27, 0x34, 0xa0, 0xf1, 0x2e, 0x54, 0x13, 0x83, 0x8a, 0x96, 0x79, 0xe2, - 0x5a, 0x5e, 0x98, 0x02, 0xc6, 0xdf, 0xea, 0x6a, 0x9b, 0x15, 0x26, 0x81, 0xe9, 0x77, 0xc3, 0x00, - 0x36, 0x3d, 0x80, 0xd7, 0x44, 0xd8, 0xaf, 0x40, 0x2d, 0xe1, 0xd2, 0x45, 0xe9, 0xc1, 0x34, 0xb2, - 0x79, 0x0e, 0x9f, 0x4f, 0x88, 0x3b, 0x12, 0xfe, 0xc8, 0x0e, 0x70, 0x23, 0x51, 0xc1, 0x22, 0xb9, - 0xd6, 0x96, 0x70, 0xa5, 0x2d, 0x43, 0x0b, 0x1a, 0xc1, 0xfc, 0x1b, 0x50, 0x18, 0x0b, 0x7f, 0x14, - 0x68, 0x2b, 0x3a, 0xad, 0x41, 0x73, 0xc5, 0x06, 0x86, 0xe2, 0x69, 0xfe, 0x83, 0x0c, 0x94, 0xf7, - 0x85, 0x34, 0xd1, 0x77, 0xe0, 0xfb, 0x53, 0x6f, 0x99, 0x3d, 0x41, 0x0e, 0x49, 0x37, 0x74, 0xf8, - 0xba, 0xd1, 0xd1, 0xf4, 0x1a, 0xde, 0x5d, 0x8a, 0x1b, 0xd6, 0xd8, 0x84, 0x92, 0x46, 0x37, 0xde, - 0x83, 0xd5, 0x29, 0x4a, 0x1a, 0x17, 0xe5, 0xdb, 0x77, 0x2f, 0x47, 0x61, 0x99, 0xd3, 0xb2, 0x91, - 0x46, 0x6e, 0x56, 0xa0, 0x34, 0x56, 0x0c, 0xcd, 0x3f, 0xb8, 0x45, 0xc5, 0x35, 0xf6, 0x29, 0xc6, - 0xf4, 0xf3, 0x76, 0xd6, 0x7b, 0x00, 0xb4, 0x35, 0xab, 0x12, 0x0c, 0x95, 0xb2, 0x4d, 0x60, 0xf8, - 0x07, 0x51, 0xae, 0x3d, 0x3f, 0xd7, 0xa9, 0x4a, 0x0a, 0x9f, 0x4e, 0xb8, 0xd7, 0xa1, 0x64, 0x07, - 0x94, 0x87, 0xd3, 0x65, 0x4b, 0x21, 0xc8, 0xbf, 0x09, 0x45, 0x7b, 0x34, 0xf6, 0x7c, 0xa9, 0x93, - 0xf1, 0xd7, 0x4a, 0xed, 0x10, 0xe5, 0xee, 0x92, 0xa1, 0x79, 0x90, 0x5b, 0x5c, 0x10, 0x77, 0xf9, - 0xc5, 0xdc, 0xed, 0x8b, 0x90, 0x5b, 0xf1, 0xf0, 0xef, 0x40, 0x6d, 0xa0, 0xaa, 0x36, 0x95, 0x60, - 0x6d, 0x44, 0xbe, 0x7c, 0x9d, 0x90, 0x47, 0x49, 0x86, 0xdd, 0x25, 0x23, 0x2d, 0x01, 0x45, 0xa2, - 0x03, 0x2f, 0x02, 0xd9, 0xf3, 0x3e, 0xf6, 0x6c, 0x97, 0xc2, 0xdd, 0x17, 0x88, 0x34, 0x92, 0x0c, - 0x28, 0x32, 0x25, 0x81, 0x7f, 0x0d, 0x3d, 0x9e, 0x40, 0xea, 0x8b, 0xed, 0xf7, 0xaf, 0x93, 0xd4, - 0x13, 0x81, 0xbe, 0x92, 0x1e, 0x48, 0x7e, 0x01, 0x8d, 0xc4, 0x22, 0xd1, 0x2f, 0x69, 0x8d, 0xc7, - 0xbe, 0x87, 0x31, 0x73, 0x8d, 0xa4, 0x7d, 0xed, 0x3a, 0x69, 0x47, 0x57, 0x72, 0xef, 0x2e, 0x19, - 0xd7, 0xc8, 0xe6, 0x3d, 0x8c, 0xec, 0x74, 0x17, 0xf6, 0x84, 0x79, 0x1e, 0x5e, 0x8b, 0x5f, 0x5f, - 0x68, 0x14, 0x88, 0x63, 0x77, 0xc9, 0x98, 0x92, 0xc1, 0x7f, 0x05, 0xd6, 0x52, 0xef, 0xa4, 0x9b, - 0xb0, 0xea, 0xd2, 0xfc, 0x57, 0x17, 0xee, 0x06, 0x32, 0xed, 0x2e, 0x19, 0xb3, 0x92, 0xf8, 0x04, - 0x3e, 0x37, 0xdb, 0xa5, 0x6d, 0xd1, 0x77, 0x6c, 0x57, 0xe8, 0xfb, 0xf5, 0xef, 0xbe, 0xdc, 0x68, - 0x69, 0xe6, 0xdd, 0x25, 0xe3, 0x6a, 0xc9, 0xfc, 0x2f, 0xc2, 0xdd, 0xf1, 0x5c, 0x13, 0xa3, 0x4c, - 0x97, 0xbe, 0x9e, 0xff, 0xfe, 0x82, 0x6f, 0x9e, 0xe1, 0xdf, 0x5d, 0x32, 0xae, 0x95, 0x8f, 0xbe, - 0x33, 0x45, 0xd0, 0xba, 0xb8, 0x5c, 0x01, 0x74, 0x52, 0xdb, 0x77, 0x76, 0x85, 0x69, 0x45, 0xe7, - 0x05, 0x31, 0xa2, 0xf1, 0xdf, 0x33, 0x50, 0xd4, 0xfa, 0x7e, 0x37, 0xaa, 0x18, 0x88, 0x4c, 0x77, - 0x8c, 0xe0, 0x1f, 0x42, 0x45, 0xf8, 0xbe, 0xe7, 0x6f, 0x79, 0x56, 0x58, 0x6c, 0x39, 0x9d, 0x65, - 0x56, 0x72, 0x36, 0xda, 0x21, 0x99, 0x11, 0x73, 0xf0, 0x0f, 0x00, 0xd4, 0x3a, 0xef, 0xc5, 0x77, - 0x84, 0x1a, 0xf3, 0xf9, 0xd5, 0x11, 0x54, 0x4c, 0x1d, 0xa7, 0xe5, 0xc2, 0xf3, 0x9f, 0x10, 0x8c, - 0x02, 0xce, 0x42, 0x22, 0xe0, 0xbc, 0xab, 0xf3, 0x08, 0x94, 0x5e, 0xd1, 0x37, 0xe5, 0x22, 0x44, - 0xe3, 0x5f, 0x67, 0xa0, 0xa8, 0x8c, 0x07, 0x6f, 0xcf, 0xf6, 0xe8, 0xb5, 0x17, 0xdb, 0x9c, 0x8d, - 0xe9, 0x9e, 0x7d, 0x13, 0x40, 0xd9, 0xa0, 0x44, 0xcf, 0xee, 0x4e, 0xc9, 0xd1, 0xac, 0x61, 0x79, - 0x73, 0x4c, 0xdf, 0x7c, 0xa8, 0x6e, 0x73, 0x51, 0x4a, 0xf8, 0xc9, 0xde, 0x1e, 0x5b, 0xe2, 0x6b, - 0x50, 0x7b, 0x72, 0xf0, 0xf8, 0xe0, 0xf0, 0xd9, 0xc1, 0x71, 0xdb, 0x30, 0x0e, 0x0d, 0x95, 0x19, - 0xde, 0x6c, 0x6d, 0x1f, 0x77, 0x0e, 0x8e, 0x9e, 0xf4, 0x58, 0xb6, 0xf1, 0x4f, 0x33, 0x50, 0x4b, - 0xd9, 0xae, 0x3f, 0xdd, 0xa9, 0x4b, 0x0c, 0x7f, 0x6e, 0xfe, 0xf0, 0xe7, 0xaf, 0x1a, 0xfe, 0xc2, - 0xf4, 0xf0, 0xff, 0x4e, 0x06, 0x6a, 0x29, 0x1b, 0x99, 0x94, 0x9e, 0x49, 0x4b, 0x4f, 0xee, 0xf4, - 0xd9, 0xa9, 0x9d, 0xbe, 0x09, 0xcb, 0xe1, 0xef, 0x83, 0x38, 0xe3, 0x90, 0xc2, 0x25, 0x69, 0xe8, - 0x3a, 0x45, 0x3e, 0x4d, 0x43, 0x57, 0x2a, 0xae, 0x6f, 0x2d, 0x5d, 0x1f, 0x0d, 0xe8, 0x76, 0x7d, - 0xe3, 0x6a, 0x0b, 0x7a, 0x4d, 0x17, 0x1e, 0x41, 0x75, 0x1c, 0x2f, 0xd3, 0x97, 0x73, 0x4b, 0x92, - 0x9c, 0x2f, 0x68, 0xe7, 0xef, 0x66, 0x60, 0x25, 0x6d, 0x73, 0xff, 0xbf, 0x1e, 0xd6, 0x7f, 0x9c, - 0x81, 0xb5, 0x19, 0x4b, 0x7e, 0xad, 0x63, 0x37, 0xdd, 0xae, 0xec, 0x02, 0xed, 0xca, 0xcd, 0x69, - 0xd7, 0xd5, 0x96, 0xe4, 0xfa, 0x16, 0x77, 0xe1, 0x73, 0x57, 0xee, 0x09, 0xd7, 0x0c, 0x75, 0x4a, - 0x68, 0x6e, 0x5a, 0xe8, 0x6f, 0x67, 0xe0, 0xee, 0x75, 0xf6, 0xfe, 0xff, 0xb9, 0x5e, 0x4d, 0xb7, - 0xb0, 0xf9, 0x5e, 0x54, 0x48, 0x50, 0x85, 0x92, 0xfe, 0x6a, 0x95, 0x2e, 0xe4, 0x1e, 0x7a, 0xcf, - 0x5d, 0x95, 0x89, 0x36, 0x84, 0xa9, 0xef, 0xf5, 0x1b, 0x62, 0xec, 0xd8, 0x74, 0x46, 0x7a, 0x07, - 0xa0, 0x45, 0x71, 0x5d, 0x78, 0xcd, 0x66, 0x6b, 0xef, 0xb0, 0xdb, 0x66, 0x4b, 0x49, 0x27, 0xf6, - 0xd3, 0xd0, 0x10, 0x37, 0x8f, 0xa0, 0x18, 0x5f, 0x7c, 0xd8, 0x37, 0xfd, 0x33, 0x4b, 0x9d, 0x44, - 0x2e, 0x43, 0xf9, 0x48, 0x87, 0x50, 0xea, 0x55, 0x1f, 0x77, 0x0f, 0x0f, 0x54, 0xd2, 0x7b, 0xfb, - 0xb0, 0xa7, 0xae, 0x4f, 0x74, 0x9f, 0x3e, 0x52, 0x47, 0x62, 0x8f, 0x8c, 0xd6, 0xd1, 0xee, 0x31, - 0x51, 0x14, 0x9a, 0xbf, 0x95, 0x0f, 0x77, 0xb5, 0xa6, 0xa1, 0xcf, 0x38, 0x01, 0x8a, 0x68, 0xcd, - 0x3d, 0x2d, 0x38, 0x7a, 0x0d, 0x95, 0xfc, 0xb6, 0x2f, 0x54, 0x1e, 0x82, 0x65, 0x79, 0x11, 0xb2, - 0x47, 0x27, 0xaa, 0x12, 0x69, 0x57, 0x8e, 0x1c, 0x75, 0xef, 0xb2, 0x77, 0x21, 0x59, 0x01, 0x7f, - 0x6c, 0x05, 0xe7, 0xac, 0xd8, 0xfc, 0x67, 0x39, 0xa8, 0x44, 0xa6, 0xf2, 0x65, 0x4c, 0x37, 0xe7, - 0xb0, 0xd2, 0x39, 0xe8, 0xb5, 0x8d, 0x83, 0xd6, 0x9e, 0x26, 0xc9, 0xf1, 0x1b, 0xb0, 0xba, 0xd3, - 0xd9, 0x6b, 0x1f, 0xef, 0x1d, 0xb6, 0xb6, 0x35, 0xb2, 0xcc, 0x6f, 0x03, 0xef, 0xec, 0x1f, 0x1d, - 0x1a, 0xbd, 0xe3, 0x4e, 0xf7, 0x78, 0xab, 0x75, 0xb0, 0xd5, 0xde, 0x6b, 0x6f, 0xb3, 0x22, 0x7f, - 0x05, 0xee, 0x1f, 0x1c, 0xf6, 0x3a, 0x87, 0x07, 0xc7, 0x07, 0x87, 0xc7, 0x87, 0x9b, 0x1f, 0xb7, - 0xb7, 0x7a, 0xdd, 0xe3, 0xce, 0xc1, 0x31, 0x4a, 0x7d, 0x64, 0xb4, 0xf0, 0x09, 0x2b, 0xf0, 0xfb, - 0x70, 0x57, 0x53, 0x75, 0xdb, 0xc6, 0xd3, 0xb6, 0x81, 0x42, 0x9e, 0x1c, 0xb4, 0x9e, 0xb6, 0x3a, - 0x7b, 0xad, 0xcd, 0xbd, 0x36, 0x5b, 0xe6, 0xf7, 0xa0, 0xa1, 0x29, 0x8c, 0x56, 0xaf, 0x7d, 0xbc, - 0xd7, 0xd9, 0xef, 0xf4, 0x8e, 0xdb, 0xdf, 0xdd, 0x6a, 0xb7, 0xb7, 0xdb, 0xdb, 0xac, 0xc6, 0xbf, - 0x0c, 0x5f, 0xa2, 0x46, 0xe9, 0x46, 0xa4, 0x5f, 0xf6, 0x69, 0xe7, 0xe8, 0xb8, 0x65, 0x6c, 0xed, - 0x76, 0x9e, 0xb6, 0xd9, 0x0a, 0x7f, 0x0d, 0xbe, 0x78, 0x35, 0xe9, 0x76, 0xc7, 0x68, 0x6f, 0xf5, - 0x0e, 0x8d, 0x4f, 0xd8, 0x1a, 0xff, 0x25, 0xf8, 0xdc, 0x6e, 0x6f, 0x7f, 0xef, 0xf8, 0x99, 0x71, - 0x78, 0xf0, 0xe8, 0x98, 0x7e, 0x76, 0x7b, 0xc6, 0x93, 0xad, 0xde, 0x13, 0xa3, 0xcd, 0x80, 0x37, - 0xe0, 0xf6, 0xd1, 0xe6, 0xf1, 0xc1, 0x61, 0xef, 0xb8, 0x75, 0xf0, 0xc9, 0xe6, 0xde, 0xe1, 0xd6, - 0xe3, 0xe3, 0x9d, 0x43, 0x63, 0xbf, 0xd5, 0x63, 0x55, 0xfe, 0x15, 0x78, 0x6d, 0xab, 0xfb, 0x54, - 0x37, 0xf3, 0x70, 0xe7, 0xd8, 0x38, 0x7c, 0xd6, 0x3d, 0x3e, 0x34, 0x8e, 0x8d, 0xf6, 0x1e, 0xf5, - 0xb9, 0x1b, 0xb7, 0xbd, 0xc4, 0xef, 0x42, 0xbd, 0x73, 0xd0, 0x7d, 0xb2, 0xb3, 0xd3, 0xd9, 0xea, - 0xb4, 0x0f, 0x7a, 0xc7, 0x47, 0x6d, 0x63, 0xbf, 0xd3, 0xed, 0x22, 0x19, 0xab, 0x34, 0xbf, 0x0d, - 0xc5, 0x8e, 0x7b, 0x6e, 0x4b, 0x5a, 0x5f, 0x5a, 0x19, 0x75, 0xc4, 0x15, 0x82, 0xb4, 0x2c, 0xec, - 0x81, 0x4b, 0xdf, 0x13, 0xa0, 0xd5, 0xb5, 0x6c, 0xc4, 0x88, 0xe6, 0x7f, 0xc9, 0x41, 0x4d, 0x89, - 0x08, 0x23, 0xb8, 0x07, 0xb0, 0xaa, 0x53, 0xa1, 0x9d, 0xb4, 0x09, 0x9b, 0x46, 0xd3, 0x87, 0xba, - 0x14, 0x2a, 0x61, 0xc8, 0x92, 0x28, 0x7e, 0x1b, 0x8a, 0x66, 0xdf, 0xc1, 0x30, 0x50, 0x9d, 0x57, - 0x6a, 0xe8, 0xb3, 0xda, 0x2e, 0xb4, 0x8b, 0x8a, 0xb0, 0xef, 0xb9, 0x5b, 0xd1, 0x95, 0x92, 0x14, - 0x8e, 0x7f, 0x0a, 0x77, 0x22, 0xb8, 0xed, 0xf6, 0xfd, 0xcb, 0x71, 0xf4, 0x25, 0xbd, 0xd2, 0xdc, - 0x64, 0xc2, 0x8e, 0xed, 0x88, 0x14, 0xa1, 0x71, 0x95, 0x00, 0xfe, 0x08, 0xc0, 0xa6, 0xc1, 0x22, - 0xff, 0x68, 0xfe, 0xbd, 0xe9, 0xd4, 0x68, 0x6a, 0x48, 0xbb, 0x81, 0xd1, 0x6f, 0xdc, 0x20, 0x06, - 0x68, 0x77, 0x1f, 0xeb, 0x0f, 0xef, 0x2d, 0x1b, 0x11, 0xdc, 0x3c, 0x04, 0x88, 0xb9, 0x38, 0x83, - 0x65, 0xf4, 0x2d, 0x5a, 0xc1, 0xbe, 0x18, 0x9d, 0x08, 0x5f, 0x55, 0xf1, 0x29, 0xcc, 0x23, 0xe4, - 0x60, 0x19, 0xd4, 0xff, 0x24, 0xc9, 0x33, 0x5b, 0x0e, 0xbd, 0x49, 0xb8, 0xa5, 0xab, 0xab, 0x02, - 0x71, 0x9c, 0xae, 0xe2, 0xf0, 0x6b, 0x77, 0xa8, 0x79, 0x67, 0x46, 0x18, 0x29, 0xeb, 0x41, 0xd7, - 0x8e, 0x93, 0x06, 0xf9, 0x11, 0x70, 0x7b, 0x76, 0xa8, 0xf3, 0x0b, 0x0e, 0xf5, 0x1c, 0xde, 0xe9, - 0x94, 0x7f, 0x61, 0x36, 0xe5, 0x7f, 0x0f, 0x60, 0xe0, 0x78, 0x27, 0xfa, 0xdc, 0xb1, 0xa8, 0xeb, - 0x82, 0x22, 0x4c, 0xd3, 0x81, 0x72, 0xf8, 0x95, 0x41, 0xd4, 0x41, 0xfa, 0xce, 0x60, 0x94, 0x00, - 0x55, 0x10, 0xdf, 0x85, 0x15, 0x91, 0x6e, 0x73, 0x76, 0xc1, 0x36, 0x4f, 0xf1, 0x35, 0xbf, 0x0e, - 0x6b, 0x33, 0x44, 0x38, 0x88, 0x63, 0x53, 0x46, 0x9f, 0x1a, 0xc0, 0xdf, 0xb3, 0xc7, 0xf9, 0xcd, - 0x7f, 0x97, 0x85, 0xe5, 0x7d, 0xd3, 0xb5, 0x4f, 0x45, 0x20, 0xc3, 0xd6, 0x06, 0xfd, 0xa1, 0x18, - 0x99, 0x61, 0x6b, 0x15, 0xa4, 0xb3, 0x22, 0xd9, 0xe4, 0x79, 0xc3, 0xcc, 0xf1, 0x14, 0xae, 0xb6, - 0x89, 0x1c, 0x46, 0xd5, 0xf7, 0x1a, 0xc2, 0xb9, 0x73, 0xec, 0xbe, 0x70, 0x83, 0x70, 0x45, 0x85, - 0x60, 0x5c, 0xdd, 0x53, 0xbc, 0xa6, 0xba, 0xa7, 0x34, 0x3b, 0xfe, 0xf7, 0xa1, 0x1a, 0xf4, 0x7d, - 0x21, 0xdc, 0x60, 0xe8, 0xc9, 0xf0, 0x0b, 0x95, 0x49, 0x14, 0x95, 0xda, 0x79, 0xcf, 0x5d, 0x5c, - 0x03, 0x7b, 0xb6, 0x7b, 0xa6, 0x2b, 0xc8, 0x52, 0x38, 0xd4, 0x41, 0xca, 0x09, 0xd9, 0x3f, 0x10, - 0x94, 0x8f, 0x28, 0x18, 0x11, 0x4c, 0x59, 0x1f, 0x53, 0x8a, 0x81, 0xe7, 0xdb, 0x42, 0xa5, 0x3e, - 0x2b, 0x46, 0x02, 0x83, 0xbc, 0x8e, 0xe9, 0x0e, 0x26, 0xe6, 0x40, 0xe8, 0xe3, 0xf1, 0x08, 0x6e, - 0xfe, 0x8f, 0x02, 0x80, 0x5a, 0x0a, 0xc1, 0xd0, 0x1e, 0xd3, 0xd1, 0x8c, 0xad, 0x6b, 0x8e, 0x6b, - 0x06, 0xfd, 0xe6, 0xef, 0xa7, 0xae, 0x03, 0xcc, 0x1e, 0xa6, 0xc6, 0xec, 0xd3, 0x29, 0x23, 0x1c, - 0x1c, 0x53, 0x0a, 0x5d, 0x58, 0x45, 0xe3, 0x9f, 0x37, 0x92, 0x28, 0x2a, 0xad, 0x33, 0xa5, 0x68, - 0xbb, 0x96, 0x4a, 0x49, 0xe5, 0x8d, 0x08, 0xa6, 0x0b, 0x45, 0x41, 0x6b, 0x22, 0x3d, 0x43, 0xb8, - 0xe2, 0x79, 0x74, 0x57, 0x2e, 0x46, 0xf1, 0x7d, 0xa8, 0x8d, 0xcd, 0xcb, 0x91, 0x70, 0xe5, 0xbe, - 0x90, 0x43, 0xcf, 0xd2, 0x55, 0x50, 0xaf, 0x5d, 0xdd, 0xc0, 0xa3, 0x24, 0xb9, 0x91, 0xe6, 0x46, - 0x9d, 0x70, 0x03, 0x5a, 0x25, 0x6a, 0x1a, 0x35, 0xc4, 0x37, 0x01, 0xd4, 0xaf, 0x84, 0x25, 0x9b, - 0xc9, 0x52, 0x99, 0x23, 0x11, 0x08, 0xff, 0xdc, 0x56, 0xd6, 0x57, 0x19, 0xb1, 0x98, 0x0b, 0x6d, - 0xf5, 0x24, 0x10, 0x7e, 0x7b, 0x64, 0xda, 0x8e, 0x9e, 0xe0, 0x18, 0xc1, 0xdf, 0x81, 0x5b, 0xc1, - 0xe4, 0x04, 0x75, 0xe6, 0x44, 0xf4, 0xbc, 0x03, 0xf1, 0x3c, 0x70, 0x84, 0x94, 0xc2, 0xd7, 0x95, - 0x16, 0xf3, 0x1f, 0x36, 0x07, 0x91, 0x9b, 0x46, 0x5f, 0x43, 0xc1, 0x5f, 0x71, 0x39, 0x57, 0x84, - 0xd2, 0xb5, 0x6e, 0x2c, 0x83, 0xe6, 0x51, 0xa1, 0x74, 0x29, 0x5c, 0x96, 0x7f, 0x09, 0xbe, 0x90, - 0x22, 0x32, 0xd4, 0xc1, 0x75, 0xb0, 0x63, 0xbb, 0xa6, 0x63, 0xff, 0x40, 0x95, 0x11, 0xe4, 0x9a, - 0x63, 0xa8, 0xa5, 0x06, 0x8e, 0x2e, 0x77, 0xd2, 0x2f, 0x5d, 0x0f, 0xc4, 0x60, 0x59, 0xc1, 0x5d, - 0xe9, 0xdb, 0x74, 0x22, 0x13, 0x61, 0xb6, 0x70, 0x9d, 0x7b, 0x2c, 0xcb, 0x6f, 0x02, 0x53, 0x98, - 0x8e, 0x6b, 0x8e, 0xc7, 0xad, 0xf1, 0xd8, 0x11, 0x2c, 0x47, 0x17, 0x67, 0x63, 0xac, 0xba, 0x14, - 0xc0, 0xf2, 0xcd, 0xef, 0xc2, 0x1d, 0x1a, 0x99, 0xa7, 0xc2, 0x8f, 0x02, 0x71, 0xdd, 0xd7, 0x5b, - 0xb0, 0xa6, 0x7e, 0x1d, 0x78, 0x52, 0x3d, 0x26, 0xe7, 0x94, 0xc3, 0x8a, 0x42, 0xa3, 0x6f, 0xd6, - 0x15, 0x74, 0x1d, 0x36, 0xc2, 0x45, 0x74, 0xd9, 0xe6, 0x1f, 0x16, 0x81, 0xc7, 0x0a, 0xd1, 0xb3, - 0x85, 0xbf, 0x6d, 0x4a, 0x33, 0x91, 0x49, 0xad, 0x5d, 0x59, 0x0b, 0xf0, 0xe2, 0x4a, 0xbe, 0xdb, - 0x50, 0xb4, 0x03, 0x0c, 0x1d, 0x75, 0x39, 0xaf, 0x86, 0xf8, 0x1e, 0xc0, 0x58, 0xf8, 0xb6, 0x67, - 0x91, 0x06, 0x15, 0xe6, 0xde, 0xca, 0x98, 0x6d, 0xd4, 0xc6, 0x51, 0xc4, 0x63, 0x24, 0xf8, 0xb1, - 0x1d, 0x0a, 0x52, 0x27, 0xeb, 0x45, 0x6a, 0x74, 0x12, 0xc5, 0xdf, 0x84, 0x1b, 0x63, 0xdf, 0xee, - 0x0b, 0x35, 0x1d, 0x4f, 0x02, 0x6b, 0x8b, 0xbe, 0x21, 0x58, 0x22, 0xca, 0x79, 0x8f, 0x50, 0x03, - 0x4d, 0x97, 0x02, 0xaa, 0x80, 0xce, 0x92, 0xf5, 0x05, 0x72, 0x55, 0xf0, 0x5a, 0x33, 0xe6, 0x3f, - 0xe4, 0xeb, 0xc0, 0xf4, 0x83, 0x7d, 0xdb, 0xdd, 0x13, 0xee, 0x40, 0x0e, 0x49, 0xb9, 0x6b, 0xc6, - 0x0c, 0x9e, 0x2c, 0x98, 0xfa, 0x52, 0x93, 0x3a, 0x67, 0xaa, 0x18, 0x11, 0xac, 0x3e, 0x4a, 0xe0, - 0x78, 0x7e, 0x57, 0xfa, 0xba, 0x72, 0x37, 0x82, 0xd1, 0xc7, 0x0a, 0xa8, 0xad, 0x47, 0xbe, 0x67, - 0x4d, 0xe8, 0x14, 0x44, 0x19, 0xb1, 0x69, 0x74, 0x4c, 0xb9, 0x6f, 0xba, 0xba, 0x9c, 0xb2, 0x96, - 0xa4, 0x8c, 0xd0, 0x14, 0x33, 0x7a, 0x41, 0x2c, 0x70, 0x55, 0xc7, 0x8c, 0x09, 0x9c, 0xa6, 0x89, - 0x45, 0xb1, 0x88, 0x26, 0x96, 0x43, 0xfd, 0xb7, 0x7c, 0xcf, 0xb6, 0x62, 0x59, 0xaa, 0xb2, 0x67, - 0x06, 0x9f, 0xa0, 0x8d, 0x65, 0xf2, 0x14, 0x6d, 0x2c, 0xf7, 0x26, 0x14, 0xbc, 0xd3, 0x53, 0xe1, - 0xd3, 0x87, 0x39, 0x2b, 0x86, 0x02, 0x9a, 0x3f, 0xca, 0x00, 0xc4, 0x2a, 0x81, 0x0b, 0x21, 0x86, - 0xe2, 0x85, 0x7f, 0x07, 0x6e, 0x24, 0xd1, 0x8e, 0x2e, 0x94, 0xa5, 0xd5, 0x10, 0x3f, 0xd8, 0x36, - 0x2f, 0x03, 0x96, 0xd5, 0x17, 0xbb, 0x35, 0xee, 0x99, 0x10, 0x54, 0x75, 0x78, 0x13, 0x58, 0x8c, - 0xa4, 0xdb, 0x7a, 0x01, 0xcb, 0xa7, 0x49, 0x3f, 0x11, 0xa6, 0x1f, 0xb0, 0x42, 0x73, 0x17, 0x8a, - 0xea, 0x88, 0x6c, 0xce, 0xe1, 0xf6, 0xcb, 0x55, 0xaa, 0xfc, 0xf5, 0x0c, 0xc0, 0xb6, 0xaa, 0xaa, - 0xc6, 0xbd, 0x7d, 0x4e, 0xcd, 0xc0, 0x3c, 0x3f, 0xcb, 0xb4, 0x2c, 0xaa, 0x4e, 0xcf, 0x45, 0x5f, - 0x05, 0x42, 0x10, 0xf5, 0xc9, 0x0c, 0x2b, 0xcb, 0xd4, 0x4a, 0x8c, 0x60, 0xb5, 0xad, 0x6c, 0x79, - 0xae, 0x2b, 0xfa, 0xb8, 0x29, 0x45, 0xdb, 0x4a, 0x84, 0x6a, 0xfe, 0x30, 0x0b, 0x95, 0xad, 0xa1, - 0x29, 0xd5, 0x47, 0x74, 0xbe, 0x0d, 0xe5, 0x91, 0x08, 0x02, 0x73, 0x20, 0x02, 0x7d, 0x24, 0x34, - 0x7d, 0x9e, 0x1b, 0xd1, 0x6e, 0x3c, 0x71, 0x7d, 0x61, 0x5a, 0xea, 0xcb, 0x41, 0x11, 0x97, 0x92, - 0xe0, 0xca, 0x28, 0x64, 0x7f, 0x09, 0x09, 0x6e, 0xf4, 0x99, 0x5f, 0xc7, 0x0c, 0x14, 0x49, 0x94, - 0x8e, 0x4b, 0xa2, 0x1a, 0xfb, 0x50, 0x4d, 0xb0, 0xf2, 0x57, 0xa0, 0xe6, 0x39, 0x96, 0x08, 0xd4, - 0xdd, 0xc1, 0xf8, 0x73, 0x8b, 0x29, 0x24, 0x15, 0x76, 0xe0, 0x7a, 0x16, 0xbe, 0x3e, 0xdd, 0x0b, - 0xc1, 0xe6, 0x6f, 0x96, 0xa1, 0x8a, 0x8d, 0xda, 0x57, 0x7d, 0x98, 0x99, 0x8e, 0x3a, 0x94, 0x3c, - 0x2d, 0x59, 0x5f, 0x3a, 0xf4, 0x12, 0x32, 0x75, 0xb1, 0x48, 0x2e, 0x5d, 0x2c, 0x72, 0x17, 0x2a, - 0xea, 0x28, 0xca, 0x6a, 0x29, 0xfb, 0x98, 0x33, 0x62, 0x04, 0x3a, 0x31, 0x23, 0xcf, 0x22, 0x2b, - 0xdd, 0x52, 0xa7, 0x38, 0x39, 0x23, 0x81, 0xa1, 0x30, 0x48, 0x77, 0xbf, 0xaa, 0xc3, 0x20, 0x05, - 0xaa, 0xaa, 0x9d, 0xb1, 0x73, 0xd9, 0xf3, 0x74, 0x6b, 0x3b, 0x56, 0x7c, 0x77, 0x3b, 0x8d, 0xe7, - 0x5b, 0x50, 0xd2, 0xd3, 0xa2, 0xcf, 0xaa, 0xbe, 0x3c, 0x67, 0x26, 0x34, 0xf9, 0x86, 0xfe, 0xab, - 0xaf, 0x4f, 0x19, 0x21, 0x27, 0x7f, 0x04, 0x55, 0x53, 0x4a, 0xb3, 0x3f, 0x1c, 0x69, 0xab, 0x9a, - 0x9b, 0x73, 0x6c, 0x9d, 0x14, 0xd4, 0x8a, 0xa8, 0x8d, 0x24, 0x27, 0xdf, 0x84, 0x8a, 0x2f, 0xcc, - 0xd4, 0xc9, 0xf9, 0x2b, 0xd7, 0x88, 0x31, 0x42, 0x5a, 0x23, 0x66, 0x8b, 0xbe, 0x3c, 0x0a, 0x89, - 0x2f, 0x8f, 0xde, 0x87, 0xaa, 0x56, 0x1d, 0x03, 0x1f, 0xa9, 0x2f, 0xb2, 0x24, 0x51, 0x8d, 0x9f, - 0x64, 0x60, 0x25, 0xdd, 0xbd, 0x3f, 0x8d, 0x6f, 0xe5, 0x7d, 0x33, 0xfe, 0x56, 0xde, 0x67, 0xf8, - 0xee, 0xdc, 0x6f, 0x67, 0x00, 0xe2, 0x91, 0xc3, 0xbd, 0x55, 0x7d, 0xd3, 0x2b, 0xf4, 0xf6, 0x15, - 0xc4, 0x77, 0x53, 0x1f, 0x82, 0x78, 0x67, 0xa1, 0x69, 0x48, 0xfc, 0x4c, 0x94, 0xc5, 0xbf, 0x01, - 0x2b, 0x69, 0x3c, 0x5d, 0x27, 0xe8, 0xec, 0xb5, 0x55, 0xee, 0xab, 0xb3, 0xdf, 0x7a, 0xd4, 0xd6, - 0xd7, 0xd8, 0x3a, 0x07, 0x8f, 0x59, 0xb6, 0xf1, 0x47, 0x19, 0xa8, 0x44, 0x93, 0xc2, 0xbf, 0x93, - 0x9c, 0x4d, 0x55, 0x40, 0xf3, 0xf6, 0x22, 0xb3, 0x19, 0xff, 0x6a, 0xbb, 0xd2, 0xbf, 0x4c, 0x4c, - 0x6e, 0xc3, 0x83, 0x95, 0xf4, 0xc3, 0x39, 0x66, 0xf6, 0x51, 0xda, 0xcc, 0xbe, 0xb5, 0xd0, 0x2b, - 0xc3, 0x10, 0x77, 0xcf, 0x0e, 0xa4, 0xb6, 0xc0, 0x1f, 0x64, 0xdf, 0xcf, 0x34, 0xee, 0xc3, 0x72, - 0xf2, 0xd1, 0xec, 0x4d, 0xd6, 0xf5, 0x3f, 0xca, 0xc1, 0x4a, 0xba, 0x06, 0x85, 0x6e, 0xc6, 0xa9, - 0xfa, 0xa7, 0x43, 0xc7, 0x4a, 0xdc, 0x24, 0x60, 0x18, 0x7e, 0xeb, 0x20, 0x9a, 0x10, 0x6b, 0x94, - 0x5d, 0xf3, 0x46, 0x82, 0xdd, 0x4f, 0x7e, 0x0f, 0xf4, 0x4d, 0x0e, 0xe1, 0x8d, 0x46, 0x36, 0xe6, - 0x15, 0xfd, 0x65, 0xb4, 0x1f, 0x66, 0x79, 0x2d, 0x51, 0xcf, 0xfe, 0x63, 0xf4, 0x20, 0x57, 0x37, - 0x27, 0xae, 0xe5, 0x08, 0x2b, 0xc2, 0xfe, 0x24, 0x89, 0x8d, 0x0a, 0xd2, 0x7f, 0x98, 0xe7, 0x2b, - 0x50, 0xe9, 0x4e, 0x4e, 0x74, 0x31, 0xfa, 0x5f, 0xca, 0xf3, 0xdb, 0xb0, 0xa6, 0xa9, 0xe2, 0xda, - 0x4f, 0xf6, 0x97, 0x71, 0x57, 0x5b, 0x69, 0xa9, 0xf1, 0xd2, 0x0d, 0x65, 0x7f, 0x25, 0x8f, 0x4d, - 0xa0, 0x8b, 0xf2, 0x7f, 0x95, 0xe4, 0x44, 0x17, 0x87, 0xd8, 0xaf, 0xe6, 0xf9, 0x2a, 0x40, 0xb7, - 0x17, 0xbd, 0xe8, 0xd7, 0xf3, 0xbc, 0x0a, 0xc5, 0x6e, 0x8f, 0xa4, 0xfd, 0x28, 0xcf, 0x6f, 0x01, - 0x8b, 0x9f, 0xea, 0x8a, 0xd8, 0xbf, 0xa1, 0x1a, 0x13, 0x95, 0xb8, 0xfe, 0xcd, 0x3c, 0xf6, 0x2b, - 0x1c, 0x65, 0xf6, 0xb7, 0xf2, 0x9c, 0x41, 0x35, 0x91, 0xb3, 0x65, 0x7f, 0x3b, 0xcf, 0x39, 0xd4, - 0xf6, 0xed, 0x20, 0xb0, 0xdd, 0x81, 0xee, 0xc1, 0xaf, 0xd1, 0x9b, 0x77, 0xa2, 0xbb, 0x4f, 0xec, - 0x37, 0xf2, 0xfc, 0x0e, 0xf0, 0xe4, 0x39, 0x95, 0x7e, 0xf0, 0x9b, 0xc4, 0xad, 0x76, 0xd2, 0x40, - 0xe3, 0xfe, 0x0e, 0x71, 0xa3, 0x26, 0x68, 0xc4, 0x6f, 0xd1, 0x80, 0x6c, 0xc5, 0x35, 0xb4, 0x1a, - 0xff, 0x63, 0x62, 0x0e, 0x27, 0x53, 0xe1, 0x7e, 0x92, 0x5f, 0xff, 0x3d, 0x3a, 0x67, 0x48, 0x96, - 0xa2, 0xf1, 0x65, 0x28, 0x3b, 0x9e, 0x3b, 0x90, 0xea, 0x3b, 0xac, 0x35, 0xa8, 0x04, 0x43, 0xcf, - 0x97, 0x04, 0xd2, 0xe5, 0x4c, 0x97, 0x2e, 0xf1, 0xab, 0xeb, 0x0c, 0x2a, 0x1a, 0x54, 0x79, 0x5b, - 0x69, 0x0e, 0x58, 0x35, 0xaa, 0xfe, 0xcd, 0x47, 0x15, 0xca, 0xf4, 0x31, 0x81, 0xf0, 0xb2, 0x36, - 0x2b, 0x22, 0xe9, 0xc4, 0x77, 0x54, 0xa5, 0xb2, 0xc0, 0x48, 0x40, 0x7d, 0x70, 0x71, 0x3c, 0xc4, - 0x80, 0xa3, 0xa2, 0xb0, 0xde, 0xf7, 0x6c, 0x75, 0x0d, 0x58, 0x17, 0xfe, 0x59, 0xd8, 0x8e, 0xa8, - 0xb6, 0x85, 0x89, 0xf5, 0xbf, 0x9b, 0x81, 0xe5, 0xf0, 0x0a, 0xbd, 0x3d, 0xb0, 0x5d, 0x55, 0xeb, - 0x1c, 0x7e, 0xdd, 0xb6, 0xef, 0xd8, 0xe3, 0xf0, 0x6b, 0x91, 0xab, 0x50, 0xb5, 0x7c, 0x73, 0xd0, - 0x72, 0xad, 0x6d, 0xdf, 0x1b, 0xab, 0x66, 0xab, 0x93, 0x48, 0x55, 0x63, 0xfd, 0x5c, 0x9c, 0x20, - 0xf9, 0x58, 0xf8, 0x2c, 0x4f, 0x45, 0x85, 0x43, 0xd3, 0xb7, 0xdd, 0x41, 0xfb, 0x42, 0x0a, 0x37, - 0x50, 0xb5, 0xd6, 0x55, 0x28, 0x4d, 0x02, 0xd1, 0x37, 0x03, 0xc1, 0x8a, 0x08, 0x9c, 0x4c, 0x6c, - 0x47, 0xda, 0xae, 0xfa, 0x48, 0x63, 0x54, 0x4c, 0x5d, 0xc6, 0x9e, 0x99, 0x63, 0x9b, 0x55, 0xd6, - 0xff, 0x65, 0x06, 0xaa, 0xa4, 0x16, 0x71, 0xae, 0x3d, 0xf6, 0xe2, 0xaa, 0x50, 0xda, 0x8b, 0xbe, - 0xd6, 0x57, 0x84, 0xec, 0xe1, 0x99, 0xca, 0xb5, 0x6b, 0xb5, 0x50, 0x77, 0x5d, 0xd5, 0x87, 0xfb, - 0xf2, 0xfc, 0x73, 0x70, 0xcb, 0x10, 0x23, 0x4f, 0x8a, 0x67, 0xa6, 0x2d, 0x93, 0xf7, 0x9a, 0x0a, - 0x18, 0x06, 0xaa, 0x47, 0xe1, 0x45, 0xa6, 0x22, 0x85, 0x81, 0xf8, 0xda, 0x10, 0x53, 0xc2, 0xde, - 0x13, 0x46, 0xc7, 0x85, 0xe5, 0x88, 0xe4, 0x63, 0xcf, 0x76, 0xf1, 0x6d, 0x74, 0xff, 0x9a, 0x30, - 0x74, 0x68, 0x83, 0x28, 0x58, 0x3f, 0x80, 0xdb, 0xf3, 0x8f, 0x1a, 0xd4, 0xcd, 0x6c, 0xfa, 0x44, - 0x34, 0xdd, 0x74, 0x79, 0xe6, 0xdb, 0xea, 0x0a, 0x6d, 0x05, 0x0a, 0x87, 0xcf, 0x5d, 0x52, 0x8b, - 0x35, 0xa8, 0x1d, 0x78, 0x09, 0x1e, 0x96, 0x5b, 0x7f, 0x2f, 0x95, 0xcb, 0xa3, 0x2f, 0x69, 0xe9, - 0x2c, 0x5e, 0x05, 0x0a, 0x61, 0xfe, 0x8e, 0xc3, 0xca, 0x74, 0xce, 0x6e, 0xbd, 0x9f, 0x3a, 0x56, - 0x8a, 0x47, 0x33, 0x6c, 0xfd, 0x52, 0xe2, 0xfa, 0x57, 0x46, 0x1d, 0x58, 0xd0, 0xbf, 0x07, 0x51, - 0x9f, 0xbb, 0xd0, 0xc7, 0x39, 0x96, 0xfa, 0xdc, 0x45, 0xd4, 0xbf, 0xbc, 0xfa, 0xee, 0x97, 0xdb, - 0x17, 0x8e, 0xb0, 0x58, 0x61, 0xfd, 0x7d, 0x58, 0xd5, 0x63, 0xd4, 0x17, 0x41, 0x10, 0x5e, 0x9f, - 0x3a, 0xf2, 0xed, 0x73, 0xf5, 0x49, 0x8d, 0x65, 0x28, 0x1f, 0x09, 0x3f, 0xf0, 0x5c, 0xfa, 0x9c, - 0x08, 0x40, 0xb1, 0x3b, 0x34, 0x7d, 0x7c, 0xc7, 0xfa, 0x57, 0xf5, 0xe8, 0x3e, 0xb9, 0x08, 0xf7, - 0x14, 0x5c, 0x78, 0xfa, 0x6b, 0x3a, 0xa6, 0x34, 0x35, 0xb9, 0xf4, 0x85, 0x39, 0x62, 0xd9, 0xf5, - 0x2d, 0xa8, 0xd0, 0xed, 0xab, 0xc7, 0xb6, 0x6b, 0x61, 0xcf, 0x37, 0xf5, 0x4d, 0x00, 0xfa, 0xcc, - 0xd3, 0x39, 0x8d, 0x63, 0x59, 0x7d, 0x10, 0x97, 0x65, 0xf9, 0x6d, 0xe0, 0xad, 0x89, 0xf4, 0x46, - 0x26, 0xdd, 0x1a, 0x76, 0x2e, 0xd5, 0xc7, 0x93, 0x73, 0xeb, 0xdf, 0x02, 0xae, 0x92, 0x7a, 0x96, - 0xb8, 0xb0, 0xdd, 0x41, 0xf4, 0xb9, 0x02, 0xa0, 0x6f, 0x8f, 0x58, 0xe2, 0x22, 0xbc, 0x3a, 0x17, - 0x02, 0xe1, 0x17, 0x50, 0x76, 0xbc, 0x89, 0x8b, 0x8d, 0x7e, 0x0a, 0x37, 0x95, 0x6e, 0x62, 0x2f, - 0xe8, 0x4a, 0xea, 0x95, 0x99, 0x06, 0x75, 0x75, 0x4e, 0x4e, 0x82, 0x88, 0x96, 0x65, 0xb0, 0x61, - 0x51, 0x94, 0x1e, 0xe3, 0xb3, 0xeb, 0x4d, 0xb8, 0x31, 0x27, 0x55, 0x42, 0xbb, 0x81, 0x0a, 0x18, - 0xd9, 0xd2, 0xfa, 0x47, 0xb0, 0xa6, 0xec, 0xd7, 0x81, 0xba, 0x34, 0x18, 0x0e, 0xdb, 0xb3, 0xce, - 0x4e, 0x47, 0x8d, 0xf4, 0x56, 0x7b, 0x6f, 0xef, 0xc9, 0x5e, 0xcb, 0x60, 0x19, 0x52, 0xa4, 0xc3, - 0xde, 0xf1, 0xd6, 0xe1, 0xc1, 0x41, 0x7b, 0xab, 0xd7, 0xde, 0x66, 0xd9, 0xcd, 0xf5, 0x7f, 0xf3, - 0xb3, 0x7b, 0x99, 0x9f, 0xfe, 0xec, 0x5e, 0xe6, 0x3f, 0xff, 0xec, 0x5e, 0xe6, 0x47, 0x3f, 0xbf, - 0xb7, 0xf4, 0xd3, 0x9f, 0xdf, 0x5b, 0xfa, 0xf7, 0x3f, 0xbf, 0xb7, 0xf4, 0x29, 0x9b, 0xfe, 0x0f, - 0x3f, 0x27, 0x45, 0x8a, 0x46, 0xde, 0xfe, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x25, 0x33, 0x79, - 0xb0, 0xfc, 0x67, 0x00, 0x00, + // 9260 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x7d, 0x5b, 0x6c, 0x23, 0xd9, + 0x95, 0x98, 0xf8, 0x26, 0x0f, 0x45, 0xe9, 0xea, 0xf6, 0x8b, 0x43, 0xb7, 0x3b, 0x6d, 0x7a, 0x3c, + 0xd3, 0x6e, 0x8f, 0xd5, 0x33, 0x3d, 0x33, 0x9e, 0xf1, 0xd8, 0x33, 0x36, 0x45, 0x51, 0x2d, 0x4e, + 0x4b, 0xa2, 0x5c, 0x64, 0x77, 0x7b, 0x06, 0xbb, 0x51, 0x4a, 0xac, 0x2b, 0xb2, 0xac, 0x62, 0x15, + 0x5d, 0x75, 0xa9, 0x96, 0x8c, 0x24, 0x70, 0x36, 0xc9, 0x6e, 0xf6, 0xcf, 0x09, 0xb2, 0xd9, 0x2c, + 0x82, 0x60, 0xed, 0x8f, 0x00, 0x41, 0x76, 0x83, 0x7c, 0x2d, 0x92, 0xcd, 0x03, 0x48, 0xf6, 0x2b, + 0xc0, 0xfe, 0x38, 0xf9, 0x0a, 0x90, 0x00, 0x09, 0x6c, 0x20, 0x3f, 0x41, 0xb2, 0xd8, 0x7c, 0x19, + 0x41, 0x3e, 0x82, 0x73, 0xee, 0xad, 0x07, 0x1f, 0x52, 0xb3, 0x67, 0x77, 0x83, 0xfd, 0x12, 0xef, + 0xa9, 0x73, 0x4e, 0xdd, 0xc7, 0xb9, 0xe7, 0x9e, 0xd7, 0x2d, 0xc1, 0xab, 0xe3, 0xd3, 0xc1, 0x03, + 0xc7, 0x3e, 0x7e, 0x30, 0x3e, 0x7e, 0x30, 0xf2, 0x2c, 0xe1, 0x3c, 0x18, 0xfb, 0x9e, 0xf4, 0x02, + 0xd5, 0x08, 0x36, 0xa9, 0xc5, 0x2b, 0xa6, 0x7b, 0x21, 0x2f, 0xc6, 0x62, 0x93, 0xa0, 0xb5, 0xdb, + 0x03, 0xcf, 0x1b, 0x38, 0x42, 0xa1, 0x1e, 0x4f, 0x4e, 0x1e, 0x04, 0xd2, 0x9f, 0xf4, 0xa5, 0x42, + 0xae, 0xff, 0x34, 0x0b, 0x37, 0xbb, 0x23, 0xd3, 0x97, 0x5b, 0x8e, 0xd7, 0x3f, 0xed, 0xba, 0xe6, + 0x38, 0x18, 0x7a, 0x72, 0xcb, 0x0c, 0x04, 0x7f, 0x03, 0xf2, 0xc7, 0x08, 0x0c, 0xaa, 0xa9, 0xbb, + 0x99, 0x7b, 0xe5, 0x87, 0xd7, 0x37, 0xa7, 0x18, 0x6f, 0x12, 0x85, 0xa1, 0x71, 0xf8, 0x5b, 0x50, + 0xb0, 0x84, 0x34, 0x6d, 0x27, 0xa8, 0xa6, 0xef, 0xa6, 0xee, 0x95, 0x1f, 0xde, 0xda, 0x54, 0x2f, + 0xde, 0x0c, 0x5f, 0xbc, 0xd9, 0xa5, 0x17, 0x1b, 0x21, 0x1e, 0x7f, 0x0f, 0x8a, 0x27, 0xb6, 0x23, + 0x1e, 0x8b, 0x8b, 0xa0, 0x9a, 0xb9, 0x92, 0x66, 0x2b, 0x5d, 0x4d, 0x19, 0x11, 0x32, 0x6f, 0xc2, + 0x9a, 0x38, 0x97, 0xbe, 0x69, 0x08, 0xc7, 0x94, 0xb6, 0xe7, 0x06, 0xd5, 0x2c, 0xf5, 0xf0, 0xd6, + 0x4c, 0x0f, 0xc3, 0xe7, 0x44, 0x3e, 0x43, 0xc2, 0xef, 0x42, 0xd9, 0x3b, 0xfe, 0x9e, 0xe8, 0xcb, + 0xde, 0xc5, 0x58, 0x04, 0xd5, 0xdc, 0xdd, 0xcc, 0xbd, 0x92, 0x91, 0x04, 0xf1, 0xaf, 0x43, 0xb9, + 0xef, 0x39, 0x8e, 0xe8, 0xab, 0x77, 0xe4, 0xaf, 0x1e, 0x56, 0x12, 0x97, 0xbf, 0x03, 0x37, 0x7c, + 0x31, 0xf2, 0xce, 0x84, 0xd5, 0x8c, 0xa0, 0x34, 0xce, 0x22, 0xbd, 0x66, 0xf1, 0x43, 0xde, 0x80, + 0x8a, 0xaf, 0xfb, 0xb7, 0x67, 0xbb, 0xa7, 0x41, 0xb5, 0x40, 0xc3, 0xfa, 0xdc, 0x25, 0xc3, 0x42, + 0x1c, 0x63, 0x9a, 0x82, 0x33, 0xc8, 0x9c, 0x8a, 0x8b, 0x6a, 0xe9, 0x6e, 0xea, 0x5e, 0xc9, 0xc0, + 0x9f, 0xfc, 0x03, 0xa8, 0x7a, 0xbe, 0x3d, 0xb0, 0x5d, 0xd3, 0x69, 0xfa, 0xc2, 0x94, 0xc2, 0xea, + 0xd9, 0x23, 0x11, 0x48, 0x73, 0x34, 0xae, 0xc2, 0xdd, 0xd4, 0xbd, 0x8c, 0x71, 0xe9, 0x73, 0xfe, + 0xb6, 0x5a, 0xa1, 0xb6, 0x7b, 0xe2, 0x55, 0xcb, 0x7a, 0xf8, 0xd3, 0x7d, 0xd9, 0xd1, 0x8f, 0x8d, + 0x08, 0xb1, 0xfe, 0x8b, 0x34, 0xe4, 0xbb, 0xc2, 0xf4, 0xfb, 0xc3, 0xda, 0xaf, 0xa5, 0x20, 0x6f, + 0x88, 0x60, 0xe2, 0x48, 0x5e, 0x83, 0xa2, 0x9a, 0xdb, 0xb6, 0x55, 0x4d, 0x51, 0xef, 0xa2, 0xf6, + 0x67, 0x91, 0x9d, 0x4d, 0xc8, 0x8e, 0x84, 0x34, 0xab, 0x19, 0x9a, 0xa1, 0xda, 0x4c, 0xaf, 0xd4, + 0xeb, 0x37, 0xf7, 0x85, 0x34, 0x0d, 0xc2, 0xab, 0xfd, 0x3c, 0x05, 0x59, 0x6c, 0xf2, 0xdb, 0x50, + 0x1a, 0xda, 0x83, 0xa1, 0x63, 0x0f, 0x86, 0x52, 0x77, 0x24, 0x06, 0xf0, 0x8f, 0x60, 0x3d, 0x6a, + 0x18, 0xa6, 0x3b, 0x10, 0xd8, 0xa3, 0x45, 0xc2, 0x4f, 0x0f, 0x8d, 0x59, 0x64, 0x5e, 0x85, 0x02, + 0xed, 0x87, 0xb6, 0x45, 0x12, 0x5d, 0x32, 0xc2, 0x26, 0x8a, 0x5b, 0xb8, 0x52, 0x8f, 0xc5, 0x45, + 0x35, 0x4b, 0x4f, 0x93, 0x20, 0xde, 0x80, 0xf5, 0xb0, 0xb9, 0xad, 0x67, 0x23, 0x77, 0xf5, 0x6c, + 0xcc, 0xe2, 0xd7, 0x7f, 0xb8, 0x0f, 0x39, 0xda, 0x96, 0x7c, 0x0d, 0xd2, 0x76, 0x38, 0xd1, 0x69, + 0xdb, 0xe2, 0x0f, 0x20, 0x7f, 0x62, 0x0b, 0xc7, 0x7a, 0xe1, 0x0c, 0x6b, 0x34, 0xde, 0x82, 0x55, + 0x5f, 0x04, 0xd2, 0xb7, 0xb5, 0xf4, 0xab, 0x0d, 0xfa, 0x85, 0x45, 0x3a, 0x60, 0xd3, 0x48, 0x20, + 0x1a, 0x53, 0x64, 0x38, 0xec, 0xfe, 0xd0, 0x76, 0x2c, 0x5f, 0xb8, 0x6d, 0x4b, 0xed, 0xd3, 0x92, + 0x91, 0x04, 0xf1, 0x7b, 0xb0, 0x7e, 0x6c, 0xf6, 0x4f, 0x07, 0xbe, 0x37, 0x71, 0x71, 0x43, 0x78, + 0x3e, 0x0d, 0xbb, 0x64, 0xcc, 0x82, 0xf9, 0x9b, 0x90, 0x33, 0x1d, 0x7b, 0xe0, 0xd2, 0x4e, 0x5c, + 0x9b, 0x5b, 0x74, 0xd5, 0x97, 0x06, 0x62, 0x18, 0x0a, 0x91, 0xef, 0x42, 0xe5, 0x4c, 0xf8, 0xd2, + 0xee, 0x9b, 0x0e, 0xc1, 0xab, 0x05, 0xa2, 0xac, 0x2f, 0xa4, 0x7c, 0x9a, 0xc4, 0x34, 0xa6, 0x09, + 0x79, 0x1b, 0x20, 0x40, 0x35, 0x49, 0xcb, 0xa9, 0xf7, 0xc2, 0xeb, 0x0b, 0xd9, 0x34, 0x3d, 0x57, + 0x0a, 0x57, 0x6e, 0x76, 0x23, 0xf4, 0xdd, 0x15, 0x23, 0x41, 0xcc, 0xdf, 0x83, 0xac, 0x14, 0xe7, + 0xb2, 0xba, 0x76, 0xc5, 0x8c, 0x86, 0x4c, 0x7a, 0xe2, 0x5c, 0xee, 0xae, 0x18, 0x44, 0x80, 0x84, + 0xb8, 0xc9, 0xaa, 0xeb, 0x4b, 0x10, 0xe2, 0xbe, 0x44, 0x42, 0x24, 0xe0, 0x1f, 0x42, 0xde, 0x31, + 0x2f, 0xbc, 0x89, 0xac, 0x32, 0x22, 0xfd, 0xe2, 0x95, 0xa4, 0x7b, 0x84, 0xba, 0xbb, 0x62, 0x68, + 0x22, 0xfe, 0x0e, 0x64, 0x2c, 0xfb, 0xac, 0xba, 0x41, 0xb4, 0x77, 0xaf, 0xa4, 0xdd, 0xb6, 0xcf, + 0x76, 0x57, 0x0c, 0x44, 0xe7, 0x4d, 0x28, 0x1e, 0x7b, 0xde, 0xe9, 0xc8, 0xf4, 0x4f, 0xab, 0x9c, + 0x48, 0xbf, 0x74, 0x25, 0xe9, 0x96, 0x46, 0xde, 0x5d, 0x31, 0x22, 0x42, 0x1c, 0xb2, 0xdd, 0xf7, + 0xdc, 0xea, 0xb5, 0x25, 0x86, 0xdc, 0xee, 0x7b, 0x2e, 0x0e, 0x19, 0x09, 0x90, 0xd0, 0xb1, 0xdd, + 0xd3, 0xea, 0xf5, 0x25, 0x08, 0x51, 0x73, 0x22, 0x21, 0x12, 0x60, 0xb7, 0x2d, 0x53, 0x9a, 0x67, + 0xb6, 0x78, 0x5e, 0xbd, 0xb1, 0x44, 0xb7, 0xb7, 0x35, 0x32, 0x76, 0x3b, 0x24, 0x44, 0x26, 0xe1, + 0xd6, 0xac, 0xde, 0x5c, 0x82, 0x49, 0xa8, 0xd1, 0x91, 0x49, 0x48, 0xc8, 0xff, 0x22, 0x6c, 0x9c, + 0x08, 0x53, 0x4e, 0x7c, 0x61, 0xc5, 0x07, 0xdd, 0x2d, 0xe2, 0xb6, 0x79, 0xf5, 0xda, 0xcf, 0x52, + 0xed, 0xae, 0x18, 0xf3, 0xac, 0xf8, 0x07, 0x90, 0x73, 0x4c, 0x29, 0xce, 0xab, 0x55, 0xe2, 0x59, + 0x7f, 0x81, 0x50, 0x48, 0x71, 0xbe, 0xbb, 0x62, 0x28, 0x12, 0xfe, 0x5d, 0x58, 0x97, 0xe6, 0xb1, + 0x23, 0x3a, 0x27, 0x1a, 0x21, 0xa8, 0xbe, 0x42, 0x5c, 0xde, 0xb8, 0x5a, 0x9c, 0xa7, 0x69, 0x76, + 0x57, 0x8c, 0x59, 0x36, 0xd8, 0x2b, 0x02, 0x55, 0x6b, 0x4b, 0xf4, 0x8a, 0xf8, 0x61, 0xaf, 0x88, + 0x84, 0xef, 0x41, 0x99, 0x7e, 0x34, 0x3d, 0x67, 0x32, 0x72, 0xab, 0x9f, 0x23, 0x0e, 0xf7, 0x5e, + 0xcc, 0x41, 0xe1, 0xef, 0xae, 0x18, 0x49, 0x72, 0x5c, 0x44, 0x6a, 0x1a, 0xde, 0xf3, 0xea, 0xed, + 0x25, 0x16, 0xb1, 0xa7, 0x91, 0x71, 0x11, 0x43, 0x42, 0xdc, 0x7a, 0xcf, 0x6d, 0x6b, 0x20, 0x64, + 0xf5, 0xf3, 0x4b, 0x6c, 0xbd, 0x67, 0x84, 0x8a, 0x5b, 0x4f, 0x11, 0xa1, 0x18, 0xf7, 0x87, 0xa6, + 0xac, 0xde, 0x59, 0x42, 0x8c, 0x9b, 0x43, 0x93, 0x74, 0x05, 0x12, 0xd4, 0x7e, 0x00, 0xab, 0x49, + 0xad, 0xcc, 0x39, 0x64, 0x7d, 0x61, 0xaa, 0x13, 0xa1, 0x68, 0xd0, 0x6f, 0x84, 0x09, 0xcb, 0x96, + 0x74, 0x22, 0x14, 0x0d, 0xfa, 0xcd, 0x6f, 0x42, 0x5e, 0xd9, 0x26, 0xa4, 0xf0, 0x8b, 0x86, 0x6e, + 0x21, 0xae, 0xe5, 0x9b, 0x03, 0x3a, 0xb7, 0x8a, 0x06, 0xfd, 0x46, 0x5c, 0xcb, 0xf7, 0xc6, 0x1d, + 0x97, 0x14, 0x76, 0xd1, 0xd0, 0xad, 0xda, 0xcf, 0x3f, 0x84, 0x82, 0xee, 0x54, 0xed, 0x1f, 0xa6, + 0x20, 0xaf, 0x14, 0x0a, 0xff, 0x16, 0xe4, 0x02, 0x79, 0xe1, 0x08, 0xea, 0xc3, 0xda, 0xc3, 0x2f, + 0x2f, 0xa1, 0x84, 0x36, 0xbb, 0x48, 0x60, 0x28, 0xba, 0xba, 0x01, 0x39, 0x6a, 0xf3, 0x02, 0x64, + 0x0c, 0xef, 0x39, 0x5b, 0xe1, 0x00, 0x79, 0xb5, 0x58, 0x2c, 0x85, 0xc0, 0x6d, 0xfb, 0x8c, 0xa5, + 0x11, 0xb8, 0x2b, 0x4c, 0x4b, 0xf8, 0x2c, 0xc3, 0x2b, 0x50, 0x0a, 0x97, 0x25, 0x60, 0x59, 0xce, + 0x60, 0x35, 0xb1, 0xe0, 0x01, 0xcb, 0xd5, 0xfe, 0x77, 0x16, 0xb2, 0xb8, 0xff, 0xf9, 0xab, 0x50, + 0x91, 0xa6, 0x3f, 0x10, 0xca, 0x10, 0x8e, 0x8c, 0x94, 0x69, 0x20, 0xff, 0x30, 0x1c, 0x43, 0x9a, + 0xc6, 0xf0, 0xfa, 0x0b, 0xf5, 0xca, 0xd4, 0x08, 0x12, 0xa7, 0x70, 0x66, 0xb9, 0x53, 0x78, 0x07, + 0x8a, 0xa8, 0xce, 0xba, 0xf6, 0x0f, 0x04, 0x4d, 0xfd, 0xda, 0xc3, 0xfb, 0x2f, 0x7e, 0x65, 0x5b, + 0x53, 0x18, 0x11, 0x2d, 0x6f, 0x43, 0xa9, 0x6f, 0xfa, 0x16, 0x75, 0x86, 0x56, 0x6b, 0xed, 0xe1, + 0x57, 0x5e, 0xcc, 0xa8, 0x19, 0x92, 0x18, 0x31, 0x35, 0xef, 0x40, 0xd9, 0x12, 0x41, 0xdf, 0xb7, + 0xc7, 0xa4, 0xde, 0xd4, 0x59, 0xfc, 0xd5, 0x17, 0x33, 0xdb, 0x8e, 0x89, 0x8c, 0x24, 0x07, 0xb4, + 0xc8, 0xfc, 0x48, 0xbf, 0x15, 0xc8, 0x40, 0x88, 0x01, 0xf5, 0xf7, 0xa0, 0x18, 0x8e, 0x87, 0xaf, + 0x42, 0x11, 0xff, 0x1e, 0x78, 0xae, 0x60, 0x2b, 0xb8, 0xb6, 0xd8, 0xea, 0x8e, 0x4c, 0xc7, 0x61, + 0x29, 0xbe, 0x06, 0x80, 0xcd, 0x7d, 0x61, 0xd9, 0x93, 0x11, 0x4b, 0xd7, 0xbf, 0x11, 0x4a, 0x4b, + 0x11, 0xb2, 0x87, 0xe6, 0x00, 0x29, 0x56, 0xa1, 0x18, 0xaa, 0x6b, 0x96, 0x42, 0xfa, 0x6d, 0x33, + 0x18, 0x1e, 0x7b, 0xa6, 0x6f, 0xb1, 0x34, 0x2f, 0x43, 0xa1, 0xe1, 0xf7, 0x87, 0xf6, 0x99, 0x60, + 0x99, 0xfa, 0x03, 0x28, 0x27, 0xfa, 0x8b, 0x2c, 0xf4, 0x4b, 0x4b, 0x90, 0x6b, 0x58, 0x96, 0xb0, + 0x58, 0x0a, 0x09, 0xf4, 0x00, 0x59, 0xba, 0xfe, 0x15, 0x28, 0x45, 0xb3, 0x85, 0xe8, 0x78, 0x70, + 0xb3, 0x15, 0xfc, 0x85, 0x60, 0x96, 0x42, 0xa9, 0x6c, 0xbb, 0x8e, 0xed, 0x0a, 0x96, 0xae, 0xfd, + 0x25, 0x12, 0x55, 0xfe, 0xcd, 0xe9, 0x0d, 0xf1, 0xda, 0x8b, 0x4e, 0xd6, 0xe9, 0xdd, 0xf0, 0xb9, + 0xc4, 0xf8, 0xf6, 0x6c, 0xea, 0x5c, 0x11, 0xb2, 0xdb, 0x9e, 0x0c, 0x58, 0xaa, 0xf6, 0x3f, 0xd2, + 0x50, 0x0c, 0x0f, 0x54, 0xf4, 0x09, 0x26, 0xbe, 0xa3, 0x05, 0x1a, 0x7f, 0xf2, 0xeb, 0x90, 0x93, + 0xb6, 0xd4, 0x62, 0x5c, 0x32, 0x54, 0x03, 0x6d, 0xb5, 0xe4, 0xca, 0x2a, 0x03, 0x76, 0x76, 0xa9, + 0xec, 0x91, 0x39, 0x10, 0xbb, 0x66, 0x30, 0xd4, 0x26, 0x6c, 0x0c, 0x40, 0xfa, 0x13, 0xf3, 0x0c, + 0x65, 0x8e, 0x9e, 0x2b, 0x2b, 0x2e, 0x09, 0xe2, 0x6f, 0x43, 0x16, 0x07, 0xa8, 0x85, 0xe6, 0x2f, + 0xcc, 0x0c, 0x18, 0xc5, 0xe4, 0xd0, 0x17, 0xb8, 0x3c, 0x9b, 0xe8, 0x81, 0x19, 0x84, 0xcc, 0x5f, + 0x83, 0x35, 0xb5, 0x09, 0x3b, 0xa1, 0xff, 0x50, 0x20, 0xce, 0x33, 0x50, 0xde, 0xc0, 0xe9, 0x34, + 0xa5, 0xa8, 0x16, 0x97, 0x90, 0xef, 0x70, 0x72, 0x36, 0xbb, 0x48, 0x62, 0x28, 0xca, 0xfa, 0xbb, + 0x38, 0xa7, 0xa6, 0x14, 0xb8, 0xcc, 0xad, 0xd1, 0x58, 0x5e, 0x28, 0xa1, 0xd9, 0x11, 0xb2, 0x3f, + 0xb4, 0xdd, 0x01, 0x4b, 0xa9, 0x29, 0xc6, 0x45, 0x24, 0x14, 0xdf, 0xf7, 0x7c, 0x96, 0xa9, 0xd5, + 0x20, 0x8b, 0x32, 0x8a, 0x4a, 0xd2, 0x35, 0x47, 0x42, 0xcf, 0x34, 0xfd, 0xae, 0x5d, 0x83, 0x8d, + 0xb9, 0xf3, 0xb8, 0xf6, 0xfb, 0x79, 0x25, 0x21, 0x48, 0x41, 0xb6, 0xa0, 0xa6, 0x20, 0x33, 0xef, + 0xa5, 0x74, 0x0c, 0x72, 0x99, 0xd6, 0x31, 0x1f, 0x42, 0x0e, 0x07, 0x16, 0xaa, 0x98, 0x25, 0xc8, + 0xf7, 0x11, 0xdd, 0x50, 0x54, 0xe8, 0xc1, 0xf4, 0x87, 0xa2, 0x7f, 0x2a, 0x2c, 0xad, 0xeb, 0xc3, + 0x26, 0x0a, 0x4d, 0x3f, 0x61, 0x9e, 0xab, 0x06, 0x89, 0x44, 0xdf, 0x73, 0x5b, 0x23, 0xef, 0x7b, + 0x36, 0xad, 0x2b, 0x8a, 0x44, 0x08, 0x08, 0x9f, 0xb6, 0x51, 0x46, 0xf4, 0xb2, 0xc5, 0x80, 0x5a, + 0x0b, 0x72, 0xf4, 0x6e, 0xdc, 0x09, 0xaa, 0xcf, 0x2a, 0xd2, 0xf0, 0xda, 0x72, 0x7d, 0xd6, 0x5d, + 0xae, 0xfd, 0x6e, 0x1a, 0xb2, 0xd8, 0xe6, 0xf7, 0x21, 0xe7, 0xa3, 0x1f, 0x46, 0xd3, 0x79, 0x99, + 0xcf, 0xa6, 0x50, 0xf8, 0xb7, 0xb4, 0x28, 0xa6, 0x97, 0x10, 0x96, 0xe8, 0x8d, 0x49, 0xb1, 0xbc, + 0x0e, 0xb9, 0xb1, 0xe9, 0x9b, 0x23, 0xbd, 0x4f, 0x54, 0xa3, 0xfe, 0xe3, 0x14, 0x64, 0x11, 0x89, + 0x6f, 0x40, 0xa5, 0x2b, 0x7d, 0xfb, 0x54, 0xc8, 0xa1, 0xef, 0x4d, 0x06, 0x43, 0x25, 0x49, 0x8f, + 0xc5, 0x85, 0xd2, 0x37, 0x4a, 0x21, 0x48, 0xd3, 0xb1, 0xfb, 0x2c, 0x8d, 0x52, 0xb5, 0xe5, 0x39, + 0x16, 0xcb, 0xf0, 0x75, 0x28, 0x3f, 0x71, 0x2d, 0xe1, 0x07, 0x7d, 0xcf, 0x17, 0x16, 0xcb, 0xea, + 0xdd, 0x7d, 0xca, 0x72, 0x74, 0x96, 0x89, 0x73, 0x49, 0xbe, 0x10, 0xcb, 0xf3, 0x6b, 0xb0, 0xbe, + 0x35, 0xed, 0x20, 0xb1, 0x02, 0xea, 0xa4, 0x7d, 0xe1, 0xa2, 0x90, 0xb1, 0xa2, 0x12, 0x62, 0xef, + 0x7b, 0x36, 0x2b, 0xe1, 0xcb, 0xd4, 0x3e, 0x61, 0x50, 0xff, 0xd7, 0xa9, 0x50, 0x73, 0x54, 0xa0, + 0x74, 0x68, 0xfa, 0xe6, 0xc0, 0x37, 0xc7, 0xd8, 0xbf, 0x32, 0x14, 0xd4, 0xc1, 0xf9, 0x96, 0xd2, + 0x6e, 0xaa, 0xf1, 0x50, 0xe9, 0x46, 0xd5, 0x78, 0x9b, 0x65, 0xe2, 0xc6, 0x3b, 0x2c, 0x8b, 0xef, + 0xf8, 0xce, 0xc4, 0x93, 0x82, 0xe5, 0x48, 0xd7, 0x79, 0x96, 0x60, 0x79, 0x04, 0xf6, 0x50, 0xa3, + 0xb0, 0x02, 0x8e, 0xb9, 0x89, 0xf2, 0x73, 0xec, 0x9d, 0xb3, 0x22, 0x76, 0x03, 0xa7, 0x51, 0x58, + 0xac, 0x84, 0x4f, 0x0e, 0x26, 0xa3, 0x63, 0x81, 0xc3, 0x04, 0x7c, 0xd2, 0xf3, 0x06, 0x03, 0x47, + 0xb0, 0x32, 0xce, 0x41, 0x42, 0xf9, 0xb2, 0x55, 0xd2, 0xb4, 0xa6, 0xe3, 0x78, 0x13, 0xc9, 0x2a, + 0xb5, 0x5f, 0x64, 0x20, 0x8b, 0xde, 0x0d, 0xee, 0x9d, 0x21, 0xea, 0x19, 0xbd, 0x77, 0xf0, 0x77, + 0xb4, 0x03, 0xd3, 0xf1, 0x0e, 0xe4, 0x1f, 0xe8, 0x95, 0xce, 0x2c, 0xa1, 0x65, 0x91, 0x71, 0x72, + 0x91, 0x39, 0x64, 0x47, 0xf6, 0x48, 0x68, 0x5d, 0x47, 0xbf, 0x11, 0x16, 0xe0, 0x79, 0x9c, 0xa3, + 0xe0, 0x09, 0xfd, 0xc6, 0x5d, 0x63, 0xe2, 0xb1, 0xd0, 0x90, 0xb4, 0x07, 0x32, 0x46, 0xd8, 0x5c, + 0xa0, 0xbd, 0x4a, 0x0b, 0xb5, 0xd7, 0x87, 0xa1, 0xf6, 0x2a, 0x2c, 0xb1, 0xeb, 0xa9, 0x9b, 0x49, + 0xcd, 0x15, 0x2b, 0x8d, 0xe2, 0xf2, 0xe4, 0x89, 0xc3, 0x64, 0x5b, 0x4b, 0x6d, 0x7c, 0xd0, 0x15, + 0xd5, 0x2c, 0xb3, 0x14, 0xae, 0x26, 0x6d, 0x57, 0xa5, 0xf3, 0x9e, 0xda, 0x96, 0xf0, 0x58, 0x86, + 0x0e, 0xc2, 0x89, 0x65, 0x7b, 0x2c, 0x8b, 0x96, 0xd7, 0xe1, 0xf6, 0x0e, 0xcb, 0xd5, 0x5f, 0x4b, + 0x1c, 0x49, 0x8d, 0x89, 0xf4, 0x14, 0x1b, 0x12, 0xdf, 0x94, 0x92, 0xc6, 0x63, 0x61, 0xb1, 0x74, + 0xfd, 0x6b, 0x0b, 0xd4, 0x6c, 0x05, 0x4a, 0x4f, 0xc6, 0x8e, 0x67, 0x5a, 0x57, 0xe8, 0xd9, 0x55, + 0x80, 0xd8, 0xab, 0xae, 0xfd, 0xa2, 0x1e, 0x1f, 0xe7, 0x68, 0x8b, 0x06, 0xde, 0xc4, 0xef, 0x0b, + 0x52, 0x21, 0x25, 0x43, 0xb7, 0xf8, 0xb7, 0x21, 0x87, 0xcf, 0xc3, 0x30, 0xce, 0xfd, 0xa5, 0x7c, + 0xb9, 0xcd, 0xa7, 0xb6, 0x78, 0x6e, 0x28, 0x42, 0x7e, 0x07, 0xc0, 0xec, 0x4b, 0xfb, 0x4c, 0x20, + 0x50, 0x6f, 0xf6, 0x04, 0x84, 0xbf, 0x9b, 0x34, 0x5f, 0xae, 0x8e, 0x43, 0x26, 0xec, 0x1a, 0x6e, + 0x40, 0x19, 0xb7, 0xee, 0xb8, 0xe3, 0xe3, 0x6e, 0xaf, 0xae, 0x12, 0xe1, 0x9b, 0xcb, 0x75, 0xef, + 0x51, 0x44, 0x68, 0x24, 0x99, 0xf0, 0x27, 0xb0, 0xaa, 0x62, 0x6a, 0x9a, 0x69, 0x85, 0x98, 0xbe, + 0xb5, 0x1c, 0xd3, 0x4e, 0x4c, 0x69, 0x4c, 0xb1, 0x99, 0x0f, 0x4b, 0xe6, 0x5e, 0x3a, 0x2c, 0xf9, + 0x1a, 0xac, 0xf5, 0xa6, 0x77, 0x81, 0x3a, 0x2a, 0x66, 0xa0, 0xbc, 0x0e, 0xab, 0x76, 0x10, 0x47, + 0x45, 0x29, 0x46, 0x52, 0x34, 0xa6, 0x60, 0xb5, 0xff, 0x90, 0x87, 0x2c, 0xcd, 0xfc, 0x6c, 0x8c, + 0xab, 0x39, 0xa5, 0xd2, 0x1f, 0x2c, 0xbf, 0xd4, 0x33, 0x3b, 0x9e, 0x34, 0x48, 0x26, 0xa1, 0x41, + 0xbe, 0x0d, 0xb9, 0xc0, 0xf3, 0x65, 0xb8, 0xbc, 0x4b, 0x0a, 0x51, 0xd7, 0xf3, 0xa5, 0xa1, 0x08, + 0xf9, 0x0e, 0x14, 0x4e, 0x6c, 0x47, 0xe2, 0xa2, 0xa8, 0xc9, 0x7b, 0x63, 0x39, 0x1e, 0x3b, 0x44, + 0x64, 0x84, 0xc4, 0x7c, 0x2f, 0x29, 0x6c, 0x79, 0xe2, 0xb4, 0xb9, 0x1c, 0xa7, 0x45, 0x32, 0x78, + 0x1f, 0x58, 0xdf, 0x3b, 0x13, 0xbe, 0x91, 0x08, 0x4c, 0xaa, 0x43, 0x7a, 0x0e, 0xce, 0x6b, 0x50, + 0x1c, 0xda, 0x96, 0x40, 0x3b, 0x87, 0x74, 0x4c, 0xd1, 0x88, 0xda, 0xfc, 0x31, 0x14, 0xc9, 0x3f, + 0x40, 0xad, 0x58, 0x7a, 0xe9, 0xc9, 0x57, 0xae, 0x4a, 0xc8, 0x00, 0x5f, 0x44, 0x2f, 0xdf, 0xb1, + 0x25, 0xc5, 0xa7, 0x8b, 0x46, 0xd4, 0xc6, 0x0e, 0x93, 0xbc, 0x27, 0x3b, 0x5c, 0x56, 0x1d, 0x9e, + 0x85, 0xf3, 0x77, 0xe0, 0x06, 0xc1, 0x66, 0x0e, 0x49, 0xdc, 0x6a, 0xc8, 0x74, 0xf1, 0x43, 0x34, + 0x58, 0xc6, 0xe6, 0x40, 0xec, 0xd9, 0x23, 0x5b, 0x56, 0x2b, 0x77, 0x53, 0xf7, 0x72, 0x46, 0x0c, + 0xe0, 0x6f, 0xc0, 0x86, 0x25, 0x4e, 0xcc, 0x89, 0x23, 0x7b, 0x62, 0x34, 0x76, 0x4c, 0x29, 0xda, + 0x16, 0xc9, 0x68, 0xc9, 0x98, 0x7f, 0xc0, 0xdf, 0x84, 0x6b, 0x1a, 0xd8, 0x89, 0xb2, 0x0a, 0x6d, + 0x8b, 0xc2, 0x77, 0x25, 0x63, 0xd1, 0xa3, 0xfa, 0xbe, 0x56, 0xc3, 0x78, 0x80, 0xa2, 0x9f, 0x1a, + 0x2a, 0xd0, 0x40, 0xaa, 0x13, 0xf9, 0x91, 0xe9, 0x38, 0xc2, 0xbf, 0x50, 0x4e, 0xee, 0x63, 0xd3, + 0x3d, 0x36, 0x5d, 0x96, 0xa1, 0x33, 0xd6, 0x74, 0x84, 0x6b, 0x99, 0xbe, 0x3a, 0x91, 0x1f, 0xd1, + 0x81, 0x9e, 0xab, 0xdf, 0x83, 0x2c, 0x4d, 0x69, 0x09, 0x72, 0xca, 0x4b, 0x22, 0x8f, 0x59, 0x7b, + 0x48, 0xa4, 0x91, 0xf7, 0x70, 0xfb, 0xb1, 0x74, 0xed, 0x1f, 0xe5, 0xa1, 0x18, 0x4e, 0x5e, 0x98, + 0x43, 0x48, 0xc5, 0x39, 0x04, 0x34, 0xe3, 0x82, 0xa7, 0x76, 0x60, 0x1f, 0x6b, 0xb3, 0xb4, 0x68, + 0xc4, 0x00, 0xb4, 0x84, 0x9e, 0xdb, 0x96, 0x1c, 0xd2, 0x9e, 0xc9, 0x19, 0xaa, 0xc1, 0xef, 0xc1, + 0xba, 0x85, 0xf3, 0xe0, 0xf6, 0x9d, 0x89, 0x25, 0x7a, 0x78, 0x8a, 0xaa, 0x30, 0xc1, 0x2c, 0x98, + 0x7f, 0x02, 0x20, 0xed, 0x91, 0xd8, 0xf1, 0xfc, 0x91, 0x29, 0xb5, 0x6f, 0xf0, 0xf5, 0x97, 0x93, + 0xea, 0xcd, 0x5e, 0xc4, 0xc0, 0x48, 0x30, 0x43, 0xd6, 0xf8, 0x36, 0xcd, 0xba, 0xf0, 0x99, 0x58, + 0x6f, 0x47, 0x0c, 0x8c, 0x04, 0x33, 0xde, 0x83, 0xc2, 0x89, 0xe7, 0x8f, 0x26, 0x8e, 0xa9, 0xcf, + 0xdc, 0x0f, 0x5e, 0x92, 0xef, 0x8e, 0xa2, 0x26, 0xdd, 0x13, 0xb2, 0x8a, 0x63, 0xdc, 0xa5, 0x25, + 0x63, 0xdc, 0xf5, 0x5f, 0x02, 0x88, 0x7b, 0xc8, 0x6f, 0x02, 0xdf, 0xf7, 0x5c, 0x39, 0x6c, 0x1c, + 0x1f, 0xfb, 0x5b, 0xe2, 0xc4, 0xf3, 0xc5, 0xb6, 0x89, 0xc7, 0xeb, 0x0d, 0xd8, 0x88, 0xe0, 0x8d, + 0x13, 0x29, 0x7c, 0x04, 0x93, 0x08, 0x74, 0x87, 0x9e, 0x2f, 0x95, 0x8d, 0x47, 0x3f, 0x9f, 0x74, + 0x59, 0x06, 0x8f, 0xf4, 0x76, 0xb7, 0xc3, 0xb2, 0xf5, 0x7b, 0x00, 0xf1, 0xd4, 0x92, 0x2f, 0x44, + 0xbf, 0xde, 0x7a, 0xa8, 0x3d, 0x23, 0x6a, 0x3d, 0x7c, 0x87, 0xa5, 0xea, 0x3f, 0x4b, 0x41, 0x39, + 0x31, 0xa4, 0x69, 0x9f, 0xb9, 0xe9, 0x4d, 0x5c, 0xa9, 0x9c, 0x74, 0xfa, 0xf9, 0xd4, 0x74, 0x26, + 0x78, 0xb8, 0x6f, 0x40, 0x85, 0xda, 0xdb, 0x76, 0x20, 0x6d, 0xb7, 0x2f, 0x59, 0x26, 0x42, 0x51, + 0x86, 0x41, 0x36, 0x42, 0x39, 0xf0, 0x34, 0x28, 0xc7, 0x19, 0xac, 0x1e, 0x0a, 0xbf, 0x2f, 0x42, + 0x24, 0x32, 0x86, 0x35, 0x24, 0x42, 0x53, 0xc6, 0xb0, 0x29, 0x87, 0xdd, 0xc9, 0x88, 0x15, 0xd1, + 0xa8, 0xc4, 0x46, 0xe3, 0x4c, 0xf8, 0x68, 0xcb, 0x94, 0xf0, 0x3d, 0x08, 0xc0, 0xdd, 0x60, 0xba, + 0x0c, 0x42, 0xec, 0x7d, 0xdb, 0x65, 0xe5, 0xa8, 0x61, 0x9e, 0xb3, 0x55, 0xec, 0x3f, 0xb9, 0x0e, + 0xac, 0x52, 0xfb, 0xef, 0x19, 0xc8, 0xa2, 0x5e, 0x47, 0x5f, 0x37, 0xa9, 0x84, 0xd4, 0x5e, 0x49, + 0x82, 0x3e, 0xdb, 0x69, 0x84, 0xbc, 0x93, 0xa7, 0xd1, 0xfb, 0x50, 0xee, 0x4f, 0x02, 0xe9, 0x8d, + 0xe8, 0x28, 0xd6, 0xd9, 0xae, 0x9b, 0x73, 0x51, 0x23, 0x9a, 0x4e, 0x23, 0x89, 0xca, 0xdf, 0x85, + 0xfc, 0x89, 0x92, 0x7a, 0x15, 0x37, 0xfa, 0xfc, 0x25, 0xa7, 0xb5, 0x96, 0x6c, 0x8d, 0x8c, 0xe3, + 0xb2, 0xe7, 0x76, 0x6c, 0x12, 0xa4, 0x4f, 0xdd, 0x7c, 0x74, 0xea, 0xfe, 0x12, 0xac, 0x09, 0x9c, + 0xf0, 0x43, 0xc7, 0xec, 0x8b, 0x91, 0x70, 0xc3, 0x6d, 0xf6, 0xce, 0x4b, 0x8c, 0x98, 0x56, 0x8c, + 0x86, 0x3d, 0xc3, 0x0b, 0x35, 0x8f, 0xeb, 0xe1, 0xe1, 0x1f, 0x3a, 0xf6, 0x45, 0x23, 0x06, 0xd4, + 0xbf, 0xa4, 0xf5, 0x65, 0x01, 0x32, 0x8d, 0xa0, 0xaf, 0x23, 0x20, 0x22, 0xe8, 0x2b, 0xf7, 0xaa, + 0x49, 0xd3, 0xc1, 0xd2, 0xf5, 0xb7, 0xa0, 0x14, 0xbd, 0x01, 0x85, 0xe7, 0xc0, 0x93, 0xdd, 0xb1, + 0xe8, 0xdb, 0x27, 0xb6, 0xb0, 0x94, 0x7c, 0x76, 0xa5, 0xe9, 0x4b, 0x15, 0x44, 0x6c, 0xb9, 0x16, + 0x4b, 0xd7, 0x7e, 0xa7, 0x08, 0x79, 0x75, 0xf8, 0xea, 0x01, 0x97, 0xa2, 0x01, 0x7f, 0x07, 0x8a, + 0xde, 0x58, 0xf8, 0xa6, 0xf4, 0x7c, 0x1d, 0xb9, 0x79, 0xf7, 0x65, 0x0e, 0xf3, 0xcd, 0x8e, 0x26, + 0x36, 0x22, 0x36, 0xb3, 0xd2, 0x94, 0x9e, 0x97, 0xa6, 0xfb, 0xc0, 0xc2, 0x73, 0xfb, 0xd0, 0x47, + 0x3a, 0x79, 0xa1, 0xfd, 0xf0, 0x39, 0x38, 0xef, 0x41, 0xa9, 0xef, 0xb9, 0x96, 0x1d, 0x45, 0x71, + 0xd6, 0x1e, 0x7e, 0xed, 0xa5, 0x7a, 0xd8, 0x0c, 0xa9, 0x8d, 0x98, 0x11, 0x7f, 0x03, 0x72, 0x67, + 0x28, 0x66, 0x24, 0x4f, 0x97, 0x0b, 0xa1, 0x42, 0xe2, 0x9f, 0x42, 0xf9, 0xfb, 0x13, 0xbb, 0x7f, + 0xda, 0x49, 0x46, 0x09, 0xdf, 0x7f, 0xa9, 0x5e, 0x7c, 0x27, 0xa6, 0x37, 0x92, 0xcc, 0x12, 0xa2, + 0x5d, 0xf8, 0x13, 0x88, 0x76, 0x71, 0x5e, 0xb4, 0x0d, 0xa8, 0xb8, 0x22, 0x90, 0xc2, 0xda, 0xd1, + 0xb6, 0x1a, 0x7c, 0x06, 0x5b, 0x6d, 0x9a, 0x45, 0xfd, 0x8b, 0x50, 0x0c, 0x17, 0x9c, 0xe7, 0x21, + 0x7d, 0x80, 0x4e, 0x51, 0x1e, 0xd2, 0x1d, 0x5f, 0x49, 0x5b, 0x03, 0xa5, 0xad, 0xfe, 0x47, 0x29, + 0x28, 0x45, 0x93, 0x3e, 0xad, 0x39, 0x5b, 0xdf, 0x9f, 0x98, 0x0e, 0x4b, 0x91, 0xbb, 0xec, 0x49, + 0xd5, 0x22, 0x65, 0xfd, 0x88, 0x92, 0xf5, 0x3e, 0xcb, 0x90, 0x89, 0x20, 0x82, 0x80, 0x65, 0x39, + 0x87, 0x35, 0x0d, 0xee, 0xf8, 0x0a, 0x35, 0x87, 0x8a, 0x0f, 0x9f, 0x86, 0x80, 0xbc, 0xb2, 0x28, + 0x4e, 0x85, 0x52, 0x90, 0x07, 0x9e, 0xa4, 0x46, 0x11, 0x3b, 0xd5, 0x76, 0x59, 0x09, 0xdf, 0x79, + 0xe0, 0xc9, 0x36, 0xaa, 0xc4, 0xc8, 0x3d, 0x2b, 0x87, 0xaf, 0xa7, 0x16, 0x69, 0xc4, 0x86, 0xe3, + 0xb4, 0x5d, 0x56, 0xd1, 0x0f, 0x54, 0x6b, 0x0d, 0x39, 0xb6, 0xce, 0xcd, 0x3e, 0x92, 0xaf, 0xa3, + 0x86, 0x45, 0x1a, 0xdd, 0x66, 0xb8, 0x25, 0x5b, 0xe7, 0x76, 0x20, 0x03, 0xb6, 0x51, 0xff, 0xc3, + 0x14, 0x94, 0x13, 0x0b, 0x8c, 0xee, 0x1f, 0x21, 0xe2, 0x51, 0xa6, 0xbc, 0xc1, 0x4f, 0x70, 0x1a, + 0x7d, 0x2b, 0x3c, 0xa6, 0x7a, 0x1e, 0xfe, 0x4c, 0xe3, 0xfb, 0x7a, 0xde, 0xc8, 0xf3, 0x7d, 0xef, + 0xb9, 0x32, 0x7d, 0xf6, 0xcc, 0x40, 0x3e, 0x13, 0xe2, 0x94, 0x65, 0x71, 0xa8, 0xcd, 0x89, 0xef, + 0x0b, 0x57, 0x01, 0x72, 0xd4, 0x39, 0x71, 0xae, 0x5a, 0x79, 0x64, 0x8a, 0xc8, 0x74, 0x0e, 0xb2, + 0x02, 0x2a, 0x02, 0x8d, 0xad, 0x20, 0x45, 0x44, 0x40, 0x74, 0xd5, 0x2c, 0xe1, 0xa1, 0xa2, 0x22, + 0x14, 0x9d, 0x93, 0x6d, 0xf3, 0x22, 0x68, 0x0c, 0x3c, 0x06, 0xb3, 0xc0, 0x03, 0xef, 0x39, 0x2b, + 0xd7, 0x26, 0x00, 0xb1, 0x4f, 0x86, 0xbe, 0x28, 0x0a, 0x44, 0x94, 0x43, 0xd0, 0x2d, 0xde, 0x01, + 0xc0, 0x5f, 0x84, 0x19, 0x3a, 0xa4, 0x2f, 0x61, 0x28, 0x13, 0x9d, 0x91, 0x60, 0x51, 0xfb, 0x2b, + 0x50, 0x8a, 0x1e, 0xf0, 0x2a, 0x14, 0xc8, 0xa4, 0x8d, 0x5e, 0x1b, 0x36, 0xd1, 0x3e, 0xb3, 0x5d, + 0x4b, 0x9c, 0x93, 0x5e, 0xc9, 0x19, 0xaa, 0x81, 0xbd, 0x1c, 0xda, 0x96, 0x25, 0xdc, 0x30, 0xd3, + 0xa3, 0x5a, 0x8b, 0xf2, 0xf1, 0xd9, 0x85, 0xf9, 0xf8, 0xda, 0x2f, 0x43, 0x39, 0xe1, 0x34, 0x5e, + 0x3a, 0xec, 0x44, 0xc7, 0xd2, 0xd3, 0x1d, 0xbb, 0x0d, 0xa5, 0xb0, 0x06, 0x24, 0xa0, 0xb3, 0xad, + 0x64, 0xc4, 0x80, 0xda, 0x3f, 0x4f, 0xa3, 0x25, 0x8b, 0x43, 0x9b, 0x75, 0xf4, 0x76, 0x20, 0x1f, + 0x48, 0x53, 0x4e, 0xc2, 0x62, 0x86, 0x25, 0x37, 0x68, 0x97, 0x68, 0x76, 0x57, 0x0c, 0x4d, 0xcd, + 0x3f, 0x84, 0x8c, 0x34, 0x07, 0x3a, 0x50, 0xfa, 0xe5, 0xe5, 0x98, 0xf4, 0xcc, 0xc1, 0xee, 0x8a, + 0x81, 0x74, 0x7c, 0x0f, 0x8a, 0x7d, 0x1d, 0xdb, 0xd2, 0x4a, 0x71, 0x49, 0x5f, 0x2c, 0x8c, 0x88, + 0xed, 0xae, 0x18, 0x11, 0x07, 0xfe, 0x6d, 0xc8, 0xa2, 0x75, 0xa9, 0x6b, 0x3e, 0x96, 0xf4, 0x31, + 0x71, 0xbb, 0xec, 0xae, 0x18, 0x44, 0xb9, 0x55, 0x80, 0x1c, 0xe9, 0xe0, 0x5a, 0x15, 0xf2, 0x6a, + 0xac, 0xb3, 0x33, 0x57, 0xbb, 0x05, 0x99, 0x9e, 0x39, 0x40, 0x0b, 0xdf, 0xb6, 0x02, 0x1d, 0x2a, + 0xc1, 0x9f, 0xb5, 0x57, 0xe3, 0x38, 0x5d, 0x32, 0x04, 0x9c, 0x9a, 0x0a, 0x01, 0xd7, 0xf2, 0x90, + 0xc5, 0x37, 0xd6, 0x6e, 0x5f, 0xe5, 0x2d, 0xd4, 0xfe, 0x49, 0x06, 0x1d, 0x0b, 0x29, 0xce, 0x17, + 0x86, 0xb7, 0x3f, 0x86, 0xd2, 0xd8, 0xf7, 0xfa, 0x22, 0x08, 0x3c, 0x5f, 0x1b, 0x47, 0x6f, 0xbc, + 0x38, 0xf5, 0xbc, 0x79, 0x18, 0xd2, 0x18, 0x31, 0x79, 0xfd, 0xdf, 0xa6, 0xa1, 0x14, 0x3d, 0x50, + 0xfe, 0x8c, 0x14, 0xe7, 0x2a, 0x94, 0xb9, 0x2f, 0xfc, 0x91, 0x69, 0x5b, 0x4a, 0x7b, 0x34, 0x87, + 0x66, 0x68, 0xe4, 0x7e, 0xe2, 0x4d, 0xe4, 0xe4, 0x58, 0xa8, 0x10, 0xd6, 0x53, 0x7b, 0x24, 0x3c, + 0x96, 0xa5, 0xe4, 0x11, 0x0a, 0x76, 0xdf, 0xf1, 0x26, 0x16, 0xcb, 0x61, 0xfb, 0x11, 0x1d, 0x6f, + 0xfb, 0xe6, 0x38, 0x50, 0x3a, 0x73, 0xdf, 0xf6, 0x3d, 0x56, 0x40, 0xa2, 0x1d, 0x7b, 0x30, 0x32, + 0x59, 0x11, 0x99, 0xf5, 0x9e, 0xdb, 0x12, 0x95, 0x70, 0x09, 0xcd, 0xd4, 0xce, 0x58, 0xb8, 0x5d, + 0xe9, 0x0b, 0x21, 0xf7, 0xcd, 0xb1, 0x8a, 0x69, 0x1a, 0xc2, 0xb2, 0x6c, 0xa9, 0xf4, 0xe7, 0x8e, + 0xd9, 0x17, 0xc7, 0x9e, 0x77, 0xca, 0x56, 0x51, 0xd1, 0xb4, 0xdd, 0x40, 0x9a, 0x03, 0xdf, 0x1c, + 0x29, 0x1d, 0xda, 0x13, 0x8e, 0xa0, 0xd6, 0x1a, 0xbd, 0xdb, 0x96, 0xc3, 0xc9, 0xf1, 0x23, 0xf4, + 0xfb, 0xd6, 0x55, 0x9e, 0xc9, 0x12, 0x63, 0x81, 0x3a, 0x74, 0x15, 0x8a, 0x5b, 0xb6, 0x63, 0x1f, + 0xdb, 0x8e, 0xcd, 0x36, 0x10, 0xb5, 0x75, 0xde, 0x37, 0x1d, 0xdb, 0xf2, 0xcd, 0xe7, 0x8c, 0x63, + 0xe7, 0x1e, 0xfb, 0xde, 0xa9, 0xcd, 0xae, 0x21, 0x22, 0xb9, 0x81, 0x67, 0xf6, 0x0f, 0xd8, 0x75, + 0xca, 0x95, 0x9d, 0x0a, 0xd9, 0x1f, 0x9e, 0x98, 0xc7, 0xec, 0x46, 0x1c, 0xd2, 0xbb, 0x59, 0xdb, + 0x80, 0xf5, 0x99, 0xac, 0x7c, 0xad, 0xa0, 0xbd, 0xcf, 0x5a, 0x05, 0xca, 0x89, 0x74, 0x69, 0xed, + 0x35, 0x28, 0x86, 0xc9, 0x54, 0xf4, 0xd2, 0xed, 0x40, 0x85, 0x81, 0xb5, 0x90, 0x44, 0xed, 0xda, + 0x7f, 0x4e, 0x41, 0x5e, 0x65, 0xb2, 0xf9, 0x56, 0x54, 0x79, 0x92, 0x5a, 0x22, 0x7b, 0xa9, 0x88, + 0x74, 0xee, 0x37, 0x2a, 0x3f, 0xb9, 0x0e, 0x39, 0x87, 0xdc, 0x71, 0xad, 0xbe, 0xa8, 0x91, 0xd0, + 0x36, 0x99, 0x29, 0x6d, 0x73, 0x1b, 0x4a, 0xe6, 0x44, 0x7a, 0x94, 0xa4, 0xd3, 0x19, 0x8c, 0x18, + 0x50, 0x6f, 0x44, 0xd9, 0xe8, 0x30, 0x30, 0x49, 0x36, 0x63, 0xcf, 0x17, 0x42, 0x05, 0x1d, 0xc9, + 0xd7, 0x4e, 0xd3, 0x49, 0xe2, 0x8d, 0xc6, 0x66, 0x5f, 0x12, 0x80, 0xce, 0x58, 0x54, 0xb5, 0x2c, + 0x8b, 0x7b, 0xa0, 0x39, 0x34, 0x65, 0xfd, 0x04, 0x8a, 0x87, 0x5e, 0x30, 0x7b, 0x62, 0x17, 0x20, + 0xd3, 0xf3, 0xc6, 0xca, 0xfe, 0xdc, 0xf2, 0x24, 0xd9, 0x9f, 0xea, 0x80, 0x3e, 0x91, 0x4a, 0xe4, + 0x0c, 0x7b, 0x30, 0x94, 0xca, 0x4f, 0x6f, 0xbb, 0xae, 0xf0, 0x59, 0x0e, 0x57, 0xd8, 0x10, 0x63, + 0xb4, 0x79, 0x59, 0x1e, 0xd7, 0x94, 0xe0, 0x3b, 0xb6, 0x1f, 0x48, 0x56, 0xa8, 0xb7, 0xf1, 0xac, + 0xb5, 0x07, 0x74, 0x44, 0xd2, 0x0f, 0x62, 0xb5, 0x82, 0x5d, 0xa4, 0x66, 0x53, 0xb8, 0x28, 0x81, + 0xe4, 0x5b, 0x29, 0xc7, 0x90, 0x5e, 0x90, 0xc6, 0xf3, 0x8d, 0xda, 0x1f, 0x4f, 0x02, 0x69, 0x9f, + 0x5c, 0xb0, 0x4c, 0xfd, 0x19, 0x54, 0xa6, 0x8a, 0x9c, 0xf8, 0x75, 0x60, 0x53, 0x00, 0xec, 0xfa, + 0x0a, 0xbf, 0x05, 0xd7, 0xa6, 0xa0, 0xfb, 0xb6, 0x65, 0x51, 0x24, 0x78, 0xf6, 0x41, 0x38, 0xc0, + 0xad, 0x12, 0x14, 0xfa, 0x6a, 0x0d, 0xeb, 0x87, 0x50, 0xa1, 0x45, 0xdd, 0x17, 0xd2, 0xec, 0xb8, + 0xce, 0xc5, 0x9f, 0xb8, 0x12, 0xad, 0xfe, 0x15, 0xed, 0x7e, 0xa1, 0x36, 0x39, 0xf1, 0xbd, 0x11, + 0xf1, 0xca, 0x19, 0xf4, 0x1b, 0xb9, 0x4b, 0x4f, 0x4b, 0x46, 0x5a, 0x7a, 0xf5, 0x5f, 0x94, 0xa0, + 0xd0, 0xe8, 0xf7, 0xd1, 0x61, 0x9c, 0x7b, 0xf3, 0xbb, 0x90, 0xef, 0x7b, 0xee, 0x89, 0x3d, 0xd0, + 0xda, 0x7a, 0xd6, 0x6e, 0xd4, 0x74, 0x28, 0x8e, 0x27, 0xf6, 0xc0, 0xd0, 0xc8, 0x48, 0xa6, 0x4f, + 0x9b, 0xdc, 0x95, 0x64, 0x4a, 0xe5, 0x46, 0x87, 0xcb, 0x03, 0xc8, 0xda, 0xee, 0x89, 0xa7, 0xcb, + 0x46, 0x3f, 0x77, 0x09, 0x11, 0xd5, 0x4e, 0x12, 0x62, 0xed, 0xbf, 0xa6, 0x20, 0xaf, 0x5e, 0xcd, + 0x5f, 0x83, 0x35, 0xe1, 0xe2, 0x56, 0x0b, 0x15, 0xbd, 0xde, 0x63, 0x33, 0x50, 0x34, 0x69, 0x35, + 0x44, 0x1c, 0x4f, 0x06, 0x3a, 0x32, 0x93, 0x04, 0xf1, 0xf7, 0xe1, 0x96, 0x6a, 0x1e, 0xfa, 0xc2, + 0x17, 0x8e, 0x30, 0x03, 0xd1, 0x1c, 0x9a, 0xae, 0x2b, 0x1c, 0x7d, 0xec, 0x5f, 0xf6, 0x98, 0xd7, + 0x61, 0x55, 0x3d, 0xea, 0x8e, 0xcd, 0xbe, 0x08, 0xf4, 0x5e, 0x9a, 0x82, 0xf1, 0xaf, 0x42, 0x8e, + 0xaa, 0x6a, 0xab, 0xd6, 0xd5, 0x4b, 0xa9, 0xb0, 0x6a, 0x5e, 0x74, 0x2e, 0x35, 0x00, 0xd4, 0x34, + 0xa1, 0x4b, 0xa6, 0x75, 0xc3, 0x17, 0xae, 0x9c, 0x57, 0xf2, 0x0e, 0x13, 0x44, 0xd8, 0x3f, 0x4b, + 0x38, 0x82, 0xca, 0x1f, 0xf1, 0xdc, 0x4c, 0x53, 0xde, 0x65, 0x0a, 0x56, 0xfb, 0x2f, 0x59, 0xc8, + 0xe2, 0x0c, 0x23, 0xf2, 0xd0, 0x1b, 0x89, 0x28, 0xfa, 0xac, 0x0c, 0x91, 0x29, 0x18, 0x1a, 0x3e, + 0xa6, 0x2a, 0x00, 0x88, 0xd0, 0x94, 0x6a, 0x99, 0x05, 0x23, 0xe6, 0xd8, 0xf7, 0x4e, 0x6c, 0x27, + 0xc6, 0xd4, 0x26, 0xd2, 0x0c, 0x98, 0x7f, 0x0d, 0x6e, 0x8e, 0x4c, 0xff, 0x54, 0x48, 0xda, 0xdd, + 0xcf, 0x3c, 0xff, 0x34, 0xc0, 0x99, 0x6b, 0x5b, 0x3a, 0x6c, 0x79, 0xc9, 0x53, 0xfe, 0x06, 0x6c, + 0x3c, 0x0f, 0x9b, 0xd1, 0x3b, 0x54, 0xe0, 0x70, 0xfe, 0x01, 0x2a, 0x63, 0x4b, 0x9c, 0xd9, 0xc4, + 0xb7, 0xa8, 0x6a, 0x6b, 0xc3, 0x36, 0x8a, 0x92, 0xa9, 0x26, 0xb2, 0xab, 0xdf, 0xac, 0xf3, 0x4f, + 0xd3, 0x50, 0xd4, 0x9b, 0xaa, 0xe6, 0x28, 0x68, 0x5b, 0x14, 0x77, 0x2d, 0x19, 0x31, 0x00, 0x05, + 0x8d, 0x5e, 0xf9, 0x54, 0xa9, 0xdc, 0x8a, 0x72, 0x50, 0x13, 0x20, 0xc4, 0x90, 0xa2, 0x3f, 0x0c, + 0x5f, 0xa2, 0x82, 0xa2, 0x49, 0x10, 0xbf, 0x03, 0x30, 0x30, 0xa5, 0x78, 0x6e, 0x5e, 0x3c, 0xf1, + 0x9d, 0xaa, 0x50, 0x89, 0x94, 0x18, 0x82, 0x2e, 0xae, 0xe3, 0xf5, 0x4d, 0xa7, 0x2b, 0x3d, 0xdf, + 0x1c, 0x88, 0x43, 0x53, 0x0e, 0xab, 0x03, 0xe5, 0xe2, 0xce, 0xc2, 0x71, 0xc4, 0xd2, 0x1e, 0x89, + 0x4f, 0x3d, 0x57, 0x54, 0x87, 0x6a, 0xc4, 0x61, 0x1b, 0x7b, 0x62, 0xba, 0xa6, 0x73, 0x21, 0xed, + 0x3e, 0x8e, 0xc5, 0x56, 0x3d, 0x49, 0x80, 0x28, 0xa8, 0x20, 0x24, 0xce, 0x63, 0xdb, 0xaa, 0x7e, + 0x4f, 0x8d, 0x35, 0x02, 0xe0, 0xea, 0x0a, 0x39, 0x14, 0xbe, 0x98, 0x8c, 0x1a, 0x96, 0xe5, 0x8b, + 0x20, 0xa8, 0x9e, 0xaa, 0xd5, 0x9d, 0x01, 0xd7, 0xbe, 0x41, 0x69, 0xae, 0x61, 0xfd, 0x6d, 0xa8, + 0xec, 0x61, 0x0f, 0x1b, 0x63, 0xbb, 0xdb, 0xf7, 0xc6, 0x02, 0x15, 0x3a, 0x05, 0x8c, 0x29, 0xbc, + 0x50, 0x86, 0xc2, 0xc7, 0x81, 0xe7, 0x36, 0x0e, 0xdb, 0xea, 0x88, 0xd9, 0x99, 0x38, 0x0e, 0x4b, + 0xd7, 0x3b, 0x00, 0xb1, 0x64, 0xe3, 0x71, 0xd1, 0xa0, 0x9c, 0x12, 0x5b, 0x51, 0xc1, 0x2c, 0xd7, + 0xb2, 0xdd, 0xc1, 0xb6, 0x16, 0x66, 0x96, 0x42, 0x20, 0x05, 0x29, 0x84, 0x15, 0x01, 0xc9, 0x9c, + 0xa1, 0x96, 0xb0, 0x58, 0xa6, 0xfe, 0x7f, 0x53, 0x50, 0x4e, 0x94, 0x50, 0xfc, 0x29, 0x96, 0x7d, + 0xe0, 0x61, 0x8f, 0xe6, 0x02, 0xae, 0x9b, 0x12, 0xf4, 0xa8, 0x8d, 0xab, 0xaa, 0x2b, 0x3c, 0xf0, + 0xa9, 0x0a, 0x49, 0x24, 0x20, 0x9f, 0xa9, 0xe4, 0xa3, 0xfe, 0x50, 0xc7, 0x75, 0xca, 0x50, 0x78, + 0xe2, 0x9e, 0xba, 0xde, 0x73, 0x57, 0x9d, 0xd3, 0x54, 0xc7, 0x33, 0x95, 0x91, 0x0c, 0x4b, 0x6d, + 0x32, 0xf5, 0x7f, 0x95, 0x9d, 0x29, 0x79, 0x6b, 0x41, 0x5e, 0x39, 0x13, 0x64, 0xe7, 0xce, 0xd7, + 0x28, 0x25, 0x91, 0x75, 0xf6, 0x2b, 0x01, 0x32, 0x34, 0x31, 0x5a, 0xf9, 0x51, 0x41, 0x68, 0x7a, + 0x61, 0x96, 0x6e, 0x8a, 0x51, 0xa8, 0x9b, 0xa7, 0x6a, 0xa2, 0x23, 0x0e, 0xb5, 0xbf, 0x99, 0x82, + 0xeb, 0x8b, 0x50, 0x92, 0x95, 0xe3, 0xa9, 0xe9, 0xca, 0xf1, 0xee, 0x4c, 0x25, 0x76, 0x9a, 0x46, + 0xf3, 0xe0, 0x25, 0x3b, 0x31, 0x5d, 0x97, 0x5d, 0xff, 0xfd, 0x14, 0x6c, 0xcc, 0x8d, 0x39, 0x61, + 0xc7, 0x00, 0xe4, 0x95, 0x64, 0xa9, 0x42, 0xa9, 0xa8, 0x74, 0x45, 0xa5, 0x1e, 0xe8, 0x84, 0x0f, + 0x54, 0x2d, 0x80, 0xae, 0x3d, 0x57, 0x46, 0x34, 0xae, 0x1a, 0x1e, 0x20, 0x03, 0xa1, 0xc2, 0xb4, + 0xca, 0xd8, 0xd2, 0x90, 0xbc, 0x32, 0x74, 0x55, 0x7e, 0x84, 0x15, 0xa8, 0x00, 0x6b, 0x32, 0x76, + 0xec, 0x3e, 0x36, 0x8b, 0xbc, 0x06, 0x37, 0xd5, 0x05, 0x04, 0xed, 0x54, 0x9e, 0xf4, 0x86, 0x36, + 0x6d, 0x0e, 0x56, 0xc2, 0xf7, 0x1c, 0x4e, 0x8e, 0x1d, 0x3b, 0x18, 0x32, 0xa8, 0x1b, 0x70, 0x6d, + 0xc1, 0x00, 0xa9, 0xcb, 0x4f, 0x75, 0xf7, 0xd7, 0x00, 0xb6, 0x9f, 0x86, 0x9d, 0x66, 0x29, 0xce, + 0x61, 0x6d, 0xfb, 0x69, 0x92, 0xbb, 0xde, 0x3c, 0x4f, 0x51, 0x7b, 0x05, 0x2c, 0x53, 0xff, 0xd5, + 0x54, 0x58, 0x21, 0x51, 0xfb, 0xcb, 0x50, 0x51, 0x1d, 0x3e, 0x34, 0x2f, 0x1c, 0xcf, 0xb4, 0x78, + 0x0b, 0xd6, 0x82, 0xe8, 0x8a, 0x4c, 0xe2, 0xc0, 0x9a, 0x35, 0x04, 0xba, 0x53, 0x48, 0xc6, 0x0c, + 0x51, 0xe8, 0x28, 0xa5, 0xe3, 0xb4, 0x0a, 0x27, 0x97, 0xcf, 0xa4, 0x2d, 0xb7, 0x4a, 0x4e, 0x9c, + 0x59, 0xff, 0x2a, 0x6c, 0x74, 0x63, 0xe5, 0xae, 0x2c, 0x6a, 0x14, 0x0e, 0x75, 0x32, 0x6c, 0x87, + 0xc2, 0xa1, 0x9b, 0xf5, 0x7f, 0x5a, 0x00, 0x88, 0x53, 0x48, 0x0b, 0xf6, 0xfc, 0xa2, 0x8a, 0x88, + 0xb9, 0x84, 0x6e, 0xe6, 0xa5, 0x13, 0xba, 0xef, 0x47, 0x86, 0xbd, 0x0a, 0x2f, 0xcf, 0x96, 0x85, + 0xc7, 0x7d, 0x9a, 0x35, 0xe7, 0xa7, 0x0a, 0x86, 0x72, 0xb3, 0x05, 0x43, 0x77, 0xe7, 0xab, 0x0b, + 0x67, 0x94, 0x51, 0x1c, 0xb7, 0x28, 0x4c, 0xc5, 0x2d, 0x6a, 0x50, 0xf4, 0x85, 0x69, 0x79, 0xae, + 0x73, 0x11, 0xe6, 0x0d, 0xc3, 0x36, 0x7f, 0x1b, 0x72, 0x92, 0x6e, 0xf9, 0x14, 0x69, 0xef, 0xbc, + 0x60, 0xe1, 0x14, 0x2e, 0x6a, 0x36, 0x3b, 0xd0, 0x25, 0x81, 0xea, 0xd4, 0x2c, 0x1a, 0x09, 0x08, + 0xdf, 0x04, 0x6e, 0xa3, 0x13, 0xe7, 0x38, 0xc2, 0xda, 0xba, 0xd8, 0x56, 0xe9, 0x3c, 0x3a, 0xd7, + 0x8b, 0xc6, 0x82, 0x27, 0xe1, 0xfa, 0xaf, 0xc6, 0xeb, 0x4f, 0x5d, 0x3e, 0xb3, 0x03, 0x1c, 0x69, + 0x85, 0xcc, 0x97, 0xa8, 0x8d, 0x96, 0x43, 0xb8, 0x61, 0xd5, 0x5c, 0x92, 0xf4, 0xc6, 0x39, 0xf1, + 0x4b, 0x9e, 0x86, 0xd3, 0xab, 0x02, 0x37, 0xeb, 0xc4, 0x34, 0x06, 0x90, 0x26, 0xef, 0x7b, 0xee, + 0x01, 0x4a, 0x04, 0xd3, 0x9a, 0x5c, 0xb7, 0x71, 0xbc, 0x63, 0x67, 0xe2, 0x9b, 0x0e, 0x3d, 0xdd, + 0x50, 0x9a, 0x3c, 0x86, 0xd4, 0xff, 0x20, 0x1d, 0x39, 0x4f, 0x25, 0xc8, 0x1d, 0x9b, 0x81, 0xdd, + 0x57, 0xa7, 0x9b, 0x36, 0x7a, 0xd4, 0xe9, 0x26, 0x3d, 0xcb, 0x63, 0x69, 0xf4, 0x83, 0x02, 0xa1, + 0xd3, 0x39, 0xf1, 0x9d, 0x2a, 0x96, 0x45, 0x15, 0x10, 0x4a, 0x92, 0xaa, 0x19, 0x22, 0x52, 0x0a, + 0xce, 0x59, 0x51, 0x35, 0x26, 0xb9, 0xd9, 0x74, 0xc4, 0xb0, 0x22, 0xe2, 0xb8, 0x9e, 0x14, 0x2a, + 0x34, 0x49, 0x72, 0xcf, 0x00, 0xd9, 0x84, 0x97, 0x04, 0x58, 0x19, 0x1d, 0x93, 0x90, 0xa9, 0x8a, + 0x27, 0x06, 0xe4, 0xb6, 0xad, 0xe2, 0xbe, 0x9f, 0x7e, 0xc0, 0x2a, 0xd8, 0xa3, 0xf8, 0xaa, 0x16, + 0x5b, 0x43, 0xae, 0x26, 0x55, 0xb2, 0xac, 0xe3, 0xcf, 0x33, 0xaa, 0x6f, 0x61, 0xf8, 0x56, 0x0b, + 0xf5, 0xd2, 0x06, 0xf6, 0x2c, 0x32, 0x74, 0x18, 0x47, 0xbf, 0x6b, 0x6c, 0xa2, 0x13, 0x64, 0x8f, + 0x4d, 0x57, 0xb2, 0x6b, 0x38, 0xd4, 0xb1, 0x75, 0xc2, 0xae, 0x23, 0x49, 0x7f, 0x68, 0x4a, 0x76, + 0x03, 0x71, 0xf0, 0xd7, 0xb6, 0xf0, 0x51, 0x52, 0xd8, 0x4d, 0xc4, 0x91, 0xe6, 0x80, 0xdd, 0xaa, + 0xff, 0x46, 0x5c, 0x0f, 0xfd, 0x66, 0xe4, 0x9e, 0x2c, 0xb3, 0x7d, 0xd0, 0x81, 0x59, 0xb4, 0x97, + 0x5b, 0xb0, 0xe1, 0x8b, 0xef, 0x4f, 0xec, 0xa9, 0x5b, 0x02, 0x99, 0xab, 0xcb, 0x50, 0xe6, 0x29, + 0xea, 0x67, 0xb0, 0x11, 0x36, 0x9e, 0xd9, 0x72, 0x48, 0x71, 0x24, 0xfe, 0x76, 0xe2, 0x1a, 0x43, + 0x6a, 0xe1, 0xf5, 0xaf, 0x88, 0x65, 0x7c, 0x6d, 0x21, 0xca, 0x13, 0xa4, 0x97, 0xc8, 0x13, 0xd4, + 0xff, 0x4f, 0x32, 0xf1, 0xac, 0x1c, 0x36, 0x2b, 0x72, 0xd8, 0xe6, 0x13, 0xd1, 0x71, 0xe8, 0x3f, + 0xfd, 0x32, 0xa1, 0xff, 0x45, 0x45, 0x1d, 0x1f, 0xa0, 0xff, 0x40, 0x3b, 0xf3, 0xe9, 0x12, 0x69, + 0x8d, 0x29, 0x5c, 0xbe, 0x45, 0x69, 0x65, 0xb3, 0xab, 0x2a, 0x8e, 0x72, 0x0b, 0x2f, 0x15, 0x25, + 0xf3, 0xc7, 0x1a, 0xd3, 0x48, 0x50, 0x25, 0xf4, 0x58, 0x7e, 0x91, 0x1e, 0x43, 0xdf, 0x59, 0x6b, + 0xb8, 0xa8, 0xad, 0xb2, 0x40, 0xea, 0x77, 0xc8, 0x9e, 0xf6, 0x78, 0xd1, 0x98, 0x83, 0xa3, 0xb1, + 0x37, 0x9a, 0x38, 0xd2, 0xd6, 0x89, 0x0e, 0xd5, 0x98, 0xbd, 0xf5, 0x58, 0x9a, 0xbf, 0xf5, 0xf8, + 0x11, 0x40, 0x20, 0x70, 0x77, 0x6c, 0xdb, 0x7d, 0xa9, 0xeb, 0x92, 0xee, 0x5c, 0x36, 0x36, 0x9d, + 0x9e, 0x49, 0x50, 0x60, 0xff, 0x47, 0xe6, 0x39, 0xa5, 0x6c, 0x75, 0x01, 0x45, 0xd4, 0x9e, 0xd5, + 0xee, 0x6b, 0xf3, 0xda, 0xfd, 0x6d, 0xc8, 0x05, 0x68, 0x42, 0xd3, 0xc5, 0x9d, 0xcb, 0xd7, 0x77, + 0x93, 0xec, 0x6c, 0x43, 0xe1, 0x52, 0xc0, 0x12, 0xf5, 0x9f, 0xe7, 0xd3, 0x95, 0x9d, 0x92, 0x11, + 0x36, 0xa7, 0x34, 0xec, 0xcd, 0x69, 0x0d, 0x5b, 0xb3, 0x20, 0xaf, 0x93, 0x0f, 0xb3, 0x81, 0x82, + 0x30, 0x6c, 0x99, 0x4e, 0x84, 0x2d, 0xa3, 0xea, 0xd7, 0x4c, 0xb2, 0xfa, 0x75, 0xe6, 0x56, 0x5f, + 0x6e, 0xee, 0x56, 0x5f, 0xfd, 0x53, 0xc8, 0x29, 0x9f, 0x00, 0x42, 0x73, 0x54, 0x99, 0xb2, 0x38, + 0x28, 0x96, 0xe2, 0xd7, 0x81, 0x05, 0x82, 0x6c, 0x1d, 0xd1, 0x35, 0x47, 0x82, 0x94, 0x64, 0x9a, + 0x57, 0xe1, 0xba, 0xc2, 0x0d, 0xa6, 0x9f, 0x90, 0xc1, 0xe5, 0xd8, 0xc7, 0xbe, 0xe9, 0x5f, 0xb0, + 0x6c, 0xfd, 0x23, 0x4a, 0xfd, 0x87, 0x02, 0x55, 0x8e, 0x6e, 0x51, 0x2a, 0xb5, 0x6c, 0x69, 0xed, + 0x43, 0x95, 0x23, 0xda, 0xdb, 0x53, 0xf5, 0x74, 0xe4, 0x4e, 0x51, 0x3c, 0x68, 0x35, 0x79, 0xc6, + 0xff, 0xa9, 0xed, 0xb7, 0xfa, 0x56, 0xc2, 0x62, 0x9c, 0x2e, 0x90, 0x4b, 0x2d, 0x5b, 0x20, 0x57, + 0x7f, 0x0c, 0xeb, 0xc6, 0xb4, 0x4e, 0xe7, 0xef, 0x43, 0xc1, 0x1b, 0x27, 0xf9, 0xbc, 0x48, 0x2e, + 0x43, 0xf4, 0xfa, 0xef, 0xa5, 0x60, 0xb5, 0xed, 0x4a, 0xe1, 0xbb, 0xa6, 0xb3, 0xe3, 0x98, 0x03, + 0xfe, 0x5e, 0xa8, 0xa5, 0x16, 0xc7, 0x1e, 0x92, 0xb8, 0xd3, 0x0a, 0xcb, 0xd1, 0x41, 0x76, 0x7e, + 0x03, 0x36, 0x84, 0x65, 0x4b, 0xcf, 0x57, 0x76, 0x72, 0x58, 0xc7, 0x78, 0x1d, 0x98, 0x02, 0x77, + 0x69, 0x4b, 0xf4, 0xd4, 0x32, 0x57, 0xe1, 0xfa, 0x14, 0x34, 0x34, 0x82, 0xd3, 0xfc, 0x36, 0x54, + 0xe3, 0xd3, 0x68, 0xdb, 0x73, 0x65, 0xdb, 0xb5, 0xc4, 0x39, 0x19, 0x59, 0x2c, 0x53, 0xff, 0xf5, + 0xc8, 0xbc, 0x7b, 0xaa, 0xab, 0x1c, 0x7d, 0xcf, 0x8b, 0xaf, 0xd0, 0xea, 0x56, 0xe2, 0xaa, 0x76, + 0x7a, 0x89, 0xab, 0xda, 0x1f, 0xc5, 0xd7, 0x6d, 0xd5, 0x41, 0xf1, 0xea, 0xc2, 0xd3, 0x87, 0x8a, + 0xb3, 0xb4, 0x75, 0xdf, 0x15, 0x89, 0xbb, 0xb7, 0x6f, 0x69, 0x97, 0x2e, 0xbb, 0x8c, 0x15, 0xac, + 0xea, 0x18, 0xde, 0x9d, 0xbd, 0xe3, 0xb1, 0x5c, 0x91, 0xe4, 0x9c, 0xa1, 0x0a, 0x2f, 0x6d, 0xa8, + 0x7e, 0x6b, 0xc6, 0x7b, 0x2a, 0x2e, 0x0c, 0xc7, 0x5d, 0x71, 0x83, 0xf5, 0x5b, 0x50, 0x18, 0xda, + 0x81, 0xf4, 0x7c, 0x75, 0xab, 0x7a, 0xfe, 0x16, 0x58, 0x62, 0xb6, 0x76, 0x15, 0x22, 0x55, 0xb4, + 0x85, 0x54, 0xfc, 0xbb, 0xb0, 0x41, 0x13, 0x7f, 0x18, 0x5b, 0x0d, 0x41, 0xb5, 0xbc, 0xb0, 0x92, + 0x30, 0xc1, 0x6a, 0x6b, 0x86, 0xc4, 0x98, 0x67, 0x52, 0x1b, 0x00, 0xc4, 0xeb, 0x33, 0xa7, 0xc5, + 0x3e, 0xc3, 0xad, 0xea, 0x9b, 0x90, 0x0f, 0x26, 0xc7, 0x71, 0x36, 0x4e, 0xb7, 0x6a, 0xe7, 0x50, + 0x9b, 0xb3, 0x0e, 0x0e, 0x85, 0xaf, 0xba, 0x7b, 0xe5, 0xd5, 0xee, 0x8f, 0x92, 0x0b, 0xaf, 0x84, + 0xf3, 0xee, 0x25, 0xab, 0x17, 0x71, 0x4e, 0x48, 0x40, 0xed, 0x5d, 0x28, 0x27, 0x26, 0x15, 0x35, + 0xf3, 0xc4, 0xb5, 0xbc, 0x30, 0x04, 0x8c, 0xbf, 0xd5, 0xd5, 0x36, 0x2b, 0x0c, 0x02, 0xd3, 0xef, + 0x9a, 0x01, 0x6c, 0x76, 0x02, 0xaf, 0xf0, 0xb0, 0x5f, 0x85, 0x4a, 0xc2, 0xa4, 0x8b, 0xc2, 0x83, + 0xd3, 0xc0, 0xfa, 0x19, 0x7c, 0x2e, 0xc1, 0xee, 0x50, 0xf8, 0x23, 0x3b, 0xc0, 0x83, 0x44, 0x39, + 0x8b, 0x64, 0x5a, 0x5b, 0xc2, 0x95, 0xb6, 0x0c, 0x35, 0x68, 0xd4, 0xe6, 0xdf, 0x80, 0xdc, 0x58, + 0xf8, 0xa3, 0x40, 0x6b, 0xd1, 0x59, 0x09, 0x5a, 0xc8, 0x36, 0x30, 0x14, 0x4d, 0xfd, 0x1f, 0xa7, + 0xa0, 0xb8, 0x2f, 0xa4, 0x89, 0xb6, 0x03, 0xdf, 0x9f, 0x79, 0xcb, 0x7c, 0x06, 0x39, 0x44, 0xdd, + 0xd4, 0xee, 0xeb, 0x66, 0x5b, 0xe3, 0xeb, 0xf6, 0xee, 0x4a, 0xdc, 0xb1, 0xda, 0x16, 0x14, 0x34, + 0xb8, 0xf6, 0x1e, 0xac, 0xcf, 0x60, 0xd2, 0xbc, 0x28, 0xdb, 0xbe, 0x7b, 0x31, 0x0a, 0xcb, 0x9c, + 0x56, 0x8d, 0x69, 0xe0, 0x56, 0x09, 0x0a, 0x63, 0x45, 0x50, 0xff, 0x83, 0x1b, 0x54, 0x5c, 0x63, + 0x9f, 0xa0, 0x4f, 0xbf, 0xe8, 0x64, 0xbd, 0x03, 0x40, 0x47, 0xb3, 0x2a, 0xc1, 0x50, 0x21, 0xdb, + 0x04, 0x84, 0x7f, 0x10, 0xc5, 0xda, 0xb3, 0x0b, 0x8d, 0xaa, 0x24, 0xf3, 0xd9, 0x80, 0x7b, 0x15, + 0x0a, 0x76, 0x40, 0x71, 0x38, 0x5d, 0xb6, 0x14, 0x36, 0xf9, 0x37, 0x21, 0x6f, 0x8f, 0xc6, 0x9e, + 0x2f, 0x75, 0x30, 0xfe, 0x4a, 0xae, 0x6d, 0xc2, 0xdc, 0x5d, 0x31, 0x34, 0x0d, 0x52, 0x8b, 0x73, + 0xa2, 0x2e, 0xbe, 0x98, 0xba, 0x75, 0x1e, 0x52, 0x2b, 0x1a, 0xfe, 0x1d, 0xa8, 0x0c, 0x54, 0xd5, + 0xa6, 0x62, 0xac, 0x95, 0xc8, 0x97, 0xaf, 0x62, 0xf2, 0x28, 0x49, 0xb0, 0xbb, 0x62, 0x4c, 0x73, + 0x40, 0x96, 0x68, 0xc0, 0x8b, 0x40, 0xf6, 0xbc, 0x8f, 0x3d, 0xdb, 0x25, 0x77, 0xf7, 0x05, 0x2c, + 0x8d, 0x24, 0x01, 0xb2, 0x9c, 0xe2, 0xc0, 0xbf, 0x86, 0x16, 0x4f, 0x20, 0xf5, 0xc5, 0xf6, 0xbb, + 0x57, 0x71, 0xea, 0x89, 0x40, 0x5f, 0x49, 0x0f, 0x24, 0x3f, 0x87, 0x5a, 0x62, 0x93, 0xe8, 0x97, + 0x34, 0xc6, 0x63, 0xdf, 0x43, 0x9f, 0xb9, 0x42, 0xdc, 0xbe, 0x76, 0x15, 0xb7, 0xc3, 0x4b, 0xa9, + 0x77, 0x57, 0x8c, 0x2b, 0x78, 0xf3, 0x1e, 0x7a, 0x76, 0x7a, 0x08, 0x7b, 0xc2, 0x3c, 0x0b, 0xaf, + 0xc5, 0xdf, 0x5f, 0x6a, 0x16, 0x88, 0x62, 0x77, 0xc5, 0x98, 0xe1, 0xc1, 0x7f, 0x19, 0x36, 0xa6, + 0xde, 0x49, 0x37, 0x61, 0xd5, 0xa5, 0xf9, 0xaf, 0x2e, 0x3d, 0x0c, 0x24, 0xda, 0x5d, 0x31, 0xe6, + 0x39, 0xf1, 0x09, 0xbc, 0x32, 0x3f, 0xa4, 0x6d, 0xd1, 0x77, 0x6c, 0x57, 0xe8, 0xfb, 0xf5, 0xef, + 0xbe, 0xdc, 0x6c, 0x69, 0xe2, 0xdd, 0x15, 0xe3, 0x72, 0xce, 0xfc, 0xaf, 0xc2, 0xed, 0xf1, 0x42, + 0x15, 0xa3, 0x54, 0x97, 0xbe, 0x9e, 0xff, 0xfe, 0x92, 0x6f, 0x9e, 0xa3, 0xdf, 0x5d, 0x31, 0xae, + 0xe4, 0x8f, 0xb6, 0x33, 0x79, 0xd0, 0xba, 0xb8, 0x5c, 0x35, 0x28, 0x53, 0xdb, 0x77, 0x76, 0x85, + 0x69, 0x45, 0xf9, 0x82, 0x18, 0x50, 0xfb, 0x9f, 0x29, 0xc8, 0x6b, 0x79, 0xbf, 0x1d, 0x55, 0x0c, + 0x44, 0xaa, 0x3b, 0x06, 0xf0, 0x0f, 0xa1, 0x24, 0x7c, 0xdf, 0xf3, 0x9b, 0x9e, 0x15, 0x16, 0x5b, + 0xce, 0x46, 0x99, 0x15, 0x9f, 0xcd, 0x56, 0x88, 0x66, 0xc4, 0x14, 0xfc, 0x03, 0x00, 0xb5, 0xcf, + 0x7b, 0xf1, 0x1d, 0xa1, 0xda, 0x62, 0x7a, 0x95, 0x82, 0x8a, 0xb1, 0xe3, 0xb0, 0x5c, 0x98, 0xff, + 0x09, 0x9b, 0x91, 0xc3, 0x99, 0x4b, 0x38, 0x9c, 0xb7, 0x75, 0x1c, 0x81, 0xc2, 0x2b, 0xfa, 0xa6, + 0x5c, 0x04, 0xa8, 0xfd, 0xbb, 0x14, 0xe4, 0x95, 0xf2, 0xe0, 0xad, 0xf9, 0x11, 0xbd, 0xfe, 0x62, + 0x9d, 0xb3, 0x39, 0x3b, 0xb2, 0x6f, 0x02, 0x28, 0x1d, 0x94, 0x18, 0xd9, 0xed, 0x19, 0x3e, 0x9a, + 0x34, 0x2c, 0x6f, 0x8e, 0xf1, 0xeb, 0x0f, 0xd5, 0x6d, 0x2e, 0x0a, 0x09, 0x3f, 0xd9, 0xdb, 0x63, + 0x2b, 0x7c, 0x03, 0x2a, 0x4f, 0x0e, 0x1e, 0x1f, 0x74, 0x9e, 0x1d, 0x1c, 0xb5, 0x0c, 0xa3, 0x63, + 0xa8, 0xc8, 0xf0, 0x56, 0x63, 0xfb, 0xa8, 0x7d, 0x70, 0xf8, 0xa4, 0xc7, 0xd2, 0xb5, 0x7f, 0x91, + 0x82, 0xca, 0x94, 0xee, 0xfa, 0xb3, 0x5d, 0xba, 0xc4, 0xf4, 0x67, 0x16, 0x4f, 0x7f, 0xf6, 0xb2, + 0xe9, 0xcf, 0xcd, 0x4e, 0xff, 0xef, 0xa4, 0xa0, 0x32, 0xa5, 0x23, 0x93, 0xdc, 0x53, 0xd3, 0xdc, + 0x93, 0x27, 0x7d, 0x7a, 0xe6, 0xa4, 0xaf, 0xc3, 0x6a, 0xf8, 0xfb, 0x20, 0x8e, 0x38, 0x4c, 0xc1, + 0x92, 0x38, 0x74, 0x9d, 0x22, 0x3b, 0x8d, 0x43, 0x57, 0x2a, 0xae, 0xee, 0x2d, 0x5d, 0x1f, 0x0d, + 0xe8, 0x76, 0x7d, 0xed, 0x72, 0x0d, 0x7a, 0xc5, 0x10, 0x1e, 0x41, 0x79, 0x1c, 0x6f, 0xd3, 0x97, + 0x33, 0x4b, 0x92, 0x94, 0x2f, 0xe8, 0xe7, 0xef, 0xa6, 0x60, 0x6d, 0x5a, 0xe7, 0xfe, 0xb9, 0x9e, + 0xd6, 0x7f, 0x96, 0x82, 0x8d, 0x39, 0x4d, 0x7e, 0xa5, 0x61, 0x37, 0xdb, 0xaf, 0xf4, 0x12, 0xfd, + 0xca, 0x2c, 0xe8, 0xd7, 0xe5, 0x9a, 0xe4, 0xea, 0x1e, 0x77, 0xe1, 0x95, 0x4b, 0xcf, 0x84, 0x2b, + 0xa6, 0x7a, 0x8a, 0x69, 0x66, 0x96, 0xe9, 0x6f, 0xa7, 0xe0, 0xf6, 0x55, 0xfa, 0xfe, 0xff, 0xbb, + 0x5c, 0xcd, 0xf6, 0xb0, 0xfe, 0x5e, 0x54, 0x48, 0x50, 0x86, 0x82, 0xfe, 0x6a, 0x95, 0x2e, 0xe4, + 0x1e, 0x7a, 0xcf, 0x5d, 0x15, 0x89, 0x36, 0x84, 0xa9, 0xef, 0xf5, 0x1b, 0x62, 0xec, 0xd8, 0x94, + 0x23, 0xbd, 0x05, 0xd0, 0x20, 0xbf, 0x2e, 0xbc, 0x66, 0xd3, 0xdc, 0xeb, 0x74, 0x5b, 0x6c, 0x25, + 0x69, 0xc4, 0x7e, 0x1a, 0x2a, 0xe2, 0xfa, 0x21, 0xe4, 0xe3, 0x8b, 0x0f, 0xfb, 0xa6, 0x7f, 0x6a, + 0xa9, 0x4c, 0xe4, 0x2a, 0x14, 0x0f, 0xb5, 0x0b, 0xa5, 0x5e, 0xf5, 0x71, 0xb7, 0x73, 0xa0, 0x82, + 0xde, 0xdb, 0x9d, 0x9e, 0xba, 0x3e, 0xd1, 0x7d, 0xfa, 0x48, 0xa5, 0xc4, 0x1e, 0x19, 0x8d, 0xc3, + 0xdd, 0x23, 0xc2, 0xc8, 0xd5, 0x7f, 0x2b, 0x1b, 0x9e, 0x6a, 0x75, 0x43, 0xe7, 0x38, 0x01, 0xf2, + 0xa8, 0xcd, 0x3d, 0xcd, 0x38, 0x7a, 0x0d, 0x95, 0xfc, 0xb6, 0xce, 0x55, 0x1c, 0x82, 0xa5, 0x79, + 0x1e, 0xd2, 0x87, 0xc7, 0xaa, 0x12, 0x69, 0x57, 0x8e, 0x1c, 0x75, 0xef, 0xb2, 0x77, 0x2e, 0x59, + 0x0e, 0x7f, 0x34, 0x83, 0x33, 0x96, 0xaf, 0xff, 0xcb, 0x0c, 0x94, 0x22, 0x55, 0xf9, 0x32, 0xaa, + 0x9b, 0x73, 0x58, 0x6b, 0x1f, 0xf4, 0x5a, 0xc6, 0x41, 0x63, 0x4f, 0xa3, 0x64, 0xf8, 0x35, 0x58, + 0xdf, 0x69, 0xef, 0xb5, 0x8e, 0xf6, 0x3a, 0x8d, 0x6d, 0x0d, 0x2c, 0xf2, 0x9b, 0xc0, 0xdb, 0xfb, + 0x87, 0x1d, 0xa3, 0x77, 0xd4, 0xee, 0x1e, 0x35, 0x1b, 0x07, 0xcd, 0xd6, 0x5e, 0x6b, 0x9b, 0xe5, + 0xf9, 0xab, 0x70, 0xf7, 0xa0, 0xd3, 0x6b, 0x77, 0x0e, 0x8e, 0x0e, 0x3a, 0x47, 0x9d, 0xad, 0x8f, + 0x5b, 0xcd, 0x5e, 0xf7, 0xa8, 0x7d, 0x70, 0x84, 0x5c, 0x1f, 0x19, 0x0d, 0x7c, 0xc2, 0x72, 0xfc, + 0x2e, 0xdc, 0xd6, 0x58, 0xdd, 0x96, 0xf1, 0xb4, 0x65, 0x20, 0x93, 0x27, 0x07, 0x8d, 0xa7, 0x8d, + 0xf6, 0x5e, 0x63, 0x6b, 0xaf, 0xc5, 0x56, 0xf9, 0x1d, 0xa8, 0x69, 0x0c, 0xa3, 0xd1, 0x6b, 0x1d, + 0xed, 0xb5, 0xf7, 0xdb, 0xbd, 0xa3, 0xd6, 0x77, 0x9b, 0xad, 0xd6, 0x76, 0x6b, 0x9b, 0x55, 0xf8, + 0x97, 0xe1, 0x4b, 0xd4, 0x29, 0xdd, 0x89, 0xe9, 0x97, 0x7d, 0xda, 0x3e, 0x3c, 0x6a, 0x18, 0xcd, + 0xdd, 0xf6, 0xd3, 0x16, 0x5b, 0xe3, 0xaf, 0xc3, 0x17, 0x2f, 0x47, 0xdd, 0x6e, 0x1b, 0xad, 0x66, + 0xaf, 0x63, 0x7c, 0xc2, 0x36, 0xf8, 0xe7, 0xe1, 0x95, 0xdd, 0xde, 0xfe, 0xde, 0xd1, 0x33, 0xa3, + 0x73, 0xf0, 0xe8, 0x88, 0x7e, 0x76, 0x7b, 0xc6, 0x93, 0x66, 0xef, 0x89, 0xd1, 0x62, 0xc0, 0x6b, + 0x70, 0xf3, 0x70, 0xeb, 0xe8, 0xa0, 0xd3, 0x3b, 0x6a, 0x1c, 0x7c, 0xb2, 0xb5, 0xd7, 0x69, 0x3e, + 0x3e, 0xda, 0xe9, 0x18, 0xfb, 0x8d, 0x1e, 0x2b, 0xf3, 0xaf, 0xc0, 0xeb, 0xcd, 0xee, 0x53, 0xdd, + 0xcd, 0xce, 0xce, 0x91, 0xd1, 0x79, 0xd6, 0x3d, 0xea, 0x18, 0x47, 0x46, 0x6b, 0x8f, 0xc6, 0xdc, + 0x8d, 0xfb, 0x5e, 0xe0, 0xb7, 0xa1, 0xda, 0x3e, 0xe8, 0x3e, 0xd9, 0xd9, 0x69, 0x37, 0xdb, 0xad, + 0x83, 0xde, 0xd1, 0x61, 0xcb, 0xd8, 0x6f, 0x77, 0xbb, 0x88, 0xc6, 0x4a, 0xf5, 0x6f, 0x43, 0xbe, + 0xed, 0x9e, 0xd9, 0x92, 0xf6, 0x97, 0x16, 0x46, 0xed, 0x71, 0x85, 0x4d, 0xda, 0x16, 0xf6, 0xc0, + 0xa5, 0xef, 0x09, 0xd0, 0xee, 0x5a, 0x35, 0x62, 0x40, 0xfd, 0x57, 0x32, 0x50, 0x51, 0x2c, 0x42, + 0x0f, 0xee, 0x1e, 0xac, 0xeb, 0x50, 0x68, 0x7b, 0x5a, 0x85, 0xcd, 0x82, 0xe9, 0x43, 0x5d, 0x0a, + 0x94, 0x50, 0x64, 0x49, 0x10, 0xbf, 0x09, 0x79, 0xb3, 0xef, 0xa0, 0x1b, 0xa8, 0xf2, 0x95, 0xba, + 0xf5, 0x59, 0x75, 0x17, 0xea, 0x45, 0x85, 0xd8, 0xf7, 0xdc, 0x66, 0x74, 0xa5, 0x64, 0x0a, 0xc6, + 0x3f, 0x85, 0x5b, 0x51, 0xbb, 0xe5, 0xf6, 0xfd, 0x8b, 0x71, 0xf4, 0x25, 0xbd, 0xc2, 0xc2, 0x60, + 0xc2, 0x8e, 0xed, 0x88, 0x29, 0x44, 0xe3, 0x32, 0x06, 0xfc, 0xeb, 0x00, 0x36, 0x4d, 0x16, 0xd9, + 0x47, 0xea, 0x0e, 0xd7, 0x2b, 0x73, 0x71, 0xc0, 0x10, 0xc1, 0x48, 0x20, 0xe3, 0x91, 0x30, 0x40, + 0x4d, 0xfb, 0x58, 0x7f, 0x6a, 0x6f, 0xd5, 0x88, 0xda, 0xf5, 0x3f, 0x4a, 0x25, 0x1c, 0x69, 0xe5, + 0x28, 0x5f, 0x79, 0x84, 0x2c, 0x4a, 0xea, 0xa0, 0x2b, 0xab, 0x67, 0x45, 0x5b, 0x36, 0xba, 0xc9, + 0x0f, 0x81, 0xdb, 0xf3, 0x73, 0x91, 0x5d, 0x72, 0x2e, 0x16, 0xd0, 0xce, 0xc6, 0xe4, 0x73, 0xf3, + 0x31, 0xf9, 0x3b, 0x00, 0x03, 0xc7, 0x3b, 0xd6, 0x89, 0xc1, 0xbc, 0x2e, 0xdc, 0x89, 0x20, 0x75, + 0x07, 0x8a, 0xe1, 0x67, 0x00, 0x51, 0x48, 0xe8, 0x43, 0x80, 0x51, 0x84, 0x52, 0xb5, 0xf8, 0x2e, + 0xac, 0x89, 0xe9, 0x3e, 0xa7, 0x97, 0xec, 0xf3, 0x0c, 0x5d, 0xfd, 0xeb, 0xb0, 0x31, 0x87, 0x84, + 0x93, 0x38, 0x36, 0x65, 0xf4, 0x2d, 0x00, 0xfc, 0x3d, 0x9f, 0x6f, 0xaf, 0xff, 0xc7, 0x34, 0xac, + 0xee, 0x9b, 0xae, 0x7d, 0x22, 0x02, 0x19, 0xf6, 0x36, 0xe8, 0x0f, 0xc5, 0xc8, 0x0c, 0x7b, 0xab, + 0x5a, 0x3a, 0x6c, 0x91, 0x4e, 0x26, 0x04, 0xe6, 0xf2, 0x47, 0xb8, 0x1d, 0x26, 0x72, 0x18, 0x95, + 0xc7, 0xeb, 0x16, 0xae, 0x9d, 0x63, 0xf7, 0x85, 0x1b, 0x84, 0x22, 0x1f, 0x36, 0xe3, 0xf2, 0x9b, + 0xfc, 0x15, 0xe5, 0x37, 0x85, 0xf9, 0xf9, 0xbf, 0x0b, 0xe5, 0xa0, 0xef, 0x0b, 0xe1, 0x06, 0x43, + 0x4f, 0x86, 0x9f, 0x90, 0x4c, 0x82, 0xa8, 0x16, 0xce, 0x7b, 0xee, 0xe2, 0x96, 0xdf, 0xb3, 0xdd, + 0x53, 0x5d, 0xe2, 0x35, 0x05, 0x43, 0x19, 0xa4, 0xa0, 0x8d, 0xfd, 0x03, 0x41, 0x01, 0x83, 0x9c, + 0x11, 0xb5, 0x29, 0x2c, 0x63, 0x4a, 0x31, 0xf0, 0x7c, 0x5b, 0xa8, 0xd8, 0x64, 0xc9, 0x48, 0x40, + 0x90, 0xd6, 0x31, 0xdd, 0xc1, 0xc4, 0x1c, 0x08, 0x9d, 0xbf, 0x8e, 0xda, 0xf5, 0xff, 0x95, 0x03, + 0xd8, 0x17, 0xa3, 0x63, 0xe1, 0x07, 0x43, 0x7b, 0x4c, 0xb9, 0x13, 0x5b, 0x17, 0x05, 0x57, 0x0c, + 0xfa, 0xcd, 0xdf, 0x9f, 0xaa, 0xd7, 0x9f, 0xcf, 0x76, 0xc6, 0xe4, 0xb3, 0x31, 0x1d, 0x9c, 0x1c, + 0x53, 0x0a, 0x5d, 0xf9, 0x44, 0xf3, 0x9f, 0x35, 0x92, 0x20, 0xaa, 0x7d, 0x33, 0xa5, 0x68, 0xb9, + 0x96, 0x8a, 0x19, 0x65, 0x8d, 0xa8, 0x4d, 0x37, 0x7e, 0x82, 0xc6, 0x44, 0x7a, 0x86, 0x70, 0xc5, + 0xf3, 0xe8, 0x32, 0x5b, 0x0c, 0xe2, 0xfb, 0x50, 0x19, 0x9b, 0x17, 0x23, 0xe1, 0xca, 0x7d, 0x21, + 0x87, 0x9e, 0xa5, 0xcb, 0x94, 0x5e, 0xbf, 0xbc, 0x83, 0x87, 0x49, 0x74, 0x63, 0x9a, 0x1a, 0x65, + 0xc2, 0x0d, 0x68, 0x97, 0xa8, 0x65, 0xd4, 0x2d, 0xbe, 0x05, 0xa0, 0x7e, 0x25, 0x54, 0xcd, 0x5c, + 0x18, 0xc9, 0x1c, 0x89, 0x40, 0xf8, 0x67, 0xb6, 0x52, 0x8f, 0x4a, 0xe7, 0xc4, 0x54, 0xa8, 0x4c, + 0x27, 0x81, 0xf0, 0x5b, 0x23, 0xd3, 0x76, 0xf4, 0x02, 0xc7, 0x00, 0xfe, 0x0e, 0xdc, 0x08, 0x26, + 0xc7, 0x28, 0x33, 0xc7, 0xa2, 0xe7, 0x1d, 0x88, 0xe7, 0x81, 0x23, 0xa4, 0x14, 0xbe, 0x2e, 0x85, + 0x58, 0xfc, 0xb0, 0x3e, 0x88, 0xec, 0x28, 0xfa, 0x5c, 0x09, 0xfe, 0x8a, 0xeb, 0xad, 0x22, 0x90, + 0x2e, 0x46, 0x63, 0x29, 0xce, 0x60, 0x55, 0x81, 0x74, 0xad, 0x5a, 0x9a, 0x7f, 0x09, 0xbe, 0x30, + 0x85, 0x64, 0xa8, 0xcc, 0x72, 0xb0, 0x63, 0xbb, 0xa6, 0x63, 0xff, 0x40, 0xe5, 0xf9, 0x33, 0xf5, + 0x31, 0x54, 0xa6, 0x26, 0x8e, 0x6e, 0x5f, 0xd2, 0x2f, 0x5d, 0xb0, 0xc3, 0x60, 0x55, 0xb5, 0xbb, + 0xd2, 0xb7, 0x29, 0x65, 0x12, 0x41, 0x9a, 0xb8, 0xcf, 0x3d, 0x96, 0xe6, 0xd7, 0x81, 0x29, 0x48, + 0xdb, 0x35, 0xc7, 0xe3, 0xc6, 0x78, 0xec, 0x08, 0x96, 0xa1, 0x9b, 0xad, 0x31, 0x54, 0x55, 0xed, + 0xb3, 0x6c, 0xfd, 0xbb, 0x70, 0x8b, 0x66, 0xe6, 0xa9, 0xf0, 0x23, 0x4f, 0x59, 0x8f, 0xf5, 0x06, + 0x6c, 0xa8, 0x5f, 0x07, 0x9e, 0x54, 0x8f, 0xc9, 0x7a, 0xe4, 0xb0, 0xa6, 0xc0, 0x68, 0x3c, 0x75, + 0x05, 0xdd, 0x57, 0x8d, 0x60, 0x11, 0x5e, 0xba, 0xfe, 0x87, 0x79, 0xe0, 0xb1, 0x40, 0xf4, 0x6c, + 0xe1, 0x6f, 0x9b, 0xd2, 0x4c, 0x84, 0x3a, 0x2b, 0x97, 0x26, 0xeb, 0x5f, 0x5c, 0x6a, 0x77, 0x13, + 0xf2, 0x76, 0x80, 0xbe, 0x9d, 0xae, 0xb7, 0xd5, 0x2d, 0xbe, 0x07, 0x30, 0x16, 0xbe, 0xed, 0x59, + 0x24, 0x41, 0xb9, 0x85, 0xd7, 0x26, 0xe6, 0x3b, 0xb5, 0x79, 0x18, 0xd1, 0x18, 0x09, 0x7a, 0xec, + 0x87, 0x6a, 0xa9, 0xd4, 0x77, 0x9e, 0x3a, 0x9d, 0x04, 0xf1, 0x37, 0xe1, 0xda, 0xd8, 0xb7, 0xfb, + 0x42, 0x2d, 0xc7, 0x93, 0xc0, 0x6a, 0xd2, 0x47, 0xfe, 0x0a, 0x84, 0xb9, 0xe8, 0x11, 0x4a, 0xa0, + 0xe9, 0x92, 0xc7, 0x13, 0x50, 0xb2, 0x57, 0xdf, 0xf0, 0x56, 0x15, 0xa9, 0x15, 0x63, 0xf1, 0x43, + 0x7e, 0x1f, 0x98, 0x7e, 0xb0, 0x6f, 0xbb, 0x7b, 0xc2, 0x1d, 0xc8, 0x21, 0x09, 0x77, 0xc5, 0x98, + 0x83, 0x93, 0x06, 0x53, 0x9f, 0x52, 0x52, 0x89, 0xa0, 0x92, 0x11, 0xb5, 0xd5, 0x57, 0x03, 0x1c, + 0xcf, 0xef, 0x4a, 0x5f, 0x97, 0xd6, 0x46, 0x6d, 0x34, 0x82, 0x02, 0xea, 0xeb, 0xa1, 0xef, 0x59, + 0x13, 0x4a, 0x53, 0x28, 0x25, 0x36, 0x0b, 0x8e, 0x31, 0xf7, 0x4d, 0x57, 0xd7, 0x3b, 0x56, 0x92, + 0x98, 0x11, 0x98, 0x9c, 0x3a, 0x2f, 0x88, 0x19, 0xae, 0x6b, 0xa7, 0x2e, 0x01, 0xd3, 0x38, 0x31, + 0x2b, 0x16, 0xe1, 0xc4, 0x7c, 0x68, 0xfc, 0x96, 0xef, 0xd9, 0x56, 0xcc, 0x4b, 0x95, 0xde, 0xcc, + 0xc1, 0x13, 0xb8, 0x31, 0x4f, 0x3e, 0x85, 0x1b, 0xf3, 0xbd, 0x0e, 0x39, 0xef, 0xe4, 0x44, 0xf8, + 0xf4, 0xe5, 0xcc, 0x92, 0xa1, 0x1a, 0xf5, 0x1f, 0xa5, 0x00, 0x62, 0x91, 0xc0, 0x8d, 0x10, 0xb7, + 0xe2, 0x8d, 0x7f, 0x0b, 0xae, 0x25, 0xc1, 0x8e, 0xae, 0x64, 0xa5, 0xdd, 0x10, 0x3f, 0xd8, 0x36, + 0x2f, 0x02, 0x96, 0xd6, 0x37, 0xaf, 0x35, 0xec, 0x99, 0x10, 0x54, 0x16, 0x78, 0x1d, 0x58, 0x0c, + 0xa4, 0xeb, 0x74, 0x01, 0xcb, 0x4e, 0xa3, 0x7e, 0x22, 0x4c, 0x3f, 0x60, 0xb9, 0xfa, 0x2e, 0xe4, + 0x55, 0x0e, 0x6b, 0x41, 0xf6, 0xf9, 0xe5, 0x4a, 0x49, 0xfe, 0x56, 0x0a, 0x60, 0x5b, 0x95, 0x3d, + 0xe3, 0xd9, 0xbe, 0x20, 0xa9, 0xbf, 0xc8, 0xce, 0x32, 0x2d, 0x8b, 0xca, 0xc7, 0x33, 0xd1, 0x67, + 0x7b, 0xb0, 0x89, 0xf2, 0x64, 0x86, 0xa5, 0x5f, 0x6a, 0x27, 0x46, 0x6d, 0x75, 0xac, 0x34, 0x3d, + 0xd7, 0x15, 0x7d, 0x3c, 0x94, 0xa2, 0x63, 0x25, 0x02, 0xd5, 0x7f, 0x98, 0x86, 0x52, 0x73, 0x68, + 0x4a, 0xf5, 0x95, 0x9b, 0x6f, 0x43, 0x71, 0x24, 0x82, 0xc0, 0x1c, 0x88, 0x40, 0xe7, 0x6c, 0x66, + 0x13, 0xae, 0x11, 0xee, 0xe6, 0x13, 0xd7, 0x17, 0xa6, 0xa5, 0x3e, 0xed, 0x13, 0x51, 0x29, 0x0e, + 0xae, 0x8c, 0x7c, 0xea, 0x97, 0xe0, 0xe0, 0x46, 0xdf, 0xe1, 0x75, 0xcc, 0x40, 0xa1, 0x44, 0xf1, + 0xb2, 0x24, 0xa8, 0xb6, 0x0f, 0xe5, 0x04, 0x29, 0x7f, 0x15, 0x2a, 0x9e, 0x63, 0x89, 0x40, 0x5d, + 0xee, 0x8b, 0xbf, 0x87, 0x38, 0x05, 0xa4, 0xca, 0x0b, 0xdc, 0xcf, 0xc2, 0xd7, 0xe9, 0xb7, 0xb0, + 0x59, 0xff, 0xcd, 0x22, 0x94, 0xb1, 0x53, 0xfb, 0x6a, 0x0c, 0x73, 0xcb, 0x51, 0x85, 0x82, 0xa7, + 0x39, 0xeb, 0x5b, 0x81, 0x5e, 0x82, 0xa7, 0xae, 0xe6, 0xc8, 0x4c, 0x57, 0x73, 0xdc, 0x86, 0x92, + 0xca, 0x15, 0x59, 0x0d, 0xa5, 0x1f, 0x33, 0x46, 0x0c, 0x40, 0x23, 0x66, 0xe4, 0x59, 0xa4, 0xa5, + 0x1b, 0x2a, 0xcd, 0x92, 0x31, 0x12, 0x10, 0xf2, 0x53, 0xf4, 0xf0, 0xcb, 0xda, 0x4f, 0x51, 0x4d, + 0x55, 0x56, 0x33, 0x76, 0x2e, 0x7a, 0x9e, 0xee, 0x6d, 0xdb, 0x8a, 0x2f, 0x57, 0x4f, 0xc3, 0x79, + 0x13, 0x0a, 0x7a, 0x59, 0x74, 0x32, 0xe9, 0xcb, 0x0b, 0x56, 0x42, 0xa3, 0x6f, 0xea, 0xbf, 0xfa, + 0x7e, 0x93, 0x11, 0x52, 0xf2, 0x47, 0x50, 0x36, 0xa5, 0x34, 0xfb, 0xc3, 0x91, 0xd6, 0xaa, 0x99, + 0x05, 0x79, 0xe5, 0x24, 0xa3, 0x46, 0x84, 0x6d, 0x24, 0x29, 0xf9, 0x16, 0x94, 0x7c, 0x61, 0x4e, + 0xa5, 0xb6, 0x5f, 0xbd, 0x82, 0x8d, 0x11, 0xe2, 0x1a, 0x31, 0x59, 0xf4, 0x69, 0x50, 0x48, 0x7c, + 0x1a, 0xf4, 0x2e, 0x94, 0xb5, 0xe8, 0x18, 0xf8, 0x48, 0x7d, 0x32, 0x25, 0x09, 0xaa, 0xfd, 0x24, + 0x05, 0x6b, 0xd3, 0xc3, 0xfb, 0xb3, 0xf8, 0x98, 0xdd, 0x37, 0xe3, 0x8f, 0xd9, 0x7d, 0x86, 0x0f, + 0xc3, 0xfd, 0x76, 0x0a, 0x20, 0x9e, 0x39, 0x3c, 0x5b, 0xd5, 0x47, 0xb7, 0x42, 0x6b, 0x5f, 0xb5, + 0xf8, 0xee, 0xd4, 0x97, 0x1a, 0xde, 0x59, 0x6a, 0x19, 0x12, 0x3f, 0x13, 0x75, 0xeb, 0x0f, 0x60, + 0x6d, 0x1a, 0x4e, 0xf5, 0xfe, 0xed, 0xbd, 0x96, 0x0a, 0x4e, 0xb5, 0xf7, 0x1b, 0x8f, 0x5a, 0xfa, + 0x9e, 0x59, 0xfb, 0xe0, 0x31, 0x4b, 0xd7, 0xfe, 0x38, 0x05, 0xa5, 0x68, 0x51, 0xf8, 0x77, 0x92, + 0xab, 0xa9, 0x2a, 0x5c, 0xde, 0x5e, 0x66, 0x35, 0xe3, 0x5f, 0x2d, 0x57, 0xfa, 0x17, 0x89, 0xc5, + 0xad, 0x79, 0xb0, 0x36, 0xfd, 0x70, 0x81, 0x9a, 0x7d, 0x34, 0xad, 0x66, 0xdf, 0x5a, 0xea, 0x95, + 0xa1, 0x8b, 0xbb, 0x67, 0x07, 0x52, 0x6b, 0xe0, 0x0f, 0xd2, 0xef, 0xa7, 0x6a, 0x77, 0x61, 0x35, + 0xf9, 0x68, 0xfe, 0xaa, 0xe9, 0xfd, 0x3f, 0xce, 0xc0, 0xda, 0x74, 0x91, 0x08, 0x5d, 0x5d, 0x53, + 0x05, 0x4a, 0x1d, 0xc7, 0x4a, 0x94, 0xfa, 0x33, 0xbe, 0x0e, 0x65, 0xed, 0x44, 0x13, 0x60, 0x83, + 0xc2, 0x5f, 0xde, 0x48, 0xb0, 0xbb, 0xc9, 0x0f, 0x76, 0xbe, 0xc9, 0x21, 0xbc, 0x72, 0xc8, 0xc6, + 0xbc, 0xa4, 0x3f, 0x5d, 0xf6, 0xc3, 0x34, 0xaf, 0x24, 0x0a, 0xce, 0x7f, 0x8c, 0x16, 0xe4, 0xfa, + 0xd6, 0xc4, 0xb5, 0x1c, 0x61, 0x45, 0xd0, 0x9f, 0x24, 0xa1, 0x51, 0xc5, 0xf8, 0x0f, 0xb3, 0x7c, + 0x0d, 0x4a, 0xdd, 0xc9, 0xb1, 0xae, 0x16, 0xff, 0x6b, 0x59, 0x7e, 0x13, 0x36, 0x34, 0x56, 0x5c, + 0x9c, 0xc9, 0x7e, 0x05, 0x4f, 0xb5, 0xb5, 0x86, 0x9a, 0x2f, 0xdd, 0x51, 0xf6, 0xd7, 0xb3, 0xd8, + 0x05, 0xba, 0xc9, 0xfe, 0x37, 0x88, 0x4f, 0x74, 0xb3, 0x87, 0xfd, 0x6a, 0x96, 0xaf, 0x03, 0x74, + 0x7b, 0xd1, 0x8b, 0x7e, 0x3d, 0xcb, 0xcb, 0x90, 0xef, 0xf6, 0x88, 0xdb, 0x8f, 0xb2, 0xfc, 0x06, + 0xb0, 0xf8, 0xa9, 0x2e, 0x59, 0xfd, 0xdb, 0xaa, 0x33, 0x51, 0x0d, 0xea, 0xdf, 0xc9, 0xe2, 0xb8, + 0xc2, 0x59, 0x66, 0x7f, 0x37, 0xcb, 0x19, 0x94, 0x13, 0x41, 0x55, 0xf6, 0xf7, 0xb2, 0x9c, 0x43, + 0x65, 0xdf, 0x0e, 0x02, 0xdb, 0x1d, 0xe8, 0x11, 0xfc, 0x1a, 0xbd, 0x79, 0x27, 0xba, 0x9c, 0xc4, + 0x7e, 0x23, 0xcb, 0x6f, 0x01, 0x4f, 0x26, 0x92, 0xf4, 0x83, 0xdf, 0x24, 0x6a, 0x75, 0x92, 0x06, + 0x1a, 0xf6, 0xf7, 0x89, 0x1a, 0x25, 0x41, 0x03, 0x7e, 0x8b, 0x26, 0xa4, 0x19, 0x17, 0xb9, 0x6a, + 0xf8, 0x8f, 0x89, 0x38, 0x5c, 0x4c, 0x05, 0xfb, 0x49, 0xf6, 0xfe, 0xef, 0x51, 0x22, 0x20, 0x59, + 0x2b, 0xc6, 0x57, 0xa1, 0xe8, 0x78, 0xee, 0x40, 0xaa, 0x0f, 0xa5, 0x56, 0xa0, 0x14, 0x0c, 0x3d, + 0x5f, 0x52, 0x93, 0x6e, 0x4f, 0xba, 0x74, 0xcb, 0x5e, 0xdd, 0x37, 0x50, 0xde, 0xa0, 0x0a, 0xac, + 0x4a, 0x73, 0xc0, 0xca, 0x51, 0x79, 0x6e, 0x36, 0x2a, 0x21, 0xa6, 0xdb, 0xfe, 0xe1, 0x6d, 0x6a, + 0x96, 0x47, 0xd4, 0x89, 0xef, 0xa8, 0x52, 0x62, 0x81, 0x9e, 0x80, 0xfa, 0x22, 0xe2, 0x78, 0x88, + 0x0e, 0x47, 0x49, 0x41, 0xbd, 0xef, 0xd9, 0xea, 0x9e, 0xae, 0xae, 0xcc, 0xb3, 0xb0, 0x1f, 0x51, + 0xf1, 0x09, 0x13, 0xf7, 0xff, 0x41, 0x0a, 0x56, 0xc3, 0x3b, 0xee, 0xf6, 0xc0, 0x76, 0x55, 0x31, + 0x72, 0xf8, 0xf9, 0xd9, 0xbe, 0x63, 0x8f, 0xc3, 0xcf, 0x39, 0xae, 0x43, 0xd9, 0xf2, 0xcd, 0x41, + 0xc3, 0xb5, 0xb6, 0x7d, 0x6f, 0xac, 0xba, 0xad, 0x52, 0x85, 0xaa, 0x08, 0xfa, 0xb9, 0x38, 0x46, + 0xf4, 0xb1, 0xf0, 0x59, 0x96, 0xaa, 0xfe, 0x86, 0xa6, 0x6f, 0xbb, 0x83, 0xd6, 0xb9, 0x14, 0x6e, + 0xa0, 0x8a, 0xa1, 0xcb, 0x50, 0x98, 0x04, 0xa2, 0x6f, 0x06, 0x82, 0xe5, 0xb1, 0x71, 0x3c, 0xb1, + 0x1d, 0x69, 0xbb, 0xea, 0x2b, 0x8a, 0x51, 0xb5, 0x73, 0x11, 0x47, 0x66, 0x8e, 0x6d, 0x56, 0xba, + 0xff, 0x6f, 0x52, 0x50, 0x26, 0xb1, 0x88, 0x83, 0xe1, 0xb1, 0x15, 0x57, 0x86, 0xc2, 0x5e, 0xf4, + 0x39, 0xbd, 0x3c, 0xa4, 0x3b, 0xa7, 0x2a, 0x18, 0xae, 0xc5, 0x42, 0x5d, 0x46, 0x55, 0x5f, 0xd6, + 0xcb, 0xf2, 0x57, 0xe0, 0x86, 0x21, 0x46, 0x9e, 0x14, 0xcf, 0x4c, 0x5b, 0x26, 0x2f, 0x1e, 0xe5, + 0xd0, 0x0d, 0x54, 0x8f, 0xc2, 0x9b, 0x46, 0x79, 0x72, 0x03, 0xf1, 0xb5, 0x21, 0xa4, 0x80, 0xa3, + 0x27, 0x88, 0xf6, 0x0b, 0x8b, 0x11, 0xca, 0xc7, 0x9e, 0xed, 0xe2, 0xdb, 0xe8, 0x82, 0x34, 0x41, + 0x28, 0xab, 0x82, 0x20, 0xb8, 0x7f, 0x00, 0x37, 0x17, 0xe7, 0x02, 0xd4, 0xd5, 0x69, 0xfa, 0x86, + 0x33, 0x5d, 0x45, 0x79, 0xe6, 0xdb, 0xea, 0x8e, 0x6b, 0x09, 0x72, 0x9d, 0xe7, 0x2e, 0x89, 0xc5, + 0x06, 0x54, 0x0e, 0xbc, 0x04, 0x0d, 0xcb, 0xdc, 0x7f, 0x0f, 0x20, 0x0e, 0xd8, 0xa9, 0x4f, 0x5d, + 0x91, 0x0c, 0x91, 0xf2, 0x7d, 0x34, 0x11, 0x81, 0x76, 0xe9, 0x9e, 0xd9, 0x72, 0xe8, 0x4d, 0xc2, + 0x3c, 0x19, 0x4b, 0xdf, 0xef, 0x4f, 0xe5, 0x7d, 0xe2, 0xd9, 0x0c, 0x7b, 0xbf, 0x92, 0xb8, 0x9f, + 0x95, 0x52, 0x19, 0x05, 0xfa, 0xff, 0x1d, 0xea, 0x7b, 0x14, 0x3a, 0xdf, 0x62, 0xa9, 0xef, 0x51, + 0x44, 0xe3, 0xcb, 0xaa, 0x0f, 0x73, 0xb9, 0x7d, 0xe1, 0x08, 0x8b, 0xe5, 0xee, 0xbf, 0x0f, 0xeb, + 0x7a, 0x8e, 0xfa, 0x22, 0x08, 0xc2, 0xfb, 0x4d, 0x87, 0xbe, 0x7d, 0xa6, 0xbe, 0x79, 0xb1, 0x0a, + 0xc5, 0x43, 0xe1, 0x07, 0x9e, 0x4b, 0xdf, 0xfb, 0x00, 0xc8, 0x77, 0x87, 0xa6, 0x8f, 0xef, 0xb8, + 0xff, 0x55, 0x3d, 0xbb, 0x4f, 0xce, 0xc3, 0x33, 0x05, 0x37, 0x9e, 0xfe, 0xdc, 0x8d, 0x29, 0x4d, + 0x8d, 0x2e, 0x7d, 0x61, 0x8e, 0x58, 0xfa, 0x7e, 0x13, 0x4a, 0x74, 0x3d, 0xea, 0xb1, 0xed, 0x5a, + 0x38, 0xf2, 0x2d, 0x5d, 0xaa, 0x4f, 0xdf, 0x61, 0x3a, 0xa3, 0x79, 0x2c, 0xaa, 0x2f, 0xd6, 0xb2, + 0x34, 0xbf, 0x09, 0xbc, 0x31, 0x91, 0xde, 0xc8, 0xa4, 0x6b, 0xbd, 0xce, 0x85, 0xfa, 0xba, 0x71, + 0xe6, 0xfe, 0xb7, 0x80, 0xab, 0xa0, 0x9e, 0x25, 0xce, 0x6d, 0x77, 0x10, 0x7d, 0x4f, 0x00, 0xe8, + 0xe3, 0x20, 0x96, 0x38, 0x0f, 0xef, 0xb6, 0x85, 0x8d, 0xf0, 0x13, 0x25, 0x3b, 0xde, 0xc4, 0xc5, + 0x4e, 0x3f, 0x85, 0xeb, 0x4a, 0x36, 0x71, 0x14, 0x74, 0x67, 0xf4, 0xd2, 0x48, 0x83, 0xba, 0xdb, + 0x26, 0x27, 0x41, 0x84, 0xcb, 0x52, 0xd8, 0xb1, 0xc8, 0x4b, 0x8f, 0xe1, 0xe9, 0xfb, 0x75, 0xb8, + 0xb6, 0x20, 0x54, 0x42, 0xa7, 0x81, 0x72, 0x18, 0xd9, 0xca, 0xfd, 0x8f, 0x60, 0x43, 0xe9, 0xaf, + 0x03, 0x75, 0xab, 0x2f, 0x9c, 0xb6, 0x67, 0xed, 0x9d, 0xb6, 0x9a, 0xe9, 0x66, 0x6b, 0x6f, 0xef, + 0xc9, 0x5e, 0xc3, 0x60, 0x29, 0x12, 0xa4, 0x4e, 0xef, 0xa8, 0xd9, 0x39, 0x38, 0x68, 0x35, 0x7b, + 0xad, 0x6d, 0x96, 0xde, 0xba, 0xff, 0xef, 0x7f, 0x76, 0x27, 0xf5, 0xd3, 0x9f, 0xdd, 0x49, 0xfd, + 0xb7, 0x9f, 0xdd, 0x49, 0xfd, 0xe8, 0xe7, 0x77, 0x56, 0x7e, 0xfa, 0xf3, 0x3b, 0x2b, 0xff, 0xe9, + 0xe7, 0x77, 0x56, 0x3e, 0x65, 0xb3, 0xff, 0x82, 0xe7, 0x38, 0x4f, 0xde, 0xc8, 0xdb, 0xff, 0x2f, + 0x00, 0x00, 0xff, 0xff, 0x71, 0x13, 0xf7, 0x69, 0x9d, 0x67, 0x00, 0x00, } func (m *SmartBlockSnapshotBase) Marshal() (dAtA []byte, err error) { @@ -33706,7 +33675,7 @@ func (m *InvitePayload) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.InviteType |= InvitePayloadInviteType(b&0x7F) << shift + m.InviteType |= InviteType(b&0x7F) << shift if b < 0x80 { break } diff --git a/pkg/lib/pb/model/protos/models.proto b/pkg/lib/pb/model/protos/models.proto index eea28866a..b10480e81 100644 --- a/pkg/lib/pb/model/protos/models.proto +++ b/pkg/lib/pb/model/protos/models.proto @@ -1210,11 +1210,6 @@ message InvitePayload { InviteType inviteType = 8; bytes guestKey = 9; - enum InviteType { - JoinAsMember = 0; // aclKey contains the key to sign the ACL record - JoinAsGuest = 1; // guestKey contains the privateKey of the guest user - JoinAsMemberWithoutApprove = 2; // aclKey contains the key to sign the ACL record and decrypt the read key - } } message IdentityProfile { From e556437360eca0eeb35b047a903af094b44e567b Mon Sep 17 00:00:00 2001 From: Mikhail Rakhmanov Date: Thu, 15 May 2025 13:30:36 +0200 Subject: [PATCH 042/164] GO-4400 Fix invite service tests and workspace tests --- core/acl/aclservice_test.go | 2 +- core/block/editor/workspaces.go | 5 + core/block/editor/workspaces_test.go | 23 ++- core/domain/mock_domain/mock_InviteObject.go | 70 ++++---- core/inviteservice/inviteservice_test.go | 44 ++--- .../mock_inviteservice/mock_InviteService.go | 83 +++++++-- go.mod | 2 +- go.sum | 10 +- space/mock_space/mock_Service.go | 48 ++++++ .../mock_spacefactory/mock_SpaceFactory.go | 60 +++++++ .../mock_techspace/mock_SpaceView.go | 157 ------------------ 11 files changed, 240 insertions(+), 264 deletions(-) diff --git a/core/acl/aclservice_test.go b/core/acl/aclservice_test.go index 627997f98..b2d5d7d8e 100644 --- a/core/acl/aclservice_test.go +++ b/core/acl/aclservice_test.go @@ -365,7 +365,7 @@ func TestService_ViewInvite(t *testing.T) { InviteRevokes: invRecIds, }) require.NoError(t, err) - err = aclList.AddRawRecord(list.WrapAclRecord(removeInv)) + err = aclList.AddRawRecord(list.WrapAclRecord(removeInv.Rec)) require.NoError(t, err) recs, err := aclList.RecordsAfter(ctx, "") require.NoError(t, err) diff --git a/core/block/editor/workspaces.go b/core/block/editor/workspaces.go index c7f8011fc..7e53bffad 100644 --- a/core/block/editor/workspaces.go +++ b/core/block/editor/workspaces.go @@ -1,6 +1,8 @@ package editor import ( + "github.com/anyproto/any-sync/commonspace/object/acl/list" + "github.com/anyproto/anytype-heart/core/anytype/config" "github.com/anyproto/anytype-heart/core/block/editor/basic" "github.com/anyproto/anytype-heart/core/block/editor/dataview" @@ -110,6 +112,9 @@ func (w *Workspaces) GetExistingInviteInfo() (inviteInfo domain.InviteInfo) { inviteInfo.Permissions = domain.ConvertParticipantPermissions(model.ParticipantPermissions(details.GetInt64(bundle.RelationKeySpaceInvitePermissions))) inviteInfo.InviteFileCid = details.GetString(bundle.RelationKeySpaceInviteFileCid) inviteInfo.InviteFileKey = details.GetString(bundle.RelationKeySpaceInviteFileKey) + if inviteInfo.InviteType == domain.InviteTypeDefault { + inviteInfo.Permissions = list.AclPermissionsNone + } return } diff --git a/core/block/editor/workspaces_test.go b/core/block/editor/workspaces_test.go index d26a17f4c..6db93f5e4 100644 --- a/core/block/editor/workspaces_test.go +++ b/core/block/editor/workspaces_test.go @@ -3,6 +3,7 @@ package editor import ( "testing" + "github.com/anyproto/any-sync/commonspace/object/acl/list" "github.com/stretchr/testify/require" "go.uber.org/mock/gomock" @@ -11,23 +12,29 @@ import ( "github.com/anyproto/anytype-heart/core/block/editor/smartblock/smarttest" "github.com/anyproto/anytype-heart/core/block/editor/state" "github.com/anyproto/anytype-heart/core/block/migration" + "github.com/anyproto/anytype-heart/core/domain" ) func TestWorkspaces_FileInfo(t *testing.T) { t.Run("file info add remove", func(t *testing.T) { fx := newWorkspacesFixture(t) defer fx.finish() - err := fx.SetInviteFileInfo("fileId", "fileKey") + info := domain.InviteInfo{ + InviteFileCid: "fileId", + InviteFileKey: "fileKey", + InviteType: domain.InviteTypeAnyone, + Permissions: list.AclPermissionsWriter, + } + err := fx.SetInviteFileInfo(info) require.NoError(t, err) - fileId, fileKey := fx.GetExistingInviteInfo() - require.Equal(t, "fileId", fileId) - require.Equal(t, "fileKey", fileKey) - fileId, err = fx.RemoveExistingInviteInfo() + returnedInfo := fx.GetExistingInviteInfo() + require.Equal(t, info, returnedInfo) + returnedInfo, err = fx.RemoveExistingInviteInfo() require.NoError(t, err) - require.Equal(t, "fileId", fileId) - fileId, err = fx.RemoveExistingInviteInfo() + require.Equal(t, info, returnedInfo) + returnedInfo, err = fx.RemoveExistingInviteInfo() require.NoError(t, err) - require.Empty(t, fileId) + require.Empty(t, returnedInfo) }) t.Run("file info empty", func(t *testing.T) { fx := newWorkspacesFixture(t) diff --git a/core/domain/mock_domain/mock_InviteObject.go b/core/domain/mock_domain/mock_InviteObject.go index 623cd8e45..c45eaa009 100644 --- a/core/domain/mock_domain/mock_InviteObject.go +++ b/core/domain/mock_domain/mock_InviteObject.go @@ -2,7 +2,10 @@ package mock_domain -import mock "github.com/stretchr/testify/mock" +import ( + domain "github.com/anyproto/anytype-heart/core/domain" + mock "github.com/stretchr/testify/mock" +) // MockInviteObject is an autogenerated mock type for the InviteObject type type MockInviteObject struct { @@ -73,31 +76,21 @@ func (_c *MockInviteObject_GetExistingGuestInviteInfo_Call) RunAndReturn(run fun } // GetExistingInviteInfo provides a mock function with given fields: -func (_m *MockInviteObject) GetExistingInviteInfo() (string, string) { +func (_m *MockInviteObject) GetExistingInviteInfo() domain.InviteInfo { ret := _m.Called() if len(ret) == 0 { panic("no return value specified for GetExistingInviteInfo") } - var r0 string - var r1 string - if rf, ok := ret.Get(0).(func() (string, string)); ok { - return rf() - } - if rf, ok := ret.Get(0).(func() string); ok { + var r0 domain.InviteInfo + if rf, ok := ret.Get(0).(func() domain.InviteInfo); ok { r0 = rf() } else { - r0 = ret.Get(0).(string) + r0 = ret.Get(0).(domain.InviteInfo) } - if rf, ok := ret.Get(1).(func() string); ok { - r1 = rf() - } else { - r1 = ret.Get(1).(string) - } - - return r0, r1 + return r0 } // MockInviteObject_GetExistingInviteInfo_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetExistingInviteInfo' @@ -117,33 +110,33 @@ func (_c *MockInviteObject_GetExistingInviteInfo_Call) Run(run func()) *MockInvi return _c } -func (_c *MockInviteObject_GetExistingInviteInfo_Call) Return(fileCid string, fileKey string) *MockInviteObject_GetExistingInviteInfo_Call { - _c.Call.Return(fileCid, fileKey) +func (_c *MockInviteObject_GetExistingInviteInfo_Call) Return(_a0 domain.InviteInfo) *MockInviteObject_GetExistingInviteInfo_Call { + _c.Call.Return(_a0) return _c } -func (_c *MockInviteObject_GetExistingInviteInfo_Call) RunAndReturn(run func() (string, string)) *MockInviteObject_GetExistingInviteInfo_Call { +func (_c *MockInviteObject_GetExistingInviteInfo_Call) RunAndReturn(run func() domain.InviteInfo) *MockInviteObject_GetExistingInviteInfo_Call { _c.Call.Return(run) return _c } // RemoveExistingInviteInfo provides a mock function with given fields: -func (_m *MockInviteObject) RemoveExistingInviteInfo() (string, error) { +func (_m *MockInviteObject) RemoveExistingInviteInfo() (domain.InviteInfo, error) { ret := _m.Called() if len(ret) == 0 { panic("no return value specified for RemoveExistingInviteInfo") } - var r0 string + var r0 domain.InviteInfo var r1 error - if rf, ok := ret.Get(0).(func() (string, error)); ok { + if rf, ok := ret.Get(0).(func() (domain.InviteInfo, error)); ok { return rf() } - if rf, ok := ret.Get(0).(func() string); ok { + if rf, ok := ret.Get(0).(func() domain.InviteInfo); ok { r0 = rf() } else { - r0 = ret.Get(0).(string) + r0 = ret.Get(0).(domain.InviteInfo) } if rf, ok := ret.Get(1).(func() error); ok { @@ -172,12 +165,12 @@ func (_c *MockInviteObject_RemoveExistingInviteInfo_Call) Run(run func()) *MockI return _c } -func (_c *MockInviteObject_RemoveExistingInviteInfo_Call) Return(fileCid string, err error) *MockInviteObject_RemoveExistingInviteInfo_Call { - _c.Call.Return(fileCid, err) +func (_c *MockInviteObject_RemoveExistingInviteInfo_Call) Return(_a0 domain.InviteInfo, _a1 error) *MockInviteObject_RemoveExistingInviteInfo_Call { + _c.Call.Return(_a0, _a1) return _c } -func (_c *MockInviteObject_RemoveExistingInviteInfo_Call) RunAndReturn(run func() (string, error)) *MockInviteObject_RemoveExistingInviteInfo_Call { +func (_c *MockInviteObject_RemoveExistingInviteInfo_Call) RunAndReturn(run func() (domain.InviteInfo, error)) *MockInviteObject_RemoveExistingInviteInfo_Call { _c.Call.Return(run) return _c } @@ -229,17 +222,17 @@ func (_c *MockInviteObject_SetGuestInviteFileInfo_Call) RunAndReturn(run func(st return _c } -// SetInviteFileInfo provides a mock function with given fields: fileCid, fileKey -func (_m *MockInviteObject) SetInviteFileInfo(fileCid string, fileKey string) error { - ret := _m.Called(fileCid, fileKey) +// SetInviteFileInfo provides a mock function with given fields: inviteInfo +func (_m *MockInviteObject) SetInviteFileInfo(inviteInfo domain.InviteInfo) error { + ret := _m.Called(inviteInfo) if len(ret) == 0 { panic("no return value specified for SetInviteFileInfo") } var r0 error - if rf, ok := ret.Get(0).(func(string, string) error); ok { - r0 = rf(fileCid, fileKey) + if rf, ok := ret.Get(0).(func(domain.InviteInfo) error); ok { + r0 = rf(inviteInfo) } else { r0 = ret.Error(0) } @@ -253,15 +246,14 @@ type MockInviteObject_SetInviteFileInfo_Call struct { } // SetInviteFileInfo is a helper method to define mock.On call -// - fileCid string -// - fileKey string -func (_e *MockInviteObject_Expecter) SetInviteFileInfo(fileCid interface{}, fileKey interface{}) *MockInviteObject_SetInviteFileInfo_Call { - return &MockInviteObject_SetInviteFileInfo_Call{Call: _e.mock.On("SetInviteFileInfo", fileCid, fileKey)} +// - inviteInfo domain.InviteInfo +func (_e *MockInviteObject_Expecter) SetInviteFileInfo(inviteInfo interface{}) *MockInviteObject_SetInviteFileInfo_Call { + return &MockInviteObject_SetInviteFileInfo_Call{Call: _e.mock.On("SetInviteFileInfo", inviteInfo)} } -func (_c *MockInviteObject_SetInviteFileInfo_Call) Run(run func(fileCid string, fileKey string)) *MockInviteObject_SetInviteFileInfo_Call { +func (_c *MockInviteObject_SetInviteFileInfo_Call) Run(run func(inviteInfo domain.InviteInfo)) *MockInviteObject_SetInviteFileInfo_Call { _c.Call.Run(func(args mock.Arguments) { - run(args[0].(string), args[1].(string)) + run(args[0].(domain.InviteInfo)) }) return _c } @@ -271,7 +263,7 @@ func (_c *MockInviteObject_SetInviteFileInfo_Call) Return(err error) *MockInvite return _c } -func (_c *MockInviteObject_SetInviteFileInfo_Call) RunAndReturn(run func(string, string) error) *MockInviteObject_SetInviteFileInfo_Call { +func (_c *MockInviteObject_SetInviteFileInfo_Call) RunAndReturn(run func(domain.InviteInfo) error) *MockInviteObject_SetInviteFileInfo_Call { _c.Call.Return(run) return _c } diff --git a/core/inviteservice/inviteservice_test.go b/core/inviteservice/inviteservice_test.go index 6837ede76..1a2dc36e9 100644 --- a/core/inviteservice/inviteservice_test.go +++ b/core/inviteservice/inviteservice_test.go @@ -5,6 +5,7 @@ import ( "testing" "github.com/anyproto/any-sync/app" + "github.com/anyproto/any-sync/commonspace/object/acl/list" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" "go.uber.org/mock/gomock" @@ -12,14 +13,13 @@ import ( "github.com/anyproto/anytype-heart/core/anytype/account/mock_account" "github.com/anyproto/anytype-heart/core/block/editor/smartblock" "github.com/anyproto/anytype-heart/core/block/editor/smartblock/smarttest" + "github.com/anyproto/anytype-heart/core/domain" "github.com/anyproto/anytype-heart/core/domain/mock_domain" "github.com/anyproto/anytype-heart/core/files/fileacl/mock_fileacl" "github.com/anyproto/anytype-heart/core/invitestore/mock_invitestore" "github.com/anyproto/anytype-heart/pkg/lib/threads" - "github.com/anyproto/anytype-heart/space/clientspace" "github.com/anyproto/anytype-heart/space/clientspace/mock_clientspace" "github.com/anyproto/anytype-heart/space/mock_space" - "github.com/anyproto/anytype-heart/space/techspace" "github.com/anyproto/anytype-heart/space/techspace/mock_techspace" "github.com/anyproto/anytype-heart/tests/testutil" ) @@ -30,38 +30,9 @@ type mockInviteObject struct { } func TestInviteService_GetCurrent(t *testing.T) { - t.Run("get current migration", func(t *testing.T) { - fx := newFixture(t) - defer fx.ctrl.Finish() - fx.mockSpaceService.EXPECT().TechSpace().Return(&clientspace.TechSpace{TechSpace: fx.mockTechSpace}) - fx.mockTechSpace.EXPECT().DoSpaceView(ctx, "spaceId", mock.Anything).RunAndReturn( - func(ctx context.Context, spaceId string, f func(view techspace.SpaceView) error) error { - return f(fx.mockSpaceView) - }) - fx.mockSpaceView.EXPECT().GetExistingInviteInfo().Return("fileId", "fileKey") - fx.mockSpaceView.EXPECT().RemoveExistingInviteInfo().Return("fileId", nil) - fx.mockSpaceService.EXPECT().Get(ctx, "spaceId").Return(fx.mockSpace, nil) - fx.mockSpace.EXPECT().DerivedIDs().Return(threads.DerivedSmartblockIds{ - Workspace: "workspaceId", - }) - fx.mockSpace.EXPECT().Do("workspaceId", mock.Anything).RunAndReturn(func(s string, f func(smartblock.SmartBlock) error) error { - return f(mockInviteObject{SmartBlock: smarttest.New("root"), MockInviteObject: fx.mockInviteObject}) - }) - fx.mockInviteObject.EXPECT().SetInviteFileInfo("fileId", "fileKey").Return(nil) - info, err := fx.GetCurrent(ctx, "spaceId") - require.NoError(t, err) - require.Equal(t, "fileKey", info.InviteFileKey) - require.Equal(t, "fileId", info.InviteFileCid) - }) t.Run("get current no migration", func(t *testing.T) { fx := newFixture(t) defer fx.ctrl.Finish() - fx.mockSpaceService.EXPECT().TechSpace().Return(&clientspace.TechSpace{TechSpace: fx.mockTechSpace}) - fx.mockTechSpace.EXPECT().DoSpaceView(ctx, "spaceId", mock.Anything).RunAndReturn( - func(ctx context.Context, spaceId string, f func(view techspace.SpaceView) error) error { - return f(fx.mockSpaceView) - }) - fx.mockSpaceView.EXPECT().GetExistingInviteInfo().Return("", "") fx.mockSpaceService.EXPECT().Get(ctx, "spaceId").Return(fx.mockSpace, nil) fx.mockSpace.EXPECT().DerivedIDs().Return(threads.DerivedSmartblockIds{ Workspace: "workspaceId", @@ -69,11 +40,16 @@ func TestInviteService_GetCurrent(t *testing.T) { fx.mockSpace.EXPECT().Do("workspaceId", mock.Anything).RunAndReturn(func(s string, f func(smartblock.SmartBlock) error) error { return f(mockInviteObject{SmartBlock: smarttest.New("root"), MockInviteObject: fx.mockInviteObject}) }) - fx.mockInviteObject.EXPECT().GetExistingInviteInfo().Return("fileId", "fileKey") + returnedInfo := domain.InviteInfo{ + InviteFileCid: "fileCid", + InviteFileKey: "fileKey", + InviteType: domain.InviteTypeAnyone, + Permissions: list.AclPermissionsWriter, + } + fx.mockInviteObject.EXPECT().GetExistingInviteInfo().Return(returnedInfo) info, err := fx.GetCurrent(ctx, "spaceId") require.NoError(t, err) - require.Equal(t, "fileKey", info.InviteFileKey) - require.Equal(t, "fileId", info.InviteFileCid) + require.Equal(t, returnedInfo, info) }) } diff --git a/core/inviteservice/mock_inviteservice/mock_InviteService.go b/core/inviteservice/mock_inviteservice/mock_InviteService.go index fc5caf12f..ea63a2c05 100644 --- a/core/inviteservice/mock_inviteservice/mock_InviteService.go +++ b/core/inviteservice/mock_inviteservice/mock_InviteService.go @@ -12,6 +12,10 @@ import ( domain "github.com/anyproto/anytype-heart/core/domain" + inviteservice "github.com/anyproto/anytype-heart/core/inviteservice" + + list "github.com/anyproto/any-sync/commonspace/object/acl/list" + mock "github.com/stretchr/testify/mock" model "github.com/anyproto/anytype-heart/pkg/lib/pb/model" @@ -30,6 +34,54 @@ func (_m *MockInviteService) EXPECT() *MockInviteService_Expecter { return &MockInviteService_Expecter{mock: &_m.Mock} } +// Change provides a mock function with given fields: ctx, spaceId, permissions +func (_m *MockInviteService) Change(ctx context.Context, spaceId string, permissions list.AclPermissions) error { + ret := _m.Called(ctx, spaceId, permissions) + + if len(ret) == 0 { + panic("no return value specified for Change") + } + + var r0 error + if rf, ok := ret.Get(0).(func(context.Context, string, list.AclPermissions) error); ok { + r0 = rf(ctx, spaceId, permissions) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// MockInviteService_Change_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Change' +type MockInviteService_Change_Call struct { + *mock.Call +} + +// Change is a helper method to define mock.On call +// - ctx context.Context +// - spaceId string +// - permissions list.AclPermissions +func (_e *MockInviteService_Expecter) Change(ctx interface{}, spaceId interface{}, permissions interface{}) *MockInviteService_Change_Call { + return &MockInviteService_Change_Call{Call: _e.mock.On("Change", ctx, spaceId, permissions)} +} + +func (_c *MockInviteService_Change_Call) Run(run func(ctx context.Context, spaceId string, permissions list.AclPermissions)) *MockInviteService_Change_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(string), args[2].(list.AclPermissions)) + }) + return _c +} + +func (_c *MockInviteService_Change_Call) Return(_a0 error) *MockInviteService_Change_Call { + _c.Call.Return(_a0) + return _c +} + +func (_c *MockInviteService_Change_Call) RunAndReturn(run func(context.Context, string, list.AclPermissions) error) *MockInviteService_Change_Call { + _c.Call.Return(run) + return _c +} + // Close provides a mock function with given fields: ctx func (_m *MockInviteService) Close(ctx context.Context) error { ret := _m.Called(ctx) @@ -76,9 +128,9 @@ func (_c *MockInviteService_Close_Call) RunAndReturn(run func(context.Context) e return _c } -// Generate provides a mock function with given fields: ctx, spaceId, inviteKey, sendInvite -func (_m *MockInviteService) Generate(ctx context.Context, spaceId string, inviteKey crypto.PrivKey, sendInvite func() error) (domain.InviteInfo, error) { - ret := _m.Called(ctx, spaceId, inviteKey, sendInvite) +// Generate provides a mock function with given fields: ctx, params, sendInvite +func (_m *MockInviteService) Generate(ctx context.Context, params inviteservice.GenerateInviteParams, sendInvite func() error) (domain.InviteInfo, error) { + ret := _m.Called(ctx, params, sendInvite) if len(ret) == 0 { panic("no return value specified for Generate") @@ -86,17 +138,17 @@ func (_m *MockInviteService) Generate(ctx context.Context, spaceId string, invit var r0 domain.InviteInfo var r1 error - if rf, ok := ret.Get(0).(func(context.Context, string, crypto.PrivKey, func() error) (domain.InviteInfo, error)); ok { - return rf(ctx, spaceId, inviteKey, sendInvite) + if rf, ok := ret.Get(0).(func(context.Context, inviteservice.GenerateInviteParams, func() error) (domain.InviteInfo, error)); ok { + return rf(ctx, params, sendInvite) } - if rf, ok := ret.Get(0).(func(context.Context, string, crypto.PrivKey, func() error) domain.InviteInfo); ok { - r0 = rf(ctx, spaceId, inviteKey, sendInvite) + if rf, ok := ret.Get(0).(func(context.Context, inviteservice.GenerateInviteParams, func() error) domain.InviteInfo); ok { + r0 = rf(ctx, params, sendInvite) } else { r0 = ret.Get(0).(domain.InviteInfo) } - if rf, ok := ret.Get(1).(func(context.Context, string, crypto.PrivKey, func() error) error); ok { - r1 = rf(ctx, spaceId, inviteKey, sendInvite) + if rf, ok := ret.Get(1).(func(context.Context, inviteservice.GenerateInviteParams, func() error) error); ok { + r1 = rf(ctx, params, sendInvite) } else { r1 = ret.Error(1) } @@ -111,16 +163,15 @@ type MockInviteService_Generate_Call struct { // Generate is a helper method to define mock.On call // - ctx context.Context -// - spaceId string -// - inviteKey crypto.PrivKey +// - params inviteservice.GenerateInviteParams // - sendInvite func() error -func (_e *MockInviteService_Expecter) Generate(ctx interface{}, spaceId interface{}, inviteKey interface{}, sendInvite interface{}) *MockInviteService_Generate_Call { - return &MockInviteService_Generate_Call{Call: _e.mock.On("Generate", ctx, spaceId, inviteKey, sendInvite)} +func (_e *MockInviteService_Expecter) Generate(ctx interface{}, params interface{}, sendInvite interface{}) *MockInviteService_Generate_Call { + return &MockInviteService_Generate_Call{Call: _e.mock.On("Generate", ctx, params, sendInvite)} } -func (_c *MockInviteService_Generate_Call) Run(run func(ctx context.Context, spaceId string, inviteKey crypto.PrivKey, sendInvite func() error)) *MockInviteService_Generate_Call { +func (_c *MockInviteService_Generate_Call) Run(run func(ctx context.Context, params inviteservice.GenerateInviteParams, sendInvite func() error)) *MockInviteService_Generate_Call { _c.Call.Run(func(args mock.Arguments) { - run(args[0].(context.Context), args[1].(string), args[2].(crypto.PrivKey), args[3].(func() error)) + run(args[0].(context.Context), args[1].(inviteservice.GenerateInviteParams), args[2].(func() error)) }) return _c } @@ -130,7 +181,7 @@ func (_c *MockInviteService_Generate_Call) Return(_a0 domain.InviteInfo, _a1 err return _c } -func (_c *MockInviteService_Generate_Call) RunAndReturn(run func(context.Context, string, crypto.PrivKey, func() error) (domain.InviteInfo, error)) *MockInviteService_Generate_Call { +func (_c *MockInviteService_Generate_Call) RunAndReturn(run func(context.Context, inviteservice.GenerateInviteParams, func() error) (domain.InviteInfo, error)) *MockInviteService_Generate_Call { _c.Call.Return(run) return _c } diff --git a/go.mod b/go.mod index 26ecd062d..d763ca2a8 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/VividCortex/ewma v1.2.0 github.com/adrium/goheif v0.0.0-20230113233934-ca402e77a786 github.com/anyproto/any-store v0.2.0 - github.com/anyproto/any-sync v0.7.6-0.20250515080349-03fd12ac2a3e + github.com/anyproto/any-sync v0.7.6-0.20250515110754-b8a877201bb5 github.com/anyproto/anytype-publish-server/publishclient v0.0.0-20250131145601-de288583ff2a github.com/anyproto/anytype-push-server/pushclient v0.0.0-20250402124745-6451298047f7 github.com/anyproto/go-chash v0.1.0 diff --git a/go.sum b/go.sum index aa60f704f..7106ca066 100644 --- a/go.sum +++ b/go.sum @@ -80,14 +80,8 @@ github.com/andybalholm/cascadia v1.3.3 h1:AG2YHrzJIm4BZ19iwJ/DAua6Btl3IwJX+VI4kk github.com/andybalholm/cascadia v1.3.3/go.mod h1:xNd9bqTn98Ln4DwST8/nG+H0yuB8Hmgu1YHNnWw0GeA= github.com/anyproto/any-store v0.2.0 h1:M8Eb0dxuEk62lIGZ3k1nADlaPQzmo6ilWLCCcY9WX10= github.com/anyproto/any-store v0.2.0/go.mod h1:N59OGYe/uXRNpr6ytfbBpbC+1viDgSbsVNXevOMxJAM= -github.com/anyproto/any-sync v0.7.6-0.20250512200224-c2de5ecb12c0 h1:ZS9++jR+3NCP5MK/aBy/McoyLiwsBzA7jwMDI15+b9o= -github.com/anyproto/any-sync v0.7.6-0.20250512200224-c2de5ecb12c0/go.mod h1:G6i3PT6pN6lcC5rim5Ed7ppUPuQgU5PyHgiqskrggL0= -github.com/anyproto/any-sync v0.7.6-0.20250513132905-854823d81e74 h1:Io1SWrvvWjnXjtJsNvRcfvv52U6H7DAHLHcpkm8Vo7A= -github.com/anyproto/any-sync v0.7.6-0.20250513132905-854823d81e74/go.mod h1:G6i3PT6pN6lcC5rim5Ed7ppUPuQgU5PyHgiqskrggL0= -github.com/anyproto/any-sync v0.7.6-0.20250513194226-2f661565dcca h1:DXXRxTfKBA8q22wCDvng182WjRjeAQqmGaZs/hXdMyo= -github.com/anyproto/any-sync v0.7.6-0.20250513194226-2f661565dcca/go.mod h1:G6i3PT6pN6lcC5rim5Ed7ppUPuQgU5PyHgiqskrggL0= -github.com/anyproto/any-sync v0.7.6-0.20250515080349-03fd12ac2a3e h1:FIZDZYAVB5ZJOKZZI9cJYcfKeyH51MEOLTqbVC809Js= -github.com/anyproto/any-sync v0.7.6-0.20250515080349-03fd12ac2a3e/go.mod h1:G6i3PT6pN6lcC5rim5Ed7ppUPuQgU5PyHgiqskrggL0= +github.com/anyproto/any-sync v0.7.6-0.20250515110754-b8a877201bb5 h1:DIMKHkMzoGMf50y2s3qHj19JiXgQE7+1EbFnNUaYp/s= +github.com/anyproto/any-sync v0.7.6-0.20250515110754-b8a877201bb5/go.mod h1:G6i3PT6pN6lcC5rim5Ed7ppUPuQgU5PyHgiqskrggL0= github.com/anyproto/anytype-publish-server/publishclient v0.0.0-20250131145601-de288583ff2a h1:ZZM+0OUCQMWSLSflpkf0ZMVo3V76qEDDIXPpQOClNs0= github.com/anyproto/anytype-publish-server/publishclient v0.0.0-20250131145601-de288583ff2a/go.mod h1:4fkueCZcGniSMXkrwESO8zzERrh/L7WHimRNWecfGM0= github.com/anyproto/anytype-push-server/pushclient v0.0.0-20250402124745-6451298047f7 h1:oKkEnxnN1jeB1Ty20CTMH3w4WkCrV8dOQy1Myetg7XA= diff --git a/space/mock_space/mock_Service.go b/space/mock_space/mock_Service.go index c98769e69..d932488e8 100644 --- a/space/mock_space/mock_Service.go +++ b/space/mock_space/mock_Service.go @@ -632,6 +632,54 @@ func (_c *MockService_Init_Call) RunAndReturn(run func(*app.App) error) *MockSer return _c } +// InviteJoin provides a mock function with given fields: ctx, id, aclHeadId +func (_m *MockService) InviteJoin(ctx context.Context, id string, aclHeadId string) error { + ret := _m.Called(ctx, id, aclHeadId) + + if len(ret) == 0 { + panic("no return value specified for InviteJoin") + } + + var r0 error + if rf, ok := ret.Get(0).(func(context.Context, string, string) error); ok { + r0 = rf(ctx, id, aclHeadId) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// MockService_InviteJoin_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'InviteJoin' +type MockService_InviteJoin_Call struct { + *mock.Call +} + +// InviteJoin is a helper method to define mock.On call +// - ctx context.Context +// - id string +// - aclHeadId string +func (_e *MockService_Expecter) InviteJoin(ctx interface{}, id interface{}, aclHeadId interface{}) *MockService_InviteJoin_Call { + return &MockService_InviteJoin_Call{Call: _e.mock.On("InviteJoin", ctx, id, aclHeadId)} +} + +func (_c *MockService_InviteJoin_Call) Run(run func(ctx context.Context, id string, aclHeadId string)) *MockService_InviteJoin_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(string), args[2].(string)) + }) + return _c +} + +func (_c *MockService_InviteJoin_Call) Return(_a0 error) *MockService_InviteJoin_Call { + _c.Call.Return(_a0) + return _c +} + +func (_c *MockService_InviteJoin_Call) RunAndReturn(run func(context.Context, string, string) error) *MockService_InviteJoin_Call { + _c.Call.Return(run) + return _c +} + // Join provides a mock function with given fields: ctx, id, aclHeadId func (_m *MockService) Join(ctx context.Context, id string, aclHeadId string) error { ret := _m.Called(ctx, id, aclHeadId) diff --git a/space/spacefactory/mock_spacefactory/mock_SpaceFactory.go b/space/spacefactory/mock_spacefactory/mock_SpaceFactory.go index a29b6b1a7..7e4c6fe52 100644 --- a/space/spacefactory/mock_spacefactory/mock_SpaceFactory.go +++ b/space/spacefactory/mock_spacefactory/mock_SpaceFactory.go @@ -30,6 +30,66 @@ func (_m *MockSpaceFactory) EXPECT() *MockSpaceFactory_Expecter { return &MockSpaceFactory_Expecter{mock: &_m.Mock} } +// CreateActiveSpace provides a mock function with given fields: ctx, id, aclHeadId +func (_m *MockSpaceFactory) CreateActiveSpace(ctx context.Context, id string, aclHeadId string) (spacecontroller.SpaceController, error) { + ret := _m.Called(ctx, id, aclHeadId) + + if len(ret) == 0 { + panic("no return value specified for CreateActiveSpace") + } + + var r0 spacecontroller.SpaceController + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, string, string) (spacecontroller.SpaceController, error)); ok { + return rf(ctx, id, aclHeadId) + } + if rf, ok := ret.Get(0).(func(context.Context, string, string) spacecontroller.SpaceController); ok { + r0 = rf(ctx, id, aclHeadId) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(spacecontroller.SpaceController) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, string, string) error); ok { + r1 = rf(ctx, id, aclHeadId) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// MockSpaceFactory_CreateActiveSpace_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'CreateActiveSpace' +type MockSpaceFactory_CreateActiveSpace_Call struct { + *mock.Call +} + +// CreateActiveSpace is a helper method to define mock.On call +// - ctx context.Context +// - id string +// - aclHeadId string +func (_e *MockSpaceFactory_Expecter) CreateActiveSpace(ctx interface{}, id interface{}, aclHeadId interface{}) *MockSpaceFactory_CreateActiveSpace_Call { + return &MockSpaceFactory_CreateActiveSpace_Call{Call: _e.mock.On("CreateActiveSpace", ctx, id, aclHeadId)} +} + +func (_c *MockSpaceFactory_CreateActiveSpace_Call) Run(run func(ctx context.Context, id string, aclHeadId string)) *MockSpaceFactory_CreateActiveSpace_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(string), args[2].(string)) + }) + return _c +} + +func (_c *MockSpaceFactory_CreateActiveSpace_Call) Return(sp spacecontroller.SpaceController, err error) *MockSpaceFactory_CreateActiveSpace_Call { + _c.Call.Return(sp, err) + return _c +} + +func (_c *MockSpaceFactory_CreateActiveSpace_Call) RunAndReturn(run func(context.Context, string, string) (spacecontroller.SpaceController, error)) *MockSpaceFactory_CreateActiveSpace_Call { + _c.Call.Return(run) + return _c +} + // CreateAndSetTechSpace provides a mock function with given fields: ctx func (_m *MockSpaceFactory) CreateAndSetTechSpace(ctx context.Context) (*clientspace.TechSpace, error) { ret := _m.Called(ctx) diff --git a/space/techspace/mock_techspace/mock_SpaceView.go b/space/techspace/mock_techspace/mock_SpaceView.go index 595e0f0a7..e43365afa 100644 --- a/space/techspace/mock_techspace/mock_SpaceView.go +++ b/space/techspace/mock_techspace/mock_SpaceView.go @@ -22,61 +22,6 @@ func (_m *MockSpaceView) EXPECT() *MockSpaceView_Expecter { return &MockSpaceView_Expecter{mock: &_m.Mock} } -// GetExistingInviteInfo provides a mock function with given fields: -func (_m *MockSpaceView) GetExistingInviteInfo() (string, string) { - ret := _m.Called() - - if len(ret) == 0 { - panic("no return value specified for GetExistingInviteInfo") - } - - var r0 string - var r1 string - if rf, ok := ret.Get(0).(func() (string, string)); ok { - return rf() - } - if rf, ok := ret.Get(0).(func() string); ok { - r0 = rf() - } else { - r0 = ret.Get(0).(string) - } - - if rf, ok := ret.Get(1).(func() string); ok { - r1 = rf() - } else { - r1 = ret.Get(1).(string) - } - - return r0, r1 -} - -// MockSpaceView_GetExistingInviteInfo_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetExistingInviteInfo' -type MockSpaceView_GetExistingInviteInfo_Call struct { - *mock.Call -} - -// GetExistingInviteInfo is a helper method to define mock.On call -func (_e *MockSpaceView_Expecter) GetExistingInviteInfo() *MockSpaceView_GetExistingInviteInfo_Call { - return &MockSpaceView_GetExistingInviteInfo_Call{Call: _e.mock.On("GetExistingInviteInfo")} -} - -func (_c *MockSpaceView_GetExistingInviteInfo_Call) Run(run func()) *MockSpaceView_GetExistingInviteInfo_Call { - _c.Call.Run(func(args mock.Arguments) { - run() - }) - return _c -} - -func (_c *MockSpaceView_GetExistingInviteInfo_Call) Return(fileCid string, fileKey string) *MockSpaceView_GetExistingInviteInfo_Call { - _c.Call.Return(fileCid, fileKey) - return _c -} - -func (_c *MockSpaceView_GetExistingInviteInfo_Call) RunAndReturn(run func() (string, string)) *MockSpaceView_GetExistingInviteInfo_Call { - _c.Call.Return(run) - return _c -} - // GetLocalInfo provides a mock function with given fields: func (_m *MockSpaceView) GetLocalInfo() spaceinfo.SpaceLocalInfo { ret := _m.Called() @@ -289,61 +234,6 @@ func (_c *MockSpaceView_Lock_Call) RunAndReturn(run func()) *MockSpaceView_Lock_ return _c } -// RemoveExistingInviteInfo provides a mock function with given fields: -func (_m *MockSpaceView) RemoveExistingInviteInfo() (string, error) { - ret := _m.Called() - - if len(ret) == 0 { - panic("no return value specified for RemoveExistingInviteInfo") - } - - var r0 string - var r1 error - if rf, ok := ret.Get(0).(func() (string, error)); ok { - return rf() - } - if rf, ok := ret.Get(0).(func() string); ok { - r0 = rf() - } else { - r0 = ret.Get(0).(string) - } - - if rf, ok := ret.Get(1).(func() error); ok { - r1 = rf() - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// MockSpaceView_RemoveExistingInviteInfo_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'RemoveExistingInviteInfo' -type MockSpaceView_RemoveExistingInviteInfo_Call struct { - *mock.Call -} - -// RemoveExistingInviteInfo is a helper method to define mock.On call -func (_e *MockSpaceView_Expecter) RemoveExistingInviteInfo() *MockSpaceView_RemoveExistingInviteInfo_Call { - return &MockSpaceView_RemoveExistingInviteInfo_Call{Call: _e.mock.On("RemoveExistingInviteInfo")} -} - -func (_c *MockSpaceView_RemoveExistingInviteInfo_Call) Run(run func()) *MockSpaceView_RemoveExistingInviteInfo_Call { - _c.Call.Run(func(args mock.Arguments) { - run() - }) - return _c -} - -func (_c *MockSpaceView_RemoveExistingInviteInfo_Call) Return(fileCid string, err error) *MockSpaceView_RemoveExistingInviteInfo_Call { - _c.Call.Return(fileCid, err) - return _c -} - -func (_c *MockSpaceView_RemoveExistingInviteInfo_Call) RunAndReturn(run func() (string, error)) *MockSpaceView_RemoveExistingInviteInfo_Call { - _c.Call.Return(run) - return _c -} - // SetAccessType provides a mock function with given fields: acc func (_m *MockSpaceView) SetAccessType(acc spaceinfo.AccessType) error { ret := _m.Called(acc) @@ -436,53 +326,6 @@ func (_c *MockSpaceView_SetAclIsEmpty_Call) RunAndReturn(run func(bool) error) * return _c } -// SetInviteFileInfo provides a mock function with given fields: fileCid, fileKey -func (_m *MockSpaceView) SetInviteFileInfo(fileCid string, fileKey string) error { - ret := _m.Called(fileCid, fileKey) - - if len(ret) == 0 { - panic("no return value specified for SetInviteFileInfo") - } - - var r0 error - if rf, ok := ret.Get(0).(func(string, string) error); ok { - r0 = rf(fileCid, fileKey) - } else { - r0 = ret.Error(0) - } - - return r0 -} - -// MockSpaceView_SetInviteFileInfo_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SetInviteFileInfo' -type MockSpaceView_SetInviteFileInfo_Call struct { - *mock.Call -} - -// SetInviteFileInfo is a helper method to define mock.On call -// - fileCid string -// - fileKey string -func (_e *MockSpaceView_Expecter) SetInviteFileInfo(fileCid interface{}, fileKey interface{}) *MockSpaceView_SetInviteFileInfo_Call { - return &MockSpaceView_SetInviteFileInfo_Call{Call: _e.mock.On("SetInviteFileInfo", fileCid, fileKey)} -} - -func (_c *MockSpaceView_SetInviteFileInfo_Call) Run(run func(fileCid string, fileKey string)) *MockSpaceView_SetInviteFileInfo_Call { - _c.Call.Run(func(args mock.Arguments) { - run(args[0].(string), args[1].(string)) - }) - return _c -} - -func (_c *MockSpaceView_SetInviteFileInfo_Call) Return(err error) *MockSpaceView_SetInviteFileInfo_Call { - _c.Call.Return(err) - return _c -} - -func (_c *MockSpaceView_SetInviteFileInfo_Call) RunAndReturn(run func(string, string) error) *MockSpaceView_SetInviteFileInfo_Call { - _c.Call.Return(run) - return _c -} - // SetOwner provides a mock function with given fields: ownerId, createdDate func (_m *MockSpaceView) SetOwner(ownerId string, createdDate int64) error { ret := _m.Called(ownerId, createdDate) From d0ac26817c5b97e3cdafb53e130b00c7945da21e Mon Sep 17 00:00:00 2001 From: Sergey Date: Thu, 15 May 2025 13:33:43 +0200 Subject: [PATCH 043/164] Chats repository: open any-store in a non-blocking way --- core/block/chats/chatrepository/repository.go | 4 +- core/block/editor/factory.go | 4 +- core/indexer/reindex.go | 2 +- pkg/lib/localstore/objectstore/service.go | 81 ++++++++++++++----- 4 files changed, 65 insertions(+), 26 deletions(-) diff --git a/core/block/chats/chatrepository/repository.go b/core/block/chats/chatrepository/repository.go index 325a4758a..d8b7a795b 100644 --- a/core/block/chats/chatrepository/repository.go +++ b/core/block/chats/chatrepository/repository.go @@ -95,7 +95,9 @@ func (s *service) Repository(chatObjectId string) (Repository, error) { return nil, fmt.Errorf("resolve space id: %w", err) } - crdtDb := s.objectStore.GetCrdtDb(spaceId) + crdtDbGetter := s.objectStore.GetCrdtDb(spaceId) + crdtDb := crdtDbGetter.Wait() + collectionName := chatObjectId + "chats" collection, err := crdtDb.OpenCollection(s.componentCtx, collectionName) if errors.Is(err, anystore.ErrCollectionNotFound) { diff --git a/core/block/editor/factory.go b/core/block/editor/factory.go index f03532f38..1b8ca6c11 100644 --- a/core/block/editor/factory.go +++ b/core/block/editor/factory.go @@ -223,9 +223,9 @@ func (f *ObjectFactory) New(space smartblock.Space, sbType coresb.SmartBlockType case coresb.SmartBlockTypeDevicesObject: return NewDevicesObject(sb, f.deviceService), nil case coresb.SmartBlockTypeChatDerivedObject: - return chatobject.New(sb, f.accountService, f.eventSender, f.objectStore.GetCrdtDb(space.Id()), f.chatRepositoryService, spaceIndex, f.chatSubscriptionService), nil + return chatobject.New(sb, f.accountService, f.eventSender, f.objectStore.GetCrdtDb(space.Id()).Wait(), f.chatRepositoryService, spaceIndex, f.chatSubscriptionService), nil case coresb.SmartBlockTypeAccountObject: - return accountobject.New(sb, f.accountService.Keys(), spaceIndex, f.layoutConverter, f.fileObjectService, f.objectStore.GetCrdtDb(space.Id()), f.config), nil + return accountobject.New(sb, f.accountService.Keys(), spaceIndex, f.layoutConverter, f.fileObjectService, f.objectStore.GetCrdtDb(space.Id()).Wait(), f.config), nil default: return nil, fmt.Errorf("unexpected smartblock type: %v", sbType) } diff --git a/core/indexer/reindex.go b/core/indexer/reindex.go index 5722925b8..dba074e8f 100644 --- a/core/indexer/reindex.go +++ b/core/indexer/reindex.go @@ -242,7 +242,7 @@ func (i *indexer) reindexChats(ctx context.Context, space clientspace.Space) err if len(ids) == 0 { return nil } - db := i.store.GetCrdtDb(space.Id()) + db := i.store.GetCrdtDb(space.Id()).Wait() txn, err := db.WriteTx(ctx) if err != nil { diff --git a/pkg/lib/localstore/objectstore/service.go b/pkg/lib/localstore/objectstore/service.go index 7af388932..16787b038 100644 --- a/pkg/lib/localstore/objectstore/service.go +++ b/pkg/lib/localstore/objectstore/service.go @@ -54,7 +54,7 @@ type ObjectStore interface { IterateSpaceIndex(func(store spaceindex.Store) error) error SpaceIndex(spaceId string) spaceindex.Store - GetCrdtDb(spaceId string) anystore.DB + GetCrdtDb(spaceId string) *AnystoreGetter SpaceNameGetter spaceresolverstore.Store @@ -120,7 +120,7 @@ type dsObjectStore struct { spaceStoreDirsCheck sync.Once crtdStoreLock sync.Mutex - crdtDbs map[string]anystore.DB + crdtDbs map[string]*AnystoreGetter componentCtx context.Context componentCtxCancel context.CancelFunc @@ -161,7 +161,7 @@ func New() ObjectStore { componentCtxCancel: cancel, subManager: &spaceindex.SubscriptionManager{}, spaceIndexes: map[string]spaceindex.Store{}, - crdtDbs: map[string]anystore.DB{}, + crdtDbs: map[string]*AnystoreGetter{}, } } @@ -328,15 +328,17 @@ func (s *dsObjectStore) Close(_ context.Context) (err error) { s.crtdStoreLock.Lock() closeChan = make(chan error, len(s.crdtDbs)) - for spaceId, store := range s.crdtDbs { + for spaceId, storeGetter := range s.crdtDbs { go func(spaceId string, store anystore.DB) { - closeChan <- store.Close() - }(spaceId, store) + if store != nil { + closeChan <- store.Close() + } + }(spaceId, storeGetter.Get()) } for i := 0; i < len(s.crdtDbs); i++ { err = errors.Join(err, <-closeChan) } - s.crdtDbs = map[string]anystore.DB{} + s.crdtDbs = map[string]*AnystoreGetter{} s.crtdStoreLock.Unlock() return err @@ -389,27 +391,62 @@ func (s *dsObjectStore) getAnyStoreConfig() *anystore.Config { } } -func (s *dsObjectStore) GetCrdtDb(spaceId string) anystore.DB { +type AnystoreGetter struct { + ctx context.Context + config *anystore.Config + objectStorePath string + spaceId string + + lock sync.Mutex + db anystore.DB +} + +func (g *AnystoreGetter) Get() anystore.DB { + g.lock.Lock() + defer g.lock.Unlock() + + return g.db +} + +func (g *AnystoreGetter) Wait() anystore.DB { + g.lock.Lock() + defer g.lock.Unlock() + + if g.db != nil { + return g.db + } + + dir := filepath.Join(g.objectStorePath, g.spaceId) + err := ensureDirExists(dir) + if err != nil { + return nil + } + path := filepath.Join(dir, "crdt.db") + db, err := anystore.Open(g.ctx, path, g.config) + if errors.Is(err, anystore.ErrIncompatibleVersion) { + _ = os.RemoveAll(path) + db, err = anystore.Open(g.ctx, path, g.config) + } + if err != nil { + return nil + } + g.db = db + + return db +} + +func (s *dsObjectStore) GetCrdtDb(spaceId string) *AnystoreGetter { s.crtdStoreLock.Lock() defer s.crtdStoreLock.Unlock() db, ok := s.crdtDbs[spaceId] if !ok { - dir := filepath.Join(s.objectStorePath, spaceId) - err := ensureDirExists(dir) - if err != nil { - return nil + db = &AnystoreGetter{ + spaceId: spaceId, + ctx: s.componentCtx, + config: s.getAnyStoreConfig(), + objectStorePath: s.objectStorePath, } - path := filepath.Join(dir, "crdt.db") - db, err = anystore.Open(s.componentCtx, path, s.getAnyStoreConfig()) - if errors.Is(err, anystore.ErrIncompatibleVersion) { - _ = os.RemoveAll(path) - db, err = anystore.Open(s.componentCtx, path, s.getAnyStoreConfig()) - } - if err != nil { - return nil - } - s.crdtDbs[spaceId] = db } return db } From b07c26994a8c3a16a646ef8bc3b266e85152c475 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Thu, 15 May 2025 13:52:02 +0200 Subject: [PATCH 044/164] GO-5589: Remove required dir and prop fields from SortOptions --- core/api/docs/docs.go | 2 +- core/api/docs/openapi.json | 4 ---- core/api/docs/openapi.yaml | 3 --- core/api/model/search.go | 4 ++-- 4 files changed, 3 insertions(+), 10 deletions(-) diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go index d4d57686b..56a69f362 100644 --- a/core/api/docs/docs.go +++ b/core/api/docs/docs.go @@ -6,7 +6,7 @@ import "github.com/swaggo/swag/v2" const docTemplate = `{ "schemes": {{ marshal .Schemes }}, - "components": {"schemas":{"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"creator","type":"string"},"objects":{"description":"The object values of the property","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to search for, specified by key or ID","example":["page","678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"status","type":"string"},"select":{"description":"The selected tag value of the property","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"required":["direction","property_key"],"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TokenResponse":{"properties":{"app_key":{"description":"The app key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, + "components": {"schemas":{"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"creator","type":"string"},"objects":{"description":"The object values of the property","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to search for, specified by key or ID","example":["page","678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"status","type":"string"},"select":{"description":"The selected tag value of the property","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TokenResponse":{"properties":{"app_key":{"description":"The app key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, "info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-api/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"}, "externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"}, "paths": {"/v1/auth/display_code":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid ` + "`" + `app_name` + "`" + `, the server issues a unique ` + "`" + `challenge_id` + "`" + ` and displays a short code within the Anytype Desktop On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"create_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.DisplayCodeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["Auth"]}},"/v1/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent app key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.","operationId":"solve_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TokenResponse"}}},"description":"The app key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Solve challenge","tags":["Auth"]}},"/v1/search":{"post":{"description":"Executes a global search over every space accessible by the authenticated user. The request body must specify the ` + "`" + `query` + "`" + ` text, optional filters on object types (e.g., \"page\", \"task\"), and sort directives (default: descending by last updated timestamp). Pagination is controlled via ` + "`" + `offset` + "`" + ` and ` + "`" + `limit` + "`" + ` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"search_global","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/v1/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"list_spaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"create_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/v1/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"get_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"update_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"add_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"The list of object IDs to add to the list","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"remove_list_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"get_list_views","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"get_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/v1/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"list_members","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/v1/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"get_member","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/v1/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"create_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/v1/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"get_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"update_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/v1/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"list_properties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"create_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"get_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"update_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"list_tags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"create_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"get_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"update_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/v1/spaces/{space_id}/search":{"post":{"description":"Performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"search_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/v1/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"list_types","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new object type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"create_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an object type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"get_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing object type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"update_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"list_templates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to retrieve templates for","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/v1/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"get_template","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to which the template belongs","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, diff --git a/core/api/docs/openapi.json b/core/api/docs/openapi.json index d4540d7e6..41bc0e8cb 100644 --- a/core/api/docs/openapi.json +++ b/core/api/docs/openapi.json @@ -1211,10 +1211,6 @@ "$ref": "#/components/schemas/apimodel.SortProperty" } }, - "required": [ - "direction", - "property_key" - ], "type": "object" }, "apimodel.SortProperty": { diff --git a/core/api/docs/openapi.yaml b/core/api/docs/openapi.yaml index 5ae8f004f..c70cd1337 100644 --- a/core/api/docs/openapi.yaml +++ b/core/api/docs/openapi.yaml @@ -883,9 +883,6 @@ components: $ref: '#/components/schemas/apimodel.SortDirection' property_key: $ref: '#/components/schemas/apimodel.SortProperty' - required: - - direction - - property_key type: object apimodel.SortProperty: default: last_modified_date diff --git a/core/api/model/search.go b/core/api/model/search.go index ae25b1d2a..d55d36908 100644 --- a/core/api/model/search.go +++ b/core/api/model/search.go @@ -58,6 +58,6 @@ type SearchRequest struct { } type SortOptions struct { - PropertyKey SortProperty `json:"property_key" binding:"required" enums:"created_date,last_modified_date,last_opened_date,name" default:"last_modified_date"` // The property to sort the search results by - Direction SortDirection `json:"direction" binding:"required" enums:"asc,desc" default:"desc"` // The direction to sort the search results + PropertyKey SortProperty `json:"property_key" enums:"created_date,last_modified_date,last_opened_date,name" default:"last_modified_date"` // The property to sort the search results by + Direction SortDirection `json:"direction" enums:"asc,desc" default:"desc"` // The direction to sort the search results } From 5dbe5e0236bfa648499f0722c6d4e4741cf044c3 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Thu, 15 May 2025 13:52:50 +0200 Subject: [PATCH 045/164] GO-5589: Refactor buildPropertyWithValue to not return entries without value --- core/api/service/property.go | 45 +++++++++++++----------------------- 1 file changed, 16 insertions(+), 29 deletions(-) diff --git a/core/api/service/property.go b/core/api/service/property.go index 6e0a457f0..3ece98856 100644 --- a/core/api/service/property.go +++ b/core/api/service/property.go @@ -587,7 +587,9 @@ func (s *Service) getPropertiesFromStruct(details *types.Struct, propertyMap map id := prop.Id name := prop.Name - properties = append(properties, s.buildPropertyWithValue(id, key, name, format, convertedVal)) + if pwv := s.buildPropertyWithValue(id, key, name, format, convertedVal); pwv != nil { + properties = append(properties, *pwv) + } } return properties @@ -660,7 +662,7 @@ func (s *Service) convertPropertyValue(key string, value *types.Value, format ap // buildPropertyWithValue creates a Property based on the format and converted value. // nolint:funlen -func (s *Service) buildPropertyWithValue(id string, key string, name string, format apimodel.PropertyFormat, val interface{}) apimodel.PropertyWithValue { +func (s *Service) buildPropertyWithValue(id string, key string, name string, format apimodel.PropertyFormat, val interface{}) *apimodel.PropertyWithValue { base := apimodel.PropertyBase{ Object: "property", Id: id, @@ -669,7 +671,7 @@ func (s *Service) buildPropertyWithValue(id string, key string, name string, for switch format { case apimodel.PropertyFormatText: if str, ok := val.(string); ok { - return apimodel.PropertyWithValue{WrappedPropertyWithValue: apimodel.TextPropertyValue{ + return &apimodel.PropertyWithValue{WrappedPropertyWithValue: apimodel.TextPropertyValue{ PropertyBase: base, Key: key, Name: name, @@ -679,7 +681,7 @@ func (s *Service) buildPropertyWithValue(id string, key string, name string, for } case apimodel.PropertyFormatNumber: if num, ok := val.(float64); ok { - return apimodel.PropertyWithValue{WrappedPropertyWithValue: apimodel.NumberPropertyValue{ + return &apimodel.PropertyWithValue{WrappedPropertyWithValue: apimodel.NumberPropertyValue{ PropertyBase: base, Key: key, Name: name, @@ -689,7 +691,7 @@ func (s *Service) buildPropertyWithValue(id string, key string, name string, for } case apimodel.PropertyFormatSelect: if sel, ok := val.(apimodel.Tag); ok { - return apimodel.PropertyWithValue{WrappedPropertyWithValue: apimodel.SelectPropertyValue{ + return &apimodel.PropertyWithValue{WrappedPropertyWithValue: apimodel.SelectPropertyValue{ PropertyBase: base, Key: key, Name: name, @@ -699,7 +701,7 @@ func (s *Service) buildPropertyWithValue(id string, key string, name string, for } case apimodel.PropertyFormatMultiSelect: if ms, ok := val.([]apimodel.Tag); ok { - return apimodel.PropertyWithValue{WrappedPropertyWithValue: apimodel.MultiSelectPropertyValue{ + return &apimodel.PropertyWithValue{WrappedPropertyWithValue: apimodel.MultiSelectPropertyValue{ PropertyBase: base, Key: key, Name: name, @@ -709,7 +711,7 @@ func (s *Service) buildPropertyWithValue(id string, key string, name string, for } case apimodel.PropertyFormatDate: if dateStr, ok := val.(string); ok { - return apimodel.PropertyWithValue{WrappedPropertyWithValue: apimodel.DatePropertyValue{ + return &apimodel.PropertyWithValue{WrappedPropertyWithValue: apimodel.DatePropertyValue{ PropertyBase: base, Key: key, Name: name, @@ -725,7 +727,7 @@ func (s *Service) buildPropertyWithValue(id string, key string, name string, for files = append(files, str) } } - return apimodel.PropertyWithValue{WrappedPropertyWithValue: apimodel.FilesPropertyValue{ + return &apimodel.PropertyWithValue{WrappedPropertyWithValue: apimodel.FilesPropertyValue{ PropertyBase: base, Key: key, Name: name, @@ -735,7 +737,7 @@ func (s *Service) buildPropertyWithValue(id string, key string, name string, for } case apimodel.PropertyFormatCheckbox: if cb, ok := val.(bool); ok { - return apimodel.PropertyWithValue{WrappedPropertyWithValue: apimodel.CheckboxPropertyValue{ + return &apimodel.PropertyWithValue{WrappedPropertyWithValue: apimodel.CheckboxPropertyValue{ PropertyBase: base, Key: key, Name: name, @@ -745,7 +747,7 @@ func (s *Service) buildPropertyWithValue(id string, key string, name string, for } case apimodel.PropertyFormatUrl: if urlStr, ok := val.(string); ok { - return apimodel.PropertyWithValue{WrappedPropertyWithValue: apimodel.URLPropertyValue{ + return &apimodel.PropertyWithValue{WrappedPropertyWithValue: apimodel.URLPropertyValue{ PropertyBase: base, Key: key, Name: name, @@ -755,7 +757,7 @@ func (s *Service) buildPropertyWithValue(id string, key string, name string, for } case apimodel.PropertyFormatEmail: if email, ok := val.(string); ok { - return apimodel.PropertyWithValue{WrappedPropertyWithValue: apimodel.EmailPropertyValue{ + return &apimodel.PropertyWithValue{WrappedPropertyWithValue: apimodel.EmailPropertyValue{ PropertyBase: base, Key: key, Name: name, @@ -765,7 +767,7 @@ func (s *Service) buildPropertyWithValue(id string, key string, name string, for } case apimodel.PropertyFormatPhone: if phone, ok := val.(string); ok { - return apimodel.PropertyWithValue{WrappedPropertyWithValue: apimodel.PhonePropertyValue{ + return &apimodel.PropertyWithValue{WrappedPropertyWithValue: apimodel.PhonePropertyValue{ PropertyBase: base, Key: key, Name: name, @@ -785,7 +787,7 @@ func (s *Service) buildPropertyWithValue(id string, key string, name string, for } } } - return apimodel.PropertyWithValue{WrappedPropertyWithValue: apimodel.ObjectsPropertyValue{ + return &apimodel.PropertyWithValue{WrappedPropertyWithValue: apimodel.ObjectsPropertyValue{ PropertyBase: base, Key: key, Name: name, @@ -794,20 +796,5 @@ func (s *Service) buildPropertyWithValue(id string, key string, name string, for }} } - if str, ok := val.(string); ok { - return apimodel.PropertyWithValue{WrappedPropertyWithValue: apimodel.TextPropertyValue{ - PropertyBase: base, - Key: key, - Name: name, - Format: format, - Text: str, - }} - } - return apimodel.PropertyWithValue{WrappedPropertyWithValue: apimodel.TextPropertyValue{ - PropertyBase: base, - Key: key, - Name: name, - Format: format, - Text: fmt.Sprintf("%v", val), - }} + return nil } From eff4239cdb2f4db8e5de007aac6be0539247f3d3 Mon Sep 17 00:00:00 2001 From: Mikhail Rakhmanov Date: Thu, 15 May 2025 14:37:34 +0200 Subject: [PATCH 046/164] GO-4400 Make tests pass --- core/acl/aclservice.go | 4 +++- core/acl/aclservice_test.go | 31 +++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/core/acl/aclservice.go b/core/acl/aclservice.go index 11c201ff1..618728717 100644 --- a/core/acl/aclservice.go +++ b/core/acl/aclservice.go @@ -85,6 +85,7 @@ type aclService struct { accountService account.Service coordClient coordinatorclient.CoordinatorClient identityRepo identityRepoClient + recordVerifier recordverifier.AcceptorVerifier } func (a *aclService) Init(ap *app.App) (err error) { @@ -95,6 +96,7 @@ func (a *aclService) Init(ap *app.App) (err error) { a.inviteService = app.MustComponent[inviteservice.InviteService](ap) a.coordClient = app.MustComponent[coordinatorclient.CoordinatorClient](ap) a.identityRepo = app.MustComponent[identityRepoClient](ap) + a.recordVerifier = recordverifier.New() return nil } @@ -503,7 +505,7 @@ func (a *aclService) ViewInvite(ctx context.Context, inviteCid cid.Cid, inviteFi if err != nil { return domain.InviteView{}, convertedOrAclRequestError(err) } - lst, err := list.BuildAclListWithIdentity(a.accountService.Keys(), store, recordverifier.New()) + lst, err := list.BuildAclListWithIdentity(a.accountService.Keys(), store, a.recordVerifier) if err != nil { return domain.InviteView{}, convertedOrAclRequestError(err) } diff --git a/core/acl/aclservice_test.go b/core/acl/aclservice_test.go index b2d5d7d8e..fd7f229ec 100644 --- a/core/acl/aclservice_test.go +++ b/core/acl/aclservice_test.go @@ -13,6 +13,7 @@ import ( "github.com/anyproto/any-sync/commonspace/object/accountdata" "github.com/anyproto/any-sync/commonspace/object/acl/list" "github.com/anyproto/any-sync/commonspace/object/acl/list/mock_list" + "github.com/anyproto/any-sync/commonspace/object/acl/recordverifier" "github.com/anyproto/any-sync/commonspace/object/acl/syncacl/headupdater" "github.com/anyproto/any-sync/commonspace/spacesyncproto" "github.com/anyproto/any-sync/commonspace/sync/syncdeps" @@ -108,6 +109,7 @@ func newFixture(t *testing.T) *fixture { Register(fx.mockConfig). Register(fx.aclService) require.NoError(t, fx.a.Start(ctx)) + fx.aclService.recordVerifier = recordverifier.NewValidateFull() return fx } @@ -468,6 +470,35 @@ func TestService_Join(t *testing.T) { err = fx.Join(ctx, "spaceId", "", realCid, key) require.NoError(t, err) }) + t.Run("join success without approve", func(t *testing.T) { + fx := newFixture(t) + defer fx.finish(t) + cidString, err := cidutil.NewCidFromBytes([]byte("spaceId")) + require.NoError(t, err) + realCid, err := cid.Decode(cidString) + require.NoError(t, err) + key, err := crypto.NewRandomAES() + require.NoError(t, err) + inviteKey, _, err := crypto.GenerateRandomEd25519KeyPair() + require.NoError(t, err) + protoKey, err := inviteKey.Marshall() + require.NoError(t, err) + fx.mockInviteService.EXPECT().GetPayload(ctx, realCid, key).Return(&model.InvitePayload{ + AclKey: protoKey, + InviteType: model.InviteType_WithoutApprove, + }, nil) + metadataPayload := []byte("metadata") + fx.mockSpaceService.EXPECT().AccountMetadataPayload().Return(metadataPayload) + fx.mockJoiningClient.EXPECT().InviteJoin(ctx, "spaceId", list.InviteJoinPayload{ + InviteKey: inviteKey, + Metadata: metadataPayload, + }).Return("aclHeadId", nil) + fx.mockSpaceService.EXPECT().InviteJoin(ctx, "spaceId", "aclHeadId").Return(nil) + fx.mockSpaceService.EXPECT().TechSpace().Return(&clientspace.TechSpace{TechSpace: fx.mockTechSpace}) + fx.mockTechSpace.EXPECT().SpaceViewSetData(ctx, "spaceId", mock.Anything).Return(nil) + err = fx.Join(ctx, "spaceId", "", realCid, key) + require.NoError(t, err) + }) t.Run("join fail, different network", func(t *testing.T) { // given fx := newFixture(t) From 1048c7d5177a9e321ab3f33693526db86365fdbb Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Thu, 15 May 2025 15:06:22 +0200 Subject: [PATCH 047/164] GO-5589: Shorten buildPropertyWithValue --- core/api/service/property.go | 71 ++++++++++-------------------------- 1 file changed, 20 insertions(+), 51 deletions(-) diff --git a/core/api/service/property.go b/core/api/service/property.go index 3ece98856..2d2ed6586 100644 --- a/core/api/service/property.go +++ b/core/api/service/property.go @@ -661,7 +661,6 @@ func (s *Service) convertPropertyValue(key string, value *types.Value, format ap } // buildPropertyWithValue creates a Property based on the format and converted value. -// nolint:funlen func (s *Service) buildPropertyWithValue(id string, key string, name string, format apimodel.PropertyFormat, val interface{}) *apimodel.PropertyWithValue { base := apimodel.PropertyBase{ Object: "property", @@ -672,51 +671,36 @@ func (s *Service) buildPropertyWithValue(id string, key string, name string, for case apimodel.PropertyFormatText: if str, ok := val.(string); ok { return &apimodel.PropertyWithValue{WrappedPropertyWithValue: apimodel.TextPropertyValue{ - PropertyBase: base, - Key: key, - Name: name, - Format: format, - Text: str, + PropertyBase: base, Key: key, Name: name, Format: format, + Text: str, }} } case apimodel.PropertyFormatNumber: if num, ok := val.(float64); ok { return &apimodel.PropertyWithValue{WrappedPropertyWithValue: apimodel.NumberPropertyValue{ - PropertyBase: base, - Key: key, - Name: name, - Format: format, - Number: num, + PropertyBase: base, Key: key, Name: name, Format: format, + Number: num, }} } case apimodel.PropertyFormatSelect: if sel, ok := val.(apimodel.Tag); ok { return &apimodel.PropertyWithValue{WrappedPropertyWithValue: apimodel.SelectPropertyValue{ - PropertyBase: base, - Key: key, - Name: name, - Format: format, - Select: &sel, + PropertyBase: base, Key: key, Name: name, Format: format, + Select: &sel, }} } case apimodel.PropertyFormatMultiSelect: if ms, ok := val.([]apimodel.Tag); ok { return &apimodel.PropertyWithValue{WrappedPropertyWithValue: apimodel.MultiSelectPropertyValue{ - PropertyBase: base, - Key: key, - Name: name, - Format: format, - MultiSelect: ms, + PropertyBase: base, Key: key, Name: name, Format: format, + MultiSelect: ms, }} } case apimodel.PropertyFormatDate: if dateStr, ok := val.(string); ok { return &apimodel.PropertyWithValue{WrappedPropertyWithValue: apimodel.DatePropertyValue{ - PropertyBase: base, - Key: key, - Name: name, - Format: format, - Date: dateStr, + PropertyBase: base, Key: key, Name: name, Format: format, + Date: dateStr, }} } case apimodel.PropertyFormatFiles: @@ -728,51 +712,36 @@ func (s *Service) buildPropertyWithValue(id string, key string, name string, for } } return &apimodel.PropertyWithValue{WrappedPropertyWithValue: apimodel.FilesPropertyValue{ - PropertyBase: base, - Key: key, - Name: name, - Format: format, - Files: files, + PropertyBase: base, Key: key, Name: name, Format: format, + Files: files, }} } case apimodel.PropertyFormatCheckbox: if cb, ok := val.(bool); ok { return &apimodel.PropertyWithValue{WrappedPropertyWithValue: apimodel.CheckboxPropertyValue{ - PropertyBase: base, - Key: key, - Name: name, - Format: format, - Checkbox: cb, + PropertyBase: base, Key: key, Name: name, Format: format, + Checkbox: cb, }} } case apimodel.PropertyFormatUrl: if urlStr, ok := val.(string); ok { return &apimodel.PropertyWithValue{WrappedPropertyWithValue: apimodel.URLPropertyValue{ - PropertyBase: base, - Key: key, - Name: name, - Format: format, - Url: urlStr, + PropertyBase: base, Key: key, Name: name, Format: format, + Url: urlStr, }} } case apimodel.PropertyFormatEmail: if email, ok := val.(string); ok { return &apimodel.PropertyWithValue{WrappedPropertyWithValue: apimodel.EmailPropertyValue{ - PropertyBase: base, - Key: key, - Name: name, - Format: format, - Email: email, + PropertyBase: base, Key: key, Name: name, Format: format, + Email: email, }} } case apimodel.PropertyFormatPhone: if phone, ok := val.(string); ok { return &apimodel.PropertyWithValue{WrappedPropertyWithValue: apimodel.PhonePropertyValue{ - PropertyBase: base, - Key: key, - Name: name, - Format: format, - Phone: phone, + PropertyBase: base, Key: key, Name: name, Format: format, + Phone: phone, }} } case apimodel.PropertyFormatObjects: From 43c80b4ef5df31d5fbf3851acac09449cc11a53a Mon Sep 17 00:00:00 2001 From: Mikhail Rakhmanov Date: Thu, 15 May 2025 15:09:42 +0200 Subject: [PATCH 048/164] GO-4400 Add generate invite tests --- core/acl/aclservice_test.go | 136 ++++++++++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) diff --git a/core/acl/aclservice_test.go b/core/acl/aclservice_test.go index fd7f229ec..6da7e6ecd 100644 --- a/core/acl/aclservice_test.go +++ b/core/acl/aclservice_test.go @@ -18,6 +18,7 @@ import ( "github.com/anyproto/any-sync/commonspace/spacesyncproto" "github.com/anyproto/any-sync/commonspace/sync/syncdeps" "github.com/anyproto/any-sync/commonspace/syncstatus" + "github.com/anyproto/any-sync/consensus/consensusproto" "github.com/anyproto/any-sync/coordinator/coordinatorclient/mock_coordinatorclient" "github.com/anyproto/any-sync/coordinator/coordinatorproto" "github.com/anyproto/any-sync/net/peer" @@ -389,6 +390,141 @@ func TestService_ViewInvite(t *testing.T) { }) } +func TestService_GenerateInvite(t *testing.T) { + t.Run("new default invite", func(t *testing.T) { + fx := newFixture(t) + defer fx.finish(t) + spaceId := "spaceId" + keys, err := accountdata.NewRandom() + require.NoError(t, err) + fx.mockAccountService.EXPECT().PersonalSpaceID().Return("personal") + fx.mockInviteService.EXPECT().GetCurrent(ctx, spaceId).Return(domain.InviteInfo{}, inviteservice.ErrInviteNotExists) + mockSpace := mock_clientspace.NewMockSpace(t) + mockCommonSpace := mock_commonspace.NewMockSpace(fx.ctrl) + mockAclClient := mock_aclclient.NewMockAclSpaceClient(fx.ctrl) + mockSpace.EXPECT().CommonSpace().Return(mockCommonSpace) + mockCommonSpace.EXPECT().AclClient().Return(mockAclClient) + fx.mockSpaceService.EXPECT().Get(ctx, spaceId).Return(mockSpace, nil) + rec := &consensusproto.RawRecord{ + Payload: []byte("test"), + } + mockAclClient.EXPECT().GenerateInvite(false, true, list.AclPermissionsReader). + Return(list.InviteResult{ + InviteRec: rec, + InviteKey: keys.SignKey, + }, nil) + params := inviteservice.GenerateInviteParams{ + SpaceId: spaceId, + InviteType: domain.InviteTypeDefault, + Key: keys.SignKey, + Permissions: list.AclPermissionsReader, + } + mockAclClient.EXPECT().AddRecord(ctx, rec).Return(nil) + fx.mockInviteService.EXPECT().Generate(ctx, params, mock.Anything). + RunAndReturn(func(ctx2 context.Context, params inviteservice.GenerateInviteParams, f func() error) (domain.InviteInfo, error) { + return domain.InviteInfo{ + InviteFileCid: "testCid", + }, f() + }) + info, err := fx.GenerateInvite(ctx, spaceId, model.InviteType_Member, model.ParticipantPermissions_Reader) + require.NoError(t, err) + require.Equal(t, "testCid", info.InviteFileCid) + }) + t.Run("new anyone can join invite", func(t *testing.T) { + fx := newFixture(t) + defer fx.finish(t) + spaceId := "spaceId" + keys, err := accountdata.NewRandom() + require.NoError(t, err) + fx.mockAccountService.EXPECT().PersonalSpaceID().Return("personal") + fx.mockInviteService.EXPECT().GetCurrent(ctx, spaceId).Return(domain.InviteInfo{}, inviteservice.ErrInviteNotExists) + mockSpace := mock_clientspace.NewMockSpace(t) + mockCommonSpace := mock_commonspace.NewMockSpace(fx.ctrl) + mockAclClient := mock_aclclient.NewMockAclSpaceClient(fx.ctrl) + mockSpace.EXPECT().CommonSpace().Return(mockCommonSpace) + mockCommonSpace.EXPECT().AclClient().Return(mockAclClient) + fx.mockSpaceService.EXPECT().Get(ctx, spaceId).Return(mockSpace, nil) + rec := &consensusproto.RawRecord{ + Payload: []byte("test"), + } + mockAclClient.EXPECT().GenerateInvite(false, false, list.AclPermissionsReader). + Return(list.InviteResult{ + InviteRec: rec, + InviteKey: keys.SignKey, + }, nil) + params := inviteservice.GenerateInviteParams{ + SpaceId: spaceId, + InviteType: domain.InviteTypeAnyone, + Key: keys.SignKey, + Permissions: list.AclPermissionsReader, + } + mockAclClient.EXPECT().AddRecord(ctx, rec).Return(nil) + fx.mockInviteService.EXPECT().Generate(ctx, params, mock.Anything). + RunAndReturn(func(ctx2 context.Context, params inviteservice.GenerateInviteParams, f func() error) (domain.InviteInfo, error) { + return domain.InviteInfo{ + InviteFileCid: "testCid", + }, f() + }) + info, err := fx.GenerateInvite(ctx, spaceId, model.InviteType_WithoutApprove, model.ParticipantPermissions_Reader) + require.NoError(t, err) + require.Equal(t, "testCid", info.InviteFileCid) + }) + t.Run("anyone can join invite after default invite", func(t *testing.T) { + fx := newFixture(t) + defer fx.finish(t) + spaceId := "spaceId" + keys, err := accountdata.NewRandom() + require.NoError(t, err) + fx.mockAccountService.EXPECT().PersonalSpaceID().Return("personal") + fx.mockInviteService.EXPECT().GetCurrent(ctx, spaceId).Return(domain.InviteInfo{ + InviteType: domain.InviteTypeDefault, + }, nil) + mockSpace := mock_clientspace.NewMockSpace(t) + mockCommonSpace := mock_commonspace.NewMockSpace(fx.ctrl) + mockAclClient := mock_aclclient.NewMockAclSpaceClient(fx.ctrl) + mockSpace.EXPECT().CommonSpace().Return(mockCommonSpace) + mockCommonSpace.EXPECT().AclClient().Return(mockAclClient) + fx.mockSpaceService.EXPECT().Get(ctx, spaceId).Return(mockSpace, nil) + rec := &consensusproto.RawRecord{ + Payload: []byte("test"), + } + mockAclClient.EXPECT().GenerateInvite(true, false, list.AclPermissionsReader). + Return(list.InviteResult{ + InviteRec: rec, + InviteKey: keys.SignKey, + }, nil) + params := inviteservice.GenerateInviteParams{ + SpaceId: spaceId, + InviteType: domain.InviteTypeAnyone, + Key: keys.SignKey, + Permissions: list.AclPermissionsReader, + } + mockAclClient.EXPECT().AddRecord(ctx, rec).Return(nil) + fx.mockInviteService.EXPECT().Generate(ctx, params, mock.Anything). + RunAndReturn(func(ctx2 context.Context, params inviteservice.GenerateInviteParams, f func() error) (domain.InviteInfo, error) { + return domain.InviteInfo{ + InviteFileCid: "testCid", + }, f() + }) + info, err := fx.GenerateInvite(ctx, spaceId, model.InviteType_WithoutApprove, model.ParticipantPermissions_Reader) + require.NoError(t, err) + require.Equal(t, "testCid", info.InviteFileCid) + }) + t.Run("invite already exists", func(t *testing.T) { + fx := newFixture(t) + defer fx.finish(t) + spaceId := "spaceId" + fx.mockAccountService.EXPECT().PersonalSpaceID().Return("personal") + fx.mockInviteService.EXPECT().GetCurrent(ctx, spaceId).Return(domain.InviteInfo{ + InviteType: domain.InviteTypeAnyone, + InviteFileCid: "testCid", + }, nil) + info, err := fx.GenerateInvite(ctx, spaceId, model.InviteType_WithoutApprove, model.ParticipantPermissions_Reader) + require.NoError(t, err) + require.Equal(t, "testCid", info.InviteFileCid) + }) +} + func TestService_Join(t *testing.T) { t.Run("join success", func(t *testing.T) { fx := newFixture(t) From d7611a76bbce72d73e6f0017d4cb0ce2cdb74855 Mon Sep 17 00:00:00 2001 From: Mikhail Rakhmanov Date: Thu, 15 May 2025 15:20:17 +0200 Subject: [PATCH 049/164] GO-4400 Test change invite --- core/acl/aclservice_test.go | 52 +++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/core/acl/aclservice_test.go b/core/acl/aclservice_test.go index 6da7e6ecd..39af82587 100644 --- a/core/acl/aclservice_test.go +++ b/core/acl/aclservice_test.go @@ -11,6 +11,7 @@ import ( "github.com/anyproto/any-sync/commonspace/acl/aclclient/mock_aclclient" "github.com/anyproto/any-sync/commonspace/mock_commonspace" "github.com/anyproto/any-sync/commonspace/object/accountdata" + "github.com/anyproto/any-sync/commonspace/object/acl/aclrecordproto" "github.com/anyproto/any-sync/commonspace/object/acl/list" "github.com/anyproto/any-sync/commonspace/object/acl/list/mock_list" "github.com/anyproto/any-sync/commonspace/object/acl/recordverifier" @@ -390,6 +391,57 @@ func TestService_ViewInvite(t *testing.T) { }) } +func TestService_ChangeInvite(t *testing.T) { + t.Run("change invite", func(t *testing.T) { + fx := newFixture(t) + defer fx.finish(t) + spaceId := "spaceId" + fx.mockAccountService.EXPECT().PersonalSpaceID().Return("personal") + mockSpace := mock_clientspace.NewMockSpace(t) + mockCommonSpace := mock_commonspace.NewMockSpace(fx.ctrl) + fx.mockInviteService.EXPECT().GetCurrent(ctx, spaceId).Return(domain.InviteInfo{ + InviteType: domain.InviteTypeAnyone, + InviteFileCid: "testCid", + }, nil) + fx.mockSpaceService.EXPECT().Get(ctx, spaceId).Return(mockSpace, nil) + mockSpace.EXPECT().CommonSpace().Return(mockCommonSpace) + exec := list.NewAclExecutor(spaceId) + type cmdErr struct { + cmd string + err error + } + cmds := []cmdErr{ + {"a.init::a", nil}, + {"a.invite_anyone::invId,r", nil}, + } + for _, cmd := range cmds { + err := exec.Execute(cmd.cmd) + require.Equal(t, cmd.err, err, cmd) + } + acl := mockSyncAcl{exec.ActualAccounts()["a"].Acl} + invId := acl.AclState().Invites(aclrecordproto.AclInviteType_AnyoneCanJoin)[0].Id + mockCommonSpace.EXPECT().Acl().Return(acl) + aclClient := mock_aclclient.NewMockAclSpaceClient(fx.ctrl) + mockCommonSpace.EXPECT().AclClient().Return(aclClient) + aclClient.EXPECT().ChangeInvite(ctx, invId, list.AclPermissionsWriter).Return(nil) + fx.mockInviteService.EXPECT().Change(ctx, spaceId, list.AclPermissionsWriter).Return(nil) + err := fx.ChangeInvite(ctx, spaceId, model.ParticipantPermissions_Writer) + require.NoError(t, err) + }) + t.Run("different invite type", func(t *testing.T) { + fx := newFixture(t) + defer fx.finish(t) + spaceId := "spaceId" + fx.mockAccountService.EXPECT().PersonalSpaceID().Return("personal") + fx.mockInviteService.EXPECT().GetCurrent(ctx, spaceId).Return(domain.InviteInfo{ + InviteType: domain.InviteTypeDefault, + InviteFileCid: "testCid", + }, nil) + err := fx.ChangeInvite(ctx, spaceId, model.ParticipantPermissions_Writer) + require.Equal(t, inviteservice.ErrInviteNotExists, err) + }) +} + func TestService_GenerateInvite(t *testing.T) { t.Run("new default invite", func(t *testing.T) { fx := newFixture(t) From 0e5a3fa109143fd8fcdc2c8a507556abae2919f0 Mon Sep 17 00:00:00 2001 From: Roman Khafizianov Date: Thu, 15 May 2025 16:50:01 +0200 Subject: [PATCH 050/164] GO-5635 introduce protections and debug for tantivy --- core/application/application.go | 6 + core/domain/app.go | 7 + core/indexer/fulltext.go | 4 +- core/indexer/indexer.go | 13 +- go.mod | 5 +- go.sum | 18 +- pkg/lib/localstore/ftsearch/ftsearch.go | 73 +++++- .../ftsearch/tantivycheck/tantivycheck.go | 230 ++++++++++++++++++ tantivity_sha256.txt | 24 +- 9 files changed, 332 insertions(+), 48 deletions(-) create mode 100644 core/domain/app.go create mode 100644 pkg/lib/localstore/ftsearch/tantivycheck/tantivycheck.go diff --git a/core/application/application.go b/core/application/application.go index 293ceef8b..45decec1a 100644 --- a/core/application/application.go +++ b/core/application/application.go @@ -8,6 +8,7 @@ import ( "github.com/anyproto/any-sync/app" + "github.com/anyproto/anytype-heart/core/domain" "github.com/anyproto/anytype-heart/core/event" "github.com/anyproto/anytype-heart/core/session" "github.com/anyproto/anytype-heart/pkg/lib/logging" @@ -70,6 +71,11 @@ func (s *Service) stop() error { defer task.End() if s != nil && s.app != nil { + s.app.IterateComponents(func(c app.Component) { + if c, ok := c.(app.ComponentStatable); ok { + c.StateChange(int(domain.CompStateAppClosingInitiated)) + } + }) err := s.app.Close(ctx) if err != nil { log.Warnf("error while stop anytype: %v", err) diff --git a/core/domain/app.go b/core/domain/app.go new file mode 100644 index 000000000..541e8a11f --- /dev/null +++ b/core/domain/app.go @@ -0,0 +1,7 @@ +package domain + +type CompState int + +const ( + CompStateAppClosingInitiated CompState = 1 +) diff --git a/core/indexer/fulltext.go b/core/indexer/fulltext.go index d5ab72bd9..8ccb0cc80 100644 --- a/core/indexer/fulltext.go +++ b/core/indexer/fulltext.go @@ -45,10 +45,10 @@ func (i *indexer) ForceFTIndex() { // ftLoop runs full-text indexer // MUST NOT be called more than once -func (i *indexer) ftLoopRoutine() { +func (i *indexer) ftLoopRoutine(ctx context.Context) { tickerDuration := ftIndexInterval ticker := time.NewTicker(tickerDuration) - ctx := i.runCtx + prevError := i.runFullTextIndexer(ctx) defer close(i.ftQueueFinished) var lastForceIndex time.Time diff --git a/core/indexer/indexer.go b/core/indexer/indexer.go index 16e9015e5..615532b97 100644 --- a/core/indexer/indexer.go +++ b/core/indexer/indexer.go @@ -32,7 +32,7 @@ const ( var log = logging.Logger("anytype-doc-indexer") func New() Indexer { - return &indexer{} + return new(indexer) } type Indexer interface { @@ -59,6 +59,7 @@ type indexer struct { runCtx context.Context runCtxCancel context.CancelFunc + ftQueueStop context.CancelFunc ftQueueFinished chan struct{} config *config.Config @@ -98,12 +99,20 @@ func (i *indexer) Run(context.Context) (err error) { return i.StartFullTextIndex() } +func (f *indexer) StateChange(state int) { + if state == int(domain.CompStateAppClosingInitiated) && f.ftQueueStop != nil { + f.ftQueueStop() + } +} + func (i *indexer) StartFullTextIndex() (err error) { if ftErr := i.ftInit(); ftErr != nil { log.Errorf("can't init ft: %v", ftErr) } i.ftQueueFinished = make(chan struct{}) - go i.ftLoopRoutine() + var ftCtx context.Context + ftCtx, i.ftQueueStop = context.WithCancel(i.runCtx) + go i.ftLoopRoutine(ftCtx) return } diff --git a/go.mod b/go.mod index 409fe3818..58349cbb6 100644 --- a/go.mod +++ b/go.mod @@ -16,7 +16,7 @@ require ( github.com/anyproto/go-slip10 v1.0.0 github.com/anyproto/lexid v0.0.4 github.com/anyproto/protobuf v1.3.3-0.20240814124528-72b8c7e0e0f5 - github.com/anyproto/tantivy-go v1.0.1 + github.com/anyproto/tantivy-go v1.0.2 github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de github.com/avast/retry-go/v4 v4.6.1 github.com/chai2010/webp v1.1.2-0.20240612091223-aa1b379218b7 @@ -94,8 +94,6 @@ require ( github.com/srwiley/oksvg v0.0.0-20221011165216-be6e8873101c github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef github.com/stretchr/testify v1.10.0 - github.com/swaggo/files v1.0.1 - github.com/swaggo/gin-swagger v1.6.0 github.com/swaggo/swag/v2 v2.0.0-rc4 github.com/uber/jaeger-client-go v2.30.0+incompatible github.com/valyala/fastjson v1.6.4 @@ -261,7 +259,6 @@ require ( github.com/stretchr/objx v0.5.2 // indirect github.com/subosito/gotenv v1.4.2 // indirect github.com/sv-tools/openapi v0.2.1 // indirect - github.com/swaggo/swag v1.16.4 // indirect github.com/tetratelabs/wazero v1.8.1 // indirect github.com/tklauser/go-sysconf v0.3.12 // indirect github.com/tklauser/numcpus v0.6.1 // indirect diff --git a/go.sum b/go.sum index e1603a425..df0b0061f 100644 --- a/go.sum +++ b/go.sum @@ -80,12 +80,6 @@ github.com/andybalholm/cascadia v1.3.3 h1:AG2YHrzJIm4BZ19iwJ/DAua6Btl3IwJX+VI4kk github.com/andybalholm/cascadia v1.3.3/go.mod h1:xNd9bqTn98Ln4DwST8/nG+H0yuB8Hmgu1YHNnWw0GeA= github.com/anyproto/any-store v0.1.13 h1:1wmm0qQIRShaycBLKwcgkQbRKy3WrNPAShTE5fwzfCY= github.com/anyproto/any-store v0.1.13/go.mod h1:2M0Xf4rmijoKGd+nqqeKG8I1yIokCLEIxrAXEoHjXn4= -github.com/anyproto/any-sync v0.6.15 h1:fxZHjiMcZJzJqzBprBNTYmm0MV8Y7NgIGPfLxlsgnWk= -github.com/anyproto/any-sync v0.6.15/go.mod h1:TSKgCoTV40Bt8AfCh3RxPUUAfYGrhc8Mzh8/AiVlvX4= -github.com/anyproto/any-sync v0.7.2 h1:S1UPzW0iYTLwsMAZ3rN/EJwthTGuadsvXdnGYNiC6cA= -github.com/anyproto/any-sync v0.7.2/go.mod h1:TSKgCoTV40Bt8AfCh3RxPUUAfYGrhc8Mzh8/AiVlvX4= -github.com/anyproto/any-sync v0.7.4 h1:pEkPn1fxJGvSGlsnAOy0lWVaqRgymyddmNy7T9toUQk= -github.com/anyproto/any-sync v0.7.4/go.mod h1:TSKgCoTV40Bt8AfCh3RxPUUAfYGrhc8Mzh8/AiVlvX4= github.com/anyproto/any-sync v0.7.5 h1:VHayuacVpa2eRu5ubxCwrL3l0f/OSN7p45L8TxnaJEw= github.com/anyproto/any-sync v0.7.5/go.mod h1:02tMeQ6s/tneWLhoyzvy/ocGswICtvI48kdwTU8hQf8= github.com/anyproto/anytype-publish-server/publishclient v0.0.0-20250131145601-de288583ff2a h1:ZZM+0OUCQMWSLSflpkf0ZMVo3V76qEDDIXPpQOClNs0= @@ -118,8 +112,8 @@ github.com/anyproto/protobuf v1.3.3-0.20240814124528-72b8c7e0e0f5 h1:aY7tBzQ+z8H github.com/anyproto/protobuf v1.3.3-0.20240814124528-72b8c7e0e0f5/go.mod h1:5+PHE01DgsDPkralb8MYmGg2sPQahsqEJ9ue7ciDHKg= github.com/anyproto/ristretto v0.1.2-0.20240221153107-2b23839cc50c h1:GicoaTUyB2mtCIl3YMrO0OzysqRT5GA4vuvDsqEkhSM= github.com/anyproto/ristretto v0.1.2-0.20240221153107-2b23839cc50c/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= -github.com/anyproto/tantivy-go v1.0.1 h1:Uc9WqwGEDsVUEwRgSg4nmhoW20GjMUBKRz5FYw4r+ns= -github.com/anyproto/tantivy-go v1.0.1/go.mod h1:LtipOpRjGtcYMGcop6gQN7rVl1Pc6BlIs9BTMqeWMsk= +github.com/anyproto/tantivy-go v1.0.2 h1:PVr4Tt4QH0JAZDs2Z9T4KJfLL+0mgXizj2Y5LSvEQdU= +github.com/anyproto/tantivy-go v1.0.2/go.mod h1:LtipOpRjGtcYMGcop6gQN7rVl1Pc6BlIs9BTMqeWMsk= github.com/anyproto/zeroconf/v2 v2.2.1-0.20240228113933-f90a5cc4439d h1:5bj7nX/AS8sxGpTIrapE7PC4oPlhkHMwMqXlJbUHBlg= github.com/anyproto/zeroconf/v2 v2.2.1-0.20240228113933-f90a5cc4439d/go.mod h1:fuJqLnUwZTshS3U/bMRJ3+ow/v9oid1n0DmyYyNO1Xs= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= @@ -318,8 +312,6 @@ github.com/gammazero/chanqueue v1.1.0/go.mod h1:fMwpwEiuUgpab0sH4VHiVcEoji1pSi+E github.com/gammazero/deque v1.0.0 h1:LTmimT8H7bXkkCy6gZX7zNLtkbz4NdS2z8LZuor3j34= github.com/gammazero/deque v1.0.0/go.mod h1:iflpYvtGfM3U8S8j+sZEKIak3SAKYpA5/SQewgfXDKo= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gin-contrib/gzip v0.0.6 h1:NjcunTcGAj5CO1gn4N8jHOSIeRFHIbn51z6K+xaN4d4= -github.com/gin-contrib/gzip v0.0.6/go.mod h1:QOJlmV2xmayAjkNS2Y8NQsMneuRShOU/kjovCXNuzzk= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= @@ -1058,12 +1050,6 @@ github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8 github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/sv-tools/openapi v0.2.1 h1:ES1tMQMJFGibWndMagvdoo34T1Vllxr1Nlm5wz6b1aA= github.com/sv-tools/openapi v0.2.1/go.mod h1:k5VuZamTw1HuiS9p2Wl5YIDWzYnHG6/FgPOSFXLAhGg= -github.com/swaggo/files v1.0.1 h1:J1bVJ4XHZNq0I46UU90611i9/YzdrF7x92oX1ig5IdE= -github.com/swaggo/files v1.0.1/go.mod h1:0qXmMNH6sXNf+73t65aKeB+ApmgxdnkQzVTAj2uaMUg= -github.com/swaggo/gin-swagger v1.6.0 h1:y8sxvQ3E20/RCyrXeFfg60r6H0Z+SwpTjMYsMm+zy8M= -github.com/swaggo/gin-swagger v1.6.0/go.mod h1:BG00cCEy294xtVpyIAHG6+e2Qzj/xKlRdOqDkvq0uzo= -github.com/swaggo/swag v1.16.4 h1:clWJtd9LStiG3VeijiCfOVODP6VpHtKdQy9ELFG3s1A= -github.com/swaggo/swag v1.16.4/go.mod h1:VBsHJRsDvfYvqoiMKnsdwhNV9LEMHgEDZcyVYX0sxPg= github.com/swaggo/swag/v2 v2.0.0-rc4 h1:SZ8cK68gcV6cslwrJMIOqPkJELRwq4gmjvk77MrvHvY= github.com/swaggo/swag/v2 v2.0.0-rc4/go.mod h1:Ow7Y8gF16BTCDn8YxZbyKn8FkMLRUHekv1kROJZpbvE= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= diff --git a/pkg/lib/localstore/ftsearch/ftsearch.go b/pkg/lib/localstore/ftsearch/ftsearch.go index c2e86d67d..39d7d82f0 100644 --- a/pkg/lib/localstore/ftsearch/ftsearch.go +++ b/pkg/lib/localstore/ftsearch/ftsearch.go @@ -16,11 +16,13 @@ package ftsearch import "C" import ( "context" + "errors" "fmt" "os" "path/filepath" "strings" "sync" + "sync/atomic" "time" "unicode" @@ -29,9 +31,11 @@ import ( tantivy "github.com/anyproto/tantivy-go" "github.com/valyala/fastjson" + "github.com/anyproto/anytype-heart/core/domain" "github.com/anyproto/anytype-heart/core/wallet" "github.com/anyproto/anytype-heart/metrics" "github.com/anyproto/anytype-heart/pkg/lib/bundle" + "github.com/anyproto/anytype-heart/pkg/lib/localstore/ftsearch/tantivycheck" "github.com/anyproto/anytype-heart/pkg/lib/logging" "github.com/anyproto/anytype-heart/util/text" ) @@ -40,7 +44,7 @@ const ( CName = "fts" ftsDir = "fts" ftsDir2 = "fts_tantivy" - ftsVer = "13" + ftsVer = "14" docLimit = 10000 fieldTitle = "Title" @@ -57,7 +61,10 @@ const ( tokenizerId = "SimpleIdTokenizer" ) -var log = logging.Logger("ftsearch") +var ( + log = logging.Logger("ftsearch") + ErrAppClosingInitiated = errors.New("app closing initiated") +) type FTSearch interface { app.ComponentRunnable @@ -93,14 +100,15 @@ type DocumentMatch struct { } type ftSearch struct { - rootPath string - ftsPath string - builderId string - index *tantivy.TantivyContext - parserPool *fastjson.ParserPool - mu sync.Mutex - blevePath string - lang tantivy.Language + rootPath string + ftsPath string + builderId string + index *tantivy.TantivyContext + parserPool *fastjson.ParserPool + mu sync.Mutex + blevePath string + lang tantivy.Language + appClosingInitiated atomic.Bool } func (f *ftSearch) ProvideStat() any { @@ -126,6 +134,9 @@ func (f *ftSearch) BatchDeleteObjects(ids []string) error { } f.mu.Lock() defer f.mu.Unlock() + if f.appClosingInitiated.Load() { + return ErrAppClosingInitiated + } start := time.Now() defer func() { spentMs := time.Since(start).Milliseconds() @@ -147,6 +158,9 @@ func (f *ftSearch) BatchDeleteObjects(ids []string) error { func (f *ftSearch) DeleteObject(objectId string) error { f.mu.Lock() defer f.mu.Unlock() + if f.appClosingInitiated.Load() { + return ErrAppClosingInitiated + } return f.index.DeleteDocuments(fieldIdRaw, objectId) } @@ -182,6 +196,24 @@ func (f *ftSearch) Name() (name string) { } func (f *ftSearch) Run(context.Context) error { + report, err := tantivycheck.Check(f.ftsPath) + if err != nil { + if !errors.Is(err, os.ErrNotExist) { + log.Warnf("tantivy index checking failed: %v", err) + } + } + if !report.IsOk() { + log.With("missingSegments", len(report.MissingSegments)). + With("missingDelFiles", len(report.MissingDelFiles)). + With("extraSegments", len(report.ExtraSegments)). + With("extraDelFiles", len(report.ExtraDelFiles)). + With("writerLockPresent", report.WriterLockPresent). + With("metaLockPresent", report.MetaLockPresent). + With("totalSegmentsInMeta", report.TotalSegmentsInMeta). + With("uniqueSegmentPrefixesOnDisk", report.UniqueSegmentPrefixesOnDisk). + Warnf("tantivy index is inconsistent state, dry run") + } + builder, err := tantivy.NewSchemaBuilder() if err != nil { return err @@ -328,6 +360,9 @@ func (f *ftSearch) tryToBuildSchema(schema *tantivy.Schema) (*tantivy.TantivyCon func (f *ftSearch) Index(doc SearchDoc) error { f.mu.Lock() defer f.mu.Unlock() + if f.appClosingInitiated.Load() { + return ErrAppClosingInitiated + } metrics.ObjectFTUpdatedCounter.Inc() tantivyDoc, err := f.convertDoc(doc) if err != nil { @@ -375,6 +410,9 @@ func (f *ftSearch) BatchIndex(ctx context.Context, docs []SearchDoc, deletedDocs } }() f.mu.Lock() + if f.appClosingInitiated.Load() { + return ErrAppClosingInitiated + } err = f.index.DeleteDocuments(fieldIdRaw, deletedDocs...) f.mu.Unlock() if err != nil { @@ -390,6 +428,9 @@ func (f *ftSearch) BatchIndex(ctx context.Context, docs []SearchDoc, deletedDocs } f.mu.Lock() defer f.mu.Unlock() + if f.appClosingInitiated.Load() { + return ErrAppClosingInitiated + } return f.index.AddAndConsumeDocuments(tantivyDocs...) } @@ -572,8 +613,10 @@ func (f *ftSearch) DocCount() (uint64, error) { func (f *ftSearch) Close(ctx context.Context) error { if f.index != nil { - f.index.Free() - f.index = nil + err := f.index.Close() + if err != nil { + log.Errorf("failed to close tantivy index: %v", err) + } } return nil } @@ -582,6 +625,12 @@ func (f *ftSearch) cleanupBleve() { _ = os.RemoveAll(f.blevePath) } +func (f *ftSearch) StateChange(state int) { + if state == int(domain.CompStateAppClosingInitiated) { + f.appClosingInitiated.Store(true) + } +} + func prepareQuery(query string) string { query = text.Truncate(query, 100, "") query = strings.ToLower(query) diff --git a/pkg/lib/localstore/ftsearch/tantivycheck/tantivycheck.go b/pkg/lib/localstore/ftsearch/tantivycheck/tantivycheck.go new file mode 100644 index 000000000..97fa3825d --- /dev/null +++ b/pkg/lib/localstore/ftsearch/tantivycheck/tantivycheck.go @@ -0,0 +1,230 @@ +// Package tantivycheck provides a DRY-RUN consistency check for Tantivy index +// directories. +// +// It verifies that +// +// - every segment listed in meta.json has files on disk +// - every expected ..del file exists +// - there are no extra segment prefixes on disk +// - there are no extra .del files on disk +// - the special lock files INDEX_WRITER_LOCK and META_LOCK are noted +// +// Nothing is modified on disk; you simply get a ConsistencyReport back. +package tantivycheck + +import ( + "encoding/json" + "fmt" + "io/fs" + "os" + "path/filepath" + "regexp" + "strconv" +) + +// ----------------------------------------------------------------------------- +// Package-level helpers (compiled once) +// ----------------------------------------------------------------------------- + +var ( + segPrefixRe = regexp.MustCompile(`^([0-9a-f]{32})(?:\..+)?$`) + delFileRe = regexp.MustCompile(`^([0-9a-f]{32})\.(\d+)\.del$`) +) + +// ----------------------------------------------------------------------------- +// Public API +// ----------------------------------------------------------------------------- + +// ConsistencyReport gathers all findings of the dry-run. +type ConsistencyReport struct { + // Segments present in meta.json but with no files on disk. + MissingSegments []string + // ..del files that meta.json expects but are absent. + MissingDelFiles []string + // Segment prefixes that exist on disk but are not referenced in meta.json. + ExtraSegments []string + // .del files on disk that are not referenced (wrong opstamp or orphan). + ExtraDelFiles []string + + // Lock-file information + WriterLockPresent bool // true if INDEX_WRITER_LOCK exists + MetaLockPresent bool // true if META_LOCK exists + + // Informational counters + TotalSegmentsInMeta int + UniqueSegmentPrefixesOnDisk int +} + +// Check runs the consistency test against dir and returns a report. +// +// It fails with an error if meta.json is absent or can’t be decoded. +func Check(dir string) (ConsistencyReport, error) { + // --------------------------------------------------------------------- + // 1) Parse meta.json + // --------------------------------------------------------------------- + meta, err := readMeta(filepath.Join(dir, "meta.json")) + if err != nil { + return ConsistencyReport{}, err + } + + // Build metaSegments: 32-hex-id (no dashes) → expected opstamp (nil if none) + metaSegments := make(map[string]*uint64, len(meta.Segments)) + for _, s := range meta.Segments { + id := stripDashes(s.SegmentID) + if s.Deletes != nil { + metaSegments[id] = &s.Deletes.Opstamp + } else { + metaSegments[id] = nil + } + } + + // --------------------------------------------------------------------- + // 2) Walk directory once + // --------------------------------------------------------------------- + segmentPrefixesDisk := map[string]struct{}{} + delFilesDisk := map[[2]string]struct{}{} // key = [segPrefix, opstamp] + + var writerLockPresent, metaLockPresent bool + + err = filepath.WalkDir(dir, func(path string, d fs.DirEntry, walkErr error) error { + if walkErr != nil { + return walkErr + } + if d.IsDir() { + return nil + } + + name := d.Name() + + switch name { + case "INDEX_WRITER_LOCK": + writerLockPresent = true + case "META_LOCK": + metaLockPresent = true + } + + if m := segPrefixRe.FindStringSubmatch(name); m != nil { + segmentPrefixesDisk[m[1]] = struct{}{} + } + if m := delFileRe.FindStringSubmatch(name); m != nil { + delFilesDisk[[2]string{m[1], m[2]}] = struct{}{} + } + return nil + }) + if err != nil { + return ConsistencyReport{}, fmt.Errorf("scanning directory: %w", err) + } + + // --------------------------------------------------------------------- + // 3) Compare sets + // --------------------------------------------------------------------- + var ( + missingSegments []string + extraSegments []string + missingDelFiles []string + extraDelFiles []string + ) + + // missing segments + for id := range metaSegments { + if _, ok := segmentPrefixesDisk[id]; !ok { + missingSegments = append(missingSegments, id) + } + } + + // extra segments + for id := range segmentPrefixesDisk { + if _, ok := metaSegments[id]; !ok { + extraSegments = append(extraSegments, id) + } + } + + // missing del files + for id, opPtr := range metaSegments { + if opPtr == nil { + continue // no deletes expected + } + opStr := strconv.FormatUint(*opPtr, 10) + if _, ok := delFilesDisk[[2]string{id, opStr}]; !ok { + missingDelFiles = append(missingDelFiles, fmt.Sprintf("%s.%s.del", id, opStr)) + } + } + + // extra del files + for key := range delFilesDisk { + id, opStr := key[0], key[1] + expectedOpPtr, segKnown := metaSegments[id] + if !segKnown || expectedOpPtr == nil || strconv.FormatUint(*expectedOpPtr, 10) != opStr { + extraDelFiles = append(extraDelFiles, fmt.Sprintf("%s.%s.del", id, opStr)) + } + } + + // --------------------------------------------------------------------- + // 4) Return aggregated report + // --------------------------------------------------------------------- + return ConsistencyReport{ + MissingSegments: missingSegments, + MissingDelFiles: missingDelFiles, + ExtraSegments: extraSegments, + ExtraDelFiles: extraDelFiles, + WriterLockPresent: writerLockPresent, + MetaLockPresent: metaLockPresent, + TotalSegmentsInMeta: len(metaSegments), + UniqueSegmentPrefixesOnDisk: len(segmentPrefixesDisk), + }, nil +} + +// IsOk returns true when the report is free of inconsistencies: +// +// - no segments are missing +// - no .del files are missing +// - no extra segments are present +// - no extra .del files are present +// +// The presence of INDEX_WRITER_LOCK or META_LOCK is *not* considered +// an inconsistency—these files are expected during normal operation and +// merely reported for information. +func (r *ConsistencyReport) IsOk() bool { + return len(r.MissingSegments) == 0 && + len(r.MissingDelFiles) == 0 && + len(r.ExtraSegments) == 0 && + len(r.ExtraDelFiles) == 0 && + !r.WriterLockPresent && + !r.MetaLockPresent +} + +// ----------------------------------------------------------------------------- +// Internal helpers +// ----------------------------------------------------------------------------- + +// metaFile mirrors only the parts of meta.json we need. +type metaFile struct { + Segments []struct { + SegmentID string `json:"segment_id"` + Deletes *struct { + Opstamp uint64 `json:"opstamp"` + } `json:"deletes"` + } `json:"segments"` +} + +func readMeta(path string) (*metaFile, error) { + b, err := os.ReadFile(path) + if err != nil { + return nil, fmt.Errorf("reading %s: %w", path, err) + } + var m metaFile + if err := json.Unmarshal(b, &m); err != nil { + return nil, fmt.Errorf("decoding meta.json: %w", err) + } + return &m, nil +} + +func stripDashes(s string) string { + out := make([]byte, 0, len(s)) + for i := 0; i < len(s); i++ { + if s[i] != '-' { + out = append(out, s[i]) + } + } + return string(out) +} diff --git a/tantivity_sha256.txt b/tantivity_sha256.txt index 2456d1167..c969cec02 100644 --- a/tantivity_sha256.txt +++ b/tantivity_sha256.txt @@ -1,12 +1,12 @@ -565dd299ef61edff535b20ec166f34f2399529b8254eed5d137a771a7b2b7c04 deps/libs/android-386.tar.gz -34d9c7d4a400653ddbcf28e64a5c8e055c08ab675df6b921cebedb4c5e667254 deps/libs/android-amd64.tar.gz -d90b501033763687f1ae136d69e284033594870c7143e50624799ff474e12f41 deps/libs/android-arm.tar.gz -3939f7ad6a1d08a0a559566d0ae5195739317a0023381bcb719603a7e2cac10d deps/libs/android-arm64.tar.gz -b7f7c3e82b1054a4c0755e7cd32f98d1dbe2ec55dab49f07e6620c8e2cd3ff83 deps/libs/darwin-amd64.tar.gz -40cdb051d2e063eb374e1a911ca7926beb4586c41a0347e430dc18fe5c216790 deps/libs/darwin-arm64.tar.gz -2dc93d6cb9356df9b5c330a6c566e1da1a4dfb32a17f1262080f2c1a875a5775 deps/libs/ios-amd64.tar.gz -2a949a364f29c5801c3c18607dbc14b5edefdcd002746ce94c89f297bb4f620c deps/libs/ios-arm64.tar.gz -b09afc40d37a37377579ec4096511fd88cc22cdd387518225a77f205c226130a deps/libs/ios-arm64-sim.tar.gz -122010a6f287a3d3b169a64c26918bd5745a1190c99638e7e91a664172781cf7 deps/libs/linux-amd64-musl.tar.gz -2b86930fcd938fe41413f4f915c90a2093d703179c61153ec4a007cdd2ed4a9c deps/libs/linux-arm64-musl.tar.gz -2cdefb8975651849f6c5f41c5a934035d959e797c6fdef9a5a946ec9052e3bee deps/libs/windows-amd64.tar.gz +bbde99ff75d9c20a7eefeea4ca6c5c77a75c1d1114ee7d53d77b78a49741f2e3 deps/libs/android-386.tar.gz +5c4599d29230f689ed2cfb21185548cb2fc3e8e61fd31e856c969fd4bdd7abc3 deps/libs/android-amd64.tar.gz +e4d16d8fce08b5de22d475c8e9be02473c07786b298601d6b96768f0fc7ecbd6 deps/libs/android-arm.tar.gz +8c67e2b0e8cf701ea6fecbe074f19ee48fb4321d02bc8a8b3fb11055397eb853 deps/libs/android-arm64.tar.gz +1278ecd5b7d73e36163e48c6b98b88a6e7c96a663ddba31eb168224a6921fd92 deps/libs/darwin-amd64.tar.gz +209429e1ffb2cdd55cedb90c74617d87aced121bc905802430f71b48b0ea6a43 deps/libs/darwin-arm64.tar.gz +101f9afde0a06339d81060f1bb77be63055d9674878cea5f7b142fcc3ca9658e deps/libs/ios-amd64.tar.gz +8b0f568bbf09e0ada76c9b331eab59ad9ed409aa37dec3b3d0538480babfeb5e deps/libs/ios-arm64.tar.gz +f3a90aff6eab8aa0e3e89a2866f0dbbd9c5ffb0d8a47d5aa4ad3d28afbd3416b deps/libs/ios-arm64-sim.tar.gz +74c3585022a962794c49f8f15606d3093684cad5543868e90d91d3ca876c45a8 deps/libs/linux-amd64-musl.tar.gz +2e1a052e7c12b3a0fa845c53c151228243ab6483c9fa3d83b97f34f40550fa6b deps/libs/linux-arm64-musl.tar.gz +5357ae4522bd826a8c53cb39d8c63b77e4cbc1683154c54b6f71542a25b1dcd1 deps/libs/windows-amd64.tar.gz From 35f13e630761f819a9df25f43c0a0fe387a6c056 Mon Sep 17 00:00:00 2001 From: Sergey Date: Thu, 15 May 2025 17:15:54 +0200 Subject: [PATCH 051/164] Chats: fix some tests --- core/block/chats/chatrepository/repository.go | 16 +- core/block/chats/chatsubscription/service.go | 4 + core/block/chats/service_test.go | 5 +- core/block/editor/chatobject/chatobject.go | 2 +- .../editor/chatobject/chatobject_test.go | 77 ++++--- .../mock_chatobject/mock_StoreObject.go | 191 +++++------------- core/block/editor/chatobject/reading_test.go | 18 +- .../editor/chatobject/subscription_test.go | 29 ++- 8 files changed, 142 insertions(+), 200 deletions(-) diff --git a/core/block/chats/chatrepository/repository.go b/core/block/chats/chatrepository/repository.go index d8b7a795b..4d3d08b63 100644 --- a/core/block/chats/chatrepository/repository.go +++ b/core/block/chats/chatrepository/repository.go @@ -47,8 +47,6 @@ type Service interface { app.ComponentRunnable Repository(chatObjectId string) (Repository, error) - // RepositoryForCollection is useful when you already have the chat object collection - RepositoryForCollection(col anystore.Collection) (Repository, error) } type service struct { @@ -111,19 +109,14 @@ func (s *service) Repository(chatObjectId string) (Repository, error) { } return &repository{ + db: crdtDb, collection: collection, arenaPool: s.arenaPool, }, nil } -func (s *service) RepositoryForCollection(col anystore.Collection) (Repository, error) { - return &repository{ - collection: col, - arenaPool: s.arenaPool, - }, nil -} - type Repository interface { + GetDb() anystore.DB WriteTx(ctx context.Context) (anystore.WriteTx, error) ReadTx(ctx context.Context) (anystore.ReadTx, error) GetLastStateId(ctx context.Context) (string, error) @@ -140,10 +133,15 @@ type Repository interface { } type repository struct { + db anystore.DB collection anystore.Collection arenaPool *anyenc.ArenaPool } +func (s *repository) GetDb() anystore.DB { + return s.db +} + func (s *repository) WriteTx(ctx context.Context) (anystore.WriteTx, error) { return s.collection.WriteTx(ctx) } diff --git a/core/block/chats/chatsubscription/service.go b/core/block/chats/chatsubscription/service.go index cb8617458..b74e04a75 100644 --- a/core/block/chats/chatsubscription/service.go +++ b/core/block/chats/chatsubscription/service.go @@ -177,6 +177,10 @@ type SubscribeLastMessagesResponse struct { } func (s *service) SubscribeLastMessages(ctx context.Context, req SubscribeLastMessagesRequest) (*SubscribeLastMessagesResponse, error) { + if req.ChatObjectId == "" { + return nil, fmt.Errorf("empty chat object id") + } + mngr, err := s.getManager(req.ChatObjectId) if err != nil { return nil, fmt.Errorf("get manager: %w", err) diff --git a/core/block/chats/service_test.go b/core/block/chats/service_test.go index 1810638ee..9a8371bc5 100644 --- a/core/block/chats/service_test.go +++ b/core/block/chats/service_test.go @@ -13,6 +13,7 @@ import ( "github.com/stretchr/testify/require" "github.com/anyproto/anytype-heart/core/block/cache/mock_cache" + "github.com/anyproto/anytype-heart/core/block/chats/chatmodel" "github.com/anyproto/anytype-heart/core/block/editor/chatobject" "github.com/anyproto/anytype-heart/core/block/editor/chatobject/mock_chatobject" "github.com/anyproto/anytype-heart/core/block/editor/smartblock" @@ -141,8 +142,8 @@ type chatObjectWrapper struct { chatobject.StoreObject } -func givenLastMessages() []*chatobject.Message { - return []*chatobject.Message{ +func givenLastMessages() []*chatmodel.Message { + return []*chatmodel.Message{ { ChatMessage: &model.ChatMessage{ Id: "messageId1", diff --git a/core/block/editor/chatobject/chatobject.go b/core/block/editor/chatobject/chatobject.go index 58ebcdedd..900318ccb 100644 --- a/core/block/editor/chatobject/chatobject.go +++ b/core/block/editor/chatobject/chatobject.go @@ -148,7 +148,7 @@ func (s *storeObject) Init(ctx *smartblock.InitContext) error { myParticipantId: myParticipantId, } - stateStore, err := storestate.New(ctx.Ctx, s.Id(), s.crdtDb, s.chatHandler) + stateStore, err := storestate.New(ctx.Ctx, s.Id(), s.repository.GetDb(), s.chatHandler) if err != nil { return fmt.Errorf("create state store: %w", err) } diff --git a/core/block/editor/chatobject/chatobject_test.go b/core/block/editor/chatobject/chatobject_test.go index d615b7491..fb7720bf6 100644 --- a/core/block/editor/chatobject/chatobject_test.go +++ b/core/block/editor/chatobject/chatobject_test.go @@ -4,26 +4,30 @@ import ( "context" "errors" "fmt" - "path/filepath" "testing" - anystore "github.com/anyproto/any-store" + "github.com/anyproto/any-sync/app" "github.com/globalsign/mgo/bson" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" + "github.com/anyproto/anytype-heart/core/block/chats/chatmodel" + "github.com/anyproto/anytype-heart/core/block/chats/chatrepository" + "github.com/anyproto/anytype-heart/core/block/chats/chatsubscription" "github.com/anyproto/anytype-heart/core/block/editor/smartblock" "github.com/anyproto/anytype-heart/core/block/editor/smartblock/smarttest" "github.com/anyproto/anytype-heart/core/block/editor/storestate" + "github.com/anyproto/anytype-heart/core/block/object/idresolver/mock_idresolver" "github.com/anyproto/anytype-heart/core/block/source" "github.com/anyproto/anytype-heart/core/block/source/mock_source" "github.com/anyproto/anytype-heart/core/domain" "github.com/anyproto/anytype-heart/core/event/mock_event" "github.com/anyproto/anytype-heart/core/session" "github.com/anyproto/anytype-heart/pb" - "github.com/anyproto/anytype-heart/pkg/lib/localstore/objectstore/spaceindex" + "github.com/anyproto/anytype-heart/pkg/lib/localstore/objectstore" "github.com/anyproto/anytype-heart/pkg/lib/pb/model" + "github.com/anyproto/anytype-heart/tests/testutil" ) const ( @@ -38,6 +42,10 @@ func (a *accountServiceStub) AccountID() string { return a.accountId } +func (a *accountServiceStub) Name() string { return "accountServiceStub" } + +func (a *accountServiceStub) Init(ap *app.App) error { return nil } + type stubSeenHeadsCollector struct { heads []string } @@ -61,12 +69,11 @@ const testCreator = "accountId1" func newFixture(t *testing.T) *fixture { ctx := context.Background() - db, err := anystore.Open(ctx, filepath.Join(t.TempDir(), "crdt.db"), nil) - require.NoError(t, err) - t.Cleanup(func() { - err := db.Close() - require.NoError(t, err) - }) + + a := &app.App{} + + idResolver := mock_idresolver.NewMockResolver(t) + idResolver.EXPECT().ResolveSpaceID(mock.Anything).Return(testSpaceId, nil).Maybe() accountService := &accountServiceStub{accountId: testCreator} @@ -74,9 +81,23 @@ func newFixture(t *testing.T) *fixture { sb := smarttest.New("chatId1") - spaceIndex := spaceindex.NewStoreFixture(t) + objectStore := objectstore.NewStoreFixture(t) + spaceIndex := objectStore.SpaceIndex(testSpaceId) - object := New(sb, accountService, eventSender, db, spaceIndex) + repo := chatrepository.New() + subscriptions := chatsubscription.New() + + a.Register(accountService) + a.Register(testutil.PrepareMock(ctx, a, eventSender)) + a.Register(testutil.PrepareMock(ctx, a, idResolver)) + a.Register(objectStore) + a.Register(repo) + a.Register(subscriptions) + + err := a.Start(ctx) + require.NoError(t, err) + + object := New(sb, accountService, eventSender, objectStore.GetCrdtDb(testSpaceId).Wait(), repo, spaceIndex, subscriptions) rawObject := object.(*storeObject) fx := &fixture{ @@ -107,7 +128,7 @@ func newFixture(t *testing.T) *fixture { // Imitate diff manager source.EXPECT().MarkSeenHeads(mock.Anything, mock.Anything, mock.Anything).RunAndReturn(func(ctx context.Context, name string, seenHeads []string) error { - allMessagesResp, err := fx.GetMessages(ctx, GetMessagesRequest{ + allMessagesResp, err := fx.GetMessages(ctx, chatrepository.GetMessagesRequest{ AfterOrderId: "", IncludeBoundary: true, }) @@ -158,7 +179,7 @@ func TestAddMessage(t *testing.T) { assert.NotEmpty(t, messageId) assert.NotEmpty(t, sessionCtx.GetMessages()) - messagesResp, err := fx.GetMessages(ctx, GetMessagesRequest{}) + messagesResp, err := fx.GetMessages(ctx, chatrepository.GetMessagesRequest{}) require.NoError(t, err) require.Len(t, messagesResp.Messages, 1) @@ -186,7 +207,7 @@ func TestAddMessage(t *testing.T) { assert.NotEmpty(t, messageId) assert.NotEmpty(t, sessionCtx.GetMessages()) - messagesResp, err := fx.GetMessages(ctx, GetMessagesRequest{}) + messagesResp, err := fx.GetMessages(ctx, chatrepository.GetMessagesRequest{}) require.NoError(t, err) require.Len(t, messagesResp.Messages, 1) assert.Equal(t, messagesResp.ChatState.LastStateId, messagesResp.Messages[0].StateId) @@ -214,7 +235,7 @@ func TestGetMessages(t *testing.T) { assert.NotEmpty(t, messageId) } - messagesResp, err := fx.GetMessages(ctx, GetMessagesRequest{Limit: 5}) + messagesResp, err := fx.GetMessages(ctx, chatrepository.GetMessagesRequest{Limit: 5}) require.NoError(t, err) lastMessage := messagesResp.Messages[4] @@ -227,7 +248,7 @@ func TestGetMessages(t *testing.T) { t.Run("with requested BeforeOrderId", func(t *testing.T) { lastOrderId := messagesResp.Messages[0].OrderId // text 6 - gotMessages, err := fx.GetMessages(ctx, GetMessagesRequest{BeforeOrderId: lastOrderId, Limit: 5}) + gotMessages, err := fx.GetMessages(ctx, chatrepository.GetMessagesRequest{BeforeOrderId: lastOrderId, Limit: 5}) require.NoError(t, err) wantTexts = []string{"text 1", "text 2", "text 3", "text 4", "text 5"} for i, msg := range gotMessages.Messages { @@ -237,7 +258,7 @@ func TestGetMessages(t *testing.T) { t.Run("with requested AfterOrderId", func(t *testing.T) { lastOrderId := messagesResp.Messages[0].OrderId // text 6 - gotMessages, err := fx.GetMessages(ctx, GetMessagesRequest{AfterOrderId: lastOrderId, Limit: 2}) + gotMessages, err := fx.GetMessages(ctx, chatrepository.GetMessagesRequest{AfterOrderId: lastOrderId, Limit: 2}) require.NoError(t, err) wantTexts = []string{"text 7", "text 8"} for i, msg := range gotMessages.Messages { @@ -287,7 +308,7 @@ func TestEditMessage(t *testing.T) { err = fx.EditMessage(ctx, messageId, editedMessage) require.NoError(t, err) - messagesResp, err := fx.GetMessages(ctx, GetMessagesRequest{}) + messagesResp, err := fx.GetMessages(ctx, chatrepository.GetMessagesRequest{}) require.NoError(t, err) require.Len(t, messagesResp.Messages, 1) @@ -322,7 +343,7 @@ func TestEditMessage(t *testing.T) { require.Error(t, err) // Check that nothing is changed - messagesResp, err := fx.GetMessages(ctx, GetMessagesRequest{}) + messagesResp, err := fx.GetMessages(ctx, chatrepository.GetMessagesRequest{}) require.NoError(t, err) require.Len(t, messagesResp.Messages, 1) @@ -378,7 +399,7 @@ func TestToggleReaction(t *testing.T) { require.NoError(t, err) }) - messagesResp, err := fx.GetMessages(ctx, GetMessagesRequest{}) + messagesResp, err := fx.GetMessages(ctx, chatrepository.GetMessagesRequest{}) require.NoError(t, err) require.Len(t, messagesResp.Messages, 1) @@ -398,7 +419,7 @@ func TestToggleReaction(t *testing.T) { } func (fx *fixture) assertReadStatus(t *testing.T, ctx context.Context, afterOrderId string, beforeOrderId string, isRead bool, isMentionRead bool) *GetMessagesResponse { - messageResp, err := fx.GetMessages(ctx, GetMessagesRequest{ + messageResp, err := fx.GetMessages(ctx, chatrepository.GetMessagesRequest{ AfterOrderId: afterOrderId, BeforeOrderId: beforeOrderId, IncludeBoundary: true, @@ -445,8 +466,8 @@ func (fx *fixture) applyToStore(ctx context.Context, params source.PushStoreChan return changeId, nil } -func givenSimpleMessage(text string) *Message { - return &Message{ +func givenSimpleMessage(text string) *chatmodel.Message { + return &chatmodel.Message{ ChatMessage: &model.ChatMessage{ Id: "", OrderId: "", @@ -461,8 +482,8 @@ func givenSimpleMessage(text string) *Message { } } -func givenMessageWithMention(text string) *Message { - return &Message{ +func givenMessageWithMention(text string) *chatmodel.Message { + return &chatmodel.Message{ ChatMessage: &model.ChatMessage{ Id: "", OrderId: "", @@ -484,8 +505,8 @@ func givenMessageWithMention(text string) *Message { } } -func givenComplexMessage() *Message { - return &Message{ +func givenComplexMessage() *chatmodel.Message { + return &chatmodel.Message{ ChatMessage: &model.ChatMessage{ Id: "", OrderId: "", @@ -538,7 +559,7 @@ func givenComplexMessage() *Message { } } -func assertMessagesEqual(t *testing.T, want, got *Message) { +func assertMessagesEqual(t *testing.T, want, got *chatmodel.Message) { // Cleanup order id assert.NotEmpty(t, got.OrderId) got.OrderId = "" diff --git a/core/block/editor/chatobject/mock_chatobject/mock_StoreObject.go b/core/block/editor/chatobject/mock_chatobject/mock_StoreObject.go index 612fe17ce..933c1bbb8 100644 --- a/core/block/editor/chatobject/mock_chatobject/mock_StoreObject.go +++ b/core/block/editor/chatobject/mock_chatobject/mock_StoreObject.go @@ -3,9 +3,13 @@ package mock_chatobject import ( + chatmodel "github.com/anyproto/anytype-heart/core/block/chats/chatmodel" anystoredebug "github.com/anyproto/anytype-heart/core/block/editor/anystoredebug" + chatobject "github.com/anyproto/anytype-heart/core/block/editor/chatobject" + chatrepository "github.com/anyproto/anytype-heart/core/block/chats/chatrepository" + context "context" coresmartblock "github.com/anyproto/anytype-heart/pkg/lib/core/smartblock" @@ -150,7 +154,7 @@ func (_c *MockStoreObject_AddHookOnce_Call) RunAndReturn(run func(string, smartb } // AddMessage provides a mock function with given fields: ctx, sessionCtx, message -func (_m *MockStoreObject) AddMessage(ctx context.Context, sessionCtx session.Context, message *chatobject.Message) (string, error) { +func (_m *MockStoreObject) AddMessage(ctx context.Context, sessionCtx session.Context, message *chatmodel.Message) (string, error) { ret := _m.Called(ctx, sessionCtx, message) if len(ret) == 0 { @@ -159,16 +163,16 @@ func (_m *MockStoreObject) AddMessage(ctx context.Context, sessionCtx session.Co var r0 string var r1 error - if rf, ok := ret.Get(0).(func(context.Context, session.Context, *chatobject.Message) (string, error)); ok { + if rf, ok := ret.Get(0).(func(context.Context, session.Context, *chatmodel.Message) (string, error)); ok { return rf(ctx, sessionCtx, message) } - if rf, ok := ret.Get(0).(func(context.Context, session.Context, *chatobject.Message) string); ok { + if rf, ok := ret.Get(0).(func(context.Context, session.Context, *chatmodel.Message) string); ok { r0 = rf(ctx, sessionCtx, message) } else { r0 = ret.Get(0).(string) } - if rf, ok := ret.Get(1).(func(context.Context, session.Context, *chatobject.Message) error); ok { + if rf, ok := ret.Get(1).(func(context.Context, session.Context, *chatmodel.Message) error); ok { r1 = rf(ctx, sessionCtx, message) } else { r1 = ret.Error(1) @@ -185,14 +189,14 @@ type MockStoreObject_AddMessage_Call struct { // AddMessage is a helper method to define mock.On call // - ctx context.Context // - sessionCtx session.Context -// - message *chatobject.Message +// - message *chatmodel.Message func (_e *MockStoreObject_Expecter) AddMessage(ctx interface{}, sessionCtx interface{}, message interface{}) *MockStoreObject_AddMessage_Call { return &MockStoreObject_AddMessage_Call{Call: _e.mock.On("AddMessage", ctx, sessionCtx, message)} } -func (_c *MockStoreObject_AddMessage_Call) Run(run func(ctx context.Context, sessionCtx session.Context, message *chatobject.Message)) *MockStoreObject_AddMessage_Call { +func (_c *MockStoreObject_AddMessage_Call) Run(run func(ctx context.Context, sessionCtx session.Context, message *chatmodel.Message)) *MockStoreObject_AddMessage_Call { _c.Call.Run(func(args mock.Arguments) { - run(args[0].(context.Context), args[1].(session.Context), args[2].(*chatobject.Message)) + run(args[0].(context.Context), args[1].(session.Context), args[2].(*chatmodel.Message)) }) return _c } @@ -202,7 +206,7 @@ func (_c *MockStoreObject_AddMessage_Call) Return(_a0 string, _a1 error) *MockSt return _c } -func (_c *MockStoreObject_AddMessage_Call) RunAndReturn(run func(context.Context, session.Context, *chatobject.Message) (string, error)) *MockStoreObject_AddMessage_Call { +func (_c *MockStoreObject_AddMessage_Call) RunAndReturn(run func(context.Context, session.Context, *chatmodel.Message) (string, error)) *MockStoreObject_AddMessage_Call { _c.Call.Return(run) return _c } @@ -744,7 +748,7 @@ func (_c *MockStoreObject_Details_Call) RunAndReturn(run func() *domain.Details) } // EditMessage provides a mock function with given fields: ctx, messageId, newMessage -func (_m *MockStoreObject) EditMessage(ctx context.Context, messageId string, newMessage *chatobject.Message) error { +func (_m *MockStoreObject) EditMessage(ctx context.Context, messageId string, newMessage *chatmodel.Message) error { ret := _m.Called(ctx, messageId, newMessage) if len(ret) == 0 { @@ -752,7 +756,7 @@ func (_m *MockStoreObject) EditMessage(ctx context.Context, messageId string, ne } var r0 error - if rf, ok := ret.Get(0).(func(context.Context, string, *chatobject.Message) error); ok { + if rf, ok := ret.Get(0).(func(context.Context, string, *chatmodel.Message) error); ok { r0 = rf(ctx, messageId, newMessage) } else { r0 = ret.Error(0) @@ -769,14 +773,14 @@ type MockStoreObject_EditMessage_Call struct { // EditMessage is a helper method to define mock.On call // - ctx context.Context // - messageId string -// - newMessage *chatobject.Message +// - newMessage *chatmodel.Message func (_e *MockStoreObject_Expecter) EditMessage(ctx interface{}, messageId interface{}, newMessage interface{}) *MockStoreObject_EditMessage_Call { return &MockStoreObject_EditMessage_Call{Call: _e.mock.On("EditMessage", ctx, messageId, newMessage)} } -func (_c *MockStoreObject_EditMessage_Call) Run(run func(ctx context.Context, messageId string, newMessage *chatobject.Message)) *MockStoreObject_EditMessage_Call { +func (_c *MockStoreObject_EditMessage_Call) Run(run func(ctx context.Context, messageId string, newMessage *chatmodel.Message)) *MockStoreObject_EditMessage_Call { _c.Call.Run(func(args mock.Arguments) { - run(args[0].(context.Context), args[1].(string), args[2].(*chatobject.Message)) + run(args[0].(context.Context), args[1].(string), args[2].(*chatmodel.Message)) }) return _c } @@ -786,7 +790,7 @@ func (_c *MockStoreObject_EditMessage_Call) Return(_a0 error) *MockStoreObject_E return _c } -func (_c *MockStoreObject_EditMessage_Call) RunAndReturn(run func(context.Context, string, *chatobject.Message) error) *MockStoreObject_EditMessage_Call { +func (_c *MockStoreObject_EditMessage_Call) RunAndReturn(run func(context.Context, string, *chatmodel.Message) error) *MockStoreObject_EditMessage_Call { _c.Call.Return(run) return _c } @@ -948,7 +952,7 @@ func (_c *MockStoreObject_GetDocInfo_Call) RunAndReturn(run func() smartblock.Do } // GetMessages provides a mock function with given fields: ctx, req -func (_m *MockStoreObject) GetMessages(ctx context.Context, req chatobject.GetMessagesRequest) (*chatobject.GetMessagesResponse, error) { +func (_m *MockStoreObject) GetMessages(ctx context.Context, req chatrepository.GetMessagesRequest) (*chatobject.GetMessagesResponse, error) { ret := _m.Called(ctx, req) if len(ret) == 0 { @@ -957,10 +961,10 @@ func (_m *MockStoreObject) GetMessages(ctx context.Context, req chatobject.GetMe var r0 *chatobject.GetMessagesResponse var r1 error - if rf, ok := ret.Get(0).(func(context.Context, chatobject.GetMessagesRequest) (*chatobject.GetMessagesResponse, error)); ok { + if rf, ok := ret.Get(0).(func(context.Context, chatrepository.GetMessagesRequest) (*chatobject.GetMessagesResponse, error)); ok { return rf(ctx, req) } - if rf, ok := ret.Get(0).(func(context.Context, chatobject.GetMessagesRequest) *chatobject.GetMessagesResponse); ok { + if rf, ok := ret.Get(0).(func(context.Context, chatrepository.GetMessagesRequest) *chatobject.GetMessagesResponse); ok { r0 = rf(ctx, req) } else { if ret.Get(0) != nil { @@ -968,7 +972,7 @@ func (_m *MockStoreObject) GetMessages(ctx context.Context, req chatobject.GetMe } } - if rf, ok := ret.Get(1).(func(context.Context, chatobject.GetMessagesRequest) error); ok { + if rf, ok := ret.Get(1).(func(context.Context, chatrepository.GetMessagesRequest) error); ok { r1 = rf(ctx, req) } else { r1 = ret.Error(1) @@ -984,14 +988,14 @@ type MockStoreObject_GetMessages_Call struct { // GetMessages is a helper method to define mock.On call // - ctx context.Context -// - req chatobject.GetMessagesRequest +// - req chatrepository.GetMessagesRequest func (_e *MockStoreObject_Expecter) GetMessages(ctx interface{}, req interface{}) *MockStoreObject_GetMessages_Call { return &MockStoreObject_GetMessages_Call{Call: _e.mock.On("GetMessages", ctx, req)} } -func (_c *MockStoreObject_GetMessages_Call) Run(run func(ctx context.Context, req chatobject.GetMessagesRequest)) *MockStoreObject_GetMessages_Call { +func (_c *MockStoreObject_GetMessages_Call) Run(run func(ctx context.Context, req chatrepository.GetMessagesRequest)) *MockStoreObject_GetMessages_Call { _c.Call.Run(func(args mock.Arguments) { - run(args[0].(context.Context), args[1].(chatobject.GetMessagesRequest)) + run(args[0].(context.Context), args[1].(chatrepository.GetMessagesRequest)) }) return _c } @@ -1001,29 +1005,29 @@ func (_c *MockStoreObject_GetMessages_Call) Return(_a0 *chatobject.GetMessagesRe return _c } -func (_c *MockStoreObject_GetMessages_Call) RunAndReturn(run func(context.Context, chatobject.GetMessagesRequest) (*chatobject.GetMessagesResponse, error)) *MockStoreObject_GetMessages_Call { +func (_c *MockStoreObject_GetMessages_Call) RunAndReturn(run func(context.Context, chatrepository.GetMessagesRequest) (*chatobject.GetMessagesResponse, error)) *MockStoreObject_GetMessages_Call { _c.Call.Return(run) return _c } // GetMessagesByIds provides a mock function with given fields: ctx, messageIds -func (_m *MockStoreObject) GetMessagesByIds(ctx context.Context, messageIds []string) ([]*chatobject.Message, error) { +func (_m *MockStoreObject) GetMessagesByIds(ctx context.Context, messageIds []string) ([]*chatmodel.Message, error) { ret := _m.Called(ctx, messageIds) if len(ret) == 0 { panic("no return value specified for GetMessagesByIds") } - var r0 []*chatobject.Message + var r0 []*chatmodel.Message var r1 error - if rf, ok := ret.Get(0).(func(context.Context, []string) ([]*chatobject.Message, error)); ok { + if rf, ok := ret.Get(0).(func(context.Context, []string) ([]*chatmodel.Message, error)); ok { return rf(ctx, messageIds) } - if rf, ok := ret.Get(0).(func(context.Context, []string) []*chatobject.Message); ok { + if rf, ok := ret.Get(0).(func(context.Context, []string) []*chatmodel.Message); ok { r0 = rf(ctx, messageIds) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).([]*chatobject.Message) + r0 = ret.Get(0).([]*chatmodel.Message) } } @@ -1055,12 +1059,12 @@ func (_c *MockStoreObject_GetMessagesByIds_Call) Run(run func(ctx context.Contex return _c } -func (_c *MockStoreObject_GetMessagesByIds_Call) Return(_a0 []*chatobject.Message, _a1 error) *MockStoreObject_GetMessagesByIds_Call { +func (_c *MockStoreObject_GetMessagesByIds_Call) Return(_a0 []*chatmodel.Message, _a1 error) *MockStoreObject_GetMessagesByIds_Call { _c.Call.Return(_a0, _a1) return _c } -func (_c *MockStoreObject_GetMessagesByIds_Call) RunAndReturn(run func(context.Context, []string) ([]*chatobject.Message, error)) *MockStoreObject_GetMessagesByIds_Call { +func (_c *MockStoreObject_GetMessagesByIds_Call) RunAndReturn(run func(context.Context, []string) ([]*chatmodel.Message, error)) *MockStoreObject_GetMessagesByIds_Call { _c.Call.Return(run) return _c } @@ -1568,7 +1572,7 @@ func (_c *MockStoreObject_Lock_Call) RunAndReturn(run func()) *MockStoreObject_L } // MarkMessagesAsUnread provides a mock function with given fields: ctx, afterOrderId, counterType -func (_m *MockStoreObject) MarkMessagesAsUnread(ctx context.Context, afterOrderId string, counterType chatobject.CounterType) error { +func (_m *MockStoreObject) MarkMessagesAsUnread(ctx context.Context, afterOrderId string, counterType chatmodel.CounterType) error { ret := _m.Called(ctx, afterOrderId, counterType) if len(ret) == 0 { @@ -1576,7 +1580,7 @@ func (_m *MockStoreObject) MarkMessagesAsUnread(ctx context.Context, afterOrderI } var r0 error - if rf, ok := ret.Get(0).(func(context.Context, string, chatobject.CounterType) error); ok { + if rf, ok := ret.Get(0).(func(context.Context, string, chatmodel.CounterType) error); ok { r0 = rf(ctx, afterOrderId, counterType) } else { r0 = ret.Error(0) @@ -1593,14 +1597,14 @@ type MockStoreObject_MarkMessagesAsUnread_Call struct { // MarkMessagesAsUnread is a helper method to define mock.On call // - ctx context.Context // - afterOrderId string -// - counterType chatobject.CounterType +// - counterType chatmodel.CounterType func (_e *MockStoreObject_Expecter) MarkMessagesAsUnread(ctx interface{}, afterOrderId interface{}, counterType interface{}) *MockStoreObject_MarkMessagesAsUnread_Call { return &MockStoreObject_MarkMessagesAsUnread_Call{Call: _e.mock.On("MarkMessagesAsUnread", ctx, afterOrderId, counterType)} } -func (_c *MockStoreObject_MarkMessagesAsUnread_Call) Run(run func(ctx context.Context, afterOrderId string, counterType chatobject.CounterType)) *MockStoreObject_MarkMessagesAsUnread_Call { +func (_c *MockStoreObject_MarkMessagesAsUnread_Call) Run(run func(ctx context.Context, afterOrderId string, counterType chatmodel.CounterType)) *MockStoreObject_MarkMessagesAsUnread_Call { _c.Call.Run(func(args mock.Arguments) { - run(args[0].(context.Context), args[1].(string), args[2].(chatobject.CounterType)) + run(args[0].(context.Context), args[1].(string), args[2].(chatmodel.CounterType)) }) return _c } @@ -1610,13 +1614,13 @@ func (_c *MockStoreObject_MarkMessagesAsUnread_Call) Return(_a0 error) *MockStor return _c } -func (_c *MockStoreObject_MarkMessagesAsUnread_Call) RunAndReturn(run func(context.Context, string, chatobject.CounterType) error) *MockStoreObject_MarkMessagesAsUnread_Call { +func (_c *MockStoreObject_MarkMessagesAsUnread_Call) RunAndReturn(run func(context.Context, string, chatmodel.CounterType) error) *MockStoreObject_MarkMessagesAsUnread_Call { _c.Call.Return(run) return _c } // MarkReadMessages provides a mock function with given fields: ctx, afterOrderId, beforeOrderId, lastStateId, counterType -func (_m *MockStoreObject) MarkReadMessages(ctx context.Context, afterOrderId string, beforeOrderId string, lastStateId string, counterType chatobject.CounterType) error { +func (_m *MockStoreObject) MarkReadMessages(ctx context.Context, afterOrderId string, beforeOrderId string, lastStateId string, counterType chatmodel.CounterType) error { ret := _m.Called(ctx, afterOrderId, beforeOrderId, lastStateId, counterType) if len(ret) == 0 { @@ -1624,7 +1628,7 @@ func (_m *MockStoreObject) MarkReadMessages(ctx context.Context, afterOrderId st } var r0 error - if rf, ok := ret.Get(0).(func(context.Context, string, string, string, chatobject.CounterType) error); ok { + if rf, ok := ret.Get(0).(func(context.Context, string, string, string, chatmodel.CounterType) error); ok { r0 = rf(ctx, afterOrderId, beforeOrderId, lastStateId, counterType) } else { r0 = ret.Error(0) @@ -1643,14 +1647,14 @@ type MockStoreObject_MarkReadMessages_Call struct { // - afterOrderId string // - beforeOrderId string // - lastStateId string -// - counterType chatobject.CounterType +// - counterType chatmodel.CounterType func (_e *MockStoreObject_Expecter) MarkReadMessages(ctx interface{}, afterOrderId interface{}, beforeOrderId interface{}, lastStateId interface{}, counterType interface{}) *MockStoreObject_MarkReadMessages_Call { return &MockStoreObject_MarkReadMessages_Call{Call: _e.mock.On("MarkReadMessages", ctx, afterOrderId, beforeOrderId, lastStateId, counterType)} } -func (_c *MockStoreObject_MarkReadMessages_Call) Run(run func(ctx context.Context, afterOrderId string, beforeOrderId string, lastStateId string, counterType chatobject.CounterType)) *MockStoreObject_MarkReadMessages_Call { +func (_c *MockStoreObject_MarkReadMessages_Call) Run(run func(ctx context.Context, afterOrderId string, beforeOrderId string, lastStateId string, counterType chatmodel.CounterType)) *MockStoreObject_MarkReadMessages_Call { _c.Call.Run(func(args mock.Arguments) { - run(args[0].(context.Context), args[1].(string), args[2].(string), args[3].(string), args[4].(chatobject.CounterType)) + run(args[0].(context.Context), args[1].(string), args[2].(string), args[3].(string), args[4].(chatmodel.CounterType)) }) return _c } @@ -1660,7 +1664,7 @@ func (_c *MockStoreObject_MarkReadMessages_Call) Return(_a0 error) *MockStoreObj return _c } -func (_c *MockStoreObject_MarkReadMessages_Call) RunAndReturn(run func(context.Context, string, string, string, chatobject.CounterType) error) *MockStoreObject_MarkReadMessages_Call { +func (_c *MockStoreObject_MarkReadMessages_Call) RunAndReturn(run func(context.Context, string, string, string, chatmodel.CounterType) error) *MockStoreObject_MarkReadMessages_Call { _c.Call.Return(run) return _c } @@ -2628,65 +2632,6 @@ func (_c *MockStoreObject_SpaceID_Call) RunAndReturn(run func() string) *MockSto return _c } -// SubscribeLastMessages provides a mock function with given fields: ctx, req -func (_m *MockStoreObject) SubscribeLastMessages(ctx context.Context, req chatobject.SubscribeLastMessagesRequest) (*chatobject.SubscribeLastMessagesResponse, error) { - ret := _m.Called(ctx, req) - - if len(ret) == 0 { - panic("no return value specified for SubscribeLastMessages") - } - - var r0 *chatobject.SubscribeLastMessagesResponse - var r1 error - if rf, ok := ret.Get(0).(func(context.Context, chatobject.SubscribeLastMessagesRequest) (*chatobject.SubscribeLastMessagesResponse, error)); ok { - return rf(ctx, req) - } - if rf, ok := ret.Get(0).(func(context.Context, chatobject.SubscribeLastMessagesRequest) *chatobject.SubscribeLastMessagesResponse); ok { - r0 = rf(ctx, req) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*chatobject.SubscribeLastMessagesResponse) - } - } - - if rf, ok := ret.Get(1).(func(context.Context, chatobject.SubscribeLastMessagesRequest) error); ok { - r1 = rf(ctx, req) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// MockStoreObject_SubscribeLastMessages_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SubscribeLastMessages' -type MockStoreObject_SubscribeLastMessages_Call struct { - *mock.Call -} - -// SubscribeLastMessages is a helper method to define mock.On call -// - ctx context.Context -// - req chatobject.SubscribeLastMessagesRequest -func (_e *MockStoreObject_Expecter) SubscribeLastMessages(ctx interface{}, req interface{}) *MockStoreObject_SubscribeLastMessages_Call { - return &MockStoreObject_SubscribeLastMessages_Call{Call: _e.mock.On("SubscribeLastMessages", ctx, req)} -} - -func (_c *MockStoreObject_SubscribeLastMessages_Call) Run(run func(ctx context.Context, req chatobject.SubscribeLastMessagesRequest)) *MockStoreObject_SubscribeLastMessages_Call { - _c.Call.Run(func(args mock.Arguments) { - run(args[0].(context.Context), args[1].(chatobject.SubscribeLastMessagesRequest)) - }) - return _c -} - -func (_c *MockStoreObject_SubscribeLastMessages_Call) Return(_a0 *chatobject.SubscribeLastMessagesResponse, _a1 error) *MockStoreObject_SubscribeLastMessages_Call { - _c.Call.Return(_a0, _a1) - return _c -} - -func (_c *MockStoreObject_SubscribeLastMessages_Call) RunAndReturn(run func(context.Context, chatobject.SubscribeLastMessagesRequest) (*chatobject.SubscribeLastMessagesResponse, error)) *MockStoreObject_SubscribeLastMessages_Call { - _c.Call.Return(run) - return _c -} - // ToggleMessageReaction provides a mock function with given fields: ctx, messageId, emoji func (_m *MockStoreObject) ToggleMessageReaction(ctx context.Context, messageId string, emoji string) error { ret := _m.Called(ctx, messageId, emoji) @@ -3007,52 +2952,6 @@ func (_c *MockStoreObject_Unlock_Call) RunAndReturn(run func()) *MockStoreObject return _c } -// Unsubscribe provides a mock function with given fields: subId -func (_m *MockStoreObject) Unsubscribe(subId string) error { - ret := _m.Called(subId) - - if len(ret) == 0 { - panic("no return value specified for Unsubscribe") - } - - var r0 error - if rf, ok := ret.Get(0).(func(string) error); ok { - r0 = rf(subId) - } else { - r0 = ret.Error(0) - } - - return r0 -} - -// MockStoreObject_Unsubscribe_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Unsubscribe' -type MockStoreObject_Unsubscribe_Call struct { - *mock.Call -} - -// Unsubscribe is a helper method to define mock.On call -// - subId string -func (_e *MockStoreObject_Expecter) Unsubscribe(subId interface{}) *MockStoreObject_Unsubscribe_Call { - return &MockStoreObject_Unsubscribe_Call{Call: _e.mock.On("Unsubscribe", subId)} -} - -func (_c *MockStoreObject_Unsubscribe_Call) Run(run func(subId string)) *MockStoreObject_Unsubscribe_Call { - _c.Call.Run(func(args mock.Arguments) { - run(args[0].(string)) - }) - return _c -} - -func (_c *MockStoreObject_Unsubscribe_Call) Return(_a0 error) *MockStoreObject_Unsubscribe_Call { - _c.Call.Return(_a0) - return _c -} - -func (_c *MockStoreObject_Unsubscribe_Call) RunAndReturn(run func(string) error) *MockStoreObject_Unsubscribe_Call { - _c.Call.Return(run) - return _c -} - // NewMockStoreObject creates a new instance of MockStoreObject. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. // The first argument is typically a *testing.T value. func NewMockStoreObject(t interface { diff --git a/core/block/editor/chatobject/reading_test.go b/core/block/editor/chatobject/reading_test.go index 859c897bf..2278dc186 100644 --- a/core/block/editor/chatobject/reading_test.go +++ b/core/block/editor/chatobject/reading_test.go @@ -8,6 +8,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "github.com/anyproto/anytype-heart/core/block/chats/chatmodel" + "github.com/anyproto/anytype-heart/core/block/chats/chatrepository" "github.com/anyproto/anytype-heart/core/block/editor/storestate" "github.com/anyproto/anytype-heart/pkg/lib/pb/model" ) @@ -25,7 +27,7 @@ func TestReadMessages(t *testing.T) { // All messages forced as not read messagesResp := fx.assertReadStatus(t, ctx, "", "", false, false) - err := fx.MarkReadMessages(ctx, "", messagesResp.Messages[2].OrderId, messagesResp.ChatState.LastStateId, CounterTypeMessage) + err := fx.MarkReadMessages(ctx, "", messagesResp.Messages[2].OrderId, messagesResp.ChatState.LastStateId, chatmodel.CounterTypeMessage) require.NoError(t, err) fx.assertReadStatus(t, ctx, "", messagesResp.Messages[2].OrderId, true, false) @@ -56,14 +58,14 @@ func TestReadMessagesLoadedInBackground(t *testing.T) { secondMessage, err := fx.GetMessageById(ctx, secondMessageId) require.NoError(t, err) - err = fx.MarkReadMessages(ctx, "", firstMessage.OrderId, firstMessage.StateId, CounterTypeMessage) + err = fx.MarkReadMessages(ctx, "", firstMessage.OrderId, firstMessage.StateId, chatmodel.CounterTypeMessage) require.NoError(t, err) - gotResponse, err := fx.GetMessages(ctx, GetMessagesRequest{}) + gotResponse, err := fx.GetMessages(ctx, chatrepository.GetMessagesRequest{}) require.NoError(t, err) firstMessage.Read = true - wantMessages := []*Message{ + wantMessages := []*chatmodel.Message{ secondMessage, firstMessage, } @@ -95,7 +97,7 @@ func TestReadMentions(t *testing.T) { // All messages forced as not read messagesResp := fx.assertReadStatus(t, ctx, "", "", false, false) - err := fx.MarkReadMessages(ctx, "", messagesResp.Messages[2].OrderId, messagesResp.ChatState.LastStateId, CounterTypeMention) + err := fx.MarkReadMessages(ctx, "", messagesResp.Messages[2].OrderId, messagesResp.ChatState.LastStateId, chatmodel.CounterTypeMention) require.NoError(t, err) fx.assertReadStatus(t, ctx, "", messagesResp.Messages[2].OrderId, false, true) @@ -122,7 +124,7 @@ func TestReadMentions(t *testing.T) { // All messages forced as not read messagesResp := fx.assertReadStatus(t, ctx, "", "", false, false) - err = fx.MarkReadMessages(ctx, "", secondMessage.OrderId, messagesResp.ChatState.LastStateId, CounterTypeMention) + err = fx.MarkReadMessages(ctx, "", secondMessage.OrderId, messagesResp.ChatState.LastStateId, chatmodel.CounterTypeMention) require.NoError(t, err) fx.assertReadStatus(t, ctx, secondMessage.OrderId, secondMessage.OrderId, false, true) @@ -141,7 +143,7 @@ func TestMarkMessagesAsNotRead(t *testing.T) { // All messages added by myself are read fx.assertReadStatus(t, ctx, "", "", true, true) - err := fx.MarkMessagesAsUnread(ctx, "", CounterTypeMessage) + err := fx.MarkMessagesAsUnread(ctx, "", chatmodel.CounterTypeMessage) require.NoError(t, err) fx.assertReadStatus(t, ctx, "", "", false, true) @@ -159,7 +161,7 @@ func TestMarkMentionsAsNotRead(t *testing.T) { // All messages added by myself are read fx.assertReadStatus(t, ctx, "", "", true, true) - err := fx.MarkMessagesAsUnread(ctx, "", CounterTypeMention) + err := fx.MarkMessagesAsUnread(ctx, "", chatmodel.CounterTypeMention) require.NoError(t, err) fx.assertReadStatus(t, ctx, "", "", true, false) diff --git a/core/block/editor/chatobject/subscription_test.go b/core/block/editor/chatobject/subscription_test.go index 40ab1829f..7861e6e86 100644 --- a/core/block/editor/chatobject/subscription_test.go +++ b/core/block/editor/chatobject/subscription_test.go @@ -9,6 +9,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "github.com/anyproto/anytype-heart/core/block/chats/chatmodel" + "github.com/anyproto/anytype-heart/core/block/chats/chatsubscription" "github.com/anyproto/anytype-heart/core/domain" "github.com/anyproto/anytype-heart/pb" "github.com/anyproto/anytype-heart/pkg/lib/bundle" @@ -27,7 +29,9 @@ func TestSubscription(t *testing.T) { assert.NotEmpty(t, messageId) } - resp, err := fx.SubscribeLastMessages(ctx, SubscribeLastMessagesRequest{SubId: "subId", Limit: 5, AsyncInit: false}) + resp, err := fx.chatSubscriptionService.SubscribeLastMessages(ctx, chatsubscription.SubscribeLastMessagesRequest{ + ChatObjectId: fx.Id(), SubId: "subId", Limit: 5, AsyncInit: false, + }) require.NoError(t, err) wantTexts := []string{"text 6", "text 7", "text 8", "text 9", "text 10"} for i, msg := range resp.Messages { @@ -181,7 +185,9 @@ func TestSubscriptionMessageCounters(t *testing.T) { fx := newFixture(t) fx.chatHandler.forceNotRead = true - subscribeResp, err := fx.SubscribeLastMessages(ctx, SubscribeLastMessagesRequest{SubId: "subId", Limit: 10, AsyncInit: false}) + subscribeResp, err := fx.chatSubscriptionService.SubscribeLastMessages(ctx, chatsubscription.SubscribeLastMessagesRequest{ + ChatObjectId: fx.Id(), SubId: "subId", Limit: 10, AsyncInit: false, + }) require.NoError(t, err) assert.Empty(t, subscribeResp.Messages) @@ -275,7 +281,7 @@ func TestSubscriptionMessageCounters(t *testing.T) { fx.events = nil - err = fx.MarkReadMessages(ctx, "", firstMessage.OrderId, secondMessage.StateId, CounterTypeMessage) + err = fx.MarkReadMessages(ctx, "", firstMessage.OrderId, secondMessage.StateId, chatmodel.CounterTypeMessage) require.NoError(t, err) wantEvents = []*pb.EventMessage{ @@ -315,7 +321,12 @@ func TestSubscriptionMentionCounters(t *testing.T) { fx := newFixture(t) fx.chatHandler.forceNotRead = true - subscribeResp, err := fx.SubscribeLastMessages(ctx, SubscribeLastMessagesRequest{SubId: "subId", Limit: 10, AsyncInit: false}) + subscribeResp, err := fx.chatSubscriptionService.SubscribeLastMessages(ctx, chatsubscription.SubscribeLastMessagesRequest{ + ChatObjectId: fx.Id(), + SubId: "subId", + Limit: 10, + AsyncInit: false, + }) require.NoError(t, err) assert.Empty(t, subscribeResp.Messages) @@ -415,7 +426,7 @@ func TestSubscriptionMentionCounters(t *testing.T) { fx.events = nil - err = fx.MarkReadMessages(ctx, "", firstMessage.OrderId, secondMessage.StateId, CounterTypeMention) + err = fx.MarkReadMessages(ctx, "", firstMessage.OrderId, secondMessage.StateId, chatmodel.CounterTypeMention) require.NoError(t, err) wantEvents = []*pb.EventMessage{ @@ -457,7 +468,13 @@ func TestSubscriptionWithDeps(t *testing.T) { ctx := context.Background() fx := newFixture(t) - _, err := fx.SubscribeLastMessages(ctx, SubscribeLastMessagesRequest{SubId: "subId", Limit: 10, AsyncInit: false, WithDependencies: true}) + _, err := fx.chatSubscriptionService.SubscribeLastMessages(ctx, chatsubscription.SubscribeLastMessagesRequest{ + ChatObjectId: fx.Id(), + SubId: "subId", + Limit: 10, + AsyncInit: false, + WithDependencies: true, + }) require.NoError(t, err) myParticipantId := domain.NewParticipantId(testSpaceId, testCreator) From 2a52231bfae3b5f76ecb89b6ee123e843e97998d Mon Sep 17 00:00:00 2001 From: Roman Khafizianov Date: Thu, 15 May 2025 17:28:14 +0200 Subject: [PATCH 052/164] GO-5635 fix deviceState --- core/application/application.go | 6 +----- core/domain/app.go | 6 +++++- pkg/lib/gateway/gateway.go | 7 +++---- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/core/application/application.go b/core/application/application.go index 45decec1a..69e82289b 100644 --- a/core/application/application.go +++ b/core/application/application.go @@ -71,11 +71,7 @@ func (s *Service) stop() error { defer task.End() if s != nil && s.app != nil { - s.app.IterateComponents(func(c app.Component) { - if c, ok := c.(app.ComponentStatable); ok { - c.StateChange(int(domain.CompStateAppClosingInitiated)) - } - }) + s.app.SetDeviceState(int(domain.CompStateAppClosingInitiated)) err := s.app.Close(ctx) if err != nil { log.Warnf("error while stop anytype: %v", err) diff --git a/core/domain/app.go b/core/domain/app.go index 541e8a11f..676e46875 100644 --- a/core/domain/app.go +++ b/core/domain/app.go @@ -1,7 +1,11 @@ package domain +import "github.com/anyproto/anytype-heart/pb" + type CompState int const ( - CompStateAppClosingInitiated CompState = 1 + CompStateAppWentBackground CompState = CompState(pb.RpcAppSetDeviceStateRequest_BACKGROUND) // 0 + CompStateAppWentForeground CompState = CompState(pb.RpcAppSetDeviceStateRequest_FOREGROUND) // 1 + CompStateAppClosingInitiated CompState = 2 // triggered by app ) diff --git a/pkg/lib/gateway/gateway.go b/pkg/lib/gateway/gateway.go index b1ba13762..daf47cc35 100644 --- a/pkg/lib/gateway/gateway.go +++ b/pkg/lib/gateway/gateway.go @@ -21,7 +21,6 @@ import ( "github.com/anyproto/anytype-heart/core/domain" "github.com/anyproto/anytype-heart/core/files" "github.com/anyproto/anytype-heart/core/files/fileobject" - "github.com/anyproto/anytype-heart/pb" "github.com/anyproto/anytype-heart/pkg/lib/logging" "github.com/anyproto/anytype-heart/util/constant" "github.com/anyproto/anytype-heart/util/svg" @@ -130,10 +129,10 @@ func (g *gateway) Addr() string { } func (g *gateway) StateChange(state int) { - switch pb.RpcAppSetDeviceStateRequestDeviceState(state) { - case pb.RpcAppSetDeviceStateRequest_FOREGROUND: + switch domain.CompState(state) { + case domain.CompStateAppWentForeground: g.startServer() - case pb.RpcAppSetDeviceStateRequest_BACKGROUND: + case domain.CompStateAppWentBackground, domain.CompStateAppClosingInitiated: if err := g.stopServer(); err != nil { log.Errorf("err gateway close: %+v", err) } From d8919e4745c33ef7ce1676cf46bd7a0862dd4d72 Mon Sep 17 00:00:00 2001 From: Roman Khafizianov Date: Thu, 15 May 2025 17:52:42 +0200 Subject: [PATCH 053/164] GO-5635 add log --- core/application/application.go | 1 + 1 file changed, 1 insertion(+) diff --git a/core/application/application.go b/core/application/application.go index 69e82289b..96aa7572e 100644 --- a/core/application/application.go +++ b/core/application/application.go @@ -71,6 +71,7 @@ func (s *Service) stop() error { defer task.End() if s != nil && s.app != nil { + log.Warnf("stopping app") s.app.SetDeviceState(int(domain.CompStateAppClosingInitiated)) err := s.app.Close(ctx) if err != nil { From a509e5319e3fd2ca6a8d6d953da851899fbfd35e Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Thu, 15 May 2025 23:58:03 +0200 Subject: [PATCH 054/164] GO-5589: Improve endpoint and parameter descriptions --- core/api/docs/docs.go | 6 ++--- core/api/docs/openapi.json | 18 ++++++------- core/api/docs/openapi.yaml | 55 +++++++++++++++++++------------------- core/api/handler/auth.go | 6 ++--- core/api/handler/search.go | 4 +-- core/api/model/search.go | 6 ++--- core/api/service.go | 2 +- 7 files changed, 48 insertions(+), 49 deletions(-) diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go index 56a69f362..d180ff660 100644 --- a/core/api/docs/docs.go +++ b/core/api/docs/docs.go @@ -6,10 +6,10 @@ import "github.com/swaggo/swag/v2" const docTemplate = `{ "schemes": {{ marshal .Schemes }}, - "components": {"schemas":{"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"creator","type":"string"},"objects":{"description":"The object values of the property","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to search for, specified by key or ID","example":["page","678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"status","type":"string"},"select":{"description":"The selected tag value of the property","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TokenResponse":{"properties":{"app_key":{"description":"The app key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, + "components": {"schemas":{"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"creator","type":"string"},"objects":{"description":"The object values of the property","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to search for, specified by their key","example":["page","task","bookmark"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"status","type":"string"},"select":{"description":"The selected tag value of the property","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TokenResponse":{"properties":{"app_key":{"description":"The app key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, "info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-api/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"}, "externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"}, - "paths": {"/v1/auth/display_code":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid ` + "`" + `app_name` + "`" + `, the server issues a unique ` + "`" + `challenge_id` + "`" + ` and displays a short code within the Anytype Desktop On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"create_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.DisplayCodeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["Auth"]}},"/v1/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent app key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.","operationId":"solve_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TokenResponse"}}},"description":"The app key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Solve challenge","tags":["Auth"]}},"/v1/search":{"post":{"description":"Executes a global search over every space accessible by the authenticated user. The request body must specify the ` + "`" + `query` + "`" + ` text, optional filters on object types (e.g., \"page\", \"task\"), and sort directives (default: descending by last updated timestamp). Pagination is controlled via ` + "`" + `offset` + "`" + ` and ` + "`" + `limit` + "`" + ` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"search_global","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/v1/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"list_spaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"create_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/v1/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"get_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"update_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"add_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"The list of object IDs to add to the list","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"remove_list_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"get_list_views","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"get_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/v1/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"list_members","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/v1/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"get_member","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/v1/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"create_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/v1/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"get_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"update_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/v1/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"list_properties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"create_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"get_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"update_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"list_tags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"create_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"get_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"update_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/v1/spaces/{space_id}/search":{"post":{"description":"Performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"search_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/v1/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"list_types","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new object type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"create_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an object type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"get_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing object type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"update_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"list_templates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to retrieve templates for","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/v1/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"get_template","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to which the template belongs","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, + "paths": {"/v1/auth/display_code":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid ` + "`" + `app_name` + "`" + `, the server issues a unique ` + "`" + `challenge_id` + "`" + ` and displays a short code within the Anytype Desktop. The ` + "`" + `challenge_id` + "`" + ` must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"create_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.DisplayCodeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start challenge","tags":["Auth"]}},"/v1/auth/token":{"post":{"description":"After receiving a ` + "`" + `challenge_id` + "`" + ` from the ` + "`" + `display_code` + "`" + ` endpoint, the client calls this endpoint to provide the corresponding 4-digit code along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent ` + "`" + `app_key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.","operationId":"solve_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TokenResponse"}}},"description":"The app key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Solve challenge","tags":["Auth"]}},"/v1/search":{"post":{"description":"Executes a global search over all spaces accessible to the authenticated user. The request body must specify the ` + "`" + `query` + "`" + ` text (currently matching only name and snippet of an object), optional filters on types (e.g., \"page\", \"task\"), and sort directives (default: descending by last modified date). Pagination is controlled via ` + "`" + `offset` + "`" + ` and ` + "`" + `limit` + "`" + ` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"search_global","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/v1/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"list_spaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"create_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/v1/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"get_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"update_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"add_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"The list of object IDs to add to the list","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"remove_list_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"get_list_views","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"get_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/v1/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"list_members","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/v1/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"get_member","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/v1/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"create_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/v1/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"get_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"update_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/v1/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"list_properties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"create_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"get_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"update_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"list_tags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"create_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"get_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"update_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/v1/spaces/{space_id}/search":{"post":{"description":"Performs a search within a single space (specified by the ` + "`" + `space_id` + "`" + ` path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search ` + "`" + `query` + "`" + `, ` + "`" + `types` + "`" + `, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"search_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/v1/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"list_types","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new object type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"create_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an object type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"get_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing object type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"update_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"list_templates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to retrieve templates for","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/v1/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"get_template","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to which the template belongs","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, "openapi": "3.1.0", "servers": [ {"url":"http://localhost:31009"} @@ -20,7 +20,7 @@ const docTemplate = `{ var SwaggerInfo = &swag.Spec{ Version: "2025-05-20", Title: "Anytype API", - Description: "This API empowers seamless interaction with Anytype's resources—spaces, objects, properties, types, templates, and beyond.", + Description: "This API enables seamless interaction with Anytype's resources - spaces, objects, properties, types, templates, and beyond.", InfoInstanceName: "swagger", SwaggerTemplate: docTemplate, LeftDelim: "{{", diff --git a/core/api/docs/openapi.json b/core/api/docs/openapi.json index 41bc0e8cb..0e0b9de18 100644 --- a/core/api/docs/openapi.json +++ b/core/api/docs/openapi.json @@ -1098,11 +1098,11 @@ "$ref": "#/components/schemas/apimodel.SortOptions" }, "types": { - "description": "The types of objects to search for, specified by key or ID", + "description": "The types of objects to search for, specified by their key", "example": [ "page", - "678043f0cda9133be777049f", - "bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q" + "task", + "bookmark" ], "items": { "type": "string" @@ -1952,7 +1952,7 @@ "name": "Anytype Support", "url": "https://anytype.io/contact" }, - "description": "This API empowers seamless interaction with Anytype's resources—spaces, objects, properties, types, templates, and beyond.", + "description": "This API enables seamless interaction with Anytype's resources - spaces, objects, properties, types, templates, and beyond.", "license": { "name": "Any Source Available License 1.0", "url": "https://github.com/anyproto/anytype-api/blob/main/LICENSE.md" @@ -1968,7 +1968,7 @@ "paths": { "/v1/auth/display_code": { "post": { - "description": "Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid `app_name`, the server issues a unique `challenge_id` and displays a short code within the Anytype Desktop On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.", + "description": "Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid `app_name`, the server issues a unique `challenge_id` and displays a short code within the Anytype Desktop. The `challenge_id` must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.", "operationId": "create_auth_challenge", "parameters": [ { @@ -2032,7 +2032,7 @@ "description": "Internal server error" } }, - "summary": "Start new challenge", + "summary": "Start challenge", "tags": [ "Auth" ] @@ -2040,7 +2040,7 @@ }, "/v1/auth/token": { "post": { - "description": "After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent app key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.", + "description": "After receiving a `challenge_id` from the `display_code` endpoint, the client calls this endpoint to provide the corresponding 4-digit code along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent `app_key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.", "operationId": "solve_auth_challenge", "parameters": [ { @@ -2121,7 +2121,7 @@ }, "/v1/search": { "post": { - "description": "Executes a global search over every space accessible by the authenticated user. The request body must specify the `query` text, optional filters on object types (e.g., \"page\", \"task\"), and sort directives (default: descending by last updated timestamp). Pagination is controlled via `offset` and `limit` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.", + "description": "Executes a global search over all spaces accessible to the authenticated user. The request body must specify the `query` text (currently matching only name and snippet of an object), optional filters on types (e.g., \"page\", \"task\"), and sort directives (default: descending by last modified date). Pagination is controlled via `offset` and `limit` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.", "operationId": "search_global", "parameters": [ { @@ -4833,7 +4833,7 @@ }, "/v1/spaces/{space_id}/search": { "post": { - "description": "Performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.", + "description": "Performs a search within a single space (specified by the `space_id` path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search `query`, `types`, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.", "operationId": "search_space", "parameters": [ { diff --git a/core/api/docs/openapi.yaml b/core/api/docs/openapi.yaml index c70cd1337..564b9fc9c 100644 --- a/core/api/docs/openapi.yaml +++ b/core/api/docs/openapi.yaml @@ -801,11 +801,11 @@ components: sort: $ref: '#/components/schemas/apimodel.SortOptions' types: - description: The types of objects to search for, specified by key or ID + description: The types of objects to search for, specified by their key example: - page - - 678043f0cda9133be777049f - - bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q + - task + - bookmark items: type: string type: array @@ -1431,7 +1431,7 @@ info: email: support@anytype.io name: Anytype Support url: https://anytype.io/contact - description: This API empowers seamless interaction with Anytype's resources—spaces, + description: This API enables seamless interaction with Anytype's resources - spaces, objects, properties, types, templates, and beyond. license: name: Any Source Available License 1.0 @@ -1446,10 +1446,9 @@ paths: description: Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid `app_name`, the server issues a unique `challenge_id` and displays a short code within the Anytype - Desktop On success, the service returns a unique challenge ID. This challenge - ID must then be used with the token endpoint (see below) to solve the challenge - and retrieve an authentication token. This mechanism ensures that only trusted - applications and authorized users gain access. + Desktop. The `challenge_id` must then be used with the token endpoint (see + below) to solve the challenge and retrieve an authentication token. This mechanism + ensures that only trusted applications and authorized users gain access. operationId: create_auth_challenge parameters: - description: The version of the API to use @@ -1489,18 +1488,17 @@ paths: schema: $ref: '#/components/schemas/util.ServerError' description: Internal server error - summary: Start new challenge + summary: Start challenge tags: - Auth /v1/auth/token: post: - description: After receiving a challenge ID from the display_code endpoint, - the client calls this endpoint to provide the corresponding 4-digit code (also - via a query parameter) along with the challenge ID. The endpoint verifies - that the challenge solution is correct and, if it is, returns a permanent - app key. This endpoint is central to the authentication process, as it validates - the user's identity and issues a token that can be used for further interactions - with the API. + description: After receiving a `challenge_id` from the `display_code` endpoint, + the client calls this endpoint to provide the corresponding 4-digit code along + with the challenge ID. The endpoint verifies that the challenge solution is + correct and, if it is, returns a permanent `app_key. This endpoint is central + to the authentication process, as it validates the user's identity and issues + a token that can be used for further interactions with the API. operationId: solve_auth_challenge parameters: - description: The version of the API to use @@ -1552,12 +1550,13 @@ paths: - Auth /v1/search: post: - description: 'Executes a global search over every space accessible by the authenticated - user. The request body must specify the `query` text, optional filters on - object types (e.g., "page", "task"), and sort directives (default: descending - by last updated timestamp). Pagination is controlled via `offset` and `limit` - query parameters to facilitate lazy loading in client UIs. The response returns - a unified list of matched objects with their metadata and properties.' + description: 'Executes a global search over all spaces accessible to the authenticated + user. The request body must specify the `query` text (currently matching only + name and snippet of an object), optional filters on types (e.g., "page", "task"), + and sort directives (default: descending by last modified date). Pagination + is controlled via `offset` and `limit` query parameters to facilitate lazy + loading in client UIs. The response returns a unified list of matched objects + with their metadata and properties.' operationId: search_global parameters: - description: The version of the API to use @@ -3359,12 +3358,12 @@ paths: - Tags /v1/spaces/{space_id}/search: post: - description: Performs a focused search within a single space (specified by the - space_id path parameter). Like the global search, it accepts pagination parameters - and a JSON payload containing the search query, object types, and sorting - preferences. The search is limited to the provided space and returns a list - of objects that match the query. This allows clients to implement space‑specific - filtering without having to process extraneous results. + description: Performs a search within a single space (specified by the `space_id` + path parameter). Like the global search, it accepts pagination parameters + and a JSON payload containing the search `query`, `types`, and sorting preferences. + The search is limited to the provided space and returns a list of objects + that match the query. This allows clients to implement space‑specific filtering + without having to process extraneous results. operationId: search_space parameters: - description: The version of the API to use diff --git a/core/api/handler/auth.go b/core/api/handler/auth.go index 64ada57ad..b69b496a1 100644 --- a/core/api/handler/auth.go +++ b/core/api/handler/auth.go @@ -12,8 +12,8 @@ import ( // DisplayCodeHandler starts a new challenge and returns the challenge ID // -// @Summary Start new challenge -// @Description Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid `app_name`, the server issues a unique `challenge_id` and displays a short code within the Anytype Desktop On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access. +// @Summary Start challenge +// @Description Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid `app_name`, the server issues a unique `challenge_id` and displays a short code within the Anytype Desktop. The `challenge_id` must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access. // @ID create_auth_challenge // @Tags Auth // @Accept json @@ -46,7 +46,7 @@ func DisplayCodeHandler(s *service.Service) gin.HandlerFunc { // TokenHandler retrieves an authentication token using a code and challenge ID // // @Summary Solve challenge -// @Description After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent app key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API. +// @Description After receiving a `challenge_id` from the `display_code` endpoint, the client calls this endpoint to provide the corresponding 4-digit code along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent `app_key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API. // @ID solve_auth_challenge // @Tags Auth // @Accept json diff --git a/core/api/handler/search.go b/core/api/handler/search.go index b9ae786cc..be7639d23 100644 --- a/core/api/handler/search.go +++ b/core/api/handler/search.go @@ -14,7 +14,7 @@ import ( // GlobalSearchHandler searches and retrieves objects across all spaces // // @Summary Search objects across all spaces -// @Description Executes a global search over every space accessible by the authenticated user. The request body must specify the `query` text, optional filters on object types (e.g., "page", "task"), and sort directives (default: descending by last updated timestamp). Pagination is controlled via `offset` and `limit` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties. +// @Description Executes a global search over all spaces accessible to the authenticated user. The request body must specify the `query` text (currently matching only name and snippet of an object), optional filters on types (e.g., "page", "task"), and sort directives (default: descending by last modified date). Pagination is controlled via `offset` and `limit` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties. // @Id search_global // @Tags Search // @Accept json @@ -58,7 +58,7 @@ func GlobalSearchHandler(s *service.Service) gin.HandlerFunc { // SearchHandler searches and retrieves objects within a space // // @Summary Search objects within a space -// @Description Performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results. +// @Description Performs a search within a single space (specified by the `space_id` path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search `query`, `types`, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results. // @Id search_space // @Tags Search // @Accept json diff --git a/core/api/model/search.go b/core/api/model/search.go index d55d36908..0a304cda5 100644 --- a/core/api/model/search.go +++ b/core/api/model/search.go @@ -52,9 +52,9 @@ func (sp *SortProperty) UnmarshalJSON(data []byte) error { } type SearchRequest struct { - Query string `json:"query" example:"test"` // The search term to look for in object names and snippets - Types []string `json:"types" example:"page,678043f0cda9133be777049f,bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"` // The types of objects to search for, specified by key or ID - Sort SortOptions `json:"sort"` // The sorting criteria and direction for the search results + Query string `json:"query" example:"test"` // The search term to look for in object names and snippets + Types []string `json:"types" example:"page,task,bookmark"` // The types of objects to search for, specified by their key + Sort SortOptions `json:"sort"` // The sorting criteria and direction for the search results } type SortOptions struct { diff --git a/core/api/service.go b/core/api/service.go index be4852654..de9fa1a9f 100644 --- a/core/api/service.go +++ b/core/api/service.go @@ -51,7 +51,7 @@ func (s *apiService) Name() (name string) { // // @title Anytype API // @version 2025-05-20 -// @description This API empowers seamless interaction with Anytype's resources—spaces, objects, properties, types, templates, and beyond. +// @description This API enables seamless interaction with Anytype's resources - spaces, objects, properties, types, templates, and beyond. // @termsOfService https://anytype.io/terms_of_use // @contact.name Anytype Support // @contact.url https://anytype.io/contact From 2e09997d39e5f7aca7969148bc4c869265216fe2 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Fri, 16 May 2025 00:55:30 +0200 Subject: [PATCH 055/164] GO-5589: Refactor type filters based on keys for search endpoints --- core/api/service/list.go | 8 +-- core/api/service/list_test.go | 8 +-- core/api/service/object.go | 24 +++---- core/api/service/object_test.go | 14 ++--- core/api/service/property.go | 31 ++++----- core/api/service/search.go | 100 +++++++++++++++++------------- core/api/service/search_test.go | 8 +-- core/api/service/tag.go | 27 ++++---- core/api/service/template.go | 16 ++--- core/api/service/template_test.go | 4 +- core/api/service/type.go | 38 +++++++----- core/api/service/type_test.go | 6 +- core/api/util/util.go | 27 -------- 13 files changed, 153 insertions(+), 158 deletions(-) diff --git a/core/api/service/list.go b/core/api/service/list.go index 9463a0ec4..ff74ad376 100644 --- a/core/api/service/list.go +++ b/core/api/service/list.go @@ -197,21 +197,21 @@ func (s *Service) GetObjectsInList(ctx context.Context, spaceId string, listId s total := int(searchResp.Counters.Total) hasMore := searchResp.Counters.Total > int64(offset+limit) - propertyMap, err := s.GetPropertyMapFromStore(spaceId, true) + propertyMap, err := s.getPropertyMapFromStore(spaceId, true) if err != nil { return nil, 0, false, err } - typeMap, err := s.GetTypeMapFromStore(spaceId, propertyMap) + typeMap, err := s.getTypeMapFromStore(spaceId, propertyMap, false) if err != nil { return nil, 0, false, err } - tagMap, err := s.GetTagMapFromStore(spaceId) + tagMap, err := s.getTagMapFromStore(spaceId) if err != nil { return nil, 0, false, err } objects := make([]apimodel.Object, 0, len(searchResp.Records)) for _, record := range searchResp.Records { - objects = append(objects, s.GetObjectFromStruct(record, propertyMap, typeMap, tagMap)) + objects = append(objects, s.getObjectFromStruct(record, propertyMap, typeMap, tagMap)) } return objects, total, hasMore, nil diff --git a/core/api/service/list_test.go b/core/api/service/list_test.go index f441dbaac..774e13f06 100644 --- a/core/api/service/list_test.go +++ b/core/api/service/list_test.go @@ -443,7 +443,7 @@ func TestListService_GetObjectsInList(t *testing.T) { }, }, nil).Once() - // Mock GetTypeMapFromStore + // Mock getTypeMapFromStore fx.mwMock. On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{ SpaceId: mockedSpaceId, @@ -489,7 +489,7 @@ func TestListService_GetObjectsInList(t *testing.T) { }, }, nil).Once() - // Mock GetTagMapFromStore + // Mock getTagMapFromStore fx.mwMock. On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{ SpaceId: mockedSpaceId, @@ -688,7 +688,7 @@ func TestListService_GetObjectsInList(t *testing.T) { }, }, nil).Once() - // Mock GetTypeMapFromStore + // Mock getTypeMapFromStore fx.mwMock. On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{ SpaceId: mockedSpaceId, @@ -734,7 +734,7 @@ func TestListService_GetObjectsInList(t *testing.T) { }, }, nil).Once() - // Mock GetTagMapFromStore + // Mock getTagMapFromStore fx.mwMock. On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{ SpaceId: mockedSpaceId, diff --git a/core/api/service/object.go b/core/api/service/object.go index 07e450e07..e4fcaace8 100644 --- a/core/api/service/object.go +++ b/core/api/service/object.go @@ -71,21 +71,21 @@ func (s *Service) ListObjects(ctx context.Context, spaceId string, offset int, l objects = make([]apimodel.Object, 0, len(paginatedObjects)) // pre-fetch properties, types and tags to fill the objects - propertyMap, err := s.GetPropertyMapFromStore(spaceId, true) + propertyMap, err := s.getPropertyMapFromStore(spaceId, true) if err != nil { return nil, 0, false, err } - typeMap, err := s.GetTypeMapFromStore(spaceId, propertyMap) + typeMap, err := s.getTypeMapFromStore(spaceId, propertyMap, false) if err != nil { return nil, 0, false, err } - tagMap, err := s.GetTagMapFromStore(spaceId) + tagMap, err := s.getTagMapFromStore(spaceId) if err != nil { return nil, 0, false, err } for _, record := range paginatedObjects { - objects = append(objects, s.GetObjectFromStruct(record, propertyMap, typeMap, tagMap)) + objects = append(objects, s.getObjectFromStruct(record, propertyMap, typeMap, tagMap)) } return objects, total, hasMore, nil } @@ -111,15 +111,15 @@ func (s *Service) GetObject(ctx context.Context, spaceId string, objectId string } } - propertyMap, err := s.GetPropertyMapFromStore(spaceId, true) + propertyMap, err := s.getPropertyMapFromStore(spaceId, true) if err != nil { return apimodel.ObjectWithBody{}, err } - typeMap, err := s.GetTypeMapFromStore(spaceId, propertyMap) + typeMap, err := s.getTypeMapFromStore(spaceId, propertyMap, false) if err != nil { return apimodel.ObjectWithBody{}, err } - tagMap, err := s.GetTagMapFromStore(spaceId) + tagMap, err := s.getTagMapFromStore(spaceId) if err != nil { return apimodel.ObjectWithBody{}, err } @@ -129,7 +129,7 @@ func (s *Service) GetObject(ctx context.Context, spaceId string, objectId string return apimodel.ObjectWithBody{}, err } - return s.GetObjectWithBlocksFromStruct(resp.ObjectView.Details[0].Details, markdown, propertyMap, typeMap, tagMap), nil + return s.getObjectWithBlocksFromStruct(resp.ObjectView.Details[0].Details, markdown, propertyMap, typeMap, tagMap), nil } // CreateObject creates a new object in a specific space. @@ -401,8 +401,8 @@ func (s *Service) processIconFields(ctx context.Context, spaceId string, icon ap // return b // } -// GetObjectFromStruct creates an Object without blocks from the details. -func (s *Service) GetObjectFromStruct(details *types.Struct, propertyMap map[string]apimodel.Property, typeMap map[string]apimodel.Type, tagMap map[string]apimodel.Tag) apimodel.Object { +// getObjectFromStruct creates an Object without blocks from the details. +func (s *Service) getObjectFromStruct(details *types.Struct, propertyMap map[string]apimodel.Property, typeMap map[string]apimodel.Type, tagMap map[string]apimodel.Tag) apimodel.Object { return apimodel.Object{ Object: "object", Id: details.Fields[bundle.RelationKeyId.String()].GetStringValue(), @@ -417,8 +417,8 @@ func (s *Service) GetObjectFromStruct(details *types.Struct, propertyMap map[str } } -// GetObjectWithBlocksFromStruct creates an ObjectWithBody from the details. -func (s *Service) GetObjectWithBlocksFromStruct(details *types.Struct, markdown string, propertyMap map[string]apimodel.Property, typeMap map[string]apimodel.Type, tagMap map[string]apimodel.Tag) apimodel.ObjectWithBody { +// getObjectWithBlocksFromStruct creates an ObjectWithBody from the details. +func (s *Service) getObjectWithBlocksFromStruct(details *types.Struct, markdown string, propertyMap map[string]apimodel.Property, typeMap map[string]apimodel.Type, tagMap map[string]apimodel.Tag) apimodel.ObjectWithBody { return apimodel.ObjectWithBody{ Object: "object", Id: details.Fields[bundle.RelationKeyId.String()].GetStringValue(), diff --git a/core/api/service/object_test.go b/core/api/service/object_test.go index 1df3cbbda..1bf97e547 100644 --- a/core/api/service/object_test.go +++ b/core/api/service/object_test.go @@ -71,7 +71,7 @@ func TestObjectService_ListObjects(t *testing.T) { Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL}, }).Once() - // Mock GetPropertyMapFromStore + // Mock getPropertyMapFromStore fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{ SpaceId: mockedSpaceId, Filters: []*model.BlockContentDataviewFilter{ @@ -138,7 +138,7 @@ func TestObjectService_ListObjects(t *testing.T) { }, }, nil).Once() - // Mock GetTypeMapFromStore + // Mock getTypeMapFromStore fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{ SpaceId: mockedSpaceId, Filters: []*model.BlockContentDataviewFilter{ @@ -182,7 +182,7 @@ func TestObjectService_ListObjects(t *testing.T) { }, }, nil).Once() - // Mock GetTagMapFromStore + // Mock getTagMapFromStore fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{ SpaceId: mockedSpaceId, Filters: []*model.BlockContentDataviewFilter{ @@ -300,7 +300,7 @@ func TestObjectService_ListObjects(t *testing.T) { Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL}, }).Once() - // Mock GetPropertyMapFromStore, GetTypeMapFromStore and GetTagMapFromStore + // Mock getPropertyMapFromStore, getTypeMapFromStore and getTagMapFromStore fx.mwMock.On("ObjectSearch", mock.Anything, mock.Anything).Return(&pb.RpcObjectSearchResponse{ Records: []*types.Struct{}, Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL}, @@ -430,7 +430,7 @@ func TestObjectService_GetObject(t *testing.T) { }, }, nil).Once() - // Mock GetTypeMapFromStore + // Mock getTypeMapFromStore fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{ SpaceId: mockedSpaceId, Filters: []*model.BlockContentDataviewFilter{ @@ -474,7 +474,7 @@ func TestObjectService_GetObject(t *testing.T) { }, }, nil).Once() - // Mock GetTagMapFromStore + // Mock getTagMapFromStore fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{ SpaceId: mockedSpaceId, Filters: []*model.BlockContentDataviewFilter{ @@ -649,7 +649,7 @@ func TestObjectService_CreateObject(t *testing.T) { Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL}, }).Once() - // Mock GetPropertyMapFromStore, GetTypeMapFromStore and GetTagMapFromStore + // Mock getPropertyMapFromStore, getTypeMapFromStore and getTagMapFromStore fx.mwMock.On("ObjectSearch", mock.Anything, mock.Anything).Return(&pb.RpcObjectSearchResponse{ Records: []*types.Struct{}, Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL}, diff --git a/core/api/service/property.go b/core/api/service/property.go index 2d2ed6586..941d94395 100644 --- a/core/api/service/property.go +++ b/core/api/service/property.go @@ -140,7 +140,7 @@ func (s *Service) ListProperties(ctx context.Context, spaceId string, offset int filteredRecords := make([]*types.Struct, 0, len(resp.Records)) for _, record := range resp.Records { - rk, _ := s.mapPropertyFromRecord(record) + rk, _ := s.getPropertyFromStruct(record) if _, isExcluded := excludedSystemProperties[rk]; isExcluded { continue } @@ -152,7 +152,7 @@ func (s *Service) ListProperties(ctx context.Context, spaceId string, offset int properties = make([]apimodel.Property, 0, len(paginatedProperties)) for _, record := range paginatedProperties { - _, property := s.mapPropertyFromRecord(record) + _, property := s.getPropertyFromStruct(record) properties = append(properties, property) } @@ -180,7 +180,7 @@ func (s *Service) GetProperty(ctx context.Context, spaceId string, propertyId st } } - rk, property := s.mapPropertyFromRecord(resp.ObjectView.Details[0].Details) + rk, property := s.getPropertyFromStruct(resp.ObjectView.Details[0].Details) if _, isExcluded := excludedSystemProperties[rk]; isExcluded { return apimodel.Property{}, ErrPropertyNotFound } @@ -267,7 +267,7 @@ func (s *Service) processProperties(ctx context.Context, spaceId string, entries if len(entries) == 0 { return fields, nil } - propertyMap, err := s.GetPropertyMapFromStore(spaceId, false) + propertyMap, err := s.getPropertyMapFromStore(spaceId, false) if err != nil { return nil, err } @@ -500,11 +500,12 @@ func (s *Service) getRecommendedPropertiesFromLists(featured, regular *types.Lis } // GetPropertyMapsFromStore retrieves all properties for all spaces. -func (s *Service) GetPropertyMapsFromStore(spaceIds []string) (map[string]map[string]apimodel.Property, error) { +// Property entries can also be keyed by property id. Required for filling types with properties, as recommended properties are referenced by id and not key. +func (s *Service) GetPropertyMapsFromStore(spaceIds []string, keyByPropertyId bool) (map[string]map[string]apimodel.Property, error) { spacesToProperties := make(map[string]map[string]apimodel.Property, len(spaceIds)) for _, spaceId := range spaceIds { - propertyMap, err := s.GetPropertyMapFromStore(spaceId, true) + propertyMap, err := s.getPropertyMapFromStore(spaceId, keyByPropertyId) if err != nil { return nil, err } @@ -514,9 +515,9 @@ func (s *Service) GetPropertyMapsFromStore(spaceIds []string) (map[string]map[st return spacesToProperties, nil } -// GetPropertyMapFromStore retrieves all properties for a specific space +// getPropertyMapFromStore retrieves all properties for a specific space // Property entries can also be keyed by property id. Required for filling types with properties, as recommended properties are referenced by id and not key. -func (s *Service) GetPropertyMapFromStore(spaceId string, keyByPropertyId bool) (map[string]apimodel.Property, error) { +func (s *Service) getPropertyMapFromStore(spaceId string, keyByPropertyId bool) (map[string]apimodel.Property, error) { resp := s.mw.ObjectSearch(context.Background(), &pb.RpcObjectSearchRequest{ SpaceId: spaceId, Filters: []*model.BlockContentDataviewFilter{ @@ -545,7 +546,7 @@ func (s *Service) GetPropertyMapFromStore(spaceId string, keyByPropertyId bool) propertyMap := make(map[string]apimodel.Property, len(resp.Records)) for _, record := range resp.Records { - rk, p := s.mapPropertyFromRecord(record) + rk, p := s.getPropertyFromStruct(record) propertyMap[rk] = p if keyByPropertyId { propertyMap[p.Id] = p // add property under id as key to map as well @@ -555,15 +556,15 @@ func (s *Service) GetPropertyMapFromStore(spaceId string, keyByPropertyId bool) return propertyMap, nil } -// mapPropertyFromRecord maps a single property record into a Property and returns its trimmed relation key. -func (s *Service) mapPropertyFromRecord(record *types.Struct) (string, apimodel.Property) { - rk := record.Fields[bundle.RelationKeyRelationKey.String()].GetStringValue() +// getPropertyFromStruct maps a property's details into an apimodel.Property and returns its relation key. +func (s *Service) getPropertyFromStruct(details *types.Struct) (string, apimodel.Property) { + rk := details.Fields[bundle.RelationKeyRelationKey.String()].GetStringValue() return rk, apimodel.Property{ Object: "property", - Id: record.Fields[bundle.RelationKeyId.String()].GetStringValue(), + Id: details.Fields[bundle.RelationKeyId.String()].GetStringValue(), Key: util.ToPropertyApiKey(rk), - Name: record.Fields[bundle.RelationKeyName.String()].GetStringValue(), - Format: RelationFormatToPropertyFormat[model.RelationFormat(record.Fields[bundle.RelationKeyRelationFormat.String()].GetNumberValue())], + Name: details.Fields[bundle.RelationKeyName.String()].GetStringValue(), + Format: RelationFormatToPropertyFormat[model.RelationFormat(details.Fields[bundle.RelationKeyRelationFormat.String()].GetNumberValue())], } } diff --git a/core/api/service/search.go b/core/api/service/search.go index b9abccf67..c913f20f2 100644 --- a/core/api/service/search.go +++ b/core/api/service/search.go @@ -31,11 +31,29 @@ func (s *Service) GlobalSearch(ctx context.Context, request apimodel.SearchReque queryFilters := s.prepareQueryFilter(request.Query) sorts, criterionToSortAfter := s.prepareSorts(request.Sort) + // pre-fetch properties, types and tags to fill the objects + propertyMaps, err := s.GetPropertyMapsFromStore(spaceIds, true) + if err != nil { + return nil, 0, false, err + } + typeMaps, err := s.getTypeMapsFromStore(spaceIds, propertyMaps, true) + if err != nil { + return nil, 0, false, err + } + tagMap, err := s.getTagMapsFromStore(spaceIds) + if err != nil { + return nil, 0, false, err + } + var combinedRecords []*types.Struct for _, spaceId := range spaceIds { // Resolve template type and object type IDs per spaceId, as they are unique per spaceId templateFilter := s.prepareTemplateFilter() - typeFilters := s.prepareObjectTypeFilters(spaceId, request.Types) + typeFilters := s.prepareTypeFilters(request.Types, typeMaps[spaceId]) + if len(request.Types) > 0 && len(typeFilters) == 0 { + // Skip spaces that don’t have any of the requested types + continue + } filters := s.combineFilters(model.BlockContentDataviewFilter_And, baseFilters, templateFilter, queryFilters, typeFilters) objResp := s.mw.ObjectSearch(ctx, &pb.RpcObjectSearchRequest{ @@ -76,23 +94,9 @@ func (s *Service) GlobalSearch(ctx context.Context, request apimodel.SearchReque total = len(combinedRecords) paginatedRecords, hasMore := pagination.Paginate(combinedRecords, offset, limit) - // pre-fetch properties, types and tags to fill the objects - propertyMaps, err := s.GetPropertyMapsFromStore(spaceIds) - if err != nil { - return nil, 0, false, err - } - typeMaps, err := s.GetTypeMapsFromStore(spaceIds, propertyMaps) - if err != nil { - return nil, 0, false, err - } - tagMap, err := s.GetTagMapsFromStore(spaceIds) - if err != nil { - return nil, 0, false, err - } - results := make([]apimodel.Object, 0, len(paginatedRecords)) for _, record := range paginatedRecords { - results = append(results, s.GetObjectFromStruct(record, propertyMaps[record.Fields[bundle.RelationKeySpaceId.String()].GetStringValue()], typeMaps[record.Fields[bundle.RelationKeySpaceId.String()].GetStringValue()], tagMap[record.Fields[bundle.RelationKeySpaceId.String()].GetStringValue()])) + results = append(results, s.getObjectFromStruct(record, propertyMaps[record.Fields[bundle.RelationKeySpaceId.String()].GetStringValue()], typeMaps[record.Fields[bundle.RelationKeySpaceId.String()].GetStringValue()], tagMap[record.Fields[bundle.RelationKeySpaceId.String()].GetStringValue()])) } return results, total, hasMore, nil @@ -103,7 +107,26 @@ func (s *Service) Search(ctx context.Context, spaceId string, request apimodel.S baseFilters := s.prepareBaseFilters() templateFilter := s.prepareTemplateFilter() queryFilters := s.prepareQueryFilter(request.Query) - typeFilters := s.prepareObjectTypeFilters(spaceId, request.Types) + + // pre-fetch properties and types to fill the objects + propertyMap, err := s.getPropertyMapFromStore(spaceId, true) + if err != nil { + return nil, 0, false, err + } + typeMap, err := s.getTypeMapFromStore(spaceId, propertyMap, true) + if err != nil { + return nil, 0, false, err + } + tagMap, err := s.getTagMapFromStore(spaceId) + if err != nil { + return nil, 0, false, err + } + + typeFilters := s.prepareTypeFilters(request.Types, typeMap) + if len(request.Types) > 0 && len(typeFilters) == 0 { + // No matching types in this space; return empty result + return nil, 0, false, nil + } filters := s.combineFilters(model.BlockContentDataviewFilter_And, baseFilters, templateFilter, queryFilters, typeFilters) sorts, _ := s.prepareSorts(request.Sort) @@ -120,23 +143,9 @@ func (s *Service) Search(ctx context.Context, spaceId string, request apimodel.S total = len(resp.Records) paginatedRecords, hasMore := pagination.Paginate(resp.Records, offset, limit) - // pre-fetch properties and types to fill the objects - propertyMap, err := s.GetPropertyMapFromStore(spaceId, true) - if err != nil { - return nil, 0, false, err - } - typeMap, err := s.GetTypeMapFromStore(spaceId, propertyMap) - if err != nil { - return nil, 0, false, err - } - tagMap, err := s.GetTagMapFromStore(spaceId) - if err != nil { - return nil, 0, false, err - } - results := make([]apimodel.Object, 0, len(paginatedRecords)) for _, record := range paginatedRecords { - results = append(results, s.GetObjectFromStruct(record, propertyMap, typeMap, tagMap)) + results = append(results, s.getObjectFromStruct(record, propertyMap, typeMap, tagMap)) } return results, total, hasMore, nil @@ -215,26 +224,29 @@ func (s *Service) prepareQueryFilter(searchQuery string) []*model.BlockContentDa } } -// prepareObjectTypeFilters combines object type filters with an OR condition. -func (s *Service) prepareObjectTypeFilters(spaceId string, objectTypes []string) []*model.BlockContentDataviewFilter { - if len(objectTypes) == 0 || objectTypes[0] == "" { +// prepareTypeFilters combines type filters with an OR condition. +func (s *Service) prepareTypeFilters(types []string, typeMap map[string]apimodel.Type) []*model.BlockContentDataviewFilter { + if len(types) == 0 { return nil } - // Prepare nested filters for each object type - nestedFilters := make([]*model.BlockContentDataviewFilter, 0, len(objectTypes)) - for _, objectType := range objectTypes { - ukOrId := util.FromTypeApiKey(objectType) - typeId, err := util.ResolveUniqueKeyToTypeId(s.mw, spaceId, ukOrId) - if err != nil { - // client passed type id instead of type key - typeId = objectType + // Prepare nested filters for each type + nestedFilters := make([]*model.BlockContentDataviewFilter, 0, len(types)) + for _, ot := range types { + if ot == "" { + continue + } + + uk := util.FromTypeApiKey(ot) + typeDef, ok := typeMap[uk] + if !ok { + continue } nestedFilters = append(nestedFilters, &model.BlockContentDataviewFilter{ RelationKey: bundle.RelationKeyType.String(), Condition: model.BlockContentDataviewFilter_Equal, - Value: pbtypes.String(typeId), + Value: pbtypes.String(typeDef.Id), }) } diff --git a/core/api/service/search_test.go b/core/api/service/search_test.go index c65163018..0299e058d 100644 --- a/core/api/service/search_test.go +++ b/core/api/service/search_test.go @@ -192,7 +192,7 @@ func TestSearchService_GlobalSearch(t *testing.T) { }, }, nil).Once() - // Mock GetTypeMapsFromStore + // Mock getTypeMapsFromStore fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{ SpaceId: mockedSpaceId, Filters: []*model.BlockContentDataviewFilter{ @@ -229,7 +229,7 @@ func TestSearchService_GlobalSearch(t *testing.T) { }, }, nil).Once() - // Mock GetTagMapFromStore + // Mock getTagMapFromStore fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{ SpaceId: mockedSpaceId, Filters: []*model.BlockContentDataviewFilter{ @@ -501,7 +501,7 @@ func TestSearchService_Search(t *testing.T) { }, }, nil).Once() - // Mock GetTypeMapFromStore + // Mock getTypeMapFromStore fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{ SpaceId: mockedSpaceId, Filters: []*model.BlockContentDataviewFilter{ @@ -538,7 +538,7 @@ func TestSearchService_Search(t *testing.T) { }, }, nil).Once() - // Mock GetTagMapFromStore + // Mock getTagMapFromStore fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{ SpaceId: mockedSpaceId, Filters: []*model.BlockContentDataviewFilter{ diff --git a/core/api/service/tag.go b/core/api/service/tag.go index 24dd1cb9b..cd71e3fed 100644 --- a/core/api/service/tag.go +++ b/core/api/service/tag.go @@ -68,7 +68,7 @@ func (s *Service) ListTags(ctx context.Context, spaceId string, propertyId strin tags = make([]apimodel.Tag, 0, len(paginatedTags)) for _, record := range resp.Records { - tags = append(tags, s.mapTagFromRecord(record)) + tags = append(tags, s.getTagFromStruct(record)) } return tags, total, hasMore, nil @@ -95,7 +95,7 @@ func (s *Service) GetTag(ctx context.Context, spaceId string, propertyId string, } } - return s.mapTagFromRecord(resp.ObjectView.Details[0].Details), nil + return s.getTagFromStruct(resp.ObjectView.Details[0].Details), nil } // CreateTag creates a new tag option for a given property ID in a space. @@ -179,11 +179,11 @@ func (s *Service) DeleteTag(ctx context.Context, spaceId string, propertyId stri return tag, nil } -// GetTagMapsFromStore retrieves all tags for all spaces. -func (s *Service) GetTagMapsFromStore(spaceIds []string) (map[string]map[string]apimodel.Tag, error) { +// getTagMapsFromStore retrieves all tags for all spaces. +func (s *Service) getTagMapsFromStore(spaceIds []string) (map[string]map[string]apimodel.Tag, error) { spacesToTags := make(map[string]map[string]apimodel.Tag) for _, spaceId := range spaceIds { - tagMap, err := s.GetTagMapFromStore(spaceId) + tagMap, err := s.getTagMapFromStore(spaceId) if err != nil { return nil, err } @@ -192,8 +192,8 @@ func (s *Service) GetTagMapsFromStore(spaceIds []string) (map[string]map[string] return spacesToTags, nil } -// GetTagMapFromStore retrieves all tags for a specific space. -func (s *Service) GetTagMapFromStore(spaceId string) (map[string]apimodel.Tag, error) { +// getTagMapFromStore retrieves all tags for a specific space. +func (s *Service) getTagMapFromStore(spaceId string) (map[string]apimodel.Tag, error) { resp := s.mw.ObjectSearch(context.Background(), &pb.RpcObjectSearchRequest{ SpaceId: spaceId, Filters: []*model.BlockContentDataviewFilter{ @@ -222,20 +222,21 @@ func (s *Service) GetTagMapFromStore(spaceId string) (map[string]apimodel.Tag, e tags := make(map[string]apimodel.Tag) for _, record := range resp.Records { - tag := s.mapTagFromRecord(record) + tag := s.getTagFromStruct(record) tags[tag.Id] = tag } return tags, nil } -func (s *Service) mapTagFromRecord(record *types.Struct) apimodel.Tag { +// getTagFromStruct converts a tag's details from a struct to an apimodel.Tag. +func (s *Service) getTagFromStruct(details *types.Struct) apimodel.Tag { return apimodel.Tag{ Object: "tag", - Id: record.Fields[bundle.RelationKeyId.String()].GetStringValue(), - Key: util.ToTagApiKey(record.Fields[bundle.RelationKeyUniqueKey.String()].GetStringValue()), - Name: record.Fields[bundle.RelationKeyName.String()].GetStringValue(), - Color: apimodel.ColorOptionToColor[record.Fields[bundle.RelationKeyRelationOptionColor.String()].GetStringValue()], + Id: details.Fields[bundle.RelationKeyId.String()].GetStringValue(), + Key: util.ToTagApiKey(details.Fields[bundle.RelationKeyUniqueKey.String()].GetStringValue()), + Name: details.Fields[bundle.RelationKeyName.String()].GetStringValue(), + Color: apimodel.ColorOptionToColor[details.Fields[bundle.RelationKeyRelationOptionColor.String()].GetStringValue()], } } diff --git a/core/api/service/template.go b/core/api/service/template.go index 3c082b86f..9a447da0d 100644 --- a/core/api/service/template.go +++ b/core/api/service/template.go @@ -68,21 +68,21 @@ func (s *Service) ListTemplates(ctx context.Context, spaceId string, typeId stri paginatedTemplates, hasMore := pagination.Paginate(templateObjectsResp.Records, offset, limit) templates = make([]apimodel.Object, 0, len(paginatedTemplates)) - propertyMap, err := s.GetPropertyMapFromStore(spaceId, true) + propertyMap, err := s.getPropertyMapFromStore(spaceId, true) if err != nil { return nil, 0, false, err } - typeMap, err := s.GetTypeMapFromStore(spaceId, propertyMap) + typeMap, err := s.getTypeMapFromStore(spaceId, propertyMap, false) if err != nil { return nil, 0, false, err } - tagMap, err := s.GetTagMapFromStore(spaceId) + tagMap, err := s.getTagMapFromStore(spaceId) if err != nil { return nil, 0, false, err } for _, record := range paginatedTemplates { - templates = append(templates, s.GetObjectFromStruct(record, propertyMap, typeMap, tagMap)) + templates = append(templates, s.getObjectFromStruct(record, propertyMap, typeMap, tagMap)) } return templates, total, hasMore, nil @@ -109,15 +109,15 @@ func (s *Service) GetTemplate(ctx context.Context, spaceId string, _ string, tem } } - propertyMap, err := s.GetPropertyMapFromStore(spaceId, true) + propertyMap, err := s.getPropertyMapFromStore(spaceId, true) if err != nil { return apimodel.ObjectWithBody{}, err } - typeMap, err := s.GetTypeMapFromStore(spaceId, propertyMap) + typeMap, err := s.getTypeMapFromStore(spaceId, propertyMap, false) if err != nil { return apimodel.ObjectWithBody{}, err } - tagMap, err := s.GetTagMapFromStore(spaceId) + tagMap, err := s.getTagMapFromStore(spaceId) if err != nil { return apimodel.ObjectWithBody{}, err } @@ -127,5 +127,5 @@ func (s *Service) GetTemplate(ctx context.Context, spaceId string, _ string, tem return apimodel.ObjectWithBody{}, err } - return s.GetObjectWithBlocksFromStruct(resp.ObjectView.Details[0].Details, markdown, propertyMap, typeMap, tagMap), nil + return s.getObjectWithBlocksFromStruct(resp.ObjectView.Details[0].Details, markdown, propertyMap, typeMap, tagMap), nil } diff --git a/core/api/service/template_test.go b/core/api/service/template_test.go index b2cca7239..e93c7d1b8 100644 --- a/core/api/service/template_test.go +++ b/core/api/service/template_test.go @@ -49,7 +49,7 @@ func TestObjectService_ListTemplates(t *testing.T) { Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL}, }).Once() - // Mock GetPropertyMapFromStore, GetTypeMapFromStore and GetTagMapFromStore + // Mock getPropertyMapFromStore, getTypeMapFromStore and getTagMapFromStore fx.mwMock.On("ObjectSearch", mock.Anything, mock.Anything).Return(&pb.RpcObjectSearchResponse{ Records: []*types.Struct{}, Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL}, @@ -121,7 +121,7 @@ func TestObjectService_GetTemplate(t *testing.T) { }, }).Once() - // Mock GetPropertyMapFromStore, GetTypeMapFromStore and GetTagMapFromStore + // Mock getPropertyMapFromStore, getTypeMapFromStore and getTagMapFromStore fx.mwMock.On("ObjectSearch", mock.Anything, mock.Anything).Return(&pb.RpcObjectSearchResponse{ Records: []*types.Struct{}, Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL}, diff --git a/core/api/service/type.go b/core/api/service/type.go index 93d9bbdd1..950dda412 100644 --- a/core/api/service/type.go +++ b/core/api/service/type.go @@ -72,13 +72,14 @@ func (s *Service) ListTypes(ctx context.Context, spaceId string, offset int, lim paginatedTypes, hasMore := pagination.Paginate(resp.Records, offset, limit) types = make([]apimodel.Type, 0, len(paginatedTypes)) - propertyMap, err := s.GetPropertyMapFromStore(spaceId, true) + propertyMap, err := s.getPropertyMapFromStore(spaceId, true) if err != nil { return nil, 0, false, err } for _, record := range paginatedTypes { - types = append(types, s.getTypeFromStruct(record, propertyMap)) + _, t := s.getTypeFromStruct(record, propertyMap) + types = append(types, t) } return types, total, hasMore, nil } @@ -105,12 +106,13 @@ func (s *Service) GetType(ctx context.Context, spaceId string, typeId string) (a } // pre-fetch properties to fill the type - propertyMap, err := s.GetPropertyMapFromStore(spaceId, true) + propertyMap, err := s.getPropertyMapFromStore(spaceId, true) if err != nil { return apimodel.Type{}, err } - return s.getTypeFromStruct(resp.ObjectView.Details[0].Details, propertyMap), nil + _, t := s.getTypeFromStruct(resp.ObjectView.Details[0].Details, propertyMap) + return t, nil } // CreateType creates a new type in a specific space. @@ -175,12 +177,13 @@ func (s *Service) DeleteType(ctx context.Context, spaceId string, typeId string) return t, nil } -// GetTypeMapsFromStore retrieves all types from all spaces. -func (s *Service) GetTypeMapsFromStore(spaceIds []string, propertyMap map[string]map[string]apimodel.Property) (map[string]map[string]apimodel.Type, error) { +// getTypeMapsFromStore retrieves all types from all spaces. +// Type entries can also be keyed by uniqueKey. Required for resolving type keys to IDs for search filters. +func (s *Service) getTypeMapsFromStore(spaceIds []string, propertyMap map[string]map[string]apimodel.Property, keyByUniqueKey bool) (map[string]map[string]apimodel.Type, error) { spacesToTypes := make(map[string]map[string]apimodel.Type, len(spaceIds)) for _, spaceId := range spaceIds { - typeMap, err := s.GetTypeMapFromStore(spaceId, propertyMap[spaceId]) + typeMap, err := s.getTypeMapFromStore(spaceId, propertyMap[spaceId], keyByUniqueKey) if err != nil { return nil, err } @@ -190,8 +193,9 @@ func (s *Service) GetTypeMapsFromStore(spaceIds []string, propertyMap map[string return spacesToTypes, nil } -// GetTypeMapFromStore retrieves all types for a specific space. -func (s *Service) GetTypeMapFromStore(spaceId string, propertyMap map[string]apimodel.Property) (map[string]apimodel.Type, error) { +// getTypeMapFromStore retrieves all types for a specific space. +// Type entries can also be keyed by uniqueKey. Required for resolving type keys to IDs for search filters. +func (s *Service) getTypeMapFromStore(spaceId string, propertyMap map[string]apimodel.Property, keyByUniqueKey bool) (map[string]apimodel.Type, error) { resp := s.mw.ObjectSearch(context.Background(), &pb.RpcObjectSearchRequest{ SpaceId: spaceId, Filters: []*model.BlockContentDataviewFilter{ @@ -226,15 +230,19 @@ func (s *Service) GetTypeMapFromStore(spaceId string, propertyMap map[string]api typeMap := make(map[string]apimodel.Type, len(resp.Records)) for _, record := range resp.Records { - t := s.getTypeFromStruct(record, propertyMap) + uk, t := s.getTypeFromStruct(record, propertyMap) typeMap[t.Id] = t + if keyByUniqueKey { + typeMap[uk] = t + } } return typeMap, nil } -// getTypeFromStruct builds an apimodel.Type from the provided fields map and propertyMap. -func (s *Service) getTypeFromStruct(details *types.Struct, propertyMap map[string]apimodel.Property) apimodel.Type { - return apimodel.Type{ +// getTypeFromStruct maps a type's details into an apimodel.Type and returns its unique key. +func (s *Service) getTypeFromStruct(details *types.Struct, propertyMap map[string]apimodel.Property) (string, apimodel.Type) { + uk := details.Fields[bundle.RelationKeyUniqueKey.String()].GetStringValue() + return uk, apimodel.Type{ Object: "type", Id: details.Fields[bundle.RelationKeyId.String()].GetStringValue(), Key: util.ToTypeApiKey(details.Fields[bundle.RelationKeyUniqueKey.String()].GetStringValue()), @@ -268,7 +276,7 @@ func (s *Service) buildTypeDetails(ctx context.Context, spaceId string, request fields[k] = v } - propertyMap, err := s.GetPropertyMapFromStore(spaceId, true) + propertyMap, err := s.getPropertyMapFromStore(spaceId, true) if err != nil { return nil, err } @@ -335,7 +343,7 @@ func (s *Service) buildUpdatedTypeDetails(ctx context.Context, spaceId string, t return &types.Struct{Fields: fields}, nil } - propertyMap, err := s.GetPropertyMapFromStore(spaceId, true) + propertyMap, err := s.getPropertyMapFromStore(spaceId, true) if err != nil { return nil, err } diff --git a/core/api/service/type_test.go b/core/api/service/type_test.go index 9ca64887b..1ef9a1b06 100644 --- a/core/api/service/type_test.go +++ b/core/api/service/type_test.go @@ -36,7 +36,7 @@ func TestObjectService_ListTypes(t *testing.T) { Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL}, }).Once() - // Mock GetPropertyMapFromStore + // Mock getPropertyMapFromStore fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{ SpaceId: mockedSpaceId, Filters: []*model.BlockContentDataviewFilter{ @@ -92,7 +92,7 @@ func TestObjectService_ListTypes(t *testing.T) { Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL}, }).Once() - // Mock GetPropertyMapFromStore + // Mock getPropertyMapFromStore fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{ SpaceId: "empty-space", Filters: []*model.BlockContentDataviewFilter{ @@ -157,7 +157,7 @@ func TestObjectService_GetType(t *testing.T) { }, }).Once() - // Mock GetPropertyMapFromStore + // Mock getPropertyMapFromStore fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{ SpaceId: mockedSpaceId, Filters: []*model.BlockContentDataviewFilter{ diff --git a/core/api/util/util.go b/core/api/util/util.go index b1c955ad2..725ce411f 100644 --- a/core/api/util/util.go +++ b/core/api/util/util.go @@ -23,33 +23,6 @@ var ( ErrRelationKeysNotFound = errors.New("failed to find relation keys") ) -// ResolveUniqueKeyToTypeId resolves the unique key to the type's ID -func ResolveUniqueKeyToTypeId(mw apicore.ClientCommands, spaceId string, uniqueKey string) (typeId string, err error) { - resp := mw.ObjectSearch(context.Background(), &pb.RpcObjectSearchRequest{ - SpaceId: spaceId, - Filters: []*model.BlockContentDataviewFilter{ - { - RelationKey: bundle.RelationKeyUniqueKey.String(), - Condition: model.BlockContentDataviewFilter_Equal, - Value: pbtypes.String(uniqueKey), - }, - }, - Keys: []string{bundle.RelationKeyId.String()}, - }) - - if resp.Error != nil { - if resp.Error != nil && resp.Error.Code != pb.RpcObjectSearchResponseError_NULL { - return "", ErrFailedSearchType - } - - if len(resp.Records) == 0 { - return "", ErrFailedSearchType - } - } - - return resp.Records[0].Fields[bundle.RelationKeyId.String()].GetStringValue(), nil -} - // ResolveIdtoUniqueKeyAndRelationKey resolves the type's ID to the unique key func ResolveIdtoUniqueKeyAndRelationKey(mw apicore.ClientCommands, spaceId string, objectId string) (uk string, rk string, err error) { resp := mw.ObjectShow(context.Background(), &pb.RpcObjectShowRequest{ From 8a64b6358c6c7a22f73851994778ec4bf2956170 Mon Sep 17 00:00:00 2001 From: Mikhail Rakhmanov Date: Fri, 16 May 2025 10:07:45 +0200 Subject: [PATCH 056/164] GO-4400 Add more invite tests --- core/inviteservice/inviteservice_test.go | 98 ++++++++++++++++++++++-- 1 file changed, 91 insertions(+), 7 deletions(-) diff --git a/core/inviteservice/inviteservice_test.go b/core/inviteservice/inviteservice_test.go index 1a2dc36e9..64d42a589 100644 --- a/core/inviteservice/inviteservice_test.go +++ b/core/inviteservice/inviteservice_test.go @@ -5,7 +5,12 @@ import ( "testing" "github.com/anyproto/any-sync/app" + "github.com/anyproto/any-sync/commonspace/object/accountdata" "github.com/anyproto/any-sync/commonspace/object/acl/list" + "github.com/anyproto/any-sync/util/cidutil" + "github.com/anyproto/any-sync/util/crypto" + "github.com/ipfs/go-cid" + mh "github.com/multiformats/go-multihash" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" "go.uber.org/mock/gomock" @@ -17,6 +22,7 @@ import ( "github.com/anyproto/anytype-heart/core/domain/mock_domain" "github.com/anyproto/anytype-heart/core/files/fileacl/mock_fileacl" "github.com/anyproto/anytype-heart/core/invitestore/mock_invitestore" + "github.com/anyproto/anytype-heart/pkg/lib/pb/model" "github.com/anyproto/anytype-heart/pkg/lib/threads" "github.com/anyproto/anytype-heart/space/clientspace/mock_clientspace" "github.com/anyproto/anytype-heart/space/mock_space" @@ -29,17 +35,29 @@ type mockInviteObject struct { *mock_domain.MockInviteObject } +func (fx *fixture) expectInviteObject() { + fx.mockSpaceService.EXPECT().Get(ctx, "spaceId").Return(fx.mockSpace, nil) + fx.mockSpace.EXPECT().DerivedIDs().Return(threads.DerivedSmartblockIds{ + Workspace: "workspaceId", + }) + fx.mockSpace.EXPECT().Do("workspaceId", mock.Anything).RunAndReturn(func(s string, f func(smartblock.SmartBlock) error) error { + return f(mockInviteObject{SmartBlock: smarttest.New("root"), MockInviteObject: fx.mockInviteObject}) + }) +} + +func newCidFromBytes(data []byte) (cid.Cid, error) { + hash, err := mh.Sum(data, mh.SHA2_256, -1) + if err != nil { + return cid.Undef, err + } + return cid.NewCidV1(cid.DagCBOR, hash), nil +} + func TestInviteService_GetCurrent(t *testing.T) { t.Run("get current no migration", func(t *testing.T) { fx := newFixture(t) defer fx.ctrl.Finish() - fx.mockSpaceService.EXPECT().Get(ctx, "spaceId").Return(fx.mockSpace, nil) - fx.mockSpace.EXPECT().DerivedIDs().Return(threads.DerivedSmartblockIds{ - Workspace: "workspaceId", - }) - fx.mockSpace.EXPECT().Do("workspaceId", mock.Anything).RunAndReturn(func(s string, f func(smartblock.SmartBlock) error) error { - return f(mockInviteObject{SmartBlock: smarttest.New("root"), MockInviteObject: fx.mockInviteObject}) - }) + fx.expectInviteObject() returnedInfo := domain.InviteInfo{ InviteFileCid: "fileCid", InviteFileKey: "fileKey", @@ -53,6 +71,72 @@ func TestInviteService_GetCurrent(t *testing.T) { }) } +func TestInviteService_RemoveExisting(t *testing.T) { + t.Run("remove ok", func(t *testing.T) { + fx := newFixture(t) + defer fx.ctrl.Finish() + fx.expectInviteObject() + res, err := cidutil.NewCidFromBytes([]byte("fileCid")) + require.NoError(t, err) + returnedInfo := domain.InviteInfo{ + InviteFileCid: res, + InviteFileKey: "fileKey", + InviteType: domain.InviteTypeAnyone, + Permissions: list.AclPermissionsWriter, + } + invCid, err := cid.Decode(returnedInfo.InviteFileCid) + require.NoError(t, err) + fx.mockInviteObject.EXPECT().RemoveExistingInviteInfo().Return(returnedInfo, nil) + fx.mockInviteStore.EXPECT().RemoveInvite(ctx, invCid).Return(nil) + err = fx.RemoveExisting(ctx, "spaceId") + require.NoError(t, err) + }) +} + +func TestInviteService_InviteView(t *testing.T) { + t.Run("view ok", func(t *testing.T) { + fx := newFixture(t) + defer fx.ctrl.Finish() + acc, err := accountdata.NewRandom() + require.NoError(t, err) + rawKey, err := acc.PeerKey.Marshall() + require.NoError(t, err) + payload := &model.InvitePayload{ + CreatorIdentity: acc.SignKey.GetPublic().Account(), + CreatorName: "Misha", + SpaceName: "spaceName", + AclKey: rawKey, + SpaceId: "spaceId", + SpaceIconCid: "spaceIconCid", + InviteType: model.InviteType_WithoutApprove, + } + expectedView := domain.InviteView{ + InviteType: domain.InviteTypeAnyone, + SpaceId: "spaceId", + SpaceName: "spaceName", + SpaceIconCid: "spaceIconCid", + CreatorName: "Misha", + AclKey: rawKey, + } + marshaled, err := payload.Marshal() + require.NoError(t, err) + signature, err := acc.SignKey.Sign(marshaled) + require.NoError(t, err) + invite := &model.Invite{ + Payload: marshaled, + Signature: signature, + } + inviteCid, err := newCidFromBytes([]byte("fileCid")) + require.NoError(t, err) + inviteKey := crypto.NewAES() + fx.mockInviteStore.EXPECT().GetInvite(ctx, inviteCid, inviteKey).Return(invite, nil) + fx.mockFileAcl.EXPECT().StoreFileKeys(mock.Anything, mock.Anything).Return(nil) + view, err := fx.inviteService.View(ctx, inviteCid, inviteKey) + require.NoError(t, err) + require.Equal(t, expectedView, view) + }) +} + var ctx = context.Background() type fixture struct { From 9697b24630c041a65ec263c5273799e42662b445 Mon Sep 17 00:00:00 2001 From: Mikhail Rakhmanov Date: Fri, 16 May 2025 10:41:59 +0200 Subject: [PATCH 057/164] GO-4400 Add tests for generate invite --- core/inviteservice/inviteservice_test.go | 189 +++++++++++++++++++++++ 1 file changed, 189 insertions(+) diff --git a/core/inviteservice/inviteservice_test.go b/core/inviteservice/inviteservice_test.go index 64d42a589..93d0dd37f 100644 --- a/core/inviteservice/inviteservice_test.go +++ b/core/inviteservice/inviteservice_test.go @@ -15,6 +15,7 @@ import ( "github.com/stretchr/testify/require" "go.uber.org/mock/gomock" + "github.com/anyproto/anytype-heart/core/anytype/account" "github.com/anyproto/anytype-heart/core/anytype/account/mock_account" "github.com/anyproto/anytype-heart/core/block/editor/smartblock" "github.com/anyproto/anytype-heart/core/block/editor/smartblock/smarttest" @@ -24,10 +25,14 @@ import ( "github.com/anyproto/anytype-heart/core/invitestore/mock_invitestore" "github.com/anyproto/anytype-heart/pkg/lib/pb/model" "github.com/anyproto/anytype-heart/pkg/lib/threads" + "github.com/anyproto/anytype-heart/space/clientspace" "github.com/anyproto/anytype-heart/space/clientspace/mock_clientspace" "github.com/anyproto/anytype-heart/space/mock_space" + "github.com/anyproto/anytype-heart/space/spaceinfo" + "github.com/anyproto/anytype-heart/space/techspace" "github.com/anyproto/anytype-heart/space/techspace/mock_techspace" "github.com/anyproto/anytype-heart/tests/testutil" + "github.com/anyproto/anytype-heart/util/encode" ) type mockInviteObject struct { @@ -93,6 +98,190 @@ func TestInviteService_RemoveExisting(t *testing.T) { }) } +func TestInviteService_Generate(t *testing.T) { + t.Run("generate invite anyone, no existing info", func(t *testing.T) { + fx := newFixture(t) + defer fx.ctrl.Finish() + fx.expectInviteObject() + fx.mockInviteObject.EXPECT().GetExistingInviteInfo().Return(domain.InviteInfo{}) + acc, err := accountdata.NewRandom() + require.NoError(t, err) + fx.mockAccountService.EXPECT().AccountID().Return(acc.SignKey.GetPublic().Account()) + profile := account.Profile{ + Id: "profileId", + AccountId: acc.SignKey.GetPublic().Account(), + Name: "Misha", + } + spaceDescription := spaceinfo.SpaceDescription{ + Name: "space", + IconImage: "icon", + } + fx.mockAccountService.EXPECT().PersonalSpaceID().Return("personal") + fx.mockSpaceView.EXPECT().GetSpaceDescription().Return(spaceDescription) + fx.mockFileAcl.EXPECT().GetInfoForFileSharing(spaceDescription.IconImage).Return("iconCid", nil, nil) + fx.mockSpaceService.EXPECT().TechSpace().Return(&clientspace.TechSpace{TechSpace: fx.mockTechSpace}) + fx.mockTechSpace.EXPECT().DoSpaceView(ctx, "spaceId", mock.Anything).RunAndReturn( + func(ctx context.Context, spaceId string, f func(view techspace.SpaceView) error) error { + return f(fx.mockSpaceView) + }) + fx.mockAccountService.EXPECT().ProfileInfo().Return(profile, nil) + fx.mockAccountService.EXPECT().SignData(mock.Anything).Return([]byte("signature"), nil) + inviteCid, err := newCidFromBytes([]byte("fileCid")) + require.NoError(t, err) + inviteKey := crypto.NewAES() + fx.mockInviteStore.EXPECT().StoreInvite(ctx, mock.Anything).Return(inviteCid, inviteKey, nil) + inviteFileKeyRaw, err := encode.EncodeKeyToBase58(inviteKey) + require.NoError(t, err) + inviteInfo := domain.InviteInfo{ + InviteFileCid: inviteCid.String(), + InviteFileKey: inviteFileKeyRaw, + InviteType: domain.InviteTypeAnyone, + Permissions: list.AclPermissionsReader, + } + fx.mockInviteObject.EXPECT().SetInviteFileInfo(inviteInfo).Return(nil) + info, err := fx.inviteService.Generate(ctx, GenerateInviteParams{ + SpaceId: "spaceId", + Key: acc.PeerKey, + InviteType: domain.InviteTypeAnyone, + Permissions: list.AclPermissionsReader, + }, func() error { + return nil + }) + require.NoError(t, err) + require.Equal(t, inviteInfo, info) + }) + t.Run("generate invite anyone, invite exists of different type", func(t *testing.T) { + fx := newFixture(t) + defer fx.ctrl.Finish() + fx.expectInviteObject() + returnedInfo := domain.InviteInfo{ + InviteFileCid: "fileCid", + InviteFileKey: "fileKey", + InviteType: domain.InviteTypeDefault, + Permissions: list.AclPermissionsReader, + } + fx.mockInviteObject.EXPECT().GetExistingInviteInfo().Return(returnedInfo) + acc, err := accountdata.NewRandom() + require.NoError(t, err) + fx.mockAccountService.EXPECT().AccountID().Return(acc.SignKey.GetPublic().Account()) + profile := account.Profile{ + Id: "profileId", + AccountId: acc.SignKey.GetPublic().Account(), + Name: "Misha", + } + spaceDescription := spaceinfo.SpaceDescription{ + Name: "space", + IconImage: "icon", + } + fx.mockAccountService.EXPECT().PersonalSpaceID().Return("personal") + fx.mockSpaceView.EXPECT().GetSpaceDescription().Return(spaceDescription) + fx.mockFileAcl.EXPECT().GetInfoForFileSharing(spaceDescription.IconImage).Return("iconCid", nil, nil) + fx.mockSpaceService.EXPECT().TechSpace().Return(&clientspace.TechSpace{TechSpace: fx.mockTechSpace}) + fx.mockTechSpace.EXPECT().DoSpaceView(ctx, "spaceId", mock.Anything).RunAndReturn( + func(ctx context.Context, spaceId string, f func(view techspace.SpaceView) error) error { + return f(fx.mockSpaceView) + }) + fx.mockAccountService.EXPECT().ProfileInfo().Return(profile, nil) + fx.mockAccountService.EXPECT().SignData(mock.Anything).Return([]byte("signature"), nil) + inviteCid, err := newCidFromBytes([]byte("fileCid")) + require.NoError(t, err) + inviteKey := crypto.NewAES() + fx.mockInviteStore.EXPECT().StoreInvite(ctx, mock.Anything).Return(inviteCid, inviteKey, nil) + inviteFileKeyRaw, err := encode.EncodeKeyToBase58(inviteKey) + require.NoError(t, err) + inviteInfo := domain.InviteInfo{ + InviteFileCid: inviteCid.String(), + InviteFileKey: inviteFileKeyRaw, + InviteType: domain.InviteTypeAnyone, + Permissions: list.AclPermissionsReader, + } + fx.mockInviteObject.EXPECT().SetInviteFileInfo(inviteInfo).Return(nil) + info, err := fx.inviteService.Generate(ctx, GenerateInviteParams{ + SpaceId: "spaceId", + Key: acc.PeerKey, + InviteType: domain.InviteTypeAnyone, + Permissions: list.AclPermissionsReader, + }, func() error { + return nil + }) + require.NoError(t, err) + require.Equal(t, inviteInfo, info) + }) + t.Run("generate invite request join, no existing info", func(t *testing.T) { + fx := newFixture(t) + defer fx.ctrl.Finish() + fx.expectInviteObject() + fx.mockInviteObject.EXPECT().GetExistingInviteInfo().Return(domain.InviteInfo{}) + acc, err := accountdata.NewRandom() + require.NoError(t, err) + fx.mockAccountService.EXPECT().AccountID().Return(acc.SignKey.GetPublic().Account()) + profile := account.Profile{ + Id: "profileId", + AccountId: acc.SignKey.GetPublic().Account(), + Name: "Misha", + } + spaceDescription := spaceinfo.SpaceDescription{ + Name: "space", + IconImage: "icon", + } + fx.mockAccountService.EXPECT().PersonalSpaceID().Return("personal") + fx.mockSpaceView.EXPECT().GetSpaceDescription().Return(spaceDescription) + fx.mockFileAcl.EXPECT().GetInfoForFileSharing(spaceDescription.IconImage).Return("iconCid", nil, nil) + fx.mockSpaceService.EXPECT().TechSpace().Return(&clientspace.TechSpace{TechSpace: fx.mockTechSpace}) + fx.mockTechSpace.EXPECT().DoSpaceView(ctx, "spaceId", mock.Anything).RunAndReturn( + func(ctx context.Context, spaceId string, f func(view techspace.SpaceView) error) error { + return f(fx.mockSpaceView) + }) + fx.mockAccountService.EXPECT().ProfileInfo().Return(profile, nil) + fx.mockAccountService.EXPECT().SignData(mock.Anything).Return([]byte("signature"), nil) + inviteCid, err := newCidFromBytes([]byte("fileCid")) + require.NoError(t, err) + inviteKey := crypto.NewAES() + fx.mockInviteStore.EXPECT().StoreInvite(ctx, mock.Anything).Return(inviteCid, inviteKey, nil) + inviteFileKeyRaw, err := encode.EncodeKeyToBase58(inviteKey) + require.NoError(t, err) + inviteInfo := domain.InviteInfo{ + InviteFileCid: inviteCid.String(), + InviteFileKey: inviteFileKeyRaw, + InviteType: domain.InviteTypeDefault, + Permissions: list.AclPermissionsReader, + } + fx.mockInviteObject.EXPECT().SetInviteFileInfo(inviteInfo).Return(nil) + info, err := fx.inviteService.Generate(ctx, GenerateInviteParams{ + SpaceId: "spaceId", + Key: acc.PeerKey, + InviteType: domain.InviteTypeDefault, + Permissions: list.AclPermissionsReader, + }, func() error { + return nil + }) + require.NoError(t, err) + require.Equal(t, inviteInfo, info) + }) + t.Run("generate invite anyone, invite exists", func(t *testing.T) { + fx := newFixture(t) + defer fx.ctrl.Finish() + fx.expectInviteObject() + returnedInfo := domain.InviteInfo{ + InviteFileCid: "fileCid", + InviteFileKey: "fileKey", + InviteType: domain.InviteTypeAnyone, + Permissions: list.AclPermissionsWriter, + } + fx.mockAccountService.EXPECT().PersonalSpaceID().Return("personal") + fx.mockInviteObject.EXPECT().GetExistingInviteInfo().Return(returnedInfo) + info, err := fx.inviteService.Generate(ctx, GenerateInviteParams{ + SpaceId: "spaceId", + InviteType: domain.InviteTypeAnyone, + Permissions: list.AclPermissionsReader, + }, func() error { + return nil + }) + require.NoError(t, err) + require.Equal(t, returnedInfo, info) + }) +} + func TestInviteService_InviteView(t *testing.T) { t.Run("view ok", func(t *testing.T) { fx := newFixture(t) From 7709298fa6da26fb627a100fad532c56e8a75711 Mon Sep 17 00:00:00 2001 From: Mikhail Rakhmanov Date: Fri, 16 May 2025 11:08:59 +0200 Subject: [PATCH 058/164] GO-4400 Update any-sync - invite with non default perms --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index d763ca2a8..0cf8a13b2 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/VividCortex/ewma v1.2.0 github.com/adrium/goheif v0.0.0-20230113233934-ca402e77a786 github.com/anyproto/any-store v0.2.0 - github.com/anyproto/any-sync v0.7.6-0.20250515110754-b8a877201bb5 + github.com/anyproto/any-sync v0.7.6-0.20250516090737-355ab1fda075 github.com/anyproto/anytype-publish-server/publishclient v0.0.0-20250131145601-de288583ff2a github.com/anyproto/anytype-push-server/pushclient v0.0.0-20250402124745-6451298047f7 github.com/anyproto/go-chash v0.1.0 diff --git a/go.sum b/go.sum index 7106ca066..8d3ddca25 100644 --- a/go.sum +++ b/go.sum @@ -80,8 +80,8 @@ github.com/andybalholm/cascadia v1.3.3 h1:AG2YHrzJIm4BZ19iwJ/DAua6Btl3IwJX+VI4kk github.com/andybalholm/cascadia v1.3.3/go.mod h1:xNd9bqTn98Ln4DwST8/nG+H0yuB8Hmgu1YHNnWw0GeA= github.com/anyproto/any-store v0.2.0 h1:M8Eb0dxuEk62lIGZ3k1nADlaPQzmo6ilWLCCcY9WX10= github.com/anyproto/any-store v0.2.0/go.mod h1:N59OGYe/uXRNpr6ytfbBpbC+1viDgSbsVNXevOMxJAM= -github.com/anyproto/any-sync v0.7.6-0.20250515110754-b8a877201bb5 h1:DIMKHkMzoGMf50y2s3qHj19JiXgQE7+1EbFnNUaYp/s= -github.com/anyproto/any-sync v0.7.6-0.20250515110754-b8a877201bb5/go.mod h1:G6i3PT6pN6lcC5rim5Ed7ppUPuQgU5PyHgiqskrggL0= +github.com/anyproto/any-sync v0.7.6-0.20250516090737-355ab1fda075 h1:fEn/BF3hgLGh8zftEUMI0CCdKSr9zElcTRuNxWI1g8g= +github.com/anyproto/any-sync v0.7.6-0.20250516090737-355ab1fda075/go.mod h1:G6i3PT6pN6lcC5rim5Ed7ppUPuQgU5PyHgiqskrggL0= github.com/anyproto/anytype-publish-server/publishclient v0.0.0-20250131145601-de288583ff2a h1:ZZM+0OUCQMWSLSflpkf0ZMVo3V76qEDDIXPpQOClNs0= github.com/anyproto/anytype-publish-server/publishclient v0.0.0-20250131145601-de288583ff2a/go.mod h1:4fkueCZcGniSMXkrwESO8zzERrh/L7WHimRNWecfGM0= github.com/anyproto/anytype-push-server/pushclient v0.0.0-20250402124745-6451298047f7 h1:oKkEnxnN1jeB1Ty20CTMH3w4WkCrV8dOQy1Myetg7XA= From b677f9ab5567e7c0b9bbc37b6b354337ab0af9e4 Mon Sep 17 00:00:00 2001 From: Sergey Date: Fri, 16 May 2025 11:13:22 +0200 Subject: [PATCH 059/164] Chats: fix other tests --- .mockery.yaml | 3 + .../mock_chatsubscription/mock_Service.go | 386 ++++++++++++++++++ core/block/chats/service_test.go | 73 ++-- 3 files changed, 415 insertions(+), 47 deletions(-) create mode 100644 core/block/chats/chatsubscription/mock_chatsubscription/mock_Service.go diff --git a/.mockery.yaml b/.mockery.yaml index 106bba565..b6ea78e6d 100644 --- a/.mockery.yaml +++ b/.mockery.yaml @@ -253,3 +253,6 @@ packages: github.com/anyproto/anytype-heart/core/block/editor/chatobject: interfaces: StoreObject: + github.com/anyproto/anytype-heart/core/block/chats/chatsubscription: + interfaces: + Service: diff --git a/core/block/chats/chatsubscription/mock_chatsubscription/mock_Service.go b/core/block/chats/chatsubscription/mock_chatsubscription/mock_Service.go new file mode 100644 index 000000000..942abd2f2 --- /dev/null +++ b/core/block/chats/chatsubscription/mock_chatsubscription/mock_Service.go @@ -0,0 +1,386 @@ +// Code generated by mockery. DO NOT EDIT. + +package mock_chatsubscription + +import ( + context "context" + + app "github.com/anyproto/any-sync/app" + chatsubscription "github.com/anyproto/anytype-heart/core/block/chats/chatsubscription" + + mock "github.com/stretchr/testify/mock" +) + +// MockService is an autogenerated mock type for the Service type +type MockService struct { + mock.Mock +} + +type MockService_Expecter struct { + mock *mock.Mock +} + +func (_m *MockService) EXPECT() *MockService_Expecter { + return &MockService_Expecter{mock: &_m.Mock} +} + +// Close provides a mock function with given fields: ctx +func (_m *MockService) Close(ctx context.Context) error { + ret := _m.Called(ctx) + + if len(ret) == 0 { + panic("no return value specified for Close") + } + + var r0 error + if rf, ok := ret.Get(0).(func(context.Context) error); ok { + r0 = rf(ctx) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// MockService_Close_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Close' +type MockService_Close_Call struct { + *mock.Call +} + +// Close is a helper method to define mock.On call +// - ctx context.Context +func (_e *MockService_Expecter) Close(ctx interface{}) *MockService_Close_Call { + return &MockService_Close_Call{Call: _e.mock.On("Close", ctx)} +} + +func (_c *MockService_Close_Call) Run(run func(ctx context.Context)) *MockService_Close_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context)) + }) + return _c +} + +func (_c *MockService_Close_Call) Return(err error) *MockService_Close_Call { + _c.Call.Return(err) + return _c +} + +func (_c *MockService_Close_Call) RunAndReturn(run func(context.Context) error) *MockService_Close_Call { + _c.Call.Return(run) + return _c +} + +// GetManager provides a mock function with given fields: chatObjectId +func (_m *MockService) GetManager(chatObjectId string) (chatsubscription.Manager, error) { + ret := _m.Called(chatObjectId) + + if len(ret) == 0 { + panic("no return value specified for GetManager") + } + + var r0 chatsubscription.Manager + var r1 error + if rf, ok := ret.Get(0).(func(string) (chatsubscription.Manager, error)); ok { + return rf(chatObjectId) + } + if rf, ok := ret.Get(0).(func(string) chatsubscription.Manager); ok { + r0 = rf(chatObjectId) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(chatsubscription.Manager) + } + } + + if rf, ok := ret.Get(1).(func(string) error); ok { + r1 = rf(chatObjectId) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// MockService_GetManager_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetManager' +type MockService_GetManager_Call struct { + *mock.Call +} + +// GetManager is a helper method to define mock.On call +// - chatObjectId string +func (_e *MockService_Expecter) GetManager(chatObjectId interface{}) *MockService_GetManager_Call { + return &MockService_GetManager_Call{Call: _e.mock.On("GetManager", chatObjectId)} +} + +func (_c *MockService_GetManager_Call) Run(run func(chatObjectId string)) *MockService_GetManager_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(string)) + }) + return _c +} + +func (_c *MockService_GetManager_Call) Return(_a0 chatsubscription.Manager, _a1 error) *MockService_GetManager_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *MockService_GetManager_Call) RunAndReturn(run func(string) (chatsubscription.Manager, error)) *MockService_GetManager_Call { + _c.Call.Return(run) + return _c +} + +// Init provides a mock function with given fields: a +func (_m *MockService) Init(a *app.App) error { + ret := _m.Called(a) + + if len(ret) == 0 { + panic("no return value specified for Init") + } + + var r0 error + if rf, ok := ret.Get(0).(func(*app.App) error); ok { + r0 = rf(a) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// MockService_Init_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Init' +type MockService_Init_Call struct { + *mock.Call +} + +// Init is a helper method to define mock.On call +// - a *app.App +func (_e *MockService_Expecter) Init(a interface{}) *MockService_Init_Call { + return &MockService_Init_Call{Call: _e.mock.On("Init", a)} +} + +func (_c *MockService_Init_Call) Run(run func(a *app.App)) *MockService_Init_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(*app.App)) + }) + return _c +} + +func (_c *MockService_Init_Call) Return(err error) *MockService_Init_Call { + _c.Call.Return(err) + return _c +} + +func (_c *MockService_Init_Call) RunAndReturn(run func(*app.App) error) *MockService_Init_Call { + _c.Call.Return(run) + return _c +} + +// Name provides a mock function with given fields: +func (_m *MockService) Name() string { + ret := _m.Called() + + if len(ret) == 0 { + panic("no return value specified for Name") + } + + var r0 string + if rf, ok := ret.Get(0).(func() string); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(string) + } + + return r0 +} + +// MockService_Name_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Name' +type MockService_Name_Call struct { + *mock.Call +} + +// Name is a helper method to define mock.On call +func (_e *MockService_Expecter) Name() *MockService_Name_Call { + return &MockService_Name_Call{Call: _e.mock.On("Name")} +} + +func (_c *MockService_Name_Call) Run(run func()) *MockService_Name_Call { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *MockService_Name_Call) Return(name string) *MockService_Name_Call { + _c.Call.Return(name) + return _c +} + +func (_c *MockService_Name_Call) RunAndReturn(run func() string) *MockService_Name_Call { + _c.Call.Return(run) + return _c +} + +// Run provides a mock function with given fields: ctx +func (_m *MockService) Run(ctx context.Context) error { + ret := _m.Called(ctx) + + if len(ret) == 0 { + panic("no return value specified for Run") + } + + var r0 error + if rf, ok := ret.Get(0).(func(context.Context) error); ok { + r0 = rf(ctx) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// MockService_Run_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Run' +type MockService_Run_Call struct { + *mock.Call +} + +// Run is a helper method to define mock.On call +// - ctx context.Context +func (_e *MockService_Expecter) Run(ctx interface{}) *MockService_Run_Call { + return &MockService_Run_Call{Call: _e.mock.On("Run", ctx)} +} + +func (_c *MockService_Run_Call) Run(run func(ctx context.Context)) *MockService_Run_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context)) + }) + return _c +} + +func (_c *MockService_Run_Call) Return(err error) *MockService_Run_Call { + _c.Call.Return(err) + return _c +} + +func (_c *MockService_Run_Call) RunAndReturn(run func(context.Context) error) *MockService_Run_Call { + _c.Call.Return(run) + return _c +} + +// SubscribeLastMessages provides a mock function with given fields: ctx, req +func (_m *MockService) SubscribeLastMessages(ctx context.Context, req chatsubscription.SubscribeLastMessagesRequest) (*chatsubscription.SubscribeLastMessagesResponse, error) { + ret := _m.Called(ctx, req) + + if len(ret) == 0 { + panic("no return value specified for SubscribeLastMessages") + } + + var r0 *chatsubscription.SubscribeLastMessagesResponse + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, chatsubscription.SubscribeLastMessagesRequest) (*chatsubscription.SubscribeLastMessagesResponse, error)); ok { + return rf(ctx, req) + } + if rf, ok := ret.Get(0).(func(context.Context, chatsubscription.SubscribeLastMessagesRequest) *chatsubscription.SubscribeLastMessagesResponse); ok { + r0 = rf(ctx, req) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*chatsubscription.SubscribeLastMessagesResponse) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, chatsubscription.SubscribeLastMessagesRequest) error); ok { + r1 = rf(ctx, req) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// MockService_SubscribeLastMessages_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SubscribeLastMessages' +type MockService_SubscribeLastMessages_Call struct { + *mock.Call +} + +// SubscribeLastMessages is a helper method to define mock.On call +// - ctx context.Context +// - req chatsubscription.SubscribeLastMessagesRequest +func (_e *MockService_Expecter) SubscribeLastMessages(ctx interface{}, req interface{}) *MockService_SubscribeLastMessages_Call { + return &MockService_SubscribeLastMessages_Call{Call: _e.mock.On("SubscribeLastMessages", ctx, req)} +} + +func (_c *MockService_SubscribeLastMessages_Call) Run(run func(ctx context.Context, req chatsubscription.SubscribeLastMessagesRequest)) *MockService_SubscribeLastMessages_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(chatsubscription.SubscribeLastMessagesRequest)) + }) + return _c +} + +func (_c *MockService_SubscribeLastMessages_Call) Return(_a0 *chatsubscription.SubscribeLastMessagesResponse, _a1 error) *MockService_SubscribeLastMessages_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *MockService_SubscribeLastMessages_Call) RunAndReturn(run func(context.Context, chatsubscription.SubscribeLastMessagesRequest) (*chatsubscription.SubscribeLastMessagesResponse, error)) *MockService_SubscribeLastMessages_Call { + _c.Call.Return(run) + return _c +} + +// Unsubscribe provides a mock function with given fields: chatObjectId, subId +func (_m *MockService) Unsubscribe(chatObjectId string, subId string) error { + ret := _m.Called(chatObjectId, subId) + + if len(ret) == 0 { + panic("no return value specified for Unsubscribe") + } + + var r0 error + if rf, ok := ret.Get(0).(func(string, string) error); ok { + r0 = rf(chatObjectId, subId) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// MockService_Unsubscribe_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Unsubscribe' +type MockService_Unsubscribe_Call struct { + *mock.Call +} + +// Unsubscribe is a helper method to define mock.On call +// - chatObjectId string +// - subId string +func (_e *MockService_Expecter) Unsubscribe(chatObjectId interface{}, subId interface{}) *MockService_Unsubscribe_Call { + return &MockService_Unsubscribe_Call{Call: _e.mock.On("Unsubscribe", chatObjectId, subId)} +} + +func (_c *MockService_Unsubscribe_Call) Run(run func(chatObjectId string, subId string)) *MockService_Unsubscribe_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(string), args[1].(string)) + }) + return _c +} + +func (_c *MockService_Unsubscribe_Call) Return(_a0 error) *MockService_Unsubscribe_Call { + _c.Call.Return(_a0) + return _c +} + +func (_c *MockService_Unsubscribe_Call) RunAndReturn(run func(string, string) error) *MockService_Unsubscribe_Call { + _c.Call.Return(run) + return _c +} + +// NewMockService creates a new instance of MockService. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewMockService(t interface { + mock.TestingT + Cleanup(func()) +}) *MockService { + mock := &MockService{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/core/block/chats/service_test.go b/core/block/chats/service_test.go index 9a8371bc5..6cb558401 100644 --- a/core/block/chats/service_test.go +++ b/core/block/chats/service_test.go @@ -14,9 +14,8 @@ import ( "github.com/anyproto/anytype-heart/core/block/cache/mock_cache" "github.com/anyproto/anytype-heart/core/block/chats/chatmodel" - "github.com/anyproto/anytype-heart/core/block/editor/chatobject" - "github.com/anyproto/anytype-heart/core/block/editor/chatobject/mock_chatobject" - "github.com/anyproto/anytype-heart/core/block/editor/smartblock" + "github.com/anyproto/anytype-heart/core/block/chats/chatsubscription" + "github.com/anyproto/anytype-heart/core/block/chats/chatsubscription/mock_chatsubscription" "github.com/anyproto/anytype-heart/core/domain" "github.com/anyproto/anytype-heart/core/subscription" "github.com/anyproto/anytype-heart/core/subscription/crossspacesub/mock_crossspacesub" @@ -71,6 +70,7 @@ type fixture struct { *service objectGetter *mock_cache.MockObjectWaitGetterComponent + subscriptionService *mock_chatsubscription.MockService app *app.App crossSpaceSubService *mock_crossspacesub.MockService @@ -110,10 +110,12 @@ func newFixture(t *testing.T) *fixture { objectStore := objectstore.NewStoreFixture(t) objectGetter := mock_cache.NewMockObjectWaitGetterComponent(t) crossSpaceSubService := mock_crossspacesub.NewMockService(t) + subscriptionService := mock_chatsubscription.NewMockService(t) fx := &fixture{ service: New().(*service), crossSpaceSubService: crossSpaceSubService, + subscriptionService: subscriptionService, objectGetter: objectGetter, actions: map[string][]recordedAction{}, } @@ -123,12 +125,14 @@ func newFixture(t *testing.T) *fixture { a.Register(objectStore) a.Register(testutil.PrepareMock(ctx, a, objectGetter)) a.Register(testutil.PrepareMock(ctx, a, crossSpaceSubService)) + a.Register(testutil.PrepareMock(ctx, a, subscriptionService)) a.Register(&pushServiceDummy{}) a.Register(&accountServiceDummy{}) a.Register(fx) fx.app = a + fx.expectSubscribe(t) return fx } @@ -137,11 +141,6 @@ func (fx *fixture) start(t *testing.T) { require.NoError(t, err) } -type chatObjectWrapper struct { - smartblock.SmartBlock - chatobject.StoreObject -} - func givenLastMessages() []*chatmodel.Message { return []*chatmodel.Message{ { @@ -173,34 +172,26 @@ func givenDependencies() map[string][]*domain.Details { } } -func (fx *fixture) expectChatObject(t *testing.T, chatObjectId string) { - fx.objectGetter.EXPECT().WaitAndGetObject(mock.Anything, chatObjectId).RunAndReturn(func(ctx context.Context, id string) (smartblock.SmartBlock, error) { - sb := mock_chatobject.NewMockStoreObject(t) +func (fx *fixture) expectSubscribe(t *testing.T) { + fx.subscriptionService.EXPECT().SubscribeLastMessages(mock.Anything, mock.Anything).RunAndReturn(func(ctx context.Context, req chatsubscription.SubscribeLastMessagesRequest) (*chatsubscription.SubscribeLastMessagesResponse, error) { + fx.recordAction(req.ChatObjectId, recordedAction{ + actionType: actionTypeSubscribe, + subId: req.SubId, + }) + return &chatsubscription.SubscribeLastMessagesResponse{ + Messages: givenLastMessages(), + ChatState: givenLastState(), + Dependencies: givenDependencies(), + }, nil + }).Maybe() - sb.EXPECT().Lock().Return().Maybe() - sb.EXPECT().Unlock().Return().Maybe() - sb.EXPECT().SubscribeLastMessages(mock.Anything, mock.Anything).RunAndReturn(func(ctx context.Context, req chatobject.SubscribeLastMessagesRequest) (*chatobject.SubscribeLastMessagesResponse, error) { - fx.recordAction(chatObjectId, recordedAction{ - actionType: actionTypeSubscribe, - subId: req.SubId, - }) - return &chatobject.SubscribeLastMessagesResponse{ - Messages: givenLastMessages(), - ChatState: givenLastState(), - Dependencies: givenDependencies(), - }, nil - }).Maybe() - - sb.EXPECT().Unsubscribe(mock.Anything).RunAndReturn(func(subId string) error { - fx.recordAction(chatObjectId, recordedAction{ - actionType: actionTypeUnsubscribe, - subId: subId, - }) - return nil - }).Maybe() - - return sb, nil - }) + fx.subscriptionService.EXPECT().Unsubscribe(mock.Anything, mock.Anything).RunAndReturn(func(chatObjectId string, subId string) error { + fx.recordAction(chatObjectId, recordedAction{ + actionType: actionTypeUnsubscribe, + subId: subId, + }) + return nil + }).Maybe() } func TestSubscribeToMessagePreviews(t *testing.T) { @@ -221,9 +212,6 @@ func TestSubscribeToMessagePreviews(t *testing.T) { }, }, nil).Maybe() - fx.expectChatObject(t, "chat1") - fx.expectChatObject(t, "chat2") - fx.start(t) resp, err := fx.SubscribeToMessagePreviews(ctx, "previewSub1") @@ -271,9 +259,6 @@ func TestSubscribeToMessagePreviews(t *testing.T) { Records: []*domain.Details{}, }, nil).Maybe() - fx.expectChatObject(t, "chat1") - fx.expectChatObject(t, "chat2") - fx.start(t) fx.chatObjectsSubQueue.Add(ctx, &pb.EventMessage{ @@ -330,9 +315,6 @@ func TestSubscribeToMessagePreviews(t *testing.T) { }, }, nil).Maybe() - fx.expectChatObject(t, "chat1") - fx.expectChatObject(t, "chat2") - fx.start(t) fx.chatObjectsSubQueue.Add(ctx, &pb.EventMessage{ @@ -385,9 +367,6 @@ func TestSubscribeToMessagePreviews(t *testing.T) { }, }, nil).Maybe() - fx.expectChatObject(t, "chat1") - fx.expectChatObject(t, "chat2") - fx.start(t) resp, err := fx.SubscribeToMessagePreviews(ctx, "previewSub1") From f259480e69d3df8393d80f1e52a343d1f8650123 Mon Sep 17 00:00:00 2001 From: Mikhail Rakhmanov Date: Fri, 16 May 2025 11:49:07 +0200 Subject: [PATCH 060/164] GO-4400 Add test for remove invite --- core/inviteservice/inviteservice_test.go | 53 ++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/core/inviteservice/inviteservice_test.go b/core/inviteservice/inviteservice_test.go index 93d0dd37f..05dda66f8 100644 --- a/core/inviteservice/inviteservice_test.go +++ b/core/inviteservice/inviteservice_test.go @@ -2,6 +2,7 @@ package inviteservice import ( "context" + "fmt" "testing" "github.com/anyproto/any-sync/app" @@ -258,6 +259,58 @@ func TestInviteService_Generate(t *testing.T) { require.NoError(t, err) require.Equal(t, inviteInfo, info) }) + t.Run("generate invite request join, fail to send", func(t *testing.T) { + fx := newFixture(t) + defer fx.ctrl.Finish() + fx.expectInviteObject() + fx.mockInviteObject.EXPECT().GetExistingInviteInfo().Return(domain.InviteInfo{}) + acc, err := accountdata.NewRandom() + require.NoError(t, err) + fx.mockAccountService.EXPECT().AccountID().Return(acc.SignKey.GetPublic().Account()) + profile := account.Profile{ + Id: "profileId", + AccountId: acc.SignKey.GetPublic().Account(), + Name: "Misha", + } + spaceDescription := spaceinfo.SpaceDescription{ + Name: "space", + IconImage: "icon", + } + fx.mockAccountService.EXPECT().PersonalSpaceID().Return("personal") + fx.mockSpaceView.EXPECT().GetSpaceDescription().Return(spaceDescription) + fx.mockFileAcl.EXPECT().GetInfoForFileSharing(spaceDescription.IconImage).Return("iconCid", nil, nil) + fx.mockSpaceService.EXPECT().TechSpace().Return(&clientspace.TechSpace{TechSpace: fx.mockTechSpace}) + fx.mockTechSpace.EXPECT().DoSpaceView(ctx, "spaceId", mock.Anything).RunAndReturn( + func(ctx context.Context, spaceId string, f func(view techspace.SpaceView) error) error { + return f(fx.mockSpaceView) + }) + fx.mockAccountService.EXPECT().ProfileInfo().Return(profile, nil) + fx.mockAccountService.EXPECT().SignData(mock.Anything).Return([]byte("signature"), nil) + inviteCid, err := newCidFromBytes([]byte("fileCid")) + require.NoError(t, err) + inviteKey := crypto.NewAES() + fx.mockInviteStore.EXPECT().StoreInvite(ctx, mock.Anything).Return(inviteCid, inviteKey, nil) + inviteFileKeyRaw, err := encode.EncodeKeyToBase58(inviteKey) + require.NoError(t, err) + inviteInfo := domain.InviteInfo{ + InviteFileCid: inviteCid.String(), + InviteFileKey: inviteFileKeyRaw, + InviteType: domain.InviteTypeDefault, + Permissions: list.AclPermissionsReader, + } + fx.mockInviteObject.EXPECT().SetInviteFileInfo(inviteInfo).Return(nil) + fx.mockInviteObject.EXPECT().RemoveExistingInviteInfo().Return(inviteInfo, nil) + fx.mockInviteStore.EXPECT().RemoveInvite(ctx, inviteCid).Return(nil) + _, err = fx.inviteService.Generate(ctx, GenerateInviteParams{ + SpaceId: "spaceId", + Key: acc.PeerKey, + InviteType: domain.InviteTypeDefault, + Permissions: list.AclPermissionsReader, + }, func() error { + return fmt.Errorf("failed to send") + }) + require.Error(t, err) + }) t.Run("generate invite anyone, invite exists", func(t *testing.T) { fx := newFixture(t) defer fx.ctrl.Finish() From 20b5f9b7babc270e34a232da9a4b478540d58f1a Mon Sep 17 00:00:00 2001 From: Sergey Date: Fri, 16 May 2025 11:59:11 +0200 Subject: [PATCH 061/164] Fix data race --- core/block/chats/chatsubscription/service.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/core/block/chats/chatsubscription/service.go b/core/block/chats/chatsubscription/service.go index b74e04a75..dca5d3714 100644 --- a/core/block/chats/chatsubscription/service.go +++ b/core/block/chats/chatsubscription/service.go @@ -150,8 +150,6 @@ func (s *service) initManager(chatObjectId string, mngr *subscriptionManager) er mngr.eventSender = s.eventSender mngr.repository = repository - s.managers[chatObjectId] = mngr - err = mngr.loadChatState(s.componentCtx) if err != nil { return fmt.Errorf("init chat state: %w", err) From c6ccea3b5373b0c5cc18ce643b379a2e2ed6ecf1 Mon Sep 17 00:00:00 2001 From: Sergey Date: Fri, 16 May 2025 14:23:08 +0200 Subject: [PATCH 062/164] Chats: fix repository --- core/block/chats/chatrepository/repository.go | 10 +++---- core/block/editor/chatobject/chatobject.go | 2 +- .../editor/chatobject/chatobject_test.go | 4 ++- core/block/editor/factory.go | 12 +++++++-- core/indexer/reindex.go | 5 +++- pkg/lib/localstore/objectstore/fixture.go | 1 + pkg/lib/localstore/objectstore/service.go | 27 ++++++++++--------- 7 files changed, 38 insertions(+), 23 deletions(-) diff --git a/core/block/chats/chatrepository/repository.go b/core/block/chats/chatrepository/repository.go index 4d3d08b63..7cedecc56 100644 --- a/core/block/chats/chatrepository/repository.go +++ b/core/block/chats/chatrepository/repository.go @@ -94,7 +94,10 @@ func (s *service) Repository(chatObjectId string) (Repository, error) { } crdtDbGetter := s.objectStore.GetCrdtDb(spaceId) - crdtDb := crdtDbGetter.Wait() + crdtDb, err := crdtDbGetter.Wait() + if err != nil { + return nil, fmt.Errorf("get crdt db: %w", err) + } collectionName := chatObjectId + "chats" collection, err := crdtDb.OpenCollection(s.componentCtx, collectionName) @@ -116,7 +119,6 @@ func (s *service) Repository(chatObjectId string) (Repository, error) { } type Repository interface { - GetDb() anystore.DB WriteTx(ctx context.Context) (anystore.WriteTx, error) ReadTx(ctx context.Context) (anystore.ReadTx, error) GetLastStateId(ctx context.Context) (string, error) @@ -138,10 +140,6 @@ type repository struct { arenaPool *anyenc.ArenaPool } -func (s *repository) GetDb() anystore.DB { - return s.db -} - func (s *repository) WriteTx(ctx context.Context) (anystore.WriteTx, error) { return s.collection.WriteTx(ctx) } diff --git a/core/block/editor/chatobject/chatobject.go b/core/block/editor/chatobject/chatobject.go index 900318ccb..58ebcdedd 100644 --- a/core/block/editor/chatobject/chatobject.go +++ b/core/block/editor/chatobject/chatobject.go @@ -148,7 +148,7 @@ func (s *storeObject) Init(ctx *smartblock.InitContext) error { myParticipantId: myParticipantId, } - stateStore, err := storestate.New(ctx.Ctx, s.Id(), s.repository.GetDb(), s.chatHandler) + stateStore, err := storestate.New(ctx.Ctx, s.Id(), s.crdtDb, s.chatHandler) if err != nil { return fmt.Errorf("create state store: %w", err) } diff --git a/core/block/editor/chatobject/chatobject_test.go b/core/block/editor/chatobject/chatobject_test.go index fb7720bf6..572f63750 100644 --- a/core/block/editor/chatobject/chatobject_test.go +++ b/core/block/editor/chatobject/chatobject_test.go @@ -96,8 +96,10 @@ func newFixture(t *testing.T) *fixture { err := a.Start(ctx) require.NoError(t, err) + db, err := objectStore.GetCrdtDb(testSpaceId).Wait() + require.NoError(t, err) - object := New(sb, accountService, eventSender, objectStore.GetCrdtDb(testSpaceId).Wait(), repo, spaceIndex, subscriptions) + object := New(sb, accountService, eventSender, db, repo, spaceIndex, subscriptions) rawObject := object.(*storeObject) fx := &fixture{ diff --git a/core/block/editor/factory.go b/core/block/editor/factory.go index 1b8ca6c11..6727426b8 100644 --- a/core/block/editor/factory.go +++ b/core/block/editor/factory.go @@ -223,9 +223,17 @@ func (f *ObjectFactory) New(space smartblock.Space, sbType coresb.SmartBlockType case coresb.SmartBlockTypeDevicesObject: return NewDevicesObject(sb, f.deviceService), nil case coresb.SmartBlockTypeChatDerivedObject: - return chatobject.New(sb, f.accountService, f.eventSender, f.objectStore.GetCrdtDb(space.Id()).Wait(), f.chatRepositoryService, spaceIndex, f.chatSubscriptionService), nil + crdtDb, err := f.objectStore.GetCrdtDb(space.Id()).Wait() + if err != nil { + return nil, fmt.Errorf("get crdt db: %w", err) + } + return chatobject.New(sb, f.accountService, f.eventSender, crdtDb, f.chatRepositoryService, spaceIndex, f.chatSubscriptionService), nil case coresb.SmartBlockTypeAccountObject: - return accountobject.New(sb, f.accountService.Keys(), spaceIndex, f.layoutConverter, f.fileObjectService, f.objectStore.GetCrdtDb(space.Id()).Wait(), f.config), nil + crdtDb, err := f.objectStore.GetCrdtDb(space.Id()).Wait() + if err != nil { + return nil, fmt.Errorf("get crdt db: %w", err) + } + return accountobject.New(sb, f.accountService.Keys(), spaceIndex, f.layoutConverter, f.fileObjectService, crdtDb, f.config), nil default: return nil, fmt.Errorf("unexpected smartblock type: %v", sbType) } diff --git a/core/indexer/reindex.go b/core/indexer/reindex.go index dba074e8f..821345b47 100644 --- a/core/indexer/reindex.go +++ b/core/indexer/reindex.go @@ -242,7 +242,10 @@ func (i *indexer) reindexChats(ctx context.Context, space clientspace.Space) err if len(ids) == 0 { return nil } - db := i.store.GetCrdtDb(space.Id()).Wait() + db, err := i.store.GetCrdtDb(space.Id()).Wait() + if err != nil { + return fmt.Errorf("get crdt db: %w", err) + } txn, err := db.WriteTx(ctx) if err != nil { diff --git a/pkg/lib/localstore/objectstore/fixture.go b/pkg/lib/localstore/objectstore/fixture.go index 7cab5efe6..703a924dd 100644 --- a/pkg/lib/localstore/objectstore/fixture.go +++ b/pkg/lib/localstore/objectstore/fixture.go @@ -107,6 +107,7 @@ func NewStoreFixture(t testing.TB) *StoreFixture { spaceIndexes: map[string]spaceindex.Store{}, techSpaceIdProvider: &stubTechSpaceIdProvider{}, subManager: &spaceindex.SubscriptionManager{}, + crdtDbs: map[string]*AnystoreGetter{}, } t.Cleanup(func() { diff --git a/pkg/lib/localstore/objectstore/service.go b/pkg/lib/localstore/objectstore/service.go index 16787b038..020eada23 100644 --- a/pkg/lib/localstore/objectstore/service.go +++ b/pkg/lib/localstore/objectstore/service.go @@ -408,18 +408,18 @@ func (g *AnystoreGetter) Get() anystore.DB { return g.db } -func (g *AnystoreGetter) Wait() anystore.DB { +func (g *AnystoreGetter) Wait() (anystore.DB, error) { g.lock.Lock() defer g.lock.Unlock() if g.db != nil { - return g.db + return g.db, nil } dir := filepath.Join(g.objectStorePath, g.spaceId) err := ensureDirExists(dir) if err != nil { - return nil + return nil, fmt.Errorf("ensure dir exists: %w", err) } path := filepath.Join(dir, "crdt.db") db, err := anystore.Open(g.ctx, path, g.config) @@ -428,11 +428,11 @@ func (g *AnystoreGetter) Wait() anystore.DB { db, err = anystore.Open(g.ctx, path, g.config) } if err != nil { - return nil + return nil, fmt.Errorf("open: %w", err) } g.db = db - return db + return db, nil } func (s *dsObjectStore) GetCrdtDb(spaceId string) *AnystoreGetter { @@ -440,14 +440,17 @@ func (s *dsObjectStore) GetCrdtDb(spaceId string) *AnystoreGetter { defer s.crtdStoreLock.Unlock() db, ok := s.crdtDbs[spaceId] - if !ok { - db = &AnystoreGetter{ - spaceId: spaceId, - ctx: s.componentCtx, - config: s.getAnyStoreConfig(), - objectStorePath: s.objectStorePath, - } + if ok { + return db } + + db = &AnystoreGetter{ + spaceId: spaceId, + ctx: s.componentCtx, + config: s.getAnyStoreConfig(), + objectStorePath: s.objectStorePath, + } + s.crdtDbs[spaceId] = db return db } From f734eba124c33ad7271f6dd4a3725e1686a454e7 Mon Sep 17 00:00:00 2001 From: Sergey Date: Fri, 16 May 2025 14:37:01 +0200 Subject: [PATCH 063/164] Chats: refactor: use chatmodel in chatrepository --- .../block/chats/chatrepository/readhandler.go | 14 ++++---- core/block/chats/chatrepository/repository.go | 33 ++++++------------- 2 files changed, 17 insertions(+), 30 deletions(-) diff --git a/core/block/chats/chatrepository/readhandler.go b/core/block/chats/chatrepository/readhandler.go index b6182e393..590229695 100644 --- a/core/block/chats/chatrepository/readhandler.go +++ b/core/block/chats/chatrepository/readhandler.go @@ -18,7 +18,7 @@ type readMessagesHandler struct{} func (h readMessagesHandler) getUnreadFilter() query.Filter { return query.Not{ - Filter: query.Key{Path: []string{readKey}, Filter: query.NewComp(query.CompOpEq, true)}, + Filter: query.Key{Path: []string{chatmodel.ReadKey}, Filter: query.NewComp(query.CompOpEq, true)}, } } @@ -27,7 +27,7 @@ func (h readMessagesHandler) getMessagesFilter() query.Filter { } func (h readMessagesHandler) getReadKey() string { - return readKey + return chatmodel.ReadKey } func (h readMessagesHandler) readModifier(value bool) query.Modifier { @@ -46,22 +46,22 @@ type readMentionsHandler struct { func (h readMentionsHandler) getUnreadFilter() query.Filter { return query.And{ - query.Key{Path: []string{hasMentionKey}, Filter: query.NewComp(query.CompOpEq, true)}, - query.Key{Path: []string{mentionReadKey}, Filter: query.NewComp(query.CompOpEq, false)}, + query.Key{Path: []string{chatmodel.HasMentionKey}, Filter: query.NewComp(query.CompOpEq, true)}, + query.Key{Path: []string{chatmodel.MentionReadKey}, Filter: query.NewComp(query.CompOpEq, false)}, } } func (h readMentionsHandler) getMessagesFilter() query.Filter { - return query.Key{Path: []string{hasMentionKey}, Filter: query.NewComp(query.CompOpEq, true)} + return query.Key{Path: []string{chatmodel.HasMentionKey}, Filter: query.NewComp(query.CompOpEq, true)} } func (h readMentionsHandler) getReadKey() string { - return mentionReadKey + return chatmodel.MentionReadKey } func (h readMentionsHandler) readModifier(value bool) query.Modifier { return query.ModifyFunc(func(a *anyenc.Arena, v *anyenc.Value) (result *anyenc.Value, modified bool, err error) { - if v.GetBool(hasMentionKey) { + if v.GetBool(chatmodel.HasMentionKey) { oldValue := v.GetBool(h.getReadKey()) if oldValue != value { v.Set(h.getReadKey(), arenaNewBool(a, value)) diff --git a/core/block/chats/chatrepository/repository.go b/core/block/chats/chatrepository/repository.go index 7cedecc56..7854e5d18 100644 --- a/core/block/chats/chatrepository/repository.go +++ b/core/block/chats/chatrepository/repository.go @@ -30,19 +30,6 @@ const ( descStateId = "-stateId" ) -const ( - creatorKey = "creator" - createdAtKey = "createdAt" - modifiedAtKey = "modifiedAt" - reactionsKey = "reactions" - contentKey = "content" - readKey = "read" - mentionReadKey = "mentionRead" - hasMentionKey = "hasMention" - stateIdKey = "stateId" - orderKey = "_o" -) - type Service interface { app.ComponentRunnable @@ -171,7 +158,7 @@ func (s *repository) GetLastStateId(ctx context.Context) (string, error) { } func (s *repository) GetPrevOrderId(ctx context.Context, orderId string) (string, error) { - iter, err := s.collection.Find(query.Key{Path: []string{orderKey, "id"}, Filter: query.NewComp(query.CompOpLt, orderId)}). + iter, err := s.collection.Find(query.Key{Path: []string{chatmodel.OrderKey, "id"}, Filter: query.NewComp(query.CompOpLt, orderId)}). Sort(descOrder). Limit(1). Iter(ctx) @@ -185,7 +172,7 @@ func (s *repository) GetPrevOrderId(ctx context.Context, orderId string) (string if err != nil { return "", fmt.Errorf("read doc: %w", err) } - prevOrderId := doc.Value().GetString(orderKey, "id") + prevOrderId := doc.Value().GetString(chatmodel.OrderKey, "id") return prevOrderId, nil } @@ -255,7 +242,7 @@ func (s *repository) GetOldestOrderId(ctx context.Context, counterType chatmodel if err != nil { return "", fmt.Errorf("get doc: %w", err) } - orders := doc.Value().GetObject(orderKey) + orders := doc.Value().GetObject(chatmodel.OrderKey) if orders != nil { return orders.Get("id").GetString(), nil } @@ -273,7 +260,7 @@ func (s *repository) GetReadMessagesAfter(ctx context.Context, afterOrderId stri handler := newReadHandler(counterType) filter := query.And{ - query.Key{Path: []string{orderKey, "id"}, Filter: query.NewComp(query.CompOpGte, afterOrderId)}, + query.Key{Path: []string{chatmodel.OrderKey, "id"}, Filter: query.NewComp(query.CompOpGte, afterOrderId)}, query.Key{Path: []string{handler.getReadKey()}, Filter: query.NewComp(query.CompOpEq, true)}, } if handler.getMessagesFilter() != nil { @@ -301,11 +288,11 @@ func (s *repository) GetUnreadMessageIdsInRange(ctx context.Context, afterOrderI handler := newReadHandler(counterType) qry := query.And{ - query.Key{Path: []string{orderKey, "id"}, Filter: query.NewComp(query.CompOpGte, afterOrderId)}, - query.Key{Path: []string{orderKey, "id"}, Filter: query.NewComp(query.CompOpLte, beforeOrderId)}, + query.Key{Path: []string{chatmodel.OrderKey, "id"}, Filter: query.NewComp(query.CompOpGte, afterOrderId)}, + query.Key{Path: []string{chatmodel.OrderKey, "id"}, Filter: query.NewComp(query.CompOpLte, beforeOrderId)}, query.Or{ - query.Not{query.Key{Path: []string{stateIdKey}, Filter: query.Exists{}}}, - query.Key{Path: []string{stateIdKey}, Filter: query.NewComp(query.CompOpLte, lastStateId)}, + query.Not{query.Key{Path: []string{chatmodel.StateIdKey}, Filter: query.Exists{}}}, + query.Key{Path: []string{chatmodel.StateIdKey}, Filter: query.NewComp(query.CompOpLte, lastStateId)}, }, handler.getUnreadFilter(), } @@ -365,13 +352,13 @@ func (s *repository) GetMessages(ctx context.Context, req GetMessagesRequest) ([ if req.IncludeBoundary { operator = query.CompOpGte } - qry = s.collection.Find(query.Key{Path: []string{orderKey, "id"}, Filter: query.NewComp(operator, req.AfterOrderId)}).Sort(ascOrder).Limit(uint(req.Limit)) + qry = s.collection.Find(query.Key{Path: []string{chatmodel.OrderKey, "id"}, Filter: query.NewComp(operator, req.AfterOrderId)}).Sort(ascOrder).Limit(uint(req.Limit)) } else if req.BeforeOrderId != "" { operator := query.CompOpLt if req.IncludeBoundary { operator = query.CompOpLte } - qry = s.collection.Find(query.Key{Path: []string{orderKey, "id"}, Filter: query.NewComp(operator, req.BeforeOrderId)}).Sort(descOrder).Limit(uint(req.Limit)) + qry = s.collection.Find(query.Key{Path: []string{chatmodel.OrderKey, "id"}, Filter: query.NewComp(operator, req.BeforeOrderId)}).Sort(descOrder).Limit(uint(req.Limit)) } else { qry = s.collection.Find(nil).Sort(descOrder).Limit(uint(req.Limit)) } From e971cb747856f354784551ad2a9f2260be922d9e Mon Sep 17 00:00:00 2001 From: Sergey Date: Fri, 16 May 2025 18:26:12 +0200 Subject: [PATCH 064/164] GO-5585: Add ApiId relation --- pkg/lib/bundle/relation.gen.go | 17 ++++++++++++++++- pkg/lib/bundle/relations.json | 10 ++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/pkg/lib/bundle/relation.gen.go b/pkg/lib/bundle/relation.gen.go index 2d477d4c7..5d63feeed 100644 --- a/pkg/lib/bundle/relation.gen.go +++ b/pkg/lib/bundle/relation.gen.go @@ -9,7 +9,7 @@ import ( "github.com/anyproto/anytype-heart/pkg/lib/pb/model" ) -const RelationChecksum = "62a158a458a241cdf5b502bad800a109a8917ab9026826dd1274262c46b1f839" +const RelationChecksum = "6dc34f0f81133bac9628b57a814f1fdb90e4f52336a331b69e0ece56ddbf881a" const ( RelationKeyTag domain.RelationKey = "tag" RelationKeyCamera domain.RelationKey = "camera" @@ -160,6 +160,7 @@ const ( RelationKeyAutoWidgetTargets domain.RelationKey = "autoWidgetTargets" RelationKeyAutoWidgetDisabled domain.RelationKey = "autoWidgetDisabled" RelationKeyPluralName domain.RelationKey = "pluralName" + RelationKeyApiId domain.RelationKey = "apiId" ) var ( @@ -190,6 +191,20 @@ var ( ReadOnlyRelation: true, Scope: model.Relation_type, }, + RelationKeyApiId: { + + DataSource: model.Relation_details, + Description: "Identifier to use in intergrations with Anytype API", + Format: model.RelationFormat_longtext, + Hidden: true, + Id: "_brapiId", + Key: "apiId", + MaxCount: 1, + Name: "API ID", + ReadOnly: false, + ReadOnlyRelation: true, + Scope: model.Relation_type, + }, RelationKeyArtist: { DataSource: model.Relation_details, diff --git a/pkg/lib/bundle/relations.json b/pkg/lib/bundle/relations.json index c546db0c8..73a52cdc5 100644 --- a/pkg/lib/bundle/relations.json +++ b/pkg/lib/bundle/relations.json @@ -1535,5 +1535,15 @@ "name": "Plural name", "readonly": false, "source": "details" + }, + { + "description": "Identifier to use in intergrations with Anytype API", + "format": "longtext", + "hidden": true, + "key": "apiId", + "maxCount": 1, + "name": "API ID", + "readonly": false, + "source": "details" } ] From 93956ce9e879476d8e9cb74b58c157350a4dce6f Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Fri, 16 May 2025 19:59:44 +0200 Subject: [PATCH 065/164] GO-5589: Fix request body format for AddObjectsToList endpoint --- core/api/docs/openapi.json | 21 +++++++++++++++++---- core/api/docs/openapi.yaml | 15 ++++++++++++--- core/api/handler/list.go | 29 +++++++++++++++-------------- core/api/model/list.go | 4 ++++ core/api/service/list.go | 4 ++-- 5 files changed, 50 insertions(+), 23 deletions(-) diff --git a/core/api/docs/openapi.json b/core/api/docs/openapi.json index 0e0b9de18..707b9be08 100644 --- a/core/api/docs/openapi.json +++ b/core/api/docs/openapi.json @@ -1,6 +1,22 @@ { "components": { "schemas": { + "apimodel.AddObjectsToListRequest": { + "properties": { + "objects": { + "description": "The list of object IDs to add to the list", + "example": [ + "[\"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ\"]" + ], + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": false + } + }, + "type": "object" + }, "apimodel.CheckboxPropertyLinkValue": { "properties": { "checkbox": { @@ -2607,10 +2623,7 @@ "content": { "application/json": { "schema": { - "items": { - "type": "string" - }, - "type": "array" + "$ref": "#/components/schemas/apimodel.AddObjectsToListRequest" } } }, diff --git a/core/api/docs/openapi.yaml b/core/api/docs/openapi.yaml index 564b9fc9c..fc1709176 100644 --- a/core/api/docs/openapi.yaml +++ b/core/api/docs/openapi.yaml @@ -1,5 +1,16 @@ components: schemas: + apimodel.AddObjectsToListRequest: + properties: + objects: + description: The list of object IDs to add to the list + example: + - '["bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ"]' + items: + type: string + type: array + uniqueItems: false + type: object apimodel.CheckboxPropertyLinkValue: properties: checkbox: @@ -1882,9 +1893,7 @@ paths: content: application/json: schema: - items: - type: string - type: array + $ref: '#/components/schemas/apimodel.AddObjectsToListRequest' description: The list of object IDs to add to the list required: true responses: diff --git a/core/api/handler/list.go b/core/api/handler/list.go index 60a260ca4..56573cff2 100644 --- a/core/api/handler/list.go +++ b/core/api/handler/list.go @@ -5,6 +5,7 @@ import ( "github.com/gin-gonic/gin" + apimodel "github.com/anyproto/anytype-heart/core/api/model" "github.com/anyproto/anytype-heart/core/api/pagination" "github.com/anyproto/anytype-heart/core/api/service" "github.com/anyproto/anytype-heart/core/api/util" @@ -106,16 +107,16 @@ func GetObjectsInListHandler(s *service.Service) gin.HandlerFunc { // @Tags Lists // @Accept json // @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) -// @Param space_id path string true "The ID of the space to which the list belongs" -// @Param list_id path string true "The ID of the list to which objects will be added" -// @Param objects body []string true "The list of object IDs to add to the list" -// @Success 200 {object} string "Objects added successfully" -// @Failure 400 {object} util.ValidationError "Bad request" -// @Failure 401 {object} util.UnauthorizedError "Unauthorized" -// @Failure 404 {object} util.NotFoundError "Not found" -// @Failure 429 {object} util.RateLimitError "Rate limit exceeded" -// @Failure 500 {object} util.ServerError "Internal server error" +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) +// @Param space_id path string true "The ID of the space to which the list belongs" +// @Param list_id path string true "The ID of the list to which objects will be added" +// @Param objects body apimodel.AddObjectsToListRequest true "The list of object IDs to add to the list" +// @Success 200 {object} string "Objects added successfully" +// @Failure 400 {object} util.ValidationError "Bad request" +// @Failure 401 {object} util.UnauthorizedError "Unauthorized" +// @Failure 404 {object} util.NotFoundError "Not found" +// @Failure 429 {object} util.RateLimitError "Rate limit exceeded" +// @Failure 500 {object} util.ServerError "Internal server error" // @Security bearerauth // @Router /v1/spaces/{space_id}/lists/{list_id}/objects [post] func AddObjectsToListHandler(s *service.Service) gin.HandlerFunc { @@ -123,14 +124,14 @@ func AddObjectsToListHandler(s *service.Service) gin.HandlerFunc { spaceId := c.Param("space_id") listId := c.Param("list_id") - objects := []string{} - if err := c.ShouldBindJSON(&objects); err != nil { + request := apimodel.AddObjectsToListRequest{} + if err := c.ShouldBindJSON(&request); err != nil { apiErr := util.CodeToAPIError(http.StatusBadRequest, err.Error()) c.JSON(http.StatusBadRequest, apiErr) return } - err := s.AddObjectsToList(c, spaceId, listId, objects) + err := s.AddObjectsToList(c, spaceId, listId, request) code := util.MapErrorCode(err, util.ErrToCode(service.ErrFailedAddObjectsToList, http.StatusInternalServerError), ) @@ -153,7 +154,7 @@ func AddObjectsToListHandler(s *service.Service) gin.HandlerFunc { // @Tags Lists // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) -// @Param space_id path string true "The ID of the space to which the list belongs" +// @Param space_id path string true "The ID of the space to which the list belongs; retrieve from ListSpaces endpoint" // @Param list_id path string true "The ID of the list from which the object will be removed" // @Param object_id path string true "The ID of the object to remove from the list" // @Success 200 {object} string "Objects removed successfully" diff --git a/core/api/model/list.go b/core/api/model/list.go index f8a58a2e0..253b01056 100644 --- a/core/api/model/list.go +++ b/core/api/model/list.go @@ -1,5 +1,9 @@ package apimodel +type AddObjectsToListRequest struct { + Objects []string `json:"objects" example:"[\"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ\"]"` // The list of object IDs to add to the list +} + type View struct { Id string `json:"id" example:"67bf3f21cda9134102e2422c"` // The id of the view Name string `json:"name" example:"All"` // The name of the view diff --git a/core/api/service/list.go b/core/api/service/list.go index ff74ad376..0a1fc69e6 100644 --- a/core/api/service/list.go +++ b/core/api/service/list.go @@ -218,10 +218,10 @@ func (s *Service) GetObjectsInList(ctx context.Context, spaceId string, listId s } // AddObjectsToList adds objects to a list -func (s *Service) AddObjectsToList(ctx context.Context, spaceId string, listId string, objectIds []string) error { +func (s *Service) AddObjectsToList(ctx context.Context, _ string, listId string, request apimodel.AddObjectsToListRequest) error { resp := s.mw.ObjectCollectionAdd(ctx, &pb.RpcObjectCollectionAddRequest{ ContextId: listId, - ObjectIds: objectIds, + ObjectIds: request.Objects, }) if resp.Error != nil && resp.Error.Code != pb.RpcObjectCollectionAddResponseError_NULL { From bc81bdc69b14cb94522006094fe7f2ed18103240 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Fri, 16 May 2025 20:00:25 +0200 Subject: [PATCH 066/164] GO-5589: Fix some endpoint descriptions --- core/api/docs/docs.go | 4 ++-- core/api/docs/openapi.json | 12 +++++++----- core/api/docs/openapi.yaml | 13 ++++++++----- core/api/handler/search.go | 2 +- core/api/model/icon.go | 3 ++- core/api/model/property.go | 18 +++++++++--------- 6 files changed, 29 insertions(+), 23 deletions(-) diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go index d180ff660..42a5a6220 100644 --- a/core/api/docs/docs.go +++ b/core/api/docs/docs.go @@ -6,10 +6,10 @@ import "github.com/swaggo/swag/v2" const docTemplate = `{ "schemes": {{ marshal .Schemes }}, - "components": {"schemas":{"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"creator","type":"string"},"objects":{"description":"The object values of the property","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to search for, specified by their key","example":["page","task","bookmark"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"status","type":"string"},"select":{"description":"The selected tag value of the property","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TokenResponse":{"properties":{"app_key":{"description":"The app key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, + "components": {"schemas":{"apimodel.AddObjectsToListRequest":{"properties":{"objects":{"description":"The list of object IDs to add to the list","example":["[\"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ\"]"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["emoji","file","icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"creator","type":"string"},"objects":{"description":"The object values of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to search for, specified by their key","example":["page","task","bookmark"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"status","type":"string"},"select":{"description":"The selected tag value of the property","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TokenResponse":{"properties":{"app_key":{"description":"The app key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, "info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-api/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"}, "externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"}, - "paths": {"/v1/auth/display_code":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid ` + "`" + `app_name` + "`" + `, the server issues a unique ` + "`" + `challenge_id` + "`" + ` and displays a short code within the Anytype Desktop. The ` + "`" + `challenge_id` + "`" + ` must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"create_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.DisplayCodeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start challenge","tags":["Auth"]}},"/v1/auth/token":{"post":{"description":"After receiving a ` + "`" + `challenge_id` + "`" + ` from the ` + "`" + `display_code` + "`" + ` endpoint, the client calls this endpoint to provide the corresponding 4-digit code along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent ` + "`" + `app_key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.","operationId":"solve_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TokenResponse"}}},"description":"The app key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Solve challenge","tags":["Auth"]}},"/v1/search":{"post":{"description":"Executes a global search over all spaces accessible to the authenticated user. The request body must specify the ` + "`" + `query` + "`" + ` text (currently matching only name and snippet of an object), optional filters on types (e.g., \"page\", \"task\"), and sort directives (default: descending by last modified date). Pagination is controlled via ` + "`" + `offset` + "`" + ` and ` + "`" + `limit` + "`" + ` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"search_global","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/v1/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"list_spaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"create_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/v1/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"get_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"update_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"add_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"The list of object IDs to add to the list","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"remove_list_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"get_list_views","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"get_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/v1/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"list_members","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/v1/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"get_member","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/v1/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"create_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/v1/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"get_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"update_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/v1/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"list_properties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"create_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"get_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"update_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"list_tags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"create_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"get_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"update_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/v1/spaces/{space_id}/search":{"post":{"description":"Performs a search within a single space (specified by the ` + "`" + `space_id` + "`" + ` path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search ` + "`" + `query` + "`" + `, ` + "`" + `types` + "`" + `, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"search_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/v1/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"list_types","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new object type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"create_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an object type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"get_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing object type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"update_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"list_templates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to retrieve templates for","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/v1/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"get_template","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to which the template belongs","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, + "paths": {"/v1/auth/display_code":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid ` + "`" + `app_name` + "`" + `, the server issues a unique ` + "`" + `challenge_id` + "`" + ` and displays a short code within the Anytype Desktop. The ` + "`" + `challenge_id` + "`" + ` must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"create_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.DisplayCodeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start challenge","tags":["Auth"]}},"/v1/auth/token":{"post":{"description":"After receiving a ` + "`" + `challenge_id` + "`" + ` from the ` + "`" + `display_code` + "`" + ` endpoint, the client calls this endpoint to provide the corresponding 4-digit code along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent ` + "`" + `app_key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.","operationId":"solve_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TokenResponse"}}},"description":"The app key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Solve challenge","tags":["Auth"]}},"/v1/search":{"post":{"description":"Executes a global search over all spaces accessible to the authenticated user. The request body must specify the ` + "`" + `query` + "`" + ` text (currently matching only name and snippet of an object), optional filters on types (e.g., \"page\", \"task\"), and sort directives (default: descending by last modified date). Pagination is controlled via ` + "`" + `offset` + "`" + ` and ` + "`" + `limit` + "`" + ` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"search_global","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/v1/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"list_spaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"create_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/v1/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"get_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"update_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"add_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.AddObjectsToListRequest"}}},"description":"The list of object IDs to add to the list","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"remove_list_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; retrieve from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"get_list_views","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"get_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/v1/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"list_members","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/v1/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"get_member","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/v1/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"create_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/v1/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"get_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"update_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/v1/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"list_properties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"create_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"get_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"update_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"list_tags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"create_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"get_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"update_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/v1/spaces/{space_id}/search":{"post":{"description":"Performs a search within a single space (specified by the ` + "`" + `space_id` + "`" + ` path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search ` + "`" + `query` + "`" + `, ` + "`" + `types` + "`" + `, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"search_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in; retrieve from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/v1/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"list_types","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new object type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"create_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an object type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"get_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing object type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"update_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"list_templates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to retrieve templates for","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/v1/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"get_template","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to which the template belongs","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, "openapi": "3.1.0", "servers": [ {"url":"http://localhost:31009"} diff --git a/core/api/docs/openapi.json b/core/api/docs/openapi.json index 707b9be08..9651c6f15 100644 --- a/core/api/docs/openapi.json +++ b/core/api/docs/openapi.json @@ -384,7 +384,7 @@ "files": { "description": "The file values of the property", "example": [ - "['fileId']" + "['file_id']" ], "items": { "type": "string" @@ -483,6 +483,8 @@ "apimodel.IconFormat": { "description": "The format of the icon", "enum": [ + "emoji", + "file", "icon" ], "type": "string", @@ -837,7 +839,7 @@ "objects": { "description": "The object values of the property", "example": [ - "['objectId']" + "['object_id']" ], "items": { "type": "string" @@ -876,7 +878,7 @@ "objects": { "description": "The object values of the property", "example": [ - "['objectId']" + "['object_id']" ], "items": { "type": "string" @@ -2719,7 +2721,7 @@ } }, { - "description": "The ID of the space to which the list belongs", + "description": "The ID of the space to which the list belongs; retrieve from ListSpaces endpoint", "in": "path", "name": "space_id", "required": true, @@ -4860,7 +4862,7 @@ } }, { - "description": "The ID of the space to search in", + "description": "The ID of the space to search in; retrieve from ListSpaces endpoint", "in": "path", "name": "space_id", "required": true, diff --git a/core/api/docs/openapi.yaml b/core/api/docs/openapi.yaml index fc1709176..7d5006433 100644 --- a/core/api/docs/openapi.yaml +++ b/core/api/docs/openapi.yaml @@ -287,7 +287,7 @@ components: files: description: The file values of the property example: - - '[''fileId'']' + - '[''file_id'']' items: type: string type: array @@ -360,6 +360,8 @@ components: apimodel.IconFormat: description: The format of the icon enum: + - emoji + - file - icon type: string x-enum-varnames: @@ -632,7 +634,7 @@ components: objects: description: The object values of the property example: - - '[''objectId'']' + - '[''object_id'']' items: type: string type: array @@ -661,7 +663,7 @@ components: objects: description: The object values of the property example: - - '[''objectId'']' + - '[''object_id'']' items: type: string type: array @@ -1953,7 +1955,8 @@ paths: schema: default: "2025-05-20" type: string - - description: The ID of the space to which the list belongs + - description: The ID of the space to which the list belongs; retrieve from + ListSpaces endpoint in: path name: space_id required: true @@ -3382,7 +3385,7 @@ paths: schema: default: "2025-05-20" type: string - - description: The ID of the space to search in + - description: The ID of the space to search in; retrieve from ListSpaces endpoint in: path name: space_id required: true diff --git a/core/api/handler/search.go b/core/api/handler/search.go index be7639d23..3bdfc6acc 100644 --- a/core/api/handler/search.go +++ b/core/api/handler/search.go @@ -64,7 +64,7 @@ func GlobalSearchHandler(s *service.Service) gin.HandlerFunc { // @Accept json // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) -// @Param space_id path string true "The ID of the space to search in" +// @Param space_id path string true "The ID of the space to search in; retrieve from ListSpaces endpoint" // @Param offset query int false "The number of items to skip before starting to collect the result set" default(0) // @Param limit query int false "The number of items to return" default(100) maximum(1000) // @Param request body apimodel.SearchRequest true "The search parameters used to filter and sort the results" diff --git a/core/api/model/icon.go b/core/api/model/icon.go index fccbc62f1..5377166fb 100644 --- a/core/api/model/icon.go +++ b/core/api/model/icon.go @@ -162,8 +162,9 @@ type FileIcon struct { func (FileIcon) isIcon() {} +// TODO: the enum gen for IconFormat through swaggo is bugged; only the last enum (before: "icon") is used type NamedIcon struct { - Format IconFormat `json:"format" enums:"icon"` // The format of the icon + Format IconFormat `json:"format" enums:"emoji,file,icon"` // The format of the icon Name string `json:"name" example:"document"` // The name of the icon Color *Color `json:"color,omitempty" example:"yellow" enums:"grey,yellow,orange,red,pink,purple,blue,ice,teal,lime"` // The color of the icon } diff --git a/core/api/model/property.go b/core/api/model/property.go index 9afc35bff..e70ce5b01 100644 --- a/core/api/model/property.go +++ b/core/api/model/property.go @@ -212,10 +212,10 @@ func (DatePropertyValue) isPropertyWithValue() {} type FilesPropertyValue struct { PropertyBase - Key string `json:"key" example:"files"` // The key of the property - Name string `json:"name" example:"Files"` // The name of the property - Format PropertyFormat `json:"format" enums:"files"` // The format of the property - Files []string `json:"files" example:"['fileId']"` // The file values of the property + Key string `json:"key" example:"files"` // The key of the property + Name string `json:"name" example:"Files"` // The name of the property + Format PropertyFormat `json:"format" enums:"files"` // The format of the property + Files []string `json:"files" example:"['file_id']"` // The file values of the property } func (FilesPropertyValue) isPropertyWithValue() {} @@ -262,10 +262,10 @@ func (PhonePropertyValue) isPropertyWithValue() {} type ObjectsPropertyValue struct { PropertyBase - Key string `json:"key" example:"creator"` // The key of the property - Name string `json:"name" example:"Created by"` // The name of the property - Format PropertyFormat `json:"format" enums:"objects"` // The format of the property - Objects []string `json:"objects" example:"['objectId']"` // The object values of the property + Key string `json:"key" example:"creator"` // The key of the property + Name string `json:"name" example:"Created by"` // The name of the property + Format PropertyFormat `json:"format" enums:"objects"` // The format of the property + Objects []string `json:"objects" example:"['object_id']"` // The object values of the property } func (ObjectsPropertyValue) isPropertyWithValue() {} @@ -445,7 +445,7 @@ func (PhonePropertyLinkValue) isPropertyLinkWithValue() {} type ObjectsPropertyLinkValue struct { Key string `json:"key" example:"creator"` Format PropertyFormat `json:"format" enums:"objects"` - Objects []string `json:"objects" example:"['objectId']"` // The object values of the property + Objects []string `json:"objects" example:"['object_id']"` // The object values of the property } func (ObjectsPropertyLinkValue) isPropertyLinkWithValue() {} From d104aab6c99f1a783796b82e1bb3aa45b95ca581 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Fri, 16 May 2025 22:55:05 +0200 Subject: [PATCH 067/164] GO-5589: Set origin to 'API' for created property, tag, and type --- core/api/service/property.go | 1 + core/api/service/tag.go | 1 + core/api/service/type.go | 11 ++++++----- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/core/api/service/property.go b/core/api/service/property.go index 941d94395..65dac2e6a 100644 --- a/core/api/service/property.go +++ b/core/api/service/property.go @@ -193,6 +193,7 @@ func (s *Service) CreateProperty(ctx context.Context, spaceId string, request ap Fields: map[string]*types.Value{ bundle.RelationKeyName.String(): pbtypes.String(request.Name), bundle.RelationKeyRelationFormat.String(): pbtypes.Int64(int64(PropertyFormatToRelationFormat[request.Format])), + bundle.RelationKeyOrigin.String(): pbtypes.Int64(int64(model.ObjectOrigin_api)), }, } diff --git a/core/api/service/tag.go b/core/api/service/tag.go index cd71e3fed..5bd862819 100644 --- a/core/api/service/tag.go +++ b/core/api/service/tag.go @@ -110,6 +110,7 @@ func (s *Service) CreateTag(ctx context.Context, spaceId string, propertyId stri bundle.RelationKeyRelationKey.String(): pbtypes.String(rk), bundle.RelationKeyName.String(): pbtypes.String(s.sanitizedString(request.Name)), bundle.RelationKeyRelationOptionColor.String(): pbtypes.String(apimodel.ColorToColorOption[request.Color]), + bundle.RelationKeyOrigin.String(): pbtypes.Int64(int64(model.ObjectOrigin_api)), }, } diff --git a/core/api/service/type.go b/core/api/service/type.go index 950dda412..b667f4cdd 100644 --- a/core/api/service/type.go +++ b/core/api/service/type.go @@ -262,11 +262,12 @@ func (s *Service) getTypeFromMap(details *types.Struct, typeMap map[string]apimo // buildTypeDetails builds the type details from the CreateTypeRequest. func (s *Service) buildTypeDetails(ctx context.Context, spaceId string, request apimodel.CreateTypeRequest) (*types.Struct, error) { - fields := make(map[string]*types.Value) - - fields[bundle.RelationKeyName.String()] = pbtypes.String(s.sanitizedString(request.Name)) - fields[bundle.RelationKeyPluralName.String()] = pbtypes.String(s.sanitizedString(request.PluralName)) - fields[bundle.RelationKeyRecommendedLayout.String()] = pbtypes.Int64(int64(s.typeLayoutToObjectTypeLayout(request.Layout))) + fields := map[string]*types.Value{ + bundle.RelationKeyName.String(): pbtypes.String(s.sanitizedString(request.Name)), + bundle.RelationKeyPluralName.String(): pbtypes.String(s.sanitizedString(request.PluralName)), + bundle.RelationKeyRecommendedLayout.String(): pbtypes.Int64(int64(s.typeLayoutToObjectTypeLayout(request.Layout))), + bundle.RelationKeyOrigin.String(): pbtypes.Int64(int64(model.ObjectOrigin_api)), + } iconFields, err := s.processIconFields(ctx, spaceId, request.Icon) if err != nil { From 4f2700f62b2c6f80b0fbd64cd9494def82dae7cc Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Fri, 16 May 2025 22:58:20 +0200 Subject: [PATCH 068/164] GO-5589: Fix AddObjectsToList tests --- core/api/service/list_test.go | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/core/api/service/list_test.go b/core/api/service/list_test.go index 774e13f06..c23c5578d 100644 --- a/core/api/service/list_test.go +++ b/core/api/service/list_test.go @@ -8,6 +8,7 @@ import ( "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" + apimodel "github.com/anyproto/anytype-heart/core/api/model" "github.com/anyproto/anytype-heart/pb" "github.com/anyproto/anytype-heart/pkg/lib/bundle" "github.com/anyproto/anytype-heart/pkg/lib/pb/model" @@ -1149,19 +1150,19 @@ func TestListService_AddObjectsToList(t *testing.T) { // given ctx := context.Background() fx := newFixture(t) - objectIds := []string{"obj-1", "obj-2"} + request := apimodel.AddObjectsToListRequest{Objects: []string{"obj-1", "obj-2"}} fx.mwMock. On("ObjectCollectionAdd", mock.Anything, &pb.RpcObjectCollectionAddRequest{ ContextId: mockedListId, - ObjectIds: objectIds, + ObjectIds: request.Objects, }). Return(&pb.RpcObjectCollectionAddResponse{ Error: &pb.RpcObjectCollectionAddResponseError{Code: pb.RpcObjectCollectionAddResponseError_NULL}, }, nil).Once() // when - err := fx.service.AddObjectsToList(ctx, mockedSpaceId, mockedListId, objectIds) + err := fx.service.AddObjectsToList(ctx, mockedSpaceId, mockedListId, request) // then require.NoError(t, err) @@ -1171,19 +1172,19 @@ func TestListService_AddObjectsToList(t *testing.T) { // given ctx := context.Background() fx := newFixture(t) - objectIds := []string{"obj-1"} + request := apimodel.AddObjectsToListRequest{Objects: []string{"obj-1"}} fx.mwMock. On("ObjectCollectionAdd", mock.Anything, &pb.RpcObjectCollectionAddRequest{ ContextId: mockedListId, - ObjectIds: objectIds, + ObjectIds: request.Objects, }). Return(&pb.RpcObjectCollectionAddResponse{ Error: &pb.RpcObjectCollectionAddResponseError{Code: pb.RpcObjectCollectionAddResponseError_UNKNOWN_ERROR}, }, nil).Once() // when - err := fx.service.AddObjectsToList(ctx, mockedSpaceId, mockedListId, objectIds) + err := fx.service.AddObjectsToList(ctx, mockedSpaceId, mockedListId, request) // then require.ErrorIs(t, err, ErrFailedAddObjectsToList) From 80e2b5396a33532e4eef766ef370d21ecac665c2 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Fri, 16 May 2025 23:07:15 +0200 Subject: [PATCH 069/164] GO-5589: Refactor context usage in all mw calling functions --- core/api/service/list.go | 6 +++--- core/api/service/member.go | 2 +- core/api/service/object.go | 12 ++++++------ core/api/service/property.go | 14 +++++++------- core/api/service/search.go | 14 +++++++------- core/api/service/space.go | 18 +++++++++--------- core/api/service/tag.go | 8 ++++---- core/api/service/template.go | 12 ++++++------ core/api/service/type.go | 16 ++++++++-------- 9 files changed, 51 insertions(+), 51 deletions(-) diff --git a/core/api/service/list.go b/core/api/service/list.go index 0a1fc69e6..647d53435 100644 --- a/core/api/service/list.go +++ b/core/api/service/list.go @@ -197,15 +197,15 @@ func (s *Service) GetObjectsInList(ctx context.Context, spaceId string, listId s total := int(searchResp.Counters.Total) hasMore := searchResp.Counters.Total > int64(offset+limit) - propertyMap, err := s.getPropertyMapFromStore(spaceId, true) + propertyMap, err := s.getPropertyMapFromStore(ctx, spaceId, true) if err != nil { return nil, 0, false, err } - typeMap, err := s.getTypeMapFromStore(spaceId, propertyMap, false) + typeMap, err := s.getTypeMapFromStore(ctx, spaceId, propertyMap, false) if err != nil { return nil, 0, false, err } - tagMap, err := s.getTagMapFromStore(spaceId) + tagMap, err := s.getTagMapFromStore(ctx, spaceId) if err != nil { return nil, 0, false, err } diff --git a/core/api/service/member.go b/core/api/service/member.go index 15f6b5fdb..312f0aca7 100644 --- a/core/api/service/member.go +++ b/core/api/service/member.go @@ -107,7 +107,7 @@ func (s *Service) GetMember(ctx context.Context, spaceId string, memberId string relationKey = bundle.RelationKeyIdentity } - resp := s.mw.ObjectSearch(context.Background(), &pb.RpcObjectSearchRequest{ + resp := s.mw.ObjectSearch(ctx, &pb.RpcObjectSearchRequest{ SpaceId: spaceId, Filters: []*model.BlockContentDataviewFilter{ { diff --git a/core/api/service/object.go b/core/api/service/object.go index e4fcaace8..d1c9f76bc 100644 --- a/core/api/service/object.go +++ b/core/api/service/object.go @@ -71,15 +71,15 @@ func (s *Service) ListObjects(ctx context.Context, spaceId string, offset int, l objects = make([]apimodel.Object, 0, len(paginatedObjects)) // pre-fetch properties, types and tags to fill the objects - propertyMap, err := s.getPropertyMapFromStore(spaceId, true) + propertyMap, err := s.getPropertyMapFromStore(ctx, spaceId, true) if err != nil { return nil, 0, false, err } - typeMap, err := s.getTypeMapFromStore(spaceId, propertyMap, false) + typeMap, err := s.getTypeMapFromStore(ctx, spaceId, propertyMap, false) if err != nil { return nil, 0, false, err } - tagMap, err := s.getTagMapFromStore(spaceId) + tagMap, err := s.getTagMapFromStore(ctx, spaceId) if err != nil { return nil, 0, false, err } @@ -111,15 +111,15 @@ func (s *Service) GetObject(ctx context.Context, spaceId string, objectId string } } - propertyMap, err := s.getPropertyMapFromStore(spaceId, true) + propertyMap, err := s.getPropertyMapFromStore(ctx, spaceId, true) if err != nil { return apimodel.ObjectWithBody{}, err } - typeMap, err := s.getTypeMapFromStore(spaceId, propertyMap, false) + typeMap, err := s.getTypeMapFromStore(ctx, spaceId, propertyMap, false) if err != nil { return apimodel.ObjectWithBody{}, err } - tagMap, err := s.getTagMapFromStore(spaceId) + tagMap, err := s.getTagMapFromStore(ctx, spaceId) if err != nil { return apimodel.ObjectWithBody{}, err } diff --git a/core/api/service/property.go b/core/api/service/property.go index 65dac2e6a..45d3cbab8 100644 --- a/core/api/service/property.go +++ b/core/api/service/property.go @@ -106,7 +106,7 @@ var RelationFormatToPropertyFormat = map[model.RelationFormat]apimodel.PropertyF // ListProperties returns a list of properties for a specific space. func (s *Service) ListProperties(ctx context.Context, spaceId string, offset int, limit int) (properties []apimodel.Property, total int, hasMore bool, err error) { - resp := s.mw.ObjectSearch(context.Background(), &pb.RpcObjectSearchRequest{ + resp := s.mw.ObjectSearch(ctx, &pb.RpcObjectSearchRequest{ SpaceId: spaceId, Filters: []*model.BlockContentDataviewFilter{ { @@ -161,7 +161,7 @@ func (s *Service) ListProperties(ctx context.Context, spaceId string, offset int // GetProperty retrieves a single property by its ID in a specific space. func (s *Service) GetProperty(ctx context.Context, spaceId string, propertyId string) (apimodel.Property, error) { - resp := s.mw.ObjectShow(context.Background(), &pb.RpcObjectShowRequest{ + resp := s.mw.ObjectShow(ctx, &pb.RpcObjectShowRequest{ SpaceId: spaceId, ObjectId: propertyId, }) @@ -268,7 +268,7 @@ func (s *Service) processProperties(ctx context.Context, spaceId string, entries if len(entries) == 0 { return fields, nil } - propertyMap, err := s.getPropertyMapFromStore(spaceId, false) + propertyMap, err := s.getPropertyMapFromStore(ctx, spaceId, false) if err != nil { return nil, err } @@ -502,11 +502,11 @@ func (s *Service) getRecommendedPropertiesFromLists(featured, regular *types.Lis // GetPropertyMapsFromStore retrieves all properties for all spaces. // Property entries can also be keyed by property id. Required for filling types with properties, as recommended properties are referenced by id and not key. -func (s *Service) GetPropertyMapsFromStore(spaceIds []string, keyByPropertyId bool) (map[string]map[string]apimodel.Property, error) { +func (s *Service) GetPropertyMapsFromStore(ctx context.Context, spaceIds []string, keyByPropertyId bool) (map[string]map[string]apimodel.Property, error) { spacesToProperties := make(map[string]map[string]apimodel.Property, len(spaceIds)) for _, spaceId := range spaceIds { - propertyMap, err := s.getPropertyMapFromStore(spaceId, keyByPropertyId) + propertyMap, err := s.getPropertyMapFromStore(ctx, spaceId, keyByPropertyId) if err != nil { return nil, err } @@ -518,8 +518,8 @@ func (s *Service) GetPropertyMapsFromStore(spaceIds []string, keyByPropertyId bo // getPropertyMapFromStore retrieves all properties for a specific space // Property entries can also be keyed by property id. Required for filling types with properties, as recommended properties are referenced by id and not key. -func (s *Service) getPropertyMapFromStore(spaceId string, keyByPropertyId bool) (map[string]apimodel.Property, error) { - resp := s.mw.ObjectSearch(context.Background(), &pb.RpcObjectSearchRequest{ +func (s *Service) getPropertyMapFromStore(ctx context.Context, spaceId string, keyByPropertyId bool) (map[string]apimodel.Property, error) { + resp := s.mw.ObjectSearch(ctx, &pb.RpcObjectSearchRequest{ SpaceId: spaceId, Filters: []*model.BlockContentDataviewFilter{ { diff --git a/core/api/service/search.go b/core/api/service/search.go index c913f20f2..cd45561b2 100644 --- a/core/api/service/search.go +++ b/core/api/service/search.go @@ -22,7 +22,7 @@ var ( // GlobalSearch retrieves a paginated list of objects from all spaces that match the search parameters. func (s *Service) GlobalSearch(ctx context.Context, request apimodel.SearchRequest, offset int, limit int) (objects []apimodel.Object, total int, hasMore bool, err error) { - spaceIds, err := s.GetAllSpaceIds() + spaceIds, err := s.GetAllSpaceIds(ctx) if err != nil { return nil, 0, false, err } @@ -32,15 +32,15 @@ func (s *Service) GlobalSearch(ctx context.Context, request apimodel.SearchReque sorts, criterionToSortAfter := s.prepareSorts(request.Sort) // pre-fetch properties, types and tags to fill the objects - propertyMaps, err := s.GetPropertyMapsFromStore(spaceIds, true) + propertyMaps, err := s.GetPropertyMapsFromStore(ctx, spaceIds, true) if err != nil { return nil, 0, false, err } - typeMaps, err := s.getTypeMapsFromStore(spaceIds, propertyMaps, true) + typeMaps, err := s.getTypeMapsFromStore(ctx, spaceIds, propertyMaps, true) if err != nil { return nil, 0, false, err } - tagMap, err := s.getTagMapsFromStore(spaceIds) + tagMap, err := s.getTagMapsFromStore(ctx, spaceIds) if err != nil { return nil, 0, false, err } @@ -109,15 +109,15 @@ func (s *Service) Search(ctx context.Context, spaceId string, request apimodel.S queryFilters := s.prepareQueryFilter(request.Query) // pre-fetch properties and types to fill the objects - propertyMap, err := s.getPropertyMapFromStore(spaceId, true) + propertyMap, err := s.getPropertyMapFromStore(ctx, spaceId, true) if err != nil { return nil, 0, false, err } - typeMap, err := s.getTypeMapFromStore(spaceId, propertyMap, true) + typeMap, err := s.getTypeMapFromStore(ctx, spaceId, propertyMap, true) if err != nil { return nil, 0, false, err } - tagMap, err := s.getTagMapFromStore(spaceId) + tagMap, err := s.getTagMapFromStore(ctx, spaceId) if err != nil { return nil, 0, false, err } diff --git a/core/api/service/space.go b/core/api/service/space.go index 3d8643af7..5c45b6021 100644 --- a/core/api/service/space.go +++ b/core/api/service/space.go @@ -73,7 +73,7 @@ func (s *Service) ListSpaces(ctx context.Context, offset int, limit int) (spaces spaces = make([]apimodel.Space, 0, len(paginatedRecords)) for _, record := range paginatedRecords { - workspace, err := s.getSpaceInfo(record.Fields[bundle.RelationKeyTargetSpaceId.String()].GetStringValue()) + workspace, err := s.getSpaceInfo(ctx, record.Fields[bundle.RelationKeyTargetSpaceId.String()].GetStringValue()) if err != nil { return nil, 0, false, err } @@ -117,7 +117,7 @@ func (s *Service) GetSpace(ctx context.Context, spaceId string) (apimodel.Space, return apimodel.Space{}, ErrWorkspaceNotFound } - return s.getSpaceInfo(spaceId) + return s.getSpaceInfo(ctx, spaceId) } // CreateSpace creates a new space with the given name and returns the space info. @@ -158,7 +158,7 @@ func (s *Service) CreateSpace(ctx context.Context, request apimodel.CreateSpaceR } } - return s.getSpaceInfo(resp.SpaceId) + return s.getSpaceInfo(ctx, resp.SpaceId) } // UpdateSpace updates the space with the given ID using the provided request. @@ -188,7 +188,7 @@ func (s *Service) UpdateSpace(ctx context.Context, spaceId string, request apimo } } - space, err := s.getSpaceInfo(spaceId) + space, err := s.getSpaceInfo(ctx, spaceId) if err != nil { return apimodel.Space{}, err } @@ -197,8 +197,8 @@ func (s *Service) UpdateSpace(ctx context.Context, spaceId string, request apimo } // getSpaceInfo returns the workspace info for the space with the given ID. -func (s *Service) getSpaceInfo(spaceId string) (space apimodel.Space, err error) { - workspaceResponse := s.mw.WorkspaceOpen(context.Background(), &pb.RpcWorkspaceOpenRequest{ +func (s *Service) getSpaceInfo(ctx context.Context, spaceId string) (space apimodel.Space, err error) { + workspaceResponse := s.mw.WorkspaceOpen(ctx, &pb.RpcWorkspaceOpenRequest{ SpaceId: spaceId, }) @@ -206,7 +206,7 @@ func (s *Service) getSpaceInfo(spaceId string) (space apimodel.Space, err error) return apimodel.Space{}, ErrFailedOpenWorkspace } - spaceResp := s.mw.ObjectShow(context.Background(), &pb.RpcObjectShowRequest{ + spaceResp := s.mw.ObjectShow(ctx, &pb.RpcObjectShowRequest{ SpaceId: spaceId, ObjectId: workspaceResponse.Info.WorkspaceObjectId, }) @@ -231,8 +231,8 @@ func (s *Service) getSpaceInfo(spaceId string) (space apimodel.Space, err error) } // GetAllSpaceIds effectively retrieves all space IDs from the tech space. -func (s *Service) GetAllSpaceIds() ([]string, error) { - resp := s.mw.ObjectSearch(context.Background(), &pb.RpcObjectSearchRequest{ +func (s *Service) GetAllSpaceIds(ctx context.Context) ([]string, error) { + resp := s.mw.ObjectSearch(ctx, &pb.RpcObjectSearchRequest{ SpaceId: s.techSpaceId, Filters: []*model.BlockContentDataviewFilter{ { diff --git a/core/api/service/tag.go b/core/api/service/tag.go index 5bd862819..4440d3a3d 100644 --- a/core/api/service/tag.go +++ b/core/api/service/tag.go @@ -181,10 +181,10 @@ func (s *Service) DeleteTag(ctx context.Context, spaceId string, propertyId stri } // getTagMapsFromStore retrieves all tags for all spaces. -func (s *Service) getTagMapsFromStore(spaceIds []string) (map[string]map[string]apimodel.Tag, error) { +func (s *Service) getTagMapsFromStore(ctx context.Context, spaceIds []string) (map[string]map[string]apimodel.Tag, error) { spacesToTags := make(map[string]map[string]apimodel.Tag) for _, spaceId := range spaceIds { - tagMap, err := s.getTagMapFromStore(spaceId) + tagMap, err := s.getTagMapFromStore(ctx, spaceId) if err != nil { return nil, err } @@ -194,8 +194,8 @@ func (s *Service) getTagMapsFromStore(spaceIds []string) (map[string]map[string] } // getTagMapFromStore retrieves all tags for a specific space. -func (s *Service) getTagMapFromStore(spaceId string) (map[string]apimodel.Tag, error) { - resp := s.mw.ObjectSearch(context.Background(), &pb.RpcObjectSearchRequest{ +func (s *Service) getTagMapFromStore(ctx context.Context, spaceId string) (map[string]apimodel.Tag, error) { + resp := s.mw.ObjectSearch(ctx, &pb.RpcObjectSearchRequest{ SpaceId: spaceId, Filters: []*model.BlockContentDataviewFilter{ { diff --git a/core/api/service/template.go b/core/api/service/template.go index 9a447da0d..5e49f8451 100644 --- a/core/api/service/template.go +++ b/core/api/service/template.go @@ -68,15 +68,15 @@ func (s *Service) ListTemplates(ctx context.Context, spaceId string, typeId stri paginatedTemplates, hasMore := pagination.Paginate(templateObjectsResp.Records, offset, limit) templates = make([]apimodel.Object, 0, len(paginatedTemplates)) - propertyMap, err := s.getPropertyMapFromStore(spaceId, true) + propertyMap, err := s.getPropertyMapFromStore(ctx, spaceId, true) if err != nil { return nil, 0, false, err } - typeMap, err := s.getTypeMapFromStore(spaceId, propertyMap, false) + typeMap, err := s.getTypeMapFromStore(ctx, spaceId, propertyMap, false) if err != nil { return nil, 0, false, err } - tagMap, err := s.getTagMapFromStore(spaceId) + tagMap, err := s.getTagMapFromStore(ctx, spaceId) if err != nil { return nil, 0, false, err } @@ -109,15 +109,15 @@ func (s *Service) GetTemplate(ctx context.Context, spaceId string, _ string, tem } } - propertyMap, err := s.getPropertyMapFromStore(spaceId, true) + propertyMap, err := s.getPropertyMapFromStore(ctx, spaceId, true) if err != nil { return apimodel.ObjectWithBody{}, err } - typeMap, err := s.getTypeMapFromStore(spaceId, propertyMap, false) + typeMap, err := s.getTypeMapFromStore(ctx, spaceId, propertyMap, false) if err != nil { return apimodel.ObjectWithBody{}, err } - tagMap, err := s.getTagMapFromStore(spaceId) + tagMap, err := s.getTagMapFromStore(ctx, spaceId) if err != nil { return apimodel.ObjectWithBody{}, err } diff --git a/core/api/service/type.go b/core/api/service/type.go index b667f4cdd..7b39b7a40 100644 --- a/core/api/service/type.go +++ b/core/api/service/type.go @@ -72,7 +72,7 @@ func (s *Service) ListTypes(ctx context.Context, spaceId string, offset int, lim paginatedTypes, hasMore := pagination.Paginate(resp.Records, offset, limit) types = make([]apimodel.Type, 0, len(paginatedTypes)) - propertyMap, err := s.getPropertyMapFromStore(spaceId, true) + propertyMap, err := s.getPropertyMapFromStore(ctx, spaceId, true) if err != nil { return nil, 0, false, err } @@ -106,7 +106,7 @@ func (s *Service) GetType(ctx context.Context, spaceId string, typeId string) (a } // pre-fetch properties to fill the type - propertyMap, err := s.getPropertyMapFromStore(spaceId, true) + propertyMap, err := s.getPropertyMapFromStore(ctx, spaceId, true) if err != nil { return apimodel.Type{}, err } @@ -179,11 +179,11 @@ func (s *Service) DeleteType(ctx context.Context, spaceId string, typeId string) // getTypeMapsFromStore retrieves all types from all spaces. // Type entries can also be keyed by uniqueKey. Required for resolving type keys to IDs for search filters. -func (s *Service) getTypeMapsFromStore(spaceIds []string, propertyMap map[string]map[string]apimodel.Property, keyByUniqueKey bool) (map[string]map[string]apimodel.Type, error) { +func (s *Service) getTypeMapsFromStore(ctx context.Context, spaceIds []string, propertyMap map[string]map[string]apimodel.Property, keyByUniqueKey bool) (map[string]map[string]apimodel.Type, error) { spacesToTypes := make(map[string]map[string]apimodel.Type, len(spaceIds)) for _, spaceId := range spaceIds { - typeMap, err := s.getTypeMapFromStore(spaceId, propertyMap[spaceId], keyByUniqueKey) + typeMap, err := s.getTypeMapFromStore(ctx, spaceId, propertyMap[spaceId], keyByUniqueKey) if err != nil { return nil, err } @@ -195,8 +195,8 @@ func (s *Service) getTypeMapsFromStore(spaceIds []string, propertyMap map[string // getTypeMapFromStore retrieves all types for a specific space. // Type entries can also be keyed by uniqueKey. Required for resolving type keys to IDs for search filters. -func (s *Service) getTypeMapFromStore(spaceId string, propertyMap map[string]apimodel.Property, keyByUniqueKey bool) (map[string]apimodel.Type, error) { - resp := s.mw.ObjectSearch(context.Background(), &pb.RpcObjectSearchRequest{ +func (s *Service) getTypeMapFromStore(ctx context.Context, spaceId string, propertyMap map[string]apimodel.Property, keyByUniqueKey bool) (map[string]apimodel.Type, error) { + resp := s.mw.ObjectSearch(ctx, &pb.RpcObjectSearchRequest{ SpaceId: spaceId, Filters: []*model.BlockContentDataviewFilter{ { @@ -277,7 +277,7 @@ func (s *Service) buildTypeDetails(ctx context.Context, spaceId string, request fields[k] = v } - propertyMap, err := s.getPropertyMapFromStore(spaceId, true) + propertyMap, err := s.getPropertyMapFromStore(ctx, spaceId, true) if err != nil { return nil, err } @@ -344,7 +344,7 @@ func (s *Service) buildUpdatedTypeDetails(ctx context.Context, spaceId string, t return &types.Struct{Fields: fields}, nil } - propertyMap, err := s.getPropertyMapFromStore(spaceId, true) + propertyMap, err := s.getPropertyMapFromStore(ctx, spaceId, true) if err != nil { return nil, err } From f4de318402715ae89ca38af727e0e53817218200 Mon Sep 17 00:00:00 2001 From: Roman Khafizianov Date: Sat, 17 May 2025 02:04:51 +0200 Subject: [PATCH 070/164] GO-5629 RPCs added: AccountLocalLinkCreateApp,List,Revoke introduce new format for AppLink --- clientlibrary/service/service.pb.go | 836 +++-- core/account.go | 56 + core/application/sessions.go | 37 +- core/wallet/applink.go | 442 ++- core/wallet/applink_test.go | 350 +- core/wallet/wallet.go | 6 +- docs/proto.md | 248 ++ pb/commands.pb.go | 4938 +++++++++++++++++++------- pb/protos/commands.proto | 70 + pb/protos/service/service.proto | 4 + pb/service/service.pb.go | 833 +++-- pkg/lib/pb/model/models.pb.go | 1583 ++++++--- pkg/lib/pb/model/protos/models.proto | 9 + 13 files changed, 6558 insertions(+), 2854 deletions(-) diff --git a/clientlibrary/service/service.pb.go b/clientlibrary/service/service.pb.go index b721fdbac..a27c13502 100644 --- a/clientlibrary/service/service.pb.go +++ b/clientlibrary/service/service.pb.go @@ -25,368 +25,371 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package func init() { proto.RegisterFile("pb/protos/service/service.proto", fileDescriptor_93a29dc403579097) } var fileDescriptor_93a29dc403579097 = []byte{ - // 5766 bytes of a gzipped FileDescriptorProto + // 5823 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x9d, 0xdd, 0x6f, 0x24, 0x49, - 0x52, 0xc0, 0xd7, 0x2f, 0x2c, 0xd4, 0x71, 0x0b, 0xf4, 0xc2, 0xb2, 0xb7, 0xdc, 0xcd, 0xcc, 0xce, - 0x87, 0x3d, 0x33, 0x1e, 0xb7, 0x67, 0x67, 0xf6, 0x8b, 0x3b, 0x24, 0xe8, 0xb1, 0xc7, 0xde, 0xbe, - 0xb5, 0xbd, 0xc6, 0xdd, 0x9e, 0x11, 0x2b, 0x21, 0x51, 0xee, 0x4a, 0xb7, 0x0b, 0x57, 0x57, 0xd6, - 0x55, 0x65, 0x7b, 0xa6, 0x0f, 0x81, 0x40, 0x20, 0x10, 0x08, 0xc4, 0x89, 0x2f, 0xc1, 0x13, 0x12, - 0x7f, 0x01, 0x7f, 0x06, 0x8f, 0xf7, 0xc8, 0x23, 0xda, 0xfd, 0x33, 0x78, 0x00, 0x55, 0x66, 0x56, - 0x7e, 0x44, 0x45, 0x64, 0x95, 0xf7, 0x9e, 0x66, 0xe4, 0xf8, 0x45, 0x44, 0x7e, 0x44, 0x66, 0x46, - 0x66, 0x65, 0x55, 0x47, 0x37, 0x8b, 0xb3, 0xed, 0xa2, 0xe4, 0x82, 0x57, 0xdb, 0x15, 0x2b, 0xaf, - 0xd2, 0x19, 0x6b, 0xfe, 0x1d, 0xca, 0x3f, 0x0f, 0xde, 0x8c, 0xf3, 0x95, 0x58, 0x15, 0xec, 0xbd, - 0x77, 0x2d, 0x39, 0xe3, 0x8b, 0x45, 0x9c, 0x27, 0x95, 0x42, 0xde, 0x7b, 0xc7, 0x4a, 0xd8, 0x15, - 0xcb, 0x85, 0xfe, 0xfb, 0x93, 0xff, 0xfd, 0xbf, 0xb5, 0xe8, 0xad, 0x9d, 0x2c, 0x65, 0xb9, 0xd8, - 0xd1, 0x1a, 0x83, 0x2f, 0xa3, 0x6f, 0x8f, 0x8a, 0x62, 0x9f, 0x89, 0x17, 0xac, 0xac, 0x52, 0x9e, - 0x0f, 0xee, 0x0c, 0xb5, 0x83, 0xe1, 0x49, 0x31, 0x1b, 0x8e, 0x8a, 0x62, 0x68, 0x85, 0xc3, 0x13, - 0xf6, 0xa3, 0x25, 0xab, 0xc4, 0x7b, 0x77, 0xc3, 0x50, 0x55, 0xf0, 0xbc, 0x62, 0x83, 0xf3, 0xe8, - 0x57, 0x46, 0x45, 0x31, 0x61, 0x62, 0x97, 0xd5, 0x15, 0x98, 0x88, 0x58, 0xb0, 0xc1, 0x46, 0x4b, - 0xd5, 0x07, 0x8c, 0x8f, 0xfb, 0xdd, 0xa0, 0xf6, 0x33, 0x8d, 0xbe, 0x55, 0xfb, 0xb9, 0x58, 0x8a, - 0x84, 0xbf, 0xca, 0x07, 0xef, 0xb7, 0x15, 0xb5, 0xc8, 0xd8, 0xbe, 0x1d, 0x42, 0xb4, 0xd5, 0x97, - 0xd1, 0x2f, 0xbe, 0x8c, 0xb3, 0x8c, 0x89, 0x9d, 0x92, 0xd5, 0x05, 0xf7, 0x75, 0x94, 0x68, 0xa8, - 0x64, 0xc6, 0xee, 0x9d, 0x20, 0xa3, 0x0d, 0x7f, 0x19, 0x7d, 0x5b, 0x49, 0x4e, 0xd8, 0x8c, 0x5f, - 0xb1, 0x72, 0x80, 0x6a, 0x69, 0x21, 0xd1, 0xe4, 0x2d, 0x08, 0xda, 0xde, 0xe1, 0xf9, 0x15, 0x2b, - 0x05, 0x6e, 0x5b, 0x0b, 0xc3, 0xb6, 0x2d, 0xa4, 0x6d, 0xff, 0xf5, 0x5a, 0xf4, 0xdd, 0xd1, 0x6c, - 0xc6, 0x97, 0xb9, 0x38, 0xe0, 0xb3, 0x38, 0x3b, 0x48, 0xf3, 0xcb, 0x23, 0xf6, 0x6a, 0xe7, 0xa2, - 0xe6, 0xf3, 0x39, 0x1b, 0x3c, 0xf5, 0x5b, 0x55, 0xa1, 0x43, 0xc3, 0x0e, 0x5d, 0xd8, 0xf8, 0xfe, - 0xf0, 0x7a, 0x4a, 0xba, 0x2c, 0x7f, 0xbf, 0x16, 0xdd, 0x80, 0x65, 0x99, 0xf0, 0xec, 0x8a, 0xd9, - 0xd2, 0x7c, 0xd4, 0x61, 0xd8, 0xc7, 0x4d, 0x79, 0x3e, 0xbe, 0xae, 0x9a, 0x2e, 0x51, 0x16, 0xbd, - 0xed, 0x86, 0xcb, 0x84, 0x55, 0x72, 0x38, 0x3d, 0xa0, 0x23, 0x42, 0x23, 0xc6, 0xf3, 0xc3, 0x3e, - 0xa8, 0xf6, 0x96, 0x46, 0x03, 0xed, 0x2d, 0xe3, 0x95, 0x71, 0x76, 0x1f, 0xb5, 0xe0, 0x10, 0xc6, - 0xd7, 0x83, 0x1e, 0xa4, 0x76, 0xf5, 0x07, 0xd1, 0x2f, 0xbd, 0xe4, 0xe5, 0x65, 0x55, 0xc4, 0x33, - 0xa6, 0x87, 0xc2, 0x3d, 0x5f, 0xbb, 0x91, 0xc2, 0xd1, 0xb0, 0xde, 0x85, 0x39, 0x41, 0xdb, 0x08, - 0xbf, 0x28, 0x18, 0x9c, 0x83, 0xac, 0x62, 0x2d, 0xa4, 0x82, 0x16, 0x42, 0xda, 0xf6, 0x65, 0x34, - 0xb0, 0xb6, 0xcf, 0xfe, 0x90, 0xcd, 0xc4, 0x28, 0x49, 0x60, 0xaf, 0x58, 0x5d, 0x49, 0x0c, 0x47, - 0x49, 0x42, 0xf5, 0x0a, 0x8e, 0x6a, 0x67, 0xaf, 0xa2, 0x77, 0x80, 0xb3, 0x83, 0xb4, 0x92, 0x0e, - 0xb7, 0xc2, 0x56, 0x34, 0x66, 0x9c, 0x0e, 0xfb, 0xe2, 0xda, 0xf1, 0x9f, 0xae, 0x45, 0xdf, 0x41, - 0x3c, 0x9f, 0xb0, 0x05, 0xbf, 0x62, 0x83, 0xc7, 0xdd, 0xd6, 0x14, 0x69, 0xfc, 0x7f, 0x70, 0x0d, - 0x0d, 0x24, 0x4c, 0x26, 0x2c, 0x63, 0x33, 0x41, 0x86, 0x89, 0x12, 0x77, 0x86, 0x89, 0xc1, 0x9c, - 0x11, 0xd6, 0x08, 0xf7, 0x99, 0xd8, 0x59, 0x96, 0x25, 0xcb, 0x05, 0xd9, 0x97, 0x16, 0xe9, 0xec, - 0x4b, 0x0f, 0x45, 0xea, 0xb3, 0xcf, 0xc4, 0x28, 0xcb, 0xc8, 0xfa, 0x28, 0x71, 0x67, 0x7d, 0x0c, - 0xa6, 0x3d, 0xcc, 0xa2, 0x5f, 0x76, 0x5a, 0x4c, 0x8c, 0xf3, 0x73, 0x3e, 0xa0, 0xdb, 0x42, 0xca, - 0x8d, 0x8f, 0x8d, 0x4e, 0x0e, 0xa9, 0xc6, 0xf3, 0xd7, 0x05, 0x2f, 0xe9, 0x6e, 0x51, 0xe2, 0xce, - 0x6a, 0x18, 0x4c, 0x7b, 0xf8, 0xfd, 0xe8, 0x2d, 0x3d, 0x4b, 0x36, 0xeb, 0xd9, 0x5d, 0x74, 0x0a, - 0x85, 0x0b, 0xda, 0xbd, 0x0e, 0xaa, 0x65, 0xfe, 0x30, 0x9d, 0x97, 0xf5, 0xec, 0x83, 0x9b, 0xd7, - 0xd2, 0x0e, 0xf3, 0x96, 0xd2, 0xe6, 0x79, 0xf4, 0xab, 0xbe, 0xf9, 0x9d, 0x38, 0x9f, 0xb1, 0x6c, - 0xf0, 0x30, 0xa4, 0xae, 0x18, 0xe3, 0x6a, 0xb3, 0x17, 0x6b, 0x27, 0x3b, 0x4d, 0xe8, 0xc9, 0xf4, - 0x0e, 0xaa, 0x0d, 0xa6, 0xd2, 0xbb, 0x61, 0xa8, 0x65, 0x7b, 0x97, 0x65, 0x8c, 0xb4, 0xad, 0x84, - 0x1d, 0xb6, 0x0d, 0xa4, 0x6d, 0x97, 0xd1, 0xaf, 0x99, 0x6e, 0xae, 0xf3, 0x02, 0x29, 0xaf, 0x17, - 0x9d, 0x4d, 0xa2, 0x1f, 0x5d, 0xc8, 0xf8, 0x7a, 0xd4, 0x0f, 0x6e, 0xd5, 0x47, 0xcf, 0x28, 0x78, - 0x7d, 0xc0, 0x7c, 0x72, 0x37, 0x0c, 0x69, 0xdb, 0x7f, 0xb3, 0x16, 0x7d, 0x4f, 0xcb, 0x9e, 0xe7, - 0xf1, 0x59, 0xc6, 0xe4, 0x12, 0x7f, 0xc4, 0xc4, 0x2b, 0x5e, 0x5e, 0x4e, 0x56, 0xf9, 0x8c, 0x48, - 0x67, 0x70, 0xb8, 0x23, 0x9d, 0x21, 0x95, 0x74, 0x61, 0xfe, 0x28, 0x7a, 0xb7, 0x09, 0x8a, 0x8b, - 0x38, 0x9f, 0xb3, 0x1f, 0x56, 0x3c, 0x1f, 0x15, 0xe9, 0x28, 0x49, 0xca, 0xc1, 0x10, 0xef, 0x7a, - 0xc8, 0x99, 0x12, 0x6c, 0xf7, 0xe6, 0x9d, 0xf4, 0x59, 0xb7, 0xb2, 0xe0, 0x05, 0x4c, 0x9f, 0x9b, - 0xe6, 0x13, 0xbc, 0xa0, 0xd2, 0x67, 0x1f, 0x69, 0x59, 0x3d, 0xac, 0xd7, 0x20, 0xdc, 0xea, 0xa1, - 0xbb, 0xe8, 0xdc, 0x0e, 0x21, 0x76, 0x0d, 0x68, 0x1a, 0x8a, 0xe7, 0xe7, 0xe9, 0xfc, 0xb4, 0x48, - 0xea, 0x31, 0xf4, 0x00, 0xaf, 0xb3, 0x83, 0x10, 0x6b, 0x00, 0x81, 0x6a, 0x6f, 0x7f, 0x67, 0xb3, - 0x4c, 0x3d, 0x2f, 0xed, 0x95, 0x7c, 0x71, 0xc0, 0xe6, 0xf1, 0x6c, 0xa5, 0x27, 0xd3, 0x0f, 0x43, - 0xb3, 0x18, 0xa4, 0x4d, 0x21, 0x3e, 0xba, 0xa6, 0x96, 0x2e, 0xcf, 0xbf, 0xaf, 0x45, 0x77, 0xbd, - 0x38, 0xd1, 0xc1, 0xa4, 0x4a, 0x3f, 0xca, 0x93, 0x13, 0x56, 0x89, 0xb8, 0x14, 0x83, 0xef, 0x07, - 0x62, 0x80, 0xd0, 0x31, 0x65, 0xfb, 0xc1, 0x37, 0xd2, 0xb5, 0xbd, 0x3e, 0xa9, 0x57, 0x09, 0x3d, - 0xff, 0xf8, 0xbd, 0x2e, 0x25, 0x70, 0xf6, 0xb9, 0x1d, 0x42, 0x6c, 0xaf, 0x4b, 0xc1, 0x38, 0xbf, - 0x4a, 0x05, 0xdb, 0x67, 0x39, 0x2b, 0xdb, 0xbd, 0xae, 0x54, 0x7d, 0x84, 0xe8, 0x75, 0x02, 0xb5, - 0x33, 0x9d, 0xe7, 0xcd, 0x64, 0x1a, 0x9b, 0x01, 0x23, 0xad, 0x5c, 0xe3, 0x51, 0x3f, 0x98, 0xa8, - 0xa1, 0xd8, 0xaf, 0x8d, 0x04, 0x6b, 0xa8, 0x90, 0x5e, 0x35, 0x34, 0xa8, 0xdd, 0x98, 0x3b, 0xde, - 0x4e, 0xd8, 0x15, 0xbf, 0x84, 0x1b, 0x73, 0xd7, 0x80, 0x02, 0x88, 0x8d, 0x39, 0x0a, 0xda, 0xe4, - 0xc3, 0xf1, 0xf3, 0x22, 0x65, 0xaf, 0x40, 0xf2, 0xe1, 0x2a, 0xd7, 0x62, 0x22, 0xf9, 0x40, 0x30, - 0xed, 0xe1, 0x28, 0xfa, 0x05, 0x29, 0xfc, 0x21, 0x4f, 0xf3, 0xc1, 0x4d, 0x44, 0xa9, 0x16, 0x18, - 0xab, 0xb7, 0x68, 0x00, 0x94, 0xb8, 0xfe, 0xab, 0xce, 0x04, 0xee, 0x11, 0x4a, 0x20, 0x09, 0x58, - 0xef, 0xc2, 0x6c, 0xd6, 0x27, 0x85, 0xf5, 0x6c, 0x39, 0xb9, 0x88, 0xcb, 0x34, 0x9f, 0x0f, 0x30, - 0x5d, 0x47, 0x4e, 0x64, 0x7d, 0x18, 0x07, 0xc2, 0x49, 0x2b, 0x8e, 0x8a, 0xa2, 0xac, 0x27, 0x61, - 0x2c, 0x9c, 0x7c, 0x24, 0x18, 0x4e, 0x2d, 0x14, 0xf7, 0xb6, 0xcb, 0x66, 0x59, 0x9a, 0x07, 0xbd, - 0x69, 0xa4, 0x8f, 0x37, 0x8b, 0x82, 0xe0, 0x3d, 0x60, 0xf1, 0x15, 0x6b, 0x6a, 0x86, 0xb5, 0x8c, - 0x0b, 0x04, 0x83, 0x17, 0x80, 0x76, 0x8b, 0x2d, 0xc5, 0x87, 0xf1, 0x25, 0xab, 0x1b, 0x98, 0xd5, - 0x4b, 0xf8, 0x00, 0xd3, 0xf7, 0x08, 0x62, 0x8b, 0x8d, 0x93, 0xda, 0xd5, 0x32, 0x7a, 0x47, 0xca, - 0x8f, 0xe3, 0x52, 0xa4, 0xb3, 0xb4, 0x88, 0xf3, 0x66, 0xeb, 0x86, 0xcd, 0x22, 0x2d, 0xca, 0xb8, - 0xdc, 0xea, 0x49, 0x6b, 0xb7, 0xff, 0xb2, 0x16, 0xbd, 0x0f, 0xfd, 0x1e, 0xb3, 0x72, 0x91, 0xca, - 0x13, 0x80, 0x4a, 0x4d, 0xf9, 0x83, 0x4f, 0xc2, 0x46, 0x5b, 0x0a, 0xa6, 0x34, 0x9f, 0x5e, 0x5f, - 0xd1, 0xe6, 0x7d, 0x13, 0xbd, 0x2b, 0xfa, 0xa2, 0x4c, 0x5a, 0x27, 0x64, 0x93, 0x66, 0xab, 0x23, - 0x85, 0x44, 0xde, 0xd7, 0x82, 0xc0, 0x08, 0x3f, 0xcd, 0xab, 0xc6, 0x3a, 0x36, 0xc2, 0xad, 0x38, - 0x38, 0xc2, 0x3d, 0xcc, 0x8e, 0xf0, 0xe3, 0xe5, 0x59, 0x96, 0x56, 0x17, 0x69, 0x3e, 0xd7, 0x49, - 0xbe, 0xaf, 0x6b, 0xc5, 0x30, 0xcf, 0xdf, 0xe8, 0xe4, 0x30, 0x27, 0x3a, 0x58, 0x48, 0x27, 0x20, - 0x4c, 0x36, 0x3a, 0x39, 0xbb, 0xf7, 0xb2, 0xd2, 0x7a, 0xd3, 0x0f, 0xf6, 0x5e, 0x8e, 0x6a, 0x2d, - 0x25, 0xf6, 0x5e, 0x6d, 0xca, 0xee, 0xbd, 0xdc, 0x3a, 0x54, 0x3c, 0xbb, 0x62, 0xa7, 0x65, 0x0a, - 0xf6, 0x5e, 0x5e, 0xf9, 0x1a, 0x86, 0xd8, 0x7b, 0x51, 0xac, 0x9d, 0xa8, 0x2c, 0xb1, 0xcf, 0xc4, - 0x44, 0xc4, 0x62, 0x59, 0x81, 0x89, 0xca, 0xb1, 0x61, 0x10, 0x62, 0xa2, 0x22, 0x50, 0xed, 0xed, - 0x77, 0xa3, 0x48, 0x9d, 0x97, 0xc8, 0x33, 0x2d, 0x7f, 0xed, 0xd1, 0x07, 0x29, 0xde, 0x81, 0xd6, - 0xfb, 0x01, 0xc2, 0xa6, 0x57, 0xea, 0xef, 0xf2, 0xa8, 0x6e, 0x80, 0x6a, 0x48, 0x11, 0x91, 0x5e, - 0x01, 0x04, 0x16, 0x74, 0x72, 0xc1, 0x5f, 0xe1, 0x05, 0xad, 0x25, 0xe1, 0x82, 0x6a, 0xc2, 0x1e, - 0x9e, 0xeb, 0x82, 0x62, 0x87, 0xe7, 0x4d, 0x31, 0x42, 0x87, 0xe7, 0x90, 0xb1, 0x31, 0xe3, 0x1a, - 0x7e, 0xc6, 0xf9, 0xe5, 0x22, 0x2e, 0x2f, 0x41, 0xcc, 0x78, 0xca, 0x0d, 0x43, 0xc4, 0x0c, 0xc5, - 0xda, 0x98, 0x71, 0x1d, 0xd6, 0xc9, 0xf9, 0x69, 0x99, 0x81, 0x98, 0xf1, 0x6c, 0x68, 0x84, 0x88, - 0x19, 0x02, 0xb5, 0xb3, 0x93, 0xeb, 0x6d, 0xc2, 0xe0, 0x71, 0x8d, 0xa7, 0x3e, 0x61, 0xd4, 0x71, - 0x0d, 0x82, 0xc1, 0x10, 0xda, 0x2f, 0xe3, 0xe2, 0x02, 0x0f, 0x21, 0x29, 0x0a, 0x87, 0x50, 0x83, - 0xc0, 0xfe, 0x9e, 0xb0, 0xb8, 0x9c, 0x5d, 0xe0, 0xfd, 0xad, 0x64, 0xe1, 0xfe, 0x36, 0x0c, 0xec, - 0x6f, 0x25, 0x78, 0x99, 0x8a, 0x8b, 0x43, 0x26, 0x62, 0xbc, 0xbf, 0x7d, 0x26, 0xdc, 0xdf, 0x2d, - 0xd6, 0x66, 0xff, 0xae, 0xc3, 0xc9, 0xf2, 0xac, 0x9a, 0x95, 0xe9, 0x19, 0x1b, 0x04, 0xac, 0x18, - 0x88, 0xc8, 0xfe, 0x49, 0x58, 0xfb, 0xfc, 0xc9, 0x5a, 0x74, 0xb3, 0xe9, 0x76, 0x5e, 0x55, 0x7a, - 0xed, 0xf3, 0xdd, 0x7f, 0x84, 0xf7, 0x2f, 0x81, 0x13, 0x8f, 0x33, 0x7a, 0xa8, 0x39, 0xb9, 0x01, - 0x5e, 0xa4, 0xd3, 0xbc, 0x32, 0x85, 0xfa, 0xa4, 0x8f, 0x75, 0x47, 0x81, 0xc8, 0x0d, 0x7a, 0x29, - 0xda, 0xb4, 0x4c, 0xf7, 0x4f, 0x23, 0x1b, 0x27, 0x15, 0x48, 0xcb, 0x9a, 0xf6, 0x76, 0x08, 0x22, - 0x2d, 0xc3, 0x49, 0x18, 0x0a, 0xfb, 0x25, 0x5f, 0x16, 0x55, 0x47, 0x28, 0x00, 0x28, 0x1c, 0x0a, - 0x6d, 0x58, 0xfb, 0x7c, 0x1d, 0xfd, 0xba, 0x1b, 0x7e, 0x6e, 0x63, 0x6f, 0xd1, 0x31, 0x85, 0x35, - 0xf1, 0xb0, 0x2f, 0x6e, 0x33, 0x8a, 0xc6, 0xb3, 0xd8, 0x65, 0x22, 0x4e, 0xb3, 0x6a, 0xb0, 0x8e, - 0xdb, 0x68, 0xe4, 0x44, 0x46, 0x81, 0x71, 0x70, 0x7e, 0xdb, 0x5d, 0x16, 0x59, 0x3a, 0x6b, 0x3f, - 0x4c, 0xd2, 0xba, 0x46, 0x1c, 0x9e, 0xdf, 0x5c, 0x0c, 0xce, 0xd7, 0x75, 0xea, 0x27, 0xff, 0x33, - 0x5d, 0x15, 0x0c, 0x9f, 0xaf, 0x3d, 0x24, 0x3c, 0x5f, 0x43, 0x14, 0xd6, 0x67, 0xc2, 0xc4, 0x41, - 0xbc, 0xe2, 0x4b, 0x62, 0xbe, 0x36, 0xe2, 0x70, 0x7d, 0x5c, 0xcc, 0xee, 0x0d, 0x8c, 0x87, 0x71, - 0x2e, 0x58, 0x99, 0xc7, 0xd9, 0x5e, 0x16, 0xcf, 0xab, 0x01, 0x31, 0xc7, 0xf8, 0x14, 0xb1, 0x37, - 0xa0, 0x69, 0xa4, 0x19, 0xc7, 0xd5, 0x5e, 0x7c, 0xc5, 0xcb, 0x54, 0xd0, 0xcd, 0x68, 0x91, 0xce, - 0x66, 0xf4, 0x50, 0xd4, 0xdb, 0xa8, 0x9c, 0x5d, 0xa4, 0x57, 0x2c, 0x09, 0x78, 0x6b, 0x90, 0x1e, - 0xde, 0x1c, 0x14, 0xe9, 0xb4, 0x09, 0x5f, 0x96, 0x33, 0x46, 0x76, 0x9a, 0x12, 0x77, 0x76, 0x9a, - 0xc1, 0xb4, 0x87, 0xbf, 0x58, 0x8b, 0x7e, 0x43, 0x49, 0xdd, 0x27, 0x3c, 0xbb, 0x71, 0x75, 0x71, - 0xc6, 0xe3, 0x32, 0x19, 0x7c, 0x80, 0xd9, 0x41, 0x51, 0xe3, 0xfa, 0xc9, 0x75, 0x54, 0x60, 0xb3, - 0xd6, 0x79, 0xb7, 0x1d, 0x71, 0x68, 0xb3, 0x7a, 0x48, 0xb8, 0x59, 0x21, 0x0a, 0x27, 0x10, 0x29, - 0x57, 0x07, 0x80, 0xeb, 0xa4, 0xbe, 0x7f, 0x0a, 0xb8, 0xd1, 0xc9, 0xc1, 0xf9, 0xb1, 0x16, 0xfa, - 0xd1, 0xb2, 0x45, 0xd9, 0xc0, 0x23, 0x66, 0xd8, 0x17, 0x27, 0x3d, 0x9b, 0x51, 0x11, 0xf6, 0xdc, - 0x1a, 0x19, 0xc3, 0xbe, 0x38, 0xe1, 0xd9, 0x99, 0xd6, 0x42, 0x9e, 0x91, 0xa9, 0x6d, 0xd8, 0x17, - 0x87, 0xd9, 0x97, 0x66, 0x9a, 0x75, 0xe1, 0x61, 0xc0, 0x0e, 0x5c, 0x1b, 0x36, 0x7b, 0xb1, 0xda, - 0xe1, 0x5f, 0xad, 0x45, 0xdf, 0xb5, 0x1e, 0x0f, 0x79, 0x92, 0x9e, 0xaf, 0x14, 0xf4, 0x22, 0xce, - 0x96, 0xac, 0x1a, 0x3c, 0xa1, 0xac, 0xb5, 0x59, 0x53, 0x82, 0xa7, 0xd7, 0xd2, 0x81, 0x63, 0x67, - 0x54, 0x14, 0xd9, 0x6a, 0xca, 0x16, 0x45, 0x46, 0x8e, 0x1d, 0x0f, 0x09, 0x8f, 0x1d, 0x88, 0xc2, - 0xac, 0x7c, 0xca, 0xeb, 0x9c, 0x1f, 0xcd, 0xca, 0xa5, 0x28, 0x9c, 0x95, 0x37, 0x08, 0xcc, 0x95, - 0xa6, 0x7c, 0x87, 0x67, 0x19, 0x9b, 0x89, 0xf6, 0x2d, 0x11, 0xa3, 0x69, 0x89, 0x70, 0xae, 0x04, - 0x48, 0x7b, 0x2a, 0xd7, 0xec, 0x21, 0xe3, 0x92, 0x3d, 0x5b, 0x1d, 0xa4, 0xf9, 0xe5, 0x00, 0x4f, - 0x0b, 0x2c, 0x40, 0x9c, 0xca, 0xa1, 0x20, 0xdc, 0xab, 0x9e, 0xe6, 0x09, 0xc7, 0xf7, 0xaa, 0xb5, - 0x24, 0xbc, 0x57, 0xd5, 0x04, 0x34, 0x79, 0xc2, 0x28, 0x93, 0xb5, 0x24, 0x6c, 0x52, 0x13, 0xd8, - 0x54, 0xa8, 0x9f, 0x14, 0x91, 0x53, 0x21, 0x78, 0x36, 0xb4, 0xd1, 0xc9, 0xc1, 0x3d, 0x97, 0x76, - 0x80, 0x46, 0x04, 0x30, 0x7e, 0x27, 0xc8, 0xc0, 0xd0, 0x6f, 0x76, 0xc3, 0x7b, 0x4c, 0xcc, 0x2e, - 0xf0, 0xd0, 0xf7, 0x90, 0x70, 0xe8, 0x43, 0x14, 0xb6, 0xd5, 0x94, 0x9b, 0xdd, 0xfc, 0x3a, 0x1e, - 0x78, 0xad, 0x9d, 0xfc, 0x46, 0x27, 0x07, 0xdb, 0x6a, 0xbc, 0xa0, 0xdb, 0x4a, 0xc9, 0xc2, 0x6d, - 0x65, 0x18, 0x58, 0x7a, 0x25, 0x90, 0x87, 0x64, 0xeb, 0xb4, 0xa2, 0x77, 0x4c, 0xb6, 0xd1, 0xc9, - 0x69, 0x27, 0xff, 0x64, 0xf6, 0x87, 0x4a, 0x7a, 0xc4, 0xeb, 0xc1, 0xf7, 0x22, 0xce, 0xd2, 0x24, - 0x16, 0x6c, 0xca, 0x2f, 0x59, 0x8e, 0x6f, 0xc5, 0x74, 0x69, 0x15, 0x3f, 0xf4, 0x14, 0xc2, 0x5b, - 0xb1, 0xb0, 0x22, 0x8c, 0x13, 0x45, 0x9f, 0x56, 0x6c, 0x27, 0xae, 0x88, 0x29, 0xd2, 0x43, 0xc2, - 0x71, 0x02, 0x51, 0x98, 0x08, 0x2b, 0xf9, 0xf3, 0xd7, 0x05, 0x2b, 0x53, 0x96, 0xcf, 0x18, 0x9e, - 0x08, 0x43, 0x2a, 0x9c, 0x08, 0x23, 0x34, 0xdc, 0x04, 0xee, 0xc6, 0x82, 0x3d, 0x5b, 0x4d, 0xd3, - 0x05, 0xab, 0x44, 0xbc, 0x28, 0xf0, 0x4d, 0x20, 0x80, 0xc2, 0x9b, 0xc0, 0x36, 0xdc, 0x3a, 0x73, - 0x32, 0x33, 0x6d, 0xfb, 0xd6, 0x1a, 0x24, 0x02, 0xb7, 0xd6, 0x08, 0x14, 0x36, 0xac, 0x05, 0xd0, - 0xa7, 0x0f, 0x2d, 0x2b, 0xc1, 0xa7, 0x0f, 0x34, 0xdd, 0x3a, 0xc9, 0x33, 0xcc, 0xa4, 0x1e, 0x9a, - 0x1d, 0x45, 0x9f, 0xb8, 0x43, 0x74, 0xb3, 0x17, 0x8b, 0x1f, 0x1d, 0x9e, 0xb0, 0x2c, 0x96, 0xeb, - 0x61, 0xe0, 0x7c, 0xae, 0x61, 0xfa, 0x1c, 0x1d, 0x3a, 0xac, 0x76, 0xf8, 0x67, 0x6b, 0xd1, 0x7b, - 0x98, 0xc7, 0x2f, 0x0a, 0xe9, 0xf7, 0x71, 0xb7, 0x2d, 0x45, 0x12, 0xd7, 0xf2, 0xc2, 0x1a, 0xf6, - 0x66, 0x49, 0x23, 0xb2, 0xb7, 0xf6, 0x74, 0x01, 0xfc, 0x6c, 0xd0, 0x94, 0x1f, 0x72, 0xc4, 0xcd, - 0x92, 0x10, 0x6f, 0x37, 0x5a, 0x7e, 0xb9, 0x2a, 0xb0, 0xd1, 0x32, 0x36, 0xb4, 0x98, 0xd8, 0x68, - 0x21, 0x98, 0x1d, 0x9d, 0x6e, 0xf5, 0x5e, 0xa6, 0xe2, 0x42, 0x26, 0x72, 0x60, 0x74, 0x7a, 0x65, - 0x35, 0x10, 0x31, 0x3a, 0x49, 0x18, 0xa6, 0x3a, 0x0d, 0x58, 0x8f, 0x4d, 0x6c, 0x2e, 0x37, 0x86, - 0xdc, 0x91, 0x79, 0xbf, 0x1b, 0x84, 0xf1, 0xda, 0x88, 0xf5, 0x9e, 0xea, 0x61, 0xc8, 0x02, 0xd8, - 0x57, 0x6d, 0xf6, 0x62, 0xb5, 0xc3, 0x3f, 0x89, 0xbe, 0xd3, 0xaa, 0xd8, 0x1e, 0x8b, 0xc5, 0xb2, - 0x64, 0xc9, 0x60, 0xbb, 0xa3, 0xdc, 0x0d, 0x68, 0x5c, 0x3f, 0xee, 0xaf, 0xd0, 0x4a, 0xfe, 0x1b, - 0x4e, 0x85, 0x95, 0x29, 0xc3, 0x93, 0x90, 0x49, 0x9f, 0x0d, 0x26, 0xff, 0xb4, 0x4e, 0x6b, 0xff, - 0xee, 0x46, 0xd7, 0xe8, 0x2a, 0x4e, 0x33, 0xf9, 0x14, 0xf8, 0x83, 0x90, 0x51, 0x0f, 0x0d, 0xee, - 0xdf, 0x49, 0x95, 0xd6, 0xcc, 0x2c, 0xc7, 0xb8, 0xb3, 0xef, 0x7b, 0x44, 0xcf, 0x04, 0xc8, 0xb6, - 0x6f, 0xab, 0x27, 0xad, 0xdd, 0x8a, 0x66, 0xc9, 0xab, 0xff, 0xec, 0x06, 0x39, 0xe6, 0x55, 0xab, - 0x22, 0x91, 0xbe, 0xd5, 0x93, 0xd6, 0x5e, 0xff, 0x38, 0x7a, 0xb7, 0xed, 0x55, 0x2f, 0x44, 0xdb, - 0x9d, 0xa6, 0xc0, 0x5a, 0xf4, 0xb8, 0xbf, 0x82, 0x76, 0xff, 0xaf, 0xe6, 0xc0, 0x5b, 0xf9, 0x9f, - 0xf1, 0xc5, 0x82, 0xe5, 0x09, 0x4b, 0x1a, 0x8d, 0xaa, 0xde, 0x98, 0x7d, 0x4a, 0xdb, 0x35, 0x0a, - 0x43, 0x57, 0xc3, 0x94, 0xe8, 0x37, 0xbf, 0x81, 0xa6, 0x2e, 0xda, 0x7f, 0xae, 0x45, 0x0f, 0xd0, - 0xa2, 0x35, 0x81, 0xeb, 0x15, 0xf1, 0x77, 0xfa, 0x38, 0xc2, 0x34, 0x4d, 0x51, 0x47, 0x3f, 0x83, - 0x05, 0x5d, 0xe4, 0x7f, 0x5b, 0x8b, 0x6e, 0x5b, 0xc5, 0x3a, 0xbc, 0x77, 0x78, 0x7e, 0x9e, 0xa5, - 0x33, 0x21, 0x1f, 0xf5, 0x6a, 0x15, 0xba, 0x39, 0x29, 0x8d, 0xee, 0xe6, 0x0c, 0x68, 0xea, 0xb2, - 0xfd, 0xe3, 0x5a, 0x74, 0xcb, 0x6d, 0x4e, 0xf9, 0x9c, 0x58, 0x1d, 0xbb, 0x36, 0x8a, 0xd5, 0xe0, - 0x63, 0xba, 0x0d, 0x30, 0xde, 0x94, 0xeb, 0x93, 0x6b, 0xeb, 0xd9, 0xbd, 0xfa, 0x67, 0x69, 0x25, - 0x78, 0xb9, 0x9a, 0x5c, 0xf0, 0x57, 0xcd, 0xdb, 0x58, 0xfe, 0x6a, 0xa1, 0x81, 0xa1, 0x43, 0x10, - 0x7b, 0x75, 0x9c, 0x6c, 0xb9, 0xb2, 0x6f, 0x6d, 0x55, 0x84, 0x2b, 0x87, 0xe8, 0x70, 0xe5, 0x93, - 0x76, 0xad, 0x6c, 0x6a, 0x65, 0x5f, 0x31, 0xdb, 0xc0, 0x8b, 0xda, 0x7e, 0xcd, 0xec, 0x7e, 0x37, - 0x68, 0x33, 0x66, 0x2d, 0xde, 0x4d, 0xcf, 0xcf, 0x4d, 0x9d, 0xf0, 0x92, 0xba, 0x08, 0x91, 0x31, - 0x13, 0xa8, 0xdd, 0xf4, 0xed, 0xa5, 0x19, 0x93, 0x8f, 0xaa, 0xbe, 0x38, 0x3f, 0xcf, 0x78, 0x9c, - 0x80, 0x4d, 0x5f, 0x2d, 0x1e, 0xba, 0x72, 0x62, 0xd3, 0x87, 0x71, 0xf6, 0x12, 0x4c, 0x2d, 0xad, - 0xc7, 0x5c, 0x3e, 0x4b, 0x33, 0x78, 0x99, 0x5b, 0x6a, 0x1a, 0x21, 0x71, 0x09, 0xa6, 0x05, 0xd9, - 0xc4, 0xac, 0x16, 0xd5, 0x63, 0xa5, 0x29, 0xff, 0xbd, 0xb6, 0xa2, 0x23, 0x26, 0x12, 0x33, 0x04, - 0xb3, 0x87, 0x2a, 0xb5, 0xf0, 0xb4, 0x90, 0xc6, 0x6f, 0xb5, 0xb5, 0x94, 0x84, 0x38, 0x54, 0xf1, - 0x09, 0xbb, 0x87, 0xaf, 0xff, 0xbe, 0xcb, 0x5f, 0xe5, 0xd2, 0xe8, 0xed, 0xb6, 0x4a, 0x23, 0x23, - 0xf6, 0xf0, 0x90, 0xd1, 0x86, 0x3f, 0x8f, 0x7e, 0x5e, 0x1a, 0x2e, 0x79, 0x31, 0xb8, 0x81, 0x28, - 0x94, 0xce, 0xd5, 0xe7, 0x9b, 0xa4, 0xdc, 0xde, 0x99, 0x31, 0xb1, 0x71, 0x5a, 0xc5, 0x73, 0xf8, - 0xbe, 0x82, 0xed, 0x71, 0x29, 0x25, 0xee, 0xcc, 0xb4, 0x29, 0x3f, 0x2a, 0x8e, 0x78, 0xa2, 0xad, - 0x23, 0x35, 0x34, 0xc2, 0x50, 0x54, 0xb8, 0x90, 0x4d, 0xa6, 0x8f, 0xe2, 0xab, 0x74, 0x6e, 0x12, - 0x1e, 0x35, 0x7d, 0x55, 0x20, 0x99, 0xb6, 0xcc, 0xd0, 0x81, 0x88, 0x64, 0x9a, 0x84, 0x9d, 0xc9, - 0xd8, 0x32, 0xfb, 0xcd, 0x31, 0xf4, 0x38, 0x3f, 0xe7, 0x75, 0xea, 0x7d, 0x90, 0xe6, 0x97, 0x70, - 0x32, 0x76, 0x4c, 0xe2, 0x3c, 0x31, 0x19, 0xf7, 0xd1, 0xb3, 0xbb, 0xa6, 0xe6, 0x8c, 0xd6, 0x5e, - 0xd4, 0x50, 0x1a, 0x60, 0xd7, 0x64, 0x8e, 0x72, 0x21, 0x47, 0xec, 0x9a, 0x42, 0xbc, 0xed, 0x62, - 0xe3, 0x3c, 0xe3, 0x39, 0xec, 0x62, 0x6b, 0xa1, 0x16, 0x12, 0x5d, 0xdc, 0x82, 0xec, 0x7c, 0xdc, - 0x88, 0xd4, 0xa9, 0xdf, 0x28, 0xcb, 0xc0, 0x7c, 0x6c, 0x54, 0x0d, 0x40, 0xcc, 0xc7, 0x28, 0xa8, - 0xfd, 0x9c, 0x44, 0xdf, 0xaa, 0x9b, 0xf4, 0xb8, 0x64, 0x57, 0x29, 0x83, 0x77, 0x8a, 0x1c, 0x09, - 0x31, 0xfe, 0x7d, 0xc2, 0x8e, 0xac, 0xd3, 0xbc, 0x2a, 0xb2, 0xb8, 0xba, 0xd0, 0xb7, 0x4c, 0xfc, - 0x3a, 0x37, 0x42, 0x78, 0xcf, 0xe4, 0x5e, 0x07, 0x65, 0x27, 0xf5, 0x46, 0x66, 0xa6, 0x98, 0x75, - 0x5c, 0xb5, 0x35, 0xcd, 0x6c, 0x74, 0x72, 0xf6, 0x51, 0xce, 0x7e, 0x9c, 0x65, 0xac, 0x5c, 0x35, - 0xb2, 0xc3, 0x38, 0x4f, 0xcf, 0x59, 0x25, 0xc0, 0xa3, 0x1c, 0x4d, 0x0d, 0x21, 0x46, 0x3c, 0xca, - 0x09, 0xe0, 0x76, 0x37, 0x09, 0x3c, 0x8f, 0xf3, 0x84, 0xbd, 0x06, 0xbb, 0x49, 0x68, 0x47, 0x32, - 0xc4, 0x6e, 0x92, 0x62, 0xed, 0x23, 0x8d, 0x67, 0x19, 0x9f, 0x5d, 0xea, 0x25, 0xc0, 0xef, 0x60, - 0x29, 0x81, 0x6b, 0xc0, 0xed, 0x10, 0x62, 0x17, 0x01, 0x29, 0x38, 0x61, 0x45, 0x16, 0xcf, 0xe0, - 0xc5, 0x32, 0xa5, 0xa3, 0x65, 0xc4, 0x22, 0x00, 0x19, 0x50, 0x5c, 0x7d, 0x61, 0x0d, 0x2b, 0x2e, - 0xb8, 0xaf, 0x76, 0x3b, 0x84, 0xd8, 0x65, 0x50, 0x0a, 0x26, 0x45, 0x96, 0x0a, 0x30, 0x0c, 0x94, - 0x86, 0x94, 0x10, 0xc3, 0xc0, 0x27, 0x80, 0xc9, 0x43, 0x56, 0xce, 0x19, 0x6a, 0x52, 0x4a, 0x82, - 0x26, 0x1b, 0xc2, 0xde, 0xa2, 0x57, 0x75, 0xe7, 0xc5, 0x0a, 0xdc, 0xa2, 0xd7, 0xd5, 0xe2, 0xc5, - 0x8a, 0xb8, 0x45, 0xef, 0x01, 0xa0, 0x88, 0xc7, 0x71, 0x25, 0xf0, 0x22, 0x4a, 0x49, 0xb0, 0x88, - 0x0d, 0x61, 0xd7, 0x68, 0x55, 0xc4, 0xa5, 0x00, 0x6b, 0xb4, 0x2e, 0x80, 0x73, 0xb5, 0xe2, 0x26, - 0x29, 0xb7, 0x33, 0x89, 0xea, 0x15, 0x26, 0xf6, 0x52, 0x96, 0x25, 0x15, 0x98, 0x49, 0x74, 0xbb, - 0x37, 0x52, 0x62, 0x26, 0x69, 0x53, 0x20, 0x94, 0xf4, 0x73, 0x19, 0xac, 0x76, 0xe0, 0xb1, 0xcc, - 0xed, 0x10, 0x62, 0xe7, 0xa7, 0xa6, 0xd0, 0x3b, 0x71, 0x59, 0xa6, 0xf5, 0xe2, 0xbf, 0x8e, 0x17, - 0xa8, 0x91, 0x13, 0xf3, 0x13, 0xc6, 0x81, 0xe1, 0xd5, 0x4c, 0xdc, 0x58, 0xc1, 0xe0, 0xd4, 0x7d, - 0x27, 0xc8, 0xd8, 0x8c, 0x53, 0x4a, 0x9c, 0xbb, 0x01, 0x58, 0x6b, 0x22, 0x57, 0x03, 0xd6, 0xbb, - 0x30, 0xe7, 0x85, 0x3e, 0xe3, 0xe2, 0x90, 0x5f, 0xb1, 0x29, 0x7f, 0xfe, 0x3a, 0xad, 0xea, 0x4d, - 0xa0, 0x5e, 0xb9, 0x9f, 0x12, 0x96, 0x30, 0x98, 0x78, 0xa1, 0xaf, 0x53, 0xc9, 0x26, 0x10, 0xa0, - 0x2c, 0x47, 0xec, 0x15, 0x9a, 0x40, 0x40, 0x8b, 0x86, 0x23, 0x12, 0x88, 0x10, 0x6f, 0xcf, 0xf1, - 0x8c, 0x73, 0xfd, 0x15, 0x87, 0x29, 0x6f, 0x72, 0x39, 0xca, 0x1a, 0x04, 0x89, 0xa3, 0x94, 0xa0, - 0x82, 0xdd, 0x5f, 0x1a, 0xff, 0x76, 0x88, 0xdd, 0x27, 0xec, 0xb4, 0x87, 0xd9, 0x83, 0x1e, 0x24, - 0xe2, 0xca, 0x5e, 0x70, 0xa1, 0x5c, 0xb5, 0xef, 0xb7, 0x3c, 0xe8, 0x41, 0x3a, 0x67, 0x82, 0x6e, - 0xb5, 0x9e, 0xc5, 0xb3, 0xcb, 0x79, 0xc9, 0x97, 0x79, 0xb2, 0xc3, 0x33, 0x5e, 0x82, 0x33, 0x41, - 0xaf, 0xd4, 0x00, 0x25, 0xce, 0x04, 0x3b, 0x54, 0x6c, 0x06, 0xe7, 0x96, 0x62, 0x94, 0xa5, 0x73, - 0xb8, 0xa3, 0xf6, 0x0c, 0x49, 0x80, 0xc8, 0xe0, 0x50, 0x10, 0x09, 0x22, 0xb5, 0xe3, 0x16, 0xe9, - 0x2c, 0xce, 0x94, 0xbf, 0x6d, 0xda, 0x8c, 0x07, 0x76, 0x06, 0x11, 0xa2, 0x80, 0xd4, 0x73, 0xba, - 0x2c, 0xf3, 0x71, 0x2e, 0x38, 0x59, 0xcf, 0x06, 0xe8, 0xac, 0xa7, 0x03, 0x82, 0x69, 0x75, 0xca, - 0x5e, 0xd7, 0xa5, 0xa9, 0xff, 0xc1, 0xa6, 0xd5, 0xfa, 0xef, 0x43, 0x2d, 0x0f, 0x4d, 0xab, 0x80, - 0x03, 0x95, 0xd1, 0x4e, 0x54, 0xc0, 0x04, 0xb4, 0xfd, 0x30, 0xb9, 0xdf, 0x0d, 0xe2, 0x7e, 0x26, - 0x62, 0x95, 0xb1, 0x90, 0x1f, 0x09, 0xf4, 0xf1, 0xd3, 0x80, 0xf6, 0xb8, 0xc5, 0xab, 0xcf, 0x05, - 0x9b, 0x5d, 0xb6, 0xee, 0xeb, 0xf9, 0x05, 0x55, 0x08, 0x71, 0xdc, 0x42, 0xa0, 0x78, 0x17, 0x8d, - 0x67, 0x3c, 0x0f, 0x75, 0x51, 0x2d, 0xef, 0xd3, 0x45, 0x9a, 0xb3, 0x9b, 0x5f, 0x23, 0xd5, 0x91, - 0xa9, 0xba, 0x69, 0x93, 0xb0, 0xe0, 0x42, 0xc4, 0xe6, 0x97, 0x84, 0x6d, 0x4e, 0x0e, 0x7d, 0x1e, - 0xb6, 0x5f, 0x66, 0x68, 0x59, 0x39, 0xa4, 0x5f, 0x66, 0xa0, 0x58, 0xba, 0x92, 0x2a, 0x46, 0x3a, - 0xac, 0xf8, 0x71, 0xf2, 0xa8, 0x1f, 0x6c, 0xb7, 0x3c, 0x9e, 0xcf, 0x9d, 0x8c, 0xc5, 0xa5, 0xf2, - 0xba, 0x15, 0x30, 0x64, 0x31, 0x62, 0xcb, 0x13, 0xc0, 0xc1, 0x14, 0xe6, 0x79, 0xde, 0xe1, 0xb9, - 0x60, 0xb9, 0xc0, 0xa6, 0x30, 0xdf, 0x98, 0x06, 0x43, 0x53, 0x18, 0xa5, 0x00, 0xe2, 0x56, 0x9e, - 0x07, 0x31, 0x71, 0x14, 0x2f, 0xd0, 0x8c, 0x4d, 0x9d, 0xf5, 0x28, 0x79, 0x28, 0x6e, 0x01, 0xe7, - 0x3c, 0x64, 0x76, 0xbd, 0x4c, 0xe3, 0x72, 0x6e, 0x4e, 0x37, 0x92, 0xc1, 0x63, 0xda, 0x8e, 0x4f, - 0x12, 0x0f, 0x99, 0xc3, 0x1a, 0x60, 0xda, 0x19, 0x2f, 0xe2, 0xb9, 0xa9, 0x29, 0x52, 0x03, 0x29, - 0x6f, 0x55, 0xf5, 0x7e, 0x37, 0x08, 0xfc, 0xbc, 0x48, 0x13, 0xc6, 0x03, 0x7e, 0xa4, 0xbc, 0x8f, - 0x1f, 0x08, 0x82, 0xec, 0xad, 0xae, 0xb7, 0xda, 0xd1, 0x8d, 0xf2, 0x44, 0xef, 0x63, 0x87, 0x44, - 0xf3, 0x00, 0x2e, 0x94, 0xbd, 0x11, 0x3c, 0x18, 0xa3, 0xcd, 0x01, 0x6d, 0x68, 0x8c, 0x9a, 0xf3, - 0xd7, 0x3e, 0x63, 0x14, 0x83, 0xb5, 0xcf, 0x1f, 0xeb, 0x31, 0xba, 0x1b, 0x8b, 0xb8, 0xce, 0xdb, - 0x5f, 0xa4, 0xec, 0x95, 0xde, 0x08, 0x23, 0xf5, 0x6d, 0xa8, 0xa1, 0x7c, 0x17, 0x1b, 0xec, 0x8a, - 0xb7, 0x7b, 0xf3, 0x01, 0xdf, 0x7a, 0x87, 0xd0, 0xe9, 0x1b, 0x6c, 0x15, 0xb6, 0x7b, 0xf3, 0x01, - 0xdf, 0xfa, 0x93, 0x12, 0x9d, 0xbe, 0xc1, 0x77, 0x25, 0xb6, 0x7b, 0xf3, 0xda, 0xf7, 0x9f, 0x37, - 0x03, 0xd7, 0x75, 0x5e, 0xe7, 0x61, 0x33, 0x91, 0x5e, 0x31, 0x2c, 0x9d, 0xf4, 0xed, 0x19, 0x34, - 0x94, 0x4e, 0xd2, 0x2a, 0xce, 0x47, 0xdd, 0xb0, 0x52, 0x1c, 0xf3, 0x2a, 0x95, 0x97, 0x44, 0x9e, - 0xf6, 0x30, 0xda, 0xc0, 0xa1, 0x4d, 0x53, 0x48, 0xc9, 0x3e, 0xee, 0xf6, 0x50, 0x7b, 0x3d, 0xff, - 0x51, 0xc0, 0x5e, 0xfb, 0x96, 0xfe, 0x56, 0x4f, 0xda, 0x3e, 0x78, 0xf6, 0x98, 0xe6, 0x91, 0xe1, - 0x84, 0xa1, 0xab, 0x84, 0x31, 0x65, 0x1e, 0x25, 0xbb, 0xcf, 0x4e, 0x1f, 0xf7, 0x57, 0xe8, 0x70, - 0x3f, 0x4a, 0x92, 0x7e, 0xee, 0xdd, 0x67, 0xee, 0x8f, 0xfb, 0x2b, 0x68, 0xf7, 0x7f, 0xd9, 0x6c, - 0x6b, 0xa0, 0x7f, 0x3d, 0x06, 0x9f, 0xf4, 0xb1, 0x08, 0xc6, 0xe1, 0xd3, 0x6b, 0xe9, 0xe8, 0x82, - 0xfc, 0x6d, 0xb3, 0x7f, 0x6f, 0x50, 0xf9, 0x8e, 0x94, 0x7c, 0xb7, 0x5a, 0x0f, 0xc9, 0x50, 0x54, - 0x59, 0x18, 0x0e, 0xcc, 0x8f, 0xae, 0xa9, 0xe5, 0x7c, 0x61, 0xd0, 0x83, 0xf5, 0xbb, 0xbc, 0x4e, - 0x79, 0x42, 0x96, 0x1d, 0x1a, 0x16, 0xe8, 0xe3, 0xeb, 0xaa, 0x51, 0x43, 0xd5, 0x81, 0xe5, 0x37, - 0x76, 0x9e, 0xf6, 0x34, 0xec, 0x7d, 0x75, 0xe7, 0xc3, 0xeb, 0x29, 0xe9, 0xb2, 0xfc, 0xc7, 0x5a, - 0x74, 0xcf, 0x63, 0xed, 0xe3, 0x0c, 0x70, 0xe8, 0xf2, 0x83, 0x80, 0x7d, 0x4a, 0xc9, 0x14, 0xee, - 0xb7, 0xbe, 0x99, 0xb2, 0xfd, 0x1c, 0x9f, 0xa7, 0xb2, 0x97, 0x66, 0x82, 0x95, 0xed, 0xcf, 0xf1, - 0xf9, 0x76, 0x15, 0x35, 0xa4, 0x3f, 0xc7, 0x17, 0xc0, 0x9d, 0xcf, 0xf1, 0x21, 0x9e, 0xd1, 0xcf, - 0xf1, 0xa1, 0xd6, 0x82, 0x9f, 0xe3, 0x0b, 0x6b, 0x50, 0xab, 0x4b, 0x53, 0x04, 0x75, 0x6c, 0xde, - 0xcb, 0xa2, 0x7f, 0x8a, 0xfe, 0xe4, 0x3a, 0x2a, 0xc4, 0xfa, 0xaa, 0x38, 0x79, 0xcd, 0xb3, 0x47, - 0x9b, 0x7a, 0x57, 0x3d, 0xb7, 0x7b, 0xf3, 0xda, 0xf7, 0x8f, 0xf4, 0xe6, 0xca, 0xac, 0x26, 0xbc, - 0x94, 0x9f, 0x62, 0xdc, 0x0c, 0xad, 0x0e, 0xb5, 0x05, 0xb7, 0xe7, 0x1f, 0xf5, 0x83, 0x89, 0xea, - 0xd6, 0x84, 0xee, 0xf4, 0x61, 0x97, 0x21, 0xd0, 0xe5, 0xdb, 0xbd, 0x79, 0x62, 0x19, 0x51, 0xbe, - 0x55, 0x6f, 0xf7, 0x30, 0xe6, 0xf7, 0xf5, 0xe3, 0xfe, 0x0a, 0xda, 0xfd, 0x95, 0xce, 0x5a, 0x5d, - 0xf7, 0xb2, 0x9f, 0xb7, 0xba, 0x4c, 0x4d, 0xbc, 0x6e, 0x1e, 0xf6, 0xc5, 0x43, 0xf9, 0x8b, 0xbb, - 0x84, 0x76, 0xe5, 0x2f, 0xe8, 0x32, 0xfa, 0xe1, 0xf5, 0x94, 0x74, 0x59, 0xfe, 0x61, 0x2d, 0xba, - 0x49, 0x96, 0x45, 0xc7, 0xc1, 0xc7, 0x7d, 0x2d, 0x83, 0x78, 0xf8, 0xe4, 0xda, 0x7a, 0xba, 0x50, - 0xff, 0xbc, 0x16, 0xdd, 0x0a, 0x14, 0x4a, 0x05, 0xc8, 0x35, 0xac, 0xfb, 0x81, 0xf2, 0xe9, 0xf5, - 0x15, 0xa9, 0xe5, 0xde, 0xc5, 0x27, 0xed, 0x4f, 0xab, 0x05, 0x6c, 0x4f, 0xe8, 0x4f, 0xab, 0x75, - 0x6b, 0xc1, 0x33, 0xa6, 0xf8, 0xac, 0xd9, 0xf3, 0xa1, 0x67, 0x4c, 0xf2, 0x82, 0x66, 0xf0, 0xa3, - 0x2d, 0x18, 0x87, 0x39, 0x79, 0xfe, 0xba, 0x88, 0xf3, 0x84, 0x76, 0xa2, 0xe4, 0xdd, 0x4e, 0x0c, - 0x07, 0xcf, 0xe6, 0x6a, 0xe9, 0x09, 0x6f, 0xf6, 0x71, 0x0f, 0x28, 0x7d, 0x83, 0x04, 0xcf, 0xe6, - 0x5a, 0x28, 0xe1, 0x4d, 0x67, 0x8d, 0x21, 0x6f, 0x20, 0x59, 0x7c, 0xd8, 0x07, 0x05, 0x3b, 0x04, - 0xe3, 0xcd, 0x1c, 0xf9, 0x3f, 0x0a, 0x59, 0x69, 0x1d, 0xfb, 0x6f, 0xf5, 0xa4, 0x09, 0xb7, 0x13, - 0x26, 0x3e, 0x63, 0x71, 0xc2, 0xca, 0xa0, 0x5b, 0x43, 0xf5, 0x72, 0xeb, 0xd2, 0x98, 0xdb, 0x1d, - 0x9e, 0x2d, 0x17, 0xb9, 0xee, 0x4c, 0xd2, 0xad, 0x4b, 0x75, 0xbb, 0x05, 0x34, 0x3c, 0x95, 0xb4, - 0x6e, 0x65, 0x7a, 0xf9, 0x30, 0x6c, 0xc6, 0xcb, 0x2a, 0x37, 0x7b, 0xb1, 0x74, 0x3d, 0x75, 0x18, - 0x75, 0xd4, 0x13, 0x44, 0xd2, 0x56, 0x4f, 0x1a, 0x1e, 0x0f, 0x3a, 0x6e, 0x4d, 0x3c, 0x6d, 0x77, - 0xd8, 0x6a, 0x85, 0xd4, 0xe3, 0xfe, 0x0a, 0xf0, 0x30, 0x56, 0x47, 0xd5, 0x41, 0x5a, 0x89, 0xbd, - 0x34, 0xcb, 0x06, 0x9b, 0x81, 0x30, 0x69, 0xa0, 0xe0, 0x61, 0x2c, 0x02, 0x13, 0x91, 0xdc, 0x1c, - 0x5e, 0xe6, 0x83, 0x2e, 0x3b, 0x92, 0xea, 0x15, 0xc9, 0x2e, 0x0d, 0x0e, 0xd4, 0x9c, 0xa6, 0x36, - 0xb5, 0x1d, 0x86, 0x1b, 0xae, 0x55, 0xe1, 0xed, 0xde, 0x3c, 0x78, 0xda, 0x2f, 0x29, 0xb9, 0xb2, - 0xdc, 0xa5, 0x4c, 0x78, 0x2b, 0xc9, 0xbd, 0x0e, 0x0a, 0x1c, 0x4a, 0xaa, 0x61, 0xf4, 0x32, 0x4d, - 0xe6, 0x4c, 0xa0, 0x0f, 0xaa, 0x5c, 0x20, 0xf8, 0xa0, 0x0a, 0x80, 0xa0, 0xeb, 0xd4, 0xdf, 0xcd, - 0x69, 0xec, 0x38, 0xc1, 0xba, 0x4e, 0x2b, 0x3b, 0x54, 0xa8, 0xeb, 0x50, 0x1a, 0xcc, 0x06, 0xc6, - 0xad, 0xfe, 0xcc, 0xc5, 0xc3, 0x90, 0x19, 0xf0, 0xad, 0x8b, 0xcd, 0x5e, 0x2c, 0x58, 0x51, 0xac, - 0xc3, 0x74, 0x91, 0x0a, 0x6c, 0x45, 0x71, 0x6c, 0xd4, 0x48, 0x68, 0x45, 0x69, 0xa3, 0x54, 0xf5, - 0xea, 0x1c, 0x61, 0x9c, 0x84, 0xab, 0xa7, 0x98, 0x7e, 0xd5, 0x33, 0x6c, 0xeb, 0xb9, 0x6a, 0x6e, - 0x42, 0x46, 0x5c, 0xe8, 0xcd, 0x32, 0x12, 0xdb, 0xf2, 0xf5, 0x67, 0x08, 0x86, 0x66, 0x1d, 0x4a, - 0x01, 0x3e, 0x2f, 0xa8, 0xb9, 0xe6, 0xd1, 0x6f, 0x51, 0xb0, 0xb8, 0x8c, 0xf3, 0x19, 0xba, 0x39, - 0x95, 0x06, 0x5b, 0x64, 0x68, 0x73, 0x4a, 0x6a, 0x80, 0xa7, 0xf6, 0xfe, 0xfb, 0xc5, 0xc8, 0x50, - 0x30, 0x2f, 0xf2, 0xfa, 0xaf, 0x17, 0x3f, 0xe8, 0x41, 0xc2, 0xa7, 0xf6, 0x0d, 0x60, 0xce, 0xdd, - 0x95, 0xd3, 0x0f, 0x02, 0xa6, 0x7c, 0x34, 0xb4, 0x11, 0xa6, 0x55, 0x40, 0x50, 0x3b, 0x67, 0x8b, - 0x9f, 0xb3, 0x15, 0x16, 0xd4, 0xee, 0x21, 0xe1, 0xe7, 0x6c, 0x15, 0x0a, 0xea, 0x36, 0x0a, 0xf2, - 0x4c, 0x77, 0x1f, 0xb4, 0x1e, 0xd0, 0x77, 0xb7, 0x3e, 0x1b, 0x9d, 0x1c, 0x18, 0x39, 0xbb, 0xe9, - 0x95, 0xf7, 0x98, 0x02, 0x29, 0xe8, 0x6e, 0x7a, 0x85, 0x3f, 0xa5, 0xd8, 0xec, 0xc5, 0xc2, 0x1b, - 0x01, 0xb1, 0x60, 0xaf, 0x9b, 0x47, 0xf5, 0x48, 0x71, 0xa5, 0xbc, 0xf5, 0xac, 0xfe, 0x7e, 0x37, - 0x68, 0xef, 0xdf, 0x1e, 0x97, 0x7c, 0xc6, 0xaa, 0x4a, 0x7f, 0x01, 0xd6, 0xbf, 0xe0, 0xa4, 0x65, - 0x43, 0xf0, 0xfd, 0xd7, 0xbb, 0x61, 0xc8, 0xf9, 0x6c, 0xa3, 0x12, 0xd9, 0xaf, 0x49, 0xad, 0xa3, - 0x9a, 0xed, 0x0f, 0x49, 0x6d, 0x74, 0x72, 0x76, 0x78, 0x69, 0xa9, 0xfb, 0xf9, 0xa8, 0xfb, 0xa8, - 0x3a, 0xf6, 0xe5, 0xa8, 0x07, 0x3d, 0x48, 0xed, 0xea, 0xb3, 0xe8, 0xcd, 0x03, 0x3e, 0x9f, 0xb0, - 0x3c, 0x19, 0x7c, 0xcf, 0xbf, 0xc1, 0xcb, 0xe7, 0xc3, 0xfa, 0xcf, 0xc6, 0xe8, 0x0d, 0x4a, 0x6c, - 0xef, 0x20, 0xee, 0xb2, 0xb3, 0xe5, 0x7c, 0x22, 0x62, 0x01, 0xee, 0x20, 0xca, 0xbf, 0x0f, 0x6b, - 0x01, 0x71, 0x07, 0xd1, 0x03, 0x80, 0xbd, 0x69, 0xc9, 0x18, 0x6a, 0xaf, 0x16, 0x04, 0xed, 0x69, - 0xc0, 0x66, 0x11, 0xc6, 0x5e, 0x9d, 0xa8, 0xc3, 0x3b, 0x83, 0x56, 0x47, 0x4a, 0x89, 0x2c, 0xa2, - 0x4d, 0xd9, 0xe0, 0x56, 0xd5, 0x97, 0x5f, 0xf3, 0x59, 0x2e, 0x16, 0x71, 0xb9, 0x02, 0xc1, 0xad, - 0x6b, 0xe9, 0x00, 0x44, 0x70, 0xa3, 0xa0, 0x1d, 0xb5, 0x4d, 0x33, 0xcf, 0x2e, 0xf7, 0x79, 0xc9, - 0x97, 0x22, 0xcd, 0x19, 0xfc, 0xa2, 0x8b, 0x69, 0x50, 0x97, 0x21, 0x46, 0x2d, 0xc5, 0xda, 0x2c, - 0x57, 0x12, 0xea, 0x3a, 0xa3, 0xfc, 0x04, 0x7e, 0x25, 0x78, 0x09, 0x1f, 0x67, 0x2a, 0x2b, 0x10, - 0x22, 0xb2, 0x5c, 0x12, 0x06, 0x7d, 0x7f, 0x9c, 0xe6, 0x73, 0xb4, 0xef, 0x8f, 0xdd, 0xaf, 0x2a, - 0xdf, 0xa2, 0x01, 0x3b, 0xa0, 0x54, 0xa3, 0xa9, 0x01, 0xa0, 0x5f, 0x65, 0x46, 0x1b, 0xdd, 0x25, - 0x88, 0x01, 0x85, 0x93, 0xc0, 0xd5, 0x17, 0x05, 0xcb, 0x59, 0xd2, 0x5c, 0xda, 0xc3, 0x5c, 0x79, - 0x44, 0xd0, 0x15, 0x24, 0xed, 0x5c, 0x24, 0xe5, 0x27, 0xcb, 0xfc, 0xb8, 0xe4, 0xe7, 0x69, 0xc6, - 0x4a, 0x30, 0x17, 0x29, 0x75, 0x47, 0x4e, 0xcc, 0x45, 0x18, 0x67, 0x6f, 0x7f, 0x48, 0xa9, 0xf7, - 0x3b, 0x0e, 0xd3, 0x32, 0x9e, 0xc1, 0xdb, 0x1f, 0xca, 0x46, 0x1b, 0x23, 0x4e, 0x06, 0x03, 0xb8, - 0x93, 0xe8, 0x28, 0xd7, 0xf9, 0x4a, 0xc6, 0x87, 0x7e, 0x95, 0x56, 0x7e, 0x6b, 0xb8, 0x02, 0x89, - 0x8e, 0x36, 0x87, 0x91, 0x44, 0xa2, 0x13, 0xd6, 0xb0, 0x4b, 0x89, 0xe4, 0x8e, 0xf4, 0xad, 0x26, - 0xb0, 0x94, 0x28, 0x1b, 0x8d, 0x90, 0x58, 0x4a, 0x5a, 0x10, 0x98, 0x90, 0x9a, 0x61, 0x30, 0x47, - 0x27, 0x24, 0x23, 0x0d, 0x4e, 0x48, 0x2e, 0x65, 0x27, 0x8a, 0x71, 0x9e, 0x8a, 0x34, 0xce, 0x26, - 0x4c, 0x1c, 0xc7, 0x65, 0xbc, 0x60, 0x82, 0x95, 0x70, 0xa2, 0xd0, 0xc8, 0xd0, 0x63, 0x88, 0x89, - 0x82, 0x62, 0xb5, 0xc3, 0xdf, 0x8e, 0xde, 0xae, 0xd7, 0x7d, 0x96, 0xeb, 0x5f, 0xa0, 0x7a, 0x2e, - 0x7f, 0xba, 0x6e, 0xf0, 0x8e, 0xb1, 0x31, 0x11, 0x25, 0x8b, 0x17, 0x8d, 0xed, 0xb7, 0xcc, 0xdf, - 0x25, 0xf8, 0x78, 0xad, 0x8e, 0xe7, 0x23, 0x2e, 0xd2, 0xf3, 0x7a, 0x9b, 0xad, 0x5f, 0x60, 0x02, - 0xf1, 0xec, 0x8a, 0x87, 0x81, 0x4f, 0xb1, 0x60, 0x9c, 0x9d, 0xa7, 0x5d, 0xe9, 0x09, 0x2b, 0x32, - 0x38, 0x4f, 0x7b, 0xda, 0x12, 0x20, 0xe6, 0x69, 0x14, 0xb4, 0x83, 0xd3, 0x15, 0x4f, 0x59, 0xb8, - 0x32, 0x53, 0xd6, 0xaf, 0x32, 0x53, 0xef, 0x9d, 0x90, 0x2c, 0x7a, 0xfb, 0x90, 0x2d, 0xce, 0x58, - 0x59, 0x5d, 0xa4, 0x05, 0xf5, 0x3d, 0x64, 0x4b, 0x74, 0x7e, 0x0f, 0x99, 0x40, 0xed, 0x4a, 0x60, - 0x81, 0x71, 0x75, 0x14, 0x2f, 0x98, 0xfc, 0xb0, 0x0c, 0x58, 0x09, 0x1c, 0x23, 0x0e, 0x44, 0xac, - 0x04, 0x24, 0xec, 0xbc, 0x5e, 0x66, 0x99, 0x13, 0x36, 0xaf, 0x23, 0xac, 0x3c, 0x8e, 0x57, 0x0b, - 0x96, 0x0b, 0x6d, 0x12, 0x9c, 0xc9, 0x3b, 0x26, 0x71, 0x9e, 0x38, 0x93, 0xef, 0xa3, 0xe7, 0x4c, - 0x4d, 0x5e, 0xc3, 0x1f, 0xf3, 0x52, 0xa8, 0xdf, 0x97, 0x3b, 0x2d, 0x33, 0x30, 0x35, 0xf9, 0x8d, - 0xea, 0x91, 0xc4, 0xd4, 0x14, 0xd6, 0x70, 0x7e, 0x4b, 0xc4, 0x2b, 0xc3, 0x0b, 0x56, 0x9a, 0x38, - 0x79, 0xbe, 0x88, 0xd3, 0x4c, 0x47, 0xc3, 0xf7, 0x03, 0xb6, 0x09, 0x1d, 0xe2, 0xb7, 0x44, 0xfa, - 0xea, 0x3a, 0xbf, 0xbe, 0x12, 0x2e, 0x21, 0x78, 0x44, 0xd0, 0x61, 0x9f, 0x78, 0x44, 0xd0, 0xad, - 0x65, 0x77, 0xee, 0x96, 0x95, 0xdc, 0x4a, 0x12, 0x3b, 0x3c, 0x81, 0xe7, 0x85, 0x8e, 0x4d, 0x00, - 0x12, 0x3b, 0xf7, 0xa0, 0x82, 0x4d, 0x0d, 0x2c, 0xb6, 0x97, 0xe6, 0x71, 0x96, 0xfe, 0x18, 0xa6, - 0xf5, 0x8e, 0x9d, 0x86, 0x20, 0x52, 0x03, 0x9c, 0xc4, 0x5c, 0xed, 0x33, 0x31, 0x4d, 0xeb, 0xa9, - 0xff, 0x7e, 0xa0, 0xdd, 0x24, 0xd1, 0xed, 0xca, 0x21, 0x9d, 0x6f, 0x1f, 0xc3, 0x66, 0x1d, 0x15, - 0xc5, 0xa4, 0x5e, 0x55, 0x4f, 0xd8, 0x8c, 0xa5, 0x85, 0x18, 0x7c, 0x14, 0x6e, 0x2b, 0x80, 0x13, - 0x17, 0x2d, 0x7a, 0xa8, 0x39, 0x8f, 0xef, 0xeb, 0xb9, 0x64, 0xa2, 0x7e, 0x78, 0xf5, 0xb4, 0x62, - 0xa5, 0x4e, 0x34, 0xf6, 0x99, 0x00, 0xa3, 0xd3, 0xe1, 0x86, 0x0e, 0x58, 0x57, 0x94, 0x18, 0x9d, - 0x61, 0x0d, 0x7b, 0xd8, 0xe7, 0x70, 0xfa, 0xdb, 0x01, 0xf2, 0xba, 0xe3, 0x23, 0xd2, 0x98, 0x43, - 0x11, 0x87, 0x7d, 0x34, 0x6d, 0xb3, 0xb5, 0xb6, 0xdb, 0x51, 0xbe, 0x1a, 0xc3, 0x2b, 0x13, 0x88, - 0x25, 0x89, 0x11, 0xd9, 0x5a, 0x00, 0x77, 0x0e, 0xc3, 0x4b, 0x1e, 0x27, 0xb3, 0xb8, 0x12, 0xc7, - 0xf1, 0x2a, 0xe3, 0x71, 0x22, 0xd7, 0x75, 0x78, 0x18, 0xde, 0x30, 0x43, 0x17, 0xa2, 0x0e, 0xc3, - 0x29, 0xd8, 0xcd, 0xce, 0xe4, 0xef, 0xc9, 0xea, 0xab, 0xa4, 0x30, 0x3b, 0x93, 0xe5, 0x85, 0xd7, - 0x48, 0xef, 0x86, 0x21, 0xfb, 0x0a, 0x9c, 0x12, 0xc9, 0x34, 0xe4, 0x16, 0xa6, 0xe3, 0x25, 0x20, - 0xef, 0x07, 0x08, 0xfb, 0x59, 0x16, 0xf5, 0xf7, 0xe6, 0x27, 0xc4, 0x84, 0xfe, 0x42, 0xfc, 0x23, - 0x4c, 0xd7, 0x85, 0xbc, 0x1b, 0x6a, 0x5b, 0x3d, 0x69, 0x9b, 0x66, 0xee, 0x5c, 0xc4, 0x62, 0x94, - 0x24, 0x87, 0xac, 0x42, 0xde, 0x67, 0xaf, 0x85, 0x43, 0x2b, 0x25, 0xd2, 0xcc, 0x36, 0x65, 0x03, - 0xbd, 0x96, 0x3d, 0x4f, 0x52, 0xa1, 0x65, 0xcd, 0x05, 0xed, 0x47, 0x6d, 0x03, 0x6d, 0x8a, 0xa8, - 0x15, 0x4d, 0xdb, 0xb9, 0xbc, 0x66, 0xa6, 0x7c, 0x3e, 0xcf, 0x98, 0x86, 0x4e, 0x58, 0xac, 0x3e, - 0x90, 0xb9, 0xdd, 0xb6, 0x85, 0x82, 0xc4, 0x5c, 0x1e, 0x54, 0xb0, 0x69, 0x64, 0x8d, 0xa9, 0x47, - 0x52, 0x4d, 0xc3, 0x6e, 0xb4, 0xcd, 0x78, 0x00, 0x91, 0x46, 0xa2, 0xa0, 0x7d, 0xed, 0xae, 0x16, - 0xef, 0xb3, 0xa6, 0x25, 0xe0, 0x17, 0xb8, 0xa4, 0xb2, 0x23, 0x26, 0x5e, 0xbb, 0x43, 0x30, 0xbb, - 0x4f, 0x00, 0x1e, 0x9e, 0xad, 0xc6, 0x09, 0xdc, 0x27, 0x40, 0x7d, 0xc9, 0x10, 0xfb, 0x04, 0x8a, - 0xf5, 0xbb, 0xce, 0x9c, 0x7b, 0x1d, 0xc4, 0x95, 0xad, 0x1c, 0xd2, 0x75, 0x28, 0x18, 0xea, 0x3a, - 0x4a, 0xc1, 0x6f, 0x52, 0xf7, 0x68, 0x0d, 0x69, 0x52, 0xec, 0x5c, 0x6d, 0xbd, 0x0b, 0xb3, 0xb9, - 0x7f, 0x2d, 0x3c, 0x61, 0x71, 0x62, 0x2a, 0x86, 0xe8, 0xba, 0x72, 0x22, 0xf7, 0xc7, 0x38, 0xed, - 0xe4, 0xf7, 0xa2, 0x81, 0xaa, 0x46, 0xe9, 0xba, 0xb9, 0x85, 0x15, 0xb1, 0x26, 0x88, 0x89, 0xca, - 0x27, 0x9c, 0xc4, 0xcd, 0xeb, 0xa2, 0x29, 0xd7, 0x0e, 0xf4, 0x6b, 0xa1, 0x15, 0x48, 0xdc, 0xfc, - 0x66, 0x6f, 0xd1, 0x44, 0xe2, 0xd6, 0xad, 0xe5, 0x7c, 0x8c, 0x08, 0x74, 0xd9, 0x5e, 0xc9, 0x17, - 0xb0, 0x4c, 0x9f, 0x06, 0xbb, 0x07, 0xd1, 0x20, 0x3e, 0x46, 0xd4, 0x4f, 0xd3, 0xae, 0x41, 0xe6, - 0xec, 0x40, 0x5e, 0x4f, 0xc3, 0x7f, 0x05, 0x45, 0x09, 0x89, 0x35, 0xa8, 0x05, 0x39, 0x3f, 0x9d, - 0x3a, 0x7e, 0x59, 0xa6, 0x22, 0xcd, 0xe7, 0x53, 0xce, 0x33, 0x78, 0x64, 0x39, 0x1a, 0x0f, 0x5d, - 0x29, 0xf5, 0xd3, 0xa9, 0x2d, 0xca, 0x2e, 0x71, 0xa3, 0xf1, 0x68, 0x29, 0xf8, 0x79, 0x9a, 0x65, - 0x20, 0x72, 0x46, 0xe3, 0x61, 0x23, 0x21, 0x22, 0xc7, 0x27, 0x9c, 0x1f, 0xfc, 0x1c, 0xcb, 0xd3, - 0x7f, 0x7d, 0x02, 0x7a, 0x07, 0xea, 0x38, 0x42, 0xea, 0x07, 0x3f, 0x21, 0xe4, 0xfc, 0x80, 0xe9, - 0x18, 0xfb, 0x29, 0x97, 0x4d, 0xa8, 0x8e, 0x40, 0xd4, 0x0f, 0x98, 0x52, 0xb0, 0xf3, 0x4e, 0xf2, - 0xf1, 0xb2, 0xba, 0xf0, 0x8f, 0x0c, 0xd4, 0xe6, 0x50, 0x7d, 0xb6, 0xf5, 0x29, 0xf8, 0x41, 0x21, - 0x9f, 0x1d, 0x7a, 0x30, 0x71, 0x3d, 0xad, 0x53, 0x49, 0x15, 0xe6, 0xd9, 0xfb, 0xff, 0xf5, 0xd5, - 0x8d, 0xb5, 0x9f, 0x7e, 0x75, 0x63, 0xed, 0x7f, 0xbe, 0xba, 0xb1, 0xf6, 0x93, 0xaf, 0x6f, 0xbc, - 0xf1, 0xd3, 0xaf, 0x6f, 0xbc, 0xf1, 0xdf, 0x5f, 0xdf, 0x78, 0xe3, 0xcb, 0x37, 0x2b, 0x95, 0x9b, - 0x9d, 0xfd, 0x5c, 0x51, 0x72, 0xc1, 0x9f, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc7, 0xe9, - 0x8b, 0xe6, 0x86, 0x80, 0x00, 0x00, + 0x52, 0xc0, 0xcf, 0x3c, 0xb0, 0x50, 0xc7, 0x2d, 0xd0, 0x0b, 0xcb, 0xdd, 0x72, 0x37, 0x33, 0x3b, + 0x1f, 0xf6, 0xcc, 0x78, 0xdc, 0x9e, 0x9d, 0xd9, 0x2f, 0xee, 0x90, 0xa0, 0xc7, 0x1e, 0x7b, 0xfb, + 0xd6, 0xf6, 0x18, 0x77, 0x7b, 0x46, 0xac, 0x84, 0x44, 0xb9, 0x2b, 0xdd, 0x2e, 0x5c, 0x5d, 0x59, + 0x57, 0x95, 0xed, 0x99, 0x3e, 0x04, 0x3a, 0x74, 0x08, 0x04, 0x02, 0x71, 0xe2, 0x4b, 0xf0, 0x84, + 0xc4, 0x5f, 0xc0, 0x9f, 0xc1, 0xe3, 0x3d, 0xf2, 0x88, 0x76, 0xff, 0x11, 0x54, 0x99, 0x59, 0xf9, + 0x11, 0x15, 0x91, 0x55, 0x5e, 0x9e, 0x66, 0xe4, 0xf8, 0x45, 0x44, 0x7e, 0x46, 0x46, 0x66, 0x65, + 0x55, 0x47, 0x37, 0x8b, 0xb3, 0xed, 0xa2, 0xe4, 0x82, 0x57, 0xdb, 0x15, 0x2b, 0xaf, 0xd2, 0x19, + 0x6b, 0xfe, 0x1d, 0xca, 0x3f, 0x0f, 0xde, 0x8a, 0xf3, 0x95, 0x58, 0x15, 0xec, 0xbd, 0x6f, 0x5b, + 0x72, 0xc6, 0x17, 0x8b, 0x38, 0x4f, 0x2a, 0x85, 0xbc, 0xf7, 0xae, 0x95, 0xb0, 0x2b, 0x96, 0x0b, + 0xfd, 0xf7, 0x27, 0x3f, 0xf9, 0xe9, 0x2f, 0x44, 0x6f, 0xef, 0x64, 0x29, 0xcb, 0xc5, 0x8e, 0xd6, + 0x18, 0x7c, 0x11, 0x7d, 0x6b, 0x54, 0x14, 0xfb, 0x4c, 0xbc, 0x64, 0x65, 0x95, 0xf2, 0x7c, 0x70, + 0x67, 0xa8, 0x1d, 0x0c, 0x4f, 0x8a, 0xd9, 0x70, 0x54, 0x14, 0x43, 0x2b, 0x1c, 0x9e, 0xb0, 0x1f, + 0x2d, 0x59, 0x25, 0xde, 0xbb, 0x1b, 0x86, 0xaa, 0x82, 0xe7, 0x15, 0x1b, 0x9c, 0x47, 0xbf, 0x3e, + 0x2a, 0x8a, 0x09, 0x13, 0xbb, 0xac, 0xae, 0xc0, 0x44, 0xc4, 0x82, 0x0d, 0x36, 0x5a, 0xaa, 0x3e, + 0x60, 0x7c, 0xdc, 0xef, 0x06, 0xb5, 0x9f, 0x69, 0xf4, 0xcd, 0xda, 0xcf, 0xc5, 0x52, 0x24, 0xfc, + 0x75, 0x3e, 0x78, 0xbf, 0xad, 0xa8, 0x45, 0xc6, 0xf6, 0xed, 0x10, 0xa2, 0xad, 0xbe, 0x8a, 0x7e, + 0xe5, 0x55, 0x9c, 0x65, 0x4c, 0xec, 0x94, 0xac, 0x2e, 0xb8, 0xaf, 0xa3, 0x44, 0x43, 0x25, 0x33, + 0x76, 0xef, 0x04, 0x19, 0x6d, 0xf8, 0x8b, 0xe8, 0x5b, 0x4a, 0x72, 0xc2, 0x66, 0xfc, 0x8a, 0x95, + 0x03, 0x54, 0x4b, 0x0b, 0x89, 0x26, 0x6f, 0x41, 0xd0, 0xf6, 0x0e, 0xcf, 0xaf, 0x58, 0x29, 0x70, + 0xdb, 0x5a, 0x18, 0xb6, 0x6d, 0x21, 0x6d, 0xfb, 0x6f, 0xd6, 0xa2, 0xef, 0x8e, 0x66, 0x33, 0xbe, + 0xcc, 0xc5, 0x01, 0x9f, 0xc5, 0xd9, 0x41, 0x9a, 0x5f, 0x1e, 0xb1, 0xd7, 0x3b, 0x17, 0x35, 0x9f, + 0xcf, 0xd9, 0xe0, 0xa9, 0xdf, 0xaa, 0x0a, 0x1d, 0x1a, 0x76, 0xe8, 0xc2, 0xc6, 0xf7, 0x87, 0xd7, + 0x53, 0xd2, 0x65, 0xf9, 0x87, 0xb5, 0xe8, 0x06, 0x2c, 0xcb, 0x84, 0x67, 0x57, 0xcc, 0x96, 0xe6, + 0xa3, 0x0e, 0xc3, 0x3e, 0x6e, 0xca, 0xf3, 0xf1, 0x75, 0xd5, 0x74, 0x89, 0x7e, 0xb2, 0x16, 0x7d, + 0x07, 0x96, 0x48, 0xf5, 0xfc, 0xa8, 0x28, 0x06, 0x8f, 0x3b, 0xac, 0x1a, 0xd2, 0x94, 0xe3, 0x83, + 0x6b, 0x68, 0xe8, 0x22, 0xfc, 0x59, 0xf4, 0x6d, 0x58, 0x82, 0x83, 0xb4, 0x12, 0xa3, 0xa2, 0xa8, + 0x06, 0xdb, 0x1d, 0xe6, 0x1a, 0xd0, 0xf8, 0x7f, 0xdc, 0x5f, 0x21, 0xd0, 0x02, 0x27, 0xec, 0x8a, + 0x5f, 0xf6, 0x6a, 0x01, 0x43, 0xf6, 0x6e, 0x01, 0x57, 0x43, 0x17, 0x21, 0x8b, 0xde, 0x71, 0xe7, + 0xec, 0x84, 0x55, 0x32, 0xa6, 0x3d, 0xa0, 0xa7, 0xa5, 0x46, 0x8c, 0xd3, 0x87, 0x7d, 0x50, 0xed, + 0x2d, 0x8d, 0x06, 0xda, 0x5b, 0xc6, 0x2b, 0xe3, 0xec, 0x3e, 0x6a, 0xc1, 0x21, 0x8c, 0xaf, 0x07, + 0x3d, 0x48, 0xed, 0xea, 0x8f, 0xa3, 0x5f, 0x7d, 0xc5, 0xcb, 0xcb, 0xaa, 0x88, 0x67, 0x4c, 0xc7, + 0xa3, 0x7b, 0xbe, 0x76, 0x23, 0x85, 0x21, 0x69, 0xbd, 0x0b, 0x73, 0x22, 0x47, 0x23, 0x7c, 0x51, + 0x30, 0xb8, 0x10, 0x58, 0xc5, 0x5a, 0x48, 0x45, 0x0e, 0x08, 0x69, 0xdb, 0x97, 0xd1, 0xc0, 0xda, + 0x3e, 0xfb, 0x13, 0x36, 0x13, 0xa3, 0x24, 0x81, 0xbd, 0x62, 0x75, 0x25, 0x31, 0x1c, 0x25, 0x09, + 0xd5, 0x2b, 0x38, 0xaa, 0x9d, 0xbd, 0x8e, 0xde, 0x05, 0xce, 0xe4, 0x50, 0x4d, 0x92, 0xc1, 0x56, + 0xd8, 0x8a, 0xc6, 0x8c, 0xd3, 0x61, 0x5f, 0xdc, 0x19, 0xff, 0x88, 0xe7, 0x13, 0xb6, 0xe0, 0x57, + 0x0c, 0x8c, 0x7f, 0xd4, 0x9a, 0x22, 0x89, 0xf1, 0x1f, 0xd6, 0x40, 0x86, 0xc9, 0x84, 0x65, 0x6c, + 0x26, 0xc8, 0x61, 0xa2, 0xc4, 0x9d, 0xc3, 0xc4, 0x60, 0xce, 0x0c, 0x6b, 0x84, 0xfb, 0x4c, 0xec, + 0x2c, 0xcb, 0x92, 0xe5, 0x82, 0xec, 0x4b, 0x8b, 0x74, 0xf6, 0xa5, 0x87, 0x22, 0xf5, 0xd9, 0x67, + 0x62, 0x94, 0x65, 0x64, 0x7d, 0x94, 0xb8, 0xb3, 0x3e, 0x06, 0xd3, 0x1e, 0x66, 0xd1, 0xaf, 0x39, + 0x2d, 0x26, 0xc6, 0xf9, 0x39, 0x1f, 0xd0, 0x6d, 0x21, 0xe5, 0xc6, 0xc7, 0x46, 0x27, 0x87, 0x54, + 0xe3, 0xf9, 0x9b, 0x82, 0x97, 0x74, 0xb7, 0x28, 0x71, 0x67, 0x35, 0x0c, 0xa6, 0x3d, 0xfc, 0x51, + 0xf4, 0xb6, 0x0e, 0x90, 0x4d, 0x52, 0x71, 0x17, 0x8d, 0x9e, 0x30, 0xab, 0xb8, 0xd7, 0x41, 0xb5, + 0xcc, 0x1f, 0xa6, 0xf3, 0xb2, 0x8e, 0x3e, 0xb8, 0x79, 0x2d, 0xed, 0x30, 0x6f, 0x29, 0x6d, 0x9e, + 0x47, 0xbf, 0xe1, 0x9b, 0xdf, 0x89, 0xf3, 0x19, 0xcb, 0x06, 0x0f, 0x43, 0xea, 0x8a, 0x31, 0xae, + 0x36, 0x7b, 0xb1, 0x36, 0xd8, 0x69, 0x42, 0x07, 0xd3, 0x3b, 0xa8, 0x36, 0x08, 0xa5, 0x77, 0xc3, + 0x50, 0xcb, 0xf6, 0x2e, 0xcb, 0x18, 0x69, 0x5b, 0x09, 0x3b, 0x6c, 0x1b, 0x48, 0xdb, 0x2e, 0xa3, + 0xdf, 0x34, 0xdd, 0x5c, 0x27, 0x67, 0x52, 0x5e, 0x2f, 0x3a, 0x9b, 0x44, 0x3f, 0xba, 0x90, 0xf1, + 0xf5, 0xa8, 0x1f, 0xdc, 0xaa, 0x8f, 0x8e, 0x28, 0x78, 0x7d, 0x40, 0x3c, 0xb9, 0x1b, 0x86, 0xb4, + 0xed, 0xbf, 0x5d, 0x8b, 0xbe, 0xa7, 0x65, 0xcf, 0xf3, 0xf8, 0x2c, 0x63, 0x72, 0x75, 0x3f, 0x62, + 0xe2, 0x35, 0x2f, 0x2f, 0x27, 0xab, 0x7c, 0x46, 0xe4, 0x94, 0x38, 0xdc, 0x91, 0x53, 0x92, 0x4a, + 0xba, 0x30, 0x7f, 0x6a, 0xd2, 0xa7, 0x9d, 0x8b, 0x38, 0x9f, 0xb3, 0x1f, 0x56, 0x3c, 0x1f, 0x15, + 0xe9, 0x28, 0x49, 0xca, 0xc1, 0x10, 0xef, 0x7a, 0xc8, 0x99, 0x12, 0x6c, 0xf7, 0xe6, 0x9d, 0x3d, + 0x8c, 0x6e, 0x65, 0xc1, 0x0b, 0xb8, 0x87, 0x69, 0x9a, 0x4f, 0xf0, 0x82, 0xda, 0xc3, 0xf8, 0x48, + 0xcb, 0xea, 0x61, 0xbd, 0x06, 0xe1, 0x56, 0x0f, 0xdd, 0x45, 0xe7, 0x76, 0x08, 0xb1, 0x6b, 0x40, + 0xd3, 0x50, 0x3c, 0x3f, 0x4f, 0xe7, 0xa7, 0x45, 0x52, 0xcf, 0xa1, 0x07, 0x78, 0x9d, 0x1d, 0x84, + 0x58, 0x03, 0x08, 0x54, 0x7b, 0xfb, 0x7b, 0x9b, 0xea, 0xeb, 0xb8, 0xb4, 0x57, 0xf2, 0xc5, 0x01, + 0x9b, 0xc7, 0xb3, 0x95, 0x0e, 0xa6, 0x1f, 0x86, 0xa2, 0x18, 0xa4, 0x4d, 0x21, 0x3e, 0xba, 0xa6, + 0x96, 0x2e, 0xcf, 0x7f, 0xac, 0x45, 0x77, 0xbd, 0x71, 0xa2, 0x07, 0x93, 0x2a, 0xfd, 0x28, 0x4f, + 0x4e, 0x58, 0x25, 0xe2, 0x52, 0x0c, 0xbe, 0x1f, 0x18, 0x03, 0x84, 0x8e, 0x29, 0xdb, 0x0f, 0xbe, + 0x96, 0xae, 0xed, 0xf5, 0x49, 0xbd, 0x4a, 0xe8, 0xf8, 0xe3, 0xf7, 0xba, 0x94, 0xc0, 0xe8, 0x73, + 0x3b, 0x84, 0xd8, 0x5e, 0x97, 0x82, 0x71, 0x7e, 0x95, 0x0a, 0xb6, 0xcf, 0x72, 0x56, 0xb6, 0x7b, + 0x5d, 0xa9, 0xfa, 0x08, 0xd1, 0xeb, 0x04, 0x6a, 0x23, 0x9d, 0xe7, 0xcd, 0x64, 0x1a, 0x9b, 0x01, + 0x23, 0xad, 0x5c, 0xe3, 0x51, 0x3f, 0x98, 0xa8, 0xa1, 0xd8, 0xaf, 0x8d, 0x04, 0x6b, 0xa8, 0x90, + 0x5e, 0x35, 0x34, 0xa8, 0x3d, 0x1d, 0x71, 0xbc, 0xa9, 0xcd, 0x0c, 0x38, 0x1d, 0x71, 0x0d, 0x28, + 0x80, 0x38, 0x1d, 0x41, 0x41, 0x9b, 0x7c, 0x38, 0x7e, 0x5e, 0xa6, 0xec, 0x35, 0x48, 0x3e, 0x5c, + 0xe5, 0x5a, 0x4c, 0x24, 0x1f, 0x08, 0xa6, 0x3d, 0x1c, 0x45, 0xbf, 0x2c, 0x85, 0x3f, 0xe4, 0x69, + 0x3e, 0xb8, 0x89, 0x28, 0xd5, 0x02, 0x63, 0xf5, 0x16, 0x0d, 0x80, 0x12, 0xd7, 0x7f, 0xd5, 0x99, + 0xc0, 0x3d, 0x42, 0x09, 0x24, 0x01, 0xeb, 0x5d, 0x98, 0xcd, 0xfa, 0xa4, 0xb0, 0x8e, 0x96, 0x93, + 0x8b, 0xb8, 0x4c, 0xf3, 0xf9, 0x00, 0xd3, 0x75, 0xe4, 0x44, 0xd6, 0x87, 0x71, 0x60, 0x38, 0x69, + 0xc5, 0x51, 0x51, 0x94, 0x75, 0x10, 0xc6, 0x86, 0x93, 0x8f, 0x04, 0x87, 0x53, 0x0b, 0xc5, 0xbd, + 0xed, 0xb2, 0x59, 0x96, 0xe6, 0x41, 0x6f, 0x1a, 0xe9, 0xe3, 0xcd, 0xa2, 0x60, 0xf0, 0x1e, 0xb0, + 0xf8, 0x8a, 0x35, 0x35, 0xc3, 0x5a, 0xc6, 0x05, 0x82, 0x83, 0x17, 0x80, 0x76, 0x8b, 0x2d, 0xc5, + 0x87, 0xf1, 0x25, 0xab, 0x1b, 0x98, 0xd5, 0x4b, 0xf8, 0x00, 0xd3, 0xf7, 0x08, 0x62, 0x8b, 0x8d, + 0x93, 0xda, 0xd5, 0x32, 0x7a, 0x57, 0xca, 0x8f, 0xe3, 0x52, 0xa4, 0xb3, 0xb4, 0x88, 0xf3, 0x66, + 0xeb, 0x86, 0x45, 0x91, 0x16, 0x65, 0x5c, 0x6e, 0xf5, 0xa4, 0xb5, 0xdb, 0x7f, 0x5d, 0x8b, 0xde, + 0x87, 0x7e, 0x8f, 0x59, 0xb9, 0x48, 0xe5, 0x09, 0x40, 0xa5, 0x42, 0xfe, 0xe0, 0x93, 0xb0, 0xd1, + 0x96, 0x82, 0x29, 0xcd, 0xa7, 0xd7, 0x57, 0xb4, 0x79, 0xdf, 0x44, 0xef, 0x8a, 0x5e, 0x94, 0x49, + 0xeb, 0x98, 0x72, 0xd2, 0x6c, 0x75, 0xa4, 0x90, 0xc8, 0xfb, 0x5a, 0x10, 0x98, 0xe1, 0xa7, 0x79, + 0xd5, 0x58, 0xc7, 0x66, 0xb8, 0x15, 0x07, 0x67, 0xb8, 0x87, 0xd9, 0x19, 0x7e, 0xbc, 0x3c, 0xcb, + 0xd2, 0xea, 0x22, 0xcd, 0xe7, 0x3a, 0xc9, 0xf7, 0x75, 0xad, 0x18, 0xe6, 0xf9, 0x1b, 0x9d, 0x1c, + 0xe6, 0x44, 0x0f, 0x16, 0xd2, 0x09, 0x18, 0x26, 0x1b, 0x9d, 0x9c, 0xdd, 0x7b, 0x59, 0x69, 0xbd, + 0xe9, 0x07, 0x7b, 0x2f, 0x47, 0xb5, 0x96, 0x12, 0x7b, 0xaf, 0x36, 0x65, 0xf7, 0x5e, 0x6e, 0x1d, + 0x2a, 0x9e, 0x5d, 0xb1, 0xd3, 0x32, 0x05, 0x7b, 0x2f, 0xaf, 0x7c, 0x0d, 0x43, 0xec, 0xbd, 0x28, + 0xd6, 0x06, 0x2a, 0x4b, 0xec, 0x33, 0x31, 0x11, 0xb1, 0x58, 0x56, 0x20, 0x50, 0x39, 0x36, 0x0c, + 0x42, 0x04, 0x2a, 0x02, 0xd5, 0xde, 0xfe, 0x20, 0x8a, 0xd4, 0x79, 0x89, 0x3c, 0xd3, 0xf2, 0xd7, + 0x1e, 0x7d, 0x90, 0xe2, 0x1d, 0x68, 0xbd, 0x1f, 0x20, 0x6c, 0x7a, 0xa5, 0xfe, 0x2e, 0x8f, 0xea, + 0x06, 0xa8, 0x86, 0x14, 0x11, 0xe9, 0x15, 0x40, 0x60, 0x41, 0x27, 0x17, 0xfc, 0x35, 0x5e, 0xd0, + 0x5a, 0x12, 0x2e, 0xa8, 0x26, 0xec, 0x13, 0x0c, 0x5d, 0x50, 0xec, 0x09, 0x46, 0x53, 0x8c, 0xd0, + 0x13, 0x0c, 0xc8, 0xd8, 0x31, 0xe3, 0x1a, 0x7e, 0xc6, 0xf9, 0xe5, 0x22, 0x2e, 0x2f, 0xc1, 0x98, + 0xf1, 0x94, 0x1b, 0x86, 0x18, 0x33, 0x14, 0x6b, 0xc7, 0x8c, 0xeb, 0xb0, 0x4e, 0xce, 0x4f, 0xcb, + 0x0c, 0x8c, 0x19, 0xcf, 0x86, 0x46, 0x88, 0x31, 0x43, 0xa0, 0x36, 0x3a, 0xb9, 0xde, 0x26, 0x0c, + 0x1e, 0xd7, 0x78, 0xea, 0x13, 0x46, 0x1d, 0xd7, 0x20, 0x18, 0x1c, 0x42, 0xfb, 0x65, 0x5c, 0x5c, + 0xe0, 0x43, 0x48, 0x8a, 0xc2, 0x43, 0xa8, 0x41, 0x60, 0x7f, 0x4f, 0x58, 0x5c, 0xce, 0x2e, 0xf0, + 0xfe, 0x56, 0xb2, 0x70, 0x7f, 0x1b, 0x06, 0xf6, 0xb7, 0x12, 0xbc, 0x4a, 0xc5, 0xc5, 0x21, 0x13, + 0x31, 0xde, 0xdf, 0x3e, 0x13, 0xee, 0xef, 0x16, 0x6b, 0xb3, 0x7f, 0xd7, 0xe1, 0x64, 0x79, 0x56, + 0xcd, 0xca, 0xf4, 0x8c, 0x0d, 0x02, 0x56, 0x0c, 0x44, 0x64, 0xff, 0x24, 0xac, 0x7d, 0xfe, 0x6c, + 0x2d, 0xba, 0xd9, 0x74, 0x3b, 0xaf, 0x2a, 0xbd, 0xf6, 0xf9, 0xee, 0x3f, 0xc2, 0xfb, 0x97, 0xc0, + 0x89, 0x67, 0x4a, 0x3d, 0xd4, 0x9c, 0xdc, 0x00, 0x2f, 0xd2, 0x69, 0x5e, 0x99, 0x42, 0x7d, 0xd2, + 0xc7, 0xba, 0xa3, 0x40, 0xe4, 0x06, 0xbd, 0x14, 0x6d, 0x5a, 0xa6, 0xfb, 0xa7, 0x91, 0x8d, 0x93, + 0x0a, 0xa4, 0x65, 0x4d, 0x7b, 0x3b, 0x04, 0x91, 0x96, 0xe1, 0x24, 0x1c, 0x0a, 0xfb, 0x25, 0x5f, + 0x16, 0x55, 0xc7, 0x50, 0x00, 0x50, 0x78, 0x28, 0xb4, 0x61, 0xed, 0xf3, 0x4d, 0xf4, 0x5b, 0xee, + 0xf0, 0x73, 0x1b, 0x7b, 0x8b, 0x1e, 0x53, 0x58, 0x13, 0x0f, 0xfb, 0xe2, 0x36, 0xa3, 0x68, 0x3c, + 0x8b, 0x5d, 0x26, 0xe2, 0x34, 0xab, 0x06, 0xeb, 0xb8, 0x8d, 0x46, 0x4e, 0x64, 0x14, 0x18, 0x07, + 0xe3, 0xdb, 0xee, 0xb2, 0xc8, 0xd2, 0x59, 0xfb, 0x61, 0x92, 0xd6, 0x35, 0xe2, 0x70, 0x7c, 0x73, + 0x31, 0x18, 0xaf, 0xeb, 0xd4, 0x4f, 0xfe, 0x67, 0xba, 0x2a, 0x18, 0x1e, 0xaf, 0x3d, 0x24, 0x1c, + 0xaf, 0x21, 0x0a, 0xeb, 0x33, 0x61, 0xe2, 0x20, 0x5e, 0xf1, 0x25, 0x11, 0xaf, 0x8d, 0x38, 0x5c, + 0x1f, 0x17, 0xb3, 0x7b, 0x03, 0xe3, 0x61, 0x9c, 0x0b, 0x56, 0xe6, 0x71, 0xb6, 0x97, 0xc5, 0xf3, + 0x6a, 0x40, 0xc4, 0x18, 0x9f, 0x22, 0xf6, 0x06, 0x34, 0x8d, 0x34, 0xe3, 0xb8, 0xda, 0x8b, 0xaf, + 0x78, 0x99, 0x0a, 0xba, 0x19, 0x2d, 0xd2, 0xd9, 0x8c, 0x1e, 0x8a, 0x7a, 0x1b, 0x95, 0xb3, 0x8b, + 0xf4, 0x8a, 0x25, 0x01, 0x6f, 0x0d, 0xd2, 0xc3, 0x9b, 0x83, 0x22, 0x9d, 0x36, 0xe1, 0xcb, 0x72, + 0xc6, 0xc8, 0x4e, 0x53, 0xe2, 0xce, 0x4e, 0x33, 0x98, 0xf6, 0xf0, 0x97, 0x6b, 0xd1, 0x6f, 0x2b, + 0xa9, 0xfb, 0x84, 0x67, 0x37, 0xae, 0x2e, 0xce, 0x78, 0x5c, 0x26, 0x83, 0x0f, 0x30, 0x3b, 0x28, + 0x6a, 0x5c, 0x3f, 0xb9, 0x8e, 0x0a, 0x6c, 0xd6, 0x3a, 0xef, 0xb6, 0x33, 0x0e, 0x6d, 0x56, 0x0f, + 0x09, 0x37, 0x2b, 0x44, 0x61, 0x00, 0x91, 0x72, 0x75, 0x00, 0xb8, 0x4e, 0xea, 0xfb, 0xa7, 0x80, + 0x1b, 0x9d, 0x1c, 0x8c, 0x8f, 0xb5, 0xd0, 0x1f, 0x2d, 0x5b, 0x94, 0x0d, 0x7c, 0xc4, 0x0c, 0xfb, + 0xe2, 0xa4, 0x67, 0x33, 0x2b, 0xc2, 0x9e, 0x5b, 0x33, 0x63, 0xd8, 0x17, 0x27, 0x3c, 0x3b, 0x61, + 0x2d, 0xe4, 0x19, 0x09, 0x6d, 0xc3, 0xbe, 0x38, 0xcc, 0xbe, 0x34, 0xd3, 0xac, 0x0b, 0x0f, 0x03, + 0x76, 0xe0, 0xda, 0xb0, 0xd9, 0x8b, 0xd5, 0x0e, 0xff, 0x7a, 0x2d, 0xfa, 0xae, 0xf5, 0x78, 0xc8, + 0x93, 0xf4, 0x7c, 0xa5, 0xa0, 0x97, 0x71, 0xb6, 0x64, 0xd5, 0xe0, 0x09, 0x65, 0xad, 0xcd, 0x9a, + 0x12, 0x3c, 0xbd, 0x96, 0x0e, 0x9c, 0x3b, 0xa3, 0xa2, 0xc8, 0x56, 0x53, 0xb6, 0x28, 0x32, 0x72, + 0xee, 0x78, 0x48, 0x78, 0xee, 0x40, 0x14, 0x66, 0xe5, 0x53, 0x5e, 0xe7, 0xfc, 0x68, 0x56, 0x2e, + 0x45, 0xe1, 0xac, 0xbc, 0x41, 0x60, 0xae, 0x34, 0xe5, 0x3b, 0x3c, 0xcb, 0xd8, 0x4c, 0xb4, 0x6f, + 0x89, 0x18, 0x4d, 0x4b, 0x84, 0x73, 0x25, 0x40, 0xda, 0x53, 0xb9, 0x66, 0x0f, 0x19, 0x97, 0xec, + 0xd9, 0xea, 0x20, 0xcd, 0x2f, 0x07, 0x78, 0x5a, 0x60, 0x01, 0xe2, 0x54, 0x0e, 0x05, 0xe1, 0x5e, + 0xf5, 0x34, 0x4f, 0x38, 0xbe, 0x57, 0xad, 0x25, 0xe1, 0xbd, 0xaa, 0x26, 0xa0, 0xc9, 0x13, 0x46, + 0x99, 0xac, 0x25, 0x61, 0x93, 0x9a, 0xc0, 0x42, 0xa1, 0x7e, 0x52, 0x44, 0x86, 0x42, 0xf0, 0x6c, + 0x68, 0xa3, 0x93, 0x83, 0x7b, 0x2e, 0xed, 0x00, 0x1d, 0x11, 0xc0, 0xf8, 0x9d, 0x20, 0x03, 0x87, + 0x7e, 0xb3, 0x1b, 0xde, 0x63, 0x62, 0x76, 0x81, 0x0f, 0x7d, 0x0f, 0x09, 0x0f, 0x7d, 0x88, 0xc2, + 0xb6, 0x9a, 0x72, 0xb3, 0x9b, 0x5f, 0xc7, 0x07, 0x5e, 0x6b, 0x27, 0xbf, 0xd1, 0xc9, 0xc1, 0xb6, + 0x1a, 0x2f, 0xe8, 0xb6, 0x52, 0xb2, 0x70, 0x5b, 0x19, 0x06, 0x96, 0x5e, 0x09, 0xe4, 0x21, 0xd9, + 0x3a, 0xad, 0xe8, 0x1d, 0x93, 0x6d, 0x74, 0x72, 0xda, 0xc9, 0x3f, 0x9b, 0xfd, 0xa1, 0x92, 0x1e, + 0xf1, 0x7a, 0xf2, 0xbd, 0x8c, 0xb3, 0x34, 0x89, 0x05, 0x9b, 0xf2, 0x4b, 0x96, 0xe3, 0x5b, 0x31, + 0x5d, 0x5a, 0xc5, 0x0f, 0x3d, 0x85, 0xf0, 0x56, 0x2c, 0xac, 0x08, 0xc7, 0x89, 0xa2, 0x4f, 0x2b, + 0xb6, 0x13, 0x57, 0x44, 0x88, 0xf4, 0x90, 0xf0, 0x38, 0x81, 0x28, 0x4c, 0x84, 0x95, 0xfc, 0xf9, + 0x9b, 0x82, 0x95, 0x29, 0xcb, 0x67, 0x0c, 0x4f, 0x84, 0x21, 0x15, 0x4e, 0x84, 0x11, 0x1a, 0x6e, + 0x02, 0x77, 0x63, 0xc1, 0x9e, 0xad, 0xa6, 0xe9, 0x82, 0x55, 0x22, 0x5e, 0x14, 0xf8, 0x26, 0x10, + 0x40, 0xe1, 0x4d, 0x60, 0x1b, 0x6e, 0x9d, 0x39, 0x99, 0x48, 0xdb, 0xbe, 0xb5, 0x06, 0x89, 0xc0, + 0xad, 0x35, 0x02, 0x85, 0x0d, 0x6b, 0x01, 0xf4, 0xe9, 0x43, 0xcb, 0x4a, 0xf0, 0xe9, 0x03, 0x4d, + 0xb7, 0x4e, 0xf2, 0x0c, 0x33, 0xa9, 0xa7, 0x66, 0x47, 0xd1, 0x27, 0xee, 0x14, 0xdd, 0xec, 0xc5, + 0xe2, 0x47, 0x87, 0x27, 0x2c, 0x8b, 0xe5, 0x7a, 0x18, 0x38, 0x9f, 0x6b, 0x98, 0x3e, 0x47, 0x87, + 0x0e, 0xab, 0x1d, 0xfe, 0xc5, 0x5a, 0xf4, 0x1e, 0xe6, 0xf1, 0x45, 0x21, 0xfd, 0x3e, 0xee, 0xb6, + 0xa5, 0x48, 0xe2, 0x5a, 0x5e, 0x58, 0xc3, 0xde, 0x2c, 0x69, 0x44, 0xf6, 0xd6, 0x9e, 0x2e, 0x80, + 0x9f, 0x0d, 0x9a, 0xf2, 0x43, 0x8e, 0xb8, 0x59, 0x12, 0xe2, 0xed, 0x46, 0xcb, 0x2f, 0x57, 0x05, + 0x36, 0x5a, 0xc6, 0x86, 0x16, 0x13, 0x1b, 0x2d, 0x04, 0xb3, 0xb3, 0xd3, 0xad, 0xde, 0xab, 0x54, + 0x5c, 0xc8, 0x44, 0x0e, 0xcc, 0x4e, 0xaf, 0xac, 0x06, 0x22, 0x66, 0x27, 0x09, 0xc3, 0x54, 0xa7, + 0x01, 0xeb, 0xb9, 0x89, 0xc5, 0x72, 0x63, 0xc8, 0x9d, 0x99, 0xf7, 0xbb, 0x41, 0x38, 0x5e, 0x1b, + 0xb1, 0xde, 0x53, 0x3d, 0x0c, 0x59, 0x00, 0xfb, 0xaa, 0xcd, 0x5e, 0xac, 0x76, 0xf8, 0xe7, 0xd1, + 0x77, 0x5a, 0x15, 0xdb, 0x63, 0xb1, 0x58, 0x96, 0x2c, 0x01, 0xb7, 0xb8, 0xdb, 0xe5, 0x6e, 0x40, + 0xe2, 0x16, 0x77, 0x50, 0xa1, 0x95, 0xfc, 0x37, 0x9c, 0x1a, 0x56, 0xa6, 0x0c, 0x4f, 0x42, 0x26, + 0x7d, 0x36, 0x98, 0xfc, 0xd3, 0x3a, 0xad, 0xfd, 0xbb, 0x3b, 0xba, 0x46, 0x57, 0x71, 0x9a, 0xc9, + 0xa7, 0xc0, 0x1f, 0x84, 0x8c, 0x7a, 0x68, 0x70, 0xff, 0x4e, 0xaa, 0xb4, 0x22, 0xb3, 0x9c, 0xe3, + 0xce, 0xbe, 0xef, 0x11, 0x1d, 0x09, 0x90, 0x6d, 0xdf, 0x56, 0x4f, 0x5a, 0xbb, 0x15, 0xcd, 0x92, + 0x57, 0xff, 0xd9, 0x1d, 0xe4, 0x98, 0x57, 0xad, 0x8a, 0x8c, 0xf4, 0xad, 0x9e, 0xb4, 0x7d, 0x85, + 0xa0, 0xed, 0x55, 0x2f, 0x44, 0xdb, 0x9d, 0xa6, 0xc0, 0x5a, 0xf4, 0xb8, 0xbf, 0x82, 0x76, 0xff, + 0x6f, 0xe6, 0xc0, 0x5b, 0xf9, 0x9f, 0xf1, 0xc5, 0x82, 0xe5, 0x09, 0x4b, 0x1a, 0x8d, 0xaa, 0xde, + 0x98, 0x7d, 0x4a, 0xdb, 0x35, 0x0a, 0x43, 0x57, 0xc3, 0x94, 0xe8, 0x77, 0xbe, 0x86, 0xa6, 0x2e, + 0xda, 0x7f, 0xad, 0x45, 0x0f, 0xd0, 0xa2, 0x35, 0x03, 0xd7, 0x2b, 0xe2, 0xef, 0xf7, 0x71, 0x84, + 0x69, 0x9a, 0xa2, 0x8e, 0xfe, 0x1f, 0x16, 0x74, 0x91, 0xff, 0x7d, 0x2d, 0xba, 0x6d, 0x15, 0xeb, + 0xe1, 0xbd, 0xc3, 0xf3, 0xf3, 0x2c, 0x9d, 0x09, 0xf9, 0xa8, 0x57, 0xab, 0xd0, 0xcd, 0x49, 0x69, + 0x74, 0x37, 0x67, 0x40, 0x53, 0x97, 0xed, 0x9f, 0xd6, 0xa2, 0x5b, 0x6e, 0x73, 0xca, 0xe7, 0xc4, + 0xea, 0xd8, 0xb5, 0x51, 0xac, 0x06, 0x1f, 0xd3, 0x6d, 0x80, 0xf1, 0xa6, 0x5c, 0x9f, 0x5c, 0x5b, + 0xcf, 0xee, 0xd5, 0x3f, 0x4b, 0x2b, 0xc1, 0xcb, 0xd5, 0xe4, 0x82, 0xbf, 0x6e, 0x5e, 0x89, 0xf3, + 0x57, 0x0b, 0x0d, 0x0c, 0x1d, 0x82, 0xd8, 0xab, 0xe3, 0x64, 0xcb, 0x95, 0x7d, 0x75, 0xae, 0x22, + 0x5c, 0x39, 0x44, 0x87, 0x2b, 0x9f, 0xb4, 0x6b, 0x65, 0x53, 0x2b, 0xfb, 0x9e, 0xdf, 0x06, 0x5e, + 0xd4, 0xf6, 0xbb, 0x7e, 0xf7, 0xbb, 0x41, 0x9b, 0x31, 0x6b, 0xf1, 0x6e, 0x7a, 0x7e, 0x6e, 0xea, + 0x84, 0x97, 0xd4, 0x45, 0x88, 0x8c, 0x99, 0x40, 0xed, 0xa6, 0x6f, 0x2f, 0xcd, 0x98, 0x7c, 0x54, + 0xf5, 0xe2, 0xfc, 0x3c, 0xe3, 0x71, 0x02, 0x36, 0x7d, 0xb5, 0x78, 0xe8, 0xca, 0x89, 0x4d, 0x1f, + 0xc6, 0xd9, 0x4b, 0x30, 0xb5, 0xb4, 0x9e, 0x73, 0xf9, 0x2c, 0xcd, 0xe0, 0x65, 0x6e, 0xa9, 0x69, + 0x84, 0xc4, 0x25, 0x98, 0x16, 0x64, 0x13, 0xb3, 0x5a, 0x54, 0xcf, 0x95, 0xa6, 0xfc, 0xf7, 0xda, + 0x8a, 0x8e, 0x98, 0x48, 0xcc, 0x10, 0xcc, 0x1e, 0xaa, 0xd4, 0xc2, 0xd3, 0x42, 0x1a, 0xbf, 0xd5, + 0xd6, 0x52, 0x12, 0xe2, 0x50, 0xc5, 0x27, 0xec, 0x1e, 0xbe, 0xfe, 0xfb, 0x2e, 0x7f, 0x9d, 0x4b, + 0xa3, 0xb7, 0xdb, 0x2a, 0x8d, 0x8c, 0xd8, 0xc3, 0x43, 0x46, 0x1b, 0xfe, 0x3c, 0xfa, 0x25, 0x69, + 0xb8, 0xe4, 0xc5, 0xe0, 0x06, 0xa2, 0x50, 0x3a, 0x57, 0x9f, 0x6f, 0x92, 0x72, 0x7b, 0x67, 0xc6, + 0x8c, 0x8d, 0xd3, 0x2a, 0x9e, 0xc3, 0xf7, 0x15, 0x6c, 0x8f, 0x4b, 0x29, 0x71, 0x67, 0xa6, 0x4d, + 0xf9, 0xa3, 0xe2, 0x88, 0x27, 0xda, 0x3a, 0x52, 0x43, 0x23, 0x0c, 0x8d, 0x0a, 0x17, 0xb2, 0xc9, + 0xf4, 0x51, 0x7c, 0x95, 0xce, 0x4d, 0xc2, 0xa3, 0xc2, 0x57, 0x05, 0x92, 0x69, 0xcb, 0x0c, 0x1d, + 0x88, 0x48, 0xa6, 0x49, 0xd8, 0x09, 0xc6, 0x96, 0xd9, 0x6f, 0x8e, 0xa1, 0xc7, 0xf9, 0x39, 0xaf, + 0x53, 0xef, 0x83, 0x34, 0xbf, 0x84, 0xc1, 0xd8, 0x31, 0x89, 0xf3, 0x44, 0x30, 0xee, 0xa3, 0x67, + 0x77, 0x4d, 0xcd, 0x19, 0xad, 0xbd, 0xa8, 0xa1, 0x34, 0xc0, 0xae, 0xc9, 0x1c, 0xe5, 0x42, 0x8e, + 0xd8, 0x35, 0x85, 0x78, 0xdb, 0xc5, 0xc6, 0x79, 0xc6, 0x73, 0xd8, 0xc5, 0xd6, 0x42, 0x2d, 0x24, + 0xba, 0xb8, 0x05, 0xd9, 0x78, 0xdc, 0x88, 0xd4, 0xa9, 0xdf, 0x28, 0xcb, 0x40, 0x3c, 0x36, 0xaa, + 0x06, 0x20, 0xe2, 0x31, 0x0a, 0x6a, 0x3f, 0x27, 0xd1, 0x37, 0xeb, 0x26, 0x3d, 0x2e, 0xd9, 0x55, + 0xca, 0xe0, 0x9d, 0x22, 0x47, 0x42, 0xcc, 0x7f, 0x9f, 0xb0, 0x33, 0xeb, 0x34, 0xaf, 0x8a, 0x2c, + 0xae, 0x2e, 0xf4, 0x2d, 0x13, 0xbf, 0xce, 0x8d, 0x10, 0xde, 0x33, 0xb9, 0xd7, 0x41, 0xd9, 0xa0, + 0xde, 0xc8, 0x4c, 0x88, 0x59, 0xc7, 0x55, 0x5b, 0x61, 0x66, 0xa3, 0x93, 0xb3, 0x8f, 0x72, 0xf6, + 0xe3, 0x2c, 0x63, 0xe5, 0xaa, 0x91, 0x1d, 0xc6, 0x79, 0x7a, 0xce, 0x2a, 0x01, 0x1e, 0xe5, 0x68, + 0x6a, 0x08, 0x31, 0xe2, 0x51, 0x4e, 0x00, 0xb7, 0xbb, 0x49, 0xe0, 0x79, 0x9c, 0x27, 0xec, 0x0d, + 0xd8, 0x4d, 0x42, 0x3b, 0x92, 0x21, 0x76, 0x93, 0x14, 0x6b, 0x1f, 0x69, 0x3c, 0xcb, 0xf8, 0xec, + 0x52, 0x2f, 0x01, 0x7e, 0x07, 0x4b, 0x09, 0x5c, 0x03, 0x6e, 0x87, 0x10, 0xbb, 0x08, 0x48, 0xc1, + 0x09, 0x2b, 0xb2, 0x78, 0x06, 0x2f, 0x96, 0x29, 0x1d, 0x2d, 0x23, 0x16, 0x01, 0xc8, 0x80, 0xe2, + 0xea, 0x0b, 0x6b, 0x58, 0x71, 0xc1, 0x7d, 0xb5, 0xdb, 0x21, 0xc4, 0x2e, 0x83, 0x52, 0x30, 0x29, + 0xb2, 0x54, 0x80, 0x69, 0xa0, 0x34, 0xa4, 0x84, 0x98, 0x06, 0x3e, 0x01, 0x4c, 0x1e, 0xb2, 0x72, + 0xce, 0x50, 0x93, 0x52, 0x12, 0x34, 0xd9, 0x10, 0xf6, 0x16, 0xbd, 0xaa, 0x3b, 0x2f, 0x56, 0xe0, + 0x16, 0xbd, 0xae, 0x16, 0x2f, 0x56, 0xc4, 0x2d, 0x7a, 0x0f, 0x00, 0x45, 0x3c, 0x8e, 0x2b, 0x81, + 0x17, 0x51, 0x4a, 0x82, 0x45, 0x6c, 0x08, 0xbb, 0x46, 0xab, 0x22, 0x2e, 0x05, 0x58, 0xa3, 0x75, + 0x01, 0x9c, 0xab, 0x15, 0x37, 0x49, 0xb9, 0x8d, 0x24, 0xaa, 0x57, 0x98, 0xd8, 0x4b, 0x59, 0x96, + 0x54, 0x20, 0x92, 0xe8, 0x76, 0x6f, 0xa4, 0x44, 0x24, 0x69, 0x53, 0x60, 0x28, 0xe9, 0xe7, 0x32, + 0x58, 0xed, 0xc0, 0x63, 0x99, 0xdb, 0x21, 0xc4, 0xc6, 0xa7, 0xa6, 0xd0, 0x3b, 0x71, 0x59, 0xa6, + 0xf5, 0xe2, 0xbf, 0x8e, 0x17, 0xa8, 0x91, 0x13, 0xf1, 0x09, 0xe3, 0xc0, 0xf4, 0x6a, 0x02, 0x37, + 0x56, 0x30, 0x18, 0xba, 0xef, 0x04, 0x19, 0x9b, 0x71, 0x4a, 0x89, 0x73, 0x37, 0x00, 0x6b, 0x4d, + 0xe4, 0x6a, 0xc0, 0x7a, 0x17, 0xe6, 0xbc, 0xd0, 0x67, 0x5c, 0x1c, 0xf2, 0x2b, 0x36, 0xe5, 0xcf, + 0xdf, 0xa4, 0x55, 0xbd, 0x09, 0xd4, 0x2b, 0xf7, 0x53, 0xc2, 0x12, 0x06, 0x13, 0x2f, 0xf4, 0x75, + 0x2a, 0xd9, 0x04, 0x02, 0x94, 0xe5, 0x88, 0xbd, 0x46, 0x13, 0x08, 0x68, 0xd1, 0x70, 0x44, 0x02, + 0x11, 0xe2, 0xed, 0x39, 0x9e, 0x71, 0xae, 0x3f, 0xa5, 0x31, 0xe5, 0x4d, 0x2e, 0x47, 0x59, 0x83, + 0x20, 0x71, 0x94, 0x12, 0x54, 0xb0, 0xfb, 0x4b, 0xe3, 0xdf, 0x4e, 0xb1, 0xfb, 0x84, 0x9d, 0xf6, + 0x34, 0x7b, 0xd0, 0x83, 0x44, 0x5c, 0xd9, 0x0b, 0x2e, 0x94, 0xab, 0xf6, 0xfd, 0x96, 0x07, 0x3d, + 0x48, 0xe7, 0x4c, 0xd0, 0xad, 0xd6, 0xb3, 0x78, 0x76, 0x39, 0x2f, 0xf9, 0x32, 0x4f, 0x76, 0x78, + 0xc6, 0x4b, 0x70, 0x26, 0xe8, 0x95, 0x1a, 0xa0, 0xc4, 0x99, 0x60, 0x87, 0x8a, 0xcd, 0xe0, 0xdc, + 0x52, 0x8c, 0xb2, 0x74, 0x0e, 0x77, 0xd4, 0x9e, 0x21, 0x09, 0x10, 0x19, 0x1c, 0x0a, 0x22, 0x83, + 0x48, 0xed, 0xb8, 0x45, 0x3a, 0x8b, 0x33, 0xe5, 0x6f, 0x9b, 0x36, 0xe3, 0x81, 0x9d, 0x83, 0x08, + 0x51, 0x40, 0xea, 0x39, 0x5d, 0x96, 0xf9, 0x38, 0x17, 0x9c, 0xac, 0x67, 0x03, 0x74, 0xd6, 0xd3, + 0x01, 0x41, 0x58, 0x9d, 0xb2, 0x37, 0x75, 0x69, 0xea, 0x7f, 0xb0, 0xb0, 0x5a, 0xff, 0x7d, 0xa8, + 0xe5, 0xa1, 0xb0, 0x0a, 0x38, 0x50, 0x19, 0xed, 0x44, 0x0d, 0x98, 0x80, 0xb6, 0x3f, 0x4c, 0xee, + 0x77, 0x83, 0xb8, 0x9f, 0x89, 0x58, 0x65, 0x2c, 0xe4, 0x47, 0x02, 0x7d, 0xfc, 0x34, 0xa0, 0x3d, + 0x6e, 0xf1, 0xea, 0x73, 0xc1, 0x66, 0x97, 0xad, 0xfb, 0x7a, 0x7e, 0x41, 0x15, 0x42, 0x1c, 0xb7, + 0x10, 0x28, 0xde, 0x45, 0xe3, 0x19, 0xcf, 0x43, 0x5d, 0x54, 0xcb, 0xfb, 0x74, 0x91, 0xe6, 0xec, + 0xe6, 0xd7, 0x48, 0xf5, 0xc8, 0x54, 0xdd, 0xb4, 0x49, 0x58, 0x70, 0x21, 0x62, 0xf3, 0x4b, 0xc2, + 0x36, 0x27, 0x87, 0x3e, 0x0f, 0xdb, 0x2f, 0x33, 0xb4, 0xac, 0x1c, 0xd2, 0x2f, 0x33, 0x50, 0x2c, + 0x5d, 0x49, 0x35, 0x46, 0x3a, 0xac, 0xf8, 0xe3, 0xe4, 0x51, 0x3f, 0xd8, 0x6e, 0x79, 0x3c, 0x9f, + 0x3b, 0x19, 0x8b, 0x4b, 0xe5, 0x75, 0x2b, 0x60, 0xc8, 0x62, 0xc4, 0x96, 0x27, 0x80, 0x83, 0x10, + 0xe6, 0x79, 0xde, 0xe1, 0xb9, 0x60, 0xb9, 0xc0, 0x42, 0x98, 0x6f, 0x4c, 0x83, 0xa1, 0x10, 0x46, + 0x29, 0x80, 0x71, 0x2b, 0xcf, 0x83, 0x98, 0x38, 0x8a, 0x17, 0x68, 0xc6, 0xa6, 0xce, 0x7a, 0x94, + 0x3c, 0x34, 0x6e, 0x01, 0xe7, 0x3c, 0x64, 0x76, 0xbd, 0x4c, 0xe3, 0x72, 0x6e, 0x4e, 0x37, 0x92, + 0xc1, 0x63, 0xda, 0x8e, 0x4f, 0x12, 0x0f, 0x99, 0xc3, 0x1a, 0x20, 0xec, 0x8c, 0x17, 0xf1, 0xdc, + 0xd4, 0x14, 0xa9, 0x81, 0x94, 0xb7, 0xaa, 0x7a, 0xbf, 0x1b, 0x04, 0x7e, 0x5e, 0xa6, 0x09, 0xe3, + 0x01, 0x3f, 0x52, 0xde, 0xc7, 0x0f, 0x04, 0x41, 0xf6, 0x56, 0xd7, 0x5b, 0x7f, 0xec, 0x2a, 0x4f, + 0xf4, 0x3e, 0x76, 0x48, 0x34, 0x0f, 0xe0, 0x42, 0xd9, 0x1b, 0xc1, 0x83, 0x39, 0xda, 0x1c, 0xd0, + 0x86, 0xe6, 0xa8, 0x39, 0x7f, 0xed, 0x33, 0x47, 0x31, 0x58, 0xfb, 0xfc, 0xb1, 0x9e, 0xa3, 0xbb, + 0xb1, 0x88, 0xeb, 0xbc, 0xfd, 0x65, 0xca, 0x5e, 0xeb, 0x8d, 0x30, 0x52, 0xdf, 0x86, 0x1a, 0xca, + 0x77, 0xb1, 0xc1, 0xae, 0x78, 0xbb, 0x37, 0x1f, 0xf0, 0xad, 0x77, 0x08, 0x9d, 0xbe, 0xc1, 0x56, + 0x61, 0xbb, 0x37, 0x1f, 0xf0, 0xad, 0x3f, 0x29, 0xd1, 0xe9, 0x1b, 0x7c, 0x57, 0x62, 0xbb, 0x37, + 0xaf, 0x7d, 0xff, 0xb4, 0x99, 0xb8, 0xae, 0xf3, 0x3a, 0x0f, 0x9b, 0x89, 0xf4, 0x8a, 0x61, 0xe9, + 0xa4, 0x6f, 0xcf, 0xa0, 0xa1, 0x74, 0x92, 0x56, 0x71, 0xbe, 0xac, 0x87, 0x95, 0xe2, 0x98, 0x57, + 0xa9, 0xbc, 0x24, 0xf2, 0xb4, 0x87, 0xd1, 0x06, 0x0e, 0x6d, 0x9a, 0x42, 0x4a, 0xf6, 0x71, 0xb7, + 0x87, 0xda, 0xeb, 0xf9, 0x8f, 0x02, 0xf6, 0xda, 0xb7, 0xf4, 0xb7, 0x7a, 0xd2, 0xf6, 0xc1, 0xb3, + 0xc7, 0x34, 0x8f, 0x0c, 0x27, 0x0c, 0x5d, 0x25, 0x8c, 0x29, 0xf3, 0x28, 0xd9, 0x7d, 0x76, 0xfa, + 0xb8, 0xbf, 0x42, 0x87, 0xfb, 0x51, 0x92, 0xf4, 0x73, 0xef, 0x3e, 0x73, 0x7f, 0xdc, 0x5f, 0x41, + 0xbb, 0xff, 0xab, 0x66, 0x5b, 0x03, 0xfd, 0xeb, 0x39, 0xf8, 0xa4, 0x8f, 0x45, 0x30, 0x0f, 0x9f, + 0x5e, 0x4b, 0x47, 0x17, 0xe4, 0xef, 0x9a, 0xfd, 0x7b, 0x83, 0xca, 0x77, 0xa4, 0xe4, 0xbb, 0xd5, + 0x7a, 0x4a, 0x86, 0x46, 0x95, 0x85, 0xe1, 0xc4, 0xfc, 0xe8, 0x9a, 0x5a, 0xce, 0x67, 0x1e, 0x3d, + 0x58, 0xbf, 0xcb, 0xeb, 0x94, 0x27, 0x64, 0xd9, 0xa1, 0x61, 0x81, 0x3e, 0xbe, 0xae, 0x1a, 0x35, + 0x55, 0x1d, 0x58, 0x7e, 0x63, 0xe7, 0x69, 0x4f, 0xc3, 0xde, 0x57, 0x77, 0x3e, 0xbc, 0x9e, 0x92, + 0x2e, 0xcb, 0x7f, 0xae, 0x45, 0xf7, 0x3c, 0xd6, 0x3e, 0xce, 0x00, 0x87, 0x2e, 0x3f, 0x08, 0xd8, + 0xa7, 0x94, 0x4c, 0xe1, 0x7e, 0xf7, 0xeb, 0x29, 0xdb, 0xcf, 0xf1, 0x79, 0x2a, 0x7b, 0x69, 0x26, + 0x58, 0xd9, 0xfe, 0x1c, 0x9f, 0x6f, 0x57, 0x51, 0x43, 0xfa, 0x73, 0x7c, 0x01, 0xdc, 0xf9, 0x1c, + 0x1f, 0xe2, 0x19, 0xfd, 0x1c, 0x1f, 0x6a, 0x2d, 0xf8, 0x39, 0xbe, 0xb0, 0x06, 0xb5, 0xba, 0x34, + 0x45, 0x50, 0xc7, 0xe6, 0xbd, 0x2c, 0xfa, 0xa7, 0xe8, 0x4f, 0xae, 0xa3, 0x42, 0xac, 0xaf, 0x8a, + 0x93, 0xd7, 0x3c, 0x7b, 0xb4, 0xa9, 0x77, 0xd5, 0x73, 0xbb, 0x37, 0xaf, 0x7d, 0xff, 0x48, 0x6f, + 0xae, 0xcc, 0x6a, 0xc2, 0x4b, 0xf9, 0x29, 0xc6, 0xcd, 0xd0, 0xea, 0x50, 0x5b, 0x70, 0x7b, 0xfe, + 0x51, 0x3f, 0x98, 0xa8, 0x6e, 0x4d, 0xe8, 0x4e, 0x1f, 0x76, 0x19, 0x02, 0x5d, 0xbe, 0xdd, 0x9b, + 0x27, 0x96, 0x11, 0xe5, 0x5b, 0xf5, 0x76, 0x0f, 0x63, 0x7e, 0x5f, 0x3f, 0xee, 0xaf, 0xa0, 0xdd, + 0x5f, 0xe9, 0xac, 0xd5, 0x75, 0x2f, 0xfb, 0x79, 0xab, 0xcb, 0xd4, 0xc4, 0xeb, 0xe6, 0x61, 0x5f, + 0x3c, 0x94, 0xbf, 0xb8, 0x4b, 0x68, 0x57, 0xfe, 0x82, 0x2e, 0xa3, 0x1f, 0x5e, 0x4f, 0x49, 0x97, + 0xe5, 0x1f, 0xd7, 0xa2, 0x9b, 0x64, 0x59, 0xf4, 0x38, 0xf8, 0xb8, 0xaf, 0x65, 0x30, 0x1e, 0x3e, + 0xb9, 0xb6, 0x9e, 0x2e, 0xd4, 0xbf, 0xac, 0x45, 0xb7, 0x02, 0x85, 0x52, 0x03, 0xe4, 0x1a, 0xd6, + 0xfd, 0x81, 0xf2, 0xe9, 0xf5, 0x15, 0xa9, 0xe5, 0xde, 0xc5, 0x27, 0xed, 0x4f, 0xab, 0x05, 0x6c, + 0x4f, 0xe8, 0x4f, 0xab, 0x75, 0x6b, 0xc1, 0x33, 0xa6, 0xf8, 0xac, 0xd9, 0xf3, 0xa1, 0x67, 0x4c, + 0xf2, 0x82, 0x66, 0xf0, 0xa3, 0x2d, 0x18, 0x87, 0x39, 0x79, 0xfe, 0xa6, 0x88, 0xf3, 0x84, 0x76, + 0xa2, 0xe4, 0xdd, 0x4e, 0x0c, 0x07, 0xcf, 0xe6, 0x6a, 0xe9, 0x09, 0x6f, 0xf6, 0x71, 0x0f, 0x28, + 0x7d, 0x83, 0x04, 0xcf, 0xe6, 0x5a, 0x28, 0xe1, 0x4d, 0x67, 0x8d, 0x21, 0x6f, 0x20, 0x59, 0x7c, + 0xd8, 0x07, 0x05, 0x3b, 0x04, 0xe3, 0xcd, 0x1c, 0xf9, 0x3f, 0x0a, 0x59, 0x69, 0x1d, 0xfb, 0x6f, + 0xf5, 0xa4, 0x09, 0xb7, 0x13, 0x26, 0x3e, 0x63, 0x71, 0xc2, 0xca, 0xa0, 0x5b, 0x43, 0xf5, 0x72, + 0xeb, 0xd2, 0x98, 0xdb, 0x1d, 0x9e, 0x2d, 0x17, 0xb9, 0xee, 0x4c, 0xd2, 0xad, 0x4b, 0x75, 0xbb, + 0x05, 0x34, 0x3c, 0x95, 0xb4, 0x6e, 0x65, 0x7a, 0xf9, 0x30, 0x6c, 0xc6, 0xcb, 0x2a, 0x37, 0x7b, + 0xb1, 0x74, 0x3d, 0xf5, 0x30, 0xea, 0xa8, 0x27, 0x18, 0x49, 0x5b, 0x3d, 0x69, 0x78, 0x3c, 0xe8, + 0xb8, 0x35, 0xe3, 0x69, 0xbb, 0xc3, 0x56, 0x6b, 0x48, 0x3d, 0xee, 0xaf, 0x00, 0x0f, 0x63, 0xf5, + 0xa8, 0x3a, 0x48, 0x2b, 0xb1, 0x97, 0x66, 0xd9, 0x60, 0x33, 0x30, 0x4c, 0x1a, 0x28, 0x78, 0x18, + 0x8b, 0xc0, 0xc4, 0x48, 0x6e, 0x0e, 0x2f, 0xf3, 0x41, 0x97, 0x1d, 0x49, 0xf5, 0x1a, 0xc9, 0x2e, + 0x0d, 0x0e, 0xd4, 0x9c, 0xa6, 0x36, 0xb5, 0x1d, 0x86, 0x1b, 0xae, 0x55, 0xe1, 0xed, 0xde, 0x3c, + 0x78, 0xda, 0x2f, 0x29, 0xb9, 0xb2, 0xdc, 0xa5, 0x4c, 0x78, 0x2b, 0xc9, 0xbd, 0x0e, 0x0a, 0x1c, + 0x4a, 0xaa, 0x69, 0xf4, 0x2a, 0x4d, 0xe6, 0x4c, 0xa0, 0x0f, 0xaa, 0x5c, 0x20, 0xf8, 0xa0, 0x0a, + 0x80, 0xa0, 0xeb, 0xd4, 0xdf, 0xcd, 0x69, 0xec, 0x38, 0xc1, 0xba, 0x4e, 0x2b, 0x3b, 0x54, 0xa8, + 0xeb, 0x50, 0x1a, 0x44, 0x03, 0xe3, 0x56, 0x7f, 0xe6, 0xe2, 0x61, 0xc8, 0x0c, 0xf8, 0xd6, 0xc5, + 0x66, 0x2f, 0x16, 0xac, 0x28, 0xd6, 0x61, 0xba, 0x48, 0x05, 0xb6, 0xa2, 0x38, 0x36, 0x6a, 0x24, + 0xb4, 0xa2, 0xb4, 0x51, 0xaa, 0x7a, 0x75, 0x8e, 0x30, 0x4e, 0xc2, 0xd5, 0x53, 0x4c, 0xbf, 0xea, + 0x19, 0xb6, 0xf5, 0x5c, 0x35, 0x37, 0x43, 0x46, 0x5c, 0xe8, 0xcd, 0x32, 0x32, 0xb6, 0x9d, 0x5f, + 0x5c, 0xb0, 0x60, 0x28, 0xea, 0x50, 0x0a, 0xf0, 0x79, 0x41, 0xf3, 0x1b, 0x0d, 0x13, 0x26, 0x46, + 0x45, 0xc1, 0xe2, 0x32, 0xce, 0x67, 0xe8, 0xe6, 0xd4, 0xfc, 0xe6, 0x82, 0x47, 0x86, 0x36, 0xa7, + 0xa4, 0x06, 0x78, 0x6a, 0xef, 0xbf, 0x5f, 0x8c, 0x4c, 0x05, 0xf3, 0x22, 0xaf, 0xff, 0x7a, 0xf1, + 0x83, 0x1e, 0x24, 0x7c, 0x6a, 0xdf, 0x00, 0xe6, 0xdc, 0x5d, 0x39, 0xfd, 0x20, 0x60, 0xca, 0x47, + 0x43, 0x1b, 0x61, 0x5a, 0x05, 0x0c, 0x6a, 0xe7, 0x6c, 0xf1, 0x73, 0xb6, 0xc2, 0x06, 0xb5, 0x7b, + 0x48, 0xf8, 0x39, 0x5b, 0x85, 0x06, 0x75, 0x1b, 0x05, 0x79, 0xa6, 0xbb, 0x0f, 0x5a, 0x0f, 0xe8, + 0xbb, 0x5b, 0x9f, 0x8d, 0x4e, 0x0e, 0xcc, 0x9c, 0xdd, 0xf4, 0xca, 0x7b, 0x4c, 0x81, 0x14, 0x74, + 0x37, 0xbd, 0xc2, 0x9f, 0x52, 0x6c, 0xf6, 0x62, 0xe1, 0x8d, 0x80, 0x58, 0xb0, 0x37, 0xcd, 0xa3, + 0x7a, 0xa4, 0xb8, 0x52, 0xde, 0x7a, 0x56, 0x7f, 0xbf, 0x1b, 0xb4, 0xf7, 0x6f, 0x8f, 0x4b, 0x3e, + 0x63, 0x55, 0xa5, 0xbf, 0x00, 0xeb, 0x5f, 0x70, 0xd2, 0xb2, 0x21, 0xf8, 0xfe, 0xeb, 0xdd, 0x30, + 0xe4, 0x7c, 0xb6, 0x51, 0x89, 0xec, 0xd7, 0xa4, 0xd6, 0x51, 0xcd, 0xf6, 0x87, 0xa4, 0x36, 0x3a, + 0x39, 0x3b, 0xbd, 0xb4, 0xd4, 0xfd, 0x7c, 0xd4, 0x7d, 0x54, 0x1d, 0xfb, 0x72, 0xd4, 0x83, 0x1e, + 0xa4, 0x76, 0xf5, 0x59, 0xf4, 0xd6, 0x01, 0x9f, 0x4f, 0x58, 0x9e, 0x0c, 0xbe, 0xe7, 0xdf, 0xe0, + 0xe5, 0xf3, 0x61, 0xfd, 0x67, 0x63, 0xf4, 0x06, 0x25, 0xb6, 0x77, 0x10, 0x77, 0xd9, 0xd9, 0x72, + 0x3e, 0x11, 0xb1, 0x00, 0x77, 0x10, 0xe5, 0xdf, 0x87, 0xb5, 0x80, 0xb8, 0x83, 0xe8, 0x01, 0xc0, + 0xde, 0xb4, 0x64, 0x0c, 0xb5, 0x57, 0x0b, 0x82, 0xf6, 0x34, 0x60, 0xb3, 0x08, 0x63, 0xaf, 0x4e, + 0xd4, 0xe1, 0x9d, 0x41, 0xab, 0x23, 0xa5, 0x44, 0x16, 0xd1, 0xa6, 0xec, 0xe0, 0x56, 0xd5, 0x97, + 0x5f, 0xf3, 0x59, 0x2e, 0x16, 0x71, 0xb9, 0x02, 0x83, 0x5b, 0xd7, 0xd2, 0x01, 0x88, 0xc1, 0x8d, + 0x82, 0x76, 0xd6, 0x36, 0xcd, 0x3c, 0xbb, 0xdc, 0xe7, 0x25, 0x5f, 0x8a, 0x34, 0x67, 0xf0, 0x8b, + 0x2e, 0xa6, 0x41, 0x5d, 0x86, 0x98, 0xb5, 0x14, 0x6b, 0xb3, 0x5c, 0x49, 0xa8, 0xeb, 0x8c, 0xf2, + 0x13, 0xf8, 0x95, 0xe0, 0x25, 0x7c, 0x9c, 0xa9, 0xac, 0x40, 0x88, 0xc8, 0x72, 0x49, 0x18, 0xf4, + 0xfd, 0x71, 0x9a, 0xcf, 0xd1, 0xbe, 0x3f, 0x76, 0xbf, 0xaa, 0x7c, 0x8b, 0x06, 0xec, 0x84, 0x52, + 0x8d, 0xa6, 0x26, 0x80, 0x7e, 0x95, 0x19, 0x6d, 0x74, 0x97, 0x20, 0x26, 0x14, 0x4e, 0x02, 0x57, + 0x2f, 0x0a, 0x96, 0xb3, 0xa4, 0xb9, 0xb4, 0x87, 0xb9, 0xf2, 0x88, 0xa0, 0x2b, 0x48, 0xda, 0x58, + 0x24, 0xe5, 0x27, 0xcb, 0xfc, 0xb8, 0xe4, 0xe7, 0x69, 0xc6, 0x4a, 0x10, 0x8b, 0x94, 0xba, 0x23, + 0x27, 0x62, 0x11, 0xc6, 0xd9, 0xdb, 0x1f, 0x52, 0xea, 0xfd, 0x8e, 0xc3, 0xb4, 0x8c, 0x67, 0xf0, + 0xf6, 0x87, 0xb2, 0xd1, 0xc6, 0x88, 0x93, 0xc1, 0x00, 0xee, 0x24, 0x3a, 0xca, 0x75, 0xbe, 0x92, + 0xe3, 0x43, 0xbf, 0x4a, 0x2b, 0xbf, 0x35, 0x5c, 0x81, 0x44, 0x47, 0x9b, 0xc3, 0x48, 0x22, 0xd1, + 0x09, 0x6b, 0xd8, 0xa5, 0x44, 0x72, 0x47, 0xfa, 0x56, 0x13, 0x58, 0x4a, 0x94, 0x8d, 0x46, 0x48, + 0x2c, 0x25, 0x2d, 0x08, 0x04, 0xa4, 0x66, 0x1a, 0xcc, 0xd1, 0x80, 0x64, 0xa4, 0xc1, 0x80, 0xe4, + 0x52, 0x36, 0x50, 0x8c, 0xf3, 0x54, 0xa4, 0x71, 0x36, 0x61, 0xe2, 0x38, 0x2e, 0xe3, 0x05, 0x13, + 0xac, 0x84, 0x81, 0x42, 0x23, 0x43, 0x8f, 0x21, 0x02, 0x05, 0xc5, 0x6a, 0x87, 0xbf, 0x17, 0xbd, + 0x53, 0xaf, 0xfb, 0x2c, 0xd7, 0xbf, 0x40, 0xf5, 0x5c, 0xfe, 0x7e, 0xe0, 0xe0, 0x5d, 0x63, 0x63, + 0x22, 0x4a, 0x16, 0x2f, 0x1a, 0xdb, 0x6f, 0x9b, 0xbf, 0x4b, 0xf0, 0xf1, 0x5a, 0x3d, 0x9e, 0x8f, + 0xb8, 0x48, 0xcf, 0xeb, 0x6d, 0xb6, 0x7e, 0x81, 0x09, 0x8c, 0x67, 0x57, 0x3c, 0x0c, 0x7c, 0x8a, + 0x05, 0xe3, 0x6c, 0x9c, 0x76, 0xa5, 0x27, 0xac, 0xc8, 0x60, 0x9c, 0xf6, 0xb4, 0x25, 0x40, 0xc4, + 0x69, 0x14, 0xb4, 0x93, 0xd3, 0x15, 0x4f, 0x59, 0xb8, 0x32, 0x53, 0xd6, 0xaf, 0x32, 0x53, 0xef, + 0x9d, 0x90, 0x2c, 0x7a, 0xe7, 0x90, 0x2d, 0xce, 0x58, 0x59, 0x5d, 0xa4, 0x05, 0xf5, 0x3d, 0x64, + 0x4b, 0x74, 0x7e, 0x0f, 0x99, 0x40, 0xed, 0x4a, 0x60, 0x81, 0x71, 0x75, 0x14, 0x2f, 0x98, 0xfc, + 0xb0, 0x0c, 0x58, 0x09, 0x1c, 0x23, 0x0e, 0x44, 0xac, 0x04, 0x24, 0xec, 0xbc, 0x5e, 0x66, 0x99, + 0x13, 0x36, 0xaf, 0x47, 0x58, 0x79, 0x1c, 0xaf, 0x16, 0x2c, 0x17, 0xda, 0x24, 0x38, 0x93, 0x77, + 0x4c, 0xe2, 0x3c, 0x71, 0x26, 0xdf, 0x47, 0xcf, 0x09, 0x4d, 0x5e, 0xc3, 0x1f, 0xf3, 0x52, 0xa8, + 0x9f, 0x96, 0x3b, 0x2d, 0x33, 0x10, 0x9a, 0xfc, 0x46, 0xf5, 0x48, 0x22, 0x34, 0x85, 0x35, 0x9c, + 0xdf, 0x12, 0xf1, 0xca, 0xf0, 0x92, 0x95, 0x66, 0x9c, 0x3c, 0x5f, 0xc4, 0x69, 0xa6, 0x47, 0xc3, + 0xf7, 0x03, 0xb6, 0x09, 0x1d, 0xe2, 0xb7, 0x44, 0xfa, 0xea, 0x3a, 0xbf, 0xbe, 0x12, 0x2e, 0x21, + 0x78, 0x44, 0xd0, 0x61, 0x9f, 0x78, 0x44, 0xd0, 0xad, 0x65, 0x77, 0xee, 0x96, 0x95, 0xdc, 0x4a, + 0x12, 0x3b, 0x3c, 0x81, 0xe7, 0x85, 0x8e, 0x4d, 0x00, 0x12, 0x3b, 0xf7, 0xa0, 0x82, 0x4d, 0x0d, + 0x2c, 0xb6, 0x97, 0xe6, 0x71, 0x96, 0xfe, 0x18, 0xa6, 0xf5, 0x8e, 0x9d, 0x86, 0x20, 0x52, 0x03, + 0x9c, 0xc4, 0x5c, 0xed, 0x33, 0x31, 0x4d, 0xeb, 0xd0, 0x7f, 0x3f, 0xd0, 0x6e, 0x92, 0xe8, 0x76, + 0xe5, 0x90, 0xce, 0xb7, 0x8f, 0x61, 0xb3, 0x8e, 0x8a, 0x62, 0x52, 0xaf, 0xaa, 0x27, 0x6c, 0xc6, + 0xd2, 0x42, 0x0c, 0x3e, 0x0a, 0xb7, 0x15, 0xc0, 0x89, 0x8b, 0x16, 0x3d, 0xd4, 0x9c, 0xc7, 0xf7, + 0x75, 0x2c, 0x99, 0xa8, 0x5f, 0xbf, 0x3d, 0xad, 0x58, 0xa9, 0x13, 0x8d, 0x7d, 0x26, 0xc0, 0xec, + 0x74, 0xb8, 0xa1, 0x03, 0xd6, 0x15, 0x25, 0x66, 0x67, 0x58, 0xc3, 0x1e, 0xf6, 0x39, 0x9c, 0xfe, + 0x76, 0x80, 0xbc, 0xee, 0xf8, 0x88, 0x34, 0xe6, 0x50, 0xc4, 0x61, 0x1f, 0x4d, 0xdb, 0x6c, 0xad, + 0xed, 0x76, 0x94, 0xaf, 0xc6, 0xf0, 0xca, 0x04, 0x62, 0x49, 0x62, 0x44, 0xb6, 0x16, 0xc0, 0x9d, + 0xc3, 0xf0, 0x92, 0xc7, 0xc9, 0x2c, 0xae, 0xc4, 0x71, 0xbc, 0xca, 0x78, 0x9c, 0xc8, 0x75, 0x1d, + 0x1e, 0x86, 0x37, 0xcc, 0xd0, 0x85, 0xa8, 0xc3, 0x70, 0x0a, 0x76, 0xb3, 0x33, 0xf9, 0xa3, 0xbe, + 0xfa, 0x2a, 0x29, 0xcc, 0xce, 0x64, 0x79, 0xe1, 0x35, 0xd2, 0xbb, 0x61, 0xc8, 0xbe, 0x02, 0xa7, + 0x44, 0x32, 0x0d, 0xb9, 0x85, 0xe9, 0x78, 0x09, 0xc8, 0xfb, 0x01, 0xc2, 0x7e, 0x96, 0x45, 0xfd, + 0xbd, 0xf9, 0x09, 0x31, 0xa1, 0xbf, 0x10, 0xff, 0x08, 0xd3, 0x75, 0x21, 0xef, 0x86, 0xda, 0x56, + 0x4f, 0xda, 0xa6, 0x99, 0x3b, 0x17, 0xb1, 0x18, 0x25, 0xc9, 0x21, 0xab, 0x90, 0xf7, 0xd9, 0x6b, + 0xe1, 0xd0, 0x4a, 0x89, 0x34, 0xb3, 0x4d, 0xd9, 0x81, 0x5e, 0xcb, 0x9e, 0x27, 0xa9, 0xd0, 0xb2, + 0xe6, 0x82, 0xf6, 0xa3, 0xb6, 0x81, 0x36, 0x45, 0xd4, 0x8a, 0xa6, 0x6d, 0x2c, 0xaf, 0x99, 0x29, + 0x9f, 0xcf, 0x33, 0xa6, 0xa1, 0x13, 0x16, 0xab, 0x0f, 0x64, 0x6e, 0xb7, 0x6d, 0xa1, 0x20, 0x11, + 0xcb, 0x83, 0x0a, 0x36, 0x8d, 0xac, 0x31, 0xf5, 0x48, 0xaa, 0x69, 0xd8, 0x8d, 0xb6, 0x19, 0x0f, + 0x20, 0xd2, 0x48, 0x14, 0xb4, 0xaf, 0xdd, 0xd5, 0xe2, 0x7d, 0xd6, 0xb4, 0x04, 0xfc, 0x02, 0x97, + 0x54, 0x76, 0xc4, 0xc4, 0x6b, 0x77, 0x08, 0x66, 0xf7, 0x09, 0xc0, 0xc3, 0xb3, 0xd5, 0x38, 0x81, + 0xfb, 0x04, 0xa8, 0x2f, 0x19, 0x62, 0x9f, 0x40, 0xb1, 0x7e, 0xd7, 0x99, 0x73, 0xaf, 0x83, 0xb8, + 0xb2, 0x95, 0x43, 0xba, 0x0e, 0x05, 0x43, 0x5d, 0x47, 0x29, 0xf8, 0x4d, 0xea, 0x1e, 0xad, 0x21, + 0x4d, 0x8a, 0x9d, 0xab, 0xad, 0x77, 0x61, 0x36, 0xf7, 0xaf, 0x85, 0x27, 0x2c, 0x4e, 0x4c, 0xc5, + 0x10, 0x5d, 0x57, 0x4e, 0xe4, 0xfe, 0x18, 0xa7, 0x9d, 0xfc, 0x61, 0x34, 0x50, 0xd5, 0x28, 0x5d, + 0x37, 0xb7, 0xb0, 0x22, 0xd6, 0x04, 0x11, 0xa8, 0x7c, 0xc2, 0x49, 0xdc, 0xbc, 0x2e, 0x9a, 0x72, + 0xed, 0x40, 0xbf, 0x16, 0x5a, 0x81, 0xc4, 0xcd, 0x6f, 0xf6, 0x16, 0x4d, 0x24, 0x6e, 0xdd, 0x5a, + 0xce, 0xc7, 0x88, 0x40, 0x97, 0xed, 0x95, 0x7c, 0x01, 0xcb, 0xf4, 0x69, 0xb0, 0x7b, 0x10, 0x0d, + 0xe2, 0x63, 0x44, 0xfd, 0x34, 0xed, 0x1a, 0x64, 0xce, 0x0e, 0xe4, 0xf5, 0x34, 0xfc, 0x57, 0x50, + 0x94, 0x90, 0x58, 0x83, 0x5a, 0x90, 0xf3, 0xd3, 0xa9, 0xe3, 0x57, 0x65, 0x2a, 0xd2, 0x7c, 0x3e, + 0xe5, 0x3c, 0x83, 0x47, 0x96, 0xa3, 0xf1, 0xd0, 0x95, 0x52, 0x3f, 0x9d, 0xda, 0xa2, 0xec, 0x12, + 0x37, 0x1a, 0x8f, 0x96, 0x82, 0x9f, 0xa7, 0x59, 0x06, 0x46, 0xce, 0x68, 0x3c, 0x6c, 0x24, 0xc4, + 0xc8, 0xf1, 0x09, 0xe7, 0x07, 0x3f, 0xc7, 0xf2, 0xf4, 0x5f, 0x9f, 0x80, 0xde, 0x81, 0x3a, 0x8e, + 0x90, 0xfa, 0xc1, 0x4f, 0x08, 0x39, 0x3f, 0x60, 0x3a, 0xc6, 0x7e, 0xca, 0x65, 0x13, 0xaa, 0x23, + 0x10, 0xf5, 0x03, 0xa6, 0x14, 0xec, 0xbc, 0x93, 0x7c, 0xbc, 0xac, 0x2e, 0xfc, 0x23, 0x03, 0xb5, + 0x39, 0x54, 0x9f, 0x6d, 0x7d, 0x0a, 0x7e, 0x50, 0xc8, 0x67, 0x87, 0x1e, 0x4c, 0x5c, 0x4f, 0xeb, + 0x54, 0x52, 0x85, 0x79, 0xf6, 0xfe, 0x7f, 0x7f, 0x79, 0x63, 0xed, 0xe7, 0x5f, 0xde, 0x58, 0xfb, + 0xdf, 0x2f, 0x6f, 0xac, 0xfd, 0xec, 0xab, 0x1b, 0xdf, 0xf8, 0xf9, 0x57, 0x37, 0xbe, 0xf1, 0x3f, + 0x5f, 0xdd, 0xf8, 0xc6, 0x17, 0x6f, 0x55, 0x2a, 0x37, 0x3b, 0xfb, 0xc5, 0xa2, 0xe4, 0x82, 0x3f, + 0xfd, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x61, 0x62, 0xf5, 0xb2, 0x0b, 0x82, 0x00, 0x00, } // This is a compile-time assertion to ensure that this generated file @@ -406,6 +409,9 @@ type ClientCommandsHandler interface { WalletConvert(context.Context, *pb.RpcWalletConvertRequest) *pb.RpcWalletConvertResponse AccountLocalLinkNewChallenge(context.Context, *pb.RpcAccountLocalLinkNewChallengeRequest) *pb.RpcAccountLocalLinkNewChallengeResponse AccountLocalLinkSolveChallenge(context.Context, *pb.RpcAccountLocalLinkSolveChallengeRequest) *pb.RpcAccountLocalLinkSolveChallengeResponse + AccountLocalLinkCreateApp(context.Context, *pb.RpcAccountLocalLinkCreateAppRequest) *pb.RpcAccountLocalLinkCreateAppResponse + AccountLocalLinkListApps(context.Context, *pb.RpcAccountLocalLinkListAppsRequest) *pb.RpcAccountLocalLinkListAppsResponse + AccountLocalLinkRevokeApp(context.Context, *pb.RpcAccountLocalLinkRevokeAppRequest) *pb.RpcAccountLocalLinkRevokeAppResponse WalletCreateSession(context.Context, *pb.RpcWalletCreateSessionRequest) *pb.RpcWalletCreateSessionResponse WalletCloseSession(context.Context, *pb.RpcWalletCloseSessionRequest) *pb.RpcWalletCloseSessionResponse // Workspace @@ -921,6 +927,66 @@ func AccountLocalLinkSolveChallenge(b []byte) (resp []byte) { return resp } +func AccountLocalLinkCreateApp(b []byte) (resp []byte) { + defer func() { + if PanicHandler != nil { + if r := recover(); r != nil { + resp, _ = (&pb.RpcAccountLocalLinkCreateAppResponse{Error: &pb.RpcAccountLocalLinkCreateAppResponseError{Code: pb.RpcAccountLocalLinkCreateAppResponseError_UNKNOWN_ERROR, Description: "panic recovered"}}).Marshal() + PanicHandler(r) + } + } + }() + + in := new(pb.RpcAccountLocalLinkCreateAppRequest) + if err := in.Unmarshal(b); err != nil { + resp, _ = (&pb.RpcAccountLocalLinkCreateAppResponse{Error: &pb.RpcAccountLocalLinkCreateAppResponseError{Code: pb.RpcAccountLocalLinkCreateAppResponseError_BAD_INPUT, Description: err.Error()}}).Marshal() + return resp + } + + resp, _ = clientCommandsHandler.AccountLocalLinkCreateApp(context.Background(), in).Marshal() + return resp +} + +func AccountLocalLinkListApps(b []byte) (resp []byte) { + defer func() { + if PanicHandler != nil { + if r := recover(); r != nil { + resp, _ = (&pb.RpcAccountLocalLinkListAppsResponse{Error: &pb.RpcAccountLocalLinkListAppsResponseError{Code: pb.RpcAccountLocalLinkListAppsResponseError_UNKNOWN_ERROR, Description: "panic recovered"}}).Marshal() + PanicHandler(r) + } + } + }() + + in := new(pb.RpcAccountLocalLinkListAppsRequest) + if err := in.Unmarshal(b); err != nil { + resp, _ = (&pb.RpcAccountLocalLinkListAppsResponse{Error: &pb.RpcAccountLocalLinkListAppsResponseError{Code: pb.RpcAccountLocalLinkListAppsResponseError_BAD_INPUT, Description: err.Error()}}).Marshal() + return resp + } + + resp, _ = clientCommandsHandler.AccountLocalLinkListApps(context.Background(), in).Marshal() + return resp +} + +func AccountLocalLinkRevokeApp(b []byte) (resp []byte) { + defer func() { + if PanicHandler != nil { + if r := recover(); r != nil { + resp, _ = (&pb.RpcAccountLocalLinkRevokeAppResponse{Error: &pb.RpcAccountLocalLinkRevokeAppResponseError{Code: pb.RpcAccountLocalLinkRevokeAppResponseError_UNKNOWN_ERROR, Description: "panic recovered"}}).Marshal() + PanicHandler(r) + } + } + }() + + in := new(pb.RpcAccountLocalLinkRevokeAppRequest) + if err := in.Unmarshal(b); err != nil { + resp, _ = (&pb.RpcAccountLocalLinkRevokeAppResponse{Error: &pb.RpcAccountLocalLinkRevokeAppResponseError{Code: pb.RpcAccountLocalLinkRevokeAppResponseError_BAD_INPUT, Description: err.Error()}}).Marshal() + return resp + } + + resp, _ = clientCommandsHandler.AccountLocalLinkRevokeApp(context.Background(), in).Marshal() + return resp +} + func WalletCreateSession(b []byte) (resp []byte) { defer func() { if PanicHandler != nil { @@ -6643,6 +6709,12 @@ func CommandAsync(cmd string, data []byte, callback func(data []byte)) { cd = AccountLocalLinkNewChallenge(data) case "AccountLocalLinkSolveChallenge": cd = AccountLocalLinkSolveChallenge(data) + case "AccountLocalLinkCreateApp": + cd = AccountLocalLinkCreateApp(data) + case "AccountLocalLinkListApps": + cd = AccountLocalLinkListApps(data) + case "AccountLocalLinkRevokeApp": + cd = AccountLocalLinkRevokeApp(data) case "WalletCreateSession": cd = WalletCreateSession(data) case "WalletCloseSession": @@ -7347,6 +7419,48 @@ func (h *ClientCommandsHandlerProxy) AccountLocalLinkSolveChallenge(ctx context. call, _ := actualCall(ctx, req) return call.(*pb.RpcAccountLocalLinkSolveChallengeResponse) } +func (h *ClientCommandsHandlerProxy) AccountLocalLinkCreateApp(ctx context.Context, req *pb.RpcAccountLocalLinkCreateAppRequest) *pb.RpcAccountLocalLinkCreateAppResponse { + actualCall := func(ctx context.Context, req any) (any, error) { + return h.client.AccountLocalLinkCreateApp(ctx, req.(*pb.RpcAccountLocalLinkCreateAppRequest)), nil + } + for _, interceptor := range h.interceptors { + toCall := actualCall + currentInterceptor := interceptor + actualCall = func(ctx context.Context, req any) (any, error) { + return currentInterceptor(ctx, req, "AccountLocalLinkCreateApp", toCall) + } + } + call, _ := actualCall(ctx, req) + return call.(*pb.RpcAccountLocalLinkCreateAppResponse) +} +func (h *ClientCommandsHandlerProxy) AccountLocalLinkListApps(ctx context.Context, req *pb.RpcAccountLocalLinkListAppsRequest) *pb.RpcAccountLocalLinkListAppsResponse { + actualCall := func(ctx context.Context, req any) (any, error) { + return h.client.AccountLocalLinkListApps(ctx, req.(*pb.RpcAccountLocalLinkListAppsRequest)), nil + } + for _, interceptor := range h.interceptors { + toCall := actualCall + currentInterceptor := interceptor + actualCall = func(ctx context.Context, req any) (any, error) { + return currentInterceptor(ctx, req, "AccountLocalLinkListApps", toCall) + } + } + call, _ := actualCall(ctx, req) + return call.(*pb.RpcAccountLocalLinkListAppsResponse) +} +func (h *ClientCommandsHandlerProxy) AccountLocalLinkRevokeApp(ctx context.Context, req *pb.RpcAccountLocalLinkRevokeAppRequest) *pb.RpcAccountLocalLinkRevokeAppResponse { + actualCall := func(ctx context.Context, req any) (any, error) { + return h.client.AccountLocalLinkRevokeApp(ctx, req.(*pb.RpcAccountLocalLinkRevokeAppRequest)), nil + } + for _, interceptor := range h.interceptors { + toCall := actualCall + currentInterceptor := interceptor + actualCall = func(ctx context.Context, req any) (any, error) { + return currentInterceptor(ctx, req, "AccountLocalLinkRevokeApp", toCall) + } + } + call, _ := actualCall(ctx, req) + return call.(*pb.RpcAccountLocalLinkRevokeAppResponse) +} func (h *ClientCommandsHandlerProxy) WalletCreateSession(ctx context.Context, req *pb.RpcWalletCreateSessionRequest) *pb.RpcWalletCreateSessionResponse { actualCall := func(ctx context.Context, req any) (any, error) { return h.client.WalletCreateSession(ctx, req.(*pb.RpcWalletCreateSessionRequest)), nil diff --git a/core/account.go b/core/account.go index b1296c39b..9e308f918 100644 --- a/core/account.go +++ b/core/account.go @@ -9,7 +9,9 @@ import ( "github.com/anyproto/anytype-heart/core/anytype/config" "github.com/anyproto/anytype-heart/core/application" "github.com/anyproto/anytype-heart/core/session" + walletComp "github.com/anyproto/anytype-heart/core/wallet" "github.com/anyproto/anytype-heart/pb" + "github.com/anyproto/anytype-heart/pkg/lib/pb/model" "github.com/anyproto/anytype-heart/space/spacecore/storage/migrator" ) @@ -282,6 +284,60 @@ func (mw *Middleware) AccountLocalLinkSolveChallenge(_ context.Context, req *pb. } } +func (mw *Middleware) AccountLocalLinkCreateApp(_ context.Context, req *pb.RpcAccountLocalLinkCreateAppRequest) *pb.RpcAccountLocalLinkCreateAppResponse { + appKey, err := mw.applicationService.LinkLocalCreateApp(req) + code := mapErrorCode(err, + errToCode(application.ErrApplicationIsNotRunning, pb.RpcAccountLocalLinkCreateAppResponseError_ACCOUNT_IS_NOT_RUNNING), + ) + return &pb.RpcAccountLocalLinkCreateAppResponse{ + AppKey: appKey, + Error: &pb.RpcAccountLocalLinkCreateAppResponseError{ + Code: code, + Description: getErrorDescription(err), + }, + } +} + +func (mw *Middleware) AccountLocalLinkListApps(_ context.Context, req *pb.RpcAccountLocalLinkListAppsRequest) *pb.RpcAccountLocalLinkListAppsResponse { + apps, err := mw.applicationService.LinkLocalListApps() + code := mapErrorCode(err, + errToCode(application.ErrApplicationIsNotRunning, pb.RpcAccountLocalLinkListAppsResponseError_ACCOUNT_IS_NOT_RUNNING), + ) + appsList := make([]*model.AccountAuthAppInfo, len(apps)) + for i, app := range apps { + if app.AppName == "" { + app.AppName = app.AppHash + } + appsList[i] = &model.AccountAuthAppInfo{ + AppHash: app.AppHash, + AppName: app.AppName, + CreatedAt: app.CreatedAt, + ExpireAt: app.ExpireAt, + Scope: model.AccountAuthLocalApiScope(app.Scope), + } + } + return &pb.RpcAccountLocalLinkListAppsResponse{ + App: appsList, + Error: &pb.RpcAccountLocalLinkListAppsResponseError{ + Code: code, + Description: getErrorDescription(err), + }, + } +} + +func (mw *Middleware) AccountLocalLinkRevokeApp(_ context.Context, req *pb.RpcAccountLocalLinkRevokeAppRequest) *pb.RpcAccountLocalLinkRevokeAppResponse { + err := mw.applicationService.LinkLocalRevokeApp(req) + code := mapErrorCode(err, + errToCode(walletComp.ErrAppLinkNotFound, pb.RpcAccountLocalLinkRevokeAppResponseError_NOT_FOUND), + errToCode(application.ErrApplicationIsNotRunning, pb.RpcAccountLocalLinkRevokeAppResponseError_ACCOUNT_IS_NOT_RUNNING), + ) + return &pb.RpcAccountLocalLinkRevokeAppResponse{ + Error: &pb.RpcAccountLocalLinkRevokeAppResponseError{ + Code: code, + Description: getErrorDescription(err), + }, + } +} func getClientInfo(ctx context.Context) pb.EventAccountLinkChallengeClientInfo { p, ok := peer.FromContext(ctx) if !ok { diff --git a/core/application/sessions.go b/core/application/sessions.go index f9e492108..87790622e 100644 --- a/core/application/sessions.go +++ b/core/application/sessions.go @@ -95,9 +95,8 @@ func (s *Service) LinkLocalSolveChallenge(req *pb.RpcAccountLocalLinkSolveChalle return "", "", err } wallet := s.app.Component(walletComp.CName).(walletComp.Wallet) - appKey, err = wallet.PersistAppLink(&walletComp.AppLinkPayload{ + appKey, err = wallet.PersistAppLink(&walletComp.AppLinkInfo{ AppName: clientInfo.ProcessName, - AppPath: clientInfo.ProcessPath, CreatedAt: time.Now().Unix(), Scope: int(scope), }) @@ -109,3 +108,37 @@ func (s *Service) LinkLocalSolveChallenge(req *pb.RpcAccountLocalLinkSolveChalle })) return } + +func (s *Service) LinkLocalCreateApp(req *pb.RpcAccountLocalLinkCreateAppRequest) (appKey string, err error) { + if s.app == nil { + return "", ErrApplicationIsNotRunning + } + + wallet := s.app.Component(walletComp.CName).(walletComp.Wallet) + appKey, err = wallet.PersistAppLink(&walletComp.AppLinkInfo{ + AppName: req.App.AppName, + CreatedAt: time.Now().Unix(), + Scope: int(req.App.Scope), + }) + + return +} + +func (s *Service) LinkLocalListApps() ([]*walletComp.AppLinkInfo, error) { + if s.app == nil { + return nil, ErrApplicationIsNotRunning + } + + wallet := s.app.Component(walletComp.CName).(walletComp.Wallet) + return wallet.ListAppLinks() +} + +func (s *Service) LinkLocalRevokeApp(req *pb.RpcAccountLocalLinkRevokeAppRequest) error { + if s.app == nil { + return ErrApplicationIsNotRunning + } + + wallet := s.app.Component(walletComp.CName).(walletComp.Wallet) + return wallet.RevokeAppLink(req.AppHash) + +} diff --git a/core/wallet/applink.go b/core/wallet/applink.go index 2c51e8c27..e02d858cf 100644 --- a/core/wallet/applink.go +++ b/core/wallet/applink.go @@ -2,14 +2,17 @@ package wallet import ( "bytes" - "crypto/ed25519" + "crypto/hmac" "crypto/sha256" "encoding/base64" + "encoding/binary" json "encoding/json" + "errors" "fmt" "io" "os" "path/filepath" + "strings" "github.com/anyproto/any-sync/util/crypto" @@ -17,133 +20,23 @@ import ( "github.com/anyproto/anytype-heart/pkg/lib/crypto/symmetric/gcm" ) -const appLinkKeysDirectory = "auth" +const ( + appLinkKeysDirectory = "auth" + ver1 = 1 +) var ErrAppLinkNotFound = fmt.Errorf("app link file not found in the account directory") -type AppLinkPayload struct { - AccountPrivateKey []byte `json:"key"` // stored only for the main client app - AppName string `json:"app_name"` - AppPath string `json:"app_path"` // for now, it is not verified - CreatedAt int64 `json:"created_at"` // unix timestamp - ExpireAt int64 `json:"expire_at"` // unix timestamp - Scope int `json:"scope"` +// AppLinkInfo is what your main app cares about after decryption. +type AppLinkInfo struct { + AppHash string `json:"-"` // filled at read time + AppName string `json:"app_name"` + CreatedAt int64 `json:"created_at"` + ExpireAt int64 `json:"expire_at"` + Scope int `json:"scope"` } -type appLinkFileEncrypted struct { - Payload []byte `json:"payload"` - Signature []byte `json:"signature"` // account signature to check the integrity of the payload -} - -func writeAppLinkFile(accountPk crypto.PrivKey, dir string, payload *AppLinkPayload) (appKey string, err error) { - key, err := symmetric.NewRandom() - if err != nil { - return - } - - b, err := json.Marshal(payload) - if err != nil { - return - } - - encPayloadReader, err := gcm.New(key).EncryptReader(bytes.NewReader(b)) - if err != nil { - return "", err - } - - encPayload, err := io.ReadAll(encPayloadReader) - if err != nil { - return "", err - } - - appKey = base64.StdEncoding.EncodeToString(key.Bytes()) - signature, err := accountPk.Sign(encPayload) - - if err != nil { - return "", err - } - encryptedPayload := appLinkFileEncrypted{ - Payload: encPayload, - Signature: signature, - } - - hash := sha256.Sum256(key.Bytes()) - f, err := os.Create(filepath.Join(dir, fmt.Sprintf("%x", hash)+".json")) - if err != nil { - return "", fmt.Errorf("failed to create app key file in the account: %w", err) - } - // todo: change perms? - - w := json.NewEncoder(f) - err = w.Encode(encryptedPayload) - if err != nil { - return "", err - } - return appKey, nil -} - -func readAppLinkFile(pubKey crypto.PubKey, dir string, appKey string) (*AppLinkPayload, error) { - symKeyBytes, err := base64.StdEncoding.DecodeString(appKey) - - if err != nil { - return nil, err - } - hash := sha256.Sum256(symKeyBytes) - f, err := os.Open(filepath.Join(dir, fmt.Sprintf("%x", hash)+".json")) - if err != nil { - // in case it is not found, we return a special error - if os.IsNotExist(err) { - return nil, ErrAppLinkNotFound - } - return nil, err - } - defer f.Close() - - appKeyFile := appLinkFileEncrypted{} - d := json.NewDecoder(f) - err = d.Decode(&appKeyFile) - - if err != nil { - return nil, err - } - - err = signatureVerify(pubKey, &appKeyFile) - if err != nil { - return nil, err - } - - key, err := symmetric.FromBytes(symKeyBytes) - if err != nil { - return nil, err - } - - r, err := gcm.New(key).DecryptReader(bytes.NewReader(appKeyFile.Payload)) - if err != nil { - return nil, err - } - - d = json.NewDecoder(r) - payload := AppLinkPayload{} - err = d.Decode(&payload) - if err != nil { - return nil, err - } - - return &payload, nil -} - -func signatureVerify(key crypto.PubKey, encrypted *appLinkFileEncrypted) error { - v, err := key.Verify(encrypted.Payload, encrypted.Signature) - if err != nil { - return err - } - if !v { - return fmt.Errorf("signature verification failed") - } - return nil -} - -func (r *wallet) ReadAppLink(appKey string) (*AppLinkPayload, error) { +func (r *wallet) ReadAppLink(appKey string) (*AppLinkInfo, error) { if r.repoPath == "" { return nil, fmt.Errorf("repo path is not set") } @@ -153,14 +46,305 @@ func (r *wallet) ReadAppLink(appKey string) (*AppLinkPayload, error) { } // readAppLinkFile verifies the signature of the payload to make sure it was not tampered and the account id matches - return readAppLinkFile(r.accountKey.GetPublic(), filepath.Join(r.repoPath, appLinkKeysDirectory), appKey) + return load(filepath.Join(r.repoPath, appLinkKeysDirectory), appKey, r.accountKey) } -func (r *wallet) PersistAppLink(payload *AppLinkPayload) (appKey string, err error) { - return writeAppLinkFile(r.accountKey, filepath.Join(r.repoPath, appLinkKeysDirectory), payload) +func (r *wallet) PersistAppLink(payload *AppLinkInfo) (appKey string, err error) { + return generate(filepath.Join(r.repoPath, appLinkKeysDirectory), r.accountKey, payload) } -func DeriveForAccount(seed []byte) (res crypto.DerivationResult, err error) { - res.Identity = crypto.NewEd25519PrivKey(ed25519.NewKeyFromSeed(seed)) - return +// ListAppLinks returns a list of all app links for this wallet. +func (r *wallet) ListAppLinks() ([]*AppLinkInfo, error) { + if r.repoPath == "" { + return nil, fmt.Errorf("repo path is not set") + } + + if r.accountKey == nil { + return nil, fmt.Errorf("account is not set") + } + + return list(filepath.Join(r.repoPath, appLinkKeysDirectory), r.accountKey) +} + +// RevokeAppLink removes an app link based on its app hash. +func (r *wallet) RevokeAppLink(appHash string) error { + if r.repoPath == "" { + return fmt.Errorf("repo path is not set") + } + + return revoke(filepath.Join(r.repoPath, appLinkKeysDirectory), appHash) +} + +// Generate writes a v1 file and returns the base-64 appKey the +// third-party app must keep. +func generate(dir string, accountPriv crypto.PrivKey, info *AppLinkInfo) (appKey string, _ error) { + if err := os.MkdirAll(dir, 0o700); err != nil && !os.IsExist(err) { + return "", err + } + key, err := crypto.NewRandomAES() + if err != nil { + return "", err + } + appKey = base64.StdEncoding.EncodeToString(key.Bytes()) + + file, err := buildV1(key.Bytes(), accountPriv, info) + if err != nil { + return "", err + } + name := fmt.Sprintf("%x.json", sha256.Sum256(key.Bytes())) + fp, err := os.OpenFile(filepath.Join(dir, name), os.O_CREATE|os.O_EXCL|os.O_WRONLY, 0o600) + if err != nil { + return "", err + } + defer fp.Close() + return appKey, json.NewEncoder(fp).Encode(&file) +} + +// Load finds .json, auto-detects the version, +// verifies & decrypts, and returns the info. +func load(dir, appKey string, accountPriv crypto.PrivKey) (*AppLinkInfo, error) { + key, err := base64.StdEncoding.DecodeString(appKey) + if err != nil { + return nil, err + } + path := filepath.Join(dir, fmt.Sprintf("%x.json", sha256.Sum256(key))) + fp, err := os.Open(path) + if errors.Is(err, os.ErrNotExist) { + return nil, ErrAppLinkNotFound + } + if err != nil { + return nil, err + } + defer fp.Close() + + // sniff version + var peek struct { + Version int `json:"ver"` + } + if err = json.NewDecoder(fp).Decode(&peek); err != nil { + return nil, err + } + _, _ = fp.Seek(0, io.SeekStart) + + switch peek.Version { + case 0 /* field missing */ : + var v0 fileV0 + if err = json.NewDecoder(fp).Decode(&v0); err != nil { + return nil, err + } + return verifyAndOpenV0(key, accountPriv, &v0) + + case 1: + var v1 fileV1 + if err = json.NewDecoder(fp).Decode(&v1); err != nil { + return nil, err + } + return verifyAndOpenV1(key, accountPriv, &v1) + + default: + return nil, fmt.Errorf("unsupported version %d", peek.Version) + } +} + +// List reads all app link files in the given directory and returns basic info without decrypting payloads. +// For v0 files, only the AppHash field will be populated. +// For v1 files, it will attempt to decrypt and populate all fields if the account private key is provided. +func list(dir string, accountPriv crypto.PrivKey) ([]*AppLinkInfo, error) { + // Ensure directory exists + if _, err := os.Stat(dir); os.IsNotExist(err) { + return nil, nil // Return empty slice if directory doesn't exist + } + + // Read all .json files in the directory + files, err := filepath.Glob(filepath.Join(dir, "*.json")) + if err != nil { + return nil, err + } + + var result []*AppLinkInfo + for _, path := range files { + // Extract app hash from filename + filename := filepath.Base(path) + appHash := strings.TrimSuffix(filename, ".json") + + // Try to read file to determine version + fp, err := os.Open(path) + if err != nil { + continue // Skip files we can't read + } + + // Attempt to determine version + var peek struct { + Version int `json:"ver"` + } + if err = json.NewDecoder(fp).Decode(&peek); err != nil { + fp.Close() + continue // Skip malformed files + } + + _, _ = fp.Seek(0, io.SeekStart) + + info := &AppLinkInfo{ + AppHash: appHash, + } + + // For v1 files, attempt to decrypt if account private key is provided + if peek.Version == 1 && accountPriv != nil { + var v1 fileV1 + if err = json.NewDecoder(fp).Decode(&v1); err == nil { + // Try to decrypt Info field + if plain, err := accountPriv.Decrypt(v1.Info); err == nil { + _ = json.Unmarshal(plain, info) // Ignore error, partial data is fine + } + } + } + + fp.Close() + result = append(result, info) + } + + return result, nil +} + +// Revoke removes an app link file based on its app hash. +// Returns an error if the file doesn't exist. +func revoke(dir, appHash string) error { + filePath := filepath.Join(dir, appHash+".json") + + // Check if the file exists + if _, err := os.Stat(filePath); os.IsNotExist(err) { + return ErrAppLinkNotFound + } + + // Delete the file + return os.Remove(filePath) +} + +// ──────────────────────────── v0 legacy support ──────────────────────────── + +type fileV0 struct { + Payload []byte `json:"payload"` // AES-GCM(appKey, AppLinkInfo) + Signature []byte `json:"signature"` // Ed25519(accountPriv, payload) +} + +func verifyAndOpenV0(appKey []byte, accountPriv crypto.PrivKey, f *fileV0) (*AppLinkInfo, error) { + ok, _ := accountPriv.GetPublic().Verify(f.Payload, f.Signature) + if !ok { + return nil, errors.New("v0 signature invalid") + } + + key, err := symmetric.FromBytes(appKey) + if err != nil { + return nil, err + } + + r, err := gcm.New(key).DecryptReader(bytes.NewReader(f.Payload)) + if err != nil { + return nil, err + } + + var info AppLinkInfo + d := json.NewDecoder(r) + if err = d.Decode(&info); err != nil { + return nil, err + } + + return &info, nil +} + +// ──────────────────────────────── v1 files ───────────────────────────────── + +// fileV1 is the JSON-encoded on-disk structure introduced in format-version 1. +// All three data fields (`Info`, `Auth`, `Signature`) are verified during +// `Load`, so any bit-flip or tampering is detected before the payload is used. +type fileV1 struct { + // Version is the *file-format* version tag and **must be 1** for this layout. + // (Future formats should bump this value and add a new struct.) + Version int `json:"ver"` + + // Info contains the envelope-encrypted AppLinkInfo: + // X25519-SealedBox (accountPub, plaintextJSON(AppLinkInfo)). + // Only the user's account private key can open it, so the payload stays + // confidential even if the file is copied. + Info []byte `json:"info"` + + // Auth is an integrity MAC: + // HMAC-SHA-256(appKey, ver || info) + // It proves that the same per-app symmetric key that named the file + // was also present when the record was created (prevents file swapping). + Auth []byte `json:"auth"` + + // Signature is the wallet owner's attestation: + // Ed25519(accountPriv, ver || info || auth) + // It cryptographically binds the record to the specific wallet account + // and prevents any on-disk modification or replay from another account. + Signature []byte `json:"sig"` +} + +// buildV1 writes the json-ready struct. +func buildV1(appKey []byte, accountPriv crypto.PrivKey, info *AppLinkInfo) (fileV1, error) { + msg, err := json.Marshal(info) + if err != nil { + return fileV1{}, err + } + // 1. encrypt Info with X25519 sealed-box + sealed, err := accountPriv.GetPublic().Encrypt(msg) + if err != nil { + return fileV1{}, err + } + + // 2. auth = HMAC(appKey, ver||info) + auth := hmacAuth(appKey, ver1, sealed) + + // 3. signature = Ed25519(priv, ver||info||auth) + sig, err := accountPriv.Sign(bytesForSig(ver1, sealed, auth)) + if err != nil { + return fileV1{}, err + } + return fileV1{ + Version: ver1, + Info: sealed, + Auth: auth, + Signature: sig, + }, nil +} + +func verifyAndOpenV1(appKey []byte, accountPriv crypto.PrivKey, f *fileV1) (*AppLinkInfo, error) { + // 1. verify Ed25519 signature + if ok, _ := accountPriv.GetPublic().Verify(bytesForSig(f.Version, f.Info, f.Auth), f.Signature); !ok { + return nil, errors.New("v1 ed25519 signature mismatch") + } + // 2. verify HMAC matches this appKey + want := hmacAuth(appKey, f.Version, f.Info) + if !hmac.Equal(want, f.Auth) { + return nil, errors.New("v1 HMAC mismatch") + } + // 3. decrypt Info via sealed-box + plain, err := accountPriv.Decrypt(f.Info) + if err != nil { + return nil, err + } + var info AppLinkInfo + if err := json.Unmarshal(plain, &info); err != nil { + return nil, err + } + return &info, nil +} + +// ───────────────────────── crypto helpers ────────────────────────────────── + +// hmacAuth = HMAC-SHA-256(appKey, ver||info) +func hmacAuth(appKey []byte, ver int, info []byte) []byte { + mac := hmac.New(sha256.New, appKey) + _ = binary.Write(mac, binary.BigEndian, ver) + mac.Write(info) + return mac.Sum(nil) +} + +func bytesForSig(ver int, info, auth []byte) []byte { + var buf bytes.Buffer + binary.Write(&buf, binary.BigEndian, uint32(ver)) + buf.Write(info) + buf.Write(auth) + return buf.Bytes() } diff --git a/core/wallet/applink_test.go b/core/wallet/applink_test.go index 9808de25a..3204452a9 100644 --- a/core/wallet/applink_test.go +++ b/core/wallet/applink_test.go @@ -1,71 +1,313 @@ package wallet import ( - "crypto/rand" + "bytes" + "crypto/sha256" + "encoding/base64" "encoding/json" "fmt" - "math" - rand2 "math/rand" + "io" "os" + "path/filepath" + "reflect" "testing" "time" "github.com/anyproto/any-sync/util/crypto" "github.com/stretchr/testify/require" + + "github.com/anyproto/anytype-heart/pkg/lib/crypto/symmetric" + "github.com/anyproto/anytype-heart/pkg/lib/crypto/symmetric/gcm" ) -func Test_writeAppLinkFile(t *testing.T) { - // 10 to the 4th power - a := 4 - - fmt.Println(a) - value := fmt.Sprintf("%0*d", a, rand2.Intn(int(math.Pow10(a)))) - fmt.Println(value) - -} -func Test_writeAppLinkFileAndRead(t *testing.T) { - priv, pub, err := crypto.GenerateRandomEd25519KeyPair() - require.NoError(t, err) - - tempDir := os.TempDir() - payload := &AppLinkPayload{ - AppName: "test", - AppPath: "path", - CreatedAt: time.Now().Unix(), - ExpireAt: 0, +// make a reproducible test AppLinkInfo +func testInfo() *AppLinkInfo { + now := time.Now().Unix() + return &AppLinkInfo{ + AppName: "unit-test", + CreatedAt: now, + ExpireAt: now + int64(24*time.Hour/time.Second), + Scope: 42, } - gotAppKey, err := writeAppLinkFile(priv, tempDir, payload) - require.NoError(t, err) - - require.NotEmpty(t, gotAppKey) - - gotPayload, err := readAppLinkFile(pub, tempDir, gotAppKey) - require.NoError(t, err) - require.Equal(t, payload, gotPayload) } -func Test_signatureVerify(t *testing.T) { - priv, pub, err := crypto.GenerateRandomEd25519KeyPair() - require.NoError(t, err) - - data := make([]byte, 100) - _, err = rand.Reader.Read(data) - require.NoError(t, err) - - sign, err := priv.Sign(data) - require.NoError(t, err) - - payload := &appLinkFileEncrypted{Payload: data, Signature: sign} - - err = signatureVerify(pub, payload) - require.NoError(t, err) - - jb, err := json.Marshal(payload) - require.NoError(t, err) - - payload2 := &appLinkFileEncrypted{} - err = json.Unmarshal(jb, payload2) - require.NoError(t, err) - err = signatureVerify(pub, payload2) - require.NoError(t, err) +func equalInfos(a, b *AppLinkInfo) bool { + if a == nil || b == nil { + return a == b + } + // we ignore AppHash because it is filled only on read + return a.AppName == b.AppName && + a.CreatedAt == b.CreatedAt && + a.ExpireAt == b.ExpireAt && + a.Scope == b.Scope +} + +func TestGenerateLoad_RoundTrip_V1(t *testing.T) { + // ── arrange keys & temp dir ────────────────────────── + tmp := t.TempDir() + dir := filepath.Join(tmp, appLinkKeysDirectory) + + pk, _, err := crypto.GenerateRandomEd25519KeyPair() + require.NoError(t, err) + + // payload for v1 + want := testInfo() + + // ───────────────────────── v1 round-trip ───────────── + appKeyV1, err := generate(dir, pk, want) + if err != nil { + t.Fatalf("Generate(v1): %v", err) + } + gotV1, err := load(dir, appKeyV1, pk) + if err != nil { + t.Fatalf("Load(v1): %v", err) + } + if !equalInfos(want, gotV1) { + t.Fatalf("v1 payload mismatch.\nwant: %+v\ngot : %+v", want, gotV1) + } +} + +func TestGenerateLoad_RoundTrip_V0(t *testing.T) { + // ── arrange keys & temp dir ────────────────────────── + tmp := t.TempDir() + dir := filepath.Join(tmp, appLinkKeysDirectory) + + // Make sure the directory exists + err := os.MkdirAll(dir, 0o700) + require.NoError(t, err) + + pk, _, err := crypto.GenerateRandomEd25519KeyPair() + require.NoError(t, err) + + // payload for v0 + want := testInfo() + + // ───────────────────────── v0 round-trip ───────────── + appKeyV0, err := writeAppLinkFileV0(pk, dir, want) + if err != nil { + t.Fatalf("writeAppLinkFileV0: %v", err) + } + gotV0, err := load(dir, appKeyV0, pk) + if err != nil { + t.Fatalf("Load(v0): %v", err) + } + if !equalInfos(want, gotV0) { + t.Fatalf("v0 payload mismatch.\nwant: %+v\ngot : %+v", want, gotV0) + } +} + +func TestNoDuplicateKeys_V0_V1(t *testing.T) { + // ── arrange keys & temp dir ────────────────────────── + tmp := t.TempDir() + dir := filepath.Join(tmp, appLinkKeysDirectory) + + // Make sure the directory exists + err := os.MkdirAll(dir, 0o700) + require.NoError(t, err) + + pk, _, err := crypto.GenerateRandomEd25519KeyPair() + require.NoError(t, err) + + // common payload for both versions + want := testInfo() + + // Generate keys for both v0 and v1 + appKeyV1, err := generate(dir, pk, want) + require.NoError(t, err) + + appKeyV0, err := writeAppLinkFileV0(pk, dir, want) + require.NoError(t, err) + + // ───────────────────────── sanity: v0≠v1 keys ──────── + if reflect.DeepEqual(appKeyV0, appKeyV1) { + t.Fatalf("appKey collision between v0 and v1 – should never happen") + } +} + +func TestList(t *testing.T) { + // ── arrange keys & temp dir ────────────────────────── + tmp := t.TempDir() + dir := filepath.Join(tmp, appLinkKeysDirectory) + + // Make sure the directory exists + err := os.MkdirAll(dir, 0o700) + require.NoError(t, err) + + pk, _, err := crypto.GenerateRandomEd25519KeyPair() + require.NoError(t, err) + + // Create v1 entry + info1 := &AppLinkInfo{ + AppName: "app1", + CreatedAt: time.Now().Unix(), + ExpireAt: time.Now().Unix() + 3600, + Scope: 1, + } + appKey1, err := generate(dir, pk, info1) + require.NoError(t, err) + + // Create v0 entry + info2 := &AppLinkInfo{ + AppName: "app2", + CreatedAt: time.Now().Unix(), + ExpireAt: time.Now().Unix() + 3600, + Scope: 2, + } + appKey2, err := writeAppLinkFileV0(pk, dir, info2) + require.NoError(t, err) + + // List all entries (with account key) + entries, err := list(dir, pk) + require.NoError(t, err) + require.Equal(t, 2, len(entries), "should have found 2 entries") + + // Create maps for easier lookup by AppName + entriesByName := make(map[string]*AppLinkInfo) + for _, entry := range entries { + if entry.AppName != "" { + entriesByName[entry.AppName] = entry + } + } + + // Verify v1 entry has full info + app1Entry, found := entriesByName["app1"] + require.True(t, found, "should have found app1 entry") + require.Equal(t, info1.Scope, app1Entry.Scope) + require.NotEmpty(t, app1Entry.AppHash, "v1 entry should have AppHash") + + // Also verify we can load this entry explicitly with the key + loaded, err := load(dir, appKey1, pk) + require.NoError(t, err) + require.Equal(t, info1.AppName, loaded.AppName) + + // Verify v0 entries have AppHash but not other fields + // Since v0 doesn't populate AppName when listing, we need to count entries + // with non-empty AppHash but empty AppName + count := 0 + var v0Entry *AppLinkInfo + for _, entry := range entries { + if entry.AppName == "" && entry.AppHash != "" { + count++ + v0Entry = entry + } + } + require.Equal(t, 1, count, "should have found 1 v0 entry") + require.NotNil(t, v0Entry, "should have a v0 entry") + + // Verify we can load the v0 entry explicitly with the key + loaded, err = load(dir, appKey2, pk) + require.NoError(t, err) + require.Equal(t, info2.AppName, loaded.AppName) + + // Test listing without account key + entriesNoKey, err := list(dir, nil) + require.NoError(t, err) + require.Equal(t, 2, len(entriesNoKey), "should have found 2 entries") + + // All entries should have AppHash but no other fields + for _, entry := range entriesNoKey { + require.NotEmpty(t, entry.AppHash, "entry should have AppHash") + require.Empty(t, entry.AppName, "entry should not have AppName without key") + } +} + +func TestRevoke(t *testing.T) { + // ── arrange keys & temp dir ────────────────────────── + tmp := t.TempDir() + dir := filepath.Join(tmp, appLinkKeysDirectory) + + // Make sure the directory exists + err := os.MkdirAll(dir, 0o700) + require.NoError(t, err) + + pk, _, err := crypto.GenerateRandomEd25519KeyPair() + require.NoError(t, err) + + // Create an app link + info := &AppLinkInfo{ + AppName: "test-app", + CreatedAt: time.Now().Unix(), + ExpireAt: time.Now().Unix() + 3600, + Scope: 1, + } + + // Generate the app link file + _, err = generate(dir, pk, info) + require.NoError(t, err) + + // List entries to get the app hash + entries, err := list(dir, pk) + require.NoError(t, err) + require.Equal(t, 1, len(entries), "should have one entry") + + appHash := entries[0].AppHash + require.NotEmpty(t, appHash, "app hash should not be empty") + + // Verify the file exists + filePath := filepath.Join(dir, appHash+".json") + _, err = os.Stat(filePath) + require.NoError(t, err, "file should exist") + + // Test revoke for existing file + err = revoke(dir, appHash) + require.NoError(t, err, "should successfully revoke existing file") + + // Verify the file no longer exists + _, err = os.Stat(filePath) + require.True(t, os.IsNotExist(err), "file should not exist after revocation") + + // Test revoke for non-existent file + err = revoke(dir, "nonexistent-hash") + require.Equal(t, ErrAppLinkNotFound, err, "should return ErrAppLinkNotFound for non-existent file") + + // Test revoke with empty hash + err = revoke(dir, "") + require.Equal(t, ErrAppLinkNotFound, err, "should return ErrAppLinkNotFound for empty hash") +} + +// writeAppLinkFileV0: legacy support for v0 files. Used for tests +func writeAppLinkFileV0(accountPk crypto.PrivKey, dir string, payload *AppLinkInfo) (appKey string, err error) { + key, err := symmetric.NewRandom() + if err != nil { + return + } + + b, err := json.Marshal(payload) + if err != nil { + return + } + + encPayloadReader, err := gcm.New(key).EncryptReader(bytes.NewReader(b)) + if err != nil { + return "", err + } + + encPayload, err := io.ReadAll(encPayloadReader) + if err != nil { + return "", err + } + + appKey = base64.StdEncoding.EncodeToString(key.Bytes()) + signature, err := accountPk.Sign(encPayload) + + if err != nil { + return "", err + } + encryptedPayload := fileV0{ + Payload: encPayload, + Signature: signature, + } + + hash := sha256.Sum256(key.Bytes()) + f, err := os.Create(filepath.Join(dir, fmt.Sprintf("%x", hash)+".json")) + if err != nil { + return "", fmt.Errorf("failed to create app key file in the account: %w", err) + } + + w := json.NewEncoder(f) + err = w.Encode(encryptedPayload) + if err != nil { + return "", err + } + return appKey, nil } diff --git a/core/wallet/wallet.go b/core/wallet/wallet.go index fa0be7e6c..a0ea512aa 100644 --- a/core/wallet/wallet.go +++ b/core/wallet/wallet.go @@ -175,8 +175,10 @@ type Wallet interface { GetAccountEthPrivkey() EthPrivateKey GetAccountEthAddress() EthAddress - ReadAppLink(appKey string) (*AppLinkPayload, error) - PersistAppLink(payload *AppLinkPayload) (appKey string, err error) + ReadAppLink(appKey string) (*AppLinkInfo, error) + PersistAppLink(payload *AppLinkInfo) (appKey string, err error) + ListAppLinks() ([]*AppLinkInfo, error) + RevokeAppLink(appHash string) error accountservice.Service app.Component diff --git a/docs/proto.md b/docs/proto.md index 570af0f49..2d90cdb6f 100644 --- a/docs/proto.md +++ b/docs/proto.md @@ -97,10 +97,22 @@ - [Rpc.Account.GetConfig.Get](#anytype-Rpc-Account-GetConfig-Get) - [Rpc.Account.GetConfig.Get.Request](#anytype-Rpc-Account-GetConfig-Get-Request) - [Rpc.Account.LocalLink](#anytype-Rpc-Account-LocalLink) + - [Rpc.Account.LocalLink.CreateApp](#anytype-Rpc-Account-LocalLink-CreateApp) + - [Rpc.Account.LocalLink.CreateApp.Request](#anytype-Rpc-Account-LocalLink-CreateApp-Request) + - [Rpc.Account.LocalLink.CreateApp.Response](#anytype-Rpc-Account-LocalLink-CreateApp-Response) + - [Rpc.Account.LocalLink.CreateApp.Response.Error](#anytype-Rpc-Account-LocalLink-CreateApp-Response-Error) + - [Rpc.Account.LocalLink.ListApps](#anytype-Rpc-Account-LocalLink-ListApps) + - [Rpc.Account.LocalLink.ListApps.Request](#anytype-Rpc-Account-LocalLink-ListApps-Request) + - [Rpc.Account.LocalLink.ListApps.Response](#anytype-Rpc-Account-LocalLink-ListApps-Response) + - [Rpc.Account.LocalLink.ListApps.Response.Error](#anytype-Rpc-Account-LocalLink-ListApps-Response-Error) - [Rpc.Account.LocalLink.NewChallenge](#anytype-Rpc-Account-LocalLink-NewChallenge) - [Rpc.Account.LocalLink.NewChallenge.Request](#anytype-Rpc-Account-LocalLink-NewChallenge-Request) - [Rpc.Account.LocalLink.NewChallenge.Response](#anytype-Rpc-Account-LocalLink-NewChallenge-Response) - [Rpc.Account.LocalLink.NewChallenge.Response.Error](#anytype-Rpc-Account-LocalLink-NewChallenge-Response-Error) + - [Rpc.Account.LocalLink.RevokeApp](#anytype-Rpc-Account-LocalLink-RevokeApp) + - [Rpc.Account.LocalLink.RevokeApp.Request](#anytype-Rpc-Account-LocalLink-RevokeApp-Request) + - [Rpc.Account.LocalLink.RevokeApp.Response](#anytype-Rpc-Account-LocalLink-RevokeApp-Response) + - [Rpc.Account.LocalLink.RevokeApp.Response.Error](#anytype-Rpc-Account-LocalLink-RevokeApp-Response-Error) - [Rpc.Account.LocalLink.SolveChallenge](#anytype-Rpc-Account-LocalLink-SolveChallenge) - [Rpc.Account.LocalLink.SolveChallenge.Request](#anytype-Rpc-Account-LocalLink-SolveChallenge-Request) - [Rpc.Account.LocalLink.SolveChallenge.Response](#anytype-Rpc-Account-LocalLink-SolveChallenge-Response) @@ -1368,7 +1380,10 @@ - [Rpc.Account.Create.Response.Error.Code](#anytype-Rpc-Account-Create-Response-Error-Code) - [Rpc.Account.Delete.Response.Error.Code](#anytype-Rpc-Account-Delete-Response-Error-Code) - [Rpc.Account.EnableLocalNetworkSync.Response.Error.Code](#anytype-Rpc-Account-EnableLocalNetworkSync-Response-Error-Code) + - [Rpc.Account.LocalLink.CreateApp.Response.Error.Code](#anytype-Rpc-Account-LocalLink-CreateApp-Response-Error-Code) + - [Rpc.Account.LocalLink.ListApps.Response.Error.Code](#anytype-Rpc-Account-LocalLink-ListApps-Response-Error-Code) - [Rpc.Account.LocalLink.NewChallenge.Response.Error.Code](#anytype-Rpc-Account-LocalLink-NewChallenge-Response-Error-Code) + - [Rpc.Account.LocalLink.RevokeApp.Response.Error.Code](#anytype-Rpc-Account-LocalLink-RevokeApp-Response-Error-Code) - [Rpc.Account.LocalLink.SolveChallenge.Response.Error.Code](#anytype-Rpc-Account-LocalLink-SolveChallenge-Response-Error-Code) - [Rpc.Account.Migrate.Response.Error.Code](#anytype-Rpc-Account-Migrate-Response-Error-Code) - [Rpc.Account.MigrateCancel.Response.Error.Code](#anytype-Rpc-Account-MigrateCancel-Response-Error-Code) @@ -1923,6 +1938,7 @@ - [pkg/lib/pb/model/protos/models.proto](#pkg_lib_pb_model_protos_models-proto) - [Account](#anytype-model-Account) - [Account.Auth](#anytype-model-Account-Auth) + - [Account.Auth.AppInfo](#anytype-model-Account-Auth-AppInfo) - [Account.Config](#anytype-model-Account-Config) - [Account.Info](#anytype-model-Account-Info) - [Account.Status](#anytype-model-Account-Status) @@ -2117,6 +2133,9 @@ | WalletConvert | [Rpc.Wallet.Convert.Request](#anytype-Rpc-Wallet-Convert-Request) | [Rpc.Wallet.Convert.Response](#anytype-Rpc-Wallet-Convert-Response) | | | AccountLocalLinkNewChallenge | [Rpc.Account.LocalLink.NewChallenge.Request](#anytype-Rpc-Account-LocalLink-NewChallenge-Request) | [Rpc.Account.LocalLink.NewChallenge.Response](#anytype-Rpc-Account-LocalLink-NewChallenge-Response) | | | AccountLocalLinkSolveChallenge | [Rpc.Account.LocalLink.SolveChallenge.Request](#anytype-Rpc-Account-LocalLink-SolveChallenge-Request) | [Rpc.Account.LocalLink.SolveChallenge.Response](#anytype-Rpc-Account-LocalLink-SolveChallenge-Response) | | +| AccountLocalLinkCreateApp | [Rpc.Account.LocalLink.CreateApp.Request](#anytype-Rpc-Account-LocalLink-CreateApp-Request) | [Rpc.Account.LocalLink.CreateApp.Response](#anytype-Rpc-Account-LocalLink-CreateApp-Response) | | +| AccountLocalLinkListApps | [Rpc.Account.LocalLink.ListApps.Request](#anytype-Rpc-Account-LocalLink-ListApps-Request) | [Rpc.Account.LocalLink.ListApps.Response](#anytype-Rpc-Account-LocalLink-ListApps-Response) | | +| AccountLocalLinkRevokeApp | [Rpc.Account.LocalLink.RevokeApp.Request](#anytype-Rpc-Account-LocalLink-RevokeApp-Request) | [Rpc.Account.LocalLink.RevokeApp.Response](#anytype-Rpc-Account-LocalLink-RevokeApp-Response) | | | WalletCreateSession | [Rpc.Wallet.CreateSession.Request](#anytype-Rpc-Wallet-CreateSession-Request) | [Rpc.Wallet.CreateSession.Response](#anytype-Rpc-Wallet-CreateSession-Response) | | | WalletCloseSession | [Rpc.Wallet.CloseSession.Request](#anytype-Rpc-Wallet-CloseSession-Request) | [Rpc.Wallet.CloseSession.Response](#anytype-Rpc-Wallet-CloseSession-Response) | | | WorkspaceCreate | [Rpc.Workspace.Create.Request](#anytype-Rpc-Workspace-Create-Request) | [Rpc.Workspace.Create.Response](#anytype-Rpc-Workspace-Create-Response) | Workspace *** | @@ -3744,6 +3763,115 @@ TODO: Remove this request if we do not need it, GO-1926 + + +### Rpc.Account.LocalLink.CreateApp + + + + + + + + + +### Rpc.Account.LocalLink.CreateApp.Request + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| app | [model.Account.Auth.AppInfo](#anytype-model-Account-Auth-AppInfo) | | | + + + + + + + + +### Rpc.Account.LocalLink.CreateApp.Response + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| error | [Rpc.Account.LocalLink.CreateApp.Response.Error](#anytype-Rpc-Account-LocalLink-CreateApp-Response-Error) | | | +| appKey | [string](#string) | | persistent key, that can be used to restore session via CreateSession or for JSON API | + + + + + + + + +### Rpc.Account.LocalLink.CreateApp.Response.Error + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| code | [Rpc.Account.LocalLink.CreateApp.Response.Error.Code](#anytype-Rpc-Account-LocalLink-CreateApp-Response-Error-Code) | | | +| description | [string](#string) | | | + + + + + + + + +### Rpc.Account.LocalLink.ListApps + + + + + + + + + +### Rpc.Account.LocalLink.ListApps.Request + + + + + + + + + +### Rpc.Account.LocalLink.ListApps.Response + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| error | [Rpc.Account.LocalLink.ListApps.Response.Error](#anytype-Rpc-Account-LocalLink-ListApps-Response-Error) | | | +| app | [model.Account.Auth.AppInfo](#anytype-model-Account-Auth-AppInfo) | repeated | | + + + + + + + + +### Rpc.Account.LocalLink.ListApps.Response.Error + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| code | [Rpc.Account.LocalLink.ListApps.Response.Error.Code](#anytype-Rpc-Account-LocalLink-ListApps-Response-Error-Code) | | | +| description | [string](#string) | | | + + + + + + ### Rpc.Account.LocalLink.NewChallenge @@ -3802,6 +3930,62 @@ TODO: Remove this request if we do not need it, GO-1926 + + +### Rpc.Account.LocalLink.RevokeApp + + + + + + + + + +### Rpc.Account.LocalLink.RevokeApp.Request + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| appHash | [string](#string) | | | + + + + + + + + +### Rpc.Account.LocalLink.RevokeApp.Response + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| error | [Rpc.Account.LocalLink.RevokeApp.Response.Error](#anytype-Rpc-Account-LocalLink-RevokeApp-Response-Error) | | | + + + + + + + + +### Rpc.Account.LocalLink.RevokeApp.Response.Error + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| code | [Rpc.Account.LocalLink.RevokeApp.Response.Error.Code](#anytype-Rpc-Account-LocalLink-RevokeApp-Response-Error-Code) | | | +| description | [string](#string) | | | + + + + + + ### Rpc.Account.LocalLink.SolveChallenge @@ -22273,6 +22457,34 @@ Middleware-to-front-end response, that can contain a NULL error or a non-NULL er + + +### Rpc.Account.LocalLink.CreateApp.Response.Error.Code + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| NULL | 0 | | +| UNKNOWN_ERROR | 1 | | +| BAD_INPUT | 2 | | +| ACCOUNT_IS_NOT_RUNNING | 101 | | + + + + + +### Rpc.Account.LocalLink.ListApps.Response.Error.Code + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| NULL | 0 | | +| UNKNOWN_ERROR | 1 | | +| BAD_INPUT | 2 | | +| ACCOUNT_IS_NOT_RUNNING | 101 | | + + + ### Rpc.Account.LocalLink.NewChallenge.Response.Error.Code @@ -22288,6 +22500,21 @@ Middleware-to-front-end response, that can contain a NULL error or a non-NULL er + + +### Rpc.Account.LocalLink.RevokeApp.Response.Error.Code + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| NULL | 0 | | +| UNKNOWN_ERROR | 1 | | +| BAD_INPUT | 2 | | +| NOT_FOUND | 3 | | +| ACCOUNT_IS_NOT_RUNNING | 101 | | + + + ### Rpc.Account.LocalLink.SolveChallenge.Response.Error.Code @@ -30320,6 +30547,27 @@ Contains basic information about a user account + + +### Account.Auth.AppInfo + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| appHash | [string](#string) | | | +| appName | [string](#string) | | just for info, not secure to rely on | +| appPath | [string](#string) | | for now, it is not verified | +| createdAt | [int64](#int64) | | | +| expireAt | [int64](#int64) | | | +| scope | [Account.Auth.LocalApiScope](#anytype-model-Account-Auth-LocalApiScope) | | | +| isActive | [bool](#bool) | | | + + + + + + ### Account.Config diff --git a/pb/commands.pb.go b/pb/commands.pb.go index 665687050..4633a8d5c 100644 --- a/pb/commands.pb.go +++ b/pb/commands.pb.go @@ -1754,6 +1754,102 @@ func (RpcAccountLocalLinkSolveChallengeResponseErrorCode) EnumDescriptor() ([]by return fileDescriptor_8261c968b2e6f45c, []int{0, 3, 16, 1, 1, 0, 0} } +type RpcAccountLocalLinkListAppsResponseErrorCode int32 + +const ( + RpcAccountLocalLinkListAppsResponseError_NULL RpcAccountLocalLinkListAppsResponseErrorCode = 0 + RpcAccountLocalLinkListAppsResponseError_UNKNOWN_ERROR RpcAccountLocalLinkListAppsResponseErrorCode = 1 + RpcAccountLocalLinkListAppsResponseError_BAD_INPUT RpcAccountLocalLinkListAppsResponseErrorCode = 2 + RpcAccountLocalLinkListAppsResponseError_ACCOUNT_IS_NOT_RUNNING RpcAccountLocalLinkListAppsResponseErrorCode = 101 +) + +var RpcAccountLocalLinkListAppsResponseErrorCode_name = map[int32]string{ + 0: "NULL", + 1: "UNKNOWN_ERROR", + 2: "BAD_INPUT", + 101: "ACCOUNT_IS_NOT_RUNNING", +} + +var RpcAccountLocalLinkListAppsResponseErrorCode_value = map[string]int32{ + "NULL": 0, + "UNKNOWN_ERROR": 1, + "BAD_INPUT": 2, + "ACCOUNT_IS_NOT_RUNNING": 101, +} + +func (x RpcAccountLocalLinkListAppsResponseErrorCode) String() string { + return proto.EnumName(RpcAccountLocalLinkListAppsResponseErrorCode_name, int32(x)) +} + +func (RpcAccountLocalLinkListAppsResponseErrorCode) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_8261c968b2e6f45c, []int{0, 3, 16, 2, 1, 0, 0} +} + +type RpcAccountLocalLinkCreateAppResponseErrorCode int32 + +const ( + RpcAccountLocalLinkCreateAppResponseError_NULL RpcAccountLocalLinkCreateAppResponseErrorCode = 0 + RpcAccountLocalLinkCreateAppResponseError_UNKNOWN_ERROR RpcAccountLocalLinkCreateAppResponseErrorCode = 1 + RpcAccountLocalLinkCreateAppResponseError_BAD_INPUT RpcAccountLocalLinkCreateAppResponseErrorCode = 2 + RpcAccountLocalLinkCreateAppResponseError_ACCOUNT_IS_NOT_RUNNING RpcAccountLocalLinkCreateAppResponseErrorCode = 101 +) + +var RpcAccountLocalLinkCreateAppResponseErrorCode_name = map[int32]string{ + 0: "NULL", + 1: "UNKNOWN_ERROR", + 2: "BAD_INPUT", + 101: "ACCOUNT_IS_NOT_RUNNING", +} + +var RpcAccountLocalLinkCreateAppResponseErrorCode_value = map[string]int32{ + "NULL": 0, + "UNKNOWN_ERROR": 1, + "BAD_INPUT": 2, + "ACCOUNT_IS_NOT_RUNNING": 101, +} + +func (x RpcAccountLocalLinkCreateAppResponseErrorCode) String() string { + return proto.EnumName(RpcAccountLocalLinkCreateAppResponseErrorCode_name, int32(x)) +} + +func (RpcAccountLocalLinkCreateAppResponseErrorCode) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_8261c968b2e6f45c, []int{0, 3, 16, 3, 1, 0, 0} +} + +type RpcAccountLocalLinkRevokeAppResponseErrorCode int32 + +const ( + RpcAccountLocalLinkRevokeAppResponseError_NULL RpcAccountLocalLinkRevokeAppResponseErrorCode = 0 + RpcAccountLocalLinkRevokeAppResponseError_UNKNOWN_ERROR RpcAccountLocalLinkRevokeAppResponseErrorCode = 1 + RpcAccountLocalLinkRevokeAppResponseError_BAD_INPUT RpcAccountLocalLinkRevokeAppResponseErrorCode = 2 + RpcAccountLocalLinkRevokeAppResponseError_NOT_FOUND RpcAccountLocalLinkRevokeAppResponseErrorCode = 3 + RpcAccountLocalLinkRevokeAppResponseError_ACCOUNT_IS_NOT_RUNNING RpcAccountLocalLinkRevokeAppResponseErrorCode = 101 +) + +var RpcAccountLocalLinkRevokeAppResponseErrorCode_name = map[int32]string{ + 0: "NULL", + 1: "UNKNOWN_ERROR", + 2: "BAD_INPUT", + 3: "NOT_FOUND", + 101: "ACCOUNT_IS_NOT_RUNNING", +} + +var RpcAccountLocalLinkRevokeAppResponseErrorCode_value = map[string]int32{ + "NULL": 0, + "UNKNOWN_ERROR": 1, + "BAD_INPUT": 2, + "NOT_FOUND": 3, + "ACCOUNT_IS_NOT_RUNNING": 101, +} + +func (x RpcAccountLocalLinkRevokeAppResponseErrorCode) String() string { + return proto.EnumName(RpcAccountLocalLinkRevokeAppResponseErrorCode_name, int32(x)) +} + +func (RpcAccountLocalLinkRevokeAppResponseErrorCode) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_8261c968b2e6f45c, []int{0, 3, 16, 4, 1, 0, 0} +} + type RpcWorkspaceGetCurrentResponseErrorCode int32 const ( @@ -18413,6 +18509,552 @@ func (m *RpcAccountLocalLinkSolveChallengeResponseError) GetDescription() string return "" } +type RpcAccountLocalLinkListApps struct { +} + +func (m *RpcAccountLocalLinkListApps) Reset() { *m = RpcAccountLocalLinkListApps{} } +func (m *RpcAccountLocalLinkListApps) String() string { return proto.CompactTextString(m) } +func (*RpcAccountLocalLinkListApps) ProtoMessage() {} +func (*RpcAccountLocalLinkListApps) Descriptor() ([]byte, []int) { + return fileDescriptor_8261c968b2e6f45c, []int{0, 3, 16, 2} +} +func (m *RpcAccountLocalLinkListApps) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RpcAccountLocalLinkListApps) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RpcAccountLocalLinkListApps.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RpcAccountLocalLinkListApps) XXX_Merge(src proto.Message) { + xxx_messageInfo_RpcAccountLocalLinkListApps.Merge(m, src) +} +func (m *RpcAccountLocalLinkListApps) XXX_Size() int { + return m.Size() +} +func (m *RpcAccountLocalLinkListApps) XXX_DiscardUnknown() { + xxx_messageInfo_RpcAccountLocalLinkListApps.DiscardUnknown(m) +} + +var xxx_messageInfo_RpcAccountLocalLinkListApps proto.InternalMessageInfo + +type RpcAccountLocalLinkListAppsRequest struct { +} + +func (m *RpcAccountLocalLinkListAppsRequest) Reset() { *m = RpcAccountLocalLinkListAppsRequest{} } +func (m *RpcAccountLocalLinkListAppsRequest) String() string { return proto.CompactTextString(m) } +func (*RpcAccountLocalLinkListAppsRequest) ProtoMessage() {} +func (*RpcAccountLocalLinkListAppsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_8261c968b2e6f45c, []int{0, 3, 16, 2, 0} +} +func (m *RpcAccountLocalLinkListAppsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RpcAccountLocalLinkListAppsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RpcAccountLocalLinkListAppsRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RpcAccountLocalLinkListAppsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_RpcAccountLocalLinkListAppsRequest.Merge(m, src) +} +func (m *RpcAccountLocalLinkListAppsRequest) XXX_Size() int { + return m.Size() +} +func (m *RpcAccountLocalLinkListAppsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_RpcAccountLocalLinkListAppsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_RpcAccountLocalLinkListAppsRequest proto.InternalMessageInfo + +type RpcAccountLocalLinkListAppsResponse struct { + Error *RpcAccountLocalLinkListAppsResponseError `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` + App []*model.AccountAuthAppInfo `protobuf:"bytes,2,rep,name=app,proto3" json:"app,omitempty"` +} + +func (m *RpcAccountLocalLinkListAppsResponse) Reset() { *m = RpcAccountLocalLinkListAppsResponse{} } +func (m *RpcAccountLocalLinkListAppsResponse) String() string { return proto.CompactTextString(m) } +func (*RpcAccountLocalLinkListAppsResponse) ProtoMessage() {} +func (*RpcAccountLocalLinkListAppsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_8261c968b2e6f45c, []int{0, 3, 16, 2, 1} +} +func (m *RpcAccountLocalLinkListAppsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RpcAccountLocalLinkListAppsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RpcAccountLocalLinkListAppsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RpcAccountLocalLinkListAppsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_RpcAccountLocalLinkListAppsResponse.Merge(m, src) +} +func (m *RpcAccountLocalLinkListAppsResponse) XXX_Size() int { + return m.Size() +} +func (m *RpcAccountLocalLinkListAppsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_RpcAccountLocalLinkListAppsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_RpcAccountLocalLinkListAppsResponse proto.InternalMessageInfo + +func (m *RpcAccountLocalLinkListAppsResponse) GetError() *RpcAccountLocalLinkListAppsResponseError { + if m != nil { + return m.Error + } + return nil +} + +func (m *RpcAccountLocalLinkListAppsResponse) GetApp() []*model.AccountAuthAppInfo { + if m != nil { + return m.App + } + return nil +} + +type RpcAccountLocalLinkListAppsResponseError struct { + Code RpcAccountLocalLinkListAppsResponseErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=anytype.RpcAccountLocalLinkListAppsResponseErrorCode" json:"code,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` +} + +func (m *RpcAccountLocalLinkListAppsResponseError) Reset() { + *m = RpcAccountLocalLinkListAppsResponseError{} +} +func (m *RpcAccountLocalLinkListAppsResponseError) String() string { return proto.CompactTextString(m) } +func (*RpcAccountLocalLinkListAppsResponseError) ProtoMessage() {} +func (*RpcAccountLocalLinkListAppsResponseError) Descriptor() ([]byte, []int) { + return fileDescriptor_8261c968b2e6f45c, []int{0, 3, 16, 2, 1, 0} +} +func (m *RpcAccountLocalLinkListAppsResponseError) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RpcAccountLocalLinkListAppsResponseError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RpcAccountLocalLinkListAppsResponseError.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RpcAccountLocalLinkListAppsResponseError) XXX_Merge(src proto.Message) { + xxx_messageInfo_RpcAccountLocalLinkListAppsResponseError.Merge(m, src) +} +func (m *RpcAccountLocalLinkListAppsResponseError) XXX_Size() int { + return m.Size() +} +func (m *RpcAccountLocalLinkListAppsResponseError) XXX_DiscardUnknown() { + xxx_messageInfo_RpcAccountLocalLinkListAppsResponseError.DiscardUnknown(m) +} + +var xxx_messageInfo_RpcAccountLocalLinkListAppsResponseError proto.InternalMessageInfo + +func (m *RpcAccountLocalLinkListAppsResponseError) GetCode() RpcAccountLocalLinkListAppsResponseErrorCode { + if m != nil { + return m.Code + } + return RpcAccountLocalLinkListAppsResponseError_NULL +} + +func (m *RpcAccountLocalLinkListAppsResponseError) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +type RpcAccountLocalLinkCreateApp struct { +} + +func (m *RpcAccountLocalLinkCreateApp) Reset() { *m = RpcAccountLocalLinkCreateApp{} } +func (m *RpcAccountLocalLinkCreateApp) String() string { return proto.CompactTextString(m) } +func (*RpcAccountLocalLinkCreateApp) ProtoMessage() {} +func (*RpcAccountLocalLinkCreateApp) Descriptor() ([]byte, []int) { + return fileDescriptor_8261c968b2e6f45c, []int{0, 3, 16, 3} +} +func (m *RpcAccountLocalLinkCreateApp) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RpcAccountLocalLinkCreateApp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RpcAccountLocalLinkCreateApp.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RpcAccountLocalLinkCreateApp) XXX_Merge(src proto.Message) { + xxx_messageInfo_RpcAccountLocalLinkCreateApp.Merge(m, src) +} +func (m *RpcAccountLocalLinkCreateApp) XXX_Size() int { + return m.Size() +} +func (m *RpcAccountLocalLinkCreateApp) XXX_DiscardUnknown() { + xxx_messageInfo_RpcAccountLocalLinkCreateApp.DiscardUnknown(m) +} + +var xxx_messageInfo_RpcAccountLocalLinkCreateApp proto.InternalMessageInfo + +type RpcAccountLocalLinkCreateAppRequest struct { + App *model.AccountAuthAppInfo `protobuf:"bytes,1,opt,name=app,proto3" json:"app,omitempty"` +} + +func (m *RpcAccountLocalLinkCreateAppRequest) Reset() { *m = RpcAccountLocalLinkCreateAppRequest{} } +func (m *RpcAccountLocalLinkCreateAppRequest) String() string { return proto.CompactTextString(m) } +func (*RpcAccountLocalLinkCreateAppRequest) ProtoMessage() {} +func (*RpcAccountLocalLinkCreateAppRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_8261c968b2e6f45c, []int{0, 3, 16, 3, 0} +} +func (m *RpcAccountLocalLinkCreateAppRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RpcAccountLocalLinkCreateAppRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RpcAccountLocalLinkCreateAppRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RpcAccountLocalLinkCreateAppRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_RpcAccountLocalLinkCreateAppRequest.Merge(m, src) +} +func (m *RpcAccountLocalLinkCreateAppRequest) XXX_Size() int { + return m.Size() +} +func (m *RpcAccountLocalLinkCreateAppRequest) XXX_DiscardUnknown() { + xxx_messageInfo_RpcAccountLocalLinkCreateAppRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_RpcAccountLocalLinkCreateAppRequest proto.InternalMessageInfo + +func (m *RpcAccountLocalLinkCreateAppRequest) GetApp() *model.AccountAuthAppInfo { + if m != nil { + return m.App + } + return nil +} + +type RpcAccountLocalLinkCreateAppResponse struct { + Error *RpcAccountLocalLinkCreateAppResponseError `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` + AppKey string `protobuf:"bytes,2,opt,name=appKey,proto3" json:"appKey,omitempty"` +} + +func (m *RpcAccountLocalLinkCreateAppResponse) Reset() { *m = RpcAccountLocalLinkCreateAppResponse{} } +func (m *RpcAccountLocalLinkCreateAppResponse) String() string { return proto.CompactTextString(m) } +func (*RpcAccountLocalLinkCreateAppResponse) ProtoMessage() {} +func (*RpcAccountLocalLinkCreateAppResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_8261c968b2e6f45c, []int{0, 3, 16, 3, 1} +} +func (m *RpcAccountLocalLinkCreateAppResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RpcAccountLocalLinkCreateAppResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RpcAccountLocalLinkCreateAppResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RpcAccountLocalLinkCreateAppResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_RpcAccountLocalLinkCreateAppResponse.Merge(m, src) +} +func (m *RpcAccountLocalLinkCreateAppResponse) XXX_Size() int { + return m.Size() +} +func (m *RpcAccountLocalLinkCreateAppResponse) XXX_DiscardUnknown() { + xxx_messageInfo_RpcAccountLocalLinkCreateAppResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_RpcAccountLocalLinkCreateAppResponse proto.InternalMessageInfo + +func (m *RpcAccountLocalLinkCreateAppResponse) GetError() *RpcAccountLocalLinkCreateAppResponseError { + if m != nil { + return m.Error + } + return nil +} + +func (m *RpcAccountLocalLinkCreateAppResponse) GetAppKey() string { + if m != nil { + return m.AppKey + } + return "" +} + +type RpcAccountLocalLinkCreateAppResponseError struct { + Code RpcAccountLocalLinkCreateAppResponseErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=anytype.RpcAccountLocalLinkCreateAppResponseErrorCode" json:"code,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` +} + +func (m *RpcAccountLocalLinkCreateAppResponseError) Reset() { + *m = RpcAccountLocalLinkCreateAppResponseError{} +} +func (m *RpcAccountLocalLinkCreateAppResponseError) String() string { + return proto.CompactTextString(m) +} +func (*RpcAccountLocalLinkCreateAppResponseError) ProtoMessage() {} +func (*RpcAccountLocalLinkCreateAppResponseError) Descriptor() ([]byte, []int) { + return fileDescriptor_8261c968b2e6f45c, []int{0, 3, 16, 3, 1, 0} +} +func (m *RpcAccountLocalLinkCreateAppResponseError) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RpcAccountLocalLinkCreateAppResponseError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RpcAccountLocalLinkCreateAppResponseError.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RpcAccountLocalLinkCreateAppResponseError) XXX_Merge(src proto.Message) { + xxx_messageInfo_RpcAccountLocalLinkCreateAppResponseError.Merge(m, src) +} +func (m *RpcAccountLocalLinkCreateAppResponseError) XXX_Size() int { + return m.Size() +} +func (m *RpcAccountLocalLinkCreateAppResponseError) XXX_DiscardUnknown() { + xxx_messageInfo_RpcAccountLocalLinkCreateAppResponseError.DiscardUnknown(m) +} + +var xxx_messageInfo_RpcAccountLocalLinkCreateAppResponseError proto.InternalMessageInfo + +func (m *RpcAccountLocalLinkCreateAppResponseError) GetCode() RpcAccountLocalLinkCreateAppResponseErrorCode { + if m != nil { + return m.Code + } + return RpcAccountLocalLinkCreateAppResponseError_NULL +} + +func (m *RpcAccountLocalLinkCreateAppResponseError) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +type RpcAccountLocalLinkRevokeApp struct { +} + +func (m *RpcAccountLocalLinkRevokeApp) Reset() { *m = RpcAccountLocalLinkRevokeApp{} } +func (m *RpcAccountLocalLinkRevokeApp) String() string { return proto.CompactTextString(m) } +func (*RpcAccountLocalLinkRevokeApp) ProtoMessage() {} +func (*RpcAccountLocalLinkRevokeApp) Descriptor() ([]byte, []int) { + return fileDescriptor_8261c968b2e6f45c, []int{0, 3, 16, 4} +} +func (m *RpcAccountLocalLinkRevokeApp) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RpcAccountLocalLinkRevokeApp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RpcAccountLocalLinkRevokeApp.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RpcAccountLocalLinkRevokeApp) XXX_Merge(src proto.Message) { + xxx_messageInfo_RpcAccountLocalLinkRevokeApp.Merge(m, src) +} +func (m *RpcAccountLocalLinkRevokeApp) XXX_Size() int { + return m.Size() +} +func (m *RpcAccountLocalLinkRevokeApp) XXX_DiscardUnknown() { + xxx_messageInfo_RpcAccountLocalLinkRevokeApp.DiscardUnknown(m) +} + +var xxx_messageInfo_RpcAccountLocalLinkRevokeApp proto.InternalMessageInfo + +type RpcAccountLocalLinkRevokeAppRequest struct { + AppHash string `protobuf:"bytes,1,opt,name=appHash,proto3" json:"appHash,omitempty"` +} + +func (m *RpcAccountLocalLinkRevokeAppRequest) Reset() { *m = RpcAccountLocalLinkRevokeAppRequest{} } +func (m *RpcAccountLocalLinkRevokeAppRequest) String() string { return proto.CompactTextString(m) } +func (*RpcAccountLocalLinkRevokeAppRequest) ProtoMessage() {} +func (*RpcAccountLocalLinkRevokeAppRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_8261c968b2e6f45c, []int{0, 3, 16, 4, 0} +} +func (m *RpcAccountLocalLinkRevokeAppRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RpcAccountLocalLinkRevokeAppRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RpcAccountLocalLinkRevokeAppRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RpcAccountLocalLinkRevokeAppRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_RpcAccountLocalLinkRevokeAppRequest.Merge(m, src) +} +func (m *RpcAccountLocalLinkRevokeAppRequest) XXX_Size() int { + return m.Size() +} +func (m *RpcAccountLocalLinkRevokeAppRequest) XXX_DiscardUnknown() { + xxx_messageInfo_RpcAccountLocalLinkRevokeAppRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_RpcAccountLocalLinkRevokeAppRequest proto.InternalMessageInfo + +func (m *RpcAccountLocalLinkRevokeAppRequest) GetAppHash() string { + if m != nil { + return m.AppHash + } + return "" +} + +type RpcAccountLocalLinkRevokeAppResponse struct { + Error *RpcAccountLocalLinkRevokeAppResponseError `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` +} + +func (m *RpcAccountLocalLinkRevokeAppResponse) Reset() { *m = RpcAccountLocalLinkRevokeAppResponse{} } +func (m *RpcAccountLocalLinkRevokeAppResponse) String() string { return proto.CompactTextString(m) } +func (*RpcAccountLocalLinkRevokeAppResponse) ProtoMessage() {} +func (*RpcAccountLocalLinkRevokeAppResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_8261c968b2e6f45c, []int{0, 3, 16, 4, 1} +} +func (m *RpcAccountLocalLinkRevokeAppResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RpcAccountLocalLinkRevokeAppResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RpcAccountLocalLinkRevokeAppResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RpcAccountLocalLinkRevokeAppResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_RpcAccountLocalLinkRevokeAppResponse.Merge(m, src) +} +func (m *RpcAccountLocalLinkRevokeAppResponse) XXX_Size() int { + return m.Size() +} +func (m *RpcAccountLocalLinkRevokeAppResponse) XXX_DiscardUnknown() { + xxx_messageInfo_RpcAccountLocalLinkRevokeAppResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_RpcAccountLocalLinkRevokeAppResponse proto.InternalMessageInfo + +func (m *RpcAccountLocalLinkRevokeAppResponse) GetError() *RpcAccountLocalLinkRevokeAppResponseError { + if m != nil { + return m.Error + } + return nil +} + +type RpcAccountLocalLinkRevokeAppResponseError struct { + Code RpcAccountLocalLinkRevokeAppResponseErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=anytype.RpcAccountLocalLinkRevokeAppResponseErrorCode" json:"code,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` +} + +func (m *RpcAccountLocalLinkRevokeAppResponseError) Reset() { + *m = RpcAccountLocalLinkRevokeAppResponseError{} +} +func (m *RpcAccountLocalLinkRevokeAppResponseError) String() string { + return proto.CompactTextString(m) +} +func (*RpcAccountLocalLinkRevokeAppResponseError) ProtoMessage() {} +func (*RpcAccountLocalLinkRevokeAppResponseError) Descriptor() ([]byte, []int) { + return fileDescriptor_8261c968b2e6f45c, []int{0, 3, 16, 4, 1, 0} +} +func (m *RpcAccountLocalLinkRevokeAppResponseError) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RpcAccountLocalLinkRevokeAppResponseError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RpcAccountLocalLinkRevokeAppResponseError.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RpcAccountLocalLinkRevokeAppResponseError) XXX_Merge(src proto.Message) { + xxx_messageInfo_RpcAccountLocalLinkRevokeAppResponseError.Merge(m, src) +} +func (m *RpcAccountLocalLinkRevokeAppResponseError) XXX_Size() int { + return m.Size() +} +func (m *RpcAccountLocalLinkRevokeAppResponseError) XXX_DiscardUnknown() { + xxx_messageInfo_RpcAccountLocalLinkRevokeAppResponseError.DiscardUnknown(m) +} + +var xxx_messageInfo_RpcAccountLocalLinkRevokeAppResponseError proto.InternalMessageInfo + +func (m *RpcAccountLocalLinkRevokeAppResponseError) GetCode() RpcAccountLocalLinkRevokeAppResponseErrorCode { + if m != nil { + return m.Code + } + return RpcAccountLocalLinkRevokeAppResponseError_NULL +} + +func (m *RpcAccountLocalLinkRevokeAppResponseError) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + type RpcWorkspace struct { } @@ -75625,6 +76267,9 @@ func init() { proto.RegisterEnum("anytype.RpcAccountChangeNetworkConfigAndRestartResponseErrorCode", RpcAccountChangeNetworkConfigAndRestartResponseErrorCode_name, RpcAccountChangeNetworkConfigAndRestartResponseErrorCode_value) proto.RegisterEnum("anytype.RpcAccountLocalLinkNewChallengeResponseErrorCode", RpcAccountLocalLinkNewChallengeResponseErrorCode_name, RpcAccountLocalLinkNewChallengeResponseErrorCode_value) proto.RegisterEnum("anytype.RpcAccountLocalLinkSolveChallengeResponseErrorCode", RpcAccountLocalLinkSolveChallengeResponseErrorCode_name, RpcAccountLocalLinkSolveChallengeResponseErrorCode_value) + proto.RegisterEnum("anytype.RpcAccountLocalLinkListAppsResponseErrorCode", RpcAccountLocalLinkListAppsResponseErrorCode_name, RpcAccountLocalLinkListAppsResponseErrorCode_value) + proto.RegisterEnum("anytype.RpcAccountLocalLinkCreateAppResponseErrorCode", RpcAccountLocalLinkCreateAppResponseErrorCode_name, RpcAccountLocalLinkCreateAppResponseErrorCode_value) + proto.RegisterEnum("anytype.RpcAccountLocalLinkRevokeAppResponseErrorCode", RpcAccountLocalLinkRevokeAppResponseErrorCode_name, RpcAccountLocalLinkRevokeAppResponseErrorCode_value) proto.RegisterEnum("anytype.RpcWorkspaceGetCurrentResponseErrorCode", RpcWorkspaceGetCurrentResponseErrorCode_name, RpcWorkspaceGetCurrentResponseErrorCode_value) proto.RegisterEnum("anytype.RpcWorkspaceGetAllResponseErrorCode", RpcWorkspaceGetAllResponseErrorCode_name, RpcWorkspaceGetAllResponseErrorCode_value) proto.RegisterEnum("anytype.RpcWorkspaceCreateResponseErrorCode", RpcWorkspaceCreateResponseErrorCode_name, RpcWorkspaceCreateResponseErrorCode_value) @@ -76079,6 +76724,18 @@ func init() { proto.RegisterType((*RpcAccountLocalLinkSolveChallengeRequest)(nil), "anytype.Rpc.Account.LocalLink.SolveChallenge.Request") proto.RegisterType((*RpcAccountLocalLinkSolveChallengeResponse)(nil), "anytype.Rpc.Account.LocalLink.SolveChallenge.Response") proto.RegisterType((*RpcAccountLocalLinkSolveChallengeResponseError)(nil), "anytype.Rpc.Account.LocalLink.SolveChallenge.Response.Error") + proto.RegisterType((*RpcAccountLocalLinkListApps)(nil), "anytype.Rpc.Account.LocalLink.ListApps") + proto.RegisterType((*RpcAccountLocalLinkListAppsRequest)(nil), "anytype.Rpc.Account.LocalLink.ListApps.Request") + proto.RegisterType((*RpcAccountLocalLinkListAppsResponse)(nil), "anytype.Rpc.Account.LocalLink.ListApps.Response") + proto.RegisterType((*RpcAccountLocalLinkListAppsResponseError)(nil), "anytype.Rpc.Account.LocalLink.ListApps.Response.Error") + proto.RegisterType((*RpcAccountLocalLinkCreateApp)(nil), "anytype.Rpc.Account.LocalLink.CreateApp") + proto.RegisterType((*RpcAccountLocalLinkCreateAppRequest)(nil), "anytype.Rpc.Account.LocalLink.CreateApp.Request") + proto.RegisterType((*RpcAccountLocalLinkCreateAppResponse)(nil), "anytype.Rpc.Account.LocalLink.CreateApp.Response") + proto.RegisterType((*RpcAccountLocalLinkCreateAppResponseError)(nil), "anytype.Rpc.Account.LocalLink.CreateApp.Response.Error") + proto.RegisterType((*RpcAccountLocalLinkRevokeApp)(nil), "anytype.Rpc.Account.LocalLink.RevokeApp") + proto.RegisterType((*RpcAccountLocalLinkRevokeAppRequest)(nil), "anytype.Rpc.Account.LocalLink.RevokeApp.Request") + proto.RegisterType((*RpcAccountLocalLinkRevokeAppResponse)(nil), "anytype.Rpc.Account.LocalLink.RevokeApp.Response") + proto.RegisterType((*RpcAccountLocalLinkRevokeAppResponseError)(nil), "anytype.Rpc.Account.LocalLink.RevokeApp.Response.Error") proto.RegisterType((*RpcWorkspace)(nil), "anytype.Rpc.Workspace") proto.RegisterType((*RpcWorkspaceGetCurrent)(nil), "anytype.Rpc.Workspace.GetCurrent") proto.RegisterType((*RpcWorkspaceGetCurrentRequest)(nil), "anytype.Rpc.Workspace.GetCurrent.Request") @@ -77216,1371 +77873,1380 @@ func init() { func init() { proto.RegisterFile("pb/protos/commands.proto", fileDescriptor_8261c968b2e6f45c) } var fileDescriptor_8261c968b2e6f45c = []byte{ - // 21809 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7b, 0x98, 0x24, 0x49, - 0x59, 0x2f, 0x3c, 0x95, 0x59, 0x55, 0x5d, 0x1d, 0x7d, 0x99, 0x9c, 0xdc, 0xd9, 0x61, 0x36, 0x59, - 0x86, 0x65, 0x58, 0x96, 0x75, 0x59, 0x7a, 0x61, 0x41, 0x64, 0x97, 0x5d, 0x96, 0xea, 0xaa, 0xec, - 0xee, 0xda, 0xad, 0xae, 0x6a, 0xb2, 0xaa, 0x67, 0x58, 0xcf, 0xe1, 0xeb, 0x93, 0x53, 0x15, 0xdd, - 0x9d, 0x3b, 0xd5, 0x99, 0x45, 0x66, 0xf6, 0xcc, 0x0e, 0xdf, 0x73, 0xbe, 0x23, 0x07, 0x11, 0x10, - 0x11, 0x51, 0x11, 0x11, 0xb9, 0x0b, 0x08, 0xc8, 0xfd, 0x26, 0x20, 0x17, 0xb9, 0x08, 0x22, 0x2a, - 0x8a, 0xca, 0x45, 0x79, 0x04, 0xf1, 0x82, 0xe7, 0x1c, 0xf5, 0xe0, 0xa7, 0x20, 0x2a, 0xc7, 0xef, - 0x89, 0x4b, 0x66, 0x46, 0x54, 0x57, 0x66, 0x45, 0x56, 0x57, 0x56, 0x2f, 0xfa, 0xfd, 0x55, 0x95, - 0x91, 0x91, 0x6f, 0xbc, 0xf1, 0xfe, 0xde, 0x88, 0x78, 0x23, 0xe2, 0x8d, 0x37, 0xc0, 0xe9, 0xfe, - 0x85, 0x5b, 0xfa, 0xae, 0xe3, 0x3b, 0xde, 0x2d, 0x1d, 0x67, 0x6f, 0xcf, 0xb4, 0xbb, 0xde, 0x12, - 0x7e, 0x56, 0x67, 0x4c, 0xfb, 0x8a, 0x7f, 0xa5, 0x0f, 0xb5, 0xeb, 0xfb, 0x17, 0x77, 0x6e, 0xe9, - 0x59, 0x17, 0x6e, 0xe9, 0x5f, 0xb8, 0x65, 0xcf, 0xe9, 0xc2, 0x5e, 0xf0, 0x01, 0x7e, 0xa0, 0xd9, - 0xb5, 0x1b, 0xe3, 0x72, 0xf5, 0x9c, 0x8e, 0xd9, 0xf3, 0x7c, 0xc7, 0x85, 0x34, 0xe7, 0xa9, 0xa8, - 0x48, 0x78, 0x09, 0xda, 0x7e, 0x40, 0xe1, 0xda, 0x1d, 0xc7, 0xd9, 0xe9, 0x41, 0xf2, 0xee, 0xc2, - 0xfe, 0xf6, 0x2d, 0x9e, 0xef, 0xee, 0x77, 0x7c, 0xfa, 0xf6, 0xba, 0xc1, 0xb7, 0x5d, 0xe8, 0x75, - 0x5c, 0xab, 0xef, 0x3b, 0x2e, 0xc9, 0x71, 0xf6, 0x0d, 0xdf, 0x28, 0x01, 0xd9, 0xe8, 0x77, 0xb4, - 0x6f, 0xcf, 0x00, 0xb9, 0xdc, 0xef, 0x6b, 0x9f, 0x92, 0x00, 0x58, 0x85, 0xfe, 0x39, 0xe8, 0x7a, - 0x96, 0x63, 0x6b, 0xc7, 0xc1, 0x8c, 0x01, 0x9f, 0xb1, 0x0f, 0x3d, 0xff, 0xf6, 0xfc, 0xf3, 0xfe, - 0x52, 0xce, 0x69, 0xaf, 0x97, 0x40, 0xc9, 0x80, 0x5e, 0xdf, 0xb1, 0x3d, 0xa8, 0x3e, 0x05, 0x14, - 0xa0, 0xeb, 0x3a, 0xee, 0xe9, 0xdc, 0x75, 0xb9, 0x1b, 0xe7, 0x6e, 0xbd, 0x69, 0x89, 0x56, 0x7f, - 0xc9, 0xe8, 0x77, 0x96, 0xca, 0xfd, 0xfe, 0x52, 0x44, 0x69, 0x29, 0xf8, 0x68, 0x49, 0x47, 0x5f, - 0x18, 0xe4, 0x43, 0xf5, 0x34, 0x98, 0xb9, 0x44, 0x32, 0x9c, 0x96, 0xae, 0xcb, 0xdd, 0x38, 0x6b, - 0x04, 0x8f, 0xe8, 0x4d, 0x17, 0xfa, 0xa6, 0xd5, 0xf3, 0x4e, 0xcb, 0xe4, 0x0d, 0x7d, 0xd4, 0x5e, - 0x9b, 0x03, 0x05, 0x4c, 0x44, 0xad, 0x80, 0x7c, 0xc7, 0xe9, 0x42, 0x5c, 0xfc, 0xe2, 0xad, 0xb7, - 0x88, 0x17, 0xbf, 0x54, 0x71, 0xba, 0xd0, 0xc0, 0x1f, 0xab, 0xd7, 0x81, 0xb9, 0x40, 0x2c, 0x11, - 0x1b, 0x6c, 0xd2, 0xd9, 0x5b, 0x41, 0x1e, 0xe5, 0x57, 0x4b, 0x20, 0xdf, 0xd8, 0xac, 0xd7, 0x95, - 0x63, 0xea, 0x09, 0xb0, 0xb0, 0xd9, 0xb8, 0xa7, 0xd1, 0x3c, 0xdf, 0xd8, 0xd2, 0x0d, 0xa3, 0x69, - 0x28, 0x39, 0x75, 0x01, 0xcc, 0x2e, 0x97, 0xab, 0x5b, 0xb5, 0xc6, 0xc6, 0x66, 0x5b, 0x91, 0xb4, - 0x57, 0xca, 0x60, 0xb1, 0x05, 0xfd, 0x2a, 0xbc, 0x64, 0x75, 0x60, 0xcb, 0x37, 0x7d, 0xa8, 0xbd, - 0x28, 0x17, 0x0a, 0x53, 0xdd, 0x44, 0x85, 0x86, 0xaf, 0x68, 0x05, 0x1e, 0x77, 0xa0, 0x02, 0x3c, - 0x85, 0x25, 0xfa, 0xf5, 0x12, 0x93, 0x66, 0xb0, 0x74, 0xce, 0x3e, 0x1a, 0xcc, 0x31, 0xef, 0xd4, - 0x45, 0x00, 0x96, 0xcb, 0x95, 0x7b, 0x56, 0x8d, 0xe6, 0x66, 0xa3, 0xaa, 0x1c, 0x43, 0xcf, 0x2b, - 0x4d, 0x43, 0xa7, 0xcf, 0x39, 0xed, 0xbb, 0x39, 0x06, 0xcc, 0x2a, 0x0f, 0xe6, 0xd2, 0x68, 0x66, - 0x86, 0x00, 0xaa, 0xbd, 0x21, 0x04, 0x67, 0x95, 0x03, 0xe7, 0x71, 0xe9, 0xc8, 0x65, 0x0f, 0xd0, - 0x73, 0x24, 0x50, 0x6a, 0xed, 0xee, 0xfb, 0x5d, 0xe7, 0xb2, 0xad, 0xcd, 0x86, 0xc8, 0x68, 0x7f, - 0xc3, 0xca, 0xe4, 0xc9, 0xbc, 0x4c, 0x6e, 0x3c, 0x58, 0x09, 0x4a, 0x21, 0x46, 0x1a, 0xaf, 0x0e, - 0xa5, 0x51, 0xe6, 0xa4, 0xf1, 0x68, 0x51, 0x42, 0xd9, 0xcb, 0xe1, 0x4b, 0x77, 0x80, 0x42, 0xab, - 0x6f, 0x76, 0xa0, 0xf6, 0x39, 0x19, 0xcc, 0xd7, 0xa1, 0x79, 0x09, 0x96, 0xfb, 0x7d, 0xd7, 0xb9, - 0x04, 0xb5, 0x4a, 0xa4, 0xaf, 0xa7, 0xc1, 0x8c, 0x87, 0x32, 0xd5, 0xba, 0xb8, 0x06, 0xb3, 0x46, - 0xf0, 0xa8, 0x9e, 0x01, 0xc0, 0xea, 0x42, 0xdb, 0xb7, 0x7c, 0x0b, 0x7a, 0xa7, 0xa5, 0xeb, 0xe4, - 0x1b, 0x67, 0x0d, 0x26, 0x45, 0xfb, 0xb6, 0x24, 0xaa, 0x63, 0x98, 0x8b, 0x25, 0x96, 0x83, 0x18, - 0xa9, 0xbe, 0x4e, 0x12, 0xd1, 0xb1, 0x91, 0xe4, 0xd2, 0xc9, 0xf6, 0x6d, 0xb9, 0xf4, 0xc2, 0x45, - 0x39, 0x1a, 0xcd, 0xad, 0xd6, 0x66, 0x65, 0x6d, 0xab, 0xb5, 0x51, 0xae, 0xe8, 0x0a, 0x54, 0x4f, - 0x02, 0x05, 0xff, 0xdd, 0xaa, 0xb5, 0xb6, 0xaa, 0x7a, 0x5d, 0x6f, 0xeb, 0x55, 0x65, 0x5b, 0x55, - 0xc1, 0xa2, 0xa1, 0x3f, 0x75, 0x53, 0x6f, 0xb5, 0xb7, 0x56, 0xca, 0xb5, 0xba, 0x5e, 0x55, 0x76, - 0xd0, 0xc7, 0xf5, 0xda, 0x7a, 0xad, 0xbd, 0x65, 0xe8, 0xe5, 0xca, 0x9a, 0x5e, 0x55, 0x76, 0xd5, - 0x07, 0x81, 0xab, 0x1a, 0xcd, 0xad, 0xf2, 0xc6, 0x86, 0xd1, 0x3c, 0xa7, 0x6f, 0xd1, 0x2f, 0x5a, - 0x8a, 0x45, 0x0a, 0x6a, 0x6f, 0xb5, 0xd6, 0xca, 0x86, 0x5e, 0x5e, 0xae, 0xeb, 0xca, 0x7d, 0xda, - 0xb3, 0x65, 0xb0, 0xb0, 0x6e, 0x5e, 0x84, 0xad, 0x5d, 0xd3, 0x85, 0xe6, 0x85, 0x1e, 0xd4, 0x1e, - 0x2e, 0x80, 0xa7, 0xf6, 0x39, 0x16, 0x2f, 0x9d, 0xc7, 0xeb, 0x96, 0x21, 0x02, 0xe6, 0x8a, 0x88, - 0x01, 0xec, 0x9f, 0xc2, 0x66, 0xb0, 0xc6, 0x01, 0xf6, 0xf8, 0x94, 0xf4, 0xd2, 0x21, 0xf6, 0xdf, - 0x1f, 0x00, 0x88, 0x69, 0x5f, 0xce, 0x83, 0xc5, 0x9a, 0x7d, 0xc9, 0xf2, 0xe1, 0x2a, 0xb4, 0xa1, - 0x8b, 0xc6, 0x81, 0x57, 0xe6, 0x44, 0xda, 0x55, 0x1b, 0x00, 0x0b, 0x7f, 0xd7, 0xbe, 0xd2, 0x87, - 0xb8, 0x7a, 0xc3, 0xe5, 0xc5, 0x13, 0x0f, 0x87, 0x88, 0x5a, 0xf8, 0xad, 0xc1, 0xd0, 0x39, 0xfb, - 0x70, 0x00, 0xa2, 0x37, 0x2a, 0x00, 0xc5, 0x75, 0xb8, 0x77, 0x01, 0xba, 0xca, 0x31, 0x75, 0x16, - 0x14, 0x56, 0xd1, 0x97, 0x4a, 0x4e, 0x7b, 0xbd, 0xcc, 0xa8, 0xc0, 0x0a, 0xaf, 0x02, 0x8f, 0x11, - 0x61, 0x61, 0xd8, 0x48, 0x7f, 0x2d, 0x98, 0x25, 0x7c, 0x54, 0xac, 0x2e, 0x45, 0x2b, 0x4a, 0x50, - 0xaf, 0x07, 0x0b, 0xe4, 0x61, 0xc5, 0xea, 0xc1, 0x7b, 0xe0, 0x15, 0x3a, 0xe6, 0xf3, 0x89, 0xda, - 0x4f, 0x84, 0x0d, 0xbf, 0xc6, 0xe9, 0xd1, 0x0f, 0xa6, 0x65, 0x2a, 0x9d, 0x22, 0xbd, 0xe4, 0x81, - 0xd0, 0xf4, 0x0f, 0xb4, 0x70, 0x4b, 0xfb, 0x9e, 0x04, 0xe6, 0x5a, 0xbe, 0xd3, 0x47, 0xcd, 0xc5, - 0xb2, 0x77, 0xc4, 0xda, 0xf7, 0x67, 0xd8, 0xf6, 0x5d, 0xe1, 0xc1, 0x7d, 0xf4, 0x10, 0x39, 0x32, - 0x05, 0xc4, 0xb4, 0xee, 0x6f, 0x87, 0xad, 0x7b, 0x85, 0x43, 0xe5, 0xd6, 0x54, 0xd4, 0xbe, 0x0f, - 0xdb, 0xf6, 0x4b, 0x64, 0xa0, 0x04, 0x6a, 0xe6, 0x57, 0xf6, 0x5d, 0x17, 0xda, 0xbe, 0x18, 0x08, - 0x7f, 0xcc, 0x82, 0xb0, 0xc6, 0x83, 0x70, 0x6b, 0x82, 0x32, 0x07, 0xa5, 0x64, 0xd8, 0xc6, 0x3e, - 0x16, 0xa2, 0x79, 0x0f, 0x87, 0xe6, 0x0f, 0xa5, 0x67, 0x2b, 0x1d, 0xa4, 0x6b, 0x63, 0x20, 0x7a, - 0x12, 0x28, 0x68, 0x3c, 0xac, 0xb4, 0x6b, 0xe7, 0xf4, 0xad, 0x5a, 0xe3, 0x5c, 0xad, 0xad, 0x2b, - 0x50, 0x7b, 0xb1, 0x1c, 0xf5, 0xb9, 0x3e, 0xee, 0xd4, 0xc4, 0x50, 0xf9, 0xb2, 0x34, 0x5e, 0xbf, - 0x47, 0xca, 0x98, 0x0a, 0x26, 0xe2, 0xfd, 0xde, 0x50, 0xa6, 0xd2, 0x21, 0x72, 0xf7, 0x18, 0x88, - 0x9c, 0x02, 0x6a, 0xad, 0x71, 0xae, 0x5c, 0xaf, 0x55, 0x49, 0x1b, 0xdb, 0x6a, 0xdf, 0xbb, 0x81, - 0x30, 0xf9, 0x19, 0x19, 0xcc, 0x13, 0xd6, 0x0c, 0x78, 0xc9, 0xb9, 0x28, 0x68, 0x8c, 0x7c, 0x35, - 0xa5, 0xf1, 0xc8, 0x96, 0x10, 0xd3, 0x5b, 0xfd, 0x78, 0x0a, 0xe3, 0x31, 0x81, 0xdc, 0x03, 0x69, - 0x04, 0x39, 0xd0, 0x35, 0xed, 0x0c, 0xe9, 0xc1, 0x86, 0x8e, 0x20, 0x9f, 0xc8, 0x07, 0xf6, 0xc0, - 0x39, 0x0b, 0x5e, 0xd6, 0xd6, 0x23, 0x4c, 0x38, 0xb5, 0xcd, 0x8d, 0x54, 0x5b, 0x69, 0x98, 0xda, - 0xfe, 0x05, 0x6b, 0x47, 0x2c, 0xf3, 0xe8, 0xdd, 0x1c, 0x2b, 0x6e, 0xc4, 0x49, 0xfc, 0x6a, 0x41, - 0xa0, 0x28, 0x12, 0x6f, 0x2d, 0x5d, 0x0b, 0x66, 0xf1, 0xdf, 0x86, 0xb9, 0x07, 0x69, 0x1b, 0x8a, - 0x12, 0xd4, 0xb3, 0x60, 0x9e, 0x64, 0xec, 0x38, 0x36, 0xaa, 0x4f, 0x1e, 0x67, 0xe0, 0xd2, 0x10, - 0x88, 0x1d, 0x17, 0x9a, 0xbe, 0xe3, 0x62, 0x1a, 0x05, 0x02, 0x22, 0x93, 0xa4, 0xde, 0x0c, 0x4e, - 0x58, 0x1e, 0x6e, 0x55, 0x9b, 0x1e, 0x74, 0x09, 0xb3, 0xa7, 0x8b, 0xd7, 0xe5, 0x6e, 0x2c, 0x19, - 0x07, 0x5f, 0x68, 0xdf, 0x0c, 0xdb, 0xac, 0xce, 0xe9, 0xd9, 0x63, 0xd3, 0x54, 0x3c, 0x9d, 0x96, - 0x5d, 0x1a, 0xaf, 0x07, 0x25, 0xfd, 0xe6, 0x16, 0xd2, 0x8d, 0x15, 0xbc, 0x30, 0x00, 0x69, 0x2b, - 0x46, 0xa9, 0x28, 0x6f, 0xa5, 0xd9, 0x68, 0xeb, 0x8d, 0xb6, 0xb2, 0x3d, 0x54, 0xff, 0x76, 0xb4, - 0xd7, 0xe5, 0x41, 0xfe, 0x6e, 0xc7, 0xb2, 0xb5, 0xe7, 0xe4, 0x38, 0x05, 0xb2, 0xa1, 0x7f, 0xd9, - 0x71, 0x2f, 0x86, 0xcd, 0x3a, 0x4a, 0x48, 0x46, 0x32, 0x52, 0x3c, 0x79, 0xa4, 0xe2, 0xe5, 0x87, - 0x29, 0xde, 0x4f, 0xb3, 0x8a, 0x77, 0x07, 0xaf, 0x78, 0x37, 0x0c, 0x91, 0x3f, 0x62, 0x3e, 0xa6, - 0xbb, 0xf8, 0x74, 0xd8, 0x5d, 0xdc, 0xc5, 0xc1, 0xf8, 0x28, 0x31, 0x32, 0xe9, 0x00, 0xfc, 0x4a, - 0xa6, 0xdd, 0xc4, 0x30, 0xa8, 0x77, 0x62, 0xa0, 0xde, 0x1d, 0xd2, 0x83, 0x58, 0x07, 0x3b, 0x9a, - 0xfb, 0x0e, 0x76, 0x2a, 0x17, 0xd5, 0xab, 0xc1, 0x89, 0x6a, 0x6d, 0x65, 0x45, 0x37, 0xf4, 0x46, - 0x7b, 0xab, 0xa1, 0xb7, 0xcf, 0x37, 0x8d, 0x7b, 0x94, 0x9e, 0xf6, 0x5a, 0x19, 0x00, 0x24, 0xa1, - 0x8a, 0x69, 0x77, 0x60, 0x4f, 0xac, 0xff, 0xff, 0x5b, 0x29, 0x5d, 0x0f, 0x12, 0xd1, 0x8f, 0x81, - 0xf3, 0x15, 0x92, 0x78, 0xab, 0x8c, 0x25, 0x96, 0x0e, 0xd4, 0x37, 0x3f, 0x10, 0x66, 0x0f, 0x57, - 0x81, 0xe3, 0x01, 0x3d, 0x9a, 0x7d, 0xf8, 0xa2, 0xc1, 0xdb, 0xf3, 0x60, 0x91, 0xc2, 0x12, 0xac, - 0x02, 0x3d, 0x4f, 0x68, 0xba, 0xaa, 0x81, 0x12, 0x5d, 0xf4, 0x09, 0x06, 0x83, 0xf0, 0x59, 0x5d, - 0x05, 0x73, 0x7d, 0xe8, 0xee, 0x59, 0x9e, 0x67, 0x39, 0x36, 0x59, 0xce, 0x5d, 0xbc, 0xf5, 0x11, - 0xa1, 0xc4, 0xf1, 0xca, 0xf7, 0xd2, 0x86, 0xe9, 0xfa, 0x56, 0xc7, 0xea, 0x9b, 0xb6, 0xbf, 0x11, - 0x65, 0x36, 0xd8, 0x2f, 0x91, 0x61, 0x97, 0xca, 0x40, 0xe3, 0x6b, 0x12, 0xa3, 0x12, 0xbf, 0x96, - 0x62, 0x52, 0x99, 0x48, 0x30, 0x9d, 0x5a, 0x7c, 0x2a, 0x53, 0xb5, 0x18, 0x82, 0xf7, 0x8e, 0x7a, - 0x0d, 0xb8, 0xba, 0xd6, 0xa8, 0x34, 0x0d, 0x43, 0xaf, 0xb4, 0xb7, 0x36, 0x74, 0x63, 0xbd, 0xd6, - 0x6a, 0xd5, 0x9a, 0x8d, 0xd6, 0x61, 0x5a, 0xbb, 0xf6, 0x59, 0x39, 0xd4, 0x98, 0x2a, 0xec, 0xf4, - 0x2c, 0x1b, 0x6a, 0x77, 0x1d, 0x52, 0x61, 0xf8, 0x35, 0x43, 0x71, 0x9c, 0x69, 0xf9, 0x31, 0x38, - 0xbf, 0x26, 0x3d, 0xce, 0xc3, 0x09, 0xfe, 0x3b, 0x6e, 0xfe, 0x5f, 0x95, 0xc1, 0x09, 0xa6, 0x21, - 0x1a, 0x70, 0x6f, 0x62, 0xeb, 0xc0, 0xff, 0x9d, 0x6d, 0xbb, 0x35, 0x1e, 0xd3, 0x61, 0xb6, 0xf7, - 0x01, 0x36, 0x62, 0x60, 0x7d, 0x73, 0x08, 0x6b, 0x9d, 0x83, 0xf5, 0x89, 0x63, 0xd0, 0x4c, 0x87, - 0xec, 0x3b, 0x32, 0x45, 0xf6, 0x1a, 0x70, 0xf5, 0x46, 0xd9, 0x68, 0xd7, 0x2a, 0xb5, 0x8d, 0x32, - 0x1a, 0x47, 0x99, 0x21, 0x3b, 0xc6, 0xb8, 0xe7, 0x41, 0x1f, 0x8a, 0xef, 0x47, 0xf3, 0xe0, 0xda, - 0xe1, 0x1d, 0x6d, 0x65, 0xd7, 0xb4, 0x77, 0xa0, 0x66, 0x89, 0x40, 0x5d, 0x05, 0x33, 0x1d, 0x9c, - 0x9d, 0xe0, 0xcc, 0x6e, 0xfc, 0x25, 0xf4, 0xe5, 0xa4, 0x04, 0x23, 0xf8, 0x54, 0x7b, 0x37, 0xab, - 0x10, 0x6d, 0x5e, 0x21, 0x9e, 0x9c, 0x0c, 0xde, 0x01, 0xbe, 0x63, 0x74, 0xe3, 0xf3, 0xa1, 0x6e, - 0x9c, 0xe7, 0x74, 0xa3, 0x72, 0x38, 0xf2, 0xe9, 0xd4, 0xe4, 0xb7, 0x1e, 0x08, 0x1d, 0x40, 0xac, - 0x36, 0x59, 0xf1, 0xa3, 0xc2, 0xd0, 0xee, 0xfe, 0x55, 0x32, 0x28, 0x56, 0x61, 0x0f, 0xfa, 0x82, - 0x33, 0xf8, 0xbf, 0x93, 0x44, 0xb7, 0xd3, 0x08, 0x0c, 0x84, 0x76, 0xfc, 0x5a, 0x8a, 0x6f, 0xed, - 0x41, 0xcf, 0x37, 0xf7, 0xfa, 0x58, 0xd4, 0xb2, 0x11, 0x25, 0x68, 0x3f, 0x2a, 0x89, 0x6c, 0xb6, - 0x25, 0x14, 0xf3, 0xef, 0x63, 0x55, 0xf8, 0x0b, 0x12, 0x28, 0xb5, 0xa0, 0xdf, 0x74, 0xbb, 0xd0, - 0xd5, 0x5a, 0x11, 0x46, 0xd7, 0x81, 0x39, 0x0c, 0x0a, 0x9a, 0x66, 0x86, 0x38, 0xb1, 0x49, 0xea, - 0x0d, 0x60, 0x31, 0x7c, 0xc4, 0x9f, 0xd3, 0x6e, 0x7c, 0x20, 0x55, 0xfb, 0x56, 0x4e, 0xd4, 0x07, - 0x80, 0x2e, 0xfa, 0x52, 0x6e, 0x62, 0x5a, 0xa9, 0xd8, 0x7e, 0x7e, 0x22, 0xa9, 0xec, 0xb7, 0x49, - 0xdf, 0x29, 0x01, 0xb0, 0x69, 0x7b, 0x81, 0x5c, 0x1f, 0x95, 0x42, 0xae, 0xda, 0x3f, 0xe6, 0xd2, - 0xcd, 0x62, 0xa2, 0x72, 0x62, 0x24, 0xf6, 0x4b, 0x29, 0xd6, 0x16, 0x62, 0x89, 0x4d, 0x61, 0x6b, - 0xf9, 0x38, 0x28, 0x9e, 0x37, 0x7b, 0x3d, 0xe8, 0x6b, 0xaf, 0x94, 0x41, 0xb1, 0xe2, 0x42, 0xd3, - 0x87, 0x1a, 0x8c, 0x44, 0xa7, 0x81, 0x92, 0xeb, 0x38, 0xfe, 0x86, 0xe9, 0xef, 0x52, 0xb9, 0x85, - 0xcf, 0xea, 0x13, 0xc1, 0x83, 0xb6, 0xf7, 0x7b, 0x3d, 0x1f, 0xde, 0xef, 0x6f, 0xb8, 0xd6, 0x9e, - 0xe9, 0x5e, 0xa9, 0x9b, 0xf6, 0xce, 0xbe, 0xb9, 0x03, 0x29, 0x7b, 0x71, 0xaf, 0xa9, 0xa3, 0xca, - 0xaf, 0xb0, 0x1d, 0xcf, 0x5d, 0xbc, 0xd0, 0x7f, 0x80, 0x93, 0x13, 0x61, 0x71, 0x89, 0xb0, 0x17, - 0xd3, 0xf3, 0x68, 0xa0, 0xb4, 0x67, 0xc3, 0x3d, 0xc7, 0xb6, 0x3a, 0x81, 0xb5, 0x1a, 0x3c, 0x6b, - 0x1f, 0x0f, 0xd1, 0x58, 0xe6, 0xd0, 0x58, 0x12, 0x2e, 0x25, 0x1d, 0x14, 0xad, 0x31, 0xfa, 0x9d, - 0x87, 0x82, 0x07, 0x93, 0x6e, 0x64, 0xab, 0xdd, 0xdc, 0xaa, 0x18, 0x7a, 0xb9, 0xad, 0x6f, 0xd5, - 0x9b, 0x95, 0x72, 0x7d, 0xcb, 0xd0, 0x37, 0x9a, 0x0a, 0x44, 0xb3, 0xf3, 0x19, 0x03, 0x76, 0x9c, - 0x4b, 0xd0, 0xd5, 0x9e, 0x95, 0x13, 0x83, 0x28, 0x41, 0x28, 0x49, 0xf0, 0xc9, 0x22, 0xf0, 0xfd, - 0xb4, 0xb0, 0x9f, 0x11, 0x15, 0x2c, 0x65, 0x3e, 0xa6, 0xc5, 0x7c, 0x42, 0xa8, 0x8f, 0x49, 0x24, - 0xf5, 0x00, 0x00, 0xe9, 0x1f, 0x24, 0x30, 0x53, 0x71, 0xec, 0x4b, 0xd0, 0xf5, 0xd9, 0x49, 0x16, - 0x8b, 0x43, 0x6e, 0x00, 0x87, 0xd3, 0x60, 0x06, 0xda, 0xbe, 0xeb, 0xf4, 0x83, 0x59, 0x56, 0xf0, - 0xa8, 0xbd, 0x31, 0xad, 0x84, 0x69, 0xc9, 0xf1, 0x6b, 0xb3, 0xc3, 0x0b, 0xe2, 0xd8, 0x93, 0x07, - 0xda, 0xce, 0x6b, 0xd3, 0xe0, 0x32, 0x9c, 0x81, 0xec, 0xfb, 0xb1, 0xaf, 0xc9, 0x60, 0x81, 0xb4, - 0xdb, 0x16, 0xc4, 0x66, 0xa1, 0xd6, 0x64, 0xd7, 0x39, 0x07, 0x84, 0xbf, 0x76, 0x8c, 0x13, 0x7f, - 0xd1, 0xec, 0xf7, 0xc3, 0x15, 0xf2, 0xb5, 0x63, 0x06, 0x7d, 0x26, 0x6a, 0xbe, 0x5c, 0x04, 0x79, - 0x73, 0xdf, 0xdf, 0xd5, 0xbe, 0x27, 0x3c, 0xe3, 0xe5, 0xfa, 0x11, 0xca, 0x4f, 0x0c, 0x24, 0x27, - 0x41, 0xc1, 0x77, 0x2e, 0xc2, 0x40, 0x0e, 0xe4, 0x01, 0xc1, 0x61, 0xf6, 0xfb, 0x6d, 0xfc, 0x82, - 0xc2, 0x11, 0x3c, 0x23, 0x03, 0xcb, 0xec, 0x74, 0x9c, 0x7d, 0xdb, 0xaf, 0x05, 0xab, 0xe4, 0x51, - 0x82, 0xf6, 0x25, 0xa1, 0x6d, 0x28, 0x01, 0x06, 0xd3, 0x41, 0x76, 0x61, 0x8c, 0xa6, 0xb4, 0x04, - 0x6e, 0x2a, 0x6f, 0x6c, 0x6c, 0xb5, 0x9b, 0xf7, 0xe8, 0x8d, 0xc8, 0xda, 0xdd, 0xaa, 0x35, 0xb6, - 0xda, 0x6b, 0xfa, 0x56, 0x65, 0xd3, 0xc0, 0x8b, 0x93, 0xe5, 0x4a, 0xa5, 0xb9, 0xd9, 0x68, 0x2b, - 0x50, 0x7b, 0xab, 0x04, 0xe6, 0x2b, 0x3d, 0xc7, 0x0b, 0x11, 0x7e, 0x68, 0x84, 0x70, 0x28, 0xc6, - 0x1c, 0x23, 0x46, 0xed, 0x5f, 0x72, 0xa2, 0x7e, 0x32, 0x81, 0x40, 0x18, 0xf2, 0x31, 0xbd, 0xd4, - 0x1b, 0x85, 0xfc, 0x64, 0x46, 0xd3, 0xcb, 0xbe, 0x49, 0x7c, 0x6e, 0x05, 0xcc, 0x94, 0x89, 0x62, - 0x68, 0x7f, 0x9a, 0x03, 0xc5, 0x8a, 0x63, 0x6f, 0x5b, 0x3b, 0xc8, 0x82, 0x84, 0xb6, 0x79, 0xa1, - 0x07, 0xab, 0xa6, 0x6f, 0x5e, 0xb2, 0xe0, 0x65, 0x5c, 0x81, 0x92, 0x31, 0x90, 0x8a, 0x98, 0xa2, - 0x29, 0xf0, 0xc2, 0xfe, 0x0e, 0x66, 0xaa, 0x64, 0xb0, 0x49, 0x68, 0xfc, 0x20, 0x8f, 0x1b, 0x2e, - 0x74, 0x61, 0x0f, 0x9a, 0x1e, 0x44, 0x73, 0x31, 0x1b, 0xf6, 0xb0, 0xd2, 0x96, 0x8c, 0xb8, 0xd7, - 0xea, 0x59, 0x30, 0x4f, 0x5e, 0x61, 0xfb, 0xc7, 0xc3, 0x6a, 0x5c, 0x32, 0xb8, 0x34, 0xf5, 0xd1, - 0xa0, 0x00, 0xef, 0xf7, 0x5d, 0xf3, 0x74, 0x17, 0xe3, 0xf5, 0xa0, 0x25, 0xe2, 0x28, 0xbb, 0x14, - 0x38, 0xca, 0x2e, 0xb5, 0xb0, 0x1b, 0xad, 0x41, 0x72, 0x69, 0xff, 0xbb, 0x14, 0x5a, 0x2f, 0x5f, - 0x90, 0x23, 0xc5, 0x50, 0x41, 0xde, 0x36, 0xf7, 0x20, 0xd5, 0x0b, 0xfc, 0x5f, 0xbd, 0x09, 0x1c, - 0x37, 0x2f, 0x99, 0xbe, 0xe9, 0xd6, 0x9d, 0x8e, 0xd9, 0xc3, 0xc3, 0x66, 0xd0, 0xf2, 0x07, 0x5f, - 0xe0, 0x4d, 0x2b, 0xdf, 0x71, 0x21, 0xce, 0x15, 0x6c, 0x5a, 0x05, 0x09, 0x88, 0xba, 0xd5, 0x71, - 0x6c, 0xcc, 0xbf, 0x6c, 0xe0, 0xff, 0x48, 0x2a, 0x5d, 0xcb, 0x43, 0x15, 0xc1, 0x54, 0x1a, 0x64, - 0x3f, 0xa5, 0x75, 0xc5, 0xee, 0xe0, 0x0d, 0xab, 0x92, 0x11, 0xf7, 0x5a, 0x5d, 0x06, 0x73, 0x74, - 0xf7, 0x65, 0x1d, 0xe9, 0x55, 0x11, 0xeb, 0xd5, 0x75, 0xbc, 0x1b, 0x22, 0xc1, 0x73, 0xa9, 0x11, - 0xe5, 0x33, 0xd8, 0x8f, 0xd4, 0xa7, 0x80, 0x07, 0xd3, 0xc7, 0xca, 0xbe, 0xe7, 0x3b, 0x7b, 0x04, - 0xf4, 0x15, 0xab, 0x47, 0x6a, 0x30, 0x83, 0x6b, 0x90, 0x94, 0x45, 0xbd, 0x15, 0x9c, 0xec, 0xbb, - 0x70, 0x1b, 0xba, 0xf7, 0x9a, 0x7b, 0xfb, 0xf7, 0xb7, 0x5d, 0xd3, 0xf6, 0xfa, 0x8e, 0xeb, 0x9f, - 0x2e, 0x61, 0xe6, 0x87, 0xbe, 0x53, 0x6f, 0x06, 0x27, 0xee, 0xf3, 0x1c, 0xbb, 0xdc, 0xb7, 0xea, - 0x96, 0xe7, 0x43, 0xbb, 0xdc, 0xed, 0xba, 0xa7, 0x67, 0x71, 0x59, 0x07, 0x5f, 0xa8, 0xd7, 0x83, - 0x85, 0xfb, 0x1c, 0xcb, 0x6e, 0xf9, 0x2e, 0x34, 0xf7, 0x36, 0xdd, 0xde, 0x69, 0x40, 0x36, 0x88, - 0xb8, 0x44, 0xda, 0xf9, 0x96, 0x40, 0x91, 0x40, 0xa2, 0xbd, 0xa8, 0x20, 0xec, 0xd5, 0x4c, 0x85, - 0x94, 0x68, 0x2d, 0x3e, 0x06, 0xcc, 0xd0, 0x5e, 0x13, 0x83, 0x3f, 0x77, 0xeb, 0xa9, 0x81, 0x05, - 0x12, 0x4a, 0xc5, 0x08, 0xb2, 0xa9, 0x8f, 0x03, 0xc5, 0x0e, 0x16, 0x15, 0xd6, 0x83, 0xb9, 0x5b, - 0x1f, 0x3c, 0xbc, 0x50, 0x9c, 0xc5, 0xa0, 0x59, 0xb5, 0x2f, 0xcb, 0x42, 0x8e, 0xd0, 0x49, 0x1c, - 0xa7, 0xeb, 0x29, 0xbe, 0x29, 0x8d, 0xd1, 0x15, 0xdf, 0x0c, 0x6e, 0xa4, 0xfd, 0x2c, 0xb5, 0x69, - 0xaa, 0x5b, 0xcb, 0x9b, 0xc1, 0xac, 0x16, 0x59, 0x3a, 0xad, 0x76, 0xd9, 0x68, 0x6f, 0x35, 0x9a, - 0x55, 0x34, 0x1b, 0xbe, 0x09, 0xdc, 0x30, 0x22, 0xb7, 0xde, 0xde, 0x6a, 0x94, 0xd7, 0x75, 0x65, - 0x9b, 0xb7, 0x97, 0x5a, 0xed, 0xe6, 0xc6, 0x96, 0xb1, 0xd9, 0x68, 0xd4, 0x1a, 0xab, 0x84, 0x18, - 0x32, 0x50, 0x4f, 0x45, 0x19, 0xce, 0x1b, 0xb5, 0xb6, 0xbe, 0x55, 0x69, 0x36, 0x56, 0x6a, 0xab, - 0x8a, 0x35, 0xca, 0xd8, 0xba, 0x4f, 0xbd, 0x0e, 0x5c, 0xcb, 0x71, 0x52, 0x6b, 0x36, 0xd0, 0x14, - 0xbd, 0x52, 0x6e, 0x54, 0x74, 0x34, 0x1f, 0xbf, 0xa8, 0x6a, 0xe0, 0x6a, 0x42, 0x6e, 0x6b, 0xa5, - 0x56, 0x67, 0x77, 0xd5, 0x3e, 0x93, 0x53, 0x4f, 0x83, 0xab, 0xd8, 0x77, 0xd4, 0x27, 0x42, 0xf9, - 0xcd, 0x9c, 0x7a, 0x3d, 0x78, 0x28, 0xf7, 0x15, 0xd9, 0x20, 0xdb, 0xaa, 0x55, 0xb7, 0xd6, 0x6b, - 0xad, 0xf5, 0x72, 0xbb, 0xb2, 0xa6, 0x7c, 0x16, 0x4f, 0x5f, 0x42, 0x7b, 0x9c, 0xf1, 0x4e, 0x7e, - 0x09, 0x6b, 0x27, 0x94, 0x79, 0x45, 0x7d, 0xd4, 0x50, 0xd8, 0x93, 0xed, 0xe2, 0x4f, 0x85, 0x23, - 0x4e, 0x95, 0x53, 0xa1, 0xc7, 0xa4, 0xa0, 0x95, 0x4e, 0x87, 0xda, 0x63, 0xa8, 0xd0, 0x75, 0xe0, - 0xda, 0x86, 0x4e, 0x90, 0x32, 0xf4, 0x4a, 0xf3, 0x9c, 0x6e, 0x6c, 0x9d, 0x2f, 0xd7, 0xeb, 0x7a, - 0x7b, 0x6b, 0xa5, 0x66, 0xb4, 0xda, 0xca, 0xb6, 0xf6, 0x8f, 0x52, 0xb8, 0x2c, 0xc5, 0x48, 0xeb, - 0x4f, 0xa5, 0xb4, 0xcd, 0x3a, 0x71, 0xf9, 0xe9, 0x07, 0x41, 0xd1, 0xf3, 0x4d, 0x7f, 0xdf, 0xa3, - 0xad, 0xfa, 0x21, 0xc3, 0x5b, 0xf5, 0x52, 0x0b, 0x67, 0x32, 0x68, 0x66, 0xed, 0xcb, 0xb9, 0x34, - 0xcd, 0x74, 0x02, 0x2b, 0x53, 0xd6, 0x18, 0x22, 0x3e, 0x03, 0xb4, 0x40, 0xdb, 0x6b, 0xad, 0xad, - 0x72, 0xdd, 0xd0, 0xcb, 0xd5, 0x7b, 0xc3, 0xf5, 0x28, 0xa8, 0x5e, 0x0d, 0x4e, 0x6c, 0x36, 0xca, - 0xcb, 0x75, 0x1d, 0x37, 0x97, 0x66, 0xa3, 0xa1, 0x57, 0x90, 0xdc, 0x7f, 0x14, 0xef, 0xfe, 0x20, - 0xab, 0x1c, 0xf3, 0x8d, 0x2c, 0x27, 0x46, 0xfe, 0x7f, 0x29, 0xec, 0xe6, 0x16, 0x69, 0x18, 0x4b, - 0x6b, 0xb2, 0x38, 0x7c, 0x49, 0xc8, 0xb3, 0x4d, 0x88, 0x93, 0x74, 0x78, 0xfc, 0x97, 0x31, 0xf0, - 0xb8, 0x1a, 0x9c, 0x60, 0xf1, 0xc0, 0x1e, 0x6e, 0xf1, 0x30, 0xfc, 0x89, 0x0c, 0x66, 0xd6, 0xad, - 0x1d, 0xec, 0x5e, 0xbc, 0x1f, 0x19, 0x28, 0x8b, 0x40, 0x0a, 0xbd, 0x77, 0x24, 0xab, 0xcb, 0x4d, - 0xe6, 0x25, 0xf1, 0xf5, 0x16, 0xa1, 0x09, 0xfb, 0x97, 0x53, 0xf7, 0x4c, 0x94, 0xe1, 0x98, 0x9e, - 0xe9, 0xf9, 0x52, 0x9a, 0x9e, 0x69, 0x38, 0xad, 0x54, 0x30, 0x21, 0xd3, 0xc1, 0x85, 0xcf, 0xd8, - 0xb7, 0x5c, 0xd8, 0xc5, 0x66, 0x22, 0xae, 0xb7, 0x6c, 0xf0, 0x89, 0x67, 0xdd, 0xc3, 0x81, 0xc9, - 0x7a, 0xd9, 0xcc, 0x83, 0x52, 0x38, 0x9a, 0xe0, 0x0d, 0x1f, 0xf4, 0x52, 0x6f, 0x34, 0x37, 0x57, - 0xd7, 0xb6, 0x56, 0x0c, 0x5d, 0xa7, 0x4b, 0xc4, 0x3b, 0xda, 0xbb, 0x24, 0xb0, 0x40, 0x6b, 0x48, - 0xbd, 0x27, 0x1e, 0x1a, 0x0b, 0x32, 0x85, 0xe3, 0xdf, 0xd8, 0xe9, 0xc9, 0x2a, 0x0f, 0xc7, 0x63, - 0x93, 0x44, 0x98, 0xe8, 0x3e, 0xf1, 0xa6, 0xb0, 0x09, 0xdd, 0xcd, 0x81, 0xf2, 0x84, 0xd4, 0x14, - 0xb3, 0x9f, 0xa2, 0xbc, 0x08, 0x80, 0x62, 0x0b, 0xf6, 0x60, 0xc7, 0xd7, 0x3e, 0x2c, 0x8f, 0xdd, - 0x26, 0xe2, 0xcc, 0x6d, 0x39, 0x95, 0xb9, 0x9d, 0xcf, 0xc0, 0xdc, 0x2e, 0x8c, 0x6f, 0x6e, 0x17, - 0xd3, 0x9a, 0xdb, 0x33, 0x71, 0xe6, 0x76, 0x42, 0xaf, 0x51, 0x4a, 0xec, 0x35, 0x06, 0x0c, 0x75, - 0xa3, 0x4e, 0x4d, 0x7a, 0x3e, 0x91, 0x2a, 0xf3, 0x27, 0x8b, 0x69, 0xc7, 0x71, 0x02, 0xfc, 0xd1, - 0x9a, 0xe7, 0x3f, 0x59, 0x48, 0x33, 0xee, 0x0f, 0xe5, 0x38, 0x5d, 0x2b, 0x79, 0x45, 0x3e, 0x83, - 0x45, 0x47, 0xf5, 0xe1, 0xe0, 0xa1, 0xd1, 0xf3, 0x96, 0xfe, 0xb4, 0x5a, 0xab, 0xdd, 0xc2, 0x36, - 0x79, 0xa5, 0x69, 0x18, 0x9b, 0x1b, 0x64, 0xbb, 0xea, 0x14, 0x50, 0x23, 0x2a, 0xc6, 0x66, 0x83, - 0x58, 0xe0, 0x3b, 0x3c, 0xf5, 0x95, 0x5a, 0xa3, 0xba, 0x15, 0x8e, 0x6a, 0x8d, 0x95, 0xa6, 0xb2, - 0xab, 0x2e, 0x81, 0x9b, 0x18, 0xea, 0xb8, 0x03, 0x24, 0x25, 0x94, 0x1b, 0xd5, 0xad, 0xf5, 0x86, - 0xbe, 0xde, 0x6c, 0xd4, 0x2a, 0x38, 0xbd, 0xa5, 0xb7, 0x15, 0x0b, 0x99, 0x82, 0x03, 0x36, 0x7f, - 0x4b, 0x2f, 0x1b, 0x95, 0x35, 0xdd, 0x20, 0x45, 0xde, 0xa7, 0xde, 0x00, 0xce, 0x96, 0x1b, 0xcd, - 0x36, 0x4a, 0x29, 0x37, 0xee, 0x6d, 0xdf, 0xbb, 0xa1, 0x6f, 0x6d, 0x18, 0xcd, 0x8a, 0xde, 0x6a, - 0xa1, 0x91, 0x94, 0xce, 0x10, 0x94, 0x9e, 0xfa, 0x64, 0x70, 0x3b, 0xc3, 0x9a, 0xde, 0xc6, 0xbe, - 0x11, 0xeb, 0x4d, 0xec, 0x1e, 0x57, 0xd5, 0xb7, 0xd6, 0xca, 0xad, 0xad, 0x5a, 0xa3, 0xd2, 0x5c, - 0xdf, 0x28, 0xb7, 0x6b, 0x68, 0xc0, 0xdd, 0x30, 0x9a, 0xed, 0xe6, 0xd6, 0x39, 0xdd, 0x68, 0xd5, - 0x9a, 0x0d, 0xc5, 0x46, 0x55, 0x66, 0x46, 0xe8, 0xc0, 0x52, 0x72, 0xd4, 0x6b, 0xc1, 0xe9, 0x20, - 0xbd, 0xde, 0x44, 0x82, 0x66, 0xe6, 0x0c, 0x7d, 0xd6, 0xce, 0x6a, 0xb5, 0x9b, 0x06, 0x99, 0x35, - 0xac, 0xd7, 0x56, 0x0d, 0x34, 0xd5, 0x51, 0x9e, 0x91, 0xe9, 0x9c, 0xe2, 0x9f, 0x25, 0x90, 0x6f, - 0xf9, 0x4e, 0x5f, 0xfb, 0x81, 0xa8, 0x3b, 0x3c, 0x03, 0x80, 0x8b, 0x5d, 0x21, 0xaa, 0xa6, 0x6f, - 0xd2, 0xd5, 0x1a, 0x26, 0x45, 0xfb, 0x0d, 0xe1, 0xfd, 0xdb, 0xc8, 0xea, 0x72, 0xfa, 0x31, 0xc3, - 0xc7, 0x77, 0xc5, 0x8e, 0x43, 0xc6, 0x13, 0x4a, 0xd7, 0x1e, 0x7e, 0x7c, 0x9c, 0x1d, 0x5a, 0x0d, - 0x9c, 0x62, 0x60, 0x45, 0xf2, 0x0f, 0x54, 0x06, 0xaa, 0x0f, 0x02, 0x57, 0x0d, 0x28, 0x1f, 0xd6, - 0xb9, 0x6d, 0xf5, 0x61, 0xe0, 0x21, 0x8c, 0xfa, 0xeb, 0xeb, 0xcd, 0x73, 0x7a, 0xa8, 0xe8, 0xd5, - 0x72, 0xbb, 0xac, 0xec, 0x68, 0x5f, 0x90, 0x41, 0x7e, 0xdd, 0xb9, 0x34, 0xb8, 0x6d, 0x6e, 0xc3, - 0xcb, 0xcc, 0xde, 0x4a, 0xf0, 0xc8, 0x1f, 0xc1, 0x12, 0x12, 0xfb, 0x7a, 0xbc, 0x8b, 0xcc, 0x97, - 0xa4, 0x34, 0x62, 0x5f, 0x3f, 0xac, 0x5f, 0xcc, 0x5f, 0x8f, 0x23, 0xf6, 0x18, 0xd1, 0x42, 0xf5, - 0x2c, 0x38, 0x13, 0xbd, 0xa8, 0x55, 0xf5, 0x46, 0xbb, 0xb6, 0x72, 0x6f, 0x24, 0xdc, 0x9a, 0x21, - 0x24, 0xfe, 0x51, 0xdd, 0x5c, 0xf2, 0x5a, 0xc1, 0x69, 0x70, 0x32, 0x7a, 0xb7, 0xaa, 0xb7, 0x83, - 0x37, 0xf7, 0x69, 0xcf, 0x29, 0x80, 0x79, 0xd2, 0xed, 0x6f, 0xf6, 0xbb, 0xc8, 0xfa, 0x7e, 0x5c, - 0x84, 0xee, 0x8d, 0xe0, 0x78, 0x6d, 0x63, 0xa5, 0xd5, 0xf2, 0x1d, 0xd7, 0xdc, 0x81, 0x78, 0x1c, - 0x25, 0xd2, 0x1a, 0x4c, 0xd6, 0xde, 0x2b, 0xbc, 0xfa, 0xcf, 0x0f, 0x35, 0xa4, 0xcc, 0x18, 0xd4, - 0xbf, 0x26, 0xb4, 0x5a, 0x2f, 0x40, 0x30, 0x1d, 0xfa, 0xf7, 0x4d, 0xb8, 0xcd, 0xc5, 0xe3, 0xb2, - 0x7d, 0xf6, 0xb9, 0x12, 0x98, 0x6d, 0x5b, 0x7b, 0xf0, 0x99, 0x8e, 0x0d, 0x3d, 0x75, 0x06, 0xc8, - 0xab, 0xeb, 0x6d, 0xe5, 0x18, 0xfa, 0x83, 0xa6, 0x45, 0x39, 0xfc, 0x47, 0x47, 0x05, 0xa0, 0x3f, - 0xe5, 0xb6, 0x22, 0xa3, 0x3f, 0xeb, 0x7a, 0x5b, 0xc9, 0xa3, 0x3f, 0x0d, 0xbd, 0xad, 0x14, 0xd0, - 0x9f, 0x8d, 0x7a, 0x5b, 0x29, 0xa2, 0x3f, 0xb5, 0x56, 0x5b, 0x99, 0x41, 0x7f, 0x96, 0x5b, 0x6d, - 0xa5, 0x84, 0xfe, 0x9c, 0x6b, 0xb5, 0x95, 0x59, 0xf4, 0xa7, 0xd2, 0x6e, 0x2b, 0x00, 0xfd, 0xb9, - 0xbb, 0xd5, 0x56, 0xe6, 0xd0, 0x9f, 0x72, 0xa5, 0xad, 0xcc, 0xe3, 0x3f, 0x7a, 0x5b, 0x59, 0x40, - 0x7f, 0x5a, 0xad, 0xb6, 0xb2, 0x88, 0x29, 0xb7, 0xda, 0xca, 0x71, 0x5c, 0x56, 0xad, 0xad, 0x28, - 0xe8, 0xcf, 0x5a, 0xab, 0xad, 0x9c, 0xc0, 0x99, 0x5b, 0x6d, 0x45, 0xc5, 0x85, 0xb6, 0xda, 0xca, - 0x55, 0x38, 0x4f, 0xab, 0xad, 0x9c, 0xc4, 0x45, 0xb4, 0xda, 0xca, 0xd5, 0x98, 0x0d, 0xbd, 0xad, - 0x9c, 0xc2, 0x79, 0x8c, 0xb6, 0xf2, 0x20, 0xfc, 0xaa, 0xd1, 0x56, 0x4e, 0x63, 0xc6, 0xf4, 0xb6, - 0x72, 0x0d, 0xfe, 0x63, 0xb4, 0x15, 0x0d, 0xbf, 0x2a, 0xb7, 0x95, 0x07, 0x6b, 0x0f, 0x01, 0xb3, - 0xab, 0xd0, 0x27, 0x20, 0x6a, 0x0a, 0x90, 0x57, 0xa1, 0xcf, 0x4e, 0xc4, 0x5f, 0x99, 0x07, 0x0f, - 0xa2, 0x8b, 0x37, 0x2b, 0xae, 0xb3, 0x57, 0x87, 0x3b, 0x66, 0xe7, 0x8a, 0x7e, 0x3f, 0x32, 0xf8, - 0xb4, 0x17, 0xe6, 0xb8, 0x15, 0xed, 0x7e, 0xd4, 0x1b, 0xe1, 0xff, 0x89, 0x06, 0x72, 0xb0, 0x46, - 0x2d, 0xf3, 0x6b, 0xd4, 0x71, 0x26, 0x61, 0x5e, 0x64, 0x22, 0xf9, 0xf7, 0x6c, 0x63, 0xe0, 0x36, - 0xa4, 0x72, 0x03, 0x1b, 0x52, 0xa8, 0x85, 0xf5, 0xa1, 0xeb, 0x39, 0xb6, 0xd9, 0x6b, 0x51, 0xf7, - 0x23, 0x32, 0x57, 0x1d, 0x4c, 0x56, 0x9f, 0x1a, 0x34, 0x2a, 0x62, 0xf0, 0x3d, 0x29, 0x69, 0x79, - 0x6b, 0x50, 0x42, 0x31, 0xed, 0xeb, 0xb3, 0x61, 0xfb, 0x6a, 0x73, 0xed, 0xeb, 0x29, 0x87, 0xa0, - 0x9d, 0xae, 0xa9, 0xd5, 0xc6, 0x9b, 0x8a, 0x46, 0xce, 0xf9, 0xc1, 0xfe, 0x97, 0xac, 0x7d, 0x41, - 0x02, 0xa7, 0x74, 0x7b, 0xd8, 0x54, 0x86, 0x55, 0xa3, 0xb7, 0xb2, 0xd0, 0x6c, 0xf0, 0x22, 0xbd, - 0x7d, 0x68, 0xb5, 0x87, 0xd3, 0x8c, 0x91, 0xe8, 0xef, 0x84, 0x12, 0x6d, 0x71, 0x12, 0xbd, 0x6b, - 0x7c, 0xd2, 0xe9, 0x04, 0xda, 0x98, 0x68, 0xdf, 0x95, 0xd7, 0xfe, 0x5c, 0x02, 0x27, 0x88, 0x07, - 0xe1, 0xdd, 0x64, 0xe6, 0x84, 0x7b, 0x7b, 0xde, 0xfa, 0xea, 0x45, 0xb3, 0x2c, 0xa2, 0xdf, 0x4c, - 0x8a, 0xf6, 0x3a, 0x56, 0xe0, 0xf7, 0xf0, 0x02, 0x8f, 0xe9, 0xc7, 0x07, 0x8b, 0x8b, 0x91, 0xf5, - 0x6f, 0x86, 0xb2, 0x6e, 0x70, 0xb2, 0xbe, 0x7d, 0x2c, 0xaa, 0x47, 0x2b, 0xe6, 0x6f, 0xe6, 0xc1, - 0x43, 0x08, 0x87, 0x54, 0x11, 0x48, 0x3f, 0x58, 0xb6, 0xbb, 0x06, 0xf4, 0x7c, 0xd3, 0xf5, 0xb9, - 0xd0, 0x2b, 0x03, 0x53, 0xf3, 0x5c, 0x06, 0x53, 0x73, 0x69, 0xe4, 0xd4, 0x5c, 0x7b, 0x0f, 0x6b, - 0xe0, 0x9d, 0xe7, 0x91, 0x2d, 0x27, 0x60, 0x10, 0x53, 0xc3, 0xb8, 0x16, 0x15, 0x5a, 0x7e, 0x3f, - 0xcc, 0xa1, 0xbc, 0x72, 0xe8, 0x12, 0xd2, 0x21, 0xfe, 0x1b, 0x93, 0xb5, 0xc4, 0xf3, 0xec, 0x3b, - 0xde, 0x6c, 0x54, 0xba, 0x99, 0x4e, 0xa1, 0x5e, 0x5c, 0x02, 0xb3, 0xb8, 0xcb, 0xa9, 0x5b, 0xf6, - 0x45, 0xed, 0x1b, 0x32, 0x98, 0x6f, 0xc0, 0xcb, 0x95, 0x5d, 0xb3, 0xd7, 0x83, 0xf6, 0x0e, 0xd4, - 0xee, 0xe3, 0x6c, 0x7b, 0xb3, 0xdf, 0x6f, 0x44, 0xfb, 0xc3, 0xc1, 0xa3, 0x7a, 0x17, 0x28, 0x78, - 0x1d, 0x27, 0x0c, 0xea, 0xf0, 0x03, 0x31, 0xab, 0xd7, 0xe5, 0x7d, 0x7f, 0x77, 0x09, 0x97, 0x55, - 0xee, 0x5b, 0x2d, 0xf4, 0x81, 0x41, 0xbe, 0xa3, 0xe3, 0xe4, 0x5f, 0x0e, 0xed, 0x8c, 0x73, 0x09, - 0x9d, 0x71, 0xc8, 0xf8, 0x12, 0xcb, 0x74, 0xcc, 0x22, 0xc9, 0x75, 0x60, 0xae, 0x13, 0x64, 0x09, - 0x4f, 0xe9, 0xb1, 0x49, 0xda, 0x5f, 0xa4, 0xea, 0xae, 0x85, 0x0a, 0x4f, 0xa7, 0x55, 0x70, 0xc2, - 0xa6, 0xe6, 0xd5, 0xe0, 0x44, 0xbb, 0xd9, 0xdc, 0x5a, 0x2f, 0x37, 0xee, 0x8d, 0x62, 0xab, 0x6c, - 0x6b, 0xaf, 0xc8, 0x83, 0xc5, 0x96, 0xd3, 0xbb, 0x04, 0x23, 0x9c, 0x6b, 0x9c, 0xfb, 0x27, 0x2b, - 0xa7, 0xdc, 0x01, 0x39, 0xa9, 0xa7, 0x40, 0xd1, 0xb4, 0xbd, 0xcb, 0x30, 0x30, 0xff, 0xe9, 0x13, - 0x85, 0xf1, 0xa3, 0x6c, 0x47, 0x60, 0xf0, 0x30, 0xde, 0x31, 0x42, 0x92, 0x3c, 0x57, 0x31, 0x40, - 0x9e, 0x05, 0xf3, 0x1e, 0xf1, 0x12, 0x69, 0x33, 0xce, 0x40, 0x5c, 0x1a, 0x66, 0x91, 0xb8, 0x29, - 0xc9, 0x94, 0x45, 0xfc, 0xa4, 0xbd, 0x36, 0xec, 0x3f, 0x36, 0x39, 0x88, 0xcb, 0x87, 0x61, 0x2c, - 0x1d, 0xc8, 0xaf, 0x9a, 0xf4, 0x24, 0xfe, 0x34, 0x38, 0x19, 0x9c, 0x50, 0xaf, 0xac, 0x95, 0xeb, - 0x75, 0xbd, 0xb1, 0xaa, 0x6f, 0xd5, 0xaa, 0x64, 0x3f, 0x39, 0x4a, 0x29, 0xb7, 0xdb, 0xfa, 0xfa, - 0x46, 0xbb, 0xb5, 0xa5, 0x3f, 0xad, 0xa2, 0xeb, 0x55, 0xec, 0x80, 0x8d, 0x4f, 0x50, 0x06, 0xae, - 0xf2, 0xe5, 0x46, 0xeb, 0xbc, 0x6e, 0x28, 0xbb, 0x67, 0xcb, 0x60, 0x8e, 0x19, 0x28, 0x10, 0x77, - 0x55, 0xb8, 0x6d, 0xee, 0xf7, 0xa8, 0x39, 0xae, 0x1c, 0x43, 0xdc, 0x61, 0xd9, 0x34, 0xed, 0xde, - 0x15, 0x25, 0xa7, 0x2a, 0x60, 0x9e, 0x1d, 0x13, 0x14, 0x49, 0xfb, 0xd6, 0xb5, 0x60, 0xf6, 0xbc, - 0xe3, 0x5e, 0xc4, 0x5e, 0xc3, 0xda, 0x07, 0x48, 0x0c, 0xb6, 0x20, 0xa2, 0x04, 0x63, 0x80, 0xbd, - 0x4a, 0xdc, 0x4d, 0x2c, 0xa0, 0xb6, 0x34, 0x32, 0x6a, 0xc4, 0x75, 0x60, 0xee, 0x72, 0x90, 0x3b, - 0x6a, 0xe9, 0x4c, 0x92, 0xf6, 0xcb, 0x62, 0x8e, 0x5f, 0xa3, 0x8b, 0xcc, 0x7e, 0xd5, 0xff, 0xed, - 0x12, 0x28, 0xae, 0x42, 0xbf, 0xdc, 0xeb, 0xb1, 0x72, 0x7b, 0x99, 0xf0, 0x39, 0x52, 0xae, 0x12, - 0xe5, 0x5e, 0x2f, 0xbe, 0x51, 0x31, 0x02, 0x0a, 0xce, 0x3b, 0x71, 0x69, 0x82, 0x5e, 0xda, 0x23, - 0x0a, 0xcc, 0x5e, 0x62, 0x7f, 0x1b, 0xb9, 0x66, 0xbf, 0x9e, 0x31, 0x93, 0x1e, 0x1b, 0xc5, 0xdf, - 0xcb, 0x25, 0x3b, 0x49, 0x05, 0xf9, 0xd4, 0x7b, 0xc0, 0xcc, 0xbe, 0x07, 0x2b, 0xa6, 0x17, 0x0c, - 0x6d, 0x7c, 0x4d, 0x9b, 0x17, 0xee, 0x83, 0x1d, 0x7f, 0xa9, 0xb6, 0x87, 0x26, 0x3e, 0x9b, 0x24, - 0x63, 0x18, 0xaf, 0x88, 0x3e, 0x1b, 0x01, 0x05, 0x34, 0xed, 0xbc, 0x6c, 0xf9, 0xbb, 0x95, 0x5d, - 0xd3, 0xa7, 0x9b, 0x2d, 0xe1, 0xb3, 0xf6, 0xa1, 0x31, 0xe0, 0x4c, 0x74, 0xd8, 0x89, 0x3f, 0x8e, - 0x7e, 0x13, 0x50, 0xb0, 0xf9, 0x63, 0xd9, 0x3b, 0x84, 0xff, 0x70, 0x8e, 0x79, 0x20, 0x3d, 0x35, - 0xe0, 0x13, 0xf0, 0xc8, 0x19, 0x07, 0xf0, 0x1f, 0x91, 0x41, 0xbe, 0xd9, 0x87, 0xb6, 0xf0, 0x39, - 0xcd, 0x10, 0x07, 0x69, 0x00, 0x87, 0xf7, 0x89, 0xbb, 0x10, 0x87, 0x95, 0x46, 0x25, 0xc7, 0xa0, - 0x70, 0x0b, 0xc8, 0x5b, 0xf6, 0xb6, 0x43, 0xad, 0xe0, 0x07, 0xc7, 0xd8, 0x45, 0x35, 0x7b, 0xdb, - 0x31, 0x70, 0x46, 0xed, 0x7d, 0x62, 0xde, 0xc3, 0x49, 0x65, 0xa7, 0x13, 0xf7, 0xca, 0x18, 0x63, - 0x91, 0x0a, 0x16, 0x23, 0x13, 0xb5, 0xde, 0x2c, 0x57, 0x95, 0xae, 0xf6, 0x37, 0x25, 0x50, 0x24, - 0x6a, 0xa3, 0xbd, 0x44, 0x06, 0x72, 0xb9, 0xdb, 0x8d, 0x01, 0x43, 0x3a, 0x00, 0x86, 0x13, 0x68, - 0x21, 0xf5, 0xf4, 0x0e, 0x9e, 0xf9, 0xc0, 0x6d, 0x82, 0x63, 0x03, 0x6d, 0x92, 0xe5, 0x6e, 0x37, - 0xfe, 0xdc, 0x43, 0x58, 0xa0, 0xc4, 0x17, 0xc8, 0xf6, 0x10, 0xb2, 0x58, 0x0f, 0x91, 0x7a, 0x20, - 0x89, 0xe5, 0x2f, 0xfb, 0x56, 0xf2, 0xf7, 0x12, 0x98, 0xa9, 0x5b, 0x9e, 0x8f, 0xb0, 0x29, 0x8b, - 0x60, 0x73, 0x2d, 0x98, 0x0d, 0x44, 0x83, 0xba, 0x4c, 0x34, 0x1e, 0x44, 0x09, 0xfc, 0x4c, 0xfe, - 0x6e, 0x1e, 0x9d, 0xc7, 0x27, 0xd7, 0x9e, 0x72, 0x11, 0x7f, 0x26, 0x2e, 0x2a, 0x56, 0x1a, 0x2c, - 0xf6, 0x57, 0x42, 0x81, 0xaf, 0x73, 0x02, 0xbf, 0x6d, 0x9c, 0x22, 0xb3, 0x17, 0xfa, 0x1f, 0x4a, - 0x00, 0xa0, 0xb2, 0xe9, 0xc1, 0xe3, 0x47, 0x72, 0xe1, 0x44, 0x12, 0xa4, 0xfb, 0x0a, 0x56, 0xba, - 0xeb, 0xbc, 0x74, 0x7f, 0x68, 0x74, 0x55, 0x93, 0x0e, 0x18, 0xab, 0x0a, 0x90, 0xad, 0x50, 0xb4, - 0xe8, 0xaf, 0xf6, 0xf6, 0x50, 0xa8, 0x1b, 0x9c, 0x50, 0xef, 0x18, 0xb3, 0xa4, 0xec, 0xe5, 0xfa, - 0xc7, 0x12, 0x98, 0x69, 0x41, 0x1f, 0x75, 0x9d, 0xda, 0x39, 0x91, 0x5e, 0x9f, 0x69, 0xdb, 0x92, - 0x60, 0xdb, 0xfe, 0x4e, 0x4e, 0x34, 0xb0, 0x5c, 0x24, 0x19, 0xca, 0x53, 0xcc, 0xea, 0xc5, 0xeb, - 0x85, 0x02, 0xcb, 0x8d, 0xa2, 0x96, 0xbd, 0x74, 0xdf, 0x2a, 0x85, 0x9e, 0x26, 0xfc, 0xb9, 0x40, - 0xd6, 0xac, 0xce, 0x1d, 0x34, 0xab, 0xc5, 0xcf, 0x05, 0xb2, 0x75, 0x8c, 0x77, 0x6c, 0x48, 0x6d, - 0x80, 0x4c, 0xc0, 0xe7, 0x60, 0x1c, 0x79, 0x3d, 0x5b, 0x06, 0x45, 0xba, 0xf9, 0x70, 0x57, 0xf2, - 0xde, 0xc3, 0xe8, 0xa9, 0xc9, 0xfb, 0xc7, 0x30, 0x05, 0x93, 0x96, 0xf5, 0x43, 0x36, 0x24, 0x86, - 0x8d, 0x9b, 0x41, 0x01, 0x47, 0xdd, 0xa6, 0xe3, 0x5c, 0xe4, 0x2e, 0x12, 0x90, 0xd0, 0xd1, 0x5b, - 0x83, 0x64, 0x4a, 0x8d, 0xc2, 0x04, 0x76, 0x02, 0xc6, 0x41, 0xe1, 0x9b, 0x2a, 0x00, 0x1b, 0xfb, - 0x17, 0x7a, 0x96, 0xb7, 0x6b, 0xd9, 0xd8, 0xc7, 0x6c, 0x9e, 0x3e, 0x92, 0xe0, 0xd1, 0x89, 0x26, - 0x61, 0xac, 0x51, 0xa0, 0x00, 0x79, 0xdf, 0xb5, 0xa8, 0x89, 0x8c, 0xfe, 0xaa, 0x77, 0x86, 0xde, - 0x9a, 0xf9, 0x81, 0xc0, 0x2f, 0x48, 0x0c, 0x11, 0x07, 0x4b, 0x4c, 0xe9, 0x91, 0xd7, 0x26, 0x1b, - 0x21, 0xbc, 0xc0, 0x47, 0x08, 0xe7, 0x4e, 0x83, 0x17, 0x07, 0x4e, 0x83, 0x23, 0x1c, 0x3d, 0xeb, - 0x99, 0x10, 0xbb, 0x2e, 0xc9, 0x06, 0xfe, 0x8f, 0xbe, 0xc0, 0xee, 0x45, 0xd8, 0xbb, 0x8f, 0x9c, - 0x39, 0x88, 0x12, 0xd8, 0x3e, 0x6f, 0x56, 0xb0, 0xcf, 0xfb, 0x58, 0x34, 0x77, 0x72, 0x04, 0x8d, - 0xe9, 0x14, 0x92, 0xe3, 0xd8, 0xcd, 0x0f, 0xb0, 0xab, 0x7d, 0x52, 0x38, 0x90, 0x27, 0x23, 0xe3, - 0xc4, 0x59, 0x10, 0xe5, 0x40, 0x0a, 0x39, 0x60, 0xf6, 0x90, 0x93, 0x7a, 0xe0, 0x51, 0xf4, 0xd3, - 0xe9, 0xf2, 0xde, 0x78, 0x36, 0x76, 0x70, 0xac, 0xbe, 0xb9, 0x7c, 0xb7, 0x5e, 0x69, 0x2b, 0xf0, - 0xe0, 0x51, 0x7b, 0x7c, 0xa8, 0x9e, 0x1c, 0xa0, 0x8f, 0xd6, 0x74, 0xb4, 0xff, 0x21, 0x81, 0x22, - 0x35, 0x37, 0xee, 0x3a, 0x24, 0x84, 0xda, 0x2b, 0xc7, 0x81, 0x24, 0x31, 0xba, 0xc9, 0xe7, 0xd2, - 0x02, 0x30, 0x01, 0x03, 0xe3, 0xde, 0xcc, 0x00, 0xd0, 0xfe, 0x49, 0x02, 0x79, 0x64, 0x06, 0x89, - 0xc5, 0x8e, 0xf8, 0xac, 0xb0, 0x4b, 0x31, 0x23, 0x00, 0x44, 0x3e, 0x46, 0xbf, 0x97, 0xc1, 0x6c, - 0x9f, 0x64, 0x0c, 0x23, 0x97, 0x5c, 0x2f, 0xd0, 0x19, 0x41, 0x23, 0xfa, 0x8c, 0x99, 0x72, 0x26, - 0xb9, 0x25, 0x27, 0xf3, 0x93, 0x0e, 0x0e, 0x7d, 0x12, 0x61, 0x26, 0xb6, 0xb5, 0x7f, 0x95, 0x00, - 0x30, 0xa0, 0xe7, 0xf4, 0x2e, 0xc1, 0x4d, 0xd7, 0xd2, 0x1e, 0x1c, 0x01, 0x40, 0x9b, 0x7d, 0x2e, - 0x6a, 0xf6, 0x9f, 0x97, 0x44, 0x9d, 0x87, 0x39, 0xcd, 0x0b, 0x88, 0xc7, 0x88, 0xff, 0xc9, 0x60, - 0x86, 0xca, 0x91, 0xda, 0x94, 0x62, 0xc2, 0x0f, 0x3e, 0xd2, 0x3e, 0x28, 0xe4, 0x7c, 0x2c, 0xc2, - 0x51, 0x3a, 0x00, 0x2a, 0x63, 0x00, 0x70, 0x1c, 0xcc, 0x05, 0x00, 0x6c, 0x1a, 0x35, 0x05, 0x6a, - 0xef, 0x96, 0xb1, 0x87, 0x06, 0x19, 0xdc, 0x0e, 0xdf, 0xd3, 0xfc, 0xb9, 0xf0, 0x64, 0x9f, 0x91, - 0x47, 0x58, 0x7e, 0x46, 0x00, 0xfd, 0xae, 0xd0, 0xec, 0x5e, 0x80, 0xa1, 0x07, 0x4a, 0x7f, 0x75, - 0x56, 0x07, 0x0b, 0x9c, 0x55, 0xa2, 0x9e, 0x06, 0x27, 0xb9, 0x04, 0x32, 0xde, 0x75, 0x95, 0x63, - 0xaa, 0x06, 0x4e, 0x71, 0x6f, 0xe8, 0x03, 0xec, 0x2a, 0x39, 0xed, 0x5d, 0x7f, 0x92, 0x0b, 0xd7, - 0x7b, 0xde, 0x9f, 0xa7, 0xab, 0x6f, 0x9f, 0xe6, 0x83, 0x65, 0x76, 0x1c, 0xdb, 0x87, 0xf7, 0x33, - 0x6e, 0x2e, 0x61, 0x42, 0xa2, 0xd5, 0x70, 0x1a, 0xcc, 0xf8, 0x2e, 0xeb, 0xfa, 0x12, 0x3c, 0xb2, - 0x8a, 0x55, 0xe0, 0x15, 0xab, 0x01, 0xce, 0x5a, 0x76, 0xa7, 0xb7, 0xdf, 0x85, 0x06, 0xec, 0x99, - 0x48, 0x86, 0x5e, 0xd9, 0xab, 0xc2, 0x3e, 0xb4, 0xbb, 0xd0, 0xf6, 0x09, 0x9f, 0xc1, 0xb9, 0x59, - 0x81, 0x9c, 0xbc, 0x32, 0xde, 0xc9, 0x2b, 0xe3, 0x23, 0x87, 0x2d, 0x01, 0x27, 0xac, 0x01, 0xde, - 0x06, 0x00, 0xa9, 0xdb, 0x39, 0x0b, 0x5e, 0xa6, 0x6a, 0x78, 0xcd, 0xc0, 0x4a, 0x60, 0x33, 0xcc, - 0x60, 0x30, 0x99, 0xb5, 0xaf, 0x86, 0xea, 0xf7, 0x14, 0x4e, 0xfd, 0x6e, 0x16, 0x64, 0x21, 0x9d, - 0xd6, 0xf5, 0xc7, 0xd0, 0xba, 0x05, 0x30, 0x1b, 0xed, 0x46, 0xcb, 0xea, 0x35, 0xe0, 0xea, 0xc0, - 0x43, 0xb9, 0xa1, 0xeb, 0xd5, 0xd6, 0xd6, 0xe6, 0xc6, 0xaa, 0x51, 0xae, 0xea, 0x0a, 0x40, 0xfa, - 0x49, 0xf4, 0x32, 0x74, 0x2c, 0xce, 0x6b, 0x7f, 0x24, 0x81, 0x02, 0x3e, 0xf4, 0xad, 0x3d, 0x7d, - 0x42, 0x9a, 0xe3, 0x71, 0x4e, 0x53, 0xe1, 0xb8, 0x2b, 0x7e, 0x05, 0x0a, 0x15, 0x26, 0xe6, 0xea, - 0x50, 0x57, 0xa0, 0x24, 0x10, 0xca, 0x7e, 0x26, 0x84, 0x9a, 0x64, 0x6b, 0xd7, 0xb9, 0xfc, 0x1f, - 0xb9, 0x49, 0xa2, 0xfa, 0x1f, 0x71, 0x93, 0x1c, 0xc2, 0xc2, 0xd4, 0x9b, 0xe4, 0x90, 0x76, 0x97, - 0xd0, 0x4c, 0xb5, 0x8f, 0x16, 0xc2, 0xf9, 0xdf, 0xa7, 0xa4, 0x43, 0xed, 0x9d, 0x95, 0xc1, 0x82, - 0x65, 0xfb, 0xd0, 0xb5, 0xcd, 0xde, 0x4a, 0xcf, 0xdc, 0x09, 0xec, 0xd3, 0xc1, 0x4d, 0x90, 0x1a, - 0x93, 0xc7, 0xe0, 0xbf, 0x50, 0xcf, 0x00, 0xe0, 0xc3, 0xbd, 0x7e, 0xcf, 0xf4, 0x23, 0xd5, 0x63, - 0x52, 0x58, 0xed, 0xcb, 0xf3, 0xda, 0xf7, 0x18, 0x70, 0x15, 0x01, 0xad, 0x7d, 0xa5, 0x0f, 0x37, - 0x6d, 0xeb, 0x19, 0xfb, 0x38, 0xb6, 0x32, 0xd1, 0xd1, 0x61, 0xaf, 0xb8, 0x5d, 0xa1, 0x22, 0xbf, - 0x2b, 0xa4, 0xde, 0x01, 0xae, 0xc1, 0x61, 0xb3, 0xf1, 0x1d, 0x23, 0xe7, 0xad, 0xee, 0x0e, 0xf4, - 0x6b, 0xdb, 0xeb, 0x96, 0xe7, 0x59, 0xf6, 0x0e, 0x9e, 0x8e, 0x97, 0x8c, 0xf8, 0x0c, 0xda, 0xff, - 0x12, 0x8e, 0xdb, 0x14, 0xf4, 0x19, 0x23, 0xe2, 0x36, 0x39, 0xfc, 0xb6, 0x5d, 0xd4, 0x4e, 0xc3, - 0x55, 0x9d, 0xbc, 0xc0, 0xaa, 0x0e, 0x8b, 0x69, 0x41, 0x70, 0x75, 0xe0, 0x35, 0x42, 0x81, 0xa1, - 0x92, 0xaa, 0x91, 0x7d, 0xdf, 0xf7, 0x6d, 0x19, 0x2c, 0x92, 0xa2, 0x97, 0x1d, 0xe7, 0xe2, 0x9e, - 0xe9, 0x5e, 0xd4, 0x7e, 0xfa, 0x70, 0xbb, 0xc0, 0x89, 0xbb, 0x57, 0x71, 0x5b, 0xba, 0x03, 0xca, - 0x9b, 0x1f, 0x54, 0x5e, 0xed, 0x77, 0x84, 0xa7, 0x24, 0x9c, 0x3c, 0x83, 0x4a, 0x4d, 0x67, 0x7b, - 0x4b, 0xec, 0x78, 0xa4, 0x08, 0x83, 0xd9, 0x03, 0xff, 0x5b, 0x21, 0xf0, 0xc1, 0x38, 0xc2, 0xee, - 0x0c, 0x4c, 0x12, 0x77, 0xed, 0x6b, 0xe3, 0x61, 0x17, 0xf0, 0x35, 0x06, 0x76, 0x0a, 0x90, 0x2f, - 0x86, 0xce, 0x4c, 0xe8, 0x2f, 0x5b, 0xa1, 0x7c, 0x76, 0x68, 0xc6, 0xb0, 0x3c, 0x15, 0x34, 0x4f, - 0xf2, 0x2c, 0x34, 0xfb, 0x99, 0x62, 0xfa, 0x15, 0xe1, 0x1d, 0xb7, 0xa1, 0x02, 0x22, 0xdc, 0x4d, - 0xa7, 0x55, 0x8a, 0x6d, 0xd7, 0x89, 0xb3, 0x99, 0x3d, 0x9a, 0x2f, 0x2c, 0x80, 0xd9, 0x20, 0x7e, - 0x16, 0xbe, 0x91, 0x30, 0xc4, 0xf0, 0x14, 0x28, 0x7a, 0xce, 0xbe, 0xdb, 0x81, 0x74, 0x0f, 0x94, - 0x3e, 0x8d, 0xb1, 0x5f, 0x37, 0xd2, 0x5c, 0x38, 0x60, 0x91, 0xe4, 0x53, 0x5b, 0x24, 0xf1, 0xf6, - 0x6e, 0x82, 0xfd, 0xa0, 0xbd, 0x48, 0xf8, 0xda, 0x10, 0x0e, 0xb3, 0x16, 0xf4, 0x1f, 0x88, 0x46, - 0xc0, 0xaf, 0x0b, 0xed, 0x06, 0x8d, 0xa8, 0x49, 0x3a, 0x95, 0x6b, 0x8e, 0x61, 0x07, 0x3f, 0x18, - 0x3c, 0x28, 0xc8, 0x41, 0x0d, 0x60, 0x6c, 0xf0, 0x6e, 0x1a, 0x75, 0x45, 0xd6, 0x9e, 0x9d, 0x07, - 0x0a, 0x61, 0xad, 0x19, 0xda, 0x82, 0xda, 0xcb, 0x72, 0x47, 0x6d, 0xf0, 0xc6, 0xcf, 0x60, 0x7f, - 0x5f, 0x12, 0x0d, 0x36, 0xce, 0x09, 0x3e, 0xaa, 0x5d, 0x8c, 0x26, 0x8d, 0xd1, 0xcc, 0x12, 0x94, - 0x4f, 0x7b, 0x4b, 0x4e, 0x24, 0x76, 0xb9, 0x18, 0x8b, 0xd9, 0xf7, 0x4a, 0xdf, 0xc9, 0x07, 0x61, - 0x10, 0x57, 0x5c, 0x67, 0x6f, 0xd3, 0xed, 0x69, 0xff, 0x47, 0xe8, 0x6a, 0x88, 0x98, 0xd9, 0x85, - 0x14, 0x3f, 0xbb, 0xc0, 0x2b, 0xd2, 0xbd, 0x68, 0x2b, 0xac, 0x37, 0xc6, 0xf0, 0xad, 0xde, 0x00, - 0x16, 0xcd, 0x6e, 0x77, 0xc3, 0xdc, 0x81, 0x15, 0x34, 0x6d, 0xb7, 0x7d, 0x1a, 0x22, 0x6d, 0x20, - 0x35, 0x71, 0x2a, 0xc3, 0xf7, 0x91, 0x33, 0x07, 0xac, 0x52, 0xf1, 0x65, 0x58, 0x0e, 0x44, 0x2a, - 0xbf, 0xa9, 0x0c, 0x7f, 0x68, 0xc8, 0xe8, 0xec, 0x9a, 0x51, 0x40, 0x47, 0xfa, 0x24, 0xe8, 0x8b, - 0x25, 0xc0, 0x77, 0xf6, 0x9a, 0xf7, 0x6b, 0x12, 0x98, 0x41, 0x78, 0x94, 0xbb, 0x5d, 0xed, 0x11, - 0x5c, 0xdc, 0xd3, 0x58, 0x6f, 0xb8, 0xe7, 0x0b, 0xbb, 0x26, 0x06, 0x35, 0x24, 0xf4, 0x63, 0x30, - 0x89, 0x84, 0x28, 0x71, 0x42, 0x14, 0x8b, 0x5f, 0x9a, 0x58, 0x44, 0xf6, 0xe2, 0xfb, 0xac, 0x04, - 0x16, 0x82, 0x79, 0xc6, 0x0a, 0xf4, 0x3b, 0xbb, 0xda, 0x6d, 0xa2, 0xeb, 0x5c, 0xb4, 0x25, 0x86, - 0x5b, 0xc2, 0x3d, 0xed, 0x7b, 0xb9, 0x94, 0x2a, 0xcf, 0x95, 0x1c, 0xb3, 0x48, 0x98, 0x4a, 0x17, - 0x93, 0x08, 0x66, 0x2f, 0xcc, 0xaf, 0x4a, 0x00, 0xb4, 0x9d, 0x70, 0xb2, 0x7c, 0x08, 0x49, 0xfe, - 0x8c, 0xf0, 0x6e, 0x31, 0xad, 0x78, 0x54, 0x6c, 0xfa, 0x9e, 0x43, 0xd0, 0x99, 0x6a, 0x54, 0x49, - 0x53, 0x69, 0xeb, 0xb3, 0xd5, 0xfd, 0x7e, 0xcf, 0xea, 0x98, 0xfe, 0xa0, 0x07, 0x60, 0xbc, 0x78, - 0xf1, 0x75, 0xde, 0xa9, 0x8c, 0xc6, 0xb0, 0x8c, 0x18, 0x59, 0x92, 0x38, 0x41, 0x52, 0x10, 0x27, - 0x48, 0xd0, 0xab, 0x67, 0x04, 0xf1, 0x29, 0xa8, 0xa7, 0x0c, 0x8e, 0x37, 0xfb, 0xd0, 0x5e, 0x76, - 0xa1, 0xd9, 0xed, 0xb8, 0xfb, 0x7b, 0x17, 0x3c, 0xd6, 0x7d, 0x35, 0x59, 0x47, 0x99, 0x95, 0x6b, - 0x89, 0x5b, 0xb9, 0xd6, 0x7e, 0x4c, 0x16, 0x8d, 0xe4, 0xc6, 0xec, 0xaf, 0x30, 0x3c, 0x8c, 0x31, - 0xd4, 0xa5, 0x72, 0xba, 0x1a, 0x58, 0xa4, 0xce, 0xa7, 0x59, 0xa4, 0x7e, 0xb3, 0x50, 0x5c, 0x38, - 0xa1, 0x7a, 0x4d, 0xc5, 0x77, 0x6e, 0xb1, 0x05, 0xfd, 0x18, 0x78, 0xaf, 0x07, 0x0b, 0x17, 0xa2, - 0x37, 0x21, 0xc4, 0x7c, 0xe2, 0x10, 0x8f, 0xd6, 0xb7, 0xa6, 0x5d, 0xa1, 0xe1, 0x59, 0x88, 0x41, - 0x37, 0x44, 0x50, 0x12, 0x71, 0x9b, 0x4b, 0xb5, 0xdc, 0x92, 0x58, 0x7e, 0xf6, 0x28, 0x7c, 0x52, - 0x02, 0x73, 0xf8, 0x92, 0xf2, 0xe5, 0x2b, 0xf8, 0x20, 0xa8, 0xa0, 0x51, 0xf2, 0x42, 0x56, 0xcc, - 0x2a, 0xc8, 0xf7, 0x2c, 0xfb, 0x62, 0xe0, 0xef, 0x88, 0xfe, 0x47, 0x57, 0x9c, 0x4a, 0x43, 0xae, - 0x38, 0x0d, 0xb7, 0x49, 0xc2, 0x72, 0x63, 0x46, 0xd3, 0x37, 0xe4, 0x44, 0xae, 0x38, 0x1d, 0x49, - 0x2e, 0x7b, 0x31, 0xfe, 0x55, 0x1e, 0x14, 0x5b, 0xd0, 0x74, 0x3b, 0xbb, 0xda, 0xfb, 0xa5, 0xa1, - 0x53, 0x89, 0x12, 0x3f, 0x95, 0x58, 0x01, 0x33, 0xdb, 0x56, 0xcf, 0x87, 0x2e, 0xf1, 0x01, 0x67, - 0xbb, 0x76, 0xd2, 0xc4, 0x97, 0x7b, 0x4e, 0xe7, 0xe2, 0x12, 0x35, 0xed, 0x97, 0x82, 0x78, 0xd3, - 0x4b, 0x2b, 0xf8, 0x23, 0x23, 0xf8, 0x18, 0x19, 0x84, 0x9e, 0xe3, 0xfa, 0x71, 0xf7, 0x17, 0xc5, - 0x50, 0x69, 0x39, 0xae, 0x6f, 0x90, 0x0f, 0x11, 0xcc, 0xdb, 0xfb, 0xbd, 0x5e, 0x1b, 0xde, 0xef, - 0x07, 0xd3, 0xba, 0xe0, 0x19, 0x19, 0x8b, 0xce, 0xf6, 0xb6, 0x07, 0xc9, 0xa2, 0x42, 0xc1, 0xa0, - 0x4f, 0xea, 0x49, 0x50, 0xe8, 0x59, 0x7b, 0x16, 0x99, 0x88, 0x14, 0x0c, 0xf2, 0xa0, 0xde, 0x04, - 0x94, 0x68, 0x0e, 0x44, 0x18, 0x3d, 0x5d, 0xc4, 0x4d, 0xf3, 0x40, 0x3a, 0xd2, 0x99, 0x8b, 0xf0, - 0x8a, 0x77, 0x7a, 0x06, 0xbf, 0xc7, 0xff, 0xb5, 0xd7, 0xa6, 0xdd, 0x30, 0x21, 0x12, 0x8f, 0x9f, - 0xe1, 0xba, 0xb0, 0xe3, 0xb8, 0xdd, 0x40, 0x36, 0xf1, 0x13, 0x0c, 0x9a, 0x2f, 0xdd, 0x36, 0xc7, - 0xd0, 0xc2, 0xb3, 0xd7, 0xb4, 0xf7, 0x14, 0x51, 0xb7, 0x89, 0x8a, 0x3e, 0x6f, 0xf9, 0xbb, 0xeb, - 0xd0, 0x37, 0xb5, 0xbf, 0x92, 0x87, 0x6a, 0xdc, 0xdc, 0xff, 0xaf, 0x71, 0x23, 0x34, 0x8e, 0xc4, - 0x0c, 0xf3, 0xf7, 0x5d, 0x1b, 0xc9, 0x91, 0xfa, 0xd1, 0x32, 0x29, 0xea, 0x1d, 0xe0, 0x9a, 0xe8, - 0x29, 0x58, 0x4a, 0xad, 0x32, 0xae, 0xb5, 0x25, 0x23, 0x3e, 0x83, 0xba, 0x01, 0x1e, 0x4e, 0x5e, - 0xae, 0xb5, 0xd7, 0xeb, 0x6b, 0xd6, 0xce, 0x6e, 0xcf, 0xda, 0xd9, 0xf5, 0xbd, 0x9a, 0xed, 0xf9, - 0xd0, 0xec, 0x36, 0xb7, 0x0d, 0x72, 0xf3, 0x18, 0xc0, 0x74, 0x44, 0xb2, 0xf2, 0x3e, 0xe2, 0x62, - 0xa3, 0x1b, 0xab, 0x29, 0x31, 0x2d, 0xe5, 0x09, 0xa8, 0xa5, 0x78, 0xfb, 0xbd, 0x10, 0xd3, 0x6b, - 0x07, 0x30, 0x8d, 0x54, 0x7d, 0xbf, 0x87, 0x9b, 0x0b, 0xce, 0x9c, 0x76, 0x9c, 0x4b, 0xe0, 0x24, - 0xfb, 0x66, 0xf3, 0x7f, 0x8a, 0xa0, 0xb0, 0xea, 0x9a, 0xfd, 0x5d, 0xed, 0xd9, 0x4c, 0xff, 0x3c, - 0xa9, 0x36, 0x11, 0x6a, 0xa7, 0x34, 0x4a, 0x3b, 0xe5, 0x11, 0xda, 0x99, 0x67, 0xb4, 0x33, 0x7e, - 0xd1, 0xf9, 0x2c, 0x98, 0xef, 0x38, 0xbd, 0x1e, 0xec, 0x20, 0x79, 0xd4, 0xba, 0x78, 0xb5, 0x67, - 0xd6, 0xe0, 0xd2, 0x70, 0x4c, 0x7e, 0xe8, 0xb7, 0xc8, 0x1a, 0x3b, 0x51, 0xfa, 0x28, 0x41, 0x7b, - 0x99, 0x04, 0xf2, 0x7a, 0x77, 0x07, 0x72, 0xeb, 0xf0, 0x39, 0x66, 0x1d, 0xfe, 0x14, 0x28, 0xfa, - 0xa6, 0xbb, 0x03, 0xfd, 0x60, 0x9d, 0x80, 0x3c, 0x85, 0x57, 0x05, 0xc8, 0xcc, 0x55, 0x01, 0x3f, - 0x04, 0xf2, 0x48, 0x66, 0xd4, 0x2d, 0xfe, 0xe1, 0xc3, 0xe0, 0xc7, 0xb2, 0x5f, 0x42, 0x25, 0x2e, - 0xa1, 0x5a, 0x1b, 0xf8, 0x83, 0x41, 0xac, 0x0b, 0x07, 0x43, 0xd9, 0x5e, 0x0b, 0x66, 0xad, 0x8e, - 0x63, 0xd7, 0xf6, 0xcc, 0x1d, 0x48, 0xab, 0x19, 0x25, 0x04, 0x6f, 0xf5, 0x3d, 0xe7, 0x3e, 0x8b, - 0x2e, 0x6a, 0x45, 0x09, 0xa8, 0x0a, 0xbb, 0x56, 0xb7, 0x0b, 0x6d, 0xda, 0xb2, 0xe9, 0xd3, 0xd9, - 0x33, 0x20, 0x8f, 0x78, 0x40, 0xfa, 0x83, 0x8c, 0x05, 0xe5, 0x98, 0x3a, 0x8f, 0x9a, 0x15, 0x69, - 0xbc, 0x4a, 0x8e, 0x5f, 0x73, 0x15, 0xf1, 0x1a, 0x22, 0x95, 0x1b, 0xde, 0xb8, 0x1e, 0x0d, 0x0a, - 0xb6, 0xd3, 0x85, 0x23, 0x07, 0x21, 0x92, 0x4b, 0x7d, 0x3c, 0x28, 0xc0, 0x2e, 0xea, 0x15, 0x64, - 0x9c, 0xfd, 0x4c, 0xb2, 0x2c, 0x0d, 0x92, 0x39, 0x9d, 0x6b, 0xd2, 0x30, 0x6e, 0xb3, 0x6f, 0x80, - 0x3f, 0x31, 0x03, 0x8e, 0x93, 0x3e, 0xa0, 0xb5, 0x7f, 0x01, 0x91, 0xba, 0x00, 0xb5, 0xd7, 0x0f, - 0x1f, 0xb8, 0x8e, 0xf3, 0xca, 0x7e, 0x12, 0x14, 0xbc, 0xfd, 0x0b, 0xa1, 0x11, 0x4a, 0x1e, 0xd8, - 0xa6, 0x2b, 0x4d, 0x64, 0x38, 0x93, 0xc7, 0x1d, 0xce, 0xb8, 0xa1, 0x49, 0x0e, 0x1a, 0x7f, 0x34, - 0x90, 0x91, 0x03, 0x1d, 0xc1, 0x40, 0x36, 0x6c, 0x18, 0x3a, 0x0d, 0x66, 0xcc, 0x6d, 0x1f, 0xba, - 0x91, 0x99, 0x48, 0x1f, 0xd1, 0x50, 0x79, 0x01, 0x6e, 0x3b, 0x2e, 0x12, 0x0b, 0x09, 0x2b, 0x1b, - 0x3e, 0x33, 0x2d, 0x17, 0x70, 0x3b, 0x68, 0x37, 0x83, 0x13, 0xb6, 0x53, 0x85, 0x7d, 0x2a, 0x67, - 0x82, 0xe2, 0x02, 0xb9, 0xdd, 0xfd, 0xc0, 0x8b, 0x03, 0x5d, 0xc9, 0xe2, 0xc1, 0xae, 0x44, 0xfb, - 0x7c, 0xda, 0x39, 0xf3, 0x00, 0xd0, 0x13, 0xb3, 0xd0, 0xd4, 0x27, 0x81, 0xf9, 0x2e, 0xf5, 0x10, - 0xeb, 0x58, 0x61, 0x2b, 0x89, 0xfd, 0x8e, 0xcb, 0x1c, 0x29, 0x52, 0x9e, 0x55, 0xa4, 0x55, 0x50, - 0xc2, 0xc7, 0xb1, 0x91, 0x26, 0x15, 0x06, 0x3c, 0xf2, 0xf1, 0xb4, 0x2e, 0xac, 0x14, 0x23, 0xb6, - 0xa5, 0x0a, 0xfd, 0xc4, 0x08, 0x3f, 0x4e, 0x37, 0xfb, 0x4e, 0x96, 0x50, 0xf6, 0xcd, 0xf1, 0x57, - 0x8a, 0xe0, 0x9a, 0x8a, 0xeb, 0x78, 0x1e, 0x3e, 0x82, 0x33, 0xd8, 0x30, 0xdf, 0x28, 0x71, 0x97, - 0x06, 0x3d, 0xa0, 0x9b, 0xdf, 0xb0, 0x06, 0x35, 0xbd, 0xa6, 0xf1, 0xe7, 0xc2, 0x41, 0x6f, 0xc2, - 0xfd, 0x87, 0x18, 0xa1, 0xff, 0xc7, 0x68, 0x24, 0xef, 0xc9, 0x89, 0xc4, 0xe1, 0x49, 0x29, 0xab, - 0xec, 0x9b, 0xcb, 0x57, 0x24, 0xf0, 0xe0, 0x41, 0x6e, 0x36, 0x6d, 0x2f, 0x6c, 0x30, 0x0f, 0x1d, - 0xd1, 0x5e, 0xf8, 0xb8, 0x2d, 0x89, 0x77, 0x04, 0xc7, 0xd4, 0x9d, 0x29, 0x2d, 0x66, 0xb1, 0x24, - 0x3a, 0xd0, 0x93, 0x74, 0x47, 0x70, 0x6a, 0xf2, 0xd9, 0x0b, 0xf7, 0xf7, 0xf3, 0xe0, 0xf8, 0xaa, - 0xeb, 0xec, 0xf7, 0xbd, 0xa8, 0x07, 0xfa, 0xd3, 0xe1, 0x1b, 0xb2, 0x45, 0x11, 0xd3, 0xe0, 0x3a, - 0x30, 0xe7, 0x52, 0x6b, 0x2e, 0xda, 0x9e, 0x65, 0x93, 0xd8, 0xde, 0x4b, 0x3e, 0x4c, 0xef, 0x15, - 0xf5, 0x33, 0x79, 0xae, 0x9f, 0x19, 0xec, 0x39, 0x0a, 0x43, 0x7a, 0x8e, 0x3f, 0x91, 0x52, 0x0e, - 0xaa, 0x03, 0x22, 0x8a, 0xe9, 0x2f, 0x2a, 0xa0, 0xb8, 0x83, 0x33, 0xd2, 0xee, 0xe2, 0x51, 0x62, - 0x35, 0xc3, 0xc4, 0x0d, 0xfa, 0x69, 0x24, 0x57, 0x99, 0xd5, 0xe1, 0x54, 0x03, 0x5c, 0x32, 0xb7, - 0xd9, 0x2b, 0xd5, 0x6b, 0xf3, 0x60, 0x3e, 0x2c, 0xbd, 0xd6, 0xf5, 0xb8, 0xe8, 0xb0, 0x8c, 0x46, - 0x2d, 0x88, 0x68, 0xd4, 0x81, 0x75, 0xe6, 0x70, 0xd4, 0x91, 0x99, 0x51, 0x67, 0xe8, 0xe8, 0x32, - 0x1f, 0x33, 0xba, 0x68, 0xcf, 0x92, 0x45, 0xaf, 0xdd, 0xe3, 0xbb, 0x56, 0x5c, 0x9b, 0x07, 0xf2, - 0x60, 0x21, 0x78, 0xf9, 0xdf, 0xe8, 0x5a, 0x65, 0xaf, 0x24, 0x1f, 0x91, 0xc0, 0x89, 0x83, 0x9d, - 0xf9, 0xc3, 0x78, 0x2f, 0x35, 0x54, 0x27, 0x2f, 0xf4, 0x52, 0xc3, 0x4f, 0xfc, 0x26, 0x5d, 0x62, - 0x10, 0x14, 0xce, 0xde, 0x1b, 0xdd, 0x89, 0x8b, 0x85, 0x39, 0x11, 0x24, 0x9a, 0xbd, 0x00, 0x7f, - 0x56, 0x06, 0xb3, 0x2d, 0xe8, 0xd7, 0xcd, 0x2b, 0xce, 0xbe, 0xaf, 0x99, 0xa2, 0xdb, 0x73, 0x4f, - 0x04, 0xc5, 0x1e, 0xfe, 0x04, 0x77, 0x30, 0x6c, 0xd0, 0x52, 0x76, 0x7f, 0x0b, 0xfb, 0x06, 0x11, - 0xd2, 0x06, 0xcd, 0xcf, 0x47, 0x9f, 0x11, 0xd9, 0x1d, 0x0d, 0xb9, 0x9b, 0xc8, 0xd6, 0x4e, 0xaa, - 0xbd, 0xd3, 0xb8, 0xa2, 0xb3, 0x87, 0xe5, 0xc7, 0x64, 0xb0, 0xd0, 0x82, 0x7e, 0xcd, 0x5b, 0x31, - 0x2f, 0x39, 0xae, 0xe5, 0x43, 0x6d, 0x55, 0x14, 0x9a, 0x33, 0x00, 0x58, 0xe1, 0x67, 0x34, 0x4e, - 0x16, 0x93, 0xa2, 0xbd, 0x25, 0xad, 0xa3, 0x10, 0xc7, 0xc7, 0x44, 0x40, 0x48, 0xe5, 0x63, 0x91, - 0x54, 0xfc, 0x14, 0x2e, 0x0e, 0x97, 0x28, 0x10, 0x65, 0xb7, 0xb3, 0x6b, 0x5d, 0x82, 0xdd, 0x94, - 0x40, 0x04, 0x9f, 0x45, 0x40, 0x84, 0x84, 0x52, 0xbb, 0xaf, 0x70, 0x7c, 0x4c, 0xc2, 0x7d, 0x25, - 0x89, 0xe0, 0x54, 0xc2, 0x5a, 0xa1, 0xae, 0x87, 0xae, 0x67, 0xde, 0x25, 0x2a, 0xd6, 0xc8, 0x64, - 0x93, 0x58, 0x93, 0x6d, 0xac, 0x8e, 0x85, 0x94, 0x3d, 0x4a, 0xa7, 0xf3, 0x59, 0x74, 0x2c, 0x43, - 0x8b, 0xce, 0x5e, 0xe8, 0xef, 0x93, 0xc1, 0xd5, 0x61, 0xbc, 0x97, 0x16, 0xf4, 0xab, 0xa6, 0xb7, - 0x7b, 0xc1, 0x31, 0xdd, 0xae, 0x56, 0x99, 0xc0, 0x81, 0x43, 0xed, 0x8b, 0x2c, 0x08, 0x0d, 0x1e, - 0x84, 0xa1, 0xae, 0xa4, 0x43, 0x79, 0x99, 0x44, 0x27, 0x93, 0xe8, 0xed, 0xfa, 0x8e, 0x10, 0xac, - 0xa7, 0x72, 0x60, 0xdd, 0x39, 0x2e, 0x8b, 0xd9, 0x03, 0xf7, 0xf3, 0x64, 0x44, 0x60, 0xbc, 0x9e, - 0xef, 0x15, 0x05, 0x2c, 0xc6, 0xeb, 0x55, 0x8e, 0xf5, 0x7a, 0x1d, 0x6b, 0x8c, 0x18, 0xe9, 0xb1, - 0x9c, 0xed, 0x18, 0x71, 0x84, 0xde, 0xc8, 0xef, 0x92, 0x81, 0x82, 0x03, 0x7e, 0x31, 0x1e, 0xe1, - 0x6c, 0xfc, 0xed, 0x64, 0x74, 0x0e, 0x78, 0x9f, 0xcf, 0xa4, 0xf5, 0x3e, 0xd7, 0xde, 0x99, 0xd6, - 0xc7, 0x7c, 0x90, 0xdb, 0x89, 0x20, 0x96, 0xca, 0x85, 0x7c, 0x04, 0x07, 0xd9, 0x83, 0xf6, 0x93, - 0x32, 0x00, 0xa8, 0x41, 0xd3, 0xb3, 0x11, 0x4f, 0x13, 0x85, 0xeb, 0x16, 0xd6, 0xef, 0x1e, 0x01, - 0x75, 0xf5, 0x00, 0x50, 0x84, 0x62, 0x74, 0xea, 0xe2, 0xf5, 0x69, 0x7d, 0x2b, 0x23, 0xae, 0x26, - 0x02, 0x4b, 0x2a, 0x6f, 0xcb, 0xd8, 0xb2, 0xb3, 0x07, 0xe4, 0x57, 0x25, 0x50, 0x68, 0x3b, 0x2d, - 0xe8, 0x1f, 0xde, 0x14, 0x48, 0x1d, 0x35, 0x00, 0x97, 0x3b, 0x89, 0xa8, 0x01, 0xc3, 0x08, 0x65, - 0x2f, 0xba, 0xf7, 0x4a, 0x60, 0xbe, 0xed, 0x54, 0xc2, 0xc5, 0x29, 0x71, 0x5f, 0xd5, 0x7f, 0xc9, - 0xa5, 0x5c, 0xc3, 0x60, 0x8b, 0x89, 0x11, 0x58, 0xaa, 0xd5, 0x83, 0x04, 0x7a, 0xd9, 0xcb, 0xed, - 0x36, 0x70, 0x7c, 0xd3, 0xee, 0x3a, 0x06, 0xec, 0x3a, 0x74, 0xa5, 0x5b, 0x55, 0x41, 0x7e, 0xdf, - 0xee, 0x3a, 0x98, 0xe5, 0x82, 0x81, 0xff, 0xa3, 0x34, 0x17, 0x76, 0x1d, 0xea, 0x1b, 0x80, 0xff, - 0x6b, 0x7f, 0x2e, 0x83, 0x3c, 0xfa, 0x56, 0x5c, 0xd4, 0xef, 0x92, 0x53, 0xc6, 0x41, 0x40, 0xe4, - 0x27, 0x62, 0x09, 0xdd, 0xc5, 0xac, 0xfd, 0x13, 0x0f, 0xd6, 0x87, 0xc7, 0x95, 0xc7, 0x88, 0x22, - 0x5a, 0xf3, 0x57, 0x4f, 0x83, 0x99, 0x0b, 0x3d, 0xa7, 0x73, 0x31, 0x3a, 0xae, 0x4f, 0x1f, 0xd5, - 0x9b, 0x40, 0xc1, 0x35, 0xed, 0x1d, 0x48, 0xf7, 0x14, 0x4e, 0x0e, 0xf4, 0x85, 0xd8, 0xeb, 0xc5, - 0x20, 0x59, 0xb4, 0x77, 0xa6, 0x89, 0xc0, 0x30, 0xa4, 0xf2, 0xe9, 0xf4, 0xa1, 0x3a, 0xc6, 0xc9, - 0x33, 0x05, 0xcc, 0x57, 0xca, 0x0d, 0x72, 0x0f, 0x62, 0xf3, 0x9c, 0xae, 0xc8, 0x18, 0x66, 0x24, - 0x93, 0x0c, 0x61, 0x46, 0xe4, 0xff, 0xc3, 0xc2, 0x3c, 0xa4, 0xf2, 0x47, 0x01, 0xf3, 0x67, 0x25, - 0xb0, 0x50, 0xb7, 0x3c, 0x3f, 0xce, 0xdb, 0x3f, 0x21, 0xde, 0xef, 0x8b, 0xd2, 0x9a, 0xca, 0x5c, - 0x39, 0xc2, 0x81, 0x7e, 0x53, 0x99, 0xc3, 0x49, 0x45, 0x4c, 0xe7, 0x58, 0x0a, 0xe6, 0x80, 0x5c, - 0x82, 0x2f, 0x2c, 0xc9, 0xd4, 0x86, 0x52, 0x54, 0xc8, 0xf4, 0x0d, 0xa5, 0xd8, 0xb2, 0xb3, 0x97, - 0xef, 0x9f, 0x4b, 0xe0, 0x04, 0x2a, 0x3e, 0x69, 0x59, 0x2a, 0x5e, 0xcc, 0x23, 0x97, 0xa5, 0x52, - 0xaf, 0x8c, 0x1f, 0xe0, 0x65, 0x12, 0x2b, 0xe3, 0xa3, 0x88, 0x4e, 0x59, 0xcc, 0x31, 0xcb, 0xb0, - 0xa3, 0xc4, 0x9c, 0xb0, 0x0c, 0x3b, 0xbe, 0x98, 0x93, 0x97, 0x62, 0xc7, 0x14, 0xf3, 0x91, 0x2d, - 0xb0, 0xfe, 0x92, 0x1c, 0x8a, 0x39, 0x76, 0x6d, 0x23, 0x41, 0xcc, 0xa9, 0x4f, 0xf4, 0x6a, 0xef, - 0x1e, 0x53, 0xf0, 0x13, 0x5e, 0xdf, 0x18, 0x07, 0xa6, 0x23, 0x5c, 0xe3, 0xf8, 0x05, 0x19, 0x2c, - 0x52, 0x2e, 0x86, 0x4f, 0x99, 0x13, 0x30, 0x4a, 0x3d, 0x65, 0x4e, 0x7d, 0x06, 0x88, 0xe7, 0x6c, - 0xfa, 0x67, 0x80, 0x12, 0xcb, 0xcf, 0x1e, 0x9c, 0xbf, 0xcc, 0x83, 0x53, 0x88, 0x85, 0x75, 0xa7, - 0x6b, 0x6d, 0x5f, 0x21, 0x5c, 0x9c, 0x33, 0x7b, 0xfb, 0xd0, 0xd3, 0x3e, 0x20, 0x89, 0xa2, 0xf4, - 0x9f, 0x01, 0x70, 0xfa, 0xd0, 0x25, 0x71, 0xdc, 0x28, 0x50, 0x77, 0xc4, 0x55, 0xf6, 0x60, 0x49, - 0xe1, 0xf5, 0x39, 0xcd, 0x80, 0x88, 0xc1, 0xd0, 0x43, 0x56, 0xe1, 0x6c, 0xf8, 0x66, 0xd0, 0xc1, - 0x23, 0x77, 0xd0, 0xc1, 0xe3, 0x46, 0x20, 0x9b, 0xdd, 0x6e, 0x08, 0xd5, 0xe0, 0x66, 0x36, 0x2e, - 0xd3, 0x40, 0x59, 0x50, 0x4e, 0x0f, 0x46, 0x47, 0xf3, 0x62, 0x72, 0x7a, 0xd0, 0x57, 0x97, 0x40, - 0x91, 0x5c, 0x27, 0x1e, 0xae, 0xe8, 0x0f, 0xcf, 0x4c, 0x73, 0xf1, 0xa6, 0x5d, 0x93, 0x57, 0xc3, - 0xdb, 0x52, 0x49, 0x66, 0x58, 0x3f, 0x1d, 0xd9, 0xc9, 0x06, 0xa7, 0x60, 0x4f, 0x1e, 0x9b, 0xf2, - 0x74, 0x76, 0xc3, 0xca, 0xfd, 0x7e, 0xef, 0x4a, 0x9b, 0x06, 0x1e, 0x48, 0xb5, 0x1b, 0xc6, 0xc4, - 0x2f, 0x90, 0x0e, 0xc4, 0x2f, 0x48, 0xbd, 0x1b, 0xc6, 0xf1, 0x31, 0x89, 0xdd, 0xb0, 0x24, 0x82, - 0xd9, 0x8b, 0xf6, 0x6f, 0x4a, 0xc4, 0x6a, 0xa6, 0xb7, 0x11, 0xfc, 0xc3, 0x70, 0xcf, 0x6a, 0xc0, - 0x3b, 0xbb, 0x0c, 0xbb, 0xa8, 0x20, 0xf1, 0x16, 0x16, 0xf5, 0xf1, 0xa0, 0xb8, 0xed, 0xb8, 0x7b, - 0x66, 0xb0, 0x71, 0x3f, 0x78, 0x52, 0x84, 0xde, 0x00, 0xb0, 0x82, 0xf3, 0x18, 0x34, 0x2f, 0x9a, - 0x8f, 0x3c, 0xd3, 0xea, 0xd3, 0xa0, 0x8f, 0xe8, 0xaf, 0x7a, 0x3d, 0x58, 0xa0, 0xb1, 0x1f, 0x1b, - 0xd0, 0xf3, 0x61, 0x97, 0x46, 0xb4, 0xe0, 0x13, 0xd5, 0xb3, 0x60, 0x9e, 0x26, 0xac, 0x58, 0x3d, - 0xe8, 0xd1, 0xa0, 0x16, 0x5c, 0x9a, 0x7a, 0x0a, 0x14, 0x2d, 0xef, 0x6e, 0xcf, 0xb1, 0x69, 0x40, - 0x3e, 0xfa, 0xa4, 0xde, 0x08, 0x8e, 0xd3, 0x7c, 0xa1, 0xb1, 0x4a, 0x0e, 0xec, 0x0c, 0x26, 0x23, - 0xd5, 0xb2, 0x9d, 0x0d, 0xd7, 0xd9, 0x71, 0xa1, 0xe7, 0xe1, 0x53, 0x53, 0x25, 0x83, 0x49, 0x51, - 0xef, 0x05, 0x27, 0x7a, 0x96, 0x7d, 0xd1, 0xc3, 0x31, 0x82, 0x57, 0xa8, 0xdb, 0xd8, 0xfc, 0x90, - 0xd8, 0xdd, 0x4c, 0x63, 0xa3, 0x72, 0x60, 0x3f, 0x31, 0x0e, 0x52, 0x51, 0x6f, 0x02, 0x0a, 0xe5, - 0x66, 0xd9, 0xec, 0x5c, 0xc4, 0xef, 0xa9, 0x3b, 0xea, 0x81, 0x74, 0x46, 0x18, 0x24, 0x8c, 0xfe, - 0x22, 0x27, 0x0c, 0x12, 0x49, 0xff, 0x25, 0x39, 0x30, 0xcf, 0x15, 0x60, 0x02, 0x35, 0xe8, 0x16, - 0xbd, 0xf3, 0xbb, 0x96, 0x0f, 0x11, 0x73, 0xf4, 0xac, 0xcb, 0x63, 0x47, 0x30, 0x6f, 0x1c, 0xf8, - 0xd0, 0x18, 0x42, 0x0c, 0xf1, 0x45, 0x3a, 0x3c, 0xec, 0x59, 0xe6, 0x51, 0x5b, 0x95, 0x4b, 0xd3, - 0x9e, 0x09, 0xd4, 0x83, 0xd4, 0x18, 0x2f, 0x90, 0x5c, 0x3a, 0x2f, 0x10, 0x24, 0x37, 0xb3, 0xd7, - 0x73, 0x2e, 0xc3, 0x6e, 0x48, 0x96, 0xea, 0xea, 0x81, 0x74, 0xed, 0x0b, 0xe3, 0xcc, 0x0b, 0x53, - 0x5f, 0xac, 0x81, 0x1a, 0xd9, 0x7e, 0xa7, 0x03, 0x61, 0x97, 0x1e, 0x5c, 0x0b, 0x1e, 0x53, 0x5e, - 0xb9, 0x91, 0x7a, 0x16, 0x79, 0x44, 0x77, 0x6e, 0xbc, 0x3f, 0xba, 0xf9, 0x64, 0x5f, 0xa4, 0xab, - 0x49, 0x3a, 0x1f, 0x3f, 0x56, 0xa7, 0xa2, 0xbd, 0x37, 0xed, 0x69, 0xd1, 0x44, 0x4c, 0x4f, 0xa1, - 0xc1, 0xdd, 0xdb, 0xef, 0x85, 0xc7, 0x9d, 0xc8, 0x53, 0x4a, 0xf4, 0x52, 0x1d, 0x20, 0x3d, 0x22, - 0xe4, 0x3e, 0x7e, 0x35, 0x28, 0x92, 0x9b, 0x0b, 0xb5, 0x97, 0x2c, 0x0e, 0x85, 0x6e, 0x91, 0x87, - 0x6e, 0x13, 0xcc, 0xdb, 0x0e, 0x2a, 0x6e, 0xc3, 0x74, 0xcd, 0x3d, 0x2f, 0x69, 0x79, 0x9f, 0xd0, - 0x0d, 0x6d, 0xb9, 0x06, 0xf3, 0xd9, 0xda, 0x31, 0x83, 0x23, 0xa3, 0xfe, 0x5f, 0xe0, 0xf8, 0x05, - 0x1a, 0x9a, 0xc3, 0xa3, 0x94, 0xa5, 0x78, 0xe7, 0xd7, 0x01, 0xca, 0xcb, 0xfc, 0x97, 0x6b, 0xc7, - 0x8c, 0x41, 0x62, 0xea, 0x7f, 0x02, 0x8b, 0xe8, 0xb1, 0xeb, 0x5c, 0x0e, 0x18, 0x97, 0xe3, 0x67, - 0x00, 0x03, 0xe4, 0xd7, 0xb9, 0x0f, 0xd7, 0x8e, 0x19, 0x03, 0xa4, 0xd4, 0x26, 0x00, 0xbb, 0xfe, - 0x5e, 0x8f, 0x12, 0xce, 0xc7, 0x77, 0x26, 0x03, 0x84, 0xd7, 0xc2, 0x8f, 0xd6, 0x8e, 0x19, 0x0c, - 0x09, 0xb5, 0x0e, 0x66, 0xfd, 0xfb, 0x7d, 0x4a, 0xaf, 0x10, 0xef, 0x75, 0x32, 0x40, 0xaf, 0x1d, - 0x7c, 0xb3, 0x76, 0xcc, 0x88, 0x08, 0xa8, 0x35, 0x50, 0xea, 0x5f, 0xa0, 0xc4, 0x8a, 0xf1, 0x23, - 0xd5, 0x00, 0xb1, 0x8d, 0x0b, 0x21, 0xad, 0xf0, 0x73, 0xc4, 0x58, 0xc7, 0xbb, 0x44, 0x69, 0xcd, - 0x08, 0x33, 0x56, 0x09, 0xbe, 0x41, 0x8c, 0x85, 0x04, 0xd4, 0x1a, 0x98, 0xf5, 0x6c, 0xb3, 0xef, - 0xed, 0x3a, 0xbe, 0x77, 0xba, 0x34, 0xe0, 0xa0, 0x1c, 0x4f, 0xad, 0x45, 0xbf, 0x31, 0xa2, 0xaf, - 0xd5, 0xc7, 0x83, 0xab, 0xf7, 0xfb, 0x5d, 0xd3, 0x87, 0xfa, 0xfd, 0x96, 0x17, 0xdd, 0x5e, 0x19, - 0x9c, 0xcb, 0x1d, 0xfe, 0x52, 0x5d, 0xa2, 0x47, 0x15, 0x01, 0x6e, 0x97, 0xda, 0xe0, 0x2e, 0x39, - 0x29, 0x96, 0x39, 0xa1, 0xf8, 0x24, 0x90, 0x47, 0xaf, 0xb0, 0x59, 0xb0, 0x38, 0x7c, 0x05, 0x7e, - 0x50, 0x77, 0x70, 0x03, 0x46, 0x1f, 0x0d, 0x58, 0x16, 0xf3, 0x07, 0x2c, 0x8b, 0xeb, 0xc0, 0x9c, - 0xe5, 0xad, 0x5b, 0x3b, 0x64, 0x5a, 0x43, 0x47, 0x7e, 0x36, 0x89, 0x2c, 0x03, 0x35, 0xe0, 0x65, - 0x32, 0xe4, 0x1f, 0x0f, 0x96, 0x81, 0x82, 0x14, 0xed, 0x06, 0x30, 0xcf, 0x36, 0x32, 0x72, 0xfd, - 0xb1, 0x15, 0x4d, 0x8a, 0xe8, 0x93, 0x76, 0x3d, 0x58, 0xe4, 0x75, 0x9a, 0xb1, 0xfd, 0xe4, 0x60, - 0x10, 0xd3, 0x1e, 0x0e, 0x8e, 0x0f, 0x34, 0xac, 0x20, 0xd8, 0x4f, 0x2e, 0x0a, 0xf6, 0x73, 0x1d, - 0x00, 0x91, 0x16, 0x0f, 0x25, 0xf3, 0x50, 0x30, 0x1b, 0xea, 0xe5, 0xd0, 0x0c, 0x5f, 0xcf, 0x81, - 0x52, 0xa0, 0x6c, 0xc3, 0x32, 0x20, 0x9b, 0xc2, 0x66, 0x76, 0xf6, 0x02, 0x9b, 0x82, 0x4d, 0x43, - 0x06, 0x5e, 0xe4, 0x4f, 0xdf, 0xb6, 0xfc, 0x5e, 0x70, 0x26, 0x75, 0x30, 0x59, 0xdd, 0x00, 0xc0, - 0xc2, 0x18, 0xb5, 0xa3, 0x43, 0xaa, 0x8f, 0x49, 0xd1, 0x1e, 0x88, 0x3e, 0x30, 0x34, 0xce, 0x3e, - 0x8c, 0x9e, 0x20, 0x9d, 0x05, 0x05, 0x72, 0xc1, 0xc2, 0x31, 0x75, 0x11, 0x00, 0xfd, 0x69, 0x1b, - 0xba, 0x51, 0xd3, 0x1b, 0x15, 0x5d, 0xc9, 0x69, 0x2f, 0x97, 0xc0, 0x6c, 0xd8, 0x08, 0x86, 0x56, - 0x52, 0xa7, 0xaa, 0x35, 0xf2, 0x86, 0xd9, 0x83, 0x8d, 0x8a, 0x55, 0xb2, 0x27, 0x82, 0x07, 0xed, - 0x7b, 0x70, 0xc5, 0x72, 0x3d, 0xdf, 0x70, 0x2e, 0xaf, 0x38, 0x6e, 0x64, 0x12, 0x91, 0xd0, 0xc4, - 0x71, 0xaf, 0x91, 0xa9, 0xdf, 0x85, 0xf8, 0xb4, 0x22, 0x74, 0xe9, 0x96, 0x4d, 0x94, 0x80, 0xe8, - 0xfa, 0xae, 0x69, 0x7b, 0x7d, 0xc7, 0x83, 0x86, 0x73, 0xd9, 0x2b, 0xdb, 0xdd, 0x8a, 0xd3, 0xdb, - 0xdf, 0xb3, 0x3d, 0x6a, 0xac, 0xc7, 0xbd, 0x46, 0xd2, 0xc1, 0xf7, 0x47, 0x2f, 0x02, 0x50, 0x69, - 0xd6, 0xeb, 0x7a, 0xa5, 0x5d, 0x6b, 0x36, 0x94, 0x63, 0x48, 0x5a, 0xed, 0xf2, 0x72, 0x1d, 0x49, - 0xe7, 0xe9, 0xa0, 0x14, 0xb4, 0x69, 0x1a, 0x9f, 0x28, 0x17, 0xc4, 0x27, 0x52, 0xcb, 0xa0, 0x14, - 0xb4, 0x72, 0x3a, 0x22, 0x3c, 0x62, 0xf0, 0x3c, 0xfa, 0x9e, 0xe9, 0xfa, 0xd8, 0xb4, 0x0c, 0x88, - 0x2c, 0x9b, 0x1e, 0x34, 0xc2, 0xcf, 0xce, 0x3e, 0x9a, 0x72, 0xa0, 0x82, 0xc5, 0x72, 0xbd, 0xbe, - 0xd5, 0x34, 0xb6, 0x1a, 0xcd, 0xf6, 0x5a, 0xad, 0xb1, 0x4a, 0x46, 0xc8, 0xda, 0x6a, 0xa3, 0x69, - 0xe8, 0x64, 0x80, 0x6c, 0x29, 0x39, 0x72, 0x7f, 0xf9, 0x72, 0x09, 0x14, 0xfb, 0x58, 0xba, 0xda, - 0x57, 0xe4, 0x94, 0xa6, 0x45, 0x88, 0x53, 0xcc, 0x0d, 0xcb, 0xdc, 0x61, 0x10, 0x69, 0xc8, 0x61, - 0xed, 0xb3, 0x60, 0x9e, 0x98, 0x43, 0x1e, 0xde, 0x57, 0xc3, 0xc8, 0xc9, 0x06, 0x97, 0xa6, 0x7d, - 0x52, 0x4a, 0x61, 0x5c, 0x0c, 0xe5, 0x28, 0x9d, 0x71, 0xf1, 0x07, 0xb9, 0xf1, 0xae, 0x23, 0xa9, - 0x35, 0xda, 0xba, 0xd1, 0x28, 0xd7, 0x69, 0x16, 0x59, 0x3d, 0x0d, 0x4e, 0x36, 0x9a, 0x34, 0x18, - 0x67, 0x6b, 0xab, 0xdd, 0xdc, 0xaa, 0xad, 0x6f, 0x34, 0x8d, 0xb6, 0x52, 0x50, 0x4f, 0x01, 0x95, - 0xfc, 0xdf, 0xaa, 0xb5, 0xb6, 0x2a, 0xe5, 0x46, 0x45, 0xaf, 0xeb, 0x55, 0xa5, 0xa8, 0x3e, 0x12, - 0x3c, 0x9c, 0x5c, 0x6f, 0xd5, 0x5c, 0xd9, 0x32, 0x9a, 0xe7, 0x5b, 0x08, 0x41, 0x43, 0xaf, 0x97, - 0x91, 0x22, 0x31, 0xf7, 0x98, 0xcf, 0xa8, 0x57, 0x81, 0xe3, 0x2b, 0xb5, 0xba, 0x8e, 0x6f, 0xa3, - 0xa5, 0xe5, 0x95, 0xd4, 0x6b, 0xc1, 0xe9, 0x5a, 0xa3, 0xb5, 0xb9, 0xb2, 0x52, 0xab, 0xd4, 0xf4, - 0x46, 0x7b, 0x6b, 0x43, 0x37, 0xd6, 0x6b, 0xad, 0x16, 0xfa, 0x56, 0x99, 0xd5, 0x3e, 0x2e, 0x83, - 0x22, 0xe9, 0x33, 0x91, 0x11, 0xbb, 0x70, 0xce, 0xec, 0x59, 0x68, 0xa0, 0xc0, 0xd7, 0xc7, 0x0f, - 0x9c, 0xe3, 0xf2, 0xf1, 0x35, 0xf3, 0xf4, 0x24, 0x08, 0x7e, 0xd0, 0x7e, 0x54, 0x4e, 0x79, 0x8e, - 0x8b, 0x02, 0x41, 0x4a, 0x5c, 0xe2, 0x4a, 0x8b, 0x59, 0x75, 0x78, 0x8d, 0x94, 0xe2, 0x1c, 0x97, - 0x38, 0xf9, 0x74, 0xe0, 0xff, 0xe2, 0xa4, 0xc0, 0x57, 0xc0, 0xfc, 0x66, 0xa3, 0xbc, 0xd9, 0x5e, - 0x6b, 0x1a, 0xb5, 0x1f, 0xc6, 0xb7, 0x10, 0x2c, 0x80, 0xd9, 0x95, 0xa6, 0xb1, 0x5c, 0xab, 0x56, - 0xf5, 0x86, 0x52, 0x50, 0x1f, 0x04, 0xae, 0x6a, 0xe9, 0xc6, 0xb9, 0x5a, 0x45, 0xdf, 0xda, 0x6c, - 0x94, 0xcf, 0x95, 0x6b, 0x75, 0xdc, 0x47, 0x14, 0x13, 0xae, 0xbe, 0x9f, 0xd1, 0x7e, 0x24, 0x0f, - 0x00, 0xa9, 0x3a, 0xbe, 0x84, 0x8b, 0xb9, 0x20, 0xfd, 0x8f, 0xd2, 0x4e, 0xf7, 0x22, 0x32, 0x31, - 0xed, 0xb7, 0x06, 0x4a, 0x2e, 0x7d, 0x41, 0xd7, 0x35, 0x47, 0xd1, 0x21, 0x7f, 0x03, 0x6a, 0x46, - 0xf8, 0xb9, 0xf6, 0x81, 0x34, 0xb3, 0xbb, 0x58, 0xc6, 0xa6, 0x72, 0xd3, 0xf3, 0x20, 0x90, 0xda, - 0x0b, 0x73, 0x60, 0x91, 0xaf, 0x18, 0xaa, 0x04, 0x36, 0xa6, 0xc4, 0x2a, 0xc1, 0x7f, 0xcc, 0x18, - 0x59, 0x67, 0x1f, 0x47, 0x87, 0x53, 0x10, 0xb4, 0x4c, 0x12, 0x92, 0x21, 0xb0, 0x58, 0x94, 0x1c, - 0x62, 0x1e, 0x19, 0x1d, 0x8a, 0xa4, 0xce, 0x00, 0xb9, 0x7d, 0xbf, 0xaf, 0xc8, 0xda, 0xa7, 0xf3, - 0x60, 0x81, 0xbb, 0x81, 0x5d, 0xfb, 0xe3, 0x9c, 0xc8, 0xed, 0xc6, 0xcc, 0xdd, 0xee, 0xb9, 0xc3, - 0xde, 0xed, 0x7e, 0xd6, 0x02, 0x33, 0x34, 0x0d, 0xcb, 0xb7, 0xd9, 0x40, 0xa6, 0xc0, 0x71, 0x30, - 0xb7, 0xaa, 0xb7, 0xb7, 0x5a, 0xed, 0xb2, 0xd1, 0xd6, 0xab, 0x4a, 0x0e, 0x0d, 0x7c, 0xfa, 0xfa, - 0x46, 0xfb, 0x5e, 0x45, 0x42, 0x63, 0xe2, 0xea, 0x66, 0xad, 0xaa, 0x6f, 0x35, 0x1b, 0xf5, 0x7b, - 0x15, 0x19, 0xf5, 0x80, 0x4c, 0xde, 0xad, 0xf5, 0xe6, 0x72, 0xad, 0xae, 0x2b, 0x79, 0xd4, 0x6c, - 0xf0, 0x27, 0x41, 0x4a, 0x81, 0xf7, 0x8d, 0x16, 0x59, 0xe1, 0x1c, 0xac, 0xc2, 0xe1, 0x5d, 0x44, - 0xd2, 0x5c, 0x21, 0x9f, 0x6a, 0xed, 0x34, 0x89, 0xd5, 0xec, 0x67, 0xc4, 0x9f, 0x97, 0x81, 0x42, - 0x38, 0xd0, 0xef, 0xef, 0x43, 0xd7, 0x82, 0x76, 0x07, 0x6a, 0x17, 0x45, 0x02, 0x02, 0x1f, 0x08, - 0x85, 0x89, 0x47, 0x0d, 0xc6, 0x16, 0x25, 0x0f, 0x03, 0x66, 0x7c, 0xfe, 0x80, 0x19, 0xff, 0x3b, - 0x69, 0x3d, 0x70, 0x07, 0xd9, 0x9d, 0xc8, 0x9e, 0xd5, 0x67, 0xd2, 0x78, 0xe0, 0x8e, 0xe0, 0x60, - 0x2a, 0x71, 0xbe, 0x63, 0x46, 0x79, 0x45, 0xd6, 0x5e, 0x20, 0x83, 0xe3, 0x55, 0xd3, 0x87, 0xcb, - 0x57, 0xda, 0xc1, 0x3d, 0xaa, 0x31, 0x77, 0x9f, 0xe7, 0x0e, 0xdc, 0x7d, 0x1e, 0x5d, 0xc5, 0x2a, - 0x0d, 0x5c, 0xc5, 0xaa, 0xbd, 0x27, 0xed, 0x99, 0xdd, 0x01, 0x1e, 0x26, 0x16, 0x8c, 0x3b, 0xdd, - 0x59, 0xdc, 0x64, 0x2e, 0xb2, 0x6f, 0x60, 0x6f, 0x9f, 0x05, 0x0a, 0x61, 0x85, 0x71, 0x32, 0xfd, - 0x59, 0x19, 0xc8, 0xe5, 0x6e, 0x57, 0xdb, 0x4a, 0x11, 0xd3, 0x33, 0x88, 0x92, 0x22, 0xf1, 0x51, - 0x52, 0xb8, 0x3d, 0x0b, 0x79, 0xd0, 0x31, 0x28, 0xed, 0x69, 0x04, 0xc6, 0xa3, 0x34, 0x3e, 0x8c, - 0x72, 0x76, 0xa7, 0x11, 0x12, 0x8b, 0x9f, 0xce, 0x95, 0xd6, 0xf4, 0x16, 0x59, 0x5d, 0x14, 0x99, - 0xe4, 0x9b, 0xfb, 0xd3, 0x1e, 0x2f, 0xe0, 0x3c, 0x7a, 0x13, 0xae, 0xb3, 0xcf, 0xee, 0x78, 0xc1, - 0x28, 0x0e, 0xb2, 0x47, 0xe1, 0x7b, 0x12, 0xc8, 0xb7, 0x1c, 0xd7, 0x9f, 0x14, 0x06, 0x69, 0x5d, - 0x22, 0x18, 0x09, 0xb4, 0xe2, 0x67, 0xb6, 0xd9, 0xb9, 0x44, 0x24, 0x97, 0x3f, 0x85, 0xb0, 0xa8, - 0xc7, 0xc1, 0x22, 0xe1, 0x24, 0xbc, 0x53, 0xe8, 0x5f, 0x25, 0xd2, 0x5f, 0xdd, 0x23, 0x8a, 0x08, - 0xde, 0x18, 0x0b, 0x5d, 0x12, 0x02, 0x50, 0xb8, 0x34, 0xed, 0x8d, 0x2c, 0x2e, 0x55, 0x1e, 0x97, - 0x61, 0xf3, 0xfa, 0xf0, 0x5a, 0x9e, 0x49, 0xf5, 0x4c, 0x69, 0x22, 0xac, 0x26, 0x14, 0x9e, 0x3d, - 0x22, 0xcf, 0x91, 0x41, 0x91, 0xba, 0x84, 0x4e, 0x14, 0x81, 0xb4, 0x2d, 0x23, 0x14, 0x82, 0x98, - 0xeb, 0xa8, 0x3c, 0xe9, 0x96, 0x91, 0x5c, 0x7e, 0xf6, 0x38, 0xfc, 0x1b, 0xf5, 0x75, 0x2e, 0x5f, - 0x32, 0xad, 0x9e, 0x79, 0xa1, 0x97, 0x22, 0xb2, 0xf9, 0x27, 0x53, 0x9e, 0xee, 0x0c, 0xab, 0xca, - 0x95, 0x17, 0x23, 0xf1, 0x1f, 0x04, 0xb3, 0x2e, 0xb7, 0x17, 0x8c, 0xac, 0xa8, 0x01, 0x3f, 0x73, - 0xfa, 0xde, 0x88, 0x72, 0xa6, 0x3a, 0xca, 0x29, 0xc4, 0xcf, 0x54, 0x8e, 0x9e, 0xcd, 0x95, 0xbb, - 0xdd, 0x15, 0x68, 0xfa, 0xfb, 0x2e, 0xec, 0xa6, 0x1a, 0x22, 0xdc, 0x81, 0xed, 0x72, 0x46, 0x12, - 0x5c, 0x6c, 0xd1, 0x3a, 0x8f, 0xce, 0x13, 0x46, 0xf4, 0x06, 0x01, 0x2f, 0x13, 0xe9, 0x92, 0xde, - 0x16, 0x42, 0xd2, 0xe4, 0x20, 0x79, 0xd2, 0x78, 0x4c, 0x64, 0x0f, 0xc8, 0x4b, 0x65, 0xb0, 0x48, - 0xec, 0x84, 0x49, 0x63, 0xf2, 0xe1, 0x94, 0x2e, 0x64, 0xcc, 0xad, 0x6d, 0x2c, 0x3b, 0x13, 0x81, - 0x25, 0x8d, 0xc3, 0x99, 0x18, 0x1f, 0xd9, 0x23, 0xf3, 0x3f, 0xaf, 0x02, 0x80, 0x71, 0x0b, 0xfe, - 0x64, 0x31, 0x8a, 0xf3, 0xa9, 0xbd, 0x93, 0xce, 0x3f, 0x5a, 0x5c, 0xd0, 0x79, 0xc6, 0xe5, 0x37, - 0xdc, 0xf6, 0xe2, 0x13, 0x85, 0x46, 0x95, 0x3f, 0x48, 0x69, 0xf3, 0x52, 0xa7, 0xdc, 0x91, 0x83, - 0xfb, 0x98, 0xbd, 0xdc, 0xa7, 0x52, 0x18, 0xbf, 0xa3, 0x58, 0x49, 0x87, 0x5a, 0x7d, 0x8c, 0x99, - 0xfd, 0x69, 0x70, 0xd2, 0xd0, 0xcb, 0xd5, 0x66, 0xa3, 0x7e, 0x2f, 0x7b, 0x85, 0x97, 0x22, 0xb3, - 0x93, 0x93, 0x4c, 0x60, 0x7b, 0x5d, 0xca, 0x3e, 0x90, 0x97, 0x55, 0xd2, 0x6c, 0x85, 0x59, 0x5c, - 0x19, 0xdd, 0xab, 0x09, 0x90, 0x3d, 0x4a, 0x14, 0xbe, 0x55, 0x04, 0x73, 0x06, 0xec, 0x38, 0x7b, - 0x7b, 0xd0, 0xee, 0xc2, 0xae, 0xf6, 0x3a, 0x19, 0xcc, 0x87, 0xbb, 0x8a, 0x2d, 0xe8, 0x6b, 0xff, - 0x29, 0xc2, 0xe6, 0x2c, 0x98, 0x47, 0x95, 0x6b, 0xf2, 0x17, 0x09, 0x70, 0x69, 0xea, 0xcd, 0xe0, - 0x44, 0x80, 0x42, 0x73, 0x60, 0x0a, 0x73, 0xf0, 0x05, 0xef, 0xf7, 0xb3, 0xc9, 0x63, 0x74, 0x57, - 0xbc, 0x30, 0x43, 0x76, 0x97, 0x58, 0x56, 0x63, 0xc0, 0xfa, 0xbd, 0x10, 0xac, 0xa7, 0x71, 0x60, - 0x55, 0x0f, 0x49, 0xff, 0x28, 0x51, 0xfb, 0x90, 0x0c, 0x4e, 0x06, 0x1d, 0xf1, 0xf4, 0xd0, 0xfa, - 0x14, 0x8b, 0xd6, 0xd3, 0x79, 0xb4, 0x56, 0x45, 0xa4, 0x39, 0x8c, 0xe5, 0x18, 0xd4, 0xbe, 0x1c, - 0xa2, 0xf6, 0x5f, 0x38, 0xd4, 0xea, 0x13, 0x2a, 0xe7, 0x28, 0xd1, 0xfb, 0xb0, 0x0c, 0x4e, 0x23, - 0xb3, 0xb3, 0xe2, 0xd8, 0xdb, 0x3d, 0xab, 0xe3, 0x5b, 0xf6, 0x4e, 0xe4, 0xe2, 0xb8, 0x2a, 0xb2, - 0xb2, 0x39, 0x88, 0xad, 0x74, 0x10, 0x5b, 0x7e, 0x8f, 0x41, 0xb4, 0x6d, 0xc5, 0xb1, 0x15, 0x33, - 0x84, 0x31, 0xce, 0xfb, 0x91, 0xe6, 0xb0, 0x49, 0xe9, 0x5b, 0x9f, 0x20, 0x07, 0x47, 0x89, 0xdf, - 0xd7, 0x25, 0x70, 0xca, 0x80, 0x9e, 0xd3, 0xbb, 0x04, 0x89, 0x2f, 0x6b, 0xc0, 0xaf, 0xa7, 0x3d, - 0x3a, 0x55, 0xfb, 0xd3, 0x5e, 0xca, 0x62, 0xd4, 0xe2, 0x31, 0xba, 0x33, 0x5e, 0xd3, 0x87, 0x15, - 0x1d, 0xd3, 0x8e, 0xde, 0x1b, 0xca, 0xff, 0x1c, 0x27, 0xff, 0xe5, 0x43, 0x51, 0x9f, 0xc2, 0x12, - 0x01, 0x60, 0xcc, 0xbb, 0xe7, 0xcb, 0x40, 0xc1, 0x3e, 0xcb, 0x78, 0xf4, 0xa4, 0x77, 0x08, 0x37, - 0xf9, 0xd3, 0x2c, 0xfd, 0x40, 0x09, 0x83, 0xd3, 0x2c, 0x41, 0x82, 0x7a, 0x03, 0x58, 0xec, 0xec, - 0xc2, 0xce, 0xc5, 0x9a, 0x1d, 0x78, 0x95, 0x11, 0x17, 0xa4, 0x81, 0x54, 0xde, 0x60, 0xb8, 0x87, - 0x07, 0x83, 0x5f, 0xdc, 0xe5, 0x26, 0x8f, 0x2c, 0x53, 0x31, 0x20, 0xfc, 0x66, 0x08, 0x42, 0x83, - 0x03, 0xe1, 0xf6, 0xb1, 0xa8, 0xa6, 0x13, 0x7e, 0x63, 0x0c, 0xd5, 0xd7, 0xc0, 0xa9, 0xe6, 0x46, - 0xbb, 0xd6, 0x6c, 0x6c, 0x6d, 0xb6, 0xf4, 0xea, 0xd6, 0x72, 0xd0, 0x00, 0x5a, 0x8a, 0xac, 0x7d, - 0x53, 0x02, 0x33, 0x84, 0x2d, 0x4f, 0x7b, 0x54, 0x04, 0xc1, 0xc8, 0x63, 0x3c, 0xda, 0xdb, 0x85, - 0x83, 0x72, 0x85, 0x82, 0xa0, 0xe5, 0xc4, 0x74, 0x3e, 0x4f, 0x04, 0x33, 0x04, 0xe4, 0x60, 0xa7, - 0xe5, 0x4c, 0x8c, 0xf5, 0x4c, 0xc9, 0x18, 0x41, 0x76, 0xc1, 0x00, 0x5d, 0x23, 0xd8, 0xc8, 0xbe, - 0x0d, 0x3c, 0x2b, 0x4f, 0x96, 0x67, 0xce, 0x5b, 0xfe, 0x2e, 0x3e, 0xe5, 0xa3, 0x3d, 0x55, 0x64, - 0x70, 0xb8, 0x19, 0x14, 0x2e, 0xa1, 0xdc, 0x23, 0x4e, 0x4c, 0x91, 0x4c, 0xda, 0x2f, 0x0a, 0xc7, - 0x83, 0xe7, 0xf4, 0x33, 0xe4, 0x29, 0x06, 0x9c, 0x75, 0x90, 0xef, 0x59, 0x9e, 0x4f, 0xe7, 0x35, - 0xb7, 0xa5, 0x22, 0x14, 0xfc, 0xa9, 0xf9, 0x70, 0xcf, 0xc0, 0x64, 0xb4, 0xbb, 0x91, 0x55, 0x1a, - 0xa5, 0x0a, 0x9c, 0x1a, 0x3b, 0x0d, 0x66, 0x68, 0x34, 0x03, 0xba, 0xf5, 0x17, 0x3c, 0x0a, 0x6e, - 0xb7, 0x09, 0xd5, 0x36, 0x7b, 0x1d, 0xf8, 0x7f, 0x8f, 0x83, 0x99, 0x35, 0xcb, 0xf3, 0x1d, 0xf7, - 0x8a, 0xf6, 0xfa, 0x1c, 0x98, 0x39, 0x07, 0x5d, 0xcf, 0x72, 0xec, 0x03, 0x8e, 0x76, 0xd7, 0x81, - 0xb9, 0xbe, 0x0b, 0x2f, 0x59, 0xce, 0xbe, 0xc7, 0x8c, 0xc4, 0x4c, 0x92, 0xaa, 0x81, 0x92, 0xb9, - 0xef, 0xef, 0x3a, 0x6e, 0x14, 0x04, 0x2d, 0x78, 0x56, 0xcf, 0x00, 0x40, 0xfe, 0x37, 0xcc, 0x3d, - 0x48, 0xdd, 0x07, 0x99, 0x14, 0x55, 0x05, 0x79, 0xdf, 0xda, 0x83, 0xf4, 0x56, 0x04, 0xfc, 0x1f, - 0x09, 0x18, 0x47, 0x18, 0xa6, 0x91, 0x9c, 0x65, 0x23, 0x78, 0xd4, 0xbe, 0x28, 0x83, 0xb9, 0x55, - 0xe8, 0x53, 0x56, 0x3d, 0xed, 0x45, 0x39, 0xa1, 0x8b, 0xc8, 0xd0, 0xdc, 0xaf, 0x67, 0x7a, 0xc1, - 0x77, 0xa1, 0x59, 0xc3, 0x27, 0x46, 0x57, 0x34, 0xc8, 0xec, 0xfd, 0x2c, 0x38, 0x5e, 0xaf, 0x5f, - 0x23, 0x07, 0x68, 0x68, 0x66, 0xba, 0x39, 0x7f, 0xf0, 0x05, 0x3f, 0xef, 0x48, 0x8c, 0x75, 0x43, - 0x65, 0xbf, 0xc4, 0xd4, 0x27, 0xb6, 0x3b, 0x2a, 0x5d, 0xa2, 0x39, 0x0e, 0x5c, 0xbd, 0xc3, 0x52, - 0xa2, 0x64, 0x8c, 0x30, 0xb7, 0x60, 0x94, 0x9c, 0xd1, 0x9c, 0x4c, 0xe1, 0xb2, 0x65, 0x19, 0xcc, - 0xb5, 0x76, 0x9d, 0xcb, 0x81, 0x1c, 0x9f, 0x2e, 0x06, 0xec, 0xb5, 0x60, 0xf6, 0xd2, 0x00, 0xa8, - 0x51, 0x02, 0x7b, 0xbf, 0xa3, 0xcc, 0xdf, 0xef, 0xf8, 0x3c, 0x39, 0x2d, 0x4c, 0x0c, 0x73, 0x31, - 0x30, 0xf1, 0x57, 0x32, 0x4a, 0x29, 0xae, 0x64, 0x54, 0x9f, 0x00, 0x66, 0x28, 0xd7, 0x74, 0x2b, - 0x20, 0x19, 0xe0, 0x20, 0x33, 0x5b, 0xc1, 0x3c, 0x5f, 0xc1, 0x74, 0xc8, 0xc7, 0x57, 0x2e, 0x7b, - 0xe4, 0x7f, 0x5b, 0xc2, 0x31, 0xd2, 0x02, 0xe0, 0x2b, 0x13, 0x00, 0x5e, 0xfb, 0x6e, 0x4e, 0x74, - 0xc3, 0x2c, 0x94, 0x40, 0xc8, 0xc1, 0xa1, 0x2e, 0x19, 0x1c, 0x49, 0x2e, 0x7b, 0x79, 0xbe, 0x3c, - 0x0f, 0xe6, 0xab, 0xd6, 0xf6, 0x76, 0xd8, 0x49, 0xbe, 0x58, 0xb0, 0x93, 0x8c, 0x77, 0x86, 0x43, - 0x76, 0xee, 0xbe, 0xeb, 0x42, 0x3b, 0xa8, 0x14, 0x6d, 0x4e, 0x03, 0xa9, 0xea, 0x8d, 0xe0, 0x78, - 0x30, 0x2e, 0xb0, 0x1d, 0xe5, 0xac, 0x31, 0x98, 0xac, 0x7d, 0x5b, 0xd8, 0xdb, 0x22, 0x90, 0x28, - 0x5b, 0xa5, 0x98, 0x06, 0x78, 0x07, 0x58, 0xd8, 0x25, 0xb9, 0xf1, 0x92, 0x74, 0xd0, 0x59, 0x9e, - 0x1a, 0xb8, 0x83, 0x62, 0x1d, 0x7a, 0x9e, 0xb9, 0x03, 0x0d, 0x3e, 0xf3, 0x40, 0xf3, 0x95, 0xd3, - 0xdc, 0xa8, 0x2a, 0xe6, 0xb8, 0x21, 0x50, 0x93, 0xec, 0xb5, 0xe3, 0xcb, 0x67, 0x41, 0x7e, 0xc5, - 0xea, 0x41, 0xed, 0xc7, 0x25, 0x30, 0x6b, 0xc0, 0x8e, 0x63, 0x77, 0xd0, 0x13, 0xe3, 0x1a, 0xfb, - 0xad, 0x9c, 0xe8, 0x4d, 0xe2, 0x88, 0xce, 0x52, 0x48, 0x23, 0xa6, 0xdd, 0x88, 0xdd, 0x18, 0x9e, - 0x48, 0x6a, 0x0a, 0xf7, 0xbe, 0xa1, 0xa9, 0xc7, 0xf6, 0x76, 0xcf, 0x31, 0xb9, 0x4d, 0x99, 0x41, - 0x53, 0x28, 0x3a, 0x88, 0xdb, 0x70, 0xfc, 0x0d, 0xcb, 0xb6, 0xc3, 0xd8, 0x36, 0x07, 0xd2, 0x79, - 0x7f, 0xa2, 0xc4, 0xf0, 0x80, 0xb8, 0xee, 0xb4, 0xf4, 0x18, 0xcd, 0xbe, 0x01, 0x2c, 0x5e, 0xb8, - 0xe2, 0x43, 0x8f, 0xe6, 0xa2, 0xc5, 0xe6, 0x8d, 0x81, 0x54, 0xe6, 0x72, 0x8f, 0xa4, 0x30, 0x82, - 0x09, 0x05, 0xa6, 0x13, 0xf5, 0xda, 0x18, 0x33, 0xc0, 0x93, 0x40, 0x69, 0x34, 0xab, 0x3a, 0xf6, - 0xd4, 0x0e, 0x7c, 0x5f, 0x77, 0xb4, 0x9f, 0x91, 0xc1, 0x3c, 0x76, 0x72, 0x0c, 0x50, 0x78, 0xb8, - 0xc0, 0x7c, 0x44, 0xfb, 0xaa, 0xb0, 0x17, 0x37, 0xae, 0x32, 0x5b, 0x40, 0xbc, 0xa0, 0xb7, 0xad, - 0xde, 0xa0, 0xa0, 0x0b, 0xc6, 0x40, 0xea, 0x10, 0x40, 0xe4, 0xa1, 0x80, 0x7c, 0x48, 0xc8, 0x95, - 0x7b, 0x14, 0x77, 0x47, 0x85, 0xca, 0xaf, 0xc9, 0x60, 0x0e, 0x4d, 0x52, 0x02, 0x50, 0x9a, 0x1c, - 0x28, 0x8e, 0xdd, 0xbb, 0x12, 0x2d, 0x8b, 0x04, 0x8f, 0xa9, 0x1a, 0xc9, 0x1f, 0x0b, 0xcf, 0xdc, - 0xb1, 0x88, 0x18, 0x5e, 0xa6, 0x84, 0xdf, 0x07, 0x85, 0xe6, 0xf3, 0x23, 0x98, 0x3b, 0x2a, 0xf8, - 0x5e, 0x5b, 0x04, 0xc5, 0xcd, 0x3e, 0x46, 0xee, 0x2b, 0xb2, 0xc8, 0x45, 0x39, 0x07, 0x8e, 0xf1, - 0x21, 0x33, 0xab, 0xe7, 0x74, 0xcc, 0xde, 0x46, 0x74, 0x92, 0x3d, 0x4a, 0x50, 0x6f, 0xa7, 0x9e, - 0xfd, 0xe4, 0x40, 0xf6, 0x0d, 0x89, 0x77, 0xc8, 0x60, 0x19, 0x31, 0x47, 0x26, 0x6f, 0x06, 0x27, - 0xba, 0x96, 0x67, 0x5e, 0xe8, 0x41, 0xdd, 0xee, 0xb8, 0x57, 0x88, 0x38, 0xe8, 0xb4, 0xea, 0xc0, - 0x0b, 0xf5, 0x4e, 0x50, 0xf0, 0xfc, 0x2b, 0x3d, 0x32, 0x4f, 0x64, 0x4f, 0x58, 0xc6, 0x16, 0xd5, - 0x42, 0xd9, 0x0d, 0xf2, 0x15, 0xeb, 0x3a, 0x3b, 0x23, 0xe6, 0x3a, 0xab, 0x3e, 0x0e, 0x14, 0x1d, - 0xd7, 0xda, 0xb1, 0xc8, 0xb5, 0x90, 0x8b, 0x07, 0x42, 0x25, 0x13, 0x53, 0xa0, 0x89, 0xb3, 0x18, - 0x34, 0xab, 0xfa, 0x04, 0x30, 0x6b, 0xed, 0x99, 0x3b, 0xf0, 0x1e, 0xcb, 0x26, 0x81, 0x24, 0x16, - 0x6f, 0x3d, 0x7d, 0xe0, 0xf0, 0x28, 0x7d, 0x6f, 0x44, 0x59, 0xd5, 0x3b, 0xc0, 0x35, 0x1d, 0x17, - 0x9a, 0x3e, 0x44, 0x02, 0x3a, 0x6f, 0x75, 0x77, 0xa0, 0x5f, 0xdb, 0x5e, 0xb7, 0x3c, 0xcf, 0xb2, - 0x77, 0xe8, 0xcd, 0xaf, 0xf1, 0x19, 0xb4, 0x0f, 0x4a, 0xa2, 0xd1, 0x20, 0xb1, 0x64, 0x88, 0x4a, - 0x8c, 0x71, 0x43, 0x3d, 0x23, 0x45, 0x59, 0xd0, 0x01, 0xf9, 0x55, 0x42, 0x71, 0x1a, 0xe3, 0xd9, - 0xca, 0x7e, 0xe8, 0xff, 0x43, 0x09, 0x94, 0xaa, 0xce, 0x65, 0x1b, 0x37, 0x93, 0xdb, 0xc4, 0x2c, - 0xe5, 0x21, 0xa1, 0x1d, 0xf8, 0xbb, 0xce, 0x13, 0x4f, 0x03, 0xe2, 0xda, 0x06, 0x45, 0xc6, 0xc0, - 0x90, 0xd8, 0xee, 0x04, 0x03, 0x08, 0x24, 0x95, 0x93, 0xbd, 0x5c, 0x7f, 0x57, 0x06, 0xf9, 0xaa, - 0xeb, 0xf4, 0xb5, 0xb7, 0xe5, 0x52, 0x38, 0xe2, 0x75, 0x5d, 0xa7, 0xdf, 0xc6, 0x57, 0xc8, 0x46, - 0x7b, 0x4f, 0x6c, 0x9a, 0x7a, 0x1b, 0x28, 0xf5, 0x1d, 0xcf, 0xf2, 0x83, 0x49, 0xc8, 0xe2, 0xad, - 0x0f, 0x19, 0xda, 0x17, 0x6c, 0xd0, 0x4c, 0x46, 0x98, 0x1d, 0xf5, 0xf9, 0x58, 0x84, 0x48, 0x2e, - 0x48, 0x8c, 0xc1, 0x35, 0xba, 0x03, 0xa9, 0xda, 0x4b, 0x58, 0x24, 0x9f, 0xc4, 0x23, 0xf9, 0x88, - 0x21, 0x12, 0x76, 0x9d, 0xfe, 0x44, 0x5c, 0x67, 0x5e, 0x11, 0xa2, 0xfa, 0x64, 0x0e, 0xd5, 0x9b, - 0x84, 0xca, 0xcc, 0x1e, 0xd1, 0x0f, 0xe6, 0x01, 0xc0, 0x46, 0xca, 0x26, 0x9a, 0x3e, 0x89, 0x59, - 0x68, 0x3f, 0x96, 0x67, 0x64, 0x59, 0xe6, 0x65, 0xf9, 0xa8, 0x18, 0x1b, 0x08, 0x93, 0x8f, 0x91, - 0x68, 0x19, 0x14, 0xf6, 0xd1, 0x6b, 0x2a, 0x51, 0x41, 0x12, 0xf8, 0xd1, 0x20, 0x5f, 0x6a, 0xbf, - 0x9d, 0x03, 0x05, 0x9c, 0xa0, 0x9e, 0x01, 0x00, 0x9b, 0x05, 0xe4, 0x30, 0x6d, 0x0e, 0x1b, 0x00, - 0x4c, 0x0a, 0xd6, 0x56, 0xab, 0x4b, 0x5f, 0x13, 0x83, 0x3b, 0x4a, 0x40, 0x5f, 0x63, 0x63, 0x01, - 0xd3, 0xa2, 0xe6, 0x03, 0x93, 0x82, 0xbe, 0xc6, 0x4f, 0x75, 0xb8, 0x4d, 0x6e, 0xf7, 0xc8, 0x1b, - 0x51, 0x42, 0xf8, 0x75, 0x3d, 0xbc, 0x13, 0x36, 0xf8, 0x1a, 0xa7, 0xa0, 0xa9, 0x34, 0x56, 0xcb, - 0xe5, 0xa8, 0x88, 0x22, 0xce, 0x34, 0x98, 0xac, 0xbd, 0x2e, 0x54, 0x9b, 0x2a, 0xa7, 0x36, 0x8f, - 0x49, 0x21, 0xde, 0xec, 0x95, 0xe7, 0xeb, 0x05, 0x30, 0xdb, 0x70, 0xba, 0x54, 0x77, 0x98, 0xe9, - 0xe6, 0x67, 0x0a, 0xa9, 0xa6, 0x9b, 0x21, 0x8d, 0x18, 0x05, 0x79, 0x0a, 0xaf, 0x20, 0x62, 0x14, - 0x58, 0xfd, 0x50, 0x97, 0x41, 0x11, 0x6b, 0xef, 0xc1, 0xcb, 0x46, 0x93, 0x48, 0x60, 0xd1, 0x1a, - 0xf4, 0xcb, 0x7f, 0x77, 0x3a, 0xf6, 0xdf, 0x40, 0x01, 0x57, 0x30, 0x61, 0x6f, 0x88, 0xaf, 0xa8, - 0x94, 0x5c, 0x51, 0x39, 0xb9, 0xa2, 0xf9, 0xc1, 0x8a, 0xa6, 0x59, 0x45, 0x88, 0xd3, 0x90, 0xec, - 0x75, 0xfc, 0x7f, 0xcd, 0x00, 0xd0, 0x30, 0x2f, 0x59, 0x3b, 0x64, 0x6f, 0xf9, 0x8b, 0xc1, 0xec, - 0x89, 0xee, 0x02, 0xff, 0x24, 0x33, 0x10, 0xde, 0x06, 0x66, 0xe8, 0xb8, 0x47, 0x2b, 0xf2, 0x50, - 0xae, 0x22, 0x11, 0x15, 0x62, 0xd4, 0xde, 0xef, 0x1b, 0x41, 0x7e, 0x64, 0x98, 0x6c, 0xef, 0xf7, - 0x7a, 0x6d, 0xf4, 0x2d, 0xb5, 0xd0, 0x82, 0xe7, 0x98, 0x1d, 0x8c, 0xe8, 0x92, 0x69, 0x12, 0x74, - 0x8a, 0x3e, 0x69, 0xef, 0x13, 0x3e, 0xa7, 0xc6, 0xf0, 0xc3, 0xd4, 0x28, 0xa6, 0x09, 0x3e, 0x0e, - 0xcc, 0x38, 0xe1, 0x76, 0xb8, 0x1c, 0xbb, 0x8a, 0x56, 0xb3, 0xb7, 0x1d, 0x23, 0xc8, 0x29, 0xb8, - 0x75, 0x26, 0xc4, 0xc7, 0x54, 0x8e, 0x82, 0x9e, 0x5a, 0x0d, 0x22, 0xa5, 0xa2, 0x7a, 0x9c, 0xb7, - 0xfc, 0xdd, 0xba, 0x65, 0x5f, 0xf4, 0xb4, 0xff, 0x22, 0x66, 0x41, 0x32, 0xf8, 0x4b, 0xe9, 0xf0, - 0xe7, 0x23, 0x95, 0x25, 0x7a, 0x76, 0x30, 0x54, 0x86, 0x73, 0x1b, 0x03, 0xe0, 0xed, 0xa0, 0x48, - 0x18, 0xa5, 0x9d, 0xe8, 0xd9, 0x58, 0xfc, 0x42, 0x4a, 0x06, 0xfd, 0x42, 0xd0, 0x2b, 0x24, 0x2d, - 0x67, 0x99, 0x43, 0x7a, 0xf6, 0xb1, 0x60, 0x86, 0x4a, 0x5a, 0x5d, 0x64, 0x5b, 0xb1, 0x72, 0x4c, - 0x05, 0xa0, 0xb8, 0xee, 0x5c, 0x82, 0x6d, 0x47, 0xc9, 0xa1, 0xff, 0x88, 0xbf, 0xb6, 0xa3, 0x48, - 0xda, 0x2b, 0x4b, 0xa0, 0x14, 0x86, 0xa8, 0xfc, 0x43, 0x09, 0x28, 0x15, 0x3c, 0x43, 0x5b, 0x71, - 0x9d, 0x3d, 0x52, 0x23, 0xf1, 0x33, 0x0f, 0x2f, 0x15, 0x76, 0x10, 0x09, 0x43, 0x47, 0x0e, 0x16, - 0x16, 0x83, 0x25, 0x59, 0xc2, 0x94, 0x82, 0x25, 0x4c, 0xed, 0xad, 0x42, 0x0e, 0x23, 0xa2, 0xa5, - 0x64, 0xdf, 0xd4, 0x7e, 0x47, 0x02, 0x85, 0x4a, 0xcf, 0xb1, 0x21, 0x7b, 0x30, 0x77, 0xe4, 0x09, - 0xd0, 0xe1, 0xfb, 0x18, 0xda, 0xb3, 0x24, 0x51, 0x5b, 0x23, 0x12, 0x00, 0x2a, 0x5b, 0x50, 0xb6, - 0x62, 0x83, 0x54, 0x22, 0xe9, 0xec, 0x05, 0xfa, 0x4d, 0x09, 0xcc, 0x92, 0x98, 0x72, 0xe5, 0x5e, - 0x4f, 0x7b, 0x48, 0x24, 0xd4, 0x21, 0x61, 0x3e, 0xb5, 0x0f, 0x09, 0x1f, 0x3c, 0x0b, 0x6b, 0x15, - 0xd2, 0x4e, 0x11, 0x16, 0x31, 0xdd, 0x39, 0x28, 0xb1, 0x9d, 0xb8, 0x91, 0x0c, 0x65, 0x2f, 0xea, - 0x3f, 0x92, 0x90, 0x01, 0x60, 0x5f, 0xdc, 0x70, 0xe1, 0x25, 0x0b, 0x5e, 0xd6, 0x1e, 0x1c, 0x09, - 0xfb, 0x60, 0xc0, 0xac, 0x37, 0x09, 0x2f, 0xe2, 0x30, 0x24, 0x63, 0x37, 0xc2, 0xe6, 0x7a, 0x51, - 0x26, 0xda, 0x8b, 0x0f, 0x46, 0x31, 0x63, 0xc8, 0x18, 0x6c, 0x76, 0xc1, 0x35, 0x9b, 0x78, 0x2e, - 0xb2, 0x17, 0xec, 0xc7, 0x66, 0x40, 0x69, 0xd3, 0xf6, 0xfa, 0x3d, 0xd3, 0xdb, 0xd5, 0xfe, 0x55, - 0x06, 0x45, 0x72, 0xc5, 0xad, 0xf6, 0x83, 0x5c, 0x5c, 0x9e, 0x67, 0xec, 0x43, 0x37, 0x70, 0xe0, - 0x21, 0x0f, 0x91, 0x7d, 0x24, 0x31, 0xf6, 0x91, 0xf6, 0x41, 0x59, 0x74, 0x92, 0x1a, 0x14, 0x4a, - 0xef, 0xd4, 0x8d, 0x0f, 0x05, 0xd3, 0xb7, 0x3a, 0xfe, 0xbe, 0x0b, 0xbd, 0xa1, 0xa1, 0x60, 0x62, - 0xa9, 0x6c, 0x90, 0xaf, 0x8c, 0xf0, 0x73, 0xcd, 0x04, 0x33, 0x34, 0xf1, 0xc0, 0x66, 0xd4, 0xc1, - 0xa8, 0x12, 0xa7, 0x40, 0xd1, 0x74, 0x7d, 0xcb, 0xf3, 0xe9, 0xf6, 0x2c, 0x7d, 0x42, 0xdd, 0x25, - 0xf9, 0xb7, 0xe9, 0xf6, 0x82, 0x08, 0x5e, 0x61, 0x82, 0xf6, 0x6b, 0x42, 0xf3, 0xc7, 0xe4, 0x9a, - 0xa7, 0x83, 0xfc, 0x9e, 0x31, 0x56, 0xb8, 0x1f, 0x04, 0xae, 0x32, 0xca, 0x6d, 0x7d, 0x8b, 0x04, - 0x7c, 0x0a, 0x63, 0x3b, 0x75, 0xb5, 0xf7, 0xc8, 0xcc, 0xfa, 0xdd, 0x15, 0x6e, 0x8c, 0xa0, 0x52, - 0x8c, 0xc6, 0x88, 0x30, 0x21, 0x61, 0xaf, 0x9b, 0x5b, 0xc2, 0x95, 0x85, 0x97, 0x70, 0xb5, 0x5f, - 0x11, 0xde, 0x8b, 0x0a, 0x45, 0x39, 0x62, 0x0d, 0x30, 0xe9, 0x0a, 0xcc, 0x8f, 0x08, 0xed, 0x2b, - 0x8d, 0x2a, 0xe9, 0x08, 0x61, 0xfb, 0xee, 0x29, 0x20, 0x95, 0x6b, 0xda, 0x4f, 0xcc, 0x80, 0xf9, - 0xf3, 0xae, 0xe5, 0x5b, 0xf6, 0x4e, 0xdb, 0x71, 0x7a, 0x9e, 0xf6, 0x1d, 0x66, 0xa3, 0xe2, 0x09, - 0xa0, 0xd8, 0x71, 0xec, 0x6d, 0x6b, 0x87, 0x8a, 0xf1, 0x0c, 0x57, 0xb9, 0x72, 0x6d, 0x69, 0xc3, - 0x75, 0x2e, 0x59, 0x5d, 0xe8, 0x56, 0x70, 0x2e, 0x83, 0xe6, 0x46, 0x7a, 0xcc, 0x84, 0xcc, 0x7b, - 0xcc, 0xe0, 0x57, 0x6c, 0x79, 0x61, 0xcc, 0x1e, 0x9a, 0xc8, 0x44, 0xcc, 0xab, 0x81, 0x52, 0xcf, - 0xb4, 0x77, 0xf6, 0x83, 0x99, 0xf7, 0xe0, 0x2e, 0x6a, 0x1c, 0xa5, 0x3a, 0xfd, 0xc8, 0x08, 0x3f, - 0xc7, 0x4e, 0x6e, 0xc8, 0xd4, 0x27, 0x6d, 0x0f, 0xff, 0x3f, 0xfb, 0xf1, 0x1c, 0x98, 0x63, 0x0a, - 0x55, 0xe7, 0xc0, 0x4c, 0x55, 0x5f, 0x29, 0x6f, 0xd6, 0xdb, 0xca, 0x31, 0x24, 0xc5, 0xd6, 0xe6, - 0xfa, 0x7a, 0xd9, 0xa8, 0xfd, 0xb0, 0xae, 0xe4, 0xd0, 0xbb, 0x55, 0xa3, 0x8c, 0x9e, 0x15, 0x09, - 0x3d, 0xb4, 0xd6, 0x9a, 0x46, 0x5b, 0x6f, 0x28, 0x32, 0xb2, 0x47, 0xf5, 0xa7, 0x6d, 0x94, 0x1b, - 0x55, 0x25, 0x8f, 0xfe, 0x2f, 0x6f, 0xd6, 0xeb, 0x7a, 0x5b, 0x29, 0x44, 0x41, 0xf4, 0x8a, 0x28, - 0xb9, 0x52, 0x6e, 0x6d, 0x96, 0xeb, 0xca, 0x0c, 0x4a, 0x5e, 0xd9, 0x6c, 0x34, 0xee, 0x55, 0x4a, - 0xa8, 0x88, 0x4a, 0xb3, 0xb1, 0x52, 0xab, 0xea, 0x8d, 0xb6, 0x32, 0xab, 0x5e, 0x05, 0x8e, 0xb7, - 0xda, 0x46, 0xb9, 0xb6, 0xba, 0xd6, 0x5e, 0x69, 0x1a, 0xe7, 0xcb, 0x46, 0x55, 0x01, 0xaa, 0x02, - 0xe6, 0x37, 0x8c, 0xe6, 0x8a, 0x8e, 0xe3, 0xa5, 0x94, 0xeb, 0xca, 0x1c, 0xfa, 0xaa, 0x6d, 0x94, - 0x1b, 0xad, 0x7a, 0xb9, 0xad, 0x2b, 0xf3, 0x67, 0xef, 0x06, 0xa5, 0xa0, 0xba, 0x6a, 0x11, 0x48, - 0x7a, 0x43, 0x39, 0x86, 0x7f, 0x5b, 0x4a, 0x0e, 0xfd, 0xae, 0x20, 0x7e, 0x8b, 0x40, 0xaa, 0xea, - 0x8a, 0x8c, 0x7e, 0x6b, 0x6d, 0x25, 0x8f, 0x7e, 0x37, 0x10, 0x8b, 0x45, 0x20, 0xad, 0xd5, 0x94, - 0x22, 0xfa, 0x6d, 0xaf, 0x29, 0x33, 0xfc, 0x4d, 0xf7, 0x89, 0xbd, 0xf0, 0x41, 0xc9, 0xc7, 0x18, - 0x1a, 0x7e, 0x34, 0x47, 0xc6, 0xff, 0xb5, 0x57, 0x48, 0x22, 0x7d, 0x5d, 0x32, 0xfd, 0x74, 0x8d, - 0xe6, 0x2d, 0xb9, 0x09, 0xb6, 0x1a, 0x55, 0x03, 0xa7, 0xf4, 0x46, 0x75, 0xa3, 0x59, 0x6b, 0xb4, - 0x49, 0xa8, 0x33, 0xbd, 0x5c, 0x59, 0xc3, 0x38, 0x43, 0x84, 0xe0, 0x7a, 0xb3, 0xaa, 0xd7, 0xf1, - 0x8b, 0x95, 0xe6, 0x66, 0xa3, 0xaa, 0x6c, 0xa3, 0xb2, 0xca, 0x9b, 0xed, 0xb5, 0x2d, 0x43, 0x7f, - 0xea, 0x66, 0xcd, 0xd0, 0xab, 0xca, 0x0e, 0xa2, 0x51, 0x2f, 0x37, 0x56, 0x37, 0xcb, 0xab, 0x74, - 0xbf, 0x70, 0x73, 0x63, 0xa3, 0x89, 0x77, 0x0c, 0x77, 0xb5, 0xbf, 0xcf, 0x83, 0x52, 0x79, 0xdf, - 0x77, 0xb6, 0xad, 0x5e, 0x4f, 0x7b, 0x8e, 0x74, 0xf8, 0xa6, 0x58, 0xe6, 0x9a, 0xe2, 0x81, 0x06, - 0x14, 0x94, 0x15, 0x36, 0x9e, 0x20, 0x81, 0x69, 0x87, 0xa7, 0x23, 0x67, 0x6c, 0x99, 0xee, 0x34, - 0x93, 0x47, 0xe2, 0x88, 0x6b, 0xd3, 0x96, 0x85, 0xdf, 0xd0, 0xc7, 0xb3, 0xf7, 0x80, 0x79, 0x96, - 0x12, 0x0e, 0x07, 0x56, 0x5e, 0x25, 0xf1, 0xc2, 0x82, 0x08, 0x81, 0x24, 0x5e, 0x18, 0x3e, 0x78, - 0x21, 0xe1, 0xf6, 0x52, 0x6b, 0xd7, 0x91, 0x9e, 0x1e, 0x07, 0x73, 0x55, 0xbd, 0x55, 0x31, 0x6a, - 0xd8, 0x4f, 0x5d, 0xc9, 0xf3, 0x5e, 0x06, 0x89, 0x96, 0x19, 0x5f, 0x23, 0x51, 0xa5, 0xfc, 0x9e, - 0x90, 0xbd, 0x15, 0x4f, 0x3b, 0x9d, 0x42, 0xbe, 0xe8, 0x81, 0xa6, 0x90, 0xda, 0x8b, 0xf2, 0x64, - 0x9d, 0xac, 0xb5, 0xbf, 0xb7, 0x67, 0xba, 0x57, 0x38, 0x7f, 0xb5, 0x71, 0xf5, 0x2e, 0x7e, 0x7c, - 0x4f, 0x8c, 0x02, 0x84, 0x4c, 0xa8, 0xbe, 0xeb, 0xec, 0xf5, 0x83, 0xbe, 0x9a, 0x3e, 0x69, 0xff, - 0x53, 0x78, 0xe6, 0x58, 0xae, 0x2d, 0x31, 0x95, 0x19, 0x63, 0x68, 0xff, 0x11, 0x49, 0x64, 0x16, - 0x99, 0x58, 0xcc, 0xf7, 0xbb, 0x46, 0xfc, 0x75, 0x1e, 0x5c, 0x45, 0x23, 0xbc, 0x84, 0xeb, 0x0f, - 0xc8, 0x54, 0x7d, 0x75, 0xa6, 0x9a, 0x41, 0x0d, 0x6a, 0x39, 0x32, 0xa8, 0x99, 0x0d, 0xef, 0xbc, - 0xe0, 0x86, 0xf7, 0xdb, 0x84, 0x0f, 0x3d, 0x94, 0x6b, 0x4b, 0x43, 0xea, 0x38, 0x9d, 0x6d, 0xf9, - 0xe7, 0x49, 0x22, 0xab, 0xad, 0x42, 0x1c, 0x7e, 0xbf, 0xeb, 0xda, 0x3b, 0x72, 0x60, 0x91, 0x57, - 0x15, 0xf5, 0xf1, 0xa0, 0xd4, 0xa7, 0x29, 0x54, 0x2e, 0xa7, 0xe3, 0x94, 0xcb, 0x08, 0x73, 0x22, - 0x88, 0xa0, 0xdd, 0xed, 0x3b, 0x96, 0x1d, 0xae, 0xcb, 0x07, 0xcf, 0x68, 0xde, 0x89, 0xa7, 0x0e, - 0x41, 0xbc, 0x3f, 0xfc, 0x10, 0xc5, 0x8e, 0xcd, 0x33, 0xb1, 0x63, 0x91, 0x10, 0x7d, 0xb8, 0x87, - 0x6f, 0x31, 0xda, 0x77, 0x89, 0xc3, 0x8b, 0x64, 0xb0, 0x49, 0x67, 0x9f, 0x0c, 0x4a, 0x41, 0xf9, - 0xc8, 0xba, 0x6b, 0xd6, 0xeb, 0xe5, 0xf5, 0x32, 0x59, 0xa8, 0x6c, 0x6e, 0xe8, 0x8d, 0x72, 0x4d, - 0xc9, 0xa1, 0x81, 0xae, 0xbe, 0xde, 0x6a, 0x6f, 0x56, 0x6b, 0x4d, 0x45, 0xc2, 0x4f, 0x28, 0x53, - 0x65, 0x63, 0x43, 0x91, 0xb5, 0x37, 0xce, 0x80, 0x99, 0x55, 0xb3, 0xd7, 0x83, 0xee, 0x15, 0xed, - 0x9b, 0x12, 0x50, 0x82, 0xd9, 0xc1, 0xba, 0x69, 0x5b, 0xdb, 0xd0, 0xf3, 0x93, 0x17, 0x2a, 0xde, - 0x27, 0x7c, 0xb5, 0x19, 0x2d, 0x63, 0x69, 0x90, 0x7e, 0x8c, 0x8e, 0xdf, 0x02, 0xf2, 0x96, 0xbd, - 0xed, 0xd0, 0xe5, 0x8a, 0x41, 0x7f, 0x9b, 0xe0, 0x63, 0xbc, 0x6d, 0x80, 0x33, 0x0a, 0xde, 0x6e, - 0x26, 0xc8, 0x45, 0xf6, 0xab, 0x16, 0xef, 0xc8, 0x83, 0x85, 0x80, 0x89, 0x9a, 0xdd, 0x85, 0xf7, - 0xb3, 0xdb, 0xa0, 0x3f, 0x93, 0x17, 0x0d, 0x30, 0x34, 0x58, 0x1f, 0x4c, 0x2a, 0x46, 0xa4, 0x6d, - 0x00, 0x3a, 0xa6, 0x0f, 0x77, 0x1c, 0xd7, 0x0a, 0xd7, 0x22, 0x1e, 0x9f, 0x86, 0x5a, 0x85, 0x7c, - 0x7d, 0xc5, 0x60, 0xe8, 0xa8, 0x77, 0x82, 0x39, 0x18, 0x46, 0x74, 0x0c, 0xb6, 0x49, 0x13, 0xf1, - 0x62, 0xf3, 0x6b, 0x7f, 0x24, 0x14, 0xc7, 0x48, 0xa4, 0x9a, 0xe9, 0x30, 0xdb, 0x1a, 0xaf, 0xeb, - 0xd9, 0x6c, 0xac, 0x97, 0x8d, 0xd6, 0x5a, 0xb9, 0x5e, 0xaf, 0x35, 0x56, 0xc3, 0x80, 0xc5, 0x2a, - 0x58, 0xac, 0x36, 0xcf, 0x37, 0x98, 0x88, 0xd2, 0x79, 0x6d, 0x03, 0x94, 0x02, 0x79, 0x0d, 0x3b, - 0x45, 0xc5, 0xca, 0x8c, 0x9e, 0xa2, 0x62, 0x92, 0x90, 0x69, 0x68, 0x75, 0x42, 0xd7, 0x7a, 0xfc, - 0x5f, 0xfb, 0x2d, 0x13, 0x14, 0xb0, 0x3f, 0x8b, 0xf6, 0x2e, 0x3c, 0x2f, 0xee, 0xf7, 0xcc, 0x0e, - 0xd4, 0xf6, 0x52, 0xac, 0x84, 0x07, 0x77, 0xed, 0x4a, 0x07, 0xee, 0xda, 0xc5, 0x7f, 0xe9, 0x88, - 0x71, 0x72, 0x98, 0x0f, 0x8d, 0x41, 0xb2, 0xf0, 0x21, 0x7f, 0x12, 0x3d, 0x9b, 0x88, 0xeb, 0x0d, - 0x65, 0x33, 0x46, 0x25, 0xe3, 0x79, 0xca, 0xe2, 0x12, 0x95, 0x24, 0x8e, 0xb2, 0x6f, 0xf1, 0x5f, - 0xc9, 0x83, 0x42, 0xab, 0xdf, 0xb3, 0x7c, 0xed, 0x17, 0xa4, 0x89, 0x60, 0x46, 0xee, 0x47, 0x96, - 0x47, 0xde, 0x8f, 0x1c, 0xf9, 0x4b, 0xe6, 0x05, 0xfc, 0x25, 0xdb, 0xf0, 0x7e, 0x9f, 0xf7, 0x97, - 0xbc, 0x8d, 0x4e, 0xdb, 0x88, 0xb7, 0xe5, 0x23, 0x86, 0x88, 0x14, 0x57, 0x6b, 0xc8, 0x6d, 0x16, - 0x67, 0x1f, 0x4b, 0x83, 0xea, 0x03, 0x50, 0x5c, 0x6e, 0xb6, 0xdb, 0xcd, 0x75, 0xe5, 0x18, 0x9e, - 0x7e, 0x35, 0x37, 0x48, 0x88, 0xe3, 0x5a, 0xa3, 0xa1, 0x1b, 0xdc, 0x8c, 0x8b, 0xbf, 0x2c, 0x33, - 0x71, 0x82, 0xc5, 0x97, 0x9d, 0xa5, 0x7a, 0x89, 0x2d, 0x82, 0xc7, 0xf3, 0x93, 0xbd, 0x72, 0xfd, - 0x9c, 0x0c, 0x0a, 0xeb, 0xd0, 0xdd, 0x81, 0xda, 0x33, 0x52, 0x38, 0xd8, 0x6d, 0x5b, 0xae, 0x47, - 0x2e, 0x45, 0x88, 0x1c, 0xec, 0xd8, 0x34, 0xf5, 0x7a, 0xb0, 0xe0, 0xc1, 0x8e, 0x63, 0x77, 0x83, - 0x4c, 0xa4, 0x3f, 0xe2, 0x13, 0xb5, 0x97, 0xa5, 0x84, 0x0c, 0x33, 0x3a, 0x11, 0x2f, 0xb9, 0x34, - 0xc0, 0x0c, 0x2b, 0x35, 0x7b, 0x60, 0xbe, 0x2d, 0xa3, 0x8f, 0xfa, 0x57, 0xb4, 0x97, 0x09, 0x7b, - 0x3e, 0xde, 0x0c, 0x8a, 0x17, 0x82, 0x7b, 0xd1, 0xe4, 0xd8, 0xfe, 0x98, 0xe6, 0x51, 0x97, 0xc1, - 0x09, 0x0f, 0xf6, 0x60, 0xc7, 0x87, 0x5d, 0xd4, 0x74, 0x8d, 0x91, 0x9d, 0xc2, 0xc1, 0xec, 0xda, - 0xef, 0xb1, 0x00, 0xde, 0xc1, 0x03, 0x78, 0xc3, 0x10, 0x51, 0xa2, 0x0a, 0xc5, 0xcf, 0x4d, 0x50, - 0x35, 0x5a, 0x3d, 0x27, 0x34, 0x7c, 0x83, 0x67, 0xf4, 0x6e, 0xd7, 0xdf, 0xeb, 0xe1, 0x77, 0xf4, - 0x68, 0x70, 0xf0, 0xac, 0x2e, 0x81, 0x19, 0xd3, 0xbe, 0x82, 0x5f, 0xe5, 0x13, 0x6a, 0x1d, 0x64, - 0xd2, 0x5e, 0x19, 0x22, 0x7f, 0x17, 0x87, 0xfc, 0xa3, 0xc4, 0xd8, 0xcd, 0x1e, 0xf8, 0x1f, 0x9d, - 0x01, 0x85, 0x0d, 0xd3, 0xf3, 0xa1, 0xf6, 0xbf, 0x65, 0x51, 0xe4, 0x6f, 0x00, 0x8b, 0xdb, 0x4e, - 0x67, 0xdf, 0x83, 0x5d, 0xbe, 0x51, 0x0e, 0xa4, 0x4e, 0x02, 0x73, 0x1c, 0x98, 0x9d, 0x26, 0x52, - 0xb2, 0x81, 0x0b, 0xec, 0x81, 0x74, 0x7c, 0xf5, 0xa2, 0xb7, 0x61, 0xba, 0x7e, 0x73, 0x1b, 0xa7, - 0x85, 0x57, 0x2f, 0xb2, 0x89, 0x1c, 0xf4, 0xc5, 0x04, 0xe8, 0x67, 0xe2, 0xa1, 0x2f, 0x09, 0x40, - 0xaf, 0x96, 0x41, 0x69, 0xdb, 0xea, 0x41, 0xfc, 0xc1, 0x2c, 0xfe, 0x60, 0xd8, 0x98, 0x84, 0x65, - 0x1f, 0x8e, 0x49, 0x2b, 0x56, 0x0f, 0x1a, 0xe1, 0x67, 0xc1, 0x44, 0x06, 0x44, 0x13, 0x99, 0x3a, - 0x39, 0x09, 0x87, 0x0c, 0x2f, 0xdb, 0xdc, 0x83, 0xc1, 0xc6, 0xb7, 0x4d, 0x8f, 0xa5, 0x77, 0x4d, - 0xdf, 0xc4, 0x60, 0xcc, 0x1b, 0xf8, 0x3f, 0xef, 0x93, 0x2d, 0x0f, 0xfa, 0x64, 0x3f, 0x57, 0x4e, - 0xd7, 0x23, 0x06, 0xcc, 0xc6, 0xb4, 0xa8, 0x0b, 0x01, 0x40, 0xc4, 0x52, 0x0c, 0x9f, 0x11, 0x30, - 0x1d, 0xd3, 0x85, 0xfe, 0x06, 0xeb, 0x05, 0x5d, 0x30, 0xf8, 0x44, 0x7c, 0x08, 0xc7, 0x6b, 0x99, - 0x7b, 0xe4, 0x6a, 0xc5, 0x0a, 0x7a, 0x47, 0x0f, 0x57, 0x1c, 0x48, 0x8f, 0xfa, 0xdf, 0xc2, 0xa4, - 0xfb, 0xdf, 0x61, 0x75, 0xcc, 0xbe, 0x19, 0xbe, 0x26, 0x0f, 0xe4, 0xca, 0xbe, 0xff, 0x80, 0xee, - 0x7e, 0xbf, 0x27, 0xec, 0x63, 0x4e, 0xfb, 0xb3, 0x7d, 0xff, 0x68, 0x7b, 0xdf, 0x94, 0x5a, 0x22, - 0xe6, 0xcb, 0x1e, 0x57, 0xb7, 0xec, 0x75, 0xe4, 0x6d, 0x72, 0x78, 0x34, 0xea, 0x39, 0xb9, 0xc3, - 0x9b, 0xe6, 0x1a, 0xe9, 0x9f, 0x98, 0x9e, 0x21, 0x7c, 0x0e, 0x3a, 0x9e, 0x3c, 0x77, 0xfb, 0x03, - 0x76, 0x6d, 0xc5, 0xa2, 0x9c, 0x37, 0xc8, 0x83, 0xf6, 0x72, 0xe1, 0x03, 0xa3, 0x44, 0x6c, 0x89, - 0xc7, 0x78, 0xd2, 0xd9, 0x54, 0xaf, 0x16, 0x3a, 0x36, 0x9a, 0x50, 0x6c, 0xf6, 0x80, 0xfd, 0x1d, - 0x7b, 0x4c, 0xa7, 0x7c, 0x68, 0xc4, 0xb4, 0x57, 0x09, 0x2f, 0xe8, 0x93, 0x6a, 0x8f, 0xd8, 0xab, - 0x4f, 0x27, 0x6f, 0x31, 0x47, 0xb1, 0xc4, 0x82, 0xa7, 0x70, 0x57, 0xb4, 0x0c, 0x8a, 0x64, 0xe1, - 0x57, 0x7b, 0xb3, 0x70, 0x13, 0x41, 0xbd, 0x11, 0x7f, 0x7c, 0x27, 0x7c, 0x4e, 0xb3, 0xe6, 0xc0, - 0x1d, 0xf3, 0xc9, 0xa7, 0x3a, 0xe6, 0xc3, 0x47, 0x60, 0x11, 0x68, 0x47, 0xa4, 0x8e, 0x19, 0x4f, - 0x27, 0xd3, 0xb4, 0xb0, 0xa1, 0x0c, 0x65, 0x8f, 0xf7, 0xf3, 0x0b, 0x60, 0x9e, 0x14, 0x4d, 0xce, - 0x17, 0x6a, 0xef, 0x91, 0xbe, 0x7f, 0x50, 0x57, 0x1b, 0x60, 0xfe, 0x32, 0x66, 0x9b, 0x84, 0x97, - 0xa3, 0x2b, 0x17, 0x37, 0x25, 0xae, 0x7b, 0x90, 0x7a, 0x06, 0xb7, 0x46, 0x73, 0xdf, 0x23, 0x19, - 0x93, 0x0d, 0x16, 0x72, 0x78, 0xa2, 0x88, 0x8d, 0x2c, 0x36, 0x49, 0x3d, 0x05, 0x8a, 0x97, 0x2c, - 0x78, 0xb9, 0xd6, 0xa5, 0xd6, 0x2d, 0x7d, 0xd2, 0x7e, 0x5d, 0xd8, 0x67, 0x92, 0x85, 0x9b, 0xf2, - 0x92, 0xad, 0x16, 0x8a, 0x79, 0x4e, 0x8e, 0x64, 0x6b, 0x0a, 0xd1, 0x80, 0x24, 0x72, 0x4f, 0x3d, - 0x0d, 0xe5, 0x5f, 0x49, 0xa1, 0x88, 0x71, 0x86, 0x33, 0x1f, 0x84, 0x2f, 0xf1, 0xac, 0x39, 0x11, - 0x40, 0x54, 0xfe, 0x44, 0xfa, 0x7c, 0xb1, 0xc8, 0x70, 0x23, 0x8a, 0xce, 0x5e, 0xf2, 0xaf, 0x93, - 0xc1, 0x6c, 0x0b, 0xfa, 0x2b, 0x16, 0xec, 0x75, 0x3d, 0xcd, 0x3d, 0xbc, 0x69, 0x74, 0x0b, 0x28, - 0x6e, 0x63, 0x62, 0xa3, 0x36, 0x27, 0x69, 0x36, 0xed, 0x35, 0x92, 0xa8, 0x1f, 0x10, 0x5d, 0x7d, - 0x0b, 0xb8, 0x9d, 0x08, 0x4c, 0x62, 0xa7, 0xe9, 0x92, 0x4b, 0x9e, 0xc2, 0x55, 0x49, 0x32, 0x98, - 0xc7, 0xdb, 0xff, 0xd0, 0x2f, 0xf7, 0xac, 0x1d, 0x9b, 0xbd, 0x5d, 0x7d, 0xec, 0x16, 0xa2, 0x3e, - 0x06, 0x14, 0x4c, 0x44, 0x8d, 0xba, 0xbb, 0x69, 0x43, 0x3b, 0x4f, 0x5c, 0x9e, 0x41, 0x32, 0xa6, - 0xb8, 0x98, 0x24, 0x52, 0xec, 0x80, 0xe7, 0x29, 0x5e, 0x4c, 0x32, 0xb2, 0xf0, 0xec, 0x11, 0xfb, - 0x9a, 0x0c, 0x4e, 0x52, 0x06, 0xce, 0x41, 0xd7, 0xb7, 0x3a, 0x66, 0x8f, 0x20, 0xf7, 0xc2, 0xdc, - 0x24, 0xa0, 0x5b, 0x03, 0x0b, 0x97, 0x58, 0xb2, 0x14, 0xc2, 0xb3, 0x43, 0x21, 0xe4, 0x18, 0x30, - 0xf8, 0x0f, 0x53, 0x5c, 0xf0, 0xc0, 0x49, 0x95, 0xa3, 0x39, 0xc5, 0x0b, 0x1e, 0x84, 0x99, 0xc8, - 0x1e, 0xe2, 0x97, 0xd0, 0xa0, 0x9a, 0x51, 0xf7, 0xf9, 0x45, 0x61, 0x6c, 0x37, 0xc1, 0x1c, 0xc6, - 0x92, 0x7c, 0x48, 0x97, 0x21, 0x12, 0x94, 0x38, 0xec, 0x77, 0xe8, 0x45, 0xf7, 0xe1, 0xb7, 0x06, - 0x4b, 0x47, 0x3b, 0x0f, 0x40, 0xf4, 0x8a, 0xed, 0xa4, 0x73, 0x71, 0x9d, 0xb4, 0x24, 0xd6, 0x49, - 0xbf, 0x49, 0x38, 0xcc, 0xe1, 0x70, 0xb6, 0x0f, 0xaf, 0x1e, 0x62, 0x01, 0xee, 0x46, 0x97, 0x9e, - 0xbd, 0x5e, 0xbc, 0x92, 0xea, 0x45, 0x75, 0xbf, 0xdf, 0xb3, 0x3a, 0x68, 0x3e, 0xf5, 0xc9, 0x89, - 0xcc, 0xa7, 0xd8, 0xfe, 0x40, 0x1e, 0xe8, 0x0f, 0x0e, 0x61, 0x49, 0xdf, 0x08, 0x8e, 0x93, 0x22, - 0x2a, 0x21, 0x5b, 0x05, 0x12, 0xc4, 0x6d, 0x20, 0x99, 0x8f, 0xda, 0x2e, 0xa8, 0x04, 0xa1, 0x10, - 0xc6, 0x58, 0xfa, 0x4c, 0x67, 0xec, 0xa6, 0x55, 0x90, 0x38, 0xce, 0xa6, 0x70, 0x24, 0x2b, 0x4f, - 0xac, 0xdd, 0xcd, 0x7e, 0x17, 0x69, 0xc7, 0x97, 0xf3, 0x93, 0x18, 0x11, 0x9e, 0x42, 0x3d, 0x4d, - 0xe5, 0xd8, 0x25, 0x8d, 0xa8, 0xc8, 0xb0, 0x1f, 0x69, 0xc3, 0xfb, 0xfd, 0xb5, 0x63, 0xc4, 0x2f, - 0x55, 0xbd, 0x09, 0x1c, 0xbf, 0x60, 0x76, 0x2e, 0xee, 0xb8, 0xce, 0x3e, 0xbe, 0xb5, 0xdd, 0xa1, - 0xd7, 0xbf, 0xaf, 0x1d, 0x33, 0x06, 0x5f, 0xa8, 0xb7, 0x06, 0xa6, 0x43, 0x61, 0x94, 0xe9, 0xb0, - 0x76, 0x8c, 0x1a, 0x0f, 0xea, 0x63, 0xc3, 0x4e, 0xa7, 0x98, 0xd8, 0xe9, 0xac, 0x1d, 0x0b, 0xba, - 0x1d, 0xb5, 0x0a, 0x4a, 0x5d, 0xeb, 0x12, 0xde, 0xaa, 0xc6, 0xb3, 0xae, 0x51, 0x41, 0x87, 0xaa, - 0xd6, 0x25, 0xb2, 0xb1, 0xbd, 0x76, 0xcc, 0x08, 0xbf, 0x54, 0x57, 0xc1, 0x2c, 0xde, 0x16, 0xc0, - 0x64, 0x4a, 0xa9, 0x02, 0x0a, 0xad, 0x1d, 0x33, 0xa2, 0x6f, 0x91, 0xf5, 0x91, 0xc7, 0xe7, 0xae, - 0xef, 0x0a, 0xb6, 0xdb, 0x73, 0xa9, 0xb6, 0xdb, 0x91, 0x2c, 0xc8, 0x86, 0xfb, 0x29, 0x50, 0xe8, - 0x60, 0x09, 0x4b, 0x54, 0xc2, 0xe4, 0x51, 0xbd, 0x03, 0xe4, 0xf7, 0x4c, 0x37, 0x98, 0x3c, 0xdf, - 0x30, 0x9a, 0xee, 0xba, 0xe9, 0x5e, 0x44, 0x08, 0xa2, 0xaf, 0x96, 0x67, 0x40, 0x01, 0x0b, 0x2e, - 0xfc, 0xa3, 0xbd, 0x2d, 0x4f, 0xcc, 0x90, 0x8a, 0x63, 0xa3, 0x61, 0xbf, 0xed, 0x04, 0x87, 0xd3, - 0x7f, 0x3d, 0x37, 0x19, 0x0b, 0xf2, 0x2a, 0xe6, 0x3a, 0x15, 0xdb, 0x7a, 0xc6, 0x3e, 0xbc, 0x07, - 0x5e, 0xa1, 0x4b, 0xa2, 0xc3, 0x5e, 0xa9, 0x67, 0x00, 0xf0, 0xe9, 0x49, 0xbd, 0x30, 0x88, 0x29, - 0x93, 0x12, 0x2d, 0x1f, 0x14, 0x46, 0x3b, 0xaa, 0xfc, 0xde, 0x18, 0xa6, 0xcb, 0xa0, 0x20, 0xe2, - 0x67, 0xe0, 0x3d, 0xcb, 0x66, 0xea, 0x1c, 0x3c, 0xa6, 0xec, 0x94, 0xd2, 0x1a, 0x35, 0x23, 0xd8, - 0xcb, 0xbe, 0x6f, 0x7a, 0x4b, 0x9e, 0xdc, 0x28, 0x41, 0x4e, 0x40, 0xeb, 0xf7, 0x5b, 0x5e, 0x74, - 0x7f, 0xb3, 0xf6, 0xb9, 0x89, 0x28, 0xcd, 0x90, 0x01, 0x47, 0x1e, 0x3a, 0xe0, 0x1c, 0x08, 0x10, - 0x94, 0x1f, 0x11, 0x20, 0xa8, 0x90, 0x6e, 0xe5, 0xf0, 0xa3, 0xac, 0xfe, 0x6c, 0xf0, 0xfa, 0x73, - 0x7b, 0x0c, 0x40, 0xc3, 0xe4, 0x32, 0x11, 0xfb, 0xe6, 0x5d, 0xa1, 0xa6, 0xb4, 0x38, 0x4d, 0xb9, - 0x6b, 0x7c, 0x46, 0xb2, 0xd7, 0x96, 0x0f, 0xe7, 0xc1, 0x55, 0x11, 0x33, 0x0d, 0x78, 0x99, 0x2a, - 0xca, 0x1f, 0x4e, 0x44, 0x51, 0xd2, 0x3b, 0x3a, 0x67, 0xad, 0x31, 0xbf, 0x2d, 0x7c, 0x6e, 0x7f, - 0x10, 0xa8, 0x50, 0x36, 0x31, 0xca, 0x72, 0x0a, 0x14, 0x49, 0x0f, 0x43, 0xa1, 0xa1, 0x4f, 0x29, - 0xbb, 0x1b, 0xb1, 0xd3, 0xfe, 0xa2, 0xbc, 0x4d, 0x41, 0x7f, 0xe8, 0xba, 0x46, 0x7b, 0xdf, 0xb5, - 0x6b, 0xb6, 0xef, 0x68, 0xff, 0x7d, 0x22, 0x8a, 0x13, 0x7a, 0xc3, 0xc9, 0xe3, 0x78, 0xc3, 0x8d, - 0xb5, 0xca, 0x11, 0xd4, 0xe0, 0x48, 0x56, 0x39, 0x62, 0x0a, 0xcf, 0x1e, 0xbf, 0x77, 0xca, 0xe0, - 0x14, 0x9d, 0x6c, 0x2d, 0xf3, 0x16, 0xa2, 0x76, 0xef, 0x24, 0x80, 0x3c, 0x19, 0x98, 0x49, 0xd4, - 0x8f, 0x1e, 0x3f, 0xf0, 0x51, 0x0a, 0x12, 0x6f, 0x0c, 0xe5, 0xa6, 0x83, 0x03, 0x1c, 0x4e, 0x04, - 0x29, 0xb1, 0x8b, 0x42, 0x53, 0xb0, 0x91, 0x3d, 0x66, 0x2f, 0x96, 0x41, 0x91, 0xc4, 0x48, 0xd0, - 0x36, 0x33, 0x71, 0x98, 0xe0, 0xef, 0x67, 0x11, 0xd8, 0x91, 0x23, 0xdc, 0x64, 0x16, 0x3f, 0x22, - 0xcd, 0x5e, 0xdc, 0x50, 0x56, 0xa6, 0xe0, 0x42, 0x28, 0x81, 0xb9, 0x16, 0xf4, 0x2b, 0xa6, 0xeb, - 0x5a, 0xe6, 0xce, 0xa4, 0x3c, 0xbe, 0x45, 0xbd, 0x87, 0xb5, 0xef, 0xe4, 0x44, 0xcf, 0xb2, 0x87, - 0x0b, 0xe1, 0x01, 0xab, 0x31, 0x51, 0xc0, 0x5f, 0x2f, 0x74, 0x5e, 0x7d, 0x14, 0xb5, 0x29, 0x78, - 0x6c, 0x4b, 0x60, 0x26, 0x88, 0x83, 0x71, 0x0b, 0x17, 0x1b, 0x65, 0xd7, 0xdf, 0x0b, 0x8e, 0xc1, - 0xe0, 0xff, 0x07, 0xe3, 0x2f, 0x68, 0xaf, 0x48, 0xe9, 0x28, 0x9f, 0x1c, 0xc4, 0x23, 0x5d, 0x1b, - 0x4b, 0xe3, 0x0e, 0x7f, 0x54, 0x61, 0x3b, 0x3e, 0x34, 0x43, 0x97, 0x23, 0xeb, 0xa6, 0x0f, 0xef, - 0xd7, 0xbe, 0x28, 0x83, 0x99, 0x16, 0xf4, 0xd1, 0x78, 0x8b, 0xd8, 0x3f, 0xb4, 0x86, 0xab, 0xcc, - 0x8a, 0x07, 0x3d, 0x5b, 0xab, 0xde, 0x0d, 0x66, 0xfb, 0xae, 0xd3, 0x81, 0x9e, 0x47, 0x57, 0x2f, - 0x58, 0x47, 0xb5, 0x61, 0xa3, 0x3f, 0x66, 0x6d, 0x69, 0x23, 0xf8, 0xc6, 0x88, 0x3e, 0x4f, 0x6b, - 0x06, 0x10, 0x4a, 0xb4, 0x82, 0xd3, 0x36, 0x03, 0x92, 0x0a, 0xcf, 0x1e, 0xe8, 0xdf, 0x97, 0xc1, - 0x7c, 0x0b, 0xfa, 0xa1, 0x14, 0x53, 0x6c, 0x72, 0xc4, 0xc3, 0xcb, 0x41, 0x29, 0x1f, 0x0e, 0xca, - 0x77, 0x0a, 0x5f, 0xbc, 0xcb, 0x4b, 0x33, 0x24, 0x36, 0x11, 0x3c, 0xdf, 0x22, 0x74, 0xdf, 0xae, - 0x18, 0x07, 0x53, 0x38, 0xbe, 0xf6, 0x08, 0x30, 0x8b, 0x79, 0xc1, 0x0d, 0xf6, 0x27, 0xf2, 0x51, - 0xe3, 0xfd, 0x52, 0x46, 0x8d, 0xf7, 0x4e, 0x50, 0xd8, 0x33, 0xdd, 0x8b, 0xc1, 0xe1, 0xdb, 0x47, - 0x8a, 0xad, 0x7e, 0x79, 0x06, 0xf9, 0x6a, 0xb8, 0x9f, 0x66, 0x21, 0x9d, 0x9f, 0xe6, 0xeb, 0xa5, - 0x54, 0x23, 0x21, 0x99, 0x3b, 0x4c, 0xb0, 0xc9, 0xa7, 0x18, 0x37, 0x13, 0xca, 0xce, 0x5e, 0x39, - 0x5e, 0x28, 0x83, 0x12, 0x1a, 0xb7, 0xb1, 0x3d, 0x7e, 0xfe, 0xf0, 0xea, 0x30, 0xdc, 0xd0, 0x4f, - 0xd9, 0x03, 0x07, 0x12, 0x99, 0x9c, 0x79, 0x9f, 0xa2, 0x07, 0x4e, 0x2a, 0x3c, 0x7b, 0x3c, 0xde, - 0x4d, 0xf0, 0xc0, 0xed, 0x41, 0x7b, 0x83, 0x0c, 0xe4, 0x55, 0xe8, 0x4f, 0xdb, 0x8a, 0x7c, 0xbb, - 0x70, 0x78, 0x51, 0x4e, 0x60, 0x98, 0xe7, 0xa5, 0x55, 0x38, 0x99, 0x06, 0x24, 0x16, 0x57, 0x54, - 0x88, 0x81, 0xec, 0x51, 0x7b, 0x3f, 0x41, 0x8d, 0x6c, 0x2e, 0xfc, 0xc8, 0x04, 0x7a, 0xd5, 0xe9, - 0x2e, 0x7c, 0x04, 0x02, 0xc4, 0x34, 0x8e, 0xaa, 0xbd, 0x0d, 0x2b, 0x3c, 0x7b, 0xe4, 0x5e, 0x2a, - 0xe3, 0x4b, 0xcc, 0x2a, 0xbb, 0xb0, 0x73, 0x11, 0x76, 0xd9, 0xcb, 0xb2, 0xc7, 0x85, 0xee, 0x34, - 0x98, 0xe9, 0x10, 0x6a, 0x18, 0xbc, 0x92, 0x11, 0x3c, 0xf2, 0x37, 0x0b, 0x25, 0xde, 0x9d, 0xc5, - 0x77, 0x44, 0xe4, 0xf3, 0x89, 0xe0, 0x22, 0x76, 0xe1, 0x95, 0x40, 0xf1, 0x53, 0x30, 0x5b, 0xc8, - 0x2c, 0xa3, 0xd6, 0x71, 0x6c, 0xed, 0xbf, 0x1e, 0x1e, 0x96, 0x6b, 0xc1, 0xac, 0xd5, 0x71, 0x6c, - 0x1c, 0x02, 0x2e, 0x38, 0x04, 0x14, 0x26, 0x04, 0x6f, 0xf5, 0x3d, 0xe7, 0x3e, 0x8b, 0xee, 0x9a, - 0x47, 0x09, 0xe3, 0x1a, 0x13, 0x88, 0xf5, 0xa3, 0x32, 0x26, 0x86, 0x94, 0x9d, 0x3d, 0x64, 0x9f, - 0x8a, 0xbc, 0xdb, 0x48, 0x57, 0xf8, 0x80, 0x58, 0x05, 0x1e, 0x67, 0x38, 0x63, 0x6b, 0x71, 0x24, - 0xc3, 0x59, 0x02, 0x03, 0x53, 0xb8, 0x89, 0x30, 0xc2, 0x31, 0xf3, 0x35, 0xe0, 0x43, 0xa0, 0x33, - 0x39, 0xf3, 0x70, 0x4c, 0x74, 0x8e, 0xc6, 0x44, 0xfc, 0x08, 0x0d, 0x4f, 0x4f, 0x2d, 0x1e, 0xed, - 0xbf, 0x4d, 0x02, 0x9c, 0xdb, 0xc7, 0xf1, 0x57, 0x20, 0xde, 0x0a, 0xda, 0x5b, 0x25, 0xd1, 0x10, - 0x28, 0x07, 0x24, 0x88, 0xa8, 0x4c, 0x04, 0xc1, 0x37, 0x09, 0xc5, 0x26, 0x11, 0x29, 0x3f, 0x7b, - 0x00, 0x5f, 0x20, 0x83, 0x45, 0xec, 0x23, 0xd0, 0x83, 0xa6, 0x4b, 0x3a, 0xca, 0x89, 0x38, 0xca, - 0xbf, 0x5b, 0x38, 0xc0, 0x0f, 0x2f, 0x87, 0x88, 0x8f, 0x89, 0x40, 0x21, 0x16, 0xdd, 0x47, 0x90, - 0x85, 0xa9, 0x6c, 0xa3, 0x28, 0x21, 0x0b, 0x54, 0xc5, 0x27, 0x83, 0x47, 0x4a, 0x8f, 0x5c, 0x5e, - 0x18, 0x41, 0x63, 0x9b, 0xb2, 0x47, 0xae, 0x08, 0x13, 0xd9, 0x63, 0xf2, 0x86, 0xc7, 0xd0, 0x05, - 0xe7, 0xb6, 0x79, 0xa1, 0x07, 0xb5, 0x57, 0xe5, 0xc3, 0x13, 0x6d, 0xbf, 0x3f, 0x11, 0x0f, 0xcc, - 0x43, 0x5c, 0x46, 0xa5, 0x82, 0xbc, 0xeb, 0x5c, 0x26, 0x4b, 0x5b, 0x0b, 0x06, 0xfe, 0x4f, 0xe2, - 0x59, 0xf6, 0xf6, 0xf7, 0x6c, 0x72, 0x32, 0x74, 0xc1, 0x08, 0x1e, 0xd5, 0xeb, 0xc1, 0xc2, 0x65, - 0xcb, 0xdf, 0x5d, 0x83, 0x66, 0x17, 0xba, 0x86, 0x73, 0x19, 0x7b, 0xcc, 0x95, 0x0c, 0x3e, 0x91, - 0xf7, 0x5f, 0x11, 0xb0, 0x2f, 0x91, 0x50, 0xa6, 0x73, 0xfc, 0x2d, 0x8d, 0xe5, 0x19, 0xcf, 0x55, - 0xf6, 0x0a, 0xf3, 0x01, 0x19, 0xcc, 0x1a, 0xce, 0x65, 0xaa, 0x24, 0xff, 0xcf, 0xd1, 0xea, 0x48, - 0xea, 0x89, 0x1e, 0x96, 0x5c, 0xc8, 0xfe, 0xd4, 0x27, 0x7a, 0x89, 0xc5, 0x4f, 0xe5, 0xe4, 0xd2, - 0xbc, 0xe1, 0x5c, 0x6e, 0x41, 0x9f, 0xb4, 0x08, 0x6d, 0x6b, 0x42, 0x4e, 0xd6, 0x96, 0x47, 0x08, - 0xd2, 0x79, 0x78, 0xf8, 0x9c, 0x76, 0x17, 0x21, 0x14, 0x50, 0xc8, 0xe2, 0xb4, 0x77, 0x11, 0x46, - 0x72, 0x30, 0x85, 0x18, 0x29, 0x32, 0x98, 0x33, 0x9c, 0xcb, 0x68, 0x68, 0x58, 0xb1, 0x7a, 0xbd, - 0xc9, 0x8c, 0x90, 0x69, 0x8d, 0xff, 0x40, 0x0c, 0x01, 0x17, 0x53, 0x37, 0xfe, 0x47, 0x30, 0x90, - 0x3d, 0x0c, 0xcf, 0x25, 0x8d, 0x25, 0x18, 0xa1, 0xed, 0xc9, 0xe0, 0x30, 0x6e, 0x83, 0x08, 0xd9, - 0x38, 0xb2, 0x06, 0x11, 0xc7, 0xc1, 0x54, 0x76, 0x4e, 0x16, 0x2b, 0x78, 0x98, 0x9f, 0x6c, 0x9b, - 0x78, 0x6f, 0x3a, 0xd7, 0x44, 0x3a, 0xec, 0x72, 0x8c, 0x4c, 0x04, 0x8d, 0x14, 0x2e, 0x88, 0x02, - 0x3c, 0x64, 0x8f, 0xc7, 0xc7, 0x65, 0x30, 0x4f, 0x58, 0x78, 0x80, 0x58, 0x01, 0x63, 0x35, 0x2a, - 0xb6, 0x06, 0x47, 0xd3, 0xa8, 0x12, 0x38, 0x98, 0xca, 0x7d, 0xfe, 0xc8, 0x8e, 0x1b, 0xe3, 0xf8, - 0x78, 0x1c, 0x82, 0x63, 0x1b, 0x63, 0x13, 0x3c, 0x42, 0x3e, 0x8e, 0x31, 0x76, 0x44, 0xc7, 0xc8, - 0x9f, 0x1b, 0xb6, 0xa2, 0x49, 0x62, 0x70, 0x88, 0xa6, 0x30, 0x41, 0x18, 0xc6, 0x6c, 0x0a, 0x47, - 0x84, 0xc4, 0xd7, 0x65, 0x00, 0x08, 0x03, 0xeb, 0xce, 0x25, 0x7c, 0x91, 0xe6, 0x04, 0xba, 0xb3, - 0x41, 0xb7, 0x7a, 0x79, 0x84, 0x5b, 0x7d, 0xca, 0x10, 0x2e, 0x69, 0x57, 0x02, 0x19, 0x29, 0xa3, - 0x4a, 0x4e, 0x7d, 0x25, 0x30, 0xb9, 0xfc, 0xec, 0x31, 0xfe, 0x2a, 0xb1, 0xe6, 0xa2, 0x03, 0xa6, - 0x3f, 0x3f, 0x11, 0x94, 0x99, 0xd9, 0xbf, 0xcc, 0xcf, 0xfe, 0x0f, 0x81, 0xed, 0xb8, 0x36, 0xe2, - 0xa8, 0x83, 0xa3, 0xd9, 0xdb, 0x88, 0x47, 0x77, 0x40, 0xf4, 0x47, 0xf2, 0xe0, 0x38, 0xed, 0x44, - 0xbe, 0x1f, 0x20, 0x4e, 0x79, 0x0e, 0x8f, 0xeb, 0x24, 0x47, 0xa0, 0x3c, 0xa9, 0x05, 0xa9, 0x34, - 0x4b, 0x99, 0x02, 0xec, 0x4d, 0x65, 0x75, 0xa3, 0xa8, 0xdf, 0xdf, 0x37, 0xed, 0xae, 0x78, 0xb8, - 0xdf, 0x11, 0xc0, 0x07, 0x6b, 0x8d, 0x32, 0xbf, 0xd6, 0x38, 0x64, 0x65, 0x32, 0xf5, 0xce, 0x35, - 0x16, 0x19, 0x61, 0x77, 0xea, 0x3b, 0xd7, 0xf1, 0x65, 0x67, 0x8f, 0xd2, 0x7b, 0x65, 0x90, 0x6f, - 0x39, 0xae, 0xaf, 0x3d, 0x2f, 0x4d, 0xeb, 0x24, 0x92, 0x8f, 0x40, 0x0a, 0x9e, 0xd5, 0x0a, 0xc8, - 0xa3, 0xca, 0xd1, 0x19, 0xc3, 0x2d, 0xc9, 0x47, 0x9d, 0x4d, 0xdf, 0xc4, 0x5e, 0xdd, 0xa8, 0xfc, - 0xa5, 0xf6, 0x95, 0x3e, 0x34, 0xf0, 0xc7, 0x69, 0xe3, 0xe9, 0x10, 0xf9, 0xb5, 0xe2, 0x0f, 0x60, - 0x64, 0x16, 0x4f, 0x27, 0xb6, 0xe4, 0xec, 0x71, 0x7b, 0xed, 0x71, 0xea, 0xdb, 0xba, 0x62, 0xf5, - 0xa0, 0xf6, 0x3c, 0xe2, 0x32, 0xd2, 0x30, 0xf7, 0xa0, 0xf8, 0x91, 0x98, 0x44, 0xd7, 0x56, 0x1c, - 0x5f, 0x56, 0x8e, 0xe2, 0xcb, 0xa6, 0x6d, 0x50, 0xe4, 0x00, 0x3a, 0x61, 0x69, 0xda, 0x0d, 0x2a, - 0xa1, 0xec, 0xa9, 0xc4, 0xe9, 0x3c, 0xd1, 0x82, 0x3e, 0x31, 0x2a, 0x9b, 0xc1, 0x15, 0x49, 0x4f, - 0x9f, 0x48, 0xc4, 0xce, 0xf0, 0x42, 0x1d, 0x79, 0xe0, 0x06, 0xa6, 0x0f, 0xb0, 0xe0, 0xac, 0xf3, - 0xe0, 0xfc, 0x50, 0xbc, 0x80, 0x78, 0x26, 0x27, 0x02, 0xd3, 0xdb, 0x43, 0x98, 0x36, 0x38, 0x98, - 0xee, 0x18, 0x93, 0x8b, 0xec, 0x01, 0xfb, 0xa9, 0x02, 0x38, 0x4e, 0x26, 0xfd, 0x65, 0xbb, 0x4b, - 0x23, 0xac, 0xbe, 0x59, 0x3a, 0xe2, 0xcd, 0xb6, 0x83, 0x21, 0x58, 0xb9, 0x58, 0xce, 0x85, 0x81, - 0x58, 0xce, 0xea, 0x32, 0x09, 0xe7, 0x8a, 0x3a, 0x51, 0xbc, 0xd3, 0x36, 0x2a, 0xcc, 0x04, 0x96, - 0x3d, 0xee, 0x72, 0xc3, 0xef, 0xf8, 0x7b, 0x44, 0x67, 0xc4, 0xef, 0x11, 0xfd, 0xdd, 0x74, 0xeb, - 0x76, 0xb8, 0xe8, 0x01, 0x81, 0x67, 0x6c, 0x3b, 0xa5, 0x58, 0xd1, 0x13, 0xe0, 0xee, 0x3f, 0x86, - 0x3b, 0x59, 0x14, 0x41, 0x64, 0x4c, 0x77, 0x32, 0x4c, 0xe0, 0x28, 0xdd, 0xc9, 0x46, 0x31, 0x90, - 0x3d, 0x8e, 0xbf, 0x5b, 0xa0, 0xbb, 0xf9, 0xb8, 0xdd, 0x68, 0x7f, 0x22, 0x65, 0x3e, 0x4a, 0x7f, - 0x37, 0x97, 0xca, 0xff, 0x19, 0xf3, 0x95, 0x3c, 0x4c, 0xa7, 0xf1, 0x68, 0x4e, 0x22, 0x37, 0x85, - 0x75, 0x23, 0x09, 0xfb, 0xa2, 0x9f, 0xb7, 0xba, 0xfe, 0xee, 0x84, 0x4e, 0x74, 0x5c, 0x46, 0xb4, - 0x68, 0xbc, 0x7a, 0xf2, 0xa0, 0xfd, 0x4b, 0x2e, 0x55, 0x08, 0xa9, 0x50, 0x24, 0x98, 0xad, 0x18, - 0x11, 0xa7, 0x08, 0xfc, 0x94, 0x48, 0x6f, 0x8a, 0x1a, 0x7d, 0xce, 0xea, 0x42, 0xe7, 0x01, 0xa8, - 0xd1, 0x98, 0xaf, 0xc9, 0x69, 0x74, 0x12, 0xb9, 0xff, 0xa0, 0x1a, 0x1d, 0x8a, 0x64, 0x42, 0x1a, - 0x9d, 0x48, 0x2f, 0x7b, 0x19, 0xbf, 0x62, 0x9e, 0x4e, 0xa4, 0xea, 0x96, 0x7d, 0x51, 0xfb, 0xc7, - 0x22, 0x50, 0x82, 0x38, 0xc2, 0xfe, 0x2e, 0x8d, 0x05, 0xf3, 0x61, 0xe1, 0xbb, 0x51, 0xc6, 0x88, - 0xf7, 0xc2, 0x87, 0x93, 0x2a, 0x1c, 0x08, 0x27, 0x55, 0x06, 0x0b, 0x96, 0xed, 0x43, 0xd7, 0x36, - 0x7b, 0x2b, 0x3d, 0x73, 0xc7, 0x3b, 0x3d, 0x33, 0xf4, 0xf2, 0xba, 0x1a, 0x93, 0xc7, 0xe0, 0xbf, - 0x60, 0x2f, 0x10, 0x2d, 0xf1, 0x17, 0x88, 0xc6, 0x44, 0xbf, 0x9a, 0x8d, 0x8f, 0x7e, 0x15, 0x46, - 0xb7, 0x02, 0xa3, 0x83, 0x63, 0x8b, 0xda, 0xc6, 0x29, 0xc3, 0xfd, 0xdd, 0x22, 0x18, 0x85, 0x2d, - 0x0c, 0xfd, 0xf8, 0x6a, 0x39, 0xd5, 0xea, 0x1e, 0x52, 0x84, 0xa5, 0x41, 0x25, 0x48, 0x6d, 0xa1, - 0xb2, 0x95, 0x97, 0x07, 0x2a, 0x1f, 0x9a, 0x3c, 0x79, 0x01, 0x93, 0x87, 0x55, 0xaa, 0x82, 0xe8, - 0x9d, 0xae, 0xe2, 0x8b, 0x85, 0x22, 0xb5, 0x9d, 0xc2, 0x69, 0xa4, 0x02, 0x38, 0x11, 0x44, 0xbb, - 0xed, 0xf7, 0xa1, 0xe9, 0x9a, 0x76, 0x07, 0x6a, 0x9f, 0x92, 0x26, 0x61, 0xf6, 0xae, 0x80, 0x92, - 0xd5, 0x71, 0xec, 0x96, 0xf5, 0xcc, 0xe0, 0x72, 0xb9, 0xe4, 0x20, 0xeb, 0x58, 0x22, 0x35, 0xfa, - 0x85, 0x11, 0x7e, 0xab, 0xd6, 0xc0, 0x6c, 0xc7, 0x74, 0xbb, 0x24, 0x08, 0x5f, 0x61, 0xe0, 0x22, - 0xa7, 0x58, 0x42, 0x95, 0xe0, 0x13, 0x23, 0xfa, 0x5a, 0x6d, 0xf2, 0x42, 0x2c, 0x0e, 0x44, 0xf3, - 0x88, 0x25, 0x56, 0x8d, 0x3e, 0xe2, 0x64, 0x8e, 0xa4, 0xe3, 0xc2, 0x9e, 0x49, 0x2e, 0x1d, 0x9f, - 0x21, 0x77, 0x44, 0x87, 0x09, 0x69, 0x97, 0x07, 0x70, 0x51, 0x07, 0xd0, 0x98, 0xf6, 0xf2, 0x80, - 0x10, 0x17, 0xd9, 0x6b, 0xe6, 0xbb, 0x8a, 0x60, 0x81, 0xf4, 0x6a, 0x54, 0x9c, 0xda, 0x0b, 0x64, - 0x50, 0x6c, 0x41, 0xff, 0x1e, 0x78, 0x45, 0x6b, 0x1d, 0x7e, 0x4c, 0x56, 0x80, 0x7c, 0x31, 0x0c, - 0x38, 0x88, 0xfe, 0xa6, 0xdd, 0xb7, 0x0f, 0xf8, 0x5a, 0x22, 0x3c, 0x4d, 0x7b, 0xdf, 0x3e, 0xb9, - 0xf8, 0xec, 0xf1, 0xf9, 0x69, 0x19, 0xc8, 0xe5, 0x6e, 0x57, 0xeb, 0x1c, 0x1e, 0x8a, 0xeb, 0xc0, - 0x5c, 0xd0, 0x66, 0xa2, 0x18, 0x90, 0x6c, 0x52, 0xda, 0x45, 0xd0, 0x50, 0x36, 0xe5, 0xee, 0xd4, - 0x77, 0x15, 0x12, 0xca, 0xce, 0x1e, 0x94, 0x2f, 0xcd, 0xd0, 0x46, 0xb3, 0xec, 0x38, 0x17, 0xf1, - 0x51, 0x99, 0x5f, 0x96, 0x41, 0x61, 0x05, 0xfa, 0x9d, 0x5d, 0xcd, 0x9b, 0x48, 0x9b, 0x19, 0xb8, - 0xf7, 0x7c, 0x44, 0x50, 0xce, 0xb4, 0xd1, 0x9f, 0x03, 0xb6, 0x97, 0x30, 0xcb, 0xd3, 0x8e, 0xfe, - 0x9c, 0x58, 0xfa, 0x14, 0x0e, 0xc1, 0xe5, 0xc1, 0x62, 0xb8, 0x02, 0x46, 0x30, 0x7b, 0x47, 0xee, - 0x01, 0xb7, 0x1e, 0x3a, 0xc2, 0x6e, 0xd6, 0xfe, 0x30, 0x5d, 0x88, 0xb5, 0x50, 0xe6, 0x7c, 0xcd, - 0x33, 0x5e, 0x98, 0x4c, 0x11, 0x7c, 0x4d, 0x8c, 0xc1, 0x29, 0xac, 0x00, 0xc8, 0xa0, 0x84, 0x19, - 0xaa, 0x5a, 0x97, 0xb0, 0xeb, 0x21, 0xb7, 0x50, 0xf9, 0xac, 0x89, 0x2c, 0x54, 0xde, 0xc1, 0x2f, - 0x54, 0x0a, 0x46, 0x4c, 0x0e, 0xd6, 0x29, 0x53, 0xfa, 0xe2, 0xa0, 0xef, 0x27, 0xbe, 0x4c, 0x99, - 0xc2, 0x17, 0x67, 0x44, 0xf9, 0xd9, 0x23, 0xfa, 0xc6, 0xff, 0x4c, 0x3b, 0xeb, 0x60, 0x43, 0x56, - 0xfb, 0x1f, 0x27, 0x40, 0xfe, 0x1c, 0xfa, 0xf3, 0x0f, 0xd1, 0x8d, 0x5a, 0x2f, 0x9b, 0x40, 0x70, - 0x87, 0x27, 0x83, 0x3c, 0xa2, 0x4f, 0xa7, 0x3d, 0x37, 0x89, 0xed, 0x0e, 0x23, 0x46, 0x0c, 0xfc, - 0x9d, 0x7a, 0x0a, 0x14, 0x3d, 0x67, 0xdf, 0xed, 0x20, 0xf3, 0x1b, 0x69, 0x0c, 0x7d, 0x4a, 0x1b, - 0xd4, 0x94, 0x23, 0xbd, 0x34, 0x39, 0x97, 0x53, 0xe6, 0x82, 0x25, 0x99, 0xbb, 0x60, 0x29, 0xc5, - 0xfe, 0x83, 0x00, 0x6f, 0xd9, 0x6b, 0xc4, 0x9f, 0xe0, 0xbb, 0x06, 0xbb, 0x93, 0x82, 0x3d, 0x46, - 0x2c, 0x87, 0x55, 0x87, 0xb4, 0x0e, 0xe3, 0xbc, 0x68, 0xc3, 0x38, 0xf2, 0x53, 0x75, 0x18, 0x17, - 0xe0, 0x61, 0x2a, 0xa7, 0xdc, 0x8b, 0xd4, 0xc9, 0xf5, 0xde, 0x49, 0xa2, 0x9b, 0xe7, 0x94, 0xfe, - 0x50, 0xe8, 0x4c, 0xd0, 0xf9, 0x75, 0x6c, 0x74, 0x8e, 0xc8, 0xfd, 0xf5, 0x37, 0x64, 0x1c, 0x49, - 0x33, 0x30, 0x82, 0xc4, 0x2f, 0x4a, 0x4a, 0x0d, 0x11, 0x1a, 0x83, 0xb9, 0x38, 0xd2, 0x0b, 0xe3, - 0x87, 0x16, 0xe7, 0x45, 0xc7, 0xf0, 0x3f, 0xed, 0xd0, 0xe2, 0xa2, 0x8c, 0x64, 0x0f, 0xe4, 0x2f, - 0x91, 0x8b, 0xc9, 0xca, 0x1d, 0xdf, 0xba, 0x34, 0xe1, 0x96, 0xc6, 0x0f, 0x2f, 0x29, 0xa3, 0x09, - 0x1f, 0x90, 0x10, 0xe1, 0x70, 0xda, 0xd1, 0x84, 0xc5, 0xd8, 0xc8, 0x1e, 0xa6, 0x9f, 0x04, 0x48, - 0x7a, 0x74, 0x6d, 0xe7, 0x0d, 0x32, 0x90, 0x5b, 0xd0, 0xd7, 0xe0, 0xe1, 0xd1, 0x3a, 0x0b, 0xe6, - 0x99, 0xa5, 0x83, 0xe0, 0xc2, 0x1b, 0x2e, 0x2d, 0xed, 0x41, 0xf9, 0x50, 0x64, 0xec, 0xa2, 0xcb, - 0xb4, 0x0f, 0xca, 0x8b, 0x30, 0x31, 0x85, 0x83, 0xf2, 0x74, 0xd9, 0xe7, 0xfb, 0x05, 0xa8, 0x49, - 0xad, 0x00, 0x1d, 0x0a, 0xa8, 0xa3, 0x58, 0x0a, 0x7a, 0x7b, 0x64, 0x6c, 0x4c, 0x09, 0xab, 0x0f, - 0xb3, 0x58, 0x35, 0x79, 0xac, 0x6e, 0x13, 0x11, 0x93, 0x98, 0xf1, 0x21, 0x34, 0xc1, 0x7f, 0x67, - 0x08, 0x97, 0xc1, 0xc1, 0xf5, 0xe4, 0xb1, 0xf9, 0xc8, 0x1e, 0xb1, 0x5f, 0x20, 0xe3, 0x56, 0x8b, - 0xcc, 0xad, 0x26, 0x33, 0x6e, 0xd1, 0x69, 0x9b, 0xcc, 0x4d, 0xdb, 0x52, 0x1e, 0xac, 0x88, 0xfc, - 0x85, 0x03, 0xe6, 0x46, 0x41, 0x94, 0x9f, 0xf0, 0xc1, 0x8a, 0x91, 0x1c, 0x64, 0x0f, 0xce, 0xb7, - 0x64, 0x00, 0x56, 0x5d, 0x67, 0xbf, 0xdf, 0x74, 0xbb, 0xd0, 0xd5, 0xfe, 0x2c, 0x9a, 0xa9, 0xfd, - 0xcc, 0x04, 0x66, 0x6a, 0x1b, 0x00, 0xec, 0x84, 0xc4, 0xa9, 0x86, 0x3f, 0x46, 0x6c, 0x5e, 0x16, - 0x31, 0x65, 0x30, 0x34, 0xf8, 0xbb, 0x85, 0x9f, 0xca, 0x63, 0x9c, 0xd4, 0x67, 0x45, 0xe4, 0x26, - 0x39, 0x53, 0x7b, 0x77, 0x88, 0x75, 0x9b, 0xc3, 0xfa, 0x29, 0x87, 0xe0, 0x24, 0x7b, 0xcc, 0xff, - 0x7e, 0x06, 0xcc, 0x91, 0x7d, 0x59, 0x22, 0xd3, 0xbf, 0x8e, 0x40, 0xff, 0xf9, 0x09, 0x80, 0xbe, - 0x09, 0xe6, 0x9d, 0x88, 0x3a, 0xe9, 0x53, 0xd9, 0x95, 0xb2, 0x44, 0xd8, 0x19, 0xbe, 0x0c, 0x8e, - 0x8c, 0xf6, 0x09, 0x16, 0x79, 0x83, 0x47, 0xfe, 0x8e, 0x04, 0x79, 0x33, 0x14, 0x27, 0x09, 0xfd, - 0x7b, 0x42, 0xe8, 0x37, 0x39, 0xe8, 0xcb, 0x87, 0x61, 0x65, 0x0a, 0xf7, 0x2a, 0xc8, 0x20, 0x8f, - 0x8f, 0x41, 0xbe, 0x25, 0xc3, 0x85, 0x98, 0xd3, 0x60, 0x06, 0x37, 0xd9, 0x70, 0x82, 0x18, 0x3c, - 0xa2, 0x37, 0xe6, 0xb6, 0x0f, 0xdd, 0x70, 0x89, 0x3d, 0x78, 0x44, 0x3c, 0x04, 0xee, 0xe7, 0xde, - 0xe9, 0x22, 0xd9, 0x71, 0x0e, 0x13, 0xc6, 0x9e, 0x3d, 0xb2, 0x12, 0x9f, 0xd8, 0xc1, 0xc8, 0x71, - 0x66, 0x8f, 0x23, 0x18, 0xc9, 0x1e, 0xf8, 0x2f, 0xe7, 0xc1, 0x69, 0xb2, 0xfc, 0xb7, 0xe2, 0x3a, - 0x7b, 0x03, 0xd7, 0x98, 0x59, 0x87, 0xd7, 0x85, 0x1b, 0xc0, 0xa2, 0xcf, 0x39, 0xde, 0x53, 0x9d, - 0x18, 0x48, 0xd5, 0x7e, 0x8f, 0x75, 0x9e, 0x79, 0x1a, 0x8f, 0xe4, 0x72, 0x82, 0x00, 0xe3, 0x78, - 0x4f, 0xbd, 0xa3, 0x22, 0xc8, 0x28, 0xb3, 0x9a, 0x28, 0x8f, 0xb5, 0xb8, 0x1c, 0xea, 0x54, 0x41, - 0x44, 0xa7, 0x3e, 0x18, 0xea, 0xd4, 0x7f, 0xe2, 0x74, 0x6a, 0xf5, 0xf0, 0x22, 0x99, 0xc2, 0x12, - 0xd3, 0x22, 0x28, 0xae, 0x58, 0x3d, 0x1f, 0xba, 0xda, 0x57, 0xe9, 0x3c, 0xea, 0x55, 0x19, 0x76, - 0x2f, 0x55, 0x50, 0xdc, 0xc6, 0xa5, 0x51, 0x83, 0xec, 0x66, 0x31, 0x6c, 0x08, 0x87, 0x06, 0xfd, - 0x36, 0x6d, 0x90, 0xbf, 0x01, 0x32, 0x13, 0x9b, 0x80, 0xa5, 0x08, 0xf2, 0x37, 0x9a, 0x85, 0xa9, - 0xdc, 0x6f, 0x55, 0x34, 0xe0, 0x1e, 0x1a, 0x41, 0x2e, 0x66, 0x87, 0xb0, 0x02, 0x64, 0xab, 0xeb, - 0xe1, 0xa6, 0x37, 0x6b, 0xa0, 0xbf, 0x69, 0x5d, 0x8e, 0x06, 0x45, 0x45, 0x58, 0x9e, 0xb6, 0xcb, - 0x91, 0x10, 0x17, 0xd9, 0x63, 0xf6, 0x5d, 0xec, 0x6f, 0xda, 0xef, 0x99, 0x1d, 0x88, 0xb8, 0xcf, - 0x0c, 0xb5, 0x45, 0x20, 0x59, 0xc1, 0x88, 0x2f, 0x59, 0x6c, 0x3b, 0x2d, 0x1c, 0xa2, 0x9d, 0x8e, - 0xbb, 0x1a, 0x19, 0xca, 0x1c, 0x57, 0xfc, 0xc8, 0x56, 0x23, 0x13, 0xd9, 0x98, 0xc2, 0xed, 0xa5, - 0xc1, 0x79, 0xdc, 0xa9, 0xb6, 0xd6, 0x71, 0xf7, 0x6a, 0xa8, 0xb0, 0x26, 0x76, 0xf6, 0x76, 0x9c, - 0xbd, 0x9a, 0x78, 0x1e, 0xa6, 0x80, 0xd6, 0x22, 0x45, 0xeb, 0x0b, 0x74, 0x18, 0xcd, 0x78, 0xbb, - 0xd4, 0x73, 0x5c, 0x3f, 0xdd, 0x76, 0x29, 0xe2, 0xce, 0xc0, 0xdf, 0xa5, 0x3d, 0xbf, 0xc5, 0x1f, - 0xcf, 0x9e, 0xd4, 0xf0, 0x99, 0xe2, 0xfc, 0xd6, 0x28, 0x06, 0xb2, 0x87, 0xf7, 0xad, 0x47, 0x34, - 0x78, 0x8e, 0xdb, 0x1c, 0x69, 0x1b, 0x98, 0xd8, 0xd0, 0x39, 0x4e, 0x73, 0x8c, 0xe7, 0x21, 0x7b, - 0xbc, 0xfe, 0x8e, 0x19, 0x38, 0xdf, 0x34, 0xc5, 0x81, 0x33, 0x68, 0x99, 0x85, 0x31, 0x5b, 0xe6, - 0xb8, 0xbb, 0x0b, 0x54, 0xd6, 0x93, 0x1b, 0x30, 0xc7, 0xd9, 0x5d, 0x48, 0x60, 0x22, 0x7b, 0xc4, - 0xdf, 0x2c, 0x83, 0x42, 0x6b, 0xfa, 0xe3, 0xe5, 0xb8, 0x73, 0x11, 0x2c, 0xab, 0xd6, 0xc4, 0x86, - 0xcb, 0x71, 0xe6, 0x22, 0xb1, 0x2c, 0x4c, 0x21, 0x7e, 0xff, 0x71, 0x30, 0x8f, 0x27, 0xdc, 0xc1, - 0x6e, 0xeb, 0xdf, 0xd1, 0x51, 0xf3, 0xf5, 0x19, 0xb6, 0xd5, 0xbb, 0x41, 0x29, 0xd8, 0x1d, 0xa2, - 0x23, 0xe7, 0x92, 0x58, 0xfb, 0x0c, 0xb8, 0x34, 0xc2, 0xef, 0x0f, 0xe5, 0x13, 0x31, 0xf1, 0x9d, - 0xc0, 0x71, 0x7d, 0x22, 0x8e, 0x74, 0x37, 0xf0, 0x77, 0xa3, 0x11, 0xf5, 0xbf, 0x66, 0x87, 0xf9, - 0xe0, 0x2e, 0x61, 0x7e, 0xc8, 0x2e, 0xe1, 0xa7, 0x58, 0x2c, 0x5b, 0x3c, 0x96, 0x77, 0x8a, 0x8a, - 0x70, 0x82, 0x63, 0xed, 0x7b, 0x43, 0x38, 0xcf, 0x71, 0x70, 0x2e, 0x1f, 0x8a, 0x97, 0x29, 0x9c, - 0x9f, 0xcc, 0x47, 0x63, 0xee, 0xa7, 0x33, 0x6c, 0xc7, 0x03, 0x87, 0x33, 0xf2, 0x07, 0x0e, 0x67, - 0x70, 0x2d, 0xbd, 0x70, 0xc8, 0x96, 0xfe, 0x69, 0x56, 0x3b, 0xda, 0xbc, 0x76, 0x3c, 0x59, 0x1c, - 0x91, 0xc9, 0x8d, 0xcc, 0xef, 0x0b, 0xd5, 0xe3, 0x3c, 0xa7, 0x1e, 0x95, 0xc3, 0x31, 0x93, 0xbd, - 0x7e, 0xfc, 0x66, 0x30, 0xa1, 0x3d, 0xe2, 0xf6, 0x3e, 0xee, 0x46, 0x24, 0x27, 0xc4, 0x89, 0x8d, - 0xdc, 0xe3, 0x6c, 0x44, 0x8e, 0xe2, 0x64, 0x0a, 0x21, 0xdd, 0x16, 0xc0, 0x1c, 0xe6, 0xe9, 0xbc, - 0xd5, 0xdd, 0x81, 0xbe, 0xf6, 0x6a, 0xe2, 0xaa, 0x18, 0x04, 0xd0, 0x9c, 0x50, 0x94, 0xa3, 0xb8, - 0x63, 0xb3, 0x69, 0xfd, 0x05, 0x08, 0x93, 0x4b, 0x0c, 0x83, 0xd3, 0x0e, 0xc4, 0x38, 0x92, 0x83, - 0xec, 0x21, 0xfb, 0x04, 0x71, 0xe6, 0xa8, 0x9b, 0x57, 0x9c, 0x7d, 0x5f, 0x7b, 0xce, 0x04, 0x3a, - 0xe8, 0x65, 0x50, 0xec, 0x61, 0x6a, 0xf4, 0x74, 0x46, 0xf2, 0x74, 0x87, 0x8a, 0x80, 0x94, 0x6f, - 0xd0, 0x2f, 0xd3, 0x1e, 0xd1, 0x88, 0xe4, 0x48, 0xe8, 0x4c, 0xfb, 0x88, 0xc6, 0x88, 0xf2, 0xa7, - 0x72, 0x55, 0x4f, 0x09, 0x95, 0x6e, 0xed, 0x59, 0xfe, 0x84, 0x02, 0x41, 0xf4, 0x10, 0xad, 0x20, - 0x10, 0x04, 0x7e, 0x48, 0x7b, 0xf0, 0x94, 0x91, 0x0a, 0xfa, 0x7c, 0xda, 0x07, 0x4f, 0x93, 0x8b, - 0xcf, 0x1e, 0x93, 0x9f, 0x23, 0x2d, 0xeb, 0x1c, 0xf1, 0xc1, 0xcd, 0xd0, 0xbd, 0x77, 0xec, 0xc6, - 0x42, 0x58, 0x3b, 0xba, 0xc6, 0x32, 0xb4, 0xfc, 0xec, 0x81, 0xf9, 0xe5, 0x1f, 0x00, 0x85, 0x2a, - 0xbc, 0xb0, 0xbf, 0xa3, 0xdd, 0x01, 0x4a, 0x6d, 0x17, 0xc2, 0x9a, 0xbd, 0xed, 0x20, 0xe9, 0xfa, - 0xe8, 0x7f, 0x00, 0x09, 0x7d, 0x42, 0x78, 0xec, 0x42, 0xb3, 0x1b, 0x1d, 0x43, 0x0b, 0x1e, 0xb5, - 0x97, 0x49, 0x20, 0xdf, 0xf2, 0x4d, 0x5f, 0x9b, 0x0d, 0xb1, 0xd5, 0x9e, 0xc3, 0x62, 0x71, 0x07, - 0x8f, 0xc5, 0x0d, 0x9c, 0x2c, 0x30, 0x07, 0x4b, 0xe8, 0xfb, 0x18, 0x00, 0x34, 0x50, 0xba, 0xcf, - 0x73, 0x6c, 0x94, 0x23, 0x38, 0x29, 0x19, 0x3c, 0x6b, 0xaf, 0x0c, 0xc5, 0x7d, 0x17, 0x27, 0xee, - 0x47, 0x89, 0x15, 0x31, 0x85, 0x95, 0x36, 0x09, 0xcc, 0x22, 0xd1, 0xae, 0x41, 0xb3, 0xeb, 0x69, - 0x0f, 0x8b, 0x94, 0x3f, 0x46, 0xcc, 0xda, 0x47, 0x84, 0x63, 0x7a, 0x92, 0x5a, 0x85, 0xc4, 0xe3, - 0xfd, 0x05, 0x82, 0x98, 0x26, 0x12, 0x1f, 0xd3, 0xe4, 0x16, 0x90, 0xb7, 0xec, 0x6d, 0x87, 0x7a, - 0xaf, 0x3d, 0x38, 0x86, 0x36, 0xd2, 0x09, 0x03, 0x67, 0x14, 0x0c, 0xf8, 0x99, 0xcc, 0xd6, 0x54, - 0xee, 0xce, 0xcb, 0xa3, 0xd2, 0xb5, 0xff, 0x7b, 0xa4, 0xb0, 0x55, 0x15, 0xe4, 0xfb, 0xa6, 0xbf, - 0x4b, 0x8b, 0xc6, 0xff, 0x91, 0x8d, 0xbc, 0x6f, 0x9b, 0xb6, 0x63, 0x5f, 0xd9, 0xb3, 0x9e, 0x19, - 0x5e, 0xd1, 0xcb, 0xa5, 0x21, 0xce, 0x77, 0xa0, 0x0d, 0x5d, 0xd3, 0x87, 0xad, 0x4b, 0x3b, 0x78, - 0x8e, 0x55, 0x32, 0xd8, 0xa4, 0xd4, 0xfa, 0x8f, 0x38, 0x8e, 0xd7, 0xff, 0x6d, 0xab, 0x07, 0x71, - 0xc0, 0x27, 0xaa, 0xff, 0xc1, 0x73, 0x2a, 0xfd, 0x1f, 0x52, 0x44, 0xf6, 0x68, 0xfc, 0xab, 0x04, - 0xe6, 0x5b, 0x48, 0xe1, 0x5a, 0xfb, 0x7b, 0x7b, 0xa6, 0x7b, 0x45, 0x7b, 0x78, 0x84, 0x0a, 0xa3, - 0x9a, 0x39, 0x4e, 0x35, 0xb5, 0xdf, 0x10, 0xbe, 0x9d, 0x9a, 0x36, 0x6d, 0xa6, 0x84, 0xd4, 0xed, - 0xe0, 0xb1, 0xa0, 0x80, 0xd4, 0x3b, 0xf0, 0xe7, 0x4b, 0x6c, 0x08, 0x24, 0xa7, 0x60, 0x60, 0xac, - 0x91, 0xbc, 0x4d, 0x21, 0x28, 0x87, 0x04, 0x8e, 0xb7, 0x7c, 0xb3, 0x73, 0x71, 0xd5, 0x71, 0x9d, - 0x7d, 0xdf, 0xb2, 0xa1, 0xa7, 0x3d, 0x24, 0x42, 0x20, 0xd0, 0xff, 0x5c, 0xa4, 0xff, 0xda, 0xbf, - 0xe5, 0x44, 0x47, 0xd1, 0xb0, 0x5b, 0x65, 0xc9, 0xc7, 0xc4, 0xb9, 0x12, 0x1b, 0x17, 0x45, 0x28, - 0x66, 0x2f, 0xb4, 0x37, 0xc9, 0x40, 0xd1, 0xef, 0xef, 0x3b, 0xae, 0x5f, 0x77, 0x3a, 0x66, 0xcf, - 0xf3, 0x1d, 0x17, 0x6a, 0xcd, 0x44, 0xa9, 0xa1, 0x1e, 0xa6, 0xeb, 0x74, 0xa2, 0xc1, 0x91, 0x3e, - 0xb1, 0x6a, 0x27, 0xf3, 0x3a, 0xfe, 0x09, 0xe1, 0x5d, 0x46, 0x22, 0x95, 0x41, 0x8e, 0x62, 0xf4, - 0x7c, 0x58, 0x97, 0x96, 0xce, 0x15, 0x5f, 0x6c, 0xe7, 0x51, 0x88, 0xa9, 0x29, 0x2c, 0x95, 0x4b, - 0x60, 0xa1, 0xb5, 0x7f, 0x21, 0x24, 0xe2, 0xb1, 0x46, 0xc8, 0x6b, 0x84, 0x83, 0x59, 0x50, 0xc5, - 0x63, 0x09, 0xc5, 0xc8, 0xf7, 0x7a, 0xb0, 0xe0, 0xb1, 0xd9, 0x28, 0xde, 0x7c, 0xa2, 0x60, 0x10, - 0x8b, 0xd1, 0xa5, 0x66, 0x2f, 0xc0, 0xf7, 0x49, 0x60, 0xa1, 0xd9, 0x87, 0x36, 0xec, 0x12, 0x1f, - 0x3b, 0x4e, 0x80, 0x2f, 0x4b, 0x29, 0x40, 0x8e, 0x50, 0x8c, 0x00, 0x23, 0x7f, 0xd8, 0x6a, 0x20, - 0xbc, 0x28, 0x21, 0x95, 0xe0, 0x92, 0x4a, 0xcb, 0x5e, 0x70, 0x5f, 0x91, 0xc0, 0x9c, 0xb1, 0x6f, - 0x6f, 0xb8, 0x0e, 0x1a, 0x8d, 0x5d, 0xed, 0xce, 0xa8, 0x83, 0xb8, 0x19, 0x9c, 0xe8, 0xee, 0xbb, - 0x78, 0xfd, 0xa9, 0x66, 0xb7, 0x60, 0xc7, 0xb1, 0xbb, 0x1e, 0xae, 0x47, 0xc1, 0x38, 0xf8, 0xe2, - 0xf6, 0xfc, 0xf3, 0xfe, 0x52, 0xce, 0x69, 0x2f, 0x10, 0x8e, 0x98, 0x43, 0x2a, 0xcf, 0x14, 0x2d, - 0xde, 0x13, 0x08, 0xc6, 0xc5, 0x19, 0x55, 0x42, 0xf6, 0xc2, 0xfd, 0x82, 0x04, 0xd4, 0x72, 0xa7, - 0xe3, 0xec, 0xdb, 0x7e, 0x0b, 0xf6, 0x60, 0xc7, 0x6f, 0xbb, 0x66, 0x07, 0xb2, 0xf6, 0xb3, 0x02, - 0xe4, 0xae, 0xe5, 0xd2, 0x3e, 0x18, 0xfd, 0xa5, 0x72, 0x7c, 0x99, 0xf0, 0x8e, 0x23, 0xa9, 0xe5, - 0xc1, 0x52, 0x52, 0x88, 0x53, 0x6c, 0x5f, 0x51, 0xb0, 0xa0, 0xec, 0xa5, 0xfa, 0x69, 0x09, 0xcc, - 0x06, 0x3d, 0xf6, 0x8e, 0x88, 0x30, 0x7f, 0x2e, 0xe5, 0x64, 0x24, 0x24, 0x9e, 0x42, 0x86, 0xef, - 0x4a, 0x31, 0xab, 0x88, 0xa3, 0x9f, 0x4e, 0x74, 0xe5, 0xf4, 0xa2, 0x43, 0x8f, 0x8d, 0xe6, 0xd6, - 0x4a, 0xb3, 0x5e, 0xd5, 0x0d, 0x45, 0xd6, 0xbe, 0x2a, 0x81, 0xfc, 0x86, 0x65, 0xef, 0xb0, 0x81, - 0xcd, 0x4e, 0x22, 0x3b, 0xb2, 0x0b, 0xef, 0xa7, 0x2d, 0x9d, 0x3c, 0xa8, 0xb7, 0x82, 0x93, 0xf6, - 0xfe, 0xde, 0x05, 0xe8, 0x36, 0xb7, 0xf1, 0x28, 0xeb, 0xb5, 0x9d, 0x16, 0xb4, 0x89, 0x11, 0x5a, - 0x30, 0x86, 0xbe, 0xe3, 0x4d, 0x30, 0x81, 0xc9, 0x03, 0xe2, 0x24, 0x46, 0xe2, 0x21, 0x53, 0x12, - 0xc3, 0x54, 0xaa, 0x69, 0xc3, 0x10, 0xe2, 0xd9, 0x6b, 0xea, 0x6f, 0x15, 0xc0, 0xd5, 0x65, 0xfb, - 0x0a, 0xb6, 0x29, 0x48, 0x07, 0x5f, 0xd9, 0x35, 0xed, 0x1d, 0x88, 0x07, 0x88, 0x50, 0xe2, 0x6c, - 0xa4, 0xff, 0x1c, 0x1f, 0xe9, 0x5f, 0x35, 0xc0, 0x8c, 0xe3, 0x76, 0xa1, 0xbb, 0x7c, 0x05, 0xf3, - 0x34, 0xb8, 0xec, 0x4c, 0xdb, 0xe4, 0xb0, 0x22, 0x96, 0x28, 0xf9, 0xa5, 0x26, 0xf9, 0xde, 0x08, - 0x08, 0x9d, 0xbd, 0x19, 0xcc, 0xd0, 0x34, 0x75, 0x1e, 0x94, 0x9a, 0x46, 0x55, 0x37, 0xb6, 0x6a, - 0x55, 0xe5, 0x98, 0x7a, 0x15, 0x38, 0x5e, 0x6b, 0xeb, 0x46, 0xb9, 0x5d, 0x6b, 0x36, 0xb6, 0x70, - 0xba, 0x92, 0xd3, 0x9e, 0x9b, 0x17, 0xf5, 0xec, 0x4d, 0x66, 0x66, 0x18, 0xac, 0x06, 0x98, 0xe9, - 0x90, 0x0c, 0x78, 0x08, 0x9d, 0x4b, 0x55, 0x3b, 0x4a, 0x90, 0x24, 0x18, 0x01, 0x21, 0xf5, 0x0c, - 0x00, 0x97, 0x5d, 0xc7, 0xde, 0x89, 0xce, 0xb4, 0x95, 0x0c, 0x26, 0x45, 0x7b, 0x4e, 0x0e, 0x14, - 0xc9, 0x37, 0xf8, 0x66, 0x13, 0xfc, 0x2f, 0x12, 0x7c, 0xf0, 0x8c, 0x2c, 0x5e, 0x2c, 0xaf, 0x68, - 0xa2, 0x45, 0x1f, 0x91, 0x2e, 0x12, 0x19, 0x10, 0x4b, 0x98, 0x56, 0xe5, 0x16, 0x50, 0x24, 0xdf, - 0x52, 0xaf, 0x83, 0xf8, 0x28, 0xa5, 0x24, 0x9b, 0xa0, 0x9f, 0xb2, 0xb8, 0x4c, 0xb3, 0xd7, 0xe6, - 0x8f, 0x4a, 0xa0, 0xd4, 0x80, 0x7e, 0x65, 0x17, 0x76, 0x2e, 0x6a, 0x8f, 0xe4, 0x17, 0x40, 0x7b, - 0x16, 0xb4, 0xfd, 0x7b, 0xf7, 0x7a, 0xe1, 0x02, 0x68, 0x90, 0xa0, 0x3d, 0x9f, 0xed, 0x7c, 0x9f, - 0xc2, 0xeb, 0xcf, 0x4d, 0x43, 0xea, 0x1a, 0x94, 0x10, 0xa3, 0x32, 0xa7, 0x40, 0xd1, 0x85, 0xde, - 0x7e, 0x2f, 0x58, 0x44, 0xa3, 0x4f, 0xda, 0x6b, 0x43, 0x71, 0x56, 0x38, 0x71, 0xde, 0x22, 0x5e, - 0xc4, 0x14, 0xc2, 0x9e, 0xe6, 0xc1, 0x4c, 0xcd, 0xb6, 0x7c, 0xcb, 0xec, 0x69, 0x2f, 0xc8, 0x83, - 0x85, 0x16, 0xf4, 0x37, 0x4c, 0xd7, 0xdc, 0x83, 0x3e, 0x74, 0x3d, 0xed, 0x3b, 0x7c, 0x9f, 0xd0, - 0xef, 0x99, 0xfe, 0xb6, 0xe3, 0xee, 0x05, 0xaa, 0x19, 0x3c, 0x23, 0xd5, 0xbc, 0x04, 0x5d, 0x2f, - 0xe2, 0x2b, 0x78, 0x44, 0x6f, 0x2e, 0x3b, 0xee, 0x45, 0x34, 0x08, 0xd2, 0x69, 0x1a, 0x7d, 0x44, - 0xf4, 0x7a, 0xce, 0x4e, 0x1d, 0x5e, 0x82, 0x41, 0x54, 0xb5, 0xf0, 0x19, 0xcd, 0x05, 0xba, 0x4e, - 0xc3, 0xf1, 0x51, 0xa7, 0x5d, 0x77, 0x76, 0x48, 0xd8, 0xd9, 0x92, 0xc1, 0x27, 0x46, 0xb9, 0xcc, - 0x4b, 0x10, 0xe7, 0x2a, 0xb2, 0xb9, 0x68, 0xa2, 0xba, 0x04, 0xd4, 0xf0, 0xb3, 0x36, 0xec, 0xc1, - 0x3d, 0xe8, 0xbb, 0x57, 0xf0, 0xed, 0x12, 0x25, 0x63, 0xc8, 0x1b, 0x3a, 0x40, 0x8b, 0x4f, 0xd6, - 0xa9, 0xf4, 0x96, 0x38, 0xc9, 0x1d, 0x6a, 0xb2, 0x2e, 0x42, 0x71, 0x2a, 0xb7, 0x67, 0xc9, 0xc8, - 0x9a, 0x79, 0xb9, 0x0c, 0xf2, 0x78, 0xf0, 0x7c, 0x73, 0x8e, 0x5b, 0x61, 0xda, 0x83, 0x9e, 0x67, - 0xee, 0xc0, 0x60, 0x85, 0x89, 0x3e, 0xaa, 0xb7, 0x81, 0x42, 0x0f, 0x63, 0x4a, 0x06, 0x87, 0x87, - 0x73, 0x35, 0x43, 0x06, 0x06, 0xa2, 0x15, 0x8e, 0x04, 0x18, 0x6e, 0x83, 0x7c, 0x71, 0xf6, 0x6e, - 0x50, 0x20, 0xf0, 0xcf, 0x82, 0x42, 0x55, 0x5f, 0xde, 0x5c, 0x55, 0x8e, 0xa1, 0xbf, 0x01, 0x7f, - 0xb3, 0xa0, 0xb0, 0x52, 0x6e, 0x97, 0xeb, 0x8a, 0x84, 0xea, 0x51, 0x6b, 0xac, 0x34, 0x15, 0x19, - 0x25, 0x6e, 0x94, 0x1b, 0xb5, 0x8a, 0x92, 0x57, 0xe7, 0xc0, 0xcc, 0xf9, 0xb2, 0xd1, 0xa8, 0x35, - 0x56, 0x95, 0x82, 0xf6, 0x17, 0x2c, 0x7e, 0xb7, 0xf3, 0xf8, 0x5d, 0x1f, 0xc7, 0xd3, 0x30, 0xc8, - 0x7e, 0x31, 0x84, 0xec, 0x4e, 0x0e, 0xb2, 0x1f, 0x10, 0x21, 0x32, 0x05, 0x77, 0xa6, 0x22, 0x98, - 0xd9, 0x70, 0x9d, 0x0e, 0xf4, 0x3c, 0xed, 0xa5, 0x12, 0x28, 0x56, 0x4c, 0xbb, 0x03, 0x7b, 0xda, - 0x35, 0x11, 0x54, 0xc4, 0x55, 0x34, 0x17, 0xb8, 0x8a, 0x6a, 0xdf, 0xca, 0x89, 0xf6, 0x7e, 0x94, - 0xee, 0x12, 0xa1, 0x19, 0x23, 0x1f, 0xb1, 0x5e, 0x2e, 0x91, 0xd4, 0x14, 0x6e, 0xd8, 0x91, 0xc0, - 0x2c, 0x5d, 0x0d, 0xb8, 0x00, 0xd9, 0x79, 0xf8, 0x77, 0x72, 0xa2, 0x93, 0xc3, 0xa0, 0x06, 0x21, - 0x99, 0x18, 0x79, 0x88, 0x4d, 0x04, 0x47, 0x51, 0x9b, 0xc2, 0xe6, 0xa1, 0x04, 0xe6, 0x36, 0x6d, - 0x6f, 0x98, 0x50, 0xc4, 0xc3, 0xf1, 0x07, 0xd5, 0x60, 0x08, 0x1d, 0x2a, 0x1c, 0xff, 0x68, 0x7a, - 0xd9, 0x0b, 0xe6, 0x3b, 0x39, 0x70, 0x72, 0x15, 0xda, 0xd0, 0xb5, 0x3a, 0xa4, 0x06, 0x81, 0x24, - 0xee, 0xe4, 0x25, 0xf1, 0x48, 0x8e, 0xf3, 0x61, 0x5f, 0xf0, 0x12, 0x78, 0x55, 0x28, 0x81, 0xa7, - 0x70, 0x12, 0xb8, 0x59, 0x90, 0xce, 0x14, 0xae, 0x55, 0x9f, 0x05, 0xf3, 0x0d, 0xc7, 0xb7, 0xb6, - 0xad, 0x0e, 0xf1, 0x41, 0xfb, 0x05, 0x19, 0xe4, 0xeb, 0x96, 0xe7, 0x6b, 0xe5, 0xa8, 0x3b, 0xb9, - 0x0e, 0xcc, 0x59, 0x76, 0xa7, 0xb7, 0xdf, 0x85, 0x06, 0x34, 0x49, 0xbf, 0x52, 0x32, 0xd8, 0xa4, - 0x68, 0x6b, 0x1f, 0xb1, 0x25, 0x07, 0x5b, 0xfb, 0xbf, 0x23, 0xbc, 0x0c, 0xc3, 0xb2, 0x80, 0xe3, - 0x52, 0xc6, 0xd8, 0x5d, 0x65, 0xb0, 0x60, 0x33, 0x59, 0x03, 0x83, 0x7d, 0xf0, 0x5e, 0x02, 0x96, - 0x9c, 0xc1, 0x7f, 0xa1, 0x7d, 0x40, 0xa8, 0xb1, 0x8e, 0x62, 0x28, 0x1d, 0x32, 0x2b, 0x63, 0x4c, - 0x92, 0x55, 0xb0, 0x58, 0x6b, 0xb4, 0x75, 0xa3, 0x51, 0xae, 0xd3, 0x2c, 0xb2, 0xf6, 0xaf, 0x12, - 0x28, 0x18, 0xb0, 0xdf, 0xbb, 0xc2, 0x06, 0x9e, 0xa6, 0x8e, 0xe2, 0xb9, 0xd0, 0x51, 0x5c, 0x5d, - 0x01, 0xc0, 0xec, 0xa0, 0x82, 0xf1, 0xcd, 0x5c, 0xd2, 0xd0, 0x70, 0xa6, 0x5c, 0x05, 0xcb, 0x61, - 0x6e, 0x83, 0xf9, 0x52, 0x7b, 0xa1, 0xf0, 0xce, 0x11, 0x47, 0x0d, 0x73, 0x18, 0xd3, 0x27, 0x7c, - 0x50, 0x68, 0xb3, 0x67, 0x24, 0xb9, 0xa3, 0x11, 0xff, 0xd7, 0x24, 0x90, 0x6f, 0xa3, 0xde, 0x92, - 0xe9, 0x38, 0x3f, 0x37, 0x9e, 0x8e, 0x23, 0x32, 0x31, 0x3a, 0x7e, 0x17, 0x98, 0x67, 0x35, 0x96, - 0xba, 0x4a, 0x24, 0xaa, 0x38, 0xf7, 0xc1, 0x38, 0x1a, 0x3e, 0x84, 0x9d, 0xa3, 0x11, 0xf1, 0x67, - 0x1e, 0x05, 0xc0, 0x3a, 0xdc, 0xbb, 0x00, 0x5d, 0x6f, 0xd7, 0xea, 0x6b, 0x7f, 0x25, 0x83, 0xd9, - 0x55, 0xe8, 0xb7, 0x7c, 0xd3, 0xdf, 0xf7, 0x06, 0xb6, 0x3b, 0x6d, 0xa7, 0x62, 0x76, 0x76, 0x21, - 0xed, 0x8e, 0x82, 0x47, 0xed, 0x3d, 0xb2, 0xa8, 0x3f, 0x51, 0x54, 0xce, 0x52, 0x58, 0x46, 0x0c, - 0x26, 0x8f, 0x06, 0xf9, 0xae, 0xe9, 0x9b, 0x14, 0x8b, 0x6b, 0x06, 0xb0, 0x88, 0x08, 0x19, 0x38, - 0x9b, 0xf6, 0x0e, 0x49, 0xc4, 0xa1, 0x48, 0xa0, 0xfc, 0x74, 0x20, 0x7c, 0x20, 0x37, 0x06, 0x0a, - 0x27, 0xc0, 0x42, 0xa3, 0xd9, 0xde, 0xaa, 0x37, 0x57, 0x57, 0x75, 0x94, 0xaa, 0xc8, 0xea, 0x29, - 0xa0, 0x6e, 0x94, 0xef, 0x5d, 0xd7, 0x1b, 0xed, 0xad, 0x46, 0xb3, 0xaa, 0xd3, 0x2f, 0xf3, 0xea, - 0x71, 0x30, 0x57, 0x29, 0x57, 0xd6, 0x82, 0x84, 0x82, 0x7a, 0x1a, 0x9c, 0x5c, 0xd7, 0xd7, 0x97, - 0x75, 0xa3, 0xb5, 0x56, 0xdb, 0xd8, 0x42, 0x64, 0x56, 0x9a, 0x9b, 0x8d, 0xaa, 0x52, 0x54, 0x35, - 0x70, 0x8a, 0x79, 0x73, 0xde, 0x68, 0x36, 0x56, 0xb7, 0x5a, 0xed, 0x72, 0x5b, 0x57, 0x66, 0xd4, - 0xab, 0xc0, 0xf1, 0x4a, 0xb9, 0x81, 0xb3, 0x57, 0x9a, 0x8d, 0x86, 0x5e, 0x69, 0x2b, 0x25, 0xed, - 0xdf, 0xf2, 0x60, 0xae, 0xe6, 0x35, 0xcc, 0x3d, 0x78, 0xce, 0xec, 0x59, 0x5d, 0xed, 0x05, 0xcc, - 0xcc, 0xe3, 0x7a, 0xb0, 0xe0, 0x92, 0xbf, 0xb0, 0xdb, 0xb6, 0x20, 0x41, 0x73, 0xc1, 0xe0, 0x13, - 0xd1, 0x9c, 0xdc, 0xc6, 0x04, 0x82, 0x39, 0x39, 0x79, 0x52, 0x97, 0x01, 0x20, 0xff, 0xda, 0xd1, - 0x1d, 0xb1, 0x67, 0x07, 0x5b, 0x93, 0xb9, 0x07, 0x3d, 0xe8, 0x5e, 0xb2, 0x3a, 0x30, 0xc8, 0x69, - 0x30, 0x5f, 0x69, 0x5f, 0x97, 0x45, 0xf7, 0x17, 0x19, 0x50, 0x99, 0xea, 0xc4, 0xf4, 0x86, 0x3f, - 0x2e, 0x8b, 0xec, 0x0e, 0x0a, 0x91, 0x4c, 0xa7, 0x29, 0x2f, 0x96, 0xc6, 0x5b, 0xb6, 0x6d, 0x37, - 0x9b, 0x5b, 0xad, 0xb5, 0xa6, 0xd1, 0x56, 0x64, 0x75, 0x1e, 0x94, 0xd0, 0x63, 0xbd, 0xd9, 0x58, - 0x55, 0xf2, 0xea, 0xd5, 0xe0, 0xc4, 0x5a, 0xb9, 0xb5, 0x55, 0x6b, 0x9c, 0x2b, 0xd7, 0x6b, 0xd5, - 0xad, 0xca, 0x5a, 0xd9, 0x68, 0x29, 0x05, 0xf5, 0x1a, 0x70, 0x75, 0xbb, 0xa6, 0x1b, 0x5b, 0x2b, - 0x7a, 0xb9, 0xbd, 0x69, 0xe8, 0xad, 0xad, 0x46, 0x73, 0xab, 0x51, 0x5e, 0xd7, 0x95, 0x22, 0x6a, - 0xfe, 0xf8, 0x55, 0xa4, 0x36, 0x33, 0x07, 0x95, 0xb1, 0x14, 0xa3, 0x8c, 0xb3, 0x83, 0xca, 0x08, - 0x58, 0xb5, 0x32, 0xf4, 0x96, 0x6e, 0x9c, 0xd3, 0x95, 0xb9, 0x61, 0xba, 0x36, 0xaf, 0x9e, 0x04, - 0x0a, 0xe2, 0x61, 0xab, 0xd6, 0x0a, 0x72, 0x56, 0x95, 0x05, 0xed, 0xd3, 0x45, 0x70, 0xca, 0x80, - 0x3b, 0x96, 0xe7, 0x43, 0x77, 0xc3, 0xbc, 0xb2, 0x07, 0x6d, 0x3f, 0xe8, 0xe4, 0xff, 0x29, 0xb5, - 0x32, 0xae, 0x83, 0x85, 0x3e, 0xa1, 0xb1, 0x0e, 0xfd, 0x5d, 0xa7, 0x4b, 0x47, 0xe1, 0x47, 0xc6, - 0xf6, 0x1c, 0x4b, 0x1b, 0x6c, 0x76, 0x83, 0xff, 0x9a, 0xd1, 0x6d, 0x39, 0x41, 0xb7, 0xf3, 0xe3, - 0xe8, 0xb6, 0x7a, 0x2d, 0x98, 0xdd, 0xf7, 0xa0, 0xab, 0xef, 0x99, 0x56, 0x2f, 0xb8, 0xe3, 0x33, - 0x4c, 0xd0, 0xde, 0x99, 0x17, 0x3d, 0xb1, 0xc2, 0xd4, 0x65, 0xb8, 0x18, 0x63, 0xfa, 0xd6, 0x33, - 0x00, 0xd0, 0xca, 0x6e, 0xba, 0x3d, 0xaa, 0xac, 0x4c, 0x0a, 0xe2, 0xef, 0x82, 0xd5, 0xeb, 0x59, - 0xf6, 0x4e, 0xb8, 0xef, 0x1f, 0x25, 0x68, 0x2f, 0x96, 0x45, 0x4e, 0xb0, 0xa4, 0xe5, 0x2d, 0x5d, - 0x6b, 0x7a, 0xa1, 0x34, 0xe5, 0x7e, 0xf7, 0x60, 0xd3, 0x29, 0xaa, 0x0a, 0x98, 0xc7, 0x69, 0xb4, - 0x05, 0x2a, 0x33, 0xa8, 0x0f, 0x0e, 0xc8, 0xad, 0xeb, 0xed, 0xb5, 0x66, 0x35, 0x7c, 0x57, 0x42, - 0x24, 0x11, 0x33, 0xe5, 0xc6, 0xbd, 0xb8, 0x35, 0xce, 0xaa, 0x0f, 0x01, 0xd7, 0x30, 0x1d, 0x76, - 0xb9, 0x6e, 0xe8, 0xe5, 0xea, 0xbd, 0x5b, 0xfa, 0xd3, 0x6a, 0xad, 0x76, 0x8b, 0x6f, 0x5c, 0x41, - 0x3b, 0x9a, 0x43, 0xfc, 0xea, 0xeb, 0xe5, 0x5a, 0x9d, 0xf6, 0xef, 0x2b, 0x4d, 0x63, 0xbd, 0xdc, - 0x56, 0xe6, 0xb5, 0x97, 0xcb, 0x40, 0x59, 0x85, 0xfe, 0x86, 0xe3, 0xfa, 0x66, 0xaf, 0x6e, 0xd9, - 0x17, 0x37, 0xdd, 0x1e, 0x37, 0xd9, 0x14, 0x0e, 0xd3, 0xc1, 0x0f, 0x91, 0x1c, 0xc1, 0xf8, 0x1d, - 0xf1, 0x3e, 0xce, 0x16, 0x29, 0x53, 0x94, 0xa0, 0x3d, 0x4b, 0x12, 0x59, 0xee, 0x16, 0x2f, 0x35, - 0x9d, 0x9e, 0x3c, 0x7b, 0xda, 0xe3, 0xf3, 0x10, 0xd4, 0x8a, 0xda, 0xf3, 0xf2, 0xa0, 0xb4, 0x62, - 0xd9, 0x66, 0xcf, 0x7a, 0x26, 0x17, 0x1d, 0x33, 0xea, 0x63, 0x72, 0x09, 0x7d, 0x8c, 0x34, 0xd6, - 0xf8, 0xf9, 0xb3, 0xb2, 0xe8, 0xf2, 0x02, 0x23, 0xfb, 0x80, 0xc9, 0x98, 0xc1, 0xf3, 0x63, 0x92, - 0xc8, 0xf2, 0xc2, 0x68, 0x7a, 0xe9, 0x30, 0xfc, 0xec, 0xf7, 0x87, 0x8d, 0x35, 0xd0, 0xbe, 0x4b, - 0xc3, 0x54, 0x61, 0x56, 0xfb, 0x03, 0x19, 0x68, 0xab, 0xd0, 0x3f, 0x07, 0xdd, 0x70, 0x2a, 0x80, - 0x7b, 0x7d, 0x6a, 0x6f, 0x33, 0x4d, 0xf6, 0xcd, 0x2c, 0x80, 0xe7, 0x79, 0x00, 0xcb, 0x09, 0x8d, - 0x27, 0x86, 0x74, 0x4c, 0xe3, 0xad, 0x81, 0xa2, 0x87, 0xdf, 0x53, 0x35, 0x7b, 0x6c, 0xfc, 0x70, - 0x89, 0x89, 0xb1, 0xd4, 0x09, 0x61, 0x83, 0x12, 0xd0, 0xbe, 0x1b, 0x4e, 0x82, 0x7e, 0x98, 0xd3, - 0x8e, 0x95, 0x43, 0x33, 0x9b, 0x4e, 0x5f, 0xdc, 0x6c, 0xd5, 0x65, 0x98, 0x7d, 0xa3, 0x7d, 0xac, - 0x00, 0x4e, 0x0e, 0xab, 0x8e, 0xf6, 0xa1, 0x1c, 0xb7, 0xc3, 0x0e, 0xf1, 0x90, 0x9f, 0xa3, 0x1b, - 0x88, 0xe8, 0x41, 0x7d, 0x3c, 0xb8, 0x3a, 0x5c, 0x86, 0x6b, 0x3b, 0x0d, 0x78, 0xd9, 0xeb, 0x41, - 0xdf, 0x87, 0x2e, 0xae, 0x5a, 0xc9, 0x18, 0xfe, 0x52, 0x7d, 0x22, 0x78, 0x90, 0x65, 0x7b, 0x56, - 0x17, 0xba, 0x6d, 0xab, 0xef, 0x95, 0xed, 0x6e, 0x7b, 0xdf, 0x77, 0x5c, 0xcb, 0xa4, 0x37, 0x52, - 0x96, 0x8c, 0xb8, 0xd7, 0xea, 0x4d, 0x40, 0xb1, 0xbc, 0xa6, 0x7d, 0xc1, 0x31, 0xdd, 0xae, 0x65, - 0xef, 0xd4, 0x2d, 0xcf, 0xa7, 0x1e, 0xc0, 0x07, 0xd2, 0xb5, 0xbf, 0x96, 0x45, 0x0f, 0xd3, 0x8d, - 0x80, 0x35, 0xa6, 0x43, 0x79, 0xbe, 0x2c, 0x72, 0x3c, 0x2e, 0x1d, 0xed, 0x74, 0xca, 0xf2, 0xdc, - 0x69, 0x1b, 0x12, 0xc3, 0x47, 0x70, 0xdc, 0xb5, 0x90, 0xf4, 0xc0, 0x10, 0x38, 0xa7, 0x1b, 0xb5, - 0x95, 0x9a, 0x8e, 0xcc, 0x8a, 0xab, 0xc1, 0x89, 0xe8, 0x5d, 0xf5, 0xde, 0xad, 0x96, 0xde, 0x68, - 0x2b, 0x25, 0xd4, 0x4f, 0x91, 0xe4, 0x95, 0x72, 0xad, 0xae, 0x57, 0xb7, 0xda, 0x4d, 0xf4, 0xa6, - 0x3a, 0x9e, 0x69, 0xa1, 0x3d, 0x27, 0x0f, 0x8e, 0x63, 0xd9, 0x5e, 0xc1, 0x52, 0x45, 0x42, 0x19, - 0xf0, 0xb5, 0x0d, 0x01, 0x9a, 0x25, 0xe2, 0xd5, 0x7e, 0x5f, 0xf8, 0xc2, 0x4d, 0x06, 0xc2, 0x81, - 0x32, 0x62, 0x34, 0xe3, 0x3b, 0x92, 0x48, 0x84, 0x0a, 0x61, 0xb2, 0xe9, 0x94, 0xe2, 0x9f, 0xa7, - 0x3d, 0xe2, 0xc4, 0x83, 0x8f, 0xad, 0xcc, 0x0a, 0xfe, 0xf8, 0x69, 0x1b, 0x35, 0x03, 0xab, 0xc3, - 0x22, 0x00, 0x38, 0x05, 0x6b, 0x10, 0xd1, 0x83, 0xa1, 0xe3, 0x55, 0x9c, 0x1e, 0x94, 0x2b, 0xed, - 0xda, 0x39, 0x3d, 0x4e, 0x0f, 0x3e, 0x2f, 0x83, 0xd2, 0x2a, 0xf4, 0xd1, 0x9c, 0xca, 0xd3, 0x9e, - 0x24, 0xb0, 0xfe, 0x83, 0xcc, 0x98, 0x9e, 0xd3, 0x31, 0x7b, 0xe1, 0x32, 0x00, 0x79, 0xd2, 0x7e, - 0x6c, 0x1c, 0x13, 0x24, 0x28, 0x3a, 0x66, 0xbc, 0xfa, 0x21, 0x50, 0xf0, 0xd1, 0x6b, 0xba, 0x0c, - 0xfd, 0xb0, 0xd8, 0xe1, 0x0a, 0x11, 0xa9, 0x9a, 0xbe, 0x69, 0x90, 0xfc, 0xcc, 0xe8, 0x24, 0x68, - 0xbb, 0xc4, 0x30, 0xf2, 0xfd, 0x68, 0x7f, 0xfe, 0x85, 0x0c, 0xae, 0x26, 0xed, 0xa3, 0xdc, 0xef, - 0xb7, 0x7c, 0xc7, 0x85, 0x06, 0xec, 0x40, 0xab, 0xef, 0x0f, 0xac, 0xef, 0xb9, 0x24, 0x35, 0xd8, - 0x6c, 0xa6, 0x8f, 0xda, 0x1b, 0x64, 0xd1, 0x08, 0xbf, 0x07, 0xda, 0xe3, 0x40, 0x79, 0x31, 0x8d, - 0xfd, 0x53, 0x92, 0x48, 0xcc, 0xde, 0x94, 0xc4, 0xd3, 0x01, 0xf5, 0xf1, 0x23, 0x00, 0x2a, 0x58, - 0xb9, 0x31, 0xf4, 0x8a, 0x5e, 0xdb, 0x40, 0x83, 0xc0, 0x43, 0xc1, 0x83, 0x37, 0x36, 0x8d, 0xca, - 0x5a, 0xb9, 0xa5, 0x6f, 0x19, 0xfa, 0x6a, 0xad, 0xd5, 0xa6, 0x4e, 0x59, 0xe4, 0xab, 0x19, 0xf5, - 0x5a, 0x70, 0xba, 0xb5, 0xb9, 0xdc, 0xaa, 0x18, 0xb5, 0x0d, 0x9c, 0x6e, 0xe8, 0x0d, 0xfd, 0x3c, - 0x7d, 0x5b, 0xd2, 0x3e, 0xa2, 0x80, 0x39, 0x34, 0x01, 0x68, 0x91, 0x79, 0x81, 0xf6, 0x37, 0x79, - 0x30, 0x67, 0x40, 0xcf, 0xe9, 0x5d, 0xc2, 0x73, 0x84, 0x69, 0x4d, 0x3d, 0xbe, 0x2d, 0x8b, 0x9e, - 0xdf, 0x66, 0x98, 0x5d, 0x62, 0x18, 0x8d, 0x9f, 0x68, 0x9a, 0x97, 0x4c, 0xab, 0x67, 0x5e, 0xa0, - 0x5d, 0x4d, 0xc9, 0x88, 0x12, 0xd4, 0x25, 0xa0, 0x3a, 0x97, 0x6d, 0xe8, 0xb6, 0x3a, 0x97, 0x75, - 0x7f, 0xb7, 0xdc, 0xed, 0xba, 0xd0, 0xf3, 0xe8, 0xea, 0xc5, 0x90, 0x37, 0xea, 0x8d, 0xe0, 0x38, - 0x4e, 0x65, 0x32, 0x13, 0x07, 0x99, 0xc1, 0xe4, 0x30, 0x67, 0xd9, 0xbe, 0x12, 0xe4, 0x2c, 0x30, - 0x39, 0xa3, 0x64, 0xf6, 0xb8, 0x44, 0x91, 0x3f, 0xa5, 0x73, 0x1d, 0x98, 0xb3, 0xcd, 0x3d, 0xa8, - 0xdf, 0xdf, 0xb7, 0x5c, 0xe8, 0x61, 0xc7, 0x18, 0xd9, 0x60, 0x93, 0xb4, 0x8f, 0x09, 0x9d, 0x37, - 0x17, 0x93, 0x58, 0x3a, 0xdd, 0x5f, 0x1d, 0x43, 0xf5, 0x87, 0xf4, 0x33, 0xb2, 0xf6, 0x11, 0x19, - 0xcc, 0x53, 0xa6, 0xca, 0xf6, 0x95, 0x5a, 0x57, 0x7b, 0x28, 0x67, 0xfc, 0x9a, 0x28, 0x2d, 0x30, - 0x7e, 0xf1, 0x83, 0xf6, 0x13, 0xb2, 0xa8, 0xbb, 0xf3, 0x90, 0x8a, 0xe3, 0x32, 0xe2, 0x1d, 0x47, - 0xb7, 0x9d, 0x7d, 0xea, 0xa8, 0x5a, 0x32, 0xc8, 0x43, 0x96, 0x8b, 0x7a, 0xda, 0xaf, 0x0b, 0x39, - 0x53, 0x0b, 0x56, 0xe3, 0x88, 0x00, 0xfc, 0x8c, 0x0c, 0x16, 0x29, 0x57, 0x2d, 0x7a, 0xce, 0x47, - 0xe8, 0xc0, 0xdb, 0x4f, 0x09, 0x1b, 0x82, 0x43, 0xea, 0x4f, 0x4b, 0x7a, 0xc0, 0x00, 0xf9, 0x09, - 0xa1, 0xe0, 0x68, 0xc2, 0x15, 0x39, 0x22, 0x28, 0xdf, 0x95, 0x07, 0x73, 0x9b, 0x1e, 0x74, 0xa9, - 0xdf, 0xbe, 0xf6, 0xda, 0x3c, 0x90, 0x57, 0x21, 0xb7, 0x91, 0xfa, 0x22, 0x61, 0x0f, 0x5f, 0xb6, - 0xb2, 0x0c, 0x51, 0x64, 0x23, 0xc5, 0xc0, 0x76, 0x03, 0x58, 0x24, 0x22, 0x2d, 0xfb, 0x3e, 0x32, - 0x12, 0x03, 0x6f, 0xda, 0x81, 0xd4, 0x49, 0x6c, 0x15, 0xe1, 0xb2, 0x50, 0x96, 0x0a, 0xe2, 0xa9, - 0x0e, 0xb7, 0xc9, 0x7c, 0x36, 0x6f, 0x0c, 0xa4, 0xaa, 0x8f, 0x01, 0x57, 0x39, 0x7d, 0x48, 0xce, - 0xaf, 0x30, 0x99, 0x0b, 0x38, 0xf3, 0xb0, 0x57, 0xda, 0xdf, 0x08, 0xf9, 0xea, 0x8a, 0x4b, 0x27, - 0x9d, 0x2e, 0xf4, 0x27, 0x63, 0x92, 0x9c, 0x04, 0x0a, 0xca, 0x81, 0xf7, 0x5f, 0x0c, 0xbd, 0xd5, - 0xac, 0x9f, 0xd3, 0x87, 0x2f, 0x63, 0x14, 0xb4, 0xe7, 0xca, 0x60, 0x76, 0xd9, 0x75, 0xcc, 0x6e, - 0xc7, 0xf4, 0x7c, 0xed, 0xbb, 0x12, 0x98, 0xdf, 0x30, 0xaf, 0xf4, 0x1c, 0xb3, 0x8b, 0xfd, 0xfb, - 0x07, 0xfa, 0x82, 0x3e, 0x79, 0x15, 0xf4, 0x05, 0xf4, 0x91, 0x3f, 0x18, 0x18, 0x1e, 0xdd, 0xcb, - 0x89, 0xdc, 0xab, 0x19, 0x6e, 0xf3, 0x49, 0xc3, 0x82, 0x95, 0x06, 0x7c, 0x2d, 0xb1, 0x3c, 0xc5, - 0x58, 0x94, 0x1f, 0x11, 0x0b, 0x3f, 0x2a, 0x42, 0xf2, 0x68, 0x76, 0xe5, 0x9f, 0x57, 0x02, 0xc5, - 0x2a, 0xc4, 0x56, 0xdc, 0xaf, 0x4a, 0x60, 0xa6, 0x05, 0x7d, 0x6c, 0xc1, 0xdd, 0xc6, 0x79, 0x0a, - 0x77, 0x71, 0x86, 0xc8, 0x89, 0x3d, 0x78, 0x46, 0x93, 0x75, 0xe6, 0xbc, 0x35, 0xfe, 0x9f, 0xc2, - 0x23, 0x91, 0x94, 0xbb, 0x44, 0xcb, 0x3c, 0x94, 0x47, 0x62, 0x22, 0xa9, 0xec, 0x7d, 0xad, 0xde, - 0x23, 0x51, 0xd7, 0x2a, 0xa6, 0xd7, 0x7b, 0x35, 0xab, 0x9f, 0x89, 0xde, 0x66, 0x94, 0xf9, 0x04, - 0xe7, 0xa8, 0xc7, 0x81, 0x19, 0x22, 0xf3, 0x60, 0x3e, 0x3a, 0xe8, 0xa7, 0x40, 0x48, 0xe0, 0xb3, - 0xd7, 0x41, 0x4e, 0x41, 0x17, 0xb5, 0xf8, 0xc2, 0xa7, 0x12, 0x83, 0x60, 0xbe, 0x01, 0xfd, 0xcb, - 0x8e, 0x7b, 0xb1, 0xe5, 0x9b, 0x3e, 0xd4, 0xfe, 0x59, 0x22, 0xd7, 0xe5, 0x31, 0xd1, 0x4f, 0x1a, - 0xe0, 0x04, 0xa9, 0x10, 0xcd, 0x88, 0xfb, 0x6f, 0x52, 0x91, 0xeb, 0x86, 0x0a, 0x81, 0xc9, 0x67, - 0x1c, 0xfc, 0x54, 0x7b, 0xe9, 0xd0, 0xa0, 0x4f, 0xd2, 0x90, 0x49, 0x03, 0x95, 0x0c, 0xcb, 0x60, - 0xfc, 0xfd, 0x78, 0xda, 0x47, 0x85, 0xcc, 0x6a, 0x31, 0x9a, 0x47, 0xd3, 0x15, 0x7c, 0xf8, 0x51, - 0x20, 0x5f, 0xd9, 0x35, 0x7d, 0xed, 0xdd, 0x32, 0x00, 0xe5, 0x6e, 0x77, 0x9d, 0xf8, 0x80, 0xb3, - 0x0e, 0x69, 0x67, 0xc1, 0x7c, 0x67, 0xd7, 0x8c, 0x6e, 0xce, 0x20, 0xfd, 0x01, 0x97, 0xa6, 0x3e, - 0x3e, 0x72, 0x26, 0x27, 0x52, 0xd5, 0x06, 0x60, 0x42, 0x65, 0x50, 0xda, 0xa1, 0xa3, 0x39, 0x1f, - 0x0a, 0x33, 0xf1, 0x08, 0x1d, 0xfa, 0x7c, 0x29, 0x62, 0x2f, 0x7e, 0x0e, 0x47, 0x49, 0x87, 0x07, - 0x6c, 0xa2, 0x84, 0x94, 0x27, 0xbd, 0xc5, 0x02, 0x7a, 0x24, 0xf3, 0x35, 0x95, 0xd0, 0xb5, 0xaa, - 0xde, 0xb5, 0x02, 0xd1, 0xd2, 0x80, 0x59, 0xda, 0x0b, 0x73, 0xe9, 0xe0, 0x4b, 0x16, 0xdc, 0x53, - 0xc0, 0x02, 0xec, 0x5a, 0x3e, 0x0c, 0x6a, 0x49, 0x05, 0x98, 0x04, 0x31, 0xff, 0x81, 0xf6, 0x6c, - 0xe1, 0xa0, 0x6b, 0x58, 0xa0, 0x07, 0x6b, 0x14, 0xd3, 0xfe, 0xc4, 0xc2, 0xa8, 0x89, 0xd1, 0xcc, - 0x1e, 0xac, 0x1f, 0x93, 0xc1, 0xd5, 0x6d, 0x67, 0x67, 0xa7, 0x07, 0x03, 0x31, 0x41, 0xe2, 0x9d, - 0xa9, 0x99, 0x93, 0x84, 0x0b, 0xef, 0x04, 0x39, 0xf7, 0x59, 0xe1, 0x51, 0x32, 0xf4, 0xc0, 0x9f, - 0x98, 0x4a, 0x9c, 0x45, 0x61, 0x71, 0x0d, 0xe5, 0x33, 0x06, 0x05, 0xb1, 0x80, 0xcf, 0xc2, 0x64, - 0xb3, 0x07, 0xe2, 0x4b, 0x12, 0x58, 0x20, 0xf7, 0x22, 0x06, 0x0a, 0x7a, 0xcf, 0x04, 0x01, 0xd0, - 0xbe, 0x9b, 0x13, 0xf5, 0xb3, 0xc5, 0x32, 0xe1, 0x38, 0x89, 0x11, 0xb1, 0x58, 0x50, 0x95, 0x91, - 0xe4, 0xa6, 0x70, 0x53, 0x67, 0x1e, 0xcc, 0xad, 0xc2, 0xa0, 0xa5, 0x79, 0xda, 0xfb, 0x53, 0xf6, - 0x44, 0x67, 0xc1, 0x3c, 0xbe, 0x1c, 0xac, 0x49, 0x8f, 0x49, 0x92, 0x55, 0x33, 0x2e, 0x4d, 0xbd, - 0x1e, 0x2c, 0x5c, 0x80, 0xdb, 0x8e, 0x0b, 0x9b, 0xdc, 0x59, 0x4a, 0x3e, 0x71, 0x78, 0x78, 0x3a, - 0xf5, 0x46, 0x70, 0x9c, 0x3a, 0xba, 0x2f, 0xa3, 0xb9, 0xbe, 0xe9, 0x5e, 0xa1, 0x07, 0xd3, 0x06, - 0x93, 0xb5, 0xbf, 0x60, 0x1b, 0xcc, 0x32, 0x8f, 0xe2, 0xcd, 0x07, 0xc5, 0xce, 0x54, 0x3a, 0x66, - 0x74, 0x7a, 0x02, 0x28, 0x51, 0x1d, 0x09, 0x0c, 0xba, 0xa4, 0x1e, 0x34, 0xcc, 0xab, 0x3e, 0x01, - 0xcc, 0x22, 0x11, 0x61, 0xbb, 0x81, 0x76, 0xbd, 0xa7, 0x87, 0x7c, 0x88, 0xdf, 0x1b, 0x51, 0x56, - 0xed, 0x97, 0x42, 0x9d, 0xd1, 0x39, 0x9d, 0x79, 0x6c, 0x1a, 0xe6, 0xa7, 0x72, 0x91, 0xbc, 0xc2, - 0x94, 0xbf, 0x7c, 0xa5, 0xd6, 0xf5, 0xb4, 0xf5, 0x74, 0x5a, 0x73, 0x06, 0x80, 0xb0, 0xf9, 0x05, - 0x81, 0x33, 0x98, 0x14, 0x3e, 0x36, 0x7e, 0xe2, 0x51, 0xc0, 0x41, 0x71, 0x60, 0x76, 0x26, 0x0b, - 0xa8, 0xe0, 0x11, 0x42, 0x11, 0x4e, 0xb2, 0x47, 0xe7, 0x17, 0xf3, 0xe0, 0xea, 0xf0, 0x84, 0x53, - 0xdd, 0xf4, 0xa2, 0x96, 0x7d, 0x6f, 0x3a, 0x88, 0xb8, 0x23, 0x25, 0x61, 0x73, 0x3c, 0x09, 0x0a, - 0xde, 0xfe, 0x85, 0xd0, 0x11, 0x90, 0x3c, 0x68, 0x6f, 0x94, 0x53, 0x8d, 0x55, 0x43, 0xf9, 0x9b, - 0x70, 0x23, 0xbc, 0x19, 0x9c, 0xb0, 0xf7, 0xf7, 0x42, 0x2c, 0x70, 0x4f, 0x43, 0x7b, 0x96, 0x83, - 0x2f, 0xf8, 0x26, 0x9b, 0x17, 0x6f, 0xb2, 0x29, 0x46, 0x52, 0x91, 0x4a, 0x67, 0xaf, 0x1e, 0x9f, - 0x1d, 0x38, 0x82, 0x56, 0x49, 0xad, 0x14, 0x04, 0x7e, 0x89, 0x85, 0xff, 0x1f, 0x73, 0xa9, 0x7a, - 0xde, 0xd1, 0x27, 0xd7, 0x52, 0xf4, 0x84, 0x47, 0x79, 0x6c, 0xed, 0x75, 0x05, 0xa0, 0xb5, 0x22, - 0x87, 0x1c, 0x0a, 0xea, 0x86, 0x0b, 0x2f, 0x59, 0xf0, 0xb2, 0x37, 0xb0, 0xdf, 0x41, 0xe4, 0x96, - 0x63, 0xe5, 0xf6, 0x8d, 0xbc, 0xa8, 0x43, 0x0d, 0xaf, 0x41, 0x07, 0x8a, 0x8a, 0x69, 0x3b, 0x4f, - 0x07, 0xa5, 0x3e, 0xcd, 0x41, 0xdb, 0x4e, 0x79, 0x3c, 0xaa, 0x28, 0x23, 0x4d, 0x35, 0x42, 0x92, - 0xda, 0xdf, 0xe6, 0xc0, 0x1c, 0xf3, 0x26, 0x7e, 0x47, 0xe0, 0x80, 0x6a, 0x49, 0xc9, 0x33, 0x52, - 0x59, 0x78, 0x46, 0xaa, 0x2e, 0x81, 0x82, 0x27, 0xd4, 0x68, 0x49, 0x36, 0xf5, 0x49, 0x60, 0xbe, - 0x0b, 0xfb, 0xd0, 0xee, 0x42, 0xbb, 0x63, 0x41, 0xef, 0x74, 0x01, 0x8b, 0x25, 0x36, 0x4c, 0x03, - 0x97, 0x59, 0x30, 0x7e, 0x77, 0x3a, 0xac, 0xb2, 0xd7, 0xd2, 0x3f, 0x95, 0xc0, 0x19, 0xa6, 0x95, - 0xac, 0xb8, 0xce, 0x5e, 0x6a, 0x4d, 0x7d, 0x39, 0x3b, 0x1e, 0x6f, 0xf2, 0x9a, 0x7a, 0x57, 0x62, - 0xa3, 0x1c, 0x52, 0x5c, 0x4c, 0xa3, 0x7f, 0x7f, 0x28, 0xdd, 0xa7, 0x71, 0xd2, 0xad, 0x1e, 0x92, - 0xfe, 0x14, 0x0e, 0x84, 0xe7, 0xc1, 0xbc, 0x01, 0xcd, 0x6e, 0x38, 0xd4, 0xfe, 0x11, 0x63, 0x44, - 0x3f, 0x09, 0xe4, 0xfd, 0x68, 0x35, 0xec, 0x91, 0x07, 0x2b, 0xc3, 0x7e, 0x89, 0x1f, 0xf0, 0xa2, - 0x18, 0xfe, 0x48, 0xa8, 0xe1, 0x0c, 0x5a, 0xe0, 0xb2, 0x88, 0x05, 0x9e, 0x1f, 0x66, 0x81, 0x5f, - 0x07, 0xe6, 0x7a, 0xa6, 0x47, 0x1a, 0x4c, 0x78, 0xf7, 0x2f, 0x9b, 0xc4, 0xdf, 0xb2, 0x9f, 0x78, - 0xda, 0x6e, 0x58, 0xd5, 0x0e, 0x1f, 0x91, 0xf8, 0xc3, 0x42, 0x47, 0xeb, 0x46, 0x95, 0x9d, 0x4e, - 0x23, 0xee, 0x1e, 0x63, 0xe5, 0xee, 0x14, 0x50, 0xd7, 0xf5, 0x56, 0xab, 0xbc, 0x8a, 0x4f, 0xdc, - 0x04, 0x2e, 0x58, 0xdd, 0xb3, 0x37, 0x20, 0xf1, 0x11, 0x84, 0xd5, 0x79, 0x50, 0x0a, 0xf8, 0x53, - 0x8e, 0x91, 0x27, 0x1b, 0xef, 0x38, 0x29, 0x39, 0xed, 0x8b, 0x32, 0x28, 0x6e, 0xda, 0x2e, 0x34, - 0xbb, 0xda, 0xf3, 0x18, 0x5d, 0xfa, 0x41, 0x4e, 0x97, 0x1e, 0x36, 0xac, 0x61, 0xa0, 0x6f, 0x32, - 0xd2, 0x22, 0x3e, 0x1c, 0x59, 0xe2, 0x62, 0x39, 0xcf, 0xcc, 0xe1, 0x71, 0x17, 0x5b, 0x25, 0x8f, - 0x2f, 0x35, 0xf3, 0x3e, 0x40, 0x18, 0xd9, 0xdf, 0x96, 0x81, 0xb2, 0xb1, 0xef, 0xed, 0x72, 0x87, - 0xbe, 0x7f, 0x55, 0x06, 0x0b, 0xc1, 0xb9, 0x98, 0xb6, 0x73, 0x11, 0xda, 0xda, 0x33, 0xb8, 0x1e, - 0xd9, 0x47, 0x69, 0x41, 0x8f, 0x8c, 0x1f, 0xd4, 0x0d, 0x26, 0x34, 0x8c, 0x34, 0xec, 0x58, 0xff, - 0x40, 0x19, 0x4b, 0x1c, 0xfd, 0xa5, 0x0d, 0xfa, 0x6d, 0x14, 0x50, 0x46, 0x7b, 0xb1, 0xf0, 0x3d, - 0x47, 0x23, 0x68, 0x0f, 0xef, 0xde, 0xc5, 0x6e, 0x2e, 0x4a, 0x45, 0x3a, 0x7b, 0x54, 0xaf, 0x03, - 0xa5, 0x40, 0x52, 0xea, 0x0c, 0x90, 0x6b, 0xcd, 0x96, 0x72, 0x4c, 0x9d, 0x03, 0x33, 0x65, 0xbb, - 0xeb, 0x3a, 0x56, 0x57, 0xc9, 0x9d, 0x9d, 0x01, 0x05, 0x7d, 0xaf, 0xef, 0x5f, 0x39, 0xfb, 0x08, - 0xb0, 0xd0, 0xf2, 0x5d, 0x68, 0xee, 0x25, 0xe2, 0x76, 0xfb, 0x6d, 0x60, 0xc6, 0x76, 0xb6, 0xcc, - 0x7d, 0x7f, 0x57, 0x7d, 0xe8, 0x01, 0xab, 0x83, 0x6a, 0x4d, 0x93, 0x46, 0xe3, 0xfc, 0xfa, 0x1d, - 0x78, 0xa5, 0xa3, 0x68, 0x3b, 0xe5, 0x7d, 0x7f, 0x77, 0xf9, 0xda, 0xcf, 0xfc, 0xd9, 0x99, 0xdc, - 0xe7, 0xff, 0xec, 0x4c, 0xee, 0x6b, 0x7f, 0x76, 0x26, 0xf7, 0x53, 0xdf, 0x38, 0x73, 0xec, 0xf3, - 0xdf, 0x38, 0x73, 0xec, 0x4b, 0xdf, 0x38, 0x73, 0xec, 0x87, 0xa5, 0xfe, 0x85, 0x0b, 0x45, 0x4c, - 0xe5, 0x71, 0xff, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x4f, 0xb0, 0xbc, 0xab, 0x06, 0x33, 0x02, - 0x00, + // 21966 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x79, 0x98, 0x23, 0x49, + 0x75, 0x2f, 0xda, 0xca, 0x94, 0x54, 0xaa, 0xa8, 0xa5, 0xd5, 0x39, 0x3d, 0x4d, 0x4f, 0x30, 0x34, + 0x43, 0xcf, 0x30, 0x8c, 0x87, 0xa1, 0x06, 0x06, 0x8c, 0x99, 0x61, 0x60, 0x50, 0xa9, 0x54, 0x55, + 0x9a, 0x51, 0x49, 0x45, 0x4a, 0xd5, 0x4d, 0xfb, 0x5e, 0x5e, 0xdd, 0x6c, 0x29, 0xaa, 0x2a, 0xa7, + 0x55, 0x99, 0x22, 0x33, 0xab, 0x7b, 0x8a, 0xf7, 0xdd, 0x77, 0x8d, 0x31, 0x30, 0x18, 0x63, 0x8c, + 0x6d, 0x8c, 0x31, 0x66, 0x37, 0x60, 0xc0, 0xec, 0x9b, 0x01, 0xb3, 0x98, 0xc5, 0x60, 0xbc, 0x61, + 0x63, 0x9b, 0xc5, 0xf0, 0x19, 0xbc, 0x60, 0x7c, 0xaf, 0x97, 0x8b, 0x9f, 0x0d, 0xc6, 0x36, 0xd7, + 0xef, 0x8b, 0x25, 0x33, 0x23, 0x54, 0xca, 0x54, 0xa4, 0x4a, 0xa9, 0x1a, 0xec, 0xf7, 0x97, 0x94, + 0x91, 0x91, 0x27, 0x4e, 0x9c, 0xdf, 0x89, 0x88, 0x13, 0x11, 0x27, 0x4e, 0x80, 0xd3, 0xbd, 0x8b, + 0xb7, 0xf6, 0x1c, 0xdb, 0xb3, 0xdd, 0x5b, 0xdb, 0xf6, 0xee, 0xae, 0x61, 0x75, 0xdc, 0x05, 0xf2, + 0xac, 0x4d, 0x19, 0xd6, 0xbe, 0xb7, 0xdf, 0x43, 0xf0, 0x86, 0xde, 0xa5, 0xed, 0x5b, 0xbb, 0xe6, + 0xc5, 0x5b, 0x7b, 0x17, 0x6f, 0xdd, 0xb5, 0x3b, 0xa8, 0xeb, 0x7f, 0x40, 0x1e, 0x58, 0x76, 0x78, + 0x53, 0x54, 0xae, 0xae, 0xdd, 0x36, 0xba, 0xae, 0x67, 0x3b, 0x88, 0xe5, 0x3c, 0x15, 0x16, 0x89, + 0x2e, 0x23, 0xcb, 0xf3, 0x29, 0x5c, 0xbb, 0x6d, 0xdb, 0xdb, 0x5d, 0x44, 0xdf, 0x5d, 0xdc, 0xdb, + 0xba, 0xd5, 0xf5, 0x9c, 0xbd, 0xb6, 0xc7, 0xde, 0x5e, 0xd7, 0xff, 0xb6, 0x83, 0xdc, 0xb6, 0x63, + 0xf6, 0x3c, 0xdb, 0xa1, 0x39, 0xce, 0xbe, 0xfc, 0x6f, 0x0a, 0x40, 0xd5, 0x7b, 0x6d, 0xf8, 0xed, + 0x29, 0xa0, 0x96, 0x7a, 0x3d, 0xf8, 0x29, 0x05, 0x80, 0x15, 0xe4, 0x9d, 0x43, 0x8e, 0x6b, 0xda, + 0x16, 0x3c, 0x0e, 0xa6, 0x74, 0xf4, 0x8c, 0x3d, 0xe4, 0x7a, 0x77, 0x64, 0xef, 0xff, 0x86, 0x9a, + 0x81, 0xaf, 0x57, 0x40, 0x41, 0x47, 0x6e, 0xcf, 0xb6, 0x5c, 0xa4, 0x3d, 0x05, 0xe4, 0x90, 0xe3, + 0xd8, 0xce, 0xe9, 0xcc, 0x75, 0x99, 0x9b, 0x66, 0x6e, 0xbb, 0x79, 0x81, 0x55, 0x7f, 0x41, 0xef, + 0xb5, 0x17, 0x4a, 0xbd, 0xde, 0x42, 0x48, 0x69, 0xc1, 0xff, 0x68, 0xa1, 0x82, 0xbf, 0xd0, 0xe9, + 0x87, 0xda, 0x69, 0x30, 0x75, 0x99, 0x66, 0x38, 0xad, 0x5c, 0x97, 0xb9, 0x69, 0x5a, 0xf7, 0x1f, + 0xf1, 0x9b, 0x0e, 0xf2, 0x0c, 0xb3, 0xeb, 0x9e, 0x56, 0xe9, 0x1b, 0xf6, 0x08, 0x5f, 0x9b, 0x01, + 0x39, 0x42, 0x44, 0x2b, 0x83, 0x6c, 0xdb, 0xee, 0x20, 0x52, 0xfc, 0xfc, 0x6d, 0xb7, 0xca, 0x17, + 0xbf, 0x50, 0xb6, 0x3b, 0x48, 0x27, 0x1f, 0x6b, 0xd7, 0x81, 0x19, 0x5f, 0x2c, 0x21, 0x1b, 0x7c, + 0xd2, 0xd9, 0xdb, 0x40, 0x16, 0xe7, 0xd7, 0x0a, 0x20, 0x5b, 0xdf, 0xa8, 0xd5, 0x8a, 0xc7, 0xb4, + 0x13, 0x60, 0x6e, 0xa3, 0x7e, 0x4f, 0xbd, 0x71, 0xbe, 0xbe, 0x59, 0xd1, 0xf5, 0x86, 0x5e, 0xcc, + 0x68, 0x73, 0x60, 0x7a, 0xb1, 0xb4, 0xb4, 0x59, 0xad, 0xaf, 0x6f, 0xb4, 0x8a, 0x0a, 0x7c, 0xa5, + 0x0a, 0xe6, 0x9b, 0xc8, 0x5b, 0x42, 0x97, 0xcd, 0x36, 0x6a, 0x7a, 0x86, 0x87, 0xe0, 0x8b, 0x32, + 0x81, 0x30, 0xb5, 0x0d, 0x5c, 0x68, 0xf0, 0x8a, 0x55, 0xe0, 0xb1, 0x07, 0x2a, 0x20, 0x52, 0x58, + 0x60, 0x5f, 0x2f, 0x70, 0x69, 0x3a, 0x4f, 0xe7, 0xec, 0xa3, 0xc0, 0x0c, 0xf7, 0x4e, 0x9b, 0x07, + 0x60, 0xb1, 0x54, 0xbe, 0x67, 0x45, 0x6f, 0x6c, 0xd4, 0x97, 0x8a, 0xc7, 0xf0, 0xf3, 0x72, 0x43, + 0xaf, 0xb0, 0xe7, 0x0c, 0xfc, 0x6e, 0x86, 0x03, 0x73, 0x49, 0x04, 0x73, 0x61, 0x38, 0x33, 0x03, + 0x00, 0x85, 0x6f, 0x08, 0xc0, 0x59, 0x11, 0xc0, 0x79, 0x6c, 0x32, 0x72, 0xe9, 0x03, 0xf4, 0x1c, + 0x05, 0x14, 0x9a, 0x3b, 0x7b, 0x5e, 0xc7, 0xbe, 0x62, 0xc1, 0xe9, 0x00, 0x19, 0xf8, 0xb7, 0xbc, + 0x4c, 0x9e, 0x2c, 0xca, 0xe4, 0xa6, 0x83, 0x95, 0x60, 0x14, 0x22, 0xa4, 0xf1, 0xea, 0x40, 0x1a, + 0x25, 0x41, 0x1a, 0x8f, 0x92, 0x25, 0x94, 0xbe, 0x1c, 0xbe, 0x78, 0x27, 0xc8, 0x35, 0x7b, 0x46, + 0x1b, 0xc1, 0xdf, 0x56, 0xc1, 0x6c, 0x0d, 0x19, 0x97, 0x51, 0xa9, 0xd7, 0x73, 0xec, 0xcb, 0x08, + 0x96, 0x43, 0x7d, 0x3d, 0x0d, 0xa6, 0x5c, 0x9c, 0xa9, 0xda, 0x21, 0x35, 0x98, 0xd6, 0xfd, 0x47, + 0xed, 0x0c, 0x00, 0x66, 0x07, 0x59, 0x9e, 0xe9, 0x99, 0xc8, 0x3d, 0xad, 0x5c, 0xa7, 0xde, 0x34, + 0xad, 0x73, 0x29, 0xf0, 0xdb, 0x8a, 0xac, 0x8e, 0x11, 0x2e, 0x16, 0x78, 0x0e, 0x22, 0xa4, 0xfa, + 0x3a, 0x45, 0x46, 0xc7, 0x86, 0x92, 0x4b, 0x26, 0xdb, 0xb7, 0x65, 0x92, 0x0b, 0x17, 0xe7, 0xa8, + 0x37, 0x36, 0x9b, 0x1b, 0xe5, 0xd5, 0xcd, 0xe6, 0x7a, 0xa9, 0x5c, 0x29, 0x22, 0xed, 0x24, 0x28, + 0x92, 0xbf, 0x9b, 0xd5, 0xe6, 0xe6, 0x52, 0xa5, 0x56, 0x69, 0x55, 0x96, 0x8a, 0x5b, 0x9a, 0x06, + 0xe6, 0xf5, 0xca, 0x53, 0x37, 0x2a, 0xcd, 0xd6, 0xe6, 0x72, 0xa9, 0x5a, 0xab, 0x2c, 0x15, 0xb7, + 0xf1, 0xc7, 0xb5, 0xea, 0x5a, 0xb5, 0xb5, 0xa9, 0x57, 0x4a, 0xe5, 0xd5, 0xca, 0x52, 0x71, 0x47, + 0x7b, 0x10, 0xb8, 0xaa, 0xde, 0xd8, 0x2c, 0xad, 0xaf, 0xeb, 0x8d, 0x73, 0x95, 0x4d, 0xf6, 0x45, + 0xb3, 0x68, 0xd2, 0x82, 0x5a, 0x9b, 0xcd, 0xd5, 0x92, 0x5e, 0x29, 0x2d, 0xd6, 0x2a, 0xc5, 0x7b, + 0xe1, 0xb3, 0x55, 0x30, 0xb7, 0x66, 0x5c, 0x42, 0xcd, 0x1d, 0xc3, 0x41, 0xc6, 0xc5, 0x2e, 0x82, + 0xd7, 0x4b, 0xe0, 0x09, 0x7f, 0x9b, 0xc7, 0xab, 0x22, 0xe2, 0x75, 0xeb, 0x00, 0x01, 0x0b, 0x45, + 0x44, 0x00, 0xf6, 0xcf, 0x41, 0x33, 0x58, 0x15, 0x00, 0x7b, 0x5c, 0x42, 0x7a, 0xc9, 0x10, 0xfb, + 0xd1, 0x07, 0x00, 0x62, 0xf0, 0x4b, 0x59, 0x30, 0x5f, 0xb5, 0x2e, 0x9b, 0x1e, 0x5a, 0x41, 0x16, + 0x72, 0xf0, 0x38, 0xf0, 0xca, 0x8c, 0x4c, 0xbb, 0x6a, 0x01, 0x60, 0x92, 0xef, 0x5a, 0xfb, 0x3d, + 0x44, 0xaa, 0x37, 0x58, 0x5e, 0x22, 0xf1, 0x60, 0x88, 0xa8, 0x06, 0xdf, 0xea, 0x1c, 0x9d, 0xb3, + 0xd7, 0x03, 0x10, 0xbe, 0xd1, 0x00, 0xc8, 0xaf, 0xa1, 0xdd, 0x8b, 0xc8, 0x29, 0x1e, 0xd3, 0xa6, + 0x41, 0x6e, 0x05, 0x7f, 0x59, 0xcc, 0xc0, 0xd7, 0xab, 0x9c, 0x0a, 0x2c, 0x8b, 0x2a, 0xf0, 0x68, + 0x19, 0x16, 0x06, 0x8d, 0xf4, 0xd7, 0x82, 0x69, 0xca, 0x47, 0xd9, 0xec, 0x30, 0xb4, 0xc2, 0x04, + 0xed, 0x06, 0x30, 0x47, 0x1f, 0x96, 0xcd, 0x2e, 0xba, 0x07, 0xed, 0xb3, 0x31, 0x5f, 0x4c, 0x84, + 0x3f, 0x11, 0x34, 0xfc, 0xaa, 0xa0, 0x47, 0x3f, 0x98, 0x94, 0xa9, 0x64, 0x8a, 0xf4, 0x92, 0x07, + 0x42, 0xd3, 0x3f, 0xd0, 0xc2, 0x4d, 0xf8, 0x3d, 0x05, 0xcc, 0x34, 0x3d, 0xbb, 0x87, 0x9b, 0x8b, + 0x69, 0x6d, 0xcb, 0xb5, 0xef, 0xcf, 0xf0, 0xed, 0xbb, 0x2c, 0x82, 0xfb, 0xa8, 0x01, 0x72, 0xe4, + 0x0a, 0x88, 0x68, 0xdd, 0xdf, 0x0e, 0x5a, 0xf7, 0xb2, 0x80, 0xca, 0x6d, 0x89, 0xa8, 0x7d, 0x1f, + 0xb6, 0xed, 0x97, 0xa8, 0xa0, 0xe8, 0xab, 0x99, 0x57, 0xde, 0x73, 0x1c, 0x64, 0x79, 0x72, 0x20, + 0xfc, 0x09, 0x0f, 0xc2, 0xaa, 0x08, 0xc2, 0x6d, 0x31, 0xca, 0xec, 0x97, 0x92, 0x62, 0x1b, 0xfb, + 0x58, 0x80, 0xe6, 0x3d, 0x02, 0x9a, 0x3f, 0x94, 0x9c, 0xad, 0x64, 0x90, 0xae, 0x8e, 0x80, 0xe8, + 0x49, 0x50, 0xc4, 0xe3, 0x61, 0xb9, 0x55, 0x3d, 0x57, 0xd9, 0xac, 0xd6, 0xcf, 0x55, 0x5b, 0x95, + 0x22, 0x82, 0x2f, 0x56, 0xc3, 0x3e, 0xd7, 0x23, 0x9d, 0x9a, 0x1c, 0x2a, 0x5f, 0x52, 0x46, 0xeb, + 0xf7, 0x68, 0x19, 0x13, 0xc1, 0x44, 0xbe, 0xdf, 0x1b, 0xc8, 0x54, 0x32, 0x44, 0xee, 0x1e, 0x01, + 0x91, 0x53, 0x40, 0xab, 0xd6, 0xcf, 0x95, 0x6a, 0xd5, 0x25, 0xda, 0xc6, 0x36, 0x5b, 0x17, 0xd6, + 0x31, 0x26, 0x3f, 0xa3, 0x82, 0x59, 0xca, 0x9a, 0x8e, 0x2e, 0xdb, 0x97, 0x24, 0x8d, 0x91, 0xaf, + 0x26, 0x34, 0x1e, 0xf9, 0x12, 0x22, 0x7a, 0xab, 0x1f, 0x4f, 0x60, 0x3c, 0xc6, 0x90, 0x7b, 0x20, + 0x8d, 0x20, 0x07, 0xba, 0xa6, 0xed, 0x01, 0x3d, 0xd8, 0xc0, 0x11, 0xe4, 0x13, 0x59, 0xdf, 0x1e, + 0x38, 0x67, 0xa2, 0x2b, 0x70, 0x2d, 0xc4, 0x44, 0x50, 0xdb, 0xcc, 0x50, 0xb5, 0x55, 0x06, 0xa9, + 0xed, 0x5f, 0xf2, 0x76, 0xc4, 0xa2, 0x88, 0xde, 0x2d, 0x91, 0xe2, 0xc6, 0x9c, 0x44, 0xaf, 0x16, + 0xf8, 0x8a, 0xa2, 0x88, 0xd6, 0xd2, 0xb5, 0x60, 0x9a, 0xfc, 0xad, 0x1b, 0xbb, 0x88, 0xb5, 0xa1, + 0x30, 0x41, 0x3b, 0x0b, 0x66, 0x69, 0xc6, 0xb6, 0x6d, 0xe1, 0xfa, 0x64, 0x49, 0x06, 0x21, 0x0d, + 0x83, 0xd8, 0x76, 0x90, 0xe1, 0xd9, 0x0e, 0xa1, 0x91, 0xa3, 0x20, 0x72, 0x49, 0xda, 0x2d, 0xe0, + 0x84, 0xe9, 0x92, 0x56, 0xb5, 0xe1, 0x22, 0x87, 0x32, 0x7b, 0x3a, 0x7f, 0x5d, 0xe6, 0xa6, 0x82, + 0x7e, 0xf0, 0x05, 0xfc, 0x66, 0xd0, 0x66, 0x2b, 0x82, 0x9e, 0x3d, 0x26, 0x49, 0xc5, 0x93, 0x69, + 0xd9, 0xe5, 0xd1, 0x7a, 0x50, 0xda, 0x6f, 0x6e, 0x62, 0xdd, 0x58, 0x26, 0x0b, 0x03, 0x88, 0xb5, + 0x62, 0x9c, 0x8a, 0xf3, 0x96, 0x1b, 0xf5, 0x56, 0xa5, 0xde, 0x2a, 0x6e, 0x0d, 0xd4, 0xbf, 0x6d, + 0xf8, 0xba, 0x2c, 0xc8, 0xde, 0x6d, 0x9b, 0x16, 0x7c, 0x4e, 0x46, 0x50, 0x20, 0x0b, 0x79, 0x57, + 0x6c, 0xe7, 0x52, 0xd0, 0xac, 0xc3, 0x84, 0x78, 0x24, 0x43, 0xc5, 0x53, 0x87, 0x2a, 0x5e, 0x76, + 0x90, 0xe2, 0xfd, 0x34, 0xaf, 0x78, 0x77, 0x8a, 0x8a, 0x77, 0xe3, 0x00, 0xf9, 0x63, 0xe6, 0x23, + 0xba, 0x8b, 0x4f, 0x07, 0xdd, 0xc5, 0x5d, 0x02, 0x8c, 0x8f, 0x94, 0x23, 0x93, 0x0c, 0xc0, 0x2f, + 0xa7, 0xda, 0x4d, 0x0c, 0x82, 0x7a, 0x3b, 0x02, 0xea, 0x9d, 0x01, 0x3d, 0x88, 0x79, 0xb0, 0xa3, + 0xb9, 0xf7, 0x60, 0xa7, 0x72, 0x49, 0xbb, 0x1a, 0x9c, 0x58, 0xaa, 0x2e, 0x2f, 0x57, 0xf4, 0x4a, + 0xbd, 0xb5, 0x59, 0xaf, 0xb4, 0xce, 0x37, 0xf4, 0x7b, 0x8a, 0x5d, 0xf8, 0x5a, 0x15, 0x00, 0x2c, + 0xa1, 0xb2, 0x61, 0xb5, 0x51, 0x57, 0xae, 0xff, 0xff, 0x3b, 0x25, 0x59, 0x0f, 0x12, 0xd2, 0x8f, + 0x80, 0xf3, 0x15, 0x8a, 0x7c, 0xab, 0x8c, 0x24, 0x96, 0x0c, 0xd4, 0x37, 0x3f, 0x10, 0x66, 0x0f, + 0x57, 0x81, 0xe3, 0x3e, 0x3d, 0x96, 0x7d, 0xf0, 0xa2, 0xc1, 0xdb, 0xb3, 0x60, 0x9e, 0xc1, 0xe2, + 0xaf, 0x02, 0xdd, 0x2f, 0x35, 0x5d, 0x85, 0xa0, 0xc0, 0x16, 0x7d, 0xfc, 0xc1, 0x20, 0x78, 0xd6, + 0x56, 0xc0, 0x4c, 0x0f, 0x39, 0xbb, 0xa6, 0xeb, 0x9a, 0xb6, 0x45, 0x97, 0x73, 0xe7, 0x6f, 0x7b, + 0x78, 0x20, 0x71, 0xb2, 0xf2, 0xbd, 0xb0, 0x6e, 0x38, 0x9e, 0xd9, 0x36, 0x7b, 0x86, 0xe5, 0xad, + 0x87, 0x99, 0x75, 0xfe, 0x4b, 0x6c, 0xd8, 0x25, 0x32, 0xd0, 0xc4, 0x9a, 0x44, 0xa8, 0xc4, 0xaf, + 0x25, 0x98, 0x54, 0xc6, 0x12, 0x4c, 0xa6, 0x16, 0x9f, 0x4a, 0x55, 0x2d, 0x06, 0xe0, 0xbd, 0xad, + 0x5d, 0x03, 0xae, 0xae, 0xd6, 0xcb, 0x0d, 0x5d, 0xaf, 0x94, 0x5b, 0x9b, 0xeb, 0x15, 0x7d, 0xad, + 0xda, 0x6c, 0x56, 0x1b, 0xf5, 0xe6, 0x61, 0x5a, 0x3b, 0xfc, 0xac, 0x1a, 0x68, 0xcc, 0x12, 0x6a, + 0x77, 0x4d, 0x0b, 0xc1, 0xbb, 0x0e, 0xa9, 0x30, 0xe2, 0x9a, 0xa1, 0x3c, 0xce, 0xac, 0xfc, 0x08, + 0x9c, 0x5f, 0x93, 0x1c, 0xe7, 0xc1, 0x04, 0xff, 0x03, 0x37, 0xff, 0xaf, 0xaa, 0xe0, 0x04, 0xd7, + 0x10, 0x75, 0xb4, 0x3b, 0xb6, 0x75, 0xe0, 0x1f, 0xe5, 0xdb, 0x6e, 0x55, 0xc4, 0x74, 0x90, 0xed, + 0x7d, 0x80, 0x8d, 0x08, 0x58, 0xdf, 0x1c, 0xc0, 0x5a, 0x13, 0x60, 0x7d, 0xc2, 0x08, 0x34, 0x93, + 0x21, 0xfb, 0x8e, 0x54, 0x91, 0xbd, 0x06, 0x5c, 0xbd, 0x5e, 0xd2, 0x5b, 0xd5, 0x72, 0x75, 0xbd, + 0x84, 0xc7, 0x51, 0x6e, 0xc8, 0x8e, 0x30, 0xee, 0x45, 0xd0, 0x07, 0xe2, 0xfb, 0xd1, 0x2c, 0xb8, + 0x76, 0x70, 0x47, 0x5b, 0xde, 0x31, 0xac, 0x6d, 0x04, 0x4d, 0x19, 0xa8, 0x97, 0xc0, 0x54, 0x9b, + 0x64, 0xa7, 0x38, 0xf3, 0x1b, 0x7f, 0x31, 0x7d, 0x39, 0x2d, 0x41, 0xf7, 0x3f, 0x85, 0xef, 0xe6, + 0x15, 0xa2, 0x25, 0x2a, 0xc4, 0x93, 0xe3, 0xc1, 0x3b, 0xc0, 0x77, 0x84, 0x6e, 0x7c, 0x2e, 0xd0, + 0x8d, 0xf3, 0x82, 0x6e, 0x94, 0x0f, 0x47, 0x3e, 0x99, 0x9a, 0xfc, 0xd6, 0x03, 0xa1, 0x03, 0x88, + 0xd4, 0x26, 0x33, 0x7a, 0x54, 0x18, 0xd8, 0xdd, 0xbf, 0x4a, 0x05, 0xf9, 0x25, 0xd4, 0x45, 0x9e, + 0xe4, 0x0c, 0xfe, 0xef, 0x15, 0xd9, 0xed, 0x34, 0x0a, 0x03, 0xa5, 0x1d, 0xbd, 0x96, 0xe2, 0x99, + 0xbb, 0xc8, 0xf5, 0x8c, 0xdd, 0x1e, 0x11, 0xb5, 0xaa, 0x87, 0x09, 0xf0, 0xc7, 0x14, 0x99, 0xcd, + 0xb6, 0x98, 0x62, 0xfe, 0x63, 0xac, 0x0a, 0x7f, 0x5e, 0x01, 0x85, 0x26, 0xf2, 0x1a, 0x4e, 0x07, + 0x39, 0xb0, 0x19, 0x62, 0x74, 0x1d, 0x98, 0x21, 0xa0, 0xe0, 0x69, 0x66, 0x80, 0x13, 0x9f, 0xa4, + 0xdd, 0x08, 0xe6, 0x83, 0x47, 0xf2, 0x39, 0xeb, 0xc6, 0xfb, 0x52, 0xe1, 0xb7, 0x32, 0xb2, 0x3e, + 0x00, 0x6c, 0xd1, 0x97, 0x71, 0x13, 0xd1, 0x4a, 0xe5, 0xf6, 0xf3, 0x63, 0x49, 0xa5, 0xbf, 0x4d, + 0xfa, 0x4e, 0x05, 0x80, 0x0d, 0xcb, 0xf5, 0xe5, 0xfa, 0xc8, 0x04, 0x72, 0x85, 0xff, 0x94, 0x49, + 0x36, 0x8b, 0x09, 0xcb, 0x89, 0x90, 0xd8, 0x2f, 0x25, 0x58, 0x5b, 0x88, 0x24, 0x36, 0x81, 0xad, + 0xe5, 0xe3, 0x20, 0x7f, 0xde, 0xe8, 0x76, 0x91, 0x07, 0x5f, 0xa9, 0x82, 0x7c, 0xd9, 0x41, 0x86, + 0x87, 0x20, 0x0a, 0x45, 0x07, 0x41, 0xc1, 0xb1, 0x6d, 0x6f, 0xdd, 0xf0, 0x76, 0x98, 0xdc, 0x82, + 0x67, 0xed, 0x09, 0xe0, 0x41, 0x5b, 0x7b, 0xdd, 0xae, 0x87, 0xee, 0xf3, 0xd6, 0x1d, 0x73, 0xd7, + 0x70, 0xf6, 0x6b, 0x86, 0xb5, 0xbd, 0x67, 0x6c, 0x23, 0xc6, 0x5e, 0xd4, 0x6b, 0xe6, 0xa8, 0xf2, + 0x2b, 0x7c, 0xc7, 0x73, 0x97, 0x28, 0xf4, 0x1f, 0x10, 0xe4, 0x44, 0x59, 0x5c, 0xa0, 0xec, 0x45, + 0xf4, 0x3c, 0x10, 0x14, 0x76, 0x2d, 0xb4, 0x6b, 0x5b, 0x66, 0xdb, 0xb7, 0x56, 0xfd, 0x67, 0xf8, + 0xf1, 0x00, 0x8d, 0x45, 0x01, 0x8d, 0x05, 0xe9, 0x52, 0x92, 0x41, 0xd1, 0x1c, 0xa1, 0xdf, 0x79, + 0x28, 0x78, 0x30, 0xed, 0x46, 0x36, 0x5b, 0x8d, 0xcd, 0xb2, 0x5e, 0x29, 0xb5, 0x2a, 0x9b, 0xb5, + 0x46, 0xb9, 0x54, 0xdb, 0xd4, 0x2b, 0xeb, 0x8d, 0x22, 0xc2, 0xb3, 0xf3, 0x29, 0x1d, 0xb5, 0xed, + 0xcb, 0xc8, 0x81, 0xcf, 0xca, 0xc8, 0x41, 0x14, 0x23, 0x94, 0x38, 0xf8, 0x54, 0x19, 0xf8, 0x7e, + 0x5a, 0xda, 0xcf, 0x88, 0x09, 0x96, 0x31, 0x1f, 0xd1, 0x62, 0x3e, 0x21, 0xd5, 0xc7, 0xc4, 0x92, + 0x7a, 0x00, 0x80, 0xf4, 0x8f, 0x0a, 0x98, 0x2a, 0xdb, 0xd6, 0x65, 0xe4, 0x78, 0xfc, 0x24, 0x8b, + 0xc7, 0x21, 0xd3, 0x87, 0xc3, 0x69, 0x30, 0x85, 0x2c, 0xcf, 0xb1, 0x7b, 0xfe, 0x2c, 0xcb, 0x7f, + 0x84, 0x6f, 0x4c, 0x2a, 0x61, 0x56, 0x72, 0xf4, 0xda, 0xec, 0xe0, 0x82, 0x04, 0xf6, 0xd4, 0xbe, + 0xb6, 0xf3, 0xda, 0x24, 0xb8, 0x0c, 0x66, 0x20, 0xfd, 0x7e, 0xec, 0x6b, 0x2a, 0x98, 0xa3, 0xed, + 0xb6, 0x89, 0x88, 0x59, 0x08, 0x1b, 0xfc, 0x3a, 0x67, 0x9f, 0xf0, 0x57, 0x8f, 0x09, 0xe2, 0xcf, + 0x1b, 0xbd, 0x5e, 0xb0, 0x42, 0xbe, 0x7a, 0x4c, 0x67, 0xcf, 0x54, 0xcd, 0x17, 0xf3, 0x20, 0x6b, + 0xec, 0x79, 0x3b, 0xf0, 0x7b, 0xd2, 0x33, 0x5e, 0xa1, 0x1f, 0x61, 0xfc, 0x44, 0x40, 0x72, 0x12, + 0xe4, 0x3c, 0xfb, 0x12, 0xf2, 0xe5, 0x40, 0x1f, 0x30, 0x1c, 0x46, 0xaf, 0xd7, 0x22, 0x2f, 0x18, + 0x1c, 0xfe, 0x33, 0x36, 0xb0, 0x8c, 0x76, 0xdb, 0xde, 0xb3, 0xbc, 0xaa, 0xbf, 0x4a, 0x1e, 0x26, + 0xc0, 0x2f, 0x4a, 0x6d, 0x43, 0x49, 0x30, 0x98, 0x0c, 0xb2, 0x8b, 0x23, 0x34, 0xa5, 0x05, 0x70, + 0x73, 0x69, 0x7d, 0x7d, 0xb3, 0xd5, 0xb8, 0xa7, 0x52, 0x0f, 0xad, 0xdd, 0xcd, 0x6a, 0x7d, 0xb3, + 0xb5, 0x5a, 0xd9, 0x2c, 0x6f, 0xe8, 0x64, 0x71, 0xb2, 0x54, 0x2e, 0x37, 0x36, 0xea, 0xad, 0x22, + 0x82, 0x6f, 0x55, 0xc0, 0x6c, 0xb9, 0x6b, 0xbb, 0x01, 0xc2, 0x0f, 0x0d, 0x11, 0x0e, 0xc4, 0x98, + 0xe1, 0xc4, 0x08, 0xff, 0x35, 0x23, 0xeb, 0x27, 0xe3, 0x0b, 0x84, 0x23, 0x1f, 0xd1, 0x4b, 0xbd, + 0x51, 0xca, 0x4f, 0x66, 0x38, 0xbd, 0xf4, 0x9b, 0xc4, 0xaf, 0x37, 0xc0, 0x54, 0x89, 0x2a, 0x06, + 0xfc, 0xd3, 0x0c, 0xc8, 0x97, 0x6d, 0x6b, 0xcb, 0xdc, 0xc6, 0x16, 0x24, 0xb2, 0x8c, 0x8b, 0x5d, + 0xb4, 0x64, 0x78, 0xc6, 0x65, 0x13, 0x5d, 0x21, 0x15, 0x28, 0xe8, 0x7d, 0xa9, 0x98, 0x29, 0x96, + 0x82, 0x2e, 0xee, 0x6d, 0x13, 0xa6, 0x0a, 0x3a, 0x9f, 0x84, 0xc7, 0x0f, 0xfa, 0xb8, 0xee, 0x20, + 0x07, 0x75, 0x91, 0xe1, 0x22, 0x3c, 0x17, 0xb3, 0x50, 0x97, 0x28, 0x6d, 0x41, 0x8f, 0x7a, 0xad, + 0x9d, 0x05, 0xb3, 0xf4, 0x15, 0xb1, 0x7f, 0x5c, 0xa2, 0xc6, 0x05, 0x5d, 0x48, 0xd3, 0x1e, 0x05, + 0x72, 0xe8, 0x3e, 0xcf, 0x31, 0x4e, 0x77, 0x08, 0x5e, 0x0f, 0x5a, 0xa0, 0x8e, 0xb2, 0x0b, 0xbe, + 0xa3, 0xec, 0x42, 0x93, 0xb8, 0xd1, 0xea, 0x34, 0x17, 0xfc, 0xdf, 0x85, 0xc0, 0x7a, 0xf9, 0xbc, + 0x1a, 0x2a, 0x86, 0x06, 0xb2, 0x96, 0xb1, 0x8b, 0x98, 0x5e, 0x90, 0xff, 0xda, 0xcd, 0xe0, 0xb8, + 0x71, 0xd9, 0xf0, 0x0c, 0xa7, 0x66, 0xb7, 0x8d, 0x2e, 0x19, 0x36, 0xfd, 0x96, 0xdf, 0xff, 0x82, + 0x6c, 0x5a, 0x79, 0xb6, 0x83, 0x48, 0x2e, 0x7f, 0xd3, 0xca, 0x4f, 0xc0, 0xd4, 0xcd, 0xb6, 0x6d, + 0x11, 0xfe, 0x55, 0x9d, 0xfc, 0xc7, 0x52, 0xe9, 0x98, 0x2e, 0xae, 0x08, 0xa1, 0x52, 0xa7, 0xfb, + 0x29, 0xcd, 0x7d, 0xab, 0x4d, 0x36, 0xac, 0x0a, 0x7a, 0xd4, 0x6b, 0x6d, 0x11, 0xcc, 0xb0, 0xdd, + 0x97, 0x35, 0xac, 0x57, 0x79, 0xa2, 0x57, 0xd7, 0x89, 0x6e, 0x88, 0x14, 0xcf, 0x85, 0x7a, 0x98, + 0x4f, 0xe7, 0x3f, 0xd2, 0x9e, 0x02, 0x1e, 0xcc, 0x1e, 0xcb, 0x7b, 0xae, 0x67, 0xef, 0x52, 0xd0, + 0x97, 0xcd, 0x2e, 0xad, 0xc1, 0x14, 0xa9, 0x41, 0x5c, 0x16, 0xed, 0x36, 0x70, 0xb2, 0xe7, 0xa0, + 0x2d, 0xe4, 0x5c, 0x30, 0x76, 0xf7, 0xee, 0x6b, 0x39, 0x86, 0xe5, 0xf6, 0x6c, 0xc7, 0x3b, 0x5d, + 0x20, 0xcc, 0x0f, 0x7c, 0xa7, 0xdd, 0x02, 0x4e, 0xdc, 0xeb, 0xda, 0x56, 0xa9, 0x67, 0xd6, 0x4c, + 0xd7, 0x43, 0x56, 0xa9, 0xd3, 0x71, 0x4e, 0x4f, 0x93, 0xb2, 0x0e, 0xbe, 0xd0, 0x6e, 0x00, 0x73, + 0xf7, 0xda, 0xa6, 0xd5, 0xf4, 0x1c, 0x64, 0xec, 0x6e, 0x38, 0xdd, 0xd3, 0x80, 0x6e, 0x10, 0x09, + 0x89, 0xac, 0xf3, 0x2d, 0x80, 0x3c, 0x85, 0x04, 0xbe, 0x28, 0x27, 0xed, 0xd5, 0xcc, 0x84, 0x14, + 0x6b, 0x2d, 0x3e, 0x1a, 0x4c, 0xb1, 0x5e, 0x93, 0x80, 0x3f, 0x73, 0xdb, 0xa9, 0xbe, 0x05, 0x12, + 0x46, 0x45, 0xf7, 0xb3, 0x69, 0x8f, 0x05, 0xf9, 0x36, 0x11, 0x15, 0xd1, 0x83, 0x99, 0xdb, 0x1e, + 0x3c, 0xb8, 0x50, 0x92, 0x45, 0x67, 0x59, 0xe1, 0x97, 0x54, 0x29, 0x47, 0xe8, 0x38, 0x8e, 0x93, + 0xf5, 0x14, 0xdf, 0x54, 0x46, 0xe8, 0x8a, 0x6f, 0x01, 0x37, 0xb1, 0x7e, 0x96, 0xd9, 0x34, 0x4b, + 0x9b, 0x8b, 0x1b, 0xfe, 0xac, 0x16, 0x5b, 0x3a, 0xcd, 0x56, 0x49, 0x6f, 0x6d, 0xd6, 0x1b, 0x4b, + 0x78, 0x36, 0x7c, 0x33, 0xb8, 0x71, 0x48, 0xee, 0x4a, 0x6b, 0xb3, 0x5e, 0x5a, 0xab, 0x14, 0xb7, + 0x44, 0x7b, 0xa9, 0xd9, 0x6a, 0xac, 0x6f, 0xea, 0x1b, 0xf5, 0x7a, 0xb5, 0xbe, 0x42, 0x89, 0x61, + 0x03, 0xf5, 0x54, 0x98, 0xe1, 0xbc, 0x5e, 0x6d, 0x55, 0x36, 0xcb, 0x8d, 0xfa, 0x72, 0x75, 0xa5, + 0x68, 0x0e, 0x33, 0xb6, 0xee, 0xd5, 0xae, 0x03, 0xd7, 0x0a, 0x9c, 0x54, 0x1b, 0x75, 0x3c, 0x45, + 0x2f, 0x97, 0xea, 0xe5, 0x0a, 0x9e, 0x8f, 0x5f, 0xd2, 0x20, 0xb8, 0x9a, 0x92, 0xdb, 0x5c, 0xae, + 0xd6, 0xf8, 0x5d, 0xb5, 0xcf, 0x64, 0xb4, 0xd3, 0xe0, 0x2a, 0xfe, 0x1d, 0xf3, 0x89, 0x28, 0xfe, + 0x66, 0x46, 0xbb, 0x01, 0x3c, 0x54, 0xf8, 0x8a, 0x6e, 0x90, 0x6d, 0x56, 0x97, 0x36, 0xd7, 0xaa, + 0xcd, 0xb5, 0x52, 0xab, 0xbc, 0x5a, 0xfc, 0x2c, 0x99, 0xbe, 0x04, 0xf6, 0x38, 0xe7, 0x9d, 0xfc, + 0x12, 0xde, 0x4e, 0x28, 0x89, 0x8a, 0xfa, 0xc8, 0x81, 0xb0, 0xc7, 0xdb, 0xc5, 0x9f, 0x0a, 0x46, + 0x9c, 0x25, 0x41, 0x85, 0x1e, 0x9d, 0x80, 0x56, 0x32, 0x1d, 0x6a, 0x8d, 0xa0, 0x42, 0xd7, 0x81, + 0x6b, 0xeb, 0x15, 0x8a, 0x94, 0x5e, 0x29, 0x37, 0xce, 0x55, 0xf4, 0xcd, 0xf3, 0xa5, 0x5a, 0xad, + 0xd2, 0xda, 0x5c, 0xae, 0xea, 0xcd, 0x56, 0x71, 0x0b, 0xfe, 0x93, 0x12, 0x2c, 0x4b, 0x71, 0xd2, + 0xfa, 0x53, 0x25, 0x69, 0xb3, 0x8e, 0x5d, 0x7e, 0xfa, 0x41, 0x90, 0x77, 0x3d, 0xc3, 0xdb, 0x73, + 0x59, 0xab, 0x7e, 0xc8, 0xe0, 0x56, 0xbd, 0xd0, 0x24, 0x99, 0x74, 0x96, 0x19, 0x7e, 0x29, 0x93, + 0xa4, 0x99, 0x8e, 0x61, 0x65, 0xca, 0x1c, 0x41, 0xc4, 0x67, 0x00, 0xf4, 0xb5, 0xbd, 0xda, 0xdc, + 0x2c, 0xd5, 0xf4, 0x4a, 0x69, 0xe9, 0x42, 0xb0, 0x1e, 0x85, 0xb4, 0xab, 0xc1, 0x89, 0x8d, 0x7a, + 0x69, 0xb1, 0x56, 0x21, 0xcd, 0xa5, 0x51, 0xaf, 0x57, 0xca, 0x58, 0xee, 0x3f, 0x46, 0x76, 0x7f, + 0xb0, 0x55, 0x4e, 0xf8, 0xc6, 0x96, 0x13, 0x27, 0xff, 0x6f, 0x48, 0xbb, 0xb9, 0x85, 0x1a, 0xc6, + 0xd3, 0x1a, 0x2f, 0x0e, 0x5f, 0x94, 0xf2, 0x6c, 0x93, 0xe2, 0x24, 0x19, 0x1e, 0xff, 0x6d, 0x04, + 0x3c, 0xae, 0x06, 0x27, 0x78, 0x3c, 0x88, 0x87, 0x5b, 0x34, 0x0c, 0x5f, 0x51, 0xc1, 0xd4, 0x9a, + 0xb9, 0x4d, 0xdc, 0x8b, 0xf7, 0x42, 0x03, 0x65, 0x1e, 0x28, 0x81, 0xf7, 0x8e, 0x62, 0x76, 0x84, + 0xc9, 0xbc, 0x22, 0xbf, 0xde, 0x22, 0x35, 0x61, 0xff, 0x52, 0xe2, 0x9e, 0x89, 0x31, 0x1c, 0xd1, + 0x33, 0x3d, 0x5f, 0x49, 0xd2, 0x33, 0x0d, 0xa6, 0x95, 0x08, 0x26, 0x6c, 0x3a, 0x38, 0xe8, 0x19, + 0x7b, 0xa6, 0x83, 0x3a, 0xc4, 0x4c, 0x24, 0xf5, 0x56, 0x75, 0x31, 0xf1, 0xac, 0x73, 0x38, 0x30, + 0x79, 0x2f, 0x9b, 0x59, 0x50, 0x08, 0x46, 0x13, 0xb2, 0xe1, 0x83, 0x5f, 0x56, 0xea, 0x8d, 0x8d, + 0x95, 0xd5, 0xcd, 0x65, 0xbd, 0x52, 0x61, 0x4b, 0xc4, 0xdb, 0xf0, 0x5d, 0x0a, 0x98, 0x63, 0x35, + 0x64, 0xde, 0x13, 0x0f, 0x8d, 0x04, 0x99, 0xc1, 0xf1, 0xef, 0xfc, 0xf4, 0x64, 0x45, 0x84, 0xe3, + 0x31, 0x71, 0x22, 0x8c, 0x75, 0x9f, 0x78, 0x53, 0xd0, 0x84, 0xee, 0x16, 0x40, 0x79, 0x7c, 0x62, + 0x8a, 0xe9, 0x4f, 0x51, 0x5e, 0x04, 0x40, 0xbe, 0x89, 0xba, 0xa8, 0xed, 0xc1, 0x0f, 0xab, 0x23, + 0xb7, 0x89, 0x28, 0x73, 0x5b, 0x4d, 0x64, 0x6e, 0x67, 0x53, 0x30, 0xb7, 0x73, 0xa3, 0x9b, 0xdb, + 0xf9, 0xa4, 0xe6, 0xf6, 0x54, 0x94, 0xb9, 0x1d, 0xd3, 0x6b, 0x14, 0x62, 0x7b, 0x8d, 0x3e, 0x43, + 0x5d, 0xaf, 0x31, 0x93, 0x5e, 0x4c, 0x64, 0xca, 0xfc, 0xc9, 0x7c, 0xd2, 0x71, 0x9c, 0x02, 0x7f, + 0xb4, 0xe6, 0xf9, 0x4f, 0xe6, 0x92, 0x8c, 0xfb, 0x03, 0x39, 0x4e, 0xd6, 0x4a, 0x5e, 0x91, 0x4d, + 0x61, 0xd1, 0x51, 0xbb, 0x1e, 0x3c, 0x34, 0x7c, 0xde, 0xac, 0x3c, 0xad, 0xda, 0x6c, 0x35, 0x89, + 0x4d, 0x5e, 0x6e, 0xe8, 0xfa, 0xc6, 0x3a, 0xdd, 0xae, 0x3a, 0x05, 0xb4, 0x90, 0x8a, 0xbe, 0x51, + 0xa7, 0x16, 0xf8, 0xb6, 0x48, 0x7d, 0xb9, 0x5a, 0x5f, 0xda, 0x0c, 0x46, 0xb5, 0xfa, 0x72, 0xa3, + 0xb8, 0xa3, 0x2d, 0x80, 0x9b, 0x39, 0xea, 0xa4, 0x03, 0xa4, 0x25, 0x94, 0xea, 0x4b, 0x9b, 0x6b, + 0xf5, 0xca, 0x5a, 0xa3, 0x5e, 0x2d, 0x93, 0xf4, 0x66, 0xa5, 0x55, 0x34, 0xb1, 0x29, 0xd8, 0x67, + 0xf3, 0x37, 0x2b, 0x25, 0xbd, 0xbc, 0x5a, 0xd1, 0x69, 0x91, 0xf7, 0x6a, 0x37, 0x82, 0xb3, 0xa5, + 0x7a, 0xa3, 0x85, 0x53, 0x4a, 0xf5, 0x0b, 0xad, 0x0b, 0xeb, 0x95, 0xcd, 0x75, 0xbd, 0x51, 0xae, + 0x34, 0x9b, 0x78, 0x24, 0x65, 0x33, 0x84, 0x62, 0x57, 0x7b, 0x32, 0xb8, 0x83, 0x63, 0xad, 0xd2, + 0x22, 0xbe, 0x11, 0x6b, 0x0d, 0xe2, 0x1e, 0xb7, 0x54, 0xd9, 0x5c, 0x2d, 0x35, 0x37, 0xab, 0xf5, + 0x72, 0x63, 0x6d, 0xbd, 0xd4, 0xaa, 0xe2, 0x01, 0x77, 0x5d, 0x6f, 0xb4, 0x1a, 0x9b, 0xe7, 0x2a, + 0x7a, 0xb3, 0xda, 0xa8, 0x17, 0x2d, 0x5c, 0x65, 0x6e, 0x84, 0xf6, 0x2d, 0x25, 0x5b, 0xbb, 0x16, + 0x9c, 0xf6, 0xd3, 0x6b, 0x0d, 0x2c, 0x68, 0x6e, 0xce, 0xd0, 0xe3, 0xed, 0xac, 0x66, 0xab, 0xa1, + 0xd3, 0x59, 0xc3, 0x5a, 0x75, 0x45, 0xc7, 0x53, 0x9d, 0xe2, 0x33, 0x52, 0x9d, 0x53, 0xfc, 0x8b, + 0x02, 0xb2, 0x4d, 0xcf, 0xee, 0xc1, 0x1f, 0x08, 0xbb, 0xc3, 0x33, 0x00, 0x38, 0xc4, 0x15, 0x62, + 0xc9, 0xf0, 0x0c, 0xb6, 0x5a, 0xc3, 0xa5, 0xc0, 0xdf, 0x90, 0xde, 0xbf, 0x0d, 0xad, 0x2e, 0xbb, + 0x17, 0x31, 0x7c, 0x7c, 0x57, 0xee, 0x38, 0x64, 0x34, 0xa1, 0x64, 0xed, 0xe1, 0xc7, 0x47, 0xd9, + 0xa1, 0x85, 0xe0, 0x14, 0x07, 0x2b, 0x96, 0xbf, 0xaf, 0x32, 0x48, 0x7b, 0x10, 0xb8, 0xaa, 0x4f, + 0xf9, 0x88, 0xce, 0x6d, 0x69, 0x0f, 0x03, 0x0f, 0xe1, 0xd4, 0xbf, 0xb2, 0xd6, 0x38, 0x57, 0x09, + 0x14, 0x7d, 0xa9, 0xd4, 0x2a, 0x15, 0xb7, 0xe1, 0xe7, 0x55, 0x90, 0x5d, 0xb3, 0x2f, 0xf7, 0x6f, + 0x9b, 0x5b, 0xe8, 0x0a, 0xb7, 0xb7, 0xe2, 0x3f, 0x8a, 0x47, 0xb0, 0xa4, 0xc4, 0xbe, 0x16, 0xed, + 0x22, 0xf3, 0x45, 0x25, 0x89, 0xd8, 0xd7, 0x0e, 0xeb, 0x17, 0xf3, 0xd7, 0xa3, 0x88, 0x3d, 0x42, + 0xb4, 0x48, 0x3b, 0x0b, 0xce, 0x84, 0x2f, 0xaa, 0x4b, 0x95, 0x7a, 0xab, 0xba, 0x7c, 0x21, 0x14, + 0x6e, 0x55, 0x97, 0x12, 0xff, 0xb0, 0x6e, 0x2e, 0x7e, 0xad, 0xe0, 0x34, 0x38, 0x19, 0xbe, 0x5b, + 0xa9, 0xb4, 0xfc, 0x37, 0xf7, 0xc2, 0xe7, 0xe4, 0xc0, 0x2c, 0xed, 0xf6, 0x37, 0x7a, 0x1d, 0x6c, + 0x7d, 0x3f, 0x36, 0x44, 0xf7, 0x26, 0x70, 0xbc, 0xba, 0xbe, 0xdc, 0x6c, 0x7a, 0xb6, 0x63, 0x6c, + 0x23, 0x32, 0x8e, 0x52, 0x69, 0xf5, 0x27, 0xc3, 0xf7, 0x4a, 0xaf, 0xfe, 0x8b, 0x43, 0x0d, 0x2d, + 0x33, 0x02, 0xf5, 0xaf, 0x49, 0xad, 0xd6, 0x4b, 0x10, 0x4c, 0x86, 0xfe, 0xbd, 0x63, 0x6e, 0x73, + 0xd1, 0xb8, 0x6c, 0x9d, 0x7d, 0x9e, 0x02, 0xa6, 0x5b, 0xe6, 0x2e, 0x7a, 0xa6, 0x6d, 0x21, 0x57, + 0x9b, 0x02, 0xea, 0xca, 0x5a, 0xab, 0x78, 0x0c, 0xff, 0xc1, 0xd3, 0xa2, 0x0c, 0xf9, 0x53, 0xc1, + 0x05, 0xe0, 0x3f, 0xa5, 0x56, 0x51, 0xc5, 0x7f, 0xd6, 0x2a, 0xad, 0x62, 0x16, 0xff, 0xa9, 0x57, + 0x5a, 0xc5, 0x1c, 0xfe, 0xb3, 0x5e, 0x6b, 0x15, 0xf3, 0xf8, 0x4f, 0xb5, 0xd9, 0x2a, 0x4e, 0xe1, + 0x3f, 0x8b, 0xcd, 0x56, 0xb1, 0x80, 0xff, 0x9c, 0x6b, 0xb6, 0x8a, 0xd3, 0xf8, 0x4f, 0xb9, 0xd5, + 0x2a, 0x02, 0xfc, 0xe7, 0xee, 0x66, 0xab, 0x38, 0x83, 0xff, 0x94, 0xca, 0xad, 0xe2, 0x2c, 0xf9, + 0x53, 0x69, 0x15, 0xe7, 0xf0, 0x9f, 0x66, 0xb3, 0x55, 0x9c, 0x27, 0x94, 0x9b, 0xad, 0xe2, 0x71, + 0x52, 0x56, 0xb5, 0x55, 0x2c, 0xe2, 0x3f, 0xab, 0xcd, 0x56, 0xf1, 0x04, 0xc9, 0xdc, 0x6c, 0x15, + 0x35, 0x52, 0x68, 0xb3, 0x55, 0xbc, 0x8a, 0xe4, 0x69, 0xb6, 0x8a, 0x27, 0x49, 0x11, 0xcd, 0x56, + 0xf1, 0x6a, 0xc2, 0x46, 0xa5, 0x55, 0x3c, 0x45, 0xf2, 0xe8, 0xad, 0xe2, 0x83, 0xc8, 0xab, 0x7a, + 0xab, 0x78, 0x9a, 0x30, 0x56, 0x69, 0x15, 0xaf, 0x21, 0x7f, 0xf4, 0x56, 0x11, 0x92, 0x57, 0xa5, + 0x56, 0xf1, 0xc1, 0xf0, 0x21, 0x60, 0x7a, 0x05, 0x79, 0x14, 0x44, 0x58, 0x04, 0xea, 0x0a, 0xf2, + 0xf8, 0x89, 0xf8, 0x2b, 0xb3, 0xe0, 0x41, 0x6c, 0xf1, 0x66, 0xd9, 0xb1, 0x77, 0x6b, 0x68, 0xdb, + 0x68, 0xef, 0x57, 0xee, 0xc3, 0x06, 0x1f, 0x7c, 0x61, 0x46, 0x58, 0xd1, 0xee, 0x85, 0xbd, 0x11, + 0xf9, 0x1f, 0x6b, 0x20, 0xfb, 0x6b, 0xd4, 0xaa, 0xb8, 0x46, 0x1d, 0x65, 0x12, 0x66, 0x65, 0x26, + 0x92, 0xff, 0xc0, 0x37, 0x06, 0x61, 0x43, 0x2a, 0xd3, 0xb7, 0x21, 0x85, 0x5b, 0x58, 0x0f, 0x39, + 0xae, 0x6d, 0x19, 0xdd, 0x26, 0x73, 0x3f, 0xa2, 0x73, 0xd5, 0xfe, 0x64, 0xed, 0xa9, 0x7e, 0xa3, + 0xa2, 0x06, 0xdf, 0x13, 0xe3, 0x96, 0xb7, 0xfa, 0x25, 0x14, 0xd1, 0xbe, 0x3e, 0x1b, 0xb4, 0xaf, + 0x96, 0xd0, 0xbe, 0x9e, 0x72, 0x08, 0xda, 0xc9, 0x9a, 0x5a, 0x75, 0xb4, 0xa9, 0x68, 0xe8, 0x9c, + 0xef, 0xef, 0x7f, 0xa9, 0xf0, 0xf3, 0x0a, 0x38, 0x55, 0xb1, 0x06, 0x4d, 0x65, 0x78, 0x35, 0x7a, + 0x2b, 0x0f, 0xcd, 0xba, 0x28, 0xd2, 0x3b, 0x06, 0x56, 0x7b, 0x30, 0xcd, 0x08, 0x89, 0xfe, 0x6e, + 0x20, 0xd1, 0xa6, 0x20, 0xd1, 0xbb, 0x46, 0x27, 0x9d, 0x4c, 0xa0, 0xf5, 0xb1, 0xf6, 0x5d, 0x59, + 0xf8, 0x17, 0x0a, 0x38, 0x41, 0x3d, 0x08, 0xef, 0xa6, 0x33, 0x27, 0xd2, 0xdb, 0x8b, 0xd6, 0x57, + 0x37, 0x9c, 0x65, 0x51, 0xfd, 0xe6, 0x52, 0xe0, 0xeb, 0x78, 0x81, 0xdf, 0x23, 0x0a, 0x3c, 0xa2, + 0x1f, 0xef, 0x2f, 0x2e, 0x42, 0xd6, 0xbf, 0x19, 0xc8, 0xba, 0x2e, 0xc8, 0xfa, 0x8e, 0x91, 0xa8, + 0x1e, 0xad, 0x98, 0xbf, 0x99, 0x05, 0x0f, 0xa1, 0x1c, 0x32, 0x45, 0xa0, 0xfd, 0x60, 0xc9, 0xea, + 0xe8, 0xc8, 0xf5, 0x0c, 0xc7, 0x13, 0x42, 0xaf, 0xf4, 0x4d, 0xcd, 0x33, 0x29, 0x4c, 0xcd, 0x95, + 0xa1, 0x53, 0x73, 0xf8, 0x1e, 0xde, 0xc0, 0x3b, 0x2f, 0x22, 0x5b, 0x8a, 0xc1, 0x20, 0xa2, 0x86, + 0x51, 0x2d, 0x2a, 0xb0, 0xfc, 0x7e, 0x58, 0x40, 0x79, 0xf9, 0xd0, 0x25, 0x24, 0x43, 0xfc, 0x37, + 0xc6, 0x6b, 0x89, 0x67, 0xf9, 0x77, 0xa2, 0xd9, 0x58, 0xec, 0xa4, 0x3a, 0x85, 0x7a, 0xee, 0x09, + 0x30, 0x4d, 0xba, 0x9c, 0x9a, 0x69, 0x5d, 0x82, 0x7f, 0xae, 0x82, 0xd9, 0x3a, 0xba, 0x52, 0xde, + 0x31, 0xba, 0x5d, 0x64, 0x6d, 0x23, 0x78, 0xaf, 0x60, 0xdb, 0x1b, 0xbd, 0x5e, 0x3d, 0xdc, 0x1f, + 0xf6, 0x1f, 0xb5, 0xbb, 0x40, 0xce, 0x6d, 0xdb, 0x41, 0x50, 0x87, 0x1f, 0x88, 0x58, 0xbd, 0x2e, + 0xed, 0x79, 0x3b, 0x0b, 0xa4, 0xac, 0x52, 0xcf, 0x6c, 0xe2, 0x0f, 0x74, 0xfa, 0x1d, 0x1b, 0x27, + 0xbf, 0x31, 0xb0, 0x33, 0xce, 0xc4, 0x74, 0xc6, 0x01, 0xe3, 0x0b, 0x3c, 0xd3, 0x11, 0x8b, 0x24, + 0xd7, 0x81, 0x99, 0xb6, 0x9f, 0x25, 0x38, 0xa5, 0xc7, 0x27, 0xc1, 0xbf, 0x4c, 0xd4, 0x5d, 0x4b, + 0x15, 0x9e, 0x4c, 0xab, 0xd0, 0x98, 0x4d, 0xcd, 0xab, 0xc1, 0x89, 0x56, 0xa3, 0xb1, 0xb9, 0x56, + 0xaa, 0x5f, 0x08, 0x63, 0xab, 0x6c, 0xc1, 0x57, 0x64, 0xc1, 0x7c, 0xd3, 0xee, 0x5e, 0x46, 0x21, + 0xce, 0x55, 0xc1, 0xfd, 0x93, 0x97, 0x53, 0xe6, 0x80, 0x9c, 0xb4, 0x53, 0x20, 0x6f, 0x58, 0xee, + 0x15, 0xe4, 0x9b, 0xff, 0xec, 0x89, 0xc1, 0xf8, 0x51, 0xbe, 0x23, 0xd0, 0x45, 0x18, 0xef, 0x1c, + 0x22, 0x49, 0x91, 0xab, 0x08, 0x20, 0xcf, 0x82, 0x59, 0x97, 0x7a, 0x89, 0xb4, 0x38, 0x67, 0x20, + 0x21, 0x8d, 0xb0, 0x48, 0xdd, 0x94, 0x54, 0xc6, 0x22, 0x79, 0x82, 0xaf, 0x0d, 0xfa, 0x8f, 0x0d, + 0x01, 0xe2, 0xd2, 0x61, 0x18, 0x4b, 0x06, 0xf2, 0xab, 0xc6, 0x3d, 0x89, 0x3f, 0x0d, 0x4e, 0xfa, + 0x27, 0xd4, 0xcb, 0xab, 0xa5, 0x5a, 0xad, 0x52, 0x5f, 0xa9, 0x6c, 0x56, 0x97, 0xe8, 0x7e, 0x72, + 0x98, 0x52, 0x6a, 0xb5, 0x2a, 0x6b, 0xeb, 0xad, 0xe6, 0x66, 0xe5, 0x69, 0xe5, 0x4a, 0x65, 0x89, + 0x38, 0x60, 0x93, 0x13, 0x94, 0xbe, 0xab, 0x7c, 0xa9, 0xde, 0x3c, 0x5f, 0xd1, 0x8b, 0x3b, 0xf0, + 0x1f, 0x15, 0x50, 0xa8, 0x99, 0xe4, 0x54, 0x98, 0xcb, 0x5b, 0x4b, 0x5f, 0xe1, 0x1b, 0x68, 0x4d, + 0x44, 0xf6, 0xf1, 0x43, 0x04, 0xe8, 0xd3, 0x8b, 0xdc, 0x01, 0x53, 0x8d, 0x5e, 0x8f, 0x9d, 0xbe, + 0xb8, 0x3e, 0xae, 0x03, 0x29, 0xf5, 0x7a, 0x55, 0x6b, 0xcb, 0xd6, 0x71, 0x7e, 0xce, 0x64, 0x6d, + 0x08, 0x70, 0x3e, 0x71, 0x34, 0x6e, 0x8e, 0x72, 0xd4, 0x47, 0xf0, 0x45, 0x2a, 0x98, 0xa6, 0x3e, + 0x0d, 0xa5, 0x5e, 0x0f, 0x3e, 0x25, 0x6c, 0x91, 0x4c, 0x38, 0x54, 0xd0, 0xf2, 0xc2, 0xf9, 0x28, + 0x0f, 0xd7, 0x9a, 0x08, 0xd7, 0x0f, 0x0d, 0x11, 0x50, 0xc0, 0x47, 0x04, 0x5e, 0xa7, 0x44, 0x37, + 0xc0, 0xa0, 0x7d, 0xfd, 0x56, 0x00, 0xc8, 0xba, 0x00, 0xc8, 0x9d, 0x23, 0x96, 0x77, 0xb4, 0x88, + 0xfc, 0xb5, 0x02, 0xa6, 0x69, 0xb0, 0x04, 0x8c, 0xc8, 0xf5, 0xfd, 0x63, 0xe1, 0xaa, 0xe1, 0xee, + 0x70, 0x63, 0x21, 0x7e, 0x84, 0xef, 0x3b, 0x84, 0xd0, 0x83, 0xa2, 0x22, 0x8c, 0x9f, 0x2f, 0x8f, + 0x28, 0xdc, 0x28, 0xba, 0xc9, 0x84, 0xfb, 0xf4, 0x11, 0x84, 0x3b, 0x07, 0xa6, 0x43, 0x6b, 0x45, + 0x8d, 0x93, 0xf5, 0xd9, 0x12, 0x98, 0xe1, 0xac, 0x53, 0x4c, 0x7b, 0x09, 0x6d, 0x19, 0x7b, 0x5d, + 0xb6, 0x06, 0x50, 0x3c, 0x86, 0x89, 0x91, 0x3a, 0x35, 0xac, 0xee, 0x7e, 0x31, 0xa3, 0x15, 0xc1, + 0x2c, 0x6f, 0x88, 0x16, 0x15, 0xf8, 0xad, 0x6b, 0xc1, 0xf4, 0x79, 0xdb, 0xb9, 0x44, 0x8e, 0x2a, + 0xc0, 0x0f, 0xd0, 0xc0, 0x8f, 0x7e, 0x18, 0x1b, 0xae, 0x1f, 0x7b, 0x95, 0xbc, 0x6f, 0xaa, 0x4f, + 0x6d, 0x61, 0x68, 0xa8, 0x9a, 0xeb, 0xc0, 0xcc, 0x15, 0x3f, 0x77, 0x68, 0x5e, 0x70, 0x49, 0xf0, + 0x97, 0xe5, 0xbc, 0x4d, 0x87, 0x17, 0x99, 0xfe, 0x56, 0xe3, 0xdb, 0x15, 0x90, 0x5f, 0x41, 0x5e, + 0xa9, 0xdb, 0xe5, 0xe5, 0xf6, 0x32, 0xe9, 0xc3, 0xeb, 0x42, 0x25, 0x4a, 0xdd, 0x6e, 0xf4, 0x48, + 0xce, 0x09, 0xc8, 0x3f, 0x64, 0x29, 0xa4, 0x49, 0x1e, 0x0d, 0x19, 0x52, 0x60, 0xfa, 0x12, 0xfb, + 0xbb, 0xf0, 0x3c, 0xc8, 0xeb, 0xb9, 0xb9, 0xd9, 0x63, 0xc2, 0xa0, 0x9f, 0x99, 0x78, 0xcf, 0x4c, + 0x3f, 0x9f, 0x76, 0x0f, 0x98, 0xda, 0x73, 0x51, 0xd9, 0x70, 0x7d, 0x7b, 0x5a, 0xac, 0x69, 0xe3, + 0xe2, 0xbd, 0xa8, 0xed, 0x2d, 0x54, 0x77, 0x7b, 0xb6, 0xe3, 0x6d, 0xd0, 0x8c, 0x41, 0x90, 0x34, + 0xf6, 0xac, 0xfb, 0x14, 0x34, 0x08, 0x0a, 0x57, 0x4c, 0x6f, 0xa7, 0xbc, 0x63, 0x78, 0x6c, 0x87, + 0x37, 0x78, 0x86, 0x1f, 0x1a, 0x01, 0xce, 0x58, 0x2f, 0xc1, 0xe8, 0x18, 0x18, 0x37, 0x83, 0x22, + 0x99, 0x73, 0x99, 0xd6, 0x36, 0xe5, 0x3f, 0x58, 0xd8, 0x3a, 0x90, 0x9e, 0x18, 0xf0, 0x31, 0xb8, + 0x01, 0x8e, 0x02, 0xf8, 0x8f, 0xa8, 0x20, 0xdb, 0xe8, 0x21, 0x4b, 0xfa, 0x70, 0x78, 0x80, 0x83, + 0xd2, 0x87, 0xc3, 0xfb, 0xe4, 0xcf, 0x2d, 0x04, 0x95, 0xc6, 0x25, 0x47, 0xa0, 0x70, 0x2b, 0xc8, + 0x9a, 0xd6, 0x96, 0xcd, 0xa6, 0xde, 0x0f, 0x8e, 0x30, 0x17, 0x88, 0x99, 0x40, 0x32, 0xc2, 0xf7, + 0xc9, 0x1d, 0x59, 0x88, 0x2b, 0x3b, 0x99, 0xb8, 0x97, 0x47, 0x18, 0x49, 0x34, 0x30, 0x1f, 0xce, + 0x8b, 0x6b, 0x8d, 0xd2, 0x52, 0xb1, 0x03, 0xff, 0xb6, 0x00, 0xf2, 0x54, 0x6d, 0xe0, 0x4b, 0x54, + 0xa0, 0x96, 0x3a, 0x9d, 0x08, 0x30, 0x94, 0x03, 0x60, 0xd8, 0xbe, 0x16, 0xb2, 0xe3, 0x25, 0xfe, + 0xb3, 0x18, 0x2d, 0x52, 0x72, 0x6c, 0x60, 0x4d, 0xb2, 0xd4, 0xe9, 0x44, 0x1f, 0xb6, 0x0a, 0x0a, + 0x54, 0xc4, 0x02, 0xf9, 0x1e, 0x42, 0x95, 0xeb, 0x21, 0x12, 0x0f, 0x24, 0x91, 0xfc, 0xa5, 0xdf, + 0x4a, 0xfe, 0x41, 0x01, 0x53, 0xc4, 0xd8, 0xee, 0x74, 0x60, 0x49, 0x06, 0x9b, 0x6b, 0xc1, 0xb4, + 0x2f, 0x1a, 0xdc, 0x65, 0xe2, 0xf1, 0x20, 0x4c, 0x10, 0x97, 0x0f, 0xef, 0x16, 0xd1, 0x79, 0x5c, + 0x7c, 0xed, 0x19, 0x17, 0xd1, 0x07, 0x71, 0xc3, 0x62, 0x95, 0xfe, 0x62, 0x7f, 0x25, 0x10, 0xf8, + 0x9a, 0x20, 0xf0, 0xdb, 0x47, 0x29, 0x32, 0x7d, 0xa1, 0xff, 0x91, 0x02, 0x00, 0x2e, 0x9b, 0x45, + 0x3b, 0x78, 0x84, 0x10, 0xc3, 0x28, 0x46, 0xba, 0xaf, 0x90, 0xb6, 0x5d, 0x07, 0x56, 0x35, 0x2e, + 0xaa, 0x81, 0x56, 0x04, 0xaa, 0x19, 0x88, 0x16, 0xff, 0x85, 0x6f, 0x97, 0xb2, 0x66, 0xe5, 0x4b, + 0x4a, 0x5f, 0xae, 0x7f, 0xa2, 0x80, 0xa9, 0x26, 0xf2, 0x70, 0xd7, 0x09, 0xcf, 0xc9, 0xf4, 0xfa, + 0x5c, 0xdb, 0x56, 0x24, 0xdb, 0xf6, 0x77, 0x32, 0xb2, 0xd1, 0x2c, 0x43, 0xc9, 0x30, 0x9e, 0x22, + 0x66, 0x0d, 0xaf, 0x97, 0x8a, 0x66, 0x39, 0x8c, 0x5a, 0xfa, 0xd2, 0x7d, 0xab, 0x12, 0xb8, 0xb7, + 0x89, 0x87, 0x91, 0x79, 0xb3, 0x3a, 0x73, 0xd0, 0xac, 0x96, 0x3f, 0x8c, 0xcc, 0xd7, 0x31, 0xda, + 0x9b, 0x2a, 0xb1, 0x01, 0x32, 0x06, 0x47, 0xa7, 0x51, 0xe4, 0xf5, 0x6c, 0x15, 0xe4, 0xd9, 0x8e, + 0xe7, 0x5d, 0xf1, 0x1b, 0x9e, 0xc3, 0xa7, 0x26, 0xef, 0x1f, 0xc1, 0x14, 0x8c, 0xdb, 0x4b, 0x0c, + 0xd8, 0x50, 0x38, 0x36, 0x6e, 0x01, 0x39, 0x12, 0xea, 0x9f, 0x8d, 0x73, 0xa1, 0x8f, 0x9a, 0x4f, + 0xa2, 0x82, 0xdf, 0xea, 0x34, 0x53, 0x62, 0x14, 0xc6, 0xb0, 0xfd, 0x38, 0x0a, 0x0a, 0xdf, 0xd4, + 0x00, 0x58, 0xdf, 0xbb, 0xd8, 0x35, 0xdd, 0x1d, 0xd3, 0x22, 0x8e, 0xad, 0xb3, 0xec, 0x91, 0x46, + 0xac, 0x8f, 0x35, 0x09, 0x23, 0x8d, 0x82, 0x22, 0x50, 0xf7, 0x1c, 0x93, 0x99, 0xc8, 0xf8, 0xaf, + 0xf6, 0xa4, 0xc0, 0x45, 0x3c, 0xdb, 0x17, 0x6d, 0x0a, 0x8b, 0x21, 0xe4, 0x60, 0x81, 0x2b, 0x3d, + 0x74, 0x15, 0xe7, 0xaf, 0x25, 0xc8, 0x89, 0xd7, 0x12, 0x08, 0x21, 0x28, 0xf2, 0x7d, 0x21, 0x28, + 0x30, 0x8e, 0xae, 0xf9, 0x4c, 0x44, 0xfc, 0x25, 0x55, 0x9d, 0xfc, 0xc7, 0x5f, 0x10, 0x9f, 0x46, + 0xe2, 0x52, 0x4c, 0x0f, 0x3a, 0x85, 0x09, 0x7c, 0x9f, 0x37, 0x2d, 0xd9, 0xe7, 0x7d, 0x2c, 0x9c, + 0x3b, 0xd9, 0x92, 0xc6, 0x74, 0x02, 0xc9, 0x09, 0xec, 0x66, 0xfb, 0xd8, 0x85, 0x9f, 0x94, 0x8e, + 0x1e, 0xcc, 0xc9, 0x38, 0x76, 0x16, 0xc4, 0x38, 0x50, 0x02, 0x0e, 0x38, 0xc7, 0x95, 0xb8, 0x1e, + 0x78, 0x18, 0xfd, 0x64, 0xba, 0xbc, 0x3b, 0x9a, 0x8d, 0xed, 0xc7, 0xf2, 0x68, 0x2c, 0xde, 0x5d, + 0x29, 0xb7, 0x8a, 0xe8, 0x60, 0x7c, 0x0f, 0x12, 0xc9, 0x83, 0x46, 0xed, 0x08, 0x17, 0x92, 0xe1, + 0xff, 0x54, 0x40, 0x9e, 0x99, 0x1b, 0x77, 0x1d, 0x12, 0x42, 0xf8, 0xca, 0x51, 0x20, 0x89, 0x0d, + 0xa9, 0xf4, 0xdb, 0x49, 0x01, 0x18, 0x83, 0x81, 0x71, 0x21, 0x35, 0x00, 0xe0, 0x3f, 0x2b, 0x20, + 0x8b, 0xcd, 0x20, 0xb9, 0x80, 0x35, 0x9f, 0x95, 0x3e, 0xc7, 0xc0, 0x09, 0x00, 0x93, 0x8f, 0xd0, + 0xef, 0x45, 0x30, 0xdd, 0xa3, 0x19, 0x83, 0x70, 0x49, 0x37, 0x48, 0x74, 0x46, 0x48, 0x0f, 0x3f, + 0xe3, 0xa6, 0x9c, 0x71, 0x67, 0x21, 0xe2, 0xf9, 0x49, 0x06, 0x47, 0x65, 0x1c, 0xb1, 0x6d, 0xb6, + 0xe0, 0xbf, 0x29, 0x00, 0xe8, 0xc8, 0xb5, 0xbb, 0x97, 0xd1, 0x86, 0x63, 0xc2, 0x07, 0x87, 0x00, + 0xb0, 0x66, 0x9f, 0x09, 0x9b, 0xfd, 0xe7, 0x14, 0xd9, 0x13, 0x0b, 0x82, 0xe6, 0xf9, 0xc4, 0x23, + 0xc4, 0xff, 0x64, 0x30, 0xc5, 0xe4, 0xc8, 0x6c, 0x4a, 0x39, 0xe1, 0xfb, 0x1f, 0xc1, 0x0f, 0x4a, + 0x9d, 0x78, 0x90, 0xe1, 0x28, 0x19, 0x00, 0xe5, 0x11, 0x00, 0x38, 0x0e, 0x66, 0x7c, 0x00, 0x36, + 0xf4, 0x6a, 0x11, 0xc1, 0x77, 0xab, 0xc4, 0x2d, 0x8c, 0x0e, 0x6e, 0x87, 0xef, 0x69, 0xfe, 0x42, + 0x7a, 0xb2, 0xcf, 0xc9, 0x23, 0x28, 0x3f, 0x25, 0x80, 0x7e, 0x4f, 0x6a, 0x76, 0x2f, 0xc1, 0xd0, + 0x03, 0xa5, 0xbf, 0x3a, 0x5b, 0x01, 0x73, 0x82, 0x55, 0xa2, 0x9d, 0x06, 0x27, 0x85, 0x04, 0x3a, + 0xde, 0x75, 0x8a, 0xc7, 0x34, 0x08, 0x4e, 0x09, 0x6f, 0xd8, 0x03, 0xea, 0x14, 0x33, 0xf0, 0x5d, + 0x5f, 0xc9, 0x04, 0xeb, 0x3d, 0xef, 0xcf, 0xb2, 0xd5, 0xb7, 0x4f, 0x8b, 0x11, 0x7a, 0xdb, 0xb6, + 0xe5, 0xa1, 0xfb, 0x38, 0xdf, 0xba, 0x20, 0x21, 0xd6, 0x6a, 0x38, 0x0d, 0xa6, 0x3c, 0x87, 0xf7, + 0xb7, 0xf3, 0x1f, 0x79, 0xc5, 0xca, 0x89, 0x8a, 0x55, 0x07, 0x67, 0x4d, 0xab, 0xdd, 0xdd, 0xeb, + 0x20, 0x1d, 0x75, 0x0d, 0x2c, 0x43, 0xb7, 0xe4, 0x2e, 0xa1, 0x1e, 0xb2, 0x3a, 0xc8, 0xf2, 0x28, + 0x9f, 0xfe, 0x61, 0x7d, 0x89, 0x9c, 0xa2, 0x32, 0x3e, 0x49, 0x54, 0xc6, 0x47, 0x0c, 0x5a, 0x02, + 0x8e, 0x59, 0x03, 0xbc, 0x1d, 0x00, 0x5a, 0xb7, 0x73, 0x26, 0xba, 0xc2, 0xd4, 0xf0, 0x9a, 0xbe, + 0x95, 0xc0, 0x46, 0x90, 0x41, 0xe7, 0x32, 0xc3, 0xaf, 0x06, 0xea, 0xf7, 0x14, 0x41, 0xfd, 0x6e, + 0x91, 0x64, 0x21, 0x99, 0xd6, 0xf5, 0x0e, 0xbf, 0xa9, 0x74, 0x0d, 0xb8, 0xda, 0x3f, 0x16, 0x51, + 0xaf, 0x54, 0x96, 0x9a, 0x9b, 0x1b, 0xeb, 0x2b, 0x7a, 0x69, 0xa9, 0x52, 0x04, 0x58, 0x3f, 0xa9, + 0x5e, 0x06, 0xa7, 0x19, 0xb2, 0xf0, 0x8f, 0x15, 0x90, 0x23, 0x91, 0x26, 0xe0, 0xd3, 0xc7, 0xa4, + 0x39, 0xae, 0xe0, 0xa9, 0x19, 0x8c, 0xbb, 0xf2, 0xf7, 0x2e, 0x31, 0x61, 0x12, 0xae, 0x0e, 0x75, + 0xef, 0x52, 0x0c, 0xa1, 0xf4, 0x67, 0x42, 0xb8, 0x49, 0x36, 0x77, 0xec, 0x2b, 0xff, 0x99, 0x9b, + 0x24, 0xae, 0xff, 0x11, 0x37, 0xc9, 0x01, 0x2c, 0x4c, 0xbc, 0x49, 0x0e, 0x68, 0x77, 0x31, 0xcd, + 0x14, 0x7e, 0x34, 0x17, 0xcc, 0xff, 0x3e, 0xa5, 0x1c, 0x6a, 0xef, 0xac, 0x04, 0xe6, 0x4c, 0xcb, + 0x43, 0x8e, 0x65, 0x74, 0x97, 0xbb, 0xc6, 0xb6, 0x6f, 0x9f, 0xf6, 0x6f, 0x82, 0x54, 0xb9, 0x3c, + 0xba, 0xf8, 0x85, 0x76, 0x06, 0x00, 0x0f, 0xed, 0xf6, 0xba, 0x86, 0x17, 0xaa, 0x1e, 0x97, 0xc2, + 0x6b, 0x5f, 0x56, 0xd4, 0xbe, 0x47, 0x83, 0xab, 0x28, 0x68, 0xad, 0xfd, 0x1e, 0xda, 0xb0, 0xcc, + 0x67, 0xec, 0x91, 0x80, 0xee, 0x54, 0x47, 0x07, 0xbd, 0x12, 0x76, 0x85, 0xf2, 0xe2, 0xae, 0x90, + 0x76, 0x27, 0xb8, 0x86, 0xc4, 0xea, 0x27, 0x17, 0x1b, 0x9d, 0x37, 0x3b, 0xdb, 0xc8, 0xab, 0x6e, + 0xad, 0x99, 0xae, 0x6b, 0x5a, 0xdb, 0x64, 0x3a, 0x5e, 0xd0, 0xa3, 0x33, 0xc0, 0xbf, 0x91, 0x0e, + 0x16, 0xe7, 0xf7, 0x19, 0x43, 0x82, 0xc5, 0xd9, 0xe2, 0xb6, 0x5d, 0xd8, 0x4e, 0x83, 0x55, 0x9d, + 0xac, 0xc4, 0xaa, 0x0e, 0x8f, 0x69, 0x4e, 0x72, 0x75, 0xe0, 0x35, 0x52, 0xd1, 0xe8, 0xe2, 0xaa, + 0x91, 0x7e, 0xdf, 0xf7, 0x6d, 0x15, 0xcc, 0xd3, 0xa2, 0x17, 0x6d, 0xfb, 0xd2, 0xae, 0xe1, 0x5c, + 0x82, 0x3f, 0x7d, 0xb8, 0x5d, 0xe0, 0xd8, 0xdd, 0xab, 0xa8, 0x2d, 0xdd, 0x3e, 0xe5, 0xcd, 0xf6, + 0x2b, 0x2f, 0xfc, 0x5d, 0xe9, 0x29, 0x89, 0x20, 0x4f, 0xbf, 0x52, 0x93, 0xd9, 0xde, 0x92, 0x3b, + 0x93, 0x2d, 0xc3, 0x60, 0xfa, 0xc0, 0xff, 0x56, 0x00, 0xbc, 0x3f, 0x8e, 0xf0, 0x3b, 0x03, 0xe3, + 0xc4, 0x1d, 0x7e, 0x6d, 0x34, 0xec, 0x7c, 0xbe, 0x46, 0xc0, 0xae, 0x08, 0xd4, 0x4b, 0x81, 0x07, + 0x25, 0xfe, 0xcb, 0x57, 0x28, 0x9b, 0x1e, 0x9a, 0x11, 0x2c, 0x4f, 0x04, 0xcd, 0x93, 0x22, 0x0b, + 0x8d, 0x5e, 0xaa, 0x98, 0x7e, 0x59, 0x7a, 0xc7, 0x6d, 0xa0, 0x80, 0x28, 0x77, 0x93, 0x69, 0x95, + 0x72, 0xdb, 0x75, 0xf2, 0x6c, 0xa6, 0x8f, 0xe6, 0x0b, 0x73, 0xbe, 0x3f, 0x65, 0x13, 0x91, 0x6b, + 0x50, 0x03, 0x0c, 0x4f, 0x81, 0xbc, 0x6b, 0xef, 0x39, 0x6d, 0xc4, 0xf6, 0x40, 0xd9, 0xd3, 0x08, + 0xfb, 0x75, 0x43, 0xcd, 0x85, 0x03, 0x16, 0x49, 0x36, 0xb1, 0x45, 0x12, 0x6d, 0xef, 0xc6, 0xd8, + 0x0f, 0xf0, 0x45, 0xd2, 0x77, 0x15, 0x09, 0x98, 0x35, 0x91, 0xf7, 0x40, 0x34, 0x02, 0x7e, 0x5d, + 0x6a, 0x37, 0x68, 0x48, 0x4d, 0x92, 0xa9, 0x5c, 0x63, 0x04, 0x3b, 0xf8, 0xc1, 0xe0, 0x41, 0x7e, + 0x0e, 0x66, 0x00, 0x13, 0x83, 0x77, 0x43, 0xaf, 0x15, 0x55, 0xf8, 0xec, 0x2c, 0x28, 0x52, 0xd6, + 0x1a, 0x81, 0x2d, 0x08, 0x5f, 0x96, 0x39, 0x6a, 0x83, 0x37, 0x7a, 0x06, 0xfb, 0x07, 0x8a, 0xec, + 0x0d, 0x07, 0x82, 0xe0, 0xc3, 0xda, 0x45, 0x68, 0xd2, 0x08, 0xcd, 0x2c, 0x46, 0xf9, 0xe0, 0x5b, + 0x32, 0x32, 0x17, 0x26, 0xc8, 0xb1, 0x98, 0x7e, 0xaf, 0xf4, 0x9d, 0xac, 0x1f, 0x7b, 0x75, 0xd9, + 0xb1, 0x77, 0x37, 0x9c, 0x2e, 0xfc, 0x3f, 0x52, 0xf7, 0xd1, 0x44, 0xcc, 0x2e, 0x94, 0xe8, 0xd9, + 0x05, 0x59, 0x91, 0xee, 0x86, 0x5b, 0x61, 0xdd, 0x11, 0x86, 0x6f, 0xed, 0x46, 0x30, 0x6f, 0x74, + 0x3a, 0xeb, 0xc6, 0x36, 0x2a, 0xe3, 0x69, 0xbb, 0xe5, 0xb1, 0xb8, 0x8c, 0x7d, 0xa9, 0xb1, 0x53, + 0x19, 0xb1, 0x8f, 0x9c, 0x3a, 0x60, 0x95, 0xca, 0x2f, 0xc3, 0x0a, 0x20, 0x32, 0xf9, 0x4d, 0x64, + 0xf8, 0xc3, 0x43, 0x46, 0x7b, 0xc7, 0x08, 0xa3, 0xc8, 0xb2, 0x27, 0x49, 0x5f, 0x2c, 0x09, 0xbe, + 0xd3, 0xd7, 0xbc, 0x5f, 0x53, 0xc0, 0x14, 0xc6, 0xa3, 0xd4, 0xe9, 0xc0, 0x87, 0x0b, 0xc1, 0x96, + 0x23, 0xbd, 0xe1, 0x9e, 0x2f, 0xed, 0x9a, 0xe8, 0xd7, 0x90, 0xd2, 0x8f, 0x3e, 0x35, 0xc0, 0x84, + 0xa8, 0x08, 0x42, 0x94, 0x0b, 0x9a, 0x1c, 0x5b, 0x44, 0xfa, 0xe2, 0xfb, 0xac, 0x02, 0xe6, 0xfc, + 0x79, 0xc6, 0x32, 0xf2, 0xda, 0x3b, 0xf0, 0x76, 0xd9, 0x75, 0x2e, 0xd6, 0x12, 0x83, 0x2d, 0xe1, + 0x2e, 0xfc, 0x5e, 0x26, 0xa1, 0xca, 0x0b, 0x25, 0x47, 0x2c, 0x12, 0x26, 0xd2, 0xc5, 0x38, 0x82, + 0xe9, 0x0b, 0xf3, 0xab, 0x0a, 0x00, 0x2d, 0x3b, 0x98, 0x2c, 0x1f, 0x42, 0x92, 0x3f, 0x23, 0xbd, + 0x5b, 0xcc, 0x2a, 0x1e, 0x16, 0x9b, 0xbc, 0xe7, 0x90, 0x74, 0xa6, 0x1a, 0x56, 0xd2, 0x44, 0xda, + 0xfa, 0xf4, 0xd2, 0x5e, 0xaf, 0x6b, 0xb6, 0x0d, 0xaf, 0xdf, 0x03, 0x30, 0x5a, 0xbc, 0xf0, 0x39, + 0x4a, 0x42, 0xa3, 0x31, 0x28, 0x23, 0x42, 0x96, 0x34, 0x38, 0x99, 0xe2, 0x07, 0x27, 0x93, 0xf4, + 0xea, 0x19, 0x42, 0x7c, 0x02, 0xea, 0xa9, 0x82, 0xe3, 0x8d, 0x1e, 0xb2, 0x16, 0x1d, 0x64, 0x74, + 0xda, 0xce, 0xde, 0xee, 0x45, 0x97, 0x77, 0x5f, 0x8d, 0xd7, 0x51, 0x6e, 0xe5, 0x5a, 0x11, 0x56, + 0xae, 0xe1, 0x73, 0x55, 0xd9, 0xf0, 0x91, 0xdc, 0xfe, 0x0a, 0xc7, 0xc3, 0x08, 0x43, 0x5d, 0x22, + 0xa7, 0xab, 0xbe, 0x45, 0xea, 0x6c, 0x92, 0x45, 0xea, 0x37, 0x4b, 0x05, 0xa3, 0x94, 0xaa, 0xd7, + 0x44, 0x7c, 0xe7, 0xe6, 0x9b, 0xc8, 0x8b, 0x80, 0xf7, 0x06, 0x30, 0x77, 0x31, 0x7c, 0x13, 0x40, + 0x2c, 0x26, 0x0e, 0xf0, 0x68, 0x7d, 0x6b, 0xd2, 0x15, 0x1a, 0x91, 0x85, 0x08, 0x74, 0x03, 0x04, + 0x15, 0x19, 0xb7, 0xb9, 0x44, 0xcb, 0x2d, 0xb1, 0xe5, 0xa7, 0x8f, 0xc2, 0x27, 0x15, 0x30, 0xd3, + 0xdc, 0x31, 0x1c, 0xb4, 0xb8, 0x4f, 0x4e, 0x9f, 0x4b, 0x1a, 0x25, 0x2f, 0xe4, 0xc5, 0xac, 0x81, + 0x6c, 0xd7, 0xb4, 0x2e, 0xf9, 0xfe, 0x8e, 0xf8, 0x7f, 0x78, 0xaf, 0xb2, 0x32, 0xe0, 0x5e, 0xe5, + 0x60, 0x9b, 0x24, 0x28, 0x37, 0x62, 0x34, 0x7d, 0x43, 0x46, 0xe6, 0x5e, 0xe5, 0xa1, 0xe4, 0xd2, + 0x17, 0xe3, 0x5f, 0x65, 0x41, 0xbe, 0x89, 0x0c, 0xa7, 0xbd, 0x03, 0xdf, 0xaf, 0x0c, 0x9c, 0x4a, + 0x14, 0xc4, 0xa9, 0xc4, 0x32, 0x98, 0xda, 0x32, 0xbb, 0x1e, 0x72, 0xa8, 0x0f, 0x38, 0xdf, 0xb5, + 0xd3, 0x26, 0xbe, 0xd8, 0xb5, 0xdb, 0x97, 0x16, 0x98, 0x69, 0xbf, 0xe0, 0x07, 0xb9, 0x5f, 0x58, + 0x26, 0x1f, 0xe9, 0xfe, 0xc7, 0xd8, 0x20, 0x74, 0x6d, 0xc7, 0x8b, 0xba, 0x34, 0x2d, 0x82, 0x4a, + 0xd3, 0x76, 0x3c, 0x9d, 0x7e, 0x88, 0x61, 0xde, 0xda, 0xeb, 0x76, 0x5b, 0xe8, 0x3e, 0xcf, 0x9f, + 0xd6, 0xf9, 0xcf, 0xd8, 0x58, 0xb4, 0xb7, 0xb6, 0x5c, 0x44, 0x17, 0x15, 0x72, 0x3a, 0x7b, 0xd2, + 0x4e, 0x82, 0x5c, 0xd7, 0xdc, 0x35, 0xe9, 0x44, 0x24, 0xa7, 0xd3, 0x07, 0xed, 0x66, 0x50, 0x0c, + 0xe7, 0x40, 0x94, 0xd1, 0xd3, 0x79, 0xd2, 0x34, 0x0f, 0xa4, 0x63, 0x9d, 0xb9, 0x84, 0xf6, 0xdd, + 0xd3, 0x53, 0xe4, 0x3d, 0xf9, 0x0f, 0x5f, 0x9b, 0x74, 0xc3, 0x84, 0x4a, 0x3c, 0x7a, 0x86, 0xeb, + 0xa0, 0xb6, 0xed, 0x74, 0x7c, 0xd9, 0x44, 0x4f, 0x30, 0x58, 0xbe, 0x64, 0xdb, 0x1c, 0x03, 0x0b, + 0x4f, 0x5f, 0xd3, 0xde, 0x93, 0xc7, 0xdd, 0x26, 0x2e, 0xfa, 0xbc, 0xe9, 0xed, 0xac, 0x21, 0xcf, + 0x80, 0x7f, 0xa5, 0x0e, 0xd4, 0xb8, 0x99, 0xff, 0x5f, 0xe3, 0x86, 0x68, 0x1c, 0x0d, 0x54, 0xe8, + 0xed, 0x39, 0x16, 0x96, 0x23, 0xf3, 0xa3, 0xe5, 0x52, 0xb4, 0x3b, 0xc1, 0x35, 0xe1, 0x93, 0xbf, + 0x94, 0xba, 0xc4, 0xb9, 0xd6, 0x16, 0xf4, 0xe8, 0x0c, 0xda, 0x3a, 0xb8, 0x9e, 0xbe, 0x5c, 0x6d, + 0xad, 0xd5, 0x56, 0xcd, 0xed, 0x9d, 0xae, 0xb9, 0xbd, 0xe3, 0xb9, 0x55, 0xcb, 0xf5, 0x90, 0xd1, + 0x69, 0x6c, 0xe9, 0xf4, 0xba, 0x43, 0x40, 0xe8, 0xc8, 0x64, 0x15, 0x7d, 0xc4, 0xe5, 0x46, 0x37, + 0x5e, 0x53, 0x22, 0x5a, 0xca, 0xe3, 0x71, 0x4b, 0x71, 0xf7, 0xba, 0x01, 0xa6, 0xd7, 0xf6, 0x61, + 0x1a, 0xaa, 0xfa, 0x5e, 0x97, 0x34, 0x17, 0x92, 0x39, 0xe9, 0x38, 0x17, 0xc3, 0x49, 0xfa, 0xcd, + 0xe6, 0xff, 0xe4, 0x41, 0x6e, 0xc5, 0x31, 0x7a, 0x3b, 0xf0, 0xd9, 0x5c, 0xff, 0x3c, 0xae, 0x36, + 0x11, 0x68, 0xa7, 0x32, 0x4c, 0x3b, 0xd5, 0x21, 0xda, 0x99, 0xe5, 0xb4, 0x33, 0x7a, 0xd1, 0xf9, + 0x2c, 0x98, 0x6d, 0xdb, 0xdd, 0x2e, 0x6a, 0x63, 0x79, 0x54, 0x3b, 0x64, 0xb5, 0x67, 0x5a, 0x17, + 0xd2, 0xc8, 0x45, 0x20, 0xc8, 0x6b, 0xd2, 0x35, 0x76, 0xaa, 0xf4, 0x61, 0x02, 0x7c, 0x99, 0x02, + 0xb2, 0x95, 0xce, 0x36, 0x12, 0xd6, 0xe1, 0x33, 0xdc, 0x3a, 0xfc, 0x29, 0x90, 0xf7, 0x0c, 0x67, + 0x1b, 0x79, 0xfe, 0x3a, 0x01, 0x7d, 0x0a, 0xee, 0x27, 0x51, 0xb9, 0xfb, 0x49, 0x7e, 0x08, 0x64, + 0xb1, 0xcc, 0x98, 0x5b, 0xfc, 0xf5, 0x83, 0xe0, 0x27, 0xb2, 0x5f, 0xc0, 0x25, 0x2e, 0xe0, 0x5a, + 0xeb, 0xe4, 0x83, 0x7e, 0xac, 0x73, 0x07, 0xe3, 0x67, 0x5f, 0x0b, 0xa6, 0xcd, 0xb6, 0x6d, 0x55, + 0x77, 0x8d, 0x6d, 0xc4, 0xaa, 0x19, 0x26, 0xf8, 0x6f, 0x2b, 0xbb, 0xf6, 0xbd, 0x26, 0x5b, 0xd4, + 0x0a, 0x13, 0x70, 0x15, 0x76, 0xcc, 0x4e, 0x07, 0x59, 0xac, 0x65, 0xb3, 0xa7, 0xb3, 0x67, 0x40, + 0x16, 0xf3, 0x80, 0xf5, 0x07, 0x1b, 0x0b, 0xc5, 0x63, 0xda, 0x2c, 0x6e, 0x56, 0xb4, 0xf1, 0x16, + 0x33, 0xe2, 0x9a, 0xab, 0x8c, 0xd7, 0x10, 0xad, 0xdc, 0xe0, 0xc6, 0xf5, 0x28, 0x90, 0xb3, 0xec, + 0x0e, 0x1a, 0x3a, 0x08, 0xd1, 0x5c, 0xda, 0xe3, 0x40, 0x0e, 0x75, 0x70, 0xaf, 0xa0, 0x92, 0xec, + 0x67, 0xe2, 0x65, 0xa9, 0xd3, 0xcc, 0xc9, 0x5c, 0x93, 0x06, 0x71, 0x9b, 0x7e, 0x03, 0xfc, 0x89, + 0x29, 0x70, 0x9c, 0xf6, 0x01, 0xcd, 0xbd, 0x8b, 0x98, 0xd4, 0x45, 0x04, 0x5f, 0x3f, 0x78, 0xe0, + 0x3a, 0x2e, 0x2a, 0xfb, 0x49, 0x90, 0x73, 0xf7, 0x2e, 0x06, 0x46, 0x28, 0x7d, 0xe0, 0x9b, 0xae, + 0x32, 0x96, 0xe1, 0x4c, 0x1d, 0x75, 0x38, 0x13, 0x86, 0x26, 0xd5, 0x6f, 0xfc, 0xe1, 0x40, 0x46, + 0x0f, 0x74, 0xf8, 0x03, 0xd9, 0xa0, 0x61, 0xe8, 0x34, 0x98, 0x32, 0xb6, 0x3c, 0xe4, 0x84, 0x66, + 0x22, 0x7b, 0xc4, 0x43, 0xe5, 0x45, 0xb4, 0x65, 0x3b, 0x58, 0x2c, 0x34, 0x96, 0x75, 0xf0, 0xcc, + 0xb5, 0x5c, 0x20, 0xec, 0xa0, 0xdd, 0x02, 0x4e, 0x58, 0xf6, 0x12, 0xea, 0x31, 0x39, 0x53, 0x14, + 0xe7, 0x48, 0x0b, 0x38, 0xf8, 0xe2, 0x40, 0x57, 0x32, 0x7f, 0xb0, 0x2b, 0x81, 0x9f, 0x4b, 0x3a, + 0x67, 0xee, 0x03, 0x7a, 0x6c, 0x16, 0x9a, 0xf6, 0x44, 0x30, 0xdb, 0x61, 0x1e, 0x62, 0x6d, 0x33, + 0x68, 0x25, 0x91, 0xdf, 0x09, 0x99, 0x43, 0x45, 0xca, 0xf2, 0x8a, 0xb4, 0x02, 0x0a, 0xe4, 0x38, + 0x36, 0xd6, 0xa4, 0x5c, 0x9f, 0x47, 0x3e, 0x99, 0xd6, 0x05, 0x95, 0xe2, 0xc4, 0xb6, 0x50, 0x66, + 0x9f, 0xe8, 0xc1, 0xc7, 0xc9, 0x66, 0xdf, 0xf1, 0x12, 0x4a, 0xbf, 0x39, 0xfe, 0x4a, 0x1e, 0x5c, + 0x53, 0x76, 0x6c, 0xd7, 0x25, 0x47, 0x70, 0xfa, 0x1b, 0xe6, 0x1b, 0x15, 0xe1, 0xa6, 0xb2, 0x07, + 0x74, 0xf3, 0x1b, 0xd4, 0xa0, 0x26, 0xd7, 0x34, 0xfe, 0x42, 0x3a, 0xd2, 0x56, 0xb0, 0xff, 0x10, + 0x21, 0xf4, 0xff, 0x1c, 0x8d, 0xe4, 0x3d, 0x19, 0x99, 0xe0, 0x5f, 0x09, 0x65, 0x95, 0x7e, 0x73, + 0xf9, 0xb2, 0x02, 0x1e, 0xdc, 0xcf, 0xcd, 0x86, 0xe5, 0x06, 0x0d, 0xe6, 0xa1, 0x43, 0xda, 0x8b, + 0x18, 0xb7, 0x25, 0xf6, 0x62, 0xf2, 0x88, 0xba, 0x73, 0xa5, 0x45, 0x2c, 0x96, 0x84, 0x07, 0x7a, + 0xe2, 0x2e, 0x26, 0x4f, 0x4c, 0x3e, 0x7d, 0xe1, 0xfe, 0x41, 0x16, 0x1c, 0x5f, 0x71, 0xec, 0xbd, + 0x9e, 0x1b, 0xf6, 0x40, 0x7f, 0x3a, 0x78, 0x43, 0x36, 0x2f, 0x63, 0x1a, 0x5c, 0x07, 0x66, 0x1c, + 0x66, 0xcd, 0x85, 0xdb, 0xb3, 0x7c, 0x12, 0xdf, 0x7b, 0xa9, 0x87, 0xe9, 0xbd, 0xc2, 0x7e, 0x26, + 0x2b, 0xf4, 0x33, 0xfd, 0x3d, 0x47, 0x6e, 0x40, 0xcf, 0xf1, 0x15, 0x25, 0xe1, 0xa0, 0xda, 0x27, + 0xa2, 0x88, 0xfe, 0xa2, 0x0c, 0xf2, 0xdb, 0x24, 0x23, 0xeb, 0x2e, 0x1e, 0x29, 0x57, 0x33, 0x42, + 0x5c, 0x67, 0x9f, 0x86, 0x72, 0x55, 0x79, 0x1d, 0x4e, 0x34, 0xc0, 0xc5, 0x73, 0x9b, 0xbe, 0x52, + 0xbd, 0x36, 0x0b, 0x66, 0x83, 0xd2, 0xab, 0x1d, 0x57, 0x08, 0x49, 0xcd, 0x69, 0xd4, 0x9c, 0x8c, + 0x46, 0x1d, 0x58, 0x67, 0x0e, 0x46, 0x1d, 0x95, 0x1b, 0x75, 0x06, 0x8e, 0x2e, 0xb3, 0x11, 0xa3, + 0x0b, 0x7c, 0x96, 0x2a, 0x7b, 0xd7, 0xa7, 0xd8, 0xb5, 0x92, 0xda, 0x3c, 0x90, 0x07, 0x0b, 0xc9, + 0x1b, 0x47, 0x87, 0xd7, 0x2a, 0x7d, 0x25, 0xf9, 0x88, 0x02, 0x4e, 0x1c, 0xec, 0xcc, 0x1f, 0x26, + 0x7a, 0xa9, 0xe1, 0x3a, 0xb9, 0x81, 0x97, 0x1a, 0x79, 0x12, 0x37, 0xe9, 0x62, 0x83, 0xa0, 0x08, + 0xf6, 0xde, 0xf0, 0x4e, 0x5c, 0x2e, 0xcc, 0x89, 0x24, 0xd1, 0xf4, 0x05, 0xf8, 0xb3, 0x2a, 0x98, + 0x6e, 0x22, 0xaf, 0x66, 0xec, 0xdb, 0x7b, 0x1e, 0x34, 0x64, 0xb7, 0xe7, 0x9e, 0x00, 0xf2, 0x5d, + 0xf2, 0x09, 0xe9, 0x60, 0xf8, 0x48, 0xc9, 0xfc, 0xfe, 0x16, 0xf1, 0x0d, 0xa2, 0xa4, 0x75, 0x96, + 0x5f, 0x8c, 0x3e, 0x23, 0xb3, 0x3b, 0x1a, 0x70, 0x37, 0x96, 0xad, 0x9d, 0x44, 0x7b, 0xa7, 0x51, + 0x45, 0xa7, 0x0f, 0xcb, 0x73, 0x55, 0x30, 0xd7, 0x44, 0x5e, 0xd5, 0x5d, 0x36, 0x2e, 0xdb, 0x8e, + 0xe9, 0x21, 0xb8, 0x22, 0x0b, 0xcd, 0x19, 0x00, 0xcc, 0xe0, 0x33, 0x16, 0x27, 0x8b, 0x4b, 0x81, + 0x6f, 0x49, 0xea, 0x28, 0x24, 0xf0, 0x31, 0x16, 0x10, 0x12, 0xf9, 0x58, 0xc4, 0x15, 0x9f, 0x3e, + 0x10, 0x5f, 0x54, 0x18, 0x10, 0x25, 0xa7, 0xbd, 0x63, 0x5e, 0x46, 0x9d, 0x84, 0x40, 0xf8, 0x9f, + 0x85, 0x40, 0x04, 0x84, 0x12, 0xbb, 0xaf, 0x08, 0x7c, 0x8c, 0xc3, 0x7d, 0x25, 0x8e, 0xe0, 0x44, + 0xc2, 0x5a, 0xe1, 0xae, 0x87, 0xad, 0x67, 0xde, 0x25, 0x2b, 0xd6, 0xd0, 0x64, 0x53, 0x78, 0x93, + 0x6d, 0xa4, 0x8e, 0x85, 0x96, 0x3d, 0x4c, 0xa7, 0xb3, 0x69, 0x74, 0x2c, 0x03, 0x8b, 0x4e, 0x5f, + 0xe8, 0xef, 0x53, 0xc1, 0xd5, 0x41, 0xbc, 0x97, 0x26, 0xf2, 0x96, 0x0c, 0x77, 0xe7, 0xa2, 0x6d, + 0x38, 0x1d, 0x58, 0x1e, 0xc3, 0x81, 0x43, 0xf8, 0x05, 0x1e, 0x84, 0xba, 0x08, 0xc2, 0x40, 0x57, + 0xd2, 0x81, 0xbc, 0x8c, 0xa3, 0x93, 0x89, 0xf5, 0x76, 0x7d, 0x47, 0x00, 0xd6, 0x53, 0x05, 0xb0, + 0x9e, 0x34, 0x2a, 0x8b, 0xe9, 0x03, 0xf7, 0xf3, 0x74, 0x44, 0xe0, 0xbc, 0x9e, 0x2f, 0xc8, 0x02, + 0x16, 0xe1, 0xf5, 0xaa, 0x46, 0x7a, 0xbd, 0x8e, 0x34, 0x46, 0x0c, 0xf5, 0x58, 0x4e, 0x77, 0x8c, + 0x38, 0x42, 0x6f, 0xe4, 0x77, 0xa9, 0xa0, 0x48, 0x02, 0x7e, 0x71, 0x1e, 0xe1, 0x7c, 0xd0, 0xff, + 0x78, 0x74, 0x0e, 0x78, 0x9f, 0x4f, 0x25, 0xf5, 0x3e, 0x87, 0xef, 0x4c, 0xea, 0x63, 0xde, 0xcf, + 0xed, 0x58, 0x10, 0x4b, 0xe4, 0x42, 0x3e, 0x84, 0x83, 0xf4, 0x41, 0xfb, 0x49, 0x15, 0x00, 0xdc, + 0xa0, 0xd9, 0xd9, 0x88, 0xa7, 0xc9, 0xc2, 0x75, 0x2b, 0xef, 0x77, 0x8f, 0x81, 0xba, 0xba, 0x0f, + 0x28, 0x4a, 0x31, 0x3c, 0x75, 0xf1, 0xfa, 0xa4, 0xbe, 0x95, 0x21, 0x57, 0x63, 0x81, 0x25, 0x91, + 0xb7, 0x65, 0x64, 0xd9, 0xe9, 0x03, 0xf2, 0xab, 0x0a, 0xc8, 0xb5, 0xec, 0x26, 0xf2, 0x0e, 0x6f, + 0x0a, 0x24, 0x8e, 0x1a, 0x40, 0xca, 0x1d, 0x47, 0xd4, 0x80, 0x41, 0x84, 0xd2, 0x17, 0xdd, 0x7b, + 0x15, 0x30, 0xdb, 0xb2, 0xcb, 0xc1, 0xe2, 0x94, 0xbc, 0xaf, 0xea, 0xbf, 0x66, 0x12, 0xae, 0x61, + 0xf0, 0xc5, 0x44, 0x08, 0x2c, 0xd1, 0xea, 0x41, 0x0c, 0xbd, 0xf4, 0xe5, 0x76, 0x3b, 0x38, 0xbe, + 0x61, 0x75, 0x6c, 0x1d, 0x75, 0x6c, 0xb6, 0xd2, 0xad, 0x69, 0x20, 0xbb, 0x67, 0x75, 0x6c, 0xc2, + 0x72, 0x4e, 0x27, 0xff, 0x71, 0x9a, 0x83, 0x3a, 0x36, 0xf3, 0x0d, 0x20, 0xff, 0xe1, 0x5f, 0xa8, + 0x20, 0x8b, 0xbf, 0x95, 0x17, 0xf5, 0xbb, 0xd4, 0x84, 0x71, 0x10, 0x30, 0xf9, 0xb1, 0x58, 0x42, + 0x77, 0x71, 0x6b, 0xff, 0x6a, 0xdf, 0xfd, 0x07, 0x7d, 0xe5, 0x71, 0xa2, 0x08, 0xd7, 0xfc, 0xb5, + 0xd3, 0x60, 0xea, 0x62, 0xd7, 0x6e, 0x5f, 0x0a, 0x8f, 0xeb, 0xb3, 0x47, 0xed, 0x66, 0x90, 0x73, + 0x0c, 0x6b, 0x1b, 0xb1, 0x3d, 0x85, 0x93, 0x7d, 0x7d, 0x21, 0xf1, 0x7a, 0xd1, 0x69, 0x16, 0xf8, + 0xce, 0x24, 0x11, 0x18, 0x06, 0x54, 0x3e, 0x99, 0x3e, 0x2c, 0x8d, 0x70, 0xf2, 0xac, 0x08, 0x66, + 0xcb, 0xa5, 0x3a, 0xbd, 0x7c, 0xb5, 0x71, 0xae, 0x52, 0x54, 0x09, 0xcc, 0x58, 0x26, 0x29, 0xc2, + 0x8c, 0xc9, 0xff, 0xa7, 0x85, 0x79, 0x40, 0xe5, 0x8f, 0x02, 0xe6, 0xcf, 0x2a, 0x60, 0xae, 0x66, + 0xba, 0x5e, 0x94, 0xb7, 0x7f, 0x4c, 0xbc, 0xdf, 0x17, 0x25, 0x35, 0x95, 0x85, 0x72, 0xa4, 0x03, + 0xfd, 0x26, 0x32, 0x87, 0xe3, 0x8a, 0x98, 0xcc, 0xb1, 0x14, 0xc2, 0x01, 0xea, 0xa2, 0x24, 0x92, + 0x4c, 0x6c, 0x28, 0x85, 0x85, 0x4c, 0xde, 0x50, 0x8a, 0x2c, 0x3b, 0x7d, 0xf9, 0xfe, 0x85, 0x02, + 0x4e, 0xe0, 0xe2, 0xe3, 0x96, 0xa5, 0xa2, 0xc5, 0x3c, 0x74, 0x59, 0x2a, 0xf1, 0xca, 0xf8, 0x01, + 0x5e, 0xc6, 0xb1, 0x32, 0x3e, 0x8c, 0xe8, 0x84, 0xc5, 0x1c, 0xb1, 0x0c, 0x3b, 0x4c, 0xcc, 0x31, + 0xcb, 0xb0, 0xa3, 0x8b, 0x39, 0x7e, 0x29, 0x76, 0x44, 0x31, 0x1f, 0xd9, 0x02, 0xeb, 0x2f, 0xa9, + 0x81, 0x98, 0x23, 0xd7, 0x36, 0x62, 0xc4, 0x9c, 0xf8, 0x44, 0x2f, 0x7c, 0xf7, 0x88, 0x82, 0x1f, + 0xf3, 0xfa, 0xc6, 0x28, 0x30, 0x1d, 0xe1, 0x1a, 0xc7, 0x2f, 0xa8, 0x60, 0x9e, 0x71, 0x31, 0x78, + 0xca, 0x1c, 0x83, 0x51, 0xe2, 0x29, 0x73, 0xe2, 0x33, 0x40, 0x22, 0x67, 0x93, 0x3f, 0x03, 0x14, + 0x5b, 0x7e, 0xfa, 0xe0, 0x7c, 0x23, 0x0b, 0x4e, 0x61, 0x16, 0xd6, 0xec, 0x8e, 0xb9, 0xb5, 0x4f, + 0xb9, 0x38, 0x67, 0x74, 0xf7, 0x90, 0x0b, 0x3f, 0xa0, 0xc8, 0xa2, 0xf4, 0x5f, 0x01, 0xb0, 0x7b, + 0xc8, 0xa1, 0x71, 0xdc, 0x18, 0x50, 0x77, 0x46, 0x55, 0xf6, 0x60, 0x49, 0xc1, 0xf5, 0x39, 0x0d, + 0x9f, 0x88, 0xce, 0xd1, 0xc3, 0x56, 0xe1, 0x74, 0xf0, 0xa6, 0xdf, 0xc1, 0x23, 0x73, 0xd0, 0xc1, + 0xe3, 0x26, 0xa0, 0x1a, 0x9d, 0x4e, 0x00, 0x55, 0xff, 0x66, 0x36, 0x29, 0x53, 0xc7, 0x59, 0x70, + 0x4e, 0x17, 0x85, 0x47, 0xf3, 0x22, 0x72, 0xba, 0xc8, 0xd3, 0x16, 0x40, 0xde, 0x21, 0x31, 0x89, + 0x83, 0x15, 0xfd, 0xc1, 0x99, 0x59, 0x2e, 0xd1, 0xb4, 0x6b, 0x88, 0x6a, 0x78, 0x7b, 0x22, 0xc9, + 0x0c, 0xea, 0xa7, 0x43, 0x3b, 0x59, 0x17, 0x14, 0xec, 0xc9, 0x23, 0x53, 0x9e, 0xcc, 0x6e, 0x58, + 0xa9, 0xd7, 0xeb, 0xee, 0xb7, 0x58, 0xe0, 0x81, 0x44, 0xbb, 0x61, 0x5c, 0xfc, 0x02, 0xe5, 0x40, + 0xfc, 0x82, 0xc4, 0xbb, 0x61, 0x02, 0x1f, 0xe3, 0xd8, 0x0d, 0x8b, 0x23, 0x98, 0xbe, 0x68, 0xff, + 0xb6, 0x40, 0xad, 0x66, 0x76, 0x1b, 0xc1, 0x3f, 0x0e, 0xf6, 0xac, 0x06, 0xa2, 0xb3, 0xcb, 0xa0, + 0x8b, 0x0a, 0x62, 0x6f, 0x61, 0xd1, 0x1e, 0x07, 0xf2, 0x5b, 0xb6, 0xb3, 0x6b, 0xf8, 0x1b, 0xf7, + 0xfd, 0x27, 0x45, 0xd8, 0x0d, 0x00, 0xcb, 0x24, 0x8f, 0xce, 0xf2, 0xe2, 0xf9, 0xc8, 0x33, 0xcd, + 0x1e, 0x0b, 0xfa, 0x88, 0xff, 0x6a, 0x37, 0x80, 0x39, 0x16, 0xfb, 0xb1, 0x8e, 0x5c, 0x0f, 0x75, + 0x58, 0x44, 0x0b, 0x31, 0x51, 0x3b, 0x0b, 0x66, 0x59, 0xc2, 0xb2, 0xd9, 0x45, 0x2e, 0x0b, 0x6a, + 0x21, 0xa4, 0x69, 0xa7, 0x40, 0xde, 0x74, 0xef, 0x76, 0x6d, 0x8b, 0x05, 0xe4, 0x63, 0x4f, 0xda, + 0x4d, 0xe0, 0x38, 0xcb, 0x17, 0x18, 0xab, 0xf4, 0xc0, 0x4e, 0x7f, 0x32, 0x56, 0x2d, 0xcb, 0x5e, + 0x77, 0xec, 0x6d, 0x07, 0xb9, 0x2e, 0x39, 0x35, 0x55, 0xd0, 0xb9, 0x14, 0xed, 0x02, 0x38, 0xd1, + 0x35, 0xad, 0x4b, 0x2e, 0x89, 0x11, 0xbc, 0xcc, 0xdc, 0xc6, 0x66, 0x07, 0xc4, 0xee, 0xe6, 0x1a, + 0x1b, 0x93, 0x03, 0xff, 0x89, 0x7e, 0x90, 0x8a, 0x76, 0x33, 0x28, 0x32, 0x6e, 0x16, 0x8d, 0xf6, + 0x25, 0xf2, 0x9e, 0xb9, 0xa3, 0x1e, 0x48, 0xe7, 0x84, 0x41, 0xc3, 0xe8, 0xcf, 0x0b, 0xc2, 0xa0, + 0x91, 0xf4, 0x5f, 0x92, 0x01, 0xb3, 0x42, 0x01, 0x06, 0xd0, 0xfc, 0x6e, 0xd1, 0x3d, 0xbf, 0x63, + 0x7a, 0x08, 0x33, 0xc7, 0xce, 0xba, 0x3c, 0x66, 0x08, 0xf3, 0xfa, 0x81, 0x0f, 0xf5, 0x01, 0xc4, + 0x30, 0x5f, 0xb4, 0xc3, 0x23, 0x9e, 0x65, 0x2e, 0xb3, 0x55, 0x85, 0x34, 0xf8, 0x4c, 0xa0, 0x1d, + 0xa4, 0xc6, 0x79, 0x81, 0x64, 0x92, 0x79, 0x81, 0x60, 0xb9, 0x19, 0xdd, 0xae, 0x7d, 0x05, 0x75, + 0x02, 0xb2, 0x4c, 0x57, 0x0f, 0xa4, 0xc3, 0xcf, 0x8f, 0x32, 0x2f, 0x4c, 0x7c, 0xb1, 0x06, 0x6e, + 0x64, 0x7b, 0xed, 0x36, 0x42, 0x1d, 0x76, 0x70, 0xcd, 0x7f, 0x4c, 0x78, 0xe5, 0x46, 0xe2, 0x59, + 0xe4, 0x11, 0xdd, 0xb9, 0xf1, 0xfe, 0xf0, 0xe6, 0x93, 0x3d, 0x99, 0xae, 0x26, 0xee, 0x7c, 0xfc, + 0x48, 0x9d, 0x0a, 0x7c, 0x6f, 0xd2, 0xd3, 0xa2, 0xb1, 0x98, 0x9e, 0xc2, 0x83, 0xbb, 0xbb, 0xd7, + 0x0d, 0x8e, 0x3b, 0xd1, 0xa7, 0x84, 0xe8, 0x25, 0x3a, 0x40, 0x7a, 0x44, 0xc8, 0x7d, 0xfc, 0x6a, + 0x90, 0xa7, 0x37, 0x17, 0xc2, 0x97, 0xcc, 0x0f, 0x84, 0x6e, 0x5e, 0x84, 0x6e, 0x03, 0xcc, 0x5a, + 0x36, 0x2e, 0x6e, 0xdd, 0x70, 0x8c, 0x5d, 0x37, 0x6e, 0x79, 0x9f, 0xd2, 0x0d, 0x6c, 0xb9, 0x3a, + 0xf7, 0xd9, 0xea, 0x31, 0x5d, 0x20, 0xa3, 0xfd, 0x5f, 0xe0, 0xf8, 0x45, 0x16, 0x9a, 0xc3, 0x65, + 0x94, 0x95, 0x68, 0xe7, 0xd7, 0x3e, 0xca, 0x8b, 0xe2, 0x97, 0xab, 0xc7, 0xf4, 0x7e, 0x62, 0xda, + 0x7f, 0x01, 0xf3, 0xf8, 0xb1, 0x63, 0x5f, 0xf1, 0x19, 0x57, 0xa3, 0x67, 0x00, 0x7d, 0xe4, 0xd7, + 0x84, 0x0f, 0x57, 0x8f, 0xe9, 0x7d, 0xa4, 0xb4, 0x06, 0x00, 0x3b, 0xde, 0x6e, 0x97, 0x11, 0xce, + 0x46, 0x77, 0x26, 0x7d, 0x84, 0x57, 0x83, 0x8f, 0x56, 0x8f, 0xe9, 0x1c, 0x09, 0xad, 0x06, 0xa6, + 0xbd, 0xfb, 0x3c, 0x46, 0x2f, 0x17, 0xed, 0x75, 0xd2, 0x47, 0xaf, 0xe5, 0x7f, 0xb3, 0x7a, 0x4c, + 0x0f, 0x09, 0x68, 0x55, 0x50, 0xe8, 0x5d, 0x64, 0xc4, 0xf2, 0xd1, 0x23, 0x55, 0x1f, 0xb1, 0xf5, + 0x8b, 0x01, 0xad, 0xe0, 0x73, 0xcc, 0x58, 0xdb, 0xbd, 0xcc, 0x68, 0x4d, 0x49, 0x33, 0x56, 0xf6, + 0xbf, 0xc1, 0x8c, 0x05, 0x04, 0xb4, 0x2a, 0x98, 0x76, 0x2d, 0xa3, 0xe7, 0xee, 0xd8, 0x9e, 0x7b, + 0xba, 0xd0, 0xe7, 0xa0, 0x1c, 0x4d, 0xad, 0xc9, 0xbe, 0xd1, 0xc3, 0xaf, 0xb5, 0xc7, 0x81, 0xab, + 0xf7, 0x7a, 0x1d, 0xc3, 0x43, 0x95, 0xfb, 0x4c, 0x37, 0xbc, 0xbd, 0xd2, 0x3f, 0x97, 0x3b, 0xf8, + 0xa5, 0xb6, 0xc0, 0x8e, 0x2a, 0x02, 0xd2, 0x2e, 0x61, 0xff, 0x2e, 0x39, 0x2d, 0x96, 0x3b, 0xa1, + 0xf8, 0x44, 0x90, 0xc5, 0xaf, 0x88, 0x59, 0x30, 0x3f, 0x78, 0x05, 0xbe, 0x5f, 0x77, 0x48, 0x03, + 0xc6, 0x1f, 0xf5, 0x59, 0x16, 0xb3, 0x07, 0x2c, 0x8b, 0xeb, 0xc0, 0x8c, 0xe9, 0xae, 0x99, 0xdb, + 0x74, 0x5a, 0xc3, 0x46, 0x7e, 0x3e, 0x89, 0x2e, 0x03, 0xd5, 0xd1, 0x15, 0x3a, 0xe4, 0x1f, 0xf7, + 0x97, 0x81, 0xfc, 0x14, 0x78, 0x23, 0x98, 0xe5, 0x1b, 0x19, 0xbd, 0x13, 0xda, 0x0c, 0x27, 0x45, + 0xec, 0x09, 0xde, 0x00, 0xe6, 0x45, 0x9d, 0xe6, 0x6c, 0x3f, 0xd5, 0x1f, 0xc4, 0xe0, 0xf5, 0xe0, + 0x78, 0x5f, 0xc3, 0xf2, 0x83, 0xfd, 0x64, 0xc2, 0x60, 0x3f, 0xd7, 0x01, 0x10, 0x6a, 0xf1, 0x40, + 0x32, 0x0f, 0x05, 0xd3, 0x81, 0x5e, 0x0e, 0xcc, 0xf0, 0xf5, 0x0c, 0x28, 0xf8, 0xca, 0x36, 0x28, + 0x03, 0xb6, 0x29, 0x2c, 0x6e, 0x67, 0xcf, 0xb7, 0x29, 0xf8, 0x34, 0x6c, 0xe0, 0x85, 0xfe, 0xf4, + 0x2d, 0xd3, 0xeb, 0xfa, 0x67, 0x52, 0xfb, 0x93, 0xb5, 0x75, 0x00, 0x4c, 0x82, 0x51, 0x2b, 0x3c, + 0xa4, 0xfa, 0xe8, 0x04, 0xed, 0x81, 0xea, 0x03, 0x47, 0xe3, 0xec, 0xc3, 0xd8, 0x09, 0xd2, 0x69, + 0x90, 0xa3, 0x17, 0x2c, 0x1c, 0xd3, 0xe6, 0x01, 0xa8, 0x3c, 0x6d, 0xbd, 0xa2, 0x57, 0x2b, 0xf5, + 0x72, 0xa5, 0x98, 0x81, 0x2f, 0x57, 0xc0, 0x74, 0xd0, 0x08, 0x06, 0x56, 0xb2, 0xc2, 0x54, 0x6b, + 0xe8, 0x0d, 0xb3, 0x07, 0x1b, 0x15, 0xaf, 0x64, 0x4f, 0x00, 0x0f, 0xda, 0x73, 0xd1, 0xb2, 0xe9, + 0xb8, 0x9e, 0x6e, 0x5f, 0x59, 0xb6, 0x9d, 0xd0, 0x24, 0xa2, 0xa1, 0x89, 0xa3, 0x5e, 0x63, 0x53, + 0xbf, 0x83, 0xc8, 0x69, 0x45, 0xe4, 0xb0, 0x2d, 0x9b, 0x30, 0x01, 0xd3, 0xf5, 0x1c, 0xc3, 0x72, + 0x7b, 0xb6, 0x8b, 0x74, 0xfb, 0x8a, 0x5b, 0xb2, 0x3a, 0x65, 0xbb, 0xbb, 0xb7, 0x6b, 0xb9, 0xcc, + 0x58, 0x8f, 0x7a, 0x8d, 0xa5, 0x43, 0xee, 0x8f, 0x9e, 0x07, 0xa0, 0xdc, 0xa8, 0xd5, 0x2a, 0xe5, + 0x56, 0xb5, 0x51, 0x2f, 0x1e, 0xc3, 0xd2, 0x6a, 0x95, 0x16, 0x6b, 0x58, 0x3a, 0x4f, 0x07, 0x05, + 0xbf, 0x4d, 0xb3, 0xf8, 0x44, 0x19, 0x3f, 0x3e, 0x91, 0x56, 0x02, 0x05, 0xbf, 0x95, 0xb3, 0x11, + 0xe1, 0xe1, 0xfd, 0xe7, 0xd1, 0x77, 0x0d, 0xc7, 0x23, 0xa6, 0xa5, 0x4f, 0x64, 0xd1, 0x70, 0x91, + 0x1e, 0x7c, 0x76, 0xf6, 0x51, 0x8c, 0x03, 0x0d, 0xcc, 0x97, 0x6a, 0xb5, 0xcd, 0x86, 0xbe, 0x59, + 0x6f, 0xb4, 0x56, 0xab, 0xf5, 0x15, 0x3a, 0x42, 0x56, 0x57, 0xea, 0x0d, 0xbd, 0x42, 0x07, 0xc8, + 0x66, 0x31, 0x73, 0x47, 0xf6, 0xfe, 0x6f, 0xa8, 0x99, 0xc5, 0x02, 0xc8, 0xf7, 0x88, 0x74, 0xe1, + 0x97, 0xd5, 0x84, 0xa6, 0x45, 0x80, 0x53, 0xc4, 0x0d, 0xcb, 0xc2, 0x61, 0x10, 0x65, 0xc0, 0x61, + 0xed, 0xb3, 0x60, 0x96, 0x9a, 0x43, 0x2e, 0xd9, 0x57, 0x23, 0xc8, 0xa9, 0xba, 0x90, 0x06, 0x3f, + 0xa9, 0x24, 0x30, 0x2e, 0x06, 0x72, 0x94, 0xcc, 0xb8, 0xf8, 0xc3, 0xcc, 0x68, 0xd7, 0x91, 0x54, + 0xeb, 0xad, 0x8a, 0x5e, 0x2f, 0xd5, 0x58, 0x16, 0x55, 0x3b, 0x0d, 0x4e, 0xd6, 0x1b, 0x2c, 0x18, + 0x67, 0x73, 0xb3, 0xd5, 0xd8, 0xac, 0xae, 0xad, 0x37, 0xf4, 0x56, 0x31, 0xa7, 0x9d, 0x02, 0x1a, + 0xfd, 0xbf, 0x59, 0x6d, 0x6e, 0x96, 0x4b, 0xf5, 0x72, 0xa5, 0x56, 0x59, 0x2a, 0xe6, 0xb5, 0x47, + 0x80, 0xeb, 0xe9, 0xf5, 0x56, 0x8d, 0xe5, 0x4d, 0xbd, 0x71, 0xbe, 0x89, 0x11, 0xd4, 0x2b, 0xb5, + 0x12, 0x56, 0xa4, 0x66, 0x78, 0xe7, 0xd5, 0x94, 0x76, 0x15, 0x38, 0xbe, 0x5c, 0xad, 0x55, 0xc8, + 0x6d, 0xb4, 0xac, 0xbc, 0x82, 0x76, 0x2d, 0x38, 0x5d, 0xad, 0x37, 0x37, 0x96, 0x97, 0xab, 0xe5, + 0x6a, 0xa5, 0xde, 0xda, 0x5c, 0xaf, 0xe8, 0x6b, 0xd5, 0x66, 0x13, 0x7f, 0x5b, 0x9c, 0x86, 0x1f, + 0x57, 0x41, 0x9e, 0xf6, 0x99, 0xd8, 0x88, 0x9d, 0x3b, 0x67, 0x74, 0x4d, 0x3c, 0x50, 0xb4, 0xec, + 0x4b, 0xc8, 0xea, 0x3b, 0xc7, 0xe5, 0xe1, 0x34, 0xff, 0x24, 0x08, 0x79, 0x80, 0x3f, 0xa6, 0x26, + 0x3c, 0xc7, 0xc5, 0x80, 0xa0, 0x25, 0x2e, 0x08, 0xa5, 0x45, 0xac, 0x3a, 0xbc, 0x46, 0x49, 0x70, + 0x8e, 0x4b, 0x9e, 0x7c, 0x32, 0xf0, 0x7f, 0x71, 0x5c, 0xe0, 0x17, 0xc1, 0xec, 0x46, 0xbd, 0xb4, + 0xd1, 0x5a, 0x6d, 0xe8, 0xd5, 0x1f, 0x26, 0xb7, 0x10, 0xcc, 0x81, 0xe9, 0xe5, 0x86, 0xbe, 0x58, + 0x5d, 0x5a, 0xaa, 0xd4, 0x8b, 0x39, 0xed, 0x41, 0xe0, 0xaa, 0x66, 0x45, 0x3f, 0x57, 0x2d, 0x57, + 0x36, 0x37, 0xea, 0xa5, 0x73, 0xa5, 0x6a, 0x8d, 0xf4, 0x11, 0xf9, 0x98, 0x9b, 0xea, 0xa7, 0xe0, + 0x8f, 0x64, 0x01, 0xa0, 0x55, 0x27, 0x97, 0x70, 0x71, 0x17, 0xa4, 0xff, 0x71, 0xd2, 0xe9, 0x5e, + 0x48, 0x26, 0xa2, 0xfd, 0x56, 0x41, 0xc1, 0x61, 0x2f, 0xd8, 0xba, 0xe6, 0x30, 0x3a, 0xf4, 0xaf, + 0x4f, 0x4d, 0x0f, 0x3e, 0x87, 0x1f, 0x48, 0x32, 0xbb, 0x8b, 0x64, 0x6c, 0x22, 0x37, 0x3d, 0xf7, + 0x03, 0x09, 0x5f, 0x98, 0x01, 0xf3, 0x62, 0xc5, 0x70, 0x25, 0x88, 0x31, 0x25, 0x57, 0x09, 0xf1, + 0x63, 0xce, 0xc8, 0x3a, 0xfb, 0x58, 0x36, 0x9c, 0x02, 0xbf, 0x65, 0xd2, 0x90, 0x0c, 0xbe, 0xc5, + 0x52, 0xcc, 0x60, 0xe6, 0xb1, 0xd1, 0x51, 0x54, 0xb4, 0x29, 0xa0, 0xb6, 0xee, 0xf3, 0x8a, 0x2a, + 0xfc, 0x74, 0x16, 0xcc, 0x09, 0x37, 0xb0, 0xc3, 0x3f, 0xc9, 0xc8, 0xdc, 0x6e, 0xcc, 0xdd, 0xed, + 0x9e, 0x39, 0xec, 0xdd, 0xee, 0x67, 0x4d, 0x30, 0xc5, 0xd2, 0x88, 0x7c, 0x1b, 0x75, 0x6c, 0x0a, + 0x1c, 0x07, 0x33, 0x2b, 0x95, 0xd6, 0x66, 0xb3, 0x55, 0xd2, 0x5b, 0x95, 0xa5, 0x62, 0x06, 0x0f, + 0x7c, 0x95, 0xb5, 0xf5, 0xd6, 0x85, 0xa2, 0x82, 0xc7, 0xc4, 0x95, 0x8d, 0xea, 0x52, 0x65, 0xb3, + 0x51, 0xaf, 0x5d, 0x28, 0xaa, 0xb8, 0x07, 0xe4, 0xf2, 0x6e, 0xae, 0x35, 0x16, 0xab, 0xb5, 0x4a, + 0x31, 0x8b, 0x9b, 0x0d, 0xf9, 0xc4, 0x4f, 0xc9, 0x89, 0xbe, 0xd1, 0x32, 0x2b, 0x9c, 0xfd, 0x55, + 0x38, 0xbc, 0x8b, 0x48, 0x92, 0x2b, 0xe4, 0x13, 0xad, 0x9d, 0xc6, 0xb1, 0x9a, 0xfe, 0x8c, 0xf8, + 0x73, 0x2a, 0x28, 0x52, 0x0e, 0x2a, 0xf7, 0xf5, 0x90, 0x63, 0x22, 0xab, 0x8d, 0xe0, 0x25, 0x99, + 0x80, 0xc0, 0x07, 0x42, 0x61, 0x92, 0x51, 0x83, 0xb3, 0x45, 0xe9, 0x43, 0x9f, 0x19, 0x9f, 0x3d, + 0x60, 0xc6, 0xff, 0x6e, 0x52, 0x0f, 0xdc, 0x7e, 0x76, 0xc7, 0xb2, 0x67, 0xf5, 0x99, 0x24, 0x1e, + 0xb8, 0x43, 0x38, 0x98, 0x48, 0x9c, 0xef, 0x88, 0x51, 0xbe, 0xa8, 0xc2, 0x17, 0xa8, 0xe0, 0xf8, + 0x92, 0xe1, 0xa1, 0xc5, 0xfd, 0x96, 0x7f, 0x8f, 0x6a, 0xc4, 0xdd, 0xe7, 0x99, 0x03, 0x77, 0x9f, + 0x87, 0x57, 0xb1, 0x2a, 0x7d, 0x57, 0xb1, 0xc2, 0xf7, 0x24, 0x3d, 0xb3, 0xdb, 0xc7, 0xc3, 0xd8, + 0x82, 0x71, 0x27, 0x3b, 0x8b, 0x1b, 0xcf, 0x45, 0xfa, 0x0d, 0xec, 0xed, 0xd3, 0xa0, 0x48, 0x59, + 0xe1, 0x9c, 0x4c, 0x7f, 0x56, 0x05, 0x6a, 0xa9, 0xd3, 0x81, 0x9b, 0x09, 0x62, 0x7a, 0xfa, 0x51, + 0x52, 0x14, 0x31, 0x4a, 0x8a, 0xb0, 0x67, 0xa1, 0xf6, 0x3b, 0x06, 0x25, 0x3d, 0x8d, 0xc0, 0x79, + 0x94, 0x46, 0x87, 0x51, 0x4e, 0xef, 0x34, 0x42, 0x6c, 0xf1, 0x93, 0xb9, 0xd2, 0x9a, 0xdd, 0x22, + 0x5b, 0x91, 0x45, 0x26, 0xfe, 0xe6, 0xfe, 0xa4, 0xc7, 0x0b, 0x04, 0x8f, 0xde, 0x98, 0xeb, 0xec, + 0xd3, 0x3b, 0x5e, 0x30, 0x8c, 0x83, 0xf4, 0x51, 0xf8, 0x9e, 0x02, 0xb2, 0x4d, 0xdb, 0xf1, 0xc6, + 0x85, 0x41, 0x52, 0x97, 0x08, 0x4e, 0x02, 0xcd, 0xe8, 0x99, 0x6d, 0x7a, 0x2e, 0x11, 0xf1, 0xe5, + 0x4f, 0x20, 0x2c, 0xea, 0x71, 0x30, 0x4f, 0x39, 0x09, 0xee, 0x14, 0xfa, 0x37, 0x85, 0xf6, 0x57, + 0xf7, 0xc8, 0x22, 0x42, 0x36, 0xc6, 0x02, 0x97, 0x04, 0x1f, 0x14, 0x21, 0x0d, 0xbe, 0x91, 0xc7, + 0x65, 0x49, 0xc4, 0x65, 0xd0, 0xbc, 0x3e, 0xb8, 0x96, 0x67, 0x5c, 0x3d, 0x53, 0x92, 0x08, 0xab, + 0x31, 0x85, 0xa7, 0x8f, 0xc8, 0x73, 0x54, 0x90, 0x67, 0x2e, 0xa1, 0x63, 0x45, 0x20, 0x69, 0xcb, + 0x08, 0x84, 0x20, 0xe7, 0x3a, 0xaa, 0x8e, 0xbb, 0x65, 0xc4, 0x97, 0x9f, 0x3e, 0x0e, 0xff, 0xce, + 0x7c, 0x9d, 0x4b, 0x97, 0x0d, 0xb3, 0x6b, 0x5c, 0xec, 0x26, 0x88, 0x6c, 0xfe, 0xc9, 0x84, 0xa7, + 0x3b, 0x83, 0xaa, 0x0a, 0xe5, 0x45, 0x48, 0xfc, 0x07, 0xc1, 0xb4, 0x23, 0xec, 0x05, 0x63, 0x2b, + 0xaa, 0xcf, 0xcf, 0x9c, 0xbd, 0xd7, 0xc3, 0x9c, 0x89, 0x8e, 0x72, 0x4a, 0xf1, 0x33, 0x91, 0xa3, + 0x67, 0x33, 0xa5, 0x4e, 0x67, 0x19, 0x19, 0xde, 0x9e, 0x83, 0x3a, 0x89, 0x86, 0x08, 0xa7, 0x6f, + 0xbb, 0x9c, 0x93, 0x84, 0x10, 0x5b, 0xb4, 0x26, 0xa2, 0xf3, 0xf8, 0x21, 0xbd, 0x81, 0xcf, 0xcb, + 0x58, 0xba, 0xa4, 0xb7, 0x05, 0x90, 0x34, 0x04, 0x48, 0x9e, 0x38, 0x1a, 0x13, 0xe9, 0x03, 0xf2, + 0x52, 0x15, 0xcc, 0x53, 0x3b, 0x61, 0xdc, 0x98, 0x7c, 0x38, 0xa1, 0x0b, 0x19, 0x77, 0x6b, 0x1b, + 0xcf, 0xce, 0x58, 0x60, 0x49, 0xe2, 0x70, 0x26, 0xc7, 0x47, 0xfa, 0xc8, 0xfc, 0xaf, 0xab, 0x00, + 0xe0, 0xdc, 0x82, 0x3f, 0x99, 0x0f, 0xe3, 0x7c, 0xc2, 0x77, 0xb2, 0xf9, 0x47, 0x53, 0x08, 0x3a, + 0xcf, 0xb9, 0xfc, 0x06, 0xdb, 0x5e, 0x62, 0xa2, 0xd4, 0xa8, 0xf2, 0x87, 0x09, 0x6d, 0x5e, 0xe6, + 0x94, 0x3b, 0x74, 0x70, 0x1f, 0xb1, 0x97, 0xfb, 0x54, 0x02, 0xe3, 0x77, 0x18, 0x2b, 0xc9, 0x50, + 0xab, 0x8d, 0x30, 0xb3, 0x3f, 0x0d, 0x4e, 0xea, 0x95, 0xd2, 0x52, 0xa3, 0x5e, 0xbb, 0xc0, 0x5f, + 0xe1, 0x55, 0x54, 0xf9, 0xc9, 0x49, 0x2a, 0xb0, 0xbd, 0x2e, 0x61, 0x1f, 0x28, 0xca, 0x2a, 0x6e, + 0xb6, 0xc2, 0x2d, 0xae, 0x0c, 0xef, 0xd5, 0x24, 0xc8, 0x1e, 0x25, 0x0a, 0xdf, 0xca, 0x83, 0x19, + 0x1d, 0xb5, 0xed, 0xdd, 0x5d, 0x64, 0x75, 0x50, 0x07, 0xbe, 0x4e, 0x05, 0xb3, 0xc1, 0xae, 0x62, + 0x13, 0x79, 0xf0, 0xbf, 0x84, 0xd8, 0x9c, 0x05, 0xb3, 0xb8, 0x72, 0x0d, 0xf1, 0x22, 0x01, 0x21, + 0x4d, 0xbb, 0x05, 0x9c, 0xf0, 0x51, 0x68, 0xf4, 0x4d, 0x61, 0x0e, 0xbe, 0x10, 0xfd, 0x7e, 0x36, + 0x44, 0x8c, 0xee, 0x8a, 0x16, 0x66, 0xc0, 0xee, 0x02, 0xcf, 0x6a, 0x04, 0x58, 0xbf, 0x1f, 0x80, + 0xf5, 0x34, 0x01, 0xac, 0xa5, 0x43, 0xd2, 0x3f, 0x4a, 0xd4, 0x3e, 0xa4, 0x82, 0x93, 0x7e, 0x47, + 0x3c, 0x39, 0xb4, 0x3e, 0xc5, 0xa3, 0xf5, 0x74, 0x11, 0xad, 0x15, 0x19, 0x69, 0x0e, 0x62, 0x39, + 0x02, 0xb5, 0x2f, 0x05, 0xa8, 0xfd, 0x37, 0x01, 0xb5, 0xda, 0x98, 0xca, 0x39, 0x4a, 0xf4, 0x3e, + 0xac, 0x82, 0xd3, 0xd8, 0xec, 0x2c, 0xdb, 0xd6, 0x56, 0xd7, 0x6c, 0x7b, 0xa6, 0xb5, 0x1d, 0xba, + 0x38, 0xae, 0xc8, 0xac, 0x6c, 0xf6, 0x63, 0xab, 0x1c, 0xc4, 0x56, 0xdc, 0x63, 0x90, 0x6d, 0x5b, + 0x51, 0x6c, 0x45, 0x0c, 0x61, 0x9c, 0xf3, 0x7e, 0xa8, 0x39, 0x7c, 0x52, 0xf2, 0xd6, 0x27, 0xc9, + 0xc1, 0x51, 0xe2, 0xf7, 0x75, 0x05, 0x9c, 0xd2, 0x91, 0x6b, 0x77, 0x2f, 0x23, 0xea, 0xcb, 0xea, + 0xf3, 0xeb, 0xc2, 0x47, 0x25, 0x6a, 0x7f, 0xf0, 0xa5, 0x3c, 0x46, 0x4d, 0x11, 0xa3, 0x27, 0x45, + 0x6b, 0xfa, 0xa0, 0xa2, 0x23, 0xda, 0xd1, 0x7b, 0x03, 0xf9, 0x9f, 0x13, 0xe4, 0xbf, 0x78, 0x28, + 0xea, 0x13, 0x58, 0x22, 0x00, 0x9c, 0x79, 0xf7, 0x7c, 0x15, 0x14, 0x89, 0xcf, 0x32, 0x19, 0x3d, + 0xd9, 0x1d, 0xc2, 0x0d, 0xf1, 0x34, 0x4b, 0xcf, 0x57, 0x42, 0xff, 0x34, 0x8b, 0x9f, 0xa0, 0xdd, + 0x08, 0xe6, 0xdb, 0x3b, 0xa8, 0x7d, 0xa9, 0x6a, 0xf9, 0x5e, 0x65, 0xd4, 0x05, 0xa9, 0x2f, 0x55, + 0x34, 0x18, 0xee, 0x11, 0xc1, 0x10, 0x17, 0x77, 0x85, 0xc9, 0x23, 0xcf, 0x54, 0x04, 0x08, 0xbf, + 0x19, 0x80, 0x50, 0x17, 0x40, 0xb8, 0x63, 0x24, 0xaa, 0xc9, 0x84, 0x5f, 0x1f, 0x41, 0xf5, 0x21, + 0x38, 0xd5, 0x58, 0x6f, 0x55, 0x1b, 0xf5, 0xcd, 0x8d, 0x66, 0x65, 0x69, 0x73, 0xd1, 0x6f, 0x00, + 0xcd, 0xa2, 0x0a, 0xbf, 0xa9, 0x80, 0x29, 0xca, 0x96, 0x0b, 0x1f, 0x19, 0x42, 0x30, 0xf4, 0x18, + 0x0f, 0x7c, 0xbb, 0x74, 0x50, 0xae, 0x40, 0x10, 0xac, 0x9c, 0x88, 0xce, 0xe7, 0x09, 0x60, 0x8a, + 0x82, 0xec, 0xef, 0xb4, 0x9c, 0x89, 0xb0, 0x9e, 0x19, 0x19, 0xdd, 0xcf, 0x2e, 0x19, 0xa0, 0x6b, + 0x08, 0x1b, 0xe9, 0xb7, 0x81, 0x67, 0x65, 0xe9, 0xf2, 0xcc, 0x79, 0xd3, 0xdb, 0x21, 0xa7, 0x7c, + 0xe0, 0x53, 0x65, 0x06, 0x87, 0x5b, 0x40, 0xee, 0x32, 0xce, 0x3d, 0xe4, 0xc4, 0x14, 0xcd, 0x04, + 0x7f, 0x51, 0x3a, 0x1e, 0xbc, 0xa0, 0x9f, 0x01, 0x4f, 0x11, 0xe0, 0xac, 0x81, 0x6c, 0xd7, 0x74, + 0x3d, 0x36, 0xaf, 0xb9, 0x3d, 0x11, 0x21, 0xff, 0x4f, 0xd5, 0x43, 0xbb, 0x3a, 0x21, 0x03, 0xef, + 0xc6, 0x56, 0x69, 0x98, 0x2a, 0x71, 0x6a, 0xec, 0x34, 0x98, 0x62, 0xd1, 0x0c, 0xd8, 0xd6, 0x9f, + 0xff, 0x28, 0xb9, 0xdd, 0x26, 0x55, 0xdb, 0xf4, 0x75, 0xe0, 0xff, 0x3d, 0x0e, 0xa6, 0x56, 0x4d, + 0xd7, 0xb3, 0x9d, 0x7d, 0xf8, 0xfa, 0x0c, 0x98, 0x3a, 0x87, 0x1c, 0xd7, 0xb4, 0xad, 0x03, 0x8e, + 0x76, 0xd7, 0x81, 0x99, 0x9e, 0x83, 0x2e, 0x9b, 0xf6, 0x9e, 0xcb, 0x8d, 0xc4, 0x5c, 0x92, 0x06, + 0x41, 0xc1, 0xd8, 0xf3, 0x76, 0x6c, 0x27, 0x0c, 0x82, 0xe6, 0x3f, 0x6b, 0x67, 0x00, 0xa0, 0xff, + 0xeb, 0xc6, 0x2e, 0x62, 0xee, 0x83, 0x5c, 0x8a, 0xa6, 0x81, 0xac, 0x67, 0xee, 0x22, 0x76, 0x2b, + 0x02, 0xf9, 0x8f, 0x05, 0x4c, 0x22, 0x0c, 0xb3, 0x48, 0xce, 0xaa, 0xee, 0x3f, 0xc2, 0x2f, 0xa8, + 0x60, 0x66, 0x05, 0x79, 0x8c, 0x55, 0x17, 0xbe, 0x28, 0x23, 0x75, 0x11, 0x19, 0x9e, 0xfb, 0x75, + 0x0d, 0xd7, 0xff, 0x2e, 0x30, 0x6b, 0xc4, 0xc4, 0xf0, 0x8a, 0x06, 0x95, 0xbf, 0x9f, 0x85, 0xc4, + 0xeb, 0xf5, 0xaa, 0xf4, 0x00, 0x0d, 0xcb, 0xcc, 0x36, 0xe7, 0x0f, 0xbe, 0x10, 0xe7, 0x1d, 0xb1, + 0xb1, 0x6e, 0x98, 0xec, 0x17, 0xb8, 0xfa, 0x44, 0x76, 0x47, 0x85, 0xcb, 0x2c, 0xc7, 0x81, 0xab, + 0x77, 0x78, 0x4a, 0x8c, 0x8c, 0x1e, 0xe4, 0x96, 0x8c, 0x92, 0x33, 0x9c, 0x93, 0x09, 0x5c, 0xb6, + 0xac, 0x82, 0x99, 0xe6, 0x8e, 0x7d, 0xc5, 0x97, 0xe3, 0xd3, 0xe5, 0x80, 0xbd, 0x16, 0x4c, 0x5f, + 0xee, 0x03, 0x35, 0x4c, 0xe0, 0xef, 0x77, 0x54, 0xc5, 0xfb, 0x1d, 0xef, 0x57, 0x93, 0xc2, 0xc4, + 0x31, 0x17, 0x01, 0x93, 0x78, 0x25, 0xa3, 0x92, 0xe0, 0x4a, 0x46, 0xed, 0xf1, 0x60, 0x8a, 0x71, + 0xcd, 0xb6, 0x02, 0xe2, 0x01, 0xf6, 0x33, 0xf3, 0x15, 0xcc, 0x8a, 0x15, 0x4c, 0x86, 0x7c, 0x74, + 0xe5, 0xd2, 0x47, 0xfe, 0x77, 0x14, 0x12, 0x23, 0xcd, 0x07, 0xbe, 0x3c, 0x06, 0xe0, 0xe1, 0x77, + 0x33, 0xb2, 0x1b, 0x66, 0x81, 0x04, 0x02, 0x0e, 0x0e, 0x75, 0xc9, 0xe0, 0x50, 0x72, 0xe9, 0xcb, + 0xf3, 0xe5, 0x59, 0x30, 0xbb, 0x64, 0x6e, 0x6d, 0x05, 0x9d, 0xe4, 0x8b, 0x25, 0x3b, 0xc9, 0x68, + 0x67, 0x38, 0x6c, 0xe7, 0xee, 0x39, 0x0e, 0xb2, 0xfc, 0x4a, 0xb1, 0xe6, 0xd4, 0x97, 0xaa, 0xdd, + 0x04, 0x8e, 0xfb, 0xe3, 0x02, 0xdf, 0x51, 0x4e, 0xeb, 0xfd, 0xc9, 0xf0, 0xdb, 0xd2, 0xde, 0x16, + 0xbe, 0x44, 0xf9, 0x2a, 0x45, 0x34, 0xc0, 0x3b, 0xc1, 0xdc, 0x0e, 0xcd, 0x4d, 0x96, 0xa4, 0xfd, + 0xce, 0xf2, 0x54, 0xdf, 0x1d, 0x14, 0x6b, 0xc8, 0x75, 0x8d, 0x6d, 0xa4, 0x8b, 0x99, 0xfb, 0x9a, + 0xaf, 0x9a, 0xe4, 0x46, 0x55, 0x39, 0xc7, 0x0d, 0x89, 0x9a, 0xa4, 0xaf, 0x1d, 0x5f, 0x3a, 0x0b, + 0xb2, 0xcb, 0x66, 0x17, 0xc1, 0x1f, 0x57, 0xc0, 0xb4, 0x8e, 0xda, 0xb6, 0xd5, 0xc6, 0x4f, 0x9c, + 0x6b, 0xec, 0xb7, 0x32, 0xb2, 0x37, 0x89, 0x63, 0x3a, 0x0b, 0x01, 0x8d, 0x88, 0x76, 0x23, 0x77, + 0x63, 0x78, 0x2c, 0xa9, 0x09, 0xdc, 0xfb, 0x86, 0xa7, 0x1e, 0x5b, 0x5b, 0x5d, 0xdb, 0x10, 0x36, + 0x65, 0xfa, 0x4d, 0xa1, 0xf0, 0x20, 0x6e, 0xdd, 0xf6, 0xd6, 0x4d, 0xcb, 0x0a, 0x62, 0xdb, 0x1c, + 0x48, 0x17, 0xfd, 0x89, 0x62, 0xc3, 0x03, 0x92, 0xba, 0xb3, 0xd2, 0x23, 0x34, 0xfb, 0x46, 0x30, + 0x7f, 0x71, 0xdf, 0x43, 0x2e, 0xcb, 0xc5, 0x8a, 0xcd, 0xea, 0x7d, 0xa9, 0xdc, 0xe5, 0x1e, 0x71, + 0x61, 0x04, 0x63, 0x0a, 0x4c, 0x26, 0xea, 0xd5, 0x11, 0x66, 0x80, 0x27, 0x41, 0xb1, 0xde, 0x58, + 0xaa, 0x10, 0x4f, 0x6d, 0xdf, 0xf7, 0x75, 0x1b, 0xfe, 0x8c, 0x0a, 0x66, 0x89, 0x93, 0xa3, 0x8f, + 0xc2, 0xf5, 0x12, 0xf3, 0x11, 0xf8, 0x55, 0x69, 0x2f, 0x6e, 0x52, 0x65, 0xbe, 0x80, 0x68, 0x41, + 0x6f, 0x99, 0xdd, 0x7e, 0x41, 0xe7, 0xf4, 0xbe, 0xd4, 0x01, 0x80, 0xa8, 0x03, 0x01, 0xf9, 0x90, + 0x94, 0x2b, 0xf7, 0x30, 0xee, 0x8e, 0x0a, 0x95, 0x5f, 0x53, 0xc1, 0x0c, 0x9e, 0xa4, 0xf8, 0xa0, + 0x34, 0x04, 0x50, 0x6c, 0xab, 0xbb, 0x1f, 0x2e, 0x8b, 0xf8, 0x8f, 0x89, 0x1a, 0xc9, 0x9f, 0x48, + 0xcf, 0xdc, 0x89, 0x88, 0x38, 0x5e, 0x26, 0x84, 0xdf, 0x07, 0xa5, 0xe6, 0xf3, 0x43, 0x98, 0x3b, + 0x2a, 0xf8, 0x5e, 0x9b, 0x07, 0xf9, 0x8d, 0x1e, 0x41, 0xee, 0xcb, 0xaa, 0xcc, 0x45, 0x39, 0x07, + 0x8e, 0xf1, 0x61, 0x33, 0xab, 0x6b, 0xb7, 0x8d, 0xee, 0x7a, 0x78, 0x92, 0x3d, 0x4c, 0xd0, 0xee, + 0x60, 0x9e, 0xfd, 0xf4, 0x40, 0xf6, 0x8d, 0xb1, 0x77, 0xc8, 0x10, 0x19, 0x71, 0x47, 0x26, 0x6f, + 0x01, 0x27, 0x3a, 0xa6, 0x6b, 0x5c, 0xec, 0xa2, 0x8a, 0xd5, 0x76, 0xf6, 0xa9, 0x38, 0xd8, 0xb4, + 0xea, 0xc0, 0x0b, 0xed, 0x49, 0x20, 0xe7, 0x7a, 0xfb, 0x5d, 0x3a, 0x4f, 0xe4, 0x4f, 0x58, 0x46, + 0x16, 0xd5, 0xc4, 0xd9, 0x75, 0xfa, 0x15, 0xef, 0x3a, 0x3b, 0x25, 0xe7, 0x3a, 0xab, 0x3d, 0x16, + 0xe4, 0x6d, 0xc7, 0xdc, 0x36, 0xe9, 0xb5, 0x90, 0xf3, 0x07, 0x42, 0x25, 0x53, 0x53, 0xa0, 0x41, + 0xb2, 0xe8, 0x2c, 0xab, 0xf6, 0x78, 0x30, 0x6d, 0xee, 0x1a, 0xdb, 0xe8, 0x1e, 0xd3, 0xa2, 0x81, + 0x24, 0xe6, 0x6f, 0x3b, 0x7d, 0xe0, 0xf0, 0x28, 0x7b, 0xaf, 0x87, 0x59, 0xb5, 0x3b, 0xc1, 0x35, + 0x6d, 0x07, 0x19, 0x1e, 0xc2, 0x02, 0x3a, 0x6f, 0x76, 0xb6, 0x91, 0x57, 0xdd, 0x5a, 0x33, 0x5d, + 0xd7, 0xb4, 0xb6, 0xd9, 0xcd, 0xaf, 0xd1, 0x19, 0xe0, 0x07, 0x15, 0xd9, 0x68, 0x90, 0x44, 0x32, + 0x54, 0x25, 0x46, 0xb8, 0xa1, 0x9e, 0x93, 0xa2, 0x2a, 0xe9, 0x80, 0xfc, 0x2a, 0xa9, 0x38, 0x8d, + 0xd1, 0x6c, 0xa5, 0x3f, 0xf4, 0xff, 0x91, 0x02, 0x0a, 0x4b, 0xf6, 0x15, 0x8b, 0x34, 0x93, 0xdb, + 0xe5, 0x2c, 0xe5, 0x01, 0xa1, 0x1d, 0xc4, 0xbb, 0xce, 0x63, 0x4f, 0x03, 0x92, 0xda, 0xfa, 0x45, + 0x46, 0xc0, 0x10, 0xdb, 0xee, 0x24, 0x03, 0x08, 0xc4, 0x95, 0x93, 0xbe, 0x5c, 0x7f, 0x4f, 0x05, + 0xd9, 0x25, 0xc7, 0xee, 0xc1, 0xb7, 0x65, 0x12, 0x38, 0xe2, 0x75, 0x1c, 0xbb, 0xd7, 0x22, 0x57, + 0xc8, 0x86, 0x7b, 0x4f, 0x7c, 0x9a, 0x76, 0x3b, 0x28, 0xf4, 0x6c, 0xd7, 0xf4, 0xfc, 0x49, 0xc8, + 0xfc, 0x6d, 0x0f, 0x19, 0xd8, 0x17, 0xac, 0xb3, 0x4c, 0x7a, 0x90, 0x1d, 0xf7, 0xf9, 0x44, 0x84, + 0x58, 0x2e, 0x58, 0x8c, 0xfe, 0x35, 0xba, 0x7d, 0xa9, 0xf0, 0x25, 0x3c, 0x92, 0x4f, 0x14, 0x91, + 0x7c, 0xf8, 0x00, 0x09, 0x3b, 0x76, 0x6f, 0x2c, 0xae, 0x33, 0xaf, 0x08, 0x50, 0x7d, 0xb2, 0x80, + 0xea, 0xcd, 0x52, 0x65, 0xa6, 0x8f, 0xe8, 0x07, 0xb3, 0x00, 0x10, 0x23, 0x65, 0x03, 0x4f, 0x9f, + 0xe4, 0x2c, 0xb4, 0xe7, 0x66, 0x39, 0x59, 0x96, 0x44, 0x59, 0x3e, 0x32, 0xc2, 0x06, 0x22, 0xe4, + 0x23, 0x24, 0x5a, 0x02, 0xb9, 0x3d, 0xfc, 0x9a, 0x49, 0x54, 0x92, 0x04, 0x79, 0xd4, 0xe9, 0x97, + 0xf0, 0x77, 0x32, 0x20, 0x47, 0x12, 0xb4, 0x33, 0x00, 0x10, 0xb3, 0x80, 0x1e, 0xa6, 0xcd, 0x10, + 0x03, 0x80, 0x4b, 0x21, 0xda, 0x6a, 0x76, 0xd8, 0x6b, 0x6a, 0x70, 0x87, 0x09, 0xf8, 0x6b, 0x62, + 0x2c, 0x10, 0x5a, 0xcc, 0x7c, 0xe0, 0x52, 0xf0, 0xd7, 0xe4, 0xa9, 0x86, 0xb6, 0xe8, 0xed, 0x1e, + 0x59, 0x3d, 0x4c, 0x08, 0xbe, 0xae, 0x05, 0x77, 0xc2, 0xfa, 0x5f, 0x93, 0x14, 0x3c, 0x95, 0x26, + 0x6a, 0xb9, 0x18, 0x16, 0x91, 0x27, 0x99, 0xfa, 0x93, 0xe1, 0xeb, 0x02, 0xb5, 0x59, 0x12, 0xd4, + 0xe6, 0xd1, 0x09, 0xc4, 0x9b, 0xbe, 0xf2, 0x7c, 0x3d, 0x07, 0xa6, 0xeb, 0x76, 0x87, 0xe9, 0x0e, + 0x37, 0xdd, 0xfc, 0x4c, 0x2e, 0xd1, 0x74, 0x33, 0xa0, 0x11, 0xa1, 0x20, 0x4f, 0x11, 0x15, 0x44, + 0x8e, 0x02, 0xaf, 0x1f, 0xda, 0x22, 0xc8, 0x13, 0xed, 0x3d, 0x78, 0xd9, 0x68, 0x1c, 0x09, 0x22, + 0x5a, 0x9d, 0x7d, 0xf9, 0x1f, 0x4e, 0xc7, 0xfe, 0x07, 0xc8, 0x91, 0x0a, 0xc6, 0xec, 0x0d, 0x89, + 0x15, 0x55, 0xe2, 0x2b, 0xaa, 0xc6, 0x57, 0x34, 0xdb, 0x5f, 0xd1, 0x24, 0xab, 0x08, 0x51, 0x1a, + 0x92, 0xbe, 0x8e, 0xff, 0xcd, 0x14, 0x00, 0x75, 0xe3, 0xb2, 0xb9, 0x4d, 0xf7, 0x96, 0xbf, 0xe0, + 0xcf, 0x9e, 0xd8, 0x2e, 0xf0, 0x4f, 0x72, 0x03, 0xe1, 0xed, 0x60, 0x8a, 0x8d, 0x7b, 0xac, 0x22, + 0x0f, 0x15, 0x2a, 0x12, 0x52, 0xa1, 0x46, 0xed, 0x7d, 0x9e, 0xee, 0xe7, 0xc7, 0x86, 0xc9, 0xd6, + 0x5e, 0xb7, 0xdb, 0xc2, 0xdf, 0x32, 0x0b, 0xcd, 0x7f, 0x8e, 0xd8, 0xc1, 0x08, 0x2f, 0x99, 0xa6, + 0x41, 0xa7, 0xd8, 0x13, 0x7c, 0x9f, 0xf4, 0x39, 0x35, 0x8e, 0x1f, 0xae, 0x46, 0x11, 0x4d, 0xf0, + 0xb1, 0x60, 0xca, 0x0e, 0xb6, 0xc3, 0xd5, 0xc8, 0x55, 0xb4, 0xaa, 0xb5, 0x65, 0xeb, 0x7e, 0x4e, + 0xc9, 0xad, 0x33, 0x29, 0x3e, 0x26, 0x72, 0x14, 0xf4, 0xd4, 0x8a, 0x1f, 0x29, 0x15, 0xd7, 0xe3, + 0xbc, 0xe9, 0xed, 0xd4, 0x4c, 0xeb, 0x92, 0x0b, 0xff, 0x9b, 0x9c, 0x05, 0xc9, 0xe1, 0xaf, 0x24, + 0xc3, 0x5f, 0x8c, 0x54, 0x16, 0xeb, 0xd9, 0xc1, 0x51, 0x19, 0xcc, 0x6d, 0x04, 0x80, 0x77, 0x80, + 0x3c, 0x65, 0x94, 0x75, 0xa2, 0x67, 0x23, 0xf1, 0x0b, 0x28, 0xe9, 0xec, 0x0b, 0x49, 0xaf, 0x90, + 0xa4, 0x9c, 0xa5, 0x0e, 0xe9, 0xd9, 0xc7, 0x80, 0x29, 0x26, 0x69, 0x6d, 0x9e, 0x6f, 0xc5, 0xc5, + 0x63, 0x1a, 0x00, 0xf9, 0x35, 0xfb, 0x32, 0x6a, 0xd9, 0xc5, 0x0c, 0xfe, 0x8f, 0xf9, 0x6b, 0xd9, + 0x45, 0x05, 0xbe, 0xb2, 0x00, 0x0a, 0x41, 0x88, 0xca, 0x3f, 0x52, 0x40, 0xb1, 0x4c, 0x66, 0x68, + 0xcb, 0x8e, 0xbd, 0x4b, 0x6b, 0x24, 0x7f, 0xe6, 0xe1, 0xa5, 0xd2, 0x0e, 0x22, 0x41, 0xe8, 0xc8, + 0xfe, 0xc2, 0x22, 0xb0, 0xa4, 0x4b, 0x98, 0x8a, 0xbf, 0x84, 0x09, 0xdf, 0x2a, 0xe5, 0x30, 0x22, + 0x5b, 0x4a, 0xfa, 0x4d, 0xed, 0x77, 0x15, 0x90, 0x2b, 0x77, 0x6d, 0x0b, 0xf1, 0x07, 0x73, 0x87, + 0x9e, 0x00, 0x1d, 0xbc, 0x8f, 0x01, 0x9f, 0xa5, 0xc8, 0xda, 0x1a, 0xa1, 0x00, 0x70, 0xd9, 0x92, + 0xb2, 0x95, 0x1b, 0xa4, 0x62, 0x49, 0xa7, 0x2f, 0xd0, 0x6f, 0x2a, 0x60, 0x9a, 0xc6, 0x94, 0x2b, + 0x75, 0xbb, 0xf0, 0x21, 0xa1, 0x50, 0x07, 0x84, 0xf9, 0x84, 0x1f, 0x92, 0x3e, 0x78, 0x16, 0xd4, + 0x2a, 0xa0, 0x9d, 0x20, 0x2c, 0x62, 0xb2, 0x73, 0x50, 0x72, 0x3b, 0x71, 0x43, 0x19, 0x4a, 0x5f, + 0xd4, 0x7f, 0xac, 0x60, 0x03, 0xc0, 0xba, 0xb4, 0xee, 0xa0, 0xcb, 0x26, 0xba, 0x02, 0x1f, 0x1c, + 0x0a, 0xfb, 0x60, 0xc0, 0xac, 0x37, 0x49, 0x2f, 0xe2, 0x70, 0x24, 0x23, 0x37, 0xc2, 0x66, 0xba, + 0x61, 0x26, 0xd6, 0x8b, 0xf7, 0x47, 0x31, 0xe3, 0xc8, 0xe8, 0x7c, 0x76, 0xc9, 0x35, 0x9b, 0x68, + 0x2e, 0xd2, 0x17, 0xec, 0xc7, 0xa6, 0x40, 0x61, 0xc3, 0x72, 0x7b, 0x5d, 0xc3, 0xdd, 0x81, 0xff, + 0xa6, 0x82, 0x3c, 0xbd, 0xe2, 0x16, 0xfe, 0xa0, 0x10, 0x97, 0xe7, 0x19, 0x7b, 0xc8, 0xf1, 0x1d, + 0x78, 0xe8, 0x43, 0x68, 0x1f, 0x29, 0x9c, 0x7d, 0x04, 0x3f, 0xa8, 0xca, 0x4e, 0x52, 0xfd, 0x42, + 0xd9, 0x9d, 0xba, 0xd1, 0xa1, 0x60, 0x7a, 0x66, 0xdb, 0xdb, 0x73, 0x90, 0x3b, 0x30, 0x14, 0x4c, + 0x24, 0x95, 0x75, 0xfa, 0x95, 0x1e, 0x7c, 0x0e, 0x0d, 0x30, 0xc5, 0x12, 0x0f, 0x6c, 0x46, 0x1d, + 0x8c, 0x2a, 0x71, 0x0a, 0xe4, 0x0d, 0xc7, 0x33, 0x5d, 0x8f, 0x6d, 0xcf, 0xb2, 0x27, 0xdc, 0x5d, + 0xd2, 0x7f, 0x1b, 0x4e, 0xd7, 0x8f, 0xe0, 0x15, 0x24, 0xc0, 0x5f, 0x93, 0x9a, 0x3f, 0xc6, 0xd7, + 0x3c, 0x19, 0xe4, 0xf7, 0x8c, 0xb0, 0xc2, 0xfd, 0x20, 0x70, 0x95, 0x5e, 0x6a, 0x55, 0x36, 0x69, + 0xc0, 0xa7, 0x20, 0xb6, 0x53, 0x07, 0xbe, 0x47, 0xe5, 0xd6, 0xef, 0xf6, 0x85, 0x31, 0x82, 0x49, + 0x31, 0x1c, 0x23, 0x82, 0x84, 0x98, 0xbd, 0x6e, 0x61, 0x09, 0x57, 0x95, 0x5e, 0xc2, 0x85, 0xbf, + 0x22, 0xbd, 0x17, 0x15, 0x88, 0x72, 0xc8, 0x1a, 0x60, 0xdc, 0x15, 0x98, 0x1f, 0x91, 0xda, 0x57, + 0x1a, 0x56, 0xd2, 0x11, 0xc2, 0xf6, 0xdd, 0x53, 0x40, 0x29, 0x55, 0xe1, 0x4f, 0x4c, 0x81, 0xd9, + 0xf3, 0x8e, 0xe9, 0x99, 0xd6, 0x76, 0xcb, 0xb6, 0xbb, 0x2e, 0xfc, 0x0e, 0xb7, 0x51, 0xf1, 0x78, + 0x90, 0x6f, 0xdb, 0xd6, 0x96, 0xb9, 0xcd, 0xc4, 0x78, 0x46, 0xa8, 0x5c, 0xa9, 0xba, 0xb0, 0xee, + 0xd8, 0x97, 0xcd, 0x0e, 0x72, 0xca, 0x24, 0x97, 0xce, 0x72, 0x63, 0x3d, 0xe6, 0x42, 0xe6, 0x3d, + 0xba, 0xff, 0x2b, 0xbe, 0xbc, 0x20, 0x66, 0x0f, 0x4b, 0xe4, 0x22, 0xe6, 0x55, 0x41, 0xa1, 0x6b, + 0x58, 0xdb, 0x7b, 0xfe, 0xcc, 0xbb, 0x7f, 0x17, 0x35, 0x8a, 0x52, 0x8d, 0x7d, 0xa4, 0x07, 0x9f, + 0x13, 0x27, 0x37, 0x6c, 0xea, 0xd3, 0xb6, 0x47, 0xfe, 0x9f, 0xfd, 0x78, 0x06, 0xcc, 0x70, 0x85, + 0x6a, 0x33, 0x60, 0x6a, 0xa9, 0xb2, 0x5c, 0xda, 0xa8, 0xb5, 0x8a, 0xc7, 0xb0, 0x14, 0x9b, 0x1b, + 0x6b, 0x6b, 0x25, 0xbd, 0xfa, 0xc3, 0x95, 0x62, 0x06, 0xbf, 0x5b, 0xd1, 0x4b, 0xf8, 0xb9, 0xa8, + 0xe0, 0x87, 0xe6, 0x6a, 0x43, 0x6f, 0x55, 0xea, 0x45, 0x15, 0xdb, 0xa3, 0x95, 0xa7, 0xad, 0x97, + 0xea, 0x4b, 0xc5, 0x2c, 0xfe, 0xbf, 0xb8, 0x51, 0xab, 0x55, 0x5a, 0xc5, 0x5c, 0x18, 0x44, 0x2f, + 0x8f, 0x93, 0xcb, 0xa5, 0xe6, 0x46, 0xa9, 0x56, 0x9c, 0xc2, 0xc9, 0xcb, 0x1b, 0xf5, 0xfa, 0x85, + 0x62, 0x01, 0x17, 0x51, 0x6e, 0xd4, 0x97, 0xab, 0x4b, 0x95, 0x7a, 0xab, 0x38, 0xad, 0x5d, 0x05, + 0x8e, 0x37, 0x5b, 0x7a, 0xa9, 0xba, 0xb2, 0xda, 0x5a, 0x6e, 0xe8, 0xe7, 0x4b, 0xfa, 0x52, 0x11, + 0x68, 0x45, 0x30, 0xbb, 0xae, 0x37, 0x96, 0x2b, 0x24, 0x5e, 0x4a, 0xa9, 0x56, 0x9c, 0xc1, 0x5f, + 0xb5, 0xf4, 0x52, 0xbd, 0x59, 0x2b, 0xb5, 0x2a, 0xc5, 0xd9, 0xb3, 0x77, 0x83, 0x82, 0x5f, 0x5d, + 0x2d, 0x0f, 0x94, 0x4a, 0xbd, 0x78, 0x8c, 0xfc, 0x36, 0x8b, 0x19, 0xfc, 0xbb, 0x8c, 0xf9, 0xcd, + 0x03, 0x65, 0xa9, 0x52, 0x54, 0xf1, 0x6f, 0xb5, 0x55, 0xcc, 0xe2, 0xdf, 0x75, 0xcc, 0x62, 0x1e, + 0x28, 0xab, 0xd5, 0x62, 0x1e, 0xff, 0xb6, 0x56, 0x8b, 0x53, 0xe2, 0x4d, 0xf7, 0xb1, 0xbd, 0xf0, + 0x41, 0xc9, 0x47, 0x18, 0x1a, 0x5e, 0x38, 0x47, 0x26, 0xff, 0xe1, 0x2b, 0x14, 0x99, 0xbe, 0x2e, + 0x9e, 0x7e, 0xb2, 0x46, 0xf3, 0x96, 0xcc, 0x18, 0x5b, 0x8d, 0x06, 0xc1, 0xa9, 0x4a, 0x7d, 0x69, + 0xbd, 0x51, 0xad, 0xb7, 0x68, 0xa8, 0xb3, 0x4a, 0xa9, 0xbc, 0x4a, 0x70, 0x46, 0x18, 0xc1, 0xb5, + 0xc6, 0x52, 0xa5, 0x46, 0x5e, 0x2c, 0x37, 0x36, 0xea, 0x4b, 0xc5, 0x2d, 0x5c, 0x56, 0x69, 0xa3, + 0xb5, 0xba, 0xa9, 0x57, 0x9e, 0xba, 0x51, 0xd5, 0x2b, 0x4b, 0xc5, 0x6d, 0x4c, 0xa3, 0x56, 0xaa, + 0xaf, 0x6c, 0x94, 0x56, 0xd8, 0x7e, 0xe1, 0xc6, 0xfa, 0x7a, 0x83, 0xec, 0x18, 0xee, 0xc0, 0x7f, + 0xc8, 0x82, 0x42, 0x69, 0xcf, 0xb3, 0xb7, 0xcc, 0x6e, 0x17, 0x3e, 0x47, 0x39, 0x7c, 0x53, 0x2c, + 0x09, 0x4d, 0xf1, 0x40, 0x03, 0xf2, 0xcb, 0x0a, 0x1a, 0x8f, 0x9f, 0xc0, 0xb5, 0xc3, 0xd3, 0xa1, + 0x33, 0xb6, 0xca, 0x76, 0x9a, 0xe9, 0x23, 0x75, 0xc4, 0xb5, 0x58, 0xcb, 0x22, 0x6f, 0xd8, 0xe3, + 0xd9, 0x7b, 0xc0, 0x2c, 0x4f, 0x89, 0x84, 0x03, 0x2b, 0xad, 0xd0, 0x78, 0x61, 0x7e, 0x84, 0x40, + 0x1a, 0x2f, 0x8c, 0x1c, 0xbc, 0x50, 0x48, 0x7b, 0xa9, 0xb6, 0x6a, 0x58, 0x4f, 0x8f, 0x83, 0x99, + 0xa5, 0x4a, 0xb3, 0xac, 0x57, 0x89, 0x9f, 0x7a, 0x31, 0x2b, 0x7a, 0x19, 0xc4, 0x5a, 0x66, 0x62, + 0x8d, 0x64, 0x95, 0xf2, 0x7b, 0x52, 0xf6, 0x56, 0x34, 0xed, 0x64, 0x0a, 0xf9, 0xa2, 0x07, 0x9a, + 0x42, 0xc2, 0x17, 0x65, 0xe9, 0x3a, 0x59, 0x73, 0x6f, 0x77, 0xd7, 0x70, 0xf6, 0x05, 0x7f, 0xb5, + 0x51, 0xf5, 0x2e, 0x7a, 0x7c, 0x8f, 0x8d, 0x02, 0x84, 0x4d, 0xa8, 0x9e, 0x63, 0xef, 0xf6, 0xfc, + 0xbe, 0x9a, 0x3d, 0xc1, 0xff, 0x25, 0x3d, 0x73, 0x2c, 0x55, 0x17, 0xb8, 0xca, 0x8c, 0x30, 0xb4, + 0xff, 0x88, 0x22, 0x33, 0x8b, 0x8c, 0x2d, 0xe6, 0xfb, 0x5d, 0x23, 0xfe, 0x3a, 0x0b, 0xae, 0x62, + 0x11, 0x5e, 0x82, 0xf5, 0x07, 0x6c, 0xaa, 0xbe, 0x3a, 0x55, 0xcd, 0x60, 0x06, 0xb5, 0x1a, 0x1a, + 0xd4, 0xdc, 0x86, 0x77, 0x56, 0x72, 0xc3, 0xfb, 0x6d, 0xd2, 0x87, 0x1e, 0x4a, 0xd5, 0x85, 0x01, + 0x75, 0x9c, 0xcc, 0xb6, 0xfc, 0xfd, 0x8a, 0xcc, 0x6a, 0xab, 0x14, 0x87, 0xdf, 0xef, 0xba, 0xf6, + 0x8e, 0x0c, 0x98, 0x17, 0x55, 0x45, 0x7b, 0x1c, 0x28, 0xf4, 0x58, 0x0a, 0x93, 0xcb, 0xe9, 0x28, + 0xe5, 0xd2, 0x83, 0x9c, 0x18, 0x22, 0x64, 0x75, 0x7a, 0xb6, 0x69, 0x05, 0xeb, 0xf2, 0xfe, 0x33, + 0x9e, 0x77, 0x92, 0xa9, 0x83, 0x1f, 0xef, 0x8f, 0x3c, 0x84, 0xb1, 0x63, 0xb3, 0x5c, 0xec, 0x58, + 0x2c, 0x44, 0x0f, 0xed, 0x92, 0x5b, 0x8c, 0xf6, 0x1c, 0xea, 0xf0, 0xa2, 0xe8, 0x7c, 0xd2, 0xd9, + 0x27, 0x83, 0x82, 0x5f, 0x3e, 0xb6, 0xee, 0x1a, 0xb5, 0x5a, 0x69, 0xad, 0x44, 0x17, 0x2a, 0x1b, + 0xeb, 0x95, 0x7a, 0xa9, 0x5a, 0xcc, 0xe0, 0x81, 0xae, 0xb6, 0xd6, 0x6c, 0x6d, 0x2c, 0x55, 0x1b, + 0x45, 0x85, 0x3c, 0xe1, 0x4c, 0xe5, 0xf5, 0xf5, 0xa2, 0x0a, 0xdf, 0x38, 0x05, 0xa6, 0x56, 0x8c, + 0x6e, 0x17, 0x39, 0xfb, 0xf0, 0x9b, 0x0a, 0x28, 0xfa, 0xb3, 0x83, 0x35, 0xc3, 0x32, 0xb7, 0x90, + 0xeb, 0xc5, 0x2f, 0x54, 0xbc, 0x4f, 0xfa, 0x6a, 0x33, 0x56, 0xc6, 0x42, 0x3f, 0xfd, 0x08, 0x1d, + 0xbf, 0x15, 0x64, 0x4d, 0x6b, 0xcb, 0x66, 0xcb, 0x15, 0xfd, 0xfe, 0x36, 0xfe, 0xc7, 0x64, 0xdb, + 0x80, 0x64, 0x94, 0xbc, 0xdd, 0x4c, 0x92, 0x8b, 0xf4, 0x57, 0x2d, 0xde, 0x91, 0x05, 0x73, 0x3e, + 0x13, 0x55, 0xab, 0x83, 0xee, 0xe3, 0xb7, 0x41, 0x7f, 0x26, 0x2b, 0x1b, 0x60, 0xa8, 0xbf, 0x3e, + 0x84, 0x54, 0x84, 0x48, 0x5b, 0x00, 0xb4, 0x0d, 0x0f, 0x6d, 0xdb, 0x8e, 0x19, 0xac, 0x45, 0x3c, + 0x2e, 0x09, 0xb5, 0x32, 0xfd, 0x7a, 0x5f, 0xe7, 0xe8, 0x68, 0x4f, 0x02, 0x33, 0x28, 0x88, 0xe8, + 0xe8, 0x6f, 0x93, 0xc6, 0xe2, 0xc5, 0xe7, 0x87, 0x7f, 0x2c, 0x15, 0xc7, 0x48, 0xa6, 0x9a, 0xc9, + 0x30, 0xdb, 0x1c, 0xad, 0xeb, 0xd9, 0xa8, 0xaf, 0x95, 0xf4, 0xe6, 0x6a, 0xa9, 0x56, 0xab, 0xd6, + 0x57, 0x82, 0x80, 0xc5, 0x1a, 0x98, 0x5f, 0x6a, 0x9c, 0xaf, 0x73, 0x11, 0xa5, 0xb3, 0x70, 0x1d, + 0x14, 0x7c, 0x79, 0x0d, 0x3a, 0x45, 0xc5, 0xcb, 0x8c, 0x9d, 0xa2, 0xe2, 0x92, 0xb0, 0x69, 0x68, + 0xb6, 0x03, 0xd7, 0x7a, 0xf2, 0x1f, 0xfe, 0x96, 0x01, 0x72, 0xc4, 0x9f, 0x05, 0xbe, 0x8b, 0xcc, + 0x8b, 0x7b, 0x5d, 0xa3, 0x8d, 0xe0, 0x6e, 0x82, 0x95, 0x70, 0xff, 0xae, 0x5d, 0xe5, 0xc0, 0x5d, + 0xbb, 0xe4, 0x2f, 0x1b, 0x31, 0x4e, 0x0e, 0xf2, 0xa1, 0xd1, 0x69, 0x16, 0x31, 0xe4, 0x4f, 0xac, + 0x67, 0x13, 0x75, 0xbd, 0x61, 0x6c, 0x46, 0xa8, 0x64, 0x34, 0x4f, 0x69, 0x5c, 0xa2, 0x12, 0xc7, + 0x51, 0xfa, 0x2d, 0xfe, 0xcb, 0x59, 0x90, 0x6b, 0xf6, 0xba, 0xa6, 0x07, 0x7f, 0x41, 0x19, 0x0b, + 0x66, 0xf4, 0x7e, 0x64, 0x75, 0xe8, 0xfd, 0xc8, 0xa1, 0xbf, 0x64, 0x56, 0xc2, 0x5f, 0xb2, 0x85, + 0xee, 0xf3, 0x44, 0x7f, 0xc9, 0xdb, 0xd9, 0xb4, 0x8d, 0x7a, 0x5b, 0x3e, 0x7c, 0x80, 0x48, 0x49, + 0xb5, 0x06, 0xdc, 0x66, 0x71, 0xf6, 0x31, 0x2c, 0xa8, 0x3e, 0x00, 0xf9, 0xc5, 0x46, 0xab, 0xd5, + 0x58, 0x2b, 0x1e, 0x23, 0xd3, 0xaf, 0xc6, 0x3a, 0x0d, 0x71, 0x5c, 0xad, 0xd7, 0x2b, 0xba, 0x30, + 0xe3, 0x12, 0x2f, 0xcb, 0x8c, 0x9d, 0x60, 0x89, 0x65, 0xa7, 0xa9, 0x5e, 0x72, 0x8b, 0xe0, 0xd1, + 0xfc, 0xa4, 0xaf, 0x5c, 0x3f, 0xa7, 0x82, 0xdc, 0x1a, 0x72, 0xb6, 0x11, 0x7c, 0x46, 0x02, 0x07, + 0xbb, 0x2d, 0xd3, 0x71, 0xe9, 0xa5, 0x08, 0xa1, 0x83, 0x1d, 0x9f, 0xa6, 0xdd, 0x00, 0xe6, 0x5c, + 0xd4, 0xb6, 0xad, 0x8e, 0x9f, 0x89, 0xf6, 0x47, 0x62, 0x22, 0x7c, 0x59, 0x42, 0xc8, 0x08, 0xa3, + 0x63, 0xf1, 0x92, 0x4b, 0x02, 0xcc, 0xa0, 0x52, 0xd3, 0x07, 0xe6, 0xdb, 0x2a, 0xfe, 0xa8, 0xb7, + 0x0f, 0x5f, 0x26, 0xed, 0xf9, 0x78, 0x0b, 0xc8, 0x5f, 0xf4, 0xef, 0x45, 0x53, 0x23, 0xfb, 0x63, + 0x96, 0x47, 0x5b, 0x04, 0x27, 0x5c, 0xd4, 0x45, 0x6d, 0x0f, 0x75, 0x70, 0xd3, 0xd5, 0x87, 0x76, + 0x0a, 0x07, 0xb3, 0xc3, 0xdf, 0xe7, 0x01, 0xbc, 0x53, 0x04, 0xf0, 0xc6, 0x01, 0xa2, 0xc4, 0x15, + 0x8a, 0x9e, 0x9b, 0xe0, 0x6a, 0x34, 0xbb, 0x76, 0x60, 0xf8, 0xfa, 0xcf, 0xf8, 0xdd, 0x8e, 0xb7, + 0xdb, 0x25, 0xef, 0xd8, 0xd1, 0x60, 0xff, 0x59, 0x5b, 0x00, 0x53, 0x86, 0xb5, 0x4f, 0x5e, 0x65, + 0x63, 0x6a, 0xed, 0x67, 0x82, 0xaf, 0x0c, 0x90, 0xbf, 0x4b, 0x40, 0xfe, 0x91, 0x72, 0xec, 0xa6, + 0x0f, 0xfc, 0x8f, 0x4d, 0x81, 0xdc, 0xba, 0xe1, 0x7a, 0x08, 0xfe, 0x6f, 0x55, 0x16, 0xf9, 0x1b, + 0xc1, 0xfc, 0x96, 0xdd, 0xde, 0x73, 0x51, 0x47, 0x6c, 0x94, 0x7d, 0xa9, 0xe3, 0xc0, 0x9c, 0x04, + 0x66, 0x67, 0x89, 0x8c, 0xac, 0xef, 0x02, 0x7b, 0x20, 0x9d, 0x5c, 0xbd, 0xe8, 0xae, 0x1b, 0x8e, + 0xd7, 0xd8, 0x22, 0x69, 0xc1, 0xd5, 0x8b, 0x7c, 0xa2, 0x00, 0x7d, 0x3e, 0x06, 0xfa, 0xa9, 0x68, + 0xe8, 0x0b, 0x12, 0xd0, 0x6b, 0x25, 0x50, 0xd8, 0x32, 0xbb, 0x88, 0x7c, 0x30, 0x4d, 0x3e, 0x18, + 0x34, 0x26, 0x11, 0xd9, 0x07, 0x63, 0xd2, 0xb2, 0xd9, 0x45, 0x7a, 0xf0, 0x99, 0x3f, 0x91, 0x01, + 0xe1, 0x44, 0xa6, 0x46, 0x4f, 0xc2, 0x61, 0xc3, 0xcb, 0x32, 0x76, 0x91, 0xbf, 0xf1, 0x6d, 0xb1, + 0x63, 0xe9, 0x1d, 0xc3, 0x33, 0x08, 0x18, 0xb3, 0x3a, 0xf9, 0x2f, 0xfa, 0x64, 0xab, 0xfd, 0x3e, + 0xd9, 0xcf, 0x53, 0x93, 0xf5, 0x88, 0x3e, 0xb3, 0x11, 0x2d, 0xea, 0xa2, 0x0f, 0x10, 0xb5, 0x14, + 0x83, 0x67, 0x0c, 0x4c, 0xdb, 0x70, 0x90, 0xb7, 0xce, 0x7b, 0x41, 0xe7, 0x74, 0x31, 0x91, 0x1c, + 0xc2, 0x71, 0x9b, 0xc6, 0x2e, 0xbd, 0x5a, 0xb1, 0x8c, 0xdf, 0xb1, 0xc3, 0x15, 0x07, 0xd2, 0xc3, + 0xfe, 0x37, 0x37, 0xee, 0xfe, 0x77, 0x50, 0x1d, 0xd3, 0x6f, 0x86, 0xaf, 0xc9, 0x02, 0xb5, 0xbc, + 0xe7, 0x3d, 0xa0, 0xbb, 0xdf, 0xef, 0x49, 0xfb, 0x98, 0xb3, 0xfe, 0x6c, 0xcf, 0x3b, 0xda, 0xde, + 0x37, 0xa1, 0x96, 0xc8, 0xf9, 0xb2, 0x47, 0xd5, 0x2d, 0x7d, 0x1d, 0x79, 0x9b, 0x1a, 0x1c, 0x8d, + 0x7a, 0x4e, 0xe6, 0xf0, 0xa6, 0x39, 0xa4, 0xfd, 0x13, 0xd7, 0x33, 0x04, 0xcf, 0x7e, 0xc7, 0x93, + 0x15, 0x6e, 0x7f, 0x20, 0xae, 0xad, 0x44, 0x94, 0xb3, 0x3a, 0x7d, 0x80, 0x2f, 0x97, 0x3e, 0x30, + 0x4a, 0xc5, 0x16, 0x7b, 0x8c, 0x27, 0x99, 0x4d, 0xf5, 0x6a, 0xa9, 0x63, 0xa3, 0x31, 0xc5, 0xa6, + 0x0f, 0xd8, 0xdf, 0xf3, 0xc7, 0x74, 0x4a, 0x87, 0x46, 0x0c, 0xbe, 0x4a, 0x7a, 0x41, 0x9f, 0x56, + 0x7b, 0xc8, 0x5e, 0x7d, 0x32, 0x79, 0xcb, 0x39, 0x8a, 0xc5, 0x16, 0x3c, 0x81, 0xbb, 0xa2, 0x55, + 0x90, 0xa7, 0x0b, 0xbf, 0xf0, 0xcd, 0xd2, 0x4d, 0x04, 0xf7, 0x46, 0xe2, 0xf1, 0x9d, 0xe0, 0x39, + 0xc9, 0x9a, 0x83, 0x70, 0xcc, 0x27, 0x9b, 0xe8, 0x98, 0x8f, 0x18, 0x81, 0x45, 0xa2, 0x1d, 0xd1, + 0x3a, 0xa6, 0x3c, 0x9d, 0x4c, 0xd2, 0xc2, 0x06, 0x32, 0x94, 0x3e, 0xde, 0xcf, 0xcf, 0x81, 0x59, + 0x5a, 0x34, 0x3d, 0x5f, 0x08, 0xdf, 0xa3, 0x7c, 0xff, 0xa0, 0xae, 0xd5, 0xc1, 0xec, 0x15, 0xc2, + 0x36, 0x0d, 0x2f, 0xc7, 0x56, 0x2e, 0x6e, 0x8e, 0x5d, 0xf7, 0xa0, 0xf5, 0xf4, 0x6f, 0x8d, 0x16, + 0xbe, 0xc7, 0x32, 0xa6, 0x1b, 0x2c, 0xf4, 0xf0, 0x44, 0x9e, 0x18, 0x59, 0x7c, 0x92, 0x76, 0x0a, + 0xe4, 0x2f, 0x9b, 0xe8, 0x4a, 0xb5, 0xc3, 0xac, 0x5b, 0xf6, 0x04, 0x7f, 0x5d, 0xda, 0x67, 0x92, + 0x87, 0x9b, 0xf1, 0x92, 0xae, 0x16, 0xca, 0x79, 0x4e, 0x0e, 0x65, 0x6b, 0x02, 0xd1, 0x80, 0x14, + 0x7a, 0x4f, 0x3d, 0x0b, 0xe5, 0x5f, 0x4e, 0xa0, 0x88, 0x51, 0x86, 0xb3, 0x18, 0x84, 0x2f, 0xf6, + 0xac, 0x39, 0x15, 0x40, 0x58, 0xfe, 0x58, 0xfa, 0x7c, 0xb9, 0xc8, 0x70, 0x43, 0x8a, 0x4e, 0x5f, + 0xf2, 0xaf, 0x53, 0xc1, 0x74, 0x13, 0x79, 0xcb, 0x26, 0xea, 0x76, 0x5c, 0xe8, 0x1c, 0xde, 0x34, + 0xba, 0x15, 0xe4, 0xb7, 0x08, 0xb1, 0x61, 0x9b, 0x93, 0x2c, 0x1b, 0x7c, 0x8d, 0x22, 0xeb, 0x07, + 0xc4, 0x56, 0xdf, 0x7c, 0x6e, 0xc7, 0x02, 0x93, 0xdc, 0x69, 0xba, 0xf8, 0x92, 0x27, 0x70, 0x55, + 0x92, 0x0a, 0x66, 0xc9, 0xf6, 0x3f, 0xf2, 0x4a, 0x5d, 0x73, 0xdb, 0xe2, 0x6f, 0x57, 0x1f, 0xb9, + 0x85, 0x68, 0x8f, 0x06, 0x39, 0x03, 0x53, 0x63, 0xee, 0x6e, 0x70, 0x60, 0xe7, 0x49, 0xca, 0xd3, + 0x69, 0xc6, 0x04, 0x17, 0x93, 0x84, 0x8a, 0xed, 0xf3, 0x3c, 0xc1, 0x8b, 0x49, 0x86, 0x16, 0x9e, + 0x3e, 0x62, 0x5f, 0x53, 0xc1, 0x49, 0xc6, 0xc0, 0x39, 0xe4, 0x78, 0x66, 0xdb, 0xe8, 0x52, 0xe4, + 0x5e, 0x98, 0x19, 0x07, 0x74, 0xab, 0x60, 0xee, 0x32, 0x4f, 0x96, 0x41, 0x78, 0x76, 0x20, 0x84, + 0x02, 0x03, 0xba, 0xf8, 0x61, 0x82, 0x0b, 0x1e, 0x04, 0xa9, 0x0a, 0x34, 0x27, 0x78, 0xc1, 0x83, + 0x34, 0x13, 0xe9, 0x43, 0xfc, 0x12, 0x16, 0x54, 0x33, 0xec, 0x3e, 0xbf, 0x20, 0x8d, 0xed, 0x06, + 0x98, 0x21, 0x58, 0xd2, 0x0f, 0xd9, 0x32, 0x44, 0x8c, 0x12, 0x07, 0xfd, 0x0e, 0xbb, 0xe8, 0x3e, + 0xf8, 0x56, 0xe7, 0xe9, 0xc0, 0xf3, 0x00, 0x84, 0xaf, 0xf8, 0x4e, 0x3a, 0x13, 0xd5, 0x49, 0x2b, + 0x72, 0x9d, 0xf4, 0x9b, 0xa4, 0xc3, 0x1c, 0x0e, 0x66, 0xfb, 0xf0, 0xea, 0x21, 0x17, 0xe0, 0x6e, + 0x78, 0xe9, 0xe9, 0xeb, 0xc5, 0x2b, 0x99, 0x5e, 0x2c, 0xed, 0xf5, 0xba, 0x66, 0x1b, 0xcf, 0xa7, + 0x3e, 0x39, 0x96, 0xf9, 0x14, 0xdf, 0x1f, 0xa8, 0x7d, 0xfd, 0xc1, 0x21, 0x2c, 0xe9, 0x9b, 0xc0, + 0x71, 0x5a, 0x44, 0x39, 0x60, 0x2b, 0x47, 0x83, 0xb8, 0xf5, 0x25, 0x8b, 0x51, 0xdb, 0x25, 0x95, + 0x20, 0x10, 0xc2, 0x08, 0x4b, 0x9f, 0xc9, 0x8c, 0xdd, 0xa4, 0x0a, 0x12, 0xc5, 0xd9, 0x04, 0x8e, + 0x64, 0x65, 0xa9, 0xb5, 0xbb, 0xd1, 0xeb, 0x60, 0xed, 0xf8, 0x52, 0x76, 0x1c, 0x23, 0xc2, 0x53, + 0x98, 0xa7, 0xa9, 0x1a, 0xb9, 0xa4, 0x11, 0x16, 0x19, 0xf4, 0x23, 0x2d, 0x74, 0x9f, 0xb7, 0x7a, + 0x8c, 0xfa, 0xa5, 0x6a, 0x37, 0x83, 0xe3, 0x17, 0x8d, 0xf6, 0xa5, 0x6d, 0xc7, 0xde, 0x23, 0xb7, + 0xb6, 0xdb, 0xec, 0xfa, 0xf7, 0xd5, 0x63, 0x7a, 0xff, 0x0b, 0xed, 0x36, 0xdf, 0x74, 0xc8, 0x0d, + 0x33, 0x1d, 0x56, 0x8f, 0x31, 0xe3, 0x41, 0x7b, 0x4c, 0xd0, 0xe9, 0xe4, 0x63, 0x3b, 0x9d, 0xd5, + 0x63, 0x7e, 0xb7, 0xa3, 0x2d, 0x81, 0x42, 0xc7, 0xbc, 0x4c, 0xb6, 0xaa, 0xc9, 0xac, 0x6b, 0x58, + 0xd0, 0xa1, 0x25, 0xf3, 0x32, 0xdd, 0xd8, 0x5e, 0x3d, 0xa6, 0x07, 0x5f, 0x6a, 0x2b, 0x60, 0x9a, + 0x6c, 0x0b, 0x10, 0x32, 0x85, 0x44, 0x01, 0x85, 0x56, 0x8f, 0xe9, 0xe1, 0xb7, 0xd8, 0xfa, 0xc8, + 0x92, 0x73, 0xd7, 0x77, 0xf9, 0xdb, 0xed, 0x99, 0x44, 0xdb, 0xed, 0x58, 0x16, 0x74, 0xc3, 0xfd, + 0x14, 0xc8, 0xb5, 0x89, 0x84, 0x15, 0x26, 0x61, 0xfa, 0xa8, 0xdd, 0x09, 0xb2, 0xbb, 0x86, 0xe3, + 0x4f, 0x9e, 0x6f, 0x1c, 0x4e, 0x77, 0xcd, 0x70, 0x2e, 0x61, 0x04, 0xf1, 0x57, 0x8b, 0x53, 0x20, + 0x47, 0x04, 0x17, 0xfc, 0x81, 0x6f, 0xcb, 0x52, 0x33, 0xa4, 0x6c, 0x5b, 0x78, 0xd8, 0x6f, 0xd9, + 0xfe, 0xe1, 0xf4, 0x5f, 0xcf, 0x8c, 0xc7, 0x82, 0xbc, 0x8a, 0xbb, 0x4e, 0xc5, 0x32, 0x9f, 0xb1, + 0x87, 0xee, 0x41, 0xfb, 0x6c, 0x49, 0x74, 0xd0, 0x2b, 0xed, 0x0c, 0x00, 0x1e, 0x3b, 0xa9, 0x17, + 0x04, 0x31, 0xe5, 0x52, 0xc2, 0xe5, 0x83, 0xdc, 0x70, 0x47, 0x95, 0xdf, 0x1f, 0xc1, 0x74, 0xe9, + 0x17, 0x44, 0xf4, 0x0c, 0xbc, 0x6b, 0x5a, 0x5c, 0x9d, 0xfd, 0xc7, 0x84, 0x9d, 0x52, 0x52, 0xa3, + 0x66, 0x08, 0x7b, 0xe9, 0xf7, 0x4d, 0x6f, 0xc9, 0xd2, 0x1b, 0x25, 0xe8, 0x09, 0xe8, 0xca, 0x7d, + 0xa6, 0x1b, 0xde, 0xdf, 0x0c, 0x7f, 0x7b, 0x2c, 0x4a, 0x33, 0x60, 0xc0, 0x51, 0x07, 0x0e, 0x38, + 0x07, 0x02, 0x04, 0x65, 0x87, 0x04, 0x08, 0xca, 0x25, 0x5b, 0x39, 0xfc, 0x28, 0xaf, 0x3f, 0xeb, + 0xa2, 0xfe, 0xdc, 0x11, 0x01, 0xd0, 0x20, 0xb9, 0x8c, 0xc5, 0xbe, 0x79, 0x57, 0xa0, 0x29, 0x4d, + 0x41, 0x53, 0xee, 0x1a, 0x9d, 0x91, 0xf4, 0xb5, 0xe5, 0xc3, 0x59, 0x70, 0x55, 0xc8, 0x4c, 0x1d, + 0x5d, 0x61, 0x8a, 0xf2, 0x47, 0x63, 0x51, 0x94, 0xe4, 0x8e, 0xce, 0x69, 0x6b, 0xcc, 0xef, 0x48, + 0x9f, 0xdb, 0xef, 0x07, 0x2a, 0x90, 0x4d, 0x84, 0xb2, 0x9c, 0x02, 0x79, 0xda, 0xc3, 0x30, 0x68, + 0xd8, 0x53, 0xc2, 0xee, 0x46, 0xee, 0xb4, 0xbf, 0x2c, 0x6f, 0x13, 0xd0, 0x1f, 0xb6, 0xae, 0xd1, + 0xda, 0x73, 0xac, 0xaa, 0xe5, 0xd9, 0xf0, 0x47, 0xc7, 0xa2, 0x38, 0x81, 0x37, 0x9c, 0x3a, 0x8a, + 0x37, 0xdc, 0x48, 0xab, 0x1c, 0x7e, 0x0d, 0x8e, 0x64, 0x95, 0x23, 0xa2, 0xf0, 0xf4, 0xf1, 0x7b, + 0xa7, 0x0a, 0x4e, 0xb1, 0xc9, 0xd6, 0xa2, 0x68, 0x21, 0xc2, 0x0b, 0xe3, 0x00, 0xf2, 0xa4, 0x6f, + 0x26, 0x31, 0x3f, 0x7a, 0xf2, 0x20, 0x46, 0x29, 0x88, 0xbd, 0x31, 0x54, 0x98, 0x0e, 0xf6, 0x71, + 0x38, 0x16, 0xa4, 0xe4, 0x2e, 0x0a, 0x4d, 0xc0, 0x46, 0xfa, 0x98, 0xbd, 0x58, 0x05, 0x79, 0x1a, + 0x23, 0x01, 0x6e, 0xa4, 0xe2, 0x30, 0x21, 0xde, 0xcf, 0x22, 0xb1, 0x23, 0x47, 0xb9, 0x49, 0x2d, + 0x7e, 0x44, 0x92, 0xbd, 0xb8, 0x81, 0xac, 0x4c, 0xc0, 0x85, 0x50, 0x01, 0x33, 0x4d, 0xe4, 0x95, + 0x0d, 0xc7, 0x31, 0x8d, 0xed, 0x71, 0x79, 0x7c, 0xcb, 0x7a, 0x0f, 0xc3, 0xef, 0x64, 0x64, 0xcf, + 0xb2, 0x07, 0x0b, 0xe1, 0x3e, 0xab, 0x11, 0x51, 0xc0, 0x5f, 0x2f, 0x75, 0x5e, 0x7d, 0x18, 0xb5, + 0x09, 0x78, 0x6c, 0x2b, 0x60, 0xca, 0x8f, 0x83, 0x71, 0xab, 0x10, 0x1b, 0x65, 0xc7, 0xdb, 0xf5, + 0x8f, 0xc1, 0x90, 0xff, 0x07, 0xe3, 0x2f, 0xc0, 0x57, 0x24, 0x74, 0x94, 0x8f, 0x0f, 0xe2, 0x91, + 0xac, 0x8d, 0x25, 0x71, 0x87, 0x3f, 0xaa, 0xb0, 0x1d, 0x1f, 0x9a, 0x62, 0xcb, 0x91, 0x35, 0xc3, + 0x43, 0xf7, 0xc1, 0x2f, 0xa8, 0x60, 0xaa, 0x89, 0x3c, 0x3c, 0xde, 0x62, 0xf6, 0x0f, 0xad, 0xe1, + 0x1a, 0xb7, 0xe2, 0xc1, 0xce, 0xd6, 0x6a, 0x77, 0x83, 0xe9, 0x9e, 0x63, 0xb7, 0x91, 0xeb, 0xb2, + 0xd5, 0x0b, 0xde, 0x51, 0x6d, 0xd0, 0xe8, 0x4f, 0x58, 0x5b, 0x58, 0xf7, 0xbf, 0xd1, 0xc3, 0xcf, + 0x93, 0x9a, 0x01, 0x94, 0x12, 0xab, 0xe0, 0xa4, 0xcd, 0x80, 0xb8, 0xc2, 0xd3, 0x07, 0xfa, 0x0f, + 0x54, 0x30, 0xdb, 0x44, 0x5e, 0x20, 0xc5, 0x04, 0x9b, 0x1c, 0xd1, 0xf0, 0x0a, 0x50, 0xaa, 0x87, + 0x83, 0xf2, 0x9d, 0xd2, 0x17, 0xef, 0x8a, 0xd2, 0x0c, 0x88, 0x8d, 0x05, 0xcf, 0xb7, 0x48, 0xdd, + 0xb7, 0x2b, 0xc7, 0xc1, 0x04, 0x8e, 0xaf, 0x3d, 0x1c, 0x4c, 0x13, 0x5e, 0x48, 0x83, 0xfd, 0x89, + 0x6c, 0xd8, 0x78, 0xbf, 0x98, 0x52, 0xe3, 0x7d, 0x12, 0xc8, 0xed, 0x1a, 0xce, 0x25, 0xff, 0xf0, + 0xed, 0x23, 0xe4, 0x56, 0xbf, 0x5c, 0x9d, 0x7e, 0x35, 0xd8, 0x4f, 0x33, 0x97, 0xcc, 0x4f, 0xf3, + 0xf5, 0x4a, 0xa2, 0x91, 0x90, 0xce, 0x1d, 0xc6, 0xd8, 0xe4, 0x13, 0x8c, 0x9b, 0x31, 0x65, 0xa7, + 0xaf, 0x1c, 0x2f, 0x54, 0x41, 0x01, 0x8f, 0xdb, 0xc4, 0x1e, 0x3f, 0x7f, 0x78, 0x75, 0x18, 0x6c, + 0xe8, 0x27, 0xec, 0x81, 0x7d, 0x89, 0x8c, 0xcf, 0xbc, 0x4f, 0xd0, 0x03, 0xc7, 0x15, 0x9e, 0x3e, + 0x1e, 0xef, 0xa6, 0x78, 0x90, 0xf6, 0x00, 0xdf, 0xa0, 0x02, 0x75, 0x05, 0x79, 0x93, 0xb6, 0x22, + 0xdf, 0x2e, 0x1d, 0x5e, 0x54, 0x10, 0x18, 0xe1, 0x79, 0x61, 0x05, 0x8d, 0xa7, 0x01, 0xc9, 0xc5, + 0x15, 0x95, 0x62, 0x20, 0x7d, 0xd4, 0xde, 0x4f, 0x51, 0xa3, 0x9b, 0x0b, 0x3f, 0x32, 0x86, 0x5e, + 0x75, 0xb2, 0x0b, 0x1f, 0xbe, 0x00, 0x09, 0x8d, 0xa3, 0x6a, 0x6f, 0x83, 0x0a, 0x4f, 0x1f, 0xb9, + 0x97, 0xaa, 0xe4, 0x12, 0xb3, 0xf2, 0x0e, 0x6a, 0x5f, 0x42, 0x1d, 0xfe, 0xb2, 0xec, 0x51, 0xa1, + 0x3b, 0x0d, 0xa6, 0xda, 0x94, 0x1a, 0x01, 0xaf, 0xa0, 0xfb, 0x8f, 0xe2, 0xcd, 0x42, 0xb1, 0x77, + 0x67, 0x89, 0x1d, 0x11, 0xfd, 0x7c, 0x2c, 0xb8, 0xc8, 0x5d, 0x78, 0x25, 0x51, 0xfc, 0x04, 0xcc, + 0x16, 0x3a, 0xcb, 0xa8, 0xb6, 0x6d, 0x0b, 0xfe, 0xf7, 0xc3, 0xc3, 0x72, 0x2d, 0x98, 0x36, 0xdb, + 0xb6, 0x45, 0x42, 0xc0, 0xf9, 0x87, 0x80, 0x82, 0x04, 0xff, 0x6d, 0x65, 0xd7, 0xbe, 0xd7, 0x64, + 0xbb, 0xe6, 0x61, 0xc2, 0xa8, 0xc6, 0x04, 0x66, 0xfd, 0xa8, 0x8c, 0x89, 0x01, 0x65, 0xa7, 0x0f, + 0xd9, 0xa7, 0x42, 0xef, 0x36, 0xda, 0x15, 0x3e, 0x20, 0x56, 0x81, 0x47, 0x19, 0xce, 0xf8, 0x5a, + 0x1c, 0xc9, 0x70, 0x16, 0xc3, 0xc0, 0x04, 0x6e, 0x22, 0x0c, 0x71, 0x4c, 0x7d, 0x0d, 0xf8, 0x10, + 0xe8, 0x8c, 0xcf, 0x3c, 0x1c, 0x11, 0x9d, 0xa3, 0x31, 0x11, 0x3f, 0xc2, 0xc2, 0xd3, 0x33, 0x8b, + 0x07, 0xfe, 0x8f, 0x71, 0x80, 0x73, 0xc7, 0x28, 0xfe, 0x0a, 0xd4, 0x5b, 0x01, 0xbe, 0x55, 0x91, + 0x0d, 0x81, 0x72, 0x40, 0x82, 0x98, 0xca, 0x58, 0x10, 0x7c, 0x93, 0x54, 0x6c, 0x12, 0x99, 0xf2, + 0xd3, 0x07, 0xf0, 0x05, 0x2a, 0x98, 0x27, 0x3e, 0x02, 0x5d, 0x64, 0x38, 0xb4, 0xa3, 0x1c, 0x8b, + 0xa3, 0xfc, 0xbb, 0xa5, 0x03, 0xfc, 0x88, 0x72, 0x08, 0xf9, 0x18, 0x0b, 0x14, 0x72, 0xd1, 0x7d, + 0x24, 0x59, 0x98, 0xc8, 0x36, 0x4a, 0x31, 0x60, 0x81, 0xa9, 0xf8, 0x78, 0xf0, 0x48, 0xe8, 0x91, + 0x2b, 0x0a, 0xc3, 0x6f, 0x6c, 0x13, 0xf6, 0xc8, 0x95, 0x61, 0x22, 0x7d, 0x4c, 0xde, 0xf0, 0x68, + 0xb6, 0xe0, 0xdc, 0x32, 0x2e, 0x76, 0x11, 0x7c, 0x55, 0x36, 0x38, 0xd1, 0xf6, 0x07, 0x63, 0xf1, + 0xc0, 0x3c, 0xc4, 0x65, 0x54, 0x1a, 0xc8, 0x3a, 0xf6, 0x15, 0xba, 0xb4, 0x35, 0xa7, 0x93, 0xff, + 0x34, 0x9e, 0x65, 0x77, 0x6f, 0xd7, 0xa2, 0x27, 0x43, 0xe7, 0x74, 0xff, 0x51, 0xbb, 0x01, 0xcc, + 0x5d, 0x31, 0xbd, 0x9d, 0x55, 0x64, 0x74, 0x90, 0xa3, 0xdb, 0x57, 0x88, 0xc7, 0x5c, 0x41, 0x17, + 0x13, 0x45, 0xff, 0x15, 0x09, 0xfb, 0x12, 0x0b, 0x65, 0x32, 0xc7, 0xdf, 0x92, 0x58, 0x9e, 0xd1, + 0x5c, 0xa5, 0xaf, 0x30, 0x1f, 0x50, 0xc1, 0xb4, 0x6e, 0x5f, 0x61, 0x4a, 0xf2, 0xff, 0x1c, 0xad, + 0x8e, 0x24, 0x9e, 0xe8, 0x11, 0xc9, 0x05, 0xec, 0x4f, 0x7c, 0xa2, 0x17, 0x5b, 0xfc, 0x44, 0x4e, + 0x2e, 0xcd, 0xea, 0xf6, 0x95, 0x26, 0xf2, 0x68, 0x8b, 0x80, 0x9b, 0x63, 0x72, 0xb2, 0x36, 0x5d, + 0x4a, 0x90, 0xcd, 0xc3, 0x83, 0xe7, 0xa4, 0xbb, 0x08, 0x81, 0x80, 0x02, 0x16, 0x27, 0xbd, 0x8b, + 0x30, 0x94, 0x83, 0x09, 0xc4, 0x48, 0x51, 0xc1, 0x8c, 0x6e, 0x5f, 0xc1, 0x43, 0xc3, 0xb2, 0xd9, + 0xed, 0x8e, 0x67, 0x84, 0x4c, 0x6a, 0xfc, 0xfb, 0x62, 0xf0, 0xb9, 0x98, 0xb8, 0xf1, 0x3f, 0x84, + 0x81, 0xf4, 0x61, 0x78, 0x1e, 0x6d, 0x2c, 0xfe, 0x08, 0x6d, 0x8d, 0x07, 0x87, 0x51, 0x1b, 0x44, + 0xc0, 0xc6, 0x91, 0x35, 0x88, 0x28, 0x0e, 0x26, 0xb2, 0x73, 0x32, 0x5f, 0x26, 0xc3, 0xfc, 0x78, + 0xdb, 0xc4, 0x7b, 0x93, 0xb9, 0x26, 0xb2, 0x61, 0x57, 0x60, 0x64, 0x2c, 0x68, 0x24, 0x70, 0x41, + 0x94, 0xe0, 0x21, 0x7d, 0x3c, 0x3e, 0xae, 0x82, 0x59, 0xca, 0xc2, 0x03, 0xc4, 0x0a, 0x18, 0xa9, + 0x51, 0xf1, 0x35, 0x38, 0x9a, 0x46, 0x15, 0xc3, 0xc1, 0x44, 0xee, 0xf3, 0xc7, 0x76, 0xdc, 0x08, + 0xc7, 0xc7, 0xa3, 0x10, 0x1c, 0xd9, 0x18, 0x1b, 0xe3, 0x11, 0xf2, 0x51, 0x8c, 0xb1, 0x23, 0x3a, + 0x46, 0xfe, 0xbc, 0xa0, 0x15, 0x8d, 0x13, 0x83, 0x43, 0x34, 0x85, 0x31, 0xc2, 0x30, 0x62, 0x53, + 0x38, 0x22, 0x24, 0xbe, 0xae, 0x02, 0x40, 0x19, 0x58, 0xb3, 0x2f, 0x93, 0x8b, 0x34, 0xc7, 0xd0, + 0x9d, 0xf5, 0xbb, 0xd5, 0xab, 0x43, 0xdc, 0xea, 0x13, 0x86, 0x70, 0x49, 0xba, 0x12, 0xc8, 0x49, + 0x19, 0x57, 0x72, 0xe2, 0x2b, 0x81, 0xf1, 0xe5, 0xa7, 0x8f, 0xf1, 0x57, 0xa9, 0x35, 0x17, 0x1e, + 0x30, 0xfd, 0xf9, 0xb1, 0xa0, 0xcc, 0xcd, 0xfe, 0x55, 0x71, 0xf6, 0x7f, 0x08, 0x6c, 0x47, 0xb5, + 0x11, 0x87, 0x1d, 0x1c, 0x4d, 0xdf, 0x46, 0x3c, 0xba, 0x03, 0xa2, 0x3f, 0x92, 0x05, 0xc7, 0x59, + 0x27, 0xf2, 0xfd, 0x00, 0x71, 0xc2, 0x73, 0x78, 0x42, 0x27, 0x39, 0x04, 0xe5, 0x71, 0x2d, 0x48, + 0x25, 0x59, 0xca, 0x94, 0x60, 0x6f, 0x22, 0xab, 0x1b, 0xf9, 0xca, 0x7d, 0x3d, 0xc3, 0xea, 0xc8, + 0x87, 0xfb, 0x1d, 0x02, 0xbc, 0xbf, 0xd6, 0xa8, 0x8a, 0x6b, 0x8d, 0x03, 0x56, 0x26, 0x13, 0xef, + 0x5c, 0x13, 0x91, 0x51, 0x76, 0x27, 0xbe, 0x73, 0x1d, 0x5d, 0x76, 0xfa, 0x28, 0xbd, 0x57, 0x05, + 0xd9, 0xa6, 0xed, 0x78, 0xf0, 0xfe, 0x24, 0xad, 0x93, 0x4a, 0x3e, 0x04, 0xc9, 0x7f, 0xd6, 0xca, + 0x20, 0x8b, 0x2b, 0xc7, 0x66, 0x0c, 0xb7, 0xc6, 0x1f, 0x75, 0x36, 0x3c, 0x83, 0x78, 0x75, 0xe3, + 0xf2, 0x17, 0x5a, 0xfb, 0x3d, 0xa4, 0x93, 0x8f, 0x93, 0xc6, 0xd3, 0xa1, 0xf2, 0x6b, 0x46, 0x1f, + 0xc0, 0x48, 0x2d, 0x9e, 0x4e, 0x64, 0xc9, 0xe9, 0xe3, 0xf6, 0xda, 0xe3, 0xcc, 0xb7, 0x75, 0xd9, + 0xec, 0x22, 0x78, 0x3f, 0x75, 0x19, 0xa9, 0x1b, 0xbb, 0x48, 0xfe, 0x48, 0x4c, 0xac, 0x6b, 0x2b, + 0x89, 0x2f, 0xab, 0x86, 0xf1, 0x65, 0x93, 0x36, 0x28, 0x7a, 0x00, 0x9d, 0xb2, 0x34, 0xe9, 0x06, + 0x15, 0x53, 0xf6, 0x44, 0xe2, 0x74, 0x9e, 0x68, 0x22, 0x8f, 0x1a, 0x95, 0x0d, 0xff, 0x8a, 0xa4, + 0xa7, 0x8f, 0x25, 0x62, 0x67, 0x70, 0xa1, 0x8e, 0xda, 0x77, 0x03, 0xd3, 0x07, 0x78, 0x70, 0xd6, + 0x44, 0x70, 0x7e, 0x28, 0x5a, 0x40, 0x22, 0x93, 0x63, 0x81, 0xe9, 0xed, 0x01, 0x4c, 0xeb, 0x02, + 0x4c, 0x77, 0x8e, 0xc8, 0x45, 0xfa, 0x80, 0xfd, 0x54, 0x0e, 0x1c, 0xa7, 0x93, 0xfe, 0x92, 0xd5, + 0x61, 0x11, 0x56, 0xdf, 0xac, 0x1c, 0xf1, 0x66, 0xdb, 0xc1, 0x10, 0xac, 0x42, 0x2c, 0xe7, 0x5c, + 0x5f, 0x2c, 0x67, 0x6d, 0x91, 0x86, 0x73, 0xc5, 0x9d, 0x28, 0xd9, 0x69, 0x1b, 0x16, 0x66, 0x82, + 0xc8, 0x9e, 0x74, 0xb9, 0xc1, 0x77, 0xe2, 0x3d, 0xa2, 0x53, 0xf2, 0xf7, 0x88, 0xfe, 0x5e, 0xb2, + 0x75, 0x3b, 0x52, 0x74, 0x9f, 0xc0, 0x53, 0xb6, 0x9d, 0x12, 0xac, 0xe8, 0x49, 0x70, 0xf7, 0x9f, + 0xc3, 0x9d, 0x2c, 0x8c, 0x20, 0x32, 0xa2, 0x3b, 0x19, 0x21, 0x70, 0x94, 0xee, 0x64, 0xc3, 0x18, + 0x48, 0x1f, 0xc7, 0xdf, 0xcb, 0xb1, 0xdd, 0x7c, 0xd2, 0x6e, 0xe0, 0x57, 0x94, 0xd4, 0x47, 0xe9, + 0xef, 0x66, 0x12, 0xf9, 0x3f, 0x13, 0xbe, 0xe2, 0x87, 0xe9, 0x24, 0x1e, 0xcd, 0x71, 0xe4, 0x26, + 0xb0, 0x6e, 0xa4, 0x10, 0x5f, 0xf4, 0xf3, 0x66, 0xc7, 0xdb, 0x19, 0xd3, 0x89, 0x8e, 0x2b, 0x98, + 0x16, 0x8b, 0x57, 0x4f, 0x1f, 0xe0, 0xbf, 0x66, 0x12, 0x85, 0x90, 0x0a, 0x44, 0x42, 0xd8, 0x8a, + 0x10, 0x71, 0x82, 0xc0, 0x4f, 0xb1, 0xf4, 0x26, 0xa8, 0xd1, 0xe7, 0xcc, 0x0e, 0xb2, 0x1f, 0x80, + 0x1a, 0x4d, 0xf8, 0x1a, 0x9f, 0x46, 0xc7, 0x91, 0xfb, 0x4f, 0xaa, 0xd1, 0x81, 0x48, 0xc6, 0xa4, + 0xd1, 0xb1, 0xf4, 0xd2, 0x97, 0xf1, 0x2b, 0x66, 0xd9, 0x44, 0xaa, 0x66, 0x5a, 0x97, 0xe0, 0x3f, + 0xe5, 0x41, 0xd1, 0x8f, 0x23, 0xec, 0xed, 0xb0, 0x58, 0x30, 0x1f, 0x96, 0xbe, 0x1b, 0x65, 0x84, + 0x78, 0x2f, 0x62, 0x38, 0xa9, 0xdc, 0x81, 0x70, 0x52, 0x25, 0x30, 0x67, 0x5a, 0x1e, 0x72, 0x2c, + 0xa3, 0xbb, 0xdc, 0x35, 0xb6, 0xdd, 0xd3, 0x53, 0x03, 0x2f, 0xaf, 0xab, 0x72, 0x79, 0x74, 0xf1, + 0x0b, 0xfe, 0x02, 0xd1, 0x82, 0x78, 0x81, 0x68, 0x44, 0xf4, 0xab, 0xe9, 0xe8, 0xe8, 0x57, 0x41, + 0x74, 0x2b, 0x30, 0x3c, 0x38, 0xb6, 0xac, 0x6d, 0x9c, 0x30, 0xdc, 0xdf, 0xad, 0x92, 0x51, 0xd8, + 0x82, 0xd0, 0x8f, 0xaf, 0x56, 0x13, 0xad, 0xee, 0x61, 0x45, 0x58, 0xe8, 0x57, 0x82, 0xc4, 0x16, + 0x2a, 0x5f, 0x79, 0xb5, 0xaf, 0xf2, 0x81, 0xc9, 0x93, 0x95, 0x30, 0x79, 0x78, 0xa5, 0xca, 0xc9, + 0xde, 0xe9, 0x2a, 0xbf, 0x58, 0x28, 0x53, 0xdb, 0x09, 0x9c, 0x46, 0xca, 0x81, 0x13, 0x7e, 0xb4, + 0xdb, 0x5e, 0x0f, 0x19, 0x8e, 0x61, 0xb5, 0x11, 0xfc, 0x94, 0x32, 0x0e, 0xb3, 0x77, 0x19, 0x14, + 0xcc, 0xb6, 0x6d, 0x35, 0xcd, 0x67, 0xfa, 0x97, 0xcb, 0xc5, 0x07, 0x59, 0x27, 0x12, 0xa9, 0xb2, + 0x2f, 0xf4, 0xe0, 0x5b, 0xad, 0x0a, 0xa6, 0xdb, 0x86, 0xd3, 0xa1, 0x41, 0xf8, 0x72, 0x7d, 0x17, + 0x39, 0x45, 0x12, 0x2a, 0xfb, 0x9f, 0xe8, 0xe1, 0xd7, 0x5a, 0x43, 0x14, 0x62, 0xbe, 0x2f, 0x9a, + 0x47, 0x24, 0xb1, 0xa5, 0xf0, 0x23, 0x41, 0xe6, 0x58, 0x3a, 0x0e, 0xea, 0x1a, 0xf4, 0xd2, 0xf1, + 0x29, 0x7a, 0x47, 0x74, 0x90, 0x90, 0x74, 0x79, 0x80, 0x14, 0x75, 0x00, 0x8d, 0x49, 0x2f, 0x0f, + 0x48, 0x71, 0x91, 0xbe, 0x66, 0xbe, 0x2b, 0x0f, 0xe6, 0x68, 0xaf, 0xc6, 0xc4, 0x09, 0x5f, 0xa0, + 0x82, 0x7c, 0x13, 0x79, 0xf7, 0xa0, 0x7d, 0xd8, 0x3c, 0xfc, 0x98, 0x5c, 0x04, 0xea, 0xa5, 0x20, + 0xe0, 0x20, 0xfe, 0x9b, 0x74, 0xdf, 0xde, 0xe7, 0x6b, 0x81, 0xf2, 0x34, 0xe9, 0x7d, 0xfb, 0xf8, + 0xe2, 0xd3, 0xc7, 0xe7, 0xa7, 0x55, 0xa0, 0x96, 0x3a, 0x1d, 0xd8, 0x3e, 0x3c, 0x14, 0xd7, 0x81, + 0x19, 0xbf, 0xcd, 0x84, 0x31, 0x20, 0xf9, 0xa4, 0xa4, 0x8b, 0xa0, 0x81, 0x6c, 0x4a, 0x9d, 0x89, + 0xef, 0x2a, 0xc4, 0x94, 0x9d, 0x3e, 0x28, 0x5f, 0x9c, 0x62, 0x8d, 0x66, 0xd1, 0xb6, 0x2f, 0x91, + 0xa3, 0x32, 0xbf, 0xac, 0x82, 0xdc, 0x32, 0xf2, 0xda, 0x3b, 0xd0, 0x1d, 0x4b, 0x9b, 0xe9, 0xbb, + 0xf7, 0x7c, 0x48, 0x50, 0xce, 0xa4, 0xd1, 0x9f, 0x7d, 0xb6, 0x17, 0x08, 0xcb, 0x93, 0x8e, 0xfe, + 0x1c, 0x5b, 0xfa, 0x04, 0x0e, 0xc1, 0x65, 0xc1, 0x7c, 0xb0, 0x02, 0x46, 0x31, 0x7b, 0x47, 0xe6, + 0x01, 0xb7, 0x1e, 0x3a, 0xc4, 0x6e, 0x86, 0x7f, 0x94, 0x2c, 0xc4, 0x5a, 0x20, 0x73, 0xb1, 0xe6, + 0x29, 0x2f, 0x4c, 0x26, 0x08, 0xbe, 0x26, 0xc7, 0xe0, 0x04, 0x56, 0x00, 0x54, 0x50, 0x20, 0x0c, + 0x2d, 0x99, 0x97, 0x89, 0xeb, 0xa1, 0xb0, 0x50, 0xf9, 0xac, 0xb1, 0x2c, 0x54, 0xde, 0x29, 0x2e, + 0x54, 0x4a, 0x46, 0x4c, 0xf6, 0xd7, 0x29, 0x13, 0xfa, 0xe2, 0xe0, 0xef, 0xc7, 0xbe, 0x4c, 0x99, + 0xc0, 0x17, 0x67, 0x48, 0xf9, 0xe9, 0x23, 0xfa, 0xc6, 0xff, 0xca, 0x3a, 0x6b, 0x7f, 0x43, 0x16, + 0xfe, 0xcf, 0x13, 0x20, 0x7b, 0x0e, 0xff, 0xf9, 0xc7, 0xf0, 0x46, 0xad, 0x97, 0x8d, 0x21, 0xb8, + 0xc3, 0x93, 0x41, 0x16, 0xd3, 0x67, 0xd3, 0x9e, 0x9b, 0xe5, 0x76, 0x87, 0x31, 0x23, 0x3a, 0xf9, + 0x4e, 0x3b, 0x05, 0xf2, 0xae, 0xbd, 0xe7, 0xb4, 0xb1, 0xf9, 0x8d, 0x35, 0x86, 0x3d, 0x25, 0x0d, + 0x6a, 0x2a, 0x90, 0x5e, 0x18, 0x9f, 0xcb, 0x29, 0x77, 0xc1, 0x92, 0x2a, 0x5c, 0xb0, 0x94, 0x60, + 0xff, 0x41, 0x82, 0xb7, 0xf4, 0x35, 0xe2, 0x2b, 0xe4, 0xae, 0xc1, 0xce, 0xb8, 0x60, 0x8f, 0x10, + 0xcb, 0x61, 0xd5, 0x21, 0xa9, 0xc3, 0xb8, 0x28, 0xda, 0x20, 0x8e, 0xfc, 0x44, 0x1d, 0xc6, 0x25, + 0x78, 0x98, 0xc8, 0x29, 0xf7, 0x3c, 0x73, 0x72, 0xbd, 0x30, 0x4e, 0x74, 0xb3, 0x82, 0xd2, 0x1f, + 0x0a, 0x9d, 0x31, 0x3a, 0xbf, 0x8e, 0x8c, 0xce, 0x11, 0xb9, 0xbf, 0xfe, 0x86, 0x4a, 0x22, 0x69, + 0xfa, 0x46, 0x90, 0xfc, 0x45, 0x49, 0x89, 0x21, 0xc2, 0x63, 0xb0, 0x10, 0x47, 0x7a, 0x6e, 0xf4, + 0xd0, 0xe2, 0xa2, 0xe8, 0x38, 0xfe, 0x27, 0x1d, 0x5a, 0x5c, 0x96, 0x91, 0xf4, 0x81, 0xfc, 0x25, + 0x7a, 0x31, 0x59, 0xa9, 0xed, 0x99, 0x97, 0xc7, 0xdc, 0xd2, 0xc4, 0xe1, 0x25, 0x61, 0x34, 0xe1, + 0x03, 0x12, 0xa2, 0x1c, 0x4e, 0x3a, 0x9a, 0xb0, 0x1c, 0x1b, 0xe9, 0xc3, 0xf4, 0x93, 0x00, 0x4b, + 0x8f, 0xad, 0xed, 0xbc, 0x41, 0x05, 0x6a, 0x13, 0x79, 0x10, 0x1d, 0x1e, 0xad, 0xb3, 0x60, 0x96, + 0x5b, 0x3a, 0xf0, 0x2f, 0xbc, 0x11, 0xd2, 0x92, 0x1e, 0x94, 0x0f, 0x44, 0xc6, 0x2f, 0xba, 0x4c, + 0xfa, 0xa0, 0xbc, 0x0c, 0x13, 0x13, 0x38, 0x28, 0xcf, 0x96, 0x7d, 0xbe, 0x5f, 0x80, 0x1a, 0xd7, + 0x0a, 0xd0, 0xa1, 0x80, 0x3a, 0x8a, 0xa5, 0xa0, 0xb7, 0x87, 0xc6, 0xc6, 0x84, 0xb0, 0xfa, 0x30, + 0x8f, 0x55, 0x43, 0xc4, 0xea, 0x76, 0x19, 0x31, 0xc9, 0x19, 0x1f, 0x52, 0x13, 0xfc, 0x77, 0x06, + 0x70, 0xe9, 0x02, 0x5c, 0x4f, 0x1e, 0x99, 0x8f, 0xf4, 0x11, 0xfb, 0x05, 0x3a, 0x6e, 0x35, 0xe9, + 0xdc, 0x6a, 0x3c, 0xe3, 0x16, 0x9b, 0xb6, 0xa9, 0xc2, 0xb4, 0x2d, 0xe1, 0xc1, 0x8a, 0xd0, 0x5f, + 0xd8, 0x67, 0x6e, 0x18, 0x44, 0xd9, 0x31, 0x1f, 0xac, 0x18, 0xca, 0x41, 0xfa, 0xe0, 0x7c, 0x4b, + 0x05, 0x60, 0xc5, 0xb1, 0xf7, 0x7a, 0x0d, 0xa7, 0x83, 0x1c, 0xf8, 0x67, 0xe1, 0x4c, 0xed, 0x67, + 0xc6, 0x30, 0x53, 0x5b, 0x07, 0x60, 0x3b, 0x20, 0xce, 0x34, 0xfc, 0xd1, 0x72, 0xf3, 0xb2, 0x90, + 0x29, 0x9d, 0xa3, 0x21, 0xde, 0x2d, 0xfc, 0x54, 0x11, 0xe3, 0xb8, 0x3e, 0x2b, 0x24, 0x37, 0xce, + 0x99, 0xda, 0xbb, 0x03, 0xac, 0x5b, 0x02, 0xd6, 0x4f, 0x39, 0x04, 0x27, 0xe9, 0x63, 0xfe, 0x0f, + 0x53, 0x60, 0x86, 0xee, 0xcb, 0x52, 0x99, 0xfe, 0x75, 0x08, 0xfa, 0xcf, 0x8f, 0x01, 0xf4, 0x0d, + 0x30, 0x6b, 0x87, 0xd4, 0x69, 0x9f, 0xca, 0xaf, 0x94, 0xc5, 0xc2, 0xce, 0xf1, 0xa5, 0x0b, 0x64, + 0xe0, 0x27, 0x78, 0xe4, 0x75, 0x11, 0xf9, 0x3b, 0x63, 0xe4, 0xcd, 0x51, 0x1c, 0x27, 0xf4, 0xef, + 0x09, 0xa0, 0xdf, 0x10, 0xa0, 0x2f, 0x1d, 0x86, 0x95, 0x09, 0xdc, 0xab, 0xa0, 0x82, 0x2c, 0x39, + 0x06, 0xf9, 0x96, 0x14, 0x17, 0x62, 0x4e, 0x83, 0x29, 0xd2, 0x64, 0x83, 0x09, 0xa2, 0xff, 0x88, + 0xdf, 0x18, 0x5b, 0x1e, 0x72, 0x82, 0x25, 0x76, 0xff, 0x11, 0xf3, 0xe0, 0xbb, 0x9f, 0xbb, 0xa7, + 0xf3, 0x74, 0xc7, 0x39, 0x48, 0x18, 0x79, 0xf6, 0xc8, 0x4b, 0x7c, 0x6c, 0x07, 0x23, 0x47, 0x99, + 0x3d, 0x0e, 0x61, 0x24, 0x7d, 0xe0, 0xbf, 0x94, 0x05, 0xa7, 0xe9, 0xf2, 0xdf, 0xb2, 0x63, 0xef, + 0xf6, 0x5d, 0x63, 0x66, 0x1e, 0x5e, 0x17, 0x6e, 0x04, 0xf3, 0x9e, 0xe0, 0x78, 0xcf, 0x74, 0xa2, + 0x2f, 0x15, 0xfe, 0x3e, 0xef, 0x3c, 0xf3, 0x34, 0x11, 0xc9, 0xc5, 0x18, 0x01, 0x46, 0xf1, 0x9e, + 0x78, 0x47, 0x45, 0x92, 0x51, 0x6e, 0x35, 0x51, 0x1d, 0x69, 0x71, 0x39, 0xd0, 0xa9, 0x9c, 0x8c, + 0x4e, 0x7d, 0x30, 0xd0, 0xa9, 0xff, 0x22, 0xe8, 0xd4, 0xca, 0xe1, 0x45, 0x32, 0x81, 0x25, 0xa6, + 0x79, 0x90, 0x5f, 0x36, 0xbb, 0x1e, 0x72, 0xe0, 0x57, 0xd9, 0x3c, 0xea, 0x55, 0x29, 0x76, 0x2f, + 0x4b, 0x20, 0xbf, 0x45, 0x4a, 0x63, 0x06, 0xd9, 0x2d, 0x72, 0xd8, 0x50, 0x0e, 0x75, 0xf6, 0x6d, + 0xd2, 0x20, 0x7f, 0x7d, 0x64, 0xc6, 0x36, 0x01, 0x4b, 0x10, 0xe4, 0x6f, 0x38, 0x0b, 0x13, 0xb9, + 0xdf, 0x2a, 0xaf, 0xa3, 0x5d, 0x3c, 0x82, 0x5c, 0x4a, 0x0f, 0xe1, 0x22, 0x50, 0xcd, 0x8e, 0x4b, + 0x9a, 0xde, 0xb4, 0x8e, 0xff, 0x26, 0x75, 0x39, 0xea, 0x17, 0x15, 0x65, 0x79, 0xd2, 0x2e, 0x47, + 0x52, 0x5c, 0xa4, 0x8f, 0xd9, 0x77, 0x89, 0xbf, 0x69, 0xaf, 0x6b, 0xb4, 0x11, 0xe6, 0x3e, 0x35, + 0xd4, 0xe6, 0x81, 0x62, 0xfa, 0x23, 0xbe, 0x62, 0xf2, 0xed, 0x34, 0x77, 0x88, 0x76, 0x3a, 0xea, + 0x6a, 0x64, 0x20, 0x73, 0x52, 0xf1, 0x23, 0x5b, 0x8d, 0x8c, 0x65, 0x63, 0x02, 0xb7, 0x97, 0xfa, + 0xe7, 0x71, 0x27, 0xda, 0x5a, 0x47, 0xdd, 0xab, 0x61, 0xc2, 0x1a, 0xdb, 0xd9, 0xdb, 0x51, 0xf6, + 0x6a, 0xa2, 0x79, 0x98, 0x00, 0x5a, 0xf3, 0x0c, 0xad, 0xcf, 0xb3, 0x61, 0x34, 0xe5, 0xed, 0x52, + 0xd7, 0x76, 0xbc, 0x64, 0xdb, 0xa5, 0x98, 0x3b, 0x9d, 0x7c, 0x97, 0xf4, 0xfc, 0x96, 0x78, 0x3c, + 0x7b, 0x5c, 0xc3, 0x67, 0x82, 0xf3, 0x5b, 0xc3, 0x18, 0x48, 0x1f, 0xde, 0xb7, 0x1e, 0xd1, 0xe0, + 0x39, 0x6a, 0x73, 0x64, 0x6d, 0x60, 0x6c, 0x43, 0xe7, 0x28, 0xcd, 0x31, 0x9a, 0x87, 0xf4, 0xf1, + 0xfa, 0x7b, 0x6e, 0xe0, 0x7c, 0xd3, 0x04, 0x07, 0x4e, 0xbf, 0x65, 0xe6, 0x46, 0x6c, 0x99, 0xa3, + 0xee, 0x2e, 0x30, 0x59, 0x8f, 0x6f, 0xc0, 0x1c, 0x65, 0x77, 0x21, 0x86, 0x89, 0xf4, 0x11, 0x7f, + 0xb3, 0x0a, 0x72, 0xcd, 0xc9, 0x8f, 0x97, 0xa3, 0xce, 0x45, 0x88, 0xac, 0x9a, 0x63, 0x1b, 0x2e, + 0x47, 0x99, 0x8b, 0x44, 0xb2, 0x30, 0x81, 0xf8, 0xfd, 0xc7, 0xc1, 0x2c, 0x99, 0x70, 0xfb, 0xbb, + 0xad, 0x7f, 0xcf, 0x46, 0xcd, 0xd7, 0xa7, 0xd8, 0x56, 0xef, 0x06, 0x05, 0x7f, 0x77, 0x88, 0x8d, + 0x9c, 0x0b, 0x72, 0xed, 0xd3, 0xe7, 0x52, 0x0f, 0xbe, 0x3f, 0x94, 0x4f, 0xc4, 0xd8, 0x77, 0x02, + 0x47, 0xf5, 0x89, 0x38, 0xd2, 0xdd, 0xc0, 0xdf, 0x0b, 0x47, 0xd4, 0xff, 0x9e, 0x1e, 0xe6, 0xfd, + 0xbb, 0x84, 0xd9, 0x01, 0xbb, 0x84, 0x9f, 0xe2, 0xb1, 0x6c, 0x8a, 0x58, 0x3e, 0x49, 0x56, 0x84, + 0x63, 0x1c, 0x6b, 0xdf, 0x1b, 0xc0, 0x79, 0x4e, 0x80, 0x73, 0xf1, 0x50, 0xbc, 0x4c, 0xe0, 0xfc, + 0x64, 0x36, 0x1c, 0x73, 0x3f, 0x9d, 0x62, 0x3b, 0xee, 0x3b, 0x9c, 0x91, 0x3d, 0x70, 0x38, 0x43, + 0x68, 0xe9, 0xb9, 0x43, 0xb6, 0xf4, 0x4f, 0xf3, 0xda, 0xd1, 0x12, 0xb5, 0xe3, 0xc9, 0xf2, 0x88, + 0x8c, 0x6f, 0x64, 0x7e, 0x5f, 0xa0, 0x1e, 0xe7, 0x05, 0xf5, 0x28, 0x1f, 0x8e, 0x99, 0xf4, 0xf5, + 0xe3, 0x37, 0xfd, 0x09, 0xed, 0x11, 0xb7, 0xf7, 0x51, 0x37, 0x22, 0x05, 0x21, 0x8e, 0x6d, 0xe4, + 0x1e, 0x65, 0x23, 0x72, 0x18, 0x27, 0x13, 0x08, 0xe9, 0x36, 0x07, 0x66, 0x08, 0x4f, 0xe7, 0xcd, + 0xce, 0x36, 0xf2, 0xe0, 0xab, 0xa9, 0xab, 0xa2, 0x1f, 0x40, 0x73, 0x4c, 0x51, 0x8e, 0xa2, 0x8e, + 0xcd, 0x26, 0xf5, 0x17, 0xa0, 0x4c, 0x2e, 0x70, 0x0c, 0x4e, 0x3a, 0x10, 0xe3, 0x50, 0x0e, 0xd2, + 0x87, 0xec, 0x13, 0xd4, 0x99, 0xa3, 0x66, 0xec, 0xdb, 0x7b, 0x1e, 0x7c, 0xce, 0x18, 0x3a, 0xe8, + 0x45, 0x90, 0xef, 0x12, 0x6a, 0xec, 0x74, 0x46, 0xfc, 0x74, 0x87, 0x89, 0x80, 0x96, 0xaf, 0xb3, + 0x2f, 0x93, 0x1e, 0xd1, 0x08, 0xe5, 0x48, 0xe9, 0x4c, 0xfa, 0x88, 0xc6, 0x90, 0xf2, 0x27, 0x72, + 0x55, 0x4f, 0x01, 0x97, 0x6e, 0xee, 0x9a, 0xde, 0x98, 0x02, 0x41, 0x74, 0x31, 0x2d, 0x3f, 0x10, + 0x04, 0x79, 0x48, 0x7a, 0xf0, 0x94, 0x93, 0x0a, 0xfe, 0x7c, 0xd2, 0x07, 0x4f, 0xe3, 0x8b, 0x4f, + 0x1f, 0x93, 0x9f, 0xa3, 0x2d, 0xeb, 0x1c, 0xf5, 0xc1, 0x4d, 0xd1, 0xbd, 0x77, 0xe4, 0xc6, 0x42, + 0x59, 0x3b, 0xba, 0xc6, 0x32, 0xb0, 0xfc, 0xf4, 0x81, 0xf9, 0xe5, 0x1f, 0x00, 0xb9, 0x25, 0x74, + 0x71, 0x6f, 0x1b, 0xde, 0x09, 0x0a, 0x2d, 0x07, 0xa1, 0xaa, 0xb5, 0x65, 0x63, 0xe9, 0x7a, 0xf8, + 0xbf, 0x0f, 0x09, 0x7b, 0xc2, 0x78, 0xec, 0x20, 0xa3, 0x13, 0x1e, 0x43, 0xf3, 0x1f, 0xe1, 0xcb, + 0x14, 0x90, 0x6d, 0x7a, 0x86, 0x07, 0xa7, 0x03, 0x6c, 0xe1, 0x73, 0x78, 0x2c, 0xee, 0x14, 0xb1, + 0xb8, 0x51, 0x90, 0x05, 0xe1, 0x60, 0x01, 0x7f, 0x1f, 0x01, 0x00, 0x04, 0x85, 0x7b, 0x5d, 0xdb, + 0xc2, 0x39, 0xfc, 0x93, 0x92, 0xfe, 0x33, 0x7c, 0x65, 0x20, 0xee, 0xbb, 0x04, 0x71, 0x3f, 0x52, + 0xae, 0x88, 0x09, 0xac, 0xb4, 0x29, 0x60, 0x1a, 0x8b, 0x76, 0x15, 0x19, 0x1d, 0x17, 0x3e, 0x2c, + 0x54, 0xfe, 0x08, 0x31, 0xc3, 0x8f, 0x48, 0xc7, 0xf4, 0xa4, 0xb5, 0x0a, 0x88, 0x47, 0xfb, 0x0b, + 0xf8, 0x31, 0x4d, 0x14, 0x31, 0xa6, 0xc9, 0xad, 0x20, 0x6b, 0x5a, 0x5b, 0x36, 0xf3, 0x5e, 0x7b, + 0x70, 0x04, 0x6d, 0xac, 0x13, 0x3a, 0xc9, 0x28, 0x19, 0xf0, 0x33, 0x9e, 0xad, 0x89, 0xdc, 0x9d, + 0x97, 0xc5, 0xa5, 0xc3, 0xff, 0x7b, 0xa8, 0xb0, 0x35, 0x0d, 0x64, 0x7b, 0x86, 0xb7, 0xc3, 0x8a, + 0x26, 0xff, 0xb1, 0x8d, 0xbc, 0x67, 0x19, 0x96, 0x6d, 0xed, 0xef, 0x9a, 0xcf, 0x0c, 0xae, 0xe8, + 0x15, 0xd2, 0x30, 0xe7, 0xdb, 0xc8, 0x42, 0x8e, 0xe1, 0xa1, 0xe6, 0xe5, 0x6d, 0x32, 0xc7, 0x2a, + 0xe8, 0x7c, 0x52, 0x62, 0xfd, 0xc7, 0x1c, 0x47, 0xeb, 0xff, 0x96, 0xd9, 0x45, 0x24, 0xe0, 0x13, + 0xd3, 0x7f, 0xff, 0x39, 0x91, 0xfe, 0x0f, 0x28, 0x22, 0x7d, 0x34, 0xfe, 0x4d, 0x01, 0xb3, 0x4d, + 0xac, 0x70, 0xcd, 0xbd, 0xdd, 0x5d, 0xc3, 0xd9, 0x87, 0xd7, 0x87, 0xa8, 0x70, 0xaa, 0x99, 0x11, + 0x54, 0x13, 0xfe, 0x86, 0xf4, 0xed, 0xd4, 0xac, 0x69, 0x73, 0x25, 0x24, 0x6e, 0x07, 0x8f, 0x01, + 0x39, 0xac, 0xde, 0xbe, 0x3f, 0x5f, 0x6c, 0x43, 0xa0, 0x39, 0x25, 0x03, 0x63, 0x0d, 0xe5, 0x6d, + 0x02, 0x41, 0x39, 0x14, 0x70, 0xbc, 0xe9, 0x19, 0xed, 0x4b, 0x2b, 0xb6, 0x63, 0xef, 0x79, 0xa6, + 0x85, 0x5c, 0xf8, 0x90, 0x10, 0x01, 0x5f, 0xff, 0x33, 0xa1, 0xfe, 0xc3, 0x7f, 0xcf, 0xc8, 0x8e, + 0xa2, 0x41, 0xb7, 0xca, 0x93, 0x8f, 0x88, 0x73, 0x25, 0x37, 0x2e, 0xca, 0x50, 0x4c, 0x5f, 0x68, + 0x6f, 0x52, 0x41, 0xb1, 0x72, 0x5f, 0xcf, 0x76, 0xbc, 0x9a, 0xdd, 0x36, 0xba, 0xae, 0x67, 0x3b, + 0x08, 0x36, 0x62, 0xa5, 0x86, 0x7b, 0x98, 0x8e, 0xdd, 0x0e, 0x07, 0x47, 0xf6, 0xc4, 0xab, 0x9d, + 0x2a, 0xea, 0xf8, 0x27, 0xa4, 0x77, 0x19, 0xa9, 0x54, 0xfa, 0x39, 0x8a, 0xd0, 0xf3, 0x41, 0x5d, + 0x5a, 0x32, 0x57, 0x7c, 0xb9, 0x9d, 0x47, 0x29, 0xa6, 0x26, 0xb0, 0x54, 0xae, 0x80, 0xb9, 0xe6, + 0xde, 0xc5, 0x80, 0x88, 0xcb, 0x1b, 0x21, 0xaf, 0x91, 0x0e, 0x66, 0xc1, 0x14, 0x8f, 0x27, 0x14, + 0x21, 0xdf, 0x1b, 0xc0, 0x9c, 0xcb, 0x67, 0x63, 0x78, 0x8b, 0x89, 0x92, 0x41, 0x2c, 0x86, 0x97, + 0x9a, 0xbe, 0x00, 0xdf, 0xa7, 0x80, 0xb9, 0x46, 0x0f, 0x59, 0xa8, 0x43, 0x7d, 0xec, 0x04, 0x01, + 0xbe, 0x2c, 0xa1, 0x00, 0x05, 0x42, 0x11, 0x02, 0x0c, 0xfd, 0x61, 0x97, 0x7c, 0xe1, 0x85, 0x09, + 0x89, 0x04, 0x17, 0x57, 0x5a, 0xfa, 0x82, 0xfb, 0xb2, 0x02, 0x66, 0xf4, 0x3d, 0x6b, 0xdd, 0xb1, + 0xf1, 0x68, 0xec, 0xc0, 0x27, 0x85, 0x1d, 0xc4, 0x2d, 0xe0, 0x44, 0x67, 0xcf, 0x21, 0xeb, 0x4f, + 0x55, 0xab, 0x89, 0xda, 0xb6, 0xd5, 0x71, 0x49, 0x3d, 0x72, 0xfa, 0xc1, 0x17, 0x77, 0x64, 0xef, + 0xff, 0x86, 0x9a, 0x81, 0x2f, 0x90, 0x8e, 0x98, 0x43, 0x2b, 0xcf, 0x15, 0x2d, 0xdf, 0x13, 0x48, + 0xc6, 0xc5, 0x19, 0x56, 0x42, 0xfa, 0xc2, 0xfd, 0xbc, 0x02, 0xb4, 0x52, 0xbb, 0x6d, 0xef, 0x59, + 0x5e, 0x13, 0x75, 0x51, 0xdb, 0x6b, 0x39, 0x46, 0x1b, 0xf1, 0xf6, 0x73, 0x11, 0xa8, 0x1d, 0xd3, + 0x61, 0x7d, 0x30, 0xfe, 0xcb, 0xe4, 0xf8, 0x32, 0xe9, 0x1d, 0x47, 0x5a, 0xcb, 0x83, 0xa5, 0x24, + 0x10, 0xa7, 0xdc, 0xbe, 0xa2, 0x64, 0x41, 0xe9, 0x4b, 0xf5, 0xd3, 0x0a, 0x98, 0xf6, 0x7b, 0xec, + 0x6d, 0x19, 0x61, 0xfe, 0x5c, 0xc2, 0xc9, 0x48, 0x40, 0x3c, 0x81, 0x0c, 0xdf, 0x95, 0x60, 0x56, + 0x11, 0x45, 0x3f, 0x99, 0xe8, 0x4a, 0xc9, 0x45, 0x87, 0x1f, 0xeb, 0x8d, 0xcd, 0xe5, 0x46, 0x6d, + 0xa9, 0xa2, 0x17, 0x55, 0xf8, 0x55, 0x05, 0x64, 0xd7, 0x4d, 0x6b, 0x9b, 0x0f, 0x6c, 0x76, 0x12, + 0xdb, 0x91, 0x1d, 0x74, 0x1f, 0x6b, 0xe9, 0xf4, 0x41, 0xbb, 0x0d, 0x9c, 0xb4, 0xf6, 0x76, 0x2f, + 0x22, 0xa7, 0xb1, 0x45, 0x46, 0x59, 0xb7, 0x65, 0x37, 0x91, 0x45, 0x8d, 0xd0, 0x9c, 0x3e, 0xf0, + 0x9d, 0x68, 0x82, 0x49, 0x4c, 0x1e, 0x30, 0x27, 0x11, 0x12, 0x0f, 0x98, 0x52, 0x38, 0xa6, 0x12, + 0x4d, 0x1b, 0x06, 0x10, 0x4f, 0x5f, 0x53, 0x7f, 0x2b, 0x07, 0xae, 0x2e, 0x59, 0xfb, 0xc4, 0xa6, + 0xa0, 0x1d, 0x7c, 0x79, 0xc7, 0xb0, 0xb6, 0x11, 0x19, 0x20, 0x02, 0x89, 0xf3, 0x91, 0xfe, 0x33, + 0x62, 0xa4, 0x7f, 0x4d, 0x07, 0x53, 0xb6, 0xd3, 0x41, 0xce, 0xe2, 0x3e, 0xe1, 0xa9, 0x7f, 0xd9, + 0x99, 0xb5, 0xc9, 0x41, 0x45, 0x2c, 0x30, 0xf2, 0x0b, 0x0d, 0xfa, 0xbd, 0xee, 0x13, 0x3a, 0x7b, + 0x0b, 0x98, 0x62, 0x69, 0xda, 0x2c, 0x28, 0x34, 0xf4, 0xa5, 0x8a, 0xbe, 0x59, 0x5d, 0x2a, 0x1e, + 0xd3, 0xae, 0x02, 0xc7, 0xab, 0xad, 0x8a, 0x5e, 0x6a, 0x55, 0x1b, 0xf5, 0x4d, 0x92, 0x5e, 0xcc, + 0xc0, 0xe7, 0x65, 0x65, 0x3d, 0x7b, 0xe3, 0x99, 0x19, 0x04, 0xab, 0x0e, 0xa6, 0xda, 0x34, 0x03, + 0x19, 0x42, 0x67, 0x12, 0xd5, 0x8e, 0x11, 0xa4, 0x09, 0xba, 0x4f, 0x48, 0x3b, 0x03, 0xc0, 0x15, + 0xc7, 0xb6, 0xb6, 0xc3, 0x33, 0x6d, 0x05, 0x9d, 0x4b, 0x81, 0xcf, 0xc9, 0x80, 0x3c, 0xfd, 0x86, + 0xdc, 0x6c, 0x42, 0xfe, 0x85, 0x82, 0xf7, 0x9f, 0xb1, 0xc5, 0x4b, 0xe4, 0x15, 0x4e, 0xb4, 0xd8, + 0x23, 0xd6, 0x45, 0x2a, 0x03, 0x6a, 0x09, 0xb3, 0xaa, 0xdc, 0x0a, 0xf2, 0xf4, 0x5b, 0xe6, 0x75, + 0x10, 0x1d, 0xa5, 0x94, 0x66, 0x93, 0xf4, 0x53, 0x96, 0x97, 0x69, 0xfa, 0xda, 0xfc, 0x51, 0x05, + 0x14, 0xea, 0xc8, 0x2b, 0xef, 0xa0, 0xf6, 0x25, 0xf8, 0x08, 0x71, 0x01, 0xb4, 0x6b, 0x22, 0xcb, + 0xbb, 0xb0, 0xdb, 0x0d, 0x16, 0x40, 0xfd, 0x04, 0xf8, 0x7c, 0xbe, 0xf3, 0x7d, 0x8a, 0xa8, 0x3f, + 0x37, 0x0f, 0xa8, 0xab, 0x5f, 0x42, 0x84, 0xca, 0x9c, 0x02, 0x79, 0x07, 0xb9, 0x7b, 0x5d, 0x7f, + 0x11, 0x8d, 0x3d, 0xc1, 0xd7, 0x06, 0xe2, 0x2c, 0x0b, 0xe2, 0xbc, 0x55, 0xbe, 0x88, 0x09, 0x84, + 0x3d, 0xcd, 0x82, 0xa9, 0xaa, 0x65, 0x7a, 0xa6, 0xd1, 0x85, 0x2f, 0xc8, 0x82, 0xb9, 0x26, 0xf2, + 0xd6, 0x0d, 0xc7, 0xd8, 0x45, 0x1e, 0x72, 0x5c, 0xf8, 0x1d, 0xb1, 0x4f, 0xe8, 0x75, 0x0d, 0x6f, + 0xcb, 0x76, 0x76, 0x7d, 0xd5, 0xf4, 0x9f, 0xb1, 0x6a, 0x5e, 0x46, 0x8e, 0x1b, 0xf2, 0xe5, 0x3f, + 0xe2, 0x37, 0x57, 0x6c, 0xe7, 0x12, 0x1e, 0x04, 0xd9, 0x34, 0x8d, 0x3d, 0x62, 0x7a, 0x5d, 0x7b, + 0xbb, 0x86, 0x2e, 0x23, 0x3f, 0xaa, 0x5a, 0xf0, 0x8c, 0xe7, 0x02, 0x1d, 0xbb, 0x6e, 0x7b, 0xb8, + 0xd3, 0xae, 0xd9, 0xdb, 0x34, 0xec, 0x6c, 0x41, 0x17, 0x13, 0xc3, 0x5c, 0xc6, 0x65, 0x44, 0x72, + 0xe5, 0xf9, 0x5c, 0x2c, 0x51, 0x5b, 0x00, 0x5a, 0xf0, 0x59, 0x0b, 0x75, 0xd1, 0x2e, 0xf2, 0x9c, + 0x7d, 0x72, 0xbb, 0x44, 0x41, 0x1f, 0xf0, 0x86, 0x0d, 0xd0, 0xf2, 0x93, 0x75, 0x26, 0xbd, 0x05, + 0x41, 0x72, 0x87, 0x9a, 0xac, 0xcb, 0x50, 0x9c, 0xc8, 0xed, 0x59, 0x2a, 0xb6, 0x66, 0x5e, 0xae, + 0x82, 0x2c, 0x19, 0x3c, 0xdf, 0x9c, 0x11, 0x56, 0x98, 0x76, 0x91, 0xeb, 0x1a, 0xdb, 0xc8, 0x5f, + 0x61, 0x62, 0x8f, 0xda, 0xed, 0x20, 0xd7, 0x25, 0x98, 0xd2, 0xc1, 0xe1, 0x7a, 0xa1, 0x66, 0xd8, + 0xc0, 0xc0, 0xb4, 0x82, 0x91, 0x80, 0xc0, 0xad, 0xd3, 0x2f, 0xce, 0xde, 0x0d, 0x72, 0x14, 0xfe, + 0x69, 0x90, 0x5b, 0xaa, 0x2c, 0x6e, 0xac, 0x14, 0x8f, 0xe1, 0xbf, 0x3e, 0x7f, 0xd3, 0x20, 0xb7, + 0x5c, 0x6a, 0x95, 0x6a, 0x45, 0x05, 0xd7, 0xa3, 0x5a, 0x5f, 0x6e, 0x14, 0x55, 0x9c, 0xb8, 0x5e, + 0xaa, 0x57, 0xcb, 0xc5, 0xac, 0x36, 0x03, 0xa6, 0xce, 0x97, 0xf4, 0x7a, 0xb5, 0xbe, 0x52, 0xcc, + 0xc1, 0xbf, 0xe4, 0xf1, 0xbb, 0x43, 0xc4, 0xef, 0x86, 0x28, 0x9e, 0x06, 0x41, 0xf6, 0x8b, 0x01, + 0x64, 0x4f, 0x12, 0x20, 0xfb, 0x01, 0x19, 0x22, 0x13, 0x70, 0x67, 0xca, 0x83, 0xa9, 0x75, 0xc7, + 0x6e, 0x23, 0xd7, 0x85, 0x2f, 0x55, 0x40, 0xbe, 0x6c, 0x58, 0x6d, 0xd4, 0x85, 0xd7, 0x84, 0x50, + 0x51, 0x57, 0xd1, 0x8c, 0xef, 0x2a, 0x0a, 0xbf, 0x95, 0x91, 0xed, 0xfd, 0x18, 0xdd, 0x05, 0x4a, + 0x33, 0x42, 0x3e, 0x72, 0xbd, 0x5c, 0x2c, 0xa9, 0x09, 0xdc, 0xb0, 0xa3, 0x80, 0x69, 0xb6, 0x1a, + 0x70, 0x11, 0xf1, 0xf3, 0xf0, 0xef, 0x64, 0x64, 0x27, 0x87, 0x7e, 0x0d, 0x02, 0x32, 0x11, 0xf2, + 0x90, 0x9b, 0x08, 0x0e, 0xa3, 0x36, 0x81, 0xcd, 0x43, 0x05, 0xcc, 0x6c, 0x58, 0xee, 0x20, 0xa1, + 0xc8, 0x87, 0xe3, 0xf7, 0xab, 0xc1, 0x11, 0x3a, 0x54, 0x38, 0xfe, 0xe1, 0xf4, 0xd2, 0x17, 0xcc, + 0x77, 0x32, 0xe0, 0xe4, 0x0a, 0xb2, 0x90, 0x63, 0xb6, 0x69, 0x0d, 0x7c, 0x49, 0x3c, 0x49, 0x94, + 0xc4, 0x23, 0x04, 0xce, 0x07, 0x7d, 0x21, 0x4a, 0xe0, 0x55, 0x81, 0x04, 0x9e, 0x22, 0x48, 0xe0, + 0x16, 0x49, 0x3a, 0x13, 0xb8, 0x56, 0x7d, 0x1a, 0xcc, 0xd6, 0x6d, 0xcf, 0xdc, 0x32, 0xdb, 0xd4, + 0x07, 0xed, 0x17, 0x54, 0x90, 0xad, 0x99, 0xae, 0x07, 0x4b, 0x61, 0x77, 0x72, 0x1d, 0x98, 0x31, + 0xad, 0x76, 0x77, 0xaf, 0x83, 0x74, 0x64, 0xd0, 0x7e, 0xa5, 0xa0, 0xf3, 0x49, 0xe1, 0xd6, 0x3e, + 0x66, 0x4b, 0xf5, 0xb7, 0xf6, 0x7f, 0x57, 0x7a, 0x19, 0x86, 0x67, 0x81, 0xc4, 0xa5, 0x8c, 0xb0, + 0xbb, 0x4a, 0x60, 0xce, 0xe2, 0xb2, 0xfa, 0x06, 0x7b, 0xff, 0xbd, 0x04, 0x3c, 0x39, 0x5d, 0xfc, + 0x02, 0x7e, 0x40, 0xaa, 0xb1, 0x0e, 0x63, 0x28, 0x19, 0x32, 0xcb, 0x23, 0x4c, 0x92, 0x35, 0x30, + 0x5f, 0xad, 0xb7, 0x2a, 0x7a, 0xbd, 0x54, 0x63, 0x59, 0x54, 0xf8, 0x6f, 0x0a, 0xc8, 0xe9, 0xa8, + 0xd7, 0xdd, 0xe7, 0x03, 0x4f, 0x33, 0x47, 0xf1, 0x4c, 0xe0, 0x28, 0xae, 0x2d, 0x03, 0x60, 0xb4, + 0x71, 0xc1, 0xe4, 0x66, 0x2e, 0x65, 0x60, 0x38, 0x53, 0xa1, 0x82, 0xa5, 0x20, 0xb7, 0xce, 0x7d, + 0x09, 0x5f, 0x28, 0xbd, 0x73, 0x24, 0x50, 0x23, 0x1c, 0x46, 0xf4, 0x09, 0x1f, 0x94, 0xda, 0xec, + 0x19, 0x4a, 0xee, 0x68, 0xc4, 0xff, 0x35, 0x05, 0x64, 0x5b, 0xb8, 0xb7, 0xe4, 0x3a, 0xce, 0xdf, + 0x1e, 0x4d, 0xc7, 0x31, 0x99, 0x08, 0x1d, 0xbf, 0x0b, 0xcc, 0xf2, 0x1a, 0xcb, 0x5c, 0x25, 0x62, + 0x55, 0x5c, 0xf8, 0x60, 0x14, 0x0d, 0x1f, 0xc0, 0xce, 0xd1, 0x88, 0xf8, 0x33, 0x8f, 0x04, 0x60, + 0x0d, 0xed, 0x5e, 0x44, 0x8e, 0xbb, 0x63, 0xf6, 0xe0, 0x5f, 0xa9, 0x60, 0x7a, 0x05, 0x79, 0x4d, + 0xcf, 0xf0, 0xf6, 0xdc, 0xbe, 0xed, 0x4e, 0xcb, 0x2e, 0x1b, 0xed, 0x1d, 0xc4, 0xba, 0x23, 0xff, + 0x11, 0xbe, 0x47, 0x95, 0xf5, 0x27, 0x0a, 0xcb, 0x59, 0x08, 0xca, 0x88, 0xc0, 0xe4, 0x51, 0x20, + 0xdb, 0x31, 0x3c, 0x83, 0x61, 0x71, 0x4d, 0x1f, 0x16, 0x21, 0x21, 0x9d, 0x64, 0x83, 0xef, 0x50, + 0x64, 0x1c, 0x8a, 0x24, 0xca, 0x4f, 0x06, 0xc2, 0x07, 0x32, 0x23, 0xa0, 0x70, 0x02, 0xcc, 0xd5, + 0x1b, 0xad, 0xcd, 0x5a, 0x63, 0x65, 0xa5, 0x82, 0x53, 0x8b, 0xaa, 0x76, 0x0a, 0x68, 0xeb, 0xa5, + 0x0b, 0x6b, 0x95, 0x7a, 0x6b, 0xb3, 0xde, 0x58, 0xaa, 0xb0, 0x2f, 0xb3, 0xda, 0x71, 0x30, 0x53, + 0x2e, 0x95, 0x57, 0xfd, 0x84, 0x9c, 0x76, 0x1a, 0x9c, 0x5c, 0xab, 0xac, 0x2d, 0x56, 0xf4, 0xe6, + 0x6a, 0x75, 0x7d, 0x13, 0x93, 0x59, 0x6e, 0x6c, 0xd4, 0x97, 0x8a, 0x79, 0x0d, 0x82, 0x53, 0xdc, + 0x9b, 0xf3, 0x7a, 0xa3, 0xbe, 0xb2, 0xd9, 0x6c, 0x95, 0x5a, 0x95, 0xe2, 0x94, 0x76, 0x15, 0x38, + 0x5e, 0x2e, 0xd5, 0x49, 0xf6, 0x72, 0xa3, 0x5e, 0xaf, 0x94, 0x5b, 0xc5, 0x02, 0xfc, 0xf7, 0x2c, + 0x98, 0xa9, 0xba, 0x75, 0x63, 0x17, 0x9d, 0x33, 0xba, 0x66, 0x07, 0xbe, 0x80, 0x9b, 0x79, 0xdc, + 0x00, 0xe6, 0x1c, 0xfa, 0x17, 0x75, 0x5a, 0x26, 0xa2, 0x68, 0xce, 0xe9, 0x62, 0x22, 0x9e, 0x93, + 0x5b, 0x84, 0x80, 0x3f, 0x27, 0xa7, 0x4f, 0xda, 0x22, 0x00, 0xf4, 0x5f, 0x2b, 0xbc, 0x23, 0xf6, + 0x6c, 0x7f, 0x6b, 0x32, 0x76, 0x91, 0x8b, 0x9c, 0xcb, 0x66, 0x1b, 0xf9, 0x39, 0x75, 0xee, 0x2b, + 0xf8, 0x75, 0x55, 0x76, 0x7f, 0x91, 0x03, 0x95, 0xab, 0x4e, 0x44, 0x6f, 0xf8, 0xe3, 0xaa, 0xcc, + 0xee, 0xa0, 0x14, 0xc9, 0x64, 0x9a, 0xf2, 0x62, 0x65, 0xb4, 0x65, 0xdb, 0x56, 0xa3, 0xb1, 0xd9, + 0x5c, 0x6d, 0xe8, 0xad, 0xa2, 0xaa, 0xcd, 0x82, 0x02, 0x7e, 0xac, 0x35, 0xea, 0x2b, 0xc5, 0xac, + 0x76, 0x35, 0x38, 0xb1, 0x5a, 0x6a, 0x6e, 0x56, 0xeb, 0xe7, 0x4a, 0xb5, 0xea, 0xd2, 0x66, 0x79, + 0xb5, 0xa4, 0x37, 0x8b, 0x39, 0xed, 0x1a, 0x70, 0x75, 0xab, 0x5a, 0xd1, 0x37, 0x97, 0x2b, 0xa5, + 0xd6, 0x86, 0x5e, 0x69, 0x6e, 0xd6, 0x1b, 0x9b, 0xf5, 0xd2, 0x5a, 0xa5, 0x98, 0xc7, 0xcd, 0x9f, + 0xbc, 0x0a, 0xd5, 0x66, 0xea, 0xa0, 0x32, 0x16, 0x22, 0x94, 0x71, 0xba, 0x5f, 0x19, 0x01, 0xaf, + 0x56, 0x7a, 0xa5, 0x59, 0xd1, 0xcf, 0x55, 0x8a, 0x33, 0x83, 0x74, 0x6d, 0x56, 0x3b, 0x09, 0x8a, + 0x98, 0x87, 0xcd, 0x6a, 0xd3, 0xcf, 0xb9, 0x54, 0x9c, 0x83, 0x9f, 0xce, 0x83, 0x53, 0x3a, 0xda, + 0x36, 0x5d, 0x0f, 0x39, 0xeb, 0xc6, 0xfe, 0x2e, 0xb2, 0x3c, 0xbf, 0x93, 0xff, 0xe7, 0xc4, 0xca, + 0xb8, 0x06, 0xe6, 0x7a, 0x94, 0xc6, 0x1a, 0xf2, 0x76, 0xec, 0x0e, 0x1b, 0x85, 0x1f, 0x11, 0xd9, + 0x73, 0x2c, 0xac, 0xf3, 0xd9, 0x75, 0xf1, 0x6b, 0x4e, 0xb7, 0xd5, 0x18, 0xdd, 0xce, 0x8e, 0xa2, + 0xdb, 0xda, 0xb5, 0x60, 0x7a, 0xcf, 0x45, 0x4e, 0x65, 0xd7, 0x30, 0xbb, 0xfe, 0x1d, 0x9f, 0x41, + 0x02, 0x7c, 0x67, 0x56, 0xf6, 0xc4, 0x0a, 0x57, 0x97, 0xc1, 0x62, 0x8c, 0xe8, 0x5b, 0xcf, 0x00, + 0xc0, 0x2a, 0xbb, 0xe1, 0x74, 0x99, 0xb2, 0x72, 0x29, 0x98, 0xbf, 0x8b, 0x66, 0xb7, 0x6b, 0x5a, + 0xdb, 0xc1, 0xbe, 0x7f, 0x98, 0x00, 0x5f, 0xac, 0xca, 0x9c, 0x60, 0x49, 0xca, 0x5b, 0xb2, 0xd6, + 0xf4, 0x42, 0x65, 0xc2, 0xfd, 0xee, 0xc1, 0xa6, 0x93, 0xd7, 0x8a, 0x60, 0x96, 0xa4, 0xb1, 0x16, + 0x58, 0x9c, 0xc2, 0x7d, 0xb0, 0x4f, 0x6e, 0xad, 0xd2, 0x5a, 0x6d, 0x2c, 0x05, 0xef, 0x0a, 0x98, + 0x24, 0x66, 0xa6, 0x54, 0xbf, 0x40, 0x5a, 0xe3, 0xb4, 0xf6, 0x10, 0x70, 0x0d, 0xd7, 0x61, 0x97, + 0x6a, 0x7a, 0xa5, 0xb4, 0x74, 0x61, 0xb3, 0xf2, 0xb4, 0x6a, 0xb3, 0xd5, 0x14, 0x1b, 0x97, 0xdf, + 0x8e, 0x66, 0x30, 0xbf, 0x95, 0xb5, 0x52, 0xb5, 0xc6, 0xfa, 0xf7, 0xe5, 0x86, 0xbe, 0x56, 0x6a, + 0x15, 0x67, 0xe1, 0xcb, 0x55, 0x50, 0x5c, 0x41, 0xde, 0xba, 0xed, 0x78, 0x46, 0xb7, 0x66, 0x5a, + 0x97, 0x36, 0x9c, 0xae, 0x30, 0xd9, 0x94, 0x0e, 0xd3, 0x21, 0x0e, 0x91, 0x02, 0xc1, 0xe8, 0x1d, + 0xf1, 0x1e, 0xc9, 0x16, 0x2a, 0x53, 0x98, 0x00, 0x9f, 0xa5, 0xc8, 0x2c, 0x77, 0xcb, 0x97, 0x9a, + 0x4c, 0x4f, 0x9e, 0x3d, 0xe9, 0xf1, 0x79, 0x00, 0x6a, 0x79, 0x78, 0x7f, 0x16, 0x14, 0x96, 0x4d, + 0xcb, 0xe8, 0x9a, 0xcf, 0x14, 0xa2, 0x63, 0x86, 0x7d, 0x4c, 0x26, 0xa6, 0x8f, 0x51, 0x46, 0x1a, + 0x3f, 0x7f, 0x56, 0x95, 0x5d, 0x5e, 0xe0, 0x64, 0xef, 0x33, 0x19, 0x31, 0x78, 0x7e, 0x4c, 0x91, + 0x59, 0x5e, 0x18, 0x4e, 0x2f, 0x19, 0x86, 0x9f, 0xfd, 0xfe, 0xb0, 0xb1, 0xfa, 0xda, 0x77, 0x61, + 0x90, 0x2a, 0x4c, 0xc3, 0x3f, 0x54, 0x01, 0x5c, 0x41, 0xde, 0x39, 0xe4, 0x04, 0x53, 0x01, 0xd2, + 0xeb, 0x33, 0x7b, 0x9b, 0x6b, 0xb2, 0x6f, 0xe6, 0x01, 0x3c, 0x2f, 0x02, 0x58, 0x8a, 0x69, 0x3c, + 0x11, 0xa4, 0x23, 0x1a, 0x6f, 0x15, 0xe4, 0x5d, 0xf2, 0x9e, 0xa9, 0xd9, 0x63, 0xa2, 0x87, 0x4b, + 0x42, 0x8c, 0xa7, 0x4e, 0x09, 0xeb, 0x8c, 0x00, 0xfc, 0x6e, 0x30, 0x09, 0xfa, 0x61, 0x41, 0x3b, + 0x96, 0x0f, 0xcd, 0x6c, 0x32, 0x7d, 0x71, 0xd2, 0x55, 0x97, 0x41, 0xf6, 0x0d, 0xfc, 0x58, 0x0e, + 0x9c, 0x1c, 0x54, 0x1d, 0xf8, 0xa1, 0x8c, 0xb0, 0xc3, 0x8e, 0xc8, 0x90, 0x9f, 0x61, 0x1b, 0x88, + 0xf8, 0x41, 0x7b, 0x1c, 0xb8, 0x3a, 0x58, 0x86, 0x6b, 0xd9, 0x75, 0x74, 0xc5, 0xed, 0x22, 0xcf, + 0x43, 0x0e, 0xa9, 0x5a, 0x41, 0x1f, 0xfc, 0x52, 0x7b, 0x02, 0x78, 0x90, 0x69, 0xb9, 0x66, 0x07, + 0x39, 0x2d, 0xb3, 0xe7, 0x96, 0xac, 0x4e, 0x6b, 0xcf, 0xb3, 0x1d, 0xd3, 0x60, 0x37, 0x52, 0x16, + 0xf4, 0xa8, 0xd7, 0xda, 0xcd, 0xa0, 0x68, 0xba, 0x0d, 0xeb, 0xa2, 0x6d, 0x38, 0x1d, 0xd3, 0xda, + 0xae, 0x99, 0xae, 0xc7, 0x3c, 0x80, 0x0f, 0xa4, 0xc3, 0xbf, 0x56, 0x65, 0x0f, 0xd3, 0x0d, 0x81, + 0x35, 0xa2, 0x43, 0x79, 0xbe, 0x2a, 0x73, 0x3c, 0x2e, 0x19, 0xed, 0x64, 0xca, 0xf2, 0xbc, 0x49, + 0x1b, 0x12, 0x83, 0x47, 0x70, 0xd2, 0xb5, 0xd0, 0x74, 0xdf, 0x10, 0x38, 0x57, 0xd1, 0xab, 0xcb, + 0xd5, 0x0a, 0x36, 0x2b, 0xae, 0x06, 0x27, 0xc2, 0x77, 0x4b, 0x17, 0x36, 0x9b, 0x95, 0x7a, 0xab, + 0x58, 0xc0, 0xfd, 0x14, 0x4d, 0x5e, 0x2e, 0x55, 0x6b, 0x95, 0xa5, 0xcd, 0x56, 0x03, 0xbf, 0x59, + 0x1a, 0xcd, 0xb4, 0x80, 0xcf, 0xc9, 0x82, 0xe3, 0x44, 0xb6, 0xfb, 0x44, 0xaa, 0x58, 0x28, 0x7d, + 0xbe, 0xb6, 0x01, 0x40, 0xd3, 0x54, 0xbc, 0xf0, 0x0f, 0xa4, 0x2f, 0xdc, 0xe4, 0x20, 0xec, 0x2b, + 0x23, 0x42, 0x33, 0xbe, 0xa3, 0xc8, 0x44, 0xa8, 0x90, 0x26, 0x9b, 0x4c, 0x29, 0xfe, 0x65, 0xd2, + 0x23, 0x4e, 0x34, 0xf8, 0xc4, 0xca, 0x2c, 0x93, 0x8f, 0x9f, 0xb6, 0x5e, 0xd5, 0x89, 0x3a, 0xcc, + 0x03, 0x40, 0x52, 0x88, 0x06, 0x51, 0x3d, 0x18, 0x38, 0x5e, 0x45, 0xe9, 0x41, 0xa9, 0xdc, 0xaa, + 0x9e, 0xab, 0x44, 0xe9, 0xc1, 0xe7, 0x54, 0x50, 0x58, 0x41, 0x1e, 0x9e, 0x53, 0xb9, 0xf0, 0x89, + 0x12, 0xeb, 0x3f, 0xd8, 0x8c, 0xe9, 0xda, 0x6d, 0xa3, 0x1b, 0x2c, 0x03, 0xd0, 0x27, 0xf8, 0xdc, + 0x51, 0x4c, 0x10, 0xbf, 0xe8, 0x88, 0xf1, 0xea, 0x87, 0x40, 0xce, 0xc3, 0xaf, 0xd9, 0x32, 0xf4, + 0xc3, 0x22, 0x87, 0x2b, 0x4c, 0x64, 0xc9, 0xf0, 0x0c, 0x9d, 0xe6, 0xe7, 0x46, 0x27, 0x49, 0xdb, + 0x25, 0x82, 0x91, 0xef, 0x47, 0xfb, 0xf3, 0x2f, 0x55, 0x70, 0x35, 0x6d, 0x1f, 0xa5, 0x5e, 0xaf, + 0xe9, 0xd9, 0x0e, 0xd2, 0x51, 0x1b, 0x99, 0x3d, 0xaf, 0x6f, 0x7d, 0xcf, 0xa1, 0xa9, 0xfe, 0x66, + 0x33, 0x7b, 0x84, 0x6f, 0x50, 0x65, 0x23, 0xfc, 0x1e, 0x68, 0x8f, 0x7d, 0xe5, 0x45, 0x34, 0xf6, + 0x4f, 0x29, 0x32, 0x31, 0x7b, 0x13, 0x12, 0x4f, 0x06, 0xd4, 0xc7, 0x8f, 0x00, 0x28, 0x7f, 0xe5, + 0x46, 0xaf, 0x94, 0x2b, 0xd5, 0x75, 0x3c, 0x08, 0x3c, 0x14, 0x3c, 0x78, 0x7d, 0x43, 0x2f, 0xaf, + 0x96, 0x9a, 0x95, 0x4d, 0xbd, 0xb2, 0x52, 0x6d, 0xb6, 0x98, 0x53, 0x16, 0xfd, 0x6a, 0x4a, 0xbb, + 0x16, 0x9c, 0x6e, 0x6e, 0x2c, 0x36, 0xcb, 0x7a, 0x75, 0x9d, 0xa4, 0xeb, 0x95, 0x7a, 0xe5, 0x3c, + 0x7b, 0x5b, 0x80, 0x1f, 0x29, 0x82, 0x19, 0x3c, 0x01, 0x68, 0xd2, 0x79, 0x01, 0xfc, 0xdb, 0x2c, + 0x98, 0xd1, 0x91, 0x6b, 0x77, 0x2f, 0x93, 0x39, 0xc2, 0xa4, 0xa6, 0x1e, 0xdf, 0x56, 0x65, 0xcf, + 0x6f, 0x73, 0xcc, 0x2e, 0x70, 0x8c, 0x46, 0x4f, 0x34, 0x8d, 0xcb, 0x86, 0xd9, 0x35, 0x2e, 0xb2, + 0xae, 0xa6, 0xa0, 0x87, 0x09, 0xda, 0x02, 0xd0, 0xec, 0x2b, 0x16, 0x72, 0x9a, 0xed, 0x2b, 0x15, + 0x6f, 0xa7, 0xd4, 0xe9, 0x38, 0xc8, 0x75, 0xd9, 0xea, 0xc5, 0x80, 0x37, 0xda, 0x4d, 0xe0, 0x38, + 0x49, 0xe5, 0x32, 0x53, 0x07, 0x99, 0xfe, 0xe4, 0x20, 0x67, 0xc9, 0xda, 0xf7, 0x73, 0xe6, 0xb8, + 0x9c, 0x61, 0x32, 0x7f, 0x5c, 0x22, 0x2f, 0x9e, 0xd2, 0xb9, 0x0e, 0xcc, 0x58, 0xc6, 0x2e, 0xaa, + 0xdc, 0xd7, 0x33, 0x1d, 0xe4, 0x12, 0xc7, 0x18, 0x55, 0xe7, 0x93, 0xe0, 0xc7, 0xa4, 0xce, 0x9b, + 0xcb, 0x49, 0x2c, 0x99, 0xee, 0xaf, 0x8c, 0xa0, 0xfa, 0x03, 0xfa, 0x19, 0x15, 0x7e, 0x44, 0x05, + 0xb3, 0x8c, 0xa9, 0x92, 0xb5, 0x5f, 0xed, 0xc0, 0x87, 0x0a, 0xc6, 0xaf, 0x81, 0xd3, 0x7c, 0xe3, + 0x97, 0x3c, 0xc0, 0x9f, 0x50, 0x65, 0xdd, 0x9d, 0x07, 0x54, 0x9c, 0x94, 0x11, 0xed, 0x38, 0xba, + 0x65, 0xef, 0x31, 0x47, 0xd5, 0x82, 0x4e, 0x1f, 0xd2, 0x5c, 0xd4, 0x83, 0xbf, 0x2e, 0xe5, 0x4c, + 0x2d, 0x59, 0x8d, 0x23, 0x02, 0xf0, 0x33, 0x2a, 0x98, 0x67, 0x5c, 0x35, 0xd9, 0x39, 0x1f, 0xa9, + 0x03, 0x6f, 0x3f, 0x25, 0x6d, 0x08, 0x0e, 0xa8, 0x3f, 0x2b, 0xe9, 0x01, 0x03, 0xe4, 0x27, 0xa4, + 0x82, 0xa3, 0x49, 0x57, 0xe4, 0x88, 0xa0, 0x7c, 0x57, 0x16, 0xcc, 0x6c, 0xb8, 0xc8, 0x61, 0x7e, + 0xfb, 0xf0, 0xb5, 0x59, 0xa0, 0xae, 0x20, 0x61, 0x23, 0xf5, 0x45, 0xd2, 0x1e, 0xbe, 0x7c, 0x65, + 0x39, 0xa2, 0xd8, 0x46, 0x8a, 0x80, 0xed, 0x46, 0x30, 0x4f, 0x45, 0x5a, 0xf2, 0x3c, 0x6c, 0x24, + 0xfa, 0xde, 0xb4, 0x7d, 0xa9, 0xe3, 0xd8, 0x2a, 0x22, 0x65, 0xe1, 0x2c, 0x65, 0xcc, 0x53, 0x0d, + 0x6d, 0xd1, 0xf9, 0x6c, 0x56, 0xef, 0x4b, 0xd5, 0x1e, 0x0d, 0xae, 0xb2, 0x7b, 0x88, 0x9e, 0x5f, + 0xe1, 0x32, 0xe7, 0x48, 0xe6, 0x41, 0xaf, 0xe0, 0xdf, 0x4a, 0xf9, 0xea, 0xca, 0x4b, 0x27, 0x99, + 0x2e, 0xf4, 0xc6, 0x63, 0x92, 0x9c, 0x04, 0x45, 0x9c, 0x83, 0xec, 0xbf, 0xe8, 0x95, 0x66, 0xa3, + 0x76, 0xae, 0x32, 0x78, 0x19, 0x23, 0x07, 0x9f, 0xa7, 0x82, 0xe9, 0x45, 0xc7, 0x36, 0x3a, 0x6d, + 0xc3, 0xf5, 0xe0, 0x77, 0x15, 0x30, 0xbb, 0x6e, 0xec, 0x77, 0x6d, 0xa3, 0x43, 0xfc, 0xfb, 0xfb, + 0xfa, 0x82, 0x1e, 0x7d, 0xe5, 0xf7, 0x05, 0xec, 0x51, 0x3c, 0x18, 0x18, 0x1c, 0xdd, 0xcb, 0xc8, + 0xdc, 0xab, 0x19, 0x6c, 0xf3, 0x29, 0x83, 0x82, 0x95, 0xfa, 0x7c, 0x2d, 0xf0, 0x3c, 0x45, 0x58, + 0x94, 0x1f, 0x91, 0x0b, 0x3f, 0x2a, 0x43, 0xf2, 0x68, 0x76, 0xe5, 0xef, 0x2f, 0x80, 0xfc, 0x12, + 0x22, 0x56, 0xdc, 0xaf, 0x2a, 0x60, 0xaa, 0x89, 0x3c, 0x62, 0xc1, 0xdd, 0x2e, 0x78, 0x0a, 0x77, + 0x48, 0x86, 0xd0, 0x89, 0xdd, 0x7f, 0xc6, 0x93, 0x75, 0xee, 0xbc, 0x35, 0xf9, 0x9f, 0xc0, 0x23, + 0x91, 0x96, 0xbb, 0xc0, 0xca, 0x3c, 0x94, 0x47, 0x62, 0x2c, 0xa9, 0xf4, 0x7d, 0xad, 0xde, 0xa3, + 0x30, 0xd7, 0x2a, 0xae, 0xd7, 0x7b, 0x35, 0xaf, 0x9f, 0xb1, 0xde, 0x66, 0x8c, 0xf9, 0x18, 0xe7, + 0xa8, 0xc7, 0x82, 0x29, 0x2a, 0x73, 0x7f, 0x3e, 0xda, 0xef, 0xa7, 0x40, 0x49, 0x90, 0xb3, 0xd7, + 0x7e, 0x4e, 0x49, 0x17, 0xb5, 0xe8, 0xc2, 0x27, 0x12, 0x83, 0x60, 0xb6, 0x8e, 0xbc, 0x2b, 0xb6, + 0x73, 0xa9, 0xe9, 0x19, 0x1e, 0x82, 0xff, 0xa2, 0xd0, 0xeb, 0xf2, 0xb8, 0xe8, 0x27, 0x75, 0x70, + 0x82, 0x56, 0x88, 0x65, 0x24, 0xfd, 0x37, 0xad, 0xc8, 0x75, 0x03, 0x85, 0xc0, 0xe5, 0xd3, 0x0f, + 0x7e, 0x0a, 0x5f, 0x3a, 0x30, 0xe8, 0x93, 0x32, 0x60, 0xd2, 0xc0, 0x24, 0xc3, 0x33, 0x18, 0x7d, + 0x3f, 0x1e, 0xfc, 0xa8, 0x94, 0x59, 0x2d, 0x47, 0xf3, 0x68, 0xba, 0x82, 0x0f, 0x3f, 0x12, 0x64, + 0xcb, 0x3b, 0x86, 0x07, 0xdf, 0xad, 0x02, 0x50, 0xea, 0x74, 0xd6, 0xa8, 0x0f, 0x38, 0xef, 0x90, + 0x76, 0x16, 0xcc, 0xb6, 0x77, 0x8c, 0xf0, 0xe6, 0x0c, 0xda, 0x1f, 0x08, 0x69, 0xda, 0xe3, 0x42, + 0x67, 0x72, 0x2a, 0x55, 0xd8, 0x07, 0x13, 0x2e, 0x83, 0xd1, 0x0e, 0x1c, 0xcd, 0xc5, 0x50, 0x98, + 0xb1, 0x47, 0xe8, 0xf0, 0xe7, 0x0b, 0x21, 0x7b, 0xd1, 0x73, 0x38, 0x46, 0x3a, 0x38, 0x60, 0x13, + 0x26, 0x24, 0x3c, 0xe9, 0x2d, 0x17, 0xd0, 0x23, 0x9e, 0xaf, 0x89, 0x84, 0xae, 0xd5, 0x2a, 0x1d, + 0xd3, 0x17, 0x2d, 0x0b, 0x98, 0x05, 0x5f, 0x98, 0x49, 0x06, 0x5f, 0xbc, 0xe0, 0x9e, 0x02, 0xe6, + 0x50, 0xc7, 0xf4, 0x90, 0x5f, 0x4b, 0x26, 0xc0, 0x38, 0x88, 0xc5, 0x0f, 0xe0, 0xb3, 0xa5, 0x83, + 0xae, 0x11, 0x81, 0x1e, 0xac, 0x51, 0x44, 0xfb, 0x93, 0x0b, 0xa3, 0x26, 0x47, 0x33, 0x7d, 0xb0, + 0x9e, 0xab, 0x82, 0xab, 0x5b, 0xf6, 0xf6, 0x76, 0x17, 0xf9, 0x62, 0x42, 0xd4, 0x3b, 0x13, 0x1a, + 0xe3, 0x84, 0x8b, 0xec, 0x04, 0xd9, 0xf7, 0x9a, 0xc1, 0x51, 0x32, 0xfc, 0x20, 0x9e, 0x98, 0x8a, + 0x9d, 0x45, 0x11, 0x71, 0x0d, 0xe4, 0x33, 0x02, 0x05, 0xb9, 0x80, 0xcf, 0xd2, 0x64, 0xd3, 0x07, + 0xe2, 0x8b, 0x0a, 0x98, 0xa3, 0xf7, 0x22, 0xfa, 0x0a, 0x7a, 0xcf, 0x18, 0x01, 0x80, 0xdf, 0xcd, + 0xc8, 0xfa, 0xd9, 0x12, 0x99, 0x08, 0x9c, 0x44, 0x88, 0x58, 0x2e, 0xa8, 0xca, 0x50, 0x72, 0x13, + 0xb8, 0xa9, 0x33, 0x0b, 0x66, 0x56, 0x90, 0xdf, 0xd2, 0x5c, 0xf8, 0xfe, 0x84, 0x3d, 0xd1, 0x59, + 0x30, 0x4b, 0x2e, 0x07, 0x6b, 0xb0, 0x63, 0x92, 0x74, 0xd5, 0x4c, 0x48, 0xd3, 0x6e, 0x00, 0x73, + 0x17, 0xd1, 0x96, 0xed, 0xa0, 0x86, 0x70, 0x96, 0x52, 0x4c, 0x1c, 0x1c, 0x9e, 0x4e, 0xbb, 0x09, + 0x1c, 0x67, 0x8e, 0xee, 0x8b, 0x78, 0xae, 0x6f, 0x38, 0xfb, 0xec, 0x60, 0x5a, 0x7f, 0x32, 0xfc, + 0x4b, 0xbe, 0xc1, 0x2c, 0x8a, 0x28, 0xde, 0x72, 0x50, 0xec, 0x5c, 0xa5, 0x23, 0x46, 0xa7, 0xc7, + 0x83, 0x02, 0xd3, 0x11, 0xdf, 0xa0, 0x8b, 0xeb, 0x41, 0x83, 0xbc, 0xda, 0xe3, 0xc1, 0x34, 0x16, + 0x11, 0xb1, 0x1b, 0x58, 0xd7, 0x7b, 0x7a, 0xc0, 0x87, 0xe4, 0xbd, 0x1e, 0x66, 0x85, 0xbf, 0x14, + 0xe8, 0x4c, 0x45, 0xd0, 0x99, 0xc7, 0x24, 0x61, 0x7e, 0x22, 0x17, 0xc9, 0x17, 0xb9, 0xf2, 0x17, + 0xf7, 0xab, 0x1d, 0x17, 0xae, 0x25, 0xd3, 0x9a, 0x33, 0x00, 0x04, 0xcd, 0xcf, 0x0f, 0x9c, 0xc1, + 0xa5, 0x88, 0xb1, 0xf1, 0x63, 0x8f, 0x02, 0xf6, 0x8b, 0x83, 0xb0, 0x33, 0x5e, 0x40, 0x25, 0x8f, + 0x10, 0xca, 0x70, 0x92, 0x3e, 0x3a, 0xbf, 0x98, 0x05, 0x57, 0x07, 0x27, 0x9c, 0x6a, 0x86, 0x1b, + 0xb6, 0xec, 0x0b, 0xc9, 0x20, 0x12, 0x8e, 0x94, 0x04, 0xcd, 0xf1, 0x24, 0xc8, 0xb9, 0x7b, 0x17, + 0x03, 0x47, 0x40, 0xfa, 0x00, 0xdf, 0xa8, 0x26, 0x1a, 0xab, 0x06, 0xf2, 0x37, 0xe6, 0x46, 0x78, + 0x0b, 0x38, 0x61, 0xed, 0xed, 0x06, 0x58, 0x90, 0x9e, 0x86, 0xf5, 0x2c, 0x07, 0x5f, 0x88, 0x4d, + 0x36, 0x2b, 0xdf, 0x64, 0x13, 0x8c, 0xa4, 0x32, 0x95, 0x4e, 0x5f, 0x3d, 0x3e, 0xdb, 0x77, 0x04, + 0xad, 0x9c, 0x58, 0x29, 0x28, 0xfc, 0x0a, 0x0f, 0xff, 0x3f, 0x65, 0x12, 0xf5, 0xbc, 0xc3, 0x4f, + 0xae, 0x25, 0xe8, 0x09, 0x8f, 0xf2, 0xd8, 0xda, 0xeb, 0x72, 0x00, 0x36, 0x43, 0x87, 0x1c, 0x06, + 0xea, 0xba, 0x83, 0x2e, 0x9b, 0xe8, 0x8a, 0xdb, 0xb7, 0xdf, 0x41, 0xe5, 0x96, 0xe1, 0xe5, 0xf6, + 0xe7, 0x59, 0x59, 0x87, 0x1a, 0x51, 0x83, 0x0e, 0x14, 0x15, 0xd1, 0x76, 0x9e, 0x0e, 0x0a, 0x3d, + 0x96, 0x83, 0xb5, 0x9d, 0xd2, 0x68, 0x54, 0x71, 0x46, 0x96, 0xaa, 0x07, 0x24, 0xe1, 0xdf, 0x65, + 0xc0, 0x0c, 0xf7, 0x26, 0x7a, 0x47, 0xe0, 0x80, 0x6a, 0x29, 0xf1, 0x33, 0x52, 0x55, 0x7a, 0x46, + 0xaa, 0x2d, 0x80, 0x9c, 0x2b, 0xd5, 0x68, 0x69, 0x36, 0xed, 0x89, 0x60, 0xb6, 0x83, 0x7a, 0xc8, + 0xea, 0x20, 0xab, 0x6d, 0x22, 0xf7, 0x74, 0x8e, 0x88, 0x25, 0x32, 0x4c, 0x83, 0x90, 0x59, 0x32, + 0x7e, 0x77, 0x32, 0xac, 0xd2, 0xd7, 0xd2, 0x3f, 0x55, 0xc0, 0x19, 0xae, 0x95, 0x2c, 0x3b, 0xf6, + 0x6e, 0x62, 0x4d, 0x7d, 0x39, 0x3f, 0x1e, 0x6f, 0x88, 0x9a, 0x7a, 0x57, 0x6c, 0xa3, 0x1c, 0x50, + 0x5c, 0x44, 0xa3, 0x7f, 0x7f, 0x20, 0xdd, 0xa7, 0x09, 0xd2, 0x5d, 0x3a, 0x24, 0xfd, 0x09, 0x1c, + 0x08, 0xcf, 0x82, 0x59, 0x1d, 0x19, 0x9d, 0x60, 0xa8, 0xfd, 0x63, 0xce, 0x88, 0x7e, 0x22, 0xc8, + 0x7a, 0xe1, 0x6a, 0xd8, 0x23, 0x0e, 0x56, 0x86, 0xff, 0x92, 0x3c, 0x90, 0x45, 0x31, 0xf2, 0x91, + 0x54, 0xc3, 0xe9, 0xb7, 0xc0, 0x55, 0x19, 0x0b, 0x3c, 0x3b, 0xc8, 0x02, 0xbf, 0x0e, 0xcc, 0x74, + 0x0d, 0x97, 0x36, 0x98, 0xe0, 0xee, 0x5f, 0x3e, 0x49, 0xbc, 0x65, 0x3f, 0xf6, 0xb4, 0xdd, 0xa0, + 0xaa, 0x1d, 0x3e, 0x22, 0xf1, 0x87, 0xa5, 0x8e, 0xd6, 0x0d, 0x2b, 0x3b, 0x99, 0x46, 0xdc, 0x3d, + 0xc2, 0xca, 0xdd, 0x29, 0xa0, 0xad, 0x55, 0x9a, 0xcd, 0xd2, 0x0a, 0x39, 0x71, 0xe3, 0xbb, 0x60, + 0x75, 0xce, 0xde, 0x88, 0xc5, 0x47, 0x11, 0xd6, 0x66, 0x41, 0xc1, 0xe7, 0xaf, 0x78, 0x8c, 0x3e, + 0x59, 0x64, 0xc7, 0xa9, 0x98, 0x81, 0x5f, 0x50, 0x41, 0x7e, 0xc3, 0x72, 0x90, 0xd1, 0x81, 0xf7, + 0x73, 0xba, 0xf4, 0x83, 0x82, 0x2e, 0x3d, 0x6c, 0x50, 0xc3, 0xc0, 0xdf, 0xa4, 0xa4, 0x45, 0x62, + 0x38, 0xb2, 0xd8, 0xc5, 0x72, 0x91, 0x99, 0xc3, 0xe3, 0x2e, 0xb7, 0x4a, 0x1e, 0x5d, 0x6a, 0xea, + 0x7d, 0x80, 0x34, 0xb2, 0xbf, 0xa3, 0x82, 0xe2, 0xfa, 0x9e, 0xbb, 0x23, 0x1c, 0xfa, 0xfe, 0x55, + 0x15, 0xcc, 0xf9, 0xe7, 0x62, 0x5a, 0xf6, 0x25, 0x64, 0xc1, 0x67, 0x08, 0x3d, 0xb2, 0x87, 0xd3, + 0xfc, 0x1e, 0x99, 0x3c, 0x68, 0xeb, 0x5c, 0x68, 0x18, 0x65, 0xd0, 0xb1, 0xfe, 0xbe, 0x32, 0x16, + 0x04, 0xfa, 0x0b, 0xeb, 0xec, 0xdb, 0x30, 0xa0, 0x0c, 0x7c, 0xb1, 0xf4, 0x3d, 0x47, 0x43, 0x68, + 0x0f, 0xee, 0xde, 0xe5, 0x6e, 0x2e, 0x4a, 0x44, 0x3a, 0x7d, 0x54, 0xaf, 0x03, 0x05, 0x5f, 0x52, + 0xda, 0x14, 0x50, 0xab, 0x8d, 0x66, 0xf1, 0x98, 0x36, 0x03, 0xa6, 0x4a, 0x56, 0xc7, 0xb1, 0xcd, + 0x4e, 0x31, 0x73, 0x76, 0x0a, 0xe4, 0x2a, 0xbb, 0x3d, 0x6f, 0xff, 0xec, 0xc3, 0xc1, 0x5c, 0xd3, + 0x73, 0x90, 0xb1, 0x1b, 0x8b, 0xdb, 0x1d, 0xb7, 0x83, 0x29, 0xcb, 0xde, 0x34, 0xf6, 0xbc, 0x1d, + 0xed, 0xa1, 0x07, 0xac, 0x0e, 0xa6, 0x35, 0x0d, 0x16, 0x8d, 0xf3, 0xeb, 0x77, 0x92, 0x95, 0x8e, + 0xbc, 0x65, 0x97, 0xf6, 0xbc, 0x9d, 0xc5, 0x6b, 0x3f, 0xf3, 0x67, 0x67, 0x32, 0x9f, 0xfb, 0xb3, + 0x33, 0x99, 0xaf, 0xfd, 0xd9, 0x99, 0xcc, 0x4f, 0xfd, 0xf9, 0x99, 0x63, 0x9f, 0xfb, 0xf3, 0x33, + 0xc7, 0xbe, 0xf8, 0xe7, 0x67, 0x8e, 0xfd, 0xb0, 0xd2, 0xbb, 0x78, 0x31, 0x4f, 0xa8, 0x3c, 0xf6, + 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x11, 0x90, 0xb9, 0xb6, 0x7b, 0x37, 0x02, 0x00, } func (m *Rpc) Marshal() (dAtA []byte, err error) { @@ -84464,6 +85130,394 @@ func (m *RpcAccountLocalLinkSolveChallengeResponseError) MarshalToSizedBuffer(dA return len(dAtA) - i, nil } +func (m *RpcAccountLocalLinkListApps) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RpcAccountLocalLinkListApps) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RpcAccountLocalLinkListApps) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *RpcAccountLocalLinkListAppsRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RpcAccountLocalLinkListAppsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RpcAccountLocalLinkListAppsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *RpcAccountLocalLinkListAppsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RpcAccountLocalLinkListAppsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RpcAccountLocalLinkListAppsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.App) > 0 { + for iNdEx := len(m.App) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.App[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintCommands(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + if m.Error != nil { + { + size, err := m.Error.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintCommands(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *RpcAccountLocalLinkListAppsResponseError) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RpcAccountLocalLinkListAppsResponseError) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RpcAccountLocalLinkListAppsResponseError) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Description) > 0 { + i -= len(m.Description) + copy(dAtA[i:], m.Description) + i = encodeVarintCommands(dAtA, i, uint64(len(m.Description))) + i-- + dAtA[i] = 0x12 + } + if m.Code != 0 { + i = encodeVarintCommands(dAtA, i, uint64(m.Code)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *RpcAccountLocalLinkCreateApp) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RpcAccountLocalLinkCreateApp) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RpcAccountLocalLinkCreateApp) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *RpcAccountLocalLinkCreateAppRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RpcAccountLocalLinkCreateAppRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RpcAccountLocalLinkCreateAppRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.App != nil { + { + size, err := m.App.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintCommands(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *RpcAccountLocalLinkCreateAppResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RpcAccountLocalLinkCreateAppResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RpcAccountLocalLinkCreateAppResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.AppKey) > 0 { + i -= len(m.AppKey) + copy(dAtA[i:], m.AppKey) + i = encodeVarintCommands(dAtA, i, uint64(len(m.AppKey))) + i-- + dAtA[i] = 0x12 + } + if m.Error != nil { + { + size, err := m.Error.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintCommands(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *RpcAccountLocalLinkCreateAppResponseError) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RpcAccountLocalLinkCreateAppResponseError) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RpcAccountLocalLinkCreateAppResponseError) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Description) > 0 { + i -= len(m.Description) + copy(dAtA[i:], m.Description) + i = encodeVarintCommands(dAtA, i, uint64(len(m.Description))) + i-- + dAtA[i] = 0x12 + } + if m.Code != 0 { + i = encodeVarintCommands(dAtA, i, uint64(m.Code)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *RpcAccountLocalLinkRevokeApp) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RpcAccountLocalLinkRevokeApp) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RpcAccountLocalLinkRevokeApp) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *RpcAccountLocalLinkRevokeAppRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RpcAccountLocalLinkRevokeAppRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RpcAccountLocalLinkRevokeAppRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.AppHash) > 0 { + i -= len(m.AppHash) + copy(dAtA[i:], m.AppHash) + i = encodeVarintCommands(dAtA, i, uint64(len(m.AppHash))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *RpcAccountLocalLinkRevokeAppResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RpcAccountLocalLinkRevokeAppResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RpcAccountLocalLinkRevokeAppResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Error != nil { + { + size, err := m.Error.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintCommands(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *RpcAccountLocalLinkRevokeAppResponseError) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RpcAccountLocalLinkRevokeAppResponseError) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RpcAccountLocalLinkRevokeAppResponseError) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Description) > 0 { + i -= len(m.Description) + copy(dAtA[i:], m.Description) + i = encodeVarintCommands(dAtA, i, uint64(len(m.Description))) + i-- + dAtA[i] = 0x12 + } + if m.Code != 0 { + i = encodeVarintCommands(dAtA, i, uint64(m.Code)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + func (m *RpcWorkspace) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -129309,6 +130363,165 @@ func (m *RpcAccountLocalLinkSolveChallengeResponseError) Size() (n int) { return n } +func (m *RpcAccountLocalLinkListApps) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *RpcAccountLocalLinkListAppsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *RpcAccountLocalLinkListAppsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Error != nil { + l = m.Error.Size() + n += 1 + l + sovCommands(uint64(l)) + } + if len(m.App) > 0 { + for _, e := range m.App { + l = e.Size() + n += 1 + l + sovCommands(uint64(l)) + } + } + return n +} + +func (m *RpcAccountLocalLinkListAppsResponseError) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Code != 0 { + n += 1 + sovCommands(uint64(m.Code)) + } + l = len(m.Description) + if l > 0 { + n += 1 + l + sovCommands(uint64(l)) + } + return n +} + +func (m *RpcAccountLocalLinkCreateApp) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *RpcAccountLocalLinkCreateAppRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.App != nil { + l = m.App.Size() + n += 1 + l + sovCommands(uint64(l)) + } + return n +} + +func (m *RpcAccountLocalLinkCreateAppResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Error != nil { + l = m.Error.Size() + n += 1 + l + sovCommands(uint64(l)) + } + l = len(m.AppKey) + if l > 0 { + n += 1 + l + sovCommands(uint64(l)) + } + return n +} + +func (m *RpcAccountLocalLinkCreateAppResponseError) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Code != 0 { + n += 1 + sovCommands(uint64(m.Code)) + } + l = len(m.Description) + if l > 0 { + n += 1 + l + sovCommands(uint64(l)) + } + return n +} + +func (m *RpcAccountLocalLinkRevokeApp) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *RpcAccountLocalLinkRevokeAppRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.AppHash) + if l > 0 { + n += 1 + l + sovCommands(uint64(l)) + } + return n +} + +func (m *RpcAccountLocalLinkRevokeAppResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Error != nil { + l = m.Error.Size() + n += 1 + l + sovCommands(uint64(l)) + } + return n +} + +func (m *RpcAccountLocalLinkRevokeAppResponseError) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Code != 0 { + n += 1 + sovCommands(uint64(m.Code)) + } + l = len(m.Description) + if l > 0 { + n += 1 + l + sovCommands(uint64(l)) + } + return n +} + func (m *RpcWorkspace) Size() (n int) { if m == nil { return 0 @@ -162987,6 +164200,1001 @@ func (m *RpcAccountLocalLinkSolveChallengeResponseError) Unmarshal(dAtA []byte) } return nil } +func (m *RpcAccountLocalLinkListApps) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ListApps: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ListApps: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipCommands(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCommands + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RpcAccountLocalLinkListAppsRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Request: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Request: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipCommands(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCommands + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RpcAccountLocalLinkListAppsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Response: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Response: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthCommands + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthCommands + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Error == nil { + m.Error = &RpcAccountLocalLinkListAppsResponseError{} + } + if err := m.Error.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field App", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthCommands + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthCommands + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.App = append(m.App, &model.AccountAuthAppInfo{}) + if err := m.App[len(m.App)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCommands(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCommands + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RpcAccountLocalLinkListAppsResponseError) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Error: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Error: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Code", wireType) + } + m.Code = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Code |= RpcAccountLocalLinkListAppsResponseErrorCode(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCommands + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCommands + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Description = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCommands(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCommands + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RpcAccountLocalLinkCreateApp) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CreateApp: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CreateApp: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipCommands(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCommands + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RpcAccountLocalLinkCreateAppRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Request: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Request: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field App", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthCommands + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthCommands + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.App == nil { + m.App = &model.AccountAuthAppInfo{} + } + if err := m.App.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCommands(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCommands + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RpcAccountLocalLinkCreateAppResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Response: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Response: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthCommands + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthCommands + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Error == nil { + m.Error = &RpcAccountLocalLinkCreateAppResponseError{} + } + if err := m.Error.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AppKey", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCommands + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCommands + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AppKey = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCommands(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCommands + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RpcAccountLocalLinkCreateAppResponseError) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Error: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Error: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Code", wireType) + } + m.Code = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Code |= RpcAccountLocalLinkCreateAppResponseErrorCode(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCommands + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCommands + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Description = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCommands(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCommands + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RpcAccountLocalLinkRevokeApp) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RevokeApp: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RevokeApp: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipCommands(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCommands + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RpcAccountLocalLinkRevokeAppRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Request: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Request: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AppHash", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCommands + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCommands + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AppHash = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCommands(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCommands + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RpcAccountLocalLinkRevokeAppResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Response: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Response: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthCommands + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthCommands + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Error == nil { + m.Error = &RpcAccountLocalLinkRevokeAppResponseError{} + } + if err := m.Error.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCommands(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCommands + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RpcAccountLocalLinkRevokeAppResponseError) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Error: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Error: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Code", wireType) + } + m.Code = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Code |= RpcAccountLocalLinkRevokeAppResponseErrorCode(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCommands + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCommands + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Description = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCommands(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCommands + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *RpcWorkspace) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/pb/protos/commands.proto b/pb/protos/commands.proto index 4c8f0a804..455ff2fde 100644 --- a/pb/protos/commands.proto +++ b/pb/protos/commands.proto @@ -1236,7 +1236,77 @@ message Rpc { } } } + message ListApps { + message Request { + } + + message Response { + Error error = 1; + repeated model.Account.Auth.AppInfo app = 2; + + message Error { + Code code = 1; + string description = 2; + + enum Code { + NULL = 0; + UNKNOWN_ERROR = 1; + BAD_INPUT = 2; + + ACCOUNT_IS_NOT_RUNNING = 101; + } + } + } + } + message CreateApp { + message Request { + model.Account.Auth.AppInfo app = 1; + } + + message Response { + Error error = 1; + string appKey = 2; // persistent key, that can be used to restore session via CreateSession or for JSON API + + message Error { + Code code = 1; + string description = 2; + + enum Code { + NULL = 0; + UNKNOWN_ERROR = 1; + BAD_INPUT = 2; + + ACCOUNT_IS_NOT_RUNNING = 101; + } + } + } + } + message RevokeApp { + message Request { + string appHash = 1; + } + + message Response { + Error error = 1; + + message Error { + Code code = 1; + string description = 2; + + enum Code { + NULL = 0; + UNKNOWN_ERROR = 1; + BAD_INPUT = 2; + NOT_FOUND = 3; + + ACCOUNT_IS_NOT_RUNNING = 101; + } + } + } + } + } + } message Workspace { message GetCurrent { diff --git a/pb/protos/service/service.proto b/pb/protos/service/service.proto index ad2bf3540..1763110be 100644 --- a/pb/protos/service/service.proto +++ b/pb/protos/service/service.proto @@ -17,6 +17,10 @@ service ClientCommands { rpc WalletConvert (anytype.Rpc.Wallet.Convert.Request) returns (anytype.Rpc.Wallet.Convert.Response); rpc AccountLocalLinkNewChallenge (anytype.Rpc.Account.LocalLink.NewChallenge.Request) returns (anytype.Rpc.Account.LocalLink.NewChallenge.Response); rpc AccountLocalLinkSolveChallenge (anytype.Rpc.Account.LocalLink.SolveChallenge.Request) returns (anytype.Rpc.Account.LocalLink.SolveChallenge.Response); + rpc AccountLocalLinkCreateApp (anytype.Rpc.Account.LocalLink.CreateApp.Request) returns (anytype.Rpc.Account.LocalLink.CreateApp.Response); + rpc AccountLocalLinkListApps (anytype.Rpc.Account.LocalLink.ListApps.Request) returns (anytype.Rpc.Account.LocalLink.ListApps.Response); + rpc AccountLocalLinkRevokeApp (anytype.Rpc.Account.LocalLink.RevokeApp.Request) returns (anytype.Rpc.Account.LocalLink.RevokeApp.Response); + rpc WalletCreateSession (anytype.Rpc.Wallet.CreateSession.Request) returns (anytype.Rpc.Wallet.CreateSession.Response); rpc WalletCloseSession (anytype.Rpc.Wallet.CloseSession.Request) returns (anytype.Rpc.Wallet.CloseSession.Response); // Workspace diff --git a/pb/service/service.pb.go b/pb/service/service.pb.go index 0cf2cd505..7600bd655 100644 --- a/pb/service/service.pb.go +++ b/pb/service/service.pb.go @@ -26,368 +26,371 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package func init() { proto.RegisterFile("pb/protos/service/service.proto", fileDescriptor_93a29dc403579097) } var fileDescriptor_93a29dc403579097 = []byte{ - // 5766 bytes of a gzipped FileDescriptorProto + // 5823 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x9d, 0xdd, 0x6f, 0x24, 0x49, - 0x52, 0xc0, 0xd7, 0x2f, 0x2c, 0xd4, 0x71, 0x0b, 0xf4, 0xc2, 0xb2, 0xb7, 0xdc, 0xcd, 0xcc, 0xce, - 0x87, 0x3d, 0x33, 0x1e, 0xb7, 0x67, 0x67, 0xf6, 0x8b, 0x3b, 0x24, 0xe8, 0xb1, 0xc7, 0xde, 0xbe, - 0xb5, 0xbd, 0xc6, 0xdd, 0x9e, 0x11, 0x2b, 0x21, 0x51, 0xee, 0x4a, 0xb7, 0x0b, 0x57, 0x57, 0xd6, - 0x55, 0x65, 0x7b, 0xa6, 0x0f, 0x81, 0x40, 0x20, 0x10, 0x08, 0xc4, 0x89, 0x2f, 0xc1, 0x13, 0x12, - 0x7f, 0x01, 0x7f, 0x06, 0x8f, 0xf7, 0xc8, 0x23, 0xda, 0xfd, 0x33, 0x78, 0x00, 0x55, 0x66, 0x56, - 0x7e, 0x44, 0x45, 0x64, 0x95, 0xf7, 0x9e, 0x66, 0xe4, 0xf8, 0x45, 0x44, 0x7e, 0x44, 0x66, 0x46, - 0x66, 0x65, 0x55, 0x47, 0x37, 0x8b, 0xb3, 0xed, 0xa2, 0xe4, 0x82, 0x57, 0xdb, 0x15, 0x2b, 0xaf, - 0xd2, 0x19, 0x6b, 0xfe, 0x1d, 0xca, 0x3f, 0x0f, 0xde, 0x8c, 0xf3, 0x95, 0x58, 0x15, 0xec, 0xbd, - 0x77, 0x2d, 0x39, 0xe3, 0x8b, 0x45, 0x9c, 0x27, 0x95, 0x42, 0xde, 0x7b, 0xc7, 0x4a, 0xd8, 0x15, - 0xcb, 0x85, 0xfe, 0xfb, 0x93, 0xff, 0xfd, 0xbf, 0xb5, 0xe8, 0xad, 0x9d, 0x2c, 0x65, 0xb9, 0xd8, - 0xd1, 0x1a, 0x83, 0x2f, 0xa3, 0x6f, 0x8f, 0x8a, 0x62, 0x9f, 0x89, 0x17, 0xac, 0xac, 0x52, 0x9e, - 0x0f, 0xee, 0x0c, 0xb5, 0x83, 0xe1, 0x49, 0x31, 0x1b, 0x8e, 0x8a, 0x62, 0x68, 0x85, 0xc3, 0x13, - 0xf6, 0xa3, 0x25, 0xab, 0xc4, 0x7b, 0x77, 0xc3, 0x50, 0x55, 0xf0, 0xbc, 0x62, 0x83, 0xf3, 0xe8, - 0x57, 0x46, 0x45, 0x31, 0x61, 0x62, 0x97, 0xd5, 0x15, 0x98, 0x88, 0x58, 0xb0, 0xc1, 0x46, 0x4b, - 0xd5, 0x07, 0x8c, 0x8f, 0xfb, 0xdd, 0xa0, 0xf6, 0x33, 0x8d, 0xbe, 0x55, 0xfb, 0xb9, 0x58, 0x8a, - 0x84, 0xbf, 0xca, 0x07, 0xef, 0xb7, 0x15, 0xb5, 0xc8, 0xd8, 0xbe, 0x1d, 0x42, 0xb4, 0xd5, 0x97, - 0xd1, 0x2f, 0xbe, 0x8c, 0xb3, 0x8c, 0x89, 0x9d, 0x92, 0xd5, 0x05, 0xf7, 0x75, 0x94, 0x68, 0xa8, - 0x64, 0xc6, 0xee, 0x9d, 0x20, 0xa3, 0x0d, 0x7f, 0x19, 0x7d, 0x5b, 0x49, 0x4e, 0xd8, 0x8c, 0x5f, - 0xb1, 0x72, 0x80, 0x6a, 0x69, 0x21, 0xd1, 0xe4, 0x2d, 0x08, 0xda, 0xde, 0xe1, 0xf9, 0x15, 0x2b, - 0x05, 0x6e, 0x5b, 0x0b, 0xc3, 0xb6, 0x2d, 0xa4, 0x6d, 0xff, 0xf5, 0x5a, 0xf4, 0xdd, 0xd1, 0x6c, - 0xc6, 0x97, 0xb9, 0x38, 0xe0, 0xb3, 0x38, 0x3b, 0x48, 0xf3, 0xcb, 0x23, 0xf6, 0x6a, 0xe7, 0xa2, - 0xe6, 0xf3, 0x39, 0x1b, 0x3c, 0xf5, 0x5b, 0x55, 0xa1, 0x43, 0xc3, 0x0e, 0x5d, 0xd8, 0xf8, 0xfe, - 0xf0, 0x7a, 0x4a, 0xba, 0x2c, 0x7f, 0xbf, 0x16, 0xdd, 0x80, 0x65, 0x99, 0xf0, 0xec, 0x8a, 0xd9, - 0xd2, 0x7c, 0xd4, 0x61, 0xd8, 0xc7, 0x4d, 0x79, 0x3e, 0xbe, 0xae, 0x9a, 0x2e, 0x51, 0x16, 0xbd, - 0xed, 0x86, 0xcb, 0x84, 0x55, 0x72, 0x38, 0x3d, 0xa0, 0x23, 0x42, 0x23, 0xc6, 0xf3, 0xc3, 0x3e, - 0xa8, 0xf6, 0x96, 0x46, 0x03, 0xed, 0x2d, 0xe3, 0x95, 0x71, 0x76, 0x1f, 0xb5, 0xe0, 0x10, 0xc6, - 0xd7, 0x83, 0x1e, 0xa4, 0x76, 0xf5, 0x07, 0xd1, 0x2f, 0xbd, 0xe4, 0xe5, 0x65, 0x55, 0xc4, 0x33, - 0xa6, 0x87, 0xc2, 0x3d, 0x5f, 0xbb, 0x91, 0xc2, 0xd1, 0xb0, 0xde, 0x85, 0x39, 0x41, 0xdb, 0x08, - 0xbf, 0x28, 0x18, 0x9c, 0x83, 0xac, 0x62, 0x2d, 0xa4, 0x82, 0x16, 0x42, 0xda, 0xf6, 0x65, 0x34, - 0xb0, 0xb6, 0xcf, 0xfe, 0x90, 0xcd, 0xc4, 0x28, 0x49, 0x60, 0xaf, 0x58, 0x5d, 0x49, 0x0c, 0x47, - 0x49, 0x42, 0xf5, 0x0a, 0x8e, 0x6a, 0x67, 0xaf, 0xa2, 0x77, 0x80, 0xb3, 0x83, 0xb4, 0x92, 0x0e, - 0xb7, 0xc2, 0x56, 0x34, 0x66, 0x9c, 0x0e, 0xfb, 0xe2, 0xda, 0xf1, 0x9f, 0xae, 0x45, 0xdf, 0x41, - 0x3c, 0x9f, 0xb0, 0x05, 0xbf, 0x62, 0x83, 0xc7, 0xdd, 0xd6, 0x14, 0x69, 0xfc, 0x7f, 0x70, 0x0d, - 0x0d, 0x24, 0x4c, 0x26, 0x2c, 0x63, 0x33, 0x41, 0x86, 0x89, 0x12, 0x77, 0x86, 0x89, 0xc1, 0x9c, - 0x11, 0xd6, 0x08, 0xf7, 0x99, 0xd8, 0x59, 0x96, 0x25, 0xcb, 0x05, 0xd9, 0x97, 0x16, 0xe9, 0xec, - 0x4b, 0x0f, 0x45, 0xea, 0xb3, 0xcf, 0xc4, 0x28, 0xcb, 0xc8, 0xfa, 0x28, 0x71, 0x67, 0x7d, 0x0c, - 0xa6, 0x3d, 0xcc, 0xa2, 0x5f, 0x76, 0x5a, 0x4c, 0x8c, 0xf3, 0x73, 0x3e, 0xa0, 0xdb, 0x42, 0xca, - 0x8d, 0x8f, 0x8d, 0x4e, 0x0e, 0xa9, 0xc6, 0xf3, 0xd7, 0x05, 0x2f, 0xe9, 0x6e, 0x51, 0xe2, 0xce, - 0x6a, 0x18, 0x4c, 0x7b, 0xf8, 0xfd, 0xe8, 0x2d, 0x3d, 0x4b, 0x36, 0xeb, 0xd9, 0x5d, 0x74, 0x0a, - 0x85, 0x0b, 0xda, 0xbd, 0x0e, 0xaa, 0x65, 0xfe, 0x30, 0x9d, 0x97, 0xf5, 0xec, 0x83, 0x9b, 0xd7, - 0xd2, 0x0e, 0xf3, 0x96, 0xd2, 0xe6, 0x79, 0xf4, 0xab, 0xbe, 0xf9, 0x9d, 0x38, 0x9f, 0xb1, 0x6c, - 0xf0, 0x30, 0xa4, 0xae, 0x18, 0xe3, 0x6a, 0xb3, 0x17, 0x6b, 0x27, 0x3b, 0x4d, 0xe8, 0xc9, 0xf4, - 0x0e, 0xaa, 0x0d, 0xa6, 0xd2, 0xbb, 0x61, 0xa8, 0x65, 0x7b, 0x97, 0x65, 0x8c, 0xb4, 0xad, 0x84, - 0x1d, 0xb6, 0x0d, 0xa4, 0x6d, 0x97, 0xd1, 0xaf, 0x99, 0x6e, 0xae, 0xf3, 0x02, 0x29, 0xaf, 0x17, - 0x9d, 0x4d, 0xa2, 0x1f, 0x5d, 0xc8, 0xf8, 0x7a, 0xd4, 0x0f, 0x6e, 0xd5, 0x47, 0xcf, 0x28, 0x78, - 0x7d, 0xc0, 0x7c, 0x72, 0x37, 0x0c, 0x69, 0xdb, 0x7f, 0xb3, 0x16, 0x7d, 0x4f, 0xcb, 0x9e, 0xe7, - 0xf1, 0x59, 0xc6, 0xe4, 0x12, 0x7f, 0xc4, 0xc4, 0x2b, 0x5e, 0x5e, 0x4e, 0x56, 0xf9, 0x8c, 0x48, - 0x67, 0x70, 0xb8, 0x23, 0x9d, 0x21, 0x95, 0x74, 0x61, 0xfe, 0x28, 0x7a, 0xb7, 0x09, 0x8a, 0x8b, - 0x38, 0x9f, 0xb3, 0x1f, 0x56, 0x3c, 0x1f, 0x15, 0xe9, 0x28, 0x49, 0xca, 0xc1, 0x10, 0xef, 0x7a, - 0xc8, 0x99, 0x12, 0x6c, 0xf7, 0xe6, 0x9d, 0xf4, 0x59, 0xb7, 0xb2, 0xe0, 0x05, 0x4c, 0x9f, 0x9b, - 0xe6, 0x13, 0xbc, 0xa0, 0xd2, 0x67, 0x1f, 0x69, 0x59, 0x3d, 0xac, 0xd7, 0x20, 0xdc, 0xea, 0xa1, - 0xbb, 0xe8, 0xdc, 0x0e, 0x21, 0x76, 0x0d, 0x68, 0x1a, 0x8a, 0xe7, 0xe7, 0xe9, 0xfc, 0xb4, 0x48, - 0xea, 0x31, 0xf4, 0x00, 0xaf, 0xb3, 0x83, 0x10, 0x6b, 0x00, 0x81, 0x6a, 0x6f, 0x7f, 0x67, 0xb3, - 0x4c, 0x3d, 0x2f, 0xed, 0x95, 0x7c, 0x71, 0xc0, 0xe6, 0xf1, 0x6c, 0xa5, 0x27, 0xd3, 0x0f, 0x43, - 0xb3, 0x18, 0xa4, 0x4d, 0x21, 0x3e, 0xba, 0xa6, 0x96, 0x2e, 0xcf, 0xbf, 0xaf, 0x45, 0x77, 0xbd, - 0x38, 0xd1, 0xc1, 0xa4, 0x4a, 0x3f, 0xca, 0x93, 0x13, 0x56, 0x89, 0xb8, 0x14, 0x83, 0xef, 0x07, - 0x62, 0x80, 0xd0, 0x31, 0x65, 0xfb, 0xc1, 0x37, 0xd2, 0xb5, 0xbd, 0x3e, 0xa9, 0x57, 0x09, 0x3d, - 0xff, 0xf8, 0xbd, 0x2e, 0x25, 0x70, 0xf6, 0xb9, 0x1d, 0x42, 0x6c, 0xaf, 0x4b, 0xc1, 0x38, 0xbf, - 0x4a, 0x05, 0xdb, 0x67, 0x39, 0x2b, 0xdb, 0xbd, 0xae, 0x54, 0x7d, 0x84, 0xe8, 0x75, 0x02, 0xb5, - 0x33, 0x9d, 0xe7, 0xcd, 0x64, 0x1a, 0x9b, 0x01, 0x23, 0xad, 0x5c, 0xe3, 0x51, 0x3f, 0x98, 0xa8, - 0xa1, 0xd8, 0xaf, 0x8d, 0x04, 0x6b, 0xa8, 0x90, 0x5e, 0x35, 0x34, 0xa8, 0xdd, 0x98, 0x3b, 0xde, - 0x4e, 0xd8, 0x15, 0xbf, 0x84, 0x1b, 0x73, 0xd7, 0x80, 0x02, 0x88, 0x8d, 0x39, 0x0a, 0xda, 0xe4, - 0xc3, 0xf1, 0xf3, 0x22, 0x65, 0xaf, 0x40, 0xf2, 0xe1, 0x2a, 0xd7, 0x62, 0x22, 0xf9, 0x40, 0x30, - 0xed, 0xe1, 0x28, 0xfa, 0x05, 0x29, 0xfc, 0x21, 0x4f, 0xf3, 0xc1, 0x4d, 0x44, 0xa9, 0x16, 0x18, - 0xab, 0xb7, 0x68, 0x00, 0x94, 0xb8, 0xfe, 0xab, 0xce, 0x04, 0xee, 0x11, 0x4a, 0x20, 0x09, 0x58, - 0xef, 0xc2, 0x6c, 0xd6, 0x27, 0x85, 0xf5, 0x6c, 0x39, 0xb9, 0x88, 0xcb, 0x34, 0x9f, 0x0f, 0x30, - 0x5d, 0x47, 0x4e, 0x64, 0x7d, 0x18, 0x07, 0xc2, 0x49, 0x2b, 0x8e, 0x8a, 0xa2, 0xac, 0x27, 0x61, - 0x2c, 0x9c, 0x7c, 0x24, 0x18, 0x4e, 0x2d, 0x14, 0xf7, 0xb6, 0xcb, 0x66, 0x59, 0x9a, 0x07, 0xbd, - 0x69, 0xa4, 0x8f, 0x37, 0x8b, 0x82, 0xe0, 0x3d, 0x60, 0xf1, 0x15, 0x6b, 0x6a, 0x86, 0xb5, 0x8c, - 0x0b, 0x04, 0x83, 0x17, 0x80, 0x76, 0x8b, 0x2d, 0xc5, 0x87, 0xf1, 0x25, 0xab, 0x1b, 0x98, 0xd5, - 0x4b, 0xf8, 0x00, 0xd3, 0xf7, 0x08, 0x62, 0x8b, 0x8d, 0x93, 0xda, 0xd5, 0x32, 0x7a, 0x47, 0xca, - 0x8f, 0xe3, 0x52, 0xa4, 0xb3, 0xb4, 0x88, 0xf3, 0x66, 0xeb, 0x86, 0xcd, 0x22, 0x2d, 0xca, 0xb8, - 0xdc, 0xea, 0x49, 0x6b, 0xb7, 0xff, 0xb2, 0x16, 0xbd, 0x0f, 0xfd, 0x1e, 0xb3, 0x72, 0x91, 0xca, - 0x13, 0x80, 0x4a, 0x4d, 0xf9, 0x83, 0x4f, 0xc2, 0x46, 0x5b, 0x0a, 0xa6, 0x34, 0x9f, 0x5e, 0x5f, - 0xd1, 0xe6, 0x7d, 0x13, 0xbd, 0x2b, 0xfa, 0xa2, 0x4c, 0x5a, 0x27, 0x64, 0x93, 0x66, 0xab, 0x23, - 0x85, 0x44, 0xde, 0xd7, 0x82, 0xc0, 0x08, 0x3f, 0xcd, 0xab, 0xc6, 0x3a, 0x36, 0xc2, 0xad, 0x38, - 0x38, 0xc2, 0x3d, 0xcc, 0x8e, 0xf0, 0xe3, 0xe5, 0x59, 0x96, 0x56, 0x17, 0x69, 0x3e, 0xd7, 0x49, - 0xbe, 0xaf, 0x6b, 0xc5, 0x30, 0xcf, 0xdf, 0xe8, 0xe4, 0x30, 0x27, 0x3a, 0x58, 0x48, 0x27, 0x20, - 0x4c, 0x36, 0x3a, 0x39, 0xbb, 0xf7, 0xb2, 0xd2, 0x7a, 0xd3, 0x0f, 0xf6, 0x5e, 0x8e, 0x6a, 0x2d, - 0x25, 0xf6, 0x5e, 0x6d, 0xca, 0xee, 0xbd, 0xdc, 0x3a, 0x54, 0x3c, 0xbb, 0x62, 0xa7, 0x65, 0x0a, - 0xf6, 0x5e, 0x5e, 0xf9, 0x1a, 0x86, 0xd8, 0x7b, 0x51, 0xac, 0x9d, 0xa8, 0x2c, 0xb1, 0xcf, 0xc4, - 0x44, 0xc4, 0x62, 0x59, 0x81, 0x89, 0xca, 0xb1, 0x61, 0x10, 0x62, 0xa2, 0x22, 0x50, 0xed, 0xed, - 0x77, 0xa3, 0x48, 0x9d, 0x97, 0xc8, 0x33, 0x2d, 0x7f, 0xed, 0xd1, 0x07, 0x29, 0xde, 0x81, 0xd6, - 0xfb, 0x01, 0xc2, 0xa6, 0x57, 0xea, 0xef, 0xf2, 0xa8, 0x6e, 0x80, 0x6a, 0x48, 0x11, 0x91, 0x5e, - 0x01, 0x04, 0x16, 0x74, 0x72, 0xc1, 0x5f, 0xe1, 0x05, 0xad, 0x25, 0xe1, 0x82, 0x6a, 0xc2, 0x1e, - 0x9e, 0xeb, 0x82, 0x62, 0x87, 0xe7, 0x4d, 0x31, 0x42, 0x87, 0xe7, 0x90, 0xb1, 0x31, 0xe3, 0x1a, - 0x7e, 0xc6, 0xf9, 0xe5, 0x22, 0x2e, 0x2f, 0x41, 0xcc, 0x78, 0xca, 0x0d, 0x43, 0xc4, 0x0c, 0xc5, - 0xda, 0x98, 0x71, 0x1d, 0xd6, 0xc9, 0xf9, 0x69, 0x99, 0x81, 0x98, 0xf1, 0x6c, 0x68, 0x84, 0x88, - 0x19, 0x02, 0xb5, 0xb3, 0x93, 0xeb, 0x6d, 0xc2, 0xe0, 0x71, 0x8d, 0xa7, 0x3e, 0x61, 0xd4, 0x71, - 0x0d, 0x82, 0xc1, 0x10, 0xda, 0x2f, 0xe3, 0xe2, 0x02, 0x0f, 0x21, 0x29, 0x0a, 0x87, 0x50, 0x83, - 0xc0, 0xfe, 0x9e, 0xb0, 0xb8, 0x9c, 0x5d, 0xe0, 0xfd, 0xad, 0x64, 0xe1, 0xfe, 0x36, 0x0c, 0xec, - 0x6f, 0x25, 0x78, 0x99, 0x8a, 0x8b, 0x43, 0x26, 0x62, 0xbc, 0xbf, 0x7d, 0x26, 0xdc, 0xdf, 0x2d, - 0xd6, 0x66, 0xff, 0xae, 0xc3, 0xc9, 0xf2, 0xac, 0x9a, 0x95, 0xe9, 0x19, 0x1b, 0x04, 0xac, 0x18, - 0x88, 0xc8, 0xfe, 0x49, 0x58, 0xfb, 0xfc, 0xc9, 0x5a, 0x74, 0xb3, 0xe9, 0x76, 0x5e, 0x55, 0x7a, - 0xed, 0xf3, 0xdd, 0x7f, 0x84, 0xf7, 0x2f, 0x81, 0x13, 0x8f, 0x33, 0x7a, 0xa8, 0x39, 0xb9, 0x01, - 0x5e, 0xa4, 0xd3, 0xbc, 0x32, 0x85, 0xfa, 0xa4, 0x8f, 0x75, 0x47, 0x81, 0xc8, 0x0d, 0x7a, 0x29, - 0xda, 0xb4, 0x4c, 0xf7, 0x4f, 0x23, 0x1b, 0x27, 0x15, 0x48, 0xcb, 0x9a, 0xf6, 0x76, 0x08, 0x22, - 0x2d, 0xc3, 0x49, 0x18, 0x0a, 0xfb, 0x25, 0x5f, 0x16, 0x55, 0x47, 0x28, 0x00, 0x28, 0x1c, 0x0a, - 0x6d, 0x58, 0xfb, 0x7c, 0x1d, 0xfd, 0xba, 0x1b, 0x7e, 0x6e, 0x63, 0x6f, 0xd1, 0x31, 0x85, 0x35, - 0xf1, 0xb0, 0x2f, 0x6e, 0x33, 0x8a, 0xc6, 0xb3, 0xd8, 0x65, 0x22, 0x4e, 0xb3, 0x6a, 0xb0, 0x8e, - 0xdb, 0x68, 0xe4, 0x44, 0x46, 0x81, 0x71, 0x70, 0x7e, 0xdb, 0x5d, 0x16, 0x59, 0x3a, 0x6b, 0x3f, - 0x4c, 0xd2, 0xba, 0x46, 0x1c, 0x9e, 0xdf, 0x5c, 0x0c, 0xce, 0xd7, 0x75, 0xea, 0x27, 0xff, 0x33, - 0x5d, 0x15, 0x0c, 0x9f, 0xaf, 0x3d, 0x24, 0x3c, 0x5f, 0x43, 0x14, 0xd6, 0x67, 0xc2, 0xc4, 0x41, - 0xbc, 0xe2, 0x4b, 0x62, 0xbe, 0x36, 0xe2, 0x70, 0x7d, 0x5c, 0xcc, 0xee, 0x0d, 0x8c, 0x87, 0x71, - 0x2e, 0x58, 0x99, 0xc7, 0xd9, 0x5e, 0x16, 0xcf, 0xab, 0x01, 0x31, 0xc7, 0xf8, 0x14, 0xb1, 0x37, - 0xa0, 0x69, 0xa4, 0x19, 0xc7, 0xd5, 0x5e, 0x7c, 0xc5, 0xcb, 0x54, 0xd0, 0xcd, 0x68, 0x91, 0xce, - 0x66, 0xf4, 0x50, 0xd4, 0xdb, 0xa8, 0x9c, 0x5d, 0xa4, 0x57, 0x2c, 0x09, 0x78, 0x6b, 0x90, 0x1e, - 0xde, 0x1c, 0x14, 0xe9, 0xb4, 0x09, 0x5f, 0x96, 0x33, 0x46, 0x76, 0x9a, 0x12, 0x77, 0x76, 0x9a, - 0xc1, 0xb4, 0x87, 0xbf, 0x58, 0x8b, 0x7e, 0x43, 0x49, 0xdd, 0x27, 0x3c, 0xbb, 0x71, 0x75, 0x71, - 0xc6, 0xe3, 0x32, 0x19, 0x7c, 0x80, 0xd9, 0x41, 0x51, 0xe3, 0xfa, 0xc9, 0x75, 0x54, 0x60, 0xb3, - 0xd6, 0x79, 0xb7, 0x1d, 0x71, 0x68, 0xb3, 0x7a, 0x48, 0xb8, 0x59, 0x21, 0x0a, 0x27, 0x10, 0x29, - 0x57, 0x07, 0x80, 0xeb, 0xa4, 0xbe, 0x7f, 0x0a, 0xb8, 0xd1, 0xc9, 0xc1, 0xf9, 0xb1, 0x16, 0xfa, - 0xd1, 0xb2, 0x45, 0xd9, 0xc0, 0x23, 0x66, 0xd8, 0x17, 0x27, 0x3d, 0x9b, 0x51, 0x11, 0xf6, 0xdc, - 0x1a, 0x19, 0xc3, 0xbe, 0x38, 0xe1, 0xd9, 0x99, 0xd6, 0x42, 0x9e, 0x91, 0xa9, 0x6d, 0xd8, 0x17, - 0x87, 0xd9, 0x97, 0x66, 0x9a, 0x75, 0xe1, 0x61, 0xc0, 0x0e, 0x5c, 0x1b, 0x36, 0x7b, 0xb1, 0xda, - 0xe1, 0x5f, 0xad, 0x45, 0xdf, 0xb5, 0x1e, 0x0f, 0x79, 0x92, 0x9e, 0xaf, 0x14, 0xf4, 0x22, 0xce, - 0x96, 0xac, 0x1a, 0x3c, 0xa1, 0xac, 0xb5, 0x59, 0x53, 0x82, 0xa7, 0xd7, 0xd2, 0x81, 0x63, 0x67, - 0x54, 0x14, 0xd9, 0x6a, 0xca, 0x16, 0x45, 0x46, 0x8e, 0x1d, 0x0f, 0x09, 0x8f, 0x1d, 0x88, 0xc2, - 0xac, 0x7c, 0xca, 0xeb, 0x9c, 0x1f, 0xcd, 0xca, 0xa5, 0x28, 0x9c, 0x95, 0x37, 0x08, 0xcc, 0x95, - 0xa6, 0x7c, 0x87, 0x67, 0x19, 0x9b, 0x89, 0xf6, 0x2d, 0x11, 0xa3, 0x69, 0x89, 0x70, 0xae, 0x04, - 0x48, 0x7b, 0x2a, 0xd7, 0xec, 0x21, 0xe3, 0x92, 0x3d, 0x5b, 0x1d, 0xa4, 0xf9, 0xe5, 0x00, 0x4f, - 0x0b, 0x2c, 0x40, 0x9c, 0xca, 0xa1, 0x20, 0xdc, 0xab, 0x9e, 0xe6, 0x09, 0xc7, 0xf7, 0xaa, 0xb5, - 0x24, 0xbc, 0x57, 0xd5, 0x04, 0x34, 0x79, 0xc2, 0x28, 0x93, 0xb5, 0x24, 0x6c, 0x52, 0x13, 0xd8, - 0x54, 0xa8, 0x9f, 0x14, 0x91, 0x53, 0x21, 0x78, 0x36, 0xb4, 0xd1, 0xc9, 0xc1, 0x3d, 0x97, 0x76, - 0x80, 0x46, 0x04, 0x30, 0x7e, 0x27, 0xc8, 0xc0, 0xd0, 0x6f, 0x76, 0xc3, 0x7b, 0x4c, 0xcc, 0x2e, - 0xf0, 0xd0, 0xf7, 0x90, 0x70, 0xe8, 0x43, 0x14, 0xb6, 0xd5, 0x94, 0x9b, 0xdd, 0xfc, 0x3a, 0x1e, - 0x78, 0xad, 0x9d, 0xfc, 0x46, 0x27, 0x07, 0xdb, 0x6a, 0xbc, 0xa0, 0xdb, 0x4a, 0xc9, 0xc2, 0x6d, - 0x65, 0x18, 0x58, 0x7a, 0x25, 0x90, 0x87, 0x64, 0xeb, 0xb4, 0xa2, 0x77, 0x4c, 0xb6, 0xd1, 0xc9, - 0x69, 0x27, 0xff, 0x64, 0xf6, 0x87, 0x4a, 0x7a, 0xc4, 0xeb, 0xc1, 0xf7, 0x22, 0xce, 0xd2, 0x24, - 0x16, 0x6c, 0xca, 0x2f, 0x59, 0x8e, 0x6f, 0xc5, 0x74, 0x69, 0x15, 0x3f, 0xf4, 0x14, 0xc2, 0x5b, - 0xb1, 0xb0, 0x22, 0x8c, 0x13, 0x45, 0x9f, 0x56, 0x6c, 0x27, 0xae, 0x88, 0x29, 0xd2, 0x43, 0xc2, - 0x71, 0x02, 0x51, 0x98, 0x08, 0x2b, 0xf9, 0xf3, 0xd7, 0x05, 0x2b, 0x53, 0x96, 0xcf, 0x18, 0x9e, - 0x08, 0x43, 0x2a, 0x9c, 0x08, 0x23, 0x34, 0xdc, 0x04, 0xee, 0xc6, 0x82, 0x3d, 0x5b, 0x4d, 0xd3, - 0x05, 0xab, 0x44, 0xbc, 0x28, 0xf0, 0x4d, 0x20, 0x80, 0xc2, 0x9b, 0xc0, 0x36, 0xdc, 0x3a, 0x73, - 0x32, 0x33, 0x6d, 0xfb, 0xd6, 0x1a, 0x24, 0x02, 0xb7, 0xd6, 0x08, 0x14, 0x36, 0xac, 0x05, 0xd0, - 0xa7, 0x0f, 0x2d, 0x2b, 0xc1, 0xa7, 0x0f, 0x34, 0xdd, 0x3a, 0xc9, 0x33, 0xcc, 0xa4, 0x1e, 0x9a, - 0x1d, 0x45, 0x9f, 0xb8, 0x43, 0x74, 0xb3, 0x17, 0x8b, 0x1f, 0x1d, 0x9e, 0xb0, 0x2c, 0x96, 0xeb, - 0x61, 0xe0, 0x7c, 0xae, 0x61, 0xfa, 0x1c, 0x1d, 0x3a, 0xac, 0x76, 0xf8, 0x67, 0x6b, 0xd1, 0x7b, - 0x98, 0xc7, 0x2f, 0x0a, 0xe9, 0xf7, 0x71, 0xb7, 0x2d, 0x45, 0x12, 0xd7, 0xf2, 0xc2, 0x1a, 0xf6, - 0x66, 0x49, 0x23, 0xb2, 0xb7, 0xf6, 0x74, 0x01, 0xfc, 0x6c, 0xd0, 0x94, 0x1f, 0x72, 0xc4, 0xcd, - 0x92, 0x10, 0x6f, 0x37, 0x5a, 0x7e, 0xb9, 0x2a, 0xb0, 0xd1, 0x32, 0x36, 0xb4, 0x98, 0xd8, 0x68, - 0x21, 0x98, 0x1d, 0x9d, 0x6e, 0xf5, 0x5e, 0xa6, 0xe2, 0x42, 0x26, 0x72, 0x60, 0x74, 0x7a, 0x65, - 0x35, 0x10, 0x31, 0x3a, 0x49, 0x18, 0xa6, 0x3a, 0x0d, 0x58, 0x8f, 0x4d, 0x6c, 0x2e, 0x37, 0x86, - 0xdc, 0x91, 0x79, 0xbf, 0x1b, 0x84, 0xf1, 0xda, 0x88, 0xf5, 0x9e, 0xea, 0x61, 0xc8, 0x02, 0xd8, - 0x57, 0x6d, 0xf6, 0x62, 0xb5, 0xc3, 0x3f, 0x89, 0xbe, 0xd3, 0xaa, 0xd8, 0x1e, 0x8b, 0xc5, 0xb2, - 0x64, 0xc9, 0x60, 0xbb, 0xa3, 0xdc, 0x0d, 0x68, 0x5c, 0x3f, 0xee, 0xaf, 0xd0, 0x4a, 0xfe, 0x1b, - 0x4e, 0x85, 0x95, 0x29, 0xc3, 0x93, 0x90, 0x49, 0x9f, 0x0d, 0x26, 0xff, 0xb4, 0x4e, 0x6b, 0xff, - 0xee, 0x46, 0xd7, 0xe8, 0x2a, 0x4e, 0x33, 0xf9, 0x14, 0xf8, 0x83, 0x90, 0x51, 0x0f, 0x0d, 0xee, - 0xdf, 0x49, 0x95, 0xd6, 0xcc, 0x2c, 0xc7, 0xb8, 0xb3, 0xef, 0x7b, 0x44, 0xcf, 0x04, 0xc8, 0xb6, - 0x6f, 0xab, 0x27, 0xad, 0xdd, 0x8a, 0x66, 0xc9, 0xab, 0xff, 0xec, 0x06, 0x39, 0xe6, 0x55, 0xab, - 0x22, 0x91, 0xbe, 0xd5, 0x93, 0xd6, 0x5e, 0xff, 0x38, 0x7a, 0xb7, 0xed, 0x55, 0x2f, 0x44, 0xdb, - 0x9d, 0xa6, 0xc0, 0x5a, 0xf4, 0xb8, 0xbf, 0x82, 0x76, 0xff, 0xaf, 0xe6, 0xc0, 0x5b, 0xf9, 0x9f, - 0xf1, 0xc5, 0x82, 0xe5, 0x09, 0x4b, 0x1a, 0x8d, 0xaa, 0xde, 0x98, 0x7d, 0x4a, 0xdb, 0x35, 0x0a, - 0x43, 0x57, 0xc3, 0x94, 0xe8, 0x37, 0xbf, 0x81, 0xa6, 0x2e, 0xda, 0x7f, 0xae, 0x45, 0x0f, 0xd0, - 0xa2, 0x35, 0x81, 0xeb, 0x15, 0xf1, 0x77, 0xfa, 0x38, 0xc2, 0x34, 0x4d, 0x51, 0x47, 0x3f, 0x83, - 0x05, 0x5d, 0xe4, 0x7f, 0x5b, 0x8b, 0x6e, 0x5b, 0xc5, 0x3a, 0xbc, 0x77, 0x78, 0x7e, 0x9e, 0xa5, - 0x33, 0x21, 0x1f, 0xf5, 0x6a, 0x15, 0xba, 0x39, 0x29, 0x8d, 0xee, 0xe6, 0x0c, 0x68, 0xea, 0xb2, - 0xfd, 0xe3, 0x5a, 0x74, 0xcb, 0x6d, 0x4e, 0xf9, 0x9c, 0x58, 0x1d, 0xbb, 0x36, 0x8a, 0xd5, 0xe0, - 0x63, 0xba, 0x0d, 0x30, 0xde, 0x94, 0xeb, 0x93, 0x6b, 0xeb, 0xd9, 0xbd, 0xfa, 0x67, 0x69, 0x25, - 0x78, 0xb9, 0x9a, 0x5c, 0xf0, 0x57, 0xcd, 0xdb, 0x58, 0xfe, 0x6a, 0xa1, 0x81, 0xa1, 0x43, 0x10, - 0x7b, 0x75, 0x9c, 0x6c, 0xb9, 0xb2, 0x6f, 0x6d, 0x55, 0x84, 0x2b, 0x87, 0xe8, 0x70, 0xe5, 0x93, - 0x76, 0xad, 0x6c, 0x6a, 0x65, 0x5f, 0x31, 0xdb, 0xc0, 0x8b, 0xda, 0x7e, 0xcd, 0xec, 0x7e, 0x37, - 0x68, 0x33, 0x66, 0x2d, 0xde, 0x4d, 0xcf, 0xcf, 0x4d, 0x9d, 0xf0, 0x92, 0xba, 0x08, 0x91, 0x31, - 0x13, 0xa8, 0xdd, 0xf4, 0xed, 0xa5, 0x19, 0x93, 0x8f, 0xaa, 0xbe, 0x38, 0x3f, 0xcf, 0x78, 0x9c, - 0x80, 0x4d, 0x5f, 0x2d, 0x1e, 0xba, 0x72, 0x62, 0xd3, 0x87, 0x71, 0xf6, 0x12, 0x4c, 0x2d, 0xad, - 0xc7, 0x5c, 0x3e, 0x4b, 0x33, 0x78, 0x99, 0x5b, 0x6a, 0x1a, 0x21, 0x71, 0x09, 0xa6, 0x05, 0xd9, - 0xc4, 0xac, 0x16, 0xd5, 0x63, 0xa5, 0x29, 0xff, 0xbd, 0xb6, 0xa2, 0x23, 0x26, 0x12, 0x33, 0x04, - 0xb3, 0x87, 0x2a, 0xb5, 0xf0, 0xb4, 0x90, 0xc6, 0x6f, 0xb5, 0xb5, 0x94, 0x84, 0x38, 0x54, 0xf1, - 0x09, 0xbb, 0x87, 0xaf, 0xff, 0xbe, 0xcb, 0x5f, 0xe5, 0xd2, 0xe8, 0xed, 0xb6, 0x4a, 0x23, 0x23, - 0xf6, 0xf0, 0x90, 0xd1, 0x86, 0x3f, 0x8f, 0x7e, 0x5e, 0x1a, 0x2e, 0x79, 0x31, 0xb8, 0x81, 0x28, - 0x94, 0xce, 0xd5, 0xe7, 0x9b, 0xa4, 0xdc, 0xde, 0x99, 0x31, 0xb1, 0x71, 0x5a, 0xc5, 0x73, 0xf8, - 0xbe, 0x82, 0xed, 0x71, 0x29, 0x25, 0xee, 0xcc, 0xb4, 0x29, 0x3f, 0x2a, 0x8e, 0x78, 0xa2, 0xad, - 0x23, 0x35, 0x34, 0xc2, 0x50, 0x54, 0xb8, 0x90, 0x4d, 0xa6, 0x8f, 0xe2, 0xab, 0x74, 0x6e, 0x12, - 0x1e, 0x35, 0x7d, 0x55, 0x20, 0x99, 0xb6, 0xcc, 0xd0, 0x81, 0x88, 0x64, 0x9a, 0x84, 0x9d, 0xc9, - 0xd8, 0x32, 0xfb, 0xcd, 0x31, 0xf4, 0x38, 0x3f, 0xe7, 0x75, 0xea, 0x7d, 0x90, 0xe6, 0x97, 0x70, - 0x32, 0x76, 0x4c, 0xe2, 0x3c, 0x31, 0x19, 0xf7, 0xd1, 0xb3, 0xbb, 0xa6, 0xe6, 0x8c, 0xd6, 0x5e, - 0xd4, 0x50, 0x1a, 0x60, 0xd7, 0x64, 0x8e, 0x72, 0x21, 0x47, 0xec, 0x9a, 0x42, 0xbc, 0xed, 0x62, - 0xe3, 0x3c, 0xe3, 0x39, 0xec, 0x62, 0x6b, 0xa1, 0x16, 0x12, 0x5d, 0xdc, 0x82, 0xec, 0x7c, 0xdc, - 0x88, 0xd4, 0xa9, 0xdf, 0x28, 0xcb, 0xc0, 0x7c, 0x6c, 0x54, 0x0d, 0x40, 0xcc, 0xc7, 0x28, 0xa8, - 0xfd, 0x9c, 0x44, 0xdf, 0xaa, 0x9b, 0xf4, 0xb8, 0x64, 0x57, 0x29, 0x83, 0x77, 0x8a, 0x1c, 0x09, - 0x31, 0xfe, 0x7d, 0xc2, 0x8e, 0xac, 0xd3, 0xbc, 0x2a, 0xb2, 0xb8, 0xba, 0xd0, 0xb7, 0x4c, 0xfc, - 0x3a, 0x37, 0x42, 0x78, 0xcf, 0xe4, 0x5e, 0x07, 0x65, 0x27, 0xf5, 0x46, 0x66, 0xa6, 0x98, 0x75, - 0x5c, 0xb5, 0x35, 0xcd, 0x6c, 0x74, 0x72, 0xf6, 0x51, 0xce, 0x7e, 0x9c, 0x65, 0xac, 0x5c, 0x35, - 0xb2, 0xc3, 0x38, 0x4f, 0xcf, 0x59, 0x25, 0xc0, 0xa3, 0x1c, 0x4d, 0x0d, 0x21, 0x46, 0x3c, 0xca, - 0x09, 0xe0, 0x76, 0x37, 0x09, 0x3c, 0x8f, 0xf3, 0x84, 0xbd, 0x06, 0xbb, 0x49, 0x68, 0x47, 0x32, - 0xc4, 0x6e, 0x92, 0x62, 0xed, 0x23, 0x8d, 0x67, 0x19, 0x9f, 0x5d, 0xea, 0x25, 0xc0, 0xef, 0x60, - 0x29, 0x81, 0x6b, 0xc0, 0xed, 0x10, 0x62, 0x17, 0x01, 0x29, 0x38, 0x61, 0x45, 0x16, 0xcf, 0xe0, - 0xc5, 0x32, 0xa5, 0xa3, 0x65, 0xc4, 0x22, 0x00, 0x19, 0x50, 0x5c, 0x7d, 0x61, 0x0d, 0x2b, 0x2e, - 0xb8, 0xaf, 0x76, 0x3b, 0x84, 0xd8, 0x65, 0x50, 0x0a, 0x26, 0x45, 0x96, 0x0a, 0x30, 0x0c, 0x94, - 0x86, 0x94, 0x10, 0xc3, 0xc0, 0x27, 0x80, 0xc9, 0x43, 0x56, 0xce, 0x19, 0x6a, 0x52, 0x4a, 0x82, - 0x26, 0x1b, 0xc2, 0xde, 0xa2, 0x57, 0x75, 0xe7, 0xc5, 0x0a, 0xdc, 0xa2, 0xd7, 0xd5, 0xe2, 0xc5, - 0x8a, 0xb8, 0x45, 0xef, 0x01, 0xa0, 0x88, 0xc7, 0x71, 0x25, 0xf0, 0x22, 0x4a, 0x49, 0xb0, 0x88, - 0x0d, 0x61, 0xd7, 0x68, 0x55, 0xc4, 0xa5, 0x00, 0x6b, 0xb4, 0x2e, 0x80, 0x73, 0xb5, 0xe2, 0x26, - 0x29, 0xb7, 0x33, 0x89, 0xea, 0x15, 0x26, 0xf6, 0x52, 0x96, 0x25, 0x15, 0x98, 0x49, 0x74, 0xbb, - 0x37, 0x52, 0x62, 0x26, 0x69, 0x53, 0x20, 0x94, 0xf4, 0x73, 0x19, 0xac, 0x76, 0xe0, 0xb1, 0xcc, - 0xed, 0x10, 0x62, 0xe7, 0xa7, 0xa6, 0xd0, 0x3b, 0x71, 0x59, 0xa6, 0xf5, 0xe2, 0xbf, 0x8e, 0x17, - 0xa8, 0x91, 0x13, 0xf3, 0x13, 0xc6, 0x81, 0xe1, 0xd5, 0x4c, 0xdc, 0x58, 0xc1, 0xe0, 0xd4, 0x7d, - 0x27, 0xc8, 0xd8, 0x8c, 0x53, 0x4a, 0x9c, 0xbb, 0x01, 0x58, 0x6b, 0x22, 0x57, 0x03, 0xd6, 0xbb, - 0x30, 0xe7, 0x85, 0x3e, 0xe3, 0xe2, 0x90, 0x5f, 0xb1, 0x29, 0x7f, 0xfe, 0x3a, 0xad, 0xea, 0x4d, - 0xa0, 0x5e, 0xb9, 0x9f, 0x12, 0x96, 0x30, 0x98, 0x78, 0xa1, 0xaf, 0x53, 0xc9, 0x26, 0x10, 0xa0, - 0x2c, 0x47, 0xec, 0x15, 0x9a, 0x40, 0x40, 0x8b, 0x86, 0x23, 0x12, 0x88, 0x10, 0x6f, 0xcf, 0xf1, - 0x8c, 0x73, 0xfd, 0x15, 0x87, 0x29, 0x6f, 0x72, 0x39, 0xca, 0x1a, 0x04, 0x89, 0xa3, 0x94, 0xa0, - 0x82, 0xdd, 0x5f, 0x1a, 0xff, 0x76, 0x88, 0xdd, 0x27, 0xec, 0xb4, 0x87, 0xd9, 0x83, 0x1e, 0x24, - 0xe2, 0xca, 0x5e, 0x70, 0xa1, 0x5c, 0xb5, 0xef, 0xb7, 0x3c, 0xe8, 0x41, 0x3a, 0x67, 0x82, 0x6e, - 0xb5, 0x9e, 0xc5, 0xb3, 0xcb, 0x79, 0xc9, 0x97, 0x79, 0xb2, 0xc3, 0x33, 0x5e, 0x82, 0x33, 0x41, - 0xaf, 0xd4, 0x00, 0x25, 0xce, 0x04, 0x3b, 0x54, 0x6c, 0x06, 0xe7, 0x96, 0x62, 0x94, 0xa5, 0x73, - 0xb8, 0xa3, 0xf6, 0x0c, 0x49, 0x80, 0xc8, 0xe0, 0x50, 0x10, 0x09, 0x22, 0xb5, 0xe3, 0x16, 0xe9, - 0x2c, 0xce, 0x94, 0xbf, 0x6d, 0xda, 0x8c, 0x07, 0x76, 0x06, 0x11, 0xa2, 0x80, 0xd4, 0x73, 0xba, - 0x2c, 0xf3, 0x71, 0x2e, 0x38, 0x59, 0xcf, 0x06, 0xe8, 0xac, 0xa7, 0x03, 0x82, 0x69, 0x75, 0xca, - 0x5e, 0xd7, 0xa5, 0xa9, 0xff, 0xc1, 0xa6, 0xd5, 0xfa, 0xef, 0x43, 0x2d, 0x0f, 0x4d, 0xab, 0x80, - 0x03, 0x95, 0xd1, 0x4e, 0x54, 0xc0, 0x04, 0xb4, 0xfd, 0x30, 0xb9, 0xdf, 0x0d, 0xe2, 0x7e, 0x26, - 0x62, 0x95, 0xb1, 0x90, 0x1f, 0x09, 0xf4, 0xf1, 0xd3, 0x80, 0xf6, 0xb8, 0xc5, 0xab, 0xcf, 0x05, - 0x9b, 0x5d, 0xb6, 0xee, 0xeb, 0xf9, 0x05, 0x55, 0x08, 0x71, 0xdc, 0x42, 0xa0, 0x78, 0x17, 0x8d, - 0x67, 0x3c, 0x0f, 0x75, 0x51, 0x2d, 0xef, 0xd3, 0x45, 0x9a, 0xb3, 0x9b, 0x5f, 0x23, 0xd5, 0x91, - 0xa9, 0xba, 0x69, 0x93, 0xb0, 0xe0, 0x42, 0xc4, 0xe6, 0x97, 0x84, 0x6d, 0x4e, 0x0e, 0x7d, 0x1e, - 0xb6, 0x5f, 0x66, 0x68, 0x59, 0x39, 0xa4, 0x5f, 0x66, 0xa0, 0x58, 0xba, 0x92, 0x2a, 0x46, 0x3a, - 0xac, 0xf8, 0x71, 0xf2, 0xa8, 0x1f, 0x6c, 0xb7, 0x3c, 0x9e, 0xcf, 0x9d, 0x8c, 0xc5, 0xa5, 0xf2, - 0xba, 0x15, 0x30, 0x64, 0x31, 0x62, 0xcb, 0x13, 0xc0, 0xc1, 0x14, 0xe6, 0x79, 0xde, 0xe1, 0xb9, - 0x60, 0xb9, 0xc0, 0xa6, 0x30, 0xdf, 0x98, 0x06, 0x43, 0x53, 0x18, 0xa5, 0x00, 0xe2, 0x56, 0x9e, - 0x07, 0x31, 0x71, 0x14, 0x2f, 0xd0, 0x8c, 0x4d, 0x9d, 0xf5, 0x28, 0x79, 0x28, 0x6e, 0x01, 0xe7, - 0x3c, 0x64, 0x76, 0xbd, 0x4c, 0xe3, 0x72, 0x6e, 0x4e, 0x37, 0x92, 0xc1, 0x63, 0xda, 0x8e, 0x4f, - 0x12, 0x0f, 0x99, 0xc3, 0x1a, 0x60, 0xda, 0x19, 0x2f, 0xe2, 0xb9, 0xa9, 0x29, 0x52, 0x03, 0x29, - 0x6f, 0x55, 0xf5, 0x7e, 0x37, 0x08, 0xfc, 0xbc, 0x48, 0x13, 0xc6, 0x03, 0x7e, 0xa4, 0xbc, 0x8f, - 0x1f, 0x08, 0x82, 0xec, 0xad, 0xae, 0xb7, 0xda, 0xd1, 0x8d, 0xf2, 0x44, 0xef, 0x63, 0x87, 0x44, - 0xf3, 0x00, 0x2e, 0x94, 0xbd, 0x11, 0x3c, 0x18, 0xa3, 0xcd, 0x01, 0x6d, 0x68, 0x8c, 0x9a, 0xf3, - 0xd7, 0x3e, 0x63, 0x14, 0x83, 0xb5, 0xcf, 0x1f, 0xeb, 0x31, 0xba, 0x1b, 0x8b, 0xb8, 0xce, 0xdb, - 0x5f, 0xa4, 0xec, 0x95, 0xde, 0x08, 0x23, 0xf5, 0x6d, 0xa8, 0xa1, 0x7c, 0x17, 0x1b, 0xec, 0x8a, - 0xb7, 0x7b, 0xf3, 0x01, 0xdf, 0x7a, 0x87, 0xd0, 0xe9, 0x1b, 0x6c, 0x15, 0xb6, 0x7b, 0xf3, 0x01, - 0xdf, 0xfa, 0x93, 0x12, 0x9d, 0xbe, 0xc1, 0x77, 0x25, 0xb6, 0x7b, 0xf3, 0xda, 0xf7, 0x9f, 0x37, - 0x03, 0xd7, 0x75, 0x5e, 0xe7, 0x61, 0x33, 0x91, 0x5e, 0x31, 0x2c, 0x9d, 0xf4, 0xed, 0x19, 0x34, - 0x94, 0x4e, 0xd2, 0x2a, 0xce, 0x47, 0xdd, 0xb0, 0x52, 0x1c, 0xf3, 0x2a, 0x95, 0x97, 0x44, 0x9e, - 0xf6, 0x30, 0xda, 0xc0, 0xa1, 0x4d, 0x53, 0x48, 0xc9, 0x3e, 0xee, 0xf6, 0x50, 0x7b, 0x3d, 0xff, - 0x51, 0xc0, 0x5e, 0xfb, 0x96, 0xfe, 0x56, 0x4f, 0xda, 0x3e, 0x78, 0xf6, 0x98, 0xe6, 0x91, 0xe1, - 0x84, 0xa1, 0xab, 0x84, 0x31, 0x65, 0x1e, 0x25, 0xbb, 0xcf, 0x4e, 0x1f, 0xf7, 0x57, 0xe8, 0x70, - 0x3f, 0x4a, 0x92, 0x7e, 0xee, 0xdd, 0x67, 0xee, 0x8f, 0xfb, 0x2b, 0x68, 0xf7, 0x7f, 0xd9, 0x6c, - 0x6b, 0xa0, 0x7f, 0x3d, 0x06, 0x9f, 0xf4, 0xb1, 0x08, 0xc6, 0xe1, 0xd3, 0x6b, 0xe9, 0xe8, 0x82, - 0xfc, 0x6d, 0xb3, 0x7f, 0x6f, 0x50, 0xf9, 0x8e, 0x94, 0x7c, 0xb7, 0x5a, 0x0f, 0xc9, 0x50, 0x54, - 0x59, 0x18, 0x0e, 0xcc, 0x8f, 0xae, 0xa9, 0xe5, 0x7c, 0x61, 0xd0, 0x83, 0xf5, 0xbb, 0xbc, 0x4e, - 0x79, 0x42, 0x96, 0x1d, 0x1a, 0x16, 0xe8, 0xe3, 0xeb, 0xaa, 0x51, 0x43, 0xd5, 0x81, 0xe5, 0x37, - 0x76, 0x9e, 0xf6, 0x34, 0xec, 0x7d, 0x75, 0xe7, 0xc3, 0xeb, 0x29, 0xe9, 0xb2, 0xfc, 0xc7, 0x5a, - 0x74, 0xcf, 0x63, 0xed, 0xe3, 0x0c, 0x70, 0xe8, 0xf2, 0x83, 0x80, 0x7d, 0x4a, 0xc9, 0x14, 0xee, - 0xb7, 0xbe, 0x99, 0xb2, 0xfd, 0x1c, 0x9f, 0xa7, 0xb2, 0x97, 0x66, 0x82, 0x95, 0xed, 0xcf, 0xf1, - 0xf9, 0x76, 0x15, 0x35, 0xa4, 0x3f, 0xc7, 0x17, 0xc0, 0x9d, 0xcf, 0xf1, 0x21, 0x9e, 0xd1, 0xcf, - 0xf1, 0xa1, 0xd6, 0x82, 0x9f, 0xe3, 0x0b, 0x6b, 0x50, 0xab, 0x4b, 0x53, 0x04, 0x75, 0x6c, 0xde, - 0xcb, 0xa2, 0x7f, 0x8a, 0xfe, 0xe4, 0x3a, 0x2a, 0xc4, 0xfa, 0xaa, 0x38, 0x79, 0xcd, 0xb3, 0x47, - 0x9b, 0x7a, 0x57, 0x3d, 0xb7, 0x7b, 0xf3, 0xda, 0xf7, 0x8f, 0xf4, 0xe6, 0xca, 0xac, 0x26, 0xbc, - 0x94, 0x9f, 0x62, 0xdc, 0x0c, 0xad, 0x0e, 0xb5, 0x05, 0xb7, 0xe7, 0x1f, 0xf5, 0x83, 0x89, 0xea, - 0xd6, 0x84, 0xee, 0xf4, 0x61, 0x97, 0x21, 0xd0, 0xe5, 0xdb, 0xbd, 0x79, 0x62, 0x19, 0x51, 0xbe, - 0x55, 0x6f, 0xf7, 0x30, 0xe6, 0xf7, 0xf5, 0xe3, 0xfe, 0x0a, 0xda, 0xfd, 0x95, 0xce, 0x5a, 0x5d, - 0xf7, 0xb2, 0x9f, 0xb7, 0xba, 0x4c, 0x4d, 0xbc, 0x6e, 0x1e, 0xf6, 0xc5, 0x43, 0xf9, 0x8b, 0xbb, - 0x84, 0x76, 0xe5, 0x2f, 0xe8, 0x32, 0xfa, 0xe1, 0xf5, 0x94, 0x74, 0x59, 0xfe, 0x61, 0x2d, 0xba, - 0x49, 0x96, 0x45, 0xc7, 0xc1, 0xc7, 0x7d, 0x2d, 0x83, 0x78, 0xf8, 0xe4, 0xda, 0x7a, 0xba, 0x50, - 0xff, 0xbc, 0x16, 0xdd, 0x0a, 0x14, 0x4a, 0x05, 0xc8, 0x35, 0xac, 0xfb, 0x81, 0xf2, 0xe9, 0xf5, - 0x15, 0xa9, 0xe5, 0xde, 0xc5, 0x27, 0xed, 0x4f, 0xab, 0x05, 0x6c, 0x4f, 0xe8, 0x4f, 0xab, 0x75, - 0x6b, 0xc1, 0x33, 0xa6, 0xf8, 0xac, 0xd9, 0xf3, 0xa1, 0x67, 0x4c, 0xf2, 0x82, 0x66, 0xf0, 0xa3, - 0x2d, 0x18, 0x87, 0x39, 0x79, 0xfe, 0xba, 0x88, 0xf3, 0x84, 0x76, 0xa2, 0xe4, 0xdd, 0x4e, 0x0c, - 0x07, 0xcf, 0xe6, 0x6a, 0xe9, 0x09, 0x6f, 0xf6, 0x71, 0x0f, 0x28, 0x7d, 0x83, 0x04, 0xcf, 0xe6, - 0x5a, 0x28, 0xe1, 0x4d, 0x67, 0x8d, 0x21, 0x6f, 0x20, 0x59, 0x7c, 0xd8, 0x07, 0x05, 0x3b, 0x04, - 0xe3, 0xcd, 0x1c, 0xf9, 0x3f, 0x0a, 0x59, 0x69, 0x1d, 0xfb, 0x6f, 0xf5, 0xa4, 0x09, 0xb7, 0x13, - 0x26, 0x3e, 0x63, 0x71, 0xc2, 0xca, 0xa0, 0x5b, 0x43, 0xf5, 0x72, 0xeb, 0xd2, 0x98, 0xdb, 0x1d, - 0x9e, 0x2d, 0x17, 0xb9, 0xee, 0x4c, 0xd2, 0xad, 0x4b, 0x75, 0xbb, 0x05, 0x34, 0x3c, 0x95, 0xb4, - 0x6e, 0x65, 0x7a, 0xf9, 0x30, 0x6c, 0xc6, 0xcb, 0x2a, 0x37, 0x7b, 0xb1, 0x74, 0x3d, 0x75, 0x18, - 0x75, 0xd4, 0x13, 0x44, 0xd2, 0x56, 0x4f, 0x1a, 0x1e, 0x0f, 0x3a, 0x6e, 0x4d, 0x3c, 0x6d, 0x77, - 0xd8, 0x6a, 0x85, 0xd4, 0xe3, 0xfe, 0x0a, 0xf0, 0x30, 0x56, 0x47, 0xd5, 0x41, 0x5a, 0x89, 0xbd, - 0x34, 0xcb, 0x06, 0x9b, 0x81, 0x30, 0x69, 0xa0, 0xe0, 0x61, 0x2c, 0x02, 0x13, 0x91, 0xdc, 0x1c, - 0x5e, 0xe6, 0x83, 0x2e, 0x3b, 0x92, 0xea, 0x15, 0xc9, 0x2e, 0x0d, 0x0e, 0xd4, 0x9c, 0xa6, 0x36, - 0xb5, 0x1d, 0x86, 0x1b, 0xae, 0x55, 0xe1, 0xed, 0xde, 0x3c, 0x78, 0xda, 0x2f, 0x29, 0xb9, 0xb2, - 0xdc, 0xa5, 0x4c, 0x78, 0x2b, 0xc9, 0xbd, 0x0e, 0x0a, 0x1c, 0x4a, 0xaa, 0x61, 0xf4, 0x32, 0x4d, - 0xe6, 0x4c, 0xa0, 0x0f, 0xaa, 0x5c, 0x20, 0xf8, 0xa0, 0x0a, 0x80, 0xa0, 0xeb, 0xd4, 0xdf, 0xcd, - 0x69, 0xec, 0x38, 0xc1, 0xba, 0x4e, 0x2b, 0x3b, 0x54, 0xa8, 0xeb, 0x50, 0x1a, 0xcc, 0x06, 0xc6, - 0xad, 0xfe, 0xcc, 0xc5, 0xc3, 0x90, 0x19, 0xf0, 0xad, 0x8b, 0xcd, 0x5e, 0x2c, 0x58, 0x51, 0xac, - 0xc3, 0x74, 0x91, 0x0a, 0x6c, 0x45, 0x71, 0x6c, 0xd4, 0x48, 0x68, 0x45, 0x69, 0xa3, 0x54, 0xf5, - 0xea, 0x1c, 0x61, 0x9c, 0x84, 0xab, 0xa7, 0x98, 0x7e, 0xd5, 0x33, 0x6c, 0xeb, 0xb9, 0x6a, 0x6e, - 0x42, 0x46, 0x5c, 0xe8, 0xcd, 0x32, 0x12, 0xdb, 0xf2, 0xf5, 0x67, 0x08, 0x86, 0x66, 0x1d, 0x4a, - 0x01, 0x3e, 0x2f, 0xa8, 0xb9, 0xe6, 0xd1, 0x6f, 0x51, 0xb0, 0xb8, 0x8c, 0xf3, 0x19, 0xba, 0x39, - 0x95, 0x06, 0x5b, 0x64, 0x68, 0x73, 0x4a, 0x6a, 0x80, 0xa7, 0xf6, 0xfe, 0xfb, 0xc5, 0xc8, 0x50, - 0x30, 0x2f, 0xf2, 0xfa, 0xaf, 0x17, 0x3f, 0xe8, 0x41, 0xc2, 0xa7, 0xf6, 0x0d, 0x60, 0xce, 0xdd, - 0x95, 0xd3, 0x0f, 0x02, 0xa6, 0x7c, 0x34, 0xb4, 0x11, 0xa6, 0x55, 0x40, 0x50, 0x3b, 0x67, 0x8b, - 0x9f, 0xb3, 0x15, 0x16, 0xd4, 0xee, 0x21, 0xe1, 0xe7, 0x6c, 0x15, 0x0a, 0xea, 0x36, 0x0a, 0xf2, - 0x4c, 0x77, 0x1f, 0xb4, 0x1e, 0xd0, 0x77, 0xb7, 0x3e, 0x1b, 0x9d, 0x1c, 0x18, 0x39, 0xbb, 0xe9, - 0x95, 0xf7, 0x98, 0x02, 0x29, 0xe8, 0x6e, 0x7a, 0x85, 0x3f, 0xa5, 0xd8, 0xec, 0xc5, 0xc2, 0x1b, - 0x01, 0xb1, 0x60, 0xaf, 0x9b, 0x47, 0xf5, 0x48, 0x71, 0xa5, 0xbc, 0xf5, 0xac, 0xfe, 0x7e, 0x37, - 0x68, 0xef, 0xdf, 0x1e, 0x97, 0x7c, 0xc6, 0xaa, 0x4a, 0x7f, 0x01, 0xd6, 0xbf, 0xe0, 0xa4, 0x65, - 0x43, 0xf0, 0xfd, 0xd7, 0xbb, 0x61, 0xc8, 0xf9, 0x6c, 0xa3, 0x12, 0xd9, 0xaf, 0x49, 0xad, 0xa3, - 0x9a, 0xed, 0x0f, 0x49, 0x6d, 0x74, 0x72, 0x76, 0x78, 0x69, 0xa9, 0xfb, 0xf9, 0xa8, 0xfb, 0xa8, - 0x3a, 0xf6, 0xe5, 0xa8, 0x07, 0x3d, 0x48, 0xed, 0xea, 0xb3, 0xe8, 0xcd, 0x03, 0x3e, 0x9f, 0xb0, - 0x3c, 0x19, 0x7c, 0xcf, 0xbf, 0xc1, 0xcb, 0xe7, 0xc3, 0xfa, 0xcf, 0xc6, 0xe8, 0x0d, 0x4a, 0x6c, - 0xef, 0x20, 0xee, 0xb2, 0xb3, 0xe5, 0x7c, 0x22, 0x62, 0x01, 0xee, 0x20, 0xca, 0xbf, 0x0f, 0x6b, - 0x01, 0x71, 0x07, 0xd1, 0x03, 0x80, 0xbd, 0x69, 0xc9, 0x18, 0x6a, 0xaf, 0x16, 0x04, 0xed, 0x69, - 0xc0, 0x66, 0x11, 0xc6, 0x5e, 0x9d, 0xa8, 0xc3, 0x3b, 0x83, 0x56, 0x47, 0x4a, 0x89, 0x2c, 0xa2, - 0x4d, 0xd9, 0xe0, 0x56, 0xd5, 0x97, 0x5f, 0xf3, 0x59, 0x2e, 0x16, 0x71, 0xb9, 0x02, 0xc1, 0xad, - 0x6b, 0xe9, 0x00, 0x44, 0x70, 0xa3, 0xa0, 0x1d, 0xb5, 0x4d, 0x33, 0xcf, 0x2e, 0xf7, 0x79, 0xc9, - 0x97, 0x22, 0xcd, 0x19, 0xfc, 0xa2, 0x8b, 0x69, 0x50, 0x97, 0x21, 0x46, 0x2d, 0xc5, 0xda, 0x2c, - 0x57, 0x12, 0xea, 0x3a, 0xa3, 0xfc, 0x04, 0x7e, 0x25, 0x78, 0x09, 0x1f, 0x67, 0x2a, 0x2b, 0x10, - 0x22, 0xb2, 0x5c, 0x12, 0x06, 0x7d, 0x7f, 0x9c, 0xe6, 0x73, 0xb4, 0xef, 0x8f, 0xdd, 0xaf, 0x2a, - 0xdf, 0xa2, 0x01, 0x3b, 0xa0, 0x54, 0xa3, 0xa9, 0x01, 0xa0, 0x5f, 0x65, 0x46, 0x1b, 0xdd, 0x25, - 0x88, 0x01, 0x85, 0x93, 0xc0, 0xd5, 0x17, 0x05, 0xcb, 0x59, 0xd2, 0x5c, 0xda, 0xc3, 0x5c, 0x79, - 0x44, 0xd0, 0x15, 0x24, 0xed, 0x5c, 0x24, 0xe5, 0x27, 0xcb, 0xfc, 0xb8, 0xe4, 0xe7, 0x69, 0xc6, - 0x4a, 0x30, 0x17, 0x29, 0x75, 0x47, 0x4e, 0xcc, 0x45, 0x18, 0x67, 0x6f, 0x7f, 0x48, 0xa9, 0xf7, - 0x3b, 0x0e, 0xd3, 0x32, 0x9e, 0xc1, 0xdb, 0x1f, 0xca, 0x46, 0x1b, 0x23, 0x4e, 0x06, 0x03, 0xb8, - 0x93, 0xe8, 0x28, 0xd7, 0xf9, 0x4a, 0xc6, 0x87, 0x7e, 0x95, 0x56, 0x7e, 0x6b, 0xb8, 0x02, 0x89, - 0x8e, 0x36, 0x87, 0x91, 0x44, 0xa2, 0x13, 0xd6, 0xb0, 0x4b, 0x89, 0xe4, 0x8e, 0xf4, 0xad, 0x26, - 0xb0, 0x94, 0x28, 0x1b, 0x8d, 0x90, 0x58, 0x4a, 0x5a, 0x10, 0x98, 0x90, 0x9a, 0x61, 0x30, 0x47, - 0x27, 0x24, 0x23, 0x0d, 0x4e, 0x48, 0x2e, 0x65, 0x27, 0x8a, 0x71, 0x9e, 0x8a, 0x34, 0xce, 0x26, - 0x4c, 0x1c, 0xc7, 0x65, 0xbc, 0x60, 0x82, 0x95, 0x70, 0xa2, 0xd0, 0xc8, 0xd0, 0x63, 0x88, 0x89, - 0x82, 0x62, 0xb5, 0xc3, 0xdf, 0x8e, 0xde, 0xae, 0xd7, 0x7d, 0x96, 0xeb, 0x5f, 0xa0, 0x7a, 0x2e, - 0x7f, 0xba, 0x6e, 0xf0, 0x8e, 0xb1, 0x31, 0x11, 0x25, 0x8b, 0x17, 0x8d, 0xed, 0xb7, 0xcc, 0xdf, - 0x25, 0xf8, 0x78, 0xad, 0x8e, 0xe7, 0x23, 0x2e, 0xd2, 0xf3, 0x7a, 0x9b, 0xad, 0x5f, 0x60, 0x02, - 0xf1, 0xec, 0x8a, 0x87, 0x81, 0x4f, 0xb1, 0x60, 0x9c, 0x9d, 0xa7, 0x5d, 0xe9, 0x09, 0x2b, 0x32, - 0x38, 0x4f, 0x7b, 0xda, 0x12, 0x20, 0xe6, 0x69, 0x14, 0xb4, 0x83, 0xd3, 0x15, 0x4f, 0x59, 0xb8, - 0x32, 0x53, 0xd6, 0xaf, 0x32, 0x53, 0xef, 0x9d, 0x90, 0x2c, 0x7a, 0xfb, 0x90, 0x2d, 0xce, 0x58, - 0x59, 0x5d, 0xa4, 0x05, 0xf5, 0x3d, 0x64, 0x4b, 0x74, 0x7e, 0x0f, 0x99, 0x40, 0xed, 0x4a, 0x60, - 0x81, 0x71, 0x75, 0x14, 0x2f, 0x98, 0xfc, 0xb0, 0x0c, 0x58, 0x09, 0x1c, 0x23, 0x0e, 0x44, 0xac, - 0x04, 0x24, 0xec, 0xbc, 0x5e, 0x66, 0x99, 0x13, 0x36, 0xaf, 0x23, 0xac, 0x3c, 0x8e, 0x57, 0x0b, - 0x96, 0x0b, 0x6d, 0x12, 0x9c, 0xc9, 0x3b, 0x26, 0x71, 0x9e, 0x38, 0x93, 0xef, 0xa3, 0xe7, 0x4c, - 0x4d, 0x5e, 0xc3, 0x1f, 0xf3, 0x52, 0xa8, 0xdf, 0x97, 0x3b, 0x2d, 0x33, 0x30, 0x35, 0xf9, 0x8d, - 0xea, 0x91, 0xc4, 0xd4, 0x14, 0xd6, 0x70, 0x7e, 0x4b, 0xc4, 0x2b, 0xc3, 0x0b, 0x56, 0x9a, 0x38, - 0x79, 0xbe, 0x88, 0xd3, 0x4c, 0x47, 0xc3, 0xf7, 0x03, 0xb6, 0x09, 0x1d, 0xe2, 0xb7, 0x44, 0xfa, - 0xea, 0x3a, 0xbf, 0xbe, 0x12, 0x2e, 0x21, 0x78, 0x44, 0xd0, 0x61, 0x9f, 0x78, 0x44, 0xd0, 0xad, - 0x65, 0x77, 0xee, 0x96, 0x95, 0xdc, 0x4a, 0x12, 0x3b, 0x3c, 0x81, 0xe7, 0x85, 0x8e, 0x4d, 0x00, - 0x12, 0x3b, 0xf7, 0xa0, 0x82, 0x4d, 0x0d, 0x2c, 0xb6, 0x97, 0xe6, 0x71, 0x96, 0xfe, 0x18, 0xa6, - 0xf5, 0x8e, 0x9d, 0x86, 0x20, 0x52, 0x03, 0x9c, 0xc4, 0x5c, 0xed, 0x33, 0x31, 0x4d, 0xeb, 0xa9, - 0xff, 0x7e, 0xa0, 0xdd, 0x24, 0xd1, 0xed, 0xca, 0x21, 0x9d, 0x6f, 0x1f, 0xc3, 0x66, 0x1d, 0x15, - 0xc5, 0xa4, 0x5e, 0x55, 0x4f, 0xd8, 0x8c, 0xa5, 0x85, 0x18, 0x7c, 0x14, 0x6e, 0x2b, 0x80, 0x13, - 0x17, 0x2d, 0x7a, 0xa8, 0x39, 0x8f, 0xef, 0xeb, 0xb9, 0x64, 0xa2, 0x7e, 0x78, 0xf5, 0xb4, 0x62, - 0xa5, 0x4e, 0x34, 0xf6, 0x99, 0x00, 0xa3, 0xd3, 0xe1, 0x86, 0x0e, 0x58, 0x57, 0x94, 0x18, 0x9d, - 0x61, 0x0d, 0x7b, 0xd8, 0xe7, 0x70, 0xfa, 0xdb, 0x01, 0xf2, 0xba, 0xe3, 0x23, 0xd2, 0x98, 0x43, - 0x11, 0x87, 0x7d, 0x34, 0x6d, 0xb3, 0xb5, 0xb6, 0xdb, 0x51, 0xbe, 0x1a, 0xc3, 0x2b, 0x13, 0x88, - 0x25, 0x89, 0x11, 0xd9, 0x5a, 0x00, 0x77, 0x0e, 0xc3, 0x4b, 0x1e, 0x27, 0xb3, 0xb8, 0x12, 0xc7, - 0xf1, 0x2a, 0xe3, 0x71, 0x22, 0xd7, 0x75, 0x78, 0x18, 0xde, 0x30, 0x43, 0x17, 0xa2, 0x0e, 0xc3, - 0x29, 0xd8, 0xcd, 0xce, 0xe4, 0xef, 0xc9, 0xea, 0xab, 0xa4, 0x30, 0x3b, 0x93, 0xe5, 0x85, 0xd7, - 0x48, 0xef, 0x86, 0x21, 0xfb, 0x0a, 0x9c, 0x12, 0xc9, 0x34, 0xe4, 0x16, 0xa6, 0xe3, 0x25, 0x20, - 0xef, 0x07, 0x08, 0xfb, 0x59, 0x16, 0xf5, 0xf7, 0xe6, 0x27, 0xc4, 0x84, 0xfe, 0x42, 0xfc, 0x23, - 0x4c, 0xd7, 0x85, 0xbc, 0x1b, 0x6a, 0x5b, 0x3d, 0x69, 0x9b, 0x66, 0xee, 0x5c, 0xc4, 0x62, 0x94, - 0x24, 0x87, 0xac, 0x42, 0xde, 0x67, 0xaf, 0x85, 0x43, 0x2b, 0x25, 0xd2, 0xcc, 0x36, 0x65, 0x03, - 0xbd, 0x96, 0x3d, 0x4f, 0x52, 0xa1, 0x65, 0xcd, 0x05, 0xed, 0x47, 0x6d, 0x03, 0x6d, 0x8a, 0xa8, - 0x15, 0x4d, 0xdb, 0xb9, 0xbc, 0x66, 0xa6, 0x7c, 0x3e, 0xcf, 0x98, 0x86, 0x4e, 0x58, 0xac, 0x3e, - 0x90, 0xb9, 0xdd, 0xb6, 0x85, 0x82, 0xc4, 0x5c, 0x1e, 0x54, 0xb0, 0x69, 0x64, 0x8d, 0xa9, 0x47, - 0x52, 0x4d, 0xc3, 0x6e, 0xb4, 0xcd, 0x78, 0x00, 0x91, 0x46, 0xa2, 0xa0, 0x7d, 0xed, 0xae, 0x16, - 0xef, 0xb3, 0xa6, 0x25, 0xe0, 0x17, 0xb8, 0xa4, 0xb2, 0x23, 0x26, 0x5e, 0xbb, 0x43, 0x30, 0xbb, - 0x4f, 0x00, 0x1e, 0x9e, 0xad, 0xc6, 0x09, 0xdc, 0x27, 0x40, 0x7d, 0xc9, 0x10, 0xfb, 0x04, 0x8a, - 0xf5, 0xbb, 0xce, 0x9c, 0x7b, 0x1d, 0xc4, 0x95, 0xad, 0x1c, 0xd2, 0x75, 0x28, 0x18, 0xea, 0x3a, - 0x4a, 0xc1, 0x6f, 0x52, 0xf7, 0x68, 0x0d, 0x69, 0x52, 0xec, 0x5c, 0x6d, 0xbd, 0x0b, 0xb3, 0xb9, - 0x7f, 0x2d, 0x3c, 0x61, 0x71, 0x62, 0x2a, 0x86, 0xe8, 0xba, 0x72, 0x22, 0xf7, 0xc7, 0x38, 0xed, - 0xe4, 0xf7, 0xa2, 0x81, 0xaa, 0x46, 0xe9, 0xba, 0xb9, 0x85, 0x15, 0xb1, 0x26, 0x88, 0x89, 0xca, - 0x27, 0x9c, 0xc4, 0xcd, 0xeb, 0xa2, 0x29, 0xd7, 0x0e, 0xf4, 0x6b, 0xa1, 0x15, 0x48, 0xdc, 0xfc, - 0x66, 0x6f, 0xd1, 0x44, 0xe2, 0xd6, 0xad, 0xe5, 0x7c, 0x8c, 0x08, 0x74, 0xd9, 0x5e, 0xc9, 0x17, - 0xb0, 0x4c, 0x9f, 0x06, 0xbb, 0x07, 0xd1, 0x20, 0x3e, 0x46, 0xd4, 0x4f, 0xd3, 0xae, 0x41, 0xe6, - 0xec, 0x40, 0x5e, 0x4f, 0xc3, 0x7f, 0x05, 0x45, 0x09, 0x89, 0x35, 0xa8, 0x05, 0x39, 0x3f, 0x9d, - 0x3a, 0x7e, 0x59, 0xa6, 0x22, 0xcd, 0xe7, 0x53, 0xce, 0x33, 0x78, 0x64, 0x39, 0x1a, 0x0f, 0x5d, - 0x29, 0xf5, 0xd3, 0xa9, 0x2d, 0xca, 0x2e, 0x71, 0xa3, 0xf1, 0x68, 0x29, 0xf8, 0x79, 0x9a, 0x65, - 0x20, 0x72, 0x46, 0xe3, 0x61, 0x23, 0x21, 0x22, 0xc7, 0x27, 0x9c, 0x1f, 0xfc, 0x1c, 0xcb, 0xd3, - 0x7f, 0x7d, 0x02, 0x7a, 0x07, 0xea, 0x38, 0x42, 0xea, 0x07, 0x3f, 0x21, 0xe4, 0xfc, 0x80, 0xe9, - 0x18, 0xfb, 0x29, 0x97, 0x4d, 0xa8, 0x8e, 0x40, 0xd4, 0x0f, 0x98, 0x52, 0xb0, 0xf3, 0x4e, 0xf2, - 0xf1, 0xb2, 0xba, 0xf0, 0x8f, 0x0c, 0xd4, 0xe6, 0x50, 0x7d, 0xb6, 0xf5, 0x29, 0xf8, 0x41, 0x21, - 0x9f, 0x1d, 0x7a, 0x30, 0x71, 0x3d, 0xad, 0x53, 0x49, 0x15, 0xe6, 0xd9, 0xfb, 0xff, 0xf5, 0xd5, - 0x8d, 0xb5, 0x9f, 0x7e, 0x75, 0x63, 0xed, 0x7f, 0xbe, 0xba, 0xb1, 0xf6, 0x93, 0xaf, 0x6f, 0xbc, - 0xf1, 0xd3, 0xaf, 0x6f, 0xbc, 0xf1, 0xdf, 0x5f, 0xdf, 0x78, 0xe3, 0xcb, 0x37, 0x2b, 0x95, 0x9b, - 0x9d, 0xfd, 0x5c, 0x51, 0x72, 0xc1, 0x9f, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc7, 0xe9, - 0x8b, 0xe6, 0x86, 0x80, 0x00, 0x00, + 0x52, 0xc0, 0xcf, 0x3c, 0xb0, 0x50, 0xc7, 0x2d, 0xd0, 0x0b, 0xcb, 0xdd, 0x72, 0x37, 0x33, 0x3b, + 0x1f, 0xf6, 0xcc, 0x78, 0xdc, 0x9e, 0x9d, 0xd9, 0x2f, 0xee, 0x90, 0xa0, 0xc7, 0x1e, 0x7b, 0xfb, + 0xd6, 0xf6, 0x18, 0x77, 0x7b, 0x46, 0xac, 0x84, 0x44, 0xb9, 0x2b, 0xdd, 0x2e, 0x5c, 0x5d, 0x59, + 0x57, 0x95, 0xed, 0x99, 0x3e, 0x04, 0x3a, 0x74, 0x08, 0x04, 0x02, 0x71, 0xe2, 0x4b, 0xf0, 0x84, + 0xc4, 0x5f, 0xc0, 0x9f, 0xc1, 0xe3, 0x3d, 0xf2, 0x88, 0x76, 0xff, 0x11, 0x54, 0x99, 0x59, 0xf9, + 0x11, 0x15, 0x91, 0x55, 0x5e, 0x9e, 0x66, 0xe4, 0xf8, 0x45, 0x44, 0x7e, 0x46, 0x46, 0x66, 0x65, + 0x55, 0x47, 0x37, 0x8b, 0xb3, 0xed, 0xa2, 0xe4, 0x82, 0x57, 0xdb, 0x15, 0x2b, 0xaf, 0xd2, 0x19, + 0x6b, 0xfe, 0x1d, 0xca, 0x3f, 0x0f, 0xde, 0x8a, 0xf3, 0x95, 0x58, 0x15, 0xec, 0xbd, 0x6f, 0x5b, + 0x72, 0xc6, 0x17, 0x8b, 0x38, 0x4f, 0x2a, 0x85, 0xbc, 0xf7, 0xae, 0x95, 0xb0, 0x2b, 0x96, 0x0b, + 0xfd, 0xf7, 0x27, 0x3f, 0xf9, 0xe9, 0x2f, 0x44, 0x6f, 0xef, 0x64, 0x29, 0xcb, 0xc5, 0x8e, 0xd6, + 0x18, 0x7c, 0x11, 0x7d, 0x6b, 0x54, 0x14, 0xfb, 0x4c, 0xbc, 0x64, 0x65, 0x95, 0xf2, 0x7c, 0x70, + 0x67, 0xa8, 0x1d, 0x0c, 0x4f, 0x8a, 0xd9, 0x70, 0x54, 0x14, 0x43, 0x2b, 0x1c, 0x9e, 0xb0, 0x1f, + 0x2d, 0x59, 0x25, 0xde, 0xbb, 0x1b, 0x86, 0xaa, 0x82, 0xe7, 0x15, 0x1b, 0x9c, 0x47, 0xbf, 0x3e, + 0x2a, 0x8a, 0x09, 0x13, 0xbb, 0xac, 0xae, 0xc0, 0x44, 0xc4, 0x82, 0x0d, 0x36, 0x5a, 0xaa, 0x3e, + 0x60, 0x7c, 0xdc, 0xef, 0x06, 0xb5, 0x9f, 0x69, 0xf4, 0xcd, 0xda, 0xcf, 0xc5, 0x52, 0x24, 0xfc, + 0x75, 0x3e, 0x78, 0xbf, 0xad, 0xa8, 0x45, 0xc6, 0xf6, 0xed, 0x10, 0xa2, 0xad, 0xbe, 0x8a, 0x7e, + 0xe5, 0x55, 0x9c, 0x65, 0x4c, 0xec, 0x94, 0xac, 0x2e, 0xb8, 0xaf, 0xa3, 0x44, 0x43, 0x25, 0x33, + 0x76, 0xef, 0x04, 0x19, 0x6d, 0xf8, 0x8b, 0xe8, 0x5b, 0x4a, 0x72, 0xc2, 0x66, 0xfc, 0x8a, 0x95, + 0x03, 0x54, 0x4b, 0x0b, 0x89, 0x26, 0x6f, 0x41, 0xd0, 0xf6, 0x0e, 0xcf, 0xaf, 0x58, 0x29, 0x70, + 0xdb, 0x5a, 0x18, 0xb6, 0x6d, 0x21, 0x6d, 0xfb, 0x6f, 0xd6, 0xa2, 0xef, 0x8e, 0x66, 0x33, 0xbe, + 0xcc, 0xc5, 0x01, 0x9f, 0xc5, 0xd9, 0x41, 0x9a, 0x5f, 0x1e, 0xb1, 0xd7, 0x3b, 0x17, 0x35, 0x9f, + 0xcf, 0xd9, 0xe0, 0xa9, 0xdf, 0xaa, 0x0a, 0x1d, 0x1a, 0x76, 0xe8, 0xc2, 0xc6, 0xf7, 0x87, 0xd7, + 0x53, 0xd2, 0x65, 0xf9, 0x87, 0xb5, 0xe8, 0x06, 0x2c, 0xcb, 0x84, 0x67, 0x57, 0xcc, 0x96, 0xe6, + 0xa3, 0x0e, 0xc3, 0x3e, 0x6e, 0xca, 0xf3, 0xf1, 0x75, 0xd5, 0x74, 0x89, 0x7e, 0xb2, 0x16, 0x7d, + 0x07, 0x96, 0x48, 0xf5, 0xfc, 0xa8, 0x28, 0x06, 0x8f, 0x3b, 0xac, 0x1a, 0xd2, 0x94, 0xe3, 0x83, + 0x6b, 0x68, 0xe8, 0x22, 0xfc, 0x59, 0xf4, 0x6d, 0x58, 0x82, 0x83, 0xb4, 0x12, 0xa3, 0xa2, 0xa8, + 0x06, 0xdb, 0x1d, 0xe6, 0x1a, 0xd0, 0xf8, 0x7f, 0xdc, 0x5f, 0x21, 0xd0, 0x02, 0x27, 0xec, 0x8a, + 0x5f, 0xf6, 0x6a, 0x01, 0x43, 0xf6, 0x6e, 0x01, 0x57, 0x43, 0x17, 0x21, 0x8b, 0xde, 0x71, 0xe7, + 0xec, 0x84, 0x55, 0x32, 0xa6, 0x3d, 0xa0, 0xa7, 0xa5, 0x46, 0x8c, 0xd3, 0x87, 0x7d, 0x50, 0xed, + 0x2d, 0x8d, 0x06, 0xda, 0x5b, 0xc6, 0x2b, 0xe3, 0xec, 0x3e, 0x6a, 0xc1, 0x21, 0x8c, 0xaf, 0x07, + 0x3d, 0x48, 0xed, 0xea, 0x8f, 0xa3, 0x5f, 0x7d, 0xc5, 0xcb, 0xcb, 0xaa, 0x88, 0x67, 0x4c, 0xc7, + 0xa3, 0x7b, 0xbe, 0x76, 0x23, 0x85, 0x21, 0x69, 0xbd, 0x0b, 0x73, 0x22, 0x47, 0x23, 0x7c, 0x51, + 0x30, 0xb8, 0x10, 0x58, 0xc5, 0x5a, 0x48, 0x45, 0x0e, 0x08, 0x69, 0xdb, 0x97, 0xd1, 0xc0, 0xda, + 0x3e, 0xfb, 0x13, 0x36, 0x13, 0xa3, 0x24, 0x81, 0xbd, 0x62, 0x75, 0x25, 0x31, 0x1c, 0x25, 0x09, + 0xd5, 0x2b, 0x38, 0xaa, 0x9d, 0xbd, 0x8e, 0xde, 0x05, 0xce, 0xe4, 0x50, 0x4d, 0x92, 0xc1, 0x56, + 0xd8, 0x8a, 0xc6, 0x8c, 0xd3, 0x61, 0x5f, 0xdc, 0x19, 0xff, 0x88, 0xe7, 0x13, 0xb6, 0xe0, 0x57, + 0x0c, 0x8c, 0x7f, 0xd4, 0x9a, 0x22, 0x89, 0xf1, 0x1f, 0xd6, 0x40, 0x86, 0xc9, 0x84, 0x65, 0x6c, + 0x26, 0xc8, 0x61, 0xa2, 0xc4, 0x9d, 0xc3, 0xc4, 0x60, 0xce, 0x0c, 0x6b, 0x84, 0xfb, 0x4c, 0xec, + 0x2c, 0xcb, 0x92, 0xe5, 0x82, 0xec, 0x4b, 0x8b, 0x74, 0xf6, 0xa5, 0x87, 0x22, 0xf5, 0xd9, 0x67, + 0x62, 0x94, 0x65, 0x64, 0x7d, 0x94, 0xb8, 0xb3, 0x3e, 0x06, 0xd3, 0x1e, 0x66, 0xd1, 0xaf, 0x39, + 0x2d, 0x26, 0xc6, 0xf9, 0x39, 0x1f, 0xd0, 0x6d, 0x21, 0xe5, 0xc6, 0xc7, 0x46, 0x27, 0x87, 0x54, + 0xe3, 0xf9, 0x9b, 0x82, 0x97, 0x74, 0xb7, 0x28, 0x71, 0x67, 0x35, 0x0c, 0xa6, 0x3d, 0xfc, 0x51, + 0xf4, 0xb6, 0x0e, 0x90, 0x4d, 0x52, 0x71, 0x17, 0x8d, 0x9e, 0x30, 0xab, 0xb8, 0xd7, 0x41, 0xb5, + 0xcc, 0x1f, 0xa6, 0xf3, 0xb2, 0x8e, 0x3e, 0xb8, 0x79, 0x2d, 0xed, 0x30, 0x6f, 0x29, 0x6d, 0x9e, + 0x47, 0xbf, 0xe1, 0x9b, 0xdf, 0x89, 0xf3, 0x19, 0xcb, 0x06, 0x0f, 0x43, 0xea, 0x8a, 0x31, 0xae, + 0x36, 0x7b, 0xb1, 0x36, 0xd8, 0x69, 0x42, 0x07, 0xd3, 0x3b, 0xa8, 0x36, 0x08, 0xa5, 0x77, 0xc3, + 0x50, 0xcb, 0xf6, 0x2e, 0xcb, 0x18, 0x69, 0x5b, 0x09, 0x3b, 0x6c, 0x1b, 0x48, 0xdb, 0x2e, 0xa3, + 0xdf, 0x34, 0xdd, 0x5c, 0x27, 0x67, 0x52, 0x5e, 0x2f, 0x3a, 0x9b, 0x44, 0x3f, 0xba, 0x90, 0xf1, + 0xf5, 0xa8, 0x1f, 0xdc, 0xaa, 0x8f, 0x8e, 0x28, 0x78, 0x7d, 0x40, 0x3c, 0xb9, 0x1b, 0x86, 0xb4, + 0xed, 0xbf, 0x5d, 0x8b, 0xbe, 0xa7, 0x65, 0xcf, 0xf3, 0xf8, 0x2c, 0x63, 0x72, 0x75, 0x3f, 0x62, + 0xe2, 0x35, 0x2f, 0x2f, 0x27, 0xab, 0x7c, 0x46, 0xe4, 0x94, 0x38, 0xdc, 0x91, 0x53, 0x92, 0x4a, + 0xba, 0x30, 0x7f, 0x6a, 0xd2, 0xa7, 0x9d, 0x8b, 0x38, 0x9f, 0xb3, 0x1f, 0x56, 0x3c, 0x1f, 0x15, + 0xe9, 0x28, 0x49, 0xca, 0xc1, 0x10, 0xef, 0x7a, 0xc8, 0x99, 0x12, 0x6c, 0xf7, 0xe6, 0x9d, 0x3d, + 0x8c, 0x6e, 0x65, 0xc1, 0x0b, 0xb8, 0x87, 0x69, 0x9a, 0x4f, 0xf0, 0x82, 0xda, 0xc3, 0xf8, 0x48, + 0xcb, 0xea, 0x61, 0xbd, 0x06, 0xe1, 0x56, 0x0f, 0xdd, 0x45, 0xe7, 0x76, 0x08, 0xb1, 0x6b, 0x40, + 0xd3, 0x50, 0x3c, 0x3f, 0x4f, 0xe7, 0xa7, 0x45, 0x52, 0xcf, 0xa1, 0x07, 0x78, 0x9d, 0x1d, 0x84, + 0x58, 0x03, 0x08, 0x54, 0x7b, 0xfb, 0x7b, 0x9b, 0xea, 0xeb, 0xb8, 0xb4, 0x57, 0xf2, 0xc5, 0x01, + 0x9b, 0xc7, 0xb3, 0x95, 0x0e, 0xa6, 0x1f, 0x86, 0xa2, 0x18, 0xa4, 0x4d, 0x21, 0x3e, 0xba, 0xa6, + 0x96, 0x2e, 0xcf, 0x7f, 0xac, 0x45, 0x77, 0xbd, 0x71, 0xa2, 0x07, 0x93, 0x2a, 0xfd, 0x28, 0x4f, + 0x4e, 0x58, 0x25, 0xe2, 0x52, 0x0c, 0xbe, 0x1f, 0x18, 0x03, 0x84, 0x8e, 0x29, 0xdb, 0x0f, 0xbe, + 0x96, 0xae, 0xed, 0xf5, 0x49, 0xbd, 0x4a, 0xe8, 0xf8, 0xe3, 0xf7, 0xba, 0x94, 0xc0, 0xe8, 0x73, + 0x3b, 0x84, 0xd8, 0x5e, 0x97, 0x82, 0x71, 0x7e, 0x95, 0x0a, 0xb6, 0xcf, 0x72, 0x56, 0xb6, 0x7b, + 0x5d, 0xa9, 0xfa, 0x08, 0xd1, 0xeb, 0x04, 0x6a, 0x23, 0x9d, 0xe7, 0xcd, 0x64, 0x1a, 0x9b, 0x01, + 0x23, 0xad, 0x5c, 0xe3, 0x51, 0x3f, 0x98, 0xa8, 0xa1, 0xd8, 0xaf, 0x8d, 0x04, 0x6b, 0xa8, 0x90, + 0x5e, 0x35, 0x34, 0xa8, 0x3d, 0x1d, 0x71, 0xbc, 0xa9, 0xcd, 0x0c, 0x38, 0x1d, 0x71, 0x0d, 0x28, + 0x80, 0x38, 0x1d, 0x41, 0x41, 0x9b, 0x7c, 0x38, 0x7e, 0x5e, 0xa6, 0xec, 0x35, 0x48, 0x3e, 0x5c, + 0xe5, 0x5a, 0x4c, 0x24, 0x1f, 0x08, 0xa6, 0x3d, 0x1c, 0x45, 0xbf, 0x2c, 0x85, 0x3f, 0xe4, 0x69, + 0x3e, 0xb8, 0x89, 0x28, 0xd5, 0x02, 0x63, 0xf5, 0x16, 0x0d, 0x80, 0x12, 0xd7, 0x7f, 0xd5, 0x99, + 0xc0, 0x3d, 0x42, 0x09, 0x24, 0x01, 0xeb, 0x5d, 0x98, 0xcd, 0xfa, 0xa4, 0xb0, 0x8e, 0x96, 0x93, + 0x8b, 0xb8, 0x4c, 0xf3, 0xf9, 0x00, 0xd3, 0x75, 0xe4, 0x44, 0xd6, 0x87, 0x71, 0x60, 0x38, 0x69, + 0xc5, 0x51, 0x51, 0x94, 0x75, 0x10, 0xc6, 0x86, 0x93, 0x8f, 0x04, 0x87, 0x53, 0x0b, 0xc5, 0xbd, + 0xed, 0xb2, 0x59, 0x96, 0xe6, 0x41, 0x6f, 0x1a, 0xe9, 0xe3, 0xcd, 0xa2, 0x60, 0xf0, 0x1e, 0xb0, + 0xf8, 0x8a, 0x35, 0x35, 0xc3, 0x5a, 0xc6, 0x05, 0x82, 0x83, 0x17, 0x80, 0x76, 0x8b, 0x2d, 0xc5, + 0x87, 0xf1, 0x25, 0xab, 0x1b, 0x98, 0xd5, 0x4b, 0xf8, 0x00, 0xd3, 0xf7, 0x08, 0x62, 0x8b, 0x8d, + 0x93, 0xda, 0xd5, 0x32, 0x7a, 0x57, 0xca, 0x8f, 0xe3, 0x52, 0xa4, 0xb3, 0xb4, 0x88, 0xf3, 0x66, + 0xeb, 0x86, 0x45, 0x91, 0x16, 0x65, 0x5c, 0x6e, 0xf5, 0xa4, 0xb5, 0xdb, 0x7f, 0x5d, 0x8b, 0xde, + 0x87, 0x7e, 0x8f, 0x59, 0xb9, 0x48, 0xe5, 0x09, 0x40, 0xa5, 0x42, 0xfe, 0xe0, 0x93, 0xb0, 0xd1, + 0x96, 0x82, 0x29, 0xcd, 0xa7, 0xd7, 0x57, 0xb4, 0x79, 0xdf, 0x44, 0xef, 0x8a, 0x5e, 0x94, 0x49, + 0xeb, 0x98, 0x72, 0xd2, 0x6c, 0x75, 0xa4, 0x90, 0xc8, 0xfb, 0x5a, 0x10, 0x98, 0xe1, 0xa7, 0x79, + 0xd5, 0x58, 0xc7, 0x66, 0xb8, 0x15, 0x07, 0x67, 0xb8, 0x87, 0xd9, 0x19, 0x7e, 0xbc, 0x3c, 0xcb, + 0xd2, 0xea, 0x22, 0xcd, 0xe7, 0x3a, 0xc9, 0xf7, 0x75, 0xad, 0x18, 0xe6, 0xf9, 0x1b, 0x9d, 0x1c, + 0xe6, 0x44, 0x0f, 0x16, 0xd2, 0x09, 0x18, 0x26, 0x1b, 0x9d, 0x9c, 0xdd, 0x7b, 0x59, 0x69, 0xbd, + 0xe9, 0x07, 0x7b, 0x2f, 0x47, 0xb5, 0x96, 0x12, 0x7b, 0xaf, 0x36, 0x65, 0xf7, 0x5e, 0x6e, 0x1d, + 0x2a, 0x9e, 0x5d, 0xb1, 0xd3, 0x32, 0x05, 0x7b, 0x2f, 0xaf, 0x7c, 0x0d, 0x43, 0xec, 0xbd, 0x28, + 0xd6, 0x06, 0x2a, 0x4b, 0xec, 0x33, 0x31, 0x11, 0xb1, 0x58, 0x56, 0x20, 0x50, 0x39, 0x36, 0x0c, + 0x42, 0x04, 0x2a, 0x02, 0xd5, 0xde, 0xfe, 0x20, 0x8a, 0xd4, 0x79, 0x89, 0x3c, 0xd3, 0xf2, 0xd7, + 0x1e, 0x7d, 0x90, 0xe2, 0x1d, 0x68, 0xbd, 0x1f, 0x20, 0x6c, 0x7a, 0xa5, 0xfe, 0x2e, 0x8f, 0xea, + 0x06, 0xa8, 0x86, 0x14, 0x11, 0xe9, 0x15, 0x40, 0x60, 0x41, 0x27, 0x17, 0xfc, 0x35, 0x5e, 0xd0, + 0x5a, 0x12, 0x2e, 0xa8, 0x26, 0xec, 0x13, 0x0c, 0x5d, 0x50, 0xec, 0x09, 0x46, 0x53, 0x8c, 0xd0, + 0x13, 0x0c, 0xc8, 0xd8, 0x31, 0xe3, 0x1a, 0x7e, 0xc6, 0xf9, 0xe5, 0x22, 0x2e, 0x2f, 0xc1, 0x98, + 0xf1, 0x94, 0x1b, 0x86, 0x18, 0x33, 0x14, 0x6b, 0xc7, 0x8c, 0xeb, 0xb0, 0x4e, 0xce, 0x4f, 0xcb, + 0x0c, 0x8c, 0x19, 0xcf, 0x86, 0x46, 0x88, 0x31, 0x43, 0xa0, 0x36, 0x3a, 0xb9, 0xde, 0x26, 0x0c, + 0x1e, 0xd7, 0x78, 0xea, 0x13, 0x46, 0x1d, 0xd7, 0x20, 0x18, 0x1c, 0x42, 0xfb, 0x65, 0x5c, 0x5c, + 0xe0, 0x43, 0x48, 0x8a, 0xc2, 0x43, 0xa8, 0x41, 0x60, 0x7f, 0x4f, 0x58, 0x5c, 0xce, 0x2e, 0xf0, + 0xfe, 0x56, 0xb2, 0x70, 0x7f, 0x1b, 0x06, 0xf6, 0xb7, 0x12, 0xbc, 0x4a, 0xc5, 0xc5, 0x21, 0x13, + 0x31, 0xde, 0xdf, 0x3e, 0x13, 0xee, 0xef, 0x16, 0x6b, 0xb3, 0x7f, 0xd7, 0xe1, 0x64, 0x79, 0x56, + 0xcd, 0xca, 0xf4, 0x8c, 0x0d, 0x02, 0x56, 0x0c, 0x44, 0x64, 0xff, 0x24, 0xac, 0x7d, 0xfe, 0x6c, + 0x2d, 0xba, 0xd9, 0x74, 0x3b, 0xaf, 0x2a, 0xbd, 0xf6, 0xf9, 0xee, 0x3f, 0xc2, 0xfb, 0x97, 0xc0, + 0x89, 0x67, 0x4a, 0x3d, 0xd4, 0x9c, 0xdc, 0x00, 0x2f, 0xd2, 0x69, 0x5e, 0x99, 0x42, 0x7d, 0xd2, + 0xc7, 0xba, 0xa3, 0x40, 0xe4, 0x06, 0xbd, 0x14, 0x6d, 0x5a, 0xa6, 0xfb, 0xa7, 0x91, 0x8d, 0x93, + 0x0a, 0xa4, 0x65, 0x4d, 0x7b, 0x3b, 0x04, 0x91, 0x96, 0xe1, 0x24, 0x1c, 0x0a, 0xfb, 0x25, 0x5f, + 0x16, 0x55, 0xc7, 0x50, 0x00, 0x50, 0x78, 0x28, 0xb4, 0x61, 0xed, 0xf3, 0x4d, 0xf4, 0x5b, 0xee, + 0xf0, 0x73, 0x1b, 0x7b, 0x8b, 0x1e, 0x53, 0x58, 0x13, 0x0f, 0xfb, 0xe2, 0x36, 0xa3, 0x68, 0x3c, + 0x8b, 0x5d, 0x26, 0xe2, 0x34, 0xab, 0x06, 0xeb, 0xb8, 0x8d, 0x46, 0x4e, 0x64, 0x14, 0x18, 0x07, + 0xe3, 0xdb, 0xee, 0xb2, 0xc8, 0xd2, 0x59, 0xfb, 0x61, 0x92, 0xd6, 0x35, 0xe2, 0x70, 0x7c, 0x73, + 0x31, 0x18, 0xaf, 0xeb, 0xd4, 0x4f, 0xfe, 0x67, 0xba, 0x2a, 0x18, 0x1e, 0xaf, 0x3d, 0x24, 0x1c, + 0xaf, 0x21, 0x0a, 0xeb, 0x33, 0x61, 0xe2, 0x20, 0x5e, 0xf1, 0x25, 0x11, 0xaf, 0x8d, 0x38, 0x5c, + 0x1f, 0x17, 0xb3, 0x7b, 0x03, 0xe3, 0x61, 0x9c, 0x0b, 0x56, 0xe6, 0x71, 0xb6, 0x97, 0xc5, 0xf3, + 0x6a, 0x40, 0xc4, 0x18, 0x9f, 0x22, 0xf6, 0x06, 0x34, 0x8d, 0x34, 0xe3, 0xb8, 0xda, 0x8b, 0xaf, + 0x78, 0x99, 0x0a, 0xba, 0x19, 0x2d, 0xd2, 0xd9, 0x8c, 0x1e, 0x8a, 0x7a, 0x1b, 0x95, 0xb3, 0x8b, + 0xf4, 0x8a, 0x25, 0x01, 0x6f, 0x0d, 0xd2, 0xc3, 0x9b, 0x83, 0x22, 0x9d, 0x36, 0xe1, 0xcb, 0x72, + 0xc6, 0xc8, 0x4e, 0x53, 0xe2, 0xce, 0x4e, 0x33, 0x98, 0xf6, 0xf0, 0x97, 0x6b, 0xd1, 0x6f, 0x2b, + 0xa9, 0xfb, 0x84, 0x67, 0x37, 0xae, 0x2e, 0xce, 0x78, 0x5c, 0x26, 0x83, 0x0f, 0x30, 0x3b, 0x28, + 0x6a, 0x5c, 0x3f, 0xb9, 0x8e, 0x0a, 0x6c, 0xd6, 0x3a, 0xef, 0xb6, 0x33, 0x0e, 0x6d, 0x56, 0x0f, + 0x09, 0x37, 0x2b, 0x44, 0x61, 0x00, 0x91, 0x72, 0x75, 0x00, 0xb8, 0x4e, 0xea, 0xfb, 0xa7, 0x80, + 0x1b, 0x9d, 0x1c, 0x8c, 0x8f, 0xb5, 0xd0, 0x1f, 0x2d, 0x5b, 0x94, 0x0d, 0x7c, 0xc4, 0x0c, 0xfb, + 0xe2, 0xa4, 0x67, 0x33, 0x2b, 0xc2, 0x9e, 0x5b, 0x33, 0x63, 0xd8, 0x17, 0x27, 0x3c, 0x3b, 0x61, + 0x2d, 0xe4, 0x19, 0x09, 0x6d, 0xc3, 0xbe, 0x38, 0xcc, 0xbe, 0x34, 0xd3, 0xac, 0x0b, 0x0f, 0x03, + 0x76, 0xe0, 0xda, 0xb0, 0xd9, 0x8b, 0xd5, 0x0e, 0xff, 0x7a, 0x2d, 0xfa, 0xae, 0xf5, 0x78, 0xc8, + 0x93, 0xf4, 0x7c, 0xa5, 0xa0, 0x97, 0x71, 0xb6, 0x64, 0xd5, 0xe0, 0x09, 0x65, 0xad, 0xcd, 0x9a, + 0x12, 0x3c, 0xbd, 0x96, 0x0e, 0x9c, 0x3b, 0xa3, 0xa2, 0xc8, 0x56, 0x53, 0xb6, 0x28, 0x32, 0x72, + 0xee, 0x78, 0x48, 0x78, 0xee, 0x40, 0x14, 0x66, 0xe5, 0x53, 0x5e, 0xe7, 0xfc, 0x68, 0x56, 0x2e, + 0x45, 0xe1, 0xac, 0xbc, 0x41, 0x60, 0xae, 0x34, 0xe5, 0x3b, 0x3c, 0xcb, 0xd8, 0x4c, 0xb4, 0x6f, + 0x89, 0x18, 0x4d, 0x4b, 0x84, 0x73, 0x25, 0x40, 0xda, 0x53, 0xb9, 0x66, 0x0f, 0x19, 0x97, 0xec, + 0xd9, 0xea, 0x20, 0xcd, 0x2f, 0x07, 0x78, 0x5a, 0x60, 0x01, 0xe2, 0x54, 0x0e, 0x05, 0xe1, 0x5e, + 0xf5, 0x34, 0x4f, 0x38, 0xbe, 0x57, 0xad, 0x25, 0xe1, 0xbd, 0xaa, 0x26, 0xa0, 0xc9, 0x13, 0x46, + 0x99, 0xac, 0x25, 0x61, 0x93, 0x9a, 0xc0, 0x42, 0xa1, 0x7e, 0x52, 0x44, 0x86, 0x42, 0xf0, 0x6c, + 0x68, 0xa3, 0x93, 0x83, 0x7b, 0x2e, 0xed, 0x00, 0x1d, 0x11, 0xc0, 0xf8, 0x9d, 0x20, 0x03, 0x87, + 0x7e, 0xb3, 0x1b, 0xde, 0x63, 0x62, 0x76, 0x81, 0x0f, 0x7d, 0x0f, 0x09, 0x0f, 0x7d, 0x88, 0xc2, + 0xb6, 0x9a, 0x72, 0xb3, 0x9b, 0x5f, 0xc7, 0x07, 0x5e, 0x6b, 0x27, 0xbf, 0xd1, 0xc9, 0xc1, 0xb6, + 0x1a, 0x2f, 0xe8, 0xb6, 0x52, 0xb2, 0x70, 0x5b, 0x19, 0x06, 0x96, 0x5e, 0x09, 0xe4, 0x21, 0xd9, + 0x3a, 0xad, 0xe8, 0x1d, 0x93, 0x6d, 0x74, 0x72, 0xda, 0xc9, 0x3f, 0x9b, 0xfd, 0xa1, 0x92, 0x1e, + 0xf1, 0x7a, 0xf2, 0xbd, 0x8c, 0xb3, 0x34, 0x89, 0x05, 0x9b, 0xf2, 0x4b, 0x96, 0xe3, 0x5b, 0x31, + 0x5d, 0x5a, 0xc5, 0x0f, 0x3d, 0x85, 0xf0, 0x56, 0x2c, 0xac, 0x08, 0xc7, 0x89, 0xa2, 0x4f, 0x2b, + 0xb6, 0x13, 0x57, 0x44, 0x88, 0xf4, 0x90, 0xf0, 0x38, 0x81, 0x28, 0x4c, 0x84, 0x95, 0xfc, 0xf9, + 0x9b, 0x82, 0x95, 0x29, 0xcb, 0x67, 0x0c, 0x4f, 0x84, 0x21, 0x15, 0x4e, 0x84, 0x11, 0x1a, 0x6e, + 0x02, 0x77, 0x63, 0xc1, 0x9e, 0xad, 0xa6, 0xe9, 0x82, 0x55, 0x22, 0x5e, 0x14, 0xf8, 0x26, 0x10, + 0x40, 0xe1, 0x4d, 0x60, 0x1b, 0x6e, 0x9d, 0x39, 0x99, 0x48, 0xdb, 0xbe, 0xb5, 0x06, 0x89, 0xc0, + 0xad, 0x35, 0x02, 0x85, 0x0d, 0x6b, 0x01, 0xf4, 0xe9, 0x43, 0xcb, 0x4a, 0xf0, 0xe9, 0x03, 0x4d, + 0xb7, 0x4e, 0xf2, 0x0c, 0x33, 0xa9, 0xa7, 0x66, 0x47, 0xd1, 0x27, 0xee, 0x14, 0xdd, 0xec, 0xc5, + 0xe2, 0x47, 0x87, 0x27, 0x2c, 0x8b, 0xe5, 0x7a, 0x18, 0x38, 0x9f, 0x6b, 0x98, 0x3e, 0x47, 0x87, + 0x0e, 0xab, 0x1d, 0xfe, 0xc5, 0x5a, 0xf4, 0x1e, 0xe6, 0xf1, 0x45, 0x21, 0xfd, 0x3e, 0xee, 0xb6, + 0xa5, 0x48, 0xe2, 0x5a, 0x5e, 0x58, 0xc3, 0xde, 0x2c, 0x69, 0x44, 0xf6, 0xd6, 0x9e, 0x2e, 0x80, + 0x9f, 0x0d, 0x9a, 0xf2, 0x43, 0x8e, 0xb8, 0x59, 0x12, 0xe2, 0xed, 0x46, 0xcb, 0x2f, 0x57, 0x05, + 0x36, 0x5a, 0xc6, 0x86, 0x16, 0x13, 0x1b, 0x2d, 0x04, 0xb3, 0xb3, 0xd3, 0xad, 0xde, 0xab, 0x54, + 0x5c, 0xc8, 0x44, 0x0e, 0xcc, 0x4e, 0xaf, 0xac, 0x06, 0x22, 0x66, 0x27, 0x09, 0xc3, 0x54, 0xa7, + 0x01, 0xeb, 0xb9, 0x89, 0xc5, 0x72, 0x63, 0xc8, 0x9d, 0x99, 0xf7, 0xbb, 0x41, 0x38, 0x5e, 0x1b, + 0xb1, 0xde, 0x53, 0x3d, 0x0c, 0x59, 0x00, 0xfb, 0xaa, 0xcd, 0x5e, 0xac, 0x76, 0xf8, 0xe7, 0xd1, + 0x77, 0x5a, 0x15, 0xdb, 0x63, 0xb1, 0x58, 0x96, 0x2c, 0x01, 0xb7, 0xb8, 0xdb, 0xe5, 0x6e, 0x40, + 0xe2, 0x16, 0x77, 0x50, 0xa1, 0x95, 0xfc, 0x37, 0x9c, 0x1a, 0x56, 0xa6, 0x0c, 0x4f, 0x42, 0x26, + 0x7d, 0x36, 0x98, 0xfc, 0xd3, 0x3a, 0xad, 0xfd, 0xbb, 0x3b, 0xba, 0x46, 0x57, 0x71, 0x9a, 0xc9, + 0xa7, 0xc0, 0x1f, 0x84, 0x8c, 0x7a, 0x68, 0x70, 0xff, 0x4e, 0xaa, 0xb4, 0x22, 0xb3, 0x9c, 0xe3, + 0xce, 0xbe, 0xef, 0x11, 0x1d, 0x09, 0x90, 0x6d, 0xdf, 0x56, 0x4f, 0x5a, 0xbb, 0x15, 0xcd, 0x92, + 0x57, 0xff, 0xd9, 0x1d, 0xe4, 0x98, 0x57, 0xad, 0x8a, 0x8c, 0xf4, 0xad, 0x9e, 0xb4, 0x7d, 0x85, + 0xa0, 0xed, 0x55, 0x2f, 0x44, 0xdb, 0x9d, 0xa6, 0xc0, 0x5a, 0xf4, 0xb8, 0xbf, 0x82, 0x76, 0xff, + 0x6f, 0xe6, 0xc0, 0x5b, 0xf9, 0x9f, 0xf1, 0xc5, 0x82, 0xe5, 0x09, 0x4b, 0x1a, 0x8d, 0xaa, 0xde, + 0x98, 0x7d, 0x4a, 0xdb, 0x35, 0x0a, 0x43, 0x57, 0xc3, 0x94, 0xe8, 0x77, 0xbe, 0x86, 0xa6, 0x2e, + 0xda, 0x7f, 0xad, 0x45, 0x0f, 0xd0, 0xa2, 0x35, 0x03, 0xd7, 0x2b, 0xe2, 0xef, 0xf7, 0x71, 0x84, + 0x69, 0x9a, 0xa2, 0x8e, 0xfe, 0x1f, 0x16, 0x74, 0x91, 0xff, 0x7d, 0x2d, 0xba, 0x6d, 0x15, 0xeb, + 0xe1, 0xbd, 0xc3, 0xf3, 0xf3, 0x2c, 0x9d, 0x09, 0xf9, 0xa8, 0x57, 0xab, 0xd0, 0xcd, 0x49, 0x69, + 0x74, 0x37, 0x67, 0x40, 0x53, 0x97, 0xed, 0x9f, 0xd6, 0xa2, 0x5b, 0x6e, 0x73, 0xca, 0xe7, 0xc4, + 0xea, 0xd8, 0xb5, 0x51, 0xac, 0x06, 0x1f, 0xd3, 0x6d, 0x80, 0xf1, 0xa6, 0x5c, 0x9f, 0x5c, 0x5b, + 0xcf, 0xee, 0xd5, 0x3f, 0x4b, 0x2b, 0xc1, 0xcb, 0xd5, 0xe4, 0x82, 0xbf, 0x6e, 0x5e, 0x89, 0xf3, + 0x57, 0x0b, 0x0d, 0x0c, 0x1d, 0x82, 0xd8, 0xab, 0xe3, 0x64, 0xcb, 0x95, 0x7d, 0x75, 0xae, 0x22, + 0x5c, 0x39, 0x44, 0x87, 0x2b, 0x9f, 0xb4, 0x6b, 0x65, 0x53, 0x2b, 0xfb, 0x9e, 0xdf, 0x06, 0x5e, + 0xd4, 0xf6, 0xbb, 0x7e, 0xf7, 0xbb, 0x41, 0x9b, 0x31, 0x6b, 0xf1, 0x6e, 0x7a, 0x7e, 0x6e, 0xea, + 0x84, 0x97, 0xd4, 0x45, 0x88, 0x8c, 0x99, 0x40, 0xed, 0xa6, 0x6f, 0x2f, 0xcd, 0x98, 0x7c, 0x54, + 0xf5, 0xe2, 0xfc, 0x3c, 0xe3, 0x71, 0x02, 0x36, 0x7d, 0xb5, 0x78, 0xe8, 0xca, 0x89, 0x4d, 0x1f, + 0xc6, 0xd9, 0x4b, 0x30, 0xb5, 0xb4, 0x9e, 0x73, 0xf9, 0x2c, 0xcd, 0xe0, 0x65, 0x6e, 0xa9, 0x69, + 0x84, 0xc4, 0x25, 0x98, 0x16, 0x64, 0x13, 0xb3, 0x5a, 0x54, 0xcf, 0x95, 0xa6, 0xfc, 0xf7, 0xda, + 0x8a, 0x8e, 0x98, 0x48, 0xcc, 0x10, 0xcc, 0x1e, 0xaa, 0xd4, 0xc2, 0xd3, 0x42, 0x1a, 0xbf, 0xd5, + 0xd6, 0x52, 0x12, 0xe2, 0x50, 0xc5, 0x27, 0xec, 0x1e, 0xbe, 0xfe, 0xfb, 0x2e, 0x7f, 0x9d, 0x4b, + 0xa3, 0xb7, 0xdb, 0x2a, 0x8d, 0x8c, 0xd8, 0xc3, 0x43, 0x46, 0x1b, 0xfe, 0x3c, 0xfa, 0x25, 0x69, + 0xb8, 0xe4, 0xc5, 0xe0, 0x06, 0xa2, 0x50, 0x3a, 0x57, 0x9f, 0x6f, 0x92, 0x72, 0x7b, 0x67, 0xc6, + 0x8c, 0x8d, 0xd3, 0x2a, 0x9e, 0xc3, 0xf7, 0x15, 0x6c, 0x8f, 0x4b, 0x29, 0x71, 0x67, 0xa6, 0x4d, + 0xf9, 0xa3, 0xe2, 0x88, 0x27, 0xda, 0x3a, 0x52, 0x43, 0x23, 0x0c, 0x8d, 0x0a, 0x17, 0xb2, 0xc9, + 0xf4, 0x51, 0x7c, 0x95, 0xce, 0x4d, 0xc2, 0xa3, 0xc2, 0x57, 0x05, 0x92, 0x69, 0xcb, 0x0c, 0x1d, + 0x88, 0x48, 0xa6, 0x49, 0xd8, 0x09, 0xc6, 0x96, 0xd9, 0x6f, 0x8e, 0xa1, 0xc7, 0xf9, 0x39, 0xaf, + 0x53, 0xef, 0x83, 0x34, 0xbf, 0x84, 0xc1, 0xd8, 0x31, 0x89, 0xf3, 0x44, 0x30, 0xee, 0xa3, 0x67, + 0x77, 0x4d, 0xcd, 0x19, 0xad, 0xbd, 0xa8, 0xa1, 0x34, 0xc0, 0xae, 0xc9, 0x1c, 0xe5, 0x42, 0x8e, + 0xd8, 0x35, 0x85, 0x78, 0xdb, 0xc5, 0xc6, 0x79, 0xc6, 0x73, 0xd8, 0xc5, 0xd6, 0x42, 0x2d, 0x24, + 0xba, 0xb8, 0x05, 0xd9, 0x78, 0xdc, 0x88, 0xd4, 0xa9, 0xdf, 0x28, 0xcb, 0x40, 0x3c, 0x36, 0xaa, + 0x06, 0x20, 0xe2, 0x31, 0x0a, 0x6a, 0x3f, 0x27, 0xd1, 0x37, 0xeb, 0x26, 0x3d, 0x2e, 0xd9, 0x55, + 0xca, 0xe0, 0x9d, 0x22, 0x47, 0x42, 0xcc, 0x7f, 0x9f, 0xb0, 0x33, 0xeb, 0x34, 0xaf, 0x8a, 0x2c, + 0xae, 0x2e, 0xf4, 0x2d, 0x13, 0xbf, 0xce, 0x8d, 0x10, 0xde, 0x33, 0xb9, 0xd7, 0x41, 0xd9, 0xa0, + 0xde, 0xc8, 0x4c, 0x88, 0x59, 0xc7, 0x55, 0x5b, 0x61, 0x66, 0xa3, 0x93, 0xb3, 0x8f, 0x72, 0xf6, + 0xe3, 0x2c, 0x63, 0xe5, 0xaa, 0x91, 0x1d, 0xc6, 0x79, 0x7a, 0xce, 0x2a, 0x01, 0x1e, 0xe5, 0x68, + 0x6a, 0x08, 0x31, 0xe2, 0x51, 0x4e, 0x00, 0xb7, 0xbb, 0x49, 0xe0, 0x79, 0x9c, 0x27, 0xec, 0x0d, + 0xd8, 0x4d, 0x42, 0x3b, 0x92, 0x21, 0x76, 0x93, 0x14, 0x6b, 0x1f, 0x69, 0x3c, 0xcb, 0xf8, 0xec, + 0x52, 0x2f, 0x01, 0x7e, 0x07, 0x4b, 0x09, 0x5c, 0x03, 0x6e, 0x87, 0x10, 0xbb, 0x08, 0x48, 0xc1, + 0x09, 0x2b, 0xb2, 0x78, 0x06, 0x2f, 0x96, 0x29, 0x1d, 0x2d, 0x23, 0x16, 0x01, 0xc8, 0x80, 0xe2, + 0xea, 0x0b, 0x6b, 0x58, 0x71, 0xc1, 0x7d, 0xb5, 0xdb, 0x21, 0xc4, 0x2e, 0x83, 0x52, 0x30, 0x29, + 0xb2, 0x54, 0x80, 0x69, 0xa0, 0x34, 0xa4, 0x84, 0x98, 0x06, 0x3e, 0x01, 0x4c, 0x1e, 0xb2, 0x72, + 0xce, 0x50, 0x93, 0x52, 0x12, 0x34, 0xd9, 0x10, 0xf6, 0x16, 0xbd, 0xaa, 0x3b, 0x2f, 0x56, 0xe0, + 0x16, 0xbd, 0xae, 0x16, 0x2f, 0x56, 0xc4, 0x2d, 0x7a, 0x0f, 0x00, 0x45, 0x3c, 0x8e, 0x2b, 0x81, + 0x17, 0x51, 0x4a, 0x82, 0x45, 0x6c, 0x08, 0xbb, 0x46, 0xab, 0x22, 0x2e, 0x05, 0x58, 0xa3, 0x75, + 0x01, 0x9c, 0xab, 0x15, 0x37, 0x49, 0xb9, 0x8d, 0x24, 0xaa, 0x57, 0x98, 0xd8, 0x4b, 0x59, 0x96, + 0x54, 0x20, 0x92, 0xe8, 0x76, 0x6f, 0xa4, 0x44, 0x24, 0x69, 0x53, 0x60, 0x28, 0xe9, 0xe7, 0x32, + 0x58, 0xed, 0xc0, 0x63, 0x99, 0xdb, 0x21, 0xc4, 0xc6, 0xa7, 0xa6, 0xd0, 0x3b, 0x71, 0x59, 0xa6, + 0xf5, 0xe2, 0xbf, 0x8e, 0x17, 0xa8, 0x91, 0x13, 0xf1, 0x09, 0xe3, 0xc0, 0xf4, 0x6a, 0x02, 0x37, + 0x56, 0x30, 0x18, 0xba, 0xef, 0x04, 0x19, 0x9b, 0x71, 0x4a, 0x89, 0x73, 0x37, 0x00, 0x6b, 0x4d, + 0xe4, 0x6a, 0xc0, 0x7a, 0x17, 0xe6, 0xbc, 0xd0, 0x67, 0x5c, 0x1c, 0xf2, 0x2b, 0x36, 0xe5, 0xcf, + 0xdf, 0xa4, 0x55, 0xbd, 0x09, 0xd4, 0x2b, 0xf7, 0x53, 0xc2, 0x12, 0x06, 0x13, 0x2f, 0xf4, 0x75, + 0x2a, 0xd9, 0x04, 0x02, 0x94, 0xe5, 0x88, 0xbd, 0x46, 0x13, 0x08, 0x68, 0xd1, 0x70, 0x44, 0x02, + 0x11, 0xe2, 0xed, 0x39, 0x9e, 0x71, 0xae, 0x3f, 0xa5, 0x31, 0xe5, 0x4d, 0x2e, 0x47, 0x59, 0x83, + 0x20, 0x71, 0x94, 0x12, 0x54, 0xb0, 0xfb, 0x4b, 0xe3, 0xdf, 0x4e, 0xb1, 0xfb, 0x84, 0x9d, 0xf6, + 0x34, 0x7b, 0xd0, 0x83, 0x44, 0x5c, 0xd9, 0x0b, 0x2e, 0x94, 0xab, 0xf6, 0xfd, 0x96, 0x07, 0x3d, + 0x48, 0xe7, 0x4c, 0xd0, 0xad, 0xd6, 0xb3, 0x78, 0x76, 0x39, 0x2f, 0xf9, 0x32, 0x4f, 0x76, 0x78, + 0xc6, 0x4b, 0x70, 0x26, 0xe8, 0x95, 0x1a, 0xa0, 0xc4, 0x99, 0x60, 0x87, 0x8a, 0xcd, 0xe0, 0xdc, + 0x52, 0x8c, 0xb2, 0x74, 0x0e, 0x77, 0xd4, 0x9e, 0x21, 0x09, 0x10, 0x19, 0x1c, 0x0a, 0x22, 0x83, + 0x48, 0xed, 0xb8, 0x45, 0x3a, 0x8b, 0x33, 0xe5, 0x6f, 0x9b, 0x36, 0xe3, 0x81, 0x9d, 0x83, 0x08, + 0x51, 0x40, 0xea, 0x39, 0x5d, 0x96, 0xf9, 0x38, 0x17, 0x9c, 0xac, 0x67, 0x03, 0x74, 0xd6, 0xd3, + 0x01, 0x41, 0x58, 0x9d, 0xb2, 0x37, 0x75, 0x69, 0xea, 0x7f, 0xb0, 0xb0, 0x5a, 0xff, 0x7d, 0xa8, + 0xe5, 0xa1, 0xb0, 0x0a, 0x38, 0x50, 0x19, 0xed, 0x44, 0x0d, 0x98, 0x80, 0xb6, 0x3f, 0x4c, 0xee, + 0x77, 0x83, 0xb8, 0x9f, 0x89, 0x58, 0x65, 0x2c, 0xe4, 0x47, 0x02, 0x7d, 0xfc, 0x34, 0xa0, 0x3d, + 0x6e, 0xf1, 0xea, 0x73, 0xc1, 0x66, 0x97, 0xad, 0xfb, 0x7a, 0x7e, 0x41, 0x15, 0x42, 0x1c, 0xb7, + 0x10, 0x28, 0xde, 0x45, 0xe3, 0x19, 0xcf, 0x43, 0x5d, 0x54, 0xcb, 0xfb, 0x74, 0x91, 0xe6, 0xec, + 0xe6, 0xd7, 0x48, 0xf5, 0xc8, 0x54, 0xdd, 0xb4, 0x49, 0x58, 0x70, 0x21, 0x62, 0xf3, 0x4b, 0xc2, + 0x36, 0x27, 0x87, 0x3e, 0x0f, 0xdb, 0x2f, 0x33, 0xb4, 0xac, 0x1c, 0xd2, 0x2f, 0x33, 0x50, 0x2c, + 0x5d, 0x49, 0x35, 0x46, 0x3a, 0xac, 0xf8, 0xe3, 0xe4, 0x51, 0x3f, 0xd8, 0x6e, 0x79, 0x3c, 0x9f, + 0x3b, 0x19, 0x8b, 0x4b, 0xe5, 0x75, 0x2b, 0x60, 0xc8, 0x62, 0xc4, 0x96, 0x27, 0x80, 0x83, 0x10, + 0xe6, 0x79, 0xde, 0xe1, 0xb9, 0x60, 0xb9, 0xc0, 0x42, 0x98, 0x6f, 0x4c, 0x83, 0xa1, 0x10, 0x46, + 0x29, 0x80, 0x71, 0x2b, 0xcf, 0x83, 0x98, 0x38, 0x8a, 0x17, 0x68, 0xc6, 0xa6, 0xce, 0x7a, 0x94, + 0x3c, 0x34, 0x6e, 0x01, 0xe7, 0x3c, 0x64, 0x76, 0xbd, 0x4c, 0xe3, 0x72, 0x6e, 0x4e, 0x37, 0x92, + 0xc1, 0x63, 0xda, 0x8e, 0x4f, 0x12, 0x0f, 0x99, 0xc3, 0x1a, 0x20, 0xec, 0x8c, 0x17, 0xf1, 0xdc, + 0xd4, 0x14, 0xa9, 0x81, 0x94, 0xb7, 0xaa, 0x7a, 0xbf, 0x1b, 0x04, 0x7e, 0x5e, 0xa6, 0x09, 0xe3, + 0x01, 0x3f, 0x52, 0xde, 0xc7, 0x0f, 0x04, 0x41, 0xf6, 0x56, 0xd7, 0x5b, 0x7f, 0xec, 0x2a, 0x4f, + 0xf4, 0x3e, 0x76, 0x48, 0x34, 0x0f, 0xe0, 0x42, 0xd9, 0x1b, 0xc1, 0x83, 0x39, 0xda, 0x1c, 0xd0, + 0x86, 0xe6, 0xa8, 0x39, 0x7f, 0xed, 0x33, 0x47, 0x31, 0x58, 0xfb, 0xfc, 0xb1, 0x9e, 0xa3, 0xbb, + 0xb1, 0x88, 0xeb, 0xbc, 0xfd, 0x65, 0xca, 0x5e, 0xeb, 0x8d, 0x30, 0x52, 0xdf, 0x86, 0x1a, 0xca, + 0x77, 0xb1, 0xc1, 0xae, 0x78, 0xbb, 0x37, 0x1f, 0xf0, 0xad, 0x77, 0x08, 0x9d, 0xbe, 0xc1, 0x56, + 0x61, 0xbb, 0x37, 0x1f, 0xf0, 0xad, 0x3f, 0x29, 0xd1, 0xe9, 0x1b, 0x7c, 0x57, 0x62, 0xbb, 0x37, + 0xaf, 0x7d, 0xff, 0xb4, 0x99, 0xb8, 0xae, 0xf3, 0x3a, 0x0f, 0x9b, 0x89, 0xf4, 0x8a, 0x61, 0xe9, + 0xa4, 0x6f, 0xcf, 0xa0, 0xa1, 0x74, 0x92, 0x56, 0x71, 0xbe, 0xac, 0x87, 0x95, 0xe2, 0x98, 0x57, + 0xa9, 0xbc, 0x24, 0xf2, 0xb4, 0x87, 0xd1, 0x06, 0x0e, 0x6d, 0x9a, 0x42, 0x4a, 0xf6, 0x71, 0xb7, + 0x87, 0xda, 0xeb, 0xf9, 0x8f, 0x02, 0xf6, 0xda, 0xb7, 0xf4, 0xb7, 0x7a, 0xd2, 0xf6, 0xc1, 0xb3, + 0xc7, 0x34, 0x8f, 0x0c, 0x27, 0x0c, 0x5d, 0x25, 0x8c, 0x29, 0xf3, 0x28, 0xd9, 0x7d, 0x76, 0xfa, + 0xb8, 0xbf, 0x42, 0x87, 0xfb, 0x51, 0x92, 0xf4, 0x73, 0xef, 0x3e, 0x73, 0x7f, 0xdc, 0x5f, 0x41, + 0xbb, 0xff, 0xab, 0x66, 0x5b, 0x03, 0xfd, 0xeb, 0x39, 0xf8, 0xa4, 0x8f, 0x45, 0x30, 0x0f, 0x9f, + 0x5e, 0x4b, 0x47, 0x17, 0xe4, 0xef, 0x9a, 0xfd, 0x7b, 0x83, 0xca, 0x77, 0xa4, 0xe4, 0xbb, 0xd5, + 0x7a, 0x4a, 0x86, 0x46, 0x95, 0x85, 0xe1, 0xc4, 0xfc, 0xe8, 0x9a, 0x5a, 0xce, 0x67, 0x1e, 0x3d, + 0x58, 0xbf, 0xcb, 0xeb, 0x94, 0x27, 0x64, 0xd9, 0xa1, 0x61, 0x81, 0x3e, 0xbe, 0xae, 0x1a, 0x35, + 0x55, 0x1d, 0x58, 0x7e, 0x63, 0xe7, 0x69, 0x4f, 0xc3, 0xde, 0x57, 0x77, 0x3e, 0xbc, 0x9e, 0x92, + 0x2e, 0xcb, 0x7f, 0xae, 0x45, 0xf7, 0x3c, 0xd6, 0x3e, 0xce, 0x00, 0x87, 0x2e, 0x3f, 0x08, 0xd8, + 0xa7, 0x94, 0x4c, 0xe1, 0x7e, 0xf7, 0xeb, 0x29, 0xdb, 0xcf, 0xf1, 0x79, 0x2a, 0x7b, 0x69, 0x26, + 0x58, 0xd9, 0xfe, 0x1c, 0x9f, 0x6f, 0x57, 0x51, 0x43, 0xfa, 0x73, 0x7c, 0x01, 0xdc, 0xf9, 0x1c, + 0x1f, 0xe2, 0x19, 0xfd, 0x1c, 0x1f, 0x6a, 0x2d, 0xf8, 0x39, 0xbe, 0xb0, 0x06, 0xb5, 0xba, 0x34, + 0x45, 0x50, 0xc7, 0xe6, 0xbd, 0x2c, 0xfa, 0xa7, 0xe8, 0x4f, 0xae, 0xa3, 0x42, 0xac, 0xaf, 0x8a, + 0x93, 0xd7, 0x3c, 0x7b, 0xb4, 0xa9, 0x77, 0xd5, 0x73, 0xbb, 0x37, 0xaf, 0x7d, 0xff, 0x48, 0x6f, + 0xae, 0xcc, 0x6a, 0xc2, 0x4b, 0xf9, 0x29, 0xc6, 0xcd, 0xd0, 0xea, 0x50, 0x5b, 0x70, 0x7b, 0xfe, + 0x51, 0x3f, 0x98, 0xa8, 0x6e, 0x4d, 0xe8, 0x4e, 0x1f, 0x76, 0x19, 0x02, 0x5d, 0xbe, 0xdd, 0x9b, + 0x27, 0x96, 0x11, 0xe5, 0x5b, 0xf5, 0x76, 0x0f, 0x63, 0x7e, 0x5f, 0x3f, 0xee, 0xaf, 0xa0, 0xdd, + 0x5f, 0xe9, 0xac, 0xd5, 0x75, 0x2f, 0xfb, 0x79, 0xab, 0xcb, 0xd4, 0xc4, 0xeb, 0xe6, 0x61, 0x5f, + 0x3c, 0x94, 0xbf, 0xb8, 0x4b, 0x68, 0x57, 0xfe, 0x82, 0x2e, 0xa3, 0x1f, 0x5e, 0x4f, 0x49, 0x97, + 0xe5, 0x1f, 0xd7, 0xa2, 0x9b, 0x64, 0x59, 0xf4, 0x38, 0xf8, 0xb8, 0xaf, 0x65, 0x30, 0x1e, 0x3e, + 0xb9, 0xb6, 0x9e, 0x2e, 0xd4, 0xbf, 0xac, 0x45, 0xb7, 0x02, 0x85, 0x52, 0x03, 0xe4, 0x1a, 0xd6, + 0xfd, 0x81, 0xf2, 0xe9, 0xf5, 0x15, 0xa9, 0xe5, 0xde, 0xc5, 0x27, 0xed, 0x4f, 0xab, 0x05, 0x6c, + 0x4f, 0xe8, 0x4f, 0xab, 0x75, 0x6b, 0xc1, 0x33, 0xa6, 0xf8, 0xac, 0xd9, 0xf3, 0xa1, 0x67, 0x4c, + 0xf2, 0x82, 0x66, 0xf0, 0xa3, 0x2d, 0x18, 0x87, 0x39, 0x79, 0xfe, 0xa6, 0x88, 0xf3, 0x84, 0x76, + 0xa2, 0xe4, 0xdd, 0x4e, 0x0c, 0x07, 0xcf, 0xe6, 0x6a, 0xe9, 0x09, 0x6f, 0xf6, 0x71, 0x0f, 0x28, + 0x7d, 0x83, 0x04, 0xcf, 0xe6, 0x5a, 0x28, 0xe1, 0x4d, 0x67, 0x8d, 0x21, 0x6f, 0x20, 0x59, 0x7c, + 0xd8, 0x07, 0x05, 0x3b, 0x04, 0xe3, 0xcd, 0x1c, 0xf9, 0x3f, 0x0a, 0x59, 0x69, 0x1d, 0xfb, 0x6f, + 0xf5, 0xa4, 0x09, 0xb7, 0x13, 0x26, 0x3e, 0x63, 0x71, 0xc2, 0xca, 0xa0, 0x5b, 0x43, 0xf5, 0x72, + 0xeb, 0xd2, 0x98, 0xdb, 0x1d, 0x9e, 0x2d, 0x17, 0xb9, 0xee, 0x4c, 0xd2, 0xad, 0x4b, 0x75, 0xbb, + 0x05, 0x34, 0x3c, 0x95, 0xb4, 0x6e, 0x65, 0x7a, 0xf9, 0x30, 0x6c, 0xc6, 0xcb, 0x2a, 0x37, 0x7b, + 0xb1, 0x74, 0x3d, 0xf5, 0x30, 0xea, 0xa8, 0x27, 0x18, 0x49, 0x5b, 0x3d, 0x69, 0x78, 0x3c, 0xe8, + 0xb8, 0x35, 0xe3, 0x69, 0xbb, 0xc3, 0x56, 0x6b, 0x48, 0x3d, 0xee, 0xaf, 0x00, 0x0f, 0x63, 0xf5, + 0xa8, 0x3a, 0x48, 0x2b, 0xb1, 0x97, 0x66, 0xd9, 0x60, 0x33, 0x30, 0x4c, 0x1a, 0x28, 0x78, 0x18, + 0x8b, 0xc0, 0xc4, 0x48, 0x6e, 0x0e, 0x2f, 0xf3, 0x41, 0x97, 0x1d, 0x49, 0xf5, 0x1a, 0xc9, 0x2e, + 0x0d, 0x0e, 0xd4, 0x9c, 0xa6, 0x36, 0xb5, 0x1d, 0x86, 0x1b, 0xae, 0x55, 0xe1, 0xed, 0xde, 0x3c, + 0x78, 0xda, 0x2f, 0x29, 0xb9, 0xb2, 0xdc, 0xa5, 0x4c, 0x78, 0x2b, 0xc9, 0xbd, 0x0e, 0x0a, 0x1c, + 0x4a, 0xaa, 0x69, 0xf4, 0x2a, 0x4d, 0xe6, 0x4c, 0xa0, 0x0f, 0xaa, 0x5c, 0x20, 0xf8, 0xa0, 0x0a, + 0x80, 0xa0, 0xeb, 0xd4, 0xdf, 0xcd, 0x69, 0xec, 0x38, 0xc1, 0xba, 0x4e, 0x2b, 0x3b, 0x54, 0xa8, + 0xeb, 0x50, 0x1a, 0x44, 0x03, 0xe3, 0x56, 0x7f, 0xe6, 0xe2, 0x61, 0xc8, 0x0c, 0xf8, 0xd6, 0xc5, + 0x66, 0x2f, 0x16, 0xac, 0x28, 0xd6, 0x61, 0xba, 0x48, 0x05, 0xb6, 0xa2, 0x38, 0x36, 0x6a, 0x24, + 0xb4, 0xa2, 0xb4, 0x51, 0xaa, 0x7a, 0x75, 0x8e, 0x30, 0x4e, 0xc2, 0xd5, 0x53, 0x4c, 0xbf, 0xea, + 0x19, 0xb6, 0xf5, 0x5c, 0x35, 0x37, 0x43, 0x46, 0x5c, 0xe8, 0xcd, 0x32, 0x32, 0xb6, 0x9d, 0x5f, + 0x5c, 0xb0, 0x60, 0x28, 0xea, 0x50, 0x0a, 0xf0, 0x79, 0x41, 0xf3, 0x1b, 0x0d, 0x13, 0x26, 0x46, + 0x45, 0xc1, 0xe2, 0x32, 0xce, 0x67, 0xe8, 0xe6, 0xd4, 0xfc, 0xe6, 0x82, 0x47, 0x86, 0x36, 0xa7, + 0xa4, 0x06, 0x78, 0x6a, 0xef, 0xbf, 0x5f, 0x8c, 0x4c, 0x05, 0xf3, 0x22, 0xaf, 0xff, 0x7a, 0xf1, + 0x83, 0x1e, 0x24, 0x7c, 0x6a, 0xdf, 0x00, 0xe6, 0xdc, 0x5d, 0x39, 0xfd, 0x20, 0x60, 0xca, 0x47, + 0x43, 0x1b, 0x61, 0x5a, 0x05, 0x0c, 0x6a, 0xe7, 0x6c, 0xf1, 0x73, 0xb6, 0xc2, 0x06, 0xb5, 0x7b, + 0x48, 0xf8, 0x39, 0x5b, 0x85, 0x06, 0x75, 0x1b, 0x05, 0x79, 0xa6, 0xbb, 0x0f, 0x5a, 0x0f, 0xe8, + 0xbb, 0x5b, 0x9f, 0x8d, 0x4e, 0x0e, 0xcc, 0x9c, 0xdd, 0xf4, 0xca, 0x7b, 0x4c, 0x81, 0x14, 0x74, + 0x37, 0xbd, 0xc2, 0x9f, 0x52, 0x6c, 0xf6, 0x62, 0xe1, 0x8d, 0x80, 0x58, 0xb0, 0x37, 0xcd, 0xa3, + 0x7a, 0xa4, 0xb8, 0x52, 0xde, 0x7a, 0x56, 0x7f, 0xbf, 0x1b, 0xb4, 0xf7, 0x6f, 0x8f, 0x4b, 0x3e, + 0x63, 0x55, 0xa5, 0xbf, 0x00, 0xeb, 0x5f, 0x70, 0xd2, 0xb2, 0x21, 0xf8, 0xfe, 0xeb, 0xdd, 0x30, + 0xe4, 0x7c, 0xb6, 0x51, 0x89, 0xec, 0xd7, 0xa4, 0xd6, 0x51, 0xcd, 0xf6, 0x87, 0xa4, 0x36, 0x3a, + 0x39, 0x3b, 0xbd, 0xb4, 0xd4, 0xfd, 0x7c, 0xd4, 0x7d, 0x54, 0x1d, 0xfb, 0x72, 0xd4, 0x83, 0x1e, + 0xa4, 0x76, 0xf5, 0x59, 0xf4, 0xd6, 0x01, 0x9f, 0x4f, 0x58, 0x9e, 0x0c, 0xbe, 0xe7, 0xdf, 0xe0, + 0xe5, 0xf3, 0x61, 0xfd, 0x67, 0x63, 0xf4, 0x06, 0x25, 0xb6, 0x77, 0x10, 0x77, 0xd9, 0xd9, 0x72, + 0x3e, 0x11, 0xb1, 0x00, 0x77, 0x10, 0xe5, 0xdf, 0x87, 0xb5, 0x80, 0xb8, 0x83, 0xe8, 0x01, 0xc0, + 0xde, 0xb4, 0x64, 0x0c, 0xb5, 0x57, 0x0b, 0x82, 0xf6, 0x34, 0x60, 0xb3, 0x08, 0x63, 0xaf, 0x4e, + 0xd4, 0xe1, 0x9d, 0x41, 0xab, 0x23, 0xa5, 0x44, 0x16, 0xd1, 0xa6, 0xec, 0xe0, 0x56, 0xd5, 0x97, + 0x5f, 0xf3, 0x59, 0x2e, 0x16, 0x71, 0xb9, 0x02, 0x83, 0x5b, 0xd7, 0xd2, 0x01, 0x88, 0xc1, 0x8d, + 0x82, 0x76, 0xd6, 0x36, 0xcd, 0x3c, 0xbb, 0xdc, 0xe7, 0x25, 0x5f, 0x8a, 0x34, 0x67, 0xf0, 0x8b, + 0x2e, 0xa6, 0x41, 0x5d, 0x86, 0x98, 0xb5, 0x14, 0x6b, 0xb3, 0x5c, 0x49, 0xa8, 0xeb, 0x8c, 0xf2, + 0x13, 0xf8, 0x95, 0xe0, 0x25, 0x7c, 0x9c, 0xa9, 0xac, 0x40, 0x88, 0xc8, 0x72, 0x49, 0x18, 0xf4, + 0xfd, 0x71, 0x9a, 0xcf, 0xd1, 0xbe, 0x3f, 0x76, 0xbf, 0xaa, 0x7c, 0x8b, 0x06, 0xec, 0x84, 0x52, + 0x8d, 0xa6, 0x26, 0x80, 0x7e, 0x95, 0x19, 0x6d, 0x74, 0x97, 0x20, 0x26, 0x14, 0x4e, 0x02, 0x57, + 0x2f, 0x0a, 0x96, 0xb3, 0xa4, 0xb9, 0xb4, 0x87, 0xb9, 0xf2, 0x88, 0xa0, 0x2b, 0x48, 0xda, 0x58, + 0x24, 0xe5, 0x27, 0xcb, 0xfc, 0xb8, 0xe4, 0xe7, 0x69, 0xc6, 0x4a, 0x10, 0x8b, 0x94, 0xba, 0x23, + 0x27, 0x62, 0x11, 0xc6, 0xd9, 0xdb, 0x1f, 0x52, 0xea, 0xfd, 0x8e, 0xc3, 0xb4, 0x8c, 0x67, 0xf0, + 0xf6, 0x87, 0xb2, 0xd1, 0xc6, 0x88, 0x93, 0xc1, 0x00, 0xee, 0x24, 0x3a, 0xca, 0x75, 0xbe, 0x92, + 0xe3, 0x43, 0xbf, 0x4a, 0x2b, 0xbf, 0x35, 0x5c, 0x81, 0x44, 0x47, 0x9b, 0xc3, 0x48, 0x22, 0xd1, + 0x09, 0x6b, 0xd8, 0xa5, 0x44, 0x72, 0x47, 0xfa, 0x56, 0x13, 0x58, 0x4a, 0x94, 0x8d, 0x46, 0x48, + 0x2c, 0x25, 0x2d, 0x08, 0x04, 0xa4, 0x66, 0x1a, 0xcc, 0xd1, 0x80, 0x64, 0xa4, 0xc1, 0x80, 0xe4, + 0x52, 0x36, 0x50, 0x8c, 0xf3, 0x54, 0xa4, 0x71, 0x36, 0x61, 0xe2, 0x38, 0x2e, 0xe3, 0x05, 0x13, + 0xac, 0x84, 0x81, 0x42, 0x23, 0x43, 0x8f, 0x21, 0x02, 0x05, 0xc5, 0x6a, 0x87, 0xbf, 0x17, 0xbd, + 0x53, 0xaf, 0xfb, 0x2c, 0xd7, 0xbf, 0x40, 0xf5, 0x5c, 0xfe, 0x7e, 0xe0, 0xe0, 0x5d, 0x63, 0x63, + 0x22, 0x4a, 0x16, 0x2f, 0x1a, 0xdb, 0x6f, 0x9b, 0xbf, 0x4b, 0xf0, 0xf1, 0x5a, 0x3d, 0x9e, 0x8f, + 0xb8, 0x48, 0xcf, 0xeb, 0x6d, 0xb6, 0x7e, 0x81, 0x09, 0x8c, 0x67, 0x57, 0x3c, 0x0c, 0x7c, 0x8a, + 0x05, 0xe3, 0x6c, 0x9c, 0x76, 0xa5, 0x27, 0xac, 0xc8, 0x60, 0x9c, 0xf6, 0xb4, 0x25, 0x40, 0xc4, + 0x69, 0x14, 0xb4, 0x93, 0xd3, 0x15, 0x4f, 0x59, 0xb8, 0x32, 0x53, 0xd6, 0xaf, 0x32, 0x53, 0xef, + 0x9d, 0x90, 0x2c, 0x7a, 0xe7, 0x90, 0x2d, 0xce, 0x58, 0x59, 0x5d, 0xa4, 0x05, 0xf5, 0x3d, 0x64, + 0x4b, 0x74, 0x7e, 0x0f, 0x99, 0x40, 0xed, 0x4a, 0x60, 0x81, 0x71, 0x75, 0x14, 0x2f, 0x98, 0xfc, + 0xb0, 0x0c, 0x58, 0x09, 0x1c, 0x23, 0x0e, 0x44, 0xac, 0x04, 0x24, 0xec, 0xbc, 0x5e, 0x66, 0x99, + 0x13, 0x36, 0xaf, 0x47, 0x58, 0x79, 0x1c, 0xaf, 0x16, 0x2c, 0x17, 0xda, 0x24, 0x38, 0x93, 0x77, + 0x4c, 0xe2, 0x3c, 0x71, 0x26, 0xdf, 0x47, 0xcf, 0x09, 0x4d, 0x5e, 0xc3, 0x1f, 0xf3, 0x52, 0xa8, + 0x9f, 0x96, 0x3b, 0x2d, 0x33, 0x10, 0x9a, 0xfc, 0x46, 0xf5, 0x48, 0x22, 0x34, 0x85, 0x35, 0x9c, + 0xdf, 0x12, 0xf1, 0xca, 0xf0, 0x92, 0x95, 0x66, 0x9c, 0x3c, 0x5f, 0xc4, 0x69, 0xa6, 0x47, 0xc3, + 0xf7, 0x03, 0xb6, 0x09, 0x1d, 0xe2, 0xb7, 0x44, 0xfa, 0xea, 0x3a, 0xbf, 0xbe, 0x12, 0x2e, 0x21, + 0x78, 0x44, 0xd0, 0x61, 0x9f, 0x78, 0x44, 0xd0, 0xad, 0x65, 0x77, 0xee, 0x96, 0x95, 0xdc, 0x4a, + 0x12, 0x3b, 0x3c, 0x81, 0xe7, 0x85, 0x8e, 0x4d, 0x00, 0x12, 0x3b, 0xf7, 0xa0, 0x82, 0x4d, 0x0d, + 0x2c, 0xb6, 0x97, 0xe6, 0x71, 0x96, 0xfe, 0x18, 0xa6, 0xf5, 0x8e, 0x9d, 0x86, 0x20, 0x52, 0x03, + 0x9c, 0xc4, 0x5c, 0xed, 0x33, 0x31, 0x4d, 0xeb, 0xd0, 0x7f, 0x3f, 0xd0, 0x6e, 0x92, 0xe8, 0x76, + 0xe5, 0x90, 0xce, 0xb7, 0x8f, 0x61, 0xb3, 0x8e, 0x8a, 0x62, 0x52, 0xaf, 0xaa, 0x27, 0x6c, 0xc6, + 0xd2, 0x42, 0x0c, 0x3e, 0x0a, 0xb7, 0x15, 0xc0, 0x89, 0x8b, 0x16, 0x3d, 0xd4, 0x9c, 0xc7, 0xf7, + 0x75, 0x2c, 0x99, 0xa8, 0x5f, 0xbf, 0x3d, 0xad, 0x58, 0xa9, 0x13, 0x8d, 0x7d, 0x26, 0xc0, 0xec, + 0x74, 0xb8, 0xa1, 0x03, 0xd6, 0x15, 0x25, 0x66, 0x67, 0x58, 0xc3, 0x1e, 0xf6, 0x39, 0x9c, 0xfe, + 0x76, 0x80, 0xbc, 0xee, 0xf8, 0x88, 0x34, 0xe6, 0x50, 0xc4, 0x61, 0x1f, 0x4d, 0xdb, 0x6c, 0xad, + 0xed, 0x76, 0x94, 0xaf, 0xc6, 0xf0, 0xca, 0x04, 0x62, 0x49, 0x62, 0x44, 0xb6, 0x16, 0xc0, 0x9d, + 0xc3, 0xf0, 0x92, 0xc7, 0xc9, 0x2c, 0xae, 0xc4, 0x71, 0xbc, 0xca, 0x78, 0x9c, 0xc8, 0x75, 0x1d, + 0x1e, 0x86, 0x37, 0xcc, 0xd0, 0x85, 0xa8, 0xc3, 0x70, 0x0a, 0x76, 0xb3, 0x33, 0xf9, 0xa3, 0xbe, + 0xfa, 0x2a, 0x29, 0xcc, 0xce, 0x64, 0x79, 0xe1, 0x35, 0xd2, 0xbb, 0x61, 0xc8, 0xbe, 0x02, 0xa7, + 0x44, 0x32, 0x0d, 0xb9, 0x85, 0xe9, 0x78, 0x09, 0xc8, 0xfb, 0x01, 0xc2, 0x7e, 0x96, 0x45, 0xfd, + 0xbd, 0xf9, 0x09, 0x31, 0xa1, 0xbf, 0x10, 0xff, 0x08, 0xd3, 0x75, 0x21, 0xef, 0x86, 0xda, 0x56, + 0x4f, 0xda, 0xa6, 0x99, 0x3b, 0x17, 0xb1, 0x18, 0x25, 0xc9, 0x21, 0xab, 0x90, 0xf7, 0xd9, 0x6b, + 0xe1, 0xd0, 0x4a, 0x89, 0x34, 0xb3, 0x4d, 0xd9, 0x81, 0x5e, 0xcb, 0x9e, 0x27, 0xa9, 0xd0, 0xb2, + 0xe6, 0x82, 0xf6, 0xa3, 0xb6, 0x81, 0x36, 0x45, 0xd4, 0x8a, 0xa6, 0x6d, 0x2c, 0xaf, 0x99, 0x29, + 0x9f, 0xcf, 0x33, 0xa6, 0xa1, 0x13, 0x16, 0xab, 0x0f, 0x64, 0x6e, 0xb7, 0x6d, 0xa1, 0x20, 0x11, + 0xcb, 0x83, 0x0a, 0x36, 0x8d, 0xac, 0x31, 0xf5, 0x48, 0xaa, 0x69, 0xd8, 0x8d, 0xb6, 0x19, 0x0f, + 0x20, 0xd2, 0x48, 0x14, 0xb4, 0xaf, 0xdd, 0xd5, 0xe2, 0x7d, 0xd6, 0xb4, 0x04, 0xfc, 0x02, 0x97, + 0x54, 0x76, 0xc4, 0xc4, 0x6b, 0x77, 0x08, 0x66, 0xf7, 0x09, 0xc0, 0xc3, 0xb3, 0xd5, 0x38, 0x81, + 0xfb, 0x04, 0xa8, 0x2f, 0x19, 0x62, 0x9f, 0x40, 0xb1, 0x7e, 0xd7, 0x99, 0x73, 0xaf, 0x83, 0xb8, + 0xb2, 0x95, 0x43, 0xba, 0x0e, 0x05, 0x43, 0x5d, 0x47, 0x29, 0xf8, 0x4d, 0xea, 0x1e, 0xad, 0x21, + 0x4d, 0x8a, 0x9d, 0xab, 0xad, 0x77, 0x61, 0x36, 0xf7, 0xaf, 0x85, 0x27, 0x2c, 0x4e, 0x4c, 0xc5, + 0x10, 0x5d, 0x57, 0x4e, 0xe4, 0xfe, 0x18, 0xa7, 0x9d, 0xfc, 0x61, 0x34, 0x50, 0xd5, 0x28, 0x5d, + 0x37, 0xb7, 0xb0, 0x22, 0xd6, 0x04, 0x11, 0xa8, 0x7c, 0xc2, 0x49, 0xdc, 0xbc, 0x2e, 0x9a, 0x72, + 0xed, 0x40, 0xbf, 0x16, 0x5a, 0x81, 0xc4, 0xcd, 0x6f, 0xf6, 0x16, 0x4d, 0x24, 0x6e, 0xdd, 0x5a, + 0xce, 0xc7, 0x88, 0x40, 0x97, 0xed, 0x95, 0x7c, 0x01, 0xcb, 0xf4, 0x69, 0xb0, 0x7b, 0x10, 0x0d, + 0xe2, 0x63, 0x44, 0xfd, 0x34, 0xed, 0x1a, 0x64, 0xce, 0x0e, 0xe4, 0xf5, 0x34, 0xfc, 0x57, 0x50, + 0x94, 0x90, 0x58, 0x83, 0x5a, 0x90, 0xf3, 0xd3, 0xa9, 0xe3, 0x57, 0x65, 0x2a, 0xd2, 0x7c, 0x3e, + 0xe5, 0x3c, 0x83, 0x47, 0x96, 0xa3, 0xf1, 0xd0, 0x95, 0x52, 0x3f, 0x9d, 0xda, 0xa2, 0xec, 0x12, + 0x37, 0x1a, 0x8f, 0x96, 0x82, 0x9f, 0xa7, 0x59, 0x06, 0x46, 0xce, 0x68, 0x3c, 0x6c, 0x24, 0xc4, + 0xc8, 0xf1, 0x09, 0xe7, 0x07, 0x3f, 0xc7, 0xf2, 0xf4, 0x5f, 0x9f, 0x80, 0xde, 0x81, 0x3a, 0x8e, + 0x90, 0xfa, 0xc1, 0x4f, 0x08, 0x39, 0x3f, 0x60, 0x3a, 0xc6, 0x7e, 0xca, 0x65, 0x13, 0xaa, 0x23, + 0x10, 0xf5, 0x03, 0xa6, 0x14, 0xec, 0xbc, 0x93, 0x7c, 0xbc, 0xac, 0x2e, 0xfc, 0x23, 0x03, 0xb5, + 0x39, 0x54, 0x9f, 0x6d, 0x7d, 0x0a, 0x7e, 0x50, 0xc8, 0x67, 0x87, 0x1e, 0x4c, 0x5c, 0x4f, 0xeb, + 0x54, 0x52, 0x85, 0x79, 0xf6, 0xfe, 0x7f, 0x7f, 0x79, 0x63, 0xed, 0xe7, 0x5f, 0xde, 0x58, 0xfb, + 0xdf, 0x2f, 0x6f, 0xac, 0xfd, 0xec, 0xab, 0x1b, 0xdf, 0xf8, 0xf9, 0x57, 0x37, 0xbe, 0xf1, 0x3f, + 0x5f, 0xdd, 0xf8, 0xc6, 0x17, 0x6f, 0x55, 0x2a, 0x37, 0x3b, 0xfb, 0xc5, 0xa2, 0xe4, 0x82, 0x3f, + 0xfd, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x61, 0x62, 0xf5, 0xb2, 0x0b, 0x82, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -412,6 +415,9 @@ type ClientCommandsClient interface { WalletConvert(ctx context.Context, in *pb.RpcWalletConvertRequest, opts ...grpc.CallOption) (*pb.RpcWalletConvertResponse, error) AccountLocalLinkNewChallenge(ctx context.Context, in *pb.RpcAccountLocalLinkNewChallengeRequest, opts ...grpc.CallOption) (*pb.RpcAccountLocalLinkNewChallengeResponse, error) AccountLocalLinkSolveChallenge(ctx context.Context, in *pb.RpcAccountLocalLinkSolveChallengeRequest, opts ...grpc.CallOption) (*pb.RpcAccountLocalLinkSolveChallengeResponse, error) + AccountLocalLinkCreateApp(ctx context.Context, in *pb.RpcAccountLocalLinkCreateAppRequest, opts ...grpc.CallOption) (*pb.RpcAccountLocalLinkCreateAppResponse, error) + AccountLocalLinkListApps(ctx context.Context, in *pb.RpcAccountLocalLinkListAppsRequest, opts ...grpc.CallOption) (*pb.RpcAccountLocalLinkListAppsResponse, error) + AccountLocalLinkRevokeApp(ctx context.Context, in *pb.RpcAccountLocalLinkRevokeAppRequest, opts ...grpc.CallOption) (*pb.RpcAccountLocalLinkRevokeAppResponse, error) WalletCreateSession(ctx context.Context, in *pb.RpcWalletCreateSessionRequest, opts ...grpc.CallOption) (*pb.RpcWalletCreateSessionResponse, error) WalletCloseSession(ctx context.Context, in *pb.RpcWalletCloseSessionRequest, opts ...grpc.CallOption) (*pb.RpcWalletCloseSessionResponse, error) // Workspace @@ -843,6 +849,33 @@ func (c *clientCommandsClient) AccountLocalLinkSolveChallenge(ctx context.Contex return out, nil } +func (c *clientCommandsClient) AccountLocalLinkCreateApp(ctx context.Context, in *pb.RpcAccountLocalLinkCreateAppRequest, opts ...grpc.CallOption) (*pb.RpcAccountLocalLinkCreateAppResponse, error) { + out := new(pb.RpcAccountLocalLinkCreateAppResponse) + err := c.cc.Invoke(ctx, "/anytype.ClientCommands/AccountLocalLinkCreateApp", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clientCommandsClient) AccountLocalLinkListApps(ctx context.Context, in *pb.RpcAccountLocalLinkListAppsRequest, opts ...grpc.CallOption) (*pb.RpcAccountLocalLinkListAppsResponse, error) { + out := new(pb.RpcAccountLocalLinkListAppsResponse) + err := c.cc.Invoke(ctx, "/anytype.ClientCommands/AccountLocalLinkListApps", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clientCommandsClient) AccountLocalLinkRevokeApp(ctx context.Context, in *pb.RpcAccountLocalLinkRevokeAppRequest, opts ...grpc.CallOption) (*pb.RpcAccountLocalLinkRevokeAppResponse, error) { + out := new(pb.RpcAccountLocalLinkRevokeAppResponse) + err := c.cc.Invoke(ctx, "/anytype.ClientCommands/AccountLocalLinkRevokeApp", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *clientCommandsClient) WalletCreateSession(ctx context.Context, in *pb.RpcWalletCreateSessionRequest, opts ...grpc.CallOption) (*pb.RpcWalletCreateSessionResponse, error) { out := new(pb.RpcWalletCreateSessionResponse) err := c.cc.Invoke(ctx, "/anytype.ClientCommands/WalletCreateSession", in, out, opts...) @@ -3452,6 +3485,9 @@ type ClientCommandsServer interface { WalletConvert(context.Context, *pb.RpcWalletConvertRequest) *pb.RpcWalletConvertResponse AccountLocalLinkNewChallenge(context.Context, *pb.RpcAccountLocalLinkNewChallengeRequest) *pb.RpcAccountLocalLinkNewChallengeResponse AccountLocalLinkSolveChallenge(context.Context, *pb.RpcAccountLocalLinkSolveChallengeRequest) *pb.RpcAccountLocalLinkSolveChallengeResponse + AccountLocalLinkCreateApp(context.Context, *pb.RpcAccountLocalLinkCreateAppRequest) *pb.RpcAccountLocalLinkCreateAppResponse + AccountLocalLinkListApps(context.Context, *pb.RpcAccountLocalLinkListAppsRequest) *pb.RpcAccountLocalLinkListAppsResponse + AccountLocalLinkRevokeApp(context.Context, *pb.RpcAccountLocalLinkRevokeAppRequest) *pb.RpcAccountLocalLinkRevokeAppResponse WalletCreateSession(context.Context, *pb.RpcWalletCreateSessionRequest) *pb.RpcWalletCreateSessionResponse WalletCloseSession(context.Context, *pb.RpcWalletCloseSessionRequest) *pb.RpcWalletCloseSessionResponse // Workspace @@ -3831,6 +3867,15 @@ func (*UnimplementedClientCommandsServer) AccountLocalLinkNewChallenge(ctx conte func (*UnimplementedClientCommandsServer) AccountLocalLinkSolveChallenge(ctx context.Context, req *pb.RpcAccountLocalLinkSolveChallengeRequest) *pb.RpcAccountLocalLinkSolveChallengeResponse { return nil } +func (*UnimplementedClientCommandsServer) AccountLocalLinkCreateApp(ctx context.Context, req *pb.RpcAccountLocalLinkCreateAppRequest) *pb.RpcAccountLocalLinkCreateAppResponse { + return nil +} +func (*UnimplementedClientCommandsServer) AccountLocalLinkListApps(ctx context.Context, req *pb.RpcAccountLocalLinkListAppsRequest) *pb.RpcAccountLocalLinkListAppsResponse { + return nil +} +func (*UnimplementedClientCommandsServer) AccountLocalLinkRevokeApp(ctx context.Context, req *pb.RpcAccountLocalLinkRevokeAppRequest) *pb.RpcAccountLocalLinkRevokeAppResponse { + return nil +} func (*UnimplementedClientCommandsServer) WalletCreateSession(ctx context.Context, req *pb.RpcWalletCreateSessionRequest) *pb.RpcWalletCreateSessionResponse { return nil } @@ -4838,6 +4883,60 @@ func _ClientCommands_AccountLocalLinkSolveChallenge_Handler(srv interface{}, ctx return interceptor(ctx, in, info, handler) } +func _ClientCommands_AccountLocalLinkCreateApp_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(pb.RpcAccountLocalLinkCreateAppRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClientCommandsServer).AccountLocalLinkCreateApp(ctx, in), nil + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/anytype.ClientCommands/AccountLocalLinkCreateApp", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClientCommandsServer).AccountLocalLinkCreateApp(ctx, req.(*pb.RpcAccountLocalLinkCreateAppRequest)), nil + } + return interceptor(ctx, in, info, handler) +} + +func _ClientCommands_AccountLocalLinkListApps_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(pb.RpcAccountLocalLinkListAppsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClientCommandsServer).AccountLocalLinkListApps(ctx, in), nil + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/anytype.ClientCommands/AccountLocalLinkListApps", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClientCommandsServer).AccountLocalLinkListApps(ctx, req.(*pb.RpcAccountLocalLinkListAppsRequest)), nil + } + return interceptor(ctx, in, info, handler) +} + +func _ClientCommands_AccountLocalLinkRevokeApp_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(pb.RpcAccountLocalLinkRevokeAppRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClientCommandsServer).AccountLocalLinkRevokeApp(ctx, in), nil + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/anytype.ClientCommands/AccountLocalLinkRevokeApp", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClientCommandsServer).AccountLocalLinkRevokeApp(ctx, req.(*pb.RpcAccountLocalLinkRevokeAppRequest)), nil + } + return interceptor(ctx, in, info, handler) +} + func _ClientCommands_WalletCreateSession_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(pb.RpcWalletCreateSessionRequest) if err := dec(in); err != nil { @@ -10026,6 +10125,18 @@ var _ClientCommands_serviceDesc = grpc.ServiceDesc{ MethodName: "AccountLocalLinkSolveChallenge", Handler: _ClientCommands_AccountLocalLinkSolveChallenge_Handler, }, + { + MethodName: "AccountLocalLinkCreateApp", + Handler: _ClientCommands_AccountLocalLinkCreateApp_Handler, + }, + { + MethodName: "AccountLocalLinkListApps", + Handler: _ClientCommands_AccountLocalLinkListApps_Handler, + }, + { + MethodName: "AccountLocalLinkRevokeApp", + Handler: _ClientCommands_AccountLocalLinkRevokeApp_Handler, + }, { MethodName: "WalletCreateSession", Handler: _ClientCommands_WalletCreateSession_Handler, diff --git a/pkg/lib/pb/model/models.pb.go b/pkg/lib/pb/model/models.pb.go index 08ae46917..6e3751966 100644 --- a/pkg/lib/pb/model/models.pb.go +++ b/pkg/lib/pb/model/models.pb.go @@ -5773,6 +5773,98 @@ func (m *AccountAuth) XXX_DiscardUnknown() { var xxx_messageInfo_AccountAuth proto.InternalMessageInfo +type AccountAuthAppInfo struct { + AppHash string `protobuf:"bytes,1,opt,name=appHash,proto3" json:"appHash,omitempty"` + AppName string `protobuf:"bytes,2,opt,name=appName,proto3" json:"appName,omitempty"` + AppPath string `protobuf:"bytes,3,opt,name=appPath,proto3" json:"appPath,omitempty"` + CreatedAt int64 `protobuf:"varint,4,opt,name=createdAt,proto3" json:"createdAt,omitempty"` + ExpireAt int64 `protobuf:"varint,5,opt,name=expireAt,proto3" json:"expireAt,omitempty"` + Scope AccountAuthLocalApiScope `protobuf:"varint,6,opt,name=scope,proto3,enum=anytype.model.AccountAuthLocalApiScope" json:"scope,omitempty"` + IsActive bool `protobuf:"varint,7,opt,name=isActive,proto3" json:"isActive,omitempty"` +} + +func (m *AccountAuthAppInfo) Reset() { *m = AccountAuthAppInfo{} } +func (m *AccountAuthAppInfo) String() string { return proto.CompactTextString(m) } +func (*AccountAuthAppInfo) ProtoMessage() {} +func (*AccountAuthAppInfo) Descriptor() ([]byte, []int) { + return fileDescriptor_98a910b73321e591, []int{5, 3, 0} +} +func (m *AccountAuthAppInfo) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AccountAuthAppInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_AccountAuthAppInfo.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *AccountAuthAppInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_AccountAuthAppInfo.Merge(m, src) +} +func (m *AccountAuthAppInfo) XXX_Size() int { + return m.Size() +} +func (m *AccountAuthAppInfo) XXX_DiscardUnknown() { + xxx_messageInfo_AccountAuthAppInfo.DiscardUnknown(m) +} + +var xxx_messageInfo_AccountAuthAppInfo proto.InternalMessageInfo + +func (m *AccountAuthAppInfo) GetAppHash() string { + if m != nil { + return m.AppHash + } + return "" +} + +func (m *AccountAuthAppInfo) GetAppName() string { + if m != nil { + return m.AppName + } + return "" +} + +func (m *AccountAuthAppInfo) GetAppPath() string { + if m != nil { + return m.AppPath + } + return "" +} + +func (m *AccountAuthAppInfo) GetCreatedAt() int64 { + if m != nil { + return m.CreatedAt + } + return 0 +} + +func (m *AccountAuthAppInfo) GetExpireAt() int64 { + if m != nil { + return m.ExpireAt + } + return 0 +} + +func (m *AccountAuthAppInfo) GetScope() AccountAuthLocalApiScope { + if m != nil { + return m.Scope + } + return AccountAuth_Limited +} + +func (m *AccountAuthAppInfo) GetIsActive() bool { + if m != nil { + return m.IsActive + } + return false +} + type LinkPreview struct { Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` @@ -9785,6 +9877,7 @@ func init() { proto.RegisterType((*AccountStatus)(nil), "anytype.model.Account.Status") proto.RegisterType((*AccountInfo)(nil), "anytype.model.Account.Info") proto.RegisterType((*AccountAuth)(nil), "anytype.model.Account.Auth") + proto.RegisterType((*AccountAuthAppInfo)(nil), "anytype.model.Account.Auth.AppInfo") proto.RegisterType((*LinkPreview)(nil), "anytype.model.LinkPreview") proto.RegisterType((*Restrictions)(nil), "anytype.model.Restrictions") proto.RegisterType((*RestrictionsDataviewRestrictions)(nil), "anytype.model.Restrictions.DataviewRestrictions") @@ -9847,586 +9940,591 @@ func init() { } var fileDescriptor_98a910b73321e591 = []byte{ - // 9253 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x7d, 0x5b, 0x8c, 0x23, 0xc9, - 0x91, 0x58, 0xf3, 0x4d, 0x06, 0x9b, 0xdd, 0xd9, 0x39, 0x2f, 0x8a, 0x1a, 0x8d, 0x47, 0xd4, 0x6a, - 0x77, 0x34, 0x5a, 0xf5, 0xec, 0xce, 0xee, 0x6a, 0x57, 0x2b, 0xed, 0x4a, 0xec, 0x6e, 0xf6, 0x34, - 0x77, 0xfa, 0xa5, 0x22, 0x67, 0x46, 0xbb, 0xb8, 0x73, 0xbb, 0x9a, 0x95, 0x4d, 0x96, 0xba, 0x58, - 0x45, 0x55, 0x25, 0x7b, 0xba, 0x05, 0xdb, 0x90, 0x5f, 0x77, 0xbe, 0x3f, 0xd9, 0xf0, 0xf9, 0x7c, - 0x30, 0x8c, 0x93, 0x3e, 0x0c, 0x18, 0xbe, 0x33, 0xfc, 0x75, 0xb0, 0xcf, 0x0f, 0xc0, 0x77, 0x5f, - 0x06, 0xee, 0x47, 0xf6, 0x97, 0x01, 0x1b, 0xb0, 0xa1, 0x05, 0xfc, 0x63, 0xd8, 0x87, 0xf3, 0x97, - 0x60, 0xf8, 0xc3, 0x88, 0xc8, 0xac, 0x17, 0xc9, 0xee, 0xe1, 0xec, 0xdd, 0x19, 0xf7, 0xd5, 0x8c, - 0xa8, 0x88, 0xa8, 0x7c, 0x44, 0x46, 0x46, 0x44, 0x46, 0x56, 0xc3, 0x2b, 0xe3, 0xd3, 0xc1, 0x03, - 0xc7, 0x3e, 0x7e, 0x30, 0x3e, 0x7e, 0x30, 0xf2, 0x2c, 0xe1, 0x3c, 0x18, 0xfb, 0x9e, 0xf4, 0x02, - 0x05, 0x04, 0xeb, 0x04, 0xf1, 0x9a, 0xe9, 0x5e, 0xc8, 0x8b, 0xb1, 0x58, 0x27, 0x6c, 0xe3, 0xf6, - 0xc0, 0xf3, 0x06, 0x8e, 0x50, 0xa4, 0xc7, 0x93, 0x93, 0x07, 0x81, 0xf4, 0x27, 0x7d, 0xa9, 0x88, - 0x9b, 0x3f, 0xcb, 0xc3, 0xcd, 0xee, 0xc8, 0xf4, 0xe5, 0x86, 0xe3, 0xf5, 0x4f, 0xbb, 0xae, 0x39, - 0x0e, 0x86, 0x9e, 0xdc, 0x30, 0x03, 0xc1, 0x5f, 0x87, 0xe2, 0x31, 0x22, 0x83, 0x7a, 0xe6, 0x6e, - 0xee, 0x5e, 0xf5, 0xe1, 0xf5, 0xf5, 0x94, 0xe0, 0x75, 0xe2, 0x30, 0x34, 0x0d, 0x7f, 0x13, 0x4a, - 0x96, 0x90, 0xa6, 0xed, 0x04, 0xf5, 0xec, 0xdd, 0xcc, 0xbd, 0xea, 0xc3, 0x5b, 0xeb, 0xea, 0xc5, - 0xeb, 0xe1, 0x8b, 0xd7, 0xbb, 0xf4, 0x62, 0x23, 0xa4, 0xe3, 0xef, 0x42, 0xf9, 0xc4, 0x76, 0xc4, - 0x63, 0x71, 0x11, 0xd4, 0x73, 0x57, 0xf2, 0x6c, 0x64, 0xeb, 0x19, 0x23, 0x22, 0xe6, 0x9b, 0xb0, - 0x22, 0xce, 0xa5, 0x6f, 0x1a, 0xc2, 0x31, 0xa5, 0xed, 0xb9, 0x41, 0x3d, 0x4f, 0x2d, 0xbc, 0x35, - 0xd5, 0xc2, 0xf0, 0x39, 0xb1, 0x4f, 0xb1, 0xf0, 0xbb, 0x50, 0xf5, 0x8e, 0xbf, 0x2f, 0xfa, 0xb2, - 0x77, 0x31, 0x16, 0x41, 0xbd, 0x70, 0x37, 0x77, 0xaf, 0x62, 0x24, 0x51, 0xfc, 0x1b, 0x50, 0xed, - 0x7b, 0x8e, 0x23, 0xfa, 0xea, 0x1d, 0xc5, 0xab, 0xbb, 0x95, 0xa4, 0xe5, 0x6f, 0xc3, 0x0d, 0x5f, - 0x8c, 0xbc, 0x33, 0x61, 0x6d, 0x46, 0x58, 0xea, 0x67, 0x99, 0x5e, 0x33, 0xff, 0x21, 0x6f, 0x41, - 0xcd, 0xd7, 0xed, 0xdb, 0xb5, 0xdd, 0xd3, 0xa0, 0x5e, 0xa2, 0x6e, 0x7d, 0xfe, 0x92, 0x6e, 0x21, - 0x8d, 0x91, 0xe6, 0xe0, 0x0c, 0x72, 0xa7, 0xe2, 0xa2, 0x5e, 0xb9, 0x9b, 0xb9, 0x57, 0x31, 0xf0, - 0x27, 0x7f, 0x1f, 0xea, 0x9e, 0x6f, 0x0f, 0x6c, 0xd7, 0x74, 0x36, 0x7d, 0x61, 0x4a, 0x61, 0xf5, - 0xec, 0x91, 0x08, 0xa4, 0x39, 0x1a, 0xd7, 0xe1, 0x6e, 0xe6, 0x5e, 0xce, 0xb8, 0xf4, 0x39, 0x7f, - 0x4b, 0xcd, 0x50, 0xc7, 0x3d, 0xf1, 0xea, 0x55, 0xdd, 0xfd, 0x74, 0x5b, 0xb6, 0xf5, 0x63, 0x23, - 0x22, 0x6c, 0xfe, 0x22, 0x0b, 0xc5, 0xae, 0x30, 0xfd, 0xfe, 0xb0, 0xf1, 0xab, 0x19, 0x28, 0x1a, - 0x22, 0x98, 0x38, 0x92, 0x37, 0xa0, 0xac, 0xc6, 0xb6, 0x63, 0xd5, 0x33, 0xd4, 0xba, 0x08, 0xfe, - 0x2c, 0xba, 0xb3, 0x0e, 0xf9, 0x91, 0x90, 0x66, 0x3d, 0x47, 0x23, 0xd4, 0x98, 0x6a, 0x95, 0x7a, - 0xfd, 0xfa, 0x9e, 0x90, 0xa6, 0x41, 0x74, 0x8d, 0x4f, 0x33, 0x90, 0x47, 0x90, 0xdf, 0x86, 0xca, - 0xd0, 0x1e, 0x0c, 0x1d, 0x7b, 0x30, 0x94, 0xba, 0x21, 0x31, 0x82, 0x7f, 0x08, 0xab, 0x11, 0x60, - 0x98, 0xee, 0x40, 0x60, 0x8b, 0xe6, 0x29, 0x3f, 0x3d, 0x34, 0xa6, 0x89, 0x79, 0x1d, 0x4a, 0xb4, - 0x1e, 0x3a, 0x16, 0x69, 0x74, 0xc5, 0x08, 0x41, 0x54, 0xb7, 0x70, 0xa6, 0x1e, 0x8b, 0x8b, 0x7a, - 0x9e, 0x9e, 0x26, 0x51, 0xbc, 0x05, 0xab, 0x21, 0xb8, 0xa5, 0x47, 0xa3, 0x70, 0xf5, 0x68, 0x4c, - 0xd3, 0x37, 0x7f, 0xb4, 0x07, 0x05, 0x5a, 0x96, 0x7c, 0x05, 0xb2, 0x76, 0x38, 0xd0, 0x59, 0xdb, - 0xe2, 0x0f, 0xa0, 0x78, 0x62, 0x0b, 0xc7, 0x7a, 0xe1, 0x08, 0x6b, 0x32, 0xde, 0x86, 0x65, 0x5f, - 0x04, 0xd2, 0xb7, 0xb5, 0xf6, 0xab, 0x05, 0xfa, 0xc5, 0x79, 0x36, 0x60, 0xdd, 0x48, 0x10, 0x1a, - 0x29, 0x36, 0xec, 0x76, 0x7f, 0x68, 0x3b, 0x96, 0x2f, 0xdc, 0x8e, 0xa5, 0xd6, 0x69, 0xc5, 0x48, - 0xa2, 0xf8, 0x3d, 0x58, 0x3d, 0x36, 0xfb, 0xa7, 0x03, 0xdf, 0x9b, 0xb8, 0xb8, 0x20, 0x3c, 0x9f, - 0xba, 0x5d, 0x31, 0xa6, 0xd1, 0xfc, 0x0d, 0x28, 0x98, 0x8e, 0x3d, 0x70, 0x69, 0x25, 0xae, 0xcc, - 0x4c, 0xba, 0x6a, 0x4b, 0x0b, 0x29, 0x0c, 0x45, 0xc8, 0x77, 0xa0, 0x76, 0x26, 0x7c, 0x69, 0xf7, - 0x4d, 0x87, 0xf0, 0xf5, 0x12, 0x71, 0x36, 0xe7, 0x72, 0x3e, 0x4d, 0x52, 0x1a, 0x69, 0x46, 0xde, - 0x01, 0x08, 0xd0, 0x4c, 0xd2, 0x74, 0xea, 0xb5, 0xf0, 0xda, 0x5c, 0x31, 0x9b, 0x9e, 0x2b, 0x85, - 0x2b, 0xd7, 0xbb, 0x11, 0xf9, 0xce, 0x92, 0x91, 0x60, 0xe6, 0xef, 0x42, 0x5e, 0x8a, 0x73, 0x59, - 0x5f, 0xb9, 0x62, 0x44, 0x43, 0x21, 0x3d, 0x71, 0x2e, 0x77, 0x96, 0x0c, 0x62, 0x40, 0x46, 0x5c, - 0x64, 0xf5, 0xd5, 0x05, 0x18, 0x71, 0x5d, 0x22, 0x23, 0x32, 0xf0, 0x0f, 0xa0, 0xe8, 0x98, 0x17, - 0xde, 0x44, 0xd6, 0x19, 0xb1, 0x7e, 0xe9, 0x4a, 0xd6, 0x5d, 0x22, 0xdd, 0x59, 0x32, 0x34, 0x13, - 0x7f, 0x1b, 0x72, 0x96, 0x7d, 0x56, 0x5f, 0x23, 0xde, 0xbb, 0x57, 0xf2, 0x6e, 0xd9, 0x67, 0x3b, - 0x4b, 0x06, 0x92, 0xf3, 0x4d, 0x28, 0x1f, 0x7b, 0xde, 0xe9, 0xc8, 0xf4, 0x4f, 0xeb, 0x9c, 0x58, - 0xbf, 0x7c, 0x25, 0xeb, 0x86, 0x26, 0xde, 0x59, 0x32, 0x22, 0x46, 0xec, 0xb2, 0xdd, 0xf7, 0xdc, - 0xfa, 0xb5, 0x05, 0xba, 0xdc, 0xe9, 0x7b, 0x2e, 0x76, 0x19, 0x19, 0x90, 0xd1, 0xb1, 0xdd, 0xd3, - 0xfa, 0xf5, 0x05, 0x18, 0xd1, 0x72, 0x22, 0x23, 0x32, 0x60, 0xb3, 0x2d, 0x53, 0x9a, 0x67, 0xb6, - 0x78, 0x5e, 0xbf, 0xb1, 0x40, 0xb3, 0xb7, 0x34, 0x31, 0x36, 0x3b, 0x64, 0x44, 0x21, 0xe1, 0xd2, - 0xac, 0xdf, 0x5c, 0x40, 0x48, 0x68, 0xd1, 0x51, 0x48, 0xc8, 0xc8, 0xff, 0x22, 0xac, 0x9d, 0x08, - 0x53, 0x4e, 0x7c, 0x61, 0xc5, 0x1b, 0xdd, 0x2d, 0x92, 0xb6, 0x7e, 0xf5, 0xdc, 0x4f, 0x73, 0xed, - 0x2c, 0x19, 0xb3, 0xa2, 0xf8, 0xfb, 0x50, 0x70, 0x4c, 0x29, 0xce, 0xeb, 0x75, 0x92, 0xd9, 0x7c, - 0x81, 0x52, 0x48, 0x71, 0xbe, 0xb3, 0x64, 0x28, 0x16, 0xfe, 0x3d, 0x58, 0x95, 0xe6, 0xb1, 0x23, - 0x0e, 0x4e, 0x34, 0x41, 0x50, 0xff, 0x1c, 0x49, 0x79, 0xfd, 0x6a, 0x75, 0x4e, 0xf3, 0xec, 0x2c, - 0x19, 0xd3, 0x62, 0xb0, 0x55, 0x84, 0xaa, 0x37, 0x16, 0x68, 0x15, 0xc9, 0xc3, 0x56, 0x11, 0x0b, - 0xdf, 0x85, 0x2a, 0xfd, 0xd8, 0xf4, 0x9c, 0xc9, 0xc8, 0xad, 0x7f, 0x9e, 0x24, 0xdc, 0x7b, 0xb1, - 0x04, 0x45, 0xbf, 0xb3, 0x64, 0x24, 0xd9, 0x71, 0x12, 0x09, 0x34, 0xbc, 0xe7, 0xf5, 0xdb, 0x0b, - 0x4c, 0x62, 0x4f, 0x13, 0xe3, 0x24, 0x86, 0x8c, 0xb8, 0xf4, 0x9e, 0xdb, 0xd6, 0x40, 0xc8, 0xfa, - 0x17, 0x16, 0x58, 0x7a, 0xcf, 0x88, 0x14, 0x97, 0x9e, 0x62, 0x42, 0x35, 0xee, 0x0f, 0x4d, 0x59, - 0xbf, 0xb3, 0x80, 0x1a, 0x6f, 0x0e, 0x4d, 0xb2, 0x15, 0xc8, 0xd0, 0xf8, 0x21, 0x2c, 0x27, 0xad, - 0x32, 0xe7, 0x90, 0xf7, 0x85, 0xa9, 0x76, 0x84, 0xb2, 0x41, 0xbf, 0x11, 0x27, 0x2c, 0x5b, 0xd2, - 0x8e, 0x50, 0x36, 0xe8, 0x37, 0xbf, 0x09, 0x45, 0xe5, 0x9b, 0x90, 0xc1, 0x2f, 0x1b, 0x1a, 0x42, - 0x5a, 0xcb, 0x37, 0x07, 0xb4, 0x6f, 0x95, 0x0d, 0xfa, 0x8d, 0xb4, 0x96, 0xef, 0x8d, 0x0f, 0x5c, - 0x32, 0xd8, 0x65, 0x43, 0x43, 0x8d, 0x4f, 0x3f, 0x80, 0x92, 0x6e, 0x54, 0xe3, 0x1f, 0x65, 0xa0, - 0xa8, 0x0c, 0x0a, 0xff, 0x36, 0x14, 0x02, 0x79, 0xe1, 0x08, 0x6a, 0xc3, 0xca, 0xc3, 0xaf, 0x2c, - 0x60, 0x84, 0xd6, 0xbb, 0xc8, 0x60, 0x28, 0xbe, 0xa6, 0x01, 0x05, 0x82, 0x79, 0x09, 0x72, 0x86, - 0xf7, 0x9c, 0x2d, 0x71, 0x80, 0xa2, 0x9a, 0x2c, 0x96, 0x41, 0xe4, 0x96, 0x7d, 0xc6, 0xb2, 0x88, - 0xdc, 0x11, 0xa6, 0x25, 0x7c, 0x96, 0xe3, 0x35, 0xa8, 0x84, 0xd3, 0x12, 0xb0, 0x3c, 0x67, 0xb0, - 0x9c, 0x98, 0xf0, 0x80, 0x15, 0x1a, 0xff, 0x3b, 0x0f, 0x79, 0x5c, 0xff, 0xfc, 0x15, 0xa8, 0x49, - 0xd3, 0x1f, 0x08, 0xe5, 0x08, 0x47, 0x4e, 0x4a, 0x1a, 0xc9, 0x3f, 0x08, 0xfb, 0x90, 0xa5, 0x3e, - 0xbc, 0xf6, 0x42, 0xbb, 0x92, 0xea, 0x41, 0x62, 0x17, 0xce, 0x2d, 0xb6, 0x0b, 0x6f, 0x43, 0x19, - 0xcd, 0x59, 0xd7, 0xfe, 0xa1, 0xa0, 0xa1, 0x5f, 0x79, 0x78, 0xff, 0xc5, 0xaf, 0xec, 0x68, 0x0e, - 0x23, 0xe2, 0xe5, 0x1d, 0xa8, 0xf4, 0x4d, 0xdf, 0xa2, 0xc6, 0xd0, 0x6c, 0xad, 0x3c, 0xfc, 0xea, - 0x8b, 0x05, 0x6d, 0x86, 0x2c, 0x46, 0xcc, 0xcd, 0x0f, 0xa0, 0x6a, 0x89, 0xa0, 0xef, 0xdb, 0x63, - 0x32, 0x6f, 0x6a, 0x2f, 0xfe, 0xda, 0x8b, 0x85, 0x6d, 0xc5, 0x4c, 0x46, 0x52, 0x02, 0x7a, 0x64, - 0x7e, 0x64, 0xdf, 0x4a, 0xe4, 0x20, 0xc4, 0x88, 0xe6, 0xbb, 0x50, 0x0e, 0xfb, 0xc3, 0x97, 0xa1, - 0x8c, 0x7f, 0xf7, 0x3d, 0x57, 0xb0, 0x25, 0x9c, 0x5b, 0x84, 0xba, 0x23, 0xd3, 0x71, 0x58, 0x86, - 0xaf, 0x00, 0x20, 0xb8, 0x27, 0x2c, 0x7b, 0x32, 0x62, 0xd9, 0xe6, 0x37, 0x43, 0x6d, 0x29, 0x43, - 0xfe, 0xd0, 0x1c, 0x20, 0xc7, 0x32, 0x94, 0x43, 0x73, 0xcd, 0x32, 0xc8, 0xbf, 0x65, 0x06, 0xc3, - 0x63, 0xcf, 0xf4, 0x2d, 0x96, 0xe5, 0x55, 0x28, 0xb5, 0xfc, 0xfe, 0xd0, 0x3e, 0x13, 0x2c, 0xd7, - 0x7c, 0x00, 0xd5, 0x44, 0x7b, 0x51, 0x84, 0x7e, 0x69, 0x05, 0x0a, 0x2d, 0xcb, 0x12, 0x16, 0xcb, - 0x20, 0x83, 0xee, 0x20, 0xcb, 0x36, 0xbf, 0x0a, 0x95, 0x68, 0xb4, 0x90, 0x1c, 0x37, 0x6e, 0xb6, - 0x84, 0xbf, 0x10, 0xcd, 0x32, 0xa8, 0x95, 0x1d, 0xd7, 0xb1, 0x5d, 0xc1, 0xb2, 0x8d, 0xbf, 0x44, - 0xaa, 0xca, 0xbf, 0x95, 0x5e, 0x10, 0xaf, 0xbe, 0x68, 0x67, 0x4d, 0xaf, 0x86, 0xcf, 0x27, 0xfa, - 0xb7, 0x6b, 0x53, 0xe3, 0xca, 0x90, 0xdf, 0xf2, 0x64, 0xc0, 0x32, 0x8d, 0xff, 0x91, 0x85, 0x72, - 0xb8, 0xa1, 0x62, 0x4c, 0x30, 0xf1, 0x1d, 0xad, 0xd0, 0xf8, 0x93, 0x5f, 0x87, 0x82, 0xb4, 0xa5, - 0x56, 0xe3, 0x8a, 0xa1, 0x00, 0xf4, 0xd5, 0x92, 0x33, 0xab, 0x1c, 0xd8, 0xe9, 0xa9, 0xb2, 0x47, - 0xe6, 0x40, 0xec, 0x98, 0xc1, 0x50, 0xbb, 0xb0, 0x31, 0x02, 0xf9, 0x4f, 0xcc, 0x33, 0xd4, 0x39, - 0x7a, 0xae, 0xbc, 0xb8, 0x24, 0x8a, 0xbf, 0x05, 0x79, 0xec, 0xa0, 0x56, 0x9a, 0xbf, 0x30, 0xd5, - 0x61, 0x54, 0x93, 0x43, 0x5f, 0xe0, 0xf4, 0xac, 0x63, 0x04, 0x66, 0x10, 0x31, 0x7f, 0x15, 0x56, - 0xd4, 0x22, 0x3c, 0x08, 0xe3, 0x87, 0x12, 0x49, 0x9e, 0xc2, 0xf2, 0x16, 0x0e, 0xa7, 0x29, 0x45, - 0xbd, 0xbc, 0x80, 0x7e, 0x87, 0x83, 0xb3, 0xde, 0x45, 0x16, 0x43, 0x71, 0x36, 0xdf, 0xc1, 0x31, - 0x35, 0xa5, 0xc0, 0x69, 0x6e, 0x8f, 0xc6, 0xf2, 0x42, 0x29, 0xcd, 0xb6, 0x90, 0xfd, 0xa1, 0xed, - 0x0e, 0x58, 0x46, 0x0d, 0x31, 0x4e, 0x22, 0x91, 0xf8, 0xbe, 0xe7, 0xb3, 0x5c, 0xa3, 0x01, 0x79, - 0xd4, 0x51, 0x34, 0x92, 0xae, 0x39, 0x12, 0x7a, 0xa4, 0xe9, 0x77, 0xe3, 0x1a, 0xac, 0xcd, 0xec, - 0xc7, 0x8d, 0xdf, 0x2b, 0x2a, 0x0d, 0x41, 0x0e, 0xf2, 0x05, 0x35, 0x07, 0xb9, 0x79, 0x2f, 0x65, - 0x63, 0x50, 0x4a, 0xda, 0xc6, 0x7c, 0x00, 0x05, 0xec, 0x58, 0x68, 0x62, 0x16, 0x60, 0xdf, 0x43, - 0x72, 0x43, 0x71, 0x61, 0x04, 0xd3, 0x1f, 0x8a, 0xfe, 0xa9, 0xb0, 0xb4, 0xad, 0x0f, 0x41, 0x54, - 0x9a, 0x7e, 0xc2, 0x3d, 0x57, 0x00, 0xa9, 0x44, 0xdf, 0x73, 0xdb, 0x23, 0xef, 0xfb, 0x36, 0xcd, - 0x2b, 0xaa, 0x44, 0x88, 0x08, 0x9f, 0x76, 0x50, 0x47, 0xf4, 0xb4, 0xc5, 0x88, 0x46, 0x1b, 0x0a, - 0xf4, 0x6e, 0x5c, 0x09, 0xaa, 0xcd, 0x2a, 0xd3, 0xf0, 0xea, 0x62, 0x6d, 0xd6, 0x4d, 0x6e, 0xfc, - 0x4e, 0x16, 0xf2, 0x08, 0xf3, 0xfb, 0x50, 0xf0, 0x31, 0x0e, 0xa3, 0xe1, 0xbc, 0x2c, 0x66, 0x53, - 0x24, 0xfc, 0xdb, 0x5a, 0x15, 0xb3, 0x0b, 0x28, 0x4b, 0xf4, 0xc6, 0xa4, 0x5a, 0x5e, 0x87, 0xc2, - 0xd8, 0xf4, 0xcd, 0x91, 0x5e, 0x27, 0x0a, 0x68, 0xfe, 0x24, 0x03, 0x79, 0x24, 0xe2, 0x6b, 0x50, - 0xeb, 0x4a, 0xdf, 0x3e, 0x15, 0x72, 0xe8, 0x7b, 0x93, 0xc1, 0x50, 0x69, 0xd2, 0x63, 0x71, 0xa1, - 0xec, 0x8d, 0x32, 0x08, 0xd2, 0x74, 0xec, 0x3e, 0xcb, 0xa2, 0x56, 0x6d, 0x78, 0x8e, 0xc5, 0x72, - 0x7c, 0x15, 0xaa, 0x4f, 0x5c, 0x4b, 0xf8, 0x41, 0xdf, 0xf3, 0x85, 0xc5, 0xf2, 0x7a, 0x75, 0x9f, - 0xb2, 0x02, 0xed, 0x65, 0xe2, 0x5c, 0x52, 0x2c, 0xc4, 0x8a, 0xfc, 0x1a, 0xac, 0x6e, 0xa4, 0x03, - 0x24, 0x56, 0x42, 0x9b, 0xb4, 0x27, 0x5c, 0x54, 0x32, 0x56, 0x56, 0x4a, 0xec, 0x7d, 0xdf, 0x66, - 0x15, 0x7c, 0x99, 0x5a, 0x27, 0x0c, 0x9a, 0xff, 0x26, 0x13, 0x5a, 0x8e, 0x1a, 0x54, 0x0e, 0x4d, - 0xdf, 0x1c, 0xf8, 0xe6, 0x18, 0xdb, 0x57, 0x85, 0x92, 0xda, 0x38, 0xdf, 0x54, 0xd6, 0x4d, 0x01, - 0x0f, 0x95, 0x6d, 0x54, 0xc0, 0x5b, 0x2c, 0x17, 0x03, 0x6f, 0xb3, 0x3c, 0xbe, 0xe3, 0xbb, 0x13, - 0x4f, 0x0a, 0x56, 0x20, 0x5b, 0xe7, 0x59, 0x82, 0x15, 0x11, 0xd9, 0x43, 0x8b, 0xc2, 0x4a, 0xd8, - 0xe7, 0x4d, 0xd4, 0x9f, 0x63, 0xef, 0x9c, 0x95, 0xb1, 0x19, 0x38, 0x8c, 0xc2, 0x62, 0x15, 0x7c, - 0xb2, 0x3f, 0x19, 0x1d, 0x0b, 0xec, 0x26, 0xe0, 0x93, 0x9e, 0x37, 0x18, 0x38, 0x82, 0x55, 0x71, - 0x0c, 0x12, 0xc6, 0x97, 0x2d, 0x93, 0xa5, 0x35, 0x1d, 0xc7, 0x9b, 0x48, 0x56, 0x6b, 0xfc, 0x22, - 0x07, 0x79, 0x8c, 0x6e, 0x70, 0xed, 0x0c, 0xd1, 0xce, 0xe8, 0xb5, 0x83, 0xbf, 0xa3, 0x15, 0x98, - 0x8d, 0x57, 0x20, 0x7f, 0x5f, 0xcf, 0x74, 0x6e, 0x01, 0x2b, 0x8b, 0x82, 0x93, 0x93, 0xcc, 0x21, - 0x3f, 0xb2, 0x47, 0x42, 0xdb, 0x3a, 0xfa, 0x8d, 0xb8, 0x00, 0xf7, 0xe3, 0x02, 0x25, 0x4f, 0xe8, - 0x37, 0xae, 0x1a, 0x13, 0xb7, 0x85, 0x96, 0xa4, 0x35, 0x90, 0x33, 0x42, 0x70, 0x8e, 0xf5, 0xaa, - 0xcc, 0xb5, 0x5e, 0x1f, 0x84, 0xd6, 0xab, 0xb4, 0xc0, 0xaa, 0xa7, 0x66, 0x26, 0x2d, 0x57, 0x6c, - 0x34, 0xca, 0x8b, 0xb3, 0x27, 0x36, 0x93, 0x2d, 0xad, 0xb5, 0xf1, 0x46, 0x57, 0x56, 0xa3, 0xcc, - 0x32, 0x38, 0x9b, 0xb4, 0x5c, 0x95, 0xcd, 0x7b, 0x6a, 0x5b, 0xc2, 0x63, 0x39, 0xda, 0x08, 0x27, - 0x96, 0xed, 0xb1, 0x3c, 0x7a, 0x5e, 0x87, 0x5b, 0xdb, 0xac, 0xd0, 0x7c, 0x35, 0xb1, 0x25, 0xb5, - 0x26, 0xd2, 0x53, 0x62, 0x48, 0x7d, 0x33, 0x4a, 0x1b, 0x8f, 0x85, 0xc5, 0xb2, 0xcd, 0xaf, 0xcf, - 0x31, 0xb3, 0x35, 0xa8, 0x3c, 0x19, 0x3b, 0x9e, 0x69, 0x5d, 0x61, 0x67, 0x97, 0x01, 0xe2, 0xa8, - 0xba, 0xf1, 0x8b, 0x66, 0xbc, 0x9d, 0xa3, 0x2f, 0x1a, 0x78, 0x13, 0xbf, 0x2f, 0xc8, 0x84, 0x54, - 0x0c, 0x0d, 0xf1, 0xef, 0x40, 0x01, 0x9f, 0x87, 0x69, 0x9c, 0xfb, 0x0b, 0xc5, 0x72, 0xeb, 0x4f, - 0x6d, 0xf1, 0xdc, 0x50, 0x8c, 0xfc, 0x0e, 0x80, 0xd9, 0x97, 0xf6, 0x99, 0x40, 0xa4, 0x5e, 0xec, - 0x09, 0x0c, 0x7f, 0x27, 0xe9, 0xbe, 0x5c, 0x9d, 0x87, 0x4c, 0xf8, 0x35, 0xdc, 0x80, 0x2a, 0x2e, - 0xdd, 0xf1, 0x81, 0x8f, 0xab, 0xbd, 0xbe, 0x4c, 0x8c, 0x6f, 0x2c, 0xd6, 0xbc, 0x47, 0x11, 0xa3, - 0x91, 0x14, 0xc2, 0x9f, 0xc0, 0xb2, 0xca, 0xa9, 0x69, 0xa1, 0x35, 0x12, 0xfa, 0xe6, 0x62, 0x42, - 0x0f, 0x62, 0x4e, 0x23, 0x25, 0x66, 0x36, 0x2d, 0x59, 0x78, 0xe9, 0xb4, 0xe4, 0xab, 0xb0, 0xd2, - 0x4b, 0xaf, 0x02, 0xb5, 0x55, 0x4c, 0x61, 0x79, 0x13, 0x96, 0xed, 0x20, 0xce, 0x8a, 0x52, 0x8e, - 0xa4, 0x6c, 0xa4, 0x70, 0x8d, 0xff, 0x50, 0x84, 0x3c, 0x8d, 0xfc, 0x74, 0x8e, 0x6b, 0x33, 0x65, - 0xd2, 0x1f, 0x2c, 0x3e, 0xd5, 0x53, 0x2b, 0x9e, 0x2c, 0x48, 0x2e, 0x61, 0x41, 0xbe, 0x03, 0x85, - 0xc0, 0xf3, 0x65, 0x38, 0xbd, 0x0b, 0x2a, 0x51, 0xd7, 0xf3, 0xa5, 0xa1, 0x18, 0xf9, 0x36, 0x94, - 0x4e, 0x6c, 0x47, 0xe2, 0xa4, 0xa8, 0xc1, 0x7b, 0x7d, 0x31, 0x19, 0xdb, 0xc4, 0x64, 0x84, 0xcc, - 0x7c, 0x37, 0xa9, 0x6c, 0x45, 0x92, 0xb4, 0xbe, 0x98, 0xa4, 0x79, 0x3a, 0x78, 0x1f, 0x58, 0xdf, - 0x3b, 0x13, 0xbe, 0x91, 0x48, 0x4c, 0xaa, 0x4d, 0x7a, 0x06, 0xcf, 0x1b, 0x50, 0x1e, 0xda, 0x96, - 0x40, 0x3f, 0x87, 0x6c, 0x4c, 0xd9, 0x88, 0x60, 0xfe, 0x18, 0xca, 0x14, 0x1f, 0xa0, 0x55, 0xac, - 0xbc, 0xf4, 0xe0, 0xab, 0x50, 0x25, 0x14, 0x80, 0x2f, 0xa2, 0x97, 0x6f, 0xdb, 0x92, 0xf2, 0xd3, - 0x65, 0x23, 0x82, 0xb1, 0xc1, 0xa4, 0xef, 0xc9, 0x06, 0x57, 0x55, 0x83, 0xa7, 0xf1, 0xfc, 0x6d, - 0xb8, 0x41, 0xb8, 0xa9, 0x4d, 0x12, 0x97, 0x1a, 0x0a, 0x9d, 0xff, 0x10, 0x1d, 0x96, 0xb1, 0x39, - 0x10, 0xbb, 0xf6, 0xc8, 0x96, 0xf5, 0xda, 0xdd, 0xcc, 0xbd, 0x82, 0x11, 0x23, 0xf8, 0xeb, 0xb0, - 0x66, 0x89, 0x13, 0x73, 0xe2, 0xc8, 0x9e, 0x18, 0x8d, 0x1d, 0x53, 0x8a, 0x8e, 0x45, 0x3a, 0x5a, - 0x31, 0x66, 0x1f, 0xf0, 0x37, 0xe0, 0x9a, 0x46, 0x1e, 0x44, 0xa7, 0x0a, 0x1d, 0x8b, 0xd2, 0x77, - 0x15, 0x63, 0xde, 0xa3, 0xe6, 0x9e, 0x36, 0xc3, 0xb8, 0x81, 0x62, 0x9c, 0x1a, 0x1a, 0xd0, 0x40, - 0xaa, 0x1d, 0xf9, 0x91, 0xe9, 0x38, 0xc2, 0xbf, 0x50, 0x41, 0xee, 0x63, 0xd3, 0x3d, 0x36, 0x5d, - 0x96, 0xa3, 0x3d, 0xd6, 0x74, 0x84, 0x6b, 0x99, 0xbe, 0xda, 0x91, 0x1f, 0xd1, 0x86, 0x5e, 0x68, - 0xde, 0x83, 0x3c, 0x0d, 0x69, 0x05, 0x0a, 0x2a, 0x4a, 0xa2, 0x88, 0x59, 0x47, 0x48, 0x64, 0x91, - 0x77, 0x71, 0xf9, 0xb1, 0x6c, 0xe3, 0x1f, 0x17, 0xa1, 0x1c, 0x0e, 0x5e, 0x78, 0x86, 0x90, 0x89, - 0xcf, 0x10, 0xd0, 0x8d, 0x0b, 0x9e, 0xda, 0x81, 0x7d, 0xac, 0xdd, 0xd2, 0xb2, 0x11, 0x23, 0xd0, - 0x13, 0x7a, 0x6e, 0x5b, 0x72, 0x48, 0x6b, 0xa6, 0x60, 0x28, 0x80, 0xdf, 0x83, 0x55, 0x0b, 0xc7, - 0xc1, 0xed, 0x3b, 0x13, 0x4b, 0xf4, 0x70, 0x17, 0x55, 0x69, 0x82, 0x69, 0x34, 0xff, 0x18, 0x40, - 0xda, 0x23, 0xb1, 0xed, 0xf9, 0x23, 0x53, 0xea, 0xd8, 0xe0, 0x1b, 0x2f, 0xa7, 0xd5, 0xeb, 0xbd, - 0x48, 0x80, 0x91, 0x10, 0x86, 0xa2, 0xf1, 0x6d, 0x5a, 0x74, 0xe9, 0x33, 0x89, 0xde, 0x8a, 0x04, - 0x18, 0x09, 0x61, 0xbc, 0x07, 0xa5, 0x13, 0xcf, 0x1f, 0x4d, 0x1c, 0x53, 0xef, 0xb9, 0xef, 0xbf, - 0xa4, 0xdc, 0x6d, 0xc5, 0x4d, 0xb6, 0x27, 0x14, 0x15, 0xe7, 0xb8, 0x2b, 0x0b, 0xe6, 0xb8, 0x9b, - 0xbf, 0x04, 0x10, 0xb7, 0x90, 0xdf, 0x04, 0xbe, 0xe7, 0xb9, 0x72, 0xd8, 0x3a, 0x3e, 0xf6, 0x37, - 0xc4, 0x89, 0xe7, 0x8b, 0x2d, 0x13, 0xb7, 0xd7, 0x1b, 0xb0, 0x16, 0xe1, 0x5b, 0x27, 0x52, 0xf8, - 0x88, 0x26, 0x15, 0xe8, 0x0e, 0x3d, 0x5f, 0x2a, 0x1f, 0x8f, 0x7e, 0x3e, 0xe9, 0xb2, 0x1c, 0x6e, - 0xe9, 0x9d, 0xee, 0x01, 0xcb, 0x37, 0xef, 0x01, 0xc4, 0x43, 0x4b, 0xb1, 0x10, 0xfd, 0x7a, 0xf3, - 0xa1, 0x8e, 0x8c, 0x08, 0x7a, 0xf8, 0x36, 0xcb, 0x34, 0x7f, 0x9e, 0x81, 0x6a, 0xa2, 0x4b, 0xe9, - 0x98, 0x79, 0xd3, 0x9b, 0xb8, 0x52, 0x05, 0xe9, 0xf4, 0xf3, 0xa9, 0xe9, 0x4c, 0x70, 0x73, 0x5f, - 0x83, 0x1a, 0xc1, 0x5b, 0x76, 0x20, 0x6d, 0xb7, 0x2f, 0x59, 0x2e, 0x22, 0x51, 0x8e, 0x41, 0x3e, - 0x22, 0xd9, 0xf7, 0x34, 0xaa, 0xc0, 0x19, 0x2c, 0x1f, 0x0a, 0xbf, 0x2f, 0x42, 0x22, 0x72, 0x86, - 0x35, 0x26, 0x22, 0x53, 0xce, 0xb0, 0x29, 0x87, 0xdd, 0xc9, 0x88, 0x95, 0xd1, 0xa9, 0x44, 0xa0, - 0x75, 0x26, 0x7c, 0xf4, 0x65, 0x2a, 0xf8, 0x1e, 0x44, 0xe0, 0x6a, 0x30, 0x5d, 0x06, 0x21, 0xf5, - 0x9e, 0xed, 0xb2, 0x6a, 0x04, 0x98, 0xe7, 0x6c, 0x19, 0xdb, 0x4f, 0xa1, 0x03, 0xab, 0x35, 0xfe, - 0x7b, 0x0e, 0xf2, 0x68, 0xd7, 0x31, 0xd6, 0x4d, 0x1a, 0x21, 0xb5, 0x56, 0x92, 0xa8, 0xcf, 0xb6, - 0x1b, 0xa1, 0xec, 0xe4, 0x6e, 0xf4, 0x1e, 0x54, 0xfb, 0x93, 0x40, 0x7a, 0x23, 0xda, 0x8a, 0xf5, - 0x69, 0xd7, 0xcd, 0x99, 0xac, 0x11, 0x0d, 0xa7, 0x91, 0x24, 0xe5, 0xef, 0x40, 0xf1, 0x44, 0x69, - 0xbd, 0xca, 0x1b, 0x7d, 0xe1, 0x92, 0xdd, 0x5a, 0x6b, 0xb6, 0x26, 0xc6, 0x7e, 0xd9, 0x33, 0x2b, - 0x36, 0x89, 0xd2, 0xbb, 0x6e, 0x31, 0xda, 0x75, 0x7f, 0x09, 0x56, 0x04, 0x0e, 0xf8, 0xa1, 0x63, - 0xf6, 0xc5, 0x48, 0xb8, 0xe1, 0x32, 0x7b, 0xfb, 0x25, 0x7a, 0x4c, 0x33, 0x46, 0xdd, 0x9e, 0x92, - 0x85, 0x96, 0xc7, 0xf5, 0x70, 0xf3, 0x0f, 0x03, 0xfb, 0xb2, 0x11, 0x23, 0x9a, 0x5f, 0xd6, 0xf6, - 0xb2, 0x04, 0xb9, 0x56, 0xd0, 0xd7, 0x19, 0x10, 0x11, 0xf4, 0x55, 0x78, 0xb5, 0x49, 0xc3, 0xc1, - 0xb2, 0xcd, 0x37, 0xa1, 0x12, 0xbd, 0x01, 0x95, 0x67, 0xdf, 0x93, 0xdd, 0xb1, 0xe8, 0xdb, 0x27, - 0xb6, 0xb0, 0x94, 0x7e, 0x76, 0xa5, 0xe9, 0x4b, 0x95, 0x44, 0x6c, 0xbb, 0x16, 0xcb, 0x36, 0x7e, - 0xbb, 0x0c, 0x45, 0xb5, 0xf9, 0xea, 0x0e, 0x57, 0xa2, 0x0e, 0x7f, 0x17, 0xca, 0xde, 0x58, 0xf8, - 0xa6, 0xf4, 0x7c, 0x9d, 0xb9, 0x79, 0xe7, 0x65, 0x36, 0xf3, 0xf5, 0x03, 0xcd, 0x6c, 0x44, 0x62, - 0xa6, 0xb5, 0x29, 0x3b, 0xab, 0x4d, 0xf7, 0x81, 0x85, 0xfb, 0xf6, 0xa1, 0x8f, 0x7c, 0xf2, 0x42, - 0xc7, 0xe1, 0x33, 0x78, 0xde, 0x83, 0x4a, 0xdf, 0x73, 0x2d, 0x3b, 0xca, 0xe2, 0xac, 0x3c, 0xfc, - 0xfa, 0x4b, 0xb5, 0x70, 0x33, 0xe4, 0x36, 0x62, 0x41, 0xfc, 0x75, 0x28, 0x9c, 0xa1, 0x9a, 0x91, - 0x3e, 0x5d, 0xae, 0x84, 0x8a, 0x88, 0x7f, 0x02, 0xd5, 0x1f, 0x4c, 0xec, 0xfe, 0xe9, 0x41, 0x32, - 0x4b, 0xf8, 0xde, 0x4b, 0xb5, 0xe2, 0xbb, 0x31, 0xbf, 0x91, 0x14, 0x96, 0x50, 0xed, 0xd2, 0x9f, - 0x40, 0xb5, 0xcb, 0xb3, 0xaa, 0x6d, 0x40, 0xcd, 0x15, 0x81, 0x14, 0xd6, 0xb6, 0xf6, 0xd5, 0xe0, - 0x33, 0xf8, 0x6a, 0x69, 0x11, 0xcd, 0x2f, 0x41, 0x39, 0x9c, 0x70, 0x5e, 0x84, 0xec, 0x3e, 0x06, - 0x45, 0x45, 0xc8, 0x1e, 0xf8, 0x4a, 0xdb, 0x5a, 0xa8, 0x6d, 0xcd, 0x3f, 0xca, 0x40, 0x25, 0x1a, - 0xf4, 0xb4, 0xe5, 0x6c, 0xff, 0x60, 0x62, 0x3a, 0x2c, 0x43, 0xe1, 0xb2, 0x27, 0x15, 0x44, 0xc6, - 0xfa, 0x11, 0x1d, 0xd6, 0xfb, 0x2c, 0x47, 0x2e, 0x82, 0x08, 0x02, 0x96, 0xe7, 0x1c, 0x56, 0x34, - 0xfa, 0xc0, 0x57, 0xa4, 0x05, 0x34, 0x7c, 0xf8, 0x34, 0x44, 0x14, 0x95, 0x47, 0x71, 0x2a, 0x94, - 0x81, 0xdc, 0xf7, 0x24, 0x01, 0x65, 0x6c, 0x54, 0xc7, 0x65, 0x15, 0x7c, 0xe7, 0xbe, 0x27, 0x3b, - 0x68, 0x12, 0xa3, 0xf0, 0xac, 0x1a, 0xbe, 0x9e, 0x20, 0xb2, 0x88, 0x2d, 0xc7, 0xe9, 0xb8, 0xac, - 0xa6, 0x1f, 0x28, 0x68, 0x05, 0x25, 0xb6, 0xcf, 0xcd, 0x3e, 0xb2, 0xaf, 0xa2, 0x85, 0x45, 0x1e, - 0x0d, 0x33, 0x5c, 0x92, 0xed, 0x73, 0x3b, 0x90, 0x01, 0x5b, 0x6b, 0xfe, 0x61, 0x06, 0xaa, 0x89, - 0x09, 0xc6, 0xf0, 0x8f, 0x08, 0x71, 0x2b, 0x53, 0xd1, 0xe0, 0xc7, 0x38, 0x8c, 0xbe, 0x15, 0x6e, - 0x53, 0x3d, 0x0f, 0x7f, 0x66, 0xf1, 0x7d, 0x3d, 0x6f, 0xe4, 0xf9, 0xbe, 0xf7, 0x5c, 0xb9, 0x3e, - 0xbb, 0x66, 0x20, 0x9f, 0x09, 0x71, 0xca, 0xf2, 0xd8, 0xd5, 0xcd, 0x89, 0xef, 0x0b, 0x57, 0x21, - 0x0a, 0xd4, 0x38, 0x71, 0xae, 0xa0, 0x22, 0x0a, 0x45, 0x62, 0xda, 0x07, 0x59, 0x09, 0x0d, 0x81, - 0xa6, 0x56, 0x98, 0x32, 0x12, 0x20, 0xb9, 0x02, 0x2b, 0xb8, 0xa9, 0xa8, 0x0c, 0xc5, 0xc1, 0xc9, - 0x96, 0x79, 0x11, 0xb4, 0x06, 0x1e, 0x83, 0x69, 0xe4, 0xbe, 0xf7, 0x9c, 0x55, 0x1b, 0x13, 0x80, - 0x38, 0x26, 0xc3, 0x58, 0x14, 0x15, 0x22, 0x3a, 0x43, 0xd0, 0x10, 0x3f, 0x00, 0xc0, 0x5f, 0x44, - 0x19, 0x06, 0xa4, 0x2f, 0xe1, 0x28, 0x13, 0x9f, 0x91, 0x10, 0xd1, 0xf8, 0x2b, 0x50, 0x89, 0x1e, - 0xf0, 0x3a, 0x94, 0xc8, 0xa5, 0x8d, 0x5e, 0x1b, 0x82, 0xe8, 0x9f, 0xd9, 0xae, 0x25, 0xce, 0xc9, - 0xae, 0x14, 0x0c, 0x05, 0x60, 0x2b, 0x87, 0xb6, 0x65, 0x09, 0x37, 0x3c, 0xe9, 0x51, 0xd0, 0xbc, - 0xf3, 0xf8, 0xfc, 0xdc, 0xf3, 0xf8, 0xc6, 0x2f, 0x43, 0x35, 0x11, 0x34, 0x5e, 0xda, 0xed, 0x44, - 0xc3, 0xb2, 0xe9, 0x86, 0xdd, 0x86, 0x4a, 0x58, 0x03, 0x12, 0xd0, 0xde, 0x56, 0x31, 0x62, 0x44, - 0xe3, 0x5f, 0x64, 0xd1, 0x93, 0xc5, 0xae, 0x4d, 0x07, 0x7a, 0xdb, 0x50, 0x0c, 0xa4, 0x29, 0x27, - 0x61, 0x31, 0xc3, 0x82, 0x0b, 0xb4, 0x4b, 0x3c, 0x3b, 0x4b, 0x86, 0xe6, 0xe6, 0x1f, 0x40, 0x4e, - 0x9a, 0x03, 0x9d, 0x28, 0xfd, 0xca, 0x62, 0x42, 0x7a, 0xe6, 0x60, 0x67, 0xc9, 0x40, 0x3e, 0xbe, - 0x0b, 0xe5, 0xbe, 0xce, 0x6d, 0x69, 0xa3, 0xb8, 0x60, 0x2c, 0x16, 0x66, 0xc4, 0x76, 0x96, 0x8c, - 0x48, 0x02, 0xff, 0x0e, 0xe4, 0xd1, 0xbb, 0xd4, 0x35, 0x1f, 0x0b, 0xc6, 0x98, 0xb8, 0x5c, 0x76, - 0x96, 0x0c, 0xe2, 0xdc, 0x28, 0x41, 0x81, 0x6c, 0x70, 0xa3, 0x0e, 0x45, 0xd5, 0xd7, 0xe9, 0x91, - 0x6b, 0xdc, 0x82, 0x5c, 0xcf, 0x1c, 0xa0, 0x87, 0x6f, 0x5b, 0x81, 0x4e, 0x95, 0xe0, 0xcf, 0xc6, - 0x2b, 0x71, 0x9e, 0x2e, 0x99, 0x02, 0xce, 0xa4, 0x52, 0xc0, 0x8d, 0x22, 0xe4, 0xf1, 0x8d, 0x8d, - 0xdb, 0x57, 0x45, 0x0b, 0x8d, 0x7f, 0x9a, 0xc3, 0xc0, 0x42, 0x8a, 0xf3, 0xb9, 0xe9, 0xed, 0x8f, - 0xa0, 0x32, 0xf6, 0xbd, 0xbe, 0x08, 0x02, 0xcf, 0xd7, 0xce, 0xd1, 0xeb, 0x2f, 0x3e, 0x7a, 0x5e, - 0x3f, 0x0c, 0x79, 0x8c, 0x98, 0xbd, 0xf9, 0xef, 0xb2, 0x50, 0x89, 0x1e, 0xa8, 0x78, 0x46, 0x8a, - 0x73, 0x95, 0xca, 0xdc, 0x13, 0xfe, 0xc8, 0xb4, 0x2d, 0x65, 0x3d, 0x36, 0x87, 0x66, 0xe8, 0xe4, - 0x7e, 0xec, 0x4d, 0xe4, 0xe4, 0x58, 0xa8, 0x14, 0xd6, 0x53, 0x7b, 0x24, 0x3c, 0x96, 0xa7, 0xc3, - 0x23, 0x54, 0xec, 0xbe, 0xe3, 0x4d, 0x2c, 0x56, 0x40, 0xf8, 0x11, 0x6d, 0x6f, 0x7b, 0xe6, 0x38, - 0x50, 0x36, 0x73, 0xcf, 0xf6, 0x3d, 0x56, 0x42, 0xa6, 0x6d, 0x7b, 0x30, 0x32, 0x59, 0x19, 0x85, - 0xf5, 0x9e, 0xdb, 0x12, 0x8d, 0x70, 0x05, 0xdd, 0xd4, 0x83, 0xb1, 0x70, 0xbb, 0xd2, 0x17, 0x42, - 0xee, 0x99, 0x63, 0x95, 0xd3, 0x34, 0x84, 0x65, 0xd9, 0x52, 0xd9, 0xcf, 0x6d, 0xb3, 0x2f, 0x8e, - 0x3d, 0xef, 0x94, 0x2d, 0xa3, 0xa1, 0xe9, 0xb8, 0x81, 0x34, 0x07, 0xbe, 0x39, 0x52, 0x36, 0xb4, - 0x27, 0x1c, 0x41, 0xd0, 0x0a, 0xbd, 0xdb, 0x96, 0xc3, 0xc9, 0xf1, 0x23, 0x8c, 0xfb, 0x56, 0xd5, - 0x39, 0x93, 0x25, 0xc6, 0x02, 0x6d, 0xe8, 0x32, 0x94, 0x37, 0x6c, 0xc7, 0x3e, 0xb6, 0x1d, 0x9b, - 0xad, 0x21, 0x69, 0xfb, 0xbc, 0x6f, 0x3a, 0xb6, 0xe5, 0x9b, 0xcf, 0x19, 0xc7, 0xc6, 0x3d, 0xf6, - 0xbd, 0x53, 0x9b, 0x5d, 0x43, 0x42, 0x0a, 0x03, 0xcf, 0xec, 0x1f, 0xb2, 0xeb, 0x74, 0x56, 0x76, - 0x2a, 0x64, 0x7f, 0x78, 0x62, 0x1e, 0xb3, 0x1b, 0x71, 0x4a, 0xef, 0x66, 0x63, 0x0d, 0x56, 0xa7, - 0x4e, 0xe5, 0x1b, 0x25, 0x1d, 0x7d, 0x36, 0x6a, 0x50, 0x4d, 0x1c, 0x97, 0x36, 0x5e, 0x85, 0x72, - 0x78, 0x98, 0x8a, 0x51, 0xba, 0x1d, 0xa8, 0x34, 0xb0, 0x56, 0x92, 0x08, 0x6e, 0xfc, 0xe7, 0x0c, - 0x14, 0xd5, 0x49, 0x36, 0xdf, 0x88, 0x2a, 0x4f, 0x32, 0x0b, 0x9c, 0x5e, 0x2a, 0x26, 0x7d, 0xf6, - 0x1b, 0x95, 0x9f, 0x5c, 0x87, 0x82, 0x43, 0xe1, 0xb8, 0x36, 0x5f, 0x04, 0x24, 0xac, 0x4d, 0x2e, - 0x65, 0x6d, 0x6e, 0x43, 0xc5, 0x9c, 0x48, 0x8f, 0x0e, 0xe9, 0xf4, 0x09, 0x46, 0x8c, 0x68, 0xb6, - 0xa2, 0xd3, 0xe8, 0x30, 0x31, 0x49, 0x3e, 0x63, 0xcf, 0x17, 0x42, 0x25, 0x1d, 0x29, 0xd6, 0xce, - 0xd2, 0x4e, 0xe2, 0x8d, 0xc6, 0x66, 0x5f, 0x12, 0x82, 0xf6, 0x58, 0x34, 0xb5, 0x2c, 0x8f, 0x6b, - 0x60, 0x73, 0x68, 0xca, 0xe6, 0x09, 0x94, 0x0f, 0xbd, 0x60, 0x7a, 0xc7, 0x2e, 0x41, 0xae, 0xe7, - 0x8d, 0x95, 0xff, 0xb9, 0xe1, 0x49, 0xf2, 0x3f, 0xd5, 0x06, 0x7d, 0x22, 0x95, 0xca, 0x19, 0xf6, - 0x60, 0x28, 0x55, 0x9c, 0xde, 0x71, 0x5d, 0xe1, 0xb3, 0x02, 0xce, 0xb0, 0x21, 0xc6, 0xe8, 0xf3, - 0xb2, 0x22, 0xce, 0x29, 0xe1, 0xb7, 0x6d, 0x3f, 0x90, 0xac, 0xd4, 0xec, 0xe0, 0x5e, 0x6b, 0x0f, - 0x68, 0x8b, 0xa4, 0x1f, 0x24, 0x6a, 0x09, 0x9b, 0x48, 0xe0, 0xa6, 0x70, 0x51, 0x03, 0x29, 0xb6, - 0x52, 0x81, 0x21, 0xbd, 0x20, 0x8b, 0xfb, 0x1b, 0xc1, 0x1f, 0x4d, 0x02, 0x69, 0x9f, 0x5c, 0xb0, - 0x5c, 0xf3, 0x19, 0xd4, 0x52, 0x45, 0x4e, 0xfc, 0x3a, 0xb0, 0x14, 0x02, 0x9b, 0xbe, 0xc4, 0x6f, - 0xc1, 0xb5, 0x14, 0x76, 0xcf, 0xb6, 0x2c, 0xca, 0x04, 0x4f, 0x3f, 0x08, 0x3b, 0xb8, 0x51, 0x81, - 0x52, 0x5f, 0xcd, 0x61, 0xf3, 0x10, 0x6a, 0x34, 0xa9, 0x7b, 0x42, 0x9a, 0x07, 0xae, 0x73, 0xf1, - 0x27, 0xae, 0x44, 0x6b, 0x7e, 0x55, 0x87, 0x5f, 0x68, 0x4d, 0x4e, 0x7c, 0x6f, 0x44, 0xb2, 0x0a, - 0x06, 0xfd, 0x46, 0xe9, 0xd2, 0xd3, 0x9a, 0x91, 0x95, 0x5e, 0xf3, 0x17, 0x15, 0x28, 0xb5, 0xfa, - 0x7d, 0x0c, 0x18, 0x67, 0xde, 0xfc, 0x0e, 0x14, 0xfb, 0x9e, 0x7b, 0x62, 0x0f, 0xb4, 0xb5, 0x9e, - 0xf6, 0x1b, 0x35, 0x1f, 0xaa, 0xe3, 0x89, 0x3d, 0x30, 0x34, 0x31, 0xb2, 0xe9, 0xdd, 0xa6, 0x70, - 0x25, 0x9b, 0x32, 0xb9, 0xd1, 0xe6, 0xf2, 0x00, 0xf2, 0xb6, 0x7b, 0xe2, 0xe9, 0xb2, 0xd1, 0xcf, - 0x5f, 0xc2, 0x44, 0xb5, 0x93, 0x44, 0xd8, 0xf8, 0xaf, 0x19, 0x28, 0xaa, 0x57, 0xf3, 0x57, 0x61, - 0x45, 0xb8, 0xb8, 0xd4, 0x42, 0x43, 0xaf, 0xd7, 0xd8, 0x14, 0x16, 0x5d, 0x5a, 0x8d, 0x11, 0xc7, - 0x93, 0x81, 0xce, 0xcc, 0x24, 0x51, 0xfc, 0x3d, 0xb8, 0xa5, 0xc0, 0x43, 0x5f, 0xf8, 0xc2, 0x11, - 0x66, 0x20, 0x36, 0x87, 0xa6, 0xeb, 0x0a, 0x47, 0x6f, 0xfb, 0x97, 0x3d, 0xe6, 0x4d, 0x58, 0x56, - 0x8f, 0xba, 0x63, 0xb3, 0x2f, 0x02, 0xbd, 0x96, 0x52, 0x38, 0xfe, 0x35, 0x28, 0x50, 0x55, 0x6d, - 0xdd, 0xba, 0x7a, 0x2a, 0x15, 0x55, 0xc3, 0x8b, 0xf6, 0xa5, 0x16, 0x80, 0x1a, 0x26, 0x0c, 0xc9, - 0xb4, 0x6d, 0xf8, 0xe2, 0x95, 0xe3, 0x4a, 0xd1, 0x61, 0x82, 0x09, 0xdb, 0x67, 0x09, 0x47, 0x50, - 0xf9, 0x23, 0xee, 0x9b, 0x59, 0x3a, 0x77, 0x49, 0xe1, 0x1a, 0xff, 0x25, 0x0f, 0x79, 0x1c, 0x61, - 0x24, 0x1e, 0x7a, 0x23, 0x11, 0x65, 0x9f, 0x95, 0x23, 0x92, 0xc2, 0xa1, 0xe3, 0x63, 0xaa, 0x02, - 0x80, 0x88, 0x4c, 0x99, 0x96, 0x69, 0x34, 0x52, 0x8e, 0x7d, 0xef, 0xc4, 0x76, 0x62, 0x4a, 0xed, - 0x22, 0x4d, 0xa1, 0xf9, 0xd7, 0xe1, 0xe6, 0xc8, 0xf4, 0x4f, 0x85, 0xa4, 0xd5, 0xfd, 0xcc, 0xf3, - 0x4f, 0x03, 0x1c, 0xb9, 0x8e, 0xa5, 0xd3, 0x96, 0x97, 0x3c, 0xe5, 0xaf, 0xc3, 0xda, 0xf3, 0x10, - 0x8c, 0xde, 0xa1, 0x12, 0x87, 0xb3, 0x0f, 0xd0, 0x18, 0x5b, 0xe2, 0xcc, 0x26, 0xb9, 0x65, 0x55, - 0x5b, 0x1b, 0xc2, 0xa8, 0x4a, 0xa6, 0x1a, 0xc8, 0xae, 0x7e, 0xb3, 0x3e, 0x7f, 0x4a, 0x63, 0xd1, - 0x6e, 0xaa, 0x9a, 0xa3, 0xa0, 0x63, 0x51, 0xde, 0xb5, 0x62, 0xc4, 0x08, 0x54, 0x34, 0x7a, 0xe5, - 0x53, 0x65, 0x72, 0x6b, 0x2a, 0x40, 0x4d, 0xa0, 0x90, 0x42, 0x8a, 0xfe, 0x30, 0x7c, 0x89, 0x4a, - 0x8a, 0x26, 0x51, 0xfc, 0x0e, 0xc0, 0xc0, 0x94, 0xe2, 0xb9, 0x79, 0xf1, 0xc4, 0x77, 0xea, 0x42, - 0x1d, 0xa4, 0xc4, 0x18, 0x0c, 0x71, 0x1d, 0xaf, 0x6f, 0x3a, 0x5d, 0xe9, 0xf9, 0xe6, 0x40, 0x1c, - 0x9a, 0x72, 0x58, 0x1f, 0xa8, 0x10, 0x77, 0x1a, 0x8f, 0x3d, 0x96, 0xf6, 0x48, 0x7c, 0xe2, 0xb9, - 0xa2, 0x3e, 0x54, 0x3d, 0x0e, 0x61, 0x6c, 0x89, 0xe9, 0x9a, 0xce, 0x85, 0xb4, 0xfb, 0xd8, 0x17, - 0x5b, 0xb5, 0x24, 0x81, 0xa2, 0xa4, 0x82, 0x90, 0x38, 0x8e, 0x1d, 0xab, 0xfe, 0x7d, 0xd5, 0xd7, - 0x08, 0x81, 0xb3, 0x2b, 0xe4, 0x50, 0xf8, 0x62, 0x32, 0x6a, 0x59, 0x96, 0x2f, 0x82, 0xa0, 0x7e, - 0xaa, 0x66, 0x77, 0x0a, 0xdd, 0xf8, 0x26, 0x1d, 0x73, 0x0d, 0x9b, 0x6f, 0x41, 0x6d, 0x17, 0x5b, - 0xd8, 0x1a, 0xdb, 0xdd, 0xbe, 0x37, 0x16, 0x68, 0xd0, 0x29, 0x61, 0x4c, 0xe9, 0x85, 0x2a, 0x94, - 0x3e, 0x0a, 0x3c, 0xb7, 0x75, 0xd8, 0x51, 0x5b, 0xcc, 0xf6, 0xc4, 0x71, 0x58, 0xb6, 0x79, 0x00, - 0x10, 0x6b, 0x36, 0x6e, 0x17, 0x2d, 0x3a, 0x53, 0x62, 0x4b, 0x2a, 0x99, 0xe5, 0x5a, 0xb6, 0x3b, - 0xd8, 0xd2, 0xca, 0xcc, 0x32, 0x88, 0xa4, 0x24, 0x85, 0xb0, 0x22, 0x24, 0xb9, 0x33, 0x04, 0x09, - 0x8b, 0xe5, 0x9a, 0xff, 0x37, 0x03, 0xd5, 0x44, 0x09, 0xc5, 0x9f, 0x62, 0xd9, 0x07, 0x6e, 0xf6, - 0xe8, 0x2e, 0xe0, 0xbc, 0x29, 0x45, 0x8f, 0x60, 0x9c, 0x55, 0x5d, 0xe1, 0x81, 0x4f, 0x55, 0x4a, - 0x22, 0x81, 0xf9, 0x4c, 0x25, 0x1f, 0xcd, 0x87, 0x3a, 0xaf, 0x53, 0x85, 0xd2, 0x13, 0xf7, 0xd4, - 0xf5, 0x9e, 0xbb, 0x6a, 0x9f, 0xa6, 0x3a, 0x9e, 0xd4, 0x89, 0x64, 0x58, 0x6a, 0x93, 0x6b, 0xfe, - 0xeb, 0xfc, 0x54, 0xc9, 0x5b, 0x1b, 0x8a, 0x2a, 0x98, 0x20, 0x3f, 0x77, 0xb6, 0x46, 0x29, 0x49, - 0xac, 0x4f, 0xbf, 0x12, 0x28, 0x43, 0x33, 0xa3, 0x97, 0x1f, 0x15, 0x84, 0x66, 0xe7, 0x9e, 0xd2, - 0xa5, 0x04, 0x85, 0xb6, 0x39, 0x55, 0x13, 0x1d, 0x49, 0x68, 0xfc, 0xad, 0x0c, 0x5c, 0x9f, 0x47, - 0x92, 0xac, 0x1c, 0xcf, 0xa4, 0x2b, 0xc7, 0xbb, 0x53, 0x95, 0xd8, 0x59, 0xea, 0xcd, 0x83, 0x97, - 0x6c, 0x44, 0xba, 0x2e, 0xbb, 0xf9, 0x7b, 0x19, 0x58, 0x9b, 0xe9, 0x73, 0xc2, 0x8f, 0x01, 0x28, - 0x2a, 0xcd, 0x52, 0x85, 0x52, 0x51, 0xe9, 0x8a, 0x3a, 0x7a, 0xa0, 0x1d, 0x3e, 0x50, 0xb5, 0x00, - 0xba, 0xf6, 0x5c, 0x39, 0xd1, 0x38, 0x6b, 0xb8, 0x81, 0x0c, 0x84, 0x4a, 0xd3, 0x2a, 0x67, 0x4b, - 0x63, 0x8a, 0xca, 0xd1, 0x55, 0xe7, 0x23, 0xac, 0x44, 0x05, 0x58, 0x93, 0xb1, 0x63, 0xf7, 0x11, - 0x2c, 0xf3, 0x06, 0xdc, 0x54, 0x17, 0x10, 0x74, 0x50, 0x79, 0xd2, 0x1b, 0xda, 0xb4, 0x38, 0x58, - 0x05, 0xdf, 0x73, 0x38, 0x39, 0x76, 0xec, 0x60, 0xc8, 0xa0, 0x69, 0xc0, 0xb5, 0x39, 0x1d, 0xa4, - 0x26, 0x3f, 0xd5, 0xcd, 0x5f, 0x01, 0xd8, 0x7a, 0x1a, 0x36, 0x9a, 0x65, 0x38, 0x87, 0x95, 0xad, - 0xa7, 0x49, 0xe9, 0x7a, 0xf1, 0x3c, 0x45, 0xeb, 0x15, 0xb0, 0x5c, 0xf3, 0x57, 0x32, 0x61, 0x85, - 0x44, 0xe3, 0x2f, 0x43, 0x4d, 0x35, 0xf8, 0xd0, 0xbc, 0x70, 0x3c, 0xd3, 0xe2, 0x6d, 0x58, 0x09, - 0xa2, 0x2b, 0x32, 0x89, 0x0d, 0x6b, 0xda, 0x11, 0xe8, 0xa6, 0x88, 0x8c, 0x29, 0xa6, 0x30, 0x50, - 0xca, 0xc6, 0xc7, 0x2a, 0x9c, 0x42, 0x3e, 0x93, 0x96, 0xdc, 0x32, 0x05, 0x71, 0x66, 0xf3, 0x6b, - 0xb0, 0xd6, 0x8d, 0x8d, 0xbb, 0xf2, 0xa8, 0x51, 0x39, 0xd4, 0xce, 0xb0, 0x15, 0x2a, 0x87, 0x06, - 0x9b, 0xff, 0xac, 0x04, 0x10, 0x1f, 0x21, 0xcd, 0x59, 0xf3, 0xf3, 0x2a, 0x22, 0x66, 0x0e, 0x74, - 0x73, 0x2f, 0x7d, 0xa0, 0xfb, 0x5e, 0xe4, 0xd8, 0xab, 0xf4, 0xf2, 0x74, 0x59, 0x78, 0xdc, 0xa6, - 0x69, 0x77, 0x3e, 0x55, 0x30, 0x54, 0x98, 0x2e, 0x18, 0xba, 0x3b, 0x5b, 0x5d, 0x38, 0x65, 0x8c, - 0xe2, 0xbc, 0x45, 0x29, 0x95, 0xb7, 0x68, 0x40, 0xd9, 0x17, 0xa6, 0xe5, 0xb9, 0xce, 0x45, 0x78, - 0x6e, 0x18, 0xc2, 0xfc, 0x2d, 0x28, 0x48, 0xba, 0xe5, 0x53, 0xa6, 0xb5, 0xf3, 0x82, 0x89, 0x53, - 0xb4, 0x68, 0xd9, 0xec, 0x40, 0x97, 0x04, 0xaa, 0x5d, 0xb3, 0x6c, 0x24, 0x30, 0x7c, 0x1d, 0xb8, - 0x8d, 0x41, 0x9c, 0xe3, 0x08, 0x6b, 0xe3, 0x62, 0x4b, 0x1d, 0xe7, 0xd1, 0xbe, 0x5e, 0x36, 0xe6, - 0x3c, 0x09, 0xe7, 0x7f, 0x39, 0x9e, 0x7f, 0x6a, 0xf2, 0x99, 0x1d, 0x60, 0x4f, 0x6b, 0xe4, 0xbe, - 0x44, 0x30, 0x7a, 0x0e, 0xe1, 0x82, 0x55, 0x63, 0x49, 0xda, 0x1b, 0x9f, 0x89, 0x5f, 0xf2, 0x34, - 0x1c, 0x5e, 0x95, 0xb8, 0x59, 0x25, 0xa1, 0x31, 0x82, 0x2c, 0x79, 0xdf, 0x73, 0xf7, 0x51, 0x23, - 0x98, 0xb6, 0xe4, 0x1a, 0xc6, 0xfe, 0x8e, 0x9d, 0x89, 0x6f, 0x3a, 0xf4, 0x74, 0x4d, 0x59, 0xf2, - 0x18, 0xd3, 0xfc, 0x83, 0x6c, 0x14, 0x3c, 0x55, 0xa0, 0x70, 0x6c, 0x06, 0x76, 0x5f, 0xed, 0x6e, - 0xda, 0xe9, 0x51, 0xbb, 0x9b, 0xf4, 0x2c, 0x8f, 0x65, 0x31, 0x0e, 0x0a, 0x84, 0x3e, 0xce, 0x89, - 0xef, 0x54, 0xb1, 0x3c, 0x9a, 0x80, 0x50, 0x93, 0x54, 0xcd, 0x10, 0xb1, 0x52, 0x72, 0xce, 0x8a, - 0xaa, 0x31, 0x29, 0xcc, 0xa6, 0x2d, 0x86, 0x95, 0x91, 0xc6, 0xf5, 0xa4, 0x50, 0xa9, 0x49, 0xd2, - 0x7b, 0x06, 0x28, 0x26, 0xbc, 0x24, 0xc0, 0xaa, 0x18, 0x98, 0x84, 0x42, 0x55, 0x3e, 0x31, 0xa0, - 0xb0, 0x6d, 0x19, 0xd7, 0x7d, 0xfa, 0x01, 0xab, 0x61, 0x8b, 0xe2, 0xab, 0x5a, 0x6c, 0x05, 0xa5, - 0x9a, 0x54, 0xc9, 0xb2, 0x8a, 0x3f, 0xcf, 0xa8, 0xbe, 0x85, 0xe1, 0x5b, 0x2d, 0xb4, 0x4b, 0x6b, - 0xd8, 0xb2, 0xc8, 0xd1, 0x61, 0x1c, 0xe3, 0xae, 0xb1, 0x89, 0x41, 0x90, 0x3d, 0x36, 0x5d, 0xc9, - 0xae, 0x61, 0x57, 0xc7, 0xd6, 0x09, 0xbb, 0x8e, 0x2c, 0xfd, 0xa1, 0x29, 0xd9, 0x0d, 0xa4, 0xc1, - 0x5f, 0x5b, 0xc2, 0x47, 0x4d, 0x61, 0x37, 0x91, 0x46, 0x9a, 0x03, 0x76, 0xab, 0xf9, 0xeb, 0x71, - 0x3d, 0xf4, 0x1b, 0x51, 0x78, 0xb2, 0xc8, 0xf2, 0xc1, 0x00, 0x66, 0xde, 0x5a, 0x6e, 0xc3, 0x9a, - 0x2f, 0x7e, 0x30, 0xb1, 0x53, 0xb7, 0x04, 0x72, 0x57, 0x97, 0xa1, 0xcc, 0x72, 0x34, 0xcf, 0x60, - 0x2d, 0x04, 0x9e, 0xd9, 0x72, 0x48, 0x79, 0x24, 0xfe, 0x56, 0xe2, 0x1a, 0x43, 0x66, 0xee, 0xf5, - 0xaf, 0x48, 0x64, 0x7c, 0x6d, 0x21, 0x3a, 0x27, 0xc8, 0x2e, 0x70, 0x4e, 0xd0, 0xfc, 0x3f, 0xc9, - 0x83, 0x67, 0x15, 0xb0, 0x59, 0x51, 0xc0, 0x36, 0x7b, 0x10, 0x1d, 0xa7, 0xfe, 0xb3, 0x2f, 0x93, - 0xfa, 0x9f, 0x57, 0xd4, 0xf1, 0x3e, 0xc6, 0x0f, 0xb4, 0x32, 0x9f, 0x2e, 0x70, 0xac, 0x91, 0xa2, - 0xe5, 0x1b, 0x74, 0xac, 0x6c, 0x76, 0x55, 0xc5, 0x51, 0x61, 0xee, 0xa5, 0xa2, 0xe4, 0xf9, 0xb1, - 0xa6, 0x34, 0x12, 0x5c, 0x09, 0x3b, 0x56, 0x9c, 0x67, 0xc7, 0x30, 0x76, 0xd6, 0x16, 0x2e, 0x82, - 0xd5, 0x29, 0x90, 0xfa, 0x1d, 0x8a, 0xa7, 0x35, 0x5e, 0x36, 0x66, 0xf0, 0xe8, 0xec, 0x8d, 0x26, - 0x8e, 0xb4, 0xf5, 0x41, 0x87, 0x02, 0xa6, 0x6f, 0x3d, 0x56, 0x66, 0x6f, 0x3d, 0x7e, 0x08, 0x10, - 0x08, 0x5c, 0x1d, 0x5b, 0x76, 0x5f, 0xea, 0xba, 0xa4, 0x3b, 0x97, 0xf5, 0x4d, 0x1f, 0xcf, 0x24, - 0x38, 0xb0, 0xfd, 0x23, 0xf3, 0x9c, 0x8e, 0x6c, 0x75, 0x01, 0x45, 0x04, 0x4f, 0x5b, 0xf7, 0x95, - 0x59, 0xeb, 0xfe, 0x16, 0x14, 0x02, 0x74, 0xa1, 0xe9, 0xe2, 0xce, 0xe5, 0xf3, 0xbb, 0x4e, 0x7e, - 0xb6, 0xa1, 0x68, 0x29, 0x61, 0x89, 0xf6, 0xcf, 0xf3, 0xe9, 0xca, 0x4e, 0xc5, 0x08, 0xc1, 0x94, - 0x85, 0xbd, 0x99, 0xb6, 0xb0, 0x0d, 0x0b, 0x8a, 0xfa, 0xf0, 0x61, 0x3a, 0x51, 0x10, 0xa6, 0x2d, - 0xb3, 0x89, 0xb4, 0x65, 0x54, 0xfd, 0x9a, 0x4b, 0x56, 0xbf, 0x4e, 0xdd, 0xea, 0x2b, 0xcc, 0xdc, - 0xea, 0x6b, 0x7e, 0x02, 0x05, 0x15, 0x13, 0x40, 0xe8, 0x8e, 0x2a, 0x57, 0x16, 0x3b, 0xc5, 0x32, - 0xfc, 0x3a, 0xb0, 0x40, 0x90, 0xaf, 0x23, 0xba, 0xe6, 0x48, 0x90, 0x91, 0xcc, 0xf2, 0x3a, 0x5c, - 0x57, 0xb4, 0x41, 0xfa, 0x09, 0x39, 0x5c, 0x8e, 0x7d, 0xec, 0x9b, 0xfe, 0x05, 0xcb, 0x37, 0x3f, - 0xa4, 0xa3, 0xff, 0x50, 0xa1, 0xaa, 0xd1, 0x2d, 0x4a, 0x65, 0x96, 0x2d, 0x6d, 0x7d, 0xa8, 0x72, - 0x44, 0x47, 0x7b, 0xaa, 0x9e, 0x8e, 0xc2, 0x29, 0xca, 0x07, 0x2d, 0x27, 0xf7, 0xf8, 0x3f, 0xb5, - 0xf5, 0xd6, 0xdc, 0x48, 0x78, 0x8c, 0xe9, 0x02, 0xb9, 0xcc, 0xa2, 0x05, 0x72, 0xcd, 0xc7, 0xb0, - 0x6a, 0xa4, 0x6d, 0x3a, 0x7f, 0x0f, 0x4a, 0xde, 0x38, 0x29, 0xe7, 0x45, 0x7a, 0x19, 0x92, 0x37, - 0x7f, 0x37, 0x03, 0xcb, 0x1d, 0x57, 0x0a, 0xdf, 0x35, 0x9d, 0x6d, 0xc7, 0x1c, 0xf0, 0x77, 0x43, - 0x2b, 0x35, 0x3f, 0xf7, 0x90, 0xa4, 0x4d, 0x1b, 0x2c, 0x47, 0x27, 0xd9, 0xf9, 0x0d, 0x58, 0x13, - 0x96, 0x2d, 0x3d, 0x5f, 0xf9, 0xc9, 0x61, 0x1d, 0xe3, 0x75, 0x60, 0x0a, 0xdd, 0xa5, 0x25, 0xd1, - 0x53, 0xd3, 0x5c, 0x87, 0xeb, 0x29, 0x6c, 0xe8, 0x04, 0x67, 0xf9, 0x6d, 0xa8, 0xc7, 0xbb, 0xd1, - 0x96, 0xe7, 0xca, 0x8e, 0x6b, 0x89, 0x73, 0x72, 0xb2, 0x58, 0xae, 0xf9, 0x6b, 0x91, 0x7b, 0xf7, - 0x54, 0x57, 0x39, 0xfa, 0x9e, 0x17, 0x5f, 0xa1, 0xd5, 0x50, 0xe2, 0xaa, 0x76, 0x76, 0x81, 0xab, - 0xda, 0x1f, 0xc6, 0xd7, 0x6d, 0xd5, 0x46, 0xf1, 0xca, 0xdc, 0xdd, 0x87, 0x8a, 0xb3, 0xb4, 0x77, - 0xdf, 0x15, 0x89, 0xbb, 0xb7, 0x6f, 0xea, 0x90, 0x2e, 0xbf, 0x88, 0x17, 0xac, 0xea, 0x18, 0xde, - 0x99, 0xbe, 0xe3, 0xb1, 0x58, 0x91, 0xe4, 0x8c, 0xa3, 0x0a, 0x2f, 0xed, 0xa8, 0x7e, 0x7b, 0x2a, - 0x7a, 0x2a, 0xcf, 0x4d, 0xc7, 0x5d, 0x71, 0x83, 0xf5, 0xdb, 0x50, 0x1a, 0xda, 0x81, 0xf4, 0x7c, - 0x75, 0xab, 0x7a, 0xf6, 0x16, 0x58, 0x62, 0xb4, 0x76, 0x14, 0x21, 0x55, 0xb4, 0x85, 0x5c, 0xfc, - 0x7b, 0xb0, 0x46, 0x03, 0x7f, 0x18, 0x7b, 0x0d, 0x41, 0xbd, 0x3a, 0xb7, 0x92, 0x30, 0x21, 0x6a, - 0x63, 0x8a, 0xc5, 0x98, 0x15, 0xd2, 0x18, 0x00, 0xc4, 0xf3, 0x33, 0x63, 0xc5, 0x3e, 0xc3, 0xad, - 0xea, 0x9b, 0x50, 0x0c, 0x26, 0xc7, 0xf1, 0x69, 0x9c, 0x86, 0x1a, 0xe7, 0xd0, 0x98, 0xf1, 0x0e, - 0x0e, 0x85, 0xaf, 0x9a, 0x7b, 0xe5, 0xd5, 0xee, 0x0f, 0x93, 0x13, 0xaf, 0x94, 0xf3, 0xee, 0x25, - 0xb3, 0x17, 0x49, 0x4e, 0x68, 0x40, 0xe3, 0x1d, 0xa8, 0x26, 0x06, 0x15, 0x2d, 0xf3, 0xc4, 0xb5, - 0xbc, 0x30, 0x05, 0x8c, 0xbf, 0xd5, 0xd5, 0x36, 0x2b, 0x4c, 0x02, 0xd3, 0xef, 0x86, 0x01, 0x6c, - 0x7a, 0x00, 0xaf, 0x88, 0xb0, 0x5f, 0x81, 0x5a, 0xc2, 0xa5, 0x8b, 0xd2, 0x83, 0x69, 0x64, 0xf3, - 0x0c, 0x3e, 0x9f, 0x10, 0x77, 0x28, 0xfc, 0x91, 0x1d, 0xe0, 0x46, 0xa2, 0x82, 0x45, 0x72, 0xad, - 0x2d, 0xe1, 0x4a, 0x5b, 0x86, 0x16, 0x34, 0x82, 0xf9, 0x37, 0xa1, 0x30, 0x16, 0xfe, 0x28, 0xd0, - 0x56, 0x74, 0x5a, 0x83, 0xe6, 0x8a, 0x0d, 0x0c, 0xc5, 0xd3, 0xfc, 0x27, 0x19, 0x28, 0xef, 0x09, - 0x69, 0xa2, 0xef, 0xc0, 0xf7, 0xa6, 0xde, 0x32, 0x7b, 0x82, 0x1c, 0x92, 0xae, 0xeb, 0xf0, 0x75, - 0xbd, 0xa3, 0xe9, 0x35, 0xbc, 0xb3, 0x14, 0x37, 0xac, 0xb1, 0x01, 0x25, 0x8d, 0x6e, 0xbc, 0x0b, - 0xab, 0x53, 0x94, 0x34, 0x2e, 0xca, 0xb7, 0xef, 0x5e, 0x8c, 0xc2, 0x32, 0xa7, 0x65, 0x23, 0x8d, - 0xdc, 0xa8, 0x40, 0x69, 0xac, 0x18, 0x9a, 0x7f, 0x70, 0x83, 0x8a, 0x6b, 0xec, 0x13, 0x8c, 0xe9, - 0xe7, 0xed, 0xac, 0x77, 0x00, 0x68, 0x6b, 0x56, 0x25, 0x18, 0x2a, 0x65, 0x9b, 0xc0, 0xf0, 0xf7, - 0xa3, 0x5c, 0x7b, 0x7e, 0xae, 0x53, 0x95, 0x14, 0x3e, 0x9d, 0x70, 0xaf, 0x43, 0xc9, 0x0e, 0x28, - 0x0f, 0xa7, 0xcb, 0x96, 0x42, 0x90, 0x7f, 0x0b, 0x8a, 0xf6, 0x68, 0xec, 0xf9, 0x52, 0x27, 0xe3, - 0xaf, 0x94, 0xda, 0x21, 0xca, 0x9d, 0x25, 0x43, 0xf3, 0x20, 0xb7, 0x38, 0x27, 0xee, 0xf2, 0x8b, - 0xb9, 0xdb, 0xe7, 0x21, 0xb7, 0xe2, 0xe1, 0xdf, 0x85, 0xda, 0x40, 0x55, 0x6d, 0x2a, 0xc1, 0xda, - 0x88, 0x7c, 0xe5, 0x2a, 0x21, 0x8f, 0x92, 0x0c, 0x3b, 0x4b, 0x46, 0x5a, 0x02, 0x8a, 0x44, 0x07, - 0x5e, 0x04, 0xb2, 0xe7, 0x7d, 0xe4, 0xd9, 0x2e, 0x85, 0xbb, 0x2f, 0x10, 0x69, 0x24, 0x19, 0x50, - 0x64, 0x4a, 0x02, 0xff, 0x3a, 0x7a, 0x3c, 0x81, 0xd4, 0x17, 0xdb, 0xef, 0x5e, 0x25, 0xa9, 0x27, - 0x02, 0x7d, 0x25, 0x3d, 0x90, 0xfc, 0x1c, 0x1a, 0x89, 0x45, 0xa2, 0x5f, 0xd2, 0x1a, 0x8f, 0x7d, - 0x0f, 0x63, 0xe6, 0x1a, 0x49, 0xfb, 0xfa, 0x55, 0xd2, 0x0e, 0x2f, 0xe5, 0xde, 0x59, 0x32, 0xae, - 0x90, 0xcd, 0x7b, 0x18, 0xd9, 0xe9, 0x2e, 0xec, 0x0a, 0xf3, 0x2c, 0xbc, 0x16, 0x7f, 0x7f, 0xa1, - 0x51, 0x20, 0x8e, 0x9d, 0x25, 0x63, 0x4a, 0x06, 0xff, 0x65, 0x58, 0x4b, 0xbd, 0x93, 0x6e, 0xc2, - 0xaa, 0x4b, 0xf3, 0x5f, 0x5b, 0xb8, 0x1b, 0xc8, 0xb4, 0xb3, 0x64, 0xcc, 0x4a, 0xe2, 0x13, 0xf8, - 0xdc, 0x6c, 0x97, 0xb6, 0x44, 0xdf, 0xb1, 0x5d, 0xa1, 0xef, 0xd7, 0xbf, 0xf3, 0x72, 0xa3, 0xa5, - 0x99, 0x77, 0x96, 0x8c, 0xcb, 0x25, 0xf3, 0xbf, 0x0a, 0xb7, 0xc7, 0x73, 0x4d, 0x8c, 0x32, 0x5d, - 0xfa, 0x7a, 0xfe, 0x7b, 0x0b, 0xbe, 0x79, 0x86, 0x7f, 0x67, 0xc9, 0xb8, 0x52, 0x3e, 0xfa, 0xce, - 0x14, 0x41, 0xeb, 0xe2, 0x72, 0x05, 0xd0, 0x49, 0x6d, 0xdf, 0xd9, 0x11, 0xa6, 0x15, 0x9d, 0x17, - 0xc4, 0x88, 0xc6, 0xff, 0xcc, 0x40, 0x51, 0xeb, 0xfb, 0xed, 0xa8, 0x62, 0x20, 0x32, 0xdd, 0x31, - 0x82, 0x7f, 0x00, 0x15, 0xe1, 0xfb, 0x9e, 0xbf, 0xe9, 0x59, 0x61, 0xb1, 0xe5, 0x74, 0x96, 0x59, - 0xc9, 0x59, 0x6f, 0x87, 0x64, 0x46, 0xcc, 0xc1, 0xdf, 0x07, 0x50, 0xeb, 0xbc, 0x17, 0xdf, 0x11, - 0x6a, 0xcc, 0xe7, 0x57, 0x47, 0x50, 0x31, 0x75, 0x9c, 0x96, 0x0b, 0xcf, 0x7f, 0x42, 0x30, 0x0a, - 0x38, 0x0b, 0x89, 0x80, 0xf3, 0xb6, 0xce, 0x23, 0x50, 0x7a, 0x45, 0xdf, 0x94, 0x8b, 0x10, 0x8d, - 0xdf, 0xcf, 0x40, 0x51, 0x19, 0x0f, 0xde, 0x9e, 0xed, 0xd1, 0x6b, 0x2f, 0xb6, 0x39, 0xeb, 0xd3, - 0x3d, 0xfb, 0x16, 0x80, 0xb2, 0x41, 0x89, 0x9e, 0xdd, 0x9e, 0x92, 0xa3, 0x59, 0xc3, 0xf2, 0xe6, - 0x98, 0xbe, 0xf9, 0x50, 0xdd, 0xe6, 0xa2, 0x94, 0xf0, 0x93, 0xdd, 0x5d, 0xb6, 0xc4, 0xd7, 0xa0, - 0xf6, 0x64, 0xff, 0xf1, 0xfe, 0xc1, 0xb3, 0xfd, 0xa3, 0xb6, 0x61, 0x1c, 0x18, 0x2a, 0x33, 0xbc, - 0xd1, 0xda, 0x3a, 0xea, 0xec, 0x1f, 0x3e, 0xe9, 0xb1, 0x6c, 0xe3, 0x5f, 0x66, 0xa0, 0x96, 0xb2, - 0x5d, 0x7f, 0xb6, 0x53, 0x97, 0x18, 0xfe, 0xdc, 0xfc, 0xe1, 0xcf, 0x5f, 0x36, 0xfc, 0x85, 0xe9, - 0xe1, 0xff, 0xed, 0x0c, 0xd4, 0x52, 0x36, 0x32, 0x29, 0x3d, 0x93, 0x96, 0x9e, 0xdc, 0xe9, 0xb3, - 0x53, 0x3b, 0x7d, 0x13, 0x96, 0xc3, 0xdf, 0xfb, 0x71, 0xc6, 0x21, 0x85, 0x4b, 0xd2, 0xd0, 0x75, - 0x8a, 0x7c, 0x9a, 0x86, 0xae, 0x54, 0x5c, 0xdd, 0x5a, 0xba, 0x3e, 0x1a, 0xd0, 0xed, 0xfa, 0xc6, - 0xe5, 0x16, 0xf4, 0x8a, 0x2e, 0x3c, 0x82, 0xea, 0x38, 0x5e, 0xa6, 0x2f, 0xe7, 0x96, 0x24, 0x39, - 0x5f, 0xd0, 0xce, 0xdf, 0xc9, 0xc0, 0x4a, 0xda, 0xe6, 0xfe, 0xb9, 0x1e, 0xd6, 0x7f, 0x9e, 0x81, - 0xb5, 0x19, 0x4b, 0x7e, 0xa5, 0x63, 0x37, 0xdd, 0xae, 0xec, 0x02, 0xed, 0xca, 0xcd, 0x69, 0xd7, - 0xe5, 0x96, 0xe4, 0xea, 0x16, 0x77, 0xe1, 0x73, 0x97, 0xee, 0x09, 0x57, 0x0c, 0x75, 0x4a, 0x68, - 0x6e, 0x5a, 0xe8, 0x6f, 0x65, 0xe0, 0xf6, 0x55, 0xf6, 0xfe, 0xff, 0xbb, 0x5e, 0x4d, 0xb7, 0xb0, - 0xf9, 0x6e, 0x54, 0x48, 0x50, 0x85, 0x92, 0xfe, 0x6a, 0x95, 0x2e, 0xe4, 0x1e, 0x7a, 0xcf, 0x5d, - 0x95, 0x89, 0x36, 0x84, 0xa9, 0xef, 0xf5, 0x1b, 0x62, 0xec, 0xd8, 0x74, 0x46, 0x7a, 0x0b, 0xa0, - 0x45, 0x71, 0x5d, 0x78, 0xcd, 0x66, 0x73, 0xf7, 0xa0, 0xdb, 0x66, 0x4b, 0x49, 0x27, 0xf6, 0x93, - 0xd0, 0x10, 0x37, 0x0f, 0xa1, 0x18, 0x5f, 0x7c, 0xd8, 0x33, 0xfd, 0x53, 0x4b, 0x9d, 0x44, 0x2e, - 0x43, 0xf9, 0x50, 0x87, 0x50, 0xea, 0x55, 0x1f, 0x75, 0x0f, 0xf6, 0x55, 0xd2, 0x7b, 0xeb, 0xa0, - 0xa7, 0xae, 0x4f, 0x74, 0x9f, 0x3e, 0x52, 0x47, 0x62, 0x8f, 0x8c, 0xd6, 0xe1, 0xce, 0x11, 0x51, - 0x14, 0x9a, 0xbf, 0x99, 0x0f, 0x77, 0xb5, 0xa6, 0xa1, 0xcf, 0x38, 0x01, 0x8a, 0x68, 0xcd, 0x3d, - 0x2d, 0x38, 0x7a, 0x0d, 0x95, 0xfc, 0xb6, 0xcf, 0x55, 0x1e, 0x82, 0x65, 0x79, 0x11, 0xb2, 0x87, - 0xc7, 0xaa, 0x12, 0x69, 0x47, 0x8e, 0x1c, 0x75, 0xef, 0xb2, 0x77, 0x2e, 0x59, 0x01, 0x7f, 0x6c, - 0x06, 0x67, 0xac, 0xd8, 0xfc, 0x57, 0x39, 0xa8, 0x44, 0xa6, 0xf2, 0x65, 0x4c, 0x37, 0xe7, 0xb0, - 0xd2, 0xd9, 0xef, 0xb5, 0x8d, 0xfd, 0xd6, 0xae, 0x26, 0xc9, 0xf1, 0x6b, 0xb0, 0xba, 0xdd, 0xd9, - 0x6d, 0x1f, 0xed, 0x1e, 0xb4, 0xb6, 0x34, 0xb2, 0xcc, 0x6f, 0x02, 0xef, 0xec, 0x1d, 0x1e, 0x18, - 0xbd, 0xa3, 0x4e, 0xf7, 0x68, 0xb3, 0xb5, 0xbf, 0xd9, 0xde, 0x6d, 0x6f, 0xb1, 0x22, 0x7f, 0x05, - 0xee, 0xee, 0x1f, 0xf4, 0x3a, 0x07, 0xfb, 0x47, 0xfb, 0x07, 0x47, 0x07, 0x1b, 0x1f, 0xb5, 0x37, - 0x7b, 0xdd, 0xa3, 0xce, 0xfe, 0x11, 0x4a, 0x7d, 0x64, 0xb4, 0xf0, 0x09, 0x2b, 0xf0, 0xbb, 0x70, - 0x5b, 0x53, 0x75, 0xdb, 0xc6, 0xd3, 0xb6, 0x81, 0x42, 0x9e, 0xec, 0xb7, 0x9e, 0xb6, 0x3a, 0xbb, - 0xad, 0x8d, 0xdd, 0x36, 0x5b, 0xe6, 0x77, 0xa0, 0xa1, 0x29, 0x8c, 0x56, 0xaf, 0x7d, 0xb4, 0xdb, - 0xd9, 0xeb, 0xf4, 0x8e, 0xda, 0xdf, 0xdb, 0x6c, 0xb7, 0xb7, 0xda, 0x5b, 0xac, 0xc6, 0xbf, 0x02, - 0x5f, 0xa6, 0x46, 0xe9, 0x46, 0xa4, 0x5f, 0xf6, 0x49, 0xe7, 0xf0, 0xa8, 0x65, 0x6c, 0xee, 0x74, - 0x9e, 0xb6, 0xd9, 0x0a, 0x7f, 0x0d, 0xbe, 0x74, 0x39, 0xe9, 0x56, 0xc7, 0x68, 0x6f, 0xf6, 0x0e, - 0x8c, 0x8f, 0xd9, 0x1a, 0xff, 0x02, 0x7c, 0x6e, 0xa7, 0xb7, 0xb7, 0x7b, 0xf4, 0xcc, 0x38, 0xd8, - 0x7f, 0x74, 0x44, 0x3f, 0xbb, 0x3d, 0xe3, 0xc9, 0x66, 0xef, 0x89, 0xd1, 0x66, 0xc0, 0x1b, 0x70, - 0xf3, 0x70, 0xe3, 0x68, 0xff, 0xa0, 0x77, 0xd4, 0xda, 0xff, 0x78, 0x63, 0xf7, 0x60, 0xf3, 0xf1, - 0xd1, 0xf6, 0x81, 0xb1, 0xd7, 0xea, 0xb1, 0x2a, 0xff, 0x2a, 0xbc, 0xb6, 0xd9, 0x7d, 0xaa, 0x9b, - 0x79, 0xb0, 0x7d, 0x64, 0x1c, 0x3c, 0xeb, 0x1e, 0x1d, 0x18, 0x47, 0x46, 0x7b, 0x97, 0xfa, 0xdc, - 0x8d, 0xdb, 0x5e, 0xe2, 0xb7, 0xa1, 0xde, 0xd9, 0xef, 0x3e, 0xd9, 0xde, 0xee, 0x6c, 0x76, 0xda, - 0xfb, 0xbd, 0xa3, 0xc3, 0xb6, 0xb1, 0xd7, 0xe9, 0x76, 0x91, 0x8c, 0x55, 0x9a, 0xdf, 0x81, 0x62, - 0xc7, 0x3d, 0xb3, 0x25, 0xad, 0x2f, 0xad, 0x8c, 0x3a, 0xe2, 0x0a, 0x41, 0x5a, 0x16, 0xf6, 0xc0, - 0xa5, 0xef, 0x09, 0xd0, 0xea, 0x5a, 0x36, 0x62, 0x44, 0xf3, 0xf7, 0x73, 0x50, 0x53, 0x22, 0xc2, - 0x08, 0xee, 0x1e, 0xac, 0xea, 0x54, 0x68, 0x27, 0x6d, 0xc2, 0xa6, 0xd1, 0xf4, 0xa1, 0x2e, 0x85, - 0x4a, 0x18, 0xb2, 0x24, 0x8a, 0xdf, 0x84, 0xa2, 0xd9, 0x77, 0x30, 0x0c, 0x54, 0xe7, 0x95, 0x1a, - 0xfa, 0xac, 0xb6, 0x0b, 0xed, 0xa2, 0x22, 0xec, 0x7b, 0xee, 0x66, 0x74, 0xa5, 0x24, 0x85, 0xe3, - 0x9f, 0xc0, 0xad, 0x08, 0x6e, 0xbb, 0x7d, 0xff, 0x62, 0x1c, 0x7d, 0x49, 0xaf, 0x34, 0x37, 0x99, - 0xb0, 0x6d, 0x3b, 0x22, 0x45, 0x68, 0x5c, 0x26, 0x80, 0x3f, 0x02, 0xb0, 0x69, 0xb0, 0xc8, 0x3f, - 0x9a, 0x7f, 0x6f, 0x3a, 0x35, 0x9a, 0x1a, 0xd2, 0x6e, 0x60, 0xf4, 0x1b, 0x37, 0x88, 0x01, 0xda, - 0xdd, 0xc7, 0xfa, 0xc3, 0x7b, 0xcb, 0x46, 0x04, 0x37, 0x1f, 0x00, 0xc4, 0x5c, 0x9c, 0xc1, 0x32, - 0xfa, 0x16, 0xad, 0x60, 0x4f, 0x8c, 0x8e, 0x85, 0xaf, 0xaa, 0xf8, 0x14, 0xe6, 0x11, 0x72, 0xb0, - 0x4c, 0xf3, 0x8f, 0x32, 0x89, 0x38, 0x5c, 0xc5, 0xd9, 0x57, 0xee, 0x40, 0xf3, 0xce, 0x84, 0x30, - 0x12, 0xd6, 0x83, 0xaa, 0x1d, 0x23, 0x0d, 0xf2, 0x43, 0xe0, 0xf6, 0xec, 0x50, 0xe6, 0x17, 0x1c, - 0xca, 0x39, 0xbc, 0xd3, 0x29, 0xfd, 0xc2, 0x6c, 0x4a, 0xff, 0x0e, 0xc0, 0xc0, 0xf1, 0x8e, 0xf5, - 0xb9, 0x62, 0x51, 0xd7, 0xfd, 0x44, 0x98, 0xa6, 0x03, 0xe5, 0xf0, 0x2b, 0x82, 0xa8, 0x63, 0xf4, - 0x1d, 0xc1, 0x28, 0xc1, 0xa9, 0x20, 0xbe, 0x03, 0x2b, 0x22, 0xdd, 0xe6, 0xec, 0x82, 0x6d, 0x9e, - 0xe2, 0x6b, 0x7e, 0x03, 0xd6, 0x66, 0x88, 0x70, 0x10, 0xc7, 0xa6, 0x8c, 0x3e, 0x25, 0x80, 0xbf, - 0x67, 0x8f, 0xeb, 0x9b, 0xff, 0x31, 0x0b, 0xcb, 0x7b, 0xa6, 0x6b, 0x9f, 0x88, 0x40, 0x86, 0xad, - 0x0d, 0xfa, 0x43, 0x31, 0x32, 0xc3, 0xd6, 0x2a, 0x48, 0x67, 0x3d, 0xb2, 0xc9, 0xf3, 0x84, 0x99, - 0xe3, 0x27, 0x5c, 0x4d, 0x13, 0x39, 0x8c, 0xaa, 0xeb, 0x35, 0x84, 0x73, 0xe7, 0xd8, 0x7d, 0xe1, - 0x06, 0xe1, 0x8a, 0x09, 0xc1, 0xb8, 0x7a, 0xa7, 0x78, 0x45, 0xf5, 0x4e, 0x69, 0x76, 0xfc, 0xef, - 0x42, 0x35, 0xe8, 0xfb, 0x42, 0xb8, 0xc1, 0xd0, 0x93, 0xe1, 0x17, 0x28, 0x93, 0x28, 0x2a, 0xa5, - 0xf3, 0x9e, 0xbb, 0xa8, 0xe3, 0xbb, 0xb6, 0x7b, 0xaa, 0x2b, 0xc4, 0x52, 0x38, 0xd4, 0x41, 0xca, - 0xf9, 0xd8, 0x3f, 0x14, 0x94, 0x6f, 0x28, 0x18, 0x11, 0x4c, 0x59, 0x1d, 0x53, 0x8a, 0x81, 0xe7, - 0xdb, 0x42, 0xa5, 0x36, 0x2b, 0x46, 0x02, 0x83, 0xbc, 0x8e, 0xe9, 0x0e, 0x26, 0xe6, 0x40, 0xe8, - 0xe3, 0xef, 0x08, 0x6e, 0xfe, 0xaf, 0x02, 0x80, 0x5a, 0x0d, 0xc1, 0xd0, 0x1e, 0xd3, 0xd1, 0x8b, - 0xad, 0x6b, 0x8a, 0x6b, 0x06, 0xfd, 0xe6, 0xef, 0xa5, 0xca, 0xfd, 0x67, 0x0f, 0x4b, 0x63, 0xf6, - 0xe9, 0x94, 0x10, 0x0e, 0x8e, 0x29, 0x85, 0x2e, 0x9c, 0xa2, 0xf1, 0xcf, 0x1b, 0x49, 0x14, 0x95, - 0xce, 0x99, 0x52, 0xb4, 0x5d, 0x4b, 0xa5, 0x9c, 0xf2, 0x46, 0x04, 0xd3, 0x85, 0xa1, 0xa0, 0x35, - 0x91, 0x9e, 0x21, 0x5c, 0xf1, 0x3c, 0xba, 0x0b, 0x17, 0xa3, 0xf8, 0x1e, 0xd4, 0xc6, 0xe6, 0xc5, - 0x48, 0xb8, 0x72, 0x4f, 0xc8, 0xa1, 0x67, 0xe9, 0x2a, 0xa7, 0xd7, 0x2e, 0x6f, 0xe0, 0x61, 0x92, - 0xdc, 0x48, 0x73, 0xa3, 0x4e, 0xb8, 0x01, 0xad, 0x12, 0x35, 0x8d, 0x1a, 0xe2, 0x1b, 0x00, 0xea, - 0x57, 0xc2, 0x52, 0xcd, 0x64, 0xa1, 0xcc, 0x91, 0x08, 0x84, 0x7f, 0x66, 0x2b, 0xeb, 0xaa, 0x8c, - 0x54, 0xcc, 0x85, 0xb6, 0x78, 0x12, 0x08, 0xbf, 0x3d, 0x32, 0x6d, 0x47, 0x4f, 0x70, 0x8c, 0xe0, - 0x6f, 0xc3, 0x8d, 0x60, 0x72, 0x8c, 0x3a, 0x73, 0x2c, 0x7a, 0xde, 0xbe, 0x78, 0x1e, 0x38, 0x42, - 0x4a, 0xe1, 0xeb, 0x4a, 0x8a, 0xf9, 0x0f, 0x9b, 0x83, 0xc8, 0x0d, 0xa3, 0xaf, 0x9d, 0xe0, 0xaf, - 0xb8, 0x5c, 0x2b, 0x42, 0xe9, 0x5a, 0x36, 0x96, 0x41, 0xf3, 0xa7, 0x50, 0xba, 0xd4, 0x2d, 0xcb, - 0xbf, 0x0c, 0x5f, 0x4c, 0x11, 0x19, 0xea, 0x60, 0x3a, 0xd8, 0xb6, 0x5d, 0xd3, 0xb1, 0x7f, 0xa8, - 0xca, 0x04, 0x72, 0xcd, 0x31, 0xd4, 0x52, 0x03, 0x47, 0x97, 0x37, 0xe9, 0x97, 0xae, 0xf7, 0x61, - 0xb0, 0xac, 0xe0, 0xae, 0xf4, 0x6d, 0x3a, 0x71, 0x89, 0x30, 0x9b, 0xb8, 0xce, 0x3d, 0x96, 0xe5, - 0xd7, 0x81, 0x29, 0x4c, 0xc7, 0x35, 0xc7, 0xe3, 0xd6, 0x78, 0xec, 0x08, 0x96, 0xa3, 0x8b, 0xb1, - 0x31, 0x56, 0x15, 0xfd, 0xb3, 0x7c, 0xf3, 0x7b, 0x70, 0x8b, 0x46, 0xe6, 0xa9, 0xf0, 0xa3, 0x40, - 0x5b, 0xf7, 0xf5, 0x06, 0xac, 0xa9, 0x5f, 0xfb, 0x9e, 0x54, 0x8f, 0xc9, 0xf9, 0xe4, 0xb0, 0xa2, - 0xd0, 0xe8, 0x7b, 0x75, 0x05, 0x5d, 0x77, 0x8d, 0x70, 0x11, 0x5d, 0xb6, 0xf9, 0x87, 0x45, 0xe0, - 0xb1, 0x42, 0xf4, 0x6c, 0xe1, 0x6f, 0x99, 0xd2, 0x4c, 0x64, 0x4a, 0x6b, 0x97, 0x9e, 0xf5, 0xbf, - 0xb8, 0x52, 0xef, 0x26, 0x14, 0xed, 0x00, 0x43, 0x43, 0x5d, 0xae, 0xab, 0x21, 0xbe, 0x0b, 0x30, - 0x16, 0xbe, 0xed, 0x59, 0xa4, 0x41, 0x85, 0xb9, 0xb7, 0x2e, 0x66, 0x1b, 0xb5, 0x7e, 0x18, 0xf1, - 0x18, 0x09, 0x7e, 0x6c, 0x87, 0x82, 0xd4, 0xc9, 0x79, 0x91, 0x1a, 0x9d, 0x44, 0xf1, 0x37, 0xe0, - 0xda, 0xd8, 0xb7, 0xfb, 0x42, 0x4d, 0xc7, 0x93, 0xc0, 0xda, 0xa4, 0x6f, 0x04, 0x96, 0x88, 0x72, - 0xde, 0x23, 0xd4, 0x40, 0xd3, 0xa5, 0x80, 0x29, 0xa0, 0xb3, 0x62, 0x7d, 0x41, 0x5c, 0x15, 0xb4, - 0xd6, 0x8c, 0xf9, 0x0f, 0xf9, 0x7d, 0x60, 0xfa, 0xc1, 0x9e, 0xed, 0xee, 0x0a, 0x77, 0x20, 0x87, - 0xa4, 0xdc, 0x35, 0x63, 0x06, 0x4f, 0x16, 0x4c, 0x7d, 0x89, 0x49, 0x9d, 0x23, 0x55, 0x8c, 0x08, - 0x56, 0x1f, 0x1d, 0x70, 0x3c, 0xbf, 0x2b, 0x7d, 0x5d, 0x99, 0x1b, 0xc1, 0xe8, 0x43, 0x05, 0xd4, - 0xd6, 0x43, 0xdf, 0xb3, 0x26, 0x74, 0xca, 0xa1, 0x8c, 0xd8, 0x34, 0x3a, 0xa6, 0xdc, 0x33, 0x5d, - 0x5d, 0x2e, 0x59, 0x4b, 0x52, 0x46, 0x68, 0x8a, 0x09, 0xbd, 0x20, 0x16, 0xb8, 0xaa, 0x63, 0xc2, - 0x04, 0x4e, 0xd3, 0xc4, 0xa2, 0x58, 0x44, 0x13, 0xcb, 0xa1, 0xfe, 0x5b, 0xbe, 0x67, 0x5b, 0xb1, - 0x2c, 0x55, 0xb9, 0x33, 0x83, 0x4f, 0xd0, 0xc6, 0x32, 0x79, 0x8a, 0x36, 0x96, 0x7b, 0x1d, 0x0a, - 0xde, 0xc9, 0x89, 0xf0, 0xe9, 0xc3, 0x9b, 0x15, 0x43, 0x01, 0xcd, 0x1f, 0x67, 0x00, 0x62, 0x95, - 0xc0, 0x85, 0x10, 0x43, 0xf1, 0xc2, 0xbf, 0x05, 0xd7, 0x92, 0x68, 0x47, 0x17, 0xc2, 0xd2, 0x6a, - 0x88, 0x1f, 0x6c, 0x99, 0x17, 0x01, 0xcb, 0xea, 0x8b, 0xdb, 0x1a, 0xf7, 0x4c, 0x08, 0xaa, 0x2a, - 0xbc, 0x0e, 0x2c, 0x46, 0xd2, 0x6d, 0xbc, 0x80, 0xe5, 0xd3, 0xa4, 0x1f, 0x0b, 0xd3, 0x0f, 0x58, - 0xa1, 0xb9, 0x03, 0x45, 0x75, 0x04, 0x36, 0xe7, 0xf0, 0xfa, 0xe5, 0x2a, 0x51, 0xfe, 0x76, 0x06, - 0x60, 0x4b, 0x55, 0x4d, 0xe3, 0xde, 0x3e, 0xa7, 0x26, 0x60, 0x9e, 0x9f, 0x65, 0x5a, 0x16, 0x55, - 0x9f, 0xe7, 0xa2, 0xaf, 0xfe, 0x20, 0x88, 0xfa, 0x64, 0x86, 0x95, 0x63, 0x6a, 0x25, 0x46, 0xb0, - 0xda, 0x56, 0x36, 0x3d, 0xd7, 0x15, 0x7d, 0xdc, 0x94, 0xa2, 0x6d, 0x25, 0x42, 0x35, 0x7f, 0x94, - 0x85, 0xca, 0xe6, 0xd0, 0x94, 0xea, 0x23, 0x39, 0xdf, 0x81, 0xf2, 0x48, 0x04, 0x81, 0x39, 0x10, - 0x81, 0x3e, 0xf2, 0x99, 0x3e, 0xaf, 0x8d, 0x68, 0xd7, 0x9f, 0xb8, 0xbe, 0x30, 0x2d, 0xf5, 0x65, - 0xa0, 0x88, 0x4b, 0x49, 0x70, 0x65, 0x14, 0x92, 0xbf, 0x84, 0x04, 0x37, 0xfa, 0x8c, 0xaf, 0x63, - 0x06, 0x8a, 0x24, 0x4a, 0xb7, 0x25, 0x51, 0x8d, 0x3d, 0xa8, 0x26, 0x58, 0xf9, 0x2b, 0x50, 0xf3, - 0x1c, 0x4b, 0x04, 0xea, 0x6e, 0x60, 0xfc, 0x39, 0xc5, 0x14, 0x92, 0x0a, 0x37, 0x70, 0x3d, 0x0b, - 0x5f, 0x9f, 0xde, 0x85, 0x60, 0xf3, 0x37, 0xca, 0x50, 0xc5, 0x46, 0xed, 0xa9, 0x3e, 0xcc, 0x4c, - 0x47, 0x1d, 0x4a, 0x9e, 0x96, 0xac, 0x2f, 0x15, 0x7a, 0x09, 0x99, 0xba, 0x18, 0x24, 0x97, 0x2e, - 0x06, 0xb9, 0x0d, 0x15, 0x75, 0xd4, 0x64, 0xb5, 0x94, 0x7d, 0xcc, 0x19, 0x31, 0x02, 0x9d, 0x98, - 0x91, 0x67, 0x91, 0x95, 0x6e, 0xa9, 0x53, 0x9a, 0x9c, 0x91, 0xc0, 0x50, 0x98, 0xa3, 0xbb, 0x5f, - 0xd5, 0x61, 0x8e, 0x02, 0x55, 0x55, 0xce, 0xd8, 0xb9, 0xe8, 0x79, 0xba, 0xb5, 0x1d, 0x2b, 0xbe, - 0x9b, 0x9d, 0xc6, 0xf3, 0x4d, 0x28, 0xe9, 0x69, 0xd1, 0x67, 0x51, 0x5f, 0x99, 0x33, 0x13, 0x9a, - 0x7c, 0x5d, 0xff, 0xd5, 0xd7, 0xa3, 0x8c, 0x90, 0x93, 0x3f, 0x82, 0xaa, 0x29, 0xa5, 0xd9, 0x1f, - 0x8e, 0xb4, 0x55, 0xcd, 0xcd, 0x39, 0x96, 0x4e, 0x0a, 0x6a, 0x45, 0xd4, 0x46, 0x92, 0x93, 0x6f, - 0x40, 0xc5, 0x17, 0x66, 0xea, 0x64, 0xfc, 0x95, 0x2b, 0xc4, 0x18, 0x21, 0xad, 0x11, 0xb3, 0x45, - 0x5f, 0x16, 0x85, 0xc4, 0x97, 0x45, 0xef, 0x42, 0x55, 0xab, 0x8e, 0x81, 0x8f, 0xd4, 0x17, 0x57, - 0x92, 0xa8, 0xc6, 0x4f, 0x33, 0xb0, 0x92, 0xee, 0xde, 0x9f, 0xc5, 0xb7, 0xf0, 0xbe, 0x15, 0x7f, - 0x0b, 0xef, 0x33, 0x7c, 0x57, 0xee, 0xb7, 0x32, 0x00, 0xf1, 0xc8, 0xe1, 0xde, 0xaa, 0xbe, 0xd9, - 0x15, 0x7a, 0xfb, 0x0a, 0xe2, 0x3b, 0xa9, 0x0f, 0x3d, 0xbc, 0xbd, 0xd0, 0x34, 0x24, 0x7e, 0x26, - 0xca, 0xde, 0x1f, 0xc0, 0x4a, 0x1a, 0x4f, 0xd7, 0x05, 0x3a, 0xbb, 0x6d, 0x95, 0xdb, 0xea, 0xec, - 0xb5, 0x1e, 0xb5, 0xf5, 0x35, 0xb5, 0xce, 0xfe, 0x63, 0x96, 0x6d, 0xfc, 0x71, 0x06, 0x2a, 0xd1, - 0xa4, 0xf0, 0xef, 0x26, 0x67, 0x53, 0x15, 0xc8, 0xbc, 0xb5, 0xc8, 0x6c, 0xc6, 0xbf, 0xda, 0xae, - 0xf4, 0x2f, 0x12, 0x93, 0xdb, 0xf0, 0x60, 0x25, 0xfd, 0x70, 0x8e, 0x99, 0x7d, 0x94, 0x36, 0xb3, - 0x6f, 0x2e, 0xf4, 0xca, 0x30, 0xc4, 0xdd, 0xb5, 0x03, 0xa9, 0x2d, 0xf0, 0xfb, 0xd9, 0xf7, 0x32, - 0x8d, 0xbb, 0xb0, 0x9c, 0x7c, 0x34, 0x7b, 0x53, 0xf5, 0xfe, 0x1f, 0xe7, 0x60, 0x25, 0x5d, 0x63, - 0x42, 0x37, 0xdf, 0x54, 0x7d, 0xd3, 0x81, 0x63, 0x25, 0x6e, 0x0a, 0x30, 0x0c, 0xaf, 0x75, 0x10, - 0x4d, 0x88, 0x35, 0xca, 0x9e, 0x79, 0x23, 0xc1, 0xee, 0x26, 0xbf, 0xf7, 0xf9, 0x06, 0x87, 0xf0, - 0xc6, 0x22, 0x1b, 0xf3, 0x8a, 0xfe, 0xf2, 0xd9, 0x8f, 0xb2, 0xbc, 0x96, 0xa8, 0x57, 0xff, 0x09, - 0x7a, 0x90, 0xab, 0x1b, 0x13, 0xd7, 0x72, 0x84, 0x15, 0x61, 0x7f, 0x9a, 0xc4, 0x46, 0x05, 0xe7, - 0x3f, 0xca, 0xf3, 0x15, 0xa8, 0x74, 0x27, 0xc7, 0xba, 0xd8, 0xfc, 0xaf, 0xe5, 0xf9, 0x4d, 0x58, - 0xd3, 0x54, 0x71, 0x6d, 0x27, 0xfb, 0xeb, 0xb8, 0xab, 0xad, 0xb4, 0xd4, 0x78, 0xe9, 0x86, 0xb2, - 0xbf, 0x91, 0xc7, 0x26, 0xd0, 0x45, 0xf8, 0xbf, 0x49, 0x72, 0xa2, 0x8b, 0x41, 0xec, 0x57, 0xf2, - 0x7c, 0x15, 0xa0, 0xdb, 0x8b, 0x5e, 0xf4, 0x6b, 0x79, 0x5e, 0x85, 0x62, 0xb7, 0x47, 0xd2, 0x7e, - 0x9c, 0xe7, 0x37, 0x80, 0xc5, 0x4f, 0x75, 0xc5, 0xeb, 0xdf, 0x51, 0x8d, 0x89, 0x4a, 0x58, 0xff, - 0x6e, 0x1e, 0xfb, 0x15, 0x8e, 0x32, 0xfb, 0x7b, 0x79, 0xce, 0xa0, 0x9a, 0xc8, 0xc9, 0xb2, 0xbf, - 0x9f, 0xe7, 0x1c, 0x6a, 0x7b, 0x76, 0x10, 0xd8, 0xee, 0x40, 0xf7, 0xe0, 0x57, 0xe9, 0xcd, 0xdb, - 0xd1, 0xdd, 0x26, 0xf6, 0xeb, 0x79, 0x7e, 0x0b, 0x78, 0xf2, 0x1c, 0x4a, 0x3f, 0xf8, 0x0d, 0xe2, - 0x56, 0x3b, 0x69, 0xa0, 0x71, 0xff, 0x80, 0xb8, 0x51, 0x13, 0x34, 0xe2, 0x37, 0x69, 0x40, 0x36, - 0xe3, 0x1a, 0x59, 0x8d, 0xff, 0x09, 0x31, 0x87, 0x93, 0xa9, 0x70, 0x3f, 0xcd, 0xdf, 0xff, 0x5d, - 0x3a, 0x47, 0x48, 0x96, 0x9a, 0xf1, 0x65, 0x28, 0x3b, 0x9e, 0x3b, 0x90, 0xea, 0x3b, 0xab, 0x35, - 0xa8, 0x04, 0x43, 0xcf, 0x97, 0x04, 0xd2, 0xe5, 0x4b, 0x97, 0x2e, 0xe9, 0xab, 0xeb, 0x0a, 0x2a, - 0x1a, 0x54, 0x79, 0x59, 0x69, 0x0e, 0x58, 0x35, 0xaa, 0xee, 0xcd, 0x47, 0x15, 0xc8, 0xf4, 0xb1, - 0x80, 0xf0, 0x32, 0x36, 0x2b, 0x22, 0xe9, 0xc4, 0x77, 0x54, 0x25, 0xb2, 0xc0, 0x48, 0x40, 0x7d, - 0x50, 0x71, 0x3c, 0xc4, 0x80, 0xa3, 0xa2, 0xb0, 0xde, 0xf7, 0x6d, 0x75, 0xcd, 0x57, 0x17, 0xf6, - 0x59, 0xd8, 0x8e, 0xa8, 0x76, 0x85, 0x89, 0xfb, 0xff, 0x30, 0x03, 0xcb, 0xe1, 0x15, 0x79, 0x7b, - 0x60, 0xbb, 0xaa, 0x96, 0x39, 0xfc, 0x7a, 0x6d, 0xdf, 0xb1, 0xc7, 0xe1, 0xd7, 0x20, 0x57, 0xa1, - 0x6a, 0xf9, 0xe6, 0xa0, 0xe5, 0x5a, 0x5b, 0xbe, 0x37, 0x56, 0xcd, 0x56, 0x27, 0x8d, 0xaa, 0x86, - 0xfa, 0xb9, 0x38, 0x46, 0xf2, 0xb1, 0xf0, 0x59, 0x9e, 0x8a, 0x06, 0x87, 0xa6, 0x6f, 0xbb, 0x83, - 0xf6, 0xb9, 0x14, 0x6e, 0xa0, 0x6a, 0xa9, 0xab, 0x50, 0x9a, 0x04, 0xa2, 0x6f, 0x06, 0x82, 0x15, - 0x11, 0x38, 0x9e, 0xd8, 0x8e, 0xb4, 0x5d, 0xf5, 0x11, 0xc6, 0xa8, 0x58, 0xba, 0x8c, 0x3d, 0x33, - 0xc7, 0x36, 0xab, 0xdc, 0xff, 0xb7, 0x19, 0xa8, 0x92, 0x5a, 0xc4, 0xb9, 0xf4, 0xd8, 0x8b, 0xab, - 0x42, 0x69, 0x37, 0xfa, 0x1a, 0x5f, 0x11, 0xb2, 0x07, 0xa7, 0x2a, 0x97, 0xae, 0xd5, 0x42, 0xdd, - 0x65, 0x55, 0x1f, 0xe6, 0xcb, 0xf3, 0xcf, 0xc1, 0x0d, 0x43, 0x8c, 0x3c, 0x29, 0x9e, 0x99, 0xb6, - 0x4c, 0xde, 0x5b, 0x2a, 0x60, 0x18, 0xa8, 0x1e, 0x85, 0x17, 0x95, 0x8a, 0x14, 0x06, 0xe2, 0x6b, - 0x43, 0x4c, 0x09, 0x7b, 0x4f, 0x18, 0x1d, 0x17, 0x96, 0x23, 0x92, 0x8f, 0x3c, 0xdb, 0xc5, 0xb7, - 0xd1, 0xfd, 0x6a, 0xc2, 0xd0, 0xa1, 0x0c, 0xa2, 0xe0, 0xfe, 0x3e, 0xdc, 0x9c, 0x7f, 0x94, 0xa0, - 0x6e, 0x5e, 0xd3, 0x27, 0xa0, 0xe9, 0x26, 0xcb, 0x33, 0xdf, 0x56, 0x57, 0x64, 0x2b, 0x50, 0x38, - 0x78, 0xee, 0x92, 0x5a, 0xac, 0x41, 0x6d, 0xdf, 0x4b, 0xf0, 0xb0, 0xdc, 0xfd, 0x7e, 0xea, 0xf4, - 0x27, 0x1e, 0x94, 0xb0, 0x11, 0x4b, 0x89, 0x5b, 0x5a, 0x19, 0x75, 0xae, 0x40, 0xff, 0xc5, 0x43, - 0x7d, 0x95, 0x42, 0x9f, 0xba, 0x58, 0xea, 0xab, 0x14, 0x51, 0x33, 0xf3, 0xea, 0xf3, 0x5c, 0x6e, - 0x5f, 0x38, 0xc2, 0x62, 0x85, 0xfb, 0xef, 0xc1, 0xaa, 0xee, 0x6a, 0x5f, 0x04, 0x41, 0x78, 0xcb, - 0xe9, 0xd0, 0xb7, 0xcf, 0xd4, 0x97, 0x2f, 0x96, 0xa1, 0x7c, 0x28, 0xfc, 0xc0, 0x73, 0xe9, 0xab, - 0x1f, 0x00, 0xc5, 0xee, 0xd0, 0xf4, 0xf1, 0x1d, 0xf7, 0xbf, 0xa6, 0x07, 0xe9, 0xc9, 0x79, 0xb8, - 0x35, 0xe0, 0xfa, 0xd1, 0x1f, 0xbd, 0x31, 0xa5, 0xa9, 0xc9, 0xa5, 0x2f, 0xcc, 0x11, 0xcb, 0xde, - 0xdf, 0x84, 0x0a, 0x5d, 0x92, 0x7a, 0x6c, 0xbb, 0x16, 0x76, 0x7c, 0x43, 0x17, 0xec, 0xd3, 0xd7, - 0x98, 0xce, 0x68, 0x38, 0xca, 0xea, 0xbb, 0xb5, 0x2c, 0xcb, 0x6f, 0x02, 0x6f, 0x4d, 0xa4, 0x37, - 0x32, 0xe9, 0x72, 0xaf, 0x73, 0xa1, 0xbe, 0x71, 0x9c, 0xbb, 0xff, 0x6d, 0xe0, 0x2a, 0x37, 0x67, - 0x89, 0x73, 0xdb, 0x1d, 0x44, 0x5f, 0x15, 0x00, 0xfa, 0x44, 0x88, 0x25, 0xce, 0xc3, 0x1b, 0x6e, - 0x21, 0x10, 0x7e, 0xa8, 0x64, 0xdb, 0x9b, 0xb8, 0xd8, 0xe8, 0xa7, 0x70, 0x5d, 0xa9, 0x18, 0xf6, - 0x82, 0x6e, 0x8e, 0x5e, 0x9a, 0x30, 0x50, 0x37, 0xdc, 0xe4, 0x24, 0x88, 0x68, 0x59, 0x06, 0x1b, - 0x16, 0x05, 0xdb, 0x31, 0x3e, 0x7b, 0xbf, 0x09, 0xd7, 0xe6, 0x64, 0x3c, 0xc8, 0xa8, 0xab, 0xb8, - 0x8f, 0x2d, 0xdd, 0xff, 0x10, 0xd6, 0x94, 0x19, 0xda, 0x57, 0x77, 0xfb, 0xc2, 0x61, 0x7b, 0xd6, - 0xd9, 0xee, 0xa8, 0x91, 0xde, 0x6c, 0xef, 0xee, 0x3e, 0xd9, 0x6d, 0x19, 0x2c, 0x43, 0xfa, 0x70, - 0xd0, 0x3b, 0xda, 0x3c, 0xd8, 0xdf, 0x6f, 0x6f, 0xf6, 0xda, 0x5b, 0x2c, 0xbb, 0x71, 0xff, 0xdf, - 0xff, 0xfc, 0x4e, 0xe6, 0x67, 0x3f, 0xbf, 0x93, 0xf9, 0x6f, 0x3f, 0xbf, 0x93, 0xf9, 0xf1, 0xa7, - 0x77, 0x96, 0x7e, 0xf6, 0xe9, 0x9d, 0xa5, 0xff, 0xf4, 0xe9, 0x9d, 0xa5, 0x4f, 0xd8, 0xf4, 0x3f, - 0xe2, 0x39, 0x2e, 0x52, 0x50, 0xf1, 0xd6, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xc8, 0xe7, 0x97, - 0xc4, 0xa3, 0x67, 0x00, 0x00, + // 9329 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x7d, 0x5b, 0x8c, 0x23, 0xd9, + 0x75, 0x58, 0xf3, 0x4d, 0x1e, 0x36, 0xbb, 0x6f, 0xdf, 0x79, 0x51, 0xd4, 0x68, 0x32, 0xa2, 0x56, + 0xbb, 0xb3, 0xa3, 0x55, 0xcf, 0xee, 0xec, 0xae, 0x76, 0xb5, 0xd6, 0xae, 0xc4, 0xee, 0x66, 0x4f, + 0x73, 0xa7, 0x5f, 0x2a, 0x72, 0x66, 0xb4, 0x0b, 0x3b, 0x9d, 0x6a, 0xd6, 0x6d, 0xb2, 0xd4, 0xc5, + 0x2a, 0xaa, 0xea, 0xb2, 0xa7, 0x5b, 0x48, 0x02, 0xe5, 0x65, 0xc7, 0x7f, 0x4a, 0x10, 0xc7, 0x31, + 0x82, 0xc0, 0xd2, 0x47, 0x80, 0x20, 0x76, 0x90, 0x2f, 0x23, 0x71, 0x1e, 0x40, 0xec, 0xaf, 0x00, + 0xfe, 0x51, 0xf2, 0x15, 0x20, 0x01, 0x12, 0x48, 0x40, 0x3e, 0x12, 0xc4, 0x86, 0xf3, 0x25, 0x04, + 0xf9, 0x08, 0xce, 0xb9, 0xb7, 0x5e, 0x24, 0xbb, 0x87, 0xb3, 0xb6, 0x03, 0x7f, 0x35, 0xef, 0xa9, + 0x73, 0xce, 0x7d, 0x9f, 0x7b, 0x5e, 0xf7, 0x36, 0xbc, 0x32, 0x3e, 0x1d, 0x3c, 0x70, 0xec, 0xe3, + 0x07, 0xe3, 0xe3, 0x07, 0x23, 0xcf, 0x12, 0xce, 0x83, 0xb1, 0xef, 0x49, 0x2f, 0x50, 0x85, 0x60, + 0x9d, 0x4a, 0xbc, 0x66, 0xba, 0x17, 0xf2, 0x62, 0x2c, 0xd6, 0x09, 0xda, 0xb8, 0x3d, 0xf0, 0xbc, + 0x81, 0x23, 0x14, 0xea, 0xf1, 0xe4, 0xe4, 0x41, 0x20, 0xfd, 0x49, 0x5f, 0x2a, 0xe4, 0xe6, 0x4f, + 0xf2, 0x70, 0xb3, 0x3b, 0x32, 0x7d, 0xb9, 0xe1, 0x78, 0xfd, 0xd3, 0xae, 0x6b, 0x8e, 0x83, 0xa1, + 0x27, 0x37, 0xcc, 0x40, 0xf0, 0x37, 0xa0, 0x78, 0x8c, 0xc0, 0xa0, 0x9e, 0xb9, 0x9b, 0xbb, 0x57, + 0x7d, 0x78, 0x7d, 0x3d, 0xc5, 0x78, 0x9d, 0x28, 0x0c, 0x8d, 0xc3, 0xdf, 0x82, 0x92, 0x25, 0xa4, + 0x69, 0x3b, 0x41, 0x3d, 0x7b, 0x37, 0x73, 0xaf, 0xfa, 0xf0, 0xd6, 0xba, 0xaa, 0x78, 0x3d, 0xac, + 0x78, 0xbd, 0x4b, 0x15, 0x1b, 0x21, 0x1e, 0x7f, 0x0f, 0xca, 0x27, 0xb6, 0x23, 0x1e, 0x8b, 0x8b, + 0xa0, 0x9e, 0xbb, 0x92, 0x66, 0x23, 0x5b, 0xcf, 0x18, 0x11, 0x32, 0xdf, 0x84, 0x15, 0x71, 0x2e, + 0x7d, 0xd3, 0x10, 0x8e, 0x29, 0x6d, 0xcf, 0x0d, 0xea, 0x79, 0x6a, 0xe1, 0xad, 0xa9, 0x16, 0x86, + 0xdf, 0x89, 0x7c, 0x8a, 0x84, 0xdf, 0x85, 0xaa, 0x77, 0xfc, 0x5d, 0xd1, 0x97, 0xbd, 0x8b, 0xb1, + 0x08, 0xea, 0x85, 0xbb, 0xb9, 0x7b, 0x15, 0x23, 0x09, 0xe2, 0x5f, 0x87, 0x6a, 0xdf, 0x73, 0x1c, + 0xd1, 0x57, 0x75, 0x14, 0xaf, 0xee, 0x56, 0x12, 0x97, 0xbf, 0x03, 0x37, 0x7c, 0x31, 0xf2, 0xce, + 0x84, 0xb5, 0x19, 0x41, 0xa9, 0x9f, 0x65, 0xaa, 0x66, 0xfe, 0x47, 0xde, 0x82, 0x9a, 0xaf, 0xdb, + 0xb7, 0x6b, 0xbb, 0xa7, 0x41, 0xbd, 0x44, 0xdd, 0xfa, 0xfc, 0x25, 0xdd, 0x42, 0x1c, 0x23, 0x4d, + 0xc1, 0x19, 0xe4, 0x4e, 0xc5, 0x45, 0xbd, 0x72, 0x37, 0x73, 0xaf, 0x62, 0xe0, 0x4f, 0xfe, 0x01, + 0xd4, 0x3d, 0xdf, 0x1e, 0xd8, 0xae, 0xe9, 0x6c, 0xfa, 0xc2, 0x94, 0xc2, 0xea, 0xd9, 0x23, 0x11, + 0x48, 0x73, 0x34, 0xae, 0xc3, 0xdd, 0xcc, 0xbd, 0x9c, 0x71, 0xe9, 0x77, 0xfe, 0xb6, 0x9a, 0xa1, + 0x8e, 0x7b, 0xe2, 0xd5, 0xab, 0xba, 0xfb, 0xe9, 0xb6, 0x6c, 0xeb, 0xcf, 0x46, 0x84, 0xd8, 0xfc, + 0x79, 0x16, 0x8a, 0x5d, 0x61, 0xfa, 0xfd, 0x61, 0xe3, 0x57, 0x32, 0x50, 0x34, 0x44, 0x30, 0x71, + 0x24, 0x6f, 0x40, 0x59, 0x8d, 0x6d, 0xc7, 0xaa, 0x67, 0xa8, 0x75, 0x51, 0xf9, 0xb3, 0xac, 0x9d, + 0x75, 0xc8, 0x8f, 0x84, 0x34, 0xeb, 0x39, 0x1a, 0xa1, 0xc6, 0x54, 0xab, 0x54, 0xf5, 0xeb, 0x7b, + 0x42, 0x9a, 0x06, 0xe1, 0x35, 0x7e, 0x96, 0x81, 0x3c, 0x16, 0xf9, 0x6d, 0xa8, 0x0c, 0xed, 0xc1, + 0xd0, 0xb1, 0x07, 0x43, 0xa9, 0x1b, 0x12, 0x03, 0xf8, 0x47, 0xb0, 0x1a, 0x15, 0x0c, 0xd3, 0x1d, + 0x08, 0x6c, 0xd1, 0xbc, 0xc5, 0x4f, 0x1f, 0x8d, 0x69, 0x64, 0x5e, 0x87, 0x12, 0xed, 0x87, 0x8e, + 0x45, 0x2b, 0xba, 0x62, 0x84, 0x45, 0x5c, 0x6e, 0xe1, 0x4c, 0x3d, 0x16, 0x17, 0xf5, 0x3c, 0x7d, + 0x4d, 0x82, 0x78, 0x0b, 0x56, 0xc3, 0xe2, 0x96, 0x1e, 0x8d, 0xc2, 0xd5, 0xa3, 0x31, 0x8d, 0xdf, + 0xfc, 0xc1, 0x1e, 0x14, 0x68, 0x5b, 0xf2, 0x15, 0xc8, 0xda, 0xe1, 0x40, 0x67, 0x6d, 0x8b, 0x3f, + 0x80, 0xe2, 0x89, 0x2d, 0x1c, 0xeb, 0x85, 0x23, 0xac, 0xd1, 0x78, 0x1b, 0x96, 0x7d, 0x11, 0x48, + 0xdf, 0xd6, 0xab, 0x5f, 0x6d, 0xd0, 0x2f, 0xce, 0x93, 0x01, 0xeb, 0x46, 0x02, 0xd1, 0x48, 0x91, + 0x61, 0xb7, 0xfb, 0x43, 0xdb, 0xb1, 0x7c, 0xe1, 0x76, 0x2c, 0xb5, 0x4f, 0x2b, 0x46, 0x12, 0xc4, + 0xef, 0xc1, 0xea, 0xb1, 0xd9, 0x3f, 0x1d, 0xf8, 0xde, 0xc4, 0xc5, 0x0d, 0xe1, 0xf9, 0xd4, 0xed, + 0x8a, 0x31, 0x0d, 0xe6, 0x6f, 0x42, 0xc1, 0x74, 0xec, 0x81, 0x4b, 0x3b, 0x71, 0x65, 0x66, 0xd2, + 0x55, 0x5b, 0x5a, 0x88, 0x61, 0x28, 0x44, 0xbe, 0x03, 0xb5, 0x33, 0xe1, 0x4b, 0xbb, 0x6f, 0x3a, + 0x04, 0xaf, 0x97, 0x88, 0xb2, 0x39, 0x97, 0xf2, 0x69, 0x12, 0xd3, 0x48, 0x13, 0xf2, 0x0e, 0x40, + 0x80, 0x62, 0x92, 0xa6, 0x53, 0xef, 0x85, 0xd7, 0xe6, 0xb2, 0xd9, 0xf4, 0x5c, 0x29, 0x5c, 0xb9, + 0xde, 0x8d, 0xd0, 0x77, 0x96, 0x8c, 0x04, 0x31, 0x7f, 0x0f, 0xf2, 0x52, 0x9c, 0xcb, 0xfa, 0xca, + 0x15, 0x23, 0x1a, 0x32, 0xe9, 0x89, 0x73, 0xb9, 0xb3, 0x64, 0x10, 0x01, 0x12, 0xe2, 0x26, 0xab, + 0xaf, 0x2e, 0x40, 0x88, 0xfb, 0x12, 0x09, 0x91, 0x80, 0x7f, 0x08, 0x45, 0xc7, 0xbc, 0xf0, 0x26, + 0xb2, 0xce, 0x88, 0xf4, 0x4b, 0x57, 0x92, 0xee, 0x12, 0xea, 0xce, 0x92, 0xa1, 0x89, 0xf8, 0x3b, + 0x90, 0xb3, 0xec, 0xb3, 0xfa, 0x1a, 0xd1, 0xde, 0xbd, 0x92, 0x76, 0xcb, 0x3e, 0xdb, 0x59, 0x32, + 0x10, 0x9d, 0x6f, 0x42, 0xf9, 0xd8, 0xf3, 0x4e, 0x47, 0xa6, 0x7f, 0x5a, 0xe7, 0x44, 0xfa, 0xe5, + 0x2b, 0x49, 0x37, 0x34, 0xf2, 0xce, 0x92, 0x11, 0x11, 0x62, 0x97, 0xed, 0xbe, 0xe7, 0xd6, 0xaf, + 0x2d, 0xd0, 0xe5, 0x4e, 0xdf, 0x73, 0xb1, 0xcb, 0x48, 0x80, 0x84, 0x8e, 0xed, 0x9e, 0xd6, 0xaf, + 0x2f, 0x40, 0x88, 0x92, 0x13, 0x09, 0x91, 0x00, 0x9b, 0x6d, 0x99, 0xd2, 0x3c, 0xb3, 0xc5, 0xf3, + 0xfa, 0x8d, 0x05, 0x9a, 0xbd, 0xa5, 0x91, 0xb1, 0xd9, 0x21, 0x21, 0x32, 0x09, 0xb7, 0x66, 0xfd, + 0xe6, 0x02, 0x4c, 0x42, 0x89, 0x8e, 0x4c, 0x42, 0x42, 0xfe, 0x17, 0x61, 0xed, 0x44, 0x98, 0x72, + 0xe2, 0x0b, 0x2b, 0x3e, 0xe8, 0x6e, 0x11, 0xb7, 0xf5, 0xab, 0xe7, 0x7e, 0x9a, 0x6a, 0x67, 0xc9, + 0x98, 0x65, 0xc5, 0x3f, 0x80, 0x82, 0x63, 0x4a, 0x71, 0x5e, 0xaf, 0x13, 0xcf, 0xe6, 0x0b, 0x16, + 0x85, 0x14, 0xe7, 0x3b, 0x4b, 0x86, 0x22, 0xe1, 0xdf, 0x81, 0x55, 0x69, 0x1e, 0x3b, 0xe2, 0xe0, + 0x44, 0x23, 0x04, 0xf5, 0xcf, 0x11, 0x97, 0x37, 0xae, 0x5e, 0xce, 0x69, 0x9a, 0x9d, 0x25, 0x63, + 0x9a, 0x0d, 0xb6, 0x8a, 0x40, 0xf5, 0xc6, 0x02, 0xad, 0x22, 0x7e, 0xd8, 0x2a, 0x22, 0xe1, 0xbb, + 0x50, 0xa5, 0x1f, 0x9b, 0x9e, 0x33, 0x19, 0xb9, 0xf5, 0xcf, 0x13, 0x87, 0x7b, 0x2f, 0xe6, 0xa0, + 0xf0, 0x77, 0x96, 0x8c, 0x24, 0x39, 0x4e, 0x22, 0x15, 0x0d, 0xef, 0x79, 0xfd, 0xf6, 0x02, 0x93, + 0xd8, 0xd3, 0xc8, 0x38, 0x89, 0x21, 0x21, 0x6e, 0xbd, 0xe7, 0xb6, 0x35, 0x10, 0xb2, 0xfe, 0x85, + 0x05, 0xb6, 0xde, 0x33, 0x42, 0xc5, 0xad, 0xa7, 0x88, 0x70, 0x19, 0xf7, 0x87, 0xa6, 0xac, 0xdf, + 0x59, 0x60, 0x19, 0x6f, 0x0e, 0x4d, 0x92, 0x15, 0x48, 0xd0, 0xf8, 0x3e, 0x2c, 0x27, 0xa5, 0x32, + 0xe7, 0x90, 0xf7, 0x85, 0xa9, 0x4e, 0x84, 0xb2, 0x41, 0xbf, 0x11, 0x26, 0x2c, 0x5b, 0xd2, 0x89, + 0x50, 0x36, 0xe8, 0x37, 0xbf, 0x09, 0x45, 0xa5, 0x9b, 0x90, 0xc0, 0x2f, 0x1b, 0xba, 0x84, 0xb8, + 0x96, 0x6f, 0x0e, 0xe8, 0xdc, 0x2a, 0x1b, 0xf4, 0x1b, 0x71, 0x2d, 0xdf, 0x1b, 0x1f, 0xb8, 0x24, + 0xb0, 0xcb, 0x86, 0x2e, 0x35, 0x7e, 0xf6, 0x21, 0x94, 0x74, 0xa3, 0x1a, 0xff, 0x28, 0x03, 0x45, + 0x25, 0x50, 0xf8, 0x37, 0xa1, 0x10, 0xc8, 0x0b, 0x47, 0x50, 0x1b, 0x56, 0x1e, 0xbe, 0xbe, 0x80, + 0x10, 0x5a, 0xef, 0x22, 0x81, 0xa1, 0xe8, 0x9a, 0x06, 0x14, 0xa8, 0xcc, 0x4b, 0x90, 0x33, 0xbc, + 0xe7, 0x6c, 0x89, 0x03, 0x14, 0xd5, 0x64, 0xb1, 0x0c, 0x02, 0xb7, 0xec, 0x33, 0x96, 0x45, 0xe0, + 0x8e, 0x30, 0x2d, 0xe1, 0xb3, 0x1c, 0xaf, 0x41, 0x25, 0x9c, 0x96, 0x80, 0xe5, 0x39, 0x83, 0xe5, + 0xc4, 0x84, 0x07, 0xac, 0xd0, 0xf8, 0xdf, 0x79, 0xc8, 0xe3, 0xfe, 0xe7, 0xaf, 0x40, 0x4d, 0x9a, + 0xfe, 0x40, 0x28, 0x45, 0x38, 0x52, 0x52, 0xd2, 0x40, 0xfe, 0x61, 0xd8, 0x87, 0x2c, 0xf5, 0xe1, + 0xb5, 0x17, 0xca, 0x95, 0x54, 0x0f, 0x12, 0xa7, 0x70, 0x6e, 0xb1, 0x53, 0x78, 0x1b, 0xca, 0x28, + 0xce, 0xba, 0xf6, 0xf7, 0x05, 0x0d, 0xfd, 0xca, 0xc3, 0xfb, 0x2f, 0xae, 0xb2, 0xa3, 0x29, 0x8c, + 0x88, 0x96, 0x77, 0xa0, 0xd2, 0x37, 0x7d, 0x8b, 0x1a, 0x43, 0xb3, 0xb5, 0xf2, 0xf0, 0x2b, 0x2f, + 0x66, 0xb4, 0x19, 0x92, 0x18, 0x31, 0x35, 0x3f, 0x80, 0xaa, 0x25, 0x82, 0xbe, 0x6f, 0x8f, 0x49, + 0xbc, 0xa9, 0xb3, 0xf8, 0xab, 0x2f, 0x66, 0xb6, 0x15, 0x13, 0x19, 0x49, 0x0e, 0xa8, 0x91, 0xf9, + 0x91, 0x7c, 0x2b, 0x91, 0x82, 0x10, 0x03, 0x9a, 0xef, 0x41, 0x39, 0xec, 0x0f, 0x5f, 0x86, 0x32, + 0xfe, 0xdd, 0xf7, 0x5c, 0xc1, 0x96, 0x70, 0x6e, 0xb1, 0xd4, 0x1d, 0x99, 0x8e, 0xc3, 0x32, 0x7c, + 0x05, 0x00, 0x8b, 0x7b, 0xc2, 0xb2, 0x27, 0x23, 0x96, 0x6d, 0xfe, 0x42, 0xb8, 0x5a, 0xca, 0x90, + 0x3f, 0x34, 0x07, 0x48, 0xb1, 0x0c, 0xe5, 0x50, 0x5c, 0xb3, 0x0c, 0xd2, 0x6f, 0x99, 0xc1, 0xf0, + 0xd8, 0x33, 0x7d, 0x8b, 0x65, 0x79, 0x15, 0x4a, 0x2d, 0xbf, 0x3f, 0xb4, 0xcf, 0x04, 0xcb, 0x35, + 0x1f, 0x40, 0x35, 0xd1, 0x5e, 0x64, 0xa1, 0x2b, 0xad, 0x40, 0xa1, 0x65, 0x59, 0xc2, 0x62, 0x19, + 0x24, 0xd0, 0x1d, 0x64, 0xd9, 0xe6, 0x57, 0xa0, 0x12, 0x8d, 0x16, 0xa2, 0xe3, 0xc1, 0xcd, 0x96, + 0xf0, 0x17, 0x82, 0x59, 0x06, 0x57, 0x65, 0xc7, 0x75, 0x6c, 0x57, 0xb0, 0x6c, 0xe3, 0x2f, 0xd1, + 0x52, 0xe5, 0xdf, 0x48, 0x6f, 0x88, 0x57, 0x5f, 0x74, 0xb2, 0xa6, 0x77, 0xc3, 0xe7, 0x13, 0xfd, + 0xdb, 0xb5, 0xa9, 0x71, 0x65, 0xc8, 0x6f, 0x79, 0x32, 0x60, 0x99, 0xc6, 0xff, 0xcc, 0x42, 0x39, + 0x3c, 0x50, 0xd1, 0x26, 0x98, 0xf8, 0x8e, 0x5e, 0xd0, 0xf8, 0x93, 0x5f, 0x87, 0x82, 0xb4, 0xa5, + 0x5e, 0xc6, 0x15, 0x43, 0x15, 0x50, 0x57, 0x4b, 0xce, 0xac, 0x52, 0x60, 0xa7, 0xa7, 0xca, 0x1e, + 0x99, 0x03, 0xb1, 0x63, 0x06, 0x43, 0xad, 0xc2, 0xc6, 0x00, 0xa4, 0x3f, 0x31, 0xcf, 0x70, 0xcd, + 0xd1, 0x77, 0xa5, 0xc5, 0x25, 0x41, 0xfc, 0x6d, 0xc8, 0x63, 0x07, 0xf5, 0xa2, 0xf9, 0x0b, 0x53, + 0x1d, 0xc6, 0x65, 0x72, 0xe8, 0x0b, 0x9c, 0x9e, 0x75, 0xb4, 0xc0, 0x0c, 0x42, 0xe6, 0xaf, 0xc2, + 0x8a, 0xda, 0x84, 0x07, 0xa1, 0xfd, 0x50, 0x22, 0xce, 0x53, 0x50, 0xde, 0xc2, 0xe1, 0x34, 0xa5, + 0xa8, 0x97, 0x17, 0x58, 0xdf, 0xe1, 0xe0, 0xac, 0x77, 0x91, 0xc4, 0x50, 0x94, 0xcd, 0x77, 0x71, + 0x4c, 0x4d, 0x29, 0x70, 0x9a, 0xdb, 0xa3, 0xb1, 0xbc, 0x50, 0x8b, 0x66, 0x5b, 0xc8, 0xfe, 0xd0, + 0x76, 0x07, 0x2c, 0xa3, 0x86, 0x18, 0x27, 0x91, 0x50, 0x7c, 0xdf, 0xf3, 0x59, 0xae, 0xd1, 0x80, + 0x3c, 0xae, 0x51, 0x14, 0x92, 0xae, 0x39, 0x12, 0x7a, 0xa4, 0xe9, 0x77, 0xe3, 0x1a, 0xac, 0xcd, + 0x9c, 0xc7, 0x8d, 0xdf, 0x2d, 0xaa, 0x15, 0x82, 0x14, 0xa4, 0x0b, 0x6a, 0x0a, 0x52, 0xf3, 0x5e, + 0x4a, 0xc6, 0x20, 0x97, 0xb4, 0x8c, 0xf9, 0x10, 0x0a, 0xd8, 0xb1, 0x50, 0xc4, 0x2c, 0x40, 0xbe, + 0x87, 0xe8, 0x86, 0xa2, 0x42, 0x0b, 0xa6, 0x3f, 0x14, 0xfd, 0x53, 0x61, 0x69, 0x59, 0x1f, 0x16, + 0x71, 0xd1, 0xf4, 0x13, 0xea, 0xb9, 0x2a, 0xd0, 0x92, 0xe8, 0x7b, 0x6e, 0x7b, 0xe4, 0x7d, 0xd7, + 0xa6, 0x79, 0xc5, 0x25, 0x11, 0x02, 0xc2, 0xaf, 0x1d, 0x5c, 0x23, 0x7a, 0xda, 0x62, 0x40, 0xa3, + 0x0d, 0x05, 0xaa, 0x1b, 0x77, 0x82, 0x6a, 0xb3, 0xf2, 0x34, 0xbc, 0xba, 0x58, 0x9b, 0x75, 0x93, + 0x1b, 0xbf, 0x9d, 0x85, 0x3c, 0x96, 0xf9, 0x7d, 0x28, 0xf8, 0x68, 0x87, 0xd1, 0x70, 0x5e, 0x66, + 0xb3, 0x29, 0x14, 0xfe, 0x4d, 0xbd, 0x14, 0xb3, 0x0b, 0x2c, 0x96, 0xa8, 0xc6, 0xe4, 0xb2, 0xbc, + 0x0e, 0x85, 0xb1, 0xe9, 0x9b, 0x23, 0xbd, 0x4f, 0x54, 0xa1, 0xf9, 0xa3, 0x0c, 0xe4, 0x11, 0x89, + 0xaf, 0x41, 0xad, 0x2b, 0x7d, 0xfb, 0x54, 0xc8, 0xa1, 0xef, 0x4d, 0x06, 0x43, 0xb5, 0x92, 0x1e, + 0x8b, 0x0b, 0x25, 0x6f, 0x94, 0x40, 0x90, 0xa6, 0x63, 0xf7, 0x59, 0x16, 0x57, 0xd5, 0x86, 0xe7, + 0x58, 0x2c, 0xc7, 0x57, 0xa1, 0xfa, 0xc4, 0xb5, 0x84, 0x1f, 0xf4, 0x3d, 0x5f, 0x58, 0x2c, 0xaf, + 0x77, 0xf7, 0x29, 0x2b, 0xd0, 0x59, 0x26, 0xce, 0x25, 0xd9, 0x42, 0xac, 0xc8, 0xaf, 0xc1, 0xea, + 0x46, 0xda, 0x40, 0x62, 0x25, 0x94, 0x49, 0x7b, 0xc2, 0xc5, 0x45, 0xc6, 0xca, 0x6a, 0x11, 0x7b, + 0xdf, 0xb5, 0x59, 0x05, 0x2b, 0x53, 0xfb, 0x84, 0x41, 0xf3, 0xdf, 0x64, 0x42, 0xc9, 0x51, 0x83, + 0xca, 0xa1, 0xe9, 0x9b, 0x03, 0xdf, 0x1c, 0x63, 0xfb, 0xaa, 0x50, 0x52, 0x07, 0xe7, 0x5b, 0x4a, + 0xba, 0xa9, 0xc2, 0x43, 0x25, 0x1b, 0x55, 0xe1, 0x6d, 0x96, 0x8b, 0x0b, 0xef, 0xb0, 0x3c, 0xd6, + 0xf1, 0xed, 0x89, 0x27, 0x05, 0x2b, 0x90, 0xac, 0xf3, 0x2c, 0xc1, 0x8a, 0x08, 0xec, 0xa1, 0x44, + 0x61, 0x25, 0xec, 0xf3, 0x26, 0xae, 0x9f, 0x63, 0xef, 0x9c, 0x95, 0xb1, 0x19, 0x38, 0x8c, 0xc2, + 0x62, 0x15, 0xfc, 0xb2, 0x3f, 0x19, 0x1d, 0x0b, 0xec, 0x26, 0xe0, 0x97, 0x9e, 0x37, 0x18, 0x38, + 0x82, 0x55, 0x71, 0x0c, 0x12, 0xc2, 0x97, 0x2d, 0x93, 0xa4, 0x35, 0x1d, 0xc7, 0x9b, 0x48, 0x56, + 0x6b, 0xfc, 0x3c, 0x07, 0x79, 0xb4, 0x6e, 0x70, 0xef, 0x0c, 0x51, 0xce, 0xe8, 0xbd, 0x83, 0xbf, + 0xa3, 0x1d, 0x98, 0x8d, 0x77, 0x20, 0xff, 0x40, 0xcf, 0x74, 0x6e, 0x01, 0x29, 0x8b, 0x8c, 0x93, + 0x93, 0xcc, 0x21, 0x3f, 0xb2, 0x47, 0x42, 0xcb, 0x3a, 0xfa, 0x8d, 0xb0, 0x00, 0xcf, 0xe3, 0x02, + 0x39, 0x4f, 0xe8, 0x37, 0xee, 0x1a, 0x13, 0x8f, 0x85, 0x96, 0xa4, 0x3d, 0x90, 0x33, 0xc2, 0xe2, + 0x1c, 0xe9, 0x55, 0x99, 0x2b, 0xbd, 0x3e, 0x0c, 0xa5, 0x57, 0x69, 0x81, 0x5d, 0x4f, 0xcd, 0x4c, + 0x4a, 0xae, 0x58, 0x68, 0x94, 0x17, 0x27, 0x4f, 0x1c, 0x26, 0x5b, 0x7a, 0xd5, 0xc6, 0x07, 0x5d, + 0x59, 0x8d, 0x32, 0xcb, 0xe0, 0x6c, 0xd2, 0x76, 0x55, 0x32, 0xef, 0xa9, 0x6d, 0x09, 0x8f, 0xe5, + 0xe8, 0x20, 0x9c, 0x58, 0xb6, 0xc7, 0xf2, 0xa8, 0x79, 0x1d, 0x6e, 0x6d, 0xb3, 0x42, 0xf3, 0xd5, + 0xc4, 0x91, 0xd4, 0x9a, 0x48, 0x4f, 0xb1, 0xa1, 0xe5, 0x9b, 0x51, 0xab, 0xf1, 0x58, 0x58, 0x2c, + 0xdb, 0xfc, 0xda, 0x1c, 0x31, 0x5b, 0x83, 0xca, 0x93, 0xb1, 0xe3, 0x99, 0xd6, 0x15, 0x72, 0x76, + 0x19, 0x20, 0xb6, 0xaa, 0x1b, 0x3f, 0x6f, 0xc6, 0xc7, 0x39, 0xea, 0xa2, 0x81, 0x37, 0xf1, 0xfb, + 0x82, 0x44, 0x48, 0xc5, 0xd0, 0x25, 0xfe, 0x2d, 0x28, 0xe0, 0xf7, 0xd0, 0x8d, 0x73, 0x7f, 0x21, + 0x5b, 0x6e, 0xfd, 0xa9, 0x2d, 0x9e, 0x1b, 0x8a, 0x90, 0xdf, 0x01, 0x30, 0xfb, 0xd2, 0x3e, 0x13, + 0x08, 0xd4, 0x9b, 0x3d, 0x01, 0xe1, 0xef, 0x26, 0xd5, 0x97, 0xab, 0xfd, 0x90, 0x09, 0xbd, 0x86, + 0x1b, 0x50, 0xc5, 0xad, 0x3b, 0x3e, 0xf0, 0x71, 0xb7, 0xd7, 0x97, 0x89, 0xf0, 0xcd, 0xc5, 0x9a, + 0xf7, 0x28, 0x22, 0x34, 0x92, 0x4c, 0xf8, 0x13, 0x58, 0x56, 0x3e, 0x35, 0xcd, 0xb4, 0x46, 0x4c, + 0xdf, 0x5a, 0x8c, 0xe9, 0x41, 0x4c, 0x69, 0xa4, 0xd8, 0xcc, 0xba, 0x25, 0x0b, 0x2f, 0xed, 0x96, + 0x7c, 0x15, 0x56, 0x7a, 0xe9, 0x5d, 0xa0, 0x8e, 0x8a, 0x29, 0x28, 0x6f, 0xc2, 0xb2, 0x1d, 0xc4, + 0x5e, 0x51, 0xf2, 0x91, 0x94, 0x8d, 0x14, 0xac, 0xf1, 0x1f, 0x8a, 0x90, 0xa7, 0x91, 0x9f, 0xf6, + 0x71, 0x6d, 0xa6, 0x44, 0xfa, 0x83, 0xc5, 0xa7, 0x7a, 0x6a, 0xc7, 0x93, 0x04, 0xc9, 0x25, 0x24, + 0xc8, 0xb7, 0xa0, 0x10, 0x78, 0xbe, 0x0c, 0xa7, 0x77, 0xc1, 0x45, 0xd4, 0xf5, 0x7c, 0x69, 0x28, + 0x42, 0xbe, 0x0d, 0xa5, 0x13, 0xdb, 0x91, 0x38, 0x29, 0x6a, 0xf0, 0xde, 0x58, 0x8c, 0xc7, 0x36, + 0x11, 0x19, 0x21, 0x31, 0xdf, 0x4d, 0x2e, 0xb6, 0x22, 0x71, 0x5a, 0x5f, 0x8c, 0xd3, 0xbc, 0x35, + 0x78, 0x1f, 0x58, 0xdf, 0x3b, 0x13, 0xbe, 0x91, 0x70, 0x4c, 0xaa, 0x43, 0x7a, 0x06, 0xce, 0x1b, + 0x50, 0x1e, 0xda, 0x96, 0x40, 0x3d, 0x87, 0x64, 0x4c, 0xd9, 0x88, 0xca, 0xfc, 0x31, 0x94, 0xc9, + 0x3e, 0x40, 0xa9, 0x58, 0x79, 0xe9, 0xc1, 0x57, 0xa6, 0x4a, 0xc8, 0x00, 0x2b, 0xa2, 0xca, 0xb7, + 0x6d, 0x49, 0xfe, 0xe9, 0xb2, 0x11, 0x95, 0xb1, 0xc1, 0xb4, 0xde, 0x93, 0x0d, 0xae, 0xaa, 0x06, + 0x4f, 0xc3, 0xf9, 0x3b, 0x70, 0x83, 0x60, 0x53, 0x87, 0x24, 0x6e, 0x35, 0x64, 0x3a, 0xff, 0x23, + 0x2a, 0x2c, 0x63, 0x73, 0x20, 0x76, 0xed, 0x91, 0x2d, 0xeb, 0xb5, 0xbb, 0x99, 0x7b, 0x05, 0x23, + 0x06, 0xf0, 0x37, 0x60, 0xcd, 0x12, 0x27, 0xe6, 0xc4, 0x91, 0x3d, 0x31, 0x1a, 0x3b, 0xa6, 0x14, + 0x1d, 0x8b, 0xd6, 0x68, 0xc5, 0x98, 0xfd, 0xc0, 0xdf, 0x84, 0x6b, 0x1a, 0x78, 0x10, 0x45, 0x15, + 0x3a, 0x16, 0xb9, 0xef, 0x2a, 0xc6, 0xbc, 0x4f, 0xcd, 0x3d, 0x2d, 0x86, 0xf1, 0x00, 0x45, 0x3b, + 0x35, 0x14, 0xa0, 0x81, 0x54, 0x27, 0xf2, 0x23, 0xd3, 0x71, 0x84, 0x7f, 0xa1, 0x8c, 0xdc, 0xc7, + 0xa6, 0x7b, 0x6c, 0xba, 0x2c, 0x47, 0x67, 0xac, 0xe9, 0x08, 0xd7, 0x32, 0x7d, 0x75, 0x22, 0x3f, + 0xa2, 0x03, 0xbd, 0xd0, 0xbc, 0x07, 0x79, 0x1a, 0xd2, 0x0a, 0x14, 0x94, 0x95, 0x44, 0x16, 0xb3, + 0xb6, 0x90, 0x48, 0x22, 0xef, 0xe2, 0xf6, 0x63, 0xd9, 0xc6, 0x3f, 0x2e, 0x42, 0x39, 0x1c, 0xbc, + 0x30, 0x86, 0x90, 0x89, 0x63, 0x08, 0xa8, 0xc6, 0x05, 0x4f, 0xed, 0xc0, 0x3e, 0xd6, 0x6a, 0x69, + 0xd9, 0x88, 0x01, 0xa8, 0x09, 0x3d, 0xb7, 0x2d, 0x39, 0xa4, 0x3d, 0x53, 0x30, 0x54, 0x81, 0xdf, + 0x83, 0x55, 0x0b, 0xc7, 0xc1, 0xed, 0x3b, 0x13, 0x4b, 0xf4, 0xf0, 0x14, 0x55, 0x6e, 0x82, 0x69, + 0x30, 0xff, 0x04, 0x40, 0xda, 0x23, 0xb1, 0xed, 0xf9, 0x23, 0x53, 0x6a, 0xdb, 0xe0, 0xeb, 0x2f, + 0xb7, 0xaa, 0xd7, 0x7b, 0x11, 0x03, 0x23, 0xc1, 0x0c, 0x59, 0x63, 0x6d, 0x9a, 0x75, 0xe9, 0x33, + 0xb1, 0xde, 0x8a, 0x18, 0x18, 0x09, 0x66, 0xbc, 0x07, 0xa5, 0x13, 0xcf, 0x1f, 0x4d, 0x1c, 0x53, + 0x9f, 0xb9, 0x1f, 0xbc, 0x24, 0xdf, 0x6d, 0x45, 0x4d, 0xb2, 0x27, 0x64, 0x15, 0xfb, 0xb8, 0x2b, + 0x0b, 0xfa, 0xb8, 0x9b, 0xbf, 0x08, 0x10, 0xb7, 0x90, 0xdf, 0x04, 0xbe, 0xe7, 0xb9, 0x72, 0xd8, + 0x3a, 0x3e, 0xf6, 0x37, 0xc4, 0x89, 0xe7, 0x8b, 0x2d, 0x13, 0x8f, 0xd7, 0x1b, 0xb0, 0x16, 0xc1, + 0x5b, 0x27, 0x52, 0xf8, 0x08, 0xa6, 0x25, 0xd0, 0x1d, 0x7a, 0xbe, 0x54, 0x3a, 0x1e, 0xfd, 0x7c, + 0xd2, 0x65, 0x39, 0x3c, 0xd2, 0x3b, 0xdd, 0x03, 0x96, 0x6f, 0xde, 0x03, 0x88, 0x87, 0x96, 0x6c, + 0x21, 0xfa, 0xf5, 0xd6, 0x43, 0x6d, 0x19, 0x51, 0xe9, 0xe1, 0x3b, 0x2c, 0xd3, 0xfc, 0x69, 0x06, + 0xaa, 0x89, 0x2e, 0xa5, 0x6d, 0xe6, 0x4d, 0x6f, 0xe2, 0x4a, 0x65, 0xa4, 0xd3, 0xcf, 0xa7, 0xa6, + 0x33, 0xc1, 0xc3, 0x7d, 0x0d, 0x6a, 0x54, 0xde, 0xb2, 0x03, 0x69, 0xbb, 0x7d, 0xc9, 0x72, 0x11, + 0x8a, 0x52, 0x0c, 0xf2, 0x11, 0xca, 0xbe, 0xa7, 0x41, 0x05, 0xce, 0x60, 0xf9, 0x50, 0xf8, 0x7d, + 0x11, 0x22, 0x91, 0x32, 0xac, 0x21, 0x11, 0x9a, 0x52, 0x86, 0x4d, 0x39, 0xec, 0x4e, 0x46, 0xac, + 0x8c, 0x4a, 0x25, 0x16, 0x5a, 0x67, 0xc2, 0x47, 0x5d, 0xa6, 0x82, 0xf5, 0x20, 0x00, 0x77, 0x83, + 0xe9, 0x32, 0x08, 0xb1, 0xf7, 0x6c, 0x97, 0x55, 0xa3, 0x82, 0x79, 0xce, 0x96, 0xb1, 0xfd, 0x64, + 0x3a, 0xb0, 0x5a, 0xe3, 0xbf, 0xe7, 0x20, 0x8f, 0x72, 0x1d, 0x6d, 0xdd, 0xa4, 0x10, 0x52, 0x7b, + 0x25, 0x09, 0xfa, 0x6c, 0xa7, 0x11, 0xf2, 0x4e, 0x9e, 0x46, 0xef, 0x43, 0xb5, 0x3f, 0x09, 0xa4, + 0x37, 0xa2, 0xa3, 0x58, 0x47, 0xbb, 0x6e, 0xce, 0x78, 0x8d, 0x68, 0x38, 0x8d, 0x24, 0x2a, 0x7f, + 0x17, 0x8a, 0x27, 0x6a, 0xd5, 0x2b, 0xbf, 0xd1, 0x17, 0x2e, 0x39, 0xad, 0xf5, 0xca, 0xd6, 0xc8, + 0xd8, 0x2f, 0x7b, 0x66, 0xc7, 0x26, 0x41, 0xfa, 0xd4, 0x2d, 0x46, 0xa7, 0xee, 0x2f, 0xc2, 0x8a, + 0xc0, 0x01, 0x3f, 0x74, 0xcc, 0xbe, 0x18, 0x09, 0x37, 0xdc, 0x66, 0xef, 0xbc, 0x44, 0x8f, 0x69, + 0xc6, 0xa8, 0xdb, 0x53, 0xbc, 0x50, 0xf2, 0xb8, 0x1e, 0x1e, 0xfe, 0xa1, 0x61, 0x5f, 0x36, 0x62, + 0x40, 0xf3, 0xcb, 0x5a, 0x5e, 0x96, 0x20, 0xd7, 0x0a, 0xfa, 0xda, 0x03, 0x22, 0x82, 0xbe, 0x32, + 0xaf, 0x36, 0x69, 0x38, 0x58, 0xb6, 0xf9, 0x16, 0x54, 0xa2, 0x1a, 0x70, 0xf1, 0xec, 0x7b, 0xb2, + 0x3b, 0x16, 0x7d, 0xfb, 0xc4, 0x16, 0x96, 0x5a, 0x9f, 0x5d, 0x69, 0xfa, 0x52, 0x39, 0x11, 0xdb, + 0xae, 0xc5, 0xb2, 0x8d, 0xdf, 0x2a, 0x43, 0x51, 0x1d, 0xbe, 0xba, 0xc3, 0x95, 0xa8, 0xc3, 0xdf, + 0x86, 0xb2, 0x37, 0x16, 0xbe, 0x29, 0x3d, 0x5f, 0x7b, 0x6e, 0xde, 0x7d, 0x99, 0xc3, 0x7c, 0xfd, + 0x40, 0x13, 0x1b, 0x11, 0x9b, 0xe9, 0xd5, 0x94, 0x9d, 0x5d, 0x4d, 0xf7, 0x81, 0x85, 0xe7, 0xf6, + 0xa1, 0x8f, 0x74, 0xf2, 0x42, 0xdb, 0xe1, 0x33, 0x70, 0xde, 0x83, 0x4a, 0xdf, 0x73, 0x2d, 0x3b, + 0xf2, 0xe2, 0xac, 0x3c, 0xfc, 0xda, 0x4b, 0xb5, 0x70, 0x33, 0xa4, 0x36, 0x62, 0x46, 0xfc, 0x0d, + 0x28, 0x9c, 0xe1, 0x32, 0xa3, 0xf5, 0x74, 0xf9, 0x22, 0x54, 0x48, 0xfc, 0x53, 0xa8, 0x7e, 0x6f, + 0x62, 0xf7, 0x4f, 0x0f, 0x92, 0x5e, 0xc2, 0xf7, 0x5f, 0xaa, 0x15, 0xdf, 0x8e, 0xe9, 0x8d, 0x24, + 0xb3, 0xc4, 0xd2, 0x2e, 0xfd, 0x09, 0x96, 0x76, 0x79, 0x76, 0x69, 0x1b, 0x50, 0x73, 0x45, 0x20, + 0x85, 0xb5, 0xad, 0x75, 0x35, 0xf8, 0x0c, 0xba, 0x5a, 0x9a, 0x45, 0xf3, 0x4b, 0x50, 0x0e, 0x27, + 0x9c, 0x17, 0x21, 0xbb, 0x8f, 0x46, 0x51, 0x11, 0xb2, 0x07, 0xbe, 0x5a, 0x6d, 0x2d, 0x5c, 0x6d, + 0xcd, 0x3f, 0xca, 0x40, 0x25, 0x1a, 0xf4, 0xb4, 0xe4, 0x6c, 0x7f, 0x6f, 0x62, 0x3a, 0x2c, 0x43, + 0xe6, 0xb2, 0x27, 0x55, 0x89, 0x84, 0xf5, 0x23, 0x0a, 0xd6, 0xfb, 0x2c, 0x47, 0x2a, 0x82, 0x08, + 0x02, 0x96, 0xe7, 0x1c, 0x56, 0x34, 0xf8, 0xc0, 0x57, 0xa8, 0x05, 0x14, 0x7c, 0xf8, 0x35, 0x04, + 0x14, 0x95, 0x46, 0x71, 0x2a, 0x94, 0x80, 0xdc, 0xf7, 0x24, 0x15, 0xca, 0xd8, 0xa8, 0x8e, 0xcb, + 0x2a, 0x58, 0xe7, 0xbe, 0x27, 0x3b, 0x28, 0x12, 0x23, 0xf3, 0xac, 0x1a, 0x56, 0x4f, 0x25, 0x92, + 0x88, 0x2d, 0xc7, 0xe9, 0xb8, 0xac, 0xa6, 0x3f, 0xa8, 0xd2, 0x0a, 0x72, 0x6c, 0x9f, 0x9b, 0x7d, + 0x24, 0x5f, 0x45, 0x09, 0x8b, 0x34, 0xba, 0xcc, 0x70, 0x4b, 0xb6, 0xcf, 0xed, 0x40, 0x06, 0x6c, + 0xad, 0xf9, 0x07, 0x19, 0xa8, 0x26, 0x26, 0x18, 0xcd, 0x3f, 0x42, 0xc4, 0xa3, 0x4c, 0x59, 0x83, + 0x9f, 0xe0, 0x30, 0xfa, 0x56, 0x78, 0x4c, 0xf5, 0x3c, 0xfc, 0x99, 0xc5, 0xfa, 0x7a, 0xde, 0xc8, + 0xf3, 0x7d, 0xef, 0xb9, 0x52, 0x7d, 0x76, 0xcd, 0x40, 0x3e, 0x13, 0xe2, 0x94, 0xe5, 0xb1, 0xab, + 0x9b, 0x13, 0xdf, 0x17, 0xae, 0x02, 0x14, 0xa8, 0x71, 0xe2, 0x5c, 0x95, 0x8a, 0xc8, 0x14, 0x91, + 0xe9, 0x1c, 0x64, 0x25, 0x14, 0x04, 0x1a, 0x5b, 0x41, 0xca, 0x88, 0x80, 0xe8, 0xaa, 0x58, 0xc1, + 0x43, 0x45, 0x79, 0x28, 0x0e, 0x4e, 0xb6, 0xcc, 0x8b, 0xa0, 0x35, 0xf0, 0x18, 0x4c, 0x03, 0xf7, + 0xbd, 0xe7, 0xac, 0xda, 0x98, 0x00, 0xc4, 0x36, 0x19, 0xda, 0xa2, 0xb8, 0x20, 0xa2, 0x18, 0x82, + 0x2e, 0xf1, 0x03, 0x00, 0xfc, 0x45, 0x98, 0xa1, 0x41, 0xfa, 0x12, 0x8a, 0x32, 0xd1, 0x19, 0x09, + 0x16, 0x8d, 0xbf, 0x02, 0x95, 0xe8, 0x03, 0xaf, 0x43, 0x89, 0x54, 0xda, 0xa8, 0xda, 0xb0, 0x88, + 0xfa, 0x99, 0xed, 0x5a, 0xe2, 0x9c, 0xe4, 0x4a, 0xc1, 0x50, 0x05, 0x6c, 0xe5, 0xd0, 0xb6, 0x2c, + 0xe1, 0x86, 0x91, 0x1e, 0x55, 0x9a, 0x17, 0x8f, 0xcf, 0xcf, 0x8d, 0xc7, 0x37, 0x7e, 0x09, 0xaa, + 0x09, 0xa3, 0xf1, 0xd2, 0x6e, 0x27, 0x1a, 0x96, 0x4d, 0x37, 0xec, 0x36, 0x54, 0xc2, 0x1c, 0x90, + 0x80, 0xce, 0xb6, 0x8a, 0x11, 0x03, 0x1a, 0xff, 0x22, 0x8b, 0x9a, 0x2c, 0x76, 0x6d, 0xda, 0xd0, + 0xdb, 0x86, 0x62, 0x20, 0x4d, 0x39, 0x09, 0x93, 0x19, 0x16, 0xdc, 0xa0, 0x5d, 0xa2, 0xd9, 0x59, + 0x32, 0x34, 0x35, 0xff, 0x10, 0x72, 0xd2, 0x1c, 0x68, 0x47, 0xe9, 0xeb, 0x8b, 0x31, 0xe9, 0x99, + 0x83, 0x9d, 0x25, 0x03, 0xe9, 0xf8, 0x2e, 0x94, 0xfb, 0xda, 0xb7, 0xa5, 0x85, 0xe2, 0x82, 0xb6, + 0x58, 0xe8, 0x11, 0xdb, 0x59, 0x32, 0x22, 0x0e, 0xfc, 0x5b, 0x90, 0x47, 0xed, 0x52, 0xe7, 0x7c, + 0x2c, 0x68, 0x63, 0xe2, 0x76, 0xd9, 0x59, 0x32, 0x88, 0x72, 0xa3, 0x04, 0x05, 0x92, 0xc1, 0x8d, + 0x3a, 0x14, 0x55, 0x5f, 0xa7, 0x47, 0xae, 0x71, 0x0b, 0x72, 0x3d, 0x73, 0x80, 0x1a, 0xbe, 0x6d, + 0x05, 0xda, 0x55, 0x82, 0x3f, 0x1b, 0xaf, 0xc4, 0x7e, 0xba, 0xa4, 0x0b, 0x38, 0x93, 0x72, 0x01, + 0x37, 0x8a, 0x90, 0xc7, 0x1a, 0x1b, 0xb7, 0xaf, 0xb2, 0x16, 0x1a, 0xff, 0x34, 0x87, 0x86, 0x85, + 0x14, 0xe7, 0x73, 0xdd, 0xdb, 0x1f, 0x43, 0x65, 0xec, 0x7b, 0x7d, 0x11, 0x04, 0x9e, 0xaf, 0x95, + 0xa3, 0x37, 0x5e, 0x1c, 0x7a, 0x5e, 0x3f, 0x0c, 0x69, 0x8c, 0x98, 0xbc, 0xf9, 0xef, 0xb2, 0x50, + 0x89, 0x3e, 0x28, 0x7b, 0x46, 0x8a, 0x73, 0xe5, 0xca, 0xdc, 0x13, 0xfe, 0xc8, 0xb4, 0x2d, 0x25, + 0x3d, 0x36, 0x87, 0x66, 0xa8, 0xe4, 0x7e, 0xe2, 0x4d, 0xe4, 0xe4, 0x58, 0x28, 0x17, 0xd6, 0x53, + 0x7b, 0x24, 0x3c, 0x96, 0xa7, 0xe0, 0x11, 0x2e, 0xec, 0xbe, 0xe3, 0x4d, 0x2c, 0x56, 0xc0, 0xf2, + 0x23, 0x3a, 0xde, 0xf6, 0xcc, 0x71, 0xa0, 0x64, 0xe6, 0x9e, 0xed, 0x7b, 0xac, 0x84, 0x44, 0xdb, + 0xf6, 0x60, 0x64, 0xb2, 0x32, 0x32, 0xeb, 0x3d, 0xb7, 0x25, 0x0a, 0xe1, 0x0a, 0xaa, 0xa9, 0x07, + 0x63, 0xe1, 0x76, 0xa5, 0x2f, 0x84, 0xdc, 0x33, 0xc7, 0xca, 0xa7, 0x69, 0x08, 0xcb, 0xb2, 0xa5, + 0x92, 0x9f, 0xdb, 0x66, 0x5f, 0x1c, 0x7b, 0xde, 0x29, 0x5b, 0x46, 0x41, 0xd3, 0x71, 0x03, 0x69, + 0x0e, 0x7c, 0x73, 0xa4, 0x64, 0x68, 0x4f, 0x38, 0x82, 0x4a, 0x2b, 0x54, 0xb7, 0x2d, 0x87, 0x93, + 0xe3, 0x47, 0x68, 0xf7, 0xad, 0xaa, 0x38, 0x93, 0x25, 0xc6, 0x02, 0x65, 0xe8, 0x32, 0x94, 0x37, + 0x6c, 0xc7, 0x3e, 0xb6, 0x1d, 0x9b, 0xad, 0x21, 0x6a, 0xfb, 0xbc, 0x6f, 0x3a, 0xb6, 0xe5, 0x9b, + 0xcf, 0x19, 0xc7, 0xc6, 0x3d, 0xf6, 0xbd, 0x53, 0x9b, 0x5d, 0x43, 0x44, 0x32, 0x03, 0xcf, 0xec, + 0xef, 0xb3, 0xeb, 0x14, 0x2b, 0x3b, 0x15, 0xb2, 0x3f, 0x3c, 0x31, 0x8f, 0xd9, 0x8d, 0xd8, 0xa5, + 0x77, 0xb3, 0xb1, 0x06, 0xab, 0x53, 0x51, 0xf9, 0x46, 0x49, 0x5b, 0x9f, 0x8d, 0x1a, 0x54, 0x13, + 0xe1, 0xd2, 0xc6, 0xab, 0x50, 0x0e, 0x83, 0xa9, 0x68, 0xa5, 0xdb, 0x81, 0x72, 0x03, 0xeb, 0x45, + 0x12, 0x95, 0x1b, 0xff, 0x39, 0x03, 0x45, 0x15, 0xc9, 0xe6, 0x1b, 0x51, 0xe6, 0x49, 0x66, 0x81, + 0xe8, 0xa5, 0x22, 0xd2, 0xb1, 0xdf, 0x28, 0xfd, 0xe4, 0x3a, 0x14, 0x1c, 0x32, 0xc7, 0xb5, 0xf8, + 0xa2, 0x42, 0x42, 0xda, 0xe4, 0x52, 0xd2, 0xe6, 0x36, 0x54, 0xcc, 0x89, 0xf4, 0x28, 0x48, 0xa7, + 0x23, 0x18, 0x31, 0xa0, 0xd9, 0x8a, 0xa2, 0xd1, 0xa1, 0x63, 0x92, 0x74, 0xc6, 0x9e, 0x2f, 0x84, + 0x72, 0x3a, 0x92, 0xad, 0x9d, 0xa5, 0x93, 0xc4, 0x1b, 0x8d, 0xcd, 0xbe, 0x24, 0x00, 0x9d, 0xb1, + 0x28, 0x6a, 0x59, 0x1e, 0xf7, 0xc0, 0xe6, 0xd0, 0x94, 0xcd, 0x13, 0x28, 0x1f, 0x7a, 0xc1, 0xf4, + 0x89, 0x5d, 0x82, 0x5c, 0xcf, 0x1b, 0x2b, 0xfd, 0x73, 0xc3, 0x93, 0xa4, 0x7f, 0xaa, 0x03, 0xfa, + 0x44, 0xaa, 0x25, 0x67, 0xd8, 0x83, 0xa1, 0x54, 0x76, 0x7a, 0xc7, 0x75, 0x85, 0xcf, 0x0a, 0x38, + 0xc3, 0x86, 0x18, 0xa3, 0xce, 0xcb, 0x8a, 0x38, 0xa7, 0x04, 0xdf, 0xb6, 0xfd, 0x40, 0xb2, 0x52, + 0xb3, 0x83, 0x67, 0xad, 0x3d, 0xa0, 0x23, 0x92, 0x7e, 0x10, 0xab, 0x25, 0x6c, 0x22, 0x15, 0x37, + 0x85, 0x8b, 0x2b, 0x90, 0x6c, 0x2b, 0x65, 0x18, 0x52, 0x05, 0x59, 0x3c, 0xdf, 0xa8, 0xfc, 0xf1, + 0x24, 0x90, 0xf6, 0xc9, 0x05, 0xcb, 0x35, 0x9f, 0x41, 0x2d, 0x95, 0xe4, 0xc4, 0xaf, 0x03, 0x4b, + 0x01, 0xb0, 0xe9, 0x4b, 0xfc, 0x16, 0x5c, 0x4b, 0x41, 0xf7, 0x6c, 0xcb, 0x22, 0x4f, 0xf0, 0xf4, + 0x87, 0xb0, 0x83, 0x1b, 0x15, 0x28, 0xf5, 0xd5, 0x1c, 0x36, 0x0f, 0xa1, 0x46, 0x93, 0xba, 0x27, + 0xa4, 0x79, 0xe0, 0x3a, 0x17, 0x7f, 0xe2, 0x4c, 0xb4, 0xe6, 0x57, 0xb4, 0xf9, 0x85, 0xd2, 0xe4, + 0xc4, 0xf7, 0x46, 0xc4, 0xab, 0x60, 0xd0, 0x6f, 0xe4, 0x2e, 0x3d, 0xbd, 0x32, 0xb2, 0xd2, 0x6b, + 0xfe, 0x8f, 0x2a, 0x94, 0x5a, 0xfd, 0x3e, 0x1a, 0x8c, 0x33, 0x35, 0xbf, 0x0b, 0xc5, 0xbe, 0xe7, + 0x9e, 0xd8, 0x03, 0x2d, 0xad, 0xa7, 0xf5, 0x46, 0x4d, 0x87, 0xcb, 0xf1, 0xc4, 0x1e, 0x18, 0x1a, + 0x19, 0xc9, 0xf4, 0x69, 0x53, 0xb8, 0x92, 0x4c, 0x89, 0xdc, 0xe8, 0x70, 0x79, 0x00, 0x79, 0xdb, + 0x3d, 0xf1, 0x74, 0xda, 0xe8, 0xe7, 0x2f, 0x21, 0xa2, 0xdc, 0x49, 0x42, 0x6c, 0xfc, 0xd7, 0x0c, + 0x14, 0x55, 0xd5, 0xfc, 0x55, 0x58, 0x11, 0x2e, 0x6e, 0xb5, 0x50, 0xd0, 0xeb, 0x3d, 0x36, 0x05, + 0x45, 0x95, 0x56, 0x43, 0xc4, 0xf1, 0x64, 0xa0, 0x3d, 0x33, 0x49, 0x10, 0x7f, 0x1f, 0x6e, 0xa9, + 0xe2, 0xa1, 0x2f, 0x7c, 0xe1, 0x08, 0x33, 0x10, 0x9b, 0x43, 0xd3, 0x75, 0x85, 0xa3, 0x8f, 0xfd, + 0xcb, 0x3e, 0xf3, 0x26, 0x2c, 0xab, 0x4f, 0xdd, 0xb1, 0xd9, 0x17, 0x81, 0xde, 0x4b, 0x29, 0x18, + 0xff, 0x2a, 0x14, 0x28, 0xab, 0xb6, 0x6e, 0x5d, 0x3d, 0x95, 0x0a, 0xab, 0xe1, 0x45, 0xe7, 0x52, + 0x0b, 0x40, 0x0d, 0x13, 0x9a, 0x64, 0x5a, 0x36, 0x7c, 0xf1, 0xca, 0x71, 0x25, 0xeb, 0x30, 0x41, + 0x84, 0xed, 0xb3, 0x84, 0x23, 0x28, 0xfd, 0x11, 0xcf, 0xcd, 0x2c, 0xc5, 0x5d, 0x52, 0xb0, 0xc6, + 0x7f, 0xc9, 0x43, 0x1e, 0x47, 0x18, 0x91, 0x87, 0xde, 0x48, 0x44, 0xde, 0x67, 0xa5, 0x88, 0xa4, + 0x60, 0xa8, 0xf8, 0x98, 0x2a, 0x01, 0x20, 0x42, 0x53, 0xa2, 0x65, 0x1a, 0x8c, 0x98, 0x63, 0xdf, + 0x3b, 0xb1, 0x9d, 0x18, 0x53, 0xab, 0x48, 0x53, 0x60, 0xfe, 0x35, 0xb8, 0x39, 0x32, 0xfd, 0x53, + 0x21, 0x69, 0x77, 0x3f, 0xf3, 0xfc, 0xd3, 0x00, 0x47, 0xae, 0x63, 0x69, 0xb7, 0xe5, 0x25, 0x5f, + 0xf9, 0x1b, 0xb0, 0xf6, 0x3c, 0x2c, 0x46, 0x75, 0x28, 0xc7, 0xe1, 0xec, 0x07, 0x14, 0xc6, 0x96, + 0x38, 0xb3, 0x89, 0x6f, 0x59, 0xe5, 0xd6, 0x86, 0x65, 0x5c, 0x4a, 0xa6, 0x1a, 0xc8, 0xae, 0xae, + 0x59, 0xc7, 0x9f, 0xd2, 0x50, 0x94, 0x9b, 0x2a, 0xe7, 0x28, 0xe8, 0x58, 0xe4, 0x77, 0xad, 0x18, + 0x31, 0x00, 0x17, 0x1a, 0x55, 0xf9, 0x54, 0x89, 0xdc, 0x9a, 0x32, 0x50, 0x13, 0x20, 0xc4, 0x90, + 0xa2, 0x3f, 0x0c, 0x2b, 0x51, 0x4e, 0xd1, 0x24, 0x88, 0xdf, 0x01, 0x18, 0x98, 0x52, 0x3c, 0x37, + 0x2f, 0x9e, 0xf8, 0x4e, 0x5d, 0xa8, 0x40, 0x4a, 0x0c, 0x41, 0x13, 0xd7, 0xf1, 0xfa, 0xa6, 0xd3, + 0x95, 0x9e, 0x6f, 0x0e, 0xc4, 0xa1, 0x29, 0x87, 0xf5, 0x81, 0x32, 0x71, 0xa7, 0xe1, 0xd8, 0x63, + 0x69, 0x8f, 0xc4, 0xa7, 0x9e, 0x2b, 0xea, 0x43, 0xd5, 0xe3, 0xb0, 0x8c, 0x2d, 0x31, 0x5d, 0xd3, + 0xb9, 0x90, 0x76, 0x1f, 0xfb, 0x62, 0xab, 0x96, 0x24, 0x40, 0xe4, 0x54, 0x10, 0x12, 0xc7, 0xb1, + 0x63, 0xd5, 0xbf, 0xab, 0xfa, 0x1a, 0x01, 0x70, 0x76, 0x85, 0x1c, 0x0a, 0x5f, 0x4c, 0x46, 0x2d, + 0xcb, 0xf2, 0x45, 0x10, 0xd4, 0x4f, 0xd5, 0xec, 0x4e, 0x81, 0x29, 0xf0, 0xdc, 0x9a, 0xc8, 0x61, + 0xe3, 0x0f, 0x33, 0x50, 0x6a, 0x8d, 0xc7, 0xb4, 0xd4, 0xea, 0x50, 0x32, 0xc7, 0xe3, 0x9d, 0x38, + 0x32, 0x19, 0x16, 0xf5, 0x97, 0xfd, 0x38, 0x3e, 0x19, 0x16, 0xf5, 0x17, 0xea, 0x71, 0x2e, 0xfa, + 0x42, 0x1d, 0xbd, 0x0d, 0x95, 0xbe, 0xca, 0xca, 0x6e, 0x29, 0x4f, 0x4e, 0xce, 0x88, 0x01, 0x38, + 0x0c, 0xe2, 0x7c, 0x6c, 0xfb, 0xa2, 0x25, 0x75, 0x38, 0x32, 0x2a, 0x53, 0xba, 0x55, 0xdf, 0x8b, + 0x92, 0x2d, 0x5e, 0xbf, 0x64, 0x77, 0x61, 0xfb, 0xd7, 0x77, 0x71, 0x7c, 0x5b, 0x63, 0xbb, 0x8b, + 0x04, 0x86, 0xa2, 0x53, 0x47, 0x7c, 0x8b, 0x02, 0x5d, 0x64, 0x68, 0xd3, 0x11, 0xaf, 0xca, 0xcd, + 0xb7, 0xa1, 0x96, 0xa2, 0xc1, 0x23, 0x8c, 0x5c, 0xe4, 0xe4, 0x50, 0xa9, 0x42, 0xe9, 0xe3, 0xc0, + 0x73, 0x5b, 0x87, 0x1d, 0x75, 0xa8, 0x6e, 0x4f, 0x1c, 0x87, 0x65, 0x9b, 0x07, 0x00, 0xf1, 0x5e, + 0xc6, 0x03, 0x52, 0x31, 0x63, 0x4b, 0xca, 0x7d, 0xe7, 0x5a, 0xb6, 0x3b, 0xd8, 0xd2, 0xdb, 0x97, + 0x65, 0x10, 0x48, 0x6e, 0x19, 0x61, 0x45, 0x40, 0x52, 0xe0, 0xa8, 0x24, 0x2c, 0x96, 0x6b, 0xfe, + 0xdf, 0x0c, 0x54, 0x13, 0x49, 0x23, 0x7f, 0x8a, 0x89, 0x2e, 0xd8, 0x77, 0x54, 0x90, 0x70, 0xa5, + 0xaa, 0xad, 0x1d, 0x95, 0x71, 0x1d, 0xeb, 0x9c, 0x16, 0xfc, 0xaa, 0x9c, 0x30, 0x09, 0xc8, 0x67, + 0x4a, 0x72, 0x69, 0x3e, 0xd4, 0x9e, 0xac, 0x2a, 0x94, 0x9e, 0xb8, 0xa7, 0xae, 0xf7, 0xdc, 0x55, + 0x9a, 0x09, 0x65, 0x2e, 0xa5, 0x62, 0xb0, 0x61, 0x72, 0x51, 0xae, 0xf9, 0xaf, 0xf3, 0x53, 0x49, + 0x7e, 0x6d, 0x28, 0x2a, 0xf3, 0x89, 0x34, 0xfb, 0xd9, 0xac, 0xac, 0x24, 0xb2, 0x8e, 0xf7, 0x25, + 0x40, 0x86, 0x26, 0x46, 0xbb, 0x26, 0x4a, 0x81, 0xcd, 0xce, 0x8d, 0x4b, 0xa6, 0x18, 0x85, 0xa7, + 0x51, 0x2a, 0x0b, 0x3c, 0xe2, 0xd0, 0xf8, 0x5b, 0x19, 0xb8, 0x3e, 0x0f, 0x25, 0x99, 0x2b, 0x9f, + 0x49, 0xe7, 0xca, 0x77, 0xa7, 0x72, 0xcf, 0xb3, 0xd4, 0x9b, 0x07, 0x2f, 0xd9, 0x88, 0x74, 0x26, + 0x7a, 0xf3, 0x77, 0x33, 0xb0, 0x36, 0xd3, 0xe7, 0x84, 0xe6, 0x06, 0x50, 0x54, 0x2b, 0x4b, 0xa5, + 0x86, 0x45, 0xc9, 0x3a, 0x2a, 0xd8, 0x42, 0x3a, 0x4d, 0xa0, 0xb2, 0x1f, 0x74, 0xb6, 0xbd, 0x32, + 0x1b, 0x70, 0xd6, 0xf0, 0xc8, 0x1c, 0x08, 0xe5, 0x98, 0x56, 0xea, 0xa5, 0x86, 0x14, 0x95, 0x6a, + 0xaf, 0x22, 0x42, 0xac, 0x44, 0x29, 0x67, 0x93, 0xb1, 0x63, 0xf7, 0xb1, 0x58, 0xe6, 0x0d, 0xb8, + 0xa9, 0xae, 0x5c, 0x68, 0x33, 0xfa, 0xa4, 0x37, 0xb4, 0x69, 0x73, 0xb0, 0x0a, 0xd6, 0x73, 0x38, + 0x39, 0x76, 0xec, 0x60, 0xc8, 0xa0, 0x69, 0xc0, 0xb5, 0x39, 0x1d, 0xa4, 0x26, 0x3f, 0xd5, 0xcd, + 0x5f, 0x01, 0xd8, 0x7a, 0x1a, 0x36, 0x9a, 0x65, 0x38, 0x87, 0x95, 0xad, 0xa7, 0x49, 0xee, 0x7a, + 0xf3, 0x3c, 0x45, 0x79, 0x1d, 0xb0, 0x5c, 0xf3, 0x97, 0x33, 0x61, 0x4e, 0x48, 0xe3, 0x2f, 0x43, + 0x4d, 0x35, 0xf8, 0xd0, 0xbc, 0x70, 0x3c, 0xd3, 0xe2, 0x6d, 0x58, 0x09, 0xa2, 0x4b, 0x41, 0x89, + 0x23, 0x7a, 0x5a, 0xf5, 0xe9, 0xa6, 0x90, 0x8c, 0x29, 0xa2, 0xd0, 0x34, 0xcc, 0xc6, 0x81, 0x24, + 0x4e, 0x46, 0xae, 0x49, 0x5b, 0x6e, 0x99, 0xcc, 0x56, 0xb3, 0xf9, 0x55, 0x58, 0xeb, 0xc6, 0xc7, + 0x99, 0xb2, 0x21, 0x70, 0x71, 0xa8, 0xb3, 0x70, 0x2b, 0x5c, 0x1c, 0xba, 0xd8, 0xfc, 0x67, 0x25, + 0x80, 0x38, 0x68, 0x36, 0x67, 0xcf, 0xcf, 0xcb, 0x01, 0x99, 0x09, 0x61, 0xe7, 0x5e, 0x3a, 0x84, + 0xfd, 0x7e, 0x64, 0xca, 0x28, 0x87, 0xfa, 0x74, 0x22, 0x7c, 0xdc, 0xa6, 0x69, 0x03, 0x26, 0x95, + 0x22, 0x55, 0x98, 0x4e, 0x91, 0xba, 0x3b, 0x9b, 0x4f, 0x39, 0x25, 0x8c, 0x62, 0x4f, 0x4d, 0x29, + 0xe5, 0xa9, 0x69, 0x40, 0xd9, 0x17, 0xa6, 0xe5, 0xb9, 0xce, 0x45, 0x18, 0x29, 0x0d, 0xcb, 0xfc, + 0x6d, 0x28, 0x48, 0xba, 0xd7, 0x54, 0xa6, 0xbd, 0xf3, 0x82, 0x89, 0x53, 0xb8, 0x28, 0xd9, 0xec, + 0x40, 0x27, 0x41, 0x2a, 0x3d, 0xa1, 0x6c, 0x24, 0x20, 0x7c, 0x1d, 0xb8, 0x8d, 0x66, 0xab, 0xe3, + 0x08, 0x6b, 0xe3, 0x62, 0x4b, 0x05, 0x30, 0x49, 0x93, 0x29, 0x1b, 0x73, 0xbe, 0x84, 0xf3, 0xbf, + 0x1c, 0xcf, 0x3f, 0x35, 0xf9, 0xcc, 0x0e, 0xb0, 0xa7, 0x35, 0x75, 0x60, 0x85, 0x65, 0xd4, 0x95, + 0xc2, 0x0d, 0xab, 0xc6, 0x92, 0x56, 0x6f, 0x9c, 0x05, 0x70, 0xc9, 0xd7, 0x70, 0x78, 0x95, 0xab, + 0x6a, 0x55, 0x1d, 0x91, 0x11, 0x80, 0x24, 0x79, 0xdf, 0x73, 0xe9, 0xd4, 0x65, 0x5a, 0x92, 0xeb, + 0x32, 0xf6, 0x77, 0xec, 0x4c, 0x7c, 0xd3, 0xa1, 0xaf, 0x6b, 0x4a, 0x92, 0xc7, 0x90, 0xe6, 0xef, + 0x67, 0x23, 0x73, 0xb1, 0x02, 0x85, 0x63, 0x33, 0xb0, 0xfb, 0xea, 0x74, 0xd3, 0x6a, 0x9e, 0x3a, + 0xdd, 0xa4, 0x67, 0x79, 0x2c, 0x8b, 0x96, 0x5f, 0x20, 0x74, 0x00, 0x2b, 0xbe, 0x45, 0xc6, 0xf2, + 0x28, 0x02, 0xc2, 0x95, 0xa4, 0xb2, 0xa4, 0x88, 0x94, 0xdc, 0x91, 0x56, 0x94, 0x7f, 0x4a, 0x8e, + 0x05, 0x3a, 0x62, 0x58, 0x19, 0x71, 0x5c, 0x4f, 0x0a, 0xe5, 0x8c, 0xa5, 0x75, 0xcf, 0x00, 0xd9, + 0x84, 0xd7, 0x22, 0x58, 0x15, 0x4d, 0xb1, 0x90, 0xa9, 0xf2, 0xa0, 0x06, 0x64, 0xa8, 0x2e, 0xe3, + 0xbe, 0x4f, 0x7f, 0x60, 0x35, 0x6c, 0x51, 0x7c, 0x39, 0x8d, 0xad, 0x20, 0x57, 0x93, 0x72, 0x77, + 0x56, 0xf1, 0xe7, 0x19, 0x65, 0xf4, 0x30, 0xac, 0xd5, 0x42, 0xb9, 0xb4, 0x86, 0x2d, 0x8b, 0x54, + 0x3b, 0xc6, 0xd1, 0xd2, 0x1c, 0x9b, 0x68, 0xf6, 0xd9, 0x63, 0xd3, 0x95, 0xec, 0x1a, 0x76, 0x75, + 0x6c, 0x9d, 0xb0, 0xeb, 0x48, 0xd2, 0x1f, 0x9a, 0x92, 0xdd, 0x40, 0x1c, 0xfc, 0xb5, 0x25, 0x7c, + 0x5c, 0x29, 0xec, 0x26, 0xe2, 0x48, 0x73, 0xc0, 0x6e, 0x35, 0x7f, 0x2d, 0xce, 0x00, 0x7f, 0x33, + 0x32, 0xc8, 0x16, 0xd9, 0x3e, 0x68, 0xb2, 0xcd, 0xdb, 0xcb, 0x6d, 0x58, 0xf3, 0xc5, 0xf7, 0x26, + 0x76, 0xea, 0x5e, 0x44, 0xee, 0xea, 0xc4, 0x9b, 0x59, 0x8a, 0xe6, 0x19, 0xac, 0x85, 0x85, 0x67, + 0xb6, 0x1c, 0x92, 0xe7, 0x8c, 0xbf, 0x9d, 0xb8, 0xb8, 0x91, 0x99, 0x7b, 0xe1, 0x2d, 0x62, 0x19, + 0x5f, 0xd4, 0x88, 0x22, 0x23, 0xd9, 0x05, 0x22, 0x23, 0xcd, 0xff, 0x93, 0x0c, 0xb5, 0x2b, 0x13, + 0xd5, 0x8a, 0x4c, 0xd4, 0xd9, 0xd0, 0x7b, 0x1c, 0xec, 0xc8, 0xbe, 0x4c, 0xb0, 0x63, 0x5e, 0x1a, + 0xcb, 0x07, 0x68, 0x31, 0xd1, 0xce, 0x7c, 0xba, 0x40, 0x20, 0x27, 0x85, 0xcb, 0x37, 0x28, 0x90, + 0x6e, 0x76, 0x55, 0x8e, 0x55, 0x61, 0xee, 0x35, 0xaa, 0x64, 0xc4, 0x5c, 0x63, 0x1a, 0x09, 0xaa, + 0x84, 0x1c, 0x2b, 0xce, 0x93, 0x63, 0x07, 0x28, 0xc7, 0x4a, 0xb1, 0x1c, 0x23, 0xef, 0x01, 0xc5, + 0xbd, 0xd4, 0xef, 0x90, 0x3d, 0xed, 0xf1, 0xb2, 0x31, 0x03, 0x47, 0x65, 0x6f, 0x34, 0x71, 0xa4, + 0xad, 0x43, 0x3b, 0xaa, 0x30, 0x7d, 0xcf, 0xb3, 0x32, 0x7b, 0xcf, 0xf3, 0x23, 0x80, 0x40, 0xe0, + 0xee, 0xd8, 0xb2, 0xfb, 0x52, 0x67, 0x62, 0xdd, 0xb9, 0xac, 0x6f, 0x3a, 0x20, 0x95, 0xa0, 0xc0, + 0xf6, 0x8f, 0xcc, 0x73, 0x0a, 0x52, 0xeb, 0x94, 0x91, 0xa8, 0x3c, 0x2d, 0xdd, 0x57, 0x66, 0xa5, + 0xfb, 0xdb, 0xa1, 0x9e, 0x7e, 0xfd, 0xca, 0xf9, 0x5d, 0x4f, 0xe9, 0xe6, 0x75, 0x28, 0x91, 0x15, + 0xe0, 0xf9, 0x74, 0x49, 0xa9, 0x62, 0x84, 0xc5, 0x94, 0x84, 0xbd, 0x99, 0x96, 0xb0, 0x0d, 0x0b, + 0x8a, 0x3a, 0xdc, 0x32, 0xed, 0x1a, 0x09, 0x1d, 0xb5, 0xd9, 0x84, 0xa3, 0x36, 0xca, 0xf7, 0xcd, + 0x25, 0xf3, 0x7d, 0xa7, 0xee, 0x31, 0x16, 0x66, 0xee, 0x31, 0x36, 0x3f, 0x85, 0x82, 0xb2, 0x09, + 0x20, 0x54, 0x47, 0x95, 0x2a, 0x8b, 0x9d, 0x62, 0x19, 0x7e, 0x1d, 0x58, 0x20, 0x48, 0xd7, 0x11, + 0x5d, 0x73, 0x24, 0x48, 0x48, 0x66, 0x79, 0x1d, 0xae, 0x2b, 0xdc, 0x20, 0xfd, 0x85, 0x14, 0x2e, + 0xc7, 0x3e, 0xf6, 0x4d, 0xff, 0x82, 0xe5, 0x9b, 0x1f, 0x51, 0xb2, 0x43, 0xb8, 0xa0, 0xaa, 0xd1, + 0xbd, 0x51, 0x25, 0x96, 0x2d, 0x2d, 0x7d, 0x28, 0x57, 0x46, 0xdb, 0xb7, 0x2a, 0x83, 0x90, 0x0c, + 0x48, 0xf2, 0x80, 0x2d, 0x27, 0xcf, 0xf8, 0x3f, 0xb5, 0xfd, 0xd6, 0xdc, 0x48, 0x68, 0x8c, 0xe9, + 0x94, 0xc0, 0xcc, 0xa2, 0x29, 0x81, 0xcd, 0xc7, 0xb0, 0x6a, 0xa4, 0x65, 0x3a, 0x7f, 0x1f, 0x4a, + 0xde, 0x38, 0xc9, 0xe7, 0x45, 0xeb, 0x32, 0x44, 0x6f, 0xfe, 0x4e, 0x06, 0x96, 0x3b, 0xae, 0x14, + 0xbe, 0x6b, 0x3a, 0xdb, 0x8e, 0x39, 0xe0, 0xef, 0x85, 0x52, 0x6a, 0xbe, 0xb7, 0x25, 0x89, 0x9b, + 0x16, 0x58, 0x8e, 0x0e, 0x2b, 0xf0, 0x1b, 0xb0, 0x26, 0x2c, 0x5b, 0x7a, 0xbe, 0xd2, 0x93, 0xc3, + 0xcc, 0xcd, 0xeb, 0xc0, 0x14, 0xb8, 0x4b, 0x5b, 0xa2, 0xa7, 0xa6, 0xb9, 0x0e, 0xd7, 0x53, 0xd0, + 0x50, 0x09, 0xce, 0xf2, 0xdb, 0x50, 0x8f, 0x4f, 0xa3, 0x2d, 0xcf, 0x95, 0x1d, 0xd7, 0x12, 0xe7, + 0xa4, 0x64, 0xb1, 0x5c, 0xf3, 0x57, 0x23, 0xf5, 0xee, 0xa9, 0xce, 0xeb, 0xf4, 0x3d, 0x2f, 0xbe, + 0x34, 0xac, 0x4b, 0x89, 0xcb, 0xe9, 0xd9, 0x05, 0x2e, 0xa7, 0x7f, 0x14, 0x5f, 0x30, 0x56, 0x07, + 0xc5, 0x2b, 0x73, 0x4f, 0x1f, 0x4a, 0x47, 0xd3, 0xda, 0x7d, 0x57, 0x24, 0x6e, 0x1b, 0xbf, 0xa5, + 0x4d, 0xba, 0xfc, 0x22, 0x5a, 0xb0, 0xca, 0xdc, 0x78, 0x77, 0xfa, 0x56, 0xcb, 0x62, 0x69, 0xa1, + 0x33, 0x8a, 0x2a, 0xbc, 0xb4, 0xa2, 0xfa, 0xcd, 0x29, 0xeb, 0xa9, 0x3c, 0xd7, 0x01, 0x79, 0xc5, + 0x9d, 0xdd, 0x6f, 0x42, 0x69, 0x68, 0x07, 0xd2, 0xf3, 0xd5, 0x3d, 0xf2, 0xd9, 0x7b, 0x6f, 0x89, + 0xd1, 0xda, 0x51, 0x88, 0x94, 0xc3, 0x17, 0x52, 0xf1, 0xef, 0xc0, 0x1a, 0x0d, 0xfc, 0x61, 0xac, + 0x35, 0x04, 0xf5, 0xea, 0xdc, 0xdc, 0xc9, 0x04, 0xab, 0x8d, 0x29, 0x12, 0x63, 0x96, 0x49, 0x63, + 0x00, 0x10, 0xcf, 0xcf, 0x8c, 0x14, 0xfb, 0x0c, 0xf7, 0xc8, 0x6f, 0x42, 0x31, 0x98, 0x1c, 0xc7, + 0xf1, 0x47, 0x5d, 0x6a, 0x9c, 0x43, 0x63, 0x46, 0x3b, 0x38, 0x14, 0xbe, 0x6a, 0xee, 0x95, 0x97, + 0xd9, 0x3f, 0x4a, 0x4e, 0xbc, 0x5a, 0x9c, 0x77, 0x2f, 0x99, 0xbd, 0x88, 0x73, 0x62, 0x05, 0x34, + 0xde, 0x85, 0x6a, 0x62, 0x50, 0x51, 0x32, 0x4f, 0x5c, 0xcb, 0x0b, 0x9d, 0xde, 0xf8, 0x5b, 0x5d, + 0xe6, 0xb3, 0x42, 0xb7, 0x37, 0xfd, 0x6e, 0x18, 0xc0, 0xa6, 0x07, 0xf0, 0x0a, 0x0b, 0xfb, 0x15, + 0xa8, 0x25, 0x54, 0xba, 0xc8, 0x21, 0x9a, 0x06, 0x36, 0xcf, 0xe0, 0xf3, 0x09, 0x76, 0x87, 0xc2, + 0x1f, 0xd9, 0x01, 0x1e, 0x24, 0xca, 0x58, 0x24, 0xd5, 0xda, 0x12, 0xae, 0xb4, 0x65, 0x28, 0x41, + 0xa3, 0x32, 0xff, 0x05, 0x28, 0x8c, 0x85, 0x3f, 0x0a, 0xb4, 0x14, 0x9d, 0x5e, 0x41, 0x73, 0xd9, + 0x06, 0x86, 0xa2, 0x69, 0xfe, 0x93, 0x0c, 0x94, 0xf7, 0x84, 0x34, 0x51, 0x77, 0xe0, 0x7b, 0x53, + 0xb5, 0xcc, 0xc6, 0xcc, 0x43, 0xd4, 0x75, 0x6d, 0xbe, 0xae, 0x77, 0x34, 0xbe, 0x2e, 0xef, 0x2c, + 0xc5, 0x0d, 0x6b, 0x6c, 0x40, 0x49, 0x83, 0x1b, 0xef, 0xc1, 0xea, 0x14, 0x26, 0x8d, 0x8b, 0xd2, + 0xed, 0xbb, 0x17, 0xa3, 0x30, 0xb1, 0x6b, 0xd9, 0x48, 0x03, 0x37, 0x2a, 0x50, 0x1a, 0x2b, 0x82, + 0xe6, 0xef, 0xdf, 0xa0, 0x74, 0x22, 0xfb, 0x04, 0x6d, 0xfa, 0x79, 0x27, 0xeb, 0x1d, 0x00, 0xe5, + 0xaf, 0xa3, 0xa4, 0x13, 0xe5, 0xa4, 0x4e, 0x40, 0xf8, 0x07, 0x51, 0x74, 0x21, 0x3f, 0x57, 0xa9, + 0x4a, 0x32, 0x9f, 0x0e, 0x31, 0xd4, 0xa1, 0x64, 0x07, 0xe4, 0x87, 0xd3, 0x89, 0x5a, 0x61, 0x91, + 0x7f, 0x03, 0x8a, 0xf6, 0x68, 0xec, 0xf9, 0x52, 0x87, 0x1f, 0xae, 0xe4, 0xda, 0x21, 0xcc, 0x9d, + 0x25, 0x43, 0xd3, 0x20, 0xb5, 0x38, 0x27, 0xea, 0xf2, 0x8b, 0xa9, 0xdb, 0xe7, 0x21, 0xb5, 0xa2, + 0xe1, 0xdf, 0x86, 0xda, 0x40, 0xe5, 0xa9, 0x2a, 0xc6, 0x5a, 0x88, 0xbc, 0x7e, 0x15, 0x93, 0x47, + 0x49, 0x82, 0x9d, 0x25, 0x23, 0xcd, 0x01, 0x59, 0xa2, 0x02, 0x2f, 0x02, 0xd9, 0xf3, 0x3e, 0xf6, + 0x6c, 0x97, 0xcc, 0xdd, 0x17, 0xb0, 0x34, 0x92, 0x04, 0xc8, 0x32, 0xc5, 0x81, 0x7f, 0x0d, 0x35, + 0x9e, 0x40, 0xea, 0xab, 0xfc, 0x77, 0xaf, 0xe2, 0xd4, 0x13, 0x81, 0xbe, 0x84, 0x1f, 0x48, 0x7e, + 0x0e, 0x8d, 0xc4, 0x26, 0xd1, 0x95, 0xb4, 0xc6, 0x63, 0xdf, 0x43, 0x9b, 0xb9, 0x46, 0xdc, 0xbe, + 0x76, 0x15, 0xb7, 0xc3, 0x4b, 0xa9, 0x77, 0x96, 0x8c, 0x2b, 0x78, 0xf3, 0x1e, 0x5a, 0x76, 0xba, + 0x0b, 0xbb, 0xc2, 0x3c, 0x0b, 0x1f, 0x02, 0xb8, 0xbf, 0xd0, 0x28, 0x10, 0xc5, 0xce, 0x92, 0x31, + 0xc5, 0x83, 0xff, 0x12, 0xac, 0xa5, 0xea, 0xa4, 0xbb, 0xbf, 0xea, 0x99, 0x80, 0xaf, 0x2e, 0xdc, + 0x0d, 0x24, 0xda, 0x59, 0x32, 0x66, 0x39, 0xf1, 0x09, 0x7c, 0x6e, 0xb6, 0x4b, 0x5b, 0xa2, 0xef, + 0xd8, 0xae, 0xd0, 0x2f, 0x0a, 0xbc, 0xfb, 0x72, 0xa3, 0xa5, 0x89, 0x77, 0x96, 0x8c, 0xcb, 0x39, + 0xf3, 0xbf, 0x0a, 0xb7, 0xc7, 0x73, 0x45, 0x8c, 0x12, 0x5d, 0xfa, 0x41, 0x82, 0xf7, 0x17, 0xac, + 0x79, 0x86, 0x7e, 0x67, 0xc9, 0xb8, 0x92, 0x3f, 0xea, 0xce, 0x64, 0x41, 0xeb, 0x74, 0x7a, 0x55, + 0xa0, 0xd8, 0x74, 0xdf, 0xd9, 0x11, 0xa6, 0x15, 0x45, 0x48, 0x62, 0x40, 0xe3, 0x7f, 0x65, 0xa0, + 0xa8, 0xd7, 0xfb, 0xed, 0x28, 0x47, 0x22, 0x12, 0xdd, 0x31, 0x80, 0x7f, 0x08, 0x15, 0xe1, 0xfb, + 0x9e, 0xbf, 0xe9, 0x59, 0x61, 0x7a, 0xe9, 0xb4, 0x97, 0x59, 0xf1, 0x59, 0x6f, 0x87, 0x68, 0x46, + 0x4c, 0xc1, 0x3f, 0x00, 0x50, 0xfb, 0xbc, 0x17, 0xdf, 0x8a, 0x6a, 0xcc, 0xa7, 0x57, 0x41, 0xb7, + 0x18, 0x3b, 0x76, 0xcb, 0x85, 0x11, 0xaf, 0xb0, 0x18, 0x19, 0x9c, 0x85, 0x84, 0xc1, 0x79, 0x5b, + 0xfb, 0x11, 0xc8, 0xbd, 0xa2, 0xef, 0x06, 0x46, 0x80, 0xc6, 0xef, 0x65, 0xa0, 0xa8, 0x84, 0x07, + 0x6f, 0xcf, 0xf6, 0xe8, 0xb5, 0x17, 0xcb, 0x9c, 0xf5, 0xe9, 0x9e, 0x7d, 0x03, 0x40, 0xc9, 0xa0, + 0x44, 0xcf, 0x6e, 0x4f, 0xf1, 0xd1, 0xa4, 0x61, 0x42, 0x77, 0x8c, 0xdf, 0x7c, 0xa8, 0xee, 0xaf, + 0x91, 0x4b, 0xf8, 0xc9, 0xee, 0x2e, 0x5b, 0xe2, 0x6b, 0x50, 0x7b, 0xb2, 0xff, 0x78, 0xff, 0xe0, + 0xd9, 0xfe, 0x51, 0xdb, 0x30, 0x0e, 0x0c, 0xe5, 0x19, 0xde, 0x68, 0x6d, 0x1d, 0x75, 0xf6, 0x0f, + 0x9f, 0xf4, 0x58, 0xb6, 0xf1, 0x2f, 0x33, 0x50, 0x4b, 0xc9, 0xae, 0x3f, 0xdb, 0xa9, 0x4b, 0x0c, + 0x7f, 0x6e, 0xfe, 0xf0, 0xe7, 0x2f, 0x1b, 0xfe, 0xc2, 0xf4, 0xf0, 0xff, 0x56, 0x06, 0x6a, 0x29, + 0x19, 0x99, 0xe4, 0x9e, 0x49, 0x73, 0x4f, 0x9e, 0xf4, 0xd9, 0xa9, 0x93, 0xbe, 0x09, 0xcb, 0xe1, + 0xef, 0xfd, 0xd8, 0xe3, 0x90, 0x82, 0x25, 0x71, 0xe8, 0x02, 0x49, 0x3e, 0x8d, 0x43, 0x97, 0x48, + 0xae, 0x6e, 0x2d, 0x5d, 0x98, 0x0d, 0xe8, 0x3d, 0x81, 0xc6, 0xe5, 0x12, 0xf4, 0x8a, 0x2e, 0x3c, + 0x82, 0xea, 0x38, 0xde, 0xa6, 0x2f, 0xa7, 0x96, 0x24, 0x29, 0x5f, 0xd0, 0xce, 0xdf, 0xce, 0xc0, + 0x4a, 0x5a, 0xe6, 0xfe, 0xb9, 0x1e, 0xd6, 0x7f, 0x9e, 0x81, 0xb5, 0x19, 0x49, 0x7e, 0xa5, 0x62, + 0x37, 0xdd, 0xae, 0xec, 0x02, 0xed, 0xca, 0xcd, 0x69, 0xd7, 0xe5, 0x92, 0xe4, 0xea, 0x16, 0x77, + 0xe1, 0x73, 0x97, 0x9e, 0x09, 0x57, 0x0c, 0x75, 0x8a, 0x69, 0x6e, 0x9a, 0xe9, 0x6f, 0x66, 0xe0, + 0xf6, 0x55, 0xf2, 0xfe, 0xff, 0xfb, 0xba, 0x9a, 0x6e, 0x61, 0xf3, 0xbd, 0x28, 0x75, 0xa2, 0x0a, + 0x25, 0xfd, 0x4e, 0x97, 0x4e, 0x5d, 0x1f, 0x7a, 0xcf, 0x5d, 0xe5, 0x89, 0x36, 0x84, 0xa9, 0x5f, + 0x32, 0x30, 0xc4, 0xd8, 0xb1, 0x29, 0x46, 0x7a, 0x0b, 0xa0, 0x45, 0x76, 0x5d, 0x78, 0xb1, 0x68, + 0x73, 0xf7, 0xa0, 0xdb, 0x66, 0x4b, 0x49, 0x25, 0xf6, 0xd3, 0x50, 0x10, 0x37, 0x0f, 0xa1, 0x18, + 0x5f, 0xf5, 0xd8, 0x33, 0xfd, 0x53, 0x4b, 0x45, 0x22, 0x97, 0xa1, 0x7c, 0xa8, 0x4d, 0x28, 0x55, + 0xd5, 0xc7, 0xdd, 0x83, 0x7d, 0xe5, 0xf4, 0xde, 0x3a, 0xe8, 0xa9, 0x0b, 0x23, 0xdd, 0xa7, 0x8f, + 0x54, 0x48, 0xec, 0x91, 0xd1, 0x3a, 0xdc, 0x39, 0x22, 0x8c, 0x42, 0xf3, 0x37, 0xf2, 0xe1, 0xa9, + 0xd6, 0x34, 0x74, 0x8c, 0x13, 0xa0, 0x88, 0xd2, 0xdc, 0xd3, 0x8c, 0xa3, 0x6a, 0x28, 0xc9, 0xb9, + 0x7d, 0xae, 0xfc, 0x10, 0x2c, 0xcb, 0x8b, 0x90, 0x3d, 0x3c, 0x56, 0xb9, 0x57, 0x3b, 0x72, 0xe4, + 0xa8, 0x9b, 0xa6, 0xbd, 0x73, 0xc9, 0x0a, 0xf8, 0x63, 0x33, 0x38, 0x63, 0xc5, 0xe6, 0xbf, 0xca, + 0x41, 0x25, 0x12, 0x95, 0x2f, 0x23, 0xba, 0x39, 0x87, 0x95, 0xce, 0x7e, 0xaf, 0x6d, 0xec, 0xb7, + 0x76, 0x35, 0x4a, 0x8e, 0x5f, 0x83, 0xd5, 0xed, 0xce, 0x6e, 0xfb, 0x68, 0xf7, 0xa0, 0xb5, 0xa5, + 0x81, 0x65, 0x7e, 0x13, 0x78, 0x67, 0xef, 0xf0, 0xc0, 0xe8, 0x1d, 0x75, 0xba, 0x47, 0x9b, 0xad, + 0xfd, 0xcd, 0xf6, 0x6e, 0x7b, 0x8b, 0x15, 0xf9, 0x2b, 0x70, 0x77, 0xff, 0xa0, 0xd7, 0x39, 0xd8, + 0x3f, 0xda, 0x3f, 0x38, 0x3a, 0xd8, 0xf8, 0xb8, 0xbd, 0xd9, 0xeb, 0x1e, 0x75, 0xf6, 0x8f, 0x90, + 0xeb, 0x23, 0xa3, 0x85, 0x5f, 0x58, 0x81, 0xdf, 0x85, 0xdb, 0x1a, 0xab, 0xdb, 0x36, 0x9e, 0xb6, + 0x0d, 0x64, 0xf2, 0x64, 0xbf, 0xf5, 0xb4, 0xd5, 0xd9, 0x6d, 0x6d, 0xec, 0xb6, 0xd9, 0x32, 0xbf, + 0x03, 0x0d, 0x8d, 0x61, 0xb4, 0x7a, 0xed, 0xa3, 0xdd, 0xce, 0x5e, 0xa7, 0x77, 0xd4, 0xfe, 0xce, + 0x66, 0xbb, 0xbd, 0xd5, 0xde, 0x62, 0x35, 0xfe, 0x3a, 0x7c, 0x99, 0x1a, 0xa5, 0x1b, 0x91, 0xae, + 0xec, 0xd3, 0xce, 0xe1, 0x51, 0xcb, 0xd8, 0xdc, 0xe9, 0x3c, 0x6d, 0xb3, 0x15, 0xfe, 0x1a, 0x7c, + 0xe9, 0x72, 0xd4, 0xad, 0x8e, 0xd1, 0xde, 0xec, 0x1d, 0x18, 0x9f, 0xb0, 0x35, 0xfe, 0x05, 0xf8, + 0xdc, 0x4e, 0x6f, 0x6f, 0xf7, 0xe8, 0x99, 0x71, 0xb0, 0xff, 0xe8, 0x88, 0x7e, 0x76, 0x7b, 0xc6, + 0x93, 0xcd, 0xde, 0x13, 0xa3, 0xcd, 0x80, 0x37, 0xe0, 0xe6, 0xe1, 0xc6, 0xd1, 0xfe, 0x41, 0xef, + 0xa8, 0xb5, 0xff, 0xc9, 0xc6, 0xee, 0xc1, 0xe6, 0xe3, 0xa3, 0xed, 0x03, 0x63, 0xaf, 0xd5, 0x63, + 0x55, 0xfe, 0x15, 0x78, 0x6d, 0xb3, 0xfb, 0x54, 0x37, 0xf3, 0x60, 0xfb, 0xc8, 0x38, 0x78, 0xd6, + 0x3d, 0x3a, 0x30, 0x8e, 0x8c, 0xf6, 0x2e, 0xf5, 0xb9, 0x1b, 0xb7, 0xbd, 0xc4, 0x6f, 0x43, 0xbd, + 0xb3, 0xdf, 0x7d, 0xb2, 0xbd, 0xdd, 0xd9, 0xec, 0xb4, 0xf7, 0x7b, 0x47, 0x87, 0x6d, 0x63, 0xaf, + 0xd3, 0xed, 0x22, 0x1a, 0xab, 0x34, 0xbf, 0x05, 0xc5, 0x8e, 0x7b, 0x66, 0x4b, 0xda, 0x5f, 0x7a, + 0x31, 0x6a, 0x8b, 0x2b, 0x2c, 0xd2, 0xb6, 0xb0, 0x07, 0x2e, 0xbd, 0xa0, 0x40, 0xbb, 0x6b, 0xd9, + 0x88, 0x01, 0xcd, 0xdf, 0xcb, 0x41, 0x4d, 0xb1, 0x08, 0x2d, 0xb8, 0x7b, 0xb0, 0xaa, 0x5d, 0xa1, + 0x9d, 0xb4, 0x08, 0x9b, 0x06, 0xd3, 0xd3, 0x64, 0x0a, 0x94, 0x10, 0x64, 0x49, 0x10, 0xbf, 0x09, + 0x45, 0xb3, 0xef, 0xa0, 0x19, 0xa8, 0xe2, 0x95, 0xba, 0xf4, 0x59, 0x65, 0x17, 0xca, 0x45, 0x85, + 0xd8, 0xf7, 0xdc, 0xcd, 0xe8, 0x12, 0x4d, 0x0a, 0xc6, 0x3f, 0x85, 0x5b, 0x51, 0xb9, 0xed, 0xf6, + 0xfd, 0x8b, 0x71, 0xf4, 0x76, 0x60, 0x69, 0xae, 0x33, 0x61, 0xdb, 0x76, 0x44, 0x0a, 0xd1, 0xb8, + 0x8c, 0x01, 0x7f, 0x04, 0x60, 0xd3, 0x60, 0x91, 0x7e, 0x34, 0xff, 0xa6, 0x78, 0x6a, 0x34, 0x75, + 0x49, 0xab, 0x81, 0xd1, 0x6f, 0x3c, 0x20, 0x06, 0x28, 0x77, 0x1f, 0xeb, 0xa7, 0x06, 0x97, 0x8d, + 0xa8, 0xdc, 0x7c, 0x00, 0x10, 0x53, 0x71, 0x06, 0xcb, 0xa8, 0x5b, 0xb4, 0x82, 0x3d, 0x31, 0x3a, + 0x16, 0xbe, 0xca, 0x5b, 0x54, 0x90, 0x47, 0x48, 0xc1, 0x32, 0xcd, 0x3f, 0xca, 0x24, 0xec, 0x70, + 0x65, 0x67, 0x5f, 0x79, 0x02, 0xcd, 0x8b, 0x09, 0xa1, 0x25, 0xac, 0x07, 0x55, 0x2b, 0x46, 0xba, + 0xc8, 0x0f, 0x81, 0xdb, 0xb3, 0x43, 0x99, 0x5f, 0x70, 0x28, 0xe7, 0xd0, 0x4e, 0xbb, 0xf4, 0x0b, + 0xb3, 0x2e, 0xfd, 0x3b, 0x00, 0x03, 0xc7, 0x3b, 0xd6, 0x71, 0xc5, 0xa2, 0xce, 0x74, 0x8a, 0x20, + 0x4d, 0x07, 0xca, 0xe1, 0xbb, 0x89, 0xb8, 0xc6, 0xe8, 0xe5, 0xc4, 0xc8, 0xc1, 0xa9, 0x4a, 0x7c, + 0x07, 0x56, 0x44, 0xba, 0xcd, 0xd9, 0x05, 0xdb, 0x3c, 0x45, 0xd7, 0xfc, 0x3a, 0xac, 0xcd, 0x20, + 0xe1, 0x20, 0x8e, 0x4d, 0x19, 0x3d, 0x9e, 0x80, 0xbf, 0x67, 0xc3, 0xf5, 0xcd, 0xff, 0x98, 0x85, + 0xe5, 0x3d, 0xd3, 0xb5, 0x4f, 0x44, 0x20, 0xc3, 0xd6, 0x06, 0xfd, 0xa1, 0x18, 0x99, 0x61, 0x6b, + 0x55, 0x49, 0x7b, 0x3d, 0xb2, 0xc9, 0x78, 0xc2, 0x4c, 0xf8, 0x09, 0x77, 0xd3, 0x44, 0x0e, 0xa3, + 0xfb, 0x04, 0xba, 0x84, 0x73, 0xe7, 0xd8, 0x7d, 0xe1, 0x06, 0xe1, 0x8e, 0x09, 0x8b, 0x71, 0xf6, + 0x4e, 0xf1, 0x8a, 0xec, 0x9d, 0xd2, 0xec, 0xf8, 0xdf, 0x85, 0x6a, 0xd0, 0xf7, 0x85, 0x70, 0x83, + 0xa1, 0x27, 0xc3, 0x37, 0x37, 0x93, 0x20, 0x4a, 0x1e, 0xf4, 0x9e, 0xbb, 0xb8, 0xc6, 0x77, 0x6d, + 0xf7, 0x54, 0xe7, 0xc4, 0xa5, 0x60, 0xb8, 0x06, 0xc9, 0xe7, 0x63, 0x7f, 0x5f, 0x90, 0xbf, 0xa1, + 0x60, 0x44, 0x65, 0xf2, 0xea, 0x98, 0x52, 0x0c, 0x3c, 0xdf, 0x16, 0xca, 0xb5, 0x59, 0x31, 0x12, + 0x10, 0xa4, 0x75, 0x4c, 0x77, 0x30, 0x31, 0x07, 0x42, 0x87, 0xbf, 0xa3, 0x72, 0xf3, 0x0f, 0x0b, + 0x00, 0x6a, 0x37, 0x04, 0x43, 0x7b, 0x4c, 0xa1, 0x17, 0x5b, 0x67, 0x51, 0xd7, 0x0c, 0xfa, 0xcd, + 0xdf, 0x4f, 0x5d, 0x70, 0x98, 0x0d, 0x96, 0xc6, 0xe4, 0xd3, 0x2e, 0x21, 0x1c, 0x1c, 0x53, 0x0a, + 0x9d, 0x38, 0x45, 0xe3, 0x9f, 0x37, 0x92, 0x20, 0x4a, 0x16, 0x34, 0xa5, 0x68, 0xbb, 0x96, 0x72, + 0x39, 0xe5, 0x8d, 0xa8, 0x4c, 0x57, 0xa4, 0x82, 0xd6, 0x44, 0x7a, 0x86, 0x70, 0xc5, 0xf3, 0xe8, + 0xf6, 0x5f, 0x0c, 0xe2, 0x7b, 0x50, 0x1b, 0x9b, 0x17, 0x23, 0xe1, 0xca, 0x3d, 0x21, 0x87, 0x9e, + 0xa5, 0xb3, 0x9c, 0x5e, 0xbb, 0xbc, 0x81, 0x87, 0x49, 0x74, 0x23, 0x4d, 0x8d, 0x6b, 0xc2, 0x0d, + 0x68, 0x97, 0xa8, 0x69, 0xd4, 0x25, 0xbe, 0x01, 0xa0, 0x7e, 0x25, 0x24, 0xd5, 0x8c, 0x17, 0xca, + 0x1c, 0x89, 0x40, 0xf8, 0x67, 0xb6, 0x92, 0xae, 0x4a, 0x48, 0xc5, 0x54, 0x28, 0x8b, 0x27, 0x81, + 0xf0, 0xdb, 0x23, 0xd3, 0x76, 0xf4, 0x04, 0xc7, 0x00, 0xfe, 0x0e, 0xdc, 0x08, 0x26, 0xc7, 0xb8, + 0x66, 0x8e, 0x45, 0xcf, 0xdb, 0x17, 0xcf, 0x03, 0x47, 0x48, 0x29, 0x7c, 0x9d, 0x49, 0x31, 0xff, + 0x63, 0x73, 0x10, 0xa9, 0x61, 0xf4, 0xbe, 0x0b, 0xfe, 0x8a, 0xd3, 0xb5, 0x22, 0x90, 0xce, 0x65, + 0x63, 0x19, 0x14, 0x7f, 0x0a, 0xa4, 0x53, 0xdd, 0xb2, 0xfc, 0xcb, 0xf0, 0xc5, 0x14, 0x92, 0xa1, + 0x02, 0xd3, 0xc1, 0xb6, 0xed, 0x9a, 0x8e, 0xfd, 0x7d, 0x95, 0x26, 0x90, 0x6b, 0x8e, 0xa1, 0x96, + 0x1a, 0x38, 0xba, 0xae, 0x4a, 0xbf, 0x74, 0xbe, 0x0f, 0x83, 0x65, 0x55, 0xee, 0x4a, 0xdf, 0xa6, + 0x88, 0x4b, 0x04, 0xd9, 0xc4, 0x7d, 0xee, 0xb1, 0x2c, 0xbf, 0x0e, 0x4c, 0x41, 0x3a, 0xae, 0x39, + 0x1e, 0xb7, 0xc6, 0x63, 0x47, 0xb0, 0x1c, 0x5d, 0x05, 0x8e, 0xa1, 0xea, 0x9a, 0x03, 0xcb, 0x37, + 0xbf, 0x03, 0xb7, 0x68, 0x64, 0x9e, 0x0a, 0x3f, 0x32, 0xb4, 0x75, 0x5f, 0x6f, 0xc0, 0x9a, 0xfa, + 0xb5, 0xef, 0x49, 0xf5, 0x99, 0x94, 0x4f, 0x0e, 0x2b, 0x0a, 0x8c, 0xba, 0x57, 0x57, 0xd0, 0x05, + 0xdf, 0x08, 0x16, 0xe1, 0x65, 0x9b, 0x7f, 0x50, 0x04, 0x1e, 0x2f, 0x88, 0x9e, 0x2d, 0xfc, 0x2d, + 0x53, 0x9a, 0x09, 0x4f, 0x69, 0xed, 0xd2, 0x58, 0xff, 0x8b, 0x33, 0xf5, 0x6e, 0x42, 0xd1, 0x0e, + 0xd0, 0x34, 0xd4, 0x09, 0xca, 0xba, 0xc4, 0x77, 0x01, 0xc6, 0xc2, 0xb7, 0x3d, 0x8b, 0x56, 0x50, + 0x61, 0xee, 0x3d, 0x93, 0xd9, 0x46, 0xad, 0x1f, 0x46, 0x34, 0x46, 0x82, 0x1e, 0xdb, 0xa1, 0x4a, + 0x2a, 0x72, 0x5e, 0xa4, 0x46, 0x27, 0x41, 0xfc, 0x4d, 0xb8, 0x36, 0xf6, 0xed, 0xbe, 0x50, 0xd3, + 0xf1, 0x24, 0xb0, 0x36, 0xe9, 0x55, 0xc4, 0x12, 0x61, 0xce, 0xfb, 0x84, 0x2b, 0xd0, 0x74, 0xc9, + 0x60, 0x0a, 0x28, 0x56, 0xac, 0xaf, 0xc4, 0xab, 0x14, 0xde, 0x9a, 0x31, 0xff, 0x23, 0xbf, 0x0f, + 0x4c, 0x7f, 0xd8, 0xb3, 0xdd, 0x5d, 0xe1, 0x0e, 0xe4, 0x90, 0x16, 0x77, 0xcd, 0x98, 0x81, 0x93, + 0x04, 0x53, 0x6f, 0x4f, 0xa9, 0x38, 0x52, 0xc5, 0x88, 0xca, 0xea, 0x99, 0x05, 0xc7, 0xf3, 0xbb, + 0xd2, 0xd7, 0xb9, 0xc8, 0x51, 0x19, 0x75, 0xa8, 0x80, 0xda, 0x7a, 0xe8, 0x7b, 0xd6, 0x84, 0xa2, + 0x1c, 0x4a, 0x88, 0x4d, 0x83, 0x63, 0xcc, 0x3d, 0xd3, 0xd5, 0xe9, 0x92, 0xb5, 0x24, 0x66, 0x04, + 0x26, 0x9b, 0xd0, 0x0b, 0x62, 0x86, 0xab, 0xda, 0x26, 0x4c, 0xc0, 0x34, 0x4e, 0xcc, 0x8a, 0x45, + 0x38, 0x31, 0x1f, 0xea, 0xbf, 0xe5, 0x7b, 0xb6, 0x15, 0xf3, 0x52, 0x99, 0x3b, 0x33, 0xf0, 0x04, + 0x6e, 0xcc, 0x93, 0xa7, 0x70, 0x63, 0xbe, 0xd7, 0xa1, 0xe0, 0x9d, 0x9c, 0x08, 0x9f, 0x9e, 0x1a, + 0xad, 0x18, 0xaa, 0xd0, 0xfc, 0x61, 0x06, 0x20, 0x5e, 0x12, 0xb8, 0x11, 0xe2, 0x52, 0xbc, 0xf1, + 0x6f, 0xc1, 0xb5, 0x24, 0xd8, 0xd1, 0x89, 0xb0, 0xb4, 0x1b, 0xe2, 0x0f, 0x5b, 0xe6, 0x45, 0xc0, + 0xb2, 0xfa, 0xaa, 0xba, 0x86, 0x3d, 0x13, 0x82, 0xb2, 0x0a, 0xaf, 0x03, 0x8b, 0x81, 0x74, 0xff, + 0x30, 0x60, 0xf9, 0x34, 0xea, 0x27, 0xc2, 0xf4, 0x03, 0x56, 0x68, 0xee, 0x40, 0x51, 0x85, 0xc0, + 0xe6, 0x04, 0xaf, 0x5f, 0x2e, 0x13, 0xe5, 0x6f, 0x67, 0x00, 0xb6, 0x54, 0x9e, 0x38, 0x9e, 0xed, + 0x73, 0x72, 0x02, 0xe6, 0xe9, 0x59, 0xa6, 0x65, 0x51, 0xbe, 0x7d, 0x2e, 0x7a, 0xe7, 0x08, 0x8b, + 0xb8, 0x9e, 0xcc, 0x30, 0x73, 0x4c, 0xed, 0xc4, 0xa8, 0xac, 0x8e, 0x95, 0x4d, 0xcf, 0x75, 0x45, + 0x1f, 0x0f, 0xa5, 0xe8, 0x58, 0x89, 0x40, 0xcd, 0x1f, 0x64, 0xa1, 0xb2, 0x39, 0x34, 0xa5, 0x7a, + 0x16, 0xe8, 0x5b, 0x50, 0x1e, 0x89, 0x20, 0x30, 0x07, 0x22, 0xd0, 0x21, 0x9f, 0xe9, 0x78, 0x6d, + 0x84, 0xbb, 0xfe, 0xc4, 0xf5, 0x85, 0x69, 0xa9, 0xb7, 0x90, 0x22, 0x2a, 0xc5, 0xc1, 0x95, 0x91, + 0x49, 0xfe, 0x12, 0x1c, 0xdc, 0xe8, 0xe1, 0x62, 0xc7, 0x0c, 0x14, 0x4a, 0xe4, 0x6e, 0x4b, 0x82, + 0x1a, 0x7b, 0x50, 0x4d, 0x90, 0xf2, 0x57, 0xa0, 0xe6, 0x39, 0x96, 0x08, 0xd4, 0x6d, 0xc8, 0xf8, + 0x01, 0xc9, 0x14, 0x90, 0x12, 0x37, 0x70, 0x3f, 0x0b, 0x5f, 0x47, 0xef, 0xc2, 0x62, 0xf3, 0xd7, + 0xcb, 0x50, 0xc5, 0x46, 0xed, 0xa9, 0x3e, 0xcc, 0x4c, 0x47, 0x1d, 0x4a, 0x9e, 0xe6, 0xac, 0xb3, + 0xc7, 0xbd, 0x04, 0x4f, 0x9d, 0x0c, 0x92, 0x4b, 0x27, 0x83, 0x5c, 0x9d, 0x3d, 0x7e, 0x07, 0x60, + 0xe4, 0x59, 0x24, 0xa5, 0x5b, 0x2a, 0x4a, 0x93, 0x33, 0x12, 0x10, 0x32, 0x73, 0x74, 0xf7, 0xab, + 0xda, 0xcc, 0x51, 0x45, 0x95, 0x95, 0x33, 0x76, 0x2e, 0x7a, 0x9e, 0x6e, 0x6d, 0xc7, 0x8a, 0x6f, + 0xa3, 0xa7, 0xe1, 0x7c, 0x13, 0x4a, 0x7a, 0x5a, 0x74, 0x2c, 0xea, 0xf5, 0x39, 0x33, 0xa1, 0xd1, + 0xd7, 0xf5, 0x5f, 0x7d, 0x21, 0xcc, 0x08, 0x29, 0xf9, 0x23, 0xa8, 0x9a, 0x52, 0x9a, 0xfd, 0xe1, + 0x48, 0x4b, 0xd5, 0xdc, 0x9c, 0xb0, 0x74, 0x92, 0x51, 0x2b, 0xc2, 0x36, 0x92, 0x94, 0x7c, 0x03, + 0x2a, 0xbe, 0x30, 0x53, 0x91, 0xf1, 0x57, 0xae, 0x60, 0x63, 0x84, 0xb8, 0x46, 0x4c, 0x16, 0xbd, + 0xa5, 0x0a, 0x89, 0xb7, 0x54, 0xef, 0x42, 0x55, 0x2f, 0x1d, 0x03, 0x3f, 0xa9, 0x37, 0x66, 0x92, + 0xa0, 0xc6, 0x8f, 0x33, 0xb0, 0x92, 0xee, 0xde, 0x9f, 0xc5, 0xeb, 0x7f, 0xdf, 0x88, 0x5f, 0xff, + 0xfb, 0x0c, 0x2f, 0xe9, 0xfd, 0x66, 0x06, 0x20, 0x1e, 0x39, 0x3c, 0x5b, 0xd5, 0x2b, 0x65, 0xa1, + 0xb6, 0xaf, 0x4a, 0x7c, 0x27, 0xf5, 0xb4, 0xc5, 0x3b, 0x0b, 0x4d, 0x43, 0xe2, 0x67, 0x22, 0xed, + 0xfd, 0x01, 0xac, 0xa4, 0xe1, 0x74, 0x5d, 0xa0, 0xb3, 0xdb, 0x56, 0xbe, 0xad, 0xce, 0x5e, 0xeb, + 0x51, 0x5b, 0x5f, 0xcc, 0xeb, 0xec, 0x3f, 0x66, 0xd9, 0xc6, 0x1f, 0x67, 0xa0, 0x12, 0x4d, 0x0a, + 0xff, 0x76, 0x72, 0x36, 0x55, 0x82, 0xcc, 0xdb, 0x8b, 0xcc, 0x66, 0xfc, 0xab, 0xed, 0x4a, 0xff, + 0x22, 0x31, 0xb9, 0x0d, 0x0f, 0x56, 0xd2, 0x1f, 0xe7, 0x88, 0xd9, 0x47, 0x69, 0x31, 0xfb, 0xd6, + 0x42, 0x55, 0x86, 0x26, 0xee, 0xae, 0x1d, 0x48, 0x2d, 0x81, 0x3f, 0xc8, 0xbe, 0x9f, 0x69, 0xdc, + 0x85, 0xe5, 0xe4, 0xa7, 0xd9, 0xbb, 0xb9, 0xf7, 0xff, 0x38, 0x07, 0x2b, 0xe9, 0x1c, 0x13, 0xba, + 0xeb, 0xa7, 0xf2, 0x9b, 0x0e, 0x1c, 0x2b, 0x71, 0x53, 0x80, 0xa1, 0x79, 0xad, 0x8d, 0x68, 0x02, + 0xac, 0x91, 0xf7, 0xcc, 0x1b, 0x09, 0x76, 0x37, 0xf9, 0xc2, 0xe9, 0x9b, 0x1c, 0xc2, 0x3b, 0x9a, + 0x6c, 0xcc, 0x2b, 0xfa, 0xad, 0xb7, 0x1f, 0x64, 0x79, 0x2d, 0x91, 0xaf, 0xfe, 0x23, 0xd4, 0x20, + 0x57, 0x37, 0x26, 0xae, 0xe5, 0x08, 0x2b, 0x82, 0xfe, 0x38, 0x09, 0x8d, 0x12, 0xce, 0x7f, 0x90, + 0xe7, 0x2b, 0x50, 0xe9, 0x4e, 0x8e, 0x75, 0xb2, 0xf9, 0x5f, 0xcb, 0xf3, 0x9b, 0xb0, 0xa6, 0xb1, + 0xe2, 0xdc, 0x4e, 0xf6, 0xd7, 0xf1, 0x54, 0x5b, 0x69, 0xa9, 0xf1, 0xd2, 0x0d, 0x65, 0x7f, 0x23, + 0x8f, 0x4d, 0xa0, 0xab, 0xff, 0x7f, 0x93, 0xf8, 0x44, 0x57, 0xa1, 0xd8, 0x2f, 0xe7, 0xf9, 0x2a, + 0x40, 0xb7, 0x17, 0x55, 0xf4, 0xab, 0x79, 0x5e, 0x85, 0x62, 0xb7, 0x47, 0xdc, 0x7e, 0x98, 0xe7, + 0x37, 0x80, 0xc5, 0x5f, 0x75, 0xc6, 0xeb, 0xdf, 0x51, 0x8d, 0x89, 0x52, 0x58, 0xff, 0x6e, 0x1e, + 0xfb, 0x15, 0x8e, 0x32, 0xfb, 0x7b, 0x79, 0xce, 0xa0, 0x9a, 0xf0, 0xc9, 0xb2, 0xbf, 0x9f, 0xe7, + 0x1c, 0x6a, 0x7b, 0x76, 0x10, 0xd8, 0xee, 0x40, 0xf7, 0xe0, 0x57, 0xa8, 0xe6, 0xed, 0xe8, 0x36, + 0x17, 0xfb, 0xb5, 0x3c, 0xbf, 0x05, 0x3c, 0x19, 0x87, 0xd2, 0x1f, 0x7e, 0x9d, 0xa8, 0xd5, 0x49, + 0x1a, 0x68, 0xd8, 0x3f, 0x20, 0x6a, 0x5c, 0x09, 0x1a, 0xf0, 0x1b, 0x34, 0x20, 0x9b, 0x71, 0x8e, + 0xac, 0x86, 0xff, 0x88, 0x88, 0xc3, 0xc9, 0x54, 0xb0, 0x1f, 0xe7, 0xef, 0xff, 0x0e, 0xc5, 0x11, + 0x92, 0xa9, 0x66, 0x7c, 0x19, 0xca, 0x8e, 0xe7, 0x0e, 0xa4, 0x7a, 0x59, 0xb6, 0x06, 0x95, 0x60, + 0xe8, 0xf9, 0x92, 0x8a, 0x74, 0xdd, 0xd4, 0xa5, 0x67, 0x09, 0xd4, 0x75, 0x05, 0x65, 0x0d, 0x2a, + 0xbf, 0xac, 0x34, 0x07, 0xac, 0x1a, 0x65, 0xf7, 0xe6, 0xa3, 0x0c, 0x64, 0x7a, 0x1e, 0x21, 0xbc, + 0x7e, 0xce, 0x8a, 0x88, 0x3a, 0xf1, 0x1d, 0x95, 0x89, 0x2c, 0xd0, 0x12, 0x50, 0x4f, 0x48, 0x8e, + 0x87, 0x68, 0x70, 0x54, 0x14, 0xd4, 0xfb, 0xae, 0xad, 0x2e, 0x36, 0xeb, 0xc4, 0x3e, 0x0b, 0xdb, + 0x11, 0xe5, 0xae, 0x30, 0x71, 0xff, 0x1f, 0x66, 0x60, 0x39, 0x7c, 0x14, 0xc0, 0x1e, 0xd8, 0xae, + 0xca, 0x65, 0x0e, 0xdf, 0xeb, 0xed, 0x3b, 0xf6, 0x38, 0x7c, 0xff, 0x72, 0x15, 0xaa, 0x96, 0x6f, + 0x0e, 0x5a, 0xae, 0xb5, 0xe5, 0x7b, 0x63, 0xd5, 0x6c, 0x15, 0x69, 0x54, 0x39, 0xd4, 0xcf, 0xc5, + 0x31, 0xa2, 0x8f, 0x85, 0xcf, 0xf2, 0x94, 0x34, 0x38, 0x34, 0x7d, 0xdb, 0x1d, 0xb4, 0xcf, 0xa5, + 0x70, 0x03, 0x95, 0x4b, 0x5d, 0x85, 0xd2, 0x24, 0x10, 0x7d, 0x33, 0x10, 0xac, 0x88, 0x85, 0xe3, + 0x89, 0xed, 0x48, 0xdb, 0x55, 0xcf, 0x4e, 0x46, 0xc9, 0xd2, 0x65, 0xec, 0x99, 0x39, 0xb6, 0x59, + 0xe5, 0xfe, 0xbf, 0xcd, 0x40, 0x95, 0x96, 0x45, 0xec, 0x4b, 0x8f, 0xb5, 0xb8, 0x2a, 0x94, 0x76, + 0xa3, 0xf7, 0x07, 0x8b, 0x90, 0x3d, 0x38, 0x55, 0xbe, 0x74, 0xbd, 0x2c, 0xd4, 0xed, 0x5d, 0xf5, + 0x14, 0x61, 0x9e, 0x7f, 0x0e, 0x6e, 0x18, 0x62, 0xe4, 0x49, 0xf1, 0xcc, 0xb4, 0x65, 0xf2, 0xde, + 0x52, 0x01, 0xcd, 0x40, 0xf5, 0x29, 0xbc, 0xa8, 0x54, 0x24, 0x33, 0x10, 0xab, 0x0d, 0x21, 0x25, + 0xec, 0x3d, 0x41, 0xb4, 0x5d, 0x58, 0x8e, 0x50, 0x3e, 0xf6, 0x6c, 0x17, 0x6b, 0xa3, 0x1b, 0xe5, + 0x04, 0xa1, 0xa0, 0x0c, 0x82, 0xe0, 0xfe, 0x3e, 0xdc, 0x9c, 0x1f, 0x4a, 0x50, 0x77, 0xcd, 0xe9, + 0xd1, 0x6b, 0xba, 0xc9, 0xf2, 0xcc, 0xb7, 0xd5, 0xa5, 0xe0, 0x0a, 0x14, 0x0e, 0x9e, 0xbb, 0xb4, + 0x2c, 0xd6, 0xa0, 0xb6, 0xef, 0x25, 0x68, 0x58, 0xee, 0x7e, 0x3f, 0x15, 0xfd, 0x89, 0x07, 0x25, + 0x6c, 0xc4, 0x52, 0xe2, 0x96, 0x56, 0x46, 0xc5, 0x15, 0xe8, 0xff, 0x96, 0xa8, 0x77, 0x38, 0x74, + 0xd4, 0xc5, 0x52, 0xef, 0x70, 0x44, 0xcd, 0xcc, 0xab, 0x07, 0xc9, 0xdc, 0xbe, 0x70, 0x84, 0xc5, + 0x0a, 0xf7, 0xdf, 0x87, 0x55, 0xdd, 0xd5, 0xbe, 0x08, 0x82, 0xf0, 0x96, 0xd3, 0xa1, 0x6f, 0x9f, + 0xa9, 0xb7, 0x3e, 0x96, 0xa1, 0x7c, 0x28, 0xfc, 0xc0, 0x73, 0xe9, 0x9d, 0x13, 0x80, 0x62, 0x77, + 0x68, 0xfa, 0x58, 0xc7, 0xfd, 0xaf, 0xea, 0x41, 0x7a, 0x72, 0x1e, 0x1e, 0x0d, 0xb8, 0x7f, 0xf4, + 0x33, 0x3f, 0xa6, 0x34, 0x35, 0xba, 0xf4, 0x85, 0x39, 0x62, 0xd9, 0xfb, 0x9b, 0x50, 0xa1, 0x4b, + 0x52, 0x8f, 0x6d, 0xd7, 0xc2, 0x8e, 0x6f, 0xe8, 0x84, 0x7d, 0x7a, 0x7f, 0xea, 0x8c, 0x86, 0xa3, + 0xac, 0x5e, 0xea, 0x65, 0x59, 0x7e, 0x13, 0x78, 0x6b, 0x22, 0xbd, 0x91, 0x49, 0xd7, 0x99, 0x9d, + 0x0b, 0xf5, 0xaa, 0x73, 0xee, 0xfe, 0x37, 0x81, 0x2b, 0xdf, 0x9c, 0x25, 0xce, 0x6d, 0x77, 0x10, + 0xbd, 0xa3, 0x00, 0xf4, 0x28, 0x8a, 0x25, 0xce, 0xc3, 0x1b, 0x6e, 0x61, 0x21, 0x7c, 0x9a, 0x65, + 0xdb, 0x9b, 0xb8, 0xd8, 0xe8, 0xa7, 0x70, 0x5d, 0x2d, 0x31, 0xec, 0x05, 0xdd, 0x95, 0xbd, 0xd4, + 0x61, 0xa0, 0x6e, 0xb8, 0xc9, 0x49, 0x10, 0xe1, 0xb2, 0x0c, 0x36, 0x2c, 0x32, 0xb6, 0x63, 0x78, + 0xf6, 0x7e, 0x13, 0xae, 0xcd, 0xf1, 0x78, 0x90, 0x50, 0x57, 0x76, 0x1f, 0x5b, 0xba, 0xff, 0x11, + 0xac, 0x29, 0x31, 0xb4, 0xaf, 0x6e, 0x33, 0x86, 0xc3, 0xf6, 0xac, 0xb3, 0xdd, 0x51, 0x23, 0xbd, + 0xd9, 0xde, 0xdd, 0x7d, 0xb2, 0xdb, 0x32, 0x58, 0x86, 0xd6, 0xc3, 0x41, 0xef, 0x68, 0xf3, 0x60, + 0x7f, 0xbf, 0xbd, 0xd9, 0x6b, 0x6f, 0xb1, 0xec, 0xc6, 0xfd, 0x7f, 0xff, 0xd3, 0x3b, 0x99, 0x9f, + 0xfc, 0xf4, 0x4e, 0xe6, 0xbf, 0xfd, 0xf4, 0x4e, 0xe6, 0x87, 0x3f, 0xbb, 0xb3, 0xf4, 0x93, 0x9f, + 0xdd, 0x59, 0xfa, 0x4f, 0x3f, 0xbb, 0xb3, 0xf4, 0x29, 0x9b, 0xfe, 0xd7, 0x43, 0xc7, 0x45, 0x32, + 0x2a, 0xde, 0xfe, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x1c, 0x18, 0x3c, 0x6a, 0x95, 0x68, 0x00, + 0x00, } func (m *SmartBlockSnapshotBase) Marshal() (dAtA []byte, err error) { @@ -13413,6 +13511,75 @@ func (m *AccountAuth) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *AccountAuthAppInfo) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *AccountAuthAppInfo) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AccountAuthAppInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.IsActive { + i-- + if m.IsActive { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x38 + } + if m.Scope != 0 { + i = encodeVarintModels(dAtA, i, uint64(m.Scope)) + i-- + dAtA[i] = 0x30 + } + if m.ExpireAt != 0 { + i = encodeVarintModels(dAtA, i, uint64(m.ExpireAt)) + i-- + dAtA[i] = 0x28 + } + if m.CreatedAt != 0 { + i = encodeVarintModels(dAtA, i, uint64(m.CreatedAt)) + i-- + dAtA[i] = 0x20 + } + if len(m.AppPath) > 0 { + i -= len(m.AppPath) + copy(dAtA[i:], m.AppPath) + i = encodeVarintModels(dAtA, i, uint64(len(m.AppPath))) + i-- + dAtA[i] = 0x1a + } + if len(m.AppName) > 0 { + i -= len(m.AppName) + copy(dAtA[i:], m.AppName) + i = encodeVarintModels(dAtA, i, uint64(len(m.AppName))) + i-- + dAtA[i] = 0x12 + } + if len(m.AppHash) > 0 { + i -= len(m.AppHash) + copy(dAtA[i:], m.AppHash) + i = encodeVarintModels(dAtA, i, uint64(len(m.AppHash))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *LinkPreview) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -18009,6 +18176,39 @@ func (m *AccountAuth) Size() (n int) { return n } +func (m *AccountAuthAppInfo) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.AppHash) + if l > 0 { + n += 1 + l + sovModels(uint64(l)) + } + l = len(m.AppName) + if l > 0 { + n += 1 + l + sovModels(uint64(l)) + } + l = len(m.AppPath) + if l > 0 { + n += 1 + l + sovModels(uint64(l)) + } + if m.CreatedAt != 0 { + n += 1 + sovModels(uint64(m.CreatedAt)) + } + if m.ExpireAt != 0 { + n += 1 + sovModels(uint64(m.ExpireAt)) + } + if m.Scope != 0 { + n += 1 + sovModels(uint64(m.Scope)) + } + if m.IsActive { + n += 2 + } + return n +} + func (m *LinkPreview) Size() (n int) { if m == nil { return 0 @@ -27343,6 +27543,229 @@ func (m *AccountAuth) Unmarshal(dAtA []byte) error { } return nil } +func (m *AccountAuthAppInfo) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModels + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AppInfo: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AppInfo: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AppHash", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModels + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthModels + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthModels + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AppHash = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AppName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModels + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthModels + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthModels + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AppName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AppPath", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModels + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthModels + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthModels + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AppPath = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CreatedAt", wireType) + } + m.CreatedAt = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModels + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.CreatedAt |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ExpireAt", wireType) + } + m.ExpireAt = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModels + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ExpireAt |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Scope", wireType) + } + m.Scope = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModels + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Scope |= AccountAuthLocalApiScope(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field IsActive", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModels + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.IsActive = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipModels(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthModels + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *LinkPreview) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/pkg/lib/pb/model/protos/models.proto b/pkg/lib/pb/model/protos/models.proto index 92874651f..7d3a1d526 100644 --- a/pkg/lib/pb/model/protos/models.proto +++ b/pkg/lib/pb/model/protos/models.proto @@ -677,6 +677,15 @@ message Account { } message Auth { + message AppInfo { + string appHash = 1; + string appName = 2; // just for info, not secure to rely on + string appPath = 3; // for now, it is not verified + int64 createdAt = 4; + int64 expireAt = 5; + LocalApiScope scope = 6; + bool isActive = 7; + } enum LocalApiScope { Limited = 0; // Used in WebClipper; AccountSelect(to be deprecated), ObjectSearch, ObjectShow, ObjectCreate, ObjectCreateFromURL, BlockPreview, BlockPaste, BroadcastPayloadEvent JsonAPI = 1; // JSON API only, no direct grpc api calls allowed From a546d575c7c57864ce28ec968d0b90e515a47358 Mon Sep 17 00:00:00 2001 From: Roman Khafizianov Date: Sat, 17 May 2025 15:14:03 +0200 Subject: [PATCH 071/164] GO-5629 regenerate --- core/wallet/mock_wallet/mock_Wallet.go | 133 ++++++++++++++++++++++--- 1 file changed, 118 insertions(+), 15 deletions(-) diff --git a/core/wallet/mock_wallet/mock_Wallet.go b/core/wallet/mock_wallet/mock_Wallet.go index 82610f1c8..9e6feb770 100644 --- a/core/wallet/mock_wallet/mock_Wallet.go +++ b/core/wallet/mock_wallet/mock_Wallet.go @@ -446,6 +446,63 @@ func (_c *MockWallet_Init_Call) RunAndReturn(run func(*app.App) error) *MockWall return _c } +// ListAppLinks provides a mock function with given fields: +func (_m *MockWallet) ListAppLinks() ([]*wallet.AppLinkInfo, error) { + ret := _m.Called() + + if len(ret) == 0 { + panic("no return value specified for ListAppLinks") + } + + var r0 []*wallet.AppLinkInfo + var r1 error + if rf, ok := ret.Get(0).(func() ([]*wallet.AppLinkInfo, error)); ok { + return rf() + } + if rf, ok := ret.Get(0).(func() []*wallet.AppLinkInfo); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]*wallet.AppLinkInfo) + } + } + + if rf, ok := ret.Get(1).(func() error); ok { + r1 = rf() + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// MockWallet_ListAppLinks_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListAppLinks' +type MockWallet_ListAppLinks_Call struct { + *mock.Call +} + +// ListAppLinks is a helper method to define mock.On call +func (_e *MockWallet_Expecter) ListAppLinks() *MockWallet_ListAppLinks_Call { + return &MockWallet_ListAppLinks_Call{Call: _e.mock.On("ListAppLinks")} +} + +func (_c *MockWallet_ListAppLinks_Call) Run(run func()) *MockWallet_ListAppLinks_Call { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *MockWallet_ListAppLinks_Call) Return(_a0 []*wallet.AppLinkInfo, _a1 error) *MockWallet_ListAppLinks_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *MockWallet_ListAppLinks_Call) RunAndReturn(run func() ([]*wallet.AppLinkInfo, error)) *MockWallet_ListAppLinks_Call { + _c.Call.Return(run) + return _c +} + // Name provides a mock function with given fields: func (_m *MockWallet) Name() string { ret := _m.Called() @@ -492,7 +549,7 @@ func (_c *MockWallet_Name_Call) RunAndReturn(run func() string) *MockWallet_Name } // PersistAppLink provides a mock function with given fields: payload -func (_m *MockWallet) PersistAppLink(payload *wallet.AppLinkPayload) (string, error) { +func (_m *MockWallet) PersistAppLink(payload *wallet.AppLinkInfo) (string, error) { ret := _m.Called(payload) if len(ret) == 0 { @@ -501,16 +558,16 @@ func (_m *MockWallet) PersistAppLink(payload *wallet.AppLinkPayload) (string, er var r0 string var r1 error - if rf, ok := ret.Get(0).(func(*wallet.AppLinkPayload) (string, error)); ok { + if rf, ok := ret.Get(0).(func(*wallet.AppLinkInfo) (string, error)); ok { return rf(payload) } - if rf, ok := ret.Get(0).(func(*wallet.AppLinkPayload) string); ok { + if rf, ok := ret.Get(0).(func(*wallet.AppLinkInfo) string); ok { r0 = rf(payload) } else { r0 = ret.Get(0).(string) } - if rf, ok := ret.Get(1).(func(*wallet.AppLinkPayload) error); ok { + if rf, ok := ret.Get(1).(func(*wallet.AppLinkInfo) error); ok { r1 = rf(payload) } else { r1 = ret.Error(1) @@ -525,14 +582,14 @@ type MockWallet_PersistAppLink_Call struct { } // PersistAppLink is a helper method to define mock.On call -// - payload *wallet.AppLinkPayload +// - payload *wallet.AppLinkInfo func (_e *MockWallet_Expecter) PersistAppLink(payload interface{}) *MockWallet_PersistAppLink_Call { return &MockWallet_PersistAppLink_Call{Call: _e.mock.On("PersistAppLink", payload)} } -func (_c *MockWallet_PersistAppLink_Call) Run(run func(payload *wallet.AppLinkPayload)) *MockWallet_PersistAppLink_Call { +func (_c *MockWallet_PersistAppLink_Call) Run(run func(payload *wallet.AppLinkInfo)) *MockWallet_PersistAppLink_Call { _c.Call.Run(func(args mock.Arguments) { - run(args[0].(*wallet.AppLinkPayload)) + run(args[0].(*wallet.AppLinkInfo)) }) return _c } @@ -542,29 +599,29 @@ func (_c *MockWallet_PersistAppLink_Call) Return(appKey string, err error) *Mock return _c } -func (_c *MockWallet_PersistAppLink_Call) RunAndReturn(run func(*wallet.AppLinkPayload) (string, error)) *MockWallet_PersistAppLink_Call { +func (_c *MockWallet_PersistAppLink_Call) RunAndReturn(run func(*wallet.AppLinkInfo) (string, error)) *MockWallet_PersistAppLink_Call { _c.Call.Return(run) return _c } // ReadAppLink provides a mock function with given fields: appKey -func (_m *MockWallet) ReadAppLink(appKey string) (*wallet.AppLinkPayload, error) { +func (_m *MockWallet) ReadAppLink(appKey string) (*wallet.AppLinkInfo, error) { ret := _m.Called(appKey) if len(ret) == 0 { panic("no return value specified for ReadAppLink") } - var r0 *wallet.AppLinkPayload + var r0 *wallet.AppLinkInfo var r1 error - if rf, ok := ret.Get(0).(func(string) (*wallet.AppLinkPayload, error)); ok { + if rf, ok := ret.Get(0).(func(string) (*wallet.AppLinkInfo, error)); ok { return rf(appKey) } - if rf, ok := ret.Get(0).(func(string) *wallet.AppLinkPayload); ok { + if rf, ok := ret.Get(0).(func(string) *wallet.AppLinkInfo); ok { r0 = rf(appKey) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*wallet.AppLinkPayload) + r0 = ret.Get(0).(*wallet.AppLinkInfo) } } @@ -595,12 +652,12 @@ func (_c *MockWallet_ReadAppLink_Call) Run(run func(appKey string)) *MockWallet_ return _c } -func (_c *MockWallet_ReadAppLink_Call) Return(_a0 *wallet.AppLinkPayload, _a1 error) *MockWallet_ReadAppLink_Call { +func (_c *MockWallet_ReadAppLink_Call) Return(_a0 *wallet.AppLinkInfo, _a1 error) *MockWallet_ReadAppLink_Call { _c.Call.Return(_a0, _a1) return _c } -func (_c *MockWallet_ReadAppLink_Call) RunAndReturn(run func(string) (*wallet.AppLinkPayload, error)) *MockWallet_ReadAppLink_Call { +func (_c *MockWallet_ReadAppLink_Call) RunAndReturn(run func(string) (*wallet.AppLinkInfo, error)) *MockWallet_ReadAppLink_Call { _c.Call.Return(run) return _c } @@ -650,6 +707,52 @@ func (_c *MockWallet_RepoPath_Call) RunAndReturn(run func() string) *MockWallet_ return _c } +// RevokeAppLink provides a mock function with given fields: appHash +func (_m *MockWallet) RevokeAppLink(appHash string) error { + ret := _m.Called(appHash) + + if len(ret) == 0 { + panic("no return value specified for RevokeAppLink") + } + + var r0 error + if rf, ok := ret.Get(0).(func(string) error); ok { + r0 = rf(appHash) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// MockWallet_RevokeAppLink_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'RevokeAppLink' +type MockWallet_RevokeAppLink_Call struct { + *mock.Call +} + +// RevokeAppLink is a helper method to define mock.On call +// - appHash string +func (_e *MockWallet_Expecter) RevokeAppLink(appHash interface{}) *MockWallet_RevokeAppLink_Call { + return &MockWallet_RevokeAppLink_Call{Call: _e.mock.On("RevokeAppLink", appHash)} +} + +func (_c *MockWallet_RevokeAppLink_Call) Run(run func(appHash string)) *MockWallet_RevokeAppLink_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(string)) + }) + return _c +} + +func (_c *MockWallet_RevokeAppLink_Call) Return(_a0 error) *MockWallet_RevokeAppLink_Call { + _c.Call.Return(_a0) + return _c +} + +func (_c *MockWallet_RevokeAppLink_Call) RunAndReturn(run func(string) error) *MockWallet_RevokeAppLink_Call { + _c.Call.Return(run) + return _c +} + // RootPath provides a mock function with given fields: func (_m *MockWallet) RootPath() string { ret := _m.Called() From 2a51081df83735417bedd71cfa0332cb224292ca Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Sat, 17 May 2025 16:45:24 +0200 Subject: [PATCH 072/164] GO-5589: Remove format from PropertyLinkWithValue for improved efficiency --- core/api/docs/docs.go | 2 +- core/api/docs/openapi.json | 45 ++++--------------- core/api/docs/openapi.yaml | 33 +++----------- core/api/model/property.go | 89 ++++++++++++++++---------------------- 4 files changed, 53 insertions(+), 116 deletions(-) diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go index 42a5a6220..3125e4ed9 100644 --- a/core/api/docs/docs.go +++ b/core/api/docs/docs.go @@ -6,7 +6,7 @@ import "github.com/swaggo/swag/v2" const docTemplate = `{ "schemes": {{ marshal .Schemes }}, - "components": {"schemas":{"apimodel.AddObjectsToListRequest":{"properties":{"objects":{"description":"The list of object IDs to add to the list","example":["[\"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ\"]"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file values of the property","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["emoji","file","icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"creator","type":"string"},"objects":{"description":"The object values of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to search for, specified by their key","example":["page","task","bookmark"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"status","type":"string"},"select":{"description":"The selected tag value of the property","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TokenResponse":{"properties":{"app_key":{"description":"The app key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, + "components": {"schemas":{"apimodel.AddObjectsToListRequest":{"properties":{"objects":{"description":"The list of object IDs to add to the list","example":["[\"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ\"]"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file id of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["emoji","file","icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag ids of the property","example":["['tag_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"key":{"example":"creator","type":"string"},"objects":{"description":"The object values of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to search for, specified by their key","example":["page","task","bookmark"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"key":{"example":"status","type":"string"},"select":{"description":"The selected tag id of the property","example":"tag_id","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TokenResponse":{"properties":{"app_key":{"description":"The app key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, "info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-api/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"}, "externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"}, "paths": {"/v1/auth/display_code":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid ` + "`" + `app_name` + "`" + `, the server issues a unique ` + "`" + `challenge_id` + "`" + ` and displays a short code within the Anytype Desktop. The ` + "`" + `challenge_id` + "`" + ` must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"create_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.DisplayCodeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start challenge","tags":["Auth"]}},"/v1/auth/token":{"post":{"description":"After receiving a ` + "`" + `challenge_id` + "`" + ` from the ` + "`" + `display_code` + "`" + ` endpoint, the client calls this endpoint to provide the corresponding 4-digit code along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent ` + "`" + `app_key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.","operationId":"solve_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TokenResponse"}}},"description":"The app key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Solve challenge","tags":["Auth"]}},"/v1/search":{"post":{"description":"Executes a global search over all spaces accessible to the authenticated user. The request body must specify the ` + "`" + `query` + "`" + ` text (currently matching only name and snippet of an object), optional filters on types (e.g., \"page\", \"task\"), and sort directives (default: descending by last modified date). Pagination is controlled via ` + "`" + `offset` + "`" + ` and ` + "`" + `limit` + "`" + ` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"search_global","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/v1/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"list_spaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"create_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/v1/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"get_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"update_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"add_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.AddObjectsToListRequest"}}},"description":"The list of object IDs to add to the list","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"remove_list_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; retrieve from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"get_list_views","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"get_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/v1/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"list_members","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/v1/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"get_member","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/v1/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"create_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/v1/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"get_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"update_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/v1/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"list_properties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"create_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"get_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"update_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"list_tags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"create_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"get_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"update_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/v1/spaces/{space_id}/search":{"post":{"description":"Performs a search within a single space (specified by the ` + "`" + `space_id` + "`" + ` path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search ` + "`" + `query` + "`" + `, ` + "`" + `types` + "`" + `, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"search_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in; retrieve from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/v1/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"list_types","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new object type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"create_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an object type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"get_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing object type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"update_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"list_templates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to retrieve templates for","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/v1/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"get_template","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to which the template belongs","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, diff --git a/core/api/docs/openapi.json b/core/api/docs/openapi.json index 9651c6f15..4006a50e7 100644 --- a/core/api/docs/openapi.json +++ b/core/api/docs/openapi.json @@ -24,9 +24,6 @@ "example": true, "type": "boolean" }, - "format": { - "$ref": "#/components/schemas/apimodel.PropertyFormat" - }, "key": { "example": "done", "type": "string" @@ -227,9 +224,6 @@ "example": "2025-02-14T12:34:56Z", "type": "string" }, - "format": { - "$ref": "#/components/schemas/apimodel.PropertyFormat" - }, "key": { "example": "last_modified_date", "type": "string" @@ -287,9 +281,6 @@ "example": "example@example.com", "type": "string" }, - "format": { - "$ref": "#/components/schemas/apimodel.PropertyFormat" - }, "key": { "example": "email", "type": "string" @@ -359,9 +350,9 @@ "apimodel.FilesPropertyLinkValue": { "properties": { "files": { - "description": "The file values of the property", + "description": "The file id of the property", "example": [ - "['fileId']" + "['file_id']" ], "items": { "type": "string" @@ -369,9 +360,6 @@ "type": "array", "uniqueItems": false }, - "format": { - "$ref": "#/components/schemas/apimodel.PropertyFormat" - }, "key": { "example": "files", "type": "string" @@ -562,15 +550,15 @@ }, "apimodel.MultiSelectPropertyLinkValue": { "properties": { - "format": { - "$ref": "#/components/schemas/apimodel.PropertyFormat" - }, "key": { "example": "tag", "type": "string" }, "multi_select": { - "description": "The selected tag values of the property", + "description": "The selected tag ids of the property", + "example": [ + "['tag_id']" + ], "items": { "type": "string" }, @@ -634,9 +622,6 @@ }, "apimodel.NumberPropertyLinkValue": { "properties": { - "format": { - "$ref": "#/components/schemas/apimodel.PropertyFormat" - }, "key": { "example": "height", "type": "string" @@ -829,9 +814,6 @@ }, "apimodel.ObjectsPropertyLinkValue": { "properties": { - "format": { - "$ref": "#/components/schemas/apimodel.PropertyFormat" - }, "key": { "example": "creator", "type": "string" @@ -891,9 +873,6 @@ }, "apimodel.PhonePropertyLinkValue": { "properties": { - "format": { - "$ref": "#/components/schemas/apimodel.PropertyFormat" - }, "key": { "example": "phone", "type": "string" @@ -1133,15 +1112,13 @@ }, "apimodel.SelectPropertyLinkValue": { "properties": { - "format": { - "$ref": "#/components/schemas/apimodel.PropertyFormat" - }, "key": { "example": "status", "type": "string" }, "select": { - "description": "The selected tag value of the property", + "description": "The selected tag id of the property", + "example": "tag_id", "type": "string" } }, @@ -1342,9 +1319,6 @@ }, "apimodel.TextPropertyLinkValue": { "properties": { - "format": { - "$ref": "#/components/schemas/apimodel.PropertyFormat" - }, "key": { "example": "description", "type": "string" @@ -1483,9 +1457,6 @@ }, "apimodel.URLPropertyLinkValue": { "properties": { - "format": { - "$ref": "#/components/schemas/apimodel.PropertyFormat" - }, "key": { "example": "source", "type": "string" diff --git a/core/api/docs/openapi.yaml b/core/api/docs/openapi.yaml index 7d5006433..6a6f7be12 100644 --- a/core/api/docs/openapi.yaml +++ b/core/api/docs/openapi.yaml @@ -17,8 +17,6 @@ components: description: The checkbox value of the property example: true type: boolean - format: - $ref: '#/components/schemas/apimodel.PropertyFormat' key: example: done type: string @@ -172,8 +170,6 @@ components: description: The date value of the property example: "2025-02-14T12:34:56Z" type: string - format: - $ref: '#/components/schemas/apimodel.PropertyFormat' key: example: last_modified_date type: string @@ -217,8 +213,6 @@ components: description: The email value of the property example: example@example.com type: string - format: - $ref: '#/components/schemas/apimodel.PropertyFormat' key: example: email type: string @@ -269,15 +263,13 @@ components: apimodel.FilesPropertyLinkValue: properties: files: - description: The file values of the property + description: The file id of the property example: - - '[''fileId'']' + - '[''file_id'']' items: type: string type: array uniqueItems: false - format: - $ref: '#/components/schemas/apimodel.PropertyFormat' key: example: files type: string @@ -421,13 +413,13 @@ components: type: object apimodel.MultiSelectPropertyLinkValue: properties: - format: - $ref: '#/components/schemas/apimodel.PropertyFormat' key: example: tag type: string multi_select: - description: The selected tag values of the property + description: The selected tag ids of the property + example: + - '[''tag_id'']' items: type: string type: array @@ -473,8 +465,6 @@ components: type: object apimodel.NumberPropertyLinkValue: properties: - format: - $ref: '#/components/schemas/apimodel.PropertyFormat' key: example: height type: string @@ -626,8 +616,6 @@ components: type: object apimodel.ObjectsPropertyLinkValue: properties: - format: - $ref: '#/components/schemas/apimodel.PropertyFormat' key: example: creator type: string @@ -671,8 +659,6 @@ components: type: object apimodel.PhonePropertyLinkValue: properties: - format: - $ref: '#/components/schemas/apimodel.PropertyFormat' key: example: phone type: string @@ -826,13 +812,12 @@ components: type: object apimodel.SelectPropertyLinkValue: properties: - format: - $ref: '#/components/schemas/apimodel.PropertyFormat' key: example: status type: string select: - description: The selected tag value of the property + description: The selected tag id of the property + example: tag_id type: string type: object apimodel.SelectPropertyValue: @@ -980,8 +965,6 @@ components: type: object apimodel.TextPropertyLinkValue: properties: - format: - $ref: '#/components/schemas/apimodel.PropertyFormat' key: example: description type: string @@ -1088,8 +1071,6 @@ components: type: object apimodel.URLPropertyLinkValue: properties: - format: - $ref: '#/components/schemas/apimodel.PropertyFormat' key: example: source type: string diff --git a/core/api/model/property.go b/core/api/model/property.go index e70ce5b01..27e4b8783 100644 --- a/core/api/model/property.go +++ b/core/api/model/property.go @@ -279,173 +279,158 @@ func (p PropertyLinkWithValue) MarshalJSON() ([]byte, error) { } func (p *PropertyLinkWithValue) UnmarshalJSON(data []byte) error { - var raw struct { - Format PropertyFormat `json:"format"` - } - if err := json.Unmarshal(data, &raw); err != nil { + var aux map[string]json.RawMessage + if err := json.Unmarshal(data, &aux); err != nil { return err } - - switch raw.Format { - case PropertyFormatText: + switch { + case aux["text"] != nil: var v TextPropertyLinkValue if err := json.Unmarshal(data, &v); err != nil { return err } p.WrappedPropertyLinkWithValue = v - case PropertyFormatNumber: + case aux["number"] != nil: var v NumberPropertyLinkValue if err := json.Unmarshal(data, &v); err != nil { return err } p.WrappedPropertyLinkWithValue = v - case PropertyFormatSelect: + case aux["select"] != nil: var v SelectPropertyLinkValue if err := json.Unmarshal(data, &v); err != nil { return err } p.WrappedPropertyLinkWithValue = v - case PropertyFormatMultiSelect: + case aux["multi_select"] != nil: var v MultiSelectPropertyLinkValue if err := json.Unmarshal(data, &v); err != nil { return err } p.WrappedPropertyLinkWithValue = v - case PropertyFormatDate: + case aux["date"] != nil: var v DatePropertyLinkValue if err := json.Unmarshal(data, &v); err != nil { return err } p.WrappedPropertyLinkWithValue = v - case PropertyFormatFiles: + case aux["files"] != nil: var v FilesPropertyLinkValue if err := json.Unmarshal(data, &v); err != nil { return err } p.WrappedPropertyLinkWithValue = v - case PropertyFormatCheckbox: + case aux["checkbox"] != nil: var v CheckboxPropertyLinkValue if err := json.Unmarshal(data, &v); err != nil { return err } p.WrappedPropertyLinkWithValue = v - case PropertyFormatUrl: + case aux["url"] != nil: var v URLPropertyLinkValue if err := json.Unmarshal(data, &v); err != nil { return err } p.WrappedPropertyLinkWithValue = v - case PropertyFormatEmail: + case aux["email"] != nil: var v EmailPropertyLinkValue if err := json.Unmarshal(data, &v); err != nil { return err } p.WrappedPropertyLinkWithValue = v - case PropertyFormatPhone: + case aux["phone"] != nil: var v PhonePropertyLinkValue if err := json.Unmarshal(data, &v); err != nil { return err } p.WrappedPropertyLinkWithValue = v - case PropertyFormatObjects: + case aux["objects"] != nil: var v ObjectsPropertyLinkValue if err := json.Unmarshal(data, &v); err != nil { return err } p.WrappedPropertyLinkWithValue = v default: - return util.ErrBadInput(fmt.Sprintf("invalid property link value format: %q", raw.Format)) + return util.ErrBadInput("could not determine property link value type") } - return nil } type WrappedPropertyLinkWithValue interface{ isPropertyLinkWithValue() } type TextPropertyLinkValue struct { - Key string `json:"key" example:"description"` - Format PropertyFormat `json:"format" enums:"text"` - Text string `json:"text" example:"Some text..."` // The text value of the property + Key string `json:"key" example:"description"` + Text string `json:"text" example:"Some text..."` // The text value of the property } func (TextPropertyLinkValue) isPropertyLinkWithValue() {} type NumberPropertyLinkValue struct { - Key string `json:"key" example:"height"` - Format PropertyFormat `json:"format" enums:"number"` - Number *float64 `json:"number" example:"42"` // The number value of the property + Key string `json:"key" example:"height"` + Number *float64 `json:"number" example:"42"` // The number value of the property } func (NumberPropertyLinkValue) isPropertyLinkWithValue() {} type SelectPropertyLinkValue struct { - Key string `json:"key" example:"status"` - Format PropertyFormat `json:"format" enums:"select"` - Select *string `json:"select,omitempty"` // The selected tag value of the property + Key string `json:"key" example:"status"` + Select *string `json:"select,omitempty" example:"tag_id"` // The selected tag id of the property } func (SelectPropertyLinkValue) isPropertyLinkWithValue() {} type MultiSelectPropertyLinkValue struct { - Key string `json:"key" example:"tag"` - Format PropertyFormat `json:"format" enums:"multi_select"` - MultiSelect []string `json:"multi_select,omitempty"` // The selected tag values of the property + Key string `json:"key" example:"tag"` + MultiSelect []string `json:"multi_select,omitempty" example:"['tag_id']"` // The selected tag ids of the property } func (MultiSelectPropertyLinkValue) isPropertyLinkWithValue() {} type DatePropertyLinkValue struct { - Key string `json:"key" example:"last_modified_date"` - Format PropertyFormat `json:"format" enums:"date"` - Date *string `json:"date" example:"2025-02-14T12:34:56Z"` // The date value of the property + Key string `json:"key" example:"last_modified_date"` + Date *string `json:"date" example:"2025-02-14T12:34:56Z"` // The date value of the property } func (DatePropertyLinkValue) isPropertyLinkWithValue() {} type FilesPropertyLinkValue struct { - Key string `json:"key" example:"files"` - Format PropertyFormat `json:"format" enums:"files"` - Files []string `json:"files" example:"['fileId']"` // The file values of the property + Key string `json:"key" example:"files"` + Files []string `json:"files" example:"['file_id']"` // The file ids of the property } func (FilesPropertyLinkValue) isPropertyLinkWithValue() {} type CheckboxPropertyLinkValue struct { - Key string `json:"key" example:"done"` - Format PropertyFormat `json:"format" enums:"checkbox"` - Checkbox bool `json:"checkbox" example:"true"` // The checkbox value of the property + Key string `json:"key" example:"done"` + Checkbox bool `json:"checkbox" example:"true"` // The checkbox value of the property } func (CheckboxPropertyLinkValue) isPropertyLinkWithValue() {} type URLPropertyLinkValue struct { - Key string `json:"key" example:"source"` - Format PropertyFormat `json:"format" enums:"url"` - Url string `json:"url" example:"https://example.com"` // The URL value of the property + Key string `json:"key" example:"source"` + Url string `json:"url" example:"https://example.com"` // The URL value of the property } func (URLPropertyLinkValue) isPropertyLinkWithValue() {} type EmailPropertyLinkValue struct { - Key string `json:"key" example:"email"` - Format PropertyFormat `json:"format" enums:"email"` - Email string `json:"email" example:"example@example.com"` // The email value of the property + Key string `json:"key" example:"email"` + Email string `json:"email" example:"example@example.com"` // The email value of the property } func (EmailPropertyLinkValue) isPropertyLinkWithValue() {} type PhonePropertyLinkValue struct { - Key string `json:"key" example:"phone"` - Format PropertyFormat `json:"format" enums:"phone"` - Phone string `json:"phone" example:"+1234567890"` // The phone value of the property + Key string `json:"key" example:"phone"` + Phone string `json:"phone" example:"+1234567890"` // The phone value of the property } func (PhonePropertyLinkValue) isPropertyLinkWithValue() {} type ObjectsPropertyLinkValue struct { - Key string `json:"key" example:"creator"` - Format PropertyFormat `json:"format" enums:"objects"` - Objects []string `json:"objects" example:"['object_id']"` // The object values of the property + Key string `json:"key" example:"creator"` + Objects []string `json:"objects" example:"['object_id']"` // The object ids of the property } func (ObjectsPropertyLinkValue) isPropertyLinkWithValue() {} From fb097c95220b15c30be32bcaf747b3339612e8ba Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Sat, 17 May 2025 16:59:59 +0200 Subject: [PATCH 073/164] GO-5589: Refactor properties --- core/api/docs/docs.go | 2 +- core/api/docs/openapi.json | 4 ++-- core/api/docs/openapi.yaml | 4 ++-- core/api/service/list_test.go | 6 +++--- core/api/service/object_test.go | 2 +- core/api/service/property.go | 4 ++-- core/api/service/search.go | 2 +- core/api/service/search_test.go | 4 ++-- 8 files changed, 14 insertions(+), 14 deletions(-) diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go index 3125e4ed9..9a25aaae2 100644 --- a/core/api/docs/docs.go +++ b/core/api/docs/docs.go @@ -6,7 +6,7 @@ import "github.com/swaggo/swag/v2" const docTemplate = `{ "schemes": {{ marshal .Schemes }}, - "components": {"schemas":{"apimodel.AddObjectsToListRequest":{"properties":{"objects":{"description":"The list of object IDs to add to the list","example":["[\"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ\"]"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file id of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["emoji","file","icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag ids of the property","example":["['tag_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"key":{"example":"creator","type":"string"},"objects":{"description":"The object values of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to search for, specified by their key","example":["page","task","bookmark"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"key":{"example":"status","type":"string"},"select":{"description":"The selected tag id of the property","example":"tag_id","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TokenResponse":{"properties":{"app_key":{"description":"The app key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, + "components": {"schemas":{"apimodel.AddObjectsToListRequest":{"properties":{"objects":{"description":"The list of object IDs to add to the list","example":["[\"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ\"]"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file ids of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["emoji","file","icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag ids of the property","example":["['tag_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"key":{"example":"creator","type":"string"},"objects":{"description":"The object ids of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to search for, specified by their key","example":["page","task","bookmark"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"key":{"example":"status","type":"string"},"select":{"description":"The selected tag id of the property","example":"tag_id","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TokenResponse":{"properties":{"app_key":{"description":"The app key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, "info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-api/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"}, "externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"}, "paths": {"/v1/auth/display_code":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid ` + "`" + `app_name` + "`" + `, the server issues a unique ` + "`" + `challenge_id` + "`" + ` and displays a short code within the Anytype Desktop. The ` + "`" + `challenge_id` + "`" + ` must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"create_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.DisplayCodeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start challenge","tags":["Auth"]}},"/v1/auth/token":{"post":{"description":"After receiving a ` + "`" + `challenge_id` + "`" + ` from the ` + "`" + `display_code` + "`" + ` endpoint, the client calls this endpoint to provide the corresponding 4-digit code along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent ` + "`" + `app_key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.","operationId":"solve_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TokenResponse"}}},"description":"The app key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Solve challenge","tags":["Auth"]}},"/v1/search":{"post":{"description":"Executes a global search over all spaces accessible to the authenticated user. The request body must specify the ` + "`" + `query` + "`" + ` text (currently matching only name and snippet of an object), optional filters on types (e.g., \"page\", \"task\"), and sort directives (default: descending by last modified date). Pagination is controlled via ` + "`" + `offset` + "`" + ` and ` + "`" + `limit` + "`" + ` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"search_global","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/v1/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"list_spaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"create_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/v1/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"get_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"update_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"add_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.AddObjectsToListRequest"}}},"description":"The list of object IDs to add to the list","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"remove_list_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; retrieve from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"get_list_views","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"get_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/v1/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"list_members","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/v1/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"get_member","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/v1/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"create_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/v1/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"get_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"update_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/v1/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"list_properties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"create_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"get_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"update_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"list_tags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"create_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"get_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"update_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/v1/spaces/{space_id}/search":{"post":{"description":"Performs a search within a single space (specified by the ` + "`" + `space_id` + "`" + ` path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search ` + "`" + `query` + "`" + `, ` + "`" + `types` + "`" + `, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"search_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in; retrieve from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/v1/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"list_types","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new object type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"create_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an object type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"get_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing object type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"update_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"list_templates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to retrieve templates for","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/v1/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"get_template","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to which the template belongs","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, diff --git a/core/api/docs/openapi.json b/core/api/docs/openapi.json index 4006a50e7..6ecf8b9a2 100644 --- a/core/api/docs/openapi.json +++ b/core/api/docs/openapi.json @@ -350,7 +350,7 @@ "apimodel.FilesPropertyLinkValue": { "properties": { "files": { - "description": "The file id of the property", + "description": "The file ids of the property", "example": [ "['file_id']" ], @@ -819,7 +819,7 @@ "type": "string" }, "objects": { - "description": "The object values of the property", + "description": "The object ids of the property", "example": [ "['object_id']" ], diff --git a/core/api/docs/openapi.yaml b/core/api/docs/openapi.yaml index 6a6f7be12..b1a1148f3 100644 --- a/core/api/docs/openapi.yaml +++ b/core/api/docs/openapi.yaml @@ -263,7 +263,7 @@ components: apimodel.FilesPropertyLinkValue: properties: files: - description: The file id of the property + description: The file ids of the property example: - '[''file_id'']' items: @@ -620,7 +620,7 @@ components: example: creator type: string objects: - description: The object values of the property + description: The object ids of the property example: - '[''object_id'']' items: diff --git a/core/api/service/list_test.go b/core/api/service/list_test.go index c23c5578d..41322749a 100644 --- a/core/api/service/list_test.go +++ b/core/api/service/list_test.go @@ -409,7 +409,7 @@ func TestListService_GetObjectsInList(t *testing.T) { }). Return(&pb.RpcObjectSearchUnsubscribeResponse{}, nil).Once() - // Mock GetPropertyMapsFromStore + // Mock getPropertyMapsFromStore fx.mwMock. On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{ SpaceId: mockedSpaceId, @@ -654,7 +654,7 @@ func TestListService_GetObjectsInList(t *testing.T) { }). Return(&pb.RpcObjectSearchUnsubscribeResponse{}, nil).Once() - // Mock GetPropertyMapsFromStore + // Mock getPropertyMapsFromStore fx.mwMock. On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{ SpaceId: mockedSpaceId, @@ -1109,7 +1109,7 @@ func TestListService_GetObjectsInList(t *testing.T) { }). Return(&pb.RpcObjectSearchUnsubscribeResponse{}, nil).Once() - // Mock GetPropertyMapsFromStore to return an error. + // Mock getPropertyMapsFromStore to return an error. fx.mwMock. On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{ SpaceId: mockedSpaceId, diff --git a/core/api/service/object_test.go b/core/api/service/object_test.go index 1bf97e547..d86cf344b 100644 --- a/core/api/service/object_test.go +++ b/core/api/service/object_test.go @@ -363,7 +363,7 @@ func TestObjectService_GetObject(t *testing.T) { }, }, nil).Once() - // Mock GetPropertyMapsFromStore + // Mock getPropertyMapsFromStore fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{ SpaceId: mockedSpaceId, Filters: []*model.BlockContentDataviewFilter{ diff --git a/core/api/service/property.go b/core/api/service/property.go index 45d3cbab8..4ccd5d1c6 100644 --- a/core/api/service/property.go +++ b/core/api/service/property.go @@ -500,9 +500,9 @@ func (s *Service) getRecommendedPropertiesFromLists(featured, regular *types.Lis return props } -// GetPropertyMapsFromStore retrieves all properties for all spaces. +// getPropertyMapsFromStore retrieves all properties for all spaces. // Property entries can also be keyed by property id. Required for filling types with properties, as recommended properties are referenced by id and not key. -func (s *Service) GetPropertyMapsFromStore(ctx context.Context, spaceIds []string, keyByPropertyId bool) (map[string]map[string]apimodel.Property, error) { +func (s *Service) getPropertyMapsFromStore(ctx context.Context, spaceIds []string, keyByPropertyId bool) (map[string]map[string]apimodel.Property, error) { spacesToProperties := make(map[string]map[string]apimodel.Property, len(spaceIds)) for _, spaceId := range spaceIds { diff --git a/core/api/service/search.go b/core/api/service/search.go index cd45561b2..48a11a92b 100644 --- a/core/api/service/search.go +++ b/core/api/service/search.go @@ -32,7 +32,7 @@ func (s *Service) GlobalSearch(ctx context.Context, request apimodel.SearchReque sorts, criterionToSortAfter := s.prepareSorts(request.Sort) // pre-fetch properties, types and tags to fill the objects - propertyMaps, err := s.GetPropertyMapsFromStore(ctx, spaceIds, true) + propertyMaps, err := s.getPropertyMapsFromStore(ctx, spaceIds, true) if err != nil { return nil, 0, false, err } diff --git a/core/api/service/search_test.go b/core/api/service/search_test.go index 0299e058d..a38d739c1 100644 --- a/core/api/service/search_test.go +++ b/core/api/service/search_test.go @@ -129,7 +129,7 @@ func TestSearchService_GlobalSearch(t *testing.T) { Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL}, }).Once() - // Mock GetPropertyMapsFromStore + // Mock getPropertyMapsFromStore fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{ SpaceId: mockedSpaceId, Filters: []*model.BlockContentDataviewFilter{ @@ -438,7 +438,7 @@ func TestSearchService_Search(t *testing.T) { Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL}, }).Once() - // Mock GetPropertyMapsFromStore + // Mock getPropertyMapsFromStore fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{ SpaceId: mockedSpaceId, Filters: []*model.BlockContentDataviewFilter{ From c95eeb84c32ed634300c10cff82b4cb4cecb3d8c Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Sat, 17 May 2025 17:05:21 +0200 Subject: [PATCH 074/164] GO-5589: Clarify space_id retrieval from ListSpaces endpoint in param descriptions --- core/api/docs/docs.go | 2 +- core/api/docs/openapi.json | 62 ++++++++++++------------ core/api/docs/openapi.yaml | 94 ++++++++++++++++++++++++------------ core/api/handler/list.go | 8 +-- core/api/handler/member.go | 6 +-- core/api/handler/object.go | 10 ++-- core/api/handler/property.go | 10 ++-- core/api/handler/search.go | 2 +- core/api/handler/space.go | 4 +- core/api/handler/tag.go | 10 ++-- core/api/handler/template.go | 4 +- core/api/handler/type.go | 10 ++-- 12 files changed, 126 insertions(+), 96 deletions(-) diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go index 9a25aaae2..2187d78a5 100644 --- a/core/api/docs/docs.go +++ b/core/api/docs/docs.go @@ -9,7 +9,7 @@ const docTemplate = `{ "components": {"schemas":{"apimodel.AddObjectsToListRequest":{"properties":{"objects":{"description":"The list of object IDs to add to the list","example":["[\"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ\"]"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file ids of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["emoji","file","icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag ids of the property","example":["['tag_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"key":{"example":"creator","type":"string"},"objects":{"description":"The object ids of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to search for, specified by their key","example":["page","task","bookmark"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"key":{"example":"status","type":"string"},"select":{"description":"The selected tag id of the property","example":"tag_id","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TokenResponse":{"properties":{"app_key":{"description":"The app key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, "info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-api/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"}, "externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"}, - "paths": {"/v1/auth/display_code":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid ` + "`" + `app_name` + "`" + `, the server issues a unique ` + "`" + `challenge_id` + "`" + ` and displays a short code within the Anytype Desktop. The ` + "`" + `challenge_id` + "`" + ` must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"create_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.DisplayCodeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start challenge","tags":["Auth"]}},"/v1/auth/token":{"post":{"description":"After receiving a ` + "`" + `challenge_id` + "`" + ` from the ` + "`" + `display_code` + "`" + ` endpoint, the client calls this endpoint to provide the corresponding 4-digit code along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent ` + "`" + `app_key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.","operationId":"solve_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TokenResponse"}}},"description":"The app key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Solve challenge","tags":["Auth"]}},"/v1/search":{"post":{"description":"Executes a global search over all spaces accessible to the authenticated user. The request body must specify the ` + "`" + `query` + "`" + ` text (currently matching only name and snippet of an object), optional filters on types (e.g., \"page\", \"task\"), and sort directives (default: descending by last modified date). Pagination is controlled via ` + "`" + `offset` + "`" + ` and ` + "`" + `limit` + "`" + ` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"search_global","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/v1/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"list_spaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"create_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/v1/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"get_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"update_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"add_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.AddObjectsToListRequest"}}},"description":"The list of object IDs to add to the list","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"remove_list_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; retrieve from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"get_list_views","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"get_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/v1/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"list_members","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/v1/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"get_member","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/v1/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"create_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/v1/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"get_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"update_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/v1/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"list_properties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"create_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"get_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"update_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"list_tags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"create_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"get_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"update_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/v1/spaces/{space_id}/search":{"post":{"description":"Performs a search within a single space (specified by the ` + "`" + `space_id` + "`" + ` path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search ` + "`" + `query` + "`" + `, ` + "`" + `types` + "`" + `, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"search_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in; retrieve from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/v1/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"list_types","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new object type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"create_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an object type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"get_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing object type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"update_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"list_templates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to retrieve templates for","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/v1/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"get_template","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to which the template belongs","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, + "paths": {"/v1/auth/display_code":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid ` + "`" + `app_name` + "`" + `, the server issues a unique ` + "`" + `challenge_id` + "`" + ` and displays a short code within the Anytype Desktop. The ` + "`" + `challenge_id` + "`" + ` must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"create_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.DisplayCodeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start challenge","tags":["Auth"]}},"/v1/auth/token":{"post":{"description":"After receiving a ` + "`" + `challenge_id` + "`" + ` from the ` + "`" + `display_code` + "`" + ` endpoint, the client calls this endpoint to provide the corresponding 4-digit code along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent ` + "`" + `app_key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.","operationId":"solve_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TokenResponse"}}},"description":"The app key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Solve challenge","tags":["Auth"]}},"/v1/search":{"post":{"description":"Executes a global search over all spaces accessible to the authenticated user. The request body must specify the ` + "`" + `query` + "`" + ` text (currently matching only name and snippet of an object), optional filters on types (e.g., \"page\", \"task\"), and sort directives (default: descending by last modified date). Pagination is controlled via ` + "`" + `offset` + "`" + ` and ` + "`" + `limit` + "`" + ` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"search_global","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/v1/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"list_spaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"create_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/v1/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"get_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"update_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"add_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.AddObjectsToListRequest"}}},"description":"The list of object IDs to add to the list","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"remove_list_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"get_list_views","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"get_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/v1/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"list_members","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/v1/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"get_member","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/v1/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"create_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/v1/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"get_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"update_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/v1/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"list_properties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"create_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"get_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"update_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"list_tags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"create_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"get_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"update_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/v1/spaces/{space_id}/search":{"post":{"description":"Performs a search within a single space (specified by the ` + "`" + `space_id` + "`" + ` path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search ` + "`" + `query` + "`" + `, ` + "`" + `types` + "`" + `, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"search_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/v1/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"list_types","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new object type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"create_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an object type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"get_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing object type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"update_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"list_templates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to retrieve templates for","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/v1/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"get_template","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to which the template belongs","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, "openapi": "3.1.0", "servers": [ {"url":"http://localhost:31009"} diff --git a/core/api/docs/openapi.json b/core/api/docs/openapi.json index 6ecf8b9a2..5d3a845fa 100644 --- a/core/api/docs/openapi.json +++ b/core/api/docs/openapi.json @@ -2379,7 +2379,7 @@ } }, { - "description": "The ID of the space to retrieve", + "description": "The ID of the space to retrieve; must be retrieved from ListSpaces endpoint", "in": "path", "name": "space_id", "required": true, @@ -2455,7 +2455,7 @@ } }, { - "description": "The ID of the space to update", + "description": "The ID of the space to update; must be retrieved from ListSpaces endpoint", "in": "path", "name": "space_id", "required": true, @@ -2574,7 +2574,7 @@ } }, { - "description": "The ID of the space to which the list belongs", + "description": "The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint", "in": "path", "name": "space_id", "required": true, @@ -2692,7 +2692,7 @@ } }, { - "description": "The ID of the space to which the list belongs; retrieve from ListSpaces endpoint", + "description": "The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint", "in": "path", "name": "space_id", "required": true, @@ -2808,7 +2808,7 @@ } }, { - "description": "The ID of the space to which the list belongs", + "description": "The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint", "in": "path", "name": "space_id", "required": true, @@ -2912,7 +2912,7 @@ } }, { - "description": "The ID of the space to which the list belongs", + "description": "The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint", "in": "path", "name": "space_id", "required": true, @@ -3025,7 +3025,7 @@ } }, { - "description": "The ID of the space to list members for", + "description": "The ID of the space to list members for; must be retrieved from ListSpaces endpoint", "in": "path", "name": "space_id", "required": true, @@ -3112,7 +3112,7 @@ } }, { - "description": "The ID of the space to get the member from", + "description": "The ID of the space to get the member from; must be retrieved from ListSpaces endpoint", "in": "path", "name": "space_id", "required": true, @@ -3199,7 +3199,7 @@ } }, { - "description": "The ID of the space in which to list objects", + "description": "The ID of the space in which to list objects; must be retrieved from ListSpaces endpoint", "in": "path", "name": "space_id", "required": true, @@ -3284,7 +3284,7 @@ } }, { - "description": "The ID of the space in which to create the object", + "description": "The ID of the space in which to create the object; must be retrieved from ListSpaces endpoint", "in": "path", "name": "space_id", "required": true, @@ -3383,7 +3383,7 @@ } }, { - "description": "The ID of the space in which the object exists", + "description": "The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint", "in": "path", "name": "space_id", "required": true, @@ -3498,7 +3498,7 @@ } }, { - "description": "The ID of the space in which the object exists", + "description": "The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint", "in": "path", "name": "space_id", "required": true, @@ -3605,7 +3605,7 @@ } }, { - "description": "The ID of the space in which the object exists", + "description": "The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint", "in": "path", "name": "space_id", "required": true, @@ -3733,7 +3733,7 @@ } }, { - "description": "The ID of the space to list properties for", + "description": "The ID of the space to list properties for; must be retrieved from ListSpaces endpoint", "in": "path", "name": "space_id", "required": true, @@ -3818,7 +3818,7 @@ } }, { - "description": "The ID of the space to create the property in", + "description": "The ID of the space to create the property in; must be retrieved from ListSpaces endpoint", "in": "path", "name": "space_id", "required": true, @@ -3917,7 +3917,7 @@ } }, { - "description": "The ID of the space to which the property belongs", + "description": "The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint", "in": "path", "name": "space_id", "required": true, @@ -4032,7 +4032,7 @@ } }, { - "description": "The ID of the space to which the property belongs", + "description": "The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint", "in": "path", "name": "space_id", "required": true, @@ -4127,7 +4127,7 @@ } }, { - "description": "The ID of the space to which the property belongs", + "description": "The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint", "in": "path", "name": "space_id", "required": true, @@ -4265,7 +4265,7 @@ } }, { - "description": "The ID of the space to list tags for", + "description": "The ID of the space to list tags for; must be retrieved from ListSpaces endpoint", "in": "path", "name": "space_id", "required": true, @@ -4350,7 +4350,7 @@ } }, { - "description": "The ID of the space to create the tag in", + "description": "The ID of the space to create the tag in; must be retrieved from ListSpaces endpoint", "in": "path", "name": "space_id", "required": true, @@ -4458,7 +4458,7 @@ } }, { - "description": "The ID of the space to delete the tag from", + "description": "The ID of the space to delete the tag from; must be retrieved from ListSpaces endpoint", "in": "path", "name": "space_id", "required": true, @@ -4582,7 +4582,7 @@ } }, { - "description": "The ID of the space to retrieve the tag from", + "description": "The ID of the space to retrieve the tag from; must be retrieved from ListSpaces endpoint", "in": "path", "name": "space_id", "required": true, @@ -4686,7 +4686,7 @@ } }, { - "description": "The ID of the space to update the tag in", + "description": "The ID of the space to update the tag in; must be retrieved from ListSpaces endpoint", "in": "path", "name": "space_id", "required": true, @@ -4833,7 +4833,7 @@ } }, { - "description": "The ID of the space to search in; retrieve from ListSpaces endpoint", + "description": "The ID of the space to search in; must be retrieved from ListSpaces endpoint", "in": "path", "name": "space_id", "required": true, @@ -4931,7 +4931,7 @@ } }, { - "description": "The ID of the space to retrieve types from", + "description": "The ID of the space to retrieve types from; must be retrieved from ListSpaces endpoint", "in": "path", "name": "space_id", "required": true, @@ -5016,7 +5016,7 @@ } }, { - "description": "The ID of the space in which to create the type", + "description": "The ID of the space in which to create the type; must be retrieved from ListSpaces endpoint", "in": "path", "name": "space_id", "required": true, @@ -5115,7 +5115,7 @@ } }, { - "description": "The ID of the space from which to delete the type", + "description": "The ID of the space from which to delete the type; must be retrieved from ListSpaces endpoint", "in": "path", "name": "space_id", "required": true, @@ -5230,7 +5230,7 @@ } }, { - "description": "The ID of the space from which to retrieve the type", + "description": "The ID of the space from which to retrieve the type; must be retrieved from ListSpaces endpoint", "in": "path", "name": "space_id", "required": true, @@ -5325,7 +5325,7 @@ } }, { - "description": "The ID of the space in which the type exists", + "description": "The ID of the space in which the type exists; must be retrieved from ListSpaces endpoint", "in": "path", "name": "space_id", "required": true, @@ -5453,7 +5453,7 @@ } }, { - "description": "The ID of the space to which the type belongs", + "description": "The ID of the space to which the type belongs; must be retrieved from ListSpaces endpoint", "in": "path", "name": "space_id", "required": true, @@ -5549,7 +5549,7 @@ } }, { - "description": "The ID of the space to which the template belongs", + "description": "The ID of the space to which the template belongs; must be retrieved from ListSpaces endpoint", "in": "path", "name": "space_id", "required": true, diff --git a/core/api/docs/openapi.yaml b/core/api/docs/openapi.yaml index b1a1148f3..703cbd128 100644 --- a/core/api/docs/openapi.yaml +++ b/core/api/docs/openapi.yaml @@ -1732,7 +1732,8 @@ paths: schema: default: "2025-05-20" type: string - - description: The ID of the space to retrieve + - description: The ID of the space to retrieve; must be retrieved from ListSpaces + endpoint in: path name: space_id required: true @@ -1782,7 +1783,8 @@ paths: schema: default: "2025-05-20" type: string - - description: The ID of the space to update + - description: The ID of the space to update; must be retrieved from ListSpaces + endpoint in: path name: space_id required: true @@ -1860,7 +1862,8 @@ paths: schema: default: "2025-05-20" type: string - - description: The ID of the space to which the list belongs + - description: The ID of the space to which the list belongs; must be retrieved + from ListSpaces endpoint in: path name: space_id required: true @@ -1936,8 +1939,8 @@ paths: schema: default: "2025-05-20" type: string - - description: The ID of the space to which the list belongs; retrieve from - ListSpaces endpoint + - description: The ID of the space to which the list belongs; must be retrieved + from ListSpaces endpoint in: path name: space_id required: true @@ -2014,7 +2017,8 @@ paths: schema: default: "2025-05-20" type: string - - description: The ID of the space to which the list belongs + - description: The ID of the space to which the list belongs; must be retrieved + from ListSpaces endpoint in: path name: space_id required: true @@ -2085,7 +2089,8 @@ paths: schema: default: "2025-05-20" type: string - - description: The ID of the space to which the list belongs + - description: The ID of the space to which the list belongs; must be retrieved + from ListSpaces endpoint in: path name: space_id required: true @@ -2162,7 +2167,8 @@ paths: schema: default: "2025-05-20" type: string - - description: The ID of the space to list members for + - description: The ID of the space to list members for; must be retrieved from + ListSpaces endpoint in: path name: space_id required: true @@ -2223,7 +2229,8 @@ paths: schema: default: "2025-05-20" type: string - - description: The ID of the space to get the member from + - description: The ID of the space to get the member from; must be retrieved + from ListSpaces endpoint in: path name: space_id required: true @@ -2282,7 +2289,8 @@ paths: schema: default: "2025-05-20" type: string - - description: The ID of the space in which to list objects + - description: The ID of the space in which to list objects; must be retrieved + from ListSpaces endpoint in: path name: space_id required: true @@ -2344,7 +2352,8 @@ paths: schema: default: "2025-05-20" type: string - - description: The ID of the space in which to create the object + - description: The ID of the space in which to create the object; must be retrieved + from ListSpaces endpoint in: path name: space_id required: true @@ -2409,7 +2418,8 @@ paths: schema: default: "2025-05-20" type: string - - description: The ID of the space in which the object exists + - description: The ID of the space in which the object exists; must be retrieved + from ListSpaces endpoint in: path name: space_id required: true @@ -2485,7 +2495,8 @@ paths: schema: default: "2025-05-20" type: string - - description: The ID of the space in which the object exists + - description: The ID of the space in which the object exists; must be retrieved + from ListSpaces endpoint in: path name: space_id required: true @@ -2555,7 +2566,8 @@ paths: schema: default: "2025-05-20" type: string - - description: The ID of the space in which the object exists + - description: The ID of the space in which the object exists; must be retrieved + from ListSpaces endpoint in: path name: space_id required: true @@ -2638,7 +2650,8 @@ paths: schema: default: "2025-05-20" type: string - - description: The ID of the space to list properties for + - description: The ID of the space to list properties for; must be retrieved + from ListSpaces endpoint in: path name: space_id required: true @@ -2697,7 +2710,8 @@ paths: schema: default: "2025-05-20" type: string - - description: The ID of the space to create the property in + - description: The ID of the space to create the property in; must be retrieved + from ListSpaces endpoint in: path name: space_id required: true @@ -2763,7 +2777,8 @@ paths: schema: default: "2025-05-20" type: string - - description: The ID of the space to which the property belongs + - description: The ID of the space to which the property belongs; must be retrieved + from ListSpaces endpoint in: path name: space_id required: true @@ -2839,7 +2854,8 @@ paths: schema: default: "2025-05-20" type: string - - description: The ID of the space to which the property belongs + - description: The ID of the space to which the property belongs; must be retrieved + from ListSpaces endpoint in: path name: space_id required: true @@ -2902,7 +2918,8 @@ paths: schema: default: "2025-05-20" type: string - - description: The ID of the space to which the property belongs + - description: The ID of the space to which the property belongs; must be retrieved + from ListSpaces endpoint in: path name: space_id required: true @@ -2991,7 +3008,8 @@ paths: schema: default: "2025-05-20" type: string - - description: The ID of the space to list tags for + - description: The ID of the space to list tags for; must be retrieved from + ListSpaces endpoint in: path name: space_id required: true @@ -3049,7 +3067,8 @@ paths: schema: default: "2025-05-20" type: string - - description: The ID of the space to create the tag in + - description: The ID of the space to create the tag in; must be retrieved from + ListSpaces endpoint in: path name: space_id required: true @@ -3120,7 +3139,8 @@ paths: schema: default: "2025-05-20" type: string - - description: The ID of the space to delete the tag from + - description: The ID of the space to delete the tag from; must be retrieved + from ListSpaces endpoint in: path name: space_id required: true @@ -3200,7 +3220,8 @@ paths: schema: default: "2025-05-20" type: string - - description: The ID of the space to retrieve the tag from + - description: The ID of the space to retrieve the tag from; must be retrieved + from ListSpaces endpoint in: path name: space_id required: true @@ -3270,7 +3291,8 @@ paths: schema: default: "2025-05-20" type: string - - description: The ID of the space to update the tag in + - description: The ID of the space to update the tag in; must be retrieved from + ListSpaces endpoint in: path name: space_id required: true @@ -3366,7 +3388,8 @@ paths: schema: default: "2025-05-20" type: string - - description: The ID of the space to search in; retrieve from ListSpaces endpoint + - description: The ID of the space to search in; must be retrieved from ListSpaces + endpoint in: path name: space_id required: true @@ -3435,7 +3458,8 @@ paths: schema: default: "2025-05-20" type: string - - description: The ID of the space to retrieve types from + - description: The ID of the space to retrieve types from; must be retrieved + from ListSpaces endpoint in: path name: space_id required: true @@ -3493,7 +3517,8 @@ paths: schema: default: "2025-05-20" type: string - - description: The ID of the space in which to create the type + - description: The ID of the space in which to create the type; must be retrieved + from ListSpaces endpoint in: path name: space_id required: true @@ -3558,7 +3583,8 @@ paths: schema: default: "2025-05-20" type: string - - description: The ID of the space from which to delete the type + - description: The ID of the space from which to delete the type; must be retrieved + from ListSpaces endpoint in: path name: space_id required: true @@ -3633,7 +3659,8 @@ paths: schema: default: "2025-05-20" type: string - - description: The ID of the space from which to retrieve the type + - description: The ID of the space from which to retrieve the type; must be + retrieved from ListSpaces endpoint in: path name: space_id required: true @@ -3695,7 +3722,8 @@ paths: schema: default: "2025-05-20" type: string - - description: The ID of the space in which the type exists + - description: The ID of the space in which the type exists; must be retrieved + from ListSpaces endpoint in: path name: space_id required: true @@ -3778,7 +3806,8 @@ paths: schema: default: "2025-05-20" type: string - - description: The ID of the space to which the type belongs + - description: The ID of the space to which the type belongs; must be retrieved + from ListSpaces endpoint in: path name: space_id required: true @@ -3843,7 +3872,8 @@ paths: schema: default: "2025-05-20" type: string - - description: The ID of the space to which the template belongs + - description: The ID of the space to which the template belongs; must be retrieved + from ListSpaces endpoint in: path name: space_id required: true diff --git a/core/api/handler/list.go b/core/api/handler/list.go index 56573cff2..a1dba107a 100644 --- a/core/api/handler/list.go +++ b/core/api/handler/list.go @@ -19,7 +19,7 @@ import ( // @Tags Lists // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) -// @Param space_id path string true "The ID of the space to which the list belongs" +// @Param space_id path string true "The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint" // @Param list_id path string true "The ID of the list to retrieve views for" // @Param offset query int false "The number of items to skip before starting to collect the result set" default(0) // @Param limit query int false "The number of items to return" @@ -60,7 +60,7 @@ func GetListViewsHandler(s *service.Service) gin.HandlerFunc { // @Tags Lists // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) -// @Param space_id path string true "The ID of the space to which the list belongs" +// @Param space_id path string true "The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint" // @Param list_id path string true "The ID of the list to retrieve objects for" // @Param view_id path string true "The ID of the view to retrieve objects for" // @Param offset query int false "The number of items to skip before starting to collect the result set" default(0) @@ -108,7 +108,7 @@ func GetObjectsInListHandler(s *service.Service) gin.HandlerFunc { // @Accept json // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) -// @Param space_id path string true "The ID of the space to which the list belongs" +// @Param space_id path string true "The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint" // @Param list_id path string true "The ID of the list to which objects will be added" // @Param objects body apimodel.AddObjectsToListRequest true "The list of object IDs to add to the list" // @Success 200 {object} string "Objects added successfully" @@ -154,7 +154,7 @@ func AddObjectsToListHandler(s *service.Service) gin.HandlerFunc { // @Tags Lists // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) -// @Param space_id path string true "The ID of the space to which the list belongs; retrieve from ListSpaces endpoint" +// @Param space_id path string true "The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint" // @Param list_id path string true "The ID of the list from which the object will be removed" // @Param object_id path string true "The ID of the object to remove from the list" // @Success 200 {object} string "Objects removed successfully" diff --git a/core/api/handler/member.go b/core/api/handler/member.go index 333e25749..33277fb19 100644 --- a/core/api/handler/member.go +++ b/core/api/handler/member.go @@ -19,7 +19,7 @@ import ( // @Tags Members // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) -// @Param space_id path string true "The ID of the space to list members for" +// @Param space_id path string true "The ID of the space to list members for; must be retrieved from ListSpaces endpoint" // @Param offset query int false "The number of items to skip before starting to collect the result set" default(0) // @Param limit query int false "The number of items to return" default(100) maximum(1000) // @Success 200 {object} pagination.PaginatedResponse[apimodel.Member] "The list of members in the space" @@ -56,7 +56,7 @@ func ListMembersHandler(s *service.Service) gin.HandlerFunc { // @Tags Members // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) -// @Param space_id path string true "The ID of the space to get the member from" +// @Param space_id path string true "The ID of the space to get the member from; must be retrieved from ListSpaces endpoint" // @Param member_id path string true "Member ID or Identity" // @Success 200 {object} apimodel.MemberResponse "The member details" // @Failure 401 {object} util.UnauthorizedError "Unauthorized" @@ -95,7 +95,7 @@ func GetMemberHandler(s *service.Service) gin.HandlerFunc { // @Accept json // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) -// @Param space_id path string true "The ID of the space to update the member in" +// @Param space_id path string true "The ID of the space to update the member in; must be retrieved from ListSpaces endpoint" // @Param member_id path string true "The ID of the member to update" // @Param body body apimodel.UpdateMemberRequest true "The request body containing the member's new status and role" // @Success 200 {object} apimodel.MemberResponse "Member updated successfully" diff --git a/core/api/handler/object.go b/core/api/handler/object.go index 0faff848f..cf959b6fb 100644 --- a/core/api/handler/object.go +++ b/core/api/handler/object.go @@ -19,7 +19,7 @@ import ( // @Tags Objects // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) -// @Param space_id path string true "The ID of the space in which to list objects" +// @Param space_id path string true "The ID of the space in which to list objects; must be retrieved from ListSpaces endpoint" // @Param offset query int false "The number of items to skip before starting to collect the result set" default(0) // @Param limit query int false "The number of items to return" default(100) maximum(1000) // @Success 200 {object} pagination.PaginatedResponse[apimodel.Object] "The list of objects in the specified space" @@ -58,7 +58,7 @@ func ListObjectsHandler(s *service.Service) gin.HandlerFunc { // @Tags Objects // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) -// @Param space_id path string true "The ID of the space in which the object exists" +// @Param space_id path string true "The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint" // @Param object_id path string true "The ID of the object to retrieve" // @Param format query apimodel.BodyFormat false "The format to return the object body in" default("md") // @Success 200 {object} apimodel.ObjectResponse "The retrieved object" @@ -101,7 +101,7 @@ func GetObjectHandler(s *service.Service) gin.HandlerFunc { // @Accept json // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) -// @Param space_id path string true "The ID of the space in which to create the object" +// @Param space_id path string true "The ID of the space in which to create the object; must be retrieved from ListSpaces endpoint" // @Param object body apimodel.CreateObjectRequest true "The object to create" // @Success 200 {object} apimodel.ObjectResponse "The created object" // @Failure 400 {object} util.ValidationError "Bad request" @@ -152,7 +152,7 @@ func CreateObjectHandler(s *service.Service) gin.HandlerFunc { // @Accept json // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) -// @Param space_id path string true "The ID of the space in which the object exists" +// @Param space_id path string true "The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint" // @Param object_id path string true "The ID of the object to update" // @Param object body apimodel.UpdateObjectRequest true "The details of the object to update" // @Success 200 {object} apimodel.ObjectResponse "The updated object" @@ -203,7 +203,7 @@ func UpdateObjectHandler(s *service.Service) gin.HandlerFunc { // @Tags Objects // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) -// @Param space_id path string true "The ID of the space in which the object exists" +// @Param space_id path string true "The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint" // @Param object_id path string true "The ID of the object to delete" // @Success 200 {object} apimodel.ObjectResponse "The deleted object" // @Failure 401 {object} util.UnauthorizedError "Unauthorized" diff --git a/core/api/handler/property.go b/core/api/handler/property.go index 2b3546c61..c23f834ec 100644 --- a/core/api/handler/property.go +++ b/core/api/handler/property.go @@ -19,7 +19,7 @@ import ( // @Tags Properties // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) -// @Param space_id path string true "The ID of the space to list properties for" +// @Param space_id path string true "The ID of the space to list properties for; must be retrieved from ListSpaces endpoint" // @Param offset query int false "The number of items to skip before starting to collect the result set" default(0) // @Param limit query int false "The number of items to return" default(100) maximum(1000) // @Success 200 {object} pagination.PaginatedResponse[apimodel.Property] "The list of properties in the specified space" @@ -56,7 +56,7 @@ func ListPropertiesHandler(s *service.Service) gin.HandlerFunc { // @Tags Properties // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) -// @Param space_id path string true "The ID of the space to which the property belongs" +// @Param space_id path string true "The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint" // @Param property_id path string true "The ID of the property to retrieve" // @Success 200 {object} apimodel.PropertyResponse "The requested property" // @Failure 401 {object} util.UnauthorizedError "Unauthorized" @@ -96,7 +96,7 @@ func GetPropertyHandler(s *service.Service) gin.HandlerFunc { // @Accept json // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) -// @Param space_id path string true "The ID of the space to create the property in" +// @Param space_id path string true "The ID of the space to create the property in; must be retrieved from ListSpaces endpoint" // @Param property body apimodel.CreatePropertyRequest true "The property to create" // @Success 200 {object} apimodel.PropertyResponse "The created property" // @Failure 400 {object} util.ValidationError "Bad request" @@ -142,7 +142,7 @@ func CreatePropertyHandler(s *service.Service) gin.HandlerFunc { // @Accept json // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) -// @Param space_id path string true "The ID of the space to which the property belongs" +// @Param space_id path string true "The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint" // @Param property_id path string true "The ID of the property to update" // @Param property body apimodel.UpdatePropertyRequest true "The property to update" // @Success 200 {object} apimodel.PropertyResponse "The updated property" @@ -195,7 +195,7 @@ func UpdatePropertyHandler(s *service.Service) gin.HandlerFunc { // @Tags Properties // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) -// @Param space_id path string true "The ID of the space to which the property belongs" +// @Param space_id path string true "The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint" // @Param property_id path string true "The ID of the property to delete" // @Success 200 {object} apimodel.PropertyResponse "The deleted property" // @Failure 401 {object} util.UnauthorizedError "Unauthorized" diff --git a/core/api/handler/search.go b/core/api/handler/search.go index 3bdfc6acc..81e129f02 100644 --- a/core/api/handler/search.go +++ b/core/api/handler/search.go @@ -64,7 +64,7 @@ func GlobalSearchHandler(s *service.Service) gin.HandlerFunc { // @Accept json // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) -// @Param space_id path string true "The ID of the space to search in; retrieve from ListSpaces endpoint" +// @Param space_id path string true "The ID of the space to search in; must be retrieved from ListSpaces endpoint" // @Param offset query int false "The number of items to skip before starting to collect the result set" default(0) // @Param limit query int false "The number of items to return" default(100) maximum(1000) // @Param request body apimodel.SearchRequest true "The search parameters used to filter and sort the results" diff --git a/core/api/handler/space.go b/core/api/handler/space.go index 575e40b7e..8d8de4496 100644 --- a/core/api/handler/space.go +++ b/core/api/handler/space.go @@ -56,7 +56,7 @@ func ListSpacesHandler(s *service.Service) gin.HandlerFunc { // @Tags Spaces // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) -// @Param space_id path string true "The ID of the space to retrieve" +// @Param space_id path string true "The ID of the space to retrieve; must be retrieved from ListSpaces endpoint" // @Success 200 {object} apimodel.SpaceResponse "The space details" // @Failure 401 {object} util.UnauthorizedError "Unauthorized" // @Failure 404 {object} util.NotFoundError "Space not found" @@ -137,7 +137,7 @@ func CreateSpaceHandler(s *service.Service) gin.HandlerFunc { // @Accept json // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) -// @Param space_id path string true "The ID of the space to update" +// @Param space_id path string true "The ID of the space to update; must be retrieved from ListSpaces endpoint" // @Param name body apimodel.UpdateSpaceRequest true "The space details to update" // @Success 200 {object} apimodel.SpaceResponse "The updated space" // @Failure 400 {object} util.ValidationError "Bad request" diff --git a/core/api/handler/tag.go b/core/api/handler/tag.go index 5afa1f542..b5ab33977 100644 --- a/core/api/handler/tag.go +++ b/core/api/handler/tag.go @@ -19,7 +19,7 @@ import ( // @Tags Tags // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) -// @Param space_id path string true "The ID of the space to list tags for" +// @Param space_id path string true "The ID of the space to list tags for; must be retrieved from ListSpaces endpoint" // @Param property_id path string true "The ID of the property to list tags for" // @Success 200 {object} pagination.PaginatedResponse[apimodel.Tag] "The list of tags" // @Failure 401 {object} util.UnauthorizedError "Unauthorized" @@ -58,7 +58,7 @@ func ListTagsHandler(s *service.Service) gin.HandlerFunc { // @Tags Tags // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) -// @Param space_id path string true "The ID of the space to retrieve the tag from" +// @Param space_id path string true "The ID of the space to retrieve the tag from; must be retrieved from ListSpaces endpoint" // @Param property_id path string true "The ID of the property to retrieve the tag for" // @Param tag_id path string true "The ID of the tag to retrieve" // @Success 200 {object} apimodel.TagResponse "The retrieved tag" @@ -100,7 +100,7 @@ func GetTagHandler(s *service.Service) gin.HandlerFunc { // @Accept json // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) -// @Param space_id path string true "The ID of the space to create the tag in" +// @Param space_id path string true "The ID of the space to create the tag in; must be retrieved from ListSpaces endpoint" // @Param property_id path string true "The ID of the property to create the tag for" // @Param tag body apimodel.CreateTagRequest true "The tag to create" // @Success 200 {object} apimodel.TagResponse "The created tag" @@ -148,7 +148,7 @@ func CreateTagHandler(s *service.Service) gin.HandlerFunc { // @Accept json // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) -// @Param space_id path string true "The ID of the space to update the tag in" +// @Param space_id path string true "The ID of the space to update the tag in; must be retrieved from ListSpaces endpoint" // @Param property_id path string true "The ID of the property to update the tag for" // @Param tag_id path string true "The ID of the tag to update" // @Param tag body apimodel.UpdateTagRequest true "The tag to update" @@ -202,7 +202,7 @@ func UpdateTagHandler(s *service.Service) gin.HandlerFunc { // @Tags Tags // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) -// @Param space_id path string true "The ID of the space to delete the tag from" +// @Param space_id path string true "The ID of the space to delete the tag from; must be retrieved from ListSpaces endpoint" // @Param property_id path string true "The ID of the property to delete the tag for" // @Param tag_id path string true "The ID of the tag to delete" // @Success 200 {object} apimodel.TagResponse "The deleted tag" diff --git a/core/api/handler/template.go b/core/api/handler/template.go index a211afa4e..76e8f1a5e 100644 --- a/core/api/handler/template.go +++ b/core/api/handler/template.go @@ -19,7 +19,7 @@ import ( // @Tags Templates // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) -// @Param space_id path string true "The ID of the space to which the type belongs" +// @Param space_id path string true "The ID of the space to which the type belongs; must be retrieved from ListSpaces endpoint" // @Param type_id path string true "The ID of the object type to retrieve templates for" // @Param offset query int false "The number of items to skip before starting to collect the result set" default(0) // @Param limit query int false "The number of items to return" default(100) maximum(1000) @@ -61,7 +61,7 @@ func ListTemplatesHandler(s *service.Service) gin.HandlerFunc { // @Tags Templates // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) -// @Param space_id path string true "The ID of the space to which the template belongs" +// @Param space_id path string true "The ID of the space to which the template belongs; must be retrieved from ListSpaces endpoint" // @Param type_id path string true "The ID of the object type to which the template belongs" // @Param template_id path string true "The ID of the template to retrieve" // @Success 200 {object} apimodel.TemplateResponse "The requested template" diff --git a/core/api/handler/type.go b/core/api/handler/type.go index bd3ead177..1d99b3584 100644 --- a/core/api/handler/type.go +++ b/core/api/handler/type.go @@ -19,7 +19,7 @@ import ( // @Tags Types // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) -// @Param space_id path string true "The ID of the space to retrieve types from" +// @Param space_id path string true "The ID of the space to retrieve types from; must be retrieved from ListSpaces endpoint" // @Param offset query int false "The number of items to skip before starting to collect the result set" default(0) // @Param limit query int false "The number of items to return" default(100) maximum(1000) // @Success 200 {object} pagination.PaginatedResponse[apimodel.Type] "The list of types" @@ -56,7 +56,7 @@ func ListTypesHandler(s *service.Service) gin.HandlerFunc { // @Tags Types // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) -// @Param space_id path string true "The ID of the space from which to retrieve the type" +// @Param space_id path string true "The ID of the space from which to retrieve the type; must be retrieved from ListSpaces endpoint" // @Param type_id path string true "The ID of the type to retrieve" // @Success 200 {object} apimodel.TypeResponse "The requested type" // @Failure 401 {object} util.UnauthorizedError "Unauthorized" @@ -96,7 +96,7 @@ func GetTypeHandler(s *service.Service) gin.HandlerFunc { // @Accept json // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) -// @Param space_id path string true "The ID of the space in which to create the type" +// @Param space_id path string true "The ID of the space in which to create the type; must be retrieved from ListSpaces endpoint" // @Param type body apimodel.CreateTypeRequest true "The type to create" // @Success 200 {object} apimodel.TypeResponse "The created type" // @Failure 400 {object} util.ValidationError "Bad request" @@ -142,7 +142,7 @@ func CreateTypeHandler(s *service.Service) gin.HandlerFunc { // @Accept json // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) -// @Param space_id path string true "The ID of the space in which the type exists" +// @Param space_id path string true "The ID of the space in which the type exists; must be retrieved from ListSpaces endpoint" // @Param type_id path string true "The ID of the type to update" // @Param type body apimodel.UpdateTypeRequest true "The type details to update" // @Success 200 {object} apimodel.TypeResponse "The updated type" @@ -193,7 +193,7 @@ func UpdateTypeHandler(s *service.Service) gin.HandlerFunc { // @Tags Types // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) -// @Param space_id path string true "The ID of the space from which to delete the type" +// @Param space_id path string true "The ID of the space from which to delete the type; must be retrieved from ListSpaces endpoint" // @Param type_id path string true "The ID of the type to delete" // @Success 200 {object} apimodel.TypeResponse "The deleted type" // @Failure 401 {object} util.UnauthorizedError "Unauthorized" From f81ebf1319fb1393faba5ad759916052767e4cab Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Sat, 17 May 2025 17:41:46 +0200 Subject: [PATCH 075/164] GO-5589: Add param cross-reference hints to endpoints --- core/api/docs/docs.go | 4 +- core/api/docs/openapi.json | 82 +++++++++--------- core/api/docs/openapi.yaml | 157 +++++++++++++++++++++-------------- core/api/handler/list.go | 14 ++-- core/api/handler/member.go | 4 +- core/api/handler/object.go | 6 +- core/api/handler/tag.go | 16 ++-- core/api/handler/template.go | 10 +-- core/api/handler/type.go | 16 ++-- core/api/model/object.go | 4 +- core/api/model/property.go | 4 +- core/api/model/search.go | 10 +-- core/api/service/search.go | 2 +- core/api/service/template.go | 2 +- 14 files changed, 181 insertions(+), 150 deletions(-) diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go index 2187d78a5..1d5d07863 100644 --- a/core/api/docs/docs.go +++ b/core/api/docs/docs.go @@ -6,10 +6,10 @@ import "github.com/swaggo/swag/v2" const docTemplate = `{ "schemes": {{ marshal .Schemes }}, - "components": {"schemas":{"apimodel.AddObjectsToListRequest":{"properties":{"objects":{"description":"The list of object IDs to add to the list","example":["[\"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ\"]"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file ids of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["emoji","file","icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag ids of the property","example":["['tag_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"key":{"example":"creator","type":"string"},"objects":{"description":"The object ids of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to search for, specified by their key","example":["page","task","bookmark"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"key":{"example":"status","type":"string"},"select":{"description":"The selected tag id of the property","example":"tag_id","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TokenResponse":{"properties":{"app_key":{"description":"The app key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, + "components": {"schemas":{"apimodel.AddObjectsToListRequest":{"properties":{"objects":{"description":"The list of object IDs to add to the list","example":["[\"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ\"]"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object; see ListTypes or GetType endpoints for linked properties","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file ids of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["emoji","file","icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag ids of the property; see ListTags endpoint for valid values","example":["['tag_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"key":{"example":"creator","type":"string"},"objects":{"description":"The object ids of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The text to search within object names and content; use types field for type filtering","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to include in results (e.g., \"page\", \"task\", \"bookmark\"); see ListTypes endpoint for valid values","example":["page","task","bookmark"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"key":{"example":"status","type":"string"},"select":{"description":"The selected tag id of the property; see ListTags endpoint for valid values","example":"tag_id","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results by","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting options for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The key of the property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TokenResponse":{"properties":{"app_key":{"description":"The app key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object; see ListTypes or GetType endpoints for linked properties","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, "info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-api/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"}, "externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"}, - "paths": {"/v1/auth/display_code":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid ` + "`" + `app_name` + "`" + `, the server issues a unique ` + "`" + `challenge_id` + "`" + ` and displays a short code within the Anytype Desktop. The ` + "`" + `challenge_id` + "`" + ` must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"create_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.DisplayCodeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start challenge","tags":["Auth"]}},"/v1/auth/token":{"post":{"description":"After receiving a ` + "`" + `challenge_id` + "`" + ` from the ` + "`" + `display_code` + "`" + ` endpoint, the client calls this endpoint to provide the corresponding 4-digit code along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent ` + "`" + `app_key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.","operationId":"solve_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TokenResponse"}}},"description":"The app key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Solve challenge","tags":["Auth"]}},"/v1/search":{"post":{"description":"Executes a global search over all spaces accessible to the authenticated user. The request body must specify the ` + "`" + `query` + "`" + ` text (currently matching only name and snippet of an object), optional filters on types (e.g., \"page\", \"task\"), and sort directives (default: descending by last modified date). Pagination is controlled via ` + "`" + `offset` + "`" + ` and ` + "`" + `limit` + "`" + ` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"search_global","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/v1/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"list_spaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"create_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/v1/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"get_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"update_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"add_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.AddObjectsToListRequest"}}},"description":"The list of object IDs to add to the list","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"remove_list_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"get_list_views","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"get_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/v1/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"list_members","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/v1/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"get_member","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/v1/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"create_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/v1/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"get_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"update_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/v1/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"list_properties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"create_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"get_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"update_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"list_tags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"create_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"get_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"update_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/v1/spaces/{space_id}/search":{"post":{"description":"Performs a search within a single space (specified by the ` + "`" + `space_id` + "`" + ` path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search ` + "`" + `query` + "`" + `, ` + "`" + `types` + "`" + `, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"search_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/v1/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"list_types","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new object type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"create_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an object type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"get_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing object type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"update_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"list_templates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to retrieve templates for","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/v1/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"get_template","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object type to which the template belongs","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, + "paths": {"/v1/auth/display_code":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid ` + "`" + `app_name` + "`" + `, the server issues a unique ` + "`" + `challenge_id` + "`" + ` and displays a short code within the Anytype Desktop. The ` + "`" + `challenge_id` + "`" + ` must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"create_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.DisplayCodeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start challenge","tags":["Auth"]}},"/v1/auth/token":{"post":{"description":"After receiving a ` + "`" + `challenge_id` + "`" + ` from the ` + "`" + `display_code` + "`" + ` endpoint, the client calls this endpoint to provide the corresponding 4-digit code along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent ` + "`" + `app_key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.","operationId":"solve_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TokenResponse"}}},"description":"The app key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Solve challenge","tags":["Auth"]}},"/v1/search":{"post":{"description":"Executes a global search over all spaces accessible to the authenticated user. The request body must specify the ` + "`" + `query` + "`" + ` text (currently matching only name and snippet of an object), optional filters on types (e.g., \"page\", \"task\"), and sort directives (default: descending by last modified date). Pagination is controlled via ` + "`" + `offset` + "`" + ` and ` + "`" + `limit` + "`" + ` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"search_global","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/v1/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"list_spaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"create_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/v1/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"get_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"update_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"add_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added; must be retrieved from SearchSpace endpoint with types=['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.AddObjectsToListRequest"}}},"description":"The list of object IDs to add to the list; must be retrieved from SearchSpace or GlobalSearch endpoint or obtained from response context","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"remove_list_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed; must be retrieved from SearchSpace endpoint with types=['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list; must be retrieved from SearchSpace or GlobalSearch endpoint or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"get_list_views","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for; must be retrieved from SearchSpace endpoint with types=['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"get_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for; must be retrieved from SearchSpace endpoint with types=['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for; must be retrieved from ListViews endpoint or omited if you want to get all objects in the list","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/v1/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"list_members","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/v1/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"get_member","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity; must be retrieved from ListMembers endpoint or obtained from response context","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/v1/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"create_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/v1/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"get_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"update_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/v1/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"list_properties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"create_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"get_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"update_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"list_tags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"create_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"get_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"update_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/v1/spaces/{space_id}/search":{"post":{"description":"Performs a search within a single space (specified by the ` + "`" + `space_id` + "`" + ` path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search ` + "`" + `query` + "`" + `, ` + "`" + `types` + "`" + `, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"search_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/v1/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"list_types","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"create_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"get_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"update_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"list_templates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve templates for; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/v1/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"get_template","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to which the template belongs; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve; must be retrieved from ListTemplates endpoint or obtained from response context","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, "openapi": "3.1.0", "servers": [ {"url":"http://localhost:31009"} diff --git a/core/api/docs/openapi.json b/core/api/docs/openapi.json index 5d3a845fa..e604bdaae 100644 --- a/core/api/docs/openapi.json +++ b/core/api/docs/openapi.json @@ -109,7 +109,7 @@ "type": "string" }, "properties": { - "description": "⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object", + "description": "⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object; see ListTypes or GetType endpoints for linked properties", "items": { "$ref": "#/components/schemas/apimodel.PropertyLinkWithValue" }, @@ -555,7 +555,7 @@ "type": "string" }, "multi_select": { - "description": "The selected tag ids of the property", + "description": "The selected tag ids of the property; see ListTags endpoint for valid values", "example": [ "['tag_id']" ], @@ -1087,7 +1087,7 @@ "apimodel.SearchRequest": { "properties": { "query": { - "description": "The search term to look for in object names and snippets", + "description": "The text to search within object names and content; use types field for type filtering", "example": "test", "type": "string" }, @@ -1095,7 +1095,7 @@ "$ref": "#/components/schemas/apimodel.SortOptions" }, "types": { - "description": "The types of objects to search for, specified by their key", + "description": "The types of objects to include in results (e.g., \"page\", \"task\", \"bookmark\"); see ListTypes endpoint for valid values", "example": [ "page", "task", @@ -1117,7 +1117,7 @@ "type": "string" }, "select": { - "description": "The selected tag id of the property", + "description": "The selected tag id of the property; see ListTags endpoint for valid values", "example": "tag_id", "type": "string" } @@ -1185,7 +1185,7 @@ }, "apimodel.SortDirection": { "default": "desc", - "description": "The direction to sort the search results", + "description": "The direction to sort the search results by", "enum": [ "asc", "desc" @@ -1197,7 +1197,7 @@ ] }, "apimodel.SortOptions": { - "description": "The sorting criteria and direction for the search results", + "description": "The sorting options for the search results", "properties": { "direction": { "$ref": "#/components/schemas/apimodel.SortDirection" @@ -1210,7 +1210,7 @@ }, "apimodel.SortProperty": { "default": "last_modified_date", - "description": "The property to sort the search results by", + "description": "The key of the property to sort the search results by", "enum": [ "created_date", "last_modified_date", @@ -1513,7 +1513,7 @@ "type": "string" }, "properties": { - "description": "⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object", + "description": "⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object; see ListTypes or GetType endpoints for linked properties", "items": { "$ref": "#/components/schemas/apimodel.PropertyLinkWithValue" }, @@ -2583,7 +2583,7 @@ } }, { - "description": "The ID of the list to which objects will be added", + "description": "The ID of the list to which objects will be added; must be retrieved from SearchSpace endpoint with types=['collection', 'set']", "in": "path", "name": "list_id", "required": true, @@ -2600,7 +2600,7 @@ } } }, - "description": "The list of object IDs to add to the list", + "description": "The list of object IDs to add to the list; must be retrieved from SearchSpace or GlobalSearch endpoint or obtained from response context", "required": true }, "responses": { @@ -2701,7 +2701,7 @@ } }, { - "description": "The ID of the list from which the object will be removed", + "description": "The ID of the list from which the object will be removed; must be retrieved from SearchSpace endpoint with types=['collection', 'set']", "in": "path", "name": "list_id", "required": true, @@ -2710,7 +2710,7 @@ } }, { - "description": "The ID of the object to remove from the list", + "description": "The ID of the object to remove from the list; must be retrieved from SearchSpace or GlobalSearch endpoint or obtained from response context", "in": "path", "name": "object_id", "required": true, @@ -2817,7 +2817,7 @@ } }, { - "description": "The ID of the list to retrieve views for", + "description": "The ID of the list to retrieve views for; must be retrieved from SearchSpace endpoint with types=['collection', 'set']", "in": "path", "name": "list_id", "required": true, @@ -2921,7 +2921,7 @@ } }, { - "description": "The ID of the list to retrieve objects for", + "description": "The ID of the list to retrieve objects for; must be retrieved from SearchSpace endpoint with types=['collection', 'set']", "in": "path", "name": "list_id", "required": true, @@ -2930,7 +2930,7 @@ } }, { - "description": "The ID of the view to retrieve objects for", + "description": "The ID of the view to retrieve objects for; must be retrieved from ListViews endpoint or omited if you want to get all objects in the list", "in": "path", "name": "view_id", "required": true, @@ -3121,7 +3121,7 @@ } }, { - "description": "Member ID or Identity", + "description": "Member ID or Identity; must be retrieved from ListMembers endpoint or obtained from response context", "in": "path", "name": "member_id", "required": true, @@ -3392,7 +3392,7 @@ } }, { - "description": "The ID of the object to delete", + "description": "The ID of the object to delete; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context", "in": "path", "name": "object_id", "required": true, @@ -3507,7 +3507,7 @@ } }, { - "description": "The ID of the object to retrieve", + "description": "The ID of the object to retrieve; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context", "in": "path", "name": "object_id", "required": true, @@ -3614,7 +3614,7 @@ } }, { - "description": "The ID of the object to update", + "description": "The ID of the object to update; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context", "in": "path", "name": "object_id", "required": true, @@ -4274,7 +4274,7 @@ } }, { - "description": "The ID of the property to list tags for", + "description": "The ID of the property to list tags for; must be retrieved from ListProperties endpoint or obtained from response context", "in": "path", "name": "property_id", "required": true, @@ -4359,7 +4359,7 @@ } }, { - "description": "The ID of the property to create the tag for", + "description": "The ID of the property to create the tag for; must be retrieved from ListProperties endpoint or obtained from response context", "in": "path", "name": "property_id", "required": true, @@ -4467,7 +4467,7 @@ } }, { - "description": "The ID of the property to delete the tag for", + "description": "The ID of the property to delete the tag for; must be retrieved from ListProperties endpoint or obtained from response context", "in": "path", "name": "property_id", "required": true, @@ -4476,7 +4476,7 @@ } }, { - "description": "The ID of the tag to delete", + "description": "The ID of the tag to delete; must be retrieved from ListTags endpoint or obtained from response context", "in": "path", "name": "tag_id", "required": true, @@ -4591,7 +4591,7 @@ } }, { - "description": "The ID of the property to retrieve the tag for", + "description": "The ID of the property to retrieve the tag for; must be retrieved from ListProperties endpoint or obtained from response context", "in": "path", "name": "property_id", "required": true, @@ -4600,7 +4600,7 @@ } }, { - "description": "The ID of the tag to retrieve", + "description": "The ID of the tag to retrieve; must be retrieved from ListTags endpoint or obtained from response context", "in": "path", "name": "tag_id", "required": true, @@ -4695,7 +4695,7 @@ } }, { - "description": "The ID of the property to update the tag for", + "description": "The ID of the property to update the tag for; must be retrieved from ListProperties endpoint or obtained from response context", "in": "path", "name": "property_id", "required": true, @@ -4704,7 +4704,7 @@ } }, { - "description": "The ID of the tag to update", + "description": "The ID of the tag to update; must be retrieved from ListTags endpoint or obtained from response context", "in": "path", "name": "tag_id", "required": true, @@ -4917,7 +4917,7 @@ }, "/v1/spaces/{space_id}/types": { "get": { - "description": "This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.", + "description": "This endpoint retrieves a paginated list of types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.", "operationId": "list_types", "parameters": [ { @@ -5002,7 +5002,7 @@ ] }, "post": { - "description": "Creates a new object type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.", + "description": "Creates a new type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.", "operationId": "create_type", "parameters": [ { @@ -5101,7 +5101,7 @@ }, "/v1/spaces/{space_id}/types/{type_id}": { "delete": { - "description": "This endpoint “deletes” an object type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.", + "description": "This endpoint “deletes” an type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.", "operationId": "delete_type", "parameters": [ { @@ -5124,7 +5124,7 @@ } }, { - "description": "The ID of the type to delete", + "description": "The ID of the type to delete; must be retrieved from ListTypes endpoint or obtained from response context", "in": "path", "name": "type_id", "required": true, @@ -5216,7 +5216,7 @@ ] }, "get": { - "description": "Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).", + "description": "Fetches detailed information about one specific type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).", "operationId": "get_type", "parameters": [ { @@ -5239,7 +5239,7 @@ } }, { - "description": "The ID of the type to retrieve", + "description": "The ID of the type to retrieve; must be retrieved from ListTypes endpoint or obtained from response context", "in": "path", "name": "type_id", "required": true, @@ -5311,7 +5311,7 @@ ] }, "patch": { - "description": "This endpoint updates an existing object type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.", + "description": "This endpoint updates an existing type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.", "operationId": "update_type", "parameters": [ { @@ -5334,7 +5334,7 @@ } }, { - "description": "The ID of the type to update", + "description": "The ID of the type to update; must be retrieved from ListTypes endpoint or obtained from response context", "in": "path", "name": "type_id", "required": true, @@ -5439,7 +5439,7 @@ }, "/v1/spaces/{space_id}/types/{type_id}/templates": { "get": { - "description": "This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.", + "description": "This endpoint returns a paginated list of templates that are associated with a specific type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.", "operationId": "list_templates", "parameters": [ { @@ -5462,7 +5462,7 @@ } }, { - "description": "The ID of the object type to retrieve templates for", + "description": "The ID of the type to retrieve templates for; must be retrieved from ListTypes endpoint or obtained from response context", "in": "path", "name": "type_id", "required": true, @@ -5535,7 +5535,7 @@ }, "/v1/spaces/{space_id}/types/{type_id}/templates/{template_id}": { "get": { - "description": "Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.", + "description": "Fetches full details for one template associated with a particular type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.", "operationId": "get_template", "parameters": [ { @@ -5558,7 +5558,7 @@ } }, { - "description": "The ID of the object type to which the template belongs", + "description": "The ID of the type to which the template belongs; must be retrieved from ListTypes endpoint or obtained from response context", "in": "path", "name": "type_id", "required": true, @@ -5567,7 +5567,7 @@ } }, { - "description": "The ID of the template to retrieve", + "description": "The ID of the template to retrieve; must be retrieved from ListTemplates endpoint or obtained from response context", "in": "path", "name": "template_id", "required": true, diff --git a/core/api/docs/openapi.yaml b/core/api/docs/openapi.yaml index 703cbd128..9c58d1bc8 100644 --- a/core/api/docs/openapi.yaml +++ b/core/api/docs/openapi.yaml @@ -86,7 +86,8 @@ components: type: string properties: description: '⚠ Warning: Properties are experimental and may change in the - next update. ⚠ The properties to set on the object' + next update. ⚠ The properties to set on the object; see ListTypes or GetType + endpoints for linked properties' items: $ref: '#/components/schemas/apimodel.PropertyLinkWithValue' type: array @@ -417,7 +418,8 @@ components: example: tag type: string multi_select: - description: The selected tag ids of the property + description: The selected tag ids of the property; see ListTags endpoint + for valid values example: - '[''tag_id'']' items: @@ -794,13 +796,15 @@ components: apimodel.SearchRequest: properties: query: - description: The search term to look for in object names and snippets + description: The text to search within object names and content; use types + field for type filtering example: test type: string sort: $ref: '#/components/schemas/apimodel.SortOptions' types: - description: The types of objects to search for, specified by their key + description: The types of objects to include in results (e.g., "page", "task", + "bookmark"); see ListTypes endpoint for valid values example: - page - task @@ -816,7 +820,8 @@ components: example: status type: string select: - description: The selected tag id of the property + description: The selected tag id of the property; see ListTags endpoint + for valid values example: tag_id type: string type: object @@ -866,7 +871,7 @@ components: type: object apimodel.SortDirection: default: desc - description: The direction to sort the search results + description: The direction to sort the search results by enum: - asc - desc @@ -875,7 +880,7 @@ components: - Asc - Desc apimodel.SortOptions: - description: The sorting criteria and direction for the search results + description: The sorting options for the search results properties: direction: $ref: '#/components/schemas/apimodel.SortDirection' @@ -884,7 +889,7 @@ components: type: object apimodel.SortProperty: default: last_modified_date - description: The property to sort the search results by + description: The key of the property to sort the search results by enum: - created_date - last_modified_date @@ -1114,7 +1119,8 @@ components: type: string properties: description: '⚠ Warning: Properties are experimental and may change in the - next update. ⚠ The properties to set for the object' + next update. ⚠ The properties to set for the object; see ListTypes or + GetType endpoints for linked properties' items: $ref: '#/components/schemas/apimodel.PropertyLinkWithValue' type: array @@ -1869,7 +1875,8 @@ paths: required: true schema: type: string - - description: The ID of the list to which objects will be added + - description: The ID of the list to which objects will be added; must be retrieved + from SearchSpace endpoint with types=['collection', 'set'] in: path name: list_id required: true @@ -1880,7 +1887,8 @@ paths: application/json: schema: $ref: '#/components/schemas/apimodel.AddObjectsToListRequest' - description: The list of object IDs to add to the list + description: The list of object IDs to add to the list; must be retrieved + from SearchSpace or GlobalSearch endpoint or obtained from response context required: true responses: "200": @@ -1946,13 +1954,15 @@ paths: required: true schema: type: string - - description: The ID of the list from which the object will be removed + - description: The ID of the list from which the object will be removed; must + be retrieved from SearchSpace endpoint with types=['collection', 'set'] in: path name: list_id required: true schema: type: string - - description: The ID of the object to remove from the list + - description: The ID of the object to remove from the list; must be retrieved + from SearchSpace or GlobalSearch endpoint or obtained from response context in: path name: object_id required: true @@ -2024,7 +2034,8 @@ paths: required: true schema: type: string - - description: The ID of the list to retrieve views for + - description: The ID of the list to retrieve views for; must be retrieved from + SearchSpace endpoint with types=['collection', 'set'] in: path name: list_id required: true @@ -2096,13 +2107,16 @@ paths: required: true schema: type: string - - description: The ID of the list to retrieve objects for + - description: The ID of the list to retrieve objects for; must be retrieved + from SearchSpace endpoint with types=['collection', 'set'] in: path name: list_id required: true schema: type: string - - description: The ID of the view to retrieve objects for + - description: The ID of the view to retrieve objects for; must be retrieved + from ListViews endpoint or omited if you want to get all objects in the + list in: path name: view_id required: true @@ -2236,7 +2250,8 @@ paths: required: true schema: type: string - - description: Member ID or Identity + - description: Member ID or Identity; must be retrieved from ListMembers endpoint + or obtained from response context in: path name: member_id required: true @@ -2425,7 +2440,8 @@ paths: required: true schema: type: string - - description: The ID of the object to delete + - description: The ID of the object to delete; must be retrieved from ListObjects, + SearchSpace or GlobalSearch endpoints or obtained from response context in: path name: object_id required: true @@ -2502,7 +2518,8 @@ paths: required: true schema: type: string - - description: The ID of the object to retrieve + - description: The ID of the object to retrieve; must be retrieved from ListObjects, + SearchSpace or GlobalSearch endpoints or obtained from response context in: path name: object_id required: true @@ -2573,7 +2590,8 @@ paths: required: true schema: type: string - - description: The ID of the object to update + - description: The ID of the object to update; must be retrieved from ListObjects, + SearchSpace or GlobalSearch endpoints or obtained from response context in: path name: object_id required: true @@ -3015,7 +3033,8 @@ paths: required: true schema: type: string - - description: The ID of the property to list tags for + - description: The ID of the property to list tags for; must be retrieved from + ListProperties endpoint or obtained from response context in: path name: property_id required: true @@ -3074,7 +3093,8 @@ paths: required: true schema: type: string - - description: The ID of the property to create the tag for + - description: The ID of the property to create the tag for; must be retrieved + from ListProperties endpoint or obtained from response context in: path name: property_id required: true @@ -3146,13 +3166,15 @@ paths: required: true schema: type: string - - description: The ID of the property to delete the tag for + - description: The ID of the property to delete the tag for; must be retrieved + from ListProperties endpoint or obtained from response context in: path name: property_id required: true schema: type: string - - description: The ID of the tag to delete + - description: The ID of the tag to delete; must be retrieved from ListTags + endpoint or obtained from response context in: path name: tag_id required: true @@ -3227,13 +3249,15 @@ paths: required: true schema: type: string - - description: The ID of the property to retrieve the tag for + - description: The ID of the property to retrieve the tag for; must be retrieved + from ListProperties endpoint or obtained from response context in: path name: property_id required: true schema: type: string - - description: The ID of the tag to retrieve + - description: The ID of the tag to retrieve; must be retrieved from ListTags + endpoint or obtained from response context in: path name: tag_id required: true @@ -3298,13 +3322,15 @@ paths: required: true schema: type: string - - description: The ID of the property to update the tag for + - description: The ID of the property to update the tag for; must be retrieved + from ListProperties endpoint or obtained from response context in: path name: property_id required: true schema: type: string - - description: The ID of the tag to update + - description: The ID of the tag to update; must be retrieved from ListTags + endpoint or obtained from response context in: path name: tag_id required: true @@ -3442,13 +3468,12 @@ paths: - Search /v1/spaces/{space_id}/types: get: - description: This endpoint retrieves a paginated list of object types (e.g. - 'Page', 'Note', 'Task') available within the specified space. Each type’s - record includes its unique identifier, type key, display name, icon, and layout. - While a type's id is truly unique, a type's key can be the same across spaces - for known types, e.g. 'page' for 'Page'. Clients use this information when - offering choices for object creation or for filtering objects by type through - search. + description: This endpoint retrieves a paginated list of types (e.g. 'Page', + 'Note', 'Task') available within the specified space. Each type’s record includes + its unique identifier, type key, display name, icon, and layout. While a type's + id is truly unique, a type's key can be the same across spaces for known types, + e.g. 'page' for 'Page'. Clients use this information when offering choices + for object creation or for filtering objects by type through search. operationId: list_types parameters: - description: The version of the API to use @@ -3504,7 +3529,7 @@ paths: tags: - Types post: - description: Creates a new object type in the specified space using a JSON payload. + description: Creates a new type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects. @@ -3569,11 +3594,11 @@ paths: - Types /v1/spaces/{space_id}/types/{type_id}: delete: - description: This endpoint “deletes” an object type by marking it as archived. - The deletion process is performed safely and is subject to rate limiting. - It returns the type’s details after it has been archived. Proper error handling - is in place for situations such as when the type isn’t found or the deletion - cannot be performed because of permission issues. + description: This endpoint “deletes” an type by marking it as archived. The + deletion process is performed safely and is subject to rate limiting. It returns + the type’s details after it has been archived. Proper error handling is in + place for situations such as when the type isn’t found or the deletion cannot + be performed because of permission issues. operationId: delete_type parameters: - description: The version of the API to use @@ -3590,7 +3615,8 @@ paths: required: true schema: type: string - - description: The ID of the type to delete + - description: The ID of the type to delete; must be retrieved from ListTypes + endpoint or obtained from response context in: path name: type_id required: true @@ -3645,11 +3671,11 @@ paths: tags: - Types get: - description: Fetches detailed information about one specific object type by - its ID. This includes the type’s unique key, name, icon, and layout. This - detailed view assists clients in understanding the expected structure and - style for objects of that type and in guiding the user interface (such as - displaying appropriate icons or layout hints). + description: Fetches detailed information about one specific type by its ID. + This includes the type’s unique key, name, icon, and layout. This detailed + view assists clients in understanding the expected structure and style for + objects of that type and in guiding the user interface (such as displaying + appropriate icons or layout hints). operationId: get_type parameters: - description: The version of the API to use @@ -3666,7 +3692,8 @@ paths: required: true schema: type: string - - description: The ID of the type to retrieve + - description: The ID of the type to retrieve; must be retrieved from ListTypes + endpoint or obtained from response context in: path name: type_id required: true @@ -3709,10 +3736,10 @@ paths: tags: - Types patch: - description: This endpoint updates an existing object type in the specified - space using a JSON payload. The update process is subject to rate limiting. - The payload must include the name and properties to be updated. The endpoint - then returns the full type data, ready for further interactions. + description: This endpoint updates an existing type in the specified space using + a JSON payload. The update process is subject to rate limiting. The payload + must include the name and properties to be updated. The endpoint then returns + the full type data, ready for further interactions. operationId: update_type parameters: - description: The version of the API to use @@ -3729,7 +3756,8 @@ paths: required: true schema: type: string - - description: The ID of the type to update + - description: The ID of the type to update; must be retrieved from ListTypes + endpoint or obtained from response context in: path name: type_id required: true @@ -3793,10 +3821,10 @@ paths: /v1/spaces/{space_id}/types/{type_id}/templates: get: description: This endpoint returns a paginated list of templates that are associated - with a specific object type within a space. Templates provide pre‑configured - structures for creating new objects. Each template record contains its identifier, - name, and icon, so that clients can offer users a selection of templates when - creating objects. + with a specific type within a space. Templates provide pre‑configured structures + for creating new objects. Each template record contains its identifier, name, + and icon, so that clients can offer users a selection of templates when creating + objects. operationId: list_templates parameters: - description: The version of the API to use @@ -3813,7 +3841,8 @@ paths: required: true schema: type: string - - description: The ID of the object type to retrieve templates for + - description: The ID of the type to retrieve templates for; must be retrieved + from ListTypes endpoint or obtained from response context in: path name: type_id required: true @@ -3860,9 +3889,9 @@ paths: /v1/spaces/{space_id}/types/{type_id}/templates/{template_id}: get: description: Fetches full details for one template associated with a particular - object type in a space. The response provides the template’s identifier, name, - icon, and any other relevant metadata. This endpoint is useful when a client - needs to preview or apply a template to prefill object creation fields. + type in a space. The response provides the template’s identifier, name, icon, + and any other relevant metadata. This endpoint is useful when a client needs + to preview or apply a template to prefill object creation fields. operationId: get_template parameters: - description: The version of the API to use @@ -3879,13 +3908,15 @@ paths: required: true schema: type: string - - description: The ID of the object type to which the template belongs + - description: The ID of the type to which the template belongs; must be retrieved + from ListTypes endpoint or obtained from response context in: path name: type_id required: true schema: type: string - - description: The ID of the template to retrieve + - description: The ID of the template to retrieve; must be retrieved from ListTemplates + endpoint or obtained from response context in: path name: template_id required: true diff --git a/core/api/handler/list.go b/core/api/handler/list.go index a1dba107a..40e5eb9c3 100644 --- a/core/api/handler/list.go +++ b/core/api/handler/list.go @@ -20,7 +20,7 @@ import ( // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint" -// @Param list_id path string true "The ID of the list to retrieve views for" +// @Param list_id path string true "The ID of the list to retrieve views for; must be retrieved from SearchSpace endpoint with types=['collection', 'set']" // @Param offset query int false "The number of items to skip before starting to collect the result set" default(0) // @Param limit query int false "The number of items to return" // @Success 200 {object} pagination.PaginatedResponse[apimodel.View] "The list of views associated with the specified list" @@ -61,8 +61,8 @@ func GetListViewsHandler(s *service.Service) gin.HandlerFunc { // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint" -// @Param list_id path string true "The ID of the list to retrieve objects for" -// @Param view_id path string true "The ID of the view to retrieve objects for" +// @Param list_id path string true "The ID of the list to retrieve objects for; must be retrieved from SearchSpace endpoint with types=['collection', 'set']" +// @Param view_id path string true "The ID of the view to retrieve objects for; must be retrieved from ListViews endpoint or omited if you want to get all objects in the list" // @Param offset query int false "The number of items to skip before starting to collect the result set" default(0) // @Param limit query int false "The number of items to return" // @Success 200 {object} pagination.PaginatedResponse[apimodel.Object] "The list of objects associated with the specified list" @@ -109,8 +109,8 @@ func GetObjectsInListHandler(s *service.Service) gin.HandlerFunc { // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint" -// @Param list_id path string true "The ID of the list to which objects will be added" -// @Param objects body apimodel.AddObjectsToListRequest true "The list of object IDs to add to the list" +// @Param list_id path string true "The ID of the list to which objects will be added; must be retrieved from SearchSpace endpoint with types=['collection', 'set']" +// @Param objects body apimodel.AddObjectsToListRequest true "The list of object IDs to add to the list; must be retrieved from SearchSpace or GlobalSearch endpoints or obtained from response context" // @Success 200 {object} string "Objects added successfully" // @Failure 400 {object} util.ValidationError "Bad request" // @Failure 401 {object} util.UnauthorizedError "Unauthorized" @@ -155,8 +155,8 @@ func AddObjectsToListHandler(s *service.Service) gin.HandlerFunc { // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint" -// @Param list_id path string true "The ID of the list from which the object will be removed" -// @Param object_id path string true "The ID of the object to remove from the list" +// @Param list_id path string true "The ID of the list from which the object will be removed; must be retrieved from SearchSpace endpoint with types=['collection', 'set']" +// @Param object_id path string true "The ID of the object to remove from the list; must be retrieved from SearchSpace or GlobalSearch endpoints or obtained from response context" // @Success 200 {object} string "Objects removed successfully" // @Failure 400 {object} util.ValidationError "Bad request" // @Failure 401 {object} util.UnauthorizedError "Unauthorized" diff --git a/core/api/handler/member.go b/core/api/handler/member.go index 33277fb19..be642b59c 100644 --- a/core/api/handler/member.go +++ b/core/api/handler/member.go @@ -57,7 +57,7 @@ func ListMembersHandler(s *service.Service) gin.HandlerFunc { // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to get the member from; must be retrieved from ListSpaces endpoint" -// @Param member_id path string true "Member ID or Identity" +// @Param member_id path string true "Member ID or Identity; must be retrieved from ListMembers endpoint or obtained from response context" // @Success 200 {object} apimodel.MemberResponse "The member details" // @Failure 401 {object} util.UnauthorizedError "Unauthorized" // @Failure 404 {object} util.NotFoundError "Member not found" @@ -96,7 +96,7 @@ func GetMemberHandler(s *service.Service) gin.HandlerFunc { // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to update the member in; must be retrieved from ListSpaces endpoint" -// @Param member_id path string true "The ID of the member to update" +// @Param member_id path string true "The ID or Identity of the member to update; must be retrieved from ListMembers endpoint or obtained from response context" // @Param body body apimodel.UpdateMemberRequest true "The request body containing the member's new status and role" // @Success 200 {object} apimodel.MemberResponse "Member updated successfully" // @Failure 400 {object} util.ValidationError "Bad request" diff --git a/core/api/handler/object.go b/core/api/handler/object.go index cf959b6fb..b7bd4592e 100644 --- a/core/api/handler/object.go +++ b/core/api/handler/object.go @@ -59,7 +59,7 @@ func ListObjectsHandler(s *service.Service) gin.HandlerFunc { // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint" -// @Param object_id path string true "The ID of the object to retrieve" +// @Param object_id path string true "The ID of the object to retrieve; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context" // @Param format query apimodel.BodyFormat false "The format to return the object body in" default("md") // @Success 200 {object} apimodel.ObjectResponse "The retrieved object" // @Failure 401 {object} util.UnauthorizedError "Unauthorized" @@ -153,7 +153,7 @@ func CreateObjectHandler(s *service.Service) gin.HandlerFunc { // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint" -// @Param object_id path string true "The ID of the object to update" +// @Param object_id path string true "The ID of the object to update; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context" // @Param object body apimodel.UpdateObjectRequest true "The details of the object to update" // @Success 200 {object} apimodel.ObjectResponse "The updated object" // @Failure 400 {object} util.ValidationError "Bad request" @@ -204,7 +204,7 @@ func UpdateObjectHandler(s *service.Service) gin.HandlerFunc { // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint" -// @Param object_id path string true "The ID of the object to delete" +// @Param object_id path string true "The ID of the object to delete; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context" // @Success 200 {object} apimodel.ObjectResponse "The deleted object" // @Failure 401 {object} util.UnauthorizedError "Unauthorized" // @Failure 403 {object} util.ForbiddenError "Forbidden" diff --git a/core/api/handler/tag.go b/core/api/handler/tag.go index b5ab33977..c53806735 100644 --- a/core/api/handler/tag.go +++ b/core/api/handler/tag.go @@ -20,7 +20,7 @@ import ( // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to list tags for; must be retrieved from ListSpaces endpoint" -// @Param property_id path string true "The ID of the property to list tags for" +// @Param property_id path string true "The ID of the property to list tags for; must be retrieved from ListProperties endpoint or obtained from response context" // @Success 200 {object} pagination.PaginatedResponse[apimodel.Tag] "The list of tags" // @Failure 401 {object} util.UnauthorizedError "Unauthorized" // @Failure 404 {object} util.NotFoundError "Property not found" @@ -59,8 +59,8 @@ func ListTagsHandler(s *service.Service) gin.HandlerFunc { // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to retrieve the tag from; must be retrieved from ListSpaces endpoint" -// @Param property_id path string true "The ID of the property to retrieve the tag for" -// @Param tag_id path string true "The ID of the tag to retrieve" +// @Param property_id path string true "The ID of the property to retrieve the tag for; must be retrieved from ListProperties endpoint or obtained from response context" +// @Param tag_id path string true "The ID of the tag to retrieve; must be retrieved from ListTags endpoint or obtained from response context" // @Success 200 {object} apimodel.TagResponse "The retrieved tag" // @Failure 401 {object} util.UnauthorizedError "Unauthorized" // @Failure 404 {object} util.NotFoundError "Resource not found" @@ -101,7 +101,7 @@ func GetTagHandler(s *service.Service) gin.HandlerFunc { // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to create the tag in; must be retrieved from ListSpaces endpoint" -// @Param property_id path string true "The ID of the property to create the tag for" +// @Param property_id path string true "The ID of the property to create the tag for; must be retrieved from ListProperties endpoint or obtained from response context" // @Param tag body apimodel.CreateTagRequest true "The tag to create" // @Success 200 {object} apimodel.TagResponse "The created tag" // @Failure 400 {object} util.ValidationError "Bad request" @@ -149,8 +149,8 @@ func CreateTagHandler(s *service.Service) gin.HandlerFunc { // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to update the tag in; must be retrieved from ListSpaces endpoint" -// @Param property_id path string true "The ID of the property to update the tag for" -// @Param tag_id path string true "The ID of the tag to update" +// @Param property_id path string true "The ID of the property to update the tag for; must be retrieved from ListProperties endpoint or obtained from response context" +// @Param tag_id path string true "The ID of the tag to update; must be retrieved from ListTags endpoint or obtained from response context" // @Param tag body apimodel.UpdateTagRequest true "The tag to update" // @Success 200 {object} apimodel.TagResponse "The updated tag" // @Failure 400 {object} util.ValidationError "Bad request" @@ -203,8 +203,8 @@ func UpdateTagHandler(s *service.Service) gin.HandlerFunc { // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to delete the tag from; must be retrieved from ListSpaces endpoint" -// @Param property_id path string true "The ID of the property to delete the tag for" -// @Param tag_id path string true "The ID of the tag to delete" +// @Param property_id path string true "The ID of the property to delete the tag for; must be retrieved from ListProperties endpoint or obtained from response context" +// @Param tag_id path string true "The ID of the tag to delete; must be retrieved from ListTags endpoint or obtained from response context" // @Success 200 {object} apimodel.TagResponse "The deleted tag" // @Failure 401 {object} util.UnauthorizedError "Unauthorized" // @Failure 403 {object} util.ForbiddenError "Forbidden" diff --git a/core/api/handler/template.go b/core/api/handler/template.go index 76e8f1a5e..22669851e 100644 --- a/core/api/handler/template.go +++ b/core/api/handler/template.go @@ -14,13 +14,13 @@ import ( // ListTemplatesHandler retrieves a list of templates for a type in a space // // @Summary List templates -// @Description This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects. +// @Description This endpoint returns a paginated list of templates that are associated with a specific type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects. // @Id list_templates // @Tags Templates // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to which the type belongs; must be retrieved from ListSpaces endpoint" -// @Param type_id path string true "The ID of the object type to retrieve templates for" +// @Param type_id path string true "The ID of the type to retrieve templates for; must be retrieved from ListTypes endpoint or obtained from response context" // @Param offset query int false "The number of items to skip before starting to collect the result set" default(0) // @Param limit query int false "The number of items to return" default(100) maximum(1000) // @Success 200 {object} pagination.PaginatedResponse[apimodel.Object] "List of templates" @@ -56,14 +56,14 @@ func ListTemplatesHandler(s *service.Service) gin.HandlerFunc { // GetTemplateHandler retrieves a template for a type in a space // // @Summary Get template -// @Description Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields. +// @Description Fetches full details for one template associated with a particular type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields. // @Id get_template // @Tags Templates // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to which the template belongs; must be retrieved from ListSpaces endpoint" -// @Param type_id path string true "The ID of the object type to which the template belongs" -// @Param template_id path string true "The ID of the template to retrieve" +// @Param type_id path string true "The ID of the type to which the template belongs; must be retrieved from ListTypes endpoint or obtained from response context" +// @Param template_id path string true "The ID of the template to retrieve; must be retrieved from ListTemplates endpoint or obtained from response context" // @Success 200 {object} apimodel.TemplateResponse "The requested template" // @Failure 401 {object} util.UnauthorizedError "Unauthorized" // @Failure 404 {object} util.NotFoundError "Resource not found" diff --git a/core/api/handler/type.go b/core/api/handler/type.go index 1d99b3584..bb232253c 100644 --- a/core/api/handler/type.go +++ b/core/api/handler/type.go @@ -14,7 +14,7 @@ import ( // ListTypesHandler retrieves a list of types in a space // // @Summary List types -// @Description This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search. +// @Description This endpoint retrieves a paginated list of types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search. // @Id list_types // @Tags Types // @Produce json @@ -51,13 +51,13 @@ func ListTypesHandler(s *service.Service) gin.HandlerFunc { // GetTypeHandler retrieves a type in a space // // @Summary Get type -// @Description Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints). +// @Description Fetches detailed information about one specific type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints). // @Id get_type // @Tags Types // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space from which to retrieve the type; must be retrieved from ListSpaces endpoint" -// @Param type_id path string true "The ID of the type to retrieve" +// @Param type_id path string true "The ID of the type to retrieve; must be retrieved from ListTypes endpoint or obtained from response context" // @Success 200 {object} apimodel.TypeResponse "The requested type" // @Failure 401 {object} util.UnauthorizedError "Unauthorized" // @Failure 404 {object} util.NotFoundError "Resource not found" @@ -90,7 +90,7 @@ func GetTypeHandler(s *service.Service) gin.HandlerFunc { // CreateTypeHandler creates a new type in a space // // @Summary Create type -// @Description Creates a new object type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects. +// @Description Creates a new type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects. // @Id create_type // @Tags Types // @Accept json @@ -136,14 +136,14 @@ func CreateTypeHandler(s *service.Service) gin.HandlerFunc { // UpdateTypeHandler updates a type in a space // // @Summary Update type -// @Description This endpoint updates an existing object type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions. +// @Description This endpoint updates an existing type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions. // @Id update_type // @Tags Types // @Accept json // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space in which the type exists; must be retrieved from ListSpaces endpoint" -// @Param type_id path string true "The ID of the type to update" +// @Param type_id path string true "The ID of the type to update; must be retrieved from ListTypes endpoint or obtained from response context" // @Param type body apimodel.UpdateTypeRequest true "The type details to update" // @Success 200 {object} apimodel.TypeResponse "The updated type" // @Failure 400 {object} util.ValidationError "Bad request" @@ -188,13 +188,13 @@ func UpdateTypeHandler(s *service.Service) gin.HandlerFunc { // DeleteTypeHandler deletes a type in a space // // @Summary Delete type -// @Description This endpoint “deletes” an object type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues. +// @Description This endpoint “deletes” an type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues. // @Id delete_type // @Tags Types // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space from which to delete the type; must be retrieved from ListSpaces endpoint" -// @Param type_id path string true "The ID of the type to delete" +// @Param type_id path string true "The ID of the type to delete; must be retrieved from ListTypes endpoint or obtained from response context" // @Success 200 {object} apimodel.TypeResponse "The deleted type" // @Failure 401 {object} util.UnauthorizedError "Unauthorized" // @Failure 403 {object} util.ForbiddenError "Forbidden" diff --git a/core/api/model/object.go b/core/api/model/object.go index cb2e4df42..b474735dd 100644 --- a/core/api/model/object.go +++ b/core/api/model/object.go @@ -47,13 +47,13 @@ type CreateObjectRequest struct { Body string `json:"body" example:"This is the body of the object. Markdown syntax is supported here."` // The body of the object TemplateId string `json:"template_id" example:"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge"` // The id of the template to use TypeKey string `json:"type_key" binding:"required" example:"page"` // The key of the type of object to create - Properties []PropertyLinkWithValue `json:"properties" oneOf:"TextPropertyLinkValue,NumberPropertyLinkValue,SelectPropertyLinkValue,MultiSelectPropertyLinkValue,DatePropertyLinkValue,FilesPropertyLinkValue,CheckboxPropertyLinkValue,URLPropertyLinkValue,EmailPropertyLinkValue,PhonePropertyLinkValue,ObjectsPropertyLinkValue"` // ⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object + Properties []PropertyLinkWithValue `json:"properties" oneOf:"TextPropertyLinkValue,NumberPropertyLinkValue,SelectPropertyLinkValue,MultiSelectPropertyLinkValue,DatePropertyLinkValue,FilesPropertyLinkValue,CheckboxPropertyLinkValue,URLPropertyLinkValue,EmailPropertyLinkValue,PhonePropertyLinkValue,ObjectsPropertyLinkValue"` // ⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object; see ListTypes or GetType endpoints for linked properties } type UpdateObjectRequest struct { Name *string `json:"name,omitempty" example:"My object"` // The name of the object Icon *Icon `json:"icon,omitempty" oneOf:"EmojiIcon,FileIcon,NamedIcon"` // The icon to set for the object - Properties *[]PropertyLinkWithValue `json:"properties,omitempty" oneOf:"TextPropertyLinkValue,NumberPropertyLinkValue,SelectPropertyLinkValue,MultiSelectPropertyLinkValue,DatePropertyLinkValue,FilesPropertyLinkValue,CheckboxPropertyLinkValue,URLPropertyLinkValue,EmailPropertyLinkValue,PhonePropertyLinkValue,ObjectsPropertyLinkValue"` // ⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object + Properties *[]PropertyLinkWithValue `json:"properties,omitempty" oneOf:"TextPropertyLinkValue,NumberPropertyLinkValue,SelectPropertyLinkValue,MultiSelectPropertyLinkValue,DatePropertyLinkValue,FilesPropertyLinkValue,CheckboxPropertyLinkValue,URLPropertyLinkValue,EmailPropertyLinkValue,PhonePropertyLinkValue,ObjectsPropertyLinkValue"` // ⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object; see ListTypes or GetType endpoints for linked properties } type ObjectResponse struct { diff --git a/core/api/model/property.go b/core/api/model/property.go index 27e4b8783..b8b3fbf7d 100644 --- a/core/api/model/property.go +++ b/core/api/model/property.go @@ -374,14 +374,14 @@ func (NumberPropertyLinkValue) isPropertyLinkWithValue() {} type SelectPropertyLinkValue struct { Key string `json:"key" example:"status"` - Select *string `json:"select,omitempty" example:"tag_id"` // The selected tag id of the property + Select *string `json:"select,omitempty" example:"tag_id"` // The selected tag id of the property; see ListTags endpoint for valid values } func (SelectPropertyLinkValue) isPropertyLinkWithValue() {} type MultiSelectPropertyLinkValue struct { Key string `json:"key" example:"tag"` - MultiSelect []string `json:"multi_select,omitempty" example:"['tag_id']"` // The selected tag ids of the property + MultiSelect []string `json:"multi_select,omitempty" example:"['tag_id']"` // The selected tag ids of the property; see ListTags endpoint for valid values } func (MultiSelectPropertyLinkValue) isPropertyLinkWithValue() {} diff --git a/core/api/model/search.go b/core/api/model/search.go index 0a304cda5..eb3207b6e 100644 --- a/core/api/model/search.go +++ b/core/api/model/search.go @@ -52,12 +52,12 @@ func (sp *SortProperty) UnmarshalJSON(data []byte) error { } type SearchRequest struct { - Query string `json:"query" example:"test"` // The search term to look for in object names and snippets - Types []string `json:"types" example:"page,task,bookmark"` // The types of objects to search for, specified by their key - Sort SortOptions `json:"sort"` // The sorting criteria and direction for the search results + Query string `json:"query" example:"test"` // The text to search within object names and content; use types field for type filtering + Types []string `json:"types" example:"page,task,bookmark"` // The types of objects to include in results (e.g., "page", "task", "bookmark"); see ListTypes endpoint for valid values + Sort SortOptions `json:"sort"` // The sorting options for the search results } type SortOptions struct { - PropertyKey SortProperty `json:"property_key" enums:"created_date,last_modified_date,last_opened_date,name" default:"last_modified_date"` // The property to sort the search results by - Direction SortDirection `json:"direction" enums:"asc,desc" default:"desc"` // The direction to sort the search results + PropertyKey SortProperty `json:"property_key" enums:"created_date,last_modified_date,last_opened_date,name" default:"last_modified_date"` // The key of the property to sort the search results by + Direction SortDirection `json:"direction" enums:"asc,desc" default:"desc"` // The direction to sort the search results by } diff --git a/core/api/service/search.go b/core/api/service/search.go index 48a11a92b..6b227ba8b 100644 --- a/core/api/service/search.go +++ b/core/api/service/search.go @@ -47,7 +47,7 @@ func (s *Service) GlobalSearch(ctx context.Context, request apimodel.SearchReque var combinedRecords []*types.Struct for _, spaceId := range spaceIds { - // Resolve template type and object type IDs per spaceId, as they are unique per spaceId + // Resolve template and type IDs per spaceId, as they are unique per spaceId templateFilter := s.prepareTemplateFilter() typeFilters := s.prepareTypeFilters(request.Types, typeMaps[spaceId]) if len(request.Types) > 0 && len(typeFilters) == 0 { diff --git a/core/api/service/template.go b/core/api/service/template.go index 5e49f8451..61b87ab49 100644 --- a/core/api/service/template.go +++ b/core/api/service/template.go @@ -42,7 +42,7 @@ func (s *Service) ListTemplates(ctx context.Context, spaceId string, typeId stri return nil, 0, false, ErrTemplateTypeNotFound } - // Then, search all objects of the template type and filter by the target object type + // Then, search all objects of the template type and filter by the target type templateTypeId := templateTypeIdResp.Records[0].Fields[bundle.RelationKeyId.String()].GetStringValue() templateObjectsResp := s.mw.ObjectSearch(ctx, &pb.RpcObjectSearchRequest{ SpaceId: spaceId, From 335df3c9890c0a9f6062f5a5153aa13c2c486b86 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Sat, 17 May 2025 17:46:00 +0200 Subject: [PATCH 076/164] GO-5589: Add missing enum values for type layouts --- core/api/docs/docs.go | 4 ++-- core/api/docs/openapi.json | 33 ++++++++++++++++++++------------- core/api/docs/openapi.yaml | 30 ++++++++++++++++++------------ core/api/model/type.go | 30 +++++++++++++++--------------- 4 files changed, 55 insertions(+), 42 deletions(-) diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go index 1d5d07863..15ccce8f0 100644 --- a/core/api/docs/docs.go +++ b/core/api/docs/docs.go @@ -6,10 +6,10 @@ import "github.com/swaggo/swag/v2" const docTemplate = `{ "schemes": {{ marshal .Schemes }}, - "components": {"schemas":{"apimodel.AddObjectsToListRequest":{"properties":{"objects":{"description":"The list of object IDs to add to the list","example":["[\"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ\"]"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object; see ListTypes or GetType endpoints for linked properties","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file ids of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["emoji","file","icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag ids of the property; see ListTags endpoint for valid values","example":["['tag_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"key":{"example":"creator","type":"string"},"objects":{"description":"The object ids of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The text to search within object names and content; use types field for type filtering","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to include in results (e.g., \"page\", \"task\", \"bookmark\"); see ListTypes endpoint for valid values","example":["page","task","bookmark"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"key":{"example":"status","type":"string"},"select":{"description":"The selected tag id of the property; see ListTags endpoint for valid values","example":"tag_id","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results by","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting options for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The key of the property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TokenResponse":{"properties":{"app_key":{"description":"The app key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object; see ListTypes or GetType endpoints for linked properties","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"description":"The layout of the type","example":"basic","type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, + "components": {"schemas":{"apimodel.AddObjectsToListRequest":{"properties":{"objects":{"description":"The list of object IDs to add to the list","example":["[\"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ\"]"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object; see ListTypes or GetType endpoints for linked properties","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file ids of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["emoji","file","icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag ids of the property; see ListTags endpoint for valid values","example":["['tag_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"key":{"example":"creator","type":"string"},"objects":{"description":"The object ids of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The text to search within object names and content; use types field for type filtering","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to include in results (e.g., \"page\", \"task\", \"bookmark\"); see ListTypes endpoint for valid values","example":["page","task","bookmark"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"key":{"example":"status","type":"string"},"select":{"description":"The selected tag id of the property; see ListTags endpoint for valid values","example":"tag_id","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results by","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting options for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The key of the property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TokenResponse":{"properties":{"app_key":{"description":"The app key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","enum":["basic","profile","action","note","bookmark","set","set","collection","participant"],"type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","enum":["basic","profile","action","note"],"type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object; see ListTypes or GetType endpoints for linked properties","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, "info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-api/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"}, "externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"}, - "paths": {"/v1/auth/display_code":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid ` + "`" + `app_name` + "`" + `, the server issues a unique ` + "`" + `challenge_id` + "`" + ` and displays a short code within the Anytype Desktop. The ` + "`" + `challenge_id` + "`" + ` must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"create_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.DisplayCodeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start challenge","tags":["Auth"]}},"/v1/auth/token":{"post":{"description":"After receiving a ` + "`" + `challenge_id` + "`" + ` from the ` + "`" + `display_code` + "`" + ` endpoint, the client calls this endpoint to provide the corresponding 4-digit code along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent ` + "`" + `app_key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.","operationId":"solve_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TokenResponse"}}},"description":"The app key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Solve challenge","tags":["Auth"]}},"/v1/search":{"post":{"description":"Executes a global search over all spaces accessible to the authenticated user. The request body must specify the ` + "`" + `query` + "`" + ` text (currently matching only name and snippet of an object), optional filters on types (e.g., \"page\", \"task\"), and sort directives (default: descending by last modified date). Pagination is controlled via ` + "`" + `offset` + "`" + ` and ` + "`" + `limit` + "`" + ` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"search_global","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/v1/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"list_spaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"create_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/v1/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"get_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"update_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"add_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added; must be retrieved from SearchSpace endpoint with types=['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.AddObjectsToListRequest"}}},"description":"The list of object IDs to add to the list; must be retrieved from SearchSpace or GlobalSearch endpoint or obtained from response context","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"remove_list_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed; must be retrieved from SearchSpace endpoint with types=['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list; must be retrieved from SearchSpace or GlobalSearch endpoint or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"get_list_views","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for; must be retrieved from SearchSpace endpoint with types=['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"get_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for; must be retrieved from SearchSpace endpoint with types=['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for; must be retrieved from ListViews endpoint or omited if you want to get all objects in the list","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/v1/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"list_members","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/v1/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"get_member","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity; must be retrieved from ListMembers endpoint or obtained from response context","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/v1/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"create_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/v1/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"get_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"update_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/v1/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"list_properties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"create_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"get_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"update_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"list_tags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"create_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"get_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"update_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/v1/spaces/{space_id}/search":{"post":{"description":"Performs a search within a single space (specified by the ` + "`" + `space_id` + "`" + ` path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search ` + "`" + `query` + "`" + `, ` + "`" + `types` + "`" + `, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"search_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/v1/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"list_types","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"create_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"get_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"update_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"list_templates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve templates for; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/v1/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"get_template","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to which the template belongs; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve; must be retrieved from ListTemplates endpoint or obtained from response context","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, + "paths": {"/v1/auth/display_code":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid ` + "`" + `app_name` + "`" + `, the server issues a unique ` + "`" + `challenge_id` + "`" + ` and displays a short code within the Anytype Desktop. The ` + "`" + `challenge_id` + "`" + ` must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"create_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.DisplayCodeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start challenge","tags":["Auth"]}},"/v1/auth/token":{"post":{"description":"After receiving a ` + "`" + `challenge_id` + "`" + ` from the ` + "`" + `display_code` + "`" + ` endpoint, the client calls this endpoint to provide the corresponding 4-digit code along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent ` + "`" + `app_key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.","operationId":"solve_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TokenResponse"}}},"description":"The app key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Solve challenge","tags":["Auth"]}},"/v1/search":{"post":{"description":"Executes a global search over all spaces accessible to the authenticated user. The request body must specify the ` + "`" + `query` + "`" + ` text (currently matching only name and snippet of an object), optional filters on types (e.g., \"page\", \"task\"), and sort directives (default: descending by last modified date). Pagination is controlled via ` + "`" + `offset` + "`" + ` and ` + "`" + `limit` + "`" + ` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"search_global","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/v1/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"list_spaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"create_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/v1/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"get_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"update_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"add_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added; must be retrieved from SearchSpace endpoint with types=['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.AddObjectsToListRequest"}}},"description":"The list of object IDs to add to the list; must be retrieved from SearchSpace or GlobalSearch endpoints or obtained from response context","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"remove_list_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed; must be retrieved from SearchSpace endpoint with types=['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list; must be retrieved from SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"get_list_views","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for; must be retrieved from SearchSpace endpoint with types=['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"get_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for; must be retrieved from SearchSpace endpoint with types=['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for; must be retrieved from ListViews endpoint or omited if you want to get all objects in the list","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/v1/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"list_members","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/v1/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"get_member","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity; must be retrieved from ListMembers endpoint or obtained from response context","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/v1/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"create_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/v1/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"get_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"update_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/v1/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"list_properties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"create_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"get_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"update_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"list_tags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"create_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"get_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"update_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/v1/spaces/{space_id}/search":{"post":{"description":"Performs a search within a single space (specified by the ` + "`" + `space_id` + "`" + ` path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search ` + "`" + `query` + "`" + `, ` + "`" + `types` + "`" + `, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"search_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/v1/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"list_types","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"create_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"get_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"update_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"list_templates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve templates for; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/v1/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"get_template","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to which the template belongs; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve; must be retrieved from ListTemplates endpoint or obtained from response context","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, "openapi": "3.1.0", "servers": [ {"url":"http://localhost:31009"} diff --git a/core/api/docs/openapi.json b/core/api/docs/openapi.json index e604bdaae..2c83e36aa 100644 --- a/core/api/docs/openapi.json +++ b/core/api/docs/openapi.json @@ -1397,7 +1397,17 @@ }, "layout": { "description": "The layout of the object", - "example": "basic", + "enum": [ + "basic", + "profile", + "action", + "note", + "bookmark", + "set", + "set", + "collection", + "participant" + ], "type": "string", "x-enum-varnames": [ "ObjectLayoutBasic", @@ -1438,7 +1448,12 @@ }, "apimodel.TypeLayout": { "description": "The layout of the type", - "example": "basic", + "enum": [ + "basic", + "profile", + "action", + "note" + ], "type": "string", "x-enum-varnames": [ "TypeLayoutBasic", @@ -1570,15 +1585,7 @@ "$ref": "#/components/schemas/apimodel.Icon" }, "layout": { - "description": "The layout of the type", - "example": "basic", - "type": "string", - "x-enum-varnames": [ - "TypeLayoutBasic", - "TypeLayoutProfile", - "TypeLayoutAction", - "TypeLayoutNote" - ] + "$ref": "#/components/schemas/apimodel.TypeLayout" }, "name": { "description": "The name to set for the type", @@ -2600,7 +2607,7 @@ } } }, - "description": "The list of object IDs to add to the list; must be retrieved from SearchSpace or GlobalSearch endpoint or obtained from response context", + "description": "The list of object IDs to add to the list; must be retrieved from SearchSpace or GlobalSearch endpoints or obtained from response context", "required": true }, "responses": { @@ -2710,7 +2717,7 @@ } }, { - "description": "The ID of the object to remove from the list; must be retrieved from SearchSpace or GlobalSearch endpoint or obtained from response context", + "description": "The ID of the object to remove from the list; must be retrieved from SearchSpace or GlobalSearch endpoints or obtained from response context", "in": "path", "name": "object_id", "required": true, diff --git a/core/api/docs/openapi.yaml b/core/api/docs/openapi.yaml index 9c58d1bc8..9cd07b6d0 100644 --- a/core/api/docs/openapi.yaml +++ b/core/api/docs/openapi.yaml @@ -1030,7 +1030,16 @@ components: type: string layout: description: The layout of the object - example: basic + enum: + - basic + - profile + - action + - note + - bookmark + - set + - set + - collection + - participant type: string x-enum-varnames: - ObjectLayoutBasic @@ -1062,7 +1071,11 @@ components: type: object apimodel.TypeLayout: description: The layout of the type - example: basic + enum: + - basic + - profile + - action + - note type: string x-enum-varnames: - TypeLayoutBasic @@ -1160,14 +1173,7 @@ components: icon: $ref: '#/components/schemas/apimodel.Icon' layout: - description: The layout of the type - example: basic - type: string - x-enum-varnames: - - TypeLayoutBasic - - TypeLayoutProfile - - TypeLayoutAction - - TypeLayoutNote + $ref: '#/components/schemas/apimodel.TypeLayout' name: description: The name to set for the type example: Page @@ -1888,7 +1894,7 @@ paths: schema: $ref: '#/components/schemas/apimodel.AddObjectsToListRequest' description: The list of object IDs to add to the list; must be retrieved - from SearchSpace or GlobalSearch endpoint or obtained from response context + from SearchSpace or GlobalSearch endpoints or obtained from response context required: true responses: "200": @@ -1962,7 +1968,7 @@ paths: schema: type: string - description: The ID of the object to remove from the list; must be retrieved - from SearchSpace or GlobalSearch endpoint or obtained from response context + from SearchSpace or GlobalSearch endpoints or obtained from response context in: path name: object_id required: true diff --git a/core/api/model/type.go b/core/api/model/type.go index a0e5a4d65..0bb512a88 100644 --- a/core/api/model/type.go +++ b/core/api/model/type.go @@ -35,29 +35,29 @@ type TypeResponse struct { } type CreateTypeRequest struct { - Name string `json:"name" binding:"required" example:"Page"` // The name of the type - PluralName string `json:"plural_name" example:"Pages"` // The plural name of the type - Icon Icon `json:"icon" oneOf:"EmojiIcon,FileIcon,NamedIcon"` // The icon of the type - Layout TypeLayout `json:"layout" binding:"required" example:"basic"` // The layout of the type - Properties []PropertyLink `json:"properties"` // ⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type + Name string `json:"name" binding:"required" example:"Page"` // The name of the type + PluralName string `json:"plural_name" example:"Pages"` // The plural name of the type + Icon Icon `json:"icon" oneOf:"EmojiIcon,FileIcon,NamedIcon"` // The icon of the type + Layout TypeLayout `json:"layout" binding:"required" enums:"basic,profile,action,note"` // The layout of the type + Properties []PropertyLink `json:"properties"` // ⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type } type UpdateTypeRequest struct { Name *string `json:"name,omitempty" example:"Page"` // The name to set for the type PluralName *string `json:"plural_name,omitempty" example:"Pages"` // The plural name to set for the type Icon *Icon `json:"icon,omitempty" oneOf:"EmojiIcon,FileIcon,NamedIcon"` // The icon to set for the type - Layout *TypeLayout `json:"layout,omitempty" example:"basic"` // The layout to set for the type + Layout *TypeLayout `json:"layout,omitempty" enums:"basic,profile,action,note"` // The layout to set for the type Properties *[]PropertyLink `json:"properties,omitempty"` // ⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type } type Type struct { - Object string `json:"object" example:"type"` // The data model of the object - Id string `json:"id" example:"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu"` // The id of the type (which is unique across spaces) - Key string `json:"key" example:"page"` // The key of the type (can be the same across spaces for known types) - Name string `json:"name" example:"Page"` // The name of the type - PluralName string `json:"plural_name" example:"Pages"` // The plural name of the type - Icon Icon `json:"icon" oneOf:"EmojiIcon,FileIcon,NamedIcon"` // The icon of the type - Archived bool `json:"archived" example:"false"` // Whether the type is archived - Layout ObjectLayout `json:"layout" example:"basic"` // The layout of the type - Properties []Property `json:"properties"` // The properties linked to the type + Object string `json:"object" example:"type"` // The data model of the object + Id string `json:"id" example:"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu"` // The id of the type (which is unique across spaces) + Key string `json:"key" example:"page"` // The key of the type (can be the same across spaces for known types) + Name string `json:"name" example:"Page"` // The name of the type + PluralName string `json:"plural_name" example:"Pages"` // The plural name of the type + Icon Icon `json:"icon" oneOf:"EmojiIcon,FileIcon,NamedIcon"` // The icon of the type + Archived bool `json:"archived" example:"false"` // Whether the type is archived + Layout ObjectLayout `json:"layout" enums:"basic,profile,action,note,bookmark,set,set,collection,participant"` // The layout of the type + Properties []Property `json:"properties"` // The properties linked to the type } From 87759710f95e51b1d5c93058c72bc9dace100ce4 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Sat, 17 May 2025 19:52:53 +0200 Subject: [PATCH 077/164] GO-5589: Fix openapi spec --- core/api/docs/docs.go | 2 +- core/api/docs/openapi.json | 14 +++++++------- core/api/docs/openapi.yaml | 25 ++++++++++++++----------- core/api/handler/list.go | 8 ++++---- core/api/handler/property.go | 6 +++--- 5 files changed, 29 insertions(+), 26 deletions(-) diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go index 15ccce8f0..79e2c91b1 100644 --- a/core/api/docs/docs.go +++ b/core/api/docs/docs.go @@ -9,7 +9,7 @@ const docTemplate = `{ "components": {"schemas":{"apimodel.AddObjectsToListRequest":{"properties":{"objects":{"description":"The list of object IDs to add to the list","example":["[\"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ\"]"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object; see ListTypes or GetType endpoints for linked properties","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file ids of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["emoji","file","icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag ids of the property; see ListTags endpoint for valid values","example":["['tag_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"key":{"example":"creator","type":"string"},"objects":{"description":"The object ids of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The text to search within object names and content; use types field for type filtering","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to include in results (e.g., \"page\", \"task\", \"bookmark\"); see ListTypes endpoint for valid values","example":["page","task","bookmark"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"key":{"example":"status","type":"string"},"select":{"description":"The selected tag id of the property; see ListTags endpoint for valid values","example":"tag_id","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results by","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting options for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The key of the property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TokenResponse":{"properties":{"app_key":{"description":"The app key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","enum":["basic","profile","action","note","bookmark","set","set","collection","participant"],"type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","enum":["basic","profile","action","note"],"type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object; see ListTypes or GetType endpoints for linked properties","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, "info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-api/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"}, "externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"}, - "paths": {"/v1/auth/display_code":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid ` + "`" + `app_name` + "`" + `, the server issues a unique ` + "`" + `challenge_id` + "`" + ` and displays a short code within the Anytype Desktop. The ` + "`" + `challenge_id` + "`" + ` must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"create_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.DisplayCodeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start challenge","tags":["Auth"]}},"/v1/auth/token":{"post":{"description":"After receiving a ` + "`" + `challenge_id` + "`" + ` from the ` + "`" + `display_code` + "`" + ` endpoint, the client calls this endpoint to provide the corresponding 4-digit code along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent ` + "`" + `app_key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.","operationId":"solve_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TokenResponse"}}},"description":"The app key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Solve challenge","tags":["Auth"]}},"/v1/search":{"post":{"description":"Executes a global search over all spaces accessible to the authenticated user. The request body must specify the ` + "`" + `query` + "`" + ` text (currently matching only name and snippet of an object), optional filters on types (e.g., \"page\", \"task\"), and sort directives (default: descending by last modified date). Pagination is controlled via ` + "`" + `offset` + "`" + ` and ` + "`" + `limit` + "`" + ` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"search_global","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/v1/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"list_spaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"create_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/v1/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"get_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"update_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"add_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added; must be retrieved from SearchSpace endpoint with types=['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.AddObjectsToListRequest"}}},"description":"The list of object IDs to add to the list; must be retrieved from SearchSpace or GlobalSearch endpoints or obtained from response context","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"remove_list_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed; must be retrieved from SearchSpace endpoint with types=['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list; must be retrieved from SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"get_list_views","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for; must be retrieved from SearchSpace endpoint with types=['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"get_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for; must be retrieved from SearchSpace endpoint with types=['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for; must be retrieved from ListViews endpoint or omited if you want to get all objects in the list","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/v1/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"list_members","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/v1/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"get_member","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity; must be retrieved from ListMembers endpoint or obtained from response context","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/v1/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"create_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/v1/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"get_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"update_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/v1/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"list_properties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"create_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"get_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"update_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"list_tags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"create_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"get_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"update_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/v1/spaces/{space_id}/search":{"post":{"description":"Performs a search within a single space (specified by the ` + "`" + `space_id` + "`" + ` path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search ` + "`" + `query` + "`" + `, ` + "`" + `types` + "`" + `, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"search_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/v1/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"list_types","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"create_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"get_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"update_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"list_templates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve templates for; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/v1/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"get_template","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to which the template belongs; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve; must be retrieved from ListTemplates endpoint or obtained from response context","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, + "paths": {"/v1/auth/display_code":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid ` + "`" + `app_name` + "`" + `, the server issues a unique ` + "`" + `challenge_id` + "`" + ` and displays a short code within the Anytype Desktop. The ` + "`" + `challenge_id` + "`" + ` must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"create_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.DisplayCodeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start challenge","tags":["Auth"]}},"/v1/auth/token":{"post":{"description":"After receiving a ` + "`" + `challenge_id` + "`" + ` from the ` + "`" + `display_code` + "`" + ` endpoint, the client calls this endpoint to provide the corresponding 4-digit code along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent ` + "`" + `app_key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.","operationId":"solve_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TokenResponse"}}},"description":"The app key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Solve challenge","tags":["Auth"]}},"/v1/search":{"post":{"description":"Executes a global search over all spaces accessible to the authenticated user. The request body must specify the ` + "`" + `query` + "`" + ` text (currently matching only name and snippet of an object), optional filters on types (e.g., \"page\", \"task\"), and sort directives (default: descending by last modified date). Pagination is controlled via ` + "`" + `offset` + "`" + ` and ` + "`" + `limit` + "`" + ` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"search_global","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/v1/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"list_spaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"create_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/v1/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"get_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"update_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"add_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.AddObjectsToListRequest"}}},"description":"The list of object IDs to add to the list; must be retrieved from SearchSpace or GlobalSearch endpoints or obtained from response context","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"remove_list_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list; must be retrieved from SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"get_list_views","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"get_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for; must be retrieved from ListViews endpoint or omited if you want to get all objects in the list","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/v1/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"list_members","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/v1/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"get_member","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity; must be retrieved from ListMembers endpoint or obtained from response context","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/v1/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"create_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/v1/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"get_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"update_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/v1/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"list_properties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"create_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"get_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"update_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"list_tags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"create_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"get_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"update_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/v1/spaces/{space_id}/search":{"post":{"description":"Performs a search within a single space (specified by the ` + "`" + `space_id` + "`" + ` path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search ` + "`" + `query` + "`" + `, ` + "`" + `types` + "`" + `, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"search_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/v1/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"list_types","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"create_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"get_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"update_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"list_templates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve templates for; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/v1/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"get_template","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to which the template belongs; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve; must be retrieved from ListTemplates endpoint or obtained from response context","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, "openapi": "3.1.0", "servers": [ {"url":"http://localhost:31009"} diff --git a/core/api/docs/openapi.json b/core/api/docs/openapi.json index 2c83e36aa..cc1a42db5 100644 --- a/core/api/docs/openapi.json +++ b/core/api/docs/openapi.json @@ -2590,7 +2590,7 @@ } }, { - "description": "The ID of the list to which objects will be added; must be retrieved from SearchSpace endpoint with types=['collection', 'set']", + "description": "The ID of the list to which objects will be added; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']", "in": "path", "name": "list_id", "required": true, @@ -2708,7 +2708,7 @@ } }, { - "description": "The ID of the list from which the object will be removed; must be retrieved from SearchSpace endpoint with types=['collection', 'set']", + "description": "The ID of the list from which the object will be removed; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']", "in": "path", "name": "list_id", "required": true, @@ -2824,7 +2824,7 @@ } }, { - "description": "The ID of the list to retrieve views for; must be retrieved from SearchSpace endpoint with types=['collection', 'set']", + "description": "The ID of the list to retrieve views for; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']", "in": "path", "name": "list_id", "required": true, @@ -2928,7 +2928,7 @@ } }, { - "description": "The ID of the list to retrieve objects for; must be retrieved from SearchSpace endpoint with types=['collection', 'set']", + "description": "The ID of the list to retrieve objects for; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']", "in": "path", "name": "list_id", "required": true, @@ -3933,7 +3933,7 @@ } }, { - "description": "The ID of the property to delete", + "description": "The ID of the property to delete; must be retrieved from ListProperties endpoint or obtained from response context", "in": "path", "name": "property_id", "required": true, @@ -4048,7 +4048,7 @@ } }, { - "description": "The ID of the property to retrieve", + "description": "The ID of the property to retrieve; must be retrieved from ListProperties endpoint or obtained from response context", "in": "path", "name": "property_id", "required": true, @@ -4143,7 +4143,7 @@ } }, { - "description": "The ID of the property to update", + "description": "The ID of the property to update; must be retrieved from ListProperties endpoint or obtained from response context", "in": "path", "name": "property_id", "required": true, diff --git a/core/api/docs/openapi.yaml b/core/api/docs/openapi.yaml index 9cd07b6d0..f5f7ae0e3 100644 --- a/core/api/docs/openapi.yaml +++ b/core/api/docs/openapi.yaml @@ -1881,8 +1881,8 @@ paths: required: true schema: type: string - - description: The ID of the list to which objects will be added; must be retrieved - from SearchSpace endpoint with types=['collection', 'set'] + - description: 'The ID of the list to which objects will be added; must be retrieved + from SearchSpace endpoint with types: [''collection'', ''set'']' in: path name: list_id required: true @@ -1960,8 +1960,8 @@ paths: required: true schema: type: string - - description: The ID of the list from which the object will be removed; must - be retrieved from SearchSpace endpoint with types=['collection', 'set'] + - description: 'The ID of the list from which the object will be removed; must + be retrieved from SearchSpace endpoint with types: [''collection'', ''set'']' in: path name: list_id required: true @@ -2040,8 +2040,8 @@ paths: required: true schema: type: string - - description: The ID of the list to retrieve views for; must be retrieved from - SearchSpace endpoint with types=['collection', 'set'] + - description: 'The ID of the list to retrieve views for; must be retrieved + from SearchSpace endpoint with types: [''collection'', ''set'']' in: path name: list_id required: true @@ -2113,8 +2113,8 @@ paths: required: true schema: type: string - - description: The ID of the list to retrieve objects for; must be retrieved - from SearchSpace endpoint with types=['collection', 'set'] + - description: 'The ID of the list to retrieve objects for; must be retrieved + from SearchSpace endpoint with types: [''collection'', ''set'']' in: path name: list_id required: true @@ -2808,7 +2808,8 @@ paths: required: true schema: type: string - - description: The ID of the property to delete + - description: The ID of the property to delete; must be retrieved from ListProperties + endpoint or obtained from response context in: path name: property_id required: true @@ -2885,7 +2886,8 @@ paths: required: true schema: type: string - - description: The ID of the property to retrieve + - description: The ID of the property to retrieve; must be retrieved from ListProperties + endpoint or obtained from response context in: path name: property_id required: true @@ -2949,7 +2951,8 @@ paths: required: true schema: type: string - - description: The ID of the property to update + - description: The ID of the property to update; must be retrieved from ListProperties + endpoint or obtained from response context in: path name: property_id required: true diff --git a/core/api/handler/list.go b/core/api/handler/list.go index 40e5eb9c3..263ff12b1 100644 --- a/core/api/handler/list.go +++ b/core/api/handler/list.go @@ -20,7 +20,7 @@ import ( // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint" -// @Param list_id path string true "The ID of the list to retrieve views for; must be retrieved from SearchSpace endpoint with types=['collection', 'set']" +// @Param list_id path string true "The ID of the list to retrieve views for; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']" // @Param offset query int false "The number of items to skip before starting to collect the result set" default(0) // @Param limit query int false "The number of items to return" // @Success 200 {object} pagination.PaginatedResponse[apimodel.View] "The list of views associated with the specified list" @@ -61,7 +61,7 @@ func GetListViewsHandler(s *service.Service) gin.HandlerFunc { // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint" -// @Param list_id path string true "The ID of the list to retrieve objects for; must be retrieved from SearchSpace endpoint with types=['collection', 'set']" +// @Param list_id path string true "The ID of the list to retrieve objects for; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']" // @Param view_id path string true "The ID of the view to retrieve objects for; must be retrieved from ListViews endpoint or omited if you want to get all objects in the list" // @Param offset query int false "The number of items to skip before starting to collect the result set" default(0) // @Param limit query int false "The number of items to return" @@ -109,7 +109,7 @@ func GetObjectsInListHandler(s *service.Service) gin.HandlerFunc { // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint" -// @Param list_id path string true "The ID of the list to which objects will be added; must be retrieved from SearchSpace endpoint with types=['collection', 'set']" +// @Param list_id path string true "The ID of the list to which objects will be added; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']" // @Param objects body apimodel.AddObjectsToListRequest true "The list of object IDs to add to the list; must be retrieved from SearchSpace or GlobalSearch endpoints or obtained from response context" // @Success 200 {object} string "Objects added successfully" // @Failure 400 {object} util.ValidationError "Bad request" @@ -155,7 +155,7 @@ func AddObjectsToListHandler(s *service.Service) gin.HandlerFunc { // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint" -// @Param list_id path string true "The ID of the list from which the object will be removed; must be retrieved from SearchSpace endpoint with types=['collection', 'set']" +// @Param list_id path string true "The ID of the list from which the object will be removed; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']" // @Param object_id path string true "The ID of the object to remove from the list; must be retrieved from SearchSpace or GlobalSearch endpoints or obtained from response context" // @Success 200 {object} string "Objects removed successfully" // @Failure 400 {object} util.ValidationError "Bad request" diff --git a/core/api/handler/property.go b/core/api/handler/property.go index c23f834ec..65cfd3e8f 100644 --- a/core/api/handler/property.go +++ b/core/api/handler/property.go @@ -57,7 +57,7 @@ func ListPropertiesHandler(s *service.Service) gin.HandlerFunc { // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint" -// @Param property_id path string true "The ID of the property to retrieve" +// @Param property_id path string true "The ID of the property to retrieve; must be retrieved from ListProperties endpoint or obtained from response context" // @Success 200 {object} apimodel.PropertyResponse "The requested property" // @Failure 401 {object} util.UnauthorizedError "Unauthorized" // @Failure 404 {object} util.NotFoundError "Resource not found" @@ -143,7 +143,7 @@ func CreatePropertyHandler(s *service.Service) gin.HandlerFunc { // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint" -// @Param property_id path string true "The ID of the property to update" +// @Param property_id path string true "The ID of the property to update; must be retrieved from ListProperties endpoint or obtained from response context" // @Param property body apimodel.UpdatePropertyRequest true "The property to update" // @Success 200 {object} apimodel.PropertyResponse "The updated property" // @Failure 400 {object} util.ValidationError "Bad request" @@ -196,7 +196,7 @@ func UpdatePropertyHandler(s *service.Service) gin.HandlerFunc { // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint" -// @Param property_id path string true "The ID of the property to delete" +// @Param property_id path string true "The ID of the property to delete; must be retrieved from ListProperties endpoint or obtained from response context" // @Success 200 {object} apimodel.PropertyResponse "The deleted property" // @Failure 401 {object} util.UnauthorizedError "Unauthorized" // @Failure 403 {object} util.ForbiddenError "Forbidden" From 75ae5b5cb8f468eebf5a4a7f7fecf284dafd4393 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Sun, 18 May 2025 11:51:31 +0200 Subject: [PATCH 078/164] GO-5589: Optimize tag and type map perf --- core/api/service/object.go | 10 +++++----- core/api/service/property.go | 25 +++++++++++++------------ core/api/service/search.go | 2 +- core/api/service/type.go | 28 ++++++++++++++++------------ 4 files changed, 35 insertions(+), 30 deletions(-) diff --git a/core/api/service/object.go b/core/api/service/object.go index d1c9f76bc..750362d13 100644 --- a/core/api/service/object.go +++ b/core/api/service/object.go @@ -273,7 +273,7 @@ func (s *Service) buildObjectDetails(ctx context.Context, spaceId string, reques bundle.RelationKeyOrigin.String(): pbtypes.Int64(int64(model.ObjectOrigin_api)), } - iconFields, err := s.processIconFields(ctx, spaceId, request.Icon) + iconFields, err := s.processIconFields(spaceId, request.Icon) if err != nil { return nil, err } @@ -300,7 +300,7 @@ func (s *Service) buildUpdatedObjectDetails(ctx context.Context, spaceId string, } if request.Icon != nil { - iconFields, err := s.processIconFields(ctx, spaceId, *request.Icon) + iconFields, err := s.processIconFields(spaceId, *request.Icon) if err != nil { return nil, err } @@ -323,7 +323,7 @@ func (s *Service) buildUpdatedObjectDetails(ctx context.Context, spaceId string, } // processIconFields returns the detail fields corresponding to the given icon. -func (s *Service) processIconFields(ctx context.Context, spaceId string, icon apimodel.Icon) (map[string]*types.Value, error) { +func (s *Service) processIconFields(spaceId string, icon apimodel.Icon) (map[string]*types.Value, error) { iconFields := make(map[string]*types.Value) switch e := icon.WrappedIcon.(type) { case apimodel.NamedIcon: @@ -402,7 +402,7 @@ func (s *Service) processIconFields(ctx context.Context, spaceId string, icon ap // } // getObjectFromStruct creates an Object without blocks from the details. -func (s *Service) getObjectFromStruct(details *types.Struct, propertyMap map[string]apimodel.Property, typeMap map[string]apimodel.Type, tagMap map[string]apimodel.Tag) apimodel.Object { +func (s *Service) getObjectFromStruct(details *types.Struct, propertyMap map[string]*apimodel.Property, typeMap map[string]*apimodel.Type, tagMap map[string]apimodel.Tag) apimodel.Object { return apimodel.Object{ Object: "object", Id: details.Fields[bundle.RelationKeyId.String()].GetStringValue(), @@ -418,7 +418,7 @@ func (s *Service) getObjectFromStruct(details *types.Struct, propertyMap map[str } // getObjectWithBlocksFromStruct creates an ObjectWithBody from the details. -func (s *Service) getObjectWithBlocksFromStruct(details *types.Struct, markdown string, propertyMap map[string]apimodel.Property, typeMap map[string]apimodel.Type, tagMap map[string]apimodel.Tag) apimodel.ObjectWithBody { +func (s *Service) getObjectWithBlocksFromStruct(details *types.Struct, markdown string, propertyMap map[string]*apimodel.Property, typeMap map[string]*apimodel.Type, tagMap map[string]apimodel.Tag) apimodel.ObjectWithBody { return apimodel.ObjectWithBody{ Object: "object", Id: details.Fields[bundle.RelationKeyId.String()].GetStringValue(), diff --git a/core/api/service/property.go b/core/api/service/property.go index 4ccd5d1c6..72cb5b02a 100644 --- a/core/api/service/property.go +++ b/core/api/service/property.go @@ -350,7 +350,7 @@ func (s *Service) processProperties(ctx context.Context, spaceId string, entries return nil, util.ErrBadInput(fmt.Sprintf("unknown property key: %q", rk)) } - sanitized, err := s.sanitizeAndValidatePropertyValue(ctx, spaceId, key, prop.Format, raw, prop) + sanitized, err := s.sanitizeAndValidatePropertyValue(spaceId, key, prop.Format, raw, prop) if err != nil { return nil, err } @@ -360,7 +360,7 @@ func (s *Service) processProperties(ctx context.Context, spaceId string, entries } // sanitizeAndValidatePropertyValue checks the value for a property according to its format and ensures referenced IDs exist and are valid. -func (s *Service) sanitizeAndValidatePropertyValue(ctx context.Context, spaceId string, key string, format apimodel.PropertyFormat, value interface{}, property apimodel.Property) (interface{}, error) { +func (s *Service) sanitizeAndValidatePropertyValue(spaceId string, key string, format apimodel.PropertyFormat, value interface{}, property *apimodel.Property) (interface{}, error) { switch format { case apimodel.PropertyFormatText, apimodel.PropertyFormatUrl, apimodel.PropertyFormatEmail, apimodel.PropertyFormatPhone: str, ok := value.(string) @@ -445,7 +445,7 @@ func (s *Service) sanitizeAndValidatePropertyValue(ctx context.Context, spaceId } // isValidSelectOption checks if the option id is valid for the given property. -func (s *Service) isValidSelectOption(spaceId string, property apimodel.Property, tagId string) bool { +func (s *Service) isValidSelectOption(spaceId string, property *apimodel.Property, tagId string) bool { fields, err := util.GetFieldsByID(s.mw, spaceId, tagId, []string{bundle.RelationKeyResolvedLayout.String(), bundle.RelationKeyRelationKey.String()}) if err != nil { return false @@ -474,7 +474,7 @@ func (s *Service) isValidFileReference(spaceId string, fileId string) bool { } // getRecommendedPropertiesFromLists combines featured and regular properties into a list of Properties. -func (s *Service) getRecommendedPropertiesFromLists(featured, regular *types.ListValue, propertyMap map[string]apimodel.Property) []apimodel.Property { +func (s *Service) getRecommendedPropertiesFromLists(featured, regular *types.ListValue, propertyMap map[string]*apimodel.Property) []apimodel.Property { var props []apimodel.Property lists := []*types.ListValue{featured, regular} for _, lst := range lists { @@ -494,7 +494,7 @@ func (s *Service) getRecommendedPropertiesFromLists(featured, regular *types.Lis if _, excluded := excludedSystemProperties[rk]; excluded { continue } - props = append(props, p) + props = append(props, *p) } } return props @@ -502,8 +502,8 @@ func (s *Service) getRecommendedPropertiesFromLists(featured, regular *types.Lis // getPropertyMapsFromStore retrieves all properties for all spaces. // Property entries can also be keyed by property id. Required for filling types with properties, as recommended properties are referenced by id and not key. -func (s *Service) getPropertyMapsFromStore(ctx context.Context, spaceIds []string, keyByPropertyId bool) (map[string]map[string]apimodel.Property, error) { - spacesToProperties := make(map[string]map[string]apimodel.Property, len(spaceIds)) +func (s *Service) getPropertyMapsFromStore(ctx context.Context, spaceIds []string, keyByPropertyId bool) (map[string]map[string]*apimodel.Property, error) { + spacesToProperties := make(map[string]map[string]*apimodel.Property, len(spaceIds)) for _, spaceId := range spaceIds { propertyMap, err := s.getPropertyMapFromStore(ctx, spaceId, keyByPropertyId) @@ -518,7 +518,7 @@ func (s *Service) getPropertyMapsFromStore(ctx context.Context, spaceIds []strin // getPropertyMapFromStore retrieves all properties for a specific space // Property entries can also be keyed by property id. Required for filling types with properties, as recommended properties are referenced by id and not key. -func (s *Service) getPropertyMapFromStore(ctx context.Context, spaceId string, keyByPropertyId bool) (map[string]apimodel.Property, error) { +func (s *Service) getPropertyMapFromStore(ctx context.Context, spaceId string, keyByPropertyId bool) (map[string]*apimodel.Property, error) { resp := s.mw.ObjectSearch(ctx, &pb.RpcObjectSearchRequest{ SpaceId: spaceId, Filters: []*model.BlockContentDataviewFilter{ @@ -545,12 +545,13 @@ func (s *Service) getPropertyMapFromStore(ctx context.Context, spaceId string, k return nil, ErrFailedRetrievePropertyMap } - propertyMap := make(map[string]apimodel.Property, len(resp.Records)) + propertyMap := make(map[string]*apimodel.Property, len(resp.Records)) for _, record := range resp.Records { rk, p := s.getPropertyFromStruct(record) - propertyMap[rk] = p + prop := p + propertyMap[rk] = &prop if keyByPropertyId { - propertyMap[p.Id] = p // add property under id as key to map as well + propertyMap[p.Id] = &prop // add property under id as key to map as well } } @@ -570,7 +571,7 @@ func (s *Service) getPropertyFromStruct(details *types.Struct) (string, apimodel } // getPropertiesFromStruct retrieves the properties from the details. -func (s *Service) getPropertiesFromStruct(details *types.Struct, propertyMap map[string]apimodel.Property, tagMap map[string]apimodel.Tag) []apimodel.PropertyWithValue { +func (s *Service) getPropertiesFromStruct(details *types.Struct, propertyMap map[string]*apimodel.Property, tagMap map[string]apimodel.Tag) []apimodel.PropertyWithValue { properties := make([]apimodel.PropertyWithValue, 0) for rk, value := range details.GetFields() { if _, isExcluded := excludedSystemProperties[rk]; isExcluded { diff --git a/core/api/service/search.go b/core/api/service/search.go index 6b227ba8b..69516914c 100644 --- a/core/api/service/search.go +++ b/core/api/service/search.go @@ -225,7 +225,7 @@ func (s *Service) prepareQueryFilter(searchQuery string) []*model.BlockContentDa } // prepareTypeFilters combines type filters with an OR condition. -func (s *Service) prepareTypeFilters(types []string, typeMap map[string]apimodel.Type) []*model.BlockContentDataviewFilter { +func (s *Service) prepareTypeFilters(types []string, typeMap map[string]*apimodel.Type) []*model.BlockContentDataviewFilter { if len(types) == 0 { return nil } diff --git a/core/api/service/type.go b/core/api/service/type.go index 7b39b7a40..a331d5c15 100644 --- a/core/api/service/type.go +++ b/core/api/service/type.go @@ -179,8 +179,8 @@ func (s *Service) DeleteType(ctx context.Context, spaceId string, typeId string) // getTypeMapsFromStore retrieves all types from all spaces. // Type entries can also be keyed by uniqueKey. Required for resolving type keys to IDs for search filters. -func (s *Service) getTypeMapsFromStore(ctx context.Context, spaceIds []string, propertyMap map[string]map[string]apimodel.Property, keyByUniqueKey bool) (map[string]map[string]apimodel.Type, error) { - spacesToTypes := make(map[string]map[string]apimodel.Type, len(spaceIds)) +func (s *Service) getTypeMapsFromStore(ctx context.Context, spaceIds []string, propertyMap map[string]map[string]*apimodel.Property, keyByUniqueKey bool) (map[string]map[string]*apimodel.Type, error) { + spacesToTypes := make(map[string]map[string]*apimodel.Type, len(spaceIds)) for _, spaceId := range spaceIds { typeMap, err := s.getTypeMapFromStore(ctx, spaceId, propertyMap[spaceId], keyByUniqueKey) @@ -195,7 +195,7 @@ func (s *Service) getTypeMapsFromStore(ctx context.Context, spaceIds []string, p // getTypeMapFromStore retrieves all types for a specific space. // Type entries can also be keyed by uniqueKey. Required for resolving type keys to IDs for search filters. -func (s *Service) getTypeMapFromStore(ctx context.Context, spaceId string, propertyMap map[string]apimodel.Property, keyByUniqueKey bool) (map[string]apimodel.Type, error) { +func (s *Service) getTypeMapFromStore(ctx context.Context, spaceId string, propertyMap map[string]*apimodel.Property, keyByUniqueKey bool) (map[string]*apimodel.Type, error) { resp := s.mw.ObjectSearch(ctx, &pb.RpcObjectSearchRequest{ SpaceId: spaceId, Filters: []*model.BlockContentDataviewFilter{ @@ -228,19 +228,20 @@ func (s *Service) getTypeMapFromStore(ctx context.Context, spaceId string, prope return nil, ErrFailedRetrieveTypes } - typeMap := make(map[string]apimodel.Type, len(resp.Records)) + typeMap := make(map[string]*apimodel.Type, len(resp.Records)) for _, record := range resp.Records { uk, t := s.getTypeFromStruct(record, propertyMap) - typeMap[t.Id] = t + ot := t + typeMap[t.Id] = &ot if keyByUniqueKey { - typeMap[uk] = t + typeMap[uk] = &ot } } return typeMap, nil } // getTypeFromStruct maps a type's details into an apimodel.Type and returns its unique key. -func (s *Service) getTypeFromStruct(details *types.Struct, propertyMap map[string]apimodel.Property) (string, apimodel.Type) { +func (s *Service) getTypeFromStruct(details *types.Struct, propertyMap map[string]*apimodel.Property) (string, apimodel.Type) { uk := details.Fields[bundle.RelationKeyUniqueKey.String()].GetStringValue() return uk, apimodel.Type{ Object: "type", @@ -256,8 +257,11 @@ func (s *Service) getTypeFromStruct(details *types.Struct, propertyMap map[strin } // getTypeFromMap retrieves the type from the details. -func (s *Service) getTypeFromMap(details *types.Struct, typeMap map[string]apimodel.Type) apimodel.Type { - return typeMap[details.Fields[bundle.RelationKeyType.String()].GetStringValue()] +func (s *Service) getTypeFromMap(details *types.Struct, typeMap map[string]*apimodel.Type) apimodel.Type { + if t, ok := typeMap[details.Fields[bundle.RelationKeyType.String()].GetStringValue()]; ok { + return *t + } + return apimodel.Type{} } // buildTypeDetails builds the type details from the CreateTypeRequest. @@ -269,7 +273,7 @@ func (s *Service) buildTypeDetails(ctx context.Context, spaceId string, request bundle.RelationKeyOrigin.String(): pbtypes.Int64(int64(model.ObjectOrigin_api)), } - iconFields, err := s.processIconFields(ctx, spaceId, request.Icon) + iconFields, err := s.processIconFields(spaceId, request.Icon) if err != nil { return nil, err } @@ -331,7 +335,7 @@ func (s *Service) buildUpdatedTypeDetails(ctx context.Context, spaceId string, t } if request.Icon != nil { - iconFields, err := s.processIconFields(ctx, spaceId, *request.Icon) + iconFields, err := s.processIconFields(spaceId, *request.Icon) if err != nil { return nil, err } @@ -387,7 +391,7 @@ func (s *Service) buildUpdatedTypeDetails(ctx context.Context, spaceId string, t } // buildRelationIds constructs relation IDs for property links, creating new properties if necessary. -func (s *Service) buildRelationIds(ctx context.Context, spaceId string, props []apimodel.PropertyLink, propertyMap map[string]apimodel.Property) ([]string, error) { +func (s *Service) buildRelationIds(ctx context.Context, spaceId string, props []apimodel.PropertyLink, propertyMap map[string]*apimodel.Property) ([]string, error) { relationIds := make([]string, 0, len(props)) for _, propLink := range props { rk := util.FromPropertyApiKey(propLink.Key) From 854c5e70dcf6e06d476c6975a134d2fa7fadc757 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Sun, 18 May 2025 12:49:58 +0200 Subject: [PATCH 079/164] GO-5589: Rework auth endpoints and prepare deprecation of previous ones --- core/api/docs/docs.go | 4 +- core/api/docs/openapi.json | 212 +++++++++++++++++----------------- core/api/docs/openapi.yaml | 161 +++++++++++++------------- core/api/handler/auth.go | 120 ++++++++++++++++--- core/api/model/auth.go | 19 +++ core/api/server/router.go | 11 +- core/api/service/auth.go | 19 ++- core/api/service/auth_test.go | 11 +- 8 files changed, 333 insertions(+), 224 deletions(-) diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go index 79e2c91b1..579bd2b4a 100644 --- a/core/api/docs/docs.go +++ b/core/api/docs/docs.go @@ -6,10 +6,10 @@ import "github.com/swaggo/swag/v2" const docTemplate = `{ "schemes": {{ marshal .Schemes }}, - "components": {"schemas":{"apimodel.AddObjectsToListRequest":{"properties":{"objects":{"description":"The list of object IDs to add to the list","example":["[\"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ\"]"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object; see ListTypes or GetType endpoints for linked properties","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file ids of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["emoji","file","icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag ids of the property; see ListTags endpoint for valid values","example":["['tag_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"key":{"example":"creator","type":"string"},"objects":{"description":"The object ids of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The text to search within object names and content; use types field for type filtering","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to include in results (e.g., \"page\", \"task\", \"bookmark\"); see ListTypes endpoint for valid values","example":["page","task","bookmark"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"key":{"example":"status","type":"string"},"select":{"description":"The selected tag id of the property; see ListTags endpoint for valid values","example":"tag_id","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results by","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting options for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The key of the property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TokenResponse":{"properties":{"app_key":{"description":"The app key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","enum":["basic","profile","action","note","bookmark","set","set","collection","participant"],"type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","enum":["basic","profile","action","note"],"type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object; see ListTypes or GetType endpoints for linked properties","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, + "components": {"schemas":{"apimodel.AddObjectsToListRequest":{"properties":{"objects":{"description":"The list of object IDs to add to the list","example":["[\"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ\"]"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateApiKeyResponse":{"properties":{"api_key":{"description":"The api key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.CreateChallengeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for api_key","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object; see ListTypes or GetType endpoints for linked properties","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file ids of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["emoji","file","icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag ids of the property; see ListTags endpoint for valid values","example":["['tag_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"key":{"example":"creator","type":"string"},"objects":{"description":"The object ids of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The text to search within object names and content; use types field for type filtering","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to include in results (e.g., \"page\", \"task\", \"bookmark\"); see ListTypes endpoint for valid values","example":["page","task","bookmark"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"key":{"example":"status","type":"string"},"select":{"description":"The selected tag id of the property; see ListTags endpoint for valid values","example":"tag_id","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results by","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting options for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The key of the property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","enum":["basic","profile","action","note","bookmark","set","set","collection","participant"],"type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","enum":["basic","profile","action","note"],"type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object; see ListTypes or GetType endpoints for linked properties","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, "info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-api/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"}, "externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"}, - "paths": {"/v1/auth/display_code":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid ` + "`" + `app_name` + "`" + `, the server issues a unique ` + "`" + `challenge_id` + "`" + ` and displays a short code within the Anytype Desktop. The ` + "`" + `challenge_id` + "`" + ` must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"create_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.DisplayCodeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start challenge","tags":["Auth"]}},"/v1/auth/token":{"post":{"description":"After receiving a ` + "`" + `challenge_id` + "`" + ` from the ` + "`" + `display_code` + "`" + ` endpoint, the client calls this endpoint to provide the corresponding 4-digit code along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent ` + "`" + `app_key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.","operationId":"solve_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TokenResponse"}}},"description":"The app key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Solve challenge","tags":["Auth"]}},"/v1/search":{"post":{"description":"Executes a global search over all spaces accessible to the authenticated user. The request body must specify the ` + "`" + `query` + "`" + ` text (currently matching only name and snippet of an object), optional filters on types (e.g., \"page\", \"task\"), and sort directives (default: descending by last modified date). Pagination is controlled via ` + "`" + `offset` + "`" + ` and ` + "`" + `limit` + "`" + ` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"search_global","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/v1/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"list_spaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"create_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/v1/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"get_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"update_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"add_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.AddObjectsToListRequest"}}},"description":"The list of object IDs to add to the list; must be retrieved from SearchSpace or GlobalSearch endpoints or obtained from response context","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"remove_list_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list; must be retrieved from SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"get_list_views","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"get_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for; must be retrieved from ListViews endpoint or omited if you want to get all objects in the list","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/v1/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"list_members","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/v1/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"get_member","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity; must be retrieved from ListMembers endpoint or obtained from response context","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/v1/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"create_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/v1/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"get_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"update_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/v1/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"list_properties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"create_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"get_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"update_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"list_tags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"create_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"get_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"update_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/v1/spaces/{space_id}/search":{"post":{"description":"Performs a search within a single space (specified by the ` + "`" + `space_id` + "`" + ` path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search ` + "`" + `query` + "`" + `, ` + "`" + `types` + "`" + `, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"search_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/v1/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"list_types","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"create_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"get_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"update_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"list_templates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve templates for; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/v1/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"get_template","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to which the template belongs; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve; must be retrieved from ListTemplates endpoint or obtained from response context","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, + "paths": {"/v1/auth/api_keys":{"post":{"description":"After receiving a ` + "`" + `challenge_id` + "`" + ` from the ` + "`" + `/v1/auth/challenges` + "`" + ` endpoint, the client calls this endpoint to provide the corresponding 4-digit code along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ` + "`" + `api_key` + "`" + `. This endpoint is central to the authentication process, as it validates the user's identity and issues a key that can be used for further interactions with the API.","operationId":"solve_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"The 4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateApiKeyResponse"}}},"description":"The API key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Solve challenge","tags":["Auth"]}},"/v1/auth/challenges":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid ` + "`" + `app_name` + "`" + `, the server issues a unique ` + "`" + `challenge_id` + "`" + ` and displays a 4-digit code within the Anytype Desktop. The ` + "`" + `challenge_id` + "`" + ` must then be used with the ` + "`" + `/v1/auth/api_keys` + "`" + ` endpoint to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"create_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateChallengeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Create Challenge","tags":["Auth"]}},"/v1/search":{"post":{"description":"Executes a global search over all spaces accessible to the authenticated user. The request body must specify the ` + "`" + `query` + "`" + ` text (currently matching only name and snippet of an object), optional filters on types (e.g., \"page\", \"task\"), and sort directives (default: descending by last modified date). Pagination is controlled via ` + "`" + `offset` + "`" + ` and ` + "`" + `limit` + "`" + ` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"search_global","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/v1/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"list_spaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"create_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/v1/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"get_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"update_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"add_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.AddObjectsToListRequest"}}},"description":"The list of object IDs to add to the list; must be retrieved from SearchSpace or GlobalSearch endpoints or obtained from response context","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"remove_list_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list; must be retrieved from SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"get_list_views","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"get_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for; must be retrieved from ListViews endpoint or omited if you want to get all objects in the list","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/v1/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"list_members","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/v1/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"get_member","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity; must be retrieved from ListMembers endpoint or obtained from response context","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/v1/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"create_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/v1/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"get_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"update_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/v1/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"list_properties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"create_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"get_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"update_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"list_tags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"create_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"get_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"update_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/v1/spaces/{space_id}/search":{"post":{"description":"Performs a search within a single space (specified by the ` + "`" + `space_id` + "`" + ` path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search ` + "`" + `query` + "`" + `, ` + "`" + `types` + "`" + `, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"search_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/v1/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"list_types","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"create_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"get_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"update_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"list_templates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve templates for; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/v1/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"get_template","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to which the template belongs; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve; must be retrieved from ListTemplates endpoint or obtained from response context","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, "openapi": "3.1.0", "servers": [ {"url":"http://localhost:31009"} diff --git a/core/api/docs/openapi.json b/core/api/docs/openapi.json index cc1a42db5..2b11b04b6 100644 --- a/core/api/docs/openapi.json +++ b/core/api/docs/openapi.json @@ -93,6 +93,26 @@ "ColorLime" ] }, + "apimodel.CreateApiKeyResponse": { + "properties": { + "api_key": { + "description": "The api key used to authenticate requests", + "example": "zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=", + "type": "string" + } + }, + "type": "object" + }, + "apimodel.CreateChallengeResponse": { + "properties": { + "challenge_id": { + "description": "The challenge id associated with the displayed code and needed to solve the challenge for api_key", + "example": "67647f5ecda913e9a2e11b26", + "type": "string" + } + }, + "type": "object" + }, "apimodel.CreateObjectRequest": { "properties": { "body": { @@ -264,16 +284,6 @@ }, "type": "object" }, - "apimodel.DisplayCodeResponse": { - "properties": { - "challenge_id": { - "description": "The challenge id associated with the displayed code and needed to solve the challenge for token", - "example": "67647f5ecda913e9a2e11b26", - "type": "string" - } - }, - "type": "object" - }, "apimodel.EmailPropertyLinkValue": { "properties": { "email": { @@ -1364,16 +1374,6 @@ }, "type": "object" }, - "apimodel.TokenResponse": { - "properties": { - "app_key": { - "description": "The app key used to authenticate requests", - "example": "zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=", - "type": "string" - } - }, - "type": "object" - }, "apimodel.Type": { "description": "The type of the object", "properties": { @@ -1962,9 +1962,90 @@ "url": "https://swagger.io/resources/open-api/" }, "paths": { - "/v1/auth/display_code": { + "/v1/auth/api_keys": { "post": { - "description": "Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid `app_name`, the server issues a unique `challenge_id` and displays a short code within the Anytype Desktop. The `challenge_id` must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.", + "description": "After receiving a `challenge_id` from the `/v1/auth/challenges` endpoint, the client calls this endpoint to provide the corresponding 4-digit code along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an `api_key`. This endpoint is central to the authentication process, as it validates the user's identity and issues a key that can be used for further interactions with the API.", + "operationId": "solve_auth_challenge", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "Anytype-Version", + "required": true, + "schema": { + "default": "2025-05-20", + "type": "string" + } + }, + { + "description": "The ID of the challenge to solve", + "in": "query", + "name": "challenge_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The 4-digit code retrieved from Anytype Desktop app", + "in": "query", + "name": "code", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/apimodel.CreateApiKeyResponse" + } + } + }, + "description": "The API key that can be used in the Authorization header for subsequent requests" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ValidationError" + } + } + }, + "description": "Invalid input" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/util.ServerError" + } + } + }, + "description": "Internal server error" + } + }, + "summary": "Solve challenge", + "tags": [ + "Auth" + ] + } + }, + "/v1/auth/challenges": { + "post": { + "description": "Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid `app_name`, the server issues a unique `challenge_id` and displays a 4-digit code within the Anytype Desktop. The `challenge_id` must then be used with the `/v1/auth/api_keys` endpoint to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.", "operationId": "create_auth_challenge", "parameters": [ { @@ -1997,11 +2078,11 @@ } }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/apimodel.DisplayCodeResponse" + "$ref": "#/components/schemas/apimodel.CreateChallengeResponse" } } }, @@ -2028,88 +2109,7 @@ "description": "Internal server error" } }, - "summary": "Start challenge", - "tags": [ - "Auth" - ] - } - }, - "/v1/auth/token": { - "post": { - "description": "After receiving a `challenge_id` from the `display_code` endpoint, the client calls this endpoint to provide the corresponding 4-digit code along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent `app_key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API.", - "operationId": "solve_auth_challenge", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "Anytype-Version", - "required": true, - "schema": { - "default": "2025-05-20", - "type": "string" - } - }, - { - "description": "The ID of the challenge to solve", - "in": "query", - "name": "challenge_id", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "4-digit code retrieved from Anytype Desktop app", - "in": "query", - "name": "code", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object" - } - } - } - }, - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/apimodel.TokenResponse" - } - } - }, - "description": "The app key that can be used in the Authorization header for subsequent requests" - }, - "400": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/util.ValidationError" - } - } - }, - "description": "Invalid input" - }, - "500": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/util.ServerError" - } - } - }, - "description": "Internal server error" - } - }, - "summary": "Solve challenge", + "summary": "Create Challenge", "tags": [ "Auth" ] diff --git a/core/api/docs/openapi.yaml b/core/api/docs/openapi.yaml index f5f7ae0e3..5676f191c 100644 --- a/core/api/docs/openapi.yaml +++ b/core/api/docs/openapi.yaml @@ -72,6 +72,21 @@ components: - ColorIce - ColorTeal - ColorLime + apimodel.CreateApiKeyResponse: + properties: + api_key: + description: The api key used to authenticate requests + example: zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6= + type: string + type: object + apimodel.CreateChallengeResponse: + properties: + challenge_id: + description: The challenge id associated with the displayed code and needed + to solve the challenge for api_key + example: 67647f5ecda913e9a2e11b26 + type: string + type: object apimodel.CreateObjectRequest: properties: body: @@ -200,14 +215,6 @@ components: example: property type: string type: object - apimodel.DisplayCodeResponse: - properties: - challenge_id: - description: The challenge id associated with the displayed code and needed - to solve the challenge for token - example: 67647f5ecda913e9a2e11b26 - type: string - type: object apimodel.EmailPropertyLinkValue: properties: email: @@ -1003,13 +1010,6 @@ components: example: Some text... type: string type: object - apimodel.TokenResponse: - properties: - app_key: - description: The app key used to authenticate requests - example: zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6= - type: string - type: object apimodel.Type: description: The type of the object properties: @@ -1447,14 +1447,72 @@ info: version: "2025-05-20" openapi: 3.1.0 paths: - /v1/auth/display_code: + /v1/auth/api_keys: + post: + description: After receiving a `challenge_id` from the `/v1/auth/challenges` + endpoint, the client calls this endpoint to provide the corresponding 4-digit + code along with the challenge ID. The endpoint verifies that the challenge + solution is correct and, if it is, returns an `api_key`. This endpoint is + central to the authentication process, as it validates the user's identity + and issues a key that can be used for further interactions with the API. + operationId: solve_auth_challenge + parameters: + - description: The version of the API to use + in: header + name: Anytype-Version + required: true + schema: + default: "2025-05-20" + type: string + - description: The ID of the challenge to solve + in: query + name: challenge_id + required: true + schema: + type: string + - description: The 4-digit code retrieved from Anytype Desktop app + in: query + name: code + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + type: object + responses: + "201": + content: + application/json: + schema: + $ref: '#/components/schemas/apimodel.CreateApiKeyResponse' + description: The API key that can be used in the Authorization header for + subsequent requests + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/util.ValidationError' + description: Invalid input + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/util.ServerError' + description: Internal server error + summary: Solve challenge + tags: + - Auth + /v1/auth/challenges: post: description: Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid `app_name`, the server - issues a unique `challenge_id` and displays a short code within the Anytype - Desktop. The `challenge_id` must then be used with the token endpoint (see - below) to solve the challenge and retrieve an authentication token. This mechanism - ensures that only trusted applications and authorized users gain access. + issues a unique `challenge_id` and displays a 4-digit code within the Anytype + Desktop. The `challenge_id` must then be used with the `/v1/auth/api_keys` + endpoint to solve the challenge and retrieve an authentication token. This + mechanism ensures that only trusted applications and authorized users gain + access. operationId: create_auth_challenge parameters: - description: The version of the API to use @@ -1476,11 +1534,11 @@ paths: schema: type: object responses: - "200": + "201": content: application/json: schema: - $ref: '#/components/schemas/apimodel.DisplayCodeResponse' + $ref: '#/components/schemas/apimodel.CreateChallengeResponse' description: The challenge ID associated with the started challenge "400": content: @@ -1494,64 +1552,7 @@ paths: schema: $ref: '#/components/schemas/util.ServerError' description: Internal server error - summary: Start challenge - tags: - - Auth - /v1/auth/token: - post: - description: After receiving a `challenge_id` from the `display_code` endpoint, - the client calls this endpoint to provide the corresponding 4-digit code along - with the challenge ID. The endpoint verifies that the challenge solution is - correct and, if it is, returns a permanent `app_key. This endpoint is central - to the authentication process, as it validates the user's identity and issues - a token that can be used for further interactions with the API. - operationId: solve_auth_challenge - parameters: - - description: The version of the API to use - in: header - name: Anytype-Version - required: true - schema: - default: "2025-05-20" - type: string - - description: The ID of the challenge to solve - in: query - name: challenge_id - required: true - schema: - type: string - - description: 4-digit code retrieved from Anytype Desktop app - in: query - name: code - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - type: object - responses: - "200": - content: - application/json: - schema: - $ref: '#/components/schemas/apimodel.TokenResponse' - description: The app key that can be used in the Authorization header for - subsequent requests - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/util.ValidationError' - description: Invalid input - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/util.ServerError' - description: Internal server error - summary: Solve challenge + summary: Create Challenge tags: - Auth /v1/search: diff --git a/core/api/handler/auth.go b/core/api/handler/auth.go index b69b496a1..3c29bff6a 100644 --- a/core/api/handler/auth.go +++ b/core/api/handler/auth.go @@ -10,28 +10,31 @@ import ( "github.com/anyproto/anytype-heart/core/api/util" ) +/* +TO BE DEPRECATED // DisplayCodeHandler starts a new challenge and returns the challenge ID // -// @Summary Start challenge -// @Description Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid `app_name`, the server issues a unique `challenge_id` and displays a short code within the Anytype Desktop. The `challenge_id` must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access. -// @ID create_auth_challenge -// @Tags Auth -// @Accept json -// @Produce json -// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) -// @Param app_name query string true "The name of the app requesting API access" -// @Success 200 {object} apimodel.DisplayCodeResponse "The challenge ID associated with the started challenge" -// @Failure 400 {object} util.ValidationError "Invalid input" -// @Failure 500 {object} util.ServerError "Internal server error" -// @Router /v1/auth/display_code [post] +// @Summary Start challenge +// @Description Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid `app_name`, the server issues a unique `challenge_id` and displays a short code within the Anytype Desktop. The `challenge_id` must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access. +// @ID create_auth_challenge +// @Tags Auth +// @Accept json +// @Produce json +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) +// @Param app_name query string true "The name of the app requesting API access" +// @Success 200 {object} apimodel.DisplayCodeResponse "The challenge ID associated with the started challenge" +// @Failure 400 {object} util.ValidationError "Invalid input" +// @Failure 500 {object} util.ServerError "Internal server error" +// @Router /v1/auth/display_code [post] +*/ func DisplayCodeHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { appName := c.Query("app_name") - challengeId, err := s.NewChallenge(c.Request.Context(), appName) + challengeId, err := s.CreateChallenge(c.Request.Context(), appName) code := util.MapErrorCode(err, util.ErrToCode(service.ErrMissingAppName, http.StatusBadRequest), - util.ErrToCode(service.ErrFailedGenerateChallenge, http.StatusInternalServerError)) + util.ErrToCode(service.ErrFailedCreateNewChallenge, http.StatusInternalServerError)) if code != http.StatusOK { apiErr := util.CodeToAPIError(code, err.Error()) @@ -39,14 +42,16 @@ func DisplayCodeHandler(s *service.Service) gin.HandlerFunc { return } - c.JSON(http.StatusOK, apimodel.DisplayCodeResponse{ChallengeId: challengeId}) + c.JSON(299, apimodel.DisplayCodeResponse{ChallengeId: challengeId}) } } +/* +TO BE DEPRECATED // TokenHandler retrieves an authentication token using a code and challenge ID // // @Summary Solve challenge -// @Description After receiving a `challenge_id` from the `display_code` endpoint, the client calls this endpoint to provide the corresponding 4-digit code along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent `app_key. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API. +// @Description After receiving a `challenge_id` from the `display_code` endpoint, the client calls this endpoint to provide the corresponding 4-digit code along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns a permanent `app_key`. This endpoint is central to the authentication process, as it validates the user's identity and issues a token that can be used for further interactions with the API. // @ID solve_auth_challenge // @Tags Auth // @Accept json @@ -58,6 +63,7 @@ func DisplayCodeHandler(s *service.Service) gin.HandlerFunc { // @Failure 400 {object} util.ValidationError "Invalid input" // @Failure 500 {object} util.ServerError "Internal server error" // @Router /v1/auth/token [post] +*/ func TokenHandler(s *service.Service) gin.HandlerFunc { return func(c *gin.Context) { challengeId := c.Query("challenge_id") @@ -65,7 +71,7 @@ func TokenHandler(s *service.Service) gin.HandlerFunc { appKey, err := s.SolveChallenge(c.Request.Context(), challengeId, code) errCode := util.MapErrorCode(err, - util.ErrToCode(service.ErrInvalidInput, http.StatusBadRequest), + util.ErrToCode(util.ErrBad, http.StatusBadRequest), util.ErrToCode(service.ErrFailedAuthenticate, http.StatusInternalServerError), ) @@ -75,6 +81,84 @@ func TokenHandler(s *service.Service) gin.HandlerFunc { return } - c.JSON(http.StatusOK, apimodel.TokenResponse{AppKey: appKey}) + c.JSON(299, apimodel.TokenResponse{AppKey: appKey}) + } +} + +// CreateChallengeHandler creates a new challenge for API key generation +// +// @Summary Create Challenge +// @Description Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid `app_name`, the server issues a unique `challenge_id` and displays a 4-digit code within the Anytype Desktop. The `challenge_id` must then be used with the `/v1/auth/api_keys` endpoint to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access. +// @ID create_auth_challenge +// @Tags Auth +// @Accept json +// @Produce json +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) +// @Param app_name query string true "The name of the app requesting API access" +// @Success 201 {object} apimodel.CreateChallengeResponse "The challenge ID associated with the started challenge" +// @Failure 400 {object} util.ValidationError "Invalid input" +// @Failure 500 {object} util.ServerError "Internal server error" +// @Router /v1/auth/challenges [post] +func CreateChallengeHandler(s *service.Service) gin.HandlerFunc { + return func(c *gin.Context) { + request := apimodel.CreateChallengeRequest{} + if err := c.ShouldBindJSON(&request); err != nil { + apiErr := util.CodeToAPIError(http.StatusBadRequest, err.Error()) + c.JSON(http.StatusBadRequest, apiErr) + return + } + + challengeId, err := s.CreateChallenge(c.Request.Context(), request.AppName) + code := util.MapErrorCode(err, + util.ErrToCode(service.ErrMissingAppName, http.StatusBadRequest), + util.ErrToCode(service.ErrFailedCreateNewChallenge, http.StatusInternalServerError)) + + if code != http.StatusOK { + apiErr := util.CodeToAPIError(code, err.Error()) + c.JSON(code, apiErr) + return + } + + c.JSON(http.StatusCreated, apimodel.CreateChallengeResponse{ChallengeId: challengeId}) + } +} + +// CreateApiKeyHandler creates a new api key using a code and challenge ID +// +// @Summary Solve challenge +// @Description After receiving a `challenge_id` from the `/v1/auth/challenges` endpoint, the client calls this endpoint to provide the corresponding 4-digit code along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an `api_key`. This endpoint is central to the authentication process, as it validates the user's identity and issues a key that can be used for further interactions with the API. +// @ID solve_auth_challenge +// @Tags Auth +// @Accept json +// @Produce json +// @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) +// @Param challenge_id query string true "The ID of the challenge to solve" +// @Param code query string true "The 4-digit code retrieved from Anytype Desktop app" +// @Success 201 {object} apimodel.CreateApiKeyResponse "The API key that can be used in the Authorization header for subsequent requests" +// @Failure 400 {object} util.ValidationError "Invalid input" +// @Failure 500 {object} util.ServerError "Internal server error" +// @Router /v1/auth/api_keys [post] +func CreateApiKeyHandler(s *service.Service) gin.HandlerFunc { + return func(c *gin.Context) { + request := apimodel.CreateApiKeyRequest{} + if err := c.ShouldBindJSON(&request); err != nil { + apiErr := util.CodeToAPIError(http.StatusBadRequest, err.Error()) + c.JSON(http.StatusBadRequest, apiErr) + return + } + + apiKey, err := s.SolveChallenge(c.Request.Context(), request.ChallengeId, request.Code) + errCode := util.MapErrorCode(err, + util.ErrToCode(util.ErrBad, http.StatusBadRequest), + util.ErrToCode(service.ErrFailedAuthenticate, http.StatusInternalServerError), + ) + + if errCode != http.StatusOK { + apiErr := util.CodeToAPIError(errCode, err.Error()) + c.JSON(errCode, apiErr) + return + } + + c.JSON(http.StatusCreated, apimodel.CreateApiKeyResponse{ApiKey: apiKey}) } } diff --git a/core/api/model/auth.go b/core/api/model/auth.go index a569ed70c..4402207b6 100644 --- a/core/api/model/auth.go +++ b/core/api/model/auth.go @@ -1,9 +1,28 @@ package apimodel +// TO BE DEPRECATED type DisplayCodeResponse struct { ChallengeId string `json:"challenge_id" example:"67647f5ecda913e9a2e11b26"` // The challenge id associated with the displayed code and needed to solve the challenge for token } +// TO BE DEPRECATED type TokenResponse struct { AppKey string `json:"app_key" example:"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6="` // The app key used to authenticate requests } + +type CreateChallengeRequest struct { + AppName string `json:"app_name" example:"anytype_mcp"` // The name of the app that is requesting the challenge +} + +type CreateChallengeResponse struct { + ChallengeId string `json:"challenge_id" example:"67647f5ecda913e9a2e11b26"` // The challenge id associated with the displayed code and needed to solve the challenge for api_key +} + +type CreateApiKeyRequest struct { + ChallengeId string `json:"challenge_id" example:"67647f5ecda913e9a2e11b26"` // The challenge id associated with the previously displayed code + Code string `json:"code" example:"1234"` // The 4-digit code retrieved from Anytype Desktop app +} + +type CreateApiKeyResponse struct { + ApiKey string `json:"api_key" example:"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6="` // The api key used to authenticate requests +} diff --git a/core/api/server/router.go b/core/api/server/router.go index f3937a36a..8c278dc59 100644 --- a/core/api/server/router.go +++ b/core/api/server/router.go @@ -68,10 +68,15 @@ func (s *Server) NewRouter(mw apicore.ClientCommands) *gin.Engine { }) // Auth routes (no authentication required) - authGroup := router.Group("/v1/auth") + authGroup := router.Group("/v1") { - authGroup.POST("/display_code", handler.DisplayCodeHandler(s.service)) - authGroup.POST("/token", handler.TokenHandler(s.service)) + // TO BE DEPRECATED + authGroup.POST("/auth/display_code", handler.DisplayCodeHandler(s.service)) + // TO BE DEPRECATED + authGroup.POST("/auth/token", handler.TokenHandler(s.service)) + + authGroup.POST("/auth/challenges", handler.CreateChallengeHandler(s.service)) + authGroup.POST("/auth/api_keys", handler.CreateApiKeyHandler(s.service)) } // API routes diff --git a/core/api/service/auth.go b/core/api/service/auth.go index 46eb8d48c..fd947142e 100644 --- a/core/api/service/auth.go +++ b/core/api/service/auth.go @@ -4,19 +4,19 @@ import ( "context" "errors" + "github.com/anyproto/anytype-heart/core/api/util" "github.com/anyproto/anytype-heart/pb" "github.com/anyproto/anytype-heart/pkg/lib/pb/model" ) var ( - ErrMissingAppName = errors.New("missing app name") - ErrFailedGenerateChallenge = errors.New("failed to generate a new challenge") - ErrInvalidInput = errors.New("invalid input") - ErrFailedAuthenticate = errors.New("failed to authenticate user") + ErrMissingAppName = errors.New("missing app name") + ErrFailedCreateNewChallenge = errors.New("failed to create a new challenge") + ErrFailedAuthenticate = errors.New("failed to authenticate user") ) -// NewChallenge calls AccountLocalLinkNewChallenge and returns the challenge ID, or an error if it fails. -func (s *Service) NewChallenge(ctx context.Context, appName string) (string, error) { +// CreateChallenge calls AccountLocalLinkNewChallenge and returns the challenge ID +func (s *Service) CreateChallenge(ctx context.Context, appName string) (string, error) { if appName == "" { return "", ErrMissingAppName } @@ -27,19 +27,18 @@ func (s *Service) NewChallenge(ctx context.Context, appName string) (string, err }) if resp.Error != nil && resp.Error.Code != pb.RpcAccountLocalLinkNewChallengeResponseError_NULL { - return "", ErrFailedGenerateChallenge + return "", ErrFailedCreateNewChallenge } return resp.ChallengeId, nil } -// SolveChallenge calls AccountLocalLinkSolveChallenge and returns the session token + app key, or an error if it fails. +// SolveChallenge calls AccountLocalLinkSolveChallenge and returns the session token + app key func (s *Service) SolveChallenge(ctx context.Context, challengeId string, code string) (appKey string, err error) { if challengeId == "" || code == "" { - return "", ErrInvalidInput + return "", util.ErrBadInput("challenge_id or code is empty") } - // Call AccountLocalLinkSolveChallenge to retrieve session token and app key resp := s.mw.AccountLocalLinkSolveChallenge(ctx, &pb.RpcAccountLocalLinkSolveChallengeRequest{ ChallengeId: challengeId, Answer: code, diff --git a/core/api/service/auth_test.go b/core/api/service/auth_test.go index 10bbe2a75..0d78d54e0 100644 --- a/core/api/service/auth_test.go +++ b/core/api/service/auth_test.go @@ -7,6 +7,7 @@ import ( "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" + "github.com/anyproto/anytype-heart/core/api/util" "github.com/anyproto/anytype-heart/pb" "github.com/anyproto/anytype-heart/pkg/lib/pb/model" ) @@ -34,7 +35,7 @@ func TestAuthService_GenerateNewChallenge(t *testing.T) { }).Once() // when - challengeId, err := fx.service.NewChallenge(ctx, mockedAppName) + challengeId, err := fx.service.CreateChallenge(ctx, mockedAppName) // then require.NoError(t, err) @@ -47,7 +48,7 @@ func TestAuthService_GenerateNewChallenge(t *testing.T) { fx := newFixture(t) // when - challengeId, err := fx.service.NewChallenge(ctx, "") + challengeId, err := fx.service.CreateChallenge(ctx, "") // then require.Error(t, err) @@ -69,11 +70,11 @@ func TestAuthService_GenerateNewChallenge(t *testing.T) { }).Once() // when - challengeId, err := fx.service.NewChallenge(ctx, mockedAppName) + challengeId, err := fx.service.CreateChallenge(ctx, mockedAppName) // then require.Error(t, err) - require.Equal(t, ErrFailedGenerateChallenge, err) + require.Equal(t, ErrFailedCreateNewChallenge, err) require.Empty(t, challengeId) }) } @@ -112,7 +113,7 @@ func TestAuthService_SolveChallengeForToken(t *testing.T) { // then require.Error(t, err) - require.Equal(t, ErrInvalidInput, err) + require.ErrorIs(t, err, util.ErrBad) require.Empty(t, appKey) }) From 36c99783799e47fdc7561ed72c71848d6dc27b57 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Sun, 18 May 2025 12:53:23 +0200 Subject: [PATCH 080/164] GO-5589: Update auth spec --- core/api/docs/docs.go | 2 +- core/api/docs/openapi.json | 8 ++++---- core/api/docs/openapi.yaml | 8 ++++---- core/api/handler/auth.go | 12 ++++++------ 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go index 579bd2b4a..6635be012 100644 --- a/core/api/docs/docs.go +++ b/core/api/docs/docs.go @@ -9,7 +9,7 @@ const docTemplate = `{ "components": {"schemas":{"apimodel.AddObjectsToListRequest":{"properties":{"objects":{"description":"The list of object IDs to add to the list","example":["[\"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ\"]"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateApiKeyResponse":{"properties":{"api_key":{"description":"The api key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.CreateChallengeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for api_key","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object; see ListTypes or GetType endpoints for linked properties","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file ids of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["emoji","file","icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag ids of the property; see ListTags endpoint for valid values","example":["['tag_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"key":{"example":"creator","type":"string"},"objects":{"description":"The object ids of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The text to search within object names and content; use types field for type filtering","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to include in results (e.g., \"page\", \"task\", \"bookmark\"); see ListTypes endpoint for valid values","example":["page","task","bookmark"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"key":{"example":"status","type":"string"},"select":{"description":"The selected tag id of the property; see ListTags endpoint for valid values","example":"tag_id","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results by","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting options for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The key of the property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","enum":["basic","profile","action","note","bookmark","set","set","collection","participant"],"type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","enum":["basic","profile","action","note"],"type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object; see ListTypes or GetType endpoints for linked properties","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, "info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-api/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"}, "externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"}, - "paths": {"/v1/auth/api_keys":{"post":{"description":"After receiving a ` + "`" + `challenge_id` + "`" + ` from the ` + "`" + `/v1/auth/challenges` + "`" + ` endpoint, the client calls this endpoint to provide the corresponding 4-digit code along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ` + "`" + `api_key` + "`" + `. This endpoint is central to the authentication process, as it validates the user's identity and issues a key that can be used for further interactions with the API.","operationId":"solve_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"The 4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateApiKeyResponse"}}},"description":"The API key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Solve challenge","tags":["Auth"]}},"/v1/auth/challenges":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid ` + "`" + `app_name` + "`" + `, the server issues a unique ` + "`" + `challenge_id` + "`" + ` and displays a 4-digit code within the Anytype Desktop. The ` + "`" + `challenge_id` + "`" + ` must then be used with the ` + "`" + `/v1/auth/api_keys` + "`" + ` endpoint to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"create_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateChallengeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Create Challenge","tags":["Auth"]}},"/v1/search":{"post":{"description":"Executes a global search over all spaces accessible to the authenticated user. The request body must specify the ` + "`" + `query` + "`" + ` text (currently matching only name and snippet of an object), optional filters on types (e.g., \"page\", \"task\"), and sort directives (default: descending by last modified date). Pagination is controlled via ` + "`" + `offset` + "`" + ` and ` + "`" + `limit` + "`" + ` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"search_global","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/v1/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"list_spaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"create_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/v1/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"get_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"update_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"add_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.AddObjectsToListRequest"}}},"description":"The list of object IDs to add to the list; must be retrieved from SearchSpace or GlobalSearch endpoints or obtained from response context","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"remove_list_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list; must be retrieved from SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"get_list_views","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"get_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for; must be retrieved from ListViews endpoint or omited if you want to get all objects in the list","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/v1/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"list_members","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/v1/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"get_member","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity; must be retrieved from ListMembers endpoint or obtained from response context","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/v1/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"create_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/v1/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"get_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"update_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/v1/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"list_properties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"create_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"get_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"update_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"list_tags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"create_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"get_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"update_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/v1/spaces/{space_id}/search":{"post":{"description":"Performs a search within a single space (specified by the ` + "`" + `space_id` + "`" + ` path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search ` + "`" + `query` + "`" + `, ` + "`" + `types` + "`" + `, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"search_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/v1/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"list_types","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"create_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"get_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"update_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"list_templates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve templates for; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/v1/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"get_template","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to which the template belongs; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve; must be retrieved from ListTemplates endpoint or obtained from response context","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, + "paths": {"/v1/auth/api_keys":{"post":{"description":"After receiving a ` + "`" + `challenge_id` + "`" + ` from the ` + "`" + `/v1/auth/challenges` + "`" + ` endpoint, the client calls this endpoint to provide the corresponding 4-digit code along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ` + "`" + `api_key` + "`" + `. This endpoint is central to the authentication process, as it validates the user's identity and issues a key that can be used for further interactions with the API.","operationId":"create_api_key","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"The 4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateApiKeyResponse"}}},"description":"The API key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Create API Key","tags":["Auth"]}},"/v1/auth/challenges":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid ` + "`" + `app_name` + "`" + `, the server issues a unique ` + "`" + `challenge_id` + "`" + ` and displays a 4-digit code within the Anytype Desktop. The ` + "`" + `challenge_id` + "`" + ` must then be used with the ` + "`" + `/v1/auth/api_keys` + "`" + ` endpoint to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"create_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateChallengeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Create Challenge","tags":["Auth"]}},"/v1/search":{"post":{"description":"Executes a global search over all spaces accessible to the authenticated user. The request body must specify the ` + "`" + `query` + "`" + ` text (currently matching only name and snippet of an object), optional filters on types (e.g., \"page\", \"task\"), and sort directives (default: descending by last modified date). Pagination is controlled via ` + "`" + `offset` + "`" + ` and ` + "`" + `limit` + "`" + ` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"search_global","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/v1/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"list_spaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"create_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/v1/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"get_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"update_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"add_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.AddObjectsToListRequest"}}},"description":"The list of object IDs to add to the list; must be retrieved from SearchSpace or GlobalSearch endpoints or obtained from response context","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"remove_list_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list; must be retrieved from SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"get_list_views","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"get_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for; must be retrieved from ListViews endpoint or omited if you want to get all objects in the list","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/v1/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"list_members","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/v1/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"get_member","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity; must be retrieved from ListMembers endpoint or obtained from response context","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/v1/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"create_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/v1/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"get_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"update_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/v1/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"list_properties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"create_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"get_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"update_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"list_tags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"create_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"get_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"update_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/v1/spaces/{space_id}/search":{"post":{"description":"Performs a search within a single space (specified by the ` + "`" + `space_id` + "`" + ` path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search ` + "`" + `query` + "`" + `, ` + "`" + `types` + "`" + `, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"search_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/v1/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"list_types","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"create_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"get_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"update_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"list_templates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve templates for; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/v1/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"get_template","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to which the template belongs; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve; must be retrieved from ListTemplates endpoint or obtained from response context","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, "openapi": "3.1.0", "servers": [ {"url":"http://localhost:31009"} diff --git a/core/api/docs/openapi.json b/core/api/docs/openapi.json index 2b11b04b6..477d7f48b 100644 --- a/core/api/docs/openapi.json +++ b/core/api/docs/openapi.json @@ -1965,7 +1965,7 @@ "/v1/auth/api_keys": { "post": { "description": "After receiving a `challenge_id` from the `/v1/auth/challenges` endpoint, the client calls this endpoint to provide the corresponding 4-digit code along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an `api_key`. This endpoint is central to the authentication process, as it validates the user's identity and issues a key that can be used for further interactions with the API.", - "operationId": "solve_auth_challenge", + "operationId": "create_api_key", "parameters": [ { "description": "The version of the API to use", @@ -2024,7 +2024,7 @@ } } }, - "description": "Invalid input" + "description": "Bad request" }, "500": { "content": { @@ -2037,7 +2037,7 @@ "description": "Internal server error" } }, - "summary": "Solve challenge", + "summary": "Create API Key", "tags": [ "Auth" ] @@ -2096,7 +2096,7 @@ } } }, - "description": "Invalid input" + "description": "Bad request" }, "500": { "content": { diff --git a/core/api/docs/openapi.yaml b/core/api/docs/openapi.yaml index 5676f191c..ce1fa2407 100644 --- a/core/api/docs/openapi.yaml +++ b/core/api/docs/openapi.yaml @@ -1455,7 +1455,7 @@ paths: solution is correct and, if it is, returns an `api_key`. This endpoint is central to the authentication process, as it validates the user's identity and issues a key that can be used for further interactions with the API. - operationId: solve_auth_challenge + operationId: create_api_key parameters: - description: The version of the API to use in: header @@ -1494,14 +1494,14 @@ paths: application/json: schema: $ref: '#/components/schemas/util.ValidationError' - description: Invalid input + description: Bad request "500": content: application/json: schema: $ref: '#/components/schemas/util.ServerError' description: Internal server error - summary: Solve challenge + summary: Create API Key tags: - Auth /v1/auth/challenges: @@ -1545,7 +1545,7 @@ paths: application/json: schema: $ref: '#/components/schemas/util.ValidationError' - description: Invalid input + description: Bad request "500": content: application/json: diff --git a/core/api/handler/auth.go b/core/api/handler/auth.go index 3c29bff6a..83f6070ee 100644 --- a/core/api/handler/auth.go +++ b/core/api/handler/auth.go @@ -23,7 +23,7 @@ TO BE DEPRECATED // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param app_name query string true "The name of the app requesting API access" // @Success 200 {object} apimodel.DisplayCodeResponse "The challenge ID associated with the started challenge" -// @Failure 400 {object} util.ValidationError "Invalid input" +// @Failure 400 {object} util.ValidationError "Bad request" // @Failure 500 {object} util.ServerError "Internal server error" // @Router /v1/auth/display_code [post] */ @@ -60,7 +60,7 @@ TO BE DEPRECATED // @Param challenge_id query string true "The ID of the challenge to solve" // @Param code query string true "4-digit code retrieved from Anytype Desktop app" // @Success 200 {object} apimodel.TokenResponse "The app key that can be used in the Authorization header for subsequent requests" -// @Failure 400 {object} util.ValidationError "Invalid input" +// @Failure 400 {object} util.ValidationError "Bad request" // @Failure 500 {object} util.ServerError "Internal server error" // @Router /v1/auth/token [post] */ @@ -96,7 +96,7 @@ func TokenHandler(s *service.Service) gin.HandlerFunc { // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param app_name query string true "The name of the app requesting API access" // @Success 201 {object} apimodel.CreateChallengeResponse "The challenge ID associated with the started challenge" -// @Failure 400 {object} util.ValidationError "Invalid input" +// @Failure 400 {object} util.ValidationError "Bad request" // @Failure 500 {object} util.ServerError "Internal server error" // @Router /v1/auth/challenges [post] func CreateChallengeHandler(s *service.Service) gin.HandlerFunc { @@ -125,9 +125,9 @@ func CreateChallengeHandler(s *service.Service) gin.HandlerFunc { // CreateApiKeyHandler creates a new api key using a code and challenge ID // -// @Summary Solve challenge +// @Summary Create API Key // @Description After receiving a `challenge_id` from the `/v1/auth/challenges` endpoint, the client calls this endpoint to provide the corresponding 4-digit code along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an `api_key`. This endpoint is central to the authentication process, as it validates the user's identity and issues a key that can be used for further interactions with the API. -// @ID solve_auth_challenge +// @ID create_api_key // @Tags Auth // @Accept json // @Produce json @@ -135,7 +135,7 @@ func CreateChallengeHandler(s *service.Service) gin.HandlerFunc { // @Param challenge_id query string true "The ID of the challenge to solve" // @Param code query string true "The 4-digit code retrieved from Anytype Desktop app" // @Success 201 {object} apimodel.CreateApiKeyResponse "The API key that can be used in the Authorization header for subsequent requests" -// @Failure 400 {object} util.ValidationError "Invalid input" +// @Failure 400 {object} util.ValidationError "Bad request" // @Failure 500 {object} util.ServerError "Internal server error" // @Router /v1/auth/api_keys [post] func CreateApiKeyHandler(s *service.Service) gin.HandlerFunc { From 04fb00e0ba9f7fd4f2e69ebecda093ce78c520d7 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Sun, 18 May 2025 15:09:44 +0200 Subject: [PATCH 081/164] GO-5589: Switch StatusOk to StatusCreated for creation endpoints --- core/api/docs/docs.go | 2 +- core/api/docs/openapi.json | 10 +++++----- core/api/docs/openapi.yaml | 10 +++++----- core/api/handler/object.go | 4 ++-- core/api/handler/property.go | 4 ++-- core/api/handler/space.go | 4 ++-- core/api/handler/tag.go | 4 ++-- core/api/handler/type.go | 4 ++-- 8 files changed, 21 insertions(+), 21 deletions(-) diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go index 6635be012..352eacce9 100644 --- a/core/api/docs/docs.go +++ b/core/api/docs/docs.go @@ -9,7 +9,7 @@ const docTemplate = `{ "components": {"schemas":{"apimodel.AddObjectsToListRequest":{"properties":{"objects":{"description":"The list of object IDs to add to the list","example":["[\"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ\"]"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateApiKeyResponse":{"properties":{"api_key":{"description":"The api key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.CreateChallengeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for api_key","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object; see ListTypes or GetType endpoints for linked properties","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file ids of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["emoji","file","icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag ids of the property; see ListTags endpoint for valid values","example":["['tag_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"key":{"example":"creator","type":"string"},"objects":{"description":"The object ids of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The text to search within object names and content; use types field for type filtering","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to include in results (e.g., \"page\", \"task\", \"bookmark\"); see ListTypes endpoint for valid values","example":["page","task","bookmark"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"key":{"example":"status","type":"string"},"select":{"description":"The selected tag id of the property; see ListTags endpoint for valid values","example":"tag_id","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results by","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting options for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The key of the property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","enum":["basic","profile","action","note","bookmark","set","set","collection","participant"],"type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","enum":["basic","profile","action","note"],"type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object; see ListTypes or GetType endpoints for linked properties","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, "info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-api/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"}, "externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"}, - "paths": {"/v1/auth/api_keys":{"post":{"description":"After receiving a ` + "`" + `challenge_id` + "`" + ` from the ` + "`" + `/v1/auth/challenges` + "`" + ` endpoint, the client calls this endpoint to provide the corresponding 4-digit code along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ` + "`" + `api_key` + "`" + `. This endpoint is central to the authentication process, as it validates the user's identity and issues a key that can be used for further interactions with the API.","operationId":"create_api_key","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"The 4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateApiKeyResponse"}}},"description":"The API key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Create API Key","tags":["Auth"]}},"/v1/auth/challenges":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid ` + "`" + `app_name` + "`" + `, the server issues a unique ` + "`" + `challenge_id` + "`" + ` and displays a 4-digit code within the Anytype Desktop. The ` + "`" + `challenge_id` + "`" + ` must then be used with the ` + "`" + `/v1/auth/api_keys` + "`" + ` endpoint to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"create_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateChallengeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Create Challenge","tags":["Auth"]}},"/v1/search":{"post":{"description":"Executes a global search over all spaces accessible to the authenticated user. The request body must specify the ` + "`" + `query` + "`" + ` text (currently matching only name and snippet of an object), optional filters on types (e.g., \"page\", \"task\"), and sort directives (default: descending by last modified date). Pagination is controlled via ` + "`" + `offset` + "`" + ` and ` + "`" + `limit` + "`" + ` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"search_global","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/v1/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"list_spaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"create_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/v1/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"get_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"update_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"add_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.AddObjectsToListRequest"}}},"description":"The list of object IDs to add to the list; must be retrieved from SearchSpace or GlobalSearch endpoints or obtained from response context","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"remove_list_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list; must be retrieved from SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"get_list_views","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"get_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for; must be retrieved from ListViews endpoint or omited if you want to get all objects in the list","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/v1/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"list_members","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/v1/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"get_member","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity; must be retrieved from ListMembers endpoint or obtained from response context","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/v1/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"create_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/v1/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"get_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"update_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/v1/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"list_properties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"create_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"get_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"update_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"list_tags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"create_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"get_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"update_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/v1/spaces/{space_id}/search":{"post":{"description":"Performs a search within a single space (specified by the ` + "`" + `space_id` + "`" + ` path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search ` + "`" + `query` + "`" + `, ` + "`" + `types` + "`" + `, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"search_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/v1/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"list_types","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"create_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"get_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"update_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"list_templates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve templates for; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/v1/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"get_template","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to which the template belongs; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve; must be retrieved from ListTemplates endpoint or obtained from response context","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, + "paths": {"/v1/auth/api_keys":{"post":{"description":"After receiving a ` + "`" + `challenge_id` + "`" + ` from the ` + "`" + `/v1/auth/challenges` + "`" + ` endpoint, the client calls this endpoint to provide the corresponding 4-digit code along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ` + "`" + `api_key` + "`" + `. This endpoint is central to the authentication process, as it validates the user's identity and issues a key that can be used for further interactions with the API.","operationId":"create_api_key","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"The 4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateApiKeyResponse"}}},"description":"The API key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Create API Key","tags":["Auth"]}},"/v1/auth/challenges":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid ` + "`" + `app_name` + "`" + `, the server issues a unique ` + "`" + `challenge_id` + "`" + ` and displays a 4-digit code within the Anytype Desktop. The ` + "`" + `challenge_id` + "`" + ` must then be used with the ` + "`" + `/v1/auth/api_keys` + "`" + ` endpoint to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"create_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateChallengeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Create Challenge","tags":["Auth"]}},"/v1/search":{"post":{"description":"Executes a global search over all spaces accessible to the authenticated user. The request body must specify the ` + "`" + `query` + "`" + ` text (currently matching only name and snippet of an object), optional filters on types (e.g., \"page\", \"task\"), and sort directives (default: descending by last modified date). Pagination is controlled via ` + "`" + `offset` + "`" + ` and ` + "`" + `limit` + "`" + ` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"search_global","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/v1/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"list_spaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"create_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/v1/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"get_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"update_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"add_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.AddObjectsToListRequest"}}},"description":"The list of object IDs to add to the list; must be retrieved from SearchSpace or GlobalSearch endpoints or obtained from response context","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"remove_list_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list; must be retrieved from SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"get_list_views","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"get_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for; must be retrieved from ListViews endpoint or omited if you want to get all objects in the list","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/v1/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"list_members","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/v1/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"get_member","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity; must be retrieved from ListMembers endpoint or obtained from response context","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/v1/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"create_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/v1/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"get_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"update_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/v1/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"list_properties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"create_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"get_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"update_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"list_tags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"create_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"get_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"update_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/v1/spaces/{space_id}/search":{"post":{"description":"Performs a search within a single space (specified by the ` + "`" + `space_id` + "`" + ` path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search ` + "`" + `query` + "`" + `, ` + "`" + `types` + "`" + `, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"search_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/v1/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"list_types","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"create_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"get_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"update_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"list_templates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve templates for; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/v1/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"get_template","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to which the template belongs; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve; must be retrieved from ListTemplates endpoint or obtained from response context","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, "openapi": "3.1.0", "servers": [ {"url":"http://localhost:31009"} diff --git a/core/api/docs/openapi.json b/core/api/docs/openapi.json index 477d7f48b..fe0e81aef 100644 --- a/core/api/docs/openapi.json +++ b/core/api/docs/openapi.json @@ -2308,7 +2308,7 @@ "required": true }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { @@ -3312,7 +3312,7 @@ "required": true }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { @@ -3846,7 +3846,7 @@ "required": true }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { @@ -4387,7 +4387,7 @@ "required": true }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { @@ -5044,7 +5044,7 @@ "required": true }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { diff --git a/core/api/docs/openapi.yaml b/core/api/docs/openapi.yaml index ce1fa2407..32247f7e3 100644 --- a/core/api/docs/openapi.yaml +++ b/core/api/docs/openapi.yaml @@ -1695,7 +1695,7 @@ paths: description: The space to create required: true responses: - "200": + "201": content: application/json: schema: @@ -2389,7 +2389,7 @@ paths: description: The object to create required: true responses: - "200": + "201": content: application/json: schema: @@ -2750,7 +2750,7 @@ paths: description: The property to create required: true responses: - "200": + "201": content: application/json: schema: @@ -3118,7 +3118,7 @@ paths: description: The tag to create required: true responses: - "200": + "201": content: application/json: schema: @@ -3567,7 +3567,7 @@ paths: description: The type to create required: true responses: - "200": + "201": content: application/json: schema: diff --git a/core/api/handler/object.go b/core/api/handler/object.go index b7bd4592e..613b335e5 100644 --- a/core/api/handler/object.go +++ b/core/api/handler/object.go @@ -103,7 +103,7 @@ func GetObjectHandler(s *service.Service) gin.HandlerFunc { // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space in which to create the object; must be retrieved from ListSpaces endpoint" // @Param object body apimodel.CreateObjectRequest true "The object to create" -// @Success 200 {object} apimodel.ObjectResponse "The created object" +// @Success 201 {object} apimodel.ObjectResponse "The created object" // @Failure 400 {object} util.ValidationError "Bad request" // @Failure 401 {object} util.UnauthorizedError "Unauthorized" // @Failure 429 {object} util.RateLimitError "Rate limit exceeded" @@ -139,7 +139,7 @@ func CreateObjectHandler(s *service.Service) gin.HandlerFunc { return } - c.JSON(http.StatusOK, apimodel.ObjectResponse{Object: object}) + c.JSON(http.StatusCreated, apimodel.ObjectResponse{Object: object}) } } diff --git a/core/api/handler/property.go b/core/api/handler/property.go index 65cfd3e8f..45bea7648 100644 --- a/core/api/handler/property.go +++ b/core/api/handler/property.go @@ -98,7 +98,7 @@ func GetPropertyHandler(s *service.Service) gin.HandlerFunc { // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to create the property in; must be retrieved from ListSpaces endpoint" // @Param property body apimodel.CreatePropertyRequest true "The property to create" -// @Success 200 {object} apimodel.PropertyResponse "The created property" +// @Success 201 {object} apimodel.PropertyResponse "The created property" // @Failure 400 {object} util.ValidationError "Bad request" // @Failure 401 {object} util.UnauthorizedError "Unauthorized" // @Failure 429 {object} util.RateLimitError "Rate limit exceeded" @@ -129,7 +129,7 @@ func CreatePropertyHandler(s *service.Service) gin.HandlerFunc { return } - c.JSON(http.StatusOK, apimodel.PropertyResponse{Property: property}) + c.JSON(http.StatusCreated, apimodel.PropertyResponse{Property: property}) } } diff --git a/core/api/handler/space.go b/core/api/handler/space.go index 8d8de4496..0eec45cee 100644 --- a/core/api/handler/space.go +++ b/core/api/handler/space.go @@ -94,7 +94,7 @@ func GetSpaceHandler(s *service.Service) gin.HandlerFunc { // @Produce json // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param name body apimodel.CreateSpaceRequest true "The space to create" -// @Success 200 {object} apimodel.SpaceResponse "The created space" +// @Success 201 {object} apimodel.SpaceResponse "The created space" // @Failure 400 {object} util.ValidationError "Bad request" // @Failure 401 {object} util.UnauthorizedError "Unauthorized" // @Failure 429 {object} util.RateLimitError "Rate limit exceeded" @@ -124,7 +124,7 @@ func CreateSpaceHandler(s *service.Service) gin.HandlerFunc { return } - c.JSON(http.StatusOK, apimodel.SpaceResponse{Space: space}) + c.JSON(http.StatusCreated, apimodel.SpaceResponse{Space: space}) } } diff --git a/core/api/handler/tag.go b/core/api/handler/tag.go index c53806735..e47d7ab28 100644 --- a/core/api/handler/tag.go +++ b/core/api/handler/tag.go @@ -103,7 +103,7 @@ func GetTagHandler(s *service.Service) gin.HandlerFunc { // @Param space_id path string true "The ID of the space to create the tag in; must be retrieved from ListSpaces endpoint" // @Param property_id path string true "The ID of the property to create the tag for; must be retrieved from ListProperties endpoint or obtained from response context" // @Param tag body apimodel.CreateTagRequest true "The tag to create" -// @Success 200 {object} apimodel.TagResponse "The created tag" +// @Success 201 {object} apimodel.TagResponse "The created tag" // @Failure 400 {object} util.ValidationError "Bad request" // @Failure 401 {object} util.UnauthorizedError "Unauthorized" // @Failure 429 {object} util.RateLimitError "Rate limit exceeded" @@ -135,7 +135,7 @@ func CreateTagHandler(s *service.Service) gin.HandlerFunc { return } - c.JSON(http.StatusOK, apimodel.TagResponse{Tag: option}) + c.JSON(http.StatusCreated, apimodel.TagResponse{Tag: option}) } } diff --git a/core/api/handler/type.go b/core/api/handler/type.go index bb232253c..dc5395dc1 100644 --- a/core/api/handler/type.go +++ b/core/api/handler/type.go @@ -98,7 +98,7 @@ func GetTypeHandler(s *service.Service) gin.HandlerFunc { // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space in which to create the type; must be retrieved from ListSpaces endpoint" // @Param type body apimodel.CreateTypeRequest true "The type to create" -// @Success 200 {object} apimodel.TypeResponse "The created type" +// @Success 201 {object} apimodel.TypeResponse "The created type" // @Failure 400 {object} util.ValidationError "Bad request" // @Failure 401 {object} util.UnauthorizedError "Unauthorized" // @Failure 429 {object} util.RateLimitError "Rate limit exceeded" @@ -129,7 +129,7 @@ func CreateTypeHandler(s *service.Service) gin.HandlerFunc { return } - c.JSON(http.StatusOK, apimodel.TypeResponse{Type: object}) + c.JSON(http.StatusCreated, apimodel.TypeResponse{Type: object}) } } From 82525911d8f206395262046712659d7dba804678 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Sun, 18 May 2025 15:27:42 +0200 Subject: [PATCH 082/164] GO-5589: Fix typo --- core/api/docs/docs.go | 2 +- core/api/docs/openapi.json | 2 +- core/api/docs/openapi.yaml | 2 +- core/api/handler/list.go | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go index 352eacce9..91de3e436 100644 --- a/core/api/docs/docs.go +++ b/core/api/docs/docs.go @@ -9,7 +9,7 @@ const docTemplate = `{ "components": {"schemas":{"apimodel.AddObjectsToListRequest":{"properties":{"objects":{"description":"The list of object IDs to add to the list","example":["[\"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ\"]"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateApiKeyResponse":{"properties":{"api_key":{"description":"The api key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.CreateChallengeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for api_key","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object; see ListTypes or GetType endpoints for linked properties","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file ids of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["emoji","file","icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag ids of the property; see ListTags endpoint for valid values","example":["['tag_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"key":{"example":"creator","type":"string"},"objects":{"description":"The object ids of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The text to search within object names and content; use types field for type filtering","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to include in results (e.g., \"page\", \"task\", \"bookmark\"); see ListTypes endpoint for valid values","example":["page","task","bookmark"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"key":{"example":"status","type":"string"},"select":{"description":"The selected tag id of the property; see ListTags endpoint for valid values","example":"tag_id","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results by","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting options for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The key of the property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","enum":["basic","profile","action","note","bookmark","set","set","collection","participant"],"type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","enum":["basic","profile","action","note"],"type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object; see ListTypes or GetType endpoints for linked properties","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, "info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-api/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"}, "externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"}, - "paths": {"/v1/auth/api_keys":{"post":{"description":"After receiving a ` + "`" + `challenge_id` + "`" + ` from the ` + "`" + `/v1/auth/challenges` + "`" + ` endpoint, the client calls this endpoint to provide the corresponding 4-digit code along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ` + "`" + `api_key` + "`" + `. This endpoint is central to the authentication process, as it validates the user's identity and issues a key that can be used for further interactions with the API.","operationId":"create_api_key","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"The 4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateApiKeyResponse"}}},"description":"The API key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Create API Key","tags":["Auth"]}},"/v1/auth/challenges":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid ` + "`" + `app_name` + "`" + `, the server issues a unique ` + "`" + `challenge_id` + "`" + ` and displays a 4-digit code within the Anytype Desktop. The ` + "`" + `challenge_id` + "`" + ` must then be used with the ` + "`" + `/v1/auth/api_keys` + "`" + ` endpoint to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"create_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateChallengeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Create Challenge","tags":["Auth"]}},"/v1/search":{"post":{"description":"Executes a global search over all spaces accessible to the authenticated user. The request body must specify the ` + "`" + `query` + "`" + ` text (currently matching only name and snippet of an object), optional filters on types (e.g., \"page\", \"task\"), and sort directives (default: descending by last modified date). Pagination is controlled via ` + "`" + `offset` + "`" + ` and ` + "`" + `limit` + "`" + ` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"search_global","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/v1/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"list_spaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"create_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/v1/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"get_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"update_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"add_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.AddObjectsToListRequest"}}},"description":"The list of object IDs to add to the list; must be retrieved from SearchSpace or GlobalSearch endpoints or obtained from response context","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"remove_list_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list; must be retrieved from SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"get_list_views","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"get_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for; must be retrieved from ListViews endpoint or omited if you want to get all objects in the list","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/v1/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"list_members","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/v1/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"get_member","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity; must be retrieved from ListMembers endpoint or obtained from response context","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/v1/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"create_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/v1/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"get_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"update_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/v1/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"list_properties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"create_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"get_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"update_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"list_tags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"create_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"get_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"update_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/v1/spaces/{space_id}/search":{"post":{"description":"Performs a search within a single space (specified by the ` + "`" + `space_id` + "`" + ` path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search ` + "`" + `query` + "`" + `, ` + "`" + `types` + "`" + `, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"search_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/v1/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"list_types","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"create_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"get_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"update_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"list_templates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve templates for; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/v1/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"get_template","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to which the template belongs; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve; must be retrieved from ListTemplates endpoint or obtained from response context","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, + "paths": {"/v1/auth/api_keys":{"post":{"description":"After receiving a ` + "`" + `challenge_id` + "`" + ` from the ` + "`" + `/v1/auth/challenges` + "`" + ` endpoint, the client calls this endpoint to provide the corresponding 4-digit code along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ` + "`" + `api_key` + "`" + `. This endpoint is central to the authentication process, as it validates the user's identity and issues a key that can be used for further interactions with the API.","operationId":"create_api_key","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"The 4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateApiKeyResponse"}}},"description":"The API key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Create API Key","tags":["Auth"]}},"/v1/auth/challenges":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid ` + "`" + `app_name` + "`" + `, the server issues a unique ` + "`" + `challenge_id` + "`" + ` and displays a 4-digit code within the Anytype Desktop. The ` + "`" + `challenge_id` + "`" + ` must then be used with the ` + "`" + `/v1/auth/api_keys` + "`" + ` endpoint to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"create_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateChallengeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Create Challenge","tags":["Auth"]}},"/v1/search":{"post":{"description":"Executes a global search over all spaces accessible to the authenticated user. The request body must specify the ` + "`" + `query` + "`" + ` text (currently matching only name and snippet of an object), optional filters on types (e.g., \"page\", \"task\"), and sort directives (default: descending by last modified date). Pagination is controlled via ` + "`" + `offset` + "`" + ` and ` + "`" + `limit` + "`" + ` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"search_global","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/v1/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"list_spaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"create_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/v1/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"get_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"update_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"add_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.AddObjectsToListRequest"}}},"description":"The list of object IDs to add to the list; must be retrieved from SearchSpace or GlobalSearch endpoints or obtained from response context","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"remove_list_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list; must be retrieved from SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"get_list_views","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"get_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for; must be retrieved from ListViews endpoint or omitted if you want to get all objects in the list","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/v1/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"list_members","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/v1/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"get_member","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity; must be retrieved from ListMembers endpoint or obtained from response context","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/v1/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"create_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/v1/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"get_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"update_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/v1/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"list_properties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"create_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"get_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"update_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"list_tags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"create_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"get_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"update_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/v1/spaces/{space_id}/search":{"post":{"description":"Performs a search within a single space (specified by the ` + "`" + `space_id` + "`" + ` path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search ` + "`" + `query` + "`" + `, ` + "`" + `types` + "`" + `, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"search_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/v1/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"list_types","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"create_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"get_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"update_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"list_templates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve templates for; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/v1/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"get_template","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to which the template belongs; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve; must be retrieved from ListTemplates endpoint or obtained from response context","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, "openapi": "3.1.0", "servers": [ {"url":"http://localhost:31009"} diff --git a/core/api/docs/openapi.json b/core/api/docs/openapi.json index fe0e81aef..4f5057e39 100644 --- a/core/api/docs/openapi.json +++ b/core/api/docs/openapi.json @@ -2937,7 +2937,7 @@ } }, { - "description": "The ID of the view to retrieve objects for; must be retrieved from ListViews endpoint or omited if you want to get all objects in the list", + "description": "The ID of the view to retrieve objects for; must be retrieved from ListViews endpoint or omitted if you want to get all objects in the list", "in": "path", "name": "view_id", "required": true, diff --git a/core/api/docs/openapi.yaml b/core/api/docs/openapi.yaml index 32247f7e3..03698a31f 100644 --- a/core/api/docs/openapi.yaml +++ b/core/api/docs/openapi.yaml @@ -2122,7 +2122,7 @@ paths: schema: type: string - description: The ID of the view to retrieve objects for; must be retrieved - from ListViews endpoint or omited if you want to get all objects in the + from ListViews endpoint or omitted if you want to get all objects in the list in: path name: view_id diff --git a/core/api/handler/list.go b/core/api/handler/list.go index 263ff12b1..eded6726d 100644 --- a/core/api/handler/list.go +++ b/core/api/handler/list.go @@ -62,7 +62,7 @@ func GetListViewsHandler(s *service.Service) gin.HandlerFunc { // @Param Anytype-Version header string true "The version of the API to use" default(2025-05-20) // @Param space_id path string true "The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint" // @Param list_id path string true "The ID of the list to retrieve objects for; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']" -// @Param view_id path string true "The ID of the view to retrieve objects for; must be retrieved from ListViews endpoint or omited if you want to get all objects in the list" +// @Param view_id path string true "The ID of the view to retrieve objects for; must be retrieved from ListViews endpoint or omitted if you want to get all objects in the list" // @Param offset query int false "The number of items to skip before starting to collect the result set" default(0) // @Param limit query int false "The number of items to return" // @Success 200 {object} pagination.PaginatedResponse[apimodel.Object] "The list of objects associated with the specified list" From 81bc071a7503ccf27caf23752030a7987b68731a Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Sun, 18 May 2025 18:47:32 +0200 Subject: [PATCH 083/164] GO-5589: Add apiId to property building and add key to create and update property requests --- core/api/model/property.go | 2 ++ core/api/service/list_test.go | 3 +++ core/api/service/object_test.go | 2 ++ core/api/service/property.go | 38 +++++++++++++++++++++++++++------ core/api/service/search_test.go | 2 ++ core/api/service/type_test.go | 3 +++ 6 files changed, 44 insertions(+), 6 deletions(-) diff --git a/core/api/model/property.go b/core/api/model/property.go index b8b3fbf7d..3900b174b 100644 --- a/core/api/model/property.go +++ b/core/api/model/property.go @@ -44,10 +44,12 @@ type PropertyResponse struct { type CreatePropertyRequest struct { Name string `json:"name" binding:"required" example:"Last modified date"` // The name of the property Format PropertyFormat `json:"format" binding:"required" enums:"text,number,select,multi_select,date,files,checkbox,url,email,phone,objects"` // The format of the property + Key *string `json:"key,omitempty" example:"some_user_defined_property_key"` // The key of the property } type UpdatePropertyRequest struct { Name *string `json:"name,omitempty" binding:"required" example:"Last modified date"` // The name to set for the property + Key *string `json:"key,omitempty" example:"some_user_defined_property_key"` // The key to set for the property } type Property struct { diff --git a/core/api/service/list_test.go b/core/api/service/list_test.go index 41322749a..006455bcf 100644 --- a/core/api/service/list_test.go +++ b/core/api/service/list_test.go @@ -428,6 +428,7 @@ func TestListService_GetObjectsInList(t *testing.T) { Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyRelationKey.String(), + bundle.RelationKeyApiId.String(), bundle.RelationKeyName.String(), bundle.RelationKeyRelationFormat.String(), }, @@ -673,6 +674,7 @@ func TestListService_GetObjectsInList(t *testing.T) { Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyRelationKey.String(), + bundle.RelationKeyApiId.String(), bundle.RelationKeyName.String(), bundle.RelationKeyRelationFormat.String(), }, @@ -1128,6 +1130,7 @@ func TestListService_GetObjectsInList(t *testing.T) { Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyRelationKey.String(), + bundle.RelationKeyApiId.String(), bundle.RelationKeyName.String(), bundle.RelationKeyRelationFormat.String(), }, diff --git a/core/api/service/object_test.go b/core/api/service/object_test.go index d86cf344b..12ae5e34c 100644 --- a/core/api/service/object_test.go +++ b/core/api/service/object_test.go @@ -89,6 +89,7 @@ func TestObjectService_ListObjects(t *testing.T) { Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyRelationKey.String(), + bundle.RelationKeyApiId.String(), bundle.RelationKeyName.String(), bundle.RelationKeyRelationFormat.String(), }, @@ -381,6 +382,7 @@ func TestObjectService_GetObject(t *testing.T) { Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyRelationKey.String(), + bundle.RelationKeyApiId.String(), bundle.RelationKeyName.String(), bundle.RelationKeyRelationFormat.String(), }, diff --git a/core/api/service/property.go b/core/api/service/property.go index 72cb5b02a..b9233e2a0 100644 --- a/core/api/service/property.go +++ b/core/api/service/property.go @@ -129,6 +129,7 @@ func (s *Service) ListProperties(ctx context.Context, spaceId string, offset int Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyRelationKey.String(), + bundle.RelationKeyApiId.String(), bundle.RelationKeyName.String(), bundle.RelationKeyRelationFormat.String(), }, @@ -191,12 +192,19 @@ func (s *Service) GetProperty(ctx context.Context, spaceId string, propertyId st func (s *Service) CreateProperty(ctx context.Context, spaceId string, request apimodel.CreatePropertyRequest) (apimodel.Property, error) { details := &types.Struct{ Fields: map[string]*types.Value{ - bundle.RelationKeyName.String(): pbtypes.String(request.Name), + bundle.RelationKeyName.String(): pbtypes.String(s.sanitizedString(request.Name)), bundle.RelationKeyRelationFormat.String(): pbtypes.Int64(int64(PropertyFormatToRelationFormat[request.Format])), bundle.RelationKeyOrigin.String(): pbtypes.Int64(int64(model.ObjectOrigin_api)), }, } + if request.Key != nil { + details.Fields[bundle.RelationKeyApiId.String()] = pbtypes.String(s.sanitizedString(*request.Key)) + } else { + // TODO: transliterate instead + details.Fields[bundle.RelationKeyApiId.String()] = pbtypes.String(strings.ReplaceAll(request.Name, " ", "_")) + } + resp := s.mw.ObjectCreateRelation(ctx, &pb.RpcObjectCreateRelationRequest{ SpaceId: spaceId, Details: details, @@ -220,17 +228,25 @@ func (s *Service) UpdateProperty(ctx context.Context, spaceId string, propertyId return apimodel.Property{}, ErrPropertyCannotBeUpdated } + var detailsToUpdate []*model.Detail if request.Name != nil { - detail := model.Detail{ + detailsToUpdate = append(detailsToUpdate, &model.Detail{ Key: bundle.RelationKeyName.String(), Value: pbtypes.String(s.sanitizedString(*request.Name)), - } + }) + } + if request.Key != nil { + detailsToUpdate = append(detailsToUpdate, &model.Detail{ + Key: bundle.RelationKeyApiId.String(), + Value: pbtypes.String(s.sanitizedString(*request.Key)), + }) + } + if len(detailsToUpdate) > 0 { resp := s.mw.ObjectSetDetails(ctx, &pb.RpcObjectSetDetailsRequest{ ContextId: propertyId, - Details: []*model.Detail{&detail}, + Details: detailsToUpdate, }) - if resp.Error != nil && resp.Error.Code != pb.RpcObjectSetDetailsResponseError_NULL { return apimodel.Property{}, ErrFailedUpdateProperty } @@ -536,6 +552,7 @@ func (s *Service) getPropertyMapFromStore(ctx context.Context, spaceId string, k Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyRelationKey.String(), + bundle.RelationKeyApiId.String(), bundle.RelationKeyName.String(), bundle.RelationKeyRelationFormat.String(), }, @@ -561,10 +578,19 @@ func (s *Service) getPropertyMapFromStore(ctx context.Context, spaceId string, k // getPropertyFromStruct maps a property's details into an apimodel.Property and returns its relation key. func (s *Service) getPropertyFromStruct(details *types.Struct) (string, apimodel.Property) { rk := details.Fields[bundle.RelationKeyRelationKey.String()].GetStringValue() + + // apiId as key takes precedence over relation key + key := util.ToPropertyApiKey(rk) + if apiIDField, exists := details.Fields[bundle.RelationKeyApiId.String()]; exists { + if apiID := apiIDField.GetStringValue(); apiID != "" { + key = apiID + } + } + return rk, apimodel.Property{ Object: "property", Id: details.Fields[bundle.RelationKeyId.String()].GetStringValue(), - Key: util.ToPropertyApiKey(rk), + Key: key, Name: details.Fields[bundle.RelationKeyName.String()].GetStringValue(), Format: RelationFormatToPropertyFormat[model.RelationFormat(details.Fields[bundle.RelationKeyRelationFormat.String()].GetNumberValue())], } diff --git a/core/api/service/search_test.go b/core/api/service/search_test.go index a38d739c1..0274ab043 100644 --- a/core/api/service/search_test.go +++ b/core/api/service/search_test.go @@ -147,6 +147,7 @@ func TestSearchService_GlobalSearch(t *testing.T) { Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyRelationKey.String(), + bundle.RelationKeyApiId.String(), bundle.RelationKeyName.String(), bundle.RelationKeyRelationFormat.String(), }, @@ -456,6 +457,7 @@ func TestSearchService_Search(t *testing.T) { Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyRelationKey.String(), + bundle.RelationKeyApiId.String(), bundle.RelationKeyName.String(), bundle.RelationKeyRelationFormat.String(), }, diff --git a/core/api/service/type_test.go b/core/api/service/type_test.go index 1ef9a1b06..4334a0849 100644 --- a/core/api/service/type_test.go +++ b/core/api/service/type_test.go @@ -54,6 +54,7 @@ func TestObjectService_ListTypes(t *testing.T) { Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyRelationKey.String(), + bundle.RelationKeyApiId.String(), bundle.RelationKeyName.String(), bundle.RelationKeyRelationFormat.String(), }, @@ -110,6 +111,7 @@ func TestObjectService_ListTypes(t *testing.T) { Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyRelationKey.String(), + bundle.RelationKeyApiId.String(), bundle.RelationKeyName.String(), bundle.RelationKeyRelationFormat.String(), }, @@ -175,6 +177,7 @@ func TestObjectService_GetType(t *testing.T) { Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyRelationKey.String(), + bundle.RelationKeyApiId.String(), bundle.RelationKeyName.String(), bundle.RelationKeyRelationFormat.String(), }, From 77048ed567b5ac82c38b28ba474f210c752d1d70 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Sun, 18 May 2025 20:16:32 +0200 Subject: [PATCH 084/164] GO-5589: Add docs prefix to openapi spec paths --- core/api/server/router.go | 4 ++-- core/api/util/util.go | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/core/api/server/router.go b/core/api/server/router.go index 8c278dc59..06a22e20a 100644 --- a/core/api/server/router.go +++ b/core/api/server/router.go @@ -49,7 +49,7 @@ func (s *Server) NewRouter(mw apicore.ClientCommands) *gin.Engine { c.Redirect(http.StatusMovedPermanently, target) }) - router.GET("/openapi.yaml", func(c *gin.Context) { + router.GET("/docs/openapi.yaml", func(c *gin.Context) { data, err := os.ReadFile("./core/api/docs/openapi.yaml") if err != nil { c.String(http.StatusInternalServerError, "Failed to read OpenAPI spec") @@ -58,7 +58,7 @@ func (s *Server) NewRouter(mw apicore.ClientCommands) *gin.Engine { c.Data(http.StatusOK, "application/x-yaml", data) }) - router.GET("/openapi.json", func(c *gin.Context) { + router.GET("/docs/openapi.json", func(c *gin.Context) { data, err := os.ReadFile("./core/api/docs/openapi.json") if err != nil { c.String(http.StatusInternalServerError, "Failed to read OpenAPI spec") diff --git a/core/api/util/util.go b/core/api/util/util.go index 725ce411f..9fc0394b5 100644 --- a/core/api/util/util.go +++ b/core/api/util/util.go @@ -15,7 +15,6 @@ import ( ) var ( - ErrFailedSearchType = errors.New("failed to search for type") ErrFailedResolveToUniqueKey = errors.New("failed to resolve to unique key") ErrFailedGetById = errors.New("failed to get object by id") ErrFailedGetByIdNotFound = errors.New("failed to find object by id") From 9be45500209b87bc6686b781bb90e2c12e16febd Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Sun, 18 May 2025 20:24:53 +0200 Subject: [PATCH 085/164] GO-5589: Fix IsEmoji detection --- core/api/model/icon.go | 2 +- core/api/model/icon_test.go | 47 +++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 core/api/model/icon_test.go diff --git a/core/api/model/icon.go b/core/api/model/icon.go index 5377166fb..a3797404b 100644 --- a/core/api/model/icon.go +++ b/core/api/model/icon.go @@ -176,7 +176,7 @@ func IsEmoji(s string) bool { return false } for _, r := range s { - if unicode.Is(unicode.Cf, r) || unicode.Is(unicode.So, r) || unicode.Is(unicode.Sk, r) { + if unicode.Is(unicode.Cf, r) || unicode.Is(unicode.Mn, r) || unicode.Is(unicode.So, r) || unicode.Is(unicode.Sk, r) { continue } else { return false diff --git a/core/api/model/icon_test.go b/core/api/model/icon_test.go new file mode 100644 index 000000000..f3a54397f --- /dev/null +++ b/core/api/model/icon_test.go @@ -0,0 +1,47 @@ +package apimodel + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestIsEmoji(t *testing.T) { + tests := []struct { + name string + input string + want bool + }{ + // valid single-code-point emoji + {"GrinningFace", "😀", true}, + // yin-yang with variation selector + {"YinYangWithVS", "☯️", true}, + // emoji + skin tone modifier + {"ThumbsUpMediumSkinTone", "👍🏽", true}, + // ZWJ sequence (couple kissing) + {"CoupleKissingZWJ", "👩‍❤️‍💋‍👨", true}, + // string of emojis + {"MultipleEmojis", "😀😃😄", true}, + + // invalid: letters only + {"Letters", "abc", false}, + // invalid: mixed emoji + letter + {"EmojiPlusLetter", "😀a", false}, + // invalid: digits + {"Digit", "1", false}, + // invalid: punctuation + {"Punctuation", "!", false}, + // invalid: whitespace + {"Whitespace", " ", false}, + // invalid: empty string + {"EmptyString", "", false}, + } + + for _, tc := range tests { + tc := tc + t.Run(tc.name, func(t *testing.T) { + got := IsEmoji(tc.input) + require.Equal(t, tc.want, got, "IsEmoji(%q)", tc.input) + }) + } +} From e26ab6f3c4709c9c356d239e42d8b400e00b8e23 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Mon, 19 May 2025 07:56:33 +0200 Subject: [PATCH 086/164] GO-5589: Refactor icon handling and move IsEmoji function to service package --- core/api/model/icon.go | 42 +-------------------- core/api/service/icon.go | 47 ++++++++++++++++++++++++ core/api/{model => service}/icon_test.go | 2 +- core/api/service/member.go | 4 +- core/api/service/object.go | 8 ++-- core/api/service/space.go | 2 +- core/api/service/type.go | 2 +- 7 files changed, 57 insertions(+), 50 deletions(-) create mode 100644 core/api/service/icon.go rename core/api/{model => service}/icon_test.go (98%) diff --git a/core/api/model/icon.go b/core/api/model/icon.go index a3797404b..b0f296c40 100644 --- a/core/api/model/icon.go +++ b/core/api/model/icon.go @@ -3,7 +3,6 @@ package apimodel import ( "encoding/json" "fmt" - "unicode" "github.com/anyproto/anytype-heart/core/api/util" ) @@ -59,7 +58,7 @@ func (c *Color) UnmarshalJSON(data []byte) error { } } -var iconOptionToColor = map[float64]Color{ +var IconOptionToColor = map[float64]Color{ 1: ColorGrey, 2: ColorYellow, 3: ColorOrange, @@ -170,42 +169,3 @@ type NamedIcon struct { } func (NamedIcon) isIcon() {} - -func IsEmoji(s string) bool { - if s == "" { - return false - } - for _, r := range s { - if unicode.Is(unicode.Cf, r) || unicode.Is(unicode.Mn, r) || unicode.Is(unicode.So, r) || unicode.Is(unicode.Sk, r) { - continue - } else { - return false - } - } - return true -} - -// GetIcon returns the appropriate Icon implementation. -func GetIcon(gatewayUrl string, iconEmoji string, iconImage string, iconName string, iconOption float64) Icon { - if iconName != "" { - return Icon{NamedIcon{ - Format: IconFormatIcon, - Name: iconName, - Color: ColorPtr(iconOptionToColor[iconOption]), - }} - } - if iconEmoji != "" { - return Icon{EmojiIcon{ - Format: IconFormatEmoji, - Emoji: iconEmoji, - }} - } - if iconImage != "" { - return Icon{FileIcon{ - Format: IconFormatFile, - File: fmt.Sprintf("%s/image/%s", gatewayUrl, iconImage), - }} - } - - return Icon{NamedIcon{Format: ""}} -} diff --git a/core/api/service/icon.go b/core/api/service/icon.go new file mode 100644 index 000000000..054f90888 --- /dev/null +++ b/core/api/service/icon.go @@ -0,0 +1,47 @@ +package service + +import ( + "fmt" + "unicode" + + apimodel "github.com/anyproto/anytype-heart/core/api/model" +) + +func IsEmoji(s string) bool { + if s == "" { + return false + } + for _, r := range s { + if unicode.Is(unicode.Cf, r) || unicode.Is(unicode.Mn, r) || unicode.Is(unicode.So, r) || unicode.Is(unicode.Sk, r) { + continue + } else { + return false + } + } + return true +} + +// GetIcon returns the appropriate Icon implementation. +func GetIcon(gatewayUrl string, iconEmoji string, iconImage string, iconName string, iconOption float64) apimodel.Icon { + if iconName != "" { + return apimodel.Icon{apimodel.NamedIcon{ + Format: apimodel.IconFormatIcon, + Name: iconName, + Color: apimodel.ColorPtr(apimodel.IconOptionToColor[iconOption]), + }} + } + if iconEmoji != "" { + return apimodel.Icon{apimodel.EmojiIcon{ + Format: apimodel.IconFormatEmoji, + Emoji: iconEmoji, + }} + } + if iconImage != "" { + return apimodel.Icon{apimodel.FileIcon{ + Format: apimodel.IconFormatFile, + File: fmt.Sprintf("%s/image/%s", gatewayUrl, iconImage), + }} + } + + return apimodel.Icon{apimodel.NamedIcon{Format: ""}} +} diff --git a/core/api/model/icon_test.go b/core/api/service/icon_test.go similarity index 98% rename from core/api/model/icon_test.go rename to core/api/service/icon_test.go index f3a54397f..cb907286b 100644 --- a/core/api/model/icon_test.go +++ b/core/api/service/icon_test.go @@ -1,4 +1,4 @@ -package apimodel +package service import ( "testing" diff --git a/core/api/service/member.go b/core/api/service/member.go index 312f0aca7..2628664ff 100644 --- a/core/api/service/member.go +++ b/core/api/service/member.go @@ -80,7 +80,7 @@ func (s *Service) ListMembers(ctx context.Context, spaceId string, offset int, l members = make([]apimodel.Member, 0, len(paginatedMembers)) for _, record := range paginatedMembers { - icon := apimodel.GetIcon(s.gatewayUrl, record.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), record.Fields[bundle.RelationKeyIconImage.String()].GetStringValue(), "", 0) + icon := GetIcon(s.gatewayUrl, record.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), record.Fields[bundle.RelationKeyIconImage.String()].GetStringValue(), "", 0) member := apimodel.Member{ Object: "member", @@ -127,7 +127,7 @@ func (s *Service) GetMember(ctx context.Context, spaceId string, memberId string return apimodel.Member{}, ErrMemberNotFound } - icon := apimodel.GetIcon(s.gatewayUrl, "", resp.Records[0].Fields[bundle.RelationKeyIconImage.String()].GetStringValue(), "", 0) + icon := GetIcon(s.gatewayUrl, "", resp.Records[0].Fields[bundle.RelationKeyIconImage.String()].GetStringValue(), "", 0) return apimodel.Member{ Object: "member", diff --git a/core/api/service/object.go b/core/api/service/object.go index 750362d13..2f49e5e74 100644 --- a/core/api/service/object.go +++ b/core/api/service/object.go @@ -329,7 +329,7 @@ func (s *Service) processIconFields(spaceId string, icon apimodel.Icon) (map[str case apimodel.NamedIcon: return nil, util.ErrBadInput("icon name and color are not supported for object") case apimodel.EmojiIcon: - if len(e.Emoji) > 0 && !apimodel.IsEmoji(e.Emoji) { + if len(e.Emoji) > 0 && !IsEmoji(e.Emoji) { return nil, util.ErrBadInput("icon emoji is not valid") } iconFields[bundle.RelationKeyIconEmoji.String()] = pbtypes.String(e.Emoji) @@ -361,7 +361,7 @@ func (s *Service) processIconFields(spaceId string, icon apimodel.Icon) (map[str // Style: model.BlockContentTextStyle_name[int32(content.Text.Style)], // Checked: content.Text.Checked, // Color: content.Text.Color, -// Icon: apimodel.GetIcon(s.gatewayUrl, content.Text.IconEmoji, content.Text.IconImage, "", 0), +// Icon: GetIcon(s.gatewayUrl, content.Text.IconEmoji, content.Text.IconImage, "", 0), // } // case *model.BlockContentOfFile: // file = &apimodel.File{ @@ -407,7 +407,7 @@ func (s *Service) getObjectFromStruct(details *types.Struct, propertyMap map[str Object: "object", Id: details.Fields[bundle.RelationKeyId.String()].GetStringValue(), Name: details.Fields[bundle.RelationKeyName.String()].GetStringValue(), - Icon: apimodel.GetIcon(s.gatewayUrl, details.GetFields()[bundle.RelationKeyIconEmoji.String()].GetStringValue(), details.GetFields()[bundle.RelationKeyIconImage.String()].GetStringValue(), details.GetFields()[bundle.RelationKeyIconName.String()].GetStringValue(), details.GetFields()[bundle.RelationKeyIconOption.String()].GetNumberValue()), + Icon: GetIcon(s.gatewayUrl, details.GetFields()[bundle.RelationKeyIconEmoji.String()].GetStringValue(), details.GetFields()[bundle.RelationKeyIconImage.String()].GetStringValue(), details.GetFields()[bundle.RelationKeyIconName.String()].GetStringValue(), details.GetFields()[bundle.RelationKeyIconOption.String()].GetNumberValue()), Archived: details.Fields[bundle.RelationKeyIsArchived.String()].GetBoolValue(), SpaceId: details.Fields[bundle.RelationKeySpaceId.String()].GetStringValue(), Snippet: details.Fields[bundle.RelationKeySnippet.String()].GetStringValue(), @@ -423,7 +423,7 @@ func (s *Service) getObjectWithBlocksFromStruct(details *types.Struct, markdown Object: "object", Id: details.Fields[bundle.RelationKeyId.String()].GetStringValue(), Name: details.Fields[bundle.RelationKeyName.String()].GetStringValue(), - Icon: apimodel.GetIcon(s.gatewayUrl, details.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), details.Fields[bundle.RelationKeyIconImage.String()].GetStringValue(), details.Fields[bundle.RelationKeyIconName.String()].GetStringValue(), details.Fields[bundle.RelationKeyIconOption.String()].GetNumberValue()), + Icon: GetIcon(s.gatewayUrl, details.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), details.Fields[bundle.RelationKeyIconImage.String()].GetStringValue(), details.Fields[bundle.RelationKeyIconName.String()].GetStringValue(), details.Fields[bundle.RelationKeyIconOption.String()].GetNumberValue()), Archived: details.Fields[bundle.RelationKeyIsArchived.String()].GetBoolValue(), SpaceId: details.Fields[bundle.RelationKeySpaceId.String()].GetStringValue(), Snippet: details.Fields[bundle.RelationKeySnippet.String()].GetStringValue(), diff --git a/core/api/service/space.go b/core/api/service/space.go index 5c45b6021..82b3cb36d 100644 --- a/core/api/service/space.go +++ b/core/api/service/space.go @@ -216,7 +216,7 @@ func (s *Service) getSpaceInfo(ctx context.Context, spaceId string) (space apimo } name := spaceResp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyName.String()].GetStringValue() - icon := apimodel.GetIcon(s.gatewayUrl, spaceResp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), spaceResp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyIconImage.String()].GetStringValue(), "", 0) + icon := GetIcon(s.gatewayUrl, spaceResp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), spaceResp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyIconImage.String()].GetStringValue(), "", 0) description := spaceResp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyDescription.String()].GetStringValue() return apimodel.Space{ diff --git a/core/api/service/type.go b/core/api/service/type.go index a331d5c15..bbcf4de9b 100644 --- a/core/api/service/type.go +++ b/core/api/service/type.go @@ -249,7 +249,7 @@ func (s *Service) getTypeFromStruct(details *types.Struct, propertyMap map[strin Key: util.ToTypeApiKey(details.Fields[bundle.RelationKeyUniqueKey.String()].GetStringValue()), Name: details.Fields[bundle.RelationKeyName.String()].GetStringValue(), PluralName: details.Fields[bundle.RelationKeyPluralName.String()].GetStringValue(), - Icon: apimodel.GetIcon(s.gatewayUrl, details.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), "", details.Fields[bundle.RelationKeyIconName.String()].GetStringValue(), details.Fields[bundle.RelationKeyIconOption.String()].GetNumberValue()), + Icon: GetIcon(s.gatewayUrl, details.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), "", details.Fields[bundle.RelationKeyIconName.String()].GetStringValue(), details.Fields[bundle.RelationKeyIconOption.String()].GetNumberValue()), Archived: details.Fields[bundle.RelationKeyIsArchived.String()].GetBoolValue(), Layout: s.otLayoutToObjectLayout(model.ObjectTypeLayout(details.Fields[bundle.RelationKeyRecommendedLayout.String()].GetNumberValue())), Properties: s.getRecommendedPropertiesFromLists(details.Fields[bundle.RelationKeyRecommendedFeaturedRelations.String()].GetListValue(), details.Fields[bundle.RelationKeyRecommendedRelations.String()].GetListValue(), propertyMap), From 3b205560cded50a341bbf667017db02d79eb8e0f Mon Sep 17 00:00:00 2001 From: kirillston Date: Mon, 19 May 2025 12:12:53 +0200 Subject: [PATCH 087/164] GO-5561 Add relation to required --- core/block/editor/objecttype.go | 1 + core/pushnotification/keys.go | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/core/block/editor/objecttype.go b/core/block/editor/objecttype.go index c1de6d519..ba4a097c8 100644 --- a/core/block/editor/objecttype.go +++ b/core/block/editor/objecttype.go @@ -34,6 +34,7 @@ var typeRequiredRelations = append(typeAndRelationRequiredRelations, bundle.RelationKeyIconOption, bundle.RelationKeyIconName, bundle.RelationKeyPluralName, + bundle.RelationKeyHeaderRelationsLayout, ) type ObjectType struct { diff --git a/core/pushnotification/keys.go b/core/pushnotification/keys.go index 3f35728c3..11ace2a4a 100644 --- a/core/pushnotification/keys.go +++ b/core/pushnotification/keys.go @@ -1,6 +1,8 @@ package pushnotification import ( + "fmt" + "github.com/anyproto/any-sync/util/crypto" "github.com/anyproto/anytype-heart/util/privkey" @@ -20,6 +22,9 @@ func deriveSpaceKey(firstMetadataKey crypto.PrivKey) (crypto.PrivKey, error) { } func deriveSymmetricKey(readKey crypto.SymKey) (crypto.SymKey, error) { + if readKey == nil { + return nil, fmt.Errorf("readKey is nil") + } raw, err := readKey.Raw() if err != nil { return nil, err From e4dc22b5f7021bab5a7557c839e1481df85eb960 Mon Sep 17 00:00:00 2001 From: kirillston Date: Mon, 19 May 2025 12:15:13 +0200 Subject: [PATCH 088/164] GO-5561 Remove other fix --- core/pushnotification/keys.go | 5 ----- 1 file changed, 5 deletions(-) diff --git a/core/pushnotification/keys.go b/core/pushnotification/keys.go index 11ace2a4a..3f35728c3 100644 --- a/core/pushnotification/keys.go +++ b/core/pushnotification/keys.go @@ -1,8 +1,6 @@ package pushnotification import ( - "fmt" - "github.com/anyproto/any-sync/util/crypto" "github.com/anyproto/anytype-heart/util/privkey" @@ -22,9 +20,6 @@ func deriveSpaceKey(firstMetadataKey crypto.PrivKey) (crypto.PrivKey, error) { } func deriveSymmetricKey(readKey crypto.SymKey) (crypto.SymKey, error) { - if readKey == nil { - return nil, fmt.Errorf("readKey is nil") - } raw, err := readKey.Raw() if err != nil { return nil, err From e9fc5b0442337d57ff0e51ce44e2283adcfa43f9 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Mon, 19 May 2025 12:27:57 +0200 Subject: [PATCH 089/164] GO-5589: Add transliteration and key prop entries in map under apiId --- core/api/model/property.go | 2 +- core/api/service/property.go | 35 ++++++++++++++++++++++------------- go.mod | 1 + go.sum | 2 ++ 4 files changed, 26 insertions(+), 14 deletions(-) diff --git a/core/api/model/property.go b/core/api/model/property.go index 3900b174b..ac05a799f 100644 --- a/core/api/model/property.go +++ b/core/api/model/property.go @@ -44,7 +44,7 @@ type PropertyResponse struct { type CreatePropertyRequest struct { Name string `json:"name" binding:"required" example:"Last modified date"` // The name of the property Format PropertyFormat `json:"format" binding:"required" enums:"text,number,select,multi_select,date,files,checkbox,url,email,phone,objects"` // The format of the property - Key *string `json:"key,omitempty" example:"some_user_defined_property_key"` // The key of the property + Key string `json:"key" example:"some_user_defined_property_key"` // The key of the property } type UpdatePropertyRequest struct { diff --git a/core/api/service/property.go b/core/api/service/property.go index b9233e2a0..c6814963c 100644 --- a/core/api/service/property.go +++ b/core/api/service/property.go @@ -9,6 +9,8 @@ import ( "time" "github.com/gogo/protobuf/types" + "github.com/iancoleman/strcase" + "github.com/mozillazg/go-unidecode" apimodel "github.com/anyproto/anytype-heart/core/api/model" "github.com/anyproto/anytype-heart/core/api/pagination" @@ -141,7 +143,7 @@ func (s *Service) ListProperties(ctx context.Context, spaceId string, offset int filteredRecords := make([]*types.Struct, 0, len(resp.Records)) for _, record := range resp.Records { - rk, _ := s.getPropertyFromStruct(record) + rk, _, _ := s.getPropertyFromStruct(record) if _, isExcluded := excludedSystemProperties[rk]; isExcluded { continue } @@ -153,7 +155,7 @@ func (s *Service) ListProperties(ctx context.Context, spaceId string, offset int properties = make([]apimodel.Property, 0, len(paginatedProperties)) for _, record := range paginatedProperties { - _, property := s.getPropertyFromStruct(record) + _, _, property := s.getPropertyFromStruct(record) properties = append(properties, property) } @@ -181,7 +183,7 @@ func (s *Service) GetProperty(ctx context.Context, spaceId string, propertyId st } } - rk, property := s.getPropertyFromStruct(resp.ObjectView.Details[0].Details) + rk, _, property := s.getPropertyFromStruct(resp.ObjectView.Details[0].Details) if _, isExcluded := excludedSystemProperties[rk]; isExcluded { return apimodel.Property{}, ErrPropertyNotFound } @@ -198,11 +200,10 @@ func (s *Service) CreateProperty(ctx context.Context, spaceId string, request ap }, } - if request.Key != nil { - details.Fields[bundle.RelationKeyApiId.String()] = pbtypes.String(s.sanitizedString(*request.Key)) + if request.Key != "" { + details.Fields[bundle.RelationKeyApiId.String()] = pbtypes.String(s.sanitizedString(request.Key)) } else { - // TODO: transliterate instead - details.Fields[bundle.RelationKeyApiId.String()] = pbtypes.String(strings.ReplaceAll(request.Name, " ", "_")) + details.Fields[bundle.RelationKeyApiId.String()] = pbtypes.String(transliterate(request.Name)) } resp := s.mw.ObjectCreateRelation(ctx, &pb.RpcObjectCreateRelationRequest{ @@ -564,9 +565,10 @@ func (s *Service) getPropertyMapFromStore(ctx context.Context, spaceId string, k propertyMap := make(map[string]*apimodel.Property, len(resp.Records)) for _, record := range resp.Records { - rk, p := s.getPropertyFromStruct(record) + rk, apiId, p := s.getPropertyFromStruct(record) prop := p propertyMap[rk] = &prop + propertyMap[apiId] = &prop // TODO: add under api key as well, double check if keyByPropertyId { propertyMap[p.Id] = &prop // add property under id as key to map as well } @@ -576,18 +578,19 @@ func (s *Service) getPropertyMapFromStore(ctx context.Context, spaceId string, k } // getPropertyFromStruct maps a property's details into an apimodel.Property and returns its relation key. -func (s *Service) getPropertyFromStruct(details *types.Struct) (string, apimodel.Property) { +func (s *Service) getPropertyFromStruct(details *types.Struct) (string, string, apimodel.Property) { rk := details.Fields[bundle.RelationKeyRelationKey.String()].GetStringValue() + key := util.ToPropertyApiKey(rk) // apiId as key takes precedence over relation key - key := util.ToPropertyApiKey(rk) + var apiId string if apiIDField, exists := details.Fields[bundle.RelationKeyApiId.String()]; exists { - if apiID := apiIDField.GetStringValue(); apiID != "" { - key = apiID + if apiId = apiIDField.GetStringValue(); apiId != "" { + key = apiId } } - return rk, apimodel.Property{ + return rk, apiId, apimodel.Property{ Object: "property", Id: details.Fields[bundle.RelationKeyId.String()].GetStringValue(), Key: key, @@ -796,3 +799,9 @@ func (s *Service) buildPropertyWithValue(id string, key string, name string, for return nil } + +func transliterate(str string) string { + trimmed := strings.TrimSpace(str) + ascii := unidecode.Unidecode(trimmed) + return strcase.ToSnake(ascii) +} diff --git a/go.mod b/go.mod index 58349cbb6..e97d2a256 100644 --- a/go.mod +++ b/go.mod @@ -226,6 +226,7 @@ require ( github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/mozillazg/go-unidecode v0.2.0 // indirect github.com/multiformats/go-base36 v0.2.0 // indirect github.com/multiformats/go-multiaddr v0.15.0 // indirect github.com/multiformats/go-multicodec v0.9.0 // indirect diff --git a/go.sum b/go.sum index df0b0061f..c0a001f77 100644 --- a/go.sum +++ b/go.sum @@ -770,6 +770,8 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/mozillazg/go-unidecode v0.2.0 h1:vFGEzAH9KSwyWmXCOblazEWDh7fOkpmy/Z4ArmamSUc= +github.com/mozillazg/go-unidecode v0.2.0/go.mod h1:zB48+/Z5toiRolOZy9ksLryJ976VIwmDmpQ2quyt1aA= github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/multiformats/go-base32 v0.1.0 h1:pVx9xoSPqEIQG8o+UbAe7DNi51oej1NtK+aGkbLYxPE= From dbc157fafe8888638e1f14da86c5eb269582573f Mon Sep 17 00:00:00 2001 From: kirillston Date: Mon, 19 May 2025 12:29:56 +0200 Subject: [PATCH 090/164] GO-5561 Add value to file types --- core/relationutils/objecttype.go | 1 + docs/proto.md | 1 + pkg/lib/bundle/generator/main.go | 5 + pkg/lib/bundle/types.gen.go | 14 +- pkg/lib/bundle/types.json | 12 +- pkg/lib/pb/model/models.pb.go | 930 +++++++++--------- pkg/lib/pb/model/protos/models.proto | 1 + .../systemobjectreviser.go | 1 + 8 files changed, 510 insertions(+), 455 deletions(-) diff --git a/core/relationutils/objecttype.go b/core/relationutils/objecttype.go index 7ed3979fe..b529d0f77 100644 --- a/core/relationutils/objecttype.go +++ b/core/relationutils/objecttype.go @@ -56,5 +56,6 @@ func (ot *ObjectType) BundledTypeDetails() *domain.Details { det.SetInt64(bundle.RelationKeyIconOption, ot.IconColor) det.SetString(bundle.RelationKeyIconName, ot.IconName) det.SetString(bundle.RelationKeyPluralName, ot.PluralName) + det.SetInt64(bundle.RelationKeyHeaderRelationsLayout, ot.HeaderRelationsLayout) return det } diff --git a/docs/proto.md b/docs/proto.md index 570af0f49..f33d4dfe2 100644 --- a/docs/proto.md +++ b/docs/proto.md @@ -31715,6 +31715,7 @@ Used to decode block meta only, without the content itself | iconColor | [int64](#int64) | | color of object type icon | | iconName | [string](#string) | | name of object type icon | | pluralName | [string](#string) | | name of objectType in plural form (can be localized for bundled types) | +| headerRelationsLayout | [int64](#int64) | | header relations layout type. line = 0, column = 1 | diff --git a/pkg/lib/bundle/generator/main.go b/pkg/lib/bundle/generator/main.go index 925ed14b5..e8a292676 100644 --- a/pkg/lib/bundle/generator/main.go +++ b/pkg/lib/bundle/generator/main.go @@ -65,6 +65,7 @@ type ObjectType struct { IconColor int `json:"iconColor"` IconName string `json:"iconName"` PluralName string `json:"pluralName"` + HeaderRelationsLayout int `json:"headerRelationsLayout"` } type Layout struct { @@ -320,6 +321,10 @@ func generateTypes() error { dictS[Id("PluralName")] = Lit(ot.PluralName) } + if ot.HeaderRelationsLayout != 0 { + dictS[Id("HeaderRelationsLayout")] = Lit(ot.HeaderRelationsLayout) + } + dict[Id(typeConst(ot.ID))] = Block(dictS) } g.Id("types").Op("=").Map(Qual(domainPkg, "TypeKey")).Op("*").Qual(relPbPkg, "ObjectType").Values(Dict(dict)) diff --git a/pkg/lib/bundle/types.gen.go b/pkg/lib/bundle/types.gen.go index eb50f06d7..da0ecc5d3 100644 --- a/pkg/lib/bundle/types.gen.go +++ b/pkg/lib/bundle/types.gen.go @@ -9,7 +9,7 @@ import ( "github.com/anyproto/anytype-heart/pkg/lib/pb/model" ) -const TypeChecksum = "880c466315e22d0b573f6542b4ca1dcc4e2cb3395de3bad901f87460ff914191" +const TypeChecksum = "ae558de440451cdcc08064675c1a69f63c5568de8f6331d04efa55a4f4919014" const ( TypePrefix = "_ot" ) @@ -50,6 +50,7 @@ var ( TypeKeyAudio: { Description: "", + HeaderRelationsLayout: 1, IconColor: 5, IconName: "musical-notes", Layout: model.ObjectType_file, @@ -58,7 +59,7 @@ var ( Readonly: true, RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyAddedDate), MustGetRelationLink(RelationKeyOrigin), MustGetRelationLink(RelationKeyFileExt), MustGetRelationLink(RelationKeySizeInBytes), MustGetRelationLink(RelationKeyFileMimeType), MustGetRelationLink(RelationKeyArtist), MustGetRelationLink(RelationKeyAudioAlbum), MustGetRelationLink(RelationKeyAudioGenre), MustGetRelationLink(RelationKeyReleasedYear), MustGetRelationLink(RelationKeyAudioAlbumTrackNumber), MustGetRelationLink(RelationKeyAudioLyrics)}, RestrictObjectCreation: true, - Revision: 5, + Revision: 6, Types: []model.SmartBlockType{model.SmartBlockType_File}, Url: TypePrefix + "audio", }, @@ -191,6 +192,7 @@ var ( TypeKeyFile: { Description: "", + HeaderRelationsLayout: 1, IconColor: 7, IconName: "attach", Layout: model.ObjectType_file, @@ -199,7 +201,7 @@ var ( Readonly: true, RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyAddedDate), MustGetRelationLink(RelationKeyOrigin), MustGetRelationLink(RelationKeyFileExt), MustGetRelationLink(RelationKeySizeInBytes), MustGetRelationLink(RelationKeyFileMimeType)}, RestrictObjectCreation: true, - Revision: 5, + Revision: 6, Types: []model.SmartBlockType{model.SmartBlockType_File}, Url: TypePrefix + "file", }, @@ -220,6 +222,7 @@ var ( TypeKeyImage: { Description: "", + HeaderRelationsLayout: 1, IconColor: 10, IconName: "image", Layout: model.ObjectType_image, @@ -228,7 +231,7 @@ var ( Readonly: true, RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyAddedDate), MustGetRelationLink(RelationKeyOrigin), MustGetRelationLink(RelationKeyFileExt), MustGetRelationLink(RelationKeySizeInBytes), MustGetRelationLink(RelationKeyHeightInPixels), MustGetRelationLink(RelationKeyWidthInPixels), MustGetRelationLink(RelationKeyFileMimeType), MustGetRelationLink(RelationKeyCamera), MustGetRelationLink(RelationKeyCameraIso), MustGetRelationLink(RelationKeyAperture), MustGetRelationLink(RelationKeyExposure), MustGetRelationLink(RelationKeyFocalRatio)}, RestrictObjectCreation: true, - Revision: 5, + Revision: 6, Types: []model.SmartBlockType{model.SmartBlockType_File}, Url: TypePrefix + "image", }, @@ -450,6 +453,7 @@ var ( TypeKeyVideo: { Description: "", + HeaderRelationsLayout: 1, IconColor: 6, IconName: "videocam", Layout: model.ObjectType_file, @@ -458,7 +462,7 @@ var ( Readonly: true, RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyAddedDate), MustGetRelationLink(RelationKeyOrigin), MustGetRelationLink(RelationKeyFileExt), MustGetRelationLink(RelationKeySizeInBytes), MustGetRelationLink(RelationKeyHeightInPixels), MustGetRelationLink(RelationKeyWidthInPixels), MustGetRelationLink(RelationKeyFileMimeType), MustGetRelationLink(RelationKeyCamera), MustGetRelationLink(RelationKeyCameraIso), MustGetRelationLink(RelationKeyAperture), MustGetRelationLink(RelationKeyExposure)}, RestrictObjectCreation: true, - Revision: 5, + Revision: 6, Types: []model.SmartBlockType{model.SmartBlockType_File}, Url: TypePrefix + "video", }, diff --git a/pkg/lib/bundle/types.json b/pkg/lib/bundle/types.json index 33f6a7df6..e46c22681 100644 --- a/pkg/lib/bundle/types.json +++ b/pkg/lib/bundle/types.json @@ -172,7 +172,8 @@ "exposure" ], "restrictObjectCreation": true, - "revision": 5 + "revision": 6, + "headerRelationsLayout": 1 }, { "id": "dashboard", @@ -392,7 +393,8 @@ "focalRatio" ], "restrictObjectCreation": true, - "revision": 5 + "revision": 6, + "headerRelationsLayout": 1 }, { "id": "profile", @@ -436,7 +438,8 @@ "audioLyrics" ], "restrictObjectCreation": true, - "revision": 5 + "revision": 6, + "headerRelationsLayout": 1 }, { "id": "goal", @@ -476,7 +479,8 @@ "fileMimeType" ], "restrictObjectCreation": true, - "revision": 5 + "revision": 6, + "headerRelationsLayout": 1 }, { "id": "project", diff --git a/pkg/lib/pb/model/models.pb.go b/pkg/lib/pb/model/models.pb.go index 08ae46917..337112813 100644 --- a/pkg/lib/pb/model/models.pb.go +++ b/pkg/lib/pb/model/models.pb.go @@ -6119,6 +6119,7 @@ type ObjectType struct { IconColor int64 `protobuf:"varint,15,opt,name=iconColor,proto3" json:"iconColor,omitempty"` IconName string `protobuf:"bytes,16,opt,name=iconName,proto3" json:"iconName,omitempty"` PluralName string `protobuf:"bytes,17,opt,name=pluralName,proto3" json:"pluralName,omitempty"` + HeaderRelationsLayout int64 `protobuf:"varint,18,opt,name=headerRelationsLayout,proto3" json:"headerRelationsLayout,omitempty"` } func (m *ObjectType) Reset() { *m = ObjectType{} } @@ -6273,6 +6274,13 @@ func (m *ObjectType) GetPluralName() string { return "" } +func (m *ObjectType) GetHeaderRelationsLayout() int64 { + if m != nil { + return m.HeaderRelationsLayout + } + return 0 +} + type Layout struct { Id ObjectTypeLayout `protobuf:"varint,1,opt,name=id,proto3,enum=anytype.model.ObjectTypeLayout" json:"id,omitempty"` Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` @@ -9847,98 +9855,98 @@ func init() { } var fileDescriptor_98a910b73321e591 = []byte{ - // 9253 bytes of a gzipped FileDescriptorProto + // 9271 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x7d, 0x5b, 0x8c, 0x23, 0xc9, - 0x91, 0x58, 0xf3, 0x4d, 0x06, 0x9b, 0xdd, 0xd9, 0x39, 0x2f, 0x8a, 0x1a, 0x8d, 0x47, 0xd4, 0x6a, - 0x77, 0x34, 0x5a, 0xf5, 0xec, 0xce, 0xee, 0x6a, 0x57, 0x2b, 0xed, 0x4a, 0xec, 0x6e, 0xf6, 0x34, - 0x77, 0xfa, 0xa5, 0x22, 0x67, 0x46, 0xbb, 0xb8, 0x73, 0xbb, 0x9a, 0x95, 0x4d, 0x96, 0xba, 0x58, - 0x45, 0x55, 0x25, 0x7b, 0xba, 0x05, 0xdb, 0x90, 0x5f, 0x77, 0xbe, 0x3f, 0xd9, 0xf0, 0xf9, 0x7c, - 0x30, 0x8c, 0x93, 0x3e, 0x0c, 0x18, 0xbe, 0x33, 0xfc, 0x75, 0xb0, 0xcf, 0x0f, 0xc0, 0x77, 0x5f, - 0x06, 0xee, 0x47, 0xf6, 0x97, 0x01, 0x1b, 0xb0, 0xa1, 0x05, 0xfc, 0x63, 0xd8, 0x87, 0xf3, 0x97, - 0x60, 0xf8, 0xc3, 0x88, 0xc8, 0xac, 0x17, 0xc9, 0xee, 0xe1, 0xec, 0xdd, 0x19, 0xf7, 0xd5, 0x8c, - 0xa8, 0x88, 0xa8, 0x7c, 0x44, 0x46, 0x46, 0x44, 0x46, 0x56, 0xc3, 0x2b, 0xe3, 0xd3, 0xc1, 0x03, - 0xc7, 0x3e, 0x7e, 0x30, 0x3e, 0x7e, 0x30, 0xf2, 0x2c, 0xe1, 0x3c, 0x18, 0xfb, 0x9e, 0xf4, 0x02, - 0x05, 0x04, 0xeb, 0x04, 0xf1, 0x9a, 0xe9, 0x5e, 0xc8, 0x8b, 0xb1, 0x58, 0x27, 0x6c, 0xe3, 0xf6, - 0xc0, 0xf3, 0x06, 0x8e, 0x50, 0xa4, 0xc7, 0x93, 0x93, 0x07, 0x81, 0xf4, 0x27, 0x7d, 0xa9, 0x88, - 0x9b, 0x3f, 0xcb, 0xc3, 0xcd, 0xee, 0xc8, 0xf4, 0xe5, 0x86, 0xe3, 0xf5, 0x4f, 0xbb, 0xae, 0x39, - 0x0e, 0x86, 0x9e, 0xdc, 0x30, 0x03, 0xc1, 0x5f, 0x87, 0xe2, 0x31, 0x22, 0x83, 0x7a, 0xe6, 0x6e, - 0xee, 0x5e, 0xf5, 0xe1, 0xf5, 0xf5, 0x94, 0xe0, 0x75, 0xe2, 0x30, 0x34, 0x0d, 0x7f, 0x13, 0x4a, - 0x96, 0x90, 0xa6, 0xed, 0x04, 0xf5, 0xec, 0xdd, 0xcc, 0xbd, 0xea, 0xc3, 0x5b, 0xeb, 0xea, 0xc5, - 0xeb, 0xe1, 0x8b, 0xd7, 0xbb, 0xf4, 0x62, 0x23, 0xa4, 0xe3, 0xef, 0x42, 0xf9, 0xc4, 0x76, 0xc4, - 0x63, 0x71, 0x11, 0xd4, 0x73, 0x57, 0xf2, 0x6c, 0x64, 0xeb, 0x19, 0x23, 0x22, 0xe6, 0x9b, 0xb0, - 0x22, 0xce, 0xa5, 0x6f, 0x1a, 0xc2, 0x31, 0xa5, 0xed, 0xb9, 0x41, 0x3d, 0x4f, 0x2d, 0xbc, 0x35, - 0xd5, 0xc2, 0xf0, 0x39, 0xb1, 0x4f, 0xb1, 0xf0, 0xbb, 0x50, 0xf5, 0x8e, 0xbf, 0x2f, 0xfa, 0xb2, - 0x77, 0x31, 0x16, 0x41, 0xbd, 0x70, 0x37, 0x77, 0xaf, 0x62, 0x24, 0x51, 0xfc, 0x1b, 0x50, 0xed, - 0x7b, 0x8e, 0x23, 0xfa, 0xea, 0x1d, 0xc5, 0xab, 0xbb, 0x95, 0xa4, 0xe5, 0x6f, 0xc3, 0x0d, 0x5f, - 0x8c, 0xbc, 0x33, 0x61, 0x6d, 0x46, 0x58, 0xea, 0x67, 0x99, 0x5e, 0x33, 0xff, 0x21, 0x6f, 0x41, - 0xcd, 0xd7, 0xed, 0xdb, 0xb5, 0xdd, 0xd3, 0xa0, 0x5e, 0xa2, 0x6e, 0x7d, 0xfe, 0x92, 0x6e, 0x21, - 0x8d, 0x91, 0xe6, 0xe0, 0x0c, 0x72, 0xa7, 0xe2, 0xa2, 0x5e, 0xb9, 0x9b, 0xb9, 0x57, 0x31, 0xf0, - 0x27, 0x7f, 0x1f, 0xea, 0x9e, 0x6f, 0x0f, 0x6c, 0xd7, 0x74, 0x36, 0x7d, 0x61, 0x4a, 0x61, 0xf5, - 0xec, 0x91, 0x08, 0xa4, 0x39, 0x1a, 0xd7, 0xe1, 0x6e, 0xe6, 0x5e, 0xce, 0xb8, 0xf4, 0x39, 0x7f, - 0x4b, 0xcd, 0x50, 0xc7, 0x3d, 0xf1, 0xea, 0x55, 0xdd, 0xfd, 0x74, 0x5b, 0xb6, 0xf5, 0x63, 0x23, - 0x22, 0x6c, 0xfe, 0x22, 0x0b, 0xc5, 0xae, 0x30, 0xfd, 0xfe, 0xb0, 0xf1, 0xab, 0x19, 0x28, 0x1a, - 0x22, 0x98, 0x38, 0x92, 0x37, 0xa0, 0xac, 0xc6, 0xb6, 0x63, 0xd5, 0x33, 0xd4, 0xba, 0x08, 0xfe, - 0x2c, 0xba, 0xb3, 0x0e, 0xf9, 0x91, 0x90, 0x66, 0x3d, 0x47, 0x23, 0xd4, 0x98, 0x6a, 0x95, 0x7a, - 0xfd, 0xfa, 0x9e, 0x90, 0xa6, 0x41, 0x74, 0x8d, 0x4f, 0x33, 0x90, 0x47, 0x90, 0xdf, 0x86, 0xca, - 0xd0, 0x1e, 0x0c, 0x1d, 0x7b, 0x30, 0x94, 0xba, 0x21, 0x31, 0x82, 0x7f, 0x08, 0xab, 0x11, 0x60, - 0x98, 0xee, 0x40, 0x60, 0x8b, 0xe6, 0x29, 0x3f, 0x3d, 0x34, 0xa6, 0x89, 0x79, 0x1d, 0x4a, 0xb4, - 0x1e, 0x3a, 0x16, 0x69, 0x74, 0xc5, 0x08, 0x41, 0x54, 0xb7, 0x70, 0xa6, 0x1e, 0x8b, 0x8b, 0x7a, - 0x9e, 0x9e, 0x26, 0x51, 0xbc, 0x05, 0xab, 0x21, 0xb8, 0xa5, 0x47, 0xa3, 0x70, 0xf5, 0x68, 0x4c, - 0xd3, 0x37, 0x7f, 0xb4, 0x07, 0x05, 0x5a, 0x96, 0x7c, 0x05, 0xb2, 0x76, 0x38, 0xd0, 0x59, 0xdb, - 0xe2, 0x0f, 0xa0, 0x78, 0x62, 0x0b, 0xc7, 0x7a, 0xe1, 0x08, 0x6b, 0x32, 0xde, 0x86, 0x65, 0x5f, - 0x04, 0xd2, 0xb7, 0xb5, 0xf6, 0xab, 0x05, 0xfa, 0xc5, 0x79, 0x36, 0x60, 0xdd, 0x48, 0x10, 0x1a, - 0x29, 0x36, 0xec, 0x76, 0x7f, 0x68, 0x3b, 0x96, 0x2f, 0xdc, 0x8e, 0xa5, 0xd6, 0x69, 0xc5, 0x48, - 0xa2, 0xf8, 0x3d, 0x58, 0x3d, 0x36, 0xfb, 0xa7, 0x03, 0xdf, 0x9b, 0xb8, 0xb8, 0x20, 0x3c, 0x9f, - 0xba, 0x5d, 0x31, 0xa6, 0xd1, 0xfc, 0x0d, 0x28, 0x98, 0x8e, 0x3d, 0x70, 0x69, 0x25, 0xae, 0xcc, - 0x4c, 0xba, 0x6a, 0x4b, 0x0b, 0x29, 0x0c, 0x45, 0xc8, 0x77, 0xa0, 0x76, 0x26, 0x7c, 0x69, 0xf7, - 0x4d, 0x87, 0xf0, 0xf5, 0x12, 0x71, 0x36, 0xe7, 0x72, 0x3e, 0x4d, 0x52, 0x1a, 0x69, 0x46, 0xde, - 0x01, 0x08, 0xd0, 0x4c, 0xd2, 0x74, 0xea, 0xb5, 0xf0, 0xda, 0x5c, 0x31, 0x9b, 0x9e, 0x2b, 0x85, - 0x2b, 0xd7, 0xbb, 0x11, 0xf9, 0xce, 0x92, 0x91, 0x60, 0xe6, 0xef, 0x42, 0x5e, 0x8a, 0x73, 0x59, - 0x5f, 0xb9, 0x62, 0x44, 0x43, 0x21, 0x3d, 0x71, 0x2e, 0x77, 0x96, 0x0c, 0x62, 0x40, 0x46, 0x5c, - 0x64, 0xf5, 0xd5, 0x05, 0x18, 0x71, 0x5d, 0x22, 0x23, 0x32, 0xf0, 0x0f, 0xa0, 0xe8, 0x98, 0x17, - 0xde, 0x44, 0xd6, 0x19, 0xb1, 0x7e, 0xe9, 0x4a, 0xd6, 0x5d, 0x22, 0xdd, 0x59, 0x32, 0x34, 0x13, - 0x7f, 0x1b, 0x72, 0x96, 0x7d, 0x56, 0x5f, 0x23, 0xde, 0xbb, 0x57, 0xf2, 0x6e, 0xd9, 0x67, 0x3b, - 0x4b, 0x06, 0x92, 0xf3, 0x4d, 0x28, 0x1f, 0x7b, 0xde, 0xe9, 0xc8, 0xf4, 0x4f, 0xeb, 0x9c, 0x58, - 0xbf, 0x7c, 0x25, 0xeb, 0x86, 0x26, 0xde, 0x59, 0x32, 0x22, 0x46, 0xec, 0xb2, 0xdd, 0xf7, 0xdc, - 0xfa, 0xb5, 0x05, 0xba, 0xdc, 0xe9, 0x7b, 0x2e, 0x76, 0x19, 0x19, 0x90, 0xd1, 0xb1, 0xdd, 0xd3, - 0xfa, 0xf5, 0x05, 0x18, 0xd1, 0x72, 0x22, 0x23, 0x32, 0x60, 0xb3, 0x2d, 0x53, 0x9a, 0x67, 0xb6, - 0x78, 0x5e, 0xbf, 0xb1, 0x40, 0xb3, 0xb7, 0x34, 0x31, 0x36, 0x3b, 0x64, 0x44, 0x21, 0xe1, 0xd2, - 0xac, 0xdf, 0x5c, 0x40, 0x48, 0x68, 0xd1, 0x51, 0x48, 0xc8, 0xc8, 0xff, 0x22, 0xac, 0x9d, 0x08, - 0x53, 0x4e, 0x7c, 0x61, 0xc5, 0x1b, 0xdd, 0x2d, 0x92, 0xb6, 0x7e, 0xf5, 0xdc, 0x4f, 0x73, 0xed, - 0x2c, 0x19, 0xb3, 0xa2, 0xf8, 0xfb, 0x50, 0x70, 0x4c, 0x29, 0xce, 0xeb, 0x75, 0x92, 0xd9, 0x7c, - 0x81, 0x52, 0x48, 0x71, 0xbe, 0xb3, 0x64, 0x28, 0x16, 0xfe, 0x3d, 0x58, 0x95, 0xe6, 0xb1, 0x23, - 0x0e, 0x4e, 0x34, 0x41, 0x50, 0xff, 0x1c, 0x49, 0x79, 0xfd, 0x6a, 0x75, 0x4e, 0xf3, 0xec, 0x2c, - 0x19, 0xd3, 0x62, 0xb0, 0x55, 0x84, 0xaa, 0x37, 0x16, 0x68, 0x15, 0xc9, 0xc3, 0x56, 0x11, 0x0b, - 0xdf, 0x85, 0x2a, 0xfd, 0xd8, 0xf4, 0x9c, 0xc9, 0xc8, 0xad, 0x7f, 0x9e, 0x24, 0xdc, 0x7b, 0xb1, - 0x04, 0x45, 0xbf, 0xb3, 0x64, 0x24, 0xd9, 0x71, 0x12, 0x09, 0x34, 0xbc, 0xe7, 0xf5, 0xdb, 0x0b, - 0x4c, 0x62, 0x4f, 0x13, 0xe3, 0x24, 0x86, 0x8c, 0xb8, 0xf4, 0x9e, 0xdb, 0xd6, 0x40, 0xc8, 0xfa, - 0x17, 0x16, 0x58, 0x7a, 0xcf, 0x88, 0x14, 0x97, 0x9e, 0x62, 0x42, 0x35, 0xee, 0x0f, 0x4d, 0x59, - 0xbf, 0xb3, 0x80, 0x1a, 0x6f, 0x0e, 0x4d, 0xb2, 0x15, 0xc8, 0xd0, 0xf8, 0x21, 0x2c, 0x27, 0xad, - 0x32, 0xe7, 0x90, 0xf7, 0x85, 0xa9, 0x76, 0x84, 0xb2, 0x41, 0xbf, 0x11, 0x27, 0x2c, 0x5b, 0xd2, - 0x8e, 0x50, 0x36, 0xe8, 0x37, 0xbf, 0x09, 0x45, 0xe5, 0x9b, 0x90, 0xc1, 0x2f, 0x1b, 0x1a, 0x42, - 0x5a, 0xcb, 0x37, 0x07, 0xb4, 0x6f, 0x95, 0x0d, 0xfa, 0x8d, 0xb4, 0x96, 0xef, 0x8d, 0x0f, 0x5c, - 0x32, 0xd8, 0x65, 0x43, 0x43, 0x8d, 0x4f, 0x3f, 0x80, 0x92, 0x6e, 0x54, 0xe3, 0x1f, 0x65, 0xa0, - 0xa8, 0x0c, 0x0a, 0xff, 0x36, 0x14, 0x02, 0x79, 0xe1, 0x08, 0x6a, 0xc3, 0xca, 0xc3, 0xaf, 0x2c, - 0x60, 0x84, 0xd6, 0xbb, 0xc8, 0x60, 0x28, 0xbe, 0xa6, 0x01, 0x05, 0x82, 0x79, 0x09, 0x72, 0x86, - 0xf7, 0x9c, 0x2d, 0x71, 0x80, 0xa2, 0x9a, 0x2c, 0x96, 0x41, 0xe4, 0x96, 0x7d, 0xc6, 0xb2, 0x88, - 0xdc, 0x11, 0xa6, 0x25, 0x7c, 0x96, 0xe3, 0x35, 0xa8, 0x84, 0xd3, 0x12, 0xb0, 0x3c, 0x67, 0xb0, - 0x9c, 0x98, 0xf0, 0x80, 0x15, 0x1a, 0xff, 0x3b, 0x0f, 0x79, 0x5c, 0xff, 0xfc, 0x15, 0xa8, 0x49, - 0xd3, 0x1f, 0x08, 0xe5, 0x08, 0x47, 0x4e, 0x4a, 0x1a, 0xc9, 0x3f, 0x08, 0xfb, 0x90, 0xa5, 0x3e, - 0xbc, 0xf6, 0x42, 0xbb, 0x92, 0xea, 0x41, 0x62, 0x17, 0xce, 0x2d, 0xb6, 0x0b, 0x6f, 0x43, 0x19, - 0xcd, 0x59, 0xd7, 0xfe, 0xa1, 0xa0, 0xa1, 0x5f, 0x79, 0x78, 0xff, 0xc5, 0xaf, 0xec, 0x68, 0x0e, - 0x23, 0xe2, 0xe5, 0x1d, 0xa8, 0xf4, 0x4d, 0xdf, 0xa2, 0xc6, 0xd0, 0x6c, 0xad, 0x3c, 0xfc, 0xea, + 0x91, 0x58, 0xf3, 0x4d, 0x06, 0x9b, 0xdd, 0xd9, 0x39, 0x2f, 0x8a, 0x9a, 0x1b, 0x8f, 0xa8, 0xd5, + 0xee, 0x68, 0xb4, 0xea, 0xd9, 0x9d, 0xdd, 0xd5, 0xae, 0x56, 0xda, 0x95, 0xd8, 0xdd, 0xec, 0x69, + 0xee, 0xf4, 0x4b, 0x45, 0xce, 0x8c, 0x76, 0x71, 0xe7, 0x76, 0x35, 0x2b, 0x9b, 0x2c, 0x75, 0xb1, + 0x8a, 0xaa, 0x4a, 0xf6, 0x74, 0x2f, 0x6c, 0x43, 0x7e, 0xdd, 0xf9, 0xfe, 0x64, 0xc3, 0xe7, 0xf3, + 0xc1, 0x30, 0x4e, 0xfa, 0x30, 0x60, 0xf8, 0x0e, 0xf0, 0xd7, 0xc1, 0x3e, 0x3f, 0x00, 0xdf, 0x7d, + 0x19, 0xb8, 0x1f, 0xd9, 0x5f, 0x06, 0x6c, 0xc0, 0x86, 0x16, 0xf0, 0x8f, 0x61, 0x1f, 0xce, 0x5f, + 0x82, 0xe1, 0x0f, 0x23, 0x22, 0xb3, 0x5e, 0x24, 0xbb, 0x87, 0xb3, 0x77, 0x67, 0xf8, 0xab, 0x19, + 0x51, 0x11, 0x51, 0xf9, 0x88, 0x8c, 0x8c, 0x88, 0x8c, 0xac, 0x86, 0x57, 0xc6, 0xa7, 0x83, 0x07, + 0x8e, 0x7d, 0xfc, 0x60, 0x7c, 0xfc, 0x60, 0xe4, 0x59, 0xc2, 0x79, 0x30, 0xf6, 0x3d, 0xe9, 0x05, + 0x0a, 0x08, 0xd6, 0x09, 0xe2, 0x35, 0xd3, 0xbd, 0x90, 0x17, 0x63, 0xb1, 0x4e, 0xd8, 0xc6, 0xed, + 0x81, 0xe7, 0x0d, 0x1c, 0xa1, 0x48, 0x8f, 0x27, 0x27, 0x0f, 0x02, 0xe9, 0x4f, 0xfa, 0x52, 0x11, + 0x37, 0x7f, 0x96, 0x87, 0x9b, 0xdd, 0x91, 0xe9, 0xcb, 0x0d, 0xc7, 0xeb, 0x9f, 0x76, 0x5d, 0x73, + 0x1c, 0x0c, 0x3d, 0xb9, 0x61, 0x06, 0x82, 0xbf, 0x0e, 0xc5, 0x63, 0x44, 0x06, 0xf5, 0xcc, 0xdd, + 0xdc, 0xbd, 0xea, 0xc3, 0xeb, 0xeb, 0x29, 0xc1, 0xeb, 0xc4, 0x61, 0x68, 0x1a, 0xfe, 0x26, 0x94, + 0x2c, 0x21, 0x4d, 0xdb, 0x09, 0xea, 0xd9, 0xbb, 0x99, 0x7b, 0xd5, 0x87, 0xb7, 0xd6, 0xd5, 0x8b, + 0xd7, 0xc3, 0x17, 0xaf, 0x77, 0xe9, 0xc5, 0x46, 0x48, 0xc7, 0xdf, 0x85, 0xf2, 0x89, 0xed, 0x88, + 0xc7, 0xe2, 0x22, 0xa8, 0xe7, 0xae, 0xe4, 0xd9, 0xc8, 0xd6, 0x33, 0x46, 0x44, 0xcc, 0x37, 0x61, + 0x45, 0x9c, 0x4b, 0xdf, 0x34, 0x84, 0x63, 0x4a, 0xdb, 0x73, 0x83, 0x7a, 0x9e, 0x5a, 0x78, 0x6b, + 0xaa, 0x85, 0xe1, 0x73, 0x62, 0x9f, 0x62, 0xe1, 0x77, 0xa1, 0xea, 0x1d, 0xff, 0x40, 0xf4, 0x65, + 0xef, 0x62, 0x2c, 0x82, 0x7a, 0xe1, 0x6e, 0xee, 0x5e, 0xc5, 0x48, 0xa2, 0xf8, 0x37, 0xa1, 0xda, + 0xf7, 0x1c, 0x47, 0xf4, 0xd5, 0x3b, 0x8a, 0x57, 0x77, 0x2b, 0x49, 0xcb, 0xdf, 0x86, 0x1b, 0xbe, + 0x18, 0x79, 0x67, 0xc2, 0xda, 0x8c, 0xb0, 0xd4, 0xcf, 0x32, 0xbd, 0x66, 0xfe, 0x43, 0xde, 0x82, + 0x9a, 0xaf, 0xdb, 0xb7, 0x6b, 0xbb, 0xa7, 0x41, 0xbd, 0x44, 0xdd, 0xfa, 0xe2, 0x25, 0xdd, 0x42, + 0x1a, 0x23, 0xcd, 0xc1, 0x19, 0xe4, 0x4e, 0xc5, 0x45, 0xbd, 0x72, 0x37, 0x73, 0xaf, 0x62, 0xe0, + 0x4f, 0xfe, 0x3e, 0xd4, 0x3d, 0xdf, 0x1e, 0xd8, 0xae, 0xe9, 0x6c, 0xfa, 0xc2, 0x94, 0xc2, 0xea, + 0xd9, 0x23, 0x11, 0x48, 0x73, 0x34, 0xae, 0xc3, 0xdd, 0xcc, 0xbd, 0x9c, 0x71, 0xe9, 0x73, 0xfe, + 0x96, 0x9a, 0xa1, 0x8e, 0x7b, 0xe2, 0xd5, 0xab, 0xba, 0xfb, 0xe9, 0xb6, 0x6c, 0xeb, 0xc7, 0x46, + 0x44, 0xd8, 0xfc, 0x45, 0x16, 0x8a, 0x5d, 0x61, 0xfa, 0xfd, 0x61, 0xe3, 0xd7, 0x32, 0x50, 0x34, + 0x44, 0x30, 0x71, 0x24, 0x6f, 0x40, 0x59, 0x8d, 0x6d, 0xc7, 0xaa, 0x67, 0xa8, 0x75, 0x11, 0xfc, + 0x79, 0x74, 0x67, 0x1d, 0xf2, 0x23, 0x21, 0xcd, 0x7a, 0x8e, 0x46, 0xa8, 0x31, 0xd5, 0x2a, 0xf5, + 0xfa, 0xf5, 0x3d, 0x21, 0x4d, 0x83, 0xe8, 0x1a, 0x9f, 0x65, 0x20, 0x8f, 0x20, 0xbf, 0x0d, 0x95, + 0xa1, 0x3d, 0x18, 0x3a, 0xf6, 0x60, 0x28, 0x75, 0x43, 0x62, 0x04, 0xff, 0x10, 0x56, 0x23, 0xc0, + 0x30, 0xdd, 0x81, 0xc0, 0x16, 0xcd, 0x53, 0x7e, 0x7a, 0x68, 0x4c, 0x13, 0xf3, 0x3a, 0x94, 0x68, + 0x3d, 0x74, 0x2c, 0xd2, 0xe8, 0x8a, 0x11, 0x82, 0xa8, 0x6e, 0xe1, 0x4c, 0x3d, 0x16, 0x17, 0xf5, + 0x3c, 0x3d, 0x4d, 0xa2, 0x78, 0x0b, 0x56, 0x43, 0x70, 0x4b, 0x8f, 0x46, 0xe1, 0xea, 0xd1, 0x98, + 0xa6, 0x6f, 0xfe, 0x68, 0x0f, 0x0a, 0xb4, 0x2c, 0xf9, 0x0a, 0x64, 0xed, 0x70, 0xa0, 0xb3, 0xb6, + 0xc5, 0x1f, 0x40, 0xf1, 0xc4, 0x16, 0x8e, 0xf5, 0xc2, 0x11, 0xd6, 0x64, 0xbc, 0x0d, 0xcb, 0xbe, + 0x08, 0xa4, 0x6f, 0x6b, 0xed, 0x57, 0x0b, 0xf4, 0x4b, 0xf3, 0x6c, 0xc0, 0xba, 0x91, 0x20, 0x34, + 0x52, 0x6c, 0xd8, 0xed, 0xfe, 0xd0, 0x76, 0x2c, 0x5f, 0xb8, 0x1d, 0x4b, 0xad, 0xd3, 0x8a, 0x91, + 0x44, 0xf1, 0x7b, 0xb0, 0x7a, 0x6c, 0xf6, 0x4f, 0x07, 0xbe, 0x37, 0x71, 0x71, 0x41, 0x78, 0x3e, + 0x75, 0xbb, 0x62, 0x4c, 0xa3, 0xf9, 0x1b, 0x50, 0x30, 0x1d, 0x7b, 0xe0, 0xd2, 0x4a, 0x5c, 0x99, + 0x99, 0x74, 0xd5, 0x96, 0x16, 0x52, 0x18, 0x8a, 0x90, 0xef, 0x40, 0xed, 0x4c, 0xf8, 0xd2, 0xee, + 0x9b, 0x0e, 0xe1, 0xeb, 0x25, 0xe2, 0x6c, 0xce, 0xe5, 0x7c, 0x9a, 0xa4, 0x34, 0xd2, 0x8c, 0xbc, + 0x03, 0x10, 0xa0, 0x99, 0xa4, 0xe9, 0xd4, 0x6b, 0xe1, 0xb5, 0xb9, 0x62, 0x36, 0x3d, 0x57, 0x0a, + 0x57, 0xae, 0x77, 0x23, 0xf2, 0x9d, 0x25, 0x23, 0xc1, 0xcc, 0xdf, 0x85, 0xbc, 0x14, 0xe7, 0xb2, + 0xbe, 0x72, 0xc5, 0x88, 0x86, 0x42, 0x7a, 0xe2, 0x5c, 0xee, 0x2c, 0x19, 0xc4, 0x80, 0x8c, 0xb8, + 0xc8, 0xea, 0xab, 0x0b, 0x30, 0xe2, 0xba, 0x44, 0x46, 0x64, 0xe0, 0x1f, 0x40, 0xd1, 0x31, 0x2f, + 0xbc, 0x89, 0xac, 0x33, 0x62, 0xfd, 0xf2, 0x95, 0xac, 0xbb, 0x44, 0xba, 0xb3, 0x64, 0x68, 0x26, + 0xfe, 0x36, 0xe4, 0x2c, 0xfb, 0xac, 0xbe, 0x46, 0xbc, 0x77, 0xaf, 0xe4, 0xdd, 0xb2, 0xcf, 0x76, + 0x96, 0x0c, 0x24, 0xe7, 0x9b, 0x50, 0x3e, 0xf6, 0xbc, 0xd3, 0x91, 0xe9, 0x9f, 0xd6, 0x39, 0xb1, + 0x7e, 0xe5, 0x4a, 0xd6, 0x0d, 0x4d, 0xbc, 0xb3, 0x64, 0x44, 0x8c, 0xd8, 0x65, 0xbb, 0xef, 0xb9, + 0xf5, 0x6b, 0x0b, 0x74, 0xb9, 0xd3, 0xf7, 0x5c, 0xec, 0x32, 0x32, 0x20, 0xa3, 0x63, 0xbb, 0xa7, + 0xf5, 0xeb, 0x0b, 0x30, 0xa2, 0xe5, 0x44, 0x46, 0x64, 0xc0, 0x66, 0x5b, 0xa6, 0x34, 0xcf, 0x6c, + 0xf1, 0xbc, 0x7e, 0x63, 0x81, 0x66, 0x6f, 0x69, 0x62, 0x6c, 0x76, 0xc8, 0x88, 0x42, 0xc2, 0xa5, + 0x59, 0xbf, 0xb9, 0x80, 0x90, 0xd0, 0xa2, 0xa3, 0x90, 0x90, 0x91, 0xff, 0x45, 0x58, 0x3b, 0x11, + 0xa6, 0x9c, 0xf8, 0xc2, 0x8a, 0x37, 0xba, 0x5b, 0x24, 0x6d, 0xfd, 0xea, 0xb9, 0x9f, 0xe6, 0xda, + 0x59, 0x32, 0x66, 0x45, 0xf1, 0xf7, 0xa1, 0xe0, 0x98, 0x52, 0x9c, 0xd7, 0xeb, 0x24, 0xb3, 0xf9, + 0x02, 0xa5, 0x90, 0xe2, 0x7c, 0x67, 0xc9, 0x50, 0x2c, 0xfc, 0xfb, 0xb0, 0x2a, 0xcd, 0x63, 0x47, + 0x1c, 0x9c, 0x68, 0x82, 0xa0, 0xfe, 0x05, 0x92, 0xf2, 0xfa, 0xd5, 0xea, 0x9c, 0xe6, 0xd9, 0x59, + 0x32, 0xa6, 0xc5, 0x60, 0xab, 0x08, 0x55, 0x6f, 0x2c, 0xd0, 0x2a, 0x92, 0x87, 0xad, 0x22, 0x16, + 0xbe, 0x0b, 0x55, 0xfa, 0xb1, 0xe9, 0x39, 0x93, 0x91, 0x5b, 0xff, 0x22, 0x49, 0xb8, 0xf7, 0x62, + 0x09, 0x8a, 0x7e, 0x67, 0xc9, 0x48, 0xb2, 0xe3, 0x24, 0x12, 0x68, 0x78, 0xcf, 0xeb, 0xb7, 0x17, + 0x98, 0xc4, 0x9e, 0x26, 0xc6, 0x49, 0x0c, 0x19, 0x71, 0xe9, 0x3d, 0xb7, 0xad, 0x81, 0x90, 0xf5, + 0x5f, 0x5a, 0x60, 0xe9, 0x3d, 0x23, 0x52, 0x5c, 0x7a, 0x8a, 0x09, 0xd5, 0xb8, 0x3f, 0x34, 0x65, + 0xfd, 0xce, 0x02, 0x6a, 0xbc, 0x39, 0x34, 0xc9, 0x56, 0x20, 0x43, 0xe3, 0x53, 0x58, 0x4e, 0x5a, + 0x65, 0xce, 0x21, 0xef, 0x0b, 0x53, 0xed, 0x08, 0x65, 0x83, 0x7e, 0x23, 0x4e, 0x58, 0xb6, 0xa4, + 0x1d, 0xa1, 0x6c, 0xd0, 0x6f, 0x7e, 0x13, 0x8a, 0xca, 0x37, 0x21, 0x83, 0x5f, 0x36, 0x34, 0x84, + 0xb4, 0x96, 0x6f, 0x0e, 0x68, 0xdf, 0x2a, 0x1b, 0xf4, 0x1b, 0x69, 0x2d, 0xdf, 0x1b, 0x1f, 0xb8, + 0x64, 0xb0, 0xcb, 0x86, 0x86, 0x1a, 0x9f, 0x7d, 0x00, 0x25, 0xdd, 0xa8, 0xc6, 0x3f, 0xca, 0x40, + 0x51, 0x19, 0x14, 0xfe, 0x1d, 0x28, 0x04, 0xf2, 0xc2, 0x11, 0xd4, 0x86, 0x95, 0x87, 0x5f, 0x5d, + 0xc0, 0x08, 0xad, 0x77, 0x91, 0xc1, 0x50, 0x7c, 0x4d, 0x03, 0x0a, 0x04, 0xf3, 0x12, 0xe4, 0x0c, + 0xef, 0x39, 0x5b, 0xe2, 0x00, 0x45, 0x35, 0x59, 0x2c, 0x83, 0xc8, 0x2d, 0xfb, 0x8c, 0x65, 0x11, + 0xb9, 0x23, 0x4c, 0x4b, 0xf8, 0x2c, 0xc7, 0x6b, 0x50, 0x09, 0xa7, 0x25, 0x60, 0x79, 0xce, 0x60, + 0x39, 0x31, 0xe1, 0x01, 0x2b, 0x34, 0xfe, 0x57, 0x1e, 0xf2, 0xb8, 0xfe, 0xf9, 0x2b, 0x50, 0x93, + 0xa6, 0x3f, 0x10, 0xca, 0x11, 0x8e, 0x9c, 0x94, 0x34, 0x92, 0x7f, 0x10, 0xf6, 0x21, 0x4b, 0x7d, + 0x78, 0xed, 0x85, 0x76, 0x25, 0xd5, 0x83, 0xc4, 0x2e, 0x9c, 0x5b, 0x6c, 0x17, 0xde, 0x86, 0x32, + 0x9a, 0xb3, 0xae, 0xfd, 0xa9, 0xa0, 0xa1, 0x5f, 0x79, 0x78, 0xff, 0xc5, 0xaf, 0xec, 0x68, 0x0e, + 0x23, 0xe2, 0xe5, 0x1d, 0xa8, 0xf4, 0x4d, 0xdf, 0xa2, 0xc6, 0xd0, 0x6c, 0xad, 0x3c, 0xfc, 0xda, 0x8b, 0x05, 0x6d, 0x86, 0x2c, 0x46, 0xcc, 0xcd, 0x0f, 0xa0, 0x6a, 0x89, 0xa0, 0xef, 0xdb, 0x63, - 0x32, 0x6f, 0x6a, 0x2f, 0xfe, 0xda, 0x8b, 0x85, 0x6d, 0xc5, 0x4c, 0x46, 0x52, 0x02, 0x7a, 0x64, + 0x32, 0x6f, 0x6a, 0x2f, 0xfe, 0xfa, 0x8b, 0x85, 0x6d, 0xc5, 0x4c, 0x46, 0x52, 0x02, 0x7a, 0x64, 0x7e, 0x64, 0xdf, 0x4a, 0xe4, 0x20, 0xc4, 0x88, 0xe6, 0xbb, 0x50, 0x0e, 0xfb, 0xc3, 0x97, 0xa1, 0x8c, 0x7f, 0xf7, 0x3d, 0x57, 0xb0, 0x25, 0x9c, 0x5b, 0x84, 0xba, 0x23, 0xd3, 0x71, 0x58, 0x86, - 0xaf, 0x00, 0x20, 0xb8, 0x27, 0x2c, 0x7b, 0x32, 0x62, 0xd9, 0xe6, 0x37, 0x43, 0x6d, 0x29, 0x43, + 0xaf, 0x00, 0x20, 0xb8, 0x27, 0x2c, 0x7b, 0x32, 0x62, 0xd9, 0xe6, 0xb7, 0x42, 0x6d, 0x29, 0x43, 0xfe, 0xd0, 0x1c, 0x20, 0xc7, 0x32, 0x94, 0x43, 0x73, 0xcd, 0x32, 0xc8, 0xbf, 0x65, 0x06, 0xc3, 0x63, 0xcf, 0xf4, 0x2d, 0x96, 0xe5, 0x55, 0x28, 0xb5, 0xfc, 0xfe, 0xd0, 0x3e, 0x13, 0x2c, 0xd7, 0x7c, 0x00, 0xd5, 0x44, 0x7b, 0x51, 0x84, 0x7e, 0x69, 0x05, 0x0a, 0x2d, 0xcb, 0x12, 0x16, 0xcb, - 0x20, 0x83, 0xee, 0x20, 0xcb, 0x36, 0xbf, 0x0a, 0x95, 0x68, 0xb4, 0x90, 0x1c, 0x37, 0x6e, 0xb6, + 0x20, 0x83, 0xee, 0x20, 0xcb, 0x36, 0xbf, 0x06, 0x95, 0x68, 0xb4, 0x90, 0x1c, 0x37, 0x6e, 0xb6, 0x84, 0xbf, 0x10, 0xcd, 0x32, 0xa8, 0x95, 0x1d, 0xd7, 0xb1, 0x5d, 0xc1, 0xb2, 0x8d, 0xbf, 0x44, - 0xaa, 0xca, 0xbf, 0x95, 0x5e, 0x10, 0xaf, 0xbe, 0x68, 0x67, 0x4d, 0xaf, 0x86, 0xcf, 0x27, 0xfa, - 0xb7, 0x6b, 0x53, 0xe3, 0xca, 0x90, 0xdf, 0xf2, 0x64, 0xc0, 0x32, 0x8d, 0xff, 0x91, 0x85, 0x72, + 0xaa, 0xca, 0xbf, 0x9d, 0x5e, 0x10, 0xaf, 0xbe, 0x68, 0x67, 0x4d, 0xaf, 0x86, 0x2f, 0x26, 0xfa, + 0xb7, 0x6b, 0x53, 0xe3, 0xca, 0x90, 0xdf, 0xf2, 0x64, 0xc0, 0x32, 0x8d, 0xff, 0x9e, 0x85, 0x72, 0xb8, 0xa1, 0x62, 0x4c, 0x30, 0xf1, 0x1d, 0xad, 0xd0, 0xf8, 0x93, 0x5f, 0x87, 0x82, 0xb4, 0xa5, 0x56, 0xe3, 0x8a, 0xa1, 0x00, 0xf4, 0xd5, 0x92, 0x33, 0xab, 0x1c, 0xd8, 0xe9, 0xa9, 0xb2, 0x47, 0xe6, 0x40, 0xec, 0x98, 0xc1, 0x50, 0xbb, 0xb0, 0x31, 0x02, 0xf9, 0x4f, 0xcc, 0x33, 0xd4, 0x39, @@ -9949,23 +9957,23 @@ var fileDescriptor_98a910b73321e591 = []byte{ 0x35, 0xa5, 0xc0, 0x69, 0x6e, 0x8f, 0xc6, 0xf2, 0x42, 0x29, 0xcd, 0xb6, 0x90, 0xfd, 0xa1, 0xed, 0x0e, 0x58, 0x46, 0x0d, 0x31, 0x4e, 0x22, 0x91, 0xf8, 0xbe, 0xe7, 0xb3, 0x5c, 0xa3, 0x01, 0x79, 0xd4, 0x51, 0x34, 0x92, 0xae, 0x39, 0x12, 0x7a, 0xa4, 0xe9, 0x77, 0xe3, 0x1a, 0xac, 0xcd, 0xec, - 0xc7, 0x8d, 0xdf, 0x2b, 0x2a, 0x0d, 0x41, 0x0e, 0xf2, 0x05, 0x35, 0x07, 0xb9, 0x79, 0x2f, 0x65, + 0xc7, 0x8d, 0xdf, 0x2f, 0x2a, 0x0d, 0x41, 0x0e, 0xf2, 0x05, 0x35, 0x07, 0xb9, 0x79, 0x2f, 0x65, 0x63, 0x50, 0x4a, 0xda, 0xc6, 0x7c, 0x00, 0x05, 0xec, 0x58, 0x68, 0x62, 0x16, 0x60, 0xdf, 0x43, 0x72, 0x43, 0x71, 0x61, 0x04, 0xd3, 0x1f, 0x8a, 0xfe, 0xa9, 0xb0, 0xb4, 0xad, 0x0f, 0x41, 0x54, - 0x9a, 0x7e, 0xc2, 0x3d, 0x57, 0x00, 0xa9, 0x44, 0xdf, 0x73, 0xdb, 0x23, 0xef, 0xfb, 0x36, 0xcd, + 0x9a, 0x7e, 0xc2, 0x3d, 0x57, 0x00, 0xa9, 0x44, 0xdf, 0x73, 0xdb, 0x23, 0xef, 0x07, 0x36, 0xcd, 0x2b, 0xaa, 0x44, 0x88, 0x08, 0x9f, 0x76, 0x50, 0x47, 0xf4, 0xb4, 0xc5, 0x88, 0x46, 0x1b, 0x0a, 0xf4, 0x6e, 0x5c, 0x09, 0xaa, 0xcd, 0x2a, 0xd3, 0xf0, 0xea, 0x62, 0x6d, 0xd6, 0x4d, 0x6e, 0xfc, - 0x4e, 0x16, 0xf2, 0x08, 0xf3, 0xfb, 0x50, 0xf0, 0x31, 0x0e, 0xa3, 0xe1, 0xbc, 0x2c, 0x66, 0x53, - 0x24, 0xfc, 0xdb, 0x5a, 0x15, 0xb3, 0x0b, 0x28, 0x4b, 0xf4, 0xc6, 0xa4, 0x5a, 0x5e, 0x87, 0xc2, + 0x6e, 0x16, 0xf2, 0x08, 0xf3, 0xfb, 0x50, 0xf0, 0x31, 0x0e, 0xa3, 0xe1, 0xbc, 0x2c, 0x66, 0x53, + 0x24, 0xfc, 0x3b, 0x5a, 0x15, 0xb3, 0x0b, 0x28, 0x4b, 0xf4, 0xc6, 0xa4, 0x5a, 0x5e, 0x87, 0xc2, 0xd8, 0xf4, 0xcd, 0x91, 0x5e, 0x27, 0x0a, 0x68, 0xfe, 0x24, 0x03, 0x79, 0x24, 0xe2, 0x6b, 0x50, 0xeb, 0x4a, 0xdf, 0x3e, 0x15, 0x72, 0xe8, 0x7b, 0x93, 0xc1, 0x50, 0x69, 0xd2, 0x63, 0x71, 0xa1, 0xec, 0x8d, 0x32, 0x08, 0xd2, 0x74, 0xec, 0x3e, 0xcb, 0xa2, 0x56, 0x6d, 0x78, 0x8e, 0xc5, 0x72, 0x7c, 0x15, 0xaa, 0x4f, 0x5c, 0x4b, 0xf8, 0x41, 0xdf, 0xf3, 0x85, 0xc5, 0xf2, 0x7a, 0x75, 0x9f, 0xb2, 0x02, 0xed, 0x65, 0xe2, 0x5c, 0x52, 0x2c, 0xc4, 0x8a, 0xfc, 0x1a, 0xac, 0x6e, 0xa4, 0x03, - 0x24, 0x56, 0x42, 0x9b, 0xb4, 0x27, 0x5c, 0x54, 0x32, 0x56, 0x56, 0x4a, 0xec, 0x7d, 0xdf, 0x66, - 0x15, 0x7c, 0x99, 0x5a, 0x27, 0x0c, 0x9a, 0xff, 0x26, 0x13, 0x5a, 0x8e, 0x1a, 0x54, 0x0e, 0x4d, + 0x24, 0x56, 0x42, 0x9b, 0xb4, 0x27, 0x5c, 0x54, 0x32, 0x56, 0x56, 0x4a, 0xec, 0xfd, 0xc0, 0x66, + 0x15, 0x7c, 0x99, 0x5a, 0x27, 0x0c, 0x9a, 0xff, 0x3a, 0x13, 0x5a, 0x8e, 0x1a, 0x54, 0x0e, 0x4d, 0xdf, 0x1c, 0xf8, 0xe6, 0x18, 0xdb, 0x57, 0x85, 0x92, 0xda, 0x38, 0xdf, 0x54, 0xd6, 0x4d, 0x01, - 0x0f, 0x95, 0x6d, 0x54, 0xc0, 0x5b, 0x2c, 0x17, 0x03, 0x6f, 0xb3, 0x3c, 0xbe, 0xe3, 0xbb, 0x13, + 0x0f, 0x95, 0x6d, 0x54, 0xc0, 0x5b, 0x2c, 0x17, 0x03, 0x6f, 0xb3, 0x3c, 0xbe, 0xe3, 0x7b, 0x13, 0x4f, 0x0a, 0x56, 0x20, 0x5b, 0xe7, 0x59, 0x82, 0x15, 0x11, 0xd9, 0x43, 0x8b, 0xc2, 0x4a, 0xd8, 0xe7, 0x4d, 0xd4, 0x9f, 0x63, 0xef, 0x9c, 0x95, 0xb1, 0x19, 0x38, 0x8c, 0xc2, 0x62, 0x15, 0x7c, 0xb2, 0x3f, 0x19, 0x1d, 0x0b, 0xec, 0x26, 0xe0, 0x93, 0x9e, 0x37, 0x18, 0x38, 0x82, 0x55, 0x71, @@ -9978,18 +9986,18 @@ var fileDescriptor_98a910b73321e591 = []byte{ 0x34, 0xca, 0x8b, 0xb3, 0x27, 0x36, 0x93, 0x2d, 0xad, 0xb5, 0xf1, 0x46, 0x57, 0x56, 0xa3, 0xcc, 0x32, 0x38, 0x9b, 0xb4, 0x5c, 0x95, 0xcd, 0x7b, 0x6a, 0x5b, 0xc2, 0x63, 0x39, 0xda, 0x08, 0x27, 0x96, 0xed, 0xb1, 0x3c, 0x7a, 0x5e, 0x87, 0x5b, 0xdb, 0xac, 0xd0, 0x7c, 0x35, 0xb1, 0x25, 0xb5, - 0x26, 0xd2, 0x53, 0x62, 0x48, 0x7d, 0x33, 0x4a, 0x1b, 0x8f, 0x85, 0xc5, 0xb2, 0xcd, 0xaf, 0xcf, + 0x26, 0xd2, 0x53, 0x62, 0x48, 0x7d, 0x33, 0x4a, 0x1b, 0x8f, 0x85, 0xc5, 0xb2, 0xcd, 0x6f, 0xcc, 0x31, 0xb3, 0x35, 0xa8, 0x3c, 0x19, 0x3b, 0x9e, 0x69, 0x5d, 0x61, 0x67, 0x97, 0x01, 0xe2, 0xa8, 0xba, 0xf1, 0x8b, 0x66, 0xbc, 0x9d, 0xa3, 0x2f, 0x1a, 0x78, 0x13, 0xbf, 0x2f, 0xc8, 0x84, 0x54, - 0x0c, 0x0d, 0xf1, 0xef, 0x40, 0x01, 0x9f, 0x87, 0x69, 0x9c, 0xfb, 0x0b, 0xc5, 0x72, 0xeb, 0x4f, + 0x0c, 0x0d, 0xf1, 0xef, 0x42, 0x01, 0x9f, 0x87, 0x69, 0x9c, 0xfb, 0x0b, 0xc5, 0x72, 0xeb, 0x4f, 0x6d, 0xf1, 0xdc, 0x50, 0x8c, 0xfc, 0x0e, 0x80, 0xd9, 0x97, 0xf6, 0x99, 0x40, 0xa4, 0x5e, 0xec, 0x09, 0x0c, 0x7f, 0x27, 0xe9, 0xbe, 0x5c, 0x9d, 0x87, 0x4c, 0xf8, 0x35, 0xdc, 0x80, 0x2a, 0x2e, 0xdd, 0xf1, 0x81, 0x8f, 0xab, 0xbd, 0xbe, 0x4c, 0x8c, 0x6f, 0x2c, 0xd6, 0xbc, 0x47, 0x11, 0xa3, 0x91, 0x14, 0xc2, 0x9f, 0xc0, 0xb2, 0xca, 0xa9, 0x69, 0xa1, 0x35, 0x12, 0xfa, 0xe6, 0x62, 0x42, 0x0f, 0x62, 0x4e, 0x23, 0x25, 0x66, 0x36, 0x2d, 0x59, 0x78, 0xe9, 0xb4, 0xe4, 0xab, 0xb0, 0xd2, 0x4b, 0xaf, 0x02, 0xb5, 0x55, 0x4c, 0x61, 0x79, 0x13, 0x96, 0xed, 0x20, 0xce, 0x8a, 0x52, 0x8e, - 0xa4, 0x6c, 0xa4, 0x70, 0x8d, 0xff, 0x50, 0x84, 0x3c, 0x8d, 0xfc, 0x74, 0x8e, 0x6b, 0x33, 0x65, - 0xd2, 0x1f, 0x2c, 0x3e, 0xd5, 0x53, 0x2b, 0x9e, 0x2c, 0x48, 0x2e, 0x61, 0x41, 0xbe, 0x03, 0x85, + 0xa4, 0x6c, 0xa4, 0x70, 0x8d, 0x7f, 0x5f, 0x84, 0x3c, 0x8d, 0xfc, 0x74, 0x8e, 0x6b, 0x33, 0x65, + 0xd2, 0x1f, 0x2c, 0x3e, 0xd5, 0x53, 0x2b, 0x9e, 0x2c, 0x48, 0x2e, 0x61, 0x41, 0xbe, 0x0b, 0x85, 0xc0, 0xf3, 0x65, 0x38, 0xbd, 0x0b, 0x2a, 0x51, 0xd7, 0xf3, 0xa5, 0xa1, 0x18, 0xf9, 0x36, 0x94, 0x4e, 0x6c, 0x47, 0xe2, 0xa4, 0xa8, 0xc1, 0x7b, 0x7d, 0x31, 0x19, 0xdb, 0xc4, 0x64, 0x84, 0xcc, 0x7c, 0x37, 0xa9, 0x6c, 0x45, 0x92, 0xb4, 0xbe, 0x98, 0xa4, 0x79, 0x3a, 0x78, 0x1f, 0x58, 0xdf, @@ -10009,11 +10017,11 @@ var fileDescriptor_98a910b73321e591 = []byte{ 0xcf, 0x10, 0xd0, 0x8d, 0x0b, 0x9e, 0xda, 0x81, 0x7d, 0xac, 0xdd, 0xd2, 0xb2, 0x11, 0x23, 0xd0, 0x13, 0x7a, 0x6e, 0x5b, 0x72, 0x48, 0x6b, 0xa6, 0x60, 0x28, 0x80, 0xdf, 0x83, 0x55, 0x0b, 0xc7, 0xc1, 0xed, 0x3b, 0x13, 0x4b, 0xf4, 0x70, 0x17, 0x55, 0x69, 0x82, 0x69, 0x34, 0xff, 0x18, 0x40, - 0xda, 0x23, 0xb1, 0xed, 0xf9, 0x23, 0x53, 0xea, 0xd8, 0xe0, 0x1b, 0x2f, 0xa7, 0xd5, 0xeb, 0xbd, - 0x48, 0x80, 0x91, 0x10, 0x86, 0xa2, 0xf1, 0x6d, 0x5a, 0x74, 0xe9, 0x33, 0x89, 0xde, 0x8a, 0x04, + 0xda, 0x23, 0xb1, 0xed, 0xf9, 0x23, 0x53, 0xea, 0xd8, 0xe0, 0x9b, 0x2f, 0xa7, 0xd5, 0xeb, 0xbd, + 0x48, 0x80, 0x91, 0x10, 0x86, 0xa2, 0xf1, 0x6d, 0x5a, 0x74, 0xe9, 0x73, 0x89, 0xde, 0x8a, 0x04, 0x18, 0x09, 0x61, 0xbc, 0x07, 0xa5, 0x13, 0xcf, 0x1f, 0x4d, 0x1c, 0x53, 0xef, 0xb9, 0xef, 0xbf, 0xa4, 0xdc, 0x6d, 0xc5, 0x4d, 0xb6, 0x27, 0x14, 0x15, 0xe7, 0xb8, 0x2b, 0x0b, 0xe6, 0xb8, 0x9b, - 0xbf, 0x04, 0x10, 0xb7, 0x90, 0xdf, 0x04, 0xbe, 0xe7, 0xb9, 0x72, 0xd8, 0x3a, 0x3e, 0xf6, 0x37, + 0xbf, 0x0c, 0x10, 0xb7, 0x90, 0xdf, 0x04, 0xbe, 0xe7, 0xb9, 0x72, 0xd8, 0x3a, 0x3e, 0xf6, 0x37, 0xc4, 0x89, 0xe7, 0x8b, 0x2d, 0x13, 0xb7, 0xd7, 0x1b, 0xb0, 0x16, 0xe1, 0x5b, 0x27, 0x52, 0xf8, 0x88, 0x26, 0x15, 0xe8, 0x0e, 0x3d, 0x5f, 0x2a, 0x1f, 0x8f, 0x7e, 0x3e, 0xe9, 0xb2, 0x1c, 0x6e, 0xe9, 0x9d, 0xee, 0x01, 0xcb, 0x37, 0xef, 0x01, 0xc4, 0x43, 0x4b, 0xb1, 0x10, 0xfd, 0x7a, 0xf3, @@ -10024,70 +10032,70 @@ var fileDescriptor_98a910b73321e591 = []byte{ 0x35, 0x26, 0x22, 0x53, 0xce, 0xb0, 0x29, 0x87, 0xdd, 0xc9, 0x88, 0x95, 0xd1, 0xa9, 0x44, 0xa0, 0x75, 0x26, 0x7c, 0xf4, 0x65, 0x2a, 0xf8, 0x1e, 0x44, 0xe0, 0x6a, 0x30, 0x5d, 0x06, 0x21, 0xf5, 0x9e, 0xed, 0xb2, 0x6a, 0x04, 0x98, 0xe7, 0x6c, 0x19, 0xdb, 0x4f, 0xa1, 0x03, 0xab, 0x35, 0xfe, - 0x7b, 0x0e, 0xf2, 0x68, 0xd7, 0x31, 0xd6, 0x4d, 0x1a, 0x21, 0xb5, 0x56, 0x92, 0xa8, 0xcf, 0xb6, + 0x5b, 0x0e, 0xf2, 0x68, 0xd7, 0x31, 0xd6, 0x4d, 0x1a, 0x21, 0xb5, 0x56, 0x92, 0xa8, 0xcf, 0xb7, 0x1b, 0xa1, 0xec, 0xe4, 0x6e, 0xf4, 0x1e, 0x54, 0xfb, 0x93, 0x40, 0x7a, 0x23, 0xda, 0x8a, 0xf5, 0x69, 0xd7, 0xcd, 0x99, 0xac, 0x11, 0x0d, 0xa7, 0x91, 0x24, 0xe5, 0xef, 0x40, 0xf1, 0x44, 0x69, - 0xbd, 0xca, 0x1b, 0x7d, 0xe1, 0x92, 0xdd, 0x5a, 0x6b, 0xb6, 0x26, 0xc6, 0x7e, 0xd9, 0x33, 0x2b, - 0x36, 0x89, 0xd2, 0xbb, 0x6e, 0x31, 0xda, 0x75, 0x7f, 0x09, 0x56, 0x04, 0x0e, 0xf8, 0xa1, 0x63, - 0xf6, 0xc5, 0x48, 0xb8, 0xe1, 0x32, 0x7b, 0xfb, 0x25, 0x7a, 0x4c, 0x33, 0x46, 0xdd, 0x9e, 0x92, - 0x85, 0x96, 0xc7, 0xf5, 0x70, 0xf3, 0x0f, 0x03, 0xfb, 0xb2, 0x11, 0x23, 0x9a, 0x5f, 0xd6, 0xf6, - 0xb2, 0x04, 0xb9, 0x56, 0xd0, 0xd7, 0x19, 0x10, 0x11, 0xf4, 0x55, 0x78, 0xb5, 0x49, 0xc3, 0xc1, - 0xb2, 0xcd, 0x37, 0xa1, 0x12, 0xbd, 0x01, 0x95, 0x67, 0xdf, 0x93, 0xdd, 0xb1, 0xe8, 0xdb, 0x27, - 0xb6, 0xb0, 0x94, 0x7e, 0x76, 0xa5, 0xe9, 0x4b, 0x95, 0x44, 0x6c, 0xbb, 0x16, 0xcb, 0x36, 0x7e, - 0xbb, 0x0c, 0x45, 0xb5, 0xf9, 0xea, 0x0e, 0x57, 0xa2, 0x0e, 0x7f, 0x17, 0xca, 0xde, 0x58, 0xf8, - 0xa6, 0xf4, 0x7c, 0x9d, 0xb9, 0x79, 0xe7, 0x65, 0x36, 0xf3, 0xf5, 0x03, 0xcd, 0x6c, 0x44, 0x62, - 0xa6, 0xb5, 0x29, 0x3b, 0xab, 0x4d, 0xf7, 0x81, 0x85, 0xfb, 0xf6, 0xa1, 0x8f, 0x7c, 0xf2, 0x42, - 0xc7, 0xe1, 0x33, 0x78, 0xde, 0x83, 0x4a, 0xdf, 0x73, 0x2d, 0x3b, 0xca, 0xe2, 0xac, 0x3c, 0xfc, - 0xfa, 0x4b, 0xb5, 0x70, 0x33, 0xe4, 0x36, 0x62, 0x41, 0xfc, 0x75, 0x28, 0x9c, 0xa1, 0x9a, 0x91, - 0x3e, 0x5d, 0xae, 0x84, 0x8a, 0x88, 0x7f, 0x02, 0xd5, 0x1f, 0x4c, 0xec, 0xfe, 0xe9, 0x41, 0x32, - 0x4b, 0xf8, 0xde, 0x4b, 0xb5, 0xe2, 0xbb, 0x31, 0xbf, 0x91, 0x14, 0x96, 0x50, 0xed, 0xd2, 0x9f, - 0x40, 0xb5, 0xcb, 0xb3, 0xaa, 0x6d, 0x40, 0xcd, 0x15, 0x81, 0x14, 0xd6, 0xb6, 0xf6, 0xd5, 0xe0, - 0x33, 0xf8, 0x6a, 0x69, 0x11, 0xcd, 0x2f, 0x41, 0x39, 0x9c, 0x70, 0x5e, 0x84, 0xec, 0x3e, 0x06, - 0x45, 0x45, 0xc8, 0x1e, 0xf8, 0x4a, 0xdb, 0x5a, 0xa8, 0x6d, 0xcd, 0x3f, 0xca, 0x40, 0x25, 0x1a, - 0xf4, 0xb4, 0xe5, 0x6c, 0xff, 0x60, 0x62, 0x3a, 0x2c, 0x43, 0xe1, 0xb2, 0x27, 0x15, 0x44, 0xc6, - 0xfa, 0x11, 0x1d, 0xd6, 0xfb, 0x2c, 0x47, 0x2e, 0x82, 0x08, 0x02, 0x96, 0xe7, 0x1c, 0x56, 0x34, - 0xfa, 0xc0, 0x57, 0xa4, 0x05, 0x34, 0x7c, 0xf8, 0x34, 0x44, 0x14, 0x95, 0x47, 0x71, 0x2a, 0x94, - 0x81, 0xdc, 0xf7, 0x24, 0x01, 0x65, 0x6c, 0x54, 0xc7, 0x65, 0x15, 0x7c, 0xe7, 0xbe, 0x27, 0x3b, - 0x68, 0x12, 0xa3, 0xf0, 0xac, 0x1a, 0xbe, 0x9e, 0x20, 0xb2, 0x88, 0x2d, 0xc7, 0xe9, 0xb8, 0xac, - 0xa6, 0x1f, 0x28, 0x68, 0x05, 0x25, 0xb6, 0xcf, 0xcd, 0x3e, 0xb2, 0xaf, 0xa2, 0x85, 0x45, 0x1e, - 0x0d, 0x33, 0x5c, 0x92, 0xed, 0x73, 0x3b, 0x90, 0x01, 0x5b, 0x6b, 0xfe, 0x61, 0x06, 0xaa, 0x89, - 0x09, 0xc6, 0xf0, 0x8f, 0x08, 0x71, 0x2b, 0x53, 0xd1, 0xe0, 0xc7, 0x38, 0x8c, 0xbe, 0x15, 0x6e, - 0x53, 0x3d, 0x0f, 0x7f, 0x66, 0xf1, 0x7d, 0x3d, 0x6f, 0xe4, 0xf9, 0xbe, 0xf7, 0x5c, 0xb9, 0x3e, - 0xbb, 0x66, 0x20, 0x9f, 0x09, 0x71, 0xca, 0xf2, 0xd8, 0xd5, 0xcd, 0x89, 0xef, 0x0b, 0x57, 0x21, - 0x0a, 0xd4, 0x38, 0x71, 0xae, 0xa0, 0x22, 0x0a, 0x45, 0x62, 0xda, 0x07, 0x59, 0x09, 0x0d, 0x81, - 0xa6, 0x56, 0x98, 0x32, 0x12, 0x20, 0xb9, 0x02, 0x2b, 0xb8, 0xa9, 0xa8, 0x0c, 0xc5, 0xc1, 0xc9, - 0x96, 0x79, 0x11, 0xb4, 0x06, 0x1e, 0x83, 0x69, 0xe4, 0xbe, 0xf7, 0x9c, 0x55, 0x1b, 0x13, 0x80, - 0x38, 0x26, 0xc3, 0x58, 0x14, 0x15, 0x22, 0x3a, 0x43, 0xd0, 0x10, 0x3f, 0x00, 0xc0, 0x5f, 0x44, - 0x19, 0x06, 0xa4, 0x2f, 0xe1, 0x28, 0x13, 0x9f, 0x91, 0x10, 0xd1, 0xf8, 0x2b, 0x50, 0x89, 0x1e, - 0xf0, 0x3a, 0x94, 0xc8, 0xa5, 0x8d, 0x5e, 0x1b, 0x82, 0xe8, 0x9f, 0xd9, 0xae, 0x25, 0xce, 0xc9, - 0xae, 0x14, 0x0c, 0x05, 0x60, 0x2b, 0x87, 0xb6, 0x65, 0x09, 0x37, 0x3c, 0xe9, 0x51, 0xd0, 0xbc, - 0xf3, 0xf8, 0xfc, 0xdc, 0xf3, 0xf8, 0xc6, 0x2f, 0x43, 0x35, 0x11, 0x34, 0x5e, 0xda, 0xed, 0x44, - 0xc3, 0xb2, 0xe9, 0x86, 0xdd, 0x86, 0x4a, 0x58, 0x03, 0x12, 0xd0, 0xde, 0x56, 0x31, 0x62, 0x44, - 0xe3, 0x5f, 0x64, 0xd1, 0x93, 0xc5, 0xae, 0x4d, 0x07, 0x7a, 0xdb, 0x50, 0x0c, 0xa4, 0x29, 0x27, - 0x61, 0x31, 0xc3, 0x82, 0x0b, 0xb4, 0x4b, 0x3c, 0x3b, 0x4b, 0x86, 0xe6, 0xe6, 0x1f, 0x40, 0x4e, - 0x9a, 0x03, 0x9d, 0x28, 0xfd, 0xca, 0x62, 0x42, 0x7a, 0xe6, 0x60, 0x67, 0xc9, 0x40, 0x3e, 0xbe, - 0x0b, 0xe5, 0xbe, 0xce, 0x6d, 0x69, 0xa3, 0xb8, 0x60, 0x2c, 0x16, 0x66, 0xc4, 0x76, 0x96, 0x8c, - 0x48, 0x02, 0xff, 0x0e, 0xe4, 0xd1, 0xbb, 0xd4, 0x35, 0x1f, 0x0b, 0xc6, 0x98, 0xb8, 0x5c, 0x76, - 0x96, 0x0c, 0xe2, 0xdc, 0x28, 0x41, 0x81, 0x6c, 0x70, 0xa3, 0x0e, 0x45, 0xd5, 0xd7, 0xe9, 0x91, - 0x6b, 0xdc, 0x82, 0x5c, 0xcf, 0x1c, 0xa0, 0x87, 0x6f, 0x5b, 0x81, 0x4e, 0x95, 0xe0, 0xcf, 0xc6, - 0x2b, 0x71, 0x9e, 0x2e, 0x99, 0x02, 0xce, 0xa4, 0x52, 0xc0, 0x8d, 0x22, 0xe4, 0xf1, 0x8d, 0x8d, - 0xdb, 0x57, 0x45, 0x0b, 0x8d, 0x7f, 0x9a, 0xc3, 0xc0, 0x42, 0x8a, 0xf3, 0xb9, 0xe9, 0xed, 0x8f, - 0xa0, 0x32, 0xf6, 0xbd, 0xbe, 0x08, 0x02, 0xcf, 0xd7, 0xce, 0xd1, 0xeb, 0x2f, 0x3e, 0x7a, 0x5e, - 0x3f, 0x0c, 0x79, 0x8c, 0x98, 0xbd, 0xf9, 0xef, 0xb2, 0x50, 0x89, 0x1e, 0xa8, 0x78, 0x46, 0x8a, - 0x73, 0x95, 0xca, 0xdc, 0x13, 0xfe, 0xc8, 0xb4, 0x2d, 0x65, 0x3d, 0x36, 0x87, 0x66, 0xe8, 0xe4, - 0x7e, 0xec, 0x4d, 0xe4, 0xe4, 0x58, 0xa8, 0x14, 0xd6, 0x53, 0x7b, 0x24, 0x3c, 0x96, 0xa7, 0xc3, - 0x23, 0x54, 0xec, 0xbe, 0xe3, 0x4d, 0x2c, 0x56, 0x40, 0xf8, 0x11, 0x6d, 0x6f, 0x7b, 0xe6, 0x38, - 0x50, 0x36, 0x73, 0xcf, 0xf6, 0x3d, 0x56, 0x42, 0xa6, 0x6d, 0x7b, 0x30, 0x32, 0x59, 0x19, 0x85, - 0xf5, 0x9e, 0xdb, 0x12, 0x8d, 0x70, 0x05, 0xdd, 0xd4, 0x83, 0xb1, 0x70, 0xbb, 0xd2, 0x17, 0x42, - 0xee, 0x99, 0x63, 0x95, 0xd3, 0x34, 0x84, 0x65, 0xd9, 0x52, 0xd9, 0xcf, 0x6d, 0xb3, 0x2f, 0x8e, - 0x3d, 0xef, 0x94, 0x2d, 0xa3, 0xa1, 0xe9, 0xb8, 0x81, 0x34, 0x07, 0xbe, 0x39, 0x52, 0x36, 0xb4, - 0x27, 0x1c, 0x41, 0xd0, 0x0a, 0xbd, 0xdb, 0x96, 0xc3, 0xc9, 0xf1, 0x23, 0x8c, 0xfb, 0x56, 0xd5, - 0x39, 0x93, 0x25, 0xc6, 0x02, 0x6d, 0xe8, 0x32, 0x94, 0x37, 0x6c, 0xc7, 0x3e, 0xb6, 0x1d, 0x9b, - 0xad, 0x21, 0x69, 0xfb, 0xbc, 0x6f, 0x3a, 0xb6, 0xe5, 0x9b, 0xcf, 0x19, 0xc7, 0xc6, 0x3d, 0xf6, - 0xbd, 0x53, 0x9b, 0x5d, 0x43, 0x42, 0x0a, 0x03, 0xcf, 0xec, 0x1f, 0xb2, 0xeb, 0x74, 0x56, 0x76, + 0xbd, 0xca, 0x1b, 0xfd, 0xd2, 0x25, 0xbb, 0xb5, 0xd6, 0x6c, 0x4d, 0x8c, 0xfd, 0xb2, 0x67, 0x56, + 0x6c, 0x12, 0xa5, 0x77, 0xdd, 0x62, 0xb4, 0xeb, 0xfe, 0x32, 0xac, 0x08, 0x1c, 0xf0, 0x43, 0xc7, + 0xec, 0x8b, 0x91, 0x70, 0xc3, 0x65, 0xf6, 0xf6, 0x4b, 0xf4, 0x98, 0x66, 0x8c, 0xba, 0x3d, 0x25, + 0x0b, 0x2d, 0x8f, 0xeb, 0xe1, 0xe6, 0x1f, 0x06, 0xf6, 0x65, 0x23, 0x46, 0x34, 0xbf, 0xa2, 0xed, + 0x65, 0x09, 0x72, 0xad, 0xa0, 0xaf, 0x33, 0x20, 0x22, 0xe8, 0xab, 0xf0, 0x6a, 0x93, 0x86, 0x83, + 0x65, 0x9b, 0x6f, 0x42, 0x25, 0x7a, 0x03, 0x2a, 0xcf, 0xbe, 0x27, 0xbb, 0x63, 0xd1, 0xb7, 0x4f, + 0x6c, 0x61, 0x29, 0xfd, 0xec, 0x4a, 0xd3, 0x97, 0x2a, 0x89, 0xd8, 0x76, 0x2d, 0x96, 0x6d, 0xfc, + 0x4e, 0x19, 0x8a, 0x6a, 0xf3, 0xd5, 0x1d, 0xae, 0x44, 0x1d, 0xfe, 0x1e, 0x94, 0xbd, 0xb1, 0xf0, + 0x4d, 0xe9, 0xf9, 0x3a, 0x73, 0xf3, 0xce, 0xcb, 0x6c, 0xe6, 0xeb, 0x07, 0x9a, 0xd9, 0x88, 0xc4, + 0x4c, 0x6b, 0x53, 0x76, 0x56, 0x9b, 0xee, 0x03, 0x0b, 0xf7, 0xed, 0x43, 0x1f, 0xf9, 0xe4, 0x85, + 0x8e, 0xc3, 0x67, 0xf0, 0xbc, 0x07, 0x95, 0xbe, 0xe7, 0x5a, 0x76, 0x94, 0xc5, 0x59, 0x79, 0xf8, + 0x8d, 0x97, 0x6a, 0xe1, 0x66, 0xc8, 0x6d, 0xc4, 0x82, 0xf8, 0xeb, 0x50, 0x38, 0x43, 0x35, 0x23, + 0x7d, 0xba, 0x5c, 0x09, 0x15, 0x11, 0xff, 0x04, 0xaa, 0x3f, 0x9c, 0xd8, 0xfd, 0xd3, 0x83, 0x64, + 0x96, 0xf0, 0xbd, 0x97, 0x6a, 0xc5, 0xf7, 0x62, 0x7e, 0x23, 0x29, 0x2c, 0xa1, 0xda, 0xa5, 0x3f, + 0x85, 0x6a, 0x97, 0x67, 0x55, 0xdb, 0x80, 0x9a, 0x2b, 0x02, 0x29, 0xac, 0x6d, 0xed, 0xab, 0xc1, + 0xe7, 0xf0, 0xd5, 0xd2, 0x22, 0x9a, 0x5f, 0x86, 0x72, 0x38, 0xe1, 0xbc, 0x08, 0xd9, 0x7d, 0x0c, + 0x8a, 0x8a, 0x90, 0x3d, 0xf0, 0x95, 0xb6, 0xb5, 0x50, 0xdb, 0x9a, 0x7f, 0x9c, 0x81, 0x4a, 0x34, + 0xe8, 0x69, 0xcb, 0xd9, 0xfe, 0xe1, 0xc4, 0x74, 0x58, 0x86, 0xc2, 0x65, 0x4f, 0x2a, 0x88, 0x8c, + 0xf5, 0x23, 0x3a, 0xac, 0xf7, 0x59, 0x8e, 0x5c, 0x04, 0x11, 0x04, 0x2c, 0xcf, 0x39, 0xac, 0x68, + 0xf4, 0x81, 0xaf, 0x48, 0x0b, 0x68, 0xf8, 0xf0, 0x69, 0x88, 0x28, 0x2a, 0x8f, 0xe2, 0x54, 0x28, + 0x03, 0xb9, 0xef, 0x49, 0x02, 0xca, 0xd8, 0xa8, 0x8e, 0xcb, 0x2a, 0xf8, 0xce, 0x7d, 0x4f, 0x76, + 0xd0, 0x24, 0x46, 0xe1, 0x59, 0x35, 0x7c, 0x3d, 0x41, 0x64, 0x11, 0x5b, 0x8e, 0xd3, 0x71, 0x59, + 0x4d, 0x3f, 0x50, 0xd0, 0x0a, 0x4a, 0x6c, 0x9f, 0x9b, 0x7d, 0x64, 0x5f, 0x45, 0x0b, 0x8b, 0x3c, + 0x1a, 0x66, 0xb8, 0x24, 0xdb, 0xe7, 0x76, 0x20, 0x03, 0xb6, 0xd6, 0xfc, 0xa3, 0x0c, 0x54, 0x13, + 0x13, 0x8c, 0xe1, 0x1f, 0x11, 0xe2, 0x56, 0xa6, 0xa2, 0xc1, 0x8f, 0x71, 0x18, 0x7d, 0x2b, 0xdc, + 0xa6, 0x7a, 0x1e, 0xfe, 0xcc, 0xe2, 0xfb, 0x7a, 0xde, 0xc8, 0xf3, 0x7d, 0xef, 0xb9, 0x72, 0x7d, + 0x76, 0xcd, 0x40, 0x3e, 0x13, 0xe2, 0x94, 0xe5, 0xb1, 0xab, 0x9b, 0x13, 0xdf, 0x17, 0xae, 0x42, + 0x14, 0xa8, 0x71, 0xe2, 0x5c, 0x41, 0x45, 0x14, 0x8a, 0xc4, 0xb4, 0x0f, 0xb2, 0x12, 0x1a, 0x02, + 0x4d, 0xad, 0x30, 0x65, 0x24, 0x40, 0x72, 0x05, 0x56, 0x70, 0x53, 0x51, 0x19, 0x8a, 0x83, 0x93, + 0x2d, 0xf3, 0x22, 0x68, 0x0d, 0x3c, 0x06, 0xd3, 0xc8, 0x7d, 0xef, 0x39, 0xab, 0x36, 0x26, 0x00, + 0x71, 0x4c, 0x86, 0xb1, 0x28, 0x2a, 0x44, 0x74, 0x86, 0xa0, 0x21, 0x7e, 0x00, 0x80, 0xbf, 0x88, + 0x32, 0x0c, 0x48, 0x5f, 0xc2, 0x51, 0x26, 0x3e, 0x23, 0x21, 0xa2, 0xf1, 0x57, 0xa0, 0x12, 0x3d, + 0xe0, 0x75, 0x28, 0x91, 0x4b, 0x1b, 0xbd, 0x36, 0x04, 0xd1, 0x3f, 0xb3, 0x5d, 0x4b, 0x9c, 0x93, + 0x5d, 0x29, 0x18, 0x0a, 0xc0, 0x56, 0x0e, 0x6d, 0xcb, 0x12, 0x6e, 0x78, 0xd2, 0xa3, 0xa0, 0x79, + 0xe7, 0xf1, 0xf9, 0xb9, 0xe7, 0xf1, 0x8d, 0x5f, 0x81, 0x6a, 0x22, 0x68, 0xbc, 0xb4, 0xdb, 0x89, + 0x86, 0x65, 0xd3, 0x0d, 0xbb, 0x0d, 0x95, 0xb0, 0x06, 0x24, 0xa0, 0xbd, 0xad, 0x62, 0xc4, 0x88, + 0xc6, 0x3f, 0xcf, 0xa2, 0x27, 0x8b, 0x5d, 0x9b, 0x0e, 0xf4, 0xb6, 0xa1, 0x18, 0x48, 0x53, 0x4e, + 0xc2, 0x62, 0x86, 0x05, 0x17, 0x68, 0x97, 0x78, 0x76, 0x96, 0x0c, 0xcd, 0xcd, 0x3f, 0x80, 0x9c, + 0x34, 0x07, 0x3a, 0x51, 0xfa, 0xd5, 0xc5, 0x84, 0xf4, 0xcc, 0xc1, 0xce, 0x92, 0x81, 0x7c, 0x7c, + 0x17, 0xca, 0x7d, 0x9d, 0xdb, 0xd2, 0x46, 0x71, 0xc1, 0x58, 0x2c, 0xcc, 0x88, 0xed, 0x2c, 0x19, + 0x91, 0x04, 0xfe, 0x5d, 0xc8, 0xa3, 0x77, 0xa9, 0x6b, 0x3e, 0x16, 0x8c, 0x31, 0x71, 0xb9, 0xec, + 0x2c, 0x19, 0xc4, 0xb9, 0x51, 0x82, 0x02, 0xd9, 0xe0, 0x46, 0x1d, 0x8a, 0xaa, 0xaf, 0xd3, 0x23, + 0xd7, 0xb8, 0x05, 0xb9, 0x9e, 0x39, 0x40, 0x0f, 0xdf, 0xb6, 0x02, 0x9d, 0x2a, 0xc1, 0x9f, 0x8d, + 0x57, 0xe2, 0x3c, 0x5d, 0x32, 0x05, 0x9c, 0x49, 0xa5, 0x80, 0x1b, 0x45, 0xc8, 0xe3, 0x1b, 0x1b, + 0xb7, 0xaf, 0x8a, 0x16, 0x1a, 0xff, 0x34, 0x87, 0x81, 0x85, 0x14, 0xe7, 0x73, 0xd3, 0xdb, 0x1f, + 0x41, 0x65, 0xec, 0x7b, 0x7d, 0x11, 0x04, 0x9e, 0xaf, 0x9d, 0xa3, 0xd7, 0x5f, 0x7c, 0xf4, 0xbc, + 0x7e, 0x18, 0xf2, 0x18, 0x31, 0x7b, 0xf3, 0xdf, 0x66, 0xa1, 0x12, 0x3d, 0x50, 0xf1, 0x8c, 0x14, + 0xe7, 0x2a, 0x95, 0xb9, 0x27, 0xfc, 0x91, 0x69, 0x5b, 0xca, 0x7a, 0x6c, 0x0e, 0xcd, 0xd0, 0xc9, + 0xfd, 0xd8, 0x9b, 0xc8, 0xc9, 0xb1, 0x50, 0x29, 0xac, 0xa7, 0xf6, 0x48, 0x78, 0x2c, 0x4f, 0x87, + 0x47, 0xa8, 0xd8, 0x7d, 0xc7, 0x9b, 0x58, 0xac, 0x80, 0xf0, 0x23, 0xda, 0xde, 0xf6, 0xcc, 0x71, + 0xa0, 0x6c, 0xe6, 0x9e, 0xed, 0x7b, 0xac, 0x84, 0x4c, 0xdb, 0xf6, 0x60, 0x64, 0xb2, 0x32, 0x0a, + 0xeb, 0x3d, 0xb7, 0x25, 0x1a, 0xe1, 0x0a, 0xba, 0xa9, 0x07, 0x63, 0xe1, 0x76, 0xa5, 0x2f, 0x84, + 0xdc, 0x33, 0xc7, 0x2a, 0xa7, 0x69, 0x08, 0xcb, 0xb2, 0xa5, 0xb2, 0x9f, 0xdb, 0x66, 0x5f, 0x1c, + 0x7b, 0xde, 0x29, 0x5b, 0x46, 0x43, 0xd3, 0x71, 0x03, 0x69, 0x0e, 0x7c, 0x73, 0xa4, 0x6c, 0x68, + 0x4f, 0x38, 0x82, 0xa0, 0x15, 0x7a, 0xb7, 0x2d, 0x87, 0x93, 0xe3, 0x47, 0x18, 0xf7, 0xad, 0xaa, + 0x73, 0x26, 0x4b, 0x8c, 0x05, 0xda, 0xd0, 0x65, 0x28, 0x6f, 0xd8, 0x8e, 0x7d, 0x6c, 0x3b, 0x36, + 0x5b, 0x43, 0xd2, 0xf6, 0x79, 0xdf, 0x74, 0x6c, 0xcb, 0x37, 0x9f, 0x33, 0x8e, 0x8d, 0x7b, 0xec, + 0x7b, 0xa7, 0x36, 0xbb, 0x86, 0x84, 0x14, 0x06, 0x9e, 0xd9, 0x9f, 0xb2, 0xeb, 0x74, 0x56, 0x76, 0x2a, 0x64, 0x7f, 0x78, 0x62, 0x1e, 0xb3, 0x1b, 0x71, 0x4a, 0xef, 0x66, 0x63, 0x0d, 0x56, 0xa7, 0x4e, 0xe5, 0x1b, 0x25, 0x1d, 0x7d, 0x36, 0x6a, 0x50, 0x4d, 0x1c, 0x97, 0x36, 0x5e, 0x85, 0x72, - 0x78, 0x98, 0x8a, 0x51, 0xba, 0x1d, 0xa8, 0x34, 0xb0, 0x56, 0x92, 0x08, 0x6e, 0xfc, 0xe7, 0x0c, + 0x78, 0x98, 0x8a, 0x51, 0xba, 0x1d, 0xa8, 0x34, 0xb0, 0x56, 0x92, 0x08, 0x6e, 0xfc, 0xa7, 0x0c, 0x14, 0xd5, 0x49, 0x36, 0xdf, 0x88, 0x2a, 0x4f, 0x32, 0x0b, 0x9c, 0x5e, 0x2a, 0x26, 0x7d, 0xf6, 0x1b, 0x95, 0x9f, 0x5c, 0x87, 0x82, 0x43, 0xe1, 0xb8, 0x36, 0x5f, 0x04, 0x24, 0xac, 0x4d, 0x2e, 0x65, 0x6d, 0x6e, 0x43, 0xc5, 0x9c, 0x48, 0x8f, 0x0e, 0xe9, 0xf4, 0x09, 0x46, 0x8c, 0x68, 0xb6, @@ -10102,22 +10110,22 @@ var fileDescriptor_98a910b73321e591 = []byte{ 0x5c, 0xf3, 0x19, 0xd4, 0x52, 0x45, 0x4e, 0xfc, 0x3a, 0xb0, 0x14, 0x02, 0x9b, 0xbe, 0xc4, 0x6f, 0xc1, 0xb5, 0x14, 0x76, 0xcf, 0xb6, 0x2c, 0xca, 0x04, 0x4f, 0x3f, 0x08, 0x3b, 0xb8, 0x51, 0x81, 0x52, 0x5f, 0xcd, 0x61, 0xf3, 0x10, 0x6a, 0x34, 0xa9, 0x7b, 0x42, 0x9a, 0x07, 0xae, 0x73, 0xf1, - 0x27, 0xae, 0x44, 0x6b, 0x7e, 0x55, 0x87, 0x5f, 0x68, 0x4d, 0x4e, 0x7c, 0x6f, 0x44, 0xb2, 0x0a, + 0xa7, 0xae, 0x44, 0x6b, 0x7e, 0x4d, 0x87, 0x5f, 0x68, 0x4d, 0x4e, 0x7c, 0x6f, 0x44, 0xb2, 0x0a, 0x06, 0xfd, 0x46, 0xe9, 0xd2, 0xd3, 0x9a, 0x91, 0x95, 0x5e, 0xf3, 0x17, 0x15, 0x28, 0xb5, 0xfa, 0x7d, 0x0c, 0x18, 0x67, 0xde, 0xfc, 0x0e, 0x14, 0xfb, 0x9e, 0x7b, 0x62, 0x0f, 0xb4, 0xb5, 0x9e, 0xf6, 0x1b, 0x35, 0x1f, 0xaa, 0xe3, 0x89, 0x3d, 0x30, 0x34, 0x31, 0xb2, 0xe9, 0xdd, 0xa6, 0x70, - 0x25, 0x9b, 0x32, 0xb9, 0xd1, 0xe6, 0xf2, 0x00, 0xf2, 0xb6, 0x7b, 0xe2, 0xe9, 0xb2, 0xd1, 0xcf, - 0x5f, 0xc2, 0x44, 0xb5, 0x93, 0x44, 0xd8, 0xf8, 0xaf, 0x19, 0x28, 0xaa, 0x57, 0xf3, 0x57, 0x61, + 0x25, 0x9b, 0x32, 0xb9, 0xd1, 0xe6, 0xf2, 0x00, 0xf2, 0xb6, 0x7b, 0xe2, 0xe9, 0xb2, 0xd1, 0x2f, + 0x5e, 0xc2, 0x44, 0xb5, 0x93, 0x44, 0xd8, 0xf8, 0x2f, 0x19, 0x28, 0xaa, 0x57, 0xf3, 0x57, 0x61, 0x45, 0xb8, 0xb8, 0xd4, 0x42, 0x43, 0xaf, 0xd7, 0xd8, 0x14, 0x16, 0x5d, 0x5a, 0x8d, 0x11, 0xc7, 0x93, 0x81, 0xce, 0xcc, 0x24, 0x51, 0xfc, 0x3d, 0xb8, 0xa5, 0xc0, 0x43, 0x5f, 0xf8, 0xc2, 0x11, 0x66, 0x20, 0x36, 0x87, 0xa6, 0xeb, 0x0a, 0x47, 0x6f, 0xfb, 0x97, 0x3d, 0xe6, 0x4d, 0x58, 0x56, - 0x8f, 0xba, 0x63, 0xb3, 0x2f, 0x02, 0xbd, 0x96, 0x52, 0x38, 0xfe, 0x35, 0x28, 0x50, 0x55, 0x6d, + 0x8f, 0xba, 0x63, 0xb3, 0x2f, 0x02, 0xbd, 0x96, 0x52, 0x38, 0xfe, 0x75, 0x28, 0x50, 0x55, 0x6d, 0xdd, 0xba, 0x7a, 0x2a, 0x15, 0x55, 0xc3, 0x8b, 0xf6, 0xa5, 0x16, 0x80, 0x1a, 0x26, 0x0c, 0xc9, - 0xb4, 0x6d, 0xf8, 0xe2, 0x95, 0xe3, 0x4a, 0xd1, 0x61, 0x82, 0x09, 0xdb, 0x67, 0x09, 0x47, 0x50, - 0xf9, 0x23, 0xee, 0x9b, 0x59, 0x3a, 0x77, 0x49, 0xe1, 0x1a, 0xff, 0x25, 0x0f, 0x79, 0x1c, 0x61, + 0xb4, 0x6d, 0xf8, 0xd2, 0x95, 0xe3, 0x4a, 0xd1, 0x61, 0x82, 0x09, 0xdb, 0x67, 0x09, 0x47, 0x50, + 0xf9, 0x23, 0xee, 0x9b, 0x59, 0x3a, 0x77, 0x49, 0xe1, 0x1a, 0xff, 0x39, 0x0f, 0x79, 0x1c, 0x61, 0x24, 0x1e, 0x7a, 0x23, 0x11, 0x65, 0x9f, 0x95, 0x23, 0x92, 0xc2, 0xa1, 0xe3, 0x63, 0xaa, 0x02, 0x80, 0x88, 0x4c, 0x99, 0x96, 0x69, 0x34, 0x52, 0x8e, 0x7d, 0xef, 0xc4, 0x76, 0x62, 0x4a, 0xed, - 0x22, 0x4d, 0xa1, 0xf9, 0xd7, 0xe1, 0xe6, 0xc8, 0xf4, 0x4f, 0x85, 0xa4, 0xd5, 0xfd, 0xcc, 0xf3, + 0x22, 0x4d, 0xa1, 0xf9, 0x37, 0xe0, 0xe6, 0xc8, 0xf4, 0x4f, 0x85, 0xa4, 0xd5, 0xfd, 0xcc, 0xf3, 0x4f, 0x03, 0x1c, 0xb9, 0x8e, 0xa5, 0xd3, 0x96, 0x97, 0x3c, 0xe5, 0xaf, 0xc3, 0xda, 0xf3, 0x10, 0x8c, 0xde, 0xa1, 0x12, 0x87, 0xb3, 0x0f, 0xd0, 0x18, 0x5b, 0xe2, 0xcc, 0x26, 0xb9, 0x65, 0x55, 0x5b, 0x1b, 0xc2, 0xa8, 0x4a, 0xa6, 0x1a, 0xc8, 0xae, 0x7e, 0xb3, 0x3e, 0x7f, 0x4a, 0x63, 0xd1, @@ -10127,306 +10135,307 @@ var fileDescriptor_98a910b73321e591 = []byte{ 0x1d, 0xa4, 0xc4, 0x18, 0x0c, 0x71, 0x1d, 0xaf, 0x6f, 0x3a, 0x5d, 0xe9, 0xf9, 0xe6, 0x40, 0x1c, 0x9a, 0x72, 0x58, 0x1f, 0xa8, 0x10, 0x77, 0x1a, 0x8f, 0x3d, 0x96, 0xf6, 0x48, 0x7c, 0xe2, 0xb9, 0xa2, 0x3e, 0x54, 0x3d, 0x0e, 0x61, 0x6c, 0x89, 0xe9, 0x9a, 0xce, 0x85, 0xb4, 0xfb, 0xd8, 0x17, - 0x5b, 0xb5, 0x24, 0x81, 0xa2, 0xa4, 0x82, 0x90, 0x38, 0x8e, 0x1d, 0xab, 0xfe, 0x7d, 0xd5, 0xd7, + 0x5b, 0xb5, 0x24, 0x81, 0xa2, 0xa4, 0x82, 0x90, 0x38, 0x8e, 0x1d, 0xab, 0xfe, 0x03, 0xd5, 0xd7, 0x08, 0x81, 0xb3, 0x2b, 0xe4, 0x50, 0xf8, 0x62, 0x32, 0x6a, 0x59, 0x96, 0x2f, 0x82, 0xa0, 0x7e, - 0xaa, 0x66, 0x77, 0x0a, 0xdd, 0xf8, 0x26, 0x1d, 0x73, 0x0d, 0x9b, 0x6f, 0x41, 0x6d, 0x17, 0x5b, + 0xaa, 0x66, 0x77, 0x0a, 0xdd, 0xf8, 0x16, 0x1d, 0x73, 0x0d, 0x9b, 0x6f, 0x41, 0x6d, 0x17, 0x5b, 0xd8, 0x1a, 0xdb, 0xdd, 0xbe, 0x37, 0x16, 0x68, 0xd0, 0x29, 0x61, 0x4c, 0xe9, 0x85, 0x2a, 0x94, 0x3e, 0x0a, 0x3c, 0xb7, 0x75, 0xd8, 0x51, 0x5b, 0xcc, 0xf6, 0xc4, 0x71, 0x58, 0xb6, 0x79, 0x00, 0x10, 0x6b, 0x36, 0x6e, 0x17, 0x2d, 0x3a, 0x53, 0x62, 0x4b, 0x2a, 0x99, 0xe5, 0x5a, 0xb6, 0x3b, 0xd8, 0xd2, 0xca, 0xcc, 0x32, 0x88, 0xa4, 0x24, 0x85, 0xb0, 0x22, 0x24, 0xb9, 0x33, 0x04, 0x09, - 0x8b, 0xe5, 0x9a, 0xff, 0x37, 0x03, 0xd5, 0x44, 0x09, 0xc5, 0x9f, 0x62, 0xd9, 0x07, 0x6e, 0xf6, + 0x8b, 0xe5, 0x9a, 0xff, 0x27, 0x03, 0xd5, 0x44, 0x09, 0xc5, 0x9f, 0x61, 0xd9, 0x07, 0x6e, 0xf6, 0xe8, 0x2e, 0xe0, 0xbc, 0x29, 0x45, 0x8f, 0x60, 0x9c, 0x55, 0x5d, 0xe1, 0x81, 0x4f, 0x55, 0x4a, - 0x22, 0x81, 0xf9, 0x4c, 0x25, 0x1f, 0xcd, 0x87, 0x3a, 0xaf, 0x53, 0x85, 0xd2, 0x13, 0xf7, 0xd4, + 0x22, 0x81, 0xf9, 0x5c, 0x25, 0x1f, 0xcd, 0x87, 0x3a, 0xaf, 0x53, 0x85, 0xd2, 0x13, 0xf7, 0xd4, 0xf5, 0x9e, 0xbb, 0x6a, 0x9f, 0xa6, 0x3a, 0x9e, 0xd4, 0x89, 0x64, 0x58, 0x6a, 0x93, 0x6b, 0xfe, - 0xeb, 0xfc, 0x54, 0xc9, 0x5b, 0x1b, 0x8a, 0x2a, 0x98, 0x20, 0x3f, 0x77, 0xb6, 0x46, 0x29, 0x49, + 0xab, 0xfc, 0x54, 0xc9, 0x5b, 0x1b, 0x8a, 0x2a, 0x98, 0x20, 0x3f, 0x77, 0xb6, 0x46, 0x29, 0x49, 0xac, 0x4f, 0xbf, 0x12, 0x28, 0x43, 0x33, 0xa3, 0x97, 0x1f, 0x15, 0x84, 0x66, 0xe7, 0x9e, 0xd2, 0xa5, 0x04, 0x85, 0xb6, 0x39, 0x55, 0x13, 0x1d, 0x49, 0x68, 0xfc, 0xad, 0x0c, 0x5c, 0x9f, 0x47, 0x92, 0xac, 0x1c, 0xcf, 0xa4, 0x2b, 0xc7, 0xbb, 0x53, 0x95, 0xd8, 0x59, 0xea, 0xcd, 0x83, 0x97, - 0x6c, 0x44, 0xba, 0x2e, 0xbb, 0xf9, 0x7b, 0x19, 0x58, 0x9b, 0xe9, 0x73, 0xc2, 0x8f, 0x01, 0x28, + 0x6c, 0x44, 0xba, 0x2e, 0xbb, 0xf9, 0xfb, 0x19, 0x58, 0x9b, 0xe9, 0x73, 0xc2, 0x8f, 0x01, 0x28, 0x2a, 0xcd, 0x52, 0x85, 0x52, 0x51, 0xe9, 0x8a, 0x3a, 0x7a, 0xa0, 0x1d, 0x3e, 0x50, 0xb5, 0x00, 0xba, 0xf6, 0x5c, 0x39, 0xd1, 0x38, 0x6b, 0xb8, 0x81, 0x0c, 0x84, 0x4a, 0xd3, 0x2a, 0x67, 0x4b, 0x63, 0x8a, 0xca, 0xd1, 0x55, 0xe7, 0x23, 0xac, 0x44, 0x05, 0x58, 0x93, 0xb1, 0x63, 0xf7, 0x11, 0x2c, 0xf3, 0x06, 0xdc, 0x54, 0x17, 0x10, 0x74, 0x50, 0x79, 0xd2, 0x1b, 0xda, 0xb4, 0x38, 0x58, 0x05, 0xdf, 0x73, 0x38, 0x39, 0x76, 0xec, 0x60, 0xc8, 0xa0, 0x69, 0xc0, 0xb5, 0x39, 0x1d, 0xa4, 0x26, 0x3f, 0xd5, 0xcd, 0x5f, 0x01, 0xd8, 0x7a, 0x1a, 0x36, 0x9a, 0x65, 0x38, 0x87, 0x95, 0xad, - 0xa7, 0x49, 0xe9, 0x7a, 0xf1, 0x3c, 0x45, 0xeb, 0x15, 0xb0, 0x5c, 0xf3, 0x57, 0x32, 0x61, 0x85, + 0xa7, 0x49, 0xe9, 0x7a, 0xf1, 0x3c, 0x45, 0xeb, 0x15, 0xb0, 0x5c, 0xf3, 0x57, 0x33, 0x61, 0x85, 0x44, 0xe3, 0x2f, 0x43, 0x4d, 0x35, 0xf8, 0xd0, 0xbc, 0x70, 0x3c, 0xd3, 0xe2, 0x6d, 0x58, 0x09, 0xa2, 0x2b, 0x32, 0x89, 0x0d, 0x6b, 0xda, 0x11, 0xe8, 0xa6, 0x88, 0x8c, 0x29, 0xa6, 0x30, 0x50, - 0xca, 0xc6, 0xc7, 0x2a, 0x9c, 0x42, 0x3e, 0x93, 0x96, 0xdc, 0x32, 0x05, 0x71, 0x66, 0xf3, 0x6b, + 0xca, 0xc6, 0xc7, 0x2a, 0x9c, 0x42, 0x3e, 0x93, 0x96, 0xdc, 0x32, 0x05, 0x71, 0x66, 0xf3, 0xeb, 0xb0, 0xd6, 0x8d, 0x8d, 0xbb, 0xf2, 0xa8, 0x51, 0x39, 0xd4, 0xce, 0xb0, 0x15, 0x2a, 0x87, 0x06, - 0x9b, 0xff, 0xac, 0x04, 0x10, 0x1f, 0x21, 0xcd, 0x59, 0xf3, 0xf3, 0x2a, 0x22, 0x66, 0x0e, 0x74, - 0x73, 0x2f, 0x7d, 0xa0, 0xfb, 0x5e, 0xe4, 0xd8, 0xab, 0xf4, 0xf2, 0x74, 0x59, 0x78, 0xdc, 0xa6, - 0x69, 0x77, 0x3e, 0x55, 0x30, 0x54, 0x98, 0x2e, 0x18, 0xba, 0x3b, 0x5b, 0x5d, 0x38, 0x65, 0x8c, - 0xe2, 0xbc, 0x45, 0x29, 0x95, 0xb7, 0x68, 0x40, 0xd9, 0x17, 0xa6, 0xe5, 0xb9, 0xce, 0x45, 0x78, - 0x6e, 0x18, 0xc2, 0xfc, 0x2d, 0x28, 0x48, 0xba, 0xe5, 0x53, 0xa6, 0xb5, 0xf3, 0x82, 0x89, 0x53, - 0xb4, 0x68, 0xd9, 0xec, 0x40, 0x97, 0x04, 0xaa, 0x5d, 0xb3, 0x6c, 0x24, 0x30, 0x7c, 0x1d, 0xb8, - 0x8d, 0x41, 0x9c, 0xe3, 0x08, 0x6b, 0xe3, 0x62, 0x4b, 0x1d, 0xe7, 0xd1, 0xbe, 0x5e, 0x36, 0xe6, - 0x3c, 0x09, 0xe7, 0x7f, 0x39, 0x9e, 0x7f, 0x6a, 0xf2, 0x99, 0x1d, 0x60, 0x4f, 0x6b, 0xe4, 0xbe, - 0x44, 0x30, 0x7a, 0x0e, 0xe1, 0x82, 0x55, 0x63, 0x49, 0xda, 0x1b, 0x9f, 0x89, 0x5f, 0xf2, 0x34, - 0x1c, 0x5e, 0x95, 0xb8, 0x59, 0x25, 0xa1, 0x31, 0x82, 0x2c, 0x79, 0xdf, 0x73, 0xf7, 0x51, 0x23, - 0x98, 0xb6, 0xe4, 0x1a, 0xc6, 0xfe, 0x8e, 0x9d, 0x89, 0x6f, 0x3a, 0xf4, 0x74, 0x4d, 0x59, 0xf2, - 0x18, 0xd3, 0xfc, 0x83, 0x6c, 0x14, 0x3c, 0x55, 0xa0, 0x70, 0x6c, 0x06, 0x76, 0x5f, 0xed, 0x6e, - 0xda, 0xe9, 0x51, 0xbb, 0x9b, 0xf4, 0x2c, 0x8f, 0x65, 0x31, 0x0e, 0x0a, 0x84, 0x3e, 0xce, 0x89, - 0xef, 0x54, 0xb1, 0x3c, 0x9a, 0x80, 0x50, 0x93, 0x54, 0xcd, 0x10, 0xb1, 0x52, 0x72, 0xce, 0x8a, - 0xaa, 0x31, 0x29, 0xcc, 0xa6, 0x2d, 0x86, 0x95, 0x91, 0xc6, 0xf5, 0xa4, 0x50, 0xa9, 0x49, 0xd2, - 0x7b, 0x06, 0x28, 0x26, 0xbc, 0x24, 0xc0, 0xaa, 0x18, 0x98, 0x84, 0x42, 0x55, 0x3e, 0x31, 0xa0, - 0xb0, 0x6d, 0x19, 0xd7, 0x7d, 0xfa, 0x01, 0xab, 0x61, 0x8b, 0xe2, 0xab, 0x5a, 0x6c, 0x05, 0xa5, - 0x9a, 0x54, 0xc9, 0xb2, 0x8a, 0x3f, 0xcf, 0xa8, 0xbe, 0x85, 0xe1, 0x5b, 0x2d, 0xb4, 0x4b, 0x6b, - 0xd8, 0xb2, 0xc8, 0xd1, 0x61, 0x1c, 0xe3, 0xae, 0xb1, 0x89, 0x41, 0x90, 0x3d, 0x36, 0x5d, 0xc9, - 0xae, 0x61, 0x57, 0xc7, 0xd6, 0x09, 0xbb, 0x8e, 0x2c, 0xfd, 0xa1, 0x29, 0xd9, 0x0d, 0xa4, 0xc1, - 0x5f, 0x5b, 0xc2, 0x47, 0x4d, 0x61, 0x37, 0x91, 0x46, 0x9a, 0x03, 0x76, 0xab, 0xf9, 0xeb, 0x71, - 0x3d, 0xf4, 0x1b, 0x51, 0x78, 0xb2, 0xc8, 0xf2, 0xc1, 0x00, 0x66, 0xde, 0x5a, 0x6e, 0xc3, 0x9a, - 0x2f, 0x7e, 0x30, 0xb1, 0x53, 0xb7, 0x04, 0x72, 0x57, 0x97, 0xa1, 0xcc, 0x72, 0x34, 0xcf, 0x60, - 0x2d, 0x04, 0x9e, 0xd9, 0x72, 0x48, 0x79, 0x24, 0xfe, 0x56, 0xe2, 0x1a, 0x43, 0x66, 0xee, 0xf5, - 0xaf, 0x48, 0x64, 0x7c, 0x6d, 0x21, 0x3a, 0x27, 0xc8, 0x2e, 0x70, 0x4e, 0xd0, 0xfc, 0x3f, 0xc9, - 0x83, 0x67, 0x15, 0xb0, 0x59, 0x51, 0xc0, 0x36, 0x7b, 0x10, 0x1d, 0xa7, 0xfe, 0xb3, 0x2f, 0x93, - 0xfa, 0x9f, 0x57, 0xd4, 0xf1, 0x3e, 0xc6, 0x0f, 0xb4, 0x32, 0x9f, 0x2e, 0x70, 0xac, 0x91, 0xa2, - 0xe5, 0x1b, 0x74, 0xac, 0x6c, 0x76, 0x55, 0xc5, 0x51, 0x61, 0xee, 0xa5, 0xa2, 0xe4, 0xf9, 0xb1, - 0xa6, 0x34, 0x12, 0x5c, 0x09, 0x3b, 0x56, 0x9c, 0x67, 0xc7, 0x30, 0x76, 0xd6, 0x16, 0x2e, 0x82, - 0xd5, 0x29, 0x90, 0xfa, 0x1d, 0x8a, 0xa7, 0x35, 0x5e, 0x36, 0x66, 0xf0, 0xe8, 0xec, 0x8d, 0x26, - 0x8e, 0xb4, 0xf5, 0x41, 0x87, 0x02, 0xa6, 0x6f, 0x3d, 0x56, 0x66, 0x6f, 0x3d, 0x7e, 0x08, 0x10, - 0x08, 0x5c, 0x1d, 0x5b, 0x76, 0x5f, 0xea, 0xba, 0xa4, 0x3b, 0x97, 0xf5, 0x4d, 0x1f, 0xcf, 0x24, - 0x38, 0xb0, 0xfd, 0x23, 0xf3, 0x9c, 0x8e, 0x6c, 0x75, 0x01, 0x45, 0x04, 0x4f, 0x5b, 0xf7, 0x95, - 0x59, 0xeb, 0xfe, 0x16, 0x14, 0x02, 0x74, 0xa1, 0xe9, 0xe2, 0xce, 0xe5, 0xf3, 0xbb, 0x4e, 0x7e, - 0xb6, 0xa1, 0x68, 0x29, 0x61, 0x89, 0xf6, 0xcf, 0xf3, 0xe9, 0xca, 0x4e, 0xc5, 0x08, 0xc1, 0x94, - 0x85, 0xbd, 0x99, 0xb6, 0xb0, 0x0d, 0x0b, 0x8a, 0xfa, 0xf0, 0x61, 0x3a, 0x51, 0x10, 0xa6, 0x2d, - 0xb3, 0x89, 0xb4, 0x65, 0x54, 0xfd, 0x9a, 0x4b, 0x56, 0xbf, 0x4e, 0xdd, 0xea, 0x2b, 0xcc, 0xdc, - 0xea, 0x6b, 0x7e, 0x02, 0x05, 0x15, 0x13, 0x40, 0xe8, 0x8e, 0x2a, 0x57, 0x16, 0x3b, 0xc5, 0x32, - 0xfc, 0x3a, 0xb0, 0x40, 0x90, 0xaf, 0x23, 0xba, 0xe6, 0x48, 0x90, 0x91, 0xcc, 0xf2, 0x3a, 0x5c, - 0x57, 0xb4, 0x41, 0xfa, 0x09, 0x39, 0x5c, 0x8e, 0x7d, 0xec, 0x9b, 0xfe, 0x05, 0xcb, 0x37, 0x3f, - 0xa4, 0xa3, 0xff, 0x50, 0xa1, 0xaa, 0xd1, 0x2d, 0x4a, 0x65, 0x96, 0x2d, 0x6d, 0x7d, 0xa8, 0x72, - 0x44, 0x47, 0x7b, 0xaa, 0x9e, 0x8e, 0xc2, 0x29, 0xca, 0x07, 0x2d, 0x27, 0xf7, 0xf8, 0x3f, 0xb5, - 0xf5, 0xd6, 0xdc, 0x48, 0x78, 0x8c, 0xe9, 0x02, 0xb9, 0xcc, 0xa2, 0x05, 0x72, 0xcd, 0xc7, 0xb0, - 0x6a, 0xa4, 0x6d, 0x3a, 0x7f, 0x0f, 0x4a, 0xde, 0x38, 0x29, 0xe7, 0x45, 0x7a, 0x19, 0x92, 0x37, - 0x7f, 0x37, 0x03, 0xcb, 0x1d, 0x57, 0x0a, 0xdf, 0x35, 0x9d, 0x6d, 0xc7, 0x1c, 0xf0, 0x77, 0x43, - 0x2b, 0x35, 0x3f, 0xf7, 0x90, 0xa4, 0x4d, 0x1b, 0x2c, 0x47, 0x27, 0xd9, 0xf9, 0x0d, 0x58, 0x13, - 0x96, 0x2d, 0x3d, 0x5f, 0xf9, 0xc9, 0x61, 0x1d, 0xe3, 0x75, 0x60, 0x0a, 0xdd, 0xa5, 0x25, 0xd1, - 0x53, 0xd3, 0x5c, 0x87, 0xeb, 0x29, 0x6c, 0xe8, 0x04, 0x67, 0xf9, 0x6d, 0xa8, 0xc7, 0xbb, 0xd1, - 0x96, 0xe7, 0xca, 0x8e, 0x6b, 0x89, 0x73, 0x72, 0xb2, 0x58, 0xae, 0xf9, 0x6b, 0x91, 0x7b, 0xf7, - 0x54, 0x57, 0x39, 0xfa, 0x9e, 0x17, 0x5f, 0xa1, 0xd5, 0x50, 0xe2, 0xaa, 0x76, 0x76, 0x81, 0xab, - 0xda, 0x1f, 0xc6, 0xd7, 0x6d, 0xd5, 0x46, 0xf1, 0xca, 0xdc, 0xdd, 0x87, 0x8a, 0xb3, 0xb4, 0x77, - 0xdf, 0x15, 0x89, 0xbb, 0xb7, 0x6f, 0xea, 0x90, 0x2e, 0xbf, 0x88, 0x17, 0xac, 0xea, 0x18, 0xde, - 0x99, 0xbe, 0xe3, 0xb1, 0x58, 0x91, 0xe4, 0x8c, 0xa3, 0x0a, 0x2f, 0xed, 0xa8, 0x7e, 0x7b, 0x2a, - 0x7a, 0x2a, 0xcf, 0x4d, 0xc7, 0x5d, 0x71, 0x83, 0xf5, 0xdb, 0x50, 0x1a, 0xda, 0x81, 0xf4, 0x7c, - 0x75, 0xab, 0x7a, 0xf6, 0x16, 0x58, 0x62, 0xb4, 0x76, 0x14, 0x21, 0x55, 0xb4, 0x85, 0x5c, 0xfc, - 0x7b, 0xb0, 0x46, 0x03, 0x7f, 0x18, 0x7b, 0x0d, 0x41, 0xbd, 0x3a, 0xb7, 0x92, 0x30, 0x21, 0x6a, - 0x63, 0x8a, 0xc5, 0x98, 0x15, 0xd2, 0x18, 0x00, 0xc4, 0xf3, 0x33, 0x63, 0xc5, 0x3e, 0xc3, 0xad, - 0xea, 0x9b, 0x50, 0x0c, 0x26, 0xc7, 0xf1, 0x69, 0x9c, 0x86, 0x1a, 0xe7, 0xd0, 0x98, 0xf1, 0x0e, - 0x0e, 0x85, 0xaf, 0x9a, 0x7b, 0xe5, 0xd5, 0xee, 0x0f, 0x93, 0x13, 0xaf, 0x94, 0xf3, 0xee, 0x25, - 0xb3, 0x17, 0x49, 0x4e, 0x68, 0x40, 0xe3, 0x1d, 0xa8, 0x26, 0x06, 0x15, 0x2d, 0xf3, 0xc4, 0xb5, - 0xbc, 0x30, 0x05, 0x8c, 0xbf, 0xd5, 0xd5, 0x36, 0x2b, 0x4c, 0x02, 0xd3, 0xef, 0x86, 0x01, 0x6c, - 0x7a, 0x00, 0xaf, 0x88, 0xb0, 0x5f, 0x81, 0x5a, 0xc2, 0xa5, 0x8b, 0xd2, 0x83, 0x69, 0x64, 0xf3, - 0x0c, 0x3e, 0x9f, 0x10, 0x77, 0x28, 0xfc, 0x91, 0x1d, 0xe0, 0x46, 0xa2, 0x82, 0x45, 0x72, 0xad, - 0x2d, 0xe1, 0x4a, 0x5b, 0x86, 0x16, 0x34, 0x82, 0xf9, 0x37, 0xa1, 0x30, 0x16, 0xfe, 0x28, 0xd0, - 0x56, 0x74, 0x5a, 0x83, 0xe6, 0x8a, 0x0d, 0x0c, 0xc5, 0xd3, 0xfc, 0x27, 0x19, 0x28, 0xef, 0x09, - 0x69, 0xa2, 0xef, 0xc0, 0xf7, 0xa6, 0xde, 0x32, 0x7b, 0x82, 0x1c, 0x92, 0xae, 0xeb, 0xf0, 0x75, - 0xbd, 0xa3, 0xe9, 0x35, 0xbc, 0xb3, 0x14, 0x37, 0xac, 0xb1, 0x01, 0x25, 0x8d, 0x6e, 0xbc, 0x0b, - 0xab, 0x53, 0x94, 0x34, 0x2e, 0xca, 0xb7, 0xef, 0x5e, 0x8c, 0xc2, 0x32, 0xa7, 0x65, 0x23, 0x8d, - 0xdc, 0xa8, 0x40, 0x69, 0xac, 0x18, 0x9a, 0x7f, 0x70, 0x83, 0x8a, 0x6b, 0xec, 0x13, 0x8c, 0xe9, - 0xe7, 0xed, 0xac, 0x77, 0x00, 0x68, 0x6b, 0x56, 0x25, 0x18, 0x2a, 0x65, 0x9b, 0xc0, 0xf0, 0xf7, - 0xa3, 0x5c, 0x7b, 0x7e, 0xae, 0x53, 0x95, 0x14, 0x3e, 0x9d, 0x70, 0xaf, 0x43, 0xc9, 0x0e, 0x28, - 0x0f, 0xa7, 0xcb, 0x96, 0x42, 0x90, 0x7f, 0x0b, 0x8a, 0xf6, 0x68, 0xec, 0xf9, 0x52, 0x27, 0xe3, - 0xaf, 0x94, 0xda, 0x21, 0xca, 0x9d, 0x25, 0x43, 0xf3, 0x20, 0xb7, 0x38, 0x27, 0xee, 0xf2, 0x8b, - 0xb9, 0xdb, 0xe7, 0x21, 0xb7, 0xe2, 0xe1, 0xdf, 0x85, 0xda, 0x40, 0x55, 0x6d, 0x2a, 0xc1, 0xda, - 0x88, 0x7c, 0xe5, 0x2a, 0x21, 0x8f, 0x92, 0x0c, 0x3b, 0x4b, 0x46, 0x5a, 0x02, 0x8a, 0x44, 0x07, - 0x5e, 0x04, 0xb2, 0xe7, 0x7d, 0xe4, 0xd9, 0x2e, 0x85, 0xbb, 0x2f, 0x10, 0x69, 0x24, 0x19, 0x50, - 0x64, 0x4a, 0x02, 0xff, 0x3a, 0x7a, 0x3c, 0x81, 0xd4, 0x17, 0xdb, 0xef, 0x5e, 0x25, 0xa9, 0x27, - 0x02, 0x7d, 0x25, 0x3d, 0x90, 0xfc, 0x1c, 0x1a, 0x89, 0x45, 0xa2, 0x5f, 0xd2, 0x1a, 0x8f, 0x7d, - 0x0f, 0x63, 0xe6, 0x1a, 0x49, 0xfb, 0xfa, 0x55, 0xd2, 0x0e, 0x2f, 0xe5, 0xde, 0x59, 0x32, 0xae, - 0x90, 0xcd, 0x7b, 0x18, 0xd9, 0xe9, 0x2e, 0xec, 0x0a, 0xf3, 0x2c, 0xbc, 0x16, 0x7f, 0x7f, 0xa1, - 0x51, 0x20, 0x8e, 0x9d, 0x25, 0x63, 0x4a, 0x06, 0xff, 0x65, 0x58, 0x4b, 0xbd, 0x93, 0x6e, 0xc2, - 0xaa, 0x4b, 0xf3, 0x5f, 0x5b, 0xb8, 0x1b, 0xc8, 0xb4, 0xb3, 0x64, 0xcc, 0x4a, 0xe2, 0x13, 0xf8, - 0xdc, 0x6c, 0x97, 0xb6, 0x44, 0xdf, 0xb1, 0x5d, 0xa1, 0xef, 0xd7, 0xbf, 0xf3, 0x72, 0xa3, 0xa5, - 0x99, 0x77, 0x96, 0x8c, 0xcb, 0x25, 0xf3, 0xbf, 0x0a, 0xb7, 0xc7, 0x73, 0x4d, 0x8c, 0x32, 0x5d, - 0xfa, 0x7a, 0xfe, 0x7b, 0x0b, 0xbe, 0x79, 0x86, 0x7f, 0x67, 0xc9, 0xb8, 0x52, 0x3e, 0xfa, 0xce, - 0x14, 0x41, 0xeb, 0xe2, 0x72, 0x05, 0xd0, 0x49, 0x6d, 0xdf, 0xd9, 0x11, 0xa6, 0x15, 0x9d, 0x17, - 0xc4, 0x88, 0xc6, 0xff, 0xcc, 0x40, 0x51, 0xeb, 0xfb, 0xed, 0xa8, 0x62, 0x20, 0x32, 0xdd, 0x31, - 0x82, 0x7f, 0x00, 0x15, 0xe1, 0xfb, 0x9e, 0xbf, 0xe9, 0x59, 0x61, 0xb1, 0xe5, 0x74, 0x96, 0x59, - 0xc9, 0x59, 0x6f, 0x87, 0x64, 0x46, 0xcc, 0xc1, 0xdf, 0x07, 0x50, 0xeb, 0xbc, 0x17, 0xdf, 0x11, - 0x6a, 0xcc, 0xe7, 0x57, 0x47, 0x50, 0x31, 0x75, 0x9c, 0x96, 0x0b, 0xcf, 0x7f, 0x42, 0x30, 0x0a, - 0x38, 0x0b, 0x89, 0x80, 0xf3, 0xb6, 0xce, 0x23, 0x50, 0x7a, 0x45, 0xdf, 0x94, 0x8b, 0x10, 0x8d, - 0xdf, 0xcf, 0x40, 0x51, 0x19, 0x0f, 0xde, 0x9e, 0xed, 0xd1, 0x6b, 0x2f, 0xb6, 0x39, 0xeb, 0xd3, - 0x3d, 0xfb, 0x16, 0x80, 0xb2, 0x41, 0x89, 0x9e, 0xdd, 0x9e, 0x92, 0xa3, 0x59, 0xc3, 0xf2, 0xe6, - 0x98, 0xbe, 0xf9, 0x50, 0xdd, 0xe6, 0xa2, 0x94, 0xf0, 0x93, 0xdd, 0x5d, 0xb6, 0xc4, 0xd7, 0xa0, - 0xf6, 0x64, 0xff, 0xf1, 0xfe, 0xc1, 0xb3, 0xfd, 0xa3, 0xb6, 0x61, 0x1c, 0x18, 0x2a, 0x33, 0xbc, - 0xd1, 0xda, 0x3a, 0xea, 0xec, 0x1f, 0x3e, 0xe9, 0xb1, 0x6c, 0xe3, 0x5f, 0x66, 0xa0, 0x96, 0xb2, - 0x5d, 0x7f, 0xb6, 0x53, 0x97, 0x18, 0xfe, 0xdc, 0xfc, 0xe1, 0xcf, 0x5f, 0x36, 0xfc, 0x85, 0xe9, - 0xe1, 0xff, 0xed, 0x0c, 0xd4, 0x52, 0x36, 0x32, 0x29, 0x3d, 0x93, 0x96, 0x9e, 0xdc, 0xe9, 0xb3, - 0x53, 0x3b, 0x7d, 0x13, 0x96, 0xc3, 0xdf, 0xfb, 0x71, 0xc6, 0x21, 0x85, 0x4b, 0xd2, 0xd0, 0x75, - 0x8a, 0x7c, 0x9a, 0x86, 0xae, 0x54, 0x5c, 0xdd, 0x5a, 0xba, 0x3e, 0x1a, 0xd0, 0xed, 0xfa, 0xc6, - 0xe5, 0x16, 0xf4, 0x8a, 0x2e, 0x3c, 0x82, 0xea, 0x38, 0x5e, 0xa6, 0x2f, 0xe7, 0x96, 0x24, 0x39, - 0x5f, 0xd0, 0xce, 0xdf, 0xc9, 0xc0, 0x4a, 0xda, 0xe6, 0xfe, 0xb9, 0x1e, 0xd6, 0x7f, 0x9e, 0x81, - 0xb5, 0x19, 0x4b, 0x7e, 0xa5, 0x63, 0x37, 0xdd, 0xae, 0xec, 0x02, 0xed, 0xca, 0xcd, 0x69, 0xd7, - 0xe5, 0x96, 0xe4, 0xea, 0x16, 0x77, 0xe1, 0x73, 0x97, 0xee, 0x09, 0x57, 0x0c, 0x75, 0x4a, 0x68, - 0x6e, 0x5a, 0xe8, 0x6f, 0x65, 0xe0, 0xf6, 0x55, 0xf6, 0xfe, 0xff, 0xbb, 0x5e, 0x4d, 0xb7, 0xb0, - 0xf9, 0x6e, 0x54, 0x48, 0x50, 0x85, 0x92, 0xfe, 0x6a, 0x95, 0x2e, 0xe4, 0x1e, 0x7a, 0xcf, 0x5d, - 0x95, 0x89, 0x36, 0x84, 0xa9, 0xef, 0xf5, 0x1b, 0x62, 0xec, 0xd8, 0x74, 0x46, 0x7a, 0x0b, 0xa0, - 0x45, 0x71, 0x5d, 0x78, 0xcd, 0x66, 0x73, 0xf7, 0xa0, 0xdb, 0x66, 0x4b, 0x49, 0x27, 0xf6, 0x93, - 0xd0, 0x10, 0x37, 0x0f, 0xa1, 0x18, 0x5f, 0x7c, 0xd8, 0x33, 0xfd, 0x53, 0x4b, 0x9d, 0x44, 0x2e, - 0x43, 0xf9, 0x50, 0x87, 0x50, 0xea, 0x55, 0x1f, 0x75, 0x0f, 0xf6, 0x55, 0xd2, 0x7b, 0xeb, 0xa0, - 0xa7, 0xae, 0x4f, 0x74, 0x9f, 0x3e, 0x52, 0x47, 0x62, 0x8f, 0x8c, 0xd6, 0xe1, 0xce, 0x11, 0x51, - 0x14, 0x9a, 0xbf, 0x99, 0x0f, 0x77, 0xb5, 0xa6, 0xa1, 0xcf, 0x38, 0x01, 0x8a, 0x68, 0xcd, 0x3d, - 0x2d, 0x38, 0x7a, 0x0d, 0x95, 0xfc, 0xb6, 0xcf, 0x55, 0x1e, 0x82, 0x65, 0x79, 0x11, 0xb2, 0x87, - 0xc7, 0xaa, 0x12, 0x69, 0x47, 0x8e, 0x1c, 0x75, 0xef, 0xb2, 0x77, 0x2e, 0x59, 0x01, 0x7f, 0x6c, - 0x06, 0x67, 0xac, 0xd8, 0xfc, 0x57, 0x39, 0xa8, 0x44, 0xa6, 0xf2, 0x65, 0x4c, 0x37, 0xe7, 0xb0, - 0xd2, 0xd9, 0xef, 0xb5, 0x8d, 0xfd, 0xd6, 0xae, 0x26, 0xc9, 0xf1, 0x6b, 0xb0, 0xba, 0xdd, 0xd9, - 0x6d, 0x1f, 0xed, 0x1e, 0xb4, 0xb6, 0x34, 0xb2, 0xcc, 0x6f, 0x02, 0xef, 0xec, 0x1d, 0x1e, 0x18, - 0xbd, 0xa3, 0x4e, 0xf7, 0x68, 0xb3, 0xb5, 0xbf, 0xd9, 0xde, 0x6d, 0x6f, 0xb1, 0x22, 0x7f, 0x05, - 0xee, 0xee, 0x1f, 0xf4, 0x3a, 0x07, 0xfb, 0x47, 0xfb, 0x07, 0x47, 0x07, 0x1b, 0x1f, 0xb5, 0x37, - 0x7b, 0xdd, 0xa3, 0xce, 0xfe, 0x11, 0x4a, 0x7d, 0x64, 0xb4, 0xf0, 0x09, 0x2b, 0xf0, 0xbb, 0x70, - 0x5b, 0x53, 0x75, 0xdb, 0xc6, 0xd3, 0xb6, 0x81, 0x42, 0x9e, 0xec, 0xb7, 0x9e, 0xb6, 0x3a, 0xbb, - 0xad, 0x8d, 0xdd, 0x36, 0x5b, 0xe6, 0x77, 0xa0, 0xa1, 0x29, 0x8c, 0x56, 0xaf, 0x7d, 0xb4, 0xdb, - 0xd9, 0xeb, 0xf4, 0x8e, 0xda, 0xdf, 0xdb, 0x6c, 0xb7, 0xb7, 0xda, 0x5b, 0xac, 0xc6, 0xbf, 0x02, - 0x5f, 0xa6, 0x46, 0xe9, 0x46, 0xa4, 0x5f, 0xf6, 0x49, 0xe7, 0xf0, 0xa8, 0x65, 0x6c, 0xee, 0x74, - 0x9e, 0xb6, 0xd9, 0x0a, 0x7f, 0x0d, 0xbe, 0x74, 0x39, 0xe9, 0x56, 0xc7, 0x68, 0x6f, 0xf6, 0x0e, - 0x8c, 0x8f, 0xd9, 0x1a, 0xff, 0x02, 0x7c, 0x6e, 0xa7, 0xb7, 0xb7, 0x7b, 0xf4, 0xcc, 0x38, 0xd8, - 0x7f, 0x74, 0x44, 0x3f, 0xbb, 0x3d, 0xe3, 0xc9, 0x66, 0xef, 0x89, 0xd1, 0x66, 0xc0, 0x1b, 0x70, - 0xf3, 0x70, 0xe3, 0x68, 0xff, 0xa0, 0x77, 0xd4, 0xda, 0xff, 0x78, 0x63, 0xf7, 0x60, 0xf3, 0xf1, - 0xd1, 0xf6, 0x81, 0xb1, 0xd7, 0xea, 0xb1, 0x2a, 0xff, 0x2a, 0xbc, 0xb6, 0xd9, 0x7d, 0xaa, 0x9b, - 0x79, 0xb0, 0x7d, 0x64, 0x1c, 0x3c, 0xeb, 0x1e, 0x1d, 0x18, 0x47, 0x46, 0x7b, 0x97, 0xfa, 0xdc, - 0x8d, 0xdb, 0x5e, 0xe2, 0xb7, 0xa1, 0xde, 0xd9, 0xef, 0x3e, 0xd9, 0xde, 0xee, 0x6c, 0x76, 0xda, - 0xfb, 0xbd, 0xa3, 0xc3, 0xb6, 0xb1, 0xd7, 0xe9, 0x76, 0x91, 0x8c, 0x55, 0x9a, 0xdf, 0x81, 0x62, - 0xc7, 0x3d, 0xb3, 0x25, 0xad, 0x2f, 0xad, 0x8c, 0x3a, 0xe2, 0x0a, 0x41, 0x5a, 0x16, 0xf6, 0xc0, - 0xa5, 0xef, 0x09, 0xd0, 0xea, 0x5a, 0x36, 0x62, 0x44, 0xf3, 0xf7, 0x73, 0x50, 0x53, 0x22, 0xc2, - 0x08, 0xee, 0x1e, 0xac, 0xea, 0x54, 0x68, 0x27, 0x6d, 0xc2, 0xa6, 0xd1, 0xf4, 0xa1, 0x2e, 0x85, - 0x4a, 0x18, 0xb2, 0x24, 0x8a, 0xdf, 0x84, 0xa2, 0xd9, 0x77, 0x30, 0x0c, 0x54, 0xe7, 0x95, 0x1a, - 0xfa, 0xac, 0xb6, 0x0b, 0xed, 0xa2, 0x22, 0xec, 0x7b, 0xee, 0x66, 0x74, 0xa5, 0x24, 0x85, 0xe3, - 0x9f, 0xc0, 0xad, 0x08, 0x6e, 0xbb, 0x7d, 0xff, 0x62, 0x1c, 0x7d, 0x49, 0xaf, 0x34, 0x37, 0x99, - 0xb0, 0x6d, 0x3b, 0x22, 0x45, 0x68, 0x5c, 0x26, 0x80, 0x3f, 0x02, 0xb0, 0x69, 0xb0, 0xc8, 0x3f, - 0x9a, 0x7f, 0x6f, 0x3a, 0x35, 0x9a, 0x1a, 0xd2, 0x6e, 0x60, 0xf4, 0x1b, 0x37, 0x88, 0x01, 0xda, - 0xdd, 0xc7, 0xfa, 0xc3, 0x7b, 0xcb, 0x46, 0x04, 0x37, 0x1f, 0x00, 0xc4, 0x5c, 0x9c, 0xc1, 0x32, - 0xfa, 0x16, 0xad, 0x60, 0x4f, 0x8c, 0x8e, 0x85, 0xaf, 0xaa, 0xf8, 0x14, 0xe6, 0x11, 0x72, 0xb0, - 0x4c, 0xf3, 0x8f, 0x32, 0x89, 0x38, 0x5c, 0xc5, 0xd9, 0x57, 0xee, 0x40, 0xf3, 0xce, 0x84, 0x30, - 0x12, 0xd6, 0x83, 0xaa, 0x1d, 0x23, 0x0d, 0xf2, 0x43, 0xe0, 0xf6, 0xec, 0x50, 0xe6, 0x17, 0x1c, - 0xca, 0x39, 0xbc, 0xd3, 0x29, 0xfd, 0xc2, 0x6c, 0x4a, 0xff, 0x0e, 0xc0, 0xc0, 0xf1, 0x8e, 0xf5, - 0xb9, 0x62, 0x51, 0xd7, 0xfd, 0x44, 0x98, 0xa6, 0x03, 0xe5, 0xf0, 0x2b, 0x82, 0xa8, 0x63, 0xf4, - 0x1d, 0xc1, 0x28, 0xc1, 0xa9, 0x20, 0xbe, 0x03, 0x2b, 0x22, 0xdd, 0xe6, 0xec, 0x82, 0x6d, 0x9e, - 0xe2, 0x6b, 0x7e, 0x03, 0xd6, 0x66, 0x88, 0x70, 0x10, 0xc7, 0xa6, 0x8c, 0x3e, 0x25, 0x80, 0xbf, - 0x67, 0x8f, 0xeb, 0x9b, 0xff, 0x31, 0x0b, 0xcb, 0x7b, 0xa6, 0x6b, 0x9f, 0x88, 0x40, 0x86, 0xad, - 0x0d, 0xfa, 0x43, 0x31, 0x32, 0xc3, 0xd6, 0x2a, 0x48, 0x67, 0x3d, 0xb2, 0xc9, 0xf3, 0x84, 0x99, - 0xe3, 0x27, 0x5c, 0x4d, 0x13, 0x39, 0x8c, 0xaa, 0xeb, 0x35, 0x84, 0x73, 0xe7, 0xd8, 0x7d, 0xe1, - 0x06, 0xe1, 0x8a, 0x09, 0xc1, 0xb8, 0x7a, 0xa7, 0x78, 0x45, 0xf5, 0x4e, 0x69, 0x76, 0xfc, 0xef, - 0x42, 0x35, 0xe8, 0xfb, 0x42, 0xb8, 0xc1, 0xd0, 0x93, 0xe1, 0x17, 0x28, 0x93, 0x28, 0x2a, 0xa5, - 0xf3, 0x9e, 0xbb, 0xa8, 0xe3, 0xbb, 0xb6, 0x7b, 0xaa, 0x2b, 0xc4, 0x52, 0x38, 0xd4, 0x41, 0xca, - 0xf9, 0xd8, 0x3f, 0x14, 0x94, 0x6f, 0x28, 0x18, 0x11, 0x4c, 0x59, 0x1d, 0x53, 0x8a, 0x81, 0xe7, - 0xdb, 0x42, 0xa5, 0x36, 0x2b, 0x46, 0x02, 0x83, 0xbc, 0x8e, 0xe9, 0x0e, 0x26, 0xe6, 0x40, 0xe8, - 0xe3, 0xef, 0x08, 0x6e, 0xfe, 0xaf, 0x02, 0x80, 0x5a, 0x0d, 0xc1, 0xd0, 0x1e, 0xd3, 0xd1, 0x8b, - 0xad, 0x6b, 0x8a, 0x6b, 0x06, 0xfd, 0xe6, 0xef, 0xa5, 0xca, 0xfd, 0x67, 0x0f, 0x4b, 0x63, 0xf6, - 0xe9, 0x94, 0x10, 0x0e, 0x8e, 0x29, 0x85, 0x2e, 0x9c, 0xa2, 0xf1, 0xcf, 0x1b, 0x49, 0x14, 0x95, - 0xce, 0x99, 0x52, 0xb4, 0x5d, 0x4b, 0xa5, 0x9c, 0xf2, 0x46, 0x04, 0xd3, 0x85, 0xa1, 0xa0, 0x35, - 0x91, 0x9e, 0x21, 0x5c, 0xf1, 0x3c, 0xba, 0x0b, 0x17, 0xa3, 0xf8, 0x1e, 0xd4, 0xc6, 0xe6, 0xc5, - 0x48, 0xb8, 0x72, 0x4f, 0xc8, 0xa1, 0x67, 0xe9, 0x2a, 0xa7, 0xd7, 0x2e, 0x6f, 0xe0, 0x61, 0x92, - 0xdc, 0x48, 0x73, 0xa3, 0x4e, 0xb8, 0x01, 0xad, 0x12, 0x35, 0x8d, 0x1a, 0xe2, 0x1b, 0x00, 0xea, - 0x57, 0xc2, 0x52, 0xcd, 0x64, 0xa1, 0xcc, 0x91, 0x08, 0x84, 0x7f, 0x66, 0x2b, 0xeb, 0xaa, 0x8c, - 0x54, 0xcc, 0x85, 0xb6, 0x78, 0x12, 0x08, 0xbf, 0x3d, 0x32, 0x6d, 0x47, 0x4f, 0x70, 0x8c, 0xe0, - 0x6f, 0xc3, 0x8d, 0x60, 0x72, 0x8c, 0x3a, 0x73, 0x2c, 0x7a, 0xde, 0xbe, 0x78, 0x1e, 0x38, 0x42, - 0x4a, 0xe1, 0xeb, 0x4a, 0x8a, 0xf9, 0x0f, 0x9b, 0x83, 0xc8, 0x0d, 0xa3, 0xaf, 0x9d, 0xe0, 0xaf, - 0xb8, 0x5c, 0x2b, 0x42, 0xe9, 0x5a, 0x36, 0x96, 0x41, 0xf3, 0xa7, 0x50, 0xba, 0xd4, 0x2d, 0xcb, - 0xbf, 0x0c, 0x5f, 0x4c, 0x11, 0x19, 0xea, 0x60, 0x3a, 0xd8, 0xb6, 0x5d, 0xd3, 0xb1, 0x7f, 0xa8, - 0xca, 0x04, 0x72, 0xcd, 0x31, 0xd4, 0x52, 0x03, 0x47, 0x97, 0x37, 0xe9, 0x97, 0xae, 0xf7, 0x61, - 0xb0, 0xac, 0xe0, 0xae, 0xf4, 0x6d, 0x3a, 0x71, 0x89, 0x30, 0x9b, 0xb8, 0xce, 0x3d, 0x96, 0xe5, - 0xd7, 0x81, 0x29, 0x4c, 0xc7, 0x35, 0xc7, 0xe3, 0xd6, 0x78, 0xec, 0x08, 0x96, 0xa3, 0x8b, 0xb1, - 0x31, 0x56, 0x15, 0xfd, 0xb3, 0x7c, 0xf3, 0x7b, 0x70, 0x8b, 0x46, 0xe6, 0xa9, 0xf0, 0xa3, 0x40, - 0x5b, 0xf7, 0xf5, 0x06, 0xac, 0xa9, 0x5f, 0xfb, 0x9e, 0x54, 0x8f, 0xc9, 0xf9, 0xe4, 0xb0, 0xa2, - 0xd0, 0xe8, 0x7b, 0x75, 0x05, 0x5d, 0x77, 0x8d, 0x70, 0x11, 0x5d, 0xb6, 0xf9, 0x87, 0x45, 0xe0, - 0xb1, 0x42, 0xf4, 0x6c, 0xe1, 0x6f, 0x99, 0xd2, 0x4c, 0x64, 0x4a, 0x6b, 0x97, 0x9e, 0xf5, 0xbf, - 0xb8, 0x52, 0xef, 0x26, 0x14, 0xed, 0x00, 0x43, 0x43, 0x5d, 0xae, 0xab, 0x21, 0xbe, 0x0b, 0x30, - 0x16, 0xbe, 0xed, 0x59, 0xa4, 0x41, 0x85, 0xb9, 0xb7, 0x2e, 0x66, 0x1b, 0xb5, 0x7e, 0x18, 0xf1, - 0x18, 0x09, 0x7e, 0x6c, 0x87, 0x82, 0xd4, 0xc9, 0x79, 0x91, 0x1a, 0x9d, 0x44, 0xf1, 0x37, 0xe0, - 0xda, 0xd8, 0xb7, 0xfb, 0x42, 0x4d, 0xc7, 0x93, 0xc0, 0xda, 0xa4, 0x6f, 0x04, 0x96, 0x88, 0x72, - 0xde, 0x23, 0xd4, 0x40, 0xd3, 0xa5, 0x80, 0x29, 0xa0, 0xb3, 0x62, 0x7d, 0x41, 0x5c, 0x15, 0xb4, - 0xd6, 0x8c, 0xf9, 0x0f, 0xf9, 0x7d, 0x60, 0xfa, 0xc1, 0x9e, 0xed, 0xee, 0x0a, 0x77, 0x20, 0x87, - 0xa4, 0xdc, 0x35, 0x63, 0x06, 0x4f, 0x16, 0x4c, 0x7d, 0x89, 0x49, 0x9d, 0x23, 0x55, 0x8c, 0x08, - 0x56, 0x1f, 0x1d, 0x70, 0x3c, 0xbf, 0x2b, 0x7d, 0x5d, 0x99, 0x1b, 0xc1, 0xe8, 0x43, 0x05, 0xd4, - 0xd6, 0x43, 0xdf, 0xb3, 0x26, 0x74, 0xca, 0xa1, 0x8c, 0xd8, 0x34, 0x3a, 0xa6, 0xdc, 0x33, 0x5d, - 0x5d, 0x2e, 0x59, 0x4b, 0x52, 0x46, 0x68, 0x8a, 0x09, 0xbd, 0x20, 0x16, 0xb8, 0xaa, 0x63, 0xc2, - 0x04, 0x4e, 0xd3, 0xc4, 0xa2, 0x58, 0x44, 0x13, 0xcb, 0xa1, 0xfe, 0x5b, 0xbe, 0x67, 0x5b, 0xb1, - 0x2c, 0x55, 0xb9, 0x33, 0x83, 0x4f, 0xd0, 0xc6, 0x32, 0x79, 0x8a, 0x36, 0x96, 0x7b, 0x1d, 0x0a, - 0xde, 0xc9, 0x89, 0xf0, 0xe9, 0xc3, 0x9b, 0x15, 0x43, 0x01, 0xcd, 0x1f, 0x67, 0x00, 0x62, 0x95, - 0xc0, 0x85, 0x10, 0x43, 0xf1, 0xc2, 0xbf, 0x05, 0xd7, 0x92, 0x68, 0x47, 0x17, 0xc2, 0xd2, 0x6a, - 0x88, 0x1f, 0x6c, 0x99, 0x17, 0x01, 0xcb, 0xea, 0x8b, 0xdb, 0x1a, 0xf7, 0x4c, 0x08, 0xaa, 0x2a, - 0xbc, 0x0e, 0x2c, 0x46, 0xd2, 0x6d, 0xbc, 0x80, 0xe5, 0xd3, 0xa4, 0x1f, 0x0b, 0xd3, 0x0f, 0x58, - 0xa1, 0xb9, 0x03, 0x45, 0x75, 0x04, 0x36, 0xe7, 0xf0, 0xfa, 0xe5, 0x2a, 0x51, 0xfe, 0x76, 0x06, - 0x60, 0x4b, 0x55, 0x4d, 0xe3, 0xde, 0x3e, 0xa7, 0x26, 0x60, 0x9e, 0x9f, 0x65, 0x5a, 0x16, 0x55, - 0x9f, 0xe7, 0xa2, 0xaf, 0xfe, 0x20, 0x88, 0xfa, 0x64, 0x86, 0x95, 0x63, 0x6a, 0x25, 0x46, 0xb0, - 0xda, 0x56, 0x36, 0x3d, 0xd7, 0x15, 0x7d, 0xdc, 0x94, 0xa2, 0x6d, 0x25, 0x42, 0x35, 0x7f, 0x94, - 0x85, 0xca, 0xe6, 0xd0, 0x94, 0xea, 0x23, 0x39, 0xdf, 0x81, 0xf2, 0x48, 0x04, 0x81, 0x39, 0x10, - 0x81, 0x3e, 0xf2, 0x99, 0x3e, 0xaf, 0x8d, 0x68, 0xd7, 0x9f, 0xb8, 0xbe, 0x30, 0x2d, 0xf5, 0x65, - 0xa0, 0x88, 0x4b, 0x49, 0x70, 0x65, 0x14, 0x92, 0xbf, 0x84, 0x04, 0x37, 0xfa, 0x8c, 0xaf, 0x63, - 0x06, 0x8a, 0x24, 0x4a, 0xb7, 0x25, 0x51, 0x8d, 0x3d, 0xa8, 0x26, 0x58, 0xf9, 0x2b, 0x50, 0xf3, - 0x1c, 0x4b, 0x04, 0xea, 0x6e, 0x60, 0xfc, 0x39, 0xc5, 0x14, 0x92, 0x0a, 0x37, 0x70, 0x3d, 0x0b, - 0x5f, 0x9f, 0xde, 0x85, 0x60, 0xf3, 0x37, 0xca, 0x50, 0xc5, 0x46, 0xed, 0xa9, 0x3e, 0xcc, 0x4c, - 0x47, 0x1d, 0x4a, 0x9e, 0x96, 0xac, 0x2f, 0x15, 0x7a, 0x09, 0x99, 0xba, 0x18, 0x24, 0x97, 0x2e, - 0x06, 0xb9, 0x0d, 0x15, 0x75, 0xd4, 0x64, 0xb5, 0x94, 0x7d, 0xcc, 0x19, 0x31, 0x02, 0x9d, 0x98, - 0x91, 0x67, 0x91, 0x95, 0x6e, 0xa9, 0x53, 0x9a, 0x9c, 0x91, 0xc0, 0x50, 0x98, 0xa3, 0xbb, 0x5f, - 0xd5, 0x61, 0x8e, 0x02, 0x55, 0x55, 0xce, 0xd8, 0xb9, 0xe8, 0x79, 0xba, 0xb5, 0x1d, 0x2b, 0xbe, - 0x9b, 0x9d, 0xc6, 0xf3, 0x4d, 0x28, 0xe9, 0x69, 0xd1, 0x67, 0x51, 0x5f, 0x99, 0x33, 0x13, 0x9a, - 0x7c, 0x5d, 0xff, 0xd5, 0xd7, 0xa3, 0x8c, 0x90, 0x93, 0x3f, 0x82, 0xaa, 0x29, 0xa5, 0xd9, 0x1f, - 0x8e, 0xb4, 0x55, 0xcd, 0xcd, 0x39, 0x96, 0x4e, 0x0a, 0x6a, 0x45, 0xd4, 0x46, 0x92, 0x93, 0x6f, - 0x40, 0xc5, 0x17, 0x66, 0xea, 0x64, 0xfc, 0x95, 0x2b, 0xc4, 0x18, 0x21, 0xad, 0x11, 0xb3, 0x45, - 0x5f, 0x16, 0x85, 0xc4, 0x97, 0x45, 0xef, 0x42, 0x55, 0xab, 0x8e, 0x81, 0x8f, 0xd4, 0x17, 0x57, - 0x92, 0xa8, 0xc6, 0x4f, 0x33, 0xb0, 0x92, 0xee, 0xde, 0x9f, 0xc5, 0xb7, 0xf0, 0xbe, 0x15, 0x7f, - 0x0b, 0xef, 0x33, 0x7c, 0x57, 0xee, 0xb7, 0x32, 0x00, 0xf1, 0xc8, 0xe1, 0xde, 0xaa, 0xbe, 0xd9, - 0x15, 0x7a, 0xfb, 0x0a, 0xe2, 0x3b, 0xa9, 0x0f, 0x3d, 0xbc, 0xbd, 0xd0, 0x34, 0x24, 0x7e, 0x26, - 0xca, 0xde, 0x1f, 0xc0, 0x4a, 0x1a, 0x4f, 0xd7, 0x05, 0x3a, 0xbb, 0x6d, 0x95, 0xdb, 0xea, 0xec, - 0xb5, 0x1e, 0xb5, 0xf5, 0x35, 0xb5, 0xce, 0xfe, 0x63, 0x96, 0x6d, 0xfc, 0x71, 0x06, 0x2a, 0xd1, - 0xa4, 0xf0, 0xef, 0x26, 0x67, 0x53, 0x15, 0xc8, 0xbc, 0xb5, 0xc8, 0x6c, 0xc6, 0xbf, 0xda, 0xae, - 0xf4, 0x2f, 0x12, 0x93, 0xdb, 0xf0, 0x60, 0x25, 0xfd, 0x70, 0x8e, 0x99, 0x7d, 0x94, 0x36, 0xb3, - 0x6f, 0x2e, 0xf4, 0xca, 0x30, 0xc4, 0xdd, 0xb5, 0x03, 0xa9, 0x2d, 0xf0, 0xfb, 0xd9, 0xf7, 0x32, - 0x8d, 0xbb, 0xb0, 0x9c, 0x7c, 0x34, 0x7b, 0x53, 0xf5, 0xfe, 0x1f, 0xe7, 0x60, 0x25, 0x5d, 0x63, - 0x42, 0x37, 0xdf, 0x54, 0x7d, 0xd3, 0x81, 0x63, 0x25, 0x6e, 0x0a, 0x30, 0x0c, 0xaf, 0x75, 0x10, - 0x4d, 0x88, 0x35, 0xca, 0x9e, 0x79, 0x23, 0xc1, 0xee, 0x26, 0xbf, 0xf7, 0xf9, 0x06, 0x87, 0xf0, - 0xc6, 0x22, 0x1b, 0xf3, 0x8a, 0xfe, 0xf2, 0xd9, 0x8f, 0xb2, 0xbc, 0x96, 0xa8, 0x57, 0xff, 0x09, - 0x7a, 0x90, 0xab, 0x1b, 0x13, 0xd7, 0x72, 0x84, 0x15, 0x61, 0x7f, 0x9a, 0xc4, 0x46, 0x05, 0xe7, - 0x3f, 0xca, 0xf3, 0x15, 0xa8, 0x74, 0x27, 0xc7, 0xba, 0xd8, 0xfc, 0xaf, 0xe5, 0xf9, 0x4d, 0x58, - 0xd3, 0x54, 0x71, 0x6d, 0x27, 0xfb, 0xeb, 0xb8, 0xab, 0xad, 0xb4, 0xd4, 0x78, 0xe9, 0x86, 0xb2, - 0xbf, 0x91, 0xc7, 0x26, 0xd0, 0x45, 0xf8, 0xbf, 0x49, 0x72, 0xa2, 0x8b, 0x41, 0xec, 0x57, 0xf2, - 0x7c, 0x15, 0xa0, 0xdb, 0x8b, 0x5e, 0xf4, 0x6b, 0x79, 0x5e, 0x85, 0x62, 0xb7, 0x47, 0xd2, 0x7e, - 0x9c, 0xe7, 0x37, 0x80, 0xc5, 0x4f, 0x75, 0xc5, 0xeb, 0xdf, 0x51, 0x8d, 0x89, 0x4a, 0x58, 0xff, - 0x6e, 0x1e, 0xfb, 0x15, 0x8e, 0x32, 0xfb, 0x7b, 0x79, 0xce, 0xa0, 0x9a, 0xc8, 0xc9, 0xb2, 0xbf, - 0x9f, 0xe7, 0x1c, 0x6a, 0x7b, 0x76, 0x10, 0xd8, 0xee, 0x40, 0xf7, 0xe0, 0x57, 0xe9, 0xcd, 0xdb, - 0xd1, 0xdd, 0x26, 0xf6, 0xeb, 0x79, 0x7e, 0x0b, 0x78, 0xf2, 0x1c, 0x4a, 0x3f, 0xf8, 0x0d, 0xe2, - 0x56, 0x3b, 0x69, 0xa0, 0x71, 0xff, 0x80, 0xb8, 0x51, 0x13, 0x34, 0xe2, 0x37, 0x69, 0x40, 0x36, - 0xe3, 0x1a, 0x59, 0x8d, 0xff, 0x09, 0x31, 0x87, 0x93, 0xa9, 0x70, 0x3f, 0xcd, 0xdf, 0xff, 0x5d, - 0x3a, 0x47, 0x48, 0x96, 0x9a, 0xf1, 0x65, 0x28, 0x3b, 0x9e, 0x3b, 0x90, 0xea, 0x3b, 0xab, 0x35, - 0xa8, 0x04, 0x43, 0xcf, 0x97, 0x04, 0xd2, 0xe5, 0x4b, 0x97, 0x2e, 0xe9, 0xab, 0xeb, 0x0a, 0x2a, - 0x1a, 0x54, 0x79, 0x59, 0x69, 0x0e, 0x58, 0x35, 0xaa, 0xee, 0xcd, 0x47, 0x15, 0xc8, 0xf4, 0xb1, - 0x80, 0xf0, 0x32, 0x36, 0x2b, 0x22, 0xe9, 0xc4, 0x77, 0x54, 0x25, 0xb2, 0xc0, 0x48, 0x40, 0x7d, - 0x50, 0x71, 0x3c, 0xc4, 0x80, 0xa3, 0xa2, 0xb0, 0xde, 0xf7, 0x6d, 0x75, 0xcd, 0x57, 0x17, 0xf6, - 0x59, 0xd8, 0x8e, 0xa8, 0x76, 0x85, 0x89, 0xfb, 0xff, 0x30, 0x03, 0xcb, 0xe1, 0x15, 0x79, 0x7b, - 0x60, 0xbb, 0xaa, 0x96, 0x39, 0xfc, 0x7a, 0x6d, 0xdf, 0xb1, 0xc7, 0xe1, 0xd7, 0x20, 0x57, 0xa1, - 0x6a, 0xf9, 0xe6, 0xa0, 0xe5, 0x5a, 0x5b, 0xbe, 0x37, 0x56, 0xcd, 0x56, 0x27, 0x8d, 0xaa, 0x86, - 0xfa, 0xb9, 0x38, 0x46, 0xf2, 0xb1, 0xf0, 0x59, 0x9e, 0x8a, 0x06, 0x87, 0xa6, 0x6f, 0xbb, 0x83, - 0xf6, 0xb9, 0x14, 0x6e, 0xa0, 0x6a, 0xa9, 0xab, 0x50, 0x9a, 0x04, 0xa2, 0x6f, 0x06, 0x82, 0x15, - 0x11, 0x38, 0x9e, 0xd8, 0x8e, 0xb4, 0x5d, 0xf5, 0x11, 0xc6, 0xa8, 0x58, 0xba, 0x8c, 0x3d, 0x33, - 0xc7, 0x36, 0xab, 0xdc, 0xff, 0xb7, 0x19, 0xa8, 0x92, 0x5a, 0xc4, 0xb9, 0xf4, 0xd8, 0x8b, 0xab, - 0x42, 0x69, 0x37, 0xfa, 0x1a, 0x5f, 0x11, 0xb2, 0x07, 0xa7, 0x2a, 0x97, 0xae, 0xd5, 0x42, 0xdd, - 0x65, 0x55, 0x1f, 0xe6, 0xcb, 0xf3, 0xcf, 0xc1, 0x0d, 0x43, 0x8c, 0x3c, 0x29, 0x9e, 0x99, 0xb6, - 0x4c, 0xde, 0x5b, 0x2a, 0x60, 0x18, 0xa8, 0x1e, 0x85, 0x17, 0x95, 0x8a, 0x14, 0x06, 0xe2, 0x6b, - 0x43, 0x4c, 0x09, 0x7b, 0x4f, 0x18, 0x1d, 0x17, 0x96, 0x23, 0x92, 0x8f, 0x3c, 0xdb, 0xc5, 0xb7, - 0xd1, 0xfd, 0x6a, 0xc2, 0xd0, 0xa1, 0x0c, 0xa2, 0xe0, 0xfe, 0x3e, 0xdc, 0x9c, 0x7f, 0x94, 0xa0, - 0x6e, 0x5e, 0xd3, 0x27, 0xa0, 0xe9, 0x26, 0xcb, 0x33, 0xdf, 0x56, 0x57, 0x64, 0x2b, 0x50, 0x38, - 0x78, 0xee, 0x92, 0x5a, 0xac, 0x41, 0x6d, 0xdf, 0x4b, 0xf0, 0xb0, 0xdc, 0xfd, 0x7e, 0xea, 0xf4, - 0x27, 0x1e, 0x94, 0xb0, 0x11, 0x4b, 0x89, 0x5b, 0x5a, 0x19, 0x75, 0xae, 0x40, 0xff, 0xc5, 0x43, - 0x7d, 0x95, 0x42, 0x9f, 0xba, 0x58, 0xea, 0xab, 0x14, 0x51, 0x33, 0xf3, 0xea, 0xf3, 0x5c, 0x6e, - 0x5f, 0x38, 0xc2, 0x62, 0x85, 0xfb, 0xef, 0xc1, 0xaa, 0xee, 0x6a, 0x5f, 0x04, 0x41, 0x78, 0xcb, - 0xe9, 0xd0, 0xb7, 0xcf, 0xd4, 0x97, 0x2f, 0x96, 0xa1, 0x7c, 0x28, 0xfc, 0xc0, 0x73, 0xe9, 0xab, - 0x1f, 0x00, 0xc5, 0xee, 0xd0, 0xf4, 0xf1, 0x1d, 0xf7, 0xbf, 0xa6, 0x07, 0xe9, 0xc9, 0x79, 0xb8, - 0x35, 0xe0, 0xfa, 0xd1, 0x1f, 0xbd, 0x31, 0xa5, 0xa9, 0xc9, 0xa5, 0x2f, 0xcc, 0x11, 0xcb, 0xde, - 0xdf, 0x84, 0x0a, 0x5d, 0x92, 0x7a, 0x6c, 0xbb, 0x16, 0x76, 0x7c, 0x43, 0x17, 0xec, 0xd3, 0xd7, - 0x98, 0xce, 0x68, 0x38, 0xca, 0xea, 0xbb, 0xb5, 0x2c, 0xcb, 0x6f, 0x02, 0x6f, 0x4d, 0xa4, 0x37, - 0x32, 0xe9, 0x72, 0xaf, 0x73, 0xa1, 0xbe, 0x71, 0x9c, 0xbb, 0xff, 0x6d, 0xe0, 0x2a, 0x37, 0x67, - 0x89, 0x73, 0xdb, 0x1d, 0x44, 0x5f, 0x15, 0x00, 0xfa, 0x44, 0x88, 0x25, 0xce, 0xc3, 0x1b, 0x6e, - 0x21, 0x10, 0x7e, 0xa8, 0x64, 0xdb, 0x9b, 0xb8, 0xd8, 0xe8, 0xa7, 0x70, 0x5d, 0xa9, 0x18, 0xf6, - 0x82, 0x6e, 0x8e, 0x5e, 0x9a, 0x30, 0x50, 0x37, 0xdc, 0xe4, 0x24, 0x88, 0x68, 0x59, 0x06, 0x1b, - 0x16, 0x05, 0xdb, 0x31, 0x3e, 0x7b, 0xbf, 0x09, 0xd7, 0xe6, 0x64, 0x3c, 0xc8, 0xa8, 0xab, 0xb8, - 0x8f, 0x2d, 0xdd, 0xff, 0x10, 0xd6, 0x94, 0x19, 0xda, 0x57, 0x77, 0xfb, 0xc2, 0x61, 0x7b, 0xd6, - 0xd9, 0xee, 0xa8, 0x91, 0xde, 0x6c, 0xef, 0xee, 0x3e, 0xd9, 0x6d, 0x19, 0x2c, 0x43, 0xfa, 0x70, - 0xd0, 0x3b, 0xda, 0x3c, 0xd8, 0xdf, 0x6f, 0x6f, 0xf6, 0xda, 0x5b, 0x2c, 0xbb, 0x71, 0xff, 0xdf, - 0xff, 0xfc, 0x4e, 0xe6, 0x67, 0x3f, 0xbf, 0x93, 0xf9, 0x6f, 0x3f, 0xbf, 0x93, 0xf9, 0xf1, 0xa7, - 0x77, 0x96, 0x7e, 0xf6, 0xe9, 0x9d, 0xa5, 0xff, 0xf4, 0xe9, 0x9d, 0xa5, 0x4f, 0xd8, 0xf4, 0x3f, - 0xe2, 0x39, 0x2e, 0x52, 0x50, 0xf1, 0xd6, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xc8, 0xe7, 0x97, - 0xc4, 0xa3, 0x67, 0x00, 0x00, + 0x9b, 0x9f, 0x95, 0x00, 0xe2, 0x23, 0xa4, 0x39, 0x6b, 0x7e, 0x5e, 0x45, 0xc4, 0xcc, 0x81, 0x6e, + 0xee, 0xa5, 0x0f, 0x74, 0xdf, 0x8b, 0x1c, 0x7b, 0x95, 0x5e, 0x9e, 0x2e, 0x0b, 0x8f, 0xdb, 0x34, + 0xed, 0xce, 0xa7, 0x0a, 0x86, 0x0a, 0xd3, 0x05, 0x43, 0x77, 0x67, 0xab, 0x0b, 0xa7, 0x8c, 0x51, + 0x9c, 0xb7, 0x28, 0xa5, 0xf2, 0x16, 0x0d, 0x28, 0xfb, 0xc2, 0xb4, 0x3c, 0xd7, 0xb9, 0x08, 0xcf, + 0x0d, 0x43, 0x98, 0xbf, 0x05, 0x05, 0x49, 0xb7, 0x7c, 0xca, 0xb4, 0x76, 0x5e, 0x30, 0x71, 0x8a, + 0x16, 0x2d, 0x9b, 0x1d, 0xe8, 0x92, 0x40, 0xb5, 0x6b, 0x96, 0x8d, 0x04, 0x86, 0xaf, 0x03, 0xb7, + 0x31, 0x88, 0x73, 0x1c, 0x61, 0x6d, 0x5c, 0x6c, 0xa9, 0xe3, 0x3c, 0xda, 0xd7, 0xcb, 0xc6, 0x9c, + 0x27, 0xe1, 0xfc, 0x2f, 0xc7, 0xf3, 0x4f, 0x4d, 0x3e, 0xb3, 0x03, 0xec, 0x69, 0x8d, 0xdc, 0x97, + 0x08, 0x46, 0xcf, 0x21, 0x5c, 0xb0, 0x6a, 0x2c, 0x49, 0x7b, 0xe3, 0x33, 0xf1, 0x4b, 0x9e, 0x86, + 0xc3, 0xab, 0x12, 0x37, 0xab, 0x24, 0x34, 0x46, 0x90, 0x25, 0xef, 0x7b, 0xee, 0x3e, 0x6a, 0x04, + 0xd3, 0x96, 0x5c, 0xc3, 0xd8, 0xdf, 0xb1, 0x33, 0xf1, 0x4d, 0x87, 0x9e, 0xae, 0x29, 0x4b, 0x1e, + 0x63, 0xf8, 0xdb, 0x70, 0x63, 0x48, 0xea, 0x18, 0x19, 0x03, 0x35, 0xb3, 0x54, 0xdd, 0x9f, 0x33, + 0xe6, 0x3f, 0x6c, 0xfe, 0x61, 0x36, 0x0a, 0xb9, 0x2a, 0x50, 0x38, 0x36, 0x03, 0xbb, 0xaf, 0xf6, + 0x44, 0xed, 0x2a, 0xa9, 0x3d, 0x51, 0x7a, 0x96, 0xc7, 0xb2, 0x18, 0x3d, 0x05, 0x42, 0x1f, 0x02, + 0xc5, 0x37, 0xb1, 0x58, 0x1e, 0x0d, 0x47, 0xa8, 0x7f, 0xaa, 0xd2, 0x88, 0x58, 0x29, 0xa5, 0x67, + 0x45, 0x35, 0x9c, 0x14, 0x9c, 0xd3, 0xc6, 0xc4, 0xca, 0x48, 0xe3, 0x7a, 0x52, 0xa8, 0x84, 0x26, + 0xad, 0x16, 0x06, 0x28, 0x26, 0xbc, 0x5a, 0xc0, 0xaa, 0x18, 0xce, 0x84, 0x42, 0x55, 0x16, 0x32, + 0xa0, 0x60, 0x6f, 0x19, 0xad, 0x45, 0xfa, 0x01, 0xab, 0x61, 0x8b, 0xe2, 0x0b, 0x5e, 0x6c, 0x05, + 0xa5, 0x9a, 0x54, 0xff, 0xb2, 0x8a, 0x3f, 0xcf, 0xa8, 0x2a, 0x86, 0xe1, 0x5b, 0x2d, 0xb4, 0x66, + 0x6b, 0xd8, 0xb2, 0xc8, 0x3d, 0x62, 0x1c, 0xa3, 0xb5, 0xb1, 0x89, 0xa1, 0x93, 0x3d, 0x36, 0x5d, + 0xc9, 0xae, 0x61, 0x57, 0xc7, 0xd6, 0x09, 0xbb, 0x8e, 0x2c, 0xfd, 0xa1, 0x29, 0xd9, 0x0d, 0xa4, + 0xc1, 0x5f, 0x5b, 0xc2, 0x47, 0xfd, 0x62, 0x37, 0x91, 0x46, 0x9a, 0x03, 0x76, 0xab, 0xf9, 0x1b, + 0x71, 0x15, 0xf5, 0x1b, 0x51, 0x50, 0xb3, 0xc8, 0xa2, 0xc3, 0xb0, 0x67, 0x9e, 0x05, 0x68, 0xc3, + 0x9a, 0x2f, 0x7e, 0x38, 0xb1, 0x53, 0x77, 0x0b, 0x72, 0x57, 0x17, 0xaf, 0xcc, 0x72, 0x34, 0xcf, + 0x60, 0x2d, 0x04, 0x9e, 0xd9, 0x72, 0x48, 0xd9, 0x27, 0xfe, 0x56, 0xe2, 0xf2, 0x43, 0x66, 0xee, + 0xa5, 0xb1, 0x48, 0x64, 0x7c, 0xd9, 0x21, 0x3a, 0x5d, 0xc8, 0x2e, 0x70, 0xba, 0xd0, 0xfc, 0xdf, + 0xc9, 0xe3, 0x6a, 0x15, 0xe6, 0x59, 0x51, 0x98, 0x37, 0x7b, 0x7c, 0x1d, 0x1f, 0x18, 0x64, 0x5f, + 0xe6, 0xc0, 0x60, 0x5e, 0x29, 0xc8, 0xfb, 0x18, 0x75, 0xd0, 0x7a, 0x7e, 0xba, 0xc0, 0x61, 0x48, + 0x8a, 0x96, 0x6f, 0xd0, 0x61, 0xb4, 0xd9, 0x55, 0x75, 0x4a, 0x85, 0xb9, 0x57, 0x91, 0x92, 0xa7, + 0xce, 0x9a, 0xd2, 0x48, 0x70, 0x25, 0xac, 0x5f, 0x71, 0x9e, 0xf5, 0xc3, 0x88, 0x5b, 0xdb, 0xc5, + 0x08, 0x56, 0x67, 0x47, 0xea, 0x77, 0x28, 0x9e, 0x2c, 0x43, 0xd9, 0x98, 0xc1, 0xa3, 0x8b, 0x38, + 0x9a, 0x38, 0xd2, 0xd6, 0xc7, 0x23, 0x0a, 0x98, 0xbe, 0x2b, 0x59, 0x99, 0xbd, 0x2b, 0xf9, 0x21, + 0x40, 0x20, 0x70, 0x75, 0x6c, 0xd9, 0x7d, 0xa9, 0xab, 0x99, 0xee, 0x5c, 0xd6, 0x37, 0x7d, 0xa8, + 0x93, 0xe0, 0xc0, 0xf6, 0x8f, 0xcc, 0x73, 0x3a, 0xe8, 0xd5, 0x65, 0x17, 0x11, 0x3c, 0xbd, 0x27, + 0xac, 0xcc, 0xee, 0x09, 0x6f, 0x41, 0x21, 0x40, 0xc7, 0x9b, 0xae, 0xfb, 0x5c, 0x3e, 0xbf, 0xeb, + 0xe4, 0x9d, 0x1b, 0x8a, 0x96, 0xd2, 0x9c, 0x68, 0x35, 0x3d, 0x9f, 0x2e, 0xfa, 0x54, 0x8c, 0x10, + 0x4c, 0xd9, 0xe5, 0x9b, 0x69, 0xbb, 0xdc, 0xb0, 0xa0, 0xa8, 0x8f, 0x2c, 0xa6, 0xd3, 0x0b, 0x61, + 0xb2, 0x33, 0x9b, 0x48, 0x76, 0x46, 0x35, 0xb3, 0xb9, 0x64, 0xcd, 0xec, 0xd4, 0x5d, 0xc0, 0xc2, + 0xcc, 0x5d, 0xc0, 0xe6, 0x27, 0x50, 0x50, 0x91, 0x04, 0x84, 0x4e, 0xac, 0x72, 0x80, 0xb1, 0x53, + 0x2c, 0xc3, 0xaf, 0x03, 0x0b, 0x04, 0x79, 0x48, 0xa2, 0x6b, 0x8e, 0x04, 0x19, 0xc9, 0x2c, 0xaf, + 0xc3, 0x75, 0x45, 0x1b, 0xa4, 0x9f, 0x90, 0x9b, 0xe6, 0xd8, 0xc7, 0xbe, 0xe9, 0x5f, 0xb0, 0x7c, + 0xf3, 0x43, 0x2a, 0x18, 0x08, 0x15, 0xaa, 0x1a, 0xdd, 0xbd, 0x54, 0x66, 0xd9, 0xd2, 0xd6, 0x87, + 0xea, 0x4d, 0x74, 0x8c, 0xa8, 0xaa, 0xf0, 0x28, 0x08, 0xa3, 0x2c, 0xd2, 0x72, 0xd2, 0x33, 0xf8, + 0x33, 0x5b, 0x6f, 0xcd, 0x8d, 0x84, 0x9f, 0x99, 0x2e, 0xab, 0xcb, 0x2c, 0x5a, 0x56, 0xd7, 0x7c, + 0x0c, 0xab, 0x46, 0xda, 0xa6, 0xf3, 0xf7, 0xa0, 0xe4, 0x8d, 0x93, 0x72, 0x5e, 0xa4, 0x97, 0x21, + 0x79, 0xf3, 0xf7, 0x32, 0xb0, 0xdc, 0x71, 0xa5, 0xf0, 0x5d, 0xd3, 0xd9, 0x76, 0xcc, 0x01, 0x7f, + 0x37, 0xb4, 0x52, 0xf3, 0x33, 0x16, 0x49, 0xda, 0xb4, 0xc1, 0x72, 0x74, 0x6a, 0x9e, 0xdf, 0x80, + 0x35, 0x61, 0xd9, 0xd2, 0xf3, 0x95, 0x77, 0x1d, 0x56, 0x3f, 0x5e, 0x07, 0xa6, 0xd0, 0x5d, 0x5a, + 0x12, 0x3d, 0x35, 0xcd, 0x75, 0xb8, 0x9e, 0xc2, 0x86, 0xae, 0x73, 0x96, 0xdf, 0x86, 0x7a, 0xbc, + 0x1b, 0x6d, 0x79, 0xae, 0xec, 0xb8, 0x96, 0x38, 0x27, 0xd7, 0x8c, 0xe5, 0x9a, 0xbf, 0x1e, 0x39, + 0x85, 0x4f, 0x75, 0x6d, 0xa4, 0xef, 0x79, 0xf1, 0xc5, 0x5b, 0x0d, 0x25, 0x2e, 0x78, 0x67, 0x17, + 0xb8, 0xe0, 0xfd, 0x61, 0x7c, 0x49, 0x57, 0x6d, 0x14, 0xaf, 0xcc, 0xdd, 0x7d, 0xa8, 0xa4, 0x4b, + 0xc7, 0x04, 0x5d, 0x91, 0xb8, 0xb1, 0xfb, 0xa6, 0x0e, 0x04, 0xf3, 0x8b, 0xf8, 0xce, 0xaa, 0xfa, + 0xe1, 0x9d, 0xe9, 0x9b, 0x21, 0x8b, 0x95, 0x56, 0xce, 0xb8, 0xb7, 0xf0, 0xd2, 0xee, 0xed, 0x77, + 0xa6, 0x62, 0xae, 0xf2, 0xdc, 0x24, 0xde, 0x15, 0xf7, 0x5e, 0xbf, 0x03, 0xa5, 0xa1, 0x1d, 0x48, + 0xcf, 0x57, 0x77, 0xb1, 0x67, 0xef, 0x8e, 0x25, 0x46, 0x6b, 0x47, 0x11, 0x52, 0x1d, 0x5c, 0xc8, + 0xc5, 0xbf, 0x0f, 0x6b, 0x34, 0xf0, 0x87, 0xb1, 0xd7, 0x10, 0xd4, 0xab, 0x73, 0xeb, 0x0f, 0x13, + 0xa2, 0x36, 0xa6, 0x58, 0x8c, 0x59, 0x21, 0x8d, 0x01, 0x40, 0x3c, 0x3f, 0x33, 0x56, 0xec, 0x73, + 0xdc, 0xc5, 0xbe, 0x09, 0xc5, 0x60, 0x72, 0x1c, 0x9f, 0xe1, 0x69, 0xa8, 0x71, 0x0e, 0x8d, 0x19, + 0xef, 0xe0, 0x50, 0xf8, 0xaa, 0xb9, 0x57, 0x5e, 0x08, 0xff, 0x30, 0x39, 0xf1, 0x4a, 0x39, 0xef, + 0x5e, 0x32, 0x7b, 0x91, 0xe4, 0x84, 0x06, 0x34, 0xde, 0x81, 0x6a, 0x62, 0x50, 0xd1, 0x32, 0x4f, + 0x5c, 0xcb, 0x0b, 0x13, 0xc7, 0xf8, 0x5b, 0x5d, 0x88, 0xb3, 0xc2, 0xd4, 0x31, 0xfd, 0x6e, 0x18, + 0xc0, 0xa6, 0x07, 0xf0, 0x8a, 0xb8, 0xfc, 0x15, 0xa8, 0x25, 0x5c, 0xba, 0x28, 0xa9, 0x98, 0x46, + 0x36, 0xcf, 0xe0, 0x8b, 0x09, 0x71, 0x87, 0xc2, 0x1f, 0xd9, 0x01, 0x6e, 0x24, 0x2a, 0xc4, 0x24, + 0x87, 0xdc, 0x12, 0xae, 0xb4, 0x65, 0x68, 0x41, 0x23, 0x98, 0x7f, 0x0b, 0x0a, 0x63, 0xe1, 0x8f, + 0x02, 0x6d, 0x45, 0xa7, 0x35, 0x68, 0xae, 0xd8, 0xc0, 0x50, 0x3c, 0xcd, 0x7f, 0x92, 0x81, 0xf2, + 0x9e, 0x90, 0x26, 0xfa, 0x0e, 0x7c, 0x6f, 0xea, 0x2d, 0xb3, 0xe7, 0xce, 0x21, 0xe9, 0xba, 0x0e, + 0x7a, 0xd7, 0x3b, 0x9a, 0x5e, 0xc3, 0x3b, 0x4b, 0x71, 0xc3, 0x1a, 0x1b, 0x50, 0xd2, 0xe8, 0xc6, + 0xbb, 0xb0, 0x3a, 0x45, 0x49, 0xe3, 0xa2, 0x7c, 0xfb, 0xee, 0xc5, 0x28, 0x2c, 0x8e, 0x5a, 0x36, + 0xd2, 0xc8, 0x8d, 0x0a, 0x94, 0xc6, 0x8a, 0xa1, 0xf9, 0x87, 0x37, 0xa8, 0x24, 0xc7, 0x3e, 0xb1, + 0xfb, 0xe6, 0xdc, 0x9d, 0xf5, 0x0e, 0x00, 0x6d, 0xcd, 0xaa, 0x70, 0x43, 0x25, 0x7a, 0x13, 0x18, + 0xfe, 0x7e, 0x94, 0xa1, 0xcf, 0xcf, 0x75, 0xaa, 0x92, 0xc2, 0xa7, 0xd3, 0xf4, 0x75, 0x28, 0xd9, + 0x01, 0x65, 0xef, 0x74, 0xb1, 0x53, 0x08, 0xf2, 0x6f, 0x43, 0xd1, 0x1e, 0x8d, 0x3d, 0x5f, 0xea, + 0x14, 0xfe, 0x95, 0x52, 0x3b, 0x44, 0xb9, 0xb3, 0x64, 0x68, 0x1e, 0xe4, 0x16, 0xe7, 0xc4, 0x5d, + 0x7e, 0x31, 0x77, 0xfb, 0x3c, 0xe4, 0x56, 0x3c, 0xfc, 0x7b, 0x50, 0x1b, 0xa8, 0x5a, 0x4f, 0x25, + 0x58, 0x1b, 0x91, 0xaf, 0x5e, 0x25, 0xe4, 0x51, 0x92, 0x61, 0x67, 0xc9, 0x48, 0x4b, 0x40, 0x91, + 0xe8, 0xc0, 0x8b, 0x40, 0xf6, 0xbc, 0x8f, 0x3c, 0xdb, 0xa5, 0x20, 0xf9, 0x05, 0x22, 0x8d, 0x24, + 0x03, 0x8a, 0x4c, 0x49, 0xe0, 0xdf, 0x40, 0x8f, 0x27, 0x90, 0xfa, 0x3a, 0xfc, 0xdd, 0xab, 0x24, + 0xf5, 0x44, 0xa0, 0x2f, 0xb2, 0x07, 0x92, 0x9f, 0x43, 0x23, 0xb1, 0x48, 0xf4, 0x4b, 0x5a, 0xe3, + 0xb1, 0xef, 0x61, 0xa4, 0x5d, 0x23, 0x69, 0xdf, 0xb8, 0x4a, 0xda, 0xe1, 0xa5, 0xdc, 0x3b, 0x4b, + 0xc6, 0x15, 0xb2, 0x79, 0x0f, 0x23, 0x3b, 0xdd, 0x85, 0x5d, 0x61, 0x9e, 0x85, 0x97, 0xe9, 0xef, + 0x2f, 0x34, 0x0a, 0xc4, 0xb1, 0xb3, 0x64, 0x4c, 0xc9, 0xe0, 0xbf, 0x02, 0x6b, 0xa9, 0x77, 0xd2, + 0xfd, 0x59, 0x75, 0xd5, 0xfe, 0xeb, 0x0b, 0x77, 0x03, 0x99, 0x76, 0x96, 0x8c, 0x59, 0x49, 0x7c, + 0x02, 0x5f, 0x98, 0xed, 0xd2, 0x96, 0xe8, 0x3b, 0xb6, 0x2b, 0xf4, 0xad, 0xfc, 0x77, 0x5e, 0x6e, + 0xb4, 0x34, 0xf3, 0xce, 0x92, 0x71, 0xb9, 0x64, 0xfe, 0x57, 0xe1, 0xf6, 0x78, 0xae, 0x89, 0x51, + 0xa6, 0x4b, 0x5f, 0xea, 0x7f, 0x6f, 0xc1, 0x37, 0xcf, 0xf0, 0xef, 0x2c, 0x19, 0x57, 0xca, 0x47, + 0xdf, 0x99, 0x22, 0x68, 0x5d, 0x92, 0xae, 0x00, 0x3a, 0xdf, 0xed, 0x3b, 0x3b, 0xc2, 0xb4, 0xa2, + 0x53, 0x86, 0x18, 0xd1, 0xf8, 0x1f, 0x19, 0x28, 0x6a, 0x7d, 0xbf, 0x1d, 0xd5, 0x19, 0x44, 0xa6, + 0x3b, 0x46, 0xf0, 0x0f, 0xa0, 0x22, 0x7c, 0xdf, 0xf3, 0x37, 0x3d, 0x2b, 0x2c, 0xd1, 0x9c, 0xce, + 0x4d, 0x2b, 0x39, 0xeb, 0xed, 0x90, 0xcc, 0x88, 0x39, 0xf8, 0xfb, 0x00, 0x6a, 0x9d, 0xf7, 0xe2, + 0x9b, 0x45, 0x8d, 0xf9, 0xfc, 0xea, 0xe0, 0x2a, 0xa6, 0x8e, 0x93, 0x79, 0xe1, 0xa9, 0x51, 0x08, + 0x46, 0x01, 0x67, 0x21, 0x11, 0x70, 0xde, 0xd6, 0x79, 0x04, 0x4a, 0xca, 0xe8, 0xfb, 0x75, 0x11, + 0xa2, 0xf1, 0x07, 0x19, 0x28, 0x2a, 0xe3, 0xc1, 0xdb, 0xb3, 0x3d, 0x7a, 0xed, 0xc5, 0x36, 0x67, + 0x7d, 0xba, 0x67, 0xdf, 0x06, 0x50, 0x36, 0x28, 0xd1, 0xb3, 0xdb, 0x53, 0x72, 0x34, 0x6b, 0x58, + 0x14, 0x1d, 0xd3, 0x37, 0x1f, 0xaa, 0x3b, 0x60, 0x94, 0x48, 0x7e, 0xb2, 0xbb, 0xcb, 0x96, 0xf8, + 0x1a, 0xd4, 0x9e, 0xec, 0x3f, 0xde, 0x3f, 0x78, 0xb6, 0x7f, 0xd4, 0x36, 0x8c, 0x03, 0x43, 0xe5, + 0x93, 0x37, 0x5a, 0x5b, 0x47, 0x9d, 0xfd, 0xc3, 0x27, 0x3d, 0x96, 0x6d, 0xfc, 0x8b, 0x0c, 0xd4, + 0x52, 0xb6, 0xeb, 0xcf, 0x77, 0xea, 0x12, 0xc3, 0x9f, 0x9b, 0x3f, 0xfc, 0xf9, 0xcb, 0x86, 0xbf, + 0x30, 0x3d, 0xfc, 0xbf, 0x93, 0x81, 0x5a, 0xca, 0x46, 0x26, 0xa5, 0x67, 0xd2, 0xd2, 0x93, 0x3b, + 0x7d, 0x76, 0x6a, 0xa7, 0x6f, 0xc2, 0x72, 0xf8, 0x7b, 0x3f, 0xce, 0x38, 0xa4, 0x70, 0x49, 0x1a, + 0xba, 0x84, 0x91, 0x4f, 0xd3, 0xd0, 0x45, 0x8c, 0xab, 0x5b, 0x4b, 0x97, 0x4e, 0x03, 0xba, 0x93, + 0xdf, 0xb8, 0xdc, 0x82, 0x5e, 0xd1, 0x85, 0x47, 0x50, 0x1d, 0xc7, 0xcb, 0xf4, 0xe5, 0xdc, 0x92, + 0x24, 0xe7, 0x0b, 0xda, 0xf9, 0xbb, 0x19, 0x58, 0x49, 0xdb, 0xdc, 0xff, 0xaf, 0x87, 0xf5, 0x9f, + 0x65, 0x60, 0x6d, 0xc6, 0x92, 0x5f, 0xe9, 0xd8, 0x4d, 0xb7, 0x2b, 0xbb, 0x40, 0xbb, 0x72, 0x73, + 0xda, 0x75, 0xb9, 0x25, 0xb9, 0xba, 0xc5, 0x5d, 0xf8, 0xc2, 0xa5, 0x7b, 0xc2, 0x15, 0x43, 0x9d, + 0x12, 0x9a, 0x9b, 0x16, 0xfa, 0xdb, 0x19, 0xb8, 0x7d, 0x95, 0xbd, 0xff, 0x7f, 0xae, 0x57, 0xd3, + 0x2d, 0x6c, 0xbe, 0x1b, 0x95, 0x1f, 0x54, 0xa1, 0xa4, 0xbf, 0x75, 0xa5, 0xcb, 0xbf, 0x87, 0xde, + 0x73, 0x57, 0x65, 0xa2, 0x0d, 0x61, 0xea, 0xaf, 0x01, 0x18, 0x62, 0xec, 0xd8, 0x74, 0xb2, 0x7a, + 0x0b, 0xa0, 0x45, 0x71, 0x5d, 0x78, 0x39, 0x67, 0x73, 0xf7, 0xa0, 0xdb, 0x66, 0x4b, 0x49, 0x27, + 0xf6, 0x93, 0xd0, 0x10, 0x37, 0x0f, 0xa1, 0x18, 0x5f, 0x97, 0xd8, 0x33, 0xfd, 0x53, 0x4b, 0x9d, + 0x5f, 0x2e, 0x43, 0xf9, 0x50, 0x87, 0x50, 0xea, 0x55, 0x1f, 0x75, 0x0f, 0xf6, 0x55, 0xd2, 0x7b, + 0xeb, 0xa0, 0xa7, 0x2e, 0x5d, 0x74, 0x9f, 0x3e, 0x52, 0x07, 0x69, 0x8f, 0x8c, 0xd6, 0xe1, 0xce, + 0x11, 0x51, 0x14, 0x9a, 0xbf, 0x95, 0x0f, 0x77, 0xb5, 0xa6, 0xa1, 0x4f, 0x46, 0x01, 0x8a, 0x68, + 0xcd, 0x3d, 0x2d, 0x38, 0x7a, 0x0d, 0x15, 0x0a, 0xb7, 0xcf, 0x55, 0x1e, 0x82, 0x65, 0x79, 0x11, + 0xb2, 0x87, 0xc7, 0xaa, 0x7e, 0x69, 0x47, 0x8e, 0x1c, 0x75, 0x5b, 0xb3, 0x77, 0x2e, 0x59, 0x01, + 0x7f, 0x6c, 0x06, 0x67, 0xac, 0xd8, 0xfc, 0x97, 0x39, 0xa8, 0x44, 0xa6, 0xf2, 0x65, 0x4c, 0x37, + 0xe7, 0xb0, 0xd2, 0xd9, 0xef, 0xb5, 0x8d, 0xfd, 0xd6, 0xae, 0x26, 0xc9, 0xf1, 0x6b, 0xb0, 0xba, + 0xdd, 0xd9, 0x6d, 0x1f, 0xed, 0x1e, 0xb4, 0xb6, 0x34, 0xb2, 0xcc, 0x6f, 0x02, 0xef, 0xec, 0x1d, + 0x1e, 0x18, 0xbd, 0xa3, 0x4e, 0xf7, 0x68, 0xb3, 0xb5, 0xbf, 0xd9, 0xde, 0x6d, 0x6f, 0xb1, 0x22, + 0x7f, 0x05, 0xee, 0xee, 0x1f, 0xf4, 0x3a, 0x07, 0xfb, 0x47, 0xfb, 0x07, 0x47, 0x07, 0x1b, 0x1f, + 0xb5, 0x37, 0x7b, 0xdd, 0xa3, 0xce, 0xfe, 0x11, 0x4a, 0x7d, 0x64, 0xb4, 0xf0, 0x09, 0x2b, 0xf0, + 0xbb, 0x70, 0x5b, 0x53, 0x75, 0xdb, 0xc6, 0xd3, 0xb6, 0x81, 0x42, 0x9e, 0xec, 0xb7, 0x9e, 0xb6, + 0x3a, 0xbb, 0xad, 0x8d, 0xdd, 0x36, 0x5b, 0xe6, 0x77, 0xa0, 0xa1, 0x29, 0x8c, 0x56, 0xaf, 0x7d, + 0xb4, 0xdb, 0xd9, 0xeb, 0xf4, 0x8e, 0xda, 0xdf, 0xdf, 0x6c, 0xb7, 0xb7, 0xda, 0x5b, 0xac, 0xc6, + 0xbf, 0x0a, 0x5f, 0xa1, 0x46, 0xe9, 0x46, 0xa4, 0x5f, 0xf6, 0x49, 0xe7, 0xf0, 0xa8, 0x65, 0x6c, + 0xee, 0x74, 0x9e, 0xb6, 0xd9, 0x0a, 0x7f, 0x0d, 0xbe, 0x7c, 0x39, 0xe9, 0x56, 0xc7, 0x68, 0x6f, + 0xf6, 0x0e, 0x8c, 0x8f, 0xd9, 0x1a, 0xff, 0x25, 0xf8, 0xc2, 0x4e, 0x6f, 0x6f, 0xf7, 0xe8, 0x99, + 0x71, 0xb0, 0xff, 0xe8, 0x88, 0x7e, 0x76, 0x7b, 0xc6, 0x93, 0xcd, 0xde, 0x13, 0xa3, 0xcd, 0x80, + 0x37, 0xe0, 0xe6, 0xe1, 0xc6, 0xd1, 0xfe, 0x41, 0xef, 0xa8, 0xb5, 0xff, 0xf1, 0xc6, 0xee, 0xc1, + 0xe6, 0xe3, 0xa3, 0xed, 0x03, 0x63, 0xaf, 0xd5, 0x63, 0x55, 0xfe, 0x35, 0x78, 0x6d, 0xb3, 0xfb, + 0x54, 0x37, 0xf3, 0x60, 0xfb, 0xc8, 0x38, 0x78, 0xd6, 0x3d, 0x3a, 0x30, 0x8e, 0x8c, 0xf6, 0x2e, + 0xf5, 0xb9, 0x1b, 0xb7, 0xbd, 0xc4, 0x6f, 0x43, 0xbd, 0xb3, 0xdf, 0x7d, 0xb2, 0xbd, 0xdd, 0xd9, + 0xec, 0xb4, 0xf7, 0x7b, 0x47, 0x87, 0x6d, 0x63, 0xaf, 0xd3, 0xed, 0x22, 0x19, 0xab, 0x34, 0xbf, + 0x0b, 0xc5, 0x8e, 0x7b, 0x66, 0x4b, 0x5a, 0x5f, 0x5a, 0x19, 0x75, 0xc4, 0x15, 0x82, 0xb4, 0x2c, + 0xec, 0x81, 0x4b, 0x5f, 0x21, 0xa0, 0xd5, 0xb5, 0x6c, 0xc4, 0x88, 0xe6, 0x1f, 0xe4, 0xa0, 0xa6, + 0x44, 0x84, 0x11, 0xdc, 0x3d, 0x58, 0xd5, 0xa9, 0xd0, 0x4e, 0xda, 0x84, 0x4d, 0xa3, 0xe9, 0xf3, + 0x5e, 0x0a, 0x95, 0x30, 0x64, 0x49, 0x14, 0xbf, 0x09, 0x45, 0xb3, 0xef, 0x60, 0x18, 0xa8, 0x4e, + 0x39, 0x35, 0xf4, 0x79, 0x6d, 0x17, 0xda, 0x45, 0x45, 0xd8, 0xf7, 0xdc, 0xcd, 0xe8, 0x22, 0x4a, + 0x0a, 0xc7, 0x3f, 0x81, 0x5b, 0x11, 0xdc, 0x76, 0xfb, 0xfe, 0xc5, 0x38, 0xfa, 0xfe, 0x5e, 0x69, + 0x6e, 0x32, 0x61, 0xdb, 0x76, 0x44, 0x8a, 0xd0, 0xb8, 0x4c, 0x00, 0x7f, 0x04, 0x60, 0xd3, 0x60, + 0x91, 0x7f, 0x34, 0xff, 0xb6, 0x75, 0x6a, 0x34, 0x35, 0xa4, 0xdd, 0xc0, 0xe8, 0x37, 0x6e, 0x10, + 0x03, 0xb4, 0xbb, 0x8f, 0xf5, 0xe7, 0xfa, 0x96, 0x8d, 0x08, 0x6e, 0x3e, 0x00, 0x88, 0xb9, 0x38, + 0x83, 0x65, 0xf4, 0x2d, 0x5a, 0xc1, 0x9e, 0x18, 0x1d, 0x0b, 0x5f, 0xd5, 0xfe, 0x29, 0xcc, 0x23, + 0xe4, 0x60, 0x99, 0xe6, 0x1f, 0x67, 0x12, 0x71, 0xb8, 0x8a, 0xb3, 0xaf, 0xdc, 0x81, 0xe6, 0x9d, + 0x09, 0x61, 0x24, 0xac, 0x07, 0x55, 0x3b, 0x46, 0x1a, 0xe4, 0x87, 0xc0, 0xed, 0xd9, 0xa1, 0xcc, + 0x2f, 0x38, 0x94, 0x73, 0x78, 0xa7, 0x53, 0xfa, 0x85, 0xd9, 0x94, 0xfe, 0x1d, 0x80, 0x81, 0xe3, + 0x1d, 0xeb, 0xd3, 0xc8, 0xa2, 0xae, 0x16, 0x8a, 0x30, 0x4d, 0x07, 0xca, 0xe1, 0xb7, 0x07, 0x51, + 0xc7, 0xe8, 0xeb, 0x83, 0x51, 0x82, 0x53, 0x41, 0x7c, 0x07, 0x56, 0x44, 0xba, 0xcd, 0xd9, 0x05, + 0xdb, 0x3c, 0xc5, 0xd7, 0xfc, 0x26, 0xac, 0xcd, 0x10, 0xe1, 0x20, 0x8e, 0x4d, 0x19, 0x7d, 0x80, + 0x00, 0x7f, 0xcf, 0x1e, 0xf2, 0x37, 0xff, 0x43, 0x16, 0x96, 0xf7, 0x4c, 0xd7, 0x3e, 0x11, 0x81, + 0x0c, 0x5b, 0x1b, 0xf4, 0x87, 0x62, 0x64, 0x86, 0xad, 0x55, 0x90, 0xce, 0x7a, 0x64, 0x93, 0xe7, + 0x09, 0x33, 0xc7, 0x4f, 0xb8, 0x9a, 0x26, 0x72, 0x18, 0xd5, 0xe4, 0x6b, 0x08, 0xe7, 0xce, 0xb1, + 0xfb, 0xc2, 0x0d, 0xc2, 0x15, 0x13, 0x82, 0x71, 0xcd, 0x4f, 0xf1, 0x8a, 0x9a, 0x9f, 0xd2, 0xec, + 0xf8, 0xdf, 0x85, 0x6a, 0xd0, 0xf7, 0x85, 0x70, 0x83, 0xa1, 0x27, 0xc3, 0xef, 0x56, 0x26, 0x51, + 0x54, 0x80, 0xe7, 0x3d, 0x77, 0x51, 0xc7, 0x77, 0x6d, 0xf7, 0x54, 0xd7, 0x95, 0xa5, 0x70, 0xa8, + 0x83, 0x94, 0xf3, 0xb1, 0x3f, 0x15, 0x94, 0x6f, 0x28, 0x18, 0x11, 0x4c, 0x59, 0x1d, 0x53, 0x8a, + 0x81, 0xe7, 0xdb, 0x42, 0xa5, 0x36, 0x2b, 0x46, 0x02, 0x83, 0xbc, 0x8e, 0xe9, 0x0e, 0x26, 0xe6, + 0x40, 0xe8, 0x43, 0xf3, 0x08, 0x6e, 0xfe, 0xcf, 0x02, 0x80, 0x5a, 0x0d, 0xc1, 0xd0, 0x1e, 0xd3, + 0xd1, 0x8b, 0xad, 0x2b, 0x91, 0x6b, 0x06, 0xfd, 0xe6, 0xef, 0xa5, 0x2e, 0x09, 0xcc, 0x1e, 0x96, + 0xc6, 0xec, 0xd3, 0x29, 0x21, 0x1c, 0x1c, 0x53, 0x0a, 0x5d, 0x6e, 0x45, 0xe3, 0x9f, 0x37, 0x92, + 0x28, 0x2a, 0xb8, 0x33, 0xa5, 0x68, 0xbb, 0x96, 0x4a, 0x39, 0xe5, 0x8d, 0x08, 0xa6, 0x6b, 0x46, + 0x41, 0x6b, 0x22, 0x3d, 0x43, 0xb8, 0xe2, 0x79, 0x74, 0x83, 0x2e, 0x46, 0xf1, 0x3d, 0xa8, 0x8d, + 0xcd, 0x8b, 0x91, 0x70, 0xe5, 0x9e, 0x90, 0x43, 0xcf, 0xd2, 0xb5, 0x51, 0xaf, 0x5d, 0xde, 0xc0, + 0xc3, 0x24, 0xb9, 0x91, 0xe6, 0x46, 0x9d, 0x70, 0x03, 0x5a, 0x25, 0x6a, 0x1a, 0x35, 0xc4, 0x37, + 0x00, 0xd4, 0xaf, 0x84, 0xa5, 0x9a, 0xc9, 0x42, 0x99, 0x23, 0x11, 0x08, 0xff, 0xcc, 0x56, 0xd6, + 0x55, 0x19, 0xa9, 0x98, 0x0b, 0x6d, 0xf1, 0x24, 0x10, 0x7e, 0x7b, 0x64, 0xda, 0x8e, 0x9e, 0xe0, + 0x18, 0xc1, 0xdf, 0x86, 0x1b, 0xc1, 0xe4, 0x18, 0x75, 0xe6, 0x58, 0xf4, 0xbc, 0x7d, 0xf1, 0x3c, + 0x70, 0x84, 0x94, 0xc2, 0xd7, 0xf5, 0x17, 0xf3, 0x1f, 0x36, 0x07, 0x91, 0x1b, 0x46, 0xdf, 0x48, + 0xc1, 0x5f, 0x71, 0x91, 0x57, 0x84, 0xd2, 0x15, 0x70, 0x2c, 0x83, 0xe6, 0x4f, 0xa1, 0x74, 0x81, + 0x5c, 0x96, 0x7f, 0x05, 0xbe, 0x94, 0x22, 0x32, 0xd4, 0xc1, 0x74, 0xb0, 0x6d, 0xbb, 0xa6, 0x63, + 0x7f, 0xaa, 0xca, 0x04, 0x72, 0xcd, 0x31, 0xd4, 0x52, 0x03, 0x47, 0x57, 0x3e, 0xe9, 0x97, 0xae, + 0x12, 0x62, 0xb0, 0xac, 0xe0, 0xae, 0xf4, 0x6d, 0x3a, 0x71, 0x89, 0x30, 0x9b, 0xb8, 0xce, 0x3d, + 0x96, 0xe5, 0xd7, 0x81, 0x29, 0x4c, 0xc7, 0x35, 0xc7, 0xe3, 0xd6, 0x78, 0xec, 0x08, 0x96, 0xa3, + 0xeb, 0xb4, 0x31, 0x56, 0x5d, 0x15, 0x60, 0xf9, 0xe6, 0xf7, 0xe1, 0x16, 0x8d, 0xcc, 0x53, 0xe1, + 0x47, 0x81, 0xb6, 0xee, 0xeb, 0x0d, 0x58, 0x53, 0xbf, 0xf6, 0x3d, 0xa9, 0x1e, 0x93, 0xf3, 0xc9, + 0x61, 0x45, 0xa1, 0xd1, 0xf7, 0xea, 0x0a, 0xba, 0x24, 0x1b, 0xe1, 0x22, 0xba, 0x6c, 0xf3, 0x8f, + 0x8a, 0xc0, 0x63, 0x85, 0xe8, 0xd9, 0xc2, 0xdf, 0x32, 0xa5, 0x99, 0xc8, 0x94, 0xd6, 0x2e, 0x3d, + 0xeb, 0x7f, 0x71, 0x7d, 0xdf, 0x4d, 0x28, 0xda, 0x01, 0x86, 0x86, 0xba, 0xc8, 0x57, 0x43, 0x7c, + 0x17, 0x60, 0x2c, 0x7c, 0xdb, 0xb3, 0x48, 0x83, 0x0a, 0x73, 0xef, 0x6a, 0xcc, 0x36, 0x6a, 0xfd, + 0x30, 0xe2, 0x31, 0x12, 0xfc, 0xd8, 0x0e, 0x05, 0xa9, 0x93, 0xf3, 0x22, 0x35, 0x3a, 0x89, 0xe2, + 0x6f, 0xc0, 0xb5, 0xb1, 0x6f, 0xf7, 0x85, 0x9a, 0x8e, 0x27, 0x81, 0xb5, 0x49, 0x5f, 0x16, 0x2c, + 0x11, 0xe5, 0xbc, 0x47, 0xa8, 0x81, 0xa6, 0x4b, 0x01, 0x53, 0x40, 0x67, 0xc5, 0xfa, 0x5a, 0xb9, + 0x2a, 0x83, 0xad, 0x19, 0xf3, 0x1f, 0xf2, 0xfb, 0xc0, 0xf4, 0x83, 0x3d, 0xdb, 0xdd, 0x15, 0xee, + 0x40, 0x0e, 0x49, 0xb9, 0x6b, 0xc6, 0x0c, 0x9e, 0x2c, 0x98, 0xfa, 0x7e, 0x93, 0x3a, 0x47, 0xaa, + 0x18, 0x11, 0xac, 0x3e, 0x55, 0xe0, 0x78, 0x7e, 0x57, 0xfa, 0xba, 0x9e, 0x37, 0x82, 0xd1, 0x87, + 0x0a, 0xa8, 0xad, 0x87, 0xbe, 0x67, 0x4d, 0xe8, 0x94, 0x43, 0x19, 0xb1, 0x69, 0x74, 0x4c, 0xb9, + 0x67, 0xba, 0xba, 0xc8, 0xb2, 0x96, 0xa4, 0x8c, 0xd0, 0x14, 0x13, 0x7a, 0x41, 0x2c, 0x70, 0x55, + 0xc7, 0x84, 0x09, 0x9c, 0xa6, 0x89, 0x45, 0xb1, 0x88, 0x26, 0x96, 0x43, 0xfd, 0xb7, 0x7c, 0xcf, + 0xb6, 0x62, 0x59, 0xaa, 0xde, 0x67, 0x06, 0x9f, 0xa0, 0x8d, 0x65, 0xf2, 0x14, 0x6d, 0x2c, 0xf7, + 0x3a, 0x14, 0xbc, 0x93, 0x13, 0xe1, 0xd3, 0xe7, 0x3a, 0x2b, 0x86, 0x02, 0x9a, 0x3f, 0xce, 0x00, + 0xc4, 0x2a, 0x81, 0x0b, 0x21, 0x86, 0xe2, 0x85, 0x7f, 0x0b, 0xae, 0x25, 0xd1, 0x8e, 0x2e, 0x9f, + 0xa5, 0xd5, 0x10, 0x3f, 0xd8, 0x32, 0x2f, 0x02, 0x96, 0xd5, 0xd7, 0xbd, 0x35, 0xee, 0x99, 0x10, + 0x54, 0x8b, 0x78, 0x1d, 0x58, 0x8c, 0xa4, 0x3b, 0x7c, 0x01, 0xcb, 0xa7, 0x49, 0x3f, 0x16, 0xa6, + 0x1f, 0xb0, 0x42, 0x73, 0x07, 0x8a, 0xea, 0x08, 0x6c, 0xce, 0xe1, 0xf5, 0xcb, 0x55, 0xa2, 0xfc, + 0xed, 0x0c, 0xc0, 0x96, 0xaa, 0xb5, 0xc6, 0xbd, 0x7d, 0x4e, 0x4d, 0xc0, 0x3c, 0x3f, 0xcb, 0xb4, + 0x2c, 0xaa, 0x59, 0xcf, 0x45, 0xdf, 0x0a, 0x42, 0x10, 0xf5, 0xc9, 0x0c, 0xeb, 0xcd, 0xd4, 0x4a, + 0x8c, 0x60, 0xb5, 0xad, 0x6c, 0x7a, 0xae, 0x2b, 0xfa, 0xb8, 0x29, 0x45, 0xdb, 0x4a, 0x84, 0x6a, + 0xfe, 0x28, 0x0b, 0x95, 0xcd, 0xa1, 0x29, 0xd5, 0xa7, 0x75, 0xbe, 0x0b, 0xe5, 0x91, 0x08, 0x02, + 0x73, 0x20, 0x02, 0x7d, 0xe4, 0x33, 0x7d, 0x5e, 0x1b, 0xd1, 0xae, 0x3f, 0x71, 0x7d, 0x61, 0x5a, + 0xea, 0x7b, 0x42, 0x11, 0x97, 0x92, 0xe0, 0xca, 0x28, 0x24, 0x7f, 0x09, 0x09, 0x6e, 0xf4, 0xf1, + 0x5f, 0xc7, 0x0c, 0x14, 0x49, 0x94, 0x6e, 0x4b, 0xa2, 0x1a, 0x7b, 0x50, 0x4d, 0xb0, 0xf2, 0x57, + 0xa0, 0xe6, 0x39, 0x96, 0x08, 0xd4, 0x8d, 0xc2, 0xf8, 0x23, 0x8c, 0x29, 0x24, 0x15, 0x6e, 0xe0, + 0x7a, 0x16, 0xbe, 0x3e, 0xbd, 0x0b, 0xc1, 0xe6, 0x6f, 0x96, 0xa1, 0x8a, 0x8d, 0xda, 0x53, 0x7d, + 0x98, 0x99, 0x8e, 0x3a, 0x94, 0x3c, 0x2d, 0x59, 0x5f, 0x45, 0xf4, 0x12, 0x32, 0x75, 0x31, 0x48, + 0x2e, 0x5d, 0x0c, 0x72, 0x1b, 0x2a, 0xea, 0xa8, 0xc9, 0x6a, 0x29, 0xfb, 0x98, 0x33, 0x62, 0x04, + 0x3a, 0x31, 0x23, 0xcf, 0x22, 0x2b, 0xdd, 0x52, 0xa7, 0x34, 0x39, 0x23, 0x81, 0xa1, 0x30, 0x47, + 0x77, 0xbf, 0xaa, 0xc3, 0x1c, 0x05, 0xaa, 0xaa, 0x9c, 0xb1, 0x73, 0xd1, 0xf3, 0x74, 0x6b, 0x3b, + 0x56, 0x7c, 0xa3, 0x3b, 0x8d, 0xe7, 0x9b, 0x50, 0xd2, 0xd3, 0xa2, 0xcf, 0xa2, 0xbe, 0x3a, 0x67, + 0x26, 0x34, 0xf9, 0xba, 0xfe, 0xab, 0x2f, 0x55, 0x19, 0x21, 0x27, 0x7f, 0x04, 0x55, 0x53, 0x4a, + 0xb3, 0x3f, 0x1c, 0x69, 0xab, 0x9a, 0x9b, 0x73, 0x2c, 0x9d, 0x14, 0xd4, 0x8a, 0xa8, 0x8d, 0x24, + 0x27, 0xdf, 0x80, 0x8a, 0x2f, 0xcc, 0xd4, 0xc9, 0xf8, 0x2b, 0x57, 0x88, 0x31, 0x42, 0x5a, 0x23, + 0x66, 0x8b, 0xbe, 0x47, 0x0a, 0x89, 0xef, 0x91, 0xde, 0x85, 0xaa, 0x56, 0x1d, 0x03, 0x1f, 0xa9, + 0xef, 0xb4, 0x24, 0x51, 0x8d, 0x9f, 0x66, 0x60, 0x25, 0xdd, 0xbd, 0x3f, 0x8f, 0x2f, 0xe8, 0x7d, + 0x3b, 0xfe, 0x82, 0xde, 0xe7, 0xf8, 0x1a, 0xdd, 0x6f, 0x67, 0x00, 0xe2, 0x91, 0xc3, 0xbd, 0x55, + 0x7d, 0xe9, 0x2b, 0xf4, 0xf6, 0x15, 0xc4, 0x77, 0x52, 0x9f, 0x87, 0x78, 0x7b, 0xa1, 0x69, 0x48, + 0xfc, 0x4c, 0x14, 0xcb, 0x3f, 0x80, 0x95, 0x34, 0x9e, 0x2e, 0x19, 0x74, 0x76, 0xdb, 0x2a, 0xb7, + 0xd5, 0xd9, 0x6b, 0x3d, 0x6a, 0xeb, 0xcb, 0x6d, 0x9d, 0xfd, 0xc7, 0x2c, 0xdb, 0xf8, 0x93, 0x0c, + 0x54, 0xa2, 0x49, 0xe1, 0xdf, 0x4b, 0xce, 0xa6, 0x2a, 0x90, 0x79, 0x6b, 0x91, 0xd9, 0x8c, 0x7f, + 0xb5, 0x5d, 0xe9, 0x5f, 0x24, 0x26, 0xb7, 0xe1, 0xc1, 0x4a, 0xfa, 0xe1, 0x1c, 0x33, 0xfb, 0x28, + 0x6d, 0x66, 0xdf, 0x5c, 0xe8, 0x95, 0x61, 0x88, 0xbb, 0x6b, 0x07, 0x52, 0x5b, 0xe0, 0xf7, 0xb3, + 0xef, 0x65, 0x1a, 0x77, 0x61, 0x39, 0xf9, 0x68, 0xf6, 0x7e, 0xeb, 0xfd, 0x3f, 0xc9, 0xc1, 0x4a, + 0xba, 0xc6, 0x84, 0xee, 0xcb, 0xa9, 0xfa, 0xa6, 0x03, 0xc7, 0x4a, 0xdc, 0x2f, 0x60, 0x18, 0x5e, + 0xeb, 0x20, 0x9a, 0x10, 0x6b, 0x94, 0x3d, 0xf3, 0x46, 0x82, 0xdd, 0x4d, 0x7e, 0x25, 0xf4, 0x0d, + 0x0e, 0xe1, 0x3d, 0x47, 0x36, 0xe6, 0x15, 0xfd, 0xbd, 0xb4, 0x1f, 0x65, 0x79, 0x2d, 0x51, 0xe5, + 0xfe, 0x13, 0xf4, 0x20, 0x57, 0x37, 0x26, 0xae, 0xe5, 0x08, 0x2b, 0xc2, 0xfe, 0x34, 0x89, 0x8d, + 0xca, 0xd4, 0x7f, 0x94, 0xe7, 0x2b, 0x50, 0xe9, 0x4e, 0x8e, 0x75, 0x89, 0xfa, 0x5f, 0xcb, 0xf3, + 0x9b, 0xb0, 0xa6, 0xa9, 0xe2, 0xda, 0x4e, 0xf6, 0xd7, 0x71, 0x57, 0x5b, 0x69, 0xa9, 0xf1, 0xd2, + 0x0d, 0x65, 0x7f, 0x23, 0x8f, 0x4d, 0xa0, 0xeb, 0xf3, 0x7f, 0x93, 0xe4, 0x44, 0xd7, 0x89, 0xd8, + 0xaf, 0xe6, 0xf9, 0x2a, 0x40, 0xb7, 0x17, 0xbd, 0xe8, 0xd7, 0xf3, 0xbc, 0x0a, 0xc5, 0x6e, 0x8f, + 0xa4, 0xfd, 0x38, 0xcf, 0x6f, 0x00, 0x8b, 0x9f, 0xea, 0x8a, 0xd7, 0xbf, 0xa3, 0x1a, 0x13, 0x95, + 0xb0, 0xfe, 0xdd, 0x3c, 0xf6, 0x2b, 0x1c, 0x65, 0xf6, 0xf7, 0xf2, 0x9c, 0x41, 0x35, 0x91, 0x93, + 0x65, 0x7f, 0x3f, 0xcf, 0x39, 0xd4, 0xf6, 0xec, 0x20, 0xb0, 0xdd, 0x81, 0xee, 0xc1, 0xaf, 0xd1, + 0x9b, 0xb7, 0xa3, 0x1b, 0x51, 0xec, 0x37, 0xf2, 0xfc, 0x16, 0xf0, 0xe4, 0x39, 0x94, 0x7e, 0xf0, + 0x9b, 0xc4, 0xad, 0x76, 0xd2, 0x40, 0xe3, 0xfe, 0x01, 0x71, 0xa3, 0x26, 0x68, 0xc4, 0x6f, 0xd1, + 0x80, 0x6c, 0xc6, 0x35, 0xb2, 0x1a, 0xff, 0x13, 0x62, 0x0e, 0x27, 0x53, 0xe1, 0x7e, 0x9a, 0xbf, + 0xff, 0x7b, 0x74, 0x8e, 0x90, 0x2c, 0x35, 0xe3, 0xcb, 0x50, 0x76, 0x3c, 0x77, 0x20, 0xd5, 0xd7, + 0x59, 0x6b, 0x50, 0x09, 0x86, 0x9e, 0x2f, 0x09, 0xa4, 0x2b, 0x9b, 0x2e, 0x5d, 0xed, 0x57, 0x97, + 0x1c, 0x54, 0x34, 0xa8, 0xf2, 0xb2, 0xd2, 0x1c, 0xb0, 0x6a, 0x54, 0xdd, 0x9b, 0x8f, 0x2a, 0x90, + 0xe9, 0x13, 0x03, 0xe1, 0x15, 0x6e, 0x56, 0x44, 0xd2, 0x89, 0xef, 0xa8, 0x4a, 0x64, 0x81, 0x91, + 0x80, 0xfa, 0x0c, 0xe3, 0x78, 0x88, 0x01, 0x47, 0x45, 0x61, 0xbd, 0x1f, 0xd8, 0xea, 0x72, 0xb0, + 0x2e, 0xec, 0xb3, 0xb0, 0x1d, 0x51, 0xed, 0x0a, 0x13, 0xf7, 0xff, 0x61, 0x06, 0x96, 0xc3, 0x8b, + 0xf5, 0xf6, 0xc0, 0x76, 0x55, 0x2d, 0x73, 0xf8, 0xcd, 0xdb, 0xbe, 0x63, 0x8f, 0xc3, 0x6f, 0x48, + 0xae, 0x42, 0xd5, 0xf2, 0xcd, 0x41, 0xcb, 0xb5, 0xb6, 0x7c, 0x6f, 0xac, 0x9a, 0xad, 0x4e, 0x1a, + 0x55, 0x0d, 0xf5, 0x73, 0x71, 0x8c, 0xe4, 0x63, 0xe1, 0xb3, 0x3c, 0x15, 0x0d, 0x0e, 0x4d, 0xdf, + 0x76, 0x07, 0xed, 0x73, 0x29, 0xdc, 0x40, 0xd5, 0x52, 0x57, 0xa1, 0x34, 0x09, 0x44, 0xdf, 0x0c, + 0x04, 0x2b, 0x22, 0x70, 0x3c, 0xb1, 0x1d, 0x69, 0xbb, 0xea, 0xd3, 0x8d, 0x51, 0xb1, 0x74, 0x19, + 0x7b, 0x66, 0x8e, 0x6d, 0x56, 0xb9, 0xff, 0x6f, 0x32, 0x50, 0x25, 0xb5, 0x88, 0x73, 0xe9, 0xb1, + 0x17, 0x57, 0x85, 0xd2, 0x6e, 0xf4, 0x0d, 0xbf, 0x22, 0x64, 0x0f, 0x4e, 0x55, 0x2e, 0x5d, 0xab, + 0x85, 0xba, 0x01, 0xab, 0x3e, 0xe7, 0x97, 0xe7, 0x5f, 0x80, 0x1b, 0x86, 0x18, 0x79, 0x52, 0x3c, + 0x33, 0x6d, 0x99, 0xbc, 0xed, 0x54, 0xc0, 0x30, 0x50, 0x3d, 0x0a, 0xaf, 0x37, 0x15, 0x29, 0x0c, + 0xc4, 0xd7, 0x86, 0x98, 0x12, 0xf6, 0x9e, 0x30, 0x3a, 0x2e, 0x2c, 0x47, 0x24, 0x1f, 0x79, 0xb6, + 0x8b, 0x6f, 0xa3, 0x5b, 0xd9, 0x84, 0xa1, 0x43, 0x19, 0x44, 0xc1, 0xfd, 0x7d, 0xb8, 0x39, 0xff, + 0x28, 0x41, 0xdd, 0xd7, 0xa6, 0x0f, 0x47, 0xd3, 0xfd, 0x97, 0x67, 0xbe, 0xad, 0x2e, 0xd6, 0x56, + 0xa0, 0x70, 0xf0, 0xdc, 0x25, 0xb5, 0x58, 0x83, 0xda, 0xbe, 0x97, 0xe0, 0x61, 0xb9, 0xfb, 0xfd, + 0xd4, 0xe9, 0x4f, 0x3c, 0x28, 0x61, 0x23, 0x96, 0x12, 0x77, 0xbb, 0x32, 0xea, 0x5c, 0x81, 0xfe, + 0xf7, 0x87, 0xfa, 0x96, 0x85, 0x3e, 0x75, 0xb1, 0xd4, 0xb7, 0x2c, 0xa2, 0x66, 0xe6, 0xd5, 0x47, + 0xbd, 0xdc, 0xbe, 0x70, 0x84, 0xc5, 0x0a, 0xf7, 0xdf, 0x83, 0x55, 0xdd, 0xd5, 0xbe, 0x08, 0x82, + 0xf0, 0x6e, 0xd4, 0xa1, 0x6f, 0x9f, 0xa9, 0xef, 0x65, 0x2c, 0x43, 0xf9, 0x50, 0xf8, 0x81, 0xe7, + 0xd2, 0xb7, 0x42, 0x00, 0x8a, 0xdd, 0xa1, 0xe9, 0xe3, 0x3b, 0xee, 0x7f, 0x5d, 0x0f, 0xd2, 0x93, + 0xf3, 0x70, 0x6b, 0xc0, 0xf5, 0xa3, 0x3f, 0x95, 0x63, 0x4a, 0x53, 0x93, 0x4b, 0x5f, 0x98, 0x23, + 0x96, 0xbd, 0xbf, 0x09, 0x15, 0xba, 0x5a, 0xf5, 0xd8, 0x76, 0x2d, 0xec, 0xf8, 0x86, 0x2e, 0xd8, + 0xa7, 0x6f, 0x38, 0x9d, 0xd1, 0x70, 0x94, 0xd5, 0xd7, 0x6e, 0x59, 0x96, 0xdf, 0x04, 0xde, 0x9a, + 0x48, 0x6f, 0x64, 0xd2, 0x95, 0x60, 0xe7, 0x42, 0x7d, 0x19, 0x39, 0x77, 0xff, 0x3b, 0xc0, 0x55, + 0x6e, 0xce, 0x12, 0xe7, 0xb6, 0x3b, 0x88, 0xbe, 0x45, 0x00, 0xf4, 0x61, 0x11, 0x4b, 0x9c, 0x87, + 0xf7, 0xe2, 0x42, 0x20, 0xfc, 0xbc, 0xc9, 0xb6, 0x37, 0x71, 0xb1, 0xd1, 0x4f, 0xe1, 0xba, 0x52, + 0x31, 0xec, 0x05, 0xdd, 0x37, 0xbd, 0x34, 0x61, 0xa0, 0xee, 0xc5, 0xc9, 0x49, 0x10, 0xd1, 0xb2, + 0x0c, 0x36, 0x2c, 0x0a, 0xb6, 0x63, 0x7c, 0xf6, 0x7e, 0x13, 0xae, 0xcd, 0xc9, 0x78, 0x90, 0x51, + 0x57, 0x71, 0x1f, 0x5b, 0xba, 0xff, 0x21, 0xac, 0x29, 0x33, 0xb4, 0xaf, 0x6e, 0x04, 0x86, 0xc3, + 0xf6, 0xac, 0xb3, 0xdd, 0x51, 0x23, 0xbd, 0xd9, 0xde, 0xdd, 0x7d, 0xb2, 0xdb, 0x32, 0x58, 0x86, + 0xf4, 0xe1, 0xa0, 0x77, 0xb4, 0x79, 0xb0, 0xbf, 0xdf, 0xde, 0xec, 0xb5, 0xb7, 0x58, 0x76, 0xe3, + 0xfe, 0xbf, 0xfb, 0xf9, 0x9d, 0xcc, 0xcf, 0x7e, 0x7e, 0x27, 0xf3, 0x5f, 0x7f, 0x7e, 0x27, 0xf3, + 0xe3, 0xcf, 0xee, 0x2c, 0xfd, 0xec, 0xb3, 0x3b, 0x4b, 0xff, 0xf1, 0xb3, 0x3b, 0x4b, 0x9f, 0xb0, + 0xe9, 0x7f, 0xdf, 0x73, 0x5c, 0xa4, 0xa0, 0xe2, 0xad, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x7d, + 0x56, 0xe3, 0x65, 0xd9, 0x67, 0x00, 0x00, } func (m *SmartBlockSnapshotBase) Marshal() (dAtA []byte, err error) { @@ -13694,6 +13703,13 @@ func (m *ObjectType) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.HeaderRelationsLayout != 0 { + i = encodeVarintModels(dAtA, i, uint64(m.HeaderRelationsLayout)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x90 + } if len(m.PluralName) > 0 { i -= len(m.PluralName) copy(dAtA[i:], m.PluralName) @@ -18196,6 +18212,9 @@ func (m *ObjectType) Size() (n int) { if l > 0 { n += 2 + l + sovModels(uint64(l)) } + if m.HeaderRelationsLayout != 0 { + n += 2 + sovModels(uint64(m.HeaderRelationsLayout)) + } return n } @@ -28656,6 +28675,25 @@ func (m *ObjectType) Unmarshal(dAtA []byte) error { } m.PluralName = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 18: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field HeaderRelationsLayout", wireType) + } + m.HeaderRelationsLayout = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModels + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.HeaderRelationsLayout |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipModels(dAtA[iNdEx:]) diff --git a/pkg/lib/pb/model/protos/models.proto b/pkg/lib/pb/model/protos/models.proto index 92874651f..7bf79198c 100644 --- a/pkg/lib/pb/model/protos/models.proto +++ b/pkg/lib/pb/model/protos/models.proto @@ -774,6 +774,7 @@ message ObjectType { int64 iconColor = 15; // color of object type icon string iconName = 16; // name of object type icon string pluralName = 17; // name of objectType in plural form (can be localized for bundled types) + int64 headerRelationsLayout = 18; // header relations layout type. line = 0, column = 1 enum Layout { basic = 0; diff --git a/space/internal/components/migration/systemobjectreviser/systemobjectreviser.go b/space/internal/components/migration/systemobjectreviser/systemobjectreviser.go index fff61b49e..0950f9100 100644 --- a/space/internal/components/migration/systemobjectreviser/systemobjectreviser.go +++ b/space/internal/components/migration/systemobjectreviser/systemobjectreviser.go @@ -39,6 +39,7 @@ var ( bundle.RelationKeyIconName, bundle.RelationKeyPluralName, bundle.RelationKeyRecommendedLayout, + bundle.RelationKeyHeaderRelationsLayout, } customObjectFilterKeys = []domain.RelationKey{ From 8e4ec0b8faf6012fc06e3a05849cea5c056615a7 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Mon, 19 May 2025 13:31:32 +0200 Subject: [PATCH 091/164] GO-5589: Property keys to relation keys --- core/api/docs/docs.go | 2 +- core/api/docs/openapi.json | 10 ++++++++++ core/api/docs/openapi.yaml | 8 ++++++++ core/api/model/property.go | 2 ++ core/api/service/property.go | 11 ++++++----- core/api/util/key.go | 8 ++++---- 6 files changed, 31 insertions(+), 10 deletions(-) diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go index 91de3e436..cf02ab723 100644 --- a/core/api/docs/docs.go +++ b/core/api/docs/docs.go @@ -6,7 +6,7 @@ import "github.com/swaggo/swag/v2" const docTemplate = `{ "schemes": {{ marshal .Schemes }}, - "components": {"schemas":{"apimodel.AddObjectsToListRequest":{"properties":{"objects":{"description":"The list of object IDs to add to the list","example":["[\"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ\"]"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateApiKeyResponse":{"properties":{"api_key":{"description":"The api key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.CreateChallengeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for api_key","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object; see ListTypes or GetType endpoints for linked properties","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file ids of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["emoji","file","icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag ids of the property; see ListTags endpoint for valid values","example":["['tag_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"key":{"example":"creator","type":"string"},"objects":{"description":"The object ids of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The text to search within object names and content; use types field for type filtering","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to include in results (e.g., \"page\", \"task\", \"bookmark\"); see ListTypes endpoint for valid values","example":["page","task","bookmark"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"key":{"example":"status","type":"string"},"select":{"description":"The selected tag id of the property; see ListTags endpoint for valid values","example":"tag_id","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results by","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting options for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The key of the property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","enum":["basic","profile","action","note","bookmark","set","set","collection","participant"],"type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","enum":["basic","profile","action","note"],"type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object; see ListTypes or GetType endpoints for linked properties","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, + "components": {"schemas":{"apimodel.AddObjectsToListRequest":{"properties":{"objects":{"description":"The list of object IDs to add to the list","example":["[\"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ\"]"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateApiKeyResponse":{"properties":{"api_key":{"description":"The api key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.CreateChallengeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for api_key","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object; see ListTypes or GetType endpoints for linked properties","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"some_user_defined_property_key","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file ids of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["emoji","file","icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag ids of the property; see ListTags endpoint for valid values","example":["['tag_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"key":{"example":"creator","type":"string"},"objects":{"description":"The object ids of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The text to search within object names and content; use types field for type filtering","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to include in results (e.g., \"page\", \"task\", \"bookmark\"); see ListTypes endpoint for valid values","example":["page","task","bookmark"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"key":{"example":"status","type":"string"},"select":{"description":"The selected tag id of the property; see ListTags endpoint for valid values","example":"tag_id","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results by","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting options for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The key of the property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","enum":["basic","profile","action","note","bookmark","set","set","collection","participant"],"type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","enum":["basic","profile","action","note"],"type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object; see ListTypes or GetType endpoints for linked properties","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"key":{"description":"The key to set for the property","example":"some_user_defined_property_key","type":"string"},"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, "info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-api/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"}, "externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"}, "paths": {"/v1/auth/api_keys":{"post":{"description":"After receiving a ` + "`" + `challenge_id` + "`" + ` from the ` + "`" + `/v1/auth/challenges` + "`" + ` endpoint, the client calls this endpoint to provide the corresponding 4-digit code along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ` + "`" + `api_key` + "`" + `. This endpoint is central to the authentication process, as it validates the user's identity and issues a key that can be used for further interactions with the API.","operationId":"create_api_key","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"The 4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateApiKeyResponse"}}},"description":"The API key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Create API Key","tags":["Auth"]}},"/v1/auth/challenges":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid ` + "`" + `app_name` + "`" + `, the server issues a unique ` + "`" + `challenge_id` + "`" + ` and displays a 4-digit code within the Anytype Desktop. The ` + "`" + `challenge_id` + "`" + ` must then be used with the ` + "`" + `/v1/auth/api_keys` + "`" + ` endpoint to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"create_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateChallengeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Create Challenge","tags":["Auth"]}},"/v1/search":{"post":{"description":"Executes a global search over all spaces accessible to the authenticated user. The request body must specify the ` + "`" + `query` + "`" + ` text (currently matching only name and snippet of an object), optional filters on types (e.g., \"page\", \"task\"), and sort directives (default: descending by last modified date). Pagination is controlled via ` + "`" + `offset` + "`" + ` and ` + "`" + `limit` + "`" + ` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"search_global","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/v1/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"list_spaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"create_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/v1/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"get_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"update_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"add_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.AddObjectsToListRequest"}}},"description":"The list of object IDs to add to the list; must be retrieved from SearchSpace or GlobalSearch endpoints or obtained from response context","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"remove_list_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list; must be retrieved from SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"get_list_views","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"get_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for; must be retrieved from ListViews endpoint or omitted if you want to get all objects in the list","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/v1/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"list_members","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/v1/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"get_member","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity; must be retrieved from ListMembers endpoint or obtained from response context","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/v1/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"create_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/v1/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"get_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"update_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/v1/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"list_properties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"create_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"get_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"update_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"list_tags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"create_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"get_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"update_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/v1/spaces/{space_id}/search":{"post":{"description":"Performs a search within a single space (specified by the ` + "`" + `space_id` + "`" + ` path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search ` + "`" + `query` + "`" + `, ` + "`" + `types` + "`" + `, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"search_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/v1/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"list_types","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"create_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"get_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"update_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"list_templates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve templates for; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/v1/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"get_template","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to which the template belongs; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve; must be retrieved from ListTemplates endpoint or obtained from response context","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, diff --git a/core/api/docs/openapi.json b/core/api/docs/openapi.json index 4f5057e39..e989aa667 100644 --- a/core/api/docs/openapi.json +++ b/core/api/docs/openapi.json @@ -157,6 +157,11 @@ "format": { "$ref": "#/components/schemas/apimodel.PropertyFormat" }, + "key": { + "description": "The key of the property", + "example": "some_user_defined_property_key", + "type": "string" + }, "name": { "description": "The name of the property", "example": "Last modified date", @@ -1540,6 +1545,11 @@ }, "apimodel.UpdatePropertyRequest": { "properties": { + "key": { + "description": "The key to set for the property", + "example": "some_user_defined_property_key", + "type": "string" + }, "name": { "description": "The name to set for the property", "example": "Last modified date", diff --git a/core/api/docs/openapi.yaml b/core/api/docs/openapi.yaml index 03698a31f..7e69d9018 100644 --- a/core/api/docs/openapi.yaml +++ b/core/api/docs/openapi.yaml @@ -122,6 +122,10 @@ components: properties: format: $ref: '#/components/schemas/apimodel.PropertyFormat' + key: + description: The key of the property + example: some_user_defined_property_key + type: string name: description: The name of the property example: Last modified date @@ -1141,6 +1145,10 @@ components: type: object apimodel.UpdatePropertyRequest: properties: + key: + description: The key to set for the property + example: some_user_defined_property_key + type: string name: description: The name to set for the property example: Last modified date diff --git a/core/api/model/property.go b/core/api/model/property.go index ac05a799f..9a50012d3 100644 --- a/core/api/model/property.go +++ b/core/api/model/property.go @@ -58,6 +58,8 @@ type Property struct { Key string `json:"key" example:"last_modified_date"` // The key of the property Name string `json:"name" example:"Last modified date"` // The name of the property Format PropertyFormat `json:"format" enums:"text,number,select,multi_select,date,files,checkbox,url,email,phone,objects"` // The format of the property + // Rk is internal-only to simplify FromPropertyApiKey lookup on entry, won't be serialized to property responses + RelationKey string `json:"-" swaggerignore:"true"` } type PropertyLink struct { diff --git a/core/api/service/property.go b/core/api/service/property.go index c6814963c..c2b2df85c 100644 --- a/core/api/service/property.go +++ b/core/api/service/property.go @@ -591,11 +591,12 @@ func (s *Service) getPropertyFromStruct(details *types.Struct) (string, string, } return rk, apiId, apimodel.Property{ - Object: "property", - Id: details.Fields[bundle.RelationKeyId.String()].GetStringValue(), - Key: key, - Name: details.Fields[bundle.RelationKeyName.String()].GetStringValue(), - Format: RelationFormatToPropertyFormat[model.RelationFormat(details.Fields[bundle.RelationKeyRelationFormat.String()].GetNumberValue())], + Object: "property", + Id: details.Fields[bundle.RelationKeyId.String()].GetStringValue(), + Key: key, + Name: details.Fields[bundle.RelationKeyName.String()].GetStringValue(), + Format: RelationFormatToPropertyFormat[model.RelationFormat(details.Fields[bundle.RelationKeyRelationFormat.String()].GetNumberValue())], + RelationKey: rk, // internal-only for simplified lookup } } diff --git a/core/api/util/key.go b/core/api/util/key.go index 82084d3c1..6cee7c96b 100644 --- a/core/api/util/key.go +++ b/core/api/util/key.go @@ -8,8 +8,8 @@ import ( ) // Internal -> API -// "rel-dueDate" -> "due_date" -// "rel-67b0d3e3cda913b84c1299b1" -> "67b0d3e3cda913b84c1299b1" +// "dueDate" -> "due_date" +// "67b0d3e3cda913b84c1299b1" -> "67b0d3e3cda913b84c1299b1" // "ot-page" -> "page" // "ot-67b0d3e3cda913b84c1299b1" -> "67b0d3e3cda913b84c1299b1" // "opt-67b0d3e3cda913b84c1299b1" -> "67b0d3e3cda913b84c1299b1" @@ -18,7 +18,7 @@ const ( propPrefix = "" typePrefix = "" tagPrefix = "" - internalRelationPrefix = "rel-" + internalRelationPrefix = "" // interally, we're using rk instead of uk when working with relations from api, where no "rel-" prefix exists internalObjectTypePrefix = "ot-" internalRelationOptionPrefix = "opt-" ) @@ -33,7 +33,7 @@ func ToPropertyApiKey(internalKey string) string { } func FromPropertyApiKey(apiKey string) string { - return fromApiKey(propPrefix, "", apiKey) // interally, we don't prefix relation keys + return fromApiKey(propPrefix, internalRelationPrefix, apiKey) } func ToTypeApiKey(internalKey string) string { From d5cb9c8568f74d0d423e2b001c03790a1277edc8 Mon Sep 17 00:00:00 2001 From: Roman Khafizianov Date: Mon, 19 May 2025 13:15:06 +0200 Subject: [PATCH 092/164] GO-5629 remove some comments --- core/wallet/applink.go | 25 +++++-------------------- 1 file changed, 5 insertions(+), 20 deletions(-) diff --git a/core/wallet/applink.go b/core/wallet/applink.go index e02d858cf..686253916 100644 --- a/core/wallet/applink.go +++ b/core/wallet/applink.go @@ -27,7 +27,6 @@ const ( var ErrAppLinkNotFound = fmt.Errorf("app link file not found in the account directory") -// AppLinkInfo is what your main app cares about after decryption. type AppLinkInfo struct { AppHash string `json:"-"` // filled at read time AppName string `json:"app_name"` @@ -40,12 +39,10 @@ func (r *wallet) ReadAppLink(appKey string) (*AppLinkInfo, error) { if r.repoPath == "" { return nil, fmt.Errorf("repo path is not set") } - if r.accountKey == nil { return nil, fmt.Errorf("account is not set") } - // readAppLinkFile verifies the signature of the payload to make sure it was not tampered and the account id matches return load(filepath.Join(r.repoPath, appLinkKeysDirectory), appKey, r.accountKey) } @@ -53,12 +50,11 @@ func (r *wallet) PersistAppLink(payload *AppLinkInfo) (appKey string, err error) return generate(filepath.Join(r.repoPath, appLinkKeysDirectory), r.accountKey, payload) } -// ListAppLinks returns a list of all app links for this wallet. +// ListAppLinks returns a list of all app links for this repo directory func (r *wallet) ListAppLinks() ([]*AppLinkInfo, error) { if r.repoPath == "" { return nil, fmt.Errorf("repo path is not set") } - if r.accountKey == nil { return nil, fmt.Errorf("account is not set") } @@ -75,8 +71,6 @@ func (r *wallet) RevokeAppLink(appHash string) error { return revoke(filepath.Join(r.repoPath, appLinkKeysDirectory), appHash) } -// Generate writes a v1 file and returns the base-64 appKey the -// third-party app must keep. func generate(dir string, accountPriv crypto.PrivKey, info *AppLinkInfo) (appKey string, _ error) { if err := os.MkdirAll(dir, 0o700); err != nil && !os.IsExist(err) { return "", err @@ -100,8 +94,7 @@ func generate(dir string, accountPriv crypto.PrivKey, info *AppLinkInfo) (appKey return appKey, json.NewEncoder(fp).Encode(&file) } -// Load finds .json, auto-detects the version, -// verifies & decrypts, and returns the info. +// load and verify the app link file func load(dir, appKey string, accountPriv crypto.PrivKey) (*AppLinkInfo, error) { key, err := base64.StdEncoding.DecodeString(appKey) if err != nil { @@ -146,9 +139,9 @@ func load(dir, appKey string, accountPriv crypto.PrivKey) (*AppLinkInfo, error) } } -// List reads all app link files in the given directory and returns basic info without decrypting payloads. +// List reads all app link files in the directory // For v0 files, only the AppHash field will be populated. -// For v1 files, it will attempt to decrypt and populate all fields if the account private key is provided. +// For v1 files, it will include the whole AppLinkInfo func list(dir string, accountPriv crypto.PrivKey) ([]*AppLinkInfo, error) { // Ensure directory exists if _, err := os.Stat(dir); os.IsNotExist(err) { @@ -220,8 +213,6 @@ func revoke(dir, appHash string) error { return os.Remove(filePath) } -// ──────────────────────────── v0 legacy support ──────────────────────────── - type fileV0 struct { Payload []byte `json:"payload"` // AES-GCM(appKey, AppLinkInfo) Signature []byte `json:"signature"` // Ed25519(accountPriv, payload) @@ -252,11 +243,7 @@ func verifyAndOpenV0(appKey []byte, accountPriv crypto.PrivKey, f *fileV0) (*App return &info, nil } -// ──────────────────────────────── v1 files ───────────────────────────────── - // fileV1 is the JSON-encoded on-disk structure introduced in format-version 1. -// All three data fields (`Info`, `Auth`, `Signature`) are verified during -// `Load`, so any bit-flip or tampering is detected before the payload is used. type fileV1 struct { // Version is the *file-format* version tag and **must be 1** for this layout. // (Future formats should bump this value and add a new struct.) @@ -319,7 +306,7 @@ func verifyAndOpenV1(appKey []byte, accountPriv crypto.PrivKey, f *fileV1) (*App if !hmac.Equal(want, f.Auth) { return nil, errors.New("v1 HMAC mismatch") } - // 3. decrypt Info via sealed-box + // 3. decrypt Info with X25519 plain, err := accountPriv.Decrypt(f.Info) if err != nil { return nil, err @@ -331,8 +318,6 @@ func verifyAndOpenV1(appKey []byte, accountPriv crypto.PrivKey, f *fileV1) (*App return &info, nil } -// ───────────────────────── crypto helpers ────────────────────────────────── - // hmacAuth = HMAC-SHA-256(appKey, ver||info) func hmacAuth(appKey []byte, ver int, info []byte) []byte { mac := hmac.New(sha256.New, appKey) From d86d41dd3d5e258fa38122235f2da016931f551d Mon Sep 17 00:00:00 2001 From: Mikhail Rakhmanov Date: Mon, 19 May 2025 13:49:08 +0200 Subject: [PATCH 093/164] GO-4400 Update any-sync --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 9e216ae1f..8a331e089 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/VividCortex/ewma v1.2.0 github.com/adrium/goheif v0.0.0-20230113233934-ca402e77a786 github.com/anyproto/any-store v0.2.0 - github.com/anyproto/any-sync v0.7.6-0.20250516090737-355ab1fda075 + github.com/anyproto/any-sync v0.8.0 github.com/anyproto/anytype-publish-server/publishclient v0.0.0-20250131145601-de288583ff2a github.com/anyproto/anytype-push-server/pushclient v0.0.0-20250402124745-6451298047f7 github.com/anyproto/go-chash v0.1.0 diff --git a/go.sum b/go.sum index 40df49670..b0ba3771c 100644 --- a/go.sum +++ b/go.sum @@ -80,8 +80,8 @@ github.com/andybalholm/cascadia v1.3.3 h1:AG2YHrzJIm4BZ19iwJ/DAua6Btl3IwJX+VI4kk github.com/andybalholm/cascadia v1.3.3/go.mod h1:xNd9bqTn98Ln4DwST8/nG+H0yuB8Hmgu1YHNnWw0GeA= github.com/anyproto/any-store v0.2.0 h1:M8Eb0dxuEk62lIGZ3k1nADlaPQzmo6ilWLCCcY9WX10= github.com/anyproto/any-store v0.2.0/go.mod h1:N59OGYe/uXRNpr6ytfbBpbC+1viDgSbsVNXevOMxJAM= -github.com/anyproto/any-sync v0.7.6-0.20250516090737-355ab1fda075 h1:fEn/BF3hgLGh8zftEUMI0CCdKSr9zElcTRuNxWI1g8g= -github.com/anyproto/any-sync v0.7.6-0.20250516090737-355ab1fda075/go.mod h1:G6i3PT6pN6lcC5rim5Ed7ppUPuQgU5PyHgiqskrggL0= +github.com/anyproto/any-sync v0.8.0 h1:pSoaQjeu5H6K8aMWBheXhUR+6eNCi9KDHSD6L6Yt29Y= +github.com/anyproto/any-sync v0.8.0/go.mod h1:G6i3PT6pN6lcC5rim5Ed7ppUPuQgU5PyHgiqskrggL0= github.com/anyproto/anytype-publish-server/publishclient v0.0.0-20250131145601-de288583ff2a h1:ZZM+0OUCQMWSLSflpkf0ZMVo3V76qEDDIXPpQOClNs0= github.com/anyproto/anytype-publish-server/publishclient v0.0.0-20250131145601-de288583ff2a/go.mod h1:4fkueCZcGniSMXkrwESO8zzERrh/L7WHimRNWecfGM0= github.com/anyproto/anytype-push-server/pushclient v0.0.0-20250402124745-6451298047f7 h1:oKkEnxnN1jeB1Ty20CTMH3w4WkCrV8dOQy1Myetg7XA= From c9dbd71f85aefec1d5d0f1dd91abb5e999cb8b46 Mon Sep 17 00:00:00 2001 From: Sergey Date: Mon, 19 May 2025 14:08:50 +0200 Subject: [PATCH 094/164] GO-5585: Set default api id value --- core/block/editor/objecttype.go | 1 + core/block/editor/page.go | 8 ++++++++ core/block/object/objectcreator/object_type.go | 5 +++++ core/block/object/objectcreator/relation.go | 7 +++++++ core/block/object/objectcreator/relation_option.go | 5 +++++ core/block/object/objectcreator/util.go | 13 +++++++++++++ go.mod | 2 +- 7 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 core/block/object/objectcreator/util.go diff --git a/core/block/editor/objecttype.go b/core/block/editor/objecttype.go index c1de6d519..67d99340a 100644 --- a/core/block/editor/objecttype.go +++ b/core/block/editor/objecttype.go @@ -34,6 +34,7 @@ var typeRequiredRelations = append(typeAndRelationRequiredRelations, bundle.RelationKeyIconOption, bundle.RelationKeyIconName, bundle.RelationKeyPluralName, + bundle.RelationKeyApiId, ) type ObjectType struct { diff --git a/core/block/editor/page.go b/core/block/editor/page.go index bf9d7e5cd..dee45110b 100644 --- a/core/block/editor/page.go +++ b/core/block/editor/page.go @@ -42,14 +42,20 @@ var typeAndRelationRequiredRelations = []domain.RelationKey{ bundle.RelationKeyLastUsedDate, bundle.RelationKeyRevision, bundle.RelationKeyIsHidden, + bundle.RelationKeyApiId, } var relationRequiredRelations = append(typeAndRelationRequiredRelations, bundle.RelationKeyRelationFormat, bundle.RelationKeyRelationFormatObjectTypes, bundle.RelationKeyRelationKey, + bundle.RelationKeyApiId, ) +var relationOptionRequiredRelations = []domain.RelationKey{ + bundle.RelationKeyApiId, +} + type Page struct { smartblock.SmartBlock basic.AllOperations @@ -136,6 +142,8 @@ func appendRequiredInternalRelations(ctx *smartblock.InitContext) { ctx.RequiredInternalRelationKeys = append(ctx.RequiredInternalRelationKeys, typeRequiredRelations...) case bundle.TypeKeyRelation: ctx.RequiredInternalRelationKeys = append(ctx.RequiredInternalRelationKeys, relationRequiredRelations...) + case bundle.TypeKeyRelationOption: + ctx.RequiredInternalRelationKeys = append(ctx.RequiredInternalRelationKeys, relationOptionRequiredRelations...) } } diff --git a/core/block/object/objectcreator/object_type.go b/core/block/object/objectcreator/object_type.go index 39fd54fe9..0d7f39746 100644 --- a/core/block/object/objectcreator/object_type.go +++ b/core/block/object/objectcreator/object_type.go @@ -3,6 +3,7 @@ package objectcreator import ( "context" "fmt" + "strings" "time" "github.com/anyproto/anytype-heart/core/block/editor/state" @@ -47,6 +48,10 @@ func (s *service) createObjectType(ctx context.Context, space clientspace.Space, object.SetString(bundle.RelationKeyId, id) object.SetInt64(bundle.RelationKeyLayout, int64(model.ObjectType_objectType)) + if strings.TrimSpace(object.GetString(bundle.RelationKeyApiId)) == "" { + object.SetString(bundle.RelationKeyApiId, transliterate(object.GetString(bundle.RelationKeyName))) + } + createState := state.NewDocWithUniqueKey("", nil, uniqueKey).(*state.State) createState.SetDetails(object) setOriginalCreatedTimestamp(createState, details) diff --git a/core/block/object/objectcreator/relation.go b/core/block/object/objectcreator/relation.go index d25e71984..a44b27ff4 100644 --- a/core/block/object/objectcreator/relation.go +++ b/core/block/object/objectcreator/relation.go @@ -3,6 +3,7 @@ package objectcreator import ( "context" "fmt" + "strings" "time" "github.com/globalsign/mgo/bson" @@ -32,6 +33,7 @@ func (s *service) createRelation(ctx context.Context, space clientspace.Space, d if details.GetString(bundle.RelationKeyName) == "" { return "", nil, fmt.Errorf("missing relation name") } + if !details.Has(bundle.RelationKeyCreatedDate) { details.SetInt64(bundle.RelationKeyCreatedDate, time.Now().Unix()) } @@ -50,6 +52,11 @@ func (s *service) createRelation(ctx context.Context, space clientspace.Space, d object.SetString(bundle.RelationKeyUniqueKey, uniqueKey.Marshal()) object.SetString(bundle.RelationKeyId, id) object.SetString(bundle.RelationKeyRelationKey, string(key)) + + if strings.TrimSpace(object.GetString(bundle.RelationKeyApiId)) == "" { + object.SetString(bundle.RelationKeyApiId, transliterate(object.GetString(bundle.RelationKeyName))) + } + if details.GetInt64(bundle.RelationKeyRelationFormat) == int64(model.RelationFormat_status) { object.SetInt64(bundle.RelationKeyRelationMaxCount, 1) } diff --git a/core/block/object/objectcreator/relation_option.go b/core/block/object/objectcreator/relation_option.go index c7156594e..1df3c9a0c 100644 --- a/core/block/object/objectcreator/relation_option.go +++ b/core/block/object/objectcreator/relation_option.go @@ -3,6 +3,7 @@ package objectcreator import ( "context" "fmt" + "strings" "time" "github.com/globalsign/mgo/bson" @@ -38,6 +39,10 @@ func (s *service) createRelationOption(ctx context.Context, space clientspace.Sp object.SetString(bundle.RelationKeyUniqueKey, uniqueKey.Marshal()) object.SetInt64(bundle.RelationKeyLayout, int64(model.ObjectType_relationOption)) + if strings.TrimSpace(object.GetString(bundle.RelationKeyApiId)) == "" { + object.SetString(bundle.RelationKeyApiId, transliterate(object.GetString(bundle.RelationKeyName))) + } + createState := state.NewDocWithUniqueKey("", nil, uniqueKey).(*state.State) createState.SetDetails(object) setOriginalCreatedTimestamp(createState, details) diff --git a/core/block/object/objectcreator/util.go b/core/block/object/objectcreator/util.go new file mode 100644 index 000000000..e73bea0cf --- /dev/null +++ b/core/block/object/objectcreator/util.go @@ -0,0 +1,13 @@ +package objectcreator + +import ( + "strings" + + "github.com/gosimple/unidecode" + "github.com/iancoleman/strcase" +) + +func transliterate(in string) string { + out := unidecode.Unidecode(strings.TrimSpace(in)) + return strcase.ToSnake(out) +} diff --git a/go.mod b/go.mod index 58349cbb6..09969af3f 100644 --- a/go.mod +++ b/go.mod @@ -43,6 +43,7 @@ require ( github.com/golang/snappy v1.0.0 github.com/google/uuid v1.6.0 github.com/gosimple/slug v1.15.0 + github.com/gosimple/unidecode v1.0.1 github.com/grokify/html-strip-tags-go v0.1.0 github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 @@ -191,7 +192,6 @@ require ( github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e // indirect github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c // indirect github.com/gorilla/css v1.0.1 // indirect - github.com/gosimple/unidecode v1.0.1 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/holiman/uint256 v1.2.4 // indirect From 355cc07ac1a1a646414be2ebb36ce768fb291438 Mon Sep 17 00:00:00 2001 From: Mikhail Rakhmanov Date: Mon, 19 May 2025 15:11:18 +0200 Subject: [PATCH 095/164] GO-4400 Fix some linter errors --- core/acl/aclservice.go | 1 + core/space.go | 13 ++++++++----- go.mod | 4 ++-- go.sum | 4 ++++ 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/core/acl/aclservice.go b/core/acl/aclservice.go index 618728717..99af7b824 100644 --- a/core/acl/aclservice.go +++ b/core/acl/aclservice.go @@ -419,6 +419,7 @@ func (a *aclService) Join(ctx context.Context, spaceId, networkId string, invite InviteKey: inviteKey, Metadata: a.spaceService.AccountMetadataPayload(), }) + // nolint: nestif if err != nil { if errors.Is(err, coordinatorproto.ErrSpaceIsDeleted) { return space.ErrSpaceDeleted diff --git a/core/space.go b/core/space.go index 9bede2714..9188f5ba9 100644 --- a/core/space.go +++ b/core/space.go @@ -83,8 +83,9 @@ func (mw *Middleware) SpaceInviteGenerate(cctx context.Context, req *pb.RpcSpace return &pb.RpcSpaceInviteGenerateResponse{ InviteCid: inviteInfo.InviteFileCid, InviteFileKey: inviteInfo.InviteFileKey, - InviteType: model.InviteType(inviteInfo.InviteType), - Permissions: domain.ConvertAclPermissions(inviteInfo.Permissions), + // nolint: gosec + InviteType: model.InviteType(inviteInfo.InviteType), + Permissions: domain.ConvertAclPermissions(inviteInfo.Permissions), } } @@ -126,8 +127,9 @@ func (mw *Middleware) SpaceInviteGetCurrent(cctx context.Context, req *pb.RpcSpa return &pb.RpcSpaceInviteGetCurrentResponse{ InviteCid: inviteInfo.InviteFileCid, InviteFileKey: inviteInfo.InviteFileKey, - InviteType: model.InviteType(inviteInfo.InviteType), - Permissions: domain.ConvertAclPermissions(inviteInfo.Permissions), + // nolint: gosec + InviteType: model.InviteType(inviteInfo.InviteType), + Permissions: domain.ConvertAclPermissions(inviteInfo.Permissions), } } @@ -192,7 +194,8 @@ func (mw *Middleware) SpaceInviteView(cctx context.Context, req *pb.RpcSpaceInvi SpaceName: inviteView.SpaceName, SpaceIconCid: inviteView.SpaceIconCid, IsGuestUserInvite: inviteView.IsGuestUserInvite(), - InviteType: model.InviteType(inviteView.InviteType), + // nolint: gosec + InviteType: model.InviteType(inviteView.InviteType), } } diff --git a/go.mod b/go.mod index 8a331e089..96ddccd14 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/PuerkitoBio/goquery v1.10.2 github.com/VividCortex/ewma v1.2.0 github.com/adrium/goheif v0.0.0-20230113233934-ca402e77a786 - github.com/anyproto/any-store v0.2.0 + github.com/anyproto/any-store v0.2.1 github.com/anyproto/any-sync v0.8.0 github.com/anyproto/anytype-publish-server/publishclient v0.0.0-20250131145601-de288583ff2a github.com/anyproto/anytype-push-server/pushclient v0.0.0-20250402124745-6451298047f7 @@ -289,7 +289,7 @@ require ( gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect lukechampine.com/blake3 v1.4.0 // indirect - modernc.org/libc v1.65.0 // indirect + modernc.org/libc v1.65.6 // indirect modernc.org/mathutil v1.7.1 // indirect modernc.org/memory v1.10.0 // indirect modernc.org/sqlite v1.37.0 // indirect diff --git a/go.sum b/go.sum index b0ba3771c..9fc654e6e 100644 --- a/go.sum +++ b/go.sum @@ -80,6 +80,8 @@ github.com/andybalholm/cascadia v1.3.3 h1:AG2YHrzJIm4BZ19iwJ/DAua6Btl3IwJX+VI4kk github.com/andybalholm/cascadia v1.3.3/go.mod h1:xNd9bqTn98Ln4DwST8/nG+H0yuB8Hmgu1YHNnWw0GeA= github.com/anyproto/any-store v0.2.0 h1:M8Eb0dxuEk62lIGZ3k1nADlaPQzmo6ilWLCCcY9WX10= github.com/anyproto/any-store v0.2.0/go.mod h1:N59OGYe/uXRNpr6ytfbBpbC+1viDgSbsVNXevOMxJAM= +github.com/anyproto/any-store v0.2.1 h1:U5UpUNk2U7pjJFgvw+f0f54pJW94YK4Qyd97eRoWSvc= +github.com/anyproto/any-store v0.2.1/go.mod h1:tfmQEKqqtT+zzkTWANTHxWxB1E3OHcn9RHxhdBZ/KSk= github.com/anyproto/any-sync v0.8.0 h1:pSoaQjeu5H6K8aMWBheXhUR+6eNCi9KDHSD6L6Yt29Y= github.com/anyproto/any-sync v0.8.0/go.mod h1:G6i3PT6pN6lcC5rim5Ed7ppUPuQgU5PyHgiqskrggL0= github.com/anyproto/anytype-publish-server/publishclient v0.0.0-20250131145601-de288583ff2a h1:ZZM+0OUCQMWSLSflpkf0ZMVo3V76qEDDIXPpQOClNs0= @@ -1689,6 +1691,8 @@ modernc.org/gc/v2 v2.6.5 h1:nyqdV8q46KvTpZlsw66kWqwXRHdjIlJOhG6kxiV/9xI= modernc.org/gc/v2 v2.6.5/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito= modernc.org/libc v1.65.0 h1:e183gLDnAp9VJh6gWKdTy0CThL9Pt7MfcR/0bgb7Y1Y= modernc.org/libc v1.65.0/go.mod h1:7m9VzGq7APssBTydds2zBcxGREwvIGpuUBaKTXdm2Qs= +modernc.org/libc v1.65.6 h1:OhJUhmuJ6MVZdqL5qmnd0/my46DKGFhSX4WOR7ijfyE= +modernc.org/libc v1.65.6/go.mod h1:MOiGAM9lrMBT9L8xT1nO41qYl5eg9gCp9/kWhz5L7WA= modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU= modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg= modernc.org/memory v1.10.0 h1:fzumd51yQ1DxcOxSO+S6X7+QTuVU+n8/Aj7swYjFfC4= From ff2e3c34ecdb27fe9d964ce65eeee3e9f2fe5d20 Mon Sep 17 00:00:00 2001 From: Mikhail Rakhmanov Date: Mon, 19 May 2025 15:55:24 +0200 Subject: [PATCH 096/164] GO-4400 Add nolint for permissions --- core/block/editor/workspaces.go | 1 + 1 file changed, 1 insertion(+) diff --git a/core/block/editor/workspaces.go b/core/block/editor/workspaces.go index 7e53bffad..783d74f55 100644 --- a/core/block/editor/workspaces.go +++ b/core/block/editor/workspaces.go @@ -109,6 +109,7 @@ func (w *Workspaces) SetInviteFileInfo(info domain.InviteInfo) (err error) { func (w *Workspaces) GetExistingInviteInfo() (inviteInfo domain.InviteInfo) { details := w.CombinedDetails() inviteInfo.InviteType = domain.InviteType(details.GetInt64(bundle.RelationKeySpaceInviteType)) + // nolint: gosec inviteInfo.Permissions = domain.ConvertParticipantPermissions(model.ParticipantPermissions(details.GetInt64(bundle.RelationKeySpaceInvitePermissions))) inviteInfo.InviteFileCid = details.GetString(bundle.RelationKeySpaceInviteFileCid) inviteInfo.InviteFileKey = details.GetString(bundle.RelationKeySpaceInviteFileKey) From 560a8f3e0366531fa0518bb77db0b965d10780f0 Mon Sep 17 00:00:00 2001 From: kirillston Date: Mon, 19 May 2025 16:16:44 +0200 Subject: [PATCH 097/164] GO-5638 Fix panic on symm key derivation --- core/pushnotification/keys.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/pushnotification/keys.go b/core/pushnotification/keys.go index 3f35728c3..bb15d06de 100644 --- a/core/pushnotification/keys.go +++ b/core/pushnotification/keys.go @@ -1,6 +1,8 @@ package pushnotification import ( + "errors" + "github.com/anyproto/any-sync/util/crypto" "github.com/anyproto/anytype-heart/util/privkey" @@ -20,6 +22,9 @@ func deriveSpaceKey(firstMetadataKey crypto.PrivKey) (crypto.PrivKey, error) { } func deriveSymmetricKey(readKey crypto.SymKey) (crypto.SymKey, error) { + if readKey == nil { + return nil, errors.New("readKey is nil") + } raw, err := readKey.Raw() if err != nil { return nil, err From 7296d82670670a938895f4596d9b071090ff9375 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Mon, 19 May 2025 16:19:57 +0200 Subject: [PATCH 098/164] GO-5589: Refactor property key resolution and validation logic --- core/api/service/property.go | 38 +++++++++++++++++++++++------------- core/api/service/type.go | 2 +- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/core/api/service/property.go b/core/api/service/property.go index c2b2df85c..a028f8fc5 100644 --- a/core/api/service/property.go +++ b/core/api/service/property.go @@ -225,7 +225,7 @@ func (s *Service) UpdateProperty(ctx context.Context, spaceId string, propertyId return apimodel.Property{}, err } - if bundle.HasRelation(domain.RelationKey(util.FromPropertyApiKey(prop.Key))) { + if bundle.HasRelation(domain.RelationKey(prop.RelationKey)) { return apimodel.Property{}, ErrPropertyCannotBeUpdated } @@ -300,14 +300,14 @@ func (s *Service) processProperties(ctx context.Context, spaceId string, entries case apimodel.NumberPropertyLinkValue: key = e.Key if e.Number == nil { - fields[util.FromPropertyApiKey(key)] = pbtypes.ToValue(nil) + fields[s.ResolvePropertyApiKey(propertyMap, key)] = pbtypes.ToValue(nil) continue } raw = *e.Number case apimodel.SelectPropertyLinkValue: key = e.Key if e.Select == nil { - fields[util.FromPropertyApiKey(key)] = pbtypes.ToValue(nil) + fields[s.ResolvePropertyApiKey(propertyMap, key)] = pbtypes.ToValue(nil) continue } raw = *e.Select @@ -321,7 +321,7 @@ func (s *Service) processProperties(ctx context.Context, spaceId string, entries case apimodel.DatePropertyLinkValue: key = e.Key if e.Date == nil { - fields[util.FromPropertyApiKey(key)] = pbtypes.ToValue(nil) + fields[s.ResolvePropertyApiKey(propertyMap, key)] = pbtypes.ToValue(nil) continue } raw = *e.Date @@ -355,7 +355,7 @@ func (s *Service) processProperties(ctx context.Context, spaceId string, entries return nil, util.ErrBadInput("unsupported property link value type " + fmt.Sprintf("%T", e)) } - rk := util.FromPropertyApiKey(key) + rk := s.ResolvePropertyApiKey(propertyMap, key) if _, excluded := excludedSystemProperties[rk]; excluded { continue } @@ -367,7 +367,7 @@ func (s *Service) processProperties(ctx context.Context, spaceId string, entries return nil, util.ErrBadInput(fmt.Sprintf("unknown property key: %q", rk)) } - sanitized, err := s.sanitizeAndValidatePropertyValue(spaceId, key, prop.Format, raw, prop) + sanitized, err := s.sanitizeAndValidatePropertyValue(spaceId, key, prop.Format, raw, prop, propertyMap) if err != nil { return nil, err } @@ -377,7 +377,7 @@ func (s *Service) processProperties(ctx context.Context, spaceId string, entries } // sanitizeAndValidatePropertyValue checks the value for a property according to its format and ensures referenced IDs exist and are valid. -func (s *Service) sanitizeAndValidatePropertyValue(spaceId string, key string, format apimodel.PropertyFormat, value interface{}, property *apimodel.Property) (interface{}, error) { +func (s *Service) sanitizeAndValidatePropertyValue(spaceId string, key string, format apimodel.PropertyFormat, value interface{}, property *apimodel.Property, propertyMap map[string]*apimodel.Property) (interface{}, error) { switch format { case apimodel.PropertyFormatText, apimodel.PropertyFormatUrl, apimodel.PropertyFormatEmail, apimodel.PropertyFormatPhone: str, ok := value.(string) @@ -397,7 +397,7 @@ func (s *Service) sanitizeAndValidatePropertyValue(spaceId string, key string, f if !ok { return nil, util.ErrBadInput("property '" + key + "' must be a string (tag id)") } - if !s.isValidSelectOption(spaceId, property, id) { + if !s.isValidSelectOption(spaceId, property, id, propertyMap) { return nil, util.ErrBadInput("invalid select option for '" + key + "': " + id) } return id, nil @@ -413,7 +413,7 @@ func (s *Service) sanitizeAndValidatePropertyValue(spaceId string, key string, f return nil, util.ErrBadInput("property '" + key + "' must be an array of strings (tag ids)") } id = s.sanitizedString(id) - if !s.isValidSelectOption(spaceId, property, id) { + if !s.isValidSelectOption(spaceId, property, id, propertyMap) { return nil, util.ErrBadInput("invalid multi_select option for '" + key + "': " + id) } validIds = append(validIds, id) @@ -462,14 +462,14 @@ func (s *Service) sanitizeAndValidatePropertyValue(spaceId string, key string, f } // isValidSelectOption checks if the option id is valid for the given property. -func (s *Service) isValidSelectOption(spaceId string, property *apimodel.Property, tagId string) bool { +func (s *Service) isValidSelectOption(spaceId string, property *apimodel.Property, tagId string, propertyMap map[string]*apimodel.Property) bool { fields, err := util.GetFieldsByID(s.mw, spaceId, tagId, []string{bundle.RelationKeyResolvedLayout.String(), bundle.RelationKeyRelationKey.String()}) if err != nil { return false } layout := model.ObjectTypeLayout(fields[bundle.RelationKeyResolvedLayout.String()].GetNumberValue()) - rk := domain.RelationKey(fields[bundle.RelationKeyRelationKey.String()].GetStringValue()) - return util.IsTagLayout(layout) && rk == domain.RelationKey(util.FromPropertyApiKey(property.Key)) + rk := fields[bundle.RelationKeyRelationKey.String()].GetStringValue() + return util.IsTagLayout(layout) && rk == s.ResolvePropertyApiKey(propertyMap, property.Key) } func (s *Service) isValidObjectReference(spaceId string, objectId string) bool { @@ -507,8 +507,7 @@ func (s *Service) getRecommendedPropertiesFromLists(featured, regular *types.Lis if !ok { continue } - rk := util.FromPropertyApiKey(p.Key) - if _, excluded := excludedSystemProperties[rk]; excluded { + if _, excluded := excludedSystemProperties[p.RelationKey]; excluded { continue } props = append(props, *p) @@ -801,6 +800,17 @@ func (s *Service) buildPropertyWithValue(id string, key string, name string, for return nil } +// ResolvePropertyApiKey returns the internal relationKey for a clientKey by looking it up in the propertyMap +// TODO: If not found, this detail shouldn't be set by clients, and strict validation errors +func (s *Service) ResolvePropertyApiKey(propertyMap map[string]*apimodel.Property, clientKey string) string { + if p, ok := propertyMap[clientKey]; ok { + return string(p.RelationKey) + } + return "" + // TODO: enable later for strict validation + // return "", false +} + func transliterate(str string) string { trimmed := strings.TrimSpace(str) ascii := unidecode.Unidecode(trimmed) diff --git a/core/api/service/type.go b/core/api/service/type.go index bbcf4de9b..943f7f5fb 100644 --- a/core/api/service/type.go +++ b/core/api/service/type.go @@ -394,7 +394,7 @@ func (s *Service) buildUpdatedTypeDetails(ctx context.Context, spaceId string, t func (s *Service) buildRelationIds(ctx context.Context, spaceId string, props []apimodel.PropertyLink, propertyMap map[string]*apimodel.Property) ([]string, error) { relationIds := make([]string, 0, len(props)) for _, propLink := range props { - rk := util.FromPropertyApiKey(propLink.Key) + rk := s.ResolvePropertyApiKey(propertyMap, propLink.Key) if propDef, exists := propertyMap[rk]; exists { relationIds = append(relationIds, propDef.Id) continue From ebd48a28a6a6fddce5e31980eee0a4e282c28bc1 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Mon, 19 May 2025 16:21:29 +0200 Subject: [PATCH 099/164] GO-5589: Remove transliterate on API side as it's handled in objectcreator --- core/api/service/property.go | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/core/api/service/property.go b/core/api/service/property.go index a028f8fc5..a96bde503 100644 --- a/core/api/service/property.go +++ b/core/api/service/property.go @@ -9,8 +9,6 @@ import ( "time" "github.com/gogo/protobuf/types" - "github.com/iancoleman/strcase" - "github.com/mozillazg/go-unidecode" apimodel "github.com/anyproto/anytype-heart/core/api/model" "github.com/anyproto/anytype-heart/core/api/pagination" @@ -202,8 +200,6 @@ func (s *Service) CreateProperty(ctx context.Context, spaceId string, request ap if request.Key != "" { details.Fields[bundle.RelationKeyApiId.String()] = pbtypes.String(s.sanitizedString(request.Key)) - } else { - details.Fields[bundle.RelationKeyApiId.String()] = pbtypes.String(transliterate(request.Name)) } resp := s.mw.ObjectCreateRelation(ctx, &pb.RpcObjectCreateRelationRequest{ @@ -810,9 +806,3 @@ func (s *Service) ResolvePropertyApiKey(propertyMap map[string]*apimodel.Propert // TODO: enable later for strict validation // return "", false } - -func transliterate(str string) string { - trimmed := strings.TrimSpace(str) - ascii := unidecode.Unidecode(trimmed) - return strcase.ToSnake(ascii) -} From f780dbdc519984c4d10e715ddf66cd5a90392c43 Mon Sep 17 00:00:00 2001 From: Sergey Date: Mon, 19 May 2025 16:45:18 +0200 Subject: [PATCH 100/164] Fix linter --- core/block/chats/chatrepository/repository.go | 2 -- core/block/chats/chatsubscription/manager.go | 2 +- core/block/editor/chatobject/chatobject.go | 8 +------- core/block/editor/chatobject/chatobject_test.go | 5 ++++- core/block/editor/factory.go | 2 +- 5 files changed, 7 insertions(+), 12 deletions(-) diff --git a/core/block/chats/chatrepository/repository.go b/core/block/chats/chatrepository/repository.go index 7854e5d18..6c815a924 100644 --- a/core/block/chats/chatrepository/repository.go +++ b/core/block/chats/chatrepository/repository.go @@ -99,7 +99,6 @@ func (s *service) Repository(chatObjectId string) (Repository, error) { } return &repository{ - db: crdtDb, collection: collection, arenaPool: s.arenaPool, }, nil @@ -122,7 +121,6 @@ type Repository interface { } type repository struct { - db anystore.DB collection anystore.Collection arenaPool *anyenc.ArenaPool } diff --git a/core/block/chats/chatsubscription/manager.go b/core/block/chats/chatsubscription/manager.go index 2236c8083..74615add1 100644 --- a/core/block/chats/chatsubscription/manager.go +++ b/core/block/chats/chatsubscription/manager.go @@ -120,7 +120,7 @@ func (s *subscriptionManager) UpdateChatState(updater func(*model.ChatState) *mo s.chatStateUpdated = true } -// Flush is called after commiting changes +// Flush is called after committing changes func (s *subscriptionManager) Flush() { if !s.canSend() { return diff --git a/core/block/editor/chatobject/chatobject.go b/core/block/editor/chatobject/chatobject.go index 58ebcdedd..8bf0ccd24 100644 --- a/core/block/editor/chatobject/chatobject.go +++ b/core/block/editor/chatobject/chatobject.go @@ -20,10 +20,8 @@ import ( "github.com/anyproto/anytype-heart/core/block/editor/storestate" "github.com/anyproto/anytype-heart/core/block/source" "github.com/anyproto/anytype-heart/core/domain" - "github.com/anyproto/anytype-heart/core/event" "github.com/anyproto/anytype-heart/core/session" "github.com/anyproto/anytype-heart/pb" - "github.com/anyproto/anytype-heart/pkg/lib/localstore/objectstore/spaceindex" "github.com/anyproto/anytype-heart/pkg/lib/logging" "github.com/anyproto/anytype-heart/pkg/lib/pb/model" ) @@ -71,11 +69,9 @@ type storeObject struct { storeSource source.Store repositoryService chatrepository.Service store *storestate.StoreState - eventSender event.Sender chatSubscriptionService chatsubscription.Service subscription chatsubscription.Manager crdtDb anystore.DB - spaceIndex spaceindex.Store chatHandler *ChatHandler repository chatrepository.Repository @@ -84,19 +80,17 @@ type storeObject struct { componentCtxCancel context.CancelFunc } -func New(sb smartblock.SmartBlock, accountService AccountService, eventSender event.Sender, crdtDb anystore.DB, repositoryService chatrepository.Service, spaceIndex spaceindex.Store, chatSubscriptionService chatsubscription.Service) StoreObject { +func New(sb smartblock.SmartBlock, accountService AccountService, crdtDb anystore.DB, repositoryService chatrepository.Service, chatSubscriptionService chatsubscription.Service) StoreObject { ctx, cancel := context.WithCancel(context.Background()) return &storeObject{ SmartBlock: sb, locker: sb.(smartblock.Locker), accountService: accountService, arenaPool: &anyenc.ArenaPool{}, - eventSender: eventSender, crdtDb: crdtDb, repositoryService: repositoryService, componentCtx: ctx, componentCtxCancel: cancel, - spaceIndex: spaceIndex, chatSubscriptionService: chatSubscriptionService, } } diff --git a/core/block/editor/chatobject/chatobject_test.go b/core/block/editor/chatobject/chatobject_test.go index 572f63750..294569b60 100644 --- a/core/block/editor/chatobject/chatobject_test.go +++ b/core/block/editor/chatobject/chatobject_test.go @@ -26,6 +26,7 @@ import ( "github.com/anyproto/anytype-heart/core/session" "github.com/anyproto/anytype-heart/pb" "github.com/anyproto/anytype-heart/pkg/lib/localstore/objectstore" + "github.com/anyproto/anytype-heart/pkg/lib/localstore/objectstore/spaceindex" "github.com/anyproto/anytype-heart/pkg/lib/pb/model" "github.com/anyproto/anytype-heart/tests/testutil" ) @@ -61,6 +62,7 @@ type fixture struct { sourceCreator string eventSender *mock_event.MockSender events []*pb.EventMessage + spaceIndex spaceindex.Store generateOrderIdFunc func(tx *storestate.StoreStateTx) string } @@ -99,7 +101,7 @@ func newFixture(t *testing.T) *fixture { db, err := objectStore.GetCrdtDb(testSpaceId).Wait() require.NoError(t, err) - object := New(sb, accountService, eventSender, db, repo, spaceIndex, subscriptions) + object := New(sb, accountService, db, repo, subscriptions) rawObject := object.(*storeObject) fx := &fixture{ @@ -107,6 +109,7 @@ func newFixture(t *testing.T) *fixture { accountServiceStub: accountService, sourceCreator: testCreator, eventSender: eventSender, + spaceIndex: spaceIndex, } eventSender.EXPECT().Broadcast(mock.Anything).Run(func(event *pb.Event) { for _, msg := range event.Messages { diff --git a/core/block/editor/factory.go b/core/block/editor/factory.go index 6727426b8..42b6a92a3 100644 --- a/core/block/editor/factory.go +++ b/core/block/editor/factory.go @@ -227,7 +227,7 @@ func (f *ObjectFactory) New(space smartblock.Space, sbType coresb.SmartBlockType if err != nil { return nil, fmt.Errorf("get crdt db: %w", err) } - return chatobject.New(sb, f.accountService, f.eventSender, crdtDb, f.chatRepositoryService, spaceIndex, f.chatSubscriptionService), nil + return chatobject.New(sb, f.accountService, crdtDb, f.chatRepositoryService, f.chatSubscriptionService), nil case coresb.SmartBlockTypeAccountObject: crdtDb, err := f.objectStore.GetCrdtDb(space.Id()).Wait() if err != nil { From 3395d02bba42dc031361feea264f1c48b1eba8ea Mon Sep 17 00:00:00 2001 From: Sergey Date: Mon, 19 May 2025 16:46:45 +0200 Subject: [PATCH 101/164] GO-5585: Fix comments --- core/block/editor/objecttype.go | 1 - core/block/editor/page.go | 1 - 2 files changed, 2 deletions(-) diff --git a/core/block/editor/objecttype.go b/core/block/editor/objecttype.go index 67d99340a..c1de6d519 100644 --- a/core/block/editor/objecttype.go +++ b/core/block/editor/objecttype.go @@ -34,7 +34,6 @@ var typeRequiredRelations = append(typeAndRelationRequiredRelations, bundle.RelationKeyIconOption, bundle.RelationKeyIconName, bundle.RelationKeyPluralName, - bundle.RelationKeyApiId, ) type ObjectType struct { diff --git a/core/block/editor/page.go b/core/block/editor/page.go index dee45110b..d6ba02cae 100644 --- a/core/block/editor/page.go +++ b/core/block/editor/page.go @@ -49,7 +49,6 @@ var relationRequiredRelations = append(typeAndRelationRequiredRelations, bundle.RelationKeyRelationFormat, bundle.RelationKeyRelationFormatObjectTypes, bundle.RelationKeyRelationKey, - bundle.RelationKeyApiId, ) var relationOptionRequiredRelations = []domain.RelationKey{ From fa08187108a8682c551517bb3e8d7638444a7f72 Mon Sep 17 00:00:00 2001 From: kirillston Date: Mon, 19 May 2025 17:16:30 +0200 Subject: [PATCH 102/164] GO-5638 No push notifications if no permissions --- .../internal/components/aclobjectmanager/aclobjectmanager.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/space/internal/components/aclobjectmanager/aclobjectmanager.go b/space/internal/components/aclobjectmanager/aclobjectmanager.go index 91fc5df02..c2fcd1f92 100644 --- a/space/internal/components/aclobjectmanager/aclobjectmanager.go +++ b/space/internal/components/aclobjectmanager/aclobjectmanager.go @@ -259,6 +259,11 @@ func (a *aclObjectManager) processAcl() (err error) { defer a.mx.Unlock() a.lastIndexed = acl.Head().Id + if aclState.Permissions(aclState.Identity()).NoPermissions() { + // no need to push notifications or subscribe on them if space is removing + return nil + } + err = a.pushNotificationService.BroadcastKeyUpdate(common.Id(), aclState) if err != nil { return fmt.Errorf("broadcast key update: %w", err) From 6b54fc12265f442830829743401c30255d3f35f7 Mon Sep 17 00:00:00 2001 From: kirillston Date: Mon, 19 May 2025 17:31:55 +0200 Subject: [PATCH 103/164] GO-5638 Rm permissions check --- .../internal/components/aclobjectmanager/aclobjectmanager.go | 5 ----- 1 file changed, 5 deletions(-) diff --git a/space/internal/components/aclobjectmanager/aclobjectmanager.go b/space/internal/components/aclobjectmanager/aclobjectmanager.go index c2fcd1f92..91fc5df02 100644 --- a/space/internal/components/aclobjectmanager/aclobjectmanager.go +++ b/space/internal/components/aclobjectmanager/aclobjectmanager.go @@ -259,11 +259,6 @@ func (a *aclObjectManager) processAcl() (err error) { defer a.mx.Unlock() a.lastIndexed = acl.Head().Id - if aclState.Permissions(aclState.Identity()).NoPermissions() { - // no need to push notifications or subscribe on them if space is removing - return nil - } - err = a.pushNotificationService.BroadcastKeyUpdate(common.Id(), aclState) if err != nil { return fmt.Errorf("broadcast key update: %w", err) From f8e9fdd5988fc141607fd9ffb8d0293acb5747db Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Mon, 19 May 2025 17:36:32 +0200 Subject: [PATCH 104/164] GO-5589: Implement stable keys for types --- core/api/docs/docs.go | 2 +- core/api/docs/openapi.json | 13 +++++++++- core/api/docs/openapi.yaml | 9 +++++++ core/api/model/property.go | 4 +-- core/api/model/type.go | 6 ++++- core/api/service/list_test.go | 2 ++ core/api/service/object.go | 11 ++++++++- core/api/service/object_test.go | 2 ++ core/api/service/property.go | 2 +- core/api/service/search.go | 6 ++--- core/api/service/search_test.go | 2 ++ core/api/service/type.go | 44 ++++++++++++++++++++++++++++----- core/api/util/key.go | 18 +++++++------- 13 files changed, 96 insertions(+), 25 deletions(-) diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go index cf02ab723..c1a82c302 100644 --- a/core/api/docs/docs.go +++ b/core/api/docs/docs.go @@ -6,7 +6,7 @@ import "github.com/swaggo/swag/v2" const docTemplate = `{ "schemes": {{ marshal .Schemes }}, - "components": {"schemas":{"apimodel.AddObjectsToListRequest":{"properties":{"objects":{"description":"The list of object IDs to add to the list","example":["[\"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ\"]"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateApiKeyResponse":{"properties":{"api_key":{"description":"The api key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.CreateChallengeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for api_key","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object; see ListTypes or GetType endpoints for linked properties","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"some_user_defined_property_key","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file ids of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["emoji","file","icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag ids of the property; see ListTags endpoint for valid values","example":["['tag_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"key":{"example":"creator","type":"string"},"objects":{"description":"The object ids of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The text to search within object names and content; use types field for type filtering","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to include in results (e.g., \"page\", \"task\", \"bookmark\"); see ListTypes endpoint for valid values","example":["page","task","bookmark"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"key":{"example":"status","type":"string"},"select":{"description":"The selected tag id of the property; see ListTags endpoint for valid values","example":"tag_id","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results by","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting options for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The key of the property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","enum":["basic","profile","action","note","bookmark","set","set","collection","participant"],"type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","enum":["basic","profile","action","note"],"type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object; see ListTypes or GetType endpoints for linked properties","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"key":{"description":"The key to set for the property","example":"some_user_defined_property_key","type":"string"},"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, + "components": {"schemas":{"apimodel.AddObjectsToListRequest":{"properties":{"objects":{"description":"The list of object IDs to add to the list","example":["[\"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ\"]"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateApiKeyResponse":{"properties":{"api_key":{"description":"The api key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.CreateChallengeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for api_key","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object; see ListTypes or GetType endpoints for linked properties","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"some_user_defined_property_key","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"key":{"description":"The key of the type","example":"some_user_defined_type_key","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name","plural_name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file ids of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["emoji","file","icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag ids of the property; see ListTags endpoint for valid values","example":["['tag_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"key":{"example":"creator","type":"string"},"objects":{"description":"The object ids of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The text to search within object names and content; use types field for type filtering","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to include in results (e.g., \"page\", \"task\", \"bookmark\"); see ListTypes endpoint for valid values","example":["page","task","bookmark"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"key":{"example":"status","type":"string"},"select":{"description":"The selected tag id of the property; see ListTags endpoint for valid values","example":"tag_id","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results by","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting options for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The key of the property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","enum":["basic","profile","action","note","bookmark","set","set","collection","participant"],"type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","enum":["basic","profile","action","note"],"type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object; see ListTypes or GetType endpoints for linked properties","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"key":{"description":"The key to set for the property","example":"some_user_defined_property_key","type":"string"},"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"key":{"description":"The key to set for the type","example":"some_user_defined_type_key","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, "info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-api/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"}, "externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"}, "paths": {"/v1/auth/api_keys":{"post":{"description":"After receiving a ` + "`" + `challenge_id` + "`" + ` from the ` + "`" + `/v1/auth/challenges` + "`" + ` endpoint, the client calls this endpoint to provide the corresponding 4-digit code along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ` + "`" + `api_key` + "`" + `. This endpoint is central to the authentication process, as it validates the user's identity and issues a key that can be used for further interactions with the API.","operationId":"create_api_key","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"The 4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateApiKeyResponse"}}},"description":"The API key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Create API Key","tags":["Auth"]}},"/v1/auth/challenges":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid ` + "`" + `app_name` + "`" + `, the server issues a unique ` + "`" + `challenge_id` + "`" + ` and displays a 4-digit code within the Anytype Desktop. The ` + "`" + `challenge_id` + "`" + ` must then be used with the ` + "`" + `/v1/auth/api_keys` + "`" + ` endpoint to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"create_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateChallengeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Create Challenge","tags":["Auth"]}},"/v1/search":{"post":{"description":"Executes a global search over all spaces accessible to the authenticated user. The request body must specify the ` + "`" + `query` + "`" + ` text (currently matching only name and snippet of an object), optional filters on types (e.g., \"page\", \"task\"), and sort directives (default: descending by last modified date). Pagination is controlled via ` + "`" + `offset` + "`" + ` and ` + "`" + `limit` + "`" + ` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"search_global","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/v1/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"list_spaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"create_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/v1/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"get_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"update_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"add_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.AddObjectsToListRequest"}}},"description":"The list of object IDs to add to the list; must be retrieved from SearchSpace or GlobalSearch endpoints or obtained from response context","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"remove_list_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list; must be retrieved from SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"get_list_views","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"get_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for; must be retrieved from ListViews endpoint or omitted if you want to get all objects in the list","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/v1/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"list_members","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/v1/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"get_member","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity; must be retrieved from ListMembers endpoint or obtained from response context","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/v1/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"create_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/v1/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"get_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"update_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/v1/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"list_properties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"create_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"get_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"update_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"list_tags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"create_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"get_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"update_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/v1/spaces/{space_id}/search":{"post":{"description":"Performs a search within a single space (specified by the ` + "`" + `space_id` + "`" + ` path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search ` + "`" + `query` + "`" + `, ` + "`" + `types` + "`" + `, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"search_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/v1/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"list_types","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"create_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"get_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"update_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"list_templates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve templates for; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/v1/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"get_template","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to which the template belongs; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve; must be retrieved from ListTemplates endpoint or obtained from response context","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, diff --git a/core/api/docs/openapi.json b/core/api/docs/openapi.json index e989aa667..4b51d5aba 100644 --- a/core/api/docs/openapi.json +++ b/core/api/docs/openapi.json @@ -214,6 +214,11 @@ "icon": { "$ref": "#/components/schemas/apimodel.Icon" }, + "key": { + "description": "The key of the type", + "example": "some_user_defined_type_key", + "type": "string" + }, "layout": { "$ref": "#/components/schemas/apimodel.TypeLayout" }, @@ -238,7 +243,8 @@ }, "required": [ "layout", - "name" + "name", + "plural_name" ], "type": "object" }, @@ -1594,6 +1600,11 @@ "icon": { "$ref": "#/components/schemas/apimodel.Icon" }, + "key": { + "description": "The key to set for the type", + "example": "some_user_defined_type_key", + "type": "string" + }, "layout": { "$ref": "#/components/schemas/apimodel.TypeLayout" }, diff --git a/core/api/docs/openapi.yaml b/core/api/docs/openapi.yaml index 7e69d9018..5fa6c8669 100644 --- a/core/api/docs/openapi.yaml +++ b/core/api/docs/openapi.yaml @@ -163,6 +163,10 @@ components: properties: icon: $ref: '#/components/schemas/apimodel.Icon' + key: + description: The key of the type + example: some_user_defined_type_key + type: string layout: $ref: '#/components/schemas/apimodel.TypeLayout' name: @@ -183,6 +187,7 @@ components: required: - layout - name + - plural_name type: object apimodel.DatePropertyLinkValue: properties: @@ -1180,6 +1185,10 @@ components: properties: icon: $ref: '#/components/schemas/apimodel.Icon' + key: + description: The key to set for the type + example: some_user_defined_type_key + type: string layout: $ref: '#/components/schemas/apimodel.TypeLayout' name: diff --git a/core/api/model/property.go b/core/api/model/property.go index 9a50012d3..07819218d 100644 --- a/core/api/model/property.go +++ b/core/api/model/property.go @@ -42,14 +42,14 @@ type PropertyResponse struct { } type CreatePropertyRequest struct { + Key string `json:"key" example:"some_user_defined_property_key"` // The key of the property Name string `json:"name" binding:"required" example:"Last modified date"` // The name of the property Format PropertyFormat `json:"format" binding:"required" enums:"text,number,select,multi_select,date,files,checkbox,url,email,phone,objects"` // The format of the property - Key string `json:"key" example:"some_user_defined_property_key"` // The key of the property } type UpdatePropertyRequest struct { - Name *string `json:"name,omitempty" binding:"required" example:"Last modified date"` // The name to set for the property Key *string `json:"key,omitempty" example:"some_user_defined_property_key"` // The key to set for the property + Name *string `json:"name,omitempty" binding:"required" example:"Last modified date"` // The name to set for the property } type Property struct { diff --git a/core/api/model/type.go b/core/api/model/type.go index 0bb512a88..f36ff8b06 100644 --- a/core/api/model/type.go +++ b/core/api/model/type.go @@ -35,14 +35,16 @@ type TypeResponse struct { } type CreateTypeRequest struct { + Key string `json:"key" example:"some_user_defined_type_key"` // The key of the type Name string `json:"name" binding:"required" example:"Page"` // The name of the type - PluralName string `json:"plural_name" example:"Pages"` // The plural name of the type + PluralName string `json:"plural_name" binding:"required" example:"Pages"` // The plural name of the type Icon Icon `json:"icon" oneOf:"EmojiIcon,FileIcon,NamedIcon"` // The icon of the type Layout TypeLayout `json:"layout" binding:"required" enums:"basic,profile,action,note"` // The layout of the type Properties []PropertyLink `json:"properties"` // ⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type } type UpdateTypeRequest struct { + Key *string `json:"key,omitempty" example:"some_user_defined_type_key"` // The key to set for the type Name *string `json:"name,omitempty" example:"Page"` // The name to set for the type PluralName *string `json:"plural_name,omitempty" example:"Pages"` // The plural name to set for the type Icon *Icon `json:"icon,omitempty" oneOf:"EmojiIcon,FileIcon,NamedIcon"` // The icon to set for the type @@ -60,4 +62,6 @@ type Type struct { Archived bool `json:"archived" example:"false"` // Whether the type is archived Layout ObjectLayout `json:"layout" enums:"basic,profile,action,note,bookmark,set,set,collection,participant"` // The layout of the type Properties []Property `json:"properties"` // The properties linked to the type + // Uk is internal-only to simplify FromTypeApiKey lookup on entry, won't be serialized to type responses + UniqueKey string `json:"-" swaggerignore:"true"` } diff --git a/core/api/service/list_test.go b/core/api/service/list_test.go index 006455bcf..1b95b354b 100644 --- a/core/api/service/list_test.go +++ b/core/api/service/list_test.go @@ -462,6 +462,7 @@ func TestListService_GetObjectsInList(t *testing.T) { Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyUniqueKey.String(), + bundle.RelationKeyApiId.String(), bundle.RelationKeyName.String(), bundle.RelationKeyPluralName.String(), bundle.RelationKeyIconEmoji.String(), @@ -708,6 +709,7 @@ func TestListService_GetObjectsInList(t *testing.T) { Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyUniqueKey.String(), + bundle.RelationKeyApiId.String(), bundle.RelationKeyName.String(), bundle.RelationKeyPluralName.String(), bundle.RelationKeyIconEmoji.String(), diff --git a/core/api/service/object.go b/core/api/service/object.go index 2f49e5e74..eeb6f6e7d 100644 --- a/core/api/service/object.go +++ b/core/api/service/object.go @@ -134,12 +134,21 @@ func (s *Service) GetObject(ctx context.Context, spaceId string, objectId string // CreateObject creates a new object in a specific space. func (s *Service) CreateObject(ctx context.Context, spaceId string, request apimodel.CreateObjectRequest) (apimodel.ObjectWithBody, error) { - request.TypeKey = util.FromTypeApiKey(request.TypeKey) details, err := s.buildObjectDetails(ctx, spaceId, request) if err != nil { return apimodel.ObjectWithBody{}, err } + propertyMap, err := s.getPropertyMapFromStore(ctx, spaceId, true) + if err != nil { + return apimodel.ObjectWithBody{}, err + } + typeMap, err := s.getTypeMapFromStore(ctx, spaceId, propertyMap, true) + if err != nil { + return apimodel.ObjectWithBody{}, err + } + request.TypeKey = s.ResolveTypeApiKey(typeMap, request.TypeKey) + var objectId string if request.TypeKey == "ot-bookmark" { resp := s.mw.ObjectCreateBookmark(ctx, &pb.RpcObjectCreateBookmarkRequest{ diff --git a/core/api/service/object_test.go b/core/api/service/object_test.go index 12ae5e34c..267699b3c 100644 --- a/core/api/service/object_test.go +++ b/core/api/service/object_test.go @@ -155,6 +155,7 @@ func TestObjectService_ListObjects(t *testing.T) { Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyUniqueKey.String(), + bundle.RelationKeyApiId.String(), bundle.RelationKeyName.String(), bundle.RelationKeyPluralName.String(), bundle.RelationKeyIconEmoji.String(), @@ -448,6 +449,7 @@ func TestObjectService_GetObject(t *testing.T) { Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyUniqueKey.String(), + bundle.RelationKeyApiId.String(), bundle.RelationKeyName.String(), bundle.RelationKeyPluralName.String(), bundle.RelationKeyIconEmoji.String(), diff --git a/core/api/service/property.go b/core/api/service/property.go index a96bde503..061af0db0 100644 --- a/core/api/service/property.go +++ b/core/api/service/property.go @@ -800,7 +800,7 @@ func (s *Service) buildPropertyWithValue(id string, key string, name string, for // TODO: If not found, this detail shouldn't be set by clients, and strict validation errors func (s *Service) ResolvePropertyApiKey(propertyMap map[string]*apimodel.Property, clientKey string) string { if p, ok := propertyMap[clientKey]; ok { - return string(p.RelationKey) + return p.RelationKey } return "" // TODO: enable later for strict validation diff --git a/core/api/service/search.go b/core/api/service/search.go index 69516914c..7776b8bae 100644 --- a/core/api/service/search.go +++ b/core/api/service/search.go @@ -232,12 +232,12 @@ func (s *Service) prepareTypeFilters(types []string, typeMap map[string]*apimode // Prepare nested filters for each type nestedFilters := make([]*model.BlockContentDataviewFilter, 0, len(types)) - for _, ot := range types { - if ot == "" { + for _, key := range types { + if key == "" { continue } - uk := util.FromTypeApiKey(ot) + uk := s.ResolveTypeApiKey(typeMap, key) typeDef, ok := typeMap[uk] if !ok { continue diff --git a/core/api/service/search_test.go b/core/api/service/search_test.go index 0274ab043..587693235 100644 --- a/core/api/service/search_test.go +++ b/core/api/service/search_test.go @@ -209,6 +209,7 @@ func TestSearchService_GlobalSearch(t *testing.T) { Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyUniqueKey.String(), + bundle.RelationKeyApiId.String(), bundle.RelationKeyName.String(), bundle.RelationKeyPluralName.String(), bundle.RelationKeyIconEmoji.String(), @@ -519,6 +520,7 @@ func TestSearchService_Search(t *testing.T) { Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyUniqueKey.String(), + bundle.RelationKeyApiId.String(), bundle.RelationKeyName.String(), bundle.RelationKeyPluralName.String(), bundle.RelationKeyIconEmoji.String(), diff --git a/core/api/service/type.go b/core/api/service/type.go index 943f7f5fb..6d6ed4cb0 100644 --- a/core/api/service/type.go +++ b/core/api/service/type.go @@ -53,6 +53,7 @@ func (s *Service) ListTypes(ctx context.Context, spaceId string, offset int, lim Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyUniqueKey.String(), + bundle.RelationKeyApiId.String(), bundle.RelationKeyName.String(), bundle.RelationKeyIconEmoji.String(), bundle.RelationKeyIconName.String(), @@ -78,7 +79,7 @@ func (s *Service) ListTypes(ctx context.Context, spaceId string, offset int, lim } for _, record := range paginatedTypes { - _, t := s.getTypeFromStruct(record, propertyMap) + _, _, t := s.getTypeFromStruct(record, propertyMap) types = append(types, t) } return types, total, hasMore, nil @@ -111,7 +112,7 @@ func (s *Service) GetType(ctx context.Context, spaceId string, typeId string) (a return apimodel.Type{}, err } - _, t := s.getTypeFromStruct(resp.ObjectView.Details[0].Details, propertyMap) + _, _, t := s.getTypeFromStruct(resp.ObjectView.Details[0].Details, propertyMap) return t, nil } @@ -212,6 +213,7 @@ func (s *Service) getTypeMapFromStore(ctx context.Context, spaceId string, prope Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyUniqueKey.String(), + bundle.RelationKeyApiId.String(), bundle.RelationKeyName.String(), bundle.RelationKeyPluralName.String(), bundle.RelationKeyIconEmoji.String(), @@ -230,10 +232,11 @@ func (s *Service) getTypeMapFromStore(ctx context.Context, spaceId string, prope typeMap := make(map[string]*apimodel.Type, len(resp.Records)) for _, record := range resp.Records { - uk, t := s.getTypeFromStruct(record, propertyMap) + uk, apiId, t := s.getTypeFromStruct(record, propertyMap) ot := t typeMap[t.Id] = &ot if keyByUniqueKey { + typeMap[apiId] = &ot typeMap[uk] = &ot } } @@ -241,18 +244,29 @@ func (s *Service) getTypeMapFromStore(ctx context.Context, spaceId string, prope } // getTypeFromStruct maps a type's details into an apimodel.Type and returns its unique key. -func (s *Service) getTypeFromStruct(details *types.Struct, propertyMap map[string]*apimodel.Property) (string, apimodel.Type) { +func (s *Service) getTypeFromStruct(details *types.Struct, propertyMap map[string]*apimodel.Property) (string, string, apimodel.Type) { uk := details.Fields[bundle.RelationKeyUniqueKey.String()].GetStringValue() - return uk, apimodel.Type{ + key := util.ToTypeApiKey(uk) + + // apiId as key takes precedence over unique key + var apiId string + if apiIDField, exists := details.Fields[bundle.RelationKeyApiId.String()]; exists { + if apiId = apiIDField.GetStringValue(); apiId != "" { + key = apiId + } + } + + return uk, apiId, apimodel.Type{ Object: "type", Id: details.Fields[bundle.RelationKeyId.String()].GetStringValue(), - Key: util.ToTypeApiKey(details.Fields[bundle.RelationKeyUniqueKey.String()].GetStringValue()), + Key: key, Name: details.Fields[bundle.RelationKeyName.String()].GetStringValue(), PluralName: details.Fields[bundle.RelationKeyPluralName.String()].GetStringValue(), Icon: GetIcon(s.gatewayUrl, details.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), "", details.Fields[bundle.RelationKeyIconName.String()].GetStringValue(), details.Fields[bundle.RelationKeyIconOption.String()].GetNumberValue()), Archived: details.Fields[bundle.RelationKeyIsArchived.String()].GetBoolValue(), Layout: s.otLayoutToObjectLayout(model.ObjectTypeLayout(details.Fields[bundle.RelationKeyRecommendedLayout.String()].GetNumberValue())), Properties: s.getRecommendedPropertiesFromLists(details.Fields[bundle.RelationKeyRecommendedFeaturedRelations.String()].GetListValue(), details.Fields[bundle.RelationKeyRecommendedRelations.String()].GetListValue(), propertyMap), + UniqueKey: uk, } } @@ -273,6 +287,10 @@ func (s *Service) buildTypeDetails(ctx context.Context, spaceId string, request bundle.RelationKeyOrigin.String(): pbtypes.Int64(int64(model.ObjectOrigin_api)), } + if request.Key != "" { + fields[bundle.RelationKeyApiId.String()] = pbtypes.String(s.sanitizedString(request.Key)) + } + iconFields, err := s.processIconFields(spaceId, request.Icon) if err != nil { return nil, err @@ -333,6 +351,9 @@ func (s *Service) buildUpdatedTypeDetails(ctx context.Context, spaceId string, t if request.Layout != nil { fields[bundle.RelationKeyRecommendedLayout.String()] = pbtypes.Int64(int64(s.typeLayoutToObjectTypeLayout(*request.Layout))) } + if request.Key != nil { + fields[bundle.RelationKeyApiId.String()] = pbtypes.String(s.sanitizedString(*request.Key)) + } if request.Icon != nil { iconFields, err := s.processIconFields(spaceId, *request.Icon) @@ -411,6 +432,17 @@ func (s *Service) buildRelationIds(ctx context.Context, spaceId string, props [] return relationIds, nil } +// ResolveTypeApiKey returns the internal uniqueKey for a clientKey by looking it up in the typeMap +// TODO: If not found, this detail shouldn't be set by clients, and strict validation errors +func (s *Service) ResolveTypeApiKey(typeMap map[string]*apimodel.Type, clientKey string) string { + if p, ok := typeMap[clientKey]; ok { + return p.UniqueKey + } + return "" + // TODO: enable later for strict validation + // return "", false +} + func (s *Service) otLayoutToObjectLayout(objectTypeLayout model.ObjectTypeLayout) apimodel.ObjectLayout { switch objectTypeLayout { case model.ObjectType_basic: diff --git a/core/api/util/key.go b/core/api/util/key.go index 6cee7c96b..03a9bf763 100644 --- a/core/api/util/key.go +++ b/core/api/util/key.go @@ -32,25 +32,25 @@ func ToPropertyApiKey(internalKey string) string { return toApiKey(propPrefix, internalRelationPrefix, internalKey) } -func FromPropertyApiKey(apiKey string) string { - return fromApiKey(propPrefix, internalRelationPrefix, apiKey) -} +// func FromPropertyApiKey(apiKey string) string { +// return fromApiKey(propPrefix, internalRelationPrefix, apiKey) +// } func ToTypeApiKey(internalKey string) string { return toApiKey(typePrefix, internalObjectTypePrefix, internalKey) } -func FromTypeApiKey(apiKey string) string { - return fromApiKey(typePrefix, internalObjectTypePrefix, apiKey) -} +// func FromTypeApiKey(apiKey string) string { +// return fromApiKey(typePrefix, internalObjectTypePrefix, apiKey) +// } func ToTagApiKey(internalKey string) string { return toApiKey(tagPrefix, internalRelationOptionPrefix, internalKey) } -func FromTagApiKey(apiKey string) string { - return fromApiKey(tagPrefix, internalRelationOptionPrefix, apiKey) -} +// func FromTagApiKey(apiKey string) string { +// return fromApiKey(tagPrefix, internalRelationOptionPrefix, apiKey) +// } // IsCustomKey returns true if key is exactly 24 letters and contains at least a digit. // Non-custom properties never contain a digit. From b7586c05d9188dadf218b016e5c51d0584caabc5 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Mon, 19 May 2025 18:01:29 +0200 Subject: [PATCH 105/164] GO-5589: Fix keying after key instead of apiId in property and type maps --- core/api/service/property.go | 12 ++++++------ core/api/service/type.go | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/core/api/service/property.go b/core/api/service/property.go index 061af0db0..a06de6a97 100644 --- a/core/api/service/property.go +++ b/core/api/service/property.go @@ -560,10 +560,10 @@ func (s *Service) getPropertyMapFromStore(ctx context.Context, spaceId string, k propertyMap := make(map[string]*apimodel.Property, len(resp.Records)) for _, record := range resp.Records { - rk, apiId, p := s.getPropertyFromStruct(record) + rk, key, p := s.getPropertyFromStruct(record) prop := p propertyMap[rk] = &prop - propertyMap[apiId] = &prop // TODO: add under api key as well, double check + propertyMap[key] = &prop // TODO: add under api key as well, double check if keyByPropertyId { propertyMap[p.Id] = &prop // add property under id as key to map as well } @@ -572,20 +572,20 @@ func (s *Service) getPropertyMapFromStore(ctx context.Context, spaceId string, k return propertyMap, nil } -// getPropertyFromStruct maps a property's details into an apimodel.Property and returns its relation key. +// getPropertyFromStruct maps a property's details into an apimodel.Property. +// `rk` is what we use internally, `key` is the key being referenced in the API. func (s *Service) getPropertyFromStruct(details *types.Struct) (string, string, apimodel.Property) { rk := details.Fields[bundle.RelationKeyRelationKey.String()].GetStringValue() key := util.ToPropertyApiKey(rk) // apiId as key takes precedence over relation key - var apiId string if apiIDField, exists := details.Fields[bundle.RelationKeyApiId.String()]; exists { - if apiId = apiIDField.GetStringValue(); apiId != "" { + if apiId := apiIDField.GetStringValue(); apiId != "" { key = apiId } } - return rk, apiId, apimodel.Property{ + return rk, key, apimodel.Property{ Object: "property", Id: details.Fields[bundle.RelationKeyId.String()].GetStringValue(), Key: key, diff --git a/core/api/service/type.go b/core/api/service/type.go index 6d6ed4cb0..9be96bf41 100644 --- a/core/api/service/type.go +++ b/core/api/service/type.go @@ -232,31 +232,31 @@ func (s *Service) getTypeMapFromStore(ctx context.Context, spaceId string, prope typeMap := make(map[string]*apimodel.Type, len(resp.Records)) for _, record := range resp.Records { - uk, apiId, t := s.getTypeFromStruct(record, propertyMap) + uk, key, t := s.getTypeFromStruct(record, propertyMap) ot := t typeMap[t.Id] = &ot if keyByUniqueKey { - typeMap[apiId] = &ot + typeMap[key] = &ot typeMap[uk] = &ot } } return typeMap, nil } -// getTypeFromStruct maps a type's details into an apimodel.Type and returns its unique key. +// getTypeFromStruct maps a type's details into an apimodel.Type. +// `uk` is what we use internally, `key` is the key being referenced in the API. func (s *Service) getTypeFromStruct(details *types.Struct, propertyMap map[string]*apimodel.Property) (string, string, apimodel.Type) { uk := details.Fields[bundle.RelationKeyUniqueKey.String()].GetStringValue() key := util.ToTypeApiKey(uk) // apiId as key takes precedence over unique key - var apiId string if apiIDField, exists := details.Fields[bundle.RelationKeyApiId.String()]; exists { - if apiId = apiIDField.GetStringValue(); apiId != "" { + if apiId := apiIDField.GetStringValue(); apiId != "" { key = apiId } } - return uk, apiId, apimodel.Type{ + return uk, key, apimodel.Type{ Object: "type", Id: details.Fields[bundle.RelationKeyId.String()].GetStringValue(), Key: key, From 94d9d231f727a9041a9cb2feb7ad36c2ce2dcfab Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Mon, 19 May 2025 18:21:20 +0200 Subject: [PATCH 106/164] GO-5589: Allow modification of bundled but not-readonly relations --- core/api/service/property.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/api/service/property.go b/core/api/service/property.go index a06de6a97..26f553d25 100644 --- a/core/api/service/property.go +++ b/core/api/service/property.go @@ -221,7 +221,8 @@ func (s *Service) UpdateProperty(ctx context.Context, spaceId string, propertyId return apimodel.Property{}, err } - if bundle.HasRelation(domain.RelationKey(prop.RelationKey)) { + rel, err := bundle.PickRelation(domain.RelationKey(prop.RelationKey)) + if err != nil && rel.ReadOnly { return apimodel.Property{}, ErrPropertyCannotBeUpdated } From 0ed333dfba6e542a18f154096a8218508623d6ce Mon Sep 17 00:00:00 2001 From: Mikhail Rakhmanov Date: Mon, 19 May 2025 18:22:49 +0200 Subject: [PATCH 107/164] GO-5612 Refactor loading, make sure that setLoadErr is set when not retrying --- .../components/spaceloader/loadingspace.go | 69 +++++++------------ 1 file changed, 25 insertions(+), 44 deletions(-) diff --git a/space/internal/components/spaceloader/loadingspace.go b/space/internal/components/spaceloader/loadingspace.go index 03dc8bcb5..ce3c4c6b0 100644 --- a/space/internal/components/spaceloader/loadingspace.go +++ b/space/internal/components/spaceloader/loadingspace.go @@ -8,7 +8,6 @@ import ( "github.com/anyproto/any-sync/app/logger" "github.com/anyproto/any-sync/commonspace/object/tree/objecttree" - "github.com/anyproto/any-sync/commonspace/spacesyncproto" "go.uber.org/zap" "github.com/anyproto/anytype-heart/space/clientspace" @@ -73,11 +72,13 @@ func (ls *loadingSpace) setLoadErr(err error) { func (ls *loadingSpace) loadRetry(ctx context.Context) { defer func() { if err := ls.spaceServiceProvider.onLoad(ls.space, ls.getLoadErr()); err != nil { - log.WarnCtx(ctx, "space onLoad error", zap.Error(err)) + log.WarnCtx(ctx, "space onLoad error", zap.Error(err), zap.Error(ls.getLoadErr())) } close(ls.loadCh) }() - if ls.load(ctx) { + shouldRetry, err := ls.load(ctx) + if !shouldRetry { + ls.setLoadErr(err) return } timeout := 1 * time.Second @@ -87,7 +88,9 @@ func (ls *loadingSpace) loadRetry(ctx context.Context) { ls.setLoadErr(ctx.Err()) return case <-time.After(timeout): - if ls.load(ctx) { + shouldRetry, err := ls.load(ctx) + if !shouldRetry { + ls.setLoadErr(err) return } } @@ -98,47 +101,25 @@ func (ls *loadingSpace) loadRetry(ctx context.Context) { } } -func (ls *loadingSpace) load(ctx context.Context) (notRetryable bool) { +func (ls *loadingSpace) load(ctx context.Context) (ok bool, err error) { sp, err := ls.spaceServiceProvider.open(ctx) - if errors.Is(err, spacesyncproto.ErrSpaceMissing) { - log.WarnCtx(ctx, "space load: space is missing", zap.String("spaceId", ls.ID), zap.Bool("notRetryable", ls.disableRemoteLoad), zap.Error(err)) - return ls.disableRemoteLoad - } - if err == nil { - err = sp.WaitMandatoryObjects(ctx) - if err != nil { - notRetryable = errors.Is(err, objecttree.ErrHasInvalidChanges) - log.WarnCtx(ctx, "space load: mandatory objects error", zap.String("spaceId", ls.ID), zap.Error(err), zap.Bool("notRetryable", ls.disableRemoteLoad || notRetryable)) - return ls.disableRemoteLoad || notRetryable - } - } if err != nil { - if sp != nil { - closeErr := sp.Close(ctx) - if closeErr != nil { - log.WarnCtx(ctx, "space close error", zap.Error(closeErr)) - } - } - ls.setLoadErr(err) - if errors.Is(err, context.Canceled) { - log.WarnCtx(ctx, "space load: error: context bug", zap.String("spaceId", ls.ID), zap.Error(err), zap.Bool("notRetryable", ls.disableRemoteLoad)) - // hotfix for drpc bug - // todo: remove after https://github.com/anyproto/any-sync/pull/448 got integrated - return ls.disableRemoteLoad - } - log.WarnCtx(ctx, "space load: error", zap.String("spaceId", ls.ID), zap.Error(err), zap.Bool("notRetryable", true)) - } else { - if ls.latestAclHeadId != "" && !ls.disableRemoteLoad { - acl := sp.CommonSpace().Acl() - acl.RLock() - defer acl.RUnlock() - _, err := acl.Get(ls.latestAclHeadId) - if err != nil { - log.WarnCtx(ctx, "space load: acl head not found", zap.String("spaceId", ls.ID), zap.String("aclHeadId", ls.latestAclHeadId), zap.Error(err), zap.Bool("notRetryable", false)) - return false - } - } - ls.space = sp + return ls.disableRemoteLoad, err } - return true + err = sp.WaitMandatoryObjects(ctx) + if err != nil { + notRetryable := errors.Is(err, objecttree.ErrHasInvalidChanges) || ls.disableRemoteLoad + return notRetryable, err + } + if ls.latestAclHeadId != "" && !ls.disableRemoteLoad { + acl := sp.CommonSpace().Acl() + acl.RLock() + defer acl.RUnlock() + _, err := acl.Get(ls.latestAclHeadId) + if err != nil { + return false, err + } + } + ls.space = sp + return true, nil } From 9f78d5f1e4bb632420f6b7c7c535a17acc415aba Mon Sep 17 00:00:00 2001 From: Mikhail Rakhmanov Date: Mon, 19 May 2025 18:28:04 +0200 Subject: [PATCH 108/164] GO-5612 Fix should retry vs should return --- space/internal/components/spaceloader/loadingspace.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/space/internal/components/spaceloader/loadingspace.go b/space/internal/components/spaceloader/loadingspace.go index ce3c4c6b0..3152a607b 100644 --- a/space/internal/components/spaceloader/loadingspace.go +++ b/space/internal/components/spaceloader/loadingspace.go @@ -76,8 +76,8 @@ func (ls *loadingSpace) loadRetry(ctx context.Context) { } close(ls.loadCh) }() - shouldRetry, err := ls.load(ctx) - if !shouldRetry { + shouldReturn, err := ls.load(ctx) + if shouldReturn { ls.setLoadErr(err) return } @@ -88,8 +88,8 @@ func (ls *loadingSpace) loadRetry(ctx context.Context) { ls.setLoadErr(ctx.Err()) return case <-time.After(timeout): - shouldRetry, err := ls.load(ctx) - if !shouldRetry { + shouldReturn, err := ls.load(ctx) + if shouldReturn { ls.setLoadErr(err) return } From 309d5336333940ef7969f5fbeaf212ba2d2f852e Mon Sep 17 00:00:00 2001 From: Sergey Date: Mon, 19 May 2025 18:28:49 +0200 Subject: [PATCH 109/164] GO-5585: Rename relation to ApiObjectKey --- core/block/editor/page.go | 4 ++-- core/block/object/objectcreator/object_type.go | 4 ++-- core/block/object/objectcreator/relation.go | 4 ++-- core/block/object/objectcreator/relation_option.go | 4 ++-- pkg/lib/bundle/relation.gen.go | 12 ++++++------ pkg/lib/bundle/relations.json | 4 ++-- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/core/block/editor/page.go b/core/block/editor/page.go index d6ba02cae..310ab4437 100644 --- a/core/block/editor/page.go +++ b/core/block/editor/page.go @@ -42,7 +42,7 @@ var typeAndRelationRequiredRelations = []domain.RelationKey{ bundle.RelationKeyLastUsedDate, bundle.RelationKeyRevision, bundle.RelationKeyIsHidden, - bundle.RelationKeyApiId, + bundle.RelationKeyApiObjectKey, } var relationRequiredRelations = append(typeAndRelationRequiredRelations, @@ -52,7 +52,7 @@ var relationRequiredRelations = append(typeAndRelationRequiredRelations, ) var relationOptionRequiredRelations = []domain.RelationKey{ - bundle.RelationKeyApiId, + bundle.RelationKeyApiObjectKey, } type Page struct { diff --git a/core/block/object/objectcreator/object_type.go b/core/block/object/objectcreator/object_type.go index 0d7f39746..e1139d5c4 100644 --- a/core/block/object/objectcreator/object_type.go +++ b/core/block/object/objectcreator/object_type.go @@ -48,8 +48,8 @@ func (s *service) createObjectType(ctx context.Context, space clientspace.Space, object.SetString(bundle.RelationKeyId, id) object.SetInt64(bundle.RelationKeyLayout, int64(model.ObjectType_objectType)) - if strings.TrimSpace(object.GetString(bundle.RelationKeyApiId)) == "" { - object.SetString(bundle.RelationKeyApiId, transliterate(object.GetString(bundle.RelationKeyName))) + if strings.TrimSpace(object.GetString(bundle.RelationKeyApiObjectKey)) == "" { + object.SetString(bundle.RelationKeyApiObjectKey, transliterate(object.GetString(bundle.RelationKeyName))) } createState := state.NewDocWithUniqueKey("", nil, uniqueKey).(*state.State) diff --git a/core/block/object/objectcreator/relation.go b/core/block/object/objectcreator/relation.go index a44b27ff4..69e25b547 100644 --- a/core/block/object/objectcreator/relation.go +++ b/core/block/object/objectcreator/relation.go @@ -53,8 +53,8 @@ func (s *service) createRelation(ctx context.Context, space clientspace.Space, d object.SetString(bundle.RelationKeyId, id) object.SetString(bundle.RelationKeyRelationKey, string(key)) - if strings.TrimSpace(object.GetString(bundle.RelationKeyApiId)) == "" { - object.SetString(bundle.RelationKeyApiId, transliterate(object.GetString(bundle.RelationKeyName))) + if strings.TrimSpace(object.GetString(bundle.RelationKeyApiObjectKey)) == "" { + object.SetString(bundle.RelationKeyApiObjectKey, transliterate(object.GetString(bundle.RelationKeyName))) } if details.GetInt64(bundle.RelationKeyRelationFormat) == int64(model.RelationFormat_status) { diff --git a/core/block/object/objectcreator/relation_option.go b/core/block/object/objectcreator/relation_option.go index 1df3c9a0c..ae675a104 100644 --- a/core/block/object/objectcreator/relation_option.go +++ b/core/block/object/objectcreator/relation_option.go @@ -39,8 +39,8 @@ func (s *service) createRelationOption(ctx context.Context, space clientspace.Sp object.SetString(bundle.RelationKeyUniqueKey, uniqueKey.Marshal()) object.SetInt64(bundle.RelationKeyLayout, int64(model.ObjectType_relationOption)) - if strings.TrimSpace(object.GetString(bundle.RelationKeyApiId)) == "" { - object.SetString(bundle.RelationKeyApiId, transliterate(object.GetString(bundle.RelationKeyName))) + if strings.TrimSpace(object.GetString(bundle.RelationKeyApiObjectKey)) == "" { + object.SetString(bundle.RelationKeyApiObjectKey, transliterate(object.GetString(bundle.RelationKeyName))) } createState := state.NewDocWithUniqueKey("", nil, uniqueKey).(*state.State) diff --git a/pkg/lib/bundle/relation.gen.go b/pkg/lib/bundle/relation.gen.go index 5d63feeed..b8f4ab229 100644 --- a/pkg/lib/bundle/relation.gen.go +++ b/pkg/lib/bundle/relation.gen.go @@ -9,7 +9,7 @@ import ( "github.com/anyproto/anytype-heart/pkg/lib/pb/model" ) -const RelationChecksum = "6dc34f0f81133bac9628b57a814f1fdb90e4f52336a331b69e0ece56ddbf881a" +const RelationChecksum = "9fa45d6e74fa313bf66a494eacdd9ffa47cb2056bb27d8d79207609f4937637d" const ( RelationKeyTag domain.RelationKey = "tag" RelationKeyCamera domain.RelationKey = "camera" @@ -160,7 +160,7 @@ const ( RelationKeyAutoWidgetTargets domain.RelationKey = "autoWidgetTargets" RelationKeyAutoWidgetDisabled domain.RelationKey = "autoWidgetDisabled" RelationKeyPluralName domain.RelationKey = "pluralName" - RelationKeyApiId domain.RelationKey = "apiId" + RelationKeyApiObjectKey domain.RelationKey = "apiObjectKey" ) var ( @@ -191,16 +191,16 @@ var ( ReadOnlyRelation: true, Scope: model.Relation_type, }, - RelationKeyApiId: { + RelationKeyApiObjectKey: { DataSource: model.Relation_details, Description: "Identifier to use in intergrations with Anytype API", Format: model.RelationFormat_longtext, Hidden: true, - Id: "_brapiId", - Key: "apiId", + Id: "_brapiObjectKey", + Key: "apiObjectKey", MaxCount: 1, - Name: "API ID", + Name: "API Object Key", ReadOnly: false, ReadOnlyRelation: true, Scope: model.Relation_type, diff --git a/pkg/lib/bundle/relations.json b/pkg/lib/bundle/relations.json index 73a52cdc5..6621a11c7 100644 --- a/pkg/lib/bundle/relations.json +++ b/pkg/lib/bundle/relations.json @@ -1540,9 +1540,9 @@ "description": "Identifier to use in intergrations with Anytype API", "format": "longtext", "hidden": true, - "key": "apiId", + "key": "apiObjectKey", "maxCount": 1, - "name": "API ID", + "name": "API Object Key", "readonly": false, "source": "details" } From d6ab1936bca85d3920931580ae0267362f6fdf64 Mon Sep 17 00:00:00 2001 From: kirillston Date: Mon, 19 May 2025 18:30:58 +0200 Subject: [PATCH 110/164] GO-5561 Rollback model change --- core/relationutils/objecttype.go | 1 - docs/proto.md | 1 - pkg/lib/bundle/generator/main.go | 5 - pkg/lib/bundle/types.gen.go | 14 +- pkg/lib/bundle/types.json | 12 +- pkg/lib/pb/model/models.pb.go | 930 +++++++++--------- pkg/lib/pb/model/protos/models.proto | 1 - .../systemobjectreviser.go | 1 - 8 files changed, 455 insertions(+), 510 deletions(-) diff --git a/core/relationutils/objecttype.go b/core/relationutils/objecttype.go index b529d0f77..7ed3979fe 100644 --- a/core/relationutils/objecttype.go +++ b/core/relationutils/objecttype.go @@ -56,6 +56,5 @@ func (ot *ObjectType) BundledTypeDetails() *domain.Details { det.SetInt64(bundle.RelationKeyIconOption, ot.IconColor) det.SetString(bundle.RelationKeyIconName, ot.IconName) det.SetString(bundle.RelationKeyPluralName, ot.PluralName) - det.SetInt64(bundle.RelationKeyHeaderRelationsLayout, ot.HeaderRelationsLayout) return det } diff --git a/docs/proto.md b/docs/proto.md index f33d4dfe2..570af0f49 100644 --- a/docs/proto.md +++ b/docs/proto.md @@ -31715,7 +31715,6 @@ Used to decode block meta only, without the content itself | iconColor | [int64](#int64) | | color of object type icon | | iconName | [string](#string) | | name of object type icon | | pluralName | [string](#string) | | name of objectType in plural form (can be localized for bundled types) | -| headerRelationsLayout | [int64](#int64) | | header relations layout type. line = 0, column = 1 | diff --git a/pkg/lib/bundle/generator/main.go b/pkg/lib/bundle/generator/main.go index e8a292676..925ed14b5 100644 --- a/pkg/lib/bundle/generator/main.go +++ b/pkg/lib/bundle/generator/main.go @@ -65,7 +65,6 @@ type ObjectType struct { IconColor int `json:"iconColor"` IconName string `json:"iconName"` PluralName string `json:"pluralName"` - HeaderRelationsLayout int `json:"headerRelationsLayout"` } type Layout struct { @@ -321,10 +320,6 @@ func generateTypes() error { dictS[Id("PluralName")] = Lit(ot.PluralName) } - if ot.HeaderRelationsLayout != 0 { - dictS[Id("HeaderRelationsLayout")] = Lit(ot.HeaderRelationsLayout) - } - dict[Id(typeConst(ot.ID))] = Block(dictS) } g.Id("types").Op("=").Map(Qual(domainPkg, "TypeKey")).Op("*").Qual(relPbPkg, "ObjectType").Values(Dict(dict)) diff --git a/pkg/lib/bundle/types.gen.go b/pkg/lib/bundle/types.gen.go index da0ecc5d3..eb50f06d7 100644 --- a/pkg/lib/bundle/types.gen.go +++ b/pkg/lib/bundle/types.gen.go @@ -9,7 +9,7 @@ import ( "github.com/anyproto/anytype-heart/pkg/lib/pb/model" ) -const TypeChecksum = "ae558de440451cdcc08064675c1a69f63c5568de8f6331d04efa55a4f4919014" +const TypeChecksum = "880c466315e22d0b573f6542b4ca1dcc4e2cb3395de3bad901f87460ff914191" const ( TypePrefix = "_ot" ) @@ -50,7 +50,6 @@ var ( TypeKeyAudio: { Description: "", - HeaderRelationsLayout: 1, IconColor: 5, IconName: "musical-notes", Layout: model.ObjectType_file, @@ -59,7 +58,7 @@ var ( Readonly: true, RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyAddedDate), MustGetRelationLink(RelationKeyOrigin), MustGetRelationLink(RelationKeyFileExt), MustGetRelationLink(RelationKeySizeInBytes), MustGetRelationLink(RelationKeyFileMimeType), MustGetRelationLink(RelationKeyArtist), MustGetRelationLink(RelationKeyAudioAlbum), MustGetRelationLink(RelationKeyAudioGenre), MustGetRelationLink(RelationKeyReleasedYear), MustGetRelationLink(RelationKeyAudioAlbumTrackNumber), MustGetRelationLink(RelationKeyAudioLyrics)}, RestrictObjectCreation: true, - Revision: 6, + Revision: 5, Types: []model.SmartBlockType{model.SmartBlockType_File}, Url: TypePrefix + "audio", }, @@ -192,7 +191,6 @@ var ( TypeKeyFile: { Description: "", - HeaderRelationsLayout: 1, IconColor: 7, IconName: "attach", Layout: model.ObjectType_file, @@ -201,7 +199,7 @@ var ( Readonly: true, RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyAddedDate), MustGetRelationLink(RelationKeyOrigin), MustGetRelationLink(RelationKeyFileExt), MustGetRelationLink(RelationKeySizeInBytes), MustGetRelationLink(RelationKeyFileMimeType)}, RestrictObjectCreation: true, - Revision: 6, + Revision: 5, Types: []model.SmartBlockType{model.SmartBlockType_File}, Url: TypePrefix + "file", }, @@ -222,7 +220,6 @@ var ( TypeKeyImage: { Description: "", - HeaderRelationsLayout: 1, IconColor: 10, IconName: "image", Layout: model.ObjectType_image, @@ -231,7 +228,7 @@ var ( Readonly: true, RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyAddedDate), MustGetRelationLink(RelationKeyOrigin), MustGetRelationLink(RelationKeyFileExt), MustGetRelationLink(RelationKeySizeInBytes), MustGetRelationLink(RelationKeyHeightInPixels), MustGetRelationLink(RelationKeyWidthInPixels), MustGetRelationLink(RelationKeyFileMimeType), MustGetRelationLink(RelationKeyCamera), MustGetRelationLink(RelationKeyCameraIso), MustGetRelationLink(RelationKeyAperture), MustGetRelationLink(RelationKeyExposure), MustGetRelationLink(RelationKeyFocalRatio)}, RestrictObjectCreation: true, - Revision: 6, + Revision: 5, Types: []model.SmartBlockType{model.SmartBlockType_File}, Url: TypePrefix + "image", }, @@ -453,7 +450,6 @@ var ( TypeKeyVideo: { Description: "", - HeaderRelationsLayout: 1, IconColor: 6, IconName: "videocam", Layout: model.ObjectType_file, @@ -462,7 +458,7 @@ var ( Readonly: true, RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyAddedDate), MustGetRelationLink(RelationKeyOrigin), MustGetRelationLink(RelationKeyFileExt), MustGetRelationLink(RelationKeySizeInBytes), MustGetRelationLink(RelationKeyHeightInPixels), MustGetRelationLink(RelationKeyWidthInPixels), MustGetRelationLink(RelationKeyFileMimeType), MustGetRelationLink(RelationKeyCamera), MustGetRelationLink(RelationKeyCameraIso), MustGetRelationLink(RelationKeyAperture), MustGetRelationLink(RelationKeyExposure)}, RestrictObjectCreation: true, - Revision: 6, + Revision: 5, Types: []model.SmartBlockType{model.SmartBlockType_File}, Url: TypePrefix + "video", }, diff --git a/pkg/lib/bundle/types.json b/pkg/lib/bundle/types.json index e46c22681..33f6a7df6 100644 --- a/pkg/lib/bundle/types.json +++ b/pkg/lib/bundle/types.json @@ -172,8 +172,7 @@ "exposure" ], "restrictObjectCreation": true, - "revision": 6, - "headerRelationsLayout": 1 + "revision": 5 }, { "id": "dashboard", @@ -393,8 +392,7 @@ "focalRatio" ], "restrictObjectCreation": true, - "revision": 6, - "headerRelationsLayout": 1 + "revision": 5 }, { "id": "profile", @@ -438,8 +436,7 @@ "audioLyrics" ], "restrictObjectCreation": true, - "revision": 6, - "headerRelationsLayout": 1 + "revision": 5 }, { "id": "goal", @@ -479,8 +476,7 @@ "fileMimeType" ], "restrictObjectCreation": true, - "revision": 6, - "headerRelationsLayout": 1 + "revision": 5 }, { "id": "project", diff --git a/pkg/lib/pb/model/models.pb.go b/pkg/lib/pb/model/models.pb.go index 337112813..08ae46917 100644 --- a/pkg/lib/pb/model/models.pb.go +++ b/pkg/lib/pb/model/models.pb.go @@ -6119,7 +6119,6 @@ type ObjectType struct { IconColor int64 `protobuf:"varint,15,opt,name=iconColor,proto3" json:"iconColor,omitempty"` IconName string `protobuf:"bytes,16,opt,name=iconName,proto3" json:"iconName,omitempty"` PluralName string `protobuf:"bytes,17,opt,name=pluralName,proto3" json:"pluralName,omitempty"` - HeaderRelationsLayout int64 `protobuf:"varint,18,opt,name=headerRelationsLayout,proto3" json:"headerRelationsLayout,omitempty"` } func (m *ObjectType) Reset() { *m = ObjectType{} } @@ -6274,13 +6273,6 @@ func (m *ObjectType) GetPluralName() string { return "" } -func (m *ObjectType) GetHeaderRelationsLayout() int64 { - if m != nil { - return m.HeaderRelationsLayout - } - return 0 -} - type Layout struct { Id ObjectTypeLayout `protobuf:"varint,1,opt,name=id,proto3,enum=anytype.model.ObjectTypeLayout" json:"id,omitempty"` Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` @@ -9855,98 +9847,98 @@ func init() { } var fileDescriptor_98a910b73321e591 = []byte{ - // 9271 bytes of a gzipped FileDescriptorProto + // 9253 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x7d, 0x5b, 0x8c, 0x23, 0xc9, - 0x91, 0x58, 0xf3, 0x4d, 0x06, 0x9b, 0xdd, 0xd9, 0x39, 0x2f, 0x8a, 0x9a, 0x1b, 0x8f, 0xa8, 0xd5, - 0xee, 0x68, 0xb4, 0xea, 0xd9, 0x9d, 0xdd, 0xd5, 0xae, 0x56, 0xda, 0x95, 0xd8, 0xdd, 0xec, 0x69, - 0xee, 0xf4, 0x4b, 0x45, 0xce, 0x8c, 0x76, 0x71, 0xe7, 0x76, 0x35, 0x2b, 0x9b, 0x2c, 0x75, 0xb1, - 0x8a, 0xaa, 0x4a, 0xf6, 0x74, 0x2f, 0x6c, 0x43, 0x7e, 0xdd, 0xf9, 0xfe, 0x64, 0xc3, 0xe7, 0xf3, - 0xc1, 0x30, 0x4e, 0xfa, 0x30, 0x60, 0xf8, 0x0e, 0xf0, 0xd7, 0xc1, 0x3e, 0x3f, 0x00, 0xdf, 0x7d, - 0x19, 0xb8, 0x1f, 0xd9, 0x5f, 0x06, 0x6c, 0xc0, 0x86, 0x16, 0xf0, 0x8f, 0x61, 0x1f, 0xce, 0x5f, - 0x82, 0xe1, 0x0f, 0x23, 0x22, 0xb3, 0x5e, 0x24, 0xbb, 0x87, 0xb3, 0x77, 0x67, 0xf8, 0xab, 0x19, - 0x51, 0x11, 0x51, 0xf9, 0x88, 0x8c, 0x8c, 0x88, 0x8c, 0xac, 0x86, 0x57, 0xc6, 0xa7, 0x83, 0x07, - 0x8e, 0x7d, 0xfc, 0x60, 0x7c, 0xfc, 0x60, 0xe4, 0x59, 0xc2, 0x79, 0x30, 0xf6, 0x3d, 0xe9, 0x05, - 0x0a, 0x08, 0xd6, 0x09, 0xe2, 0x35, 0xd3, 0xbd, 0x90, 0x17, 0x63, 0xb1, 0x4e, 0xd8, 0xc6, 0xed, - 0x81, 0xe7, 0x0d, 0x1c, 0xa1, 0x48, 0x8f, 0x27, 0x27, 0x0f, 0x02, 0xe9, 0x4f, 0xfa, 0x52, 0x11, - 0x37, 0x7f, 0x96, 0x87, 0x9b, 0xdd, 0x91, 0xe9, 0xcb, 0x0d, 0xc7, 0xeb, 0x9f, 0x76, 0x5d, 0x73, - 0x1c, 0x0c, 0x3d, 0xb9, 0x61, 0x06, 0x82, 0xbf, 0x0e, 0xc5, 0x63, 0x44, 0x06, 0xf5, 0xcc, 0xdd, - 0xdc, 0xbd, 0xea, 0xc3, 0xeb, 0xeb, 0x29, 0xc1, 0xeb, 0xc4, 0x61, 0x68, 0x1a, 0xfe, 0x26, 0x94, - 0x2c, 0x21, 0x4d, 0xdb, 0x09, 0xea, 0xd9, 0xbb, 0x99, 0x7b, 0xd5, 0x87, 0xb7, 0xd6, 0xd5, 0x8b, - 0xd7, 0xc3, 0x17, 0xaf, 0x77, 0xe9, 0xc5, 0x46, 0x48, 0xc7, 0xdf, 0x85, 0xf2, 0x89, 0xed, 0x88, - 0xc7, 0xe2, 0x22, 0xa8, 0xe7, 0xae, 0xe4, 0xd9, 0xc8, 0xd6, 0x33, 0x46, 0x44, 0xcc, 0x37, 0x61, - 0x45, 0x9c, 0x4b, 0xdf, 0x34, 0x84, 0x63, 0x4a, 0xdb, 0x73, 0x83, 0x7a, 0x9e, 0x5a, 0x78, 0x6b, - 0xaa, 0x85, 0xe1, 0x73, 0x62, 0x9f, 0x62, 0xe1, 0x77, 0xa1, 0xea, 0x1d, 0xff, 0x40, 0xf4, 0x65, - 0xef, 0x62, 0x2c, 0x82, 0x7a, 0xe1, 0x6e, 0xee, 0x5e, 0xc5, 0x48, 0xa2, 0xf8, 0x37, 0xa1, 0xda, - 0xf7, 0x1c, 0x47, 0xf4, 0xd5, 0x3b, 0x8a, 0x57, 0x77, 0x2b, 0x49, 0xcb, 0xdf, 0x86, 0x1b, 0xbe, - 0x18, 0x79, 0x67, 0xc2, 0xda, 0x8c, 0xb0, 0xd4, 0xcf, 0x32, 0xbd, 0x66, 0xfe, 0x43, 0xde, 0x82, - 0x9a, 0xaf, 0xdb, 0xb7, 0x6b, 0xbb, 0xa7, 0x41, 0xbd, 0x44, 0xdd, 0xfa, 0xe2, 0x25, 0xdd, 0x42, - 0x1a, 0x23, 0xcd, 0xc1, 0x19, 0xe4, 0x4e, 0xc5, 0x45, 0xbd, 0x72, 0x37, 0x73, 0xaf, 0x62, 0xe0, - 0x4f, 0xfe, 0x3e, 0xd4, 0x3d, 0xdf, 0x1e, 0xd8, 0xae, 0xe9, 0x6c, 0xfa, 0xc2, 0x94, 0xc2, 0xea, - 0xd9, 0x23, 0x11, 0x48, 0x73, 0x34, 0xae, 0xc3, 0xdd, 0xcc, 0xbd, 0x9c, 0x71, 0xe9, 0x73, 0xfe, - 0x96, 0x9a, 0xa1, 0x8e, 0x7b, 0xe2, 0xd5, 0xab, 0xba, 0xfb, 0xe9, 0xb6, 0x6c, 0xeb, 0xc7, 0x46, - 0x44, 0xd8, 0xfc, 0x45, 0x16, 0x8a, 0x5d, 0x61, 0xfa, 0xfd, 0x61, 0xe3, 0xd7, 0x32, 0x50, 0x34, - 0x44, 0x30, 0x71, 0x24, 0x6f, 0x40, 0x59, 0x8d, 0x6d, 0xc7, 0xaa, 0x67, 0xa8, 0x75, 0x11, 0xfc, - 0x79, 0x74, 0x67, 0x1d, 0xf2, 0x23, 0x21, 0xcd, 0x7a, 0x8e, 0x46, 0xa8, 0x31, 0xd5, 0x2a, 0xf5, - 0xfa, 0xf5, 0x3d, 0x21, 0x4d, 0x83, 0xe8, 0x1a, 0x9f, 0x65, 0x20, 0x8f, 0x20, 0xbf, 0x0d, 0x95, - 0xa1, 0x3d, 0x18, 0x3a, 0xf6, 0x60, 0x28, 0x75, 0x43, 0x62, 0x04, 0xff, 0x10, 0x56, 0x23, 0xc0, - 0x30, 0xdd, 0x81, 0xc0, 0x16, 0xcd, 0x53, 0x7e, 0x7a, 0x68, 0x4c, 0x13, 0xf3, 0x3a, 0x94, 0x68, - 0x3d, 0x74, 0x2c, 0xd2, 0xe8, 0x8a, 0x11, 0x82, 0xa8, 0x6e, 0xe1, 0x4c, 0x3d, 0x16, 0x17, 0xf5, - 0x3c, 0x3d, 0x4d, 0xa2, 0x78, 0x0b, 0x56, 0x43, 0x70, 0x4b, 0x8f, 0x46, 0xe1, 0xea, 0xd1, 0x98, - 0xa6, 0x6f, 0xfe, 0x68, 0x0f, 0x0a, 0xb4, 0x2c, 0xf9, 0x0a, 0x64, 0xed, 0x70, 0xa0, 0xb3, 0xb6, - 0xc5, 0x1f, 0x40, 0xf1, 0xc4, 0x16, 0x8e, 0xf5, 0xc2, 0x11, 0xd6, 0x64, 0xbc, 0x0d, 0xcb, 0xbe, - 0x08, 0xa4, 0x6f, 0x6b, 0xed, 0x57, 0x0b, 0xf4, 0x4b, 0xf3, 0x6c, 0xc0, 0xba, 0x91, 0x20, 0x34, - 0x52, 0x6c, 0xd8, 0xed, 0xfe, 0xd0, 0x76, 0x2c, 0x5f, 0xb8, 0x1d, 0x4b, 0xad, 0xd3, 0x8a, 0x91, - 0x44, 0xf1, 0x7b, 0xb0, 0x7a, 0x6c, 0xf6, 0x4f, 0x07, 0xbe, 0x37, 0x71, 0x71, 0x41, 0x78, 0x3e, - 0x75, 0xbb, 0x62, 0x4c, 0xa3, 0xf9, 0x1b, 0x50, 0x30, 0x1d, 0x7b, 0xe0, 0xd2, 0x4a, 0x5c, 0x99, - 0x99, 0x74, 0xd5, 0x96, 0x16, 0x52, 0x18, 0x8a, 0x90, 0xef, 0x40, 0xed, 0x4c, 0xf8, 0xd2, 0xee, - 0x9b, 0x0e, 0xe1, 0xeb, 0x25, 0xe2, 0x6c, 0xce, 0xe5, 0x7c, 0x9a, 0xa4, 0x34, 0xd2, 0x8c, 0xbc, - 0x03, 0x10, 0xa0, 0x99, 0xa4, 0xe9, 0xd4, 0x6b, 0xe1, 0xb5, 0xb9, 0x62, 0x36, 0x3d, 0x57, 0x0a, - 0x57, 0xae, 0x77, 0x23, 0xf2, 0x9d, 0x25, 0x23, 0xc1, 0xcc, 0xdf, 0x85, 0xbc, 0x14, 0xe7, 0xb2, - 0xbe, 0x72, 0xc5, 0x88, 0x86, 0x42, 0x7a, 0xe2, 0x5c, 0xee, 0x2c, 0x19, 0xc4, 0x80, 0x8c, 0xb8, - 0xc8, 0xea, 0xab, 0x0b, 0x30, 0xe2, 0xba, 0x44, 0x46, 0x64, 0xe0, 0x1f, 0x40, 0xd1, 0x31, 0x2f, - 0xbc, 0x89, 0xac, 0x33, 0x62, 0xfd, 0xf2, 0x95, 0xac, 0xbb, 0x44, 0xba, 0xb3, 0x64, 0x68, 0x26, - 0xfe, 0x36, 0xe4, 0x2c, 0xfb, 0xac, 0xbe, 0x46, 0xbc, 0x77, 0xaf, 0xe4, 0xdd, 0xb2, 0xcf, 0x76, - 0x96, 0x0c, 0x24, 0xe7, 0x9b, 0x50, 0x3e, 0xf6, 0xbc, 0xd3, 0x91, 0xe9, 0x9f, 0xd6, 0x39, 0xb1, - 0x7e, 0xe5, 0x4a, 0xd6, 0x0d, 0x4d, 0xbc, 0xb3, 0x64, 0x44, 0x8c, 0xd8, 0x65, 0xbb, 0xef, 0xb9, - 0xf5, 0x6b, 0x0b, 0x74, 0xb9, 0xd3, 0xf7, 0x5c, 0xec, 0x32, 0x32, 0x20, 0xa3, 0x63, 0xbb, 0xa7, - 0xf5, 0xeb, 0x0b, 0x30, 0xa2, 0xe5, 0x44, 0x46, 0x64, 0xc0, 0x66, 0x5b, 0xa6, 0x34, 0xcf, 0x6c, - 0xf1, 0xbc, 0x7e, 0x63, 0x81, 0x66, 0x6f, 0x69, 0x62, 0x6c, 0x76, 0xc8, 0x88, 0x42, 0xc2, 0xa5, - 0x59, 0xbf, 0xb9, 0x80, 0x90, 0xd0, 0xa2, 0xa3, 0x90, 0x90, 0x91, 0xff, 0x45, 0x58, 0x3b, 0x11, - 0xa6, 0x9c, 0xf8, 0xc2, 0x8a, 0x37, 0xba, 0x5b, 0x24, 0x6d, 0xfd, 0xea, 0xb9, 0x9f, 0xe6, 0xda, - 0x59, 0x32, 0x66, 0x45, 0xf1, 0xf7, 0xa1, 0xe0, 0x98, 0x52, 0x9c, 0xd7, 0xeb, 0x24, 0xb3, 0xf9, - 0x02, 0xa5, 0x90, 0xe2, 0x7c, 0x67, 0xc9, 0x50, 0x2c, 0xfc, 0xfb, 0xb0, 0x2a, 0xcd, 0x63, 0x47, - 0x1c, 0x9c, 0x68, 0x82, 0xa0, 0xfe, 0x05, 0x92, 0xf2, 0xfa, 0xd5, 0xea, 0x9c, 0xe6, 0xd9, 0x59, - 0x32, 0xa6, 0xc5, 0x60, 0xab, 0x08, 0x55, 0x6f, 0x2c, 0xd0, 0x2a, 0x92, 0x87, 0xad, 0x22, 0x16, - 0xbe, 0x0b, 0x55, 0xfa, 0xb1, 0xe9, 0x39, 0x93, 0x91, 0x5b, 0xff, 0x22, 0x49, 0xb8, 0xf7, 0x62, - 0x09, 0x8a, 0x7e, 0x67, 0xc9, 0x48, 0xb2, 0xe3, 0x24, 0x12, 0x68, 0x78, 0xcf, 0xeb, 0xb7, 0x17, - 0x98, 0xc4, 0x9e, 0x26, 0xc6, 0x49, 0x0c, 0x19, 0x71, 0xe9, 0x3d, 0xb7, 0xad, 0x81, 0x90, 0xf5, - 0x5f, 0x5a, 0x60, 0xe9, 0x3d, 0x23, 0x52, 0x5c, 0x7a, 0x8a, 0x09, 0xd5, 0xb8, 0x3f, 0x34, 0x65, - 0xfd, 0xce, 0x02, 0x6a, 0xbc, 0x39, 0x34, 0xc9, 0x56, 0x20, 0x43, 0xe3, 0x53, 0x58, 0x4e, 0x5a, - 0x65, 0xce, 0x21, 0xef, 0x0b, 0x53, 0xed, 0x08, 0x65, 0x83, 0x7e, 0x23, 0x4e, 0x58, 0xb6, 0xa4, - 0x1d, 0xa1, 0x6c, 0xd0, 0x6f, 0x7e, 0x13, 0x8a, 0xca, 0x37, 0x21, 0x83, 0x5f, 0x36, 0x34, 0x84, - 0xb4, 0x96, 0x6f, 0x0e, 0x68, 0xdf, 0x2a, 0x1b, 0xf4, 0x1b, 0x69, 0x2d, 0xdf, 0x1b, 0x1f, 0xb8, - 0x64, 0xb0, 0xcb, 0x86, 0x86, 0x1a, 0x9f, 0x7d, 0x00, 0x25, 0xdd, 0xa8, 0xc6, 0x3f, 0xca, 0x40, - 0x51, 0x19, 0x14, 0xfe, 0x1d, 0x28, 0x04, 0xf2, 0xc2, 0x11, 0xd4, 0x86, 0x95, 0x87, 0x5f, 0x5d, - 0xc0, 0x08, 0xad, 0x77, 0x91, 0xc1, 0x50, 0x7c, 0x4d, 0x03, 0x0a, 0x04, 0xf3, 0x12, 0xe4, 0x0c, - 0xef, 0x39, 0x5b, 0xe2, 0x00, 0x45, 0x35, 0x59, 0x2c, 0x83, 0xc8, 0x2d, 0xfb, 0x8c, 0x65, 0x11, - 0xb9, 0x23, 0x4c, 0x4b, 0xf8, 0x2c, 0xc7, 0x6b, 0x50, 0x09, 0xa7, 0x25, 0x60, 0x79, 0xce, 0x60, - 0x39, 0x31, 0xe1, 0x01, 0x2b, 0x34, 0xfe, 0x57, 0x1e, 0xf2, 0xb8, 0xfe, 0xf9, 0x2b, 0x50, 0x93, - 0xa6, 0x3f, 0x10, 0xca, 0x11, 0x8e, 0x9c, 0x94, 0x34, 0x92, 0x7f, 0x10, 0xf6, 0x21, 0x4b, 0x7d, - 0x78, 0xed, 0x85, 0x76, 0x25, 0xd5, 0x83, 0xc4, 0x2e, 0x9c, 0x5b, 0x6c, 0x17, 0xde, 0x86, 0x32, - 0x9a, 0xb3, 0xae, 0xfd, 0xa9, 0xa0, 0xa1, 0x5f, 0x79, 0x78, 0xff, 0xc5, 0xaf, 0xec, 0x68, 0x0e, - 0x23, 0xe2, 0xe5, 0x1d, 0xa8, 0xf4, 0x4d, 0xdf, 0xa2, 0xc6, 0xd0, 0x6c, 0xad, 0x3c, 0xfc, 0xda, + 0x91, 0x58, 0xf3, 0x4d, 0x06, 0x9b, 0xdd, 0xd9, 0x39, 0x2f, 0x8a, 0x1a, 0x8d, 0x47, 0xd4, 0x6a, + 0x77, 0x34, 0x5a, 0xf5, 0xec, 0xce, 0xee, 0x6a, 0x57, 0x2b, 0xed, 0x4a, 0xec, 0x6e, 0xf6, 0x34, + 0x77, 0xfa, 0xa5, 0x22, 0x67, 0x46, 0xbb, 0xb8, 0x73, 0xbb, 0x9a, 0x95, 0x4d, 0x96, 0xba, 0x58, + 0x45, 0x55, 0x25, 0x7b, 0xba, 0x05, 0xdb, 0x90, 0x5f, 0x77, 0xbe, 0x3f, 0xd9, 0xf0, 0xf9, 0x7c, + 0x30, 0x8c, 0x93, 0x3e, 0x0c, 0x18, 0xbe, 0x33, 0xfc, 0x75, 0xb0, 0xcf, 0x0f, 0xc0, 0x77, 0x5f, + 0x06, 0xee, 0x47, 0xf6, 0x97, 0x01, 0x1b, 0xb0, 0xa1, 0x05, 0xfc, 0x63, 0xd8, 0x87, 0xf3, 0x97, + 0x60, 0xf8, 0xc3, 0x88, 0xc8, 0xac, 0x17, 0xc9, 0xee, 0xe1, 0xec, 0xdd, 0x19, 0xf7, 0xd5, 0x8c, + 0xa8, 0x88, 0xa8, 0x7c, 0x44, 0x46, 0x46, 0x44, 0x46, 0x56, 0xc3, 0x2b, 0xe3, 0xd3, 0xc1, 0x03, + 0xc7, 0x3e, 0x7e, 0x30, 0x3e, 0x7e, 0x30, 0xf2, 0x2c, 0xe1, 0x3c, 0x18, 0xfb, 0x9e, 0xf4, 0x02, + 0x05, 0x04, 0xeb, 0x04, 0xf1, 0x9a, 0xe9, 0x5e, 0xc8, 0x8b, 0xb1, 0x58, 0x27, 0x6c, 0xe3, 0xf6, + 0xc0, 0xf3, 0x06, 0x8e, 0x50, 0xa4, 0xc7, 0x93, 0x93, 0x07, 0x81, 0xf4, 0x27, 0x7d, 0xa9, 0x88, + 0x9b, 0x3f, 0xcb, 0xc3, 0xcd, 0xee, 0xc8, 0xf4, 0xe5, 0x86, 0xe3, 0xf5, 0x4f, 0xbb, 0xae, 0x39, + 0x0e, 0x86, 0x9e, 0xdc, 0x30, 0x03, 0xc1, 0x5f, 0x87, 0xe2, 0x31, 0x22, 0x83, 0x7a, 0xe6, 0x6e, + 0xee, 0x5e, 0xf5, 0xe1, 0xf5, 0xf5, 0x94, 0xe0, 0x75, 0xe2, 0x30, 0x34, 0x0d, 0x7f, 0x13, 0x4a, + 0x96, 0x90, 0xa6, 0xed, 0x04, 0xf5, 0xec, 0xdd, 0xcc, 0xbd, 0xea, 0xc3, 0x5b, 0xeb, 0xea, 0xc5, + 0xeb, 0xe1, 0x8b, 0xd7, 0xbb, 0xf4, 0x62, 0x23, 0xa4, 0xe3, 0xef, 0x42, 0xf9, 0xc4, 0x76, 0xc4, + 0x63, 0x71, 0x11, 0xd4, 0x73, 0x57, 0xf2, 0x6c, 0x64, 0xeb, 0x19, 0x23, 0x22, 0xe6, 0x9b, 0xb0, + 0x22, 0xce, 0xa5, 0x6f, 0x1a, 0xc2, 0x31, 0xa5, 0xed, 0xb9, 0x41, 0x3d, 0x4f, 0x2d, 0xbc, 0x35, + 0xd5, 0xc2, 0xf0, 0x39, 0xb1, 0x4f, 0xb1, 0xf0, 0xbb, 0x50, 0xf5, 0x8e, 0xbf, 0x2f, 0xfa, 0xb2, + 0x77, 0x31, 0x16, 0x41, 0xbd, 0x70, 0x37, 0x77, 0xaf, 0x62, 0x24, 0x51, 0xfc, 0x1b, 0x50, 0xed, + 0x7b, 0x8e, 0x23, 0xfa, 0xea, 0x1d, 0xc5, 0xab, 0xbb, 0x95, 0xa4, 0xe5, 0x6f, 0xc3, 0x0d, 0x5f, + 0x8c, 0xbc, 0x33, 0x61, 0x6d, 0x46, 0x58, 0xea, 0x67, 0x99, 0x5e, 0x33, 0xff, 0x21, 0x6f, 0x41, + 0xcd, 0xd7, 0xed, 0xdb, 0xb5, 0xdd, 0xd3, 0xa0, 0x5e, 0xa2, 0x6e, 0x7d, 0xfe, 0x92, 0x6e, 0x21, + 0x8d, 0x91, 0xe6, 0xe0, 0x0c, 0x72, 0xa7, 0xe2, 0xa2, 0x5e, 0xb9, 0x9b, 0xb9, 0x57, 0x31, 0xf0, + 0x27, 0x7f, 0x1f, 0xea, 0x9e, 0x6f, 0x0f, 0x6c, 0xd7, 0x74, 0x36, 0x7d, 0x61, 0x4a, 0x61, 0xf5, + 0xec, 0x91, 0x08, 0xa4, 0x39, 0x1a, 0xd7, 0xe1, 0x6e, 0xe6, 0x5e, 0xce, 0xb8, 0xf4, 0x39, 0x7f, + 0x4b, 0xcd, 0x50, 0xc7, 0x3d, 0xf1, 0xea, 0x55, 0xdd, 0xfd, 0x74, 0x5b, 0xb6, 0xf5, 0x63, 0x23, + 0x22, 0x6c, 0xfe, 0x22, 0x0b, 0xc5, 0xae, 0x30, 0xfd, 0xfe, 0xb0, 0xf1, 0xab, 0x19, 0x28, 0x1a, + 0x22, 0x98, 0x38, 0x92, 0x37, 0xa0, 0xac, 0xc6, 0xb6, 0x63, 0xd5, 0x33, 0xd4, 0xba, 0x08, 0xfe, + 0x2c, 0xba, 0xb3, 0x0e, 0xf9, 0x91, 0x90, 0x66, 0x3d, 0x47, 0x23, 0xd4, 0x98, 0x6a, 0x95, 0x7a, + 0xfd, 0xfa, 0x9e, 0x90, 0xa6, 0x41, 0x74, 0x8d, 0x4f, 0x33, 0x90, 0x47, 0x90, 0xdf, 0x86, 0xca, + 0xd0, 0x1e, 0x0c, 0x1d, 0x7b, 0x30, 0x94, 0xba, 0x21, 0x31, 0x82, 0x7f, 0x08, 0xab, 0x11, 0x60, + 0x98, 0xee, 0x40, 0x60, 0x8b, 0xe6, 0x29, 0x3f, 0x3d, 0x34, 0xa6, 0x89, 0x79, 0x1d, 0x4a, 0xb4, + 0x1e, 0x3a, 0x16, 0x69, 0x74, 0xc5, 0x08, 0x41, 0x54, 0xb7, 0x70, 0xa6, 0x1e, 0x8b, 0x8b, 0x7a, + 0x9e, 0x9e, 0x26, 0x51, 0xbc, 0x05, 0xab, 0x21, 0xb8, 0xa5, 0x47, 0xa3, 0x70, 0xf5, 0x68, 0x4c, + 0xd3, 0x37, 0x7f, 0xb4, 0x07, 0x05, 0x5a, 0x96, 0x7c, 0x05, 0xb2, 0x76, 0x38, 0xd0, 0x59, 0xdb, + 0xe2, 0x0f, 0xa0, 0x78, 0x62, 0x0b, 0xc7, 0x7a, 0xe1, 0x08, 0x6b, 0x32, 0xde, 0x86, 0x65, 0x5f, + 0x04, 0xd2, 0xb7, 0xb5, 0xf6, 0xab, 0x05, 0xfa, 0xc5, 0x79, 0x36, 0x60, 0xdd, 0x48, 0x10, 0x1a, + 0x29, 0x36, 0xec, 0x76, 0x7f, 0x68, 0x3b, 0x96, 0x2f, 0xdc, 0x8e, 0xa5, 0xd6, 0x69, 0xc5, 0x48, + 0xa2, 0xf8, 0x3d, 0x58, 0x3d, 0x36, 0xfb, 0xa7, 0x03, 0xdf, 0x9b, 0xb8, 0xb8, 0x20, 0x3c, 0x9f, + 0xba, 0x5d, 0x31, 0xa6, 0xd1, 0xfc, 0x0d, 0x28, 0x98, 0x8e, 0x3d, 0x70, 0x69, 0x25, 0xae, 0xcc, + 0x4c, 0xba, 0x6a, 0x4b, 0x0b, 0x29, 0x0c, 0x45, 0xc8, 0x77, 0xa0, 0x76, 0x26, 0x7c, 0x69, 0xf7, + 0x4d, 0x87, 0xf0, 0xf5, 0x12, 0x71, 0x36, 0xe7, 0x72, 0x3e, 0x4d, 0x52, 0x1a, 0x69, 0x46, 0xde, + 0x01, 0x08, 0xd0, 0x4c, 0xd2, 0x74, 0xea, 0xb5, 0xf0, 0xda, 0x5c, 0x31, 0x9b, 0x9e, 0x2b, 0x85, + 0x2b, 0xd7, 0xbb, 0x11, 0xf9, 0xce, 0x92, 0x91, 0x60, 0xe6, 0xef, 0x42, 0x5e, 0x8a, 0x73, 0x59, + 0x5f, 0xb9, 0x62, 0x44, 0x43, 0x21, 0x3d, 0x71, 0x2e, 0x77, 0x96, 0x0c, 0x62, 0x40, 0x46, 0x5c, + 0x64, 0xf5, 0xd5, 0x05, 0x18, 0x71, 0x5d, 0x22, 0x23, 0x32, 0xf0, 0x0f, 0xa0, 0xe8, 0x98, 0x17, + 0xde, 0x44, 0xd6, 0x19, 0xb1, 0x7e, 0xe9, 0x4a, 0xd6, 0x5d, 0x22, 0xdd, 0x59, 0x32, 0x34, 0x13, + 0x7f, 0x1b, 0x72, 0x96, 0x7d, 0x56, 0x5f, 0x23, 0xde, 0xbb, 0x57, 0xf2, 0x6e, 0xd9, 0x67, 0x3b, + 0x4b, 0x06, 0x92, 0xf3, 0x4d, 0x28, 0x1f, 0x7b, 0xde, 0xe9, 0xc8, 0xf4, 0x4f, 0xeb, 0x9c, 0x58, + 0xbf, 0x7c, 0x25, 0xeb, 0x86, 0x26, 0xde, 0x59, 0x32, 0x22, 0x46, 0xec, 0xb2, 0xdd, 0xf7, 0xdc, + 0xfa, 0xb5, 0x05, 0xba, 0xdc, 0xe9, 0x7b, 0x2e, 0x76, 0x19, 0x19, 0x90, 0xd1, 0xb1, 0xdd, 0xd3, + 0xfa, 0xf5, 0x05, 0x18, 0xd1, 0x72, 0x22, 0x23, 0x32, 0x60, 0xb3, 0x2d, 0x53, 0x9a, 0x67, 0xb6, + 0x78, 0x5e, 0xbf, 0xb1, 0x40, 0xb3, 0xb7, 0x34, 0x31, 0x36, 0x3b, 0x64, 0x44, 0x21, 0xe1, 0xd2, + 0xac, 0xdf, 0x5c, 0x40, 0x48, 0x68, 0xd1, 0x51, 0x48, 0xc8, 0xc8, 0xff, 0x22, 0xac, 0x9d, 0x08, + 0x53, 0x4e, 0x7c, 0x61, 0xc5, 0x1b, 0xdd, 0x2d, 0x92, 0xb6, 0x7e, 0xf5, 0xdc, 0x4f, 0x73, 0xed, + 0x2c, 0x19, 0xb3, 0xa2, 0xf8, 0xfb, 0x50, 0x70, 0x4c, 0x29, 0xce, 0xeb, 0x75, 0x92, 0xd9, 0x7c, + 0x81, 0x52, 0x48, 0x71, 0xbe, 0xb3, 0x64, 0x28, 0x16, 0xfe, 0x3d, 0x58, 0x95, 0xe6, 0xb1, 0x23, + 0x0e, 0x4e, 0x34, 0x41, 0x50, 0xff, 0x1c, 0x49, 0x79, 0xfd, 0x6a, 0x75, 0x4e, 0xf3, 0xec, 0x2c, + 0x19, 0xd3, 0x62, 0xb0, 0x55, 0x84, 0xaa, 0x37, 0x16, 0x68, 0x15, 0xc9, 0xc3, 0x56, 0x11, 0x0b, + 0xdf, 0x85, 0x2a, 0xfd, 0xd8, 0xf4, 0x9c, 0xc9, 0xc8, 0xad, 0x7f, 0x9e, 0x24, 0xdc, 0x7b, 0xb1, + 0x04, 0x45, 0xbf, 0xb3, 0x64, 0x24, 0xd9, 0x71, 0x12, 0x09, 0x34, 0xbc, 0xe7, 0xf5, 0xdb, 0x0b, + 0x4c, 0x62, 0x4f, 0x13, 0xe3, 0x24, 0x86, 0x8c, 0xb8, 0xf4, 0x9e, 0xdb, 0xd6, 0x40, 0xc8, 0xfa, + 0x17, 0x16, 0x58, 0x7a, 0xcf, 0x88, 0x14, 0x97, 0x9e, 0x62, 0x42, 0x35, 0xee, 0x0f, 0x4d, 0x59, + 0xbf, 0xb3, 0x80, 0x1a, 0x6f, 0x0e, 0x4d, 0xb2, 0x15, 0xc8, 0xd0, 0xf8, 0x21, 0x2c, 0x27, 0xad, + 0x32, 0xe7, 0x90, 0xf7, 0x85, 0xa9, 0x76, 0x84, 0xb2, 0x41, 0xbf, 0x11, 0x27, 0x2c, 0x5b, 0xd2, + 0x8e, 0x50, 0x36, 0xe8, 0x37, 0xbf, 0x09, 0x45, 0xe5, 0x9b, 0x90, 0xc1, 0x2f, 0x1b, 0x1a, 0x42, + 0x5a, 0xcb, 0x37, 0x07, 0xb4, 0x6f, 0x95, 0x0d, 0xfa, 0x8d, 0xb4, 0x96, 0xef, 0x8d, 0x0f, 0x5c, + 0x32, 0xd8, 0x65, 0x43, 0x43, 0x8d, 0x4f, 0x3f, 0x80, 0x92, 0x6e, 0x54, 0xe3, 0x1f, 0x65, 0xa0, + 0xa8, 0x0c, 0x0a, 0xff, 0x36, 0x14, 0x02, 0x79, 0xe1, 0x08, 0x6a, 0xc3, 0xca, 0xc3, 0xaf, 0x2c, + 0x60, 0x84, 0xd6, 0xbb, 0xc8, 0x60, 0x28, 0xbe, 0xa6, 0x01, 0x05, 0x82, 0x79, 0x09, 0x72, 0x86, + 0xf7, 0x9c, 0x2d, 0x71, 0x80, 0xa2, 0x9a, 0x2c, 0x96, 0x41, 0xe4, 0x96, 0x7d, 0xc6, 0xb2, 0x88, + 0xdc, 0x11, 0xa6, 0x25, 0x7c, 0x96, 0xe3, 0x35, 0xa8, 0x84, 0xd3, 0x12, 0xb0, 0x3c, 0x67, 0xb0, + 0x9c, 0x98, 0xf0, 0x80, 0x15, 0x1a, 0xff, 0x3b, 0x0f, 0x79, 0x5c, 0xff, 0xfc, 0x15, 0xa8, 0x49, + 0xd3, 0x1f, 0x08, 0xe5, 0x08, 0x47, 0x4e, 0x4a, 0x1a, 0xc9, 0x3f, 0x08, 0xfb, 0x90, 0xa5, 0x3e, + 0xbc, 0xf6, 0x42, 0xbb, 0x92, 0xea, 0x41, 0x62, 0x17, 0xce, 0x2d, 0xb6, 0x0b, 0x6f, 0x43, 0x19, + 0xcd, 0x59, 0xd7, 0xfe, 0xa1, 0xa0, 0xa1, 0x5f, 0x79, 0x78, 0xff, 0xc5, 0xaf, 0xec, 0x68, 0x0e, + 0x23, 0xe2, 0xe5, 0x1d, 0xa8, 0xf4, 0x4d, 0xdf, 0xa2, 0xc6, 0xd0, 0x6c, 0xad, 0x3c, 0xfc, 0xea, 0x8b, 0x05, 0x6d, 0x86, 0x2c, 0x46, 0xcc, 0xcd, 0x0f, 0xa0, 0x6a, 0x89, 0xa0, 0xef, 0xdb, 0x63, - 0x32, 0x6f, 0x6a, 0x2f, 0xfe, 0xfa, 0x8b, 0x85, 0x6d, 0xc5, 0x4c, 0x46, 0x52, 0x02, 0x7a, 0x64, + 0x32, 0x6f, 0x6a, 0x2f, 0xfe, 0xda, 0x8b, 0x85, 0x6d, 0xc5, 0x4c, 0x46, 0x52, 0x02, 0x7a, 0x64, 0x7e, 0x64, 0xdf, 0x4a, 0xe4, 0x20, 0xc4, 0x88, 0xe6, 0xbb, 0x50, 0x0e, 0xfb, 0xc3, 0x97, 0xa1, 0x8c, 0x7f, 0xf7, 0x3d, 0x57, 0xb0, 0x25, 0x9c, 0x5b, 0x84, 0xba, 0x23, 0xd3, 0x71, 0x58, 0x86, - 0xaf, 0x00, 0x20, 0xb8, 0x27, 0x2c, 0x7b, 0x32, 0x62, 0xd9, 0xe6, 0xb7, 0x42, 0x6d, 0x29, 0x43, + 0xaf, 0x00, 0x20, 0xb8, 0x27, 0x2c, 0x7b, 0x32, 0x62, 0xd9, 0xe6, 0x37, 0x43, 0x6d, 0x29, 0x43, 0xfe, 0xd0, 0x1c, 0x20, 0xc7, 0x32, 0x94, 0x43, 0x73, 0xcd, 0x32, 0xc8, 0xbf, 0x65, 0x06, 0xc3, 0x63, 0xcf, 0xf4, 0x2d, 0x96, 0xe5, 0x55, 0x28, 0xb5, 0xfc, 0xfe, 0xd0, 0x3e, 0x13, 0x2c, 0xd7, 0x7c, 0x00, 0xd5, 0x44, 0x7b, 0x51, 0x84, 0x7e, 0x69, 0x05, 0x0a, 0x2d, 0xcb, 0x12, 0x16, 0xcb, - 0x20, 0x83, 0xee, 0x20, 0xcb, 0x36, 0xbf, 0x06, 0x95, 0x68, 0xb4, 0x90, 0x1c, 0x37, 0x6e, 0xb6, + 0x20, 0x83, 0xee, 0x20, 0xcb, 0x36, 0xbf, 0x0a, 0x95, 0x68, 0xb4, 0x90, 0x1c, 0x37, 0x6e, 0xb6, 0x84, 0xbf, 0x10, 0xcd, 0x32, 0xa8, 0x95, 0x1d, 0xd7, 0xb1, 0x5d, 0xc1, 0xb2, 0x8d, 0xbf, 0x44, - 0xaa, 0xca, 0xbf, 0x9d, 0x5e, 0x10, 0xaf, 0xbe, 0x68, 0x67, 0x4d, 0xaf, 0x86, 0x2f, 0x26, 0xfa, - 0xb7, 0x6b, 0x53, 0xe3, 0xca, 0x90, 0xdf, 0xf2, 0x64, 0xc0, 0x32, 0x8d, 0xff, 0x9e, 0x85, 0x72, + 0xaa, 0xca, 0xbf, 0x95, 0x5e, 0x10, 0xaf, 0xbe, 0x68, 0x67, 0x4d, 0xaf, 0x86, 0xcf, 0x27, 0xfa, + 0xb7, 0x6b, 0x53, 0xe3, 0xca, 0x90, 0xdf, 0xf2, 0x64, 0xc0, 0x32, 0x8d, 0xff, 0x91, 0x85, 0x72, 0xb8, 0xa1, 0x62, 0x4c, 0x30, 0xf1, 0x1d, 0xad, 0xd0, 0xf8, 0x93, 0x5f, 0x87, 0x82, 0xb4, 0xa5, 0x56, 0xe3, 0x8a, 0xa1, 0x00, 0xf4, 0xd5, 0x92, 0x33, 0xab, 0x1c, 0xd8, 0xe9, 0xa9, 0xb2, 0x47, 0xe6, 0x40, 0xec, 0x98, 0xc1, 0x50, 0xbb, 0xb0, 0x31, 0x02, 0xf9, 0x4f, 0xcc, 0x33, 0xd4, 0x39, @@ -9957,23 +9949,23 @@ var fileDescriptor_98a910b73321e591 = []byte{ 0x35, 0xa5, 0xc0, 0x69, 0x6e, 0x8f, 0xc6, 0xf2, 0x42, 0x29, 0xcd, 0xb6, 0x90, 0xfd, 0xa1, 0xed, 0x0e, 0x58, 0x46, 0x0d, 0x31, 0x4e, 0x22, 0x91, 0xf8, 0xbe, 0xe7, 0xb3, 0x5c, 0xa3, 0x01, 0x79, 0xd4, 0x51, 0x34, 0x92, 0xae, 0x39, 0x12, 0x7a, 0xa4, 0xe9, 0x77, 0xe3, 0x1a, 0xac, 0xcd, 0xec, - 0xc7, 0x8d, 0xdf, 0x2f, 0x2a, 0x0d, 0x41, 0x0e, 0xf2, 0x05, 0x35, 0x07, 0xb9, 0x79, 0x2f, 0x65, + 0xc7, 0x8d, 0xdf, 0x2b, 0x2a, 0x0d, 0x41, 0x0e, 0xf2, 0x05, 0x35, 0x07, 0xb9, 0x79, 0x2f, 0x65, 0x63, 0x50, 0x4a, 0xda, 0xc6, 0x7c, 0x00, 0x05, 0xec, 0x58, 0x68, 0x62, 0x16, 0x60, 0xdf, 0x43, 0x72, 0x43, 0x71, 0x61, 0x04, 0xd3, 0x1f, 0x8a, 0xfe, 0xa9, 0xb0, 0xb4, 0xad, 0x0f, 0x41, 0x54, - 0x9a, 0x7e, 0xc2, 0x3d, 0x57, 0x00, 0xa9, 0x44, 0xdf, 0x73, 0xdb, 0x23, 0xef, 0x07, 0x36, 0xcd, + 0x9a, 0x7e, 0xc2, 0x3d, 0x57, 0x00, 0xa9, 0x44, 0xdf, 0x73, 0xdb, 0x23, 0xef, 0xfb, 0x36, 0xcd, 0x2b, 0xaa, 0x44, 0x88, 0x08, 0x9f, 0x76, 0x50, 0x47, 0xf4, 0xb4, 0xc5, 0x88, 0x46, 0x1b, 0x0a, 0xf4, 0x6e, 0x5c, 0x09, 0xaa, 0xcd, 0x2a, 0xd3, 0xf0, 0xea, 0x62, 0x6d, 0xd6, 0x4d, 0x6e, 0xfc, - 0x6e, 0x16, 0xf2, 0x08, 0xf3, 0xfb, 0x50, 0xf0, 0x31, 0x0e, 0xa3, 0xe1, 0xbc, 0x2c, 0x66, 0x53, - 0x24, 0xfc, 0x3b, 0x5a, 0x15, 0xb3, 0x0b, 0x28, 0x4b, 0xf4, 0xc6, 0xa4, 0x5a, 0x5e, 0x87, 0xc2, + 0x4e, 0x16, 0xf2, 0x08, 0xf3, 0xfb, 0x50, 0xf0, 0x31, 0x0e, 0xa3, 0xe1, 0xbc, 0x2c, 0x66, 0x53, + 0x24, 0xfc, 0xdb, 0x5a, 0x15, 0xb3, 0x0b, 0x28, 0x4b, 0xf4, 0xc6, 0xa4, 0x5a, 0x5e, 0x87, 0xc2, 0xd8, 0xf4, 0xcd, 0x91, 0x5e, 0x27, 0x0a, 0x68, 0xfe, 0x24, 0x03, 0x79, 0x24, 0xe2, 0x6b, 0x50, 0xeb, 0x4a, 0xdf, 0x3e, 0x15, 0x72, 0xe8, 0x7b, 0x93, 0xc1, 0x50, 0x69, 0xd2, 0x63, 0x71, 0xa1, 0xec, 0x8d, 0x32, 0x08, 0xd2, 0x74, 0xec, 0x3e, 0xcb, 0xa2, 0x56, 0x6d, 0x78, 0x8e, 0xc5, 0x72, 0x7c, 0x15, 0xaa, 0x4f, 0x5c, 0x4b, 0xf8, 0x41, 0xdf, 0xf3, 0x85, 0xc5, 0xf2, 0x7a, 0x75, 0x9f, 0xb2, 0x02, 0xed, 0x65, 0xe2, 0x5c, 0x52, 0x2c, 0xc4, 0x8a, 0xfc, 0x1a, 0xac, 0x6e, 0xa4, 0x03, - 0x24, 0x56, 0x42, 0x9b, 0xb4, 0x27, 0x5c, 0x54, 0x32, 0x56, 0x56, 0x4a, 0xec, 0xfd, 0xc0, 0x66, - 0x15, 0x7c, 0x99, 0x5a, 0x27, 0x0c, 0x9a, 0xff, 0x3a, 0x13, 0x5a, 0x8e, 0x1a, 0x54, 0x0e, 0x4d, + 0x24, 0x56, 0x42, 0x9b, 0xb4, 0x27, 0x5c, 0x54, 0x32, 0x56, 0x56, 0x4a, 0xec, 0x7d, 0xdf, 0x66, + 0x15, 0x7c, 0x99, 0x5a, 0x27, 0x0c, 0x9a, 0xff, 0x26, 0x13, 0x5a, 0x8e, 0x1a, 0x54, 0x0e, 0x4d, 0xdf, 0x1c, 0xf8, 0xe6, 0x18, 0xdb, 0x57, 0x85, 0x92, 0xda, 0x38, 0xdf, 0x54, 0xd6, 0x4d, 0x01, - 0x0f, 0x95, 0x6d, 0x54, 0xc0, 0x5b, 0x2c, 0x17, 0x03, 0x6f, 0xb3, 0x3c, 0xbe, 0xe3, 0x7b, 0x13, + 0x0f, 0x95, 0x6d, 0x54, 0xc0, 0x5b, 0x2c, 0x17, 0x03, 0x6f, 0xb3, 0x3c, 0xbe, 0xe3, 0xbb, 0x13, 0x4f, 0x0a, 0x56, 0x20, 0x5b, 0xe7, 0x59, 0x82, 0x15, 0x11, 0xd9, 0x43, 0x8b, 0xc2, 0x4a, 0xd8, 0xe7, 0x4d, 0xd4, 0x9f, 0x63, 0xef, 0x9c, 0x95, 0xb1, 0x19, 0x38, 0x8c, 0xc2, 0x62, 0x15, 0x7c, 0xb2, 0x3f, 0x19, 0x1d, 0x0b, 0xec, 0x26, 0xe0, 0x93, 0x9e, 0x37, 0x18, 0x38, 0x82, 0x55, 0x71, @@ -9986,18 +9978,18 @@ var fileDescriptor_98a910b73321e591 = []byte{ 0x34, 0xca, 0x8b, 0xb3, 0x27, 0x36, 0x93, 0x2d, 0xad, 0xb5, 0xf1, 0x46, 0x57, 0x56, 0xa3, 0xcc, 0x32, 0x38, 0x9b, 0xb4, 0x5c, 0x95, 0xcd, 0x7b, 0x6a, 0x5b, 0xc2, 0x63, 0x39, 0xda, 0x08, 0x27, 0x96, 0xed, 0xb1, 0x3c, 0x7a, 0x5e, 0x87, 0x5b, 0xdb, 0xac, 0xd0, 0x7c, 0x35, 0xb1, 0x25, 0xb5, - 0x26, 0xd2, 0x53, 0x62, 0x48, 0x7d, 0x33, 0x4a, 0x1b, 0x8f, 0x85, 0xc5, 0xb2, 0xcd, 0x6f, 0xcc, + 0x26, 0xd2, 0x53, 0x62, 0x48, 0x7d, 0x33, 0x4a, 0x1b, 0x8f, 0x85, 0xc5, 0xb2, 0xcd, 0xaf, 0xcf, 0x31, 0xb3, 0x35, 0xa8, 0x3c, 0x19, 0x3b, 0x9e, 0x69, 0x5d, 0x61, 0x67, 0x97, 0x01, 0xe2, 0xa8, 0xba, 0xf1, 0x8b, 0x66, 0xbc, 0x9d, 0xa3, 0x2f, 0x1a, 0x78, 0x13, 0xbf, 0x2f, 0xc8, 0x84, 0x54, - 0x0c, 0x0d, 0xf1, 0xef, 0x42, 0x01, 0x9f, 0x87, 0x69, 0x9c, 0xfb, 0x0b, 0xc5, 0x72, 0xeb, 0x4f, + 0x0c, 0x0d, 0xf1, 0xef, 0x40, 0x01, 0x9f, 0x87, 0x69, 0x9c, 0xfb, 0x0b, 0xc5, 0x72, 0xeb, 0x4f, 0x6d, 0xf1, 0xdc, 0x50, 0x8c, 0xfc, 0x0e, 0x80, 0xd9, 0x97, 0xf6, 0x99, 0x40, 0xa4, 0x5e, 0xec, 0x09, 0x0c, 0x7f, 0x27, 0xe9, 0xbe, 0x5c, 0x9d, 0x87, 0x4c, 0xf8, 0x35, 0xdc, 0x80, 0x2a, 0x2e, 0xdd, 0xf1, 0x81, 0x8f, 0xab, 0xbd, 0xbe, 0x4c, 0x8c, 0x6f, 0x2c, 0xd6, 0xbc, 0x47, 0x11, 0xa3, 0x91, 0x14, 0xc2, 0x9f, 0xc0, 0xb2, 0xca, 0xa9, 0x69, 0xa1, 0x35, 0x12, 0xfa, 0xe6, 0x62, 0x42, 0x0f, 0x62, 0x4e, 0x23, 0x25, 0x66, 0x36, 0x2d, 0x59, 0x78, 0xe9, 0xb4, 0xe4, 0xab, 0xb0, 0xd2, 0x4b, 0xaf, 0x02, 0xb5, 0x55, 0x4c, 0x61, 0x79, 0x13, 0x96, 0xed, 0x20, 0xce, 0x8a, 0x52, 0x8e, - 0xa4, 0x6c, 0xa4, 0x70, 0x8d, 0x7f, 0x5f, 0x84, 0x3c, 0x8d, 0xfc, 0x74, 0x8e, 0x6b, 0x33, 0x65, - 0xd2, 0x1f, 0x2c, 0x3e, 0xd5, 0x53, 0x2b, 0x9e, 0x2c, 0x48, 0x2e, 0x61, 0x41, 0xbe, 0x0b, 0x85, + 0xa4, 0x6c, 0xa4, 0x70, 0x8d, 0xff, 0x50, 0x84, 0x3c, 0x8d, 0xfc, 0x74, 0x8e, 0x6b, 0x33, 0x65, + 0xd2, 0x1f, 0x2c, 0x3e, 0xd5, 0x53, 0x2b, 0x9e, 0x2c, 0x48, 0x2e, 0x61, 0x41, 0xbe, 0x03, 0x85, 0xc0, 0xf3, 0x65, 0x38, 0xbd, 0x0b, 0x2a, 0x51, 0xd7, 0xf3, 0xa5, 0xa1, 0x18, 0xf9, 0x36, 0x94, 0x4e, 0x6c, 0x47, 0xe2, 0xa4, 0xa8, 0xc1, 0x7b, 0x7d, 0x31, 0x19, 0xdb, 0xc4, 0x64, 0x84, 0xcc, 0x7c, 0x37, 0xa9, 0x6c, 0x45, 0x92, 0xb4, 0xbe, 0x98, 0xa4, 0x79, 0x3a, 0x78, 0x1f, 0x58, 0xdf, @@ -10017,11 +10009,11 @@ var fileDescriptor_98a910b73321e591 = []byte{ 0xcf, 0x10, 0xd0, 0x8d, 0x0b, 0x9e, 0xda, 0x81, 0x7d, 0xac, 0xdd, 0xd2, 0xb2, 0x11, 0x23, 0xd0, 0x13, 0x7a, 0x6e, 0x5b, 0x72, 0x48, 0x6b, 0xa6, 0x60, 0x28, 0x80, 0xdf, 0x83, 0x55, 0x0b, 0xc7, 0xc1, 0xed, 0x3b, 0x13, 0x4b, 0xf4, 0x70, 0x17, 0x55, 0x69, 0x82, 0x69, 0x34, 0xff, 0x18, 0x40, - 0xda, 0x23, 0xb1, 0xed, 0xf9, 0x23, 0x53, 0xea, 0xd8, 0xe0, 0x9b, 0x2f, 0xa7, 0xd5, 0xeb, 0xbd, - 0x48, 0x80, 0x91, 0x10, 0x86, 0xa2, 0xf1, 0x6d, 0x5a, 0x74, 0xe9, 0x73, 0x89, 0xde, 0x8a, 0x04, + 0xda, 0x23, 0xb1, 0xed, 0xf9, 0x23, 0x53, 0xea, 0xd8, 0xe0, 0x1b, 0x2f, 0xa7, 0xd5, 0xeb, 0xbd, + 0x48, 0x80, 0x91, 0x10, 0x86, 0xa2, 0xf1, 0x6d, 0x5a, 0x74, 0xe9, 0x33, 0x89, 0xde, 0x8a, 0x04, 0x18, 0x09, 0x61, 0xbc, 0x07, 0xa5, 0x13, 0xcf, 0x1f, 0x4d, 0x1c, 0x53, 0xef, 0xb9, 0xef, 0xbf, 0xa4, 0xdc, 0x6d, 0xc5, 0x4d, 0xb6, 0x27, 0x14, 0x15, 0xe7, 0xb8, 0x2b, 0x0b, 0xe6, 0xb8, 0x9b, - 0xbf, 0x0c, 0x10, 0xb7, 0x90, 0xdf, 0x04, 0xbe, 0xe7, 0xb9, 0x72, 0xd8, 0x3a, 0x3e, 0xf6, 0x37, + 0xbf, 0x04, 0x10, 0xb7, 0x90, 0xdf, 0x04, 0xbe, 0xe7, 0xb9, 0x72, 0xd8, 0x3a, 0x3e, 0xf6, 0x37, 0xc4, 0x89, 0xe7, 0x8b, 0x2d, 0x13, 0xb7, 0xd7, 0x1b, 0xb0, 0x16, 0xe1, 0x5b, 0x27, 0x52, 0xf8, 0x88, 0x26, 0x15, 0xe8, 0x0e, 0x3d, 0x5f, 0x2a, 0x1f, 0x8f, 0x7e, 0x3e, 0xe9, 0xb2, 0x1c, 0x6e, 0xe9, 0x9d, 0xee, 0x01, 0xcb, 0x37, 0xef, 0x01, 0xc4, 0x43, 0x4b, 0xb1, 0x10, 0xfd, 0x7a, 0xf3, @@ -10032,70 +10024,70 @@ var fileDescriptor_98a910b73321e591 = []byte{ 0x35, 0x26, 0x22, 0x53, 0xce, 0xb0, 0x29, 0x87, 0xdd, 0xc9, 0x88, 0x95, 0xd1, 0xa9, 0x44, 0xa0, 0x75, 0x26, 0x7c, 0xf4, 0x65, 0x2a, 0xf8, 0x1e, 0x44, 0xe0, 0x6a, 0x30, 0x5d, 0x06, 0x21, 0xf5, 0x9e, 0xed, 0xb2, 0x6a, 0x04, 0x98, 0xe7, 0x6c, 0x19, 0xdb, 0x4f, 0xa1, 0x03, 0xab, 0x35, 0xfe, - 0x5b, 0x0e, 0xf2, 0x68, 0xd7, 0x31, 0xd6, 0x4d, 0x1a, 0x21, 0xb5, 0x56, 0x92, 0xa8, 0xcf, 0xb7, + 0x7b, 0x0e, 0xf2, 0x68, 0xd7, 0x31, 0xd6, 0x4d, 0x1a, 0x21, 0xb5, 0x56, 0x92, 0xa8, 0xcf, 0xb6, 0x1b, 0xa1, 0xec, 0xe4, 0x6e, 0xf4, 0x1e, 0x54, 0xfb, 0x93, 0x40, 0x7a, 0x23, 0xda, 0x8a, 0xf5, 0x69, 0xd7, 0xcd, 0x99, 0xac, 0x11, 0x0d, 0xa7, 0x91, 0x24, 0xe5, 0xef, 0x40, 0xf1, 0x44, 0x69, - 0xbd, 0xca, 0x1b, 0xfd, 0xd2, 0x25, 0xbb, 0xb5, 0xd6, 0x6c, 0x4d, 0x8c, 0xfd, 0xb2, 0x67, 0x56, - 0x6c, 0x12, 0xa5, 0x77, 0xdd, 0x62, 0xb4, 0xeb, 0xfe, 0x32, 0xac, 0x08, 0x1c, 0xf0, 0x43, 0xc7, - 0xec, 0x8b, 0x91, 0x70, 0xc3, 0x65, 0xf6, 0xf6, 0x4b, 0xf4, 0x98, 0x66, 0x8c, 0xba, 0x3d, 0x25, - 0x0b, 0x2d, 0x8f, 0xeb, 0xe1, 0xe6, 0x1f, 0x06, 0xf6, 0x65, 0x23, 0x46, 0x34, 0xbf, 0xa2, 0xed, - 0x65, 0x09, 0x72, 0xad, 0xa0, 0xaf, 0x33, 0x20, 0x22, 0xe8, 0xab, 0xf0, 0x6a, 0x93, 0x86, 0x83, - 0x65, 0x9b, 0x6f, 0x42, 0x25, 0x7a, 0x03, 0x2a, 0xcf, 0xbe, 0x27, 0xbb, 0x63, 0xd1, 0xb7, 0x4f, - 0x6c, 0x61, 0x29, 0xfd, 0xec, 0x4a, 0xd3, 0x97, 0x2a, 0x89, 0xd8, 0x76, 0x2d, 0x96, 0x6d, 0xfc, - 0x4e, 0x19, 0x8a, 0x6a, 0xf3, 0xd5, 0x1d, 0xae, 0x44, 0x1d, 0xfe, 0x1e, 0x94, 0xbd, 0xb1, 0xf0, - 0x4d, 0xe9, 0xf9, 0x3a, 0x73, 0xf3, 0xce, 0xcb, 0x6c, 0xe6, 0xeb, 0x07, 0x9a, 0xd9, 0x88, 0xc4, - 0x4c, 0x6b, 0x53, 0x76, 0x56, 0x9b, 0xee, 0x03, 0x0b, 0xf7, 0xed, 0x43, 0x1f, 0xf9, 0xe4, 0x85, - 0x8e, 0xc3, 0x67, 0xf0, 0xbc, 0x07, 0x95, 0xbe, 0xe7, 0x5a, 0x76, 0x94, 0xc5, 0x59, 0x79, 0xf8, - 0x8d, 0x97, 0x6a, 0xe1, 0x66, 0xc8, 0x6d, 0xc4, 0x82, 0xf8, 0xeb, 0x50, 0x38, 0x43, 0x35, 0x23, - 0x7d, 0xba, 0x5c, 0x09, 0x15, 0x11, 0xff, 0x04, 0xaa, 0x3f, 0x9c, 0xd8, 0xfd, 0xd3, 0x83, 0x64, - 0x96, 0xf0, 0xbd, 0x97, 0x6a, 0xc5, 0xf7, 0x62, 0x7e, 0x23, 0x29, 0x2c, 0xa1, 0xda, 0xa5, 0x3f, - 0x85, 0x6a, 0x97, 0x67, 0x55, 0xdb, 0x80, 0x9a, 0x2b, 0x02, 0x29, 0xac, 0x6d, 0xed, 0xab, 0xc1, - 0xe7, 0xf0, 0xd5, 0xd2, 0x22, 0x9a, 0x5f, 0x86, 0x72, 0x38, 0xe1, 0xbc, 0x08, 0xd9, 0x7d, 0x0c, - 0x8a, 0x8a, 0x90, 0x3d, 0xf0, 0x95, 0xb6, 0xb5, 0x50, 0xdb, 0x9a, 0x7f, 0x9c, 0x81, 0x4a, 0x34, - 0xe8, 0x69, 0xcb, 0xd9, 0xfe, 0xe1, 0xc4, 0x74, 0x58, 0x86, 0xc2, 0x65, 0x4f, 0x2a, 0x88, 0x8c, - 0xf5, 0x23, 0x3a, 0xac, 0xf7, 0x59, 0x8e, 0x5c, 0x04, 0x11, 0x04, 0x2c, 0xcf, 0x39, 0xac, 0x68, - 0xf4, 0x81, 0xaf, 0x48, 0x0b, 0x68, 0xf8, 0xf0, 0x69, 0x88, 0x28, 0x2a, 0x8f, 0xe2, 0x54, 0x28, - 0x03, 0xb9, 0xef, 0x49, 0x02, 0xca, 0xd8, 0xa8, 0x8e, 0xcb, 0x2a, 0xf8, 0xce, 0x7d, 0x4f, 0x76, - 0xd0, 0x24, 0x46, 0xe1, 0x59, 0x35, 0x7c, 0x3d, 0x41, 0x64, 0x11, 0x5b, 0x8e, 0xd3, 0x71, 0x59, - 0x4d, 0x3f, 0x50, 0xd0, 0x0a, 0x4a, 0x6c, 0x9f, 0x9b, 0x7d, 0x64, 0x5f, 0x45, 0x0b, 0x8b, 0x3c, - 0x1a, 0x66, 0xb8, 0x24, 0xdb, 0xe7, 0x76, 0x20, 0x03, 0xb6, 0xd6, 0xfc, 0xa3, 0x0c, 0x54, 0x13, - 0x13, 0x8c, 0xe1, 0x1f, 0x11, 0xe2, 0x56, 0xa6, 0xa2, 0xc1, 0x8f, 0x71, 0x18, 0x7d, 0x2b, 0xdc, - 0xa6, 0x7a, 0x1e, 0xfe, 0xcc, 0xe2, 0xfb, 0x7a, 0xde, 0xc8, 0xf3, 0x7d, 0xef, 0xb9, 0x72, 0x7d, - 0x76, 0xcd, 0x40, 0x3e, 0x13, 0xe2, 0x94, 0xe5, 0xb1, 0xab, 0x9b, 0x13, 0xdf, 0x17, 0xae, 0x42, - 0x14, 0xa8, 0x71, 0xe2, 0x5c, 0x41, 0x45, 0x14, 0x8a, 0xc4, 0xb4, 0x0f, 0xb2, 0x12, 0x1a, 0x02, - 0x4d, 0xad, 0x30, 0x65, 0x24, 0x40, 0x72, 0x05, 0x56, 0x70, 0x53, 0x51, 0x19, 0x8a, 0x83, 0x93, - 0x2d, 0xf3, 0x22, 0x68, 0x0d, 0x3c, 0x06, 0xd3, 0xc8, 0x7d, 0xef, 0x39, 0xab, 0x36, 0x26, 0x00, - 0x71, 0x4c, 0x86, 0xb1, 0x28, 0x2a, 0x44, 0x74, 0x86, 0xa0, 0x21, 0x7e, 0x00, 0x80, 0xbf, 0x88, - 0x32, 0x0c, 0x48, 0x5f, 0xc2, 0x51, 0x26, 0x3e, 0x23, 0x21, 0xa2, 0xf1, 0x57, 0xa0, 0x12, 0x3d, - 0xe0, 0x75, 0x28, 0x91, 0x4b, 0x1b, 0xbd, 0x36, 0x04, 0xd1, 0x3f, 0xb3, 0x5d, 0x4b, 0x9c, 0x93, - 0x5d, 0x29, 0x18, 0x0a, 0xc0, 0x56, 0x0e, 0x6d, 0xcb, 0x12, 0x6e, 0x78, 0xd2, 0xa3, 0xa0, 0x79, - 0xe7, 0xf1, 0xf9, 0xb9, 0xe7, 0xf1, 0x8d, 0x5f, 0x81, 0x6a, 0x22, 0x68, 0xbc, 0xb4, 0xdb, 0x89, - 0x86, 0x65, 0xd3, 0x0d, 0xbb, 0x0d, 0x95, 0xb0, 0x06, 0x24, 0xa0, 0xbd, 0xad, 0x62, 0xc4, 0x88, - 0xc6, 0x3f, 0xcf, 0xa2, 0x27, 0x8b, 0x5d, 0x9b, 0x0e, 0xf4, 0xb6, 0xa1, 0x18, 0x48, 0x53, 0x4e, - 0xc2, 0x62, 0x86, 0x05, 0x17, 0x68, 0x97, 0x78, 0x76, 0x96, 0x0c, 0xcd, 0xcd, 0x3f, 0x80, 0x9c, - 0x34, 0x07, 0x3a, 0x51, 0xfa, 0xd5, 0xc5, 0x84, 0xf4, 0xcc, 0xc1, 0xce, 0x92, 0x81, 0x7c, 0x7c, - 0x17, 0xca, 0x7d, 0x9d, 0xdb, 0xd2, 0x46, 0x71, 0xc1, 0x58, 0x2c, 0xcc, 0x88, 0xed, 0x2c, 0x19, - 0x91, 0x04, 0xfe, 0x5d, 0xc8, 0xa3, 0x77, 0xa9, 0x6b, 0x3e, 0x16, 0x8c, 0x31, 0x71, 0xb9, 0xec, - 0x2c, 0x19, 0xc4, 0xb9, 0x51, 0x82, 0x02, 0xd9, 0xe0, 0x46, 0x1d, 0x8a, 0xaa, 0xaf, 0xd3, 0x23, - 0xd7, 0xb8, 0x05, 0xb9, 0x9e, 0x39, 0x40, 0x0f, 0xdf, 0xb6, 0x02, 0x9d, 0x2a, 0xc1, 0x9f, 0x8d, - 0x57, 0xe2, 0x3c, 0x5d, 0x32, 0x05, 0x9c, 0x49, 0xa5, 0x80, 0x1b, 0x45, 0xc8, 0xe3, 0x1b, 0x1b, - 0xb7, 0xaf, 0x8a, 0x16, 0x1a, 0xff, 0x34, 0x87, 0x81, 0x85, 0x14, 0xe7, 0x73, 0xd3, 0xdb, 0x1f, - 0x41, 0x65, 0xec, 0x7b, 0x7d, 0x11, 0x04, 0x9e, 0xaf, 0x9d, 0xa3, 0xd7, 0x5f, 0x7c, 0xf4, 0xbc, - 0x7e, 0x18, 0xf2, 0x18, 0x31, 0x7b, 0xf3, 0xdf, 0x66, 0xa1, 0x12, 0x3d, 0x50, 0xf1, 0x8c, 0x14, - 0xe7, 0x2a, 0x95, 0xb9, 0x27, 0xfc, 0x91, 0x69, 0x5b, 0xca, 0x7a, 0x6c, 0x0e, 0xcd, 0xd0, 0xc9, - 0xfd, 0xd8, 0x9b, 0xc8, 0xc9, 0xb1, 0x50, 0x29, 0xac, 0xa7, 0xf6, 0x48, 0x78, 0x2c, 0x4f, 0x87, - 0x47, 0xa8, 0xd8, 0x7d, 0xc7, 0x9b, 0x58, 0xac, 0x80, 0xf0, 0x23, 0xda, 0xde, 0xf6, 0xcc, 0x71, - 0xa0, 0x6c, 0xe6, 0x9e, 0xed, 0x7b, 0xac, 0x84, 0x4c, 0xdb, 0xf6, 0x60, 0x64, 0xb2, 0x32, 0x0a, - 0xeb, 0x3d, 0xb7, 0x25, 0x1a, 0xe1, 0x0a, 0xba, 0xa9, 0x07, 0x63, 0xe1, 0x76, 0xa5, 0x2f, 0x84, - 0xdc, 0x33, 0xc7, 0x2a, 0xa7, 0x69, 0x08, 0xcb, 0xb2, 0xa5, 0xb2, 0x9f, 0xdb, 0x66, 0x5f, 0x1c, - 0x7b, 0xde, 0x29, 0x5b, 0x46, 0x43, 0xd3, 0x71, 0x03, 0x69, 0x0e, 0x7c, 0x73, 0xa4, 0x6c, 0x68, - 0x4f, 0x38, 0x82, 0xa0, 0x15, 0x7a, 0xb7, 0x2d, 0x87, 0x93, 0xe3, 0x47, 0x18, 0xf7, 0xad, 0xaa, - 0x73, 0x26, 0x4b, 0x8c, 0x05, 0xda, 0xd0, 0x65, 0x28, 0x6f, 0xd8, 0x8e, 0x7d, 0x6c, 0x3b, 0x36, - 0x5b, 0x43, 0xd2, 0xf6, 0x79, 0xdf, 0x74, 0x6c, 0xcb, 0x37, 0x9f, 0x33, 0x8e, 0x8d, 0x7b, 0xec, - 0x7b, 0xa7, 0x36, 0xbb, 0x86, 0x84, 0x14, 0x06, 0x9e, 0xd9, 0x9f, 0xb2, 0xeb, 0x74, 0x56, 0x76, + 0xbd, 0xca, 0x1b, 0x7d, 0xe1, 0x92, 0xdd, 0x5a, 0x6b, 0xb6, 0x26, 0xc6, 0x7e, 0xd9, 0x33, 0x2b, + 0x36, 0x89, 0xd2, 0xbb, 0x6e, 0x31, 0xda, 0x75, 0x7f, 0x09, 0x56, 0x04, 0x0e, 0xf8, 0xa1, 0x63, + 0xf6, 0xc5, 0x48, 0xb8, 0xe1, 0x32, 0x7b, 0xfb, 0x25, 0x7a, 0x4c, 0x33, 0x46, 0xdd, 0x9e, 0x92, + 0x85, 0x96, 0xc7, 0xf5, 0x70, 0xf3, 0x0f, 0x03, 0xfb, 0xb2, 0x11, 0x23, 0x9a, 0x5f, 0xd6, 0xf6, + 0xb2, 0x04, 0xb9, 0x56, 0xd0, 0xd7, 0x19, 0x10, 0x11, 0xf4, 0x55, 0x78, 0xb5, 0x49, 0xc3, 0xc1, + 0xb2, 0xcd, 0x37, 0xa1, 0x12, 0xbd, 0x01, 0x95, 0x67, 0xdf, 0x93, 0xdd, 0xb1, 0xe8, 0xdb, 0x27, + 0xb6, 0xb0, 0x94, 0x7e, 0x76, 0xa5, 0xe9, 0x4b, 0x95, 0x44, 0x6c, 0xbb, 0x16, 0xcb, 0x36, 0x7e, + 0xbb, 0x0c, 0x45, 0xb5, 0xf9, 0xea, 0x0e, 0x57, 0xa2, 0x0e, 0x7f, 0x17, 0xca, 0xde, 0x58, 0xf8, + 0xa6, 0xf4, 0x7c, 0x9d, 0xb9, 0x79, 0xe7, 0x65, 0x36, 0xf3, 0xf5, 0x03, 0xcd, 0x6c, 0x44, 0x62, + 0xa6, 0xb5, 0x29, 0x3b, 0xab, 0x4d, 0xf7, 0x81, 0x85, 0xfb, 0xf6, 0xa1, 0x8f, 0x7c, 0xf2, 0x42, + 0xc7, 0xe1, 0x33, 0x78, 0xde, 0x83, 0x4a, 0xdf, 0x73, 0x2d, 0x3b, 0xca, 0xe2, 0xac, 0x3c, 0xfc, + 0xfa, 0x4b, 0xb5, 0x70, 0x33, 0xe4, 0x36, 0x62, 0x41, 0xfc, 0x75, 0x28, 0x9c, 0xa1, 0x9a, 0x91, + 0x3e, 0x5d, 0xae, 0x84, 0x8a, 0x88, 0x7f, 0x02, 0xd5, 0x1f, 0x4c, 0xec, 0xfe, 0xe9, 0x41, 0x32, + 0x4b, 0xf8, 0xde, 0x4b, 0xb5, 0xe2, 0xbb, 0x31, 0xbf, 0x91, 0x14, 0x96, 0x50, 0xed, 0xd2, 0x9f, + 0x40, 0xb5, 0xcb, 0xb3, 0xaa, 0x6d, 0x40, 0xcd, 0x15, 0x81, 0x14, 0xd6, 0xb6, 0xf6, 0xd5, 0xe0, + 0x33, 0xf8, 0x6a, 0x69, 0x11, 0xcd, 0x2f, 0x41, 0x39, 0x9c, 0x70, 0x5e, 0x84, 0xec, 0x3e, 0x06, + 0x45, 0x45, 0xc8, 0x1e, 0xf8, 0x4a, 0xdb, 0x5a, 0xa8, 0x6d, 0xcd, 0x3f, 0xca, 0x40, 0x25, 0x1a, + 0xf4, 0xb4, 0xe5, 0x6c, 0xff, 0x60, 0x62, 0x3a, 0x2c, 0x43, 0xe1, 0xb2, 0x27, 0x15, 0x44, 0xc6, + 0xfa, 0x11, 0x1d, 0xd6, 0xfb, 0x2c, 0x47, 0x2e, 0x82, 0x08, 0x02, 0x96, 0xe7, 0x1c, 0x56, 0x34, + 0xfa, 0xc0, 0x57, 0xa4, 0x05, 0x34, 0x7c, 0xf8, 0x34, 0x44, 0x14, 0x95, 0x47, 0x71, 0x2a, 0x94, + 0x81, 0xdc, 0xf7, 0x24, 0x01, 0x65, 0x6c, 0x54, 0xc7, 0x65, 0x15, 0x7c, 0xe7, 0xbe, 0x27, 0x3b, + 0x68, 0x12, 0xa3, 0xf0, 0xac, 0x1a, 0xbe, 0x9e, 0x20, 0xb2, 0x88, 0x2d, 0xc7, 0xe9, 0xb8, 0xac, + 0xa6, 0x1f, 0x28, 0x68, 0x05, 0x25, 0xb6, 0xcf, 0xcd, 0x3e, 0xb2, 0xaf, 0xa2, 0x85, 0x45, 0x1e, + 0x0d, 0x33, 0x5c, 0x92, 0xed, 0x73, 0x3b, 0x90, 0x01, 0x5b, 0x6b, 0xfe, 0x61, 0x06, 0xaa, 0x89, + 0x09, 0xc6, 0xf0, 0x8f, 0x08, 0x71, 0x2b, 0x53, 0xd1, 0xe0, 0xc7, 0x38, 0x8c, 0xbe, 0x15, 0x6e, + 0x53, 0x3d, 0x0f, 0x7f, 0x66, 0xf1, 0x7d, 0x3d, 0x6f, 0xe4, 0xf9, 0xbe, 0xf7, 0x5c, 0xb9, 0x3e, + 0xbb, 0x66, 0x20, 0x9f, 0x09, 0x71, 0xca, 0xf2, 0xd8, 0xd5, 0xcd, 0x89, 0xef, 0x0b, 0x57, 0x21, + 0x0a, 0xd4, 0x38, 0x71, 0xae, 0xa0, 0x22, 0x0a, 0x45, 0x62, 0xda, 0x07, 0x59, 0x09, 0x0d, 0x81, + 0xa6, 0x56, 0x98, 0x32, 0x12, 0x20, 0xb9, 0x02, 0x2b, 0xb8, 0xa9, 0xa8, 0x0c, 0xc5, 0xc1, 0xc9, + 0x96, 0x79, 0x11, 0xb4, 0x06, 0x1e, 0x83, 0x69, 0xe4, 0xbe, 0xf7, 0x9c, 0x55, 0x1b, 0x13, 0x80, + 0x38, 0x26, 0xc3, 0x58, 0x14, 0x15, 0x22, 0x3a, 0x43, 0xd0, 0x10, 0x3f, 0x00, 0xc0, 0x5f, 0x44, + 0x19, 0x06, 0xa4, 0x2f, 0xe1, 0x28, 0x13, 0x9f, 0x91, 0x10, 0xd1, 0xf8, 0x2b, 0x50, 0x89, 0x1e, + 0xf0, 0x3a, 0x94, 0xc8, 0xa5, 0x8d, 0x5e, 0x1b, 0x82, 0xe8, 0x9f, 0xd9, 0xae, 0x25, 0xce, 0xc9, + 0xae, 0x14, 0x0c, 0x05, 0x60, 0x2b, 0x87, 0xb6, 0x65, 0x09, 0x37, 0x3c, 0xe9, 0x51, 0xd0, 0xbc, + 0xf3, 0xf8, 0xfc, 0xdc, 0xf3, 0xf8, 0xc6, 0x2f, 0x43, 0x35, 0x11, 0x34, 0x5e, 0xda, 0xed, 0x44, + 0xc3, 0xb2, 0xe9, 0x86, 0xdd, 0x86, 0x4a, 0x58, 0x03, 0x12, 0xd0, 0xde, 0x56, 0x31, 0x62, 0x44, + 0xe3, 0x5f, 0x64, 0xd1, 0x93, 0xc5, 0xae, 0x4d, 0x07, 0x7a, 0xdb, 0x50, 0x0c, 0xa4, 0x29, 0x27, + 0x61, 0x31, 0xc3, 0x82, 0x0b, 0xb4, 0x4b, 0x3c, 0x3b, 0x4b, 0x86, 0xe6, 0xe6, 0x1f, 0x40, 0x4e, + 0x9a, 0x03, 0x9d, 0x28, 0xfd, 0xca, 0x62, 0x42, 0x7a, 0xe6, 0x60, 0x67, 0xc9, 0x40, 0x3e, 0xbe, + 0x0b, 0xe5, 0xbe, 0xce, 0x6d, 0x69, 0xa3, 0xb8, 0x60, 0x2c, 0x16, 0x66, 0xc4, 0x76, 0x96, 0x8c, + 0x48, 0x02, 0xff, 0x0e, 0xe4, 0xd1, 0xbb, 0xd4, 0x35, 0x1f, 0x0b, 0xc6, 0x98, 0xb8, 0x5c, 0x76, + 0x96, 0x0c, 0xe2, 0xdc, 0x28, 0x41, 0x81, 0x6c, 0x70, 0xa3, 0x0e, 0x45, 0xd5, 0xd7, 0xe9, 0x91, + 0x6b, 0xdc, 0x82, 0x5c, 0xcf, 0x1c, 0xa0, 0x87, 0x6f, 0x5b, 0x81, 0x4e, 0x95, 0xe0, 0xcf, 0xc6, + 0x2b, 0x71, 0x9e, 0x2e, 0x99, 0x02, 0xce, 0xa4, 0x52, 0xc0, 0x8d, 0x22, 0xe4, 0xf1, 0x8d, 0x8d, + 0xdb, 0x57, 0x45, 0x0b, 0x8d, 0x7f, 0x9a, 0xc3, 0xc0, 0x42, 0x8a, 0xf3, 0xb9, 0xe9, 0xed, 0x8f, + 0xa0, 0x32, 0xf6, 0xbd, 0xbe, 0x08, 0x02, 0xcf, 0xd7, 0xce, 0xd1, 0xeb, 0x2f, 0x3e, 0x7a, 0x5e, + 0x3f, 0x0c, 0x79, 0x8c, 0x98, 0xbd, 0xf9, 0xef, 0xb2, 0x50, 0x89, 0x1e, 0xa8, 0x78, 0x46, 0x8a, + 0x73, 0x95, 0xca, 0xdc, 0x13, 0xfe, 0xc8, 0xb4, 0x2d, 0x65, 0x3d, 0x36, 0x87, 0x66, 0xe8, 0xe4, + 0x7e, 0xec, 0x4d, 0xe4, 0xe4, 0x58, 0xa8, 0x14, 0xd6, 0x53, 0x7b, 0x24, 0x3c, 0x96, 0xa7, 0xc3, + 0x23, 0x54, 0xec, 0xbe, 0xe3, 0x4d, 0x2c, 0x56, 0x40, 0xf8, 0x11, 0x6d, 0x6f, 0x7b, 0xe6, 0x38, + 0x50, 0x36, 0x73, 0xcf, 0xf6, 0x3d, 0x56, 0x42, 0xa6, 0x6d, 0x7b, 0x30, 0x32, 0x59, 0x19, 0x85, + 0xf5, 0x9e, 0xdb, 0x12, 0x8d, 0x70, 0x05, 0xdd, 0xd4, 0x83, 0xb1, 0x70, 0xbb, 0xd2, 0x17, 0x42, + 0xee, 0x99, 0x63, 0x95, 0xd3, 0x34, 0x84, 0x65, 0xd9, 0x52, 0xd9, 0xcf, 0x6d, 0xb3, 0x2f, 0x8e, + 0x3d, 0xef, 0x94, 0x2d, 0xa3, 0xa1, 0xe9, 0xb8, 0x81, 0x34, 0x07, 0xbe, 0x39, 0x52, 0x36, 0xb4, + 0x27, 0x1c, 0x41, 0xd0, 0x0a, 0xbd, 0xdb, 0x96, 0xc3, 0xc9, 0xf1, 0x23, 0x8c, 0xfb, 0x56, 0xd5, + 0x39, 0x93, 0x25, 0xc6, 0x02, 0x6d, 0xe8, 0x32, 0x94, 0x37, 0x6c, 0xc7, 0x3e, 0xb6, 0x1d, 0x9b, + 0xad, 0x21, 0x69, 0xfb, 0xbc, 0x6f, 0x3a, 0xb6, 0xe5, 0x9b, 0xcf, 0x19, 0xc7, 0xc6, 0x3d, 0xf6, + 0xbd, 0x53, 0x9b, 0x5d, 0x43, 0x42, 0x0a, 0x03, 0xcf, 0xec, 0x1f, 0xb2, 0xeb, 0x74, 0x56, 0x76, 0x2a, 0x64, 0x7f, 0x78, 0x62, 0x1e, 0xb3, 0x1b, 0x71, 0x4a, 0xef, 0x66, 0x63, 0x0d, 0x56, 0xa7, 0x4e, 0xe5, 0x1b, 0x25, 0x1d, 0x7d, 0x36, 0x6a, 0x50, 0x4d, 0x1c, 0x97, 0x36, 0x5e, 0x85, 0x72, - 0x78, 0x98, 0x8a, 0x51, 0xba, 0x1d, 0xa8, 0x34, 0xb0, 0x56, 0x92, 0x08, 0x6e, 0xfc, 0xa7, 0x0c, + 0x78, 0x98, 0x8a, 0x51, 0xba, 0x1d, 0xa8, 0x34, 0xb0, 0x56, 0x92, 0x08, 0x6e, 0xfc, 0xe7, 0x0c, 0x14, 0xd5, 0x49, 0x36, 0xdf, 0x88, 0x2a, 0x4f, 0x32, 0x0b, 0x9c, 0x5e, 0x2a, 0x26, 0x7d, 0xf6, 0x1b, 0x95, 0x9f, 0x5c, 0x87, 0x82, 0x43, 0xe1, 0xb8, 0x36, 0x5f, 0x04, 0x24, 0xac, 0x4d, 0x2e, 0x65, 0x6d, 0x6e, 0x43, 0xc5, 0x9c, 0x48, 0x8f, 0x0e, 0xe9, 0xf4, 0x09, 0x46, 0x8c, 0x68, 0xb6, @@ -10110,22 +10102,22 @@ var fileDescriptor_98a910b73321e591 = []byte{ 0x5c, 0xf3, 0x19, 0xd4, 0x52, 0x45, 0x4e, 0xfc, 0x3a, 0xb0, 0x14, 0x02, 0x9b, 0xbe, 0xc4, 0x6f, 0xc1, 0xb5, 0x14, 0x76, 0xcf, 0xb6, 0x2c, 0xca, 0x04, 0x4f, 0x3f, 0x08, 0x3b, 0xb8, 0x51, 0x81, 0x52, 0x5f, 0xcd, 0x61, 0xf3, 0x10, 0x6a, 0x34, 0xa9, 0x7b, 0x42, 0x9a, 0x07, 0xae, 0x73, 0xf1, - 0xa7, 0xae, 0x44, 0x6b, 0x7e, 0x4d, 0x87, 0x5f, 0x68, 0x4d, 0x4e, 0x7c, 0x6f, 0x44, 0xb2, 0x0a, + 0x27, 0xae, 0x44, 0x6b, 0x7e, 0x55, 0x87, 0x5f, 0x68, 0x4d, 0x4e, 0x7c, 0x6f, 0x44, 0xb2, 0x0a, 0x06, 0xfd, 0x46, 0xe9, 0xd2, 0xd3, 0x9a, 0x91, 0x95, 0x5e, 0xf3, 0x17, 0x15, 0x28, 0xb5, 0xfa, 0x7d, 0x0c, 0x18, 0x67, 0xde, 0xfc, 0x0e, 0x14, 0xfb, 0x9e, 0x7b, 0x62, 0x0f, 0xb4, 0xb5, 0x9e, 0xf6, 0x1b, 0x35, 0x1f, 0xaa, 0xe3, 0x89, 0x3d, 0x30, 0x34, 0x31, 0xb2, 0xe9, 0xdd, 0xa6, 0x70, - 0x25, 0x9b, 0x32, 0xb9, 0xd1, 0xe6, 0xf2, 0x00, 0xf2, 0xb6, 0x7b, 0xe2, 0xe9, 0xb2, 0xd1, 0x2f, - 0x5e, 0xc2, 0x44, 0xb5, 0x93, 0x44, 0xd8, 0xf8, 0x2f, 0x19, 0x28, 0xaa, 0x57, 0xf3, 0x57, 0x61, + 0x25, 0x9b, 0x32, 0xb9, 0xd1, 0xe6, 0xf2, 0x00, 0xf2, 0xb6, 0x7b, 0xe2, 0xe9, 0xb2, 0xd1, 0xcf, + 0x5f, 0xc2, 0x44, 0xb5, 0x93, 0x44, 0xd8, 0xf8, 0xaf, 0x19, 0x28, 0xaa, 0x57, 0xf3, 0x57, 0x61, 0x45, 0xb8, 0xb8, 0xd4, 0x42, 0x43, 0xaf, 0xd7, 0xd8, 0x14, 0x16, 0x5d, 0x5a, 0x8d, 0x11, 0xc7, 0x93, 0x81, 0xce, 0xcc, 0x24, 0x51, 0xfc, 0x3d, 0xb8, 0xa5, 0xc0, 0x43, 0x5f, 0xf8, 0xc2, 0x11, 0x66, 0x20, 0x36, 0x87, 0xa6, 0xeb, 0x0a, 0x47, 0x6f, 0xfb, 0x97, 0x3d, 0xe6, 0x4d, 0x58, 0x56, - 0x8f, 0xba, 0x63, 0xb3, 0x2f, 0x02, 0xbd, 0x96, 0x52, 0x38, 0xfe, 0x75, 0x28, 0x50, 0x55, 0x6d, + 0x8f, 0xba, 0x63, 0xb3, 0x2f, 0x02, 0xbd, 0x96, 0x52, 0x38, 0xfe, 0x35, 0x28, 0x50, 0x55, 0x6d, 0xdd, 0xba, 0x7a, 0x2a, 0x15, 0x55, 0xc3, 0x8b, 0xf6, 0xa5, 0x16, 0x80, 0x1a, 0x26, 0x0c, 0xc9, - 0xb4, 0x6d, 0xf8, 0xd2, 0x95, 0xe3, 0x4a, 0xd1, 0x61, 0x82, 0x09, 0xdb, 0x67, 0x09, 0x47, 0x50, - 0xf9, 0x23, 0xee, 0x9b, 0x59, 0x3a, 0x77, 0x49, 0xe1, 0x1a, 0xff, 0x39, 0x0f, 0x79, 0x1c, 0x61, + 0xb4, 0x6d, 0xf8, 0xe2, 0x95, 0xe3, 0x4a, 0xd1, 0x61, 0x82, 0x09, 0xdb, 0x67, 0x09, 0x47, 0x50, + 0xf9, 0x23, 0xee, 0x9b, 0x59, 0x3a, 0x77, 0x49, 0xe1, 0x1a, 0xff, 0x25, 0x0f, 0x79, 0x1c, 0x61, 0x24, 0x1e, 0x7a, 0x23, 0x11, 0x65, 0x9f, 0x95, 0x23, 0x92, 0xc2, 0xa1, 0xe3, 0x63, 0xaa, 0x02, 0x80, 0x88, 0x4c, 0x99, 0x96, 0x69, 0x34, 0x52, 0x8e, 0x7d, 0xef, 0xc4, 0x76, 0x62, 0x4a, 0xed, - 0x22, 0x4d, 0xa1, 0xf9, 0x37, 0xe0, 0xe6, 0xc8, 0xf4, 0x4f, 0x85, 0xa4, 0xd5, 0xfd, 0xcc, 0xf3, + 0x22, 0x4d, 0xa1, 0xf9, 0xd7, 0xe1, 0xe6, 0xc8, 0xf4, 0x4f, 0x85, 0xa4, 0xd5, 0xfd, 0xcc, 0xf3, 0x4f, 0x03, 0x1c, 0xb9, 0x8e, 0xa5, 0xd3, 0x96, 0x97, 0x3c, 0xe5, 0xaf, 0xc3, 0xda, 0xf3, 0x10, 0x8c, 0xde, 0xa1, 0x12, 0x87, 0xb3, 0x0f, 0xd0, 0x18, 0x5b, 0xe2, 0xcc, 0x26, 0xb9, 0x65, 0x55, 0x5b, 0x1b, 0xc2, 0xa8, 0x4a, 0xa6, 0x1a, 0xc8, 0xae, 0x7e, 0xb3, 0x3e, 0x7f, 0x4a, 0x63, 0xd1, @@ -10135,307 +10127,306 @@ var fileDescriptor_98a910b73321e591 = []byte{ 0x1d, 0xa4, 0xc4, 0x18, 0x0c, 0x71, 0x1d, 0xaf, 0x6f, 0x3a, 0x5d, 0xe9, 0xf9, 0xe6, 0x40, 0x1c, 0x9a, 0x72, 0x58, 0x1f, 0xa8, 0x10, 0x77, 0x1a, 0x8f, 0x3d, 0x96, 0xf6, 0x48, 0x7c, 0xe2, 0xb9, 0xa2, 0x3e, 0x54, 0x3d, 0x0e, 0x61, 0x6c, 0x89, 0xe9, 0x9a, 0xce, 0x85, 0xb4, 0xfb, 0xd8, 0x17, - 0x5b, 0xb5, 0x24, 0x81, 0xa2, 0xa4, 0x82, 0x90, 0x38, 0x8e, 0x1d, 0xab, 0xfe, 0x03, 0xd5, 0xd7, + 0x5b, 0xb5, 0x24, 0x81, 0xa2, 0xa4, 0x82, 0x90, 0x38, 0x8e, 0x1d, 0xab, 0xfe, 0x7d, 0xd5, 0xd7, 0x08, 0x81, 0xb3, 0x2b, 0xe4, 0x50, 0xf8, 0x62, 0x32, 0x6a, 0x59, 0x96, 0x2f, 0x82, 0xa0, 0x7e, - 0xaa, 0x66, 0x77, 0x0a, 0xdd, 0xf8, 0x16, 0x1d, 0x73, 0x0d, 0x9b, 0x6f, 0x41, 0x6d, 0x17, 0x5b, + 0xaa, 0x66, 0x77, 0x0a, 0xdd, 0xf8, 0x26, 0x1d, 0x73, 0x0d, 0x9b, 0x6f, 0x41, 0x6d, 0x17, 0x5b, 0xd8, 0x1a, 0xdb, 0xdd, 0xbe, 0x37, 0x16, 0x68, 0xd0, 0x29, 0x61, 0x4c, 0xe9, 0x85, 0x2a, 0x94, 0x3e, 0x0a, 0x3c, 0xb7, 0x75, 0xd8, 0x51, 0x5b, 0xcc, 0xf6, 0xc4, 0x71, 0x58, 0xb6, 0x79, 0x00, 0x10, 0x6b, 0x36, 0x6e, 0x17, 0x2d, 0x3a, 0x53, 0x62, 0x4b, 0x2a, 0x99, 0xe5, 0x5a, 0xb6, 0x3b, 0xd8, 0xd2, 0xca, 0xcc, 0x32, 0x88, 0xa4, 0x24, 0x85, 0xb0, 0x22, 0x24, 0xb9, 0x33, 0x04, 0x09, - 0x8b, 0xe5, 0x9a, 0xff, 0x27, 0x03, 0xd5, 0x44, 0x09, 0xc5, 0x9f, 0x61, 0xd9, 0x07, 0x6e, 0xf6, + 0x8b, 0xe5, 0x9a, 0xff, 0x37, 0x03, 0xd5, 0x44, 0x09, 0xc5, 0x9f, 0x62, 0xd9, 0x07, 0x6e, 0xf6, 0xe8, 0x2e, 0xe0, 0xbc, 0x29, 0x45, 0x8f, 0x60, 0x9c, 0x55, 0x5d, 0xe1, 0x81, 0x4f, 0x55, 0x4a, - 0x22, 0x81, 0xf9, 0x5c, 0x25, 0x1f, 0xcd, 0x87, 0x3a, 0xaf, 0x53, 0x85, 0xd2, 0x13, 0xf7, 0xd4, + 0x22, 0x81, 0xf9, 0x4c, 0x25, 0x1f, 0xcd, 0x87, 0x3a, 0xaf, 0x53, 0x85, 0xd2, 0x13, 0xf7, 0xd4, 0xf5, 0x9e, 0xbb, 0x6a, 0x9f, 0xa6, 0x3a, 0x9e, 0xd4, 0x89, 0x64, 0x58, 0x6a, 0x93, 0x6b, 0xfe, - 0xab, 0xfc, 0x54, 0xc9, 0x5b, 0x1b, 0x8a, 0x2a, 0x98, 0x20, 0x3f, 0x77, 0xb6, 0x46, 0x29, 0x49, + 0xeb, 0xfc, 0x54, 0xc9, 0x5b, 0x1b, 0x8a, 0x2a, 0x98, 0x20, 0x3f, 0x77, 0xb6, 0x46, 0x29, 0x49, 0xac, 0x4f, 0xbf, 0x12, 0x28, 0x43, 0x33, 0xa3, 0x97, 0x1f, 0x15, 0x84, 0x66, 0xe7, 0x9e, 0xd2, 0xa5, 0x04, 0x85, 0xb6, 0x39, 0x55, 0x13, 0x1d, 0x49, 0x68, 0xfc, 0xad, 0x0c, 0x5c, 0x9f, 0x47, 0x92, 0xac, 0x1c, 0xcf, 0xa4, 0x2b, 0xc7, 0xbb, 0x53, 0x95, 0xd8, 0x59, 0xea, 0xcd, 0x83, 0x97, - 0x6c, 0x44, 0xba, 0x2e, 0xbb, 0xf9, 0xfb, 0x19, 0x58, 0x9b, 0xe9, 0x73, 0xc2, 0x8f, 0x01, 0x28, + 0x6c, 0x44, 0xba, 0x2e, 0xbb, 0xf9, 0x7b, 0x19, 0x58, 0x9b, 0xe9, 0x73, 0xc2, 0x8f, 0x01, 0x28, 0x2a, 0xcd, 0x52, 0x85, 0x52, 0x51, 0xe9, 0x8a, 0x3a, 0x7a, 0xa0, 0x1d, 0x3e, 0x50, 0xb5, 0x00, 0xba, 0xf6, 0x5c, 0x39, 0xd1, 0x38, 0x6b, 0xb8, 0x81, 0x0c, 0x84, 0x4a, 0xd3, 0x2a, 0x67, 0x4b, 0x63, 0x8a, 0xca, 0xd1, 0x55, 0xe7, 0x23, 0xac, 0x44, 0x05, 0x58, 0x93, 0xb1, 0x63, 0xf7, 0x11, 0x2c, 0xf3, 0x06, 0xdc, 0x54, 0x17, 0x10, 0x74, 0x50, 0x79, 0xd2, 0x1b, 0xda, 0xb4, 0x38, 0x58, 0x05, 0xdf, 0x73, 0x38, 0x39, 0x76, 0xec, 0x60, 0xc8, 0xa0, 0x69, 0xc0, 0xb5, 0x39, 0x1d, 0xa4, 0x26, 0x3f, 0xd5, 0xcd, 0x5f, 0x01, 0xd8, 0x7a, 0x1a, 0x36, 0x9a, 0x65, 0x38, 0x87, 0x95, 0xad, - 0xa7, 0x49, 0xe9, 0x7a, 0xf1, 0x3c, 0x45, 0xeb, 0x15, 0xb0, 0x5c, 0xf3, 0x57, 0x33, 0x61, 0x85, + 0xa7, 0x49, 0xe9, 0x7a, 0xf1, 0x3c, 0x45, 0xeb, 0x15, 0xb0, 0x5c, 0xf3, 0x57, 0x32, 0x61, 0x85, 0x44, 0xe3, 0x2f, 0x43, 0x4d, 0x35, 0xf8, 0xd0, 0xbc, 0x70, 0x3c, 0xd3, 0xe2, 0x6d, 0x58, 0x09, 0xa2, 0x2b, 0x32, 0x89, 0x0d, 0x6b, 0xda, 0x11, 0xe8, 0xa6, 0x88, 0x8c, 0x29, 0xa6, 0x30, 0x50, - 0xca, 0xc6, 0xc7, 0x2a, 0x9c, 0x42, 0x3e, 0x93, 0x96, 0xdc, 0x32, 0x05, 0x71, 0x66, 0xf3, 0xeb, + 0xca, 0xc6, 0xc7, 0x2a, 0x9c, 0x42, 0x3e, 0x93, 0x96, 0xdc, 0x32, 0x05, 0x71, 0x66, 0xf3, 0x6b, 0xb0, 0xd6, 0x8d, 0x8d, 0xbb, 0xf2, 0xa8, 0x51, 0x39, 0xd4, 0xce, 0xb0, 0x15, 0x2a, 0x87, 0x06, - 0x9b, 0x9f, 0x95, 0x00, 0xe2, 0x23, 0xa4, 0x39, 0x6b, 0x7e, 0x5e, 0x45, 0xc4, 0xcc, 0x81, 0x6e, - 0xee, 0xa5, 0x0f, 0x74, 0xdf, 0x8b, 0x1c, 0x7b, 0x95, 0x5e, 0x9e, 0x2e, 0x0b, 0x8f, 0xdb, 0x34, - 0xed, 0xce, 0xa7, 0x0a, 0x86, 0x0a, 0xd3, 0x05, 0x43, 0x77, 0x67, 0xab, 0x0b, 0xa7, 0x8c, 0x51, - 0x9c, 0xb7, 0x28, 0xa5, 0xf2, 0x16, 0x0d, 0x28, 0xfb, 0xc2, 0xb4, 0x3c, 0xd7, 0xb9, 0x08, 0xcf, - 0x0d, 0x43, 0x98, 0xbf, 0x05, 0x05, 0x49, 0xb7, 0x7c, 0xca, 0xb4, 0x76, 0x5e, 0x30, 0x71, 0x8a, - 0x16, 0x2d, 0x9b, 0x1d, 0xe8, 0x92, 0x40, 0xb5, 0x6b, 0x96, 0x8d, 0x04, 0x86, 0xaf, 0x03, 0xb7, - 0x31, 0x88, 0x73, 0x1c, 0x61, 0x6d, 0x5c, 0x6c, 0xa9, 0xe3, 0x3c, 0xda, 0xd7, 0xcb, 0xc6, 0x9c, - 0x27, 0xe1, 0xfc, 0x2f, 0xc7, 0xf3, 0x4f, 0x4d, 0x3e, 0xb3, 0x03, 0xec, 0x69, 0x8d, 0xdc, 0x97, - 0x08, 0x46, 0xcf, 0x21, 0x5c, 0xb0, 0x6a, 0x2c, 0x49, 0x7b, 0xe3, 0x33, 0xf1, 0x4b, 0x9e, 0x86, - 0xc3, 0xab, 0x12, 0x37, 0xab, 0x24, 0x34, 0x46, 0x90, 0x25, 0xef, 0x7b, 0xee, 0x3e, 0x6a, 0x04, - 0xd3, 0x96, 0x5c, 0xc3, 0xd8, 0xdf, 0xb1, 0x33, 0xf1, 0x4d, 0x87, 0x9e, 0xae, 0x29, 0x4b, 0x1e, - 0x63, 0xf8, 0xdb, 0x70, 0x63, 0x48, 0xea, 0x18, 0x19, 0x03, 0x35, 0xb3, 0x54, 0xdd, 0x9f, 0x33, - 0xe6, 0x3f, 0x6c, 0xfe, 0x61, 0x36, 0x0a, 0xb9, 0x2a, 0x50, 0x38, 0x36, 0x03, 0xbb, 0xaf, 0xf6, - 0x44, 0xed, 0x2a, 0xa9, 0x3d, 0x51, 0x7a, 0x96, 0xc7, 0xb2, 0x18, 0x3d, 0x05, 0x42, 0x1f, 0x02, - 0xc5, 0x37, 0xb1, 0x58, 0x1e, 0x0d, 0x47, 0xa8, 0x7f, 0xaa, 0xd2, 0x88, 0x58, 0x29, 0xa5, 0x67, - 0x45, 0x35, 0x9c, 0x14, 0x9c, 0xd3, 0xc6, 0xc4, 0xca, 0x48, 0xe3, 0x7a, 0x52, 0xa8, 0x84, 0x26, - 0xad, 0x16, 0x06, 0x28, 0x26, 0xbc, 0x5a, 0xc0, 0xaa, 0x18, 0xce, 0x84, 0x42, 0x55, 0x16, 0x32, - 0xa0, 0x60, 0x6f, 0x19, 0xad, 0x45, 0xfa, 0x01, 0xab, 0x61, 0x8b, 0xe2, 0x0b, 0x5e, 0x6c, 0x05, - 0xa5, 0x9a, 0x54, 0xff, 0xb2, 0x8a, 0x3f, 0xcf, 0xa8, 0x2a, 0x86, 0xe1, 0x5b, 0x2d, 0xb4, 0x66, - 0x6b, 0xd8, 0xb2, 0xc8, 0x3d, 0x62, 0x1c, 0xa3, 0xb5, 0xb1, 0x89, 0xa1, 0x93, 0x3d, 0x36, 0x5d, - 0xc9, 0xae, 0x61, 0x57, 0xc7, 0xd6, 0x09, 0xbb, 0x8e, 0x2c, 0xfd, 0xa1, 0x29, 0xd9, 0x0d, 0xa4, - 0xc1, 0x5f, 0x5b, 0xc2, 0x47, 0xfd, 0x62, 0x37, 0x91, 0x46, 0x9a, 0x03, 0x76, 0xab, 0xf9, 0x1b, - 0x71, 0x15, 0xf5, 0x1b, 0x51, 0x50, 0xb3, 0xc8, 0xa2, 0xc3, 0xb0, 0x67, 0x9e, 0x05, 0x68, 0xc3, - 0x9a, 0x2f, 0x7e, 0x38, 0xb1, 0x53, 0x77, 0x0b, 0x72, 0x57, 0x17, 0xaf, 0xcc, 0x72, 0x34, 0xcf, - 0x60, 0x2d, 0x04, 0x9e, 0xd9, 0x72, 0x48, 0xd9, 0x27, 0xfe, 0x56, 0xe2, 0xf2, 0x43, 0x66, 0xee, - 0xa5, 0xb1, 0x48, 0x64, 0x7c, 0xd9, 0x21, 0x3a, 0x5d, 0xc8, 0x2e, 0x70, 0xba, 0xd0, 0xfc, 0xdf, - 0xc9, 0xe3, 0x6a, 0x15, 0xe6, 0x59, 0x51, 0x98, 0x37, 0x7b, 0x7c, 0x1d, 0x1f, 0x18, 0x64, 0x5f, - 0xe6, 0xc0, 0x60, 0x5e, 0x29, 0xc8, 0xfb, 0x18, 0x75, 0xd0, 0x7a, 0x7e, 0xba, 0xc0, 0x61, 0x48, - 0x8a, 0x96, 0x6f, 0xd0, 0x61, 0xb4, 0xd9, 0x55, 0x75, 0x4a, 0x85, 0xb9, 0x57, 0x91, 0x92, 0xa7, - 0xce, 0x9a, 0xd2, 0x48, 0x70, 0x25, 0xac, 0x5f, 0x71, 0x9e, 0xf5, 0xc3, 0x88, 0x5b, 0xdb, 0xc5, - 0x08, 0x56, 0x67, 0x47, 0xea, 0x77, 0x28, 0x9e, 0x2c, 0x43, 0xd9, 0x98, 0xc1, 0xa3, 0x8b, 0x38, - 0x9a, 0x38, 0xd2, 0xd6, 0xc7, 0x23, 0x0a, 0x98, 0xbe, 0x2b, 0x59, 0x99, 0xbd, 0x2b, 0xf9, 0x21, - 0x40, 0x20, 0x70, 0x75, 0x6c, 0xd9, 0x7d, 0xa9, 0xab, 0x99, 0xee, 0x5c, 0xd6, 0x37, 0x7d, 0xa8, - 0x93, 0xe0, 0xc0, 0xf6, 0x8f, 0xcc, 0x73, 0x3a, 0xe8, 0xd5, 0x65, 0x17, 0x11, 0x3c, 0xbd, 0x27, - 0xac, 0xcc, 0xee, 0x09, 0x6f, 0x41, 0x21, 0x40, 0xc7, 0x9b, 0xae, 0xfb, 0x5c, 0x3e, 0xbf, 0xeb, - 0xe4, 0x9d, 0x1b, 0x8a, 0x96, 0xd2, 0x9c, 0x68, 0x35, 0x3d, 0x9f, 0x2e, 0xfa, 0x54, 0x8c, 0x10, - 0x4c, 0xd9, 0xe5, 0x9b, 0x69, 0xbb, 0xdc, 0xb0, 0xa0, 0xa8, 0x8f, 0x2c, 0xa6, 0xd3, 0x0b, 0x61, - 0xb2, 0x33, 0x9b, 0x48, 0x76, 0x46, 0x35, 0xb3, 0xb9, 0x64, 0xcd, 0xec, 0xd4, 0x5d, 0xc0, 0xc2, - 0xcc, 0x5d, 0xc0, 0xe6, 0x27, 0x50, 0x50, 0x91, 0x04, 0x84, 0x4e, 0xac, 0x72, 0x80, 0xb1, 0x53, - 0x2c, 0xc3, 0xaf, 0x03, 0x0b, 0x04, 0x79, 0x48, 0xa2, 0x6b, 0x8e, 0x04, 0x19, 0xc9, 0x2c, 0xaf, - 0xc3, 0x75, 0x45, 0x1b, 0xa4, 0x9f, 0x90, 0x9b, 0xe6, 0xd8, 0xc7, 0xbe, 0xe9, 0x5f, 0xb0, 0x7c, - 0xf3, 0x43, 0x2a, 0x18, 0x08, 0x15, 0xaa, 0x1a, 0xdd, 0xbd, 0x54, 0x66, 0xd9, 0xd2, 0xd6, 0x87, - 0xea, 0x4d, 0x74, 0x8c, 0xa8, 0xaa, 0xf0, 0x28, 0x08, 0xa3, 0x2c, 0xd2, 0x72, 0xd2, 0x33, 0xf8, - 0x33, 0x5b, 0x6f, 0xcd, 0x8d, 0x84, 0x9f, 0x99, 0x2e, 0xab, 0xcb, 0x2c, 0x5a, 0x56, 0xd7, 0x7c, - 0x0c, 0xab, 0x46, 0xda, 0xa6, 0xf3, 0xf7, 0xa0, 0xe4, 0x8d, 0x93, 0x72, 0x5e, 0xa4, 0x97, 0x21, - 0x79, 0xf3, 0xf7, 0x32, 0xb0, 0xdc, 0x71, 0xa5, 0xf0, 0x5d, 0xd3, 0xd9, 0x76, 0xcc, 0x01, 0x7f, - 0x37, 0xb4, 0x52, 0xf3, 0x33, 0x16, 0x49, 0xda, 0xb4, 0xc1, 0x72, 0x74, 0x6a, 0x9e, 0xdf, 0x80, - 0x35, 0x61, 0xd9, 0xd2, 0xf3, 0x95, 0x77, 0x1d, 0x56, 0x3f, 0x5e, 0x07, 0xa6, 0xd0, 0x5d, 0x5a, - 0x12, 0x3d, 0x35, 0xcd, 0x75, 0xb8, 0x9e, 0xc2, 0x86, 0xae, 0x73, 0x96, 0xdf, 0x86, 0x7a, 0xbc, - 0x1b, 0x6d, 0x79, 0xae, 0xec, 0xb8, 0x96, 0x38, 0x27, 0xd7, 0x8c, 0xe5, 0x9a, 0xbf, 0x1e, 0x39, - 0x85, 0x4f, 0x75, 0x6d, 0xa4, 0xef, 0x79, 0xf1, 0xc5, 0x5b, 0x0d, 0x25, 0x2e, 0x78, 0x67, 0x17, - 0xb8, 0xe0, 0xfd, 0x61, 0x7c, 0x49, 0x57, 0x6d, 0x14, 0xaf, 0xcc, 0xdd, 0x7d, 0xa8, 0xa4, 0x4b, - 0xc7, 0x04, 0x5d, 0x91, 0xb8, 0xb1, 0xfb, 0xa6, 0x0e, 0x04, 0xf3, 0x8b, 0xf8, 0xce, 0xaa, 0xfa, - 0xe1, 0x9d, 0xe9, 0x9b, 0x21, 0x8b, 0x95, 0x56, 0xce, 0xb8, 0xb7, 0xf0, 0xd2, 0xee, 0xed, 0x77, - 0xa6, 0x62, 0xae, 0xf2, 0xdc, 0x24, 0xde, 0x15, 0xf7, 0x5e, 0xbf, 0x03, 0xa5, 0xa1, 0x1d, 0x48, - 0xcf, 0x57, 0x77, 0xb1, 0x67, 0xef, 0x8e, 0x25, 0x46, 0x6b, 0x47, 0x11, 0x52, 0x1d, 0x5c, 0xc8, - 0xc5, 0xbf, 0x0f, 0x6b, 0x34, 0xf0, 0x87, 0xb1, 0xd7, 0x10, 0xd4, 0xab, 0x73, 0xeb, 0x0f, 0x13, - 0xa2, 0x36, 0xa6, 0x58, 0x8c, 0x59, 0x21, 0x8d, 0x01, 0x40, 0x3c, 0x3f, 0x33, 0x56, 0xec, 0x73, - 0xdc, 0xc5, 0xbe, 0x09, 0xc5, 0x60, 0x72, 0x1c, 0x9f, 0xe1, 0x69, 0xa8, 0x71, 0x0e, 0x8d, 0x19, - 0xef, 0xe0, 0x50, 0xf8, 0xaa, 0xb9, 0x57, 0x5e, 0x08, 0xff, 0x30, 0x39, 0xf1, 0x4a, 0x39, 0xef, - 0x5e, 0x32, 0x7b, 0x91, 0xe4, 0x84, 0x06, 0x34, 0xde, 0x81, 0x6a, 0x62, 0x50, 0xd1, 0x32, 0x4f, - 0x5c, 0xcb, 0x0b, 0x13, 0xc7, 0xf8, 0x5b, 0x5d, 0x88, 0xb3, 0xc2, 0xd4, 0x31, 0xfd, 0x6e, 0x18, - 0xc0, 0xa6, 0x07, 0xf0, 0x8a, 0xb8, 0xfc, 0x15, 0xa8, 0x25, 0x5c, 0xba, 0x28, 0xa9, 0x98, 0x46, - 0x36, 0xcf, 0xe0, 0x8b, 0x09, 0x71, 0x87, 0xc2, 0x1f, 0xd9, 0x01, 0x6e, 0x24, 0x2a, 0xc4, 0x24, - 0x87, 0xdc, 0x12, 0xae, 0xb4, 0x65, 0x68, 0x41, 0x23, 0x98, 0x7f, 0x0b, 0x0a, 0x63, 0xe1, 0x8f, - 0x02, 0x6d, 0x45, 0xa7, 0x35, 0x68, 0xae, 0xd8, 0xc0, 0x50, 0x3c, 0xcd, 0x7f, 0x92, 0x81, 0xf2, - 0x9e, 0x90, 0x26, 0xfa, 0x0e, 0x7c, 0x6f, 0xea, 0x2d, 0xb3, 0xe7, 0xce, 0x21, 0xe9, 0xba, 0x0e, - 0x7a, 0xd7, 0x3b, 0x9a, 0x5e, 0xc3, 0x3b, 0x4b, 0x71, 0xc3, 0x1a, 0x1b, 0x50, 0xd2, 0xe8, 0xc6, - 0xbb, 0xb0, 0x3a, 0x45, 0x49, 0xe3, 0xa2, 0x7c, 0xfb, 0xee, 0xc5, 0x28, 0x2c, 0x8e, 0x5a, 0x36, - 0xd2, 0xc8, 0x8d, 0x0a, 0x94, 0xc6, 0x8a, 0xa1, 0xf9, 0x87, 0x37, 0xa8, 0x24, 0xc7, 0x3e, 0xb1, - 0xfb, 0xe6, 0xdc, 0x9d, 0xf5, 0x0e, 0x00, 0x6d, 0xcd, 0xaa, 0x70, 0x43, 0x25, 0x7a, 0x13, 0x18, - 0xfe, 0x7e, 0x94, 0xa1, 0xcf, 0xcf, 0x75, 0xaa, 0x92, 0xc2, 0xa7, 0xd3, 0xf4, 0x75, 0x28, 0xd9, - 0x01, 0x65, 0xef, 0x74, 0xb1, 0x53, 0x08, 0xf2, 0x6f, 0x43, 0xd1, 0x1e, 0x8d, 0x3d, 0x5f, 0xea, - 0x14, 0xfe, 0x95, 0x52, 0x3b, 0x44, 0xb9, 0xb3, 0x64, 0x68, 0x1e, 0xe4, 0x16, 0xe7, 0xc4, 0x5d, - 0x7e, 0x31, 0x77, 0xfb, 0x3c, 0xe4, 0x56, 0x3c, 0xfc, 0x7b, 0x50, 0x1b, 0xa8, 0x5a, 0x4f, 0x25, - 0x58, 0x1b, 0x91, 0xaf, 0x5e, 0x25, 0xe4, 0x51, 0x92, 0x61, 0x67, 0xc9, 0x48, 0x4b, 0x40, 0x91, - 0xe8, 0xc0, 0x8b, 0x40, 0xf6, 0xbc, 0x8f, 0x3c, 0xdb, 0xa5, 0x20, 0xf9, 0x05, 0x22, 0x8d, 0x24, - 0x03, 0x8a, 0x4c, 0x49, 0xe0, 0xdf, 0x40, 0x8f, 0x27, 0x90, 0xfa, 0x3a, 0xfc, 0xdd, 0xab, 0x24, - 0xf5, 0x44, 0xa0, 0x2f, 0xb2, 0x07, 0x92, 0x9f, 0x43, 0x23, 0xb1, 0x48, 0xf4, 0x4b, 0x5a, 0xe3, - 0xb1, 0xef, 0x61, 0xa4, 0x5d, 0x23, 0x69, 0xdf, 0xb8, 0x4a, 0xda, 0xe1, 0xa5, 0xdc, 0x3b, 0x4b, - 0xc6, 0x15, 0xb2, 0x79, 0x0f, 0x23, 0x3b, 0xdd, 0x85, 0x5d, 0x61, 0x9e, 0x85, 0x97, 0xe9, 0xef, - 0x2f, 0x34, 0x0a, 0xc4, 0xb1, 0xb3, 0x64, 0x4c, 0xc9, 0xe0, 0xbf, 0x02, 0x6b, 0xa9, 0x77, 0xd2, - 0xfd, 0x59, 0x75, 0xd5, 0xfe, 0xeb, 0x0b, 0x77, 0x03, 0x99, 0x76, 0x96, 0x8c, 0x59, 0x49, 0x7c, - 0x02, 0x5f, 0x98, 0xed, 0xd2, 0x96, 0xe8, 0x3b, 0xb6, 0x2b, 0xf4, 0xad, 0xfc, 0x77, 0x5e, 0x6e, - 0xb4, 0x34, 0xf3, 0xce, 0x92, 0x71, 0xb9, 0x64, 0xfe, 0x57, 0xe1, 0xf6, 0x78, 0xae, 0x89, 0x51, - 0xa6, 0x4b, 0x5f, 0xea, 0x7f, 0x6f, 0xc1, 0x37, 0xcf, 0xf0, 0xef, 0x2c, 0x19, 0x57, 0xca, 0x47, - 0xdf, 0x99, 0x22, 0x68, 0x5d, 0x92, 0xae, 0x00, 0x3a, 0xdf, 0xed, 0x3b, 0x3b, 0xc2, 0xb4, 0xa2, - 0x53, 0x86, 0x18, 0xd1, 0xf8, 0x1f, 0x19, 0x28, 0x6a, 0x7d, 0xbf, 0x1d, 0xd5, 0x19, 0x44, 0xa6, - 0x3b, 0x46, 0xf0, 0x0f, 0xa0, 0x22, 0x7c, 0xdf, 0xf3, 0x37, 0x3d, 0x2b, 0x2c, 0xd1, 0x9c, 0xce, - 0x4d, 0x2b, 0x39, 0xeb, 0xed, 0x90, 0xcc, 0x88, 0x39, 0xf8, 0xfb, 0x00, 0x6a, 0x9d, 0xf7, 0xe2, - 0x9b, 0x45, 0x8d, 0xf9, 0xfc, 0xea, 0xe0, 0x2a, 0xa6, 0x8e, 0x93, 0x79, 0xe1, 0xa9, 0x51, 0x08, - 0x46, 0x01, 0x67, 0x21, 0x11, 0x70, 0xde, 0xd6, 0x79, 0x04, 0x4a, 0xca, 0xe8, 0xfb, 0x75, 0x11, - 0xa2, 0xf1, 0x07, 0x19, 0x28, 0x2a, 0xe3, 0xc1, 0xdb, 0xb3, 0x3d, 0x7a, 0xed, 0xc5, 0x36, 0x67, - 0x7d, 0xba, 0x67, 0xdf, 0x06, 0x50, 0x36, 0x28, 0xd1, 0xb3, 0xdb, 0x53, 0x72, 0x34, 0x6b, 0x58, - 0x14, 0x1d, 0xd3, 0x37, 0x1f, 0xaa, 0x3b, 0x60, 0x94, 0x48, 0x7e, 0xb2, 0xbb, 0xcb, 0x96, 0xf8, - 0x1a, 0xd4, 0x9e, 0xec, 0x3f, 0xde, 0x3f, 0x78, 0xb6, 0x7f, 0xd4, 0x36, 0x8c, 0x03, 0x43, 0xe5, - 0x93, 0x37, 0x5a, 0x5b, 0x47, 0x9d, 0xfd, 0xc3, 0x27, 0x3d, 0x96, 0x6d, 0xfc, 0x8b, 0x0c, 0xd4, - 0x52, 0xb6, 0xeb, 0xcf, 0x77, 0xea, 0x12, 0xc3, 0x9f, 0x9b, 0x3f, 0xfc, 0xf9, 0xcb, 0x86, 0xbf, - 0x30, 0x3d, 0xfc, 0xbf, 0x93, 0x81, 0x5a, 0xca, 0x46, 0x26, 0xa5, 0x67, 0xd2, 0xd2, 0x93, 0x3b, - 0x7d, 0x76, 0x6a, 0xa7, 0x6f, 0xc2, 0x72, 0xf8, 0x7b, 0x3f, 0xce, 0x38, 0xa4, 0x70, 0x49, 0x1a, - 0xba, 0x84, 0x91, 0x4f, 0xd3, 0xd0, 0x45, 0x8c, 0xab, 0x5b, 0x4b, 0x97, 0x4e, 0x03, 0xba, 0x93, - 0xdf, 0xb8, 0xdc, 0x82, 0x5e, 0xd1, 0x85, 0x47, 0x50, 0x1d, 0xc7, 0xcb, 0xf4, 0xe5, 0xdc, 0x92, - 0x24, 0xe7, 0x0b, 0xda, 0xf9, 0xbb, 0x19, 0x58, 0x49, 0xdb, 0xdc, 0xff, 0xaf, 0x87, 0xf5, 0x9f, - 0x65, 0x60, 0x6d, 0xc6, 0x92, 0x5f, 0xe9, 0xd8, 0x4d, 0xb7, 0x2b, 0xbb, 0x40, 0xbb, 0x72, 0x73, - 0xda, 0x75, 0xb9, 0x25, 0xb9, 0xba, 0xc5, 0x5d, 0xf8, 0xc2, 0xa5, 0x7b, 0xc2, 0x15, 0x43, 0x9d, - 0x12, 0x9a, 0x9b, 0x16, 0xfa, 0xdb, 0x19, 0xb8, 0x7d, 0x95, 0xbd, 0xff, 0x7f, 0xae, 0x57, 0xd3, - 0x2d, 0x6c, 0xbe, 0x1b, 0x95, 0x1f, 0x54, 0xa1, 0xa4, 0xbf, 0x75, 0xa5, 0xcb, 0xbf, 0x87, 0xde, - 0x73, 0x57, 0x65, 0xa2, 0x0d, 0x61, 0xea, 0xaf, 0x01, 0x18, 0x62, 0xec, 0xd8, 0x74, 0xb2, 0x7a, - 0x0b, 0xa0, 0x45, 0x71, 0x5d, 0x78, 0x39, 0x67, 0x73, 0xf7, 0xa0, 0xdb, 0x66, 0x4b, 0x49, 0x27, - 0xf6, 0x93, 0xd0, 0x10, 0x37, 0x0f, 0xa1, 0x18, 0x5f, 0x97, 0xd8, 0x33, 0xfd, 0x53, 0x4b, 0x9d, - 0x5f, 0x2e, 0x43, 0xf9, 0x50, 0x87, 0x50, 0xea, 0x55, 0x1f, 0x75, 0x0f, 0xf6, 0x55, 0xd2, 0x7b, - 0xeb, 0xa0, 0xa7, 0x2e, 0x5d, 0x74, 0x9f, 0x3e, 0x52, 0x07, 0x69, 0x8f, 0x8c, 0xd6, 0xe1, 0xce, - 0x11, 0x51, 0x14, 0x9a, 0xbf, 0x95, 0x0f, 0x77, 0xb5, 0xa6, 0xa1, 0x4f, 0x46, 0x01, 0x8a, 0x68, - 0xcd, 0x3d, 0x2d, 0x38, 0x7a, 0x0d, 0x15, 0x0a, 0xb7, 0xcf, 0x55, 0x1e, 0x82, 0x65, 0x79, 0x11, - 0xb2, 0x87, 0xc7, 0xaa, 0x7e, 0x69, 0x47, 0x8e, 0x1c, 0x75, 0x5b, 0xb3, 0x77, 0x2e, 0x59, 0x01, - 0x7f, 0x6c, 0x06, 0x67, 0xac, 0xd8, 0xfc, 0x97, 0x39, 0xa8, 0x44, 0xa6, 0xf2, 0x65, 0x4c, 0x37, - 0xe7, 0xb0, 0xd2, 0xd9, 0xef, 0xb5, 0x8d, 0xfd, 0xd6, 0xae, 0x26, 0xc9, 0xf1, 0x6b, 0xb0, 0xba, - 0xdd, 0xd9, 0x6d, 0x1f, 0xed, 0x1e, 0xb4, 0xb6, 0x34, 0xb2, 0xcc, 0x6f, 0x02, 0xef, 0xec, 0x1d, - 0x1e, 0x18, 0xbd, 0xa3, 0x4e, 0xf7, 0x68, 0xb3, 0xb5, 0xbf, 0xd9, 0xde, 0x6d, 0x6f, 0xb1, 0x22, - 0x7f, 0x05, 0xee, 0xee, 0x1f, 0xf4, 0x3a, 0x07, 0xfb, 0x47, 0xfb, 0x07, 0x47, 0x07, 0x1b, 0x1f, - 0xb5, 0x37, 0x7b, 0xdd, 0xa3, 0xce, 0xfe, 0x11, 0x4a, 0x7d, 0x64, 0xb4, 0xf0, 0x09, 0x2b, 0xf0, - 0xbb, 0x70, 0x5b, 0x53, 0x75, 0xdb, 0xc6, 0xd3, 0xb6, 0x81, 0x42, 0x9e, 0xec, 0xb7, 0x9e, 0xb6, - 0x3a, 0xbb, 0xad, 0x8d, 0xdd, 0x36, 0x5b, 0xe6, 0x77, 0xa0, 0xa1, 0x29, 0x8c, 0x56, 0xaf, 0x7d, - 0xb4, 0xdb, 0xd9, 0xeb, 0xf4, 0x8e, 0xda, 0xdf, 0xdf, 0x6c, 0xb7, 0xb7, 0xda, 0x5b, 0xac, 0xc6, - 0xbf, 0x0a, 0x5f, 0xa1, 0x46, 0xe9, 0x46, 0xa4, 0x5f, 0xf6, 0x49, 0xe7, 0xf0, 0xa8, 0x65, 0x6c, - 0xee, 0x74, 0x9e, 0xb6, 0xd9, 0x0a, 0x7f, 0x0d, 0xbe, 0x7c, 0x39, 0xe9, 0x56, 0xc7, 0x68, 0x6f, - 0xf6, 0x0e, 0x8c, 0x8f, 0xd9, 0x1a, 0xff, 0x25, 0xf8, 0xc2, 0x4e, 0x6f, 0x6f, 0xf7, 0xe8, 0x99, - 0x71, 0xb0, 0xff, 0xe8, 0x88, 0x7e, 0x76, 0x7b, 0xc6, 0x93, 0xcd, 0xde, 0x13, 0xa3, 0xcd, 0x80, - 0x37, 0xe0, 0xe6, 0xe1, 0xc6, 0xd1, 0xfe, 0x41, 0xef, 0xa8, 0xb5, 0xff, 0xf1, 0xc6, 0xee, 0xc1, - 0xe6, 0xe3, 0xa3, 0xed, 0x03, 0x63, 0xaf, 0xd5, 0x63, 0x55, 0xfe, 0x35, 0x78, 0x6d, 0xb3, 0xfb, - 0x54, 0x37, 0xf3, 0x60, 0xfb, 0xc8, 0x38, 0x78, 0xd6, 0x3d, 0x3a, 0x30, 0x8e, 0x8c, 0xf6, 0x2e, - 0xf5, 0xb9, 0x1b, 0xb7, 0xbd, 0xc4, 0x6f, 0x43, 0xbd, 0xb3, 0xdf, 0x7d, 0xb2, 0xbd, 0xdd, 0xd9, - 0xec, 0xb4, 0xf7, 0x7b, 0x47, 0x87, 0x6d, 0x63, 0xaf, 0xd3, 0xed, 0x22, 0x19, 0xab, 0x34, 0xbf, - 0x0b, 0xc5, 0x8e, 0x7b, 0x66, 0x4b, 0x5a, 0x5f, 0x5a, 0x19, 0x75, 0xc4, 0x15, 0x82, 0xb4, 0x2c, - 0xec, 0x81, 0x4b, 0x5f, 0x21, 0xa0, 0xd5, 0xb5, 0x6c, 0xc4, 0x88, 0xe6, 0x1f, 0xe4, 0xa0, 0xa6, - 0x44, 0x84, 0x11, 0xdc, 0x3d, 0x58, 0xd5, 0xa9, 0xd0, 0x4e, 0xda, 0x84, 0x4d, 0xa3, 0xe9, 0xf3, - 0x5e, 0x0a, 0x95, 0x30, 0x64, 0x49, 0x14, 0xbf, 0x09, 0x45, 0xb3, 0xef, 0x60, 0x18, 0xa8, 0x4e, - 0x39, 0x35, 0xf4, 0x79, 0x6d, 0x17, 0xda, 0x45, 0x45, 0xd8, 0xf7, 0xdc, 0xcd, 0xe8, 0x22, 0x4a, - 0x0a, 0xc7, 0x3f, 0x81, 0x5b, 0x11, 0xdc, 0x76, 0xfb, 0xfe, 0xc5, 0x38, 0xfa, 0xfe, 0x5e, 0x69, - 0x6e, 0x32, 0x61, 0xdb, 0x76, 0x44, 0x8a, 0xd0, 0xb8, 0x4c, 0x00, 0x7f, 0x04, 0x60, 0xd3, 0x60, - 0x91, 0x7f, 0x34, 0xff, 0xb6, 0x75, 0x6a, 0x34, 0x35, 0xa4, 0xdd, 0xc0, 0xe8, 0x37, 0x6e, 0x10, - 0x03, 0xb4, 0xbb, 0x8f, 0xf5, 0xe7, 0xfa, 0x96, 0x8d, 0x08, 0x6e, 0x3e, 0x00, 0x88, 0xb9, 0x38, - 0x83, 0x65, 0xf4, 0x2d, 0x5a, 0xc1, 0x9e, 0x18, 0x1d, 0x0b, 0x5f, 0xd5, 0xfe, 0x29, 0xcc, 0x23, - 0xe4, 0x60, 0x99, 0xe6, 0x1f, 0x67, 0x12, 0x71, 0xb8, 0x8a, 0xb3, 0xaf, 0xdc, 0x81, 0xe6, 0x9d, - 0x09, 0x61, 0x24, 0xac, 0x07, 0x55, 0x3b, 0x46, 0x1a, 0xe4, 0x87, 0xc0, 0xed, 0xd9, 0xa1, 0xcc, - 0x2f, 0x38, 0x94, 0x73, 0x78, 0xa7, 0x53, 0xfa, 0x85, 0xd9, 0x94, 0xfe, 0x1d, 0x80, 0x81, 0xe3, - 0x1d, 0xeb, 0xd3, 0xc8, 0xa2, 0xae, 0x16, 0x8a, 0x30, 0x4d, 0x07, 0xca, 0xe1, 0xb7, 0x07, 0x51, - 0xc7, 0xe8, 0xeb, 0x83, 0x51, 0x82, 0x53, 0x41, 0x7c, 0x07, 0x56, 0x44, 0xba, 0xcd, 0xd9, 0x05, - 0xdb, 0x3c, 0xc5, 0xd7, 0xfc, 0x26, 0xac, 0xcd, 0x10, 0xe1, 0x20, 0x8e, 0x4d, 0x19, 0x7d, 0x80, - 0x00, 0x7f, 0xcf, 0x1e, 0xf2, 0x37, 0xff, 0x43, 0x16, 0x96, 0xf7, 0x4c, 0xd7, 0x3e, 0x11, 0x81, - 0x0c, 0x5b, 0x1b, 0xf4, 0x87, 0x62, 0x64, 0x86, 0xad, 0x55, 0x90, 0xce, 0x7a, 0x64, 0x93, 0xe7, - 0x09, 0x33, 0xc7, 0x4f, 0xb8, 0x9a, 0x26, 0x72, 0x18, 0xd5, 0xe4, 0x6b, 0x08, 0xe7, 0xce, 0xb1, - 0xfb, 0xc2, 0x0d, 0xc2, 0x15, 0x13, 0x82, 0x71, 0xcd, 0x4f, 0xf1, 0x8a, 0x9a, 0x9f, 0xd2, 0xec, - 0xf8, 0xdf, 0x85, 0x6a, 0xd0, 0xf7, 0x85, 0x70, 0x83, 0xa1, 0x27, 0xc3, 0xef, 0x56, 0x26, 0x51, - 0x54, 0x80, 0xe7, 0x3d, 0x77, 0x51, 0xc7, 0x77, 0x6d, 0xf7, 0x54, 0xd7, 0x95, 0xa5, 0x70, 0xa8, - 0x83, 0x94, 0xf3, 0xb1, 0x3f, 0x15, 0x94, 0x6f, 0x28, 0x18, 0x11, 0x4c, 0x59, 0x1d, 0x53, 0x8a, - 0x81, 0xe7, 0xdb, 0x42, 0xa5, 0x36, 0x2b, 0x46, 0x02, 0x83, 0xbc, 0x8e, 0xe9, 0x0e, 0x26, 0xe6, - 0x40, 0xe8, 0x43, 0xf3, 0x08, 0x6e, 0xfe, 0xcf, 0x02, 0x80, 0x5a, 0x0d, 0xc1, 0xd0, 0x1e, 0xd3, - 0xd1, 0x8b, 0xad, 0x2b, 0x91, 0x6b, 0x06, 0xfd, 0xe6, 0xef, 0xa5, 0x2e, 0x09, 0xcc, 0x1e, 0x96, - 0xc6, 0xec, 0xd3, 0x29, 0x21, 0x1c, 0x1c, 0x53, 0x0a, 0x5d, 0x6e, 0x45, 0xe3, 0x9f, 0x37, 0x92, - 0x28, 0x2a, 0xb8, 0x33, 0xa5, 0x68, 0xbb, 0x96, 0x4a, 0x39, 0xe5, 0x8d, 0x08, 0xa6, 0x6b, 0x46, - 0x41, 0x6b, 0x22, 0x3d, 0x43, 0xb8, 0xe2, 0x79, 0x74, 0x83, 0x2e, 0x46, 0xf1, 0x3d, 0xa8, 0x8d, - 0xcd, 0x8b, 0x91, 0x70, 0xe5, 0x9e, 0x90, 0x43, 0xcf, 0xd2, 0xb5, 0x51, 0xaf, 0x5d, 0xde, 0xc0, - 0xc3, 0x24, 0xb9, 0x91, 0xe6, 0x46, 0x9d, 0x70, 0x03, 0x5a, 0x25, 0x6a, 0x1a, 0x35, 0xc4, 0x37, - 0x00, 0xd4, 0xaf, 0x84, 0xa5, 0x9a, 0xc9, 0x42, 0x99, 0x23, 0x11, 0x08, 0xff, 0xcc, 0x56, 0xd6, - 0x55, 0x19, 0xa9, 0x98, 0x0b, 0x6d, 0xf1, 0x24, 0x10, 0x7e, 0x7b, 0x64, 0xda, 0x8e, 0x9e, 0xe0, - 0x18, 0xc1, 0xdf, 0x86, 0x1b, 0xc1, 0xe4, 0x18, 0x75, 0xe6, 0x58, 0xf4, 0xbc, 0x7d, 0xf1, 0x3c, - 0x70, 0x84, 0x94, 0xc2, 0xd7, 0xf5, 0x17, 0xf3, 0x1f, 0x36, 0x07, 0x91, 0x1b, 0x46, 0xdf, 0x48, - 0xc1, 0x5f, 0x71, 0x91, 0x57, 0x84, 0xd2, 0x15, 0x70, 0x2c, 0x83, 0xe6, 0x4f, 0xa1, 0x74, 0x81, - 0x5c, 0x96, 0x7f, 0x05, 0xbe, 0x94, 0x22, 0x32, 0xd4, 0xc1, 0x74, 0xb0, 0x6d, 0xbb, 0xa6, 0x63, - 0x7f, 0xaa, 0xca, 0x04, 0x72, 0xcd, 0x31, 0xd4, 0x52, 0x03, 0x47, 0x57, 0x3e, 0xe9, 0x97, 0xae, - 0x12, 0x62, 0xb0, 0xac, 0xe0, 0xae, 0xf4, 0x6d, 0x3a, 0x71, 0x89, 0x30, 0x9b, 0xb8, 0xce, 0x3d, - 0x96, 0xe5, 0xd7, 0x81, 0x29, 0x4c, 0xc7, 0x35, 0xc7, 0xe3, 0xd6, 0x78, 0xec, 0x08, 0x96, 0xa3, - 0xeb, 0xb4, 0x31, 0x56, 0x5d, 0x15, 0x60, 0xf9, 0xe6, 0xf7, 0xe1, 0x16, 0x8d, 0xcc, 0x53, 0xe1, - 0x47, 0x81, 0xb6, 0xee, 0xeb, 0x0d, 0x58, 0x53, 0xbf, 0xf6, 0x3d, 0xa9, 0x1e, 0x93, 0xf3, 0xc9, - 0x61, 0x45, 0xa1, 0xd1, 0xf7, 0xea, 0x0a, 0xba, 0x24, 0x1b, 0xe1, 0x22, 0xba, 0x6c, 0xf3, 0x8f, - 0x8a, 0xc0, 0x63, 0x85, 0xe8, 0xd9, 0xc2, 0xdf, 0x32, 0xa5, 0x99, 0xc8, 0x94, 0xd6, 0x2e, 0x3d, - 0xeb, 0x7f, 0x71, 0x7d, 0xdf, 0x4d, 0x28, 0xda, 0x01, 0x86, 0x86, 0xba, 0xc8, 0x57, 0x43, 0x7c, - 0x17, 0x60, 0x2c, 0x7c, 0xdb, 0xb3, 0x48, 0x83, 0x0a, 0x73, 0xef, 0x6a, 0xcc, 0x36, 0x6a, 0xfd, - 0x30, 0xe2, 0x31, 0x12, 0xfc, 0xd8, 0x0e, 0x05, 0xa9, 0x93, 0xf3, 0x22, 0x35, 0x3a, 0x89, 0xe2, - 0x6f, 0xc0, 0xb5, 0xb1, 0x6f, 0xf7, 0x85, 0x9a, 0x8e, 0x27, 0x81, 0xb5, 0x49, 0x5f, 0x16, 0x2c, - 0x11, 0xe5, 0xbc, 0x47, 0xa8, 0x81, 0xa6, 0x4b, 0x01, 0x53, 0x40, 0x67, 0xc5, 0xfa, 0x5a, 0xb9, - 0x2a, 0x83, 0xad, 0x19, 0xf3, 0x1f, 0xf2, 0xfb, 0xc0, 0xf4, 0x83, 0x3d, 0xdb, 0xdd, 0x15, 0xee, - 0x40, 0x0e, 0x49, 0xb9, 0x6b, 0xc6, 0x0c, 0x9e, 0x2c, 0x98, 0xfa, 0x7e, 0x93, 0x3a, 0x47, 0xaa, - 0x18, 0x11, 0xac, 0x3e, 0x55, 0xe0, 0x78, 0x7e, 0x57, 0xfa, 0xba, 0x9e, 0x37, 0x82, 0xd1, 0x87, - 0x0a, 0xa8, 0xad, 0x87, 0xbe, 0x67, 0x4d, 0xe8, 0x94, 0x43, 0x19, 0xb1, 0x69, 0x74, 0x4c, 0xb9, - 0x67, 0xba, 0xba, 0xc8, 0xb2, 0x96, 0xa4, 0x8c, 0xd0, 0x14, 0x13, 0x7a, 0x41, 0x2c, 0x70, 0x55, - 0xc7, 0x84, 0x09, 0x9c, 0xa6, 0x89, 0x45, 0xb1, 0x88, 0x26, 0x96, 0x43, 0xfd, 0xb7, 0x7c, 0xcf, - 0xb6, 0x62, 0x59, 0xaa, 0xde, 0x67, 0x06, 0x9f, 0xa0, 0x8d, 0x65, 0xf2, 0x14, 0x6d, 0x2c, 0xf7, - 0x3a, 0x14, 0xbc, 0x93, 0x13, 0xe1, 0xd3, 0xe7, 0x3a, 0x2b, 0x86, 0x02, 0x9a, 0x3f, 0xce, 0x00, - 0xc4, 0x2a, 0x81, 0x0b, 0x21, 0x86, 0xe2, 0x85, 0x7f, 0x0b, 0xae, 0x25, 0xd1, 0x8e, 0x2e, 0x9f, - 0xa5, 0xd5, 0x10, 0x3f, 0xd8, 0x32, 0x2f, 0x02, 0x96, 0xd5, 0xd7, 0xbd, 0x35, 0xee, 0x99, 0x10, - 0x54, 0x8b, 0x78, 0x1d, 0x58, 0x8c, 0xa4, 0x3b, 0x7c, 0x01, 0xcb, 0xa7, 0x49, 0x3f, 0x16, 0xa6, - 0x1f, 0xb0, 0x42, 0x73, 0x07, 0x8a, 0xea, 0x08, 0x6c, 0xce, 0xe1, 0xf5, 0xcb, 0x55, 0xa2, 0xfc, - 0xed, 0x0c, 0xc0, 0x96, 0xaa, 0xb5, 0xc6, 0xbd, 0x7d, 0x4e, 0x4d, 0xc0, 0x3c, 0x3f, 0xcb, 0xb4, - 0x2c, 0xaa, 0x59, 0xcf, 0x45, 0xdf, 0x0a, 0x42, 0x10, 0xf5, 0xc9, 0x0c, 0xeb, 0xcd, 0xd4, 0x4a, - 0x8c, 0x60, 0xb5, 0xad, 0x6c, 0x7a, 0xae, 0x2b, 0xfa, 0xb8, 0x29, 0x45, 0xdb, 0x4a, 0x84, 0x6a, - 0xfe, 0x28, 0x0b, 0x95, 0xcd, 0xa1, 0x29, 0xd5, 0xa7, 0x75, 0xbe, 0x0b, 0xe5, 0x91, 0x08, 0x02, - 0x73, 0x20, 0x02, 0x7d, 0xe4, 0x33, 0x7d, 0x5e, 0x1b, 0xd1, 0xae, 0x3f, 0x71, 0x7d, 0x61, 0x5a, - 0xea, 0x7b, 0x42, 0x11, 0x97, 0x92, 0xe0, 0xca, 0x28, 0x24, 0x7f, 0x09, 0x09, 0x6e, 0xf4, 0xf1, - 0x5f, 0xc7, 0x0c, 0x14, 0x49, 0x94, 0x6e, 0x4b, 0xa2, 0x1a, 0x7b, 0x50, 0x4d, 0xb0, 0xf2, 0x57, - 0xa0, 0xe6, 0x39, 0x96, 0x08, 0xd4, 0x8d, 0xc2, 0xf8, 0x23, 0x8c, 0x29, 0x24, 0x15, 0x6e, 0xe0, - 0x7a, 0x16, 0xbe, 0x3e, 0xbd, 0x0b, 0xc1, 0xe6, 0x6f, 0x96, 0xa1, 0x8a, 0x8d, 0xda, 0x53, 0x7d, - 0x98, 0x99, 0x8e, 0x3a, 0x94, 0x3c, 0x2d, 0x59, 0x5f, 0x45, 0xf4, 0x12, 0x32, 0x75, 0x31, 0x48, - 0x2e, 0x5d, 0x0c, 0x72, 0x1b, 0x2a, 0xea, 0xa8, 0xc9, 0x6a, 0x29, 0xfb, 0x98, 0x33, 0x62, 0x04, - 0x3a, 0x31, 0x23, 0xcf, 0x22, 0x2b, 0xdd, 0x52, 0xa7, 0x34, 0x39, 0x23, 0x81, 0xa1, 0x30, 0x47, - 0x77, 0xbf, 0xaa, 0xc3, 0x1c, 0x05, 0xaa, 0xaa, 0x9c, 0xb1, 0x73, 0xd1, 0xf3, 0x74, 0x6b, 0x3b, - 0x56, 0x7c, 0xa3, 0x3b, 0x8d, 0xe7, 0x9b, 0x50, 0xd2, 0xd3, 0xa2, 0xcf, 0xa2, 0xbe, 0x3a, 0x67, - 0x26, 0x34, 0xf9, 0xba, 0xfe, 0xab, 0x2f, 0x55, 0x19, 0x21, 0x27, 0x7f, 0x04, 0x55, 0x53, 0x4a, - 0xb3, 0x3f, 0x1c, 0x69, 0xab, 0x9a, 0x9b, 0x73, 0x2c, 0x9d, 0x14, 0xd4, 0x8a, 0xa8, 0x8d, 0x24, - 0x27, 0xdf, 0x80, 0x8a, 0x2f, 0xcc, 0xd4, 0xc9, 0xf8, 0x2b, 0x57, 0x88, 0x31, 0x42, 0x5a, 0x23, - 0x66, 0x8b, 0xbe, 0x47, 0x0a, 0x89, 0xef, 0x91, 0xde, 0x85, 0xaa, 0x56, 0x1d, 0x03, 0x1f, 0xa9, - 0xef, 0xb4, 0x24, 0x51, 0x8d, 0x9f, 0x66, 0x60, 0x25, 0xdd, 0xbd, 0x3f, 0x8f, 0x2f, 0xe8, 0x7d, - 0x3b, 0xfe, 0x82, 0xde, 0xe7, 0xf8, 0x1a, 0xdd, 0x6f, 0x67, 0x00, 0xe2, 0x91, 0xc3, 0xbd, 0x55, - 0x7d, 0xe9, 0x2b, 0xf4, 0xf6, 0x15, 0xc4, 0x77, 0x52, 0x9f, 0x87, 0x78, 0x7b, 0xa1, 0x69, 0x48, - 0xfc, 0x4c, 0x14, 0xcb, 0x3f, 0x80, 0x95, 0x34, 0x9e, 0x2e, 0x19, 0x74, 0x76, 0xdb, 0x2a, 0xb7, - 0xd5, 0xd9, 0x6b, 0x3d, 0x6a, 0xeb, 0xcb, 0x6d, 0x9d, 0xfd, 0xc7, 0x2c, 0xdb, 0xf8, 0x93, 0x0c, - 0x54, 0xa2, 0x49, 0xe1, 0xdf, 0x4b, 0xce, 0xa6, 0x2a, 0x90, 0x79, 0x6b, 0x91, 0xd9, 0x8c, 0x7f, - 0xb5, 0x5d, 0xe9, 0x5f, 0x24, 0x26, 0xb7, 0xe1, 0xc1, 0x4a, 0xfa, 0xe1, 0x1c, 0x33, 0xfb, 0x28, - 0x6d, 0x66, 0xdf, 0x5c, 0xe8, 0x95, 0x61, 0x88, 0xbb, 0x6b, 0x07, 0x52, 0x5b, 0xe0, 0xf7, 0xb3, - 0xef, 0x65, 0x1a, 0x77, 0x61, 0x39, 0xf9, 0x68, 0xf6, 0x7e, 0xeb, 0xfd, 0x3f, 0xc9, 0xc1, 0x4a, - 0xba, 0xc6, 0x84, 0xee, 0xcb, 0xa9, 0xfa, 0xa6, 0x03, 0xc7, 0x4a, 0xdc, 0x2f, 0x60, 0x18, 0x5e, - 0xeb, 0x20, 0x9a, 0x10, 0x6b, 0x94, 0x3d, 0xf3, 0x46, 0x82, 0xdd, 0x4d, 0x7e, 0x25, 0xf4, 0x0d, - 0x0e, 0xe1, 0x3d, 0x47, 0x36, 0xe6, 0x15, 0xfd, 0xbd, 0xb4, 0x1f, 0x65, 0x79, 0x2d, 0x51, 0xe5, - 0xfe, 0x13, 0xf4, 0x20, 0x57, 0x37, 0x26, 0xae, 0xe5, 0x08, 0x2b, 0xc2, 0xfe, 0x34, 0x89, 0x8d, - 0xca, 0xd4, 0x7f, 0x94, 0xe7, 0x2b, 0x50, 0xe9, 0x4e, 0x8e, 0x75, 0x89, 0xfa, 0x5f, 0xcb, 0xf3, - 0x9b, 0xb0, 0xa6, 0xa9, 0xe2, 0xda, 0x4e, 0xf6, 0xd7, 0x71, 0x57, 0x5b, 0x69, 0xa9, 0xf1, 0xd2, - 0x0d, 0x65, 0x7f, 0x23, 0x8f, 0x4d, 0xa0, 0xeb, 0xf3, 0x7f, 0x93, 0xe4, 0x44, 0xd7, 0x89, 0xd8, - 0xaf, 0xe6, 0xf9, 0x2a, 0x40, 0xb7, 0x17, 0xbd, 0xe8, 0xd7, 0xf3, 0xbc, 0x0a, 0xc5, 0x6e, 0x8f, - 0xa4, 0xfd, 0x38, 0xcf, 0x6f, 0x00, 0x8b, 0x9f, 0xea, 0x8a, 0xd7, 0xbf, 0xa3, 0x1a, 0x13, 0x95, - 0xb0, 0xfe, 0xdd, 0x3c, 0xf6, 0x2b, 0x1c, 0x65, 0xf6, 0xf7, 0xf2, 0x9c, 0x41, 0x35, 0x91, 0x93, - 0x65, 0x7f, 0x3f, 0xcf, 0x39, 0xd4, 0xf6, 0xec, 0x20, 0xb0, 0xdd, 0x81, 0xee, 0xc1, 0xaf, 0xd1, - 0x9b, 0xb7, 0xa3, 0x1b, 0x51, 0xec, 0x37, 0xf2, 0xfc, 0x16, 0xf0, 0xe4, 0x39, 0x94, 0x7e, 0xf0, - 0x9b, 0xc4, 0xad, 0x76, 0xd2, 0x40, 0xe3, 0xfe, 0x01, 0x71, 0xa3, 0x26, 0x68, 0xc4, 0x6f, 0xd1, - 0x80, 0x6c, 0xc6, 0x35, 0xb2, 0x1a, 0xff, 0x13, 0x62, 0x0e, 0x27, 0x53, 0xe1, 0x7e, 0x9a, 0xbf, - 0xff, 0x7b, 0x74, 0x8e, 0x90, 0x2c, 0x35, 0xe3, 0xcb, 0x50, 0x76, 0x3c, 0x77, 0x20, 0xd5, 0xd7, - 0x59, 0x6b, 0x50, 0x09, 0x86, 0x9e, 0x2f, 0x09, 0xa4, 0x2b, 0x9b, 0x2e, 0x5d, 0xed, 0x57, 0x97, - 0x1c, 0x54, 0x34, 0xa8, 0xf2, 0xb2, 0xd2, 0x1c, 0xb0, 0x6a, 0x54, 0xdd, 0x9b, 0x8f, 0x2a, 0x90, - 0xe9, 0x13, 0x03, 0xe1, 0x15, 0x6e, 0x56, 0x44, 0xd2, 0x89, 0xef, 0xa8, 0x4a, 0x64, 0x81, 0x91, - 0x80, 0xfa, 0x0c, 0xe3, 0x78, 0x88, 0x01, 0x47, 0x45, 0x61, 0xbd, 0x1f, 0xd8, 0xea, 0x72, 0xb0, - 0x2e, 0xec, 0xb3, 0xb0, 0x1d, 0x51, 0xed, 0x0a, 0x13, 0xf7, 0xff, 0x61, 0x06, 0x96, 0xc3, 0x8b, - 0xf5, 0xf6, 0xc0, 0x76, 0x55, 0x2d, 0x73, 0xf8, 0xcd, 0xdb, 0xbe, 0x63, 0x8f, 0xc3, 0x6f, 0x48, - 0xae, 0x42, 0xd5, 0xf2, 0xcd, 0x41, 0xcb, 0xb5, 0xb6, 0x7c, 0x6f, 0xac, 0x9a, 0xad, 0x4e, 0x1a, - 0x55, 0x0d, 0xf5, 0x73, 0x71, 0x8c, 0xe4, 0x63, 0xe1, 0xb3, 0x3c, 0x15, 0x0d, 0x0e, 0x4d, 0xdf, - 0x76, 0x07, 0xed, 0x73, 0x29, 0xdc, 0x40, 0xd5, 0x52, 0x57, 0xa1, 0x34, 0x09, 0x44, 0xdf, 0x0c, - 0x04, 0x2b, 0x22, 0x70, 0x3c, 0xb1, 0x1d, 0x69, 0xbb, 0xea, 0xd3, 0x8d, 0x51, 0xb1, 0x74, 0x19, - 0x7b, 0x66, 0x8e, 0x6d, 0x56, 0xb9, 0xff, 0x6f, 0x32, 0x50, 0x25, 0xb5, 0x88, 0x73, 0xe9, 0xb1, - 0x17, 0x57, 0x85, 0xd2, 0x6e, 0xf4, 0x0d, 0xbf, 0x22, 0x64, 0x0f, 0x4e, 0x55, 0x2e, 0x5d, 0xab, - 0x85, 0xba, 0x01, 0xab, 0x3e, 0xe7, 0x97, 0xe7, 0x5f, 0x80, 0x1b, 0x86, 0x18, 0x79, 0x52, 0x3c, - 0x33, 0x6d, 0x99, 0xbc, 0xed, 0x54, 0xc0, 0x30, 0x50, 0x3d, 0x0a, 0xaf, 0x37, 0x15, 0x29, 0x0c, - 0xc4, 0xd7, 0x86, 0x98, 0x12, 0xf6, 0x9e, 0x30, 0x3a, 0x2e, 0x2c, 0x47, 0x24, 0x1f, 0x79, 0xb6, - 0x8b, 0x6f, 0xa3, 0x5b, 0xd9, 0x84, 0xa1, 0x43, 0x19, 0x44, 0xc1, 0xfd, 0x7d, 0xb8, 0x39, 0xff, - 0x28, 0x41, 0xdd, 0xd7, 0xa6, 0x0f, 0x47, 0xd3, 0xfd, 0x97, 0x67, 0xbe, 0xad, 0x2e, 0xd6, 0x56, - 0xa0, 0x70, 0xf0, 0xdc, 0x25, 0xb5, 0x58, 0x83, 0xda, 0xbe, 0x97, 0xe0, 0x61, 0xb9, 0xfb, 0xfd, - 0xd4, 0xe9, 0x4f, 0x3c, 0x28, 0x61, 0x23, 0x96, 0x12, 0x77, 0xbb, 0x32, 0xea, 0x5c, 0x81, 0xfe, - 0xf7, 0x87, 0xfa, 0x96, 0x85, 0x3e, 0x75, 0xb1, 0xd4, 0xb7, 0x2c, 0xa2, 0x66, 0xe6, 0xd5, 0x47, - 0xbd, 0xdc, 0xbe, 0x70, 0x84, 0xc5, 0x0a, 0xf7, 0xdf, 0x83, 0x55, 0xdd, 0xd5, 0xbe, 0x08, 0x82, - 0xf0, 0x6e, 0xd4, 0xa1, 0x6f, 0x9f, 0xa9, 0xef, 0x65, 0x2c, 0x43, 0xf9, 0x50, 0xf8, 0x81, 0xe7, - 0xd2, 0xb7, 0x42, 0x00, 0x8a, 0xdd, 0xa1, 0xe9, 0xe3, 0x3b, 0xee, 0x7f, 0x5d, 0x0f, 0xd2, 0x93, - 0xf3, 0x70, 0x6b, 0xc0, 0xf5, 0xa3, 0x3f, 0x95, 0x63, 0x4a, 0x53, 0x93, 0x4b, 0x5f, 0x98, 0x23, - 0x96, 0xbd, 0xbf, 0x09, 0x15, 0xba, 0x5a, 0xf5, 0xd8, 0x76, 0x2d, 0xec, 0xf8, 0x86, 0x2e, 0xd8, - 0xa7, 0x6f, 0x38, 0x9d, 0xd1, 0x70, 0x94, 0xd5, 0xd7, 0x6e, 0x59, 0x96, 0xdf, 0x04, 0xde, 0x9a, - 0x48, 0x6f, 0x64, 0xd2, 0x95, 0x60, 0xe7, 0x42, 0x7d, 0x19, 0x39, 0x77, 0xff, 0x3b, 0xc0, 0x55, - 0x6e, 0xce, 0x12, 0xe7, 0xb6, 0x3b, 0x88, 0xbe, 0x45, 0x00, 0xf4, 0x61, 0x11, 0x4b, 0x9c, 0x87, - 0xf7, 0xe2, 0x42, 0x20, 0xfc, 0xbc, 0xc9, 0xb6, 0x37, 0x71, 0xb1, 0xd1, 0x4f, 0xe1, 0xba, 0x52, - 0x31, 0xec, 0x05, 0xdd, 0x37, 0xbd, 0x34, 0x61, 0xa0, 0xee, 0xc5, 0xc9, 0x49, 0x10, 0xd1, 0xb2, - 0x0c, 0x36, 0x2c, 0x0a, 0xb6, 0x63, 0x7c, 0xf6, 0x7e, 0x13, 0xae, 0xcd, 0xc9, 0x78, 0x90, 0x51, - 0x57, 0x71, 0x1f, 0x5b, 0xba, 0xff, 0x21, 0xac, 0x29, 0x33, 0xb4, 0xaf, 0x6e, 0x04, 0x86, 0xc3, - 0xf6, 0xac, 0xb3, 0xdd, 0x51, 0x23, 0xbd, 0xd9, 0xde, 0xdd, 0x7d, 0xb2, 0xdb, 0x32, 0x58, 0x86, - 0xf4, 0xe1, 0xa0, 0x77, 0xb4, 0x79, 0xb0, 0xbf, 0xdf, 0xde, 0xec, 0xb5, 0xb7, 0x58, 0x76, 0xe3, - 0xfe, 0xbf, 0xfb, 0xf9, 0x9d, 0xcc, 0xcf, 0x7e, 0x7e, 0x27, 0xf3, 0x5f, 0x7f, 0x7e, 0x27, 0xf3, - 0xe3, 0xcf, 0xee, 0x2c, 0xfd, 0xec, 0xb3, 0x3b, 0x4b, 0xff, 0xf1, 0xb3, 0x3b, 0x4b, 0x9f, 0xb0, - 0xe9, 0x7f, 0xdf, 0x73, 0x5c, 0xa4, 0xa0, 0xe2, 0xad, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x7d, - 0x56, 0xe3, 0x65, 0xd9, 0x67, 0x00, 0x00, + 0x9b, 0xff, 0xac, 0x04, 0x10, 0x1f, 0x21, 0xcd, 0x59, 0xf3, 0xf3, 0x2a, 0x22, 0x66, 0x0e, 0x74, + 0x73, 0x2f, 0x7d, 0xa0, 0xfb, 0x5e, 0xe4, 0xd8, 0xab, 0xf4, 0xf2, 0x74, 0x59, 0x78, 0xdc, 0xa6, + 0x69, 0x77, 0x3e, 0x55, 0x30, 0x54, 0x98, 0x2e, 0x18, 0xba, 0x3b, 0x5b, 0x5d, 0x38, 0x65, 0x8c, + 0xe2, 0xbc, 0x45, 0x29, 0x95, 0xb7, 0x68, 0x40, 0xd9, 0x17, 0xa6, 0xe5, 0xb9, 0xce, 0x45, 0x78, + 0x6e, 0x18, 0xc2, 0xfc, 0x2d, 0x28, 0x48, 0xba, 0xe5, 0x53, 0xa6, 0xb5, 0xf3, 0x82, 0x89, 0x53, + 0xb4, 0x68, 0xd9, 0xec, 0x40, 0x97, 0x04, 0xaa, 0x5d, 0xb3, 0x6c, 0x24, 0x30, 0x7c, 0x1d, 0xb8, + 0x8d, 0x41, 0x9c, 0xe3, 0x08, 0x6b, 0xe3, 0x62, 0x4b, 0x1d, 0xe7, 0xd1, 0xbe, 0x5e, 0x36, 0xe6, + 0x3c, 0x09, 0xe7, 0x7f, 0x39, 0x9e, 0x7f, 0x6a, 0xf2, 0x99, 0x1d, 0x60, 0x4f, 0x6b, 0xe4, 0xbe, + 0x44, 0x30, 0x7a, 0x0e, 0xe1, 0x82, 0x55, 0x63, 0x49, 0xda, 0x1b, 0x9f, 0x89, 0x5f, 0xf2, 0x34, + 0x1c, 0x5e, 0x95, 0xb8, 0x59, 0x25, 0xa1, 0x31, 0x82, 0x2c, 0x79, 0xdf, 0x73, 0xf7, 0x51, 0x23, + 0x98, 0xb6, 0xe4, 0x1a, 0xc6, 0xfe, 0x8e, 0x9d, 0x89, 0x6f, 0x3a, 0xf4, 0x74, 0x4d, 0x59, 0xf2, + 0x18, 0xd3, 0xfc, 0x83, 0x6c, 0x14, 0x3c, 0x55, 0xa0, 0x70, 0x6c, 0x06, 0x76, 0x5f, 0xed, 0x6e, + 0xda, 0xe9, 0x51, 0xbb, 0x9b, 0xf4, 0x2c, 0x8f, 0x65, 0x31, 0x0e, 0x0a, 0x84, 0x3e, 0xce, 0x89, + 0xef, 0x54, 0xb1, 0x3c, 0x9a, 0x80, 0x50, 0x93, 0x54, 0xcd, 0x10, 0xb1, 0x52, 0x72, 0xce, 0x8a, + 0xaa, 0x31, 0x29, 0xcc, 0xa6, 0x2d, 0x86, 0x95, 0x91, 0xc6, 0xf5, 0xa4, 0x50, 0xa9, 0x49, 0xd2, + 0x7b, 0x06, 0x28, 0x26, 0xbc, 0x24, 0xc0, 0xaa, 0x18, 0x98, 0x84, 0x42, 0x55, 0x3e, 0x31, 0xa0, + 0xb0, 0x6d, 0x19, 0xd7, 0x7d, 0xfa, 0x01, 0xab, 0x61, 0x8b, 0xe2, 0xab, 0x5a, 0x6c, 0x05, 0xa5, + 0x9a, 0x54, 0xc9, 0xb2, 0x8a, 0x3f, 0xcf, 0xa8, 0xbe, 0x85, 0xe1, 0x5b, 0x2d, 0xb4, 0x4b, 0x6b, + 0xd8, 0xb2, 0xc8, 0xd1, 0x61, 0x1c, 0xe3, 0xae, 0xb1, 0x89, 0x41, 0x90, 0x3d, 0x36, 0x5d, 0xc9, + 0xae, 0x61, 0x57, 0xc7, 0xd6, 0x09, 0xbb, 0x8e, 0x2c, 0xfd, 0xa1, 0x29, 0xd9, 0x0d, 0xa4, 0xc1, + 0x5f, 0x5b, 0xc2, 0x47, 0x4d, 0x61, 0x37, 0x91, 0x46, 0x9a, 0x03, 0x76, 0xab, 0xf9, 0xeb, 0x71, + 0x3d, 0xf4, 0x1b, 0x51, 0x78, 0xb2, 0xc8, 0xf2, 0xc1, 0x00, 0x66, 0xde, 0x5a, 0x6e, 0xc3, 0x9a, + 0x2f, 0x7e, 0x30, 0xb1, 0x53, 0xb7, 0x04, 0x72, 0x57, 0x97, 0xa1, 0xcc, 0x72, 0x34, 0xcf, 0x60, + 0x2d, 0x04, 0x9e, 0xd9, 0x72, 0x48, 0x79, 0x24, 0xfe, 0x56, 0xe2, 0x1a, 0x43, 0x66, 0xee, 0xf5, + 0xaf, 0x48, 0x64, 0x7c, 0x6d, 0x21, 0x3a, 0x27, 0xc8, 0x2e, 0x70, 0x4e, 0xd0, 0xfc, 0x3f, 0xc9, + 0x83, 0x67, 0x15, 0xb0, 0x59, 0x51, 0xc0, 0x36, 0x7b, 0x10, 0x1d, 0xa7, 0xfe, 0xb3, 0x2f, 0x93, + 0xfa, 0x9f, 0x57, 0xd4, 0xf1, 0x3e, 0xc6, 0x0f, 0xb4, 0x32, 0x9f, 0x2e, 0x70, 0xac, 0x91, 0xa2, + 0xe5, 0x1b, 0x74, 0xac, 0x6c, 0x76, 0x55, 0xc5, 0x51, 0x61, 0xee, 0xa5, 0xa2, 0xe4, 0xf9, 0xb1, + 0xa6, 0x34, 0x12, 0x5c, 0x09, 0x3b, 0x56, 0x9c, 0x67, 0xc7, 0x30, 0x76, 0xd6, 0x16, 0x2e, 0x82, + 0xd5, 0x29, 0x90, 0xfa, 0x1d, 0x8a, 0xa7, 0x35, 0x5e, 0x36, 0x66, 0xf0, 0xe8, 0xec, 0x8d, 0x26, + 0x8e, 0xb4, 0xf5, 0x41, 0x87, 0x02, 0xa6, 0x6f, 0x3d, 0x56, 0x66, 0x6f, 0x3d, 0x7e, 0x08, 0x10, + 0x08, 0x5c, 0x1d, 0x5b, 0x76, 0x5f, 0xea, 0xba, 0xa4, 0x3b, 0x97, 0xf5, 0x4d, 0x1f, 0xcf, 0x24, + 0x38, 0xb0, 0xfd, 0x23, 0xf3, 0x9c, 0x8e, 0x6c, 0x75, 0x01, 0x45, 0x04, 0x4f, 0x5b, 0xf7, 0x95, + 0x59, 0xeb, 0xfe, 0x16, 0x14, 0x02, 0x74, 0xa1, 0xe9, 0xe2, 0xce, 0xe5, 0xf3, 0xbb, 0x4e, 0x7e, + 0xb6, 0xa1, 0x68, 0x29, 0x61, 0x89, 0xf6, 0xcf, 0xf3, 0xe9, 0xca, 0x4e, 0xc5, 0x08, 0xc1, 0x94, + 0x85, 0xbd, 0x99, 0xb6, 0xb0, 0x0d, 0x0b, 0x8a, 0xfa, 0xf0, 0x61, 0x3a, 0x51, 0x10, 0xa6, 0x2d, + 0xb3, 0x89, 0xb4, 0x65, 0x54, 0xfd, 0x9a, 0x4b, 0x56, 0xbf, 0x4e, 0xdd, 0xea, 0x2b, 0xcc, 0xdc, + 0xea, 0x6b, 0x7e, 0x02, 0x05, 0x15, 0x13, 0x40, 0xe8, 0x8e, 0x2a, 0x57, 0x16, 0x3b, 0xc5, 0x32, + 0xfc, 0x3a, 0xb0, 0x40, 0x90, 0xaf, 0x23, 0xba, 0xe6, 0x48, 0x90, 0x91, 0xcc, 0xf2, 0x3a, 0x5c, + 0x57, 0xb4, 0x41, 0xfa, 0x09, 0x39, 0x5c, 0x8e, 0x7d, 0xec, 0x9b, 0xfe, 0x05, 0xcb, 0x37, 0x3f, + 0xa4, 0xa3, 0xff, 0x50, 0xa1, 0xaa, 0xd1, 0x2d, 0x4a, 0x65, 0x96, 0x2d, 0x6d, 0x7d, 0xa8, 0x72, + 0x44, 0x47, 0x7b, 0xaa, 0x9e, 0x8e, 0xc2, 0x29, 0xca, 0x07, 0x2d, 0x27, 0xf7, 0xf8, 0x3f, 0xb5, + 0xf5, 0xd6, 0xdc, 0x48, 0x78, 0x8c, 0xe9, 0x02, 0xb9, 0xcc, 0xa2, 0x05, 0x72, 0xcd, 0xc7, 0xb0, + 0x6a, 0xa4, 0x6d, 0x3a, 0x7f, 0x0f, 0x4a, 0xde, 0x38, 0x29, 0xe7, 0x45, 0x7a, 0x19, 0x92, 0x37, + 0x7f, 0x37, 0x03, 0xcb, 0x1d, 0x57, 0x0a, 0xdf, 0x35, 0x9d, 0x6d, 0xc7, 0x1c, 0xf0, 0x77, 0x43, + 0x2b, 0x35, 0x3f, 0xf7, 0x90, 0xa4, 0x4d, 0x1b, 0x2c, 0x47, 0x27, 0xd9, 0xf9, 0x0d, 0x58, 0x13, + 0x96, 0x2d, 0x3d, 0x5f, 0xf9, 0xc9, 0x61, 0x1d, 0xe3, 0x75, 0x60, 0x0a, 0xdd, 0xa5, 0x25, 0xd1, + 0x53, 0xd3, 0x5c, 0x87, 0xeb, 0x29, 0x6c, 0xe8, 0x04, 0x67, 0xf9, 0x6d, 0xa8, 0xc7, 0xbb, 0xd1, + 0x96, 0xe7, 0xca, 0x8e, 0x6b, 0x89, 0x73, 0x72, 0xb2, 0x58, 0xae, 0xf9, 0x6b, 0x91, 0x7b, 0xf7, + 0x54, 0x57, 0x39, 0xfa, 0x9e, 0x17, 0x5f, 0xa1, 0xd5, 0x50, 0xe2, 0xaa, 0x76, 0x76, 0x81, 0xab, + 0xda, 0x1f, 0xc6, 0xd7, 0x6d, 0xd5, 0x46, 0xf1, 0xca, 0xdc, 0xdd, 0x87, 0x8a, 0xb3, 0xb4, 0x77, + 0xdf, 0x15, 0x89, 0xbb, 0xb7, 0x6f, 0xea, 0x90, 0x2e, 0xbf, 0x88, 0x17, 0xac, 0xea, 0x18, 0xde, + 0x99, 0xbe, 0xe3, 0xb1, 0x58, 0x91, 0xe4, 0x8c, 0xa3, 0x0a, 0x2f, 0xed, 0xa8, 0x7e, 0x7b, 0x2a, + 0x7a, 0x2a, 0xcf, 0x4d, 0xc7, 0x5d, 0x71, 0x83, 0xf5, 0xdb, 0x50, 0x1a, 0xda, 0x81, 0xf4, 0x7c, + 0x75, 0xab, 0x7a, 0xf6, 0x16, 0x58, 0x62, 0xb4, 0x76, 0x14, 0x21, 0x55, 0xb4, 0x85, 0x5c, 0xfc, + 0x7b, 0xb0, 0x46, 0x03, 0x7f, 0x18, 0x7b, 0x0d, 0x41, 0xbd, 0x3a, 0xb7, 0x92, 0x30, 0x21, 0x6a, + 0x63, 0x8a, 0xc5, 0x98, 0x15, 0xd2, 0x18, 0x00, 0xc4, 0xf3, 0x33, 0x63, 0xc5, 0x3e, 0xc3, 0xad, + 0xea, 0x9b, 0x50, 0x0c, 0x26, 0xc7, 0xf1, 0x69, 0x9c, 0x86, 0x1a, 0xe7, 0xd0, 0x98, 0xf1, 0x0e, + 0x0e, 0x85, 0xaf, 0x9a, 0x7b, 0xe5, 0xd5, 0xee, 0x0f, 0x93, 0x13, 0xaf, 0x94, 0xf3, 0xee, 0x25, + 0xb3, 0x17, 0x49, 0x4e, 0x68, 0x40, 0xe3, 0x1d, 0xa8, 0x26, 0x06, 0x15, 0x2d, 0xf3, 0xc4, 0xb5, + 0xbc, 0x30, 0x05, 0x8c, 0xbf, 0xd5, 0xd5, 0x36, 0x2b, 0x4c, 0x02, 0xd3, 0xef, 0x86, 0x01, 0x6c, + 0x7a, 0x00, 0xaf, 0x88, 0xb0, 0x5f, 0x81, 0x5a, 0xc2, 0xa5, 0x8b, 0xd2, 0x83, 0x69, 0x64, 0xf3, + 0x0c, 0x3e, 0x9f, 0x10, 0x77, 0x28, 0xfc, 0x91, 0x1d, 0xe0, 0x46, 0xa2, 0x82, 0x45, 0x72, 0xad, + 0x2d, 0xe1, 0x4a, 0x5b, 0x86, 0x16, 0x34, 0x82, 0xf9, 0x37, 0xa1, 0x30, 0x16, 0xfe, 0x28, 0xd0, + 0x56, 0x74, 0x5a, 0x83, 0xe6, 0x8a, 0x0d, 0x0c, 0xc5, 0xd3, 0xfc, 0x27, 0x19, 0x28, 0xef, 0x09, + 0x69, 0xa2, 0xef, 0xc0, 0xf7, 0xa6, 0xde, 0x32, 0x7b, 0x82, 0x1c, 0x92, 0xae, 0xeb, 0xf0, 0x75, + 0xbd, 0xa3, 0xe9, 0x35, 0xbc, 0xb3, 0x14, 0x37, 0xac, 0xb1, 0x01, 0x25, 0x8d, 0x6e, 0xbc, 0x0b, + 0xab, 0x53, 0x94, 0x34, 0x2e, 0xca, 0xb7, 0xef, 0x5e, 0x8c, 0xc2, 0x32, 0xa7, 0x65, 0x23, 0x8d, + 0xdc, 0xa8, 0x40, 0x69, 0xac, 0x18, 0x9a, 0x7f, 0x70, 0x83, 0x8a, 0x6b, 0xec, 0x13, 0x8c, 0xe9, + 0xe7, 0xed, 0xac, 0x77, 0x00, 0x68, 0x6b, 0x56, 0x25, 0x18, 0x2a, 0x65, 0x9b, 0xc0, 0xf0, 0xf7, + 0xa3, 0x5c, 0x7b, 0x7e, 0xae, 0x53, 0x95, 0x14, 0x3e, 0x9d, 0x70, 0xaf, 0x43, 0xc9, 0x0e, 0x28, + 0x0f, 0xa7, 0xcb, 0x96, 0x42, 0x90, 0x7f, 0x0b, 0x8a, 0xf6, 0x68, 0xec, 0xf9, 0x52, 0x27, 0xe3, + 0xaf, 0x94, 0xda, 0x21, 0xca, 0x9d, 0x25, 0x43, 0xf3, 0x20, 0xb7, 0x38, 0x27, 0xee, 0xf2, 0x8b, + 0xb9, 0xdb, 0xe7, 0x21, 0xb7, 0xe2, 0xe1, 0xdf, 0x85, 0xda, 0x40, 0x55, 0x6d, 0x2a, 0xc1, 0xda, + 0x88, 0x7c, 0xe5, 0x2a, 0x21, 0x8f, 0x92, 0x0c, 0x3b, 0x4b, 0x46, 0x5a, 0x02, 0x8a, 0x44, 0x07, + 0x5e, 0x04, 0xb2, 0xe7, 0x7d, 0xe4, 0xd9, 0x2e, 0x85, 0xbb, 0x2f, 0x10, 0x69, 0x24, 0x19, 0x50, + 0x64, 0x4a, 0x02, 0xff, 0x3a, 0x7a, 0x3c, 0x81, 0xd4, 0x17, 0xdb, 0xef, 0x5e, 0x25, 0xa9, 0x27, + 0x02, 0x7d, 0x25, 0x3d, 0x90, 0xfc, 0x1c, 0x1a, 0x89, 0x45, 0xa2, 0x5f, 0xd2, 0x1a, 0x8f, 0x7d, + 0x0f, 0x63, 0xe6, 0x1a, 0x49, 0xfb, 0xfa, 0x55, 0xd2, 0x0e, 0x2f, 0xe5, 0xde, 0x59, 0x32, 0xae, + 0x90, 0xcd, 0x7b, 0x18, 0xd9, 0xe9, 0x2e, 0xec, 0x0a, 0xf3, 0x2c, 0xbc, 0x16, 0x7f, 0x7f, 0xa1, + 0x51, 0x20, 0x8e, 0x9d, 0x25, 0x63, 0x4a, 0x06, 0xff, 0x65, 0x58, 0x4b, 0xbd, 0x93, 0x6e, 0xc2, + 0xaa, 0x4b, 0xf3, 0x5f, 0x5b, 0xb8, 0x1b, 0xc8, 0xb4, 0xb3, 0x64, 0xcc, 0x4a, 0xe2, 0x13, 0xf8, + 0xdc, 0x6c, 0x97, 0xb6, 0x44, 0xdf, 0xb1, 0x5d, 0xa1, 0xef, 0xd7, 0xbf, 0xf3, 0x72, 0xa3, 0xa5, + 0x99, 0x77, 0x96, 0x8c, 0xcb, 0x25, 0xf3, 0xbf, 0x0a, 0xb7, 0xc7, 0x73, 0x4d, 0x8c, 0x32, 0x5d, + 0xfa, 0x7a, 0xfe, 0x7b, 0x0b, 0xbe, 0x79, 0x86, 0x7f, 0x67, 0xc9, 0xb8, 0x52, 0x3e, 0xfa, 0xce, + 0x14, 0x41, 0xeb, 0xe2, 0x72, 0x05, 0xd0, 0x49, 0x6d, 0xdf, 0xd9, 0x11, 0xa6, 0x15, 0x9d, 0x17, + 0xc4, 0x88, 0xc6, 0xff, 0xcc, 0x40, 0x51, 0xeb, 0xfb, 0xed, 0xa8, 0x62, 0x20, 0x32, 0xdd, 0x31, + 0x82, 0x7f, 0x00, 0x15, 0xe1, 0xfb, 0x9e, 0xbf, 0xe9, 0x59, 0x61, 0xb1, 0xe5, 0x74, 0x96, 0x59, + 0xc9, 0x59, 0x6f, 0x87, 0x64, 0x46, 0xcc, 0xc1, 0xdf, 0x07, 0x50, 0xeb, 0xbc, 0x17, 0xdf, 0x11, + 0x6a, 0xcc, 0xe7, 0x57, 0x47, 0x50, 0x31, 0x75, 0x9c, 0x96, 0x0b, 0xcf, 0x7f, 0x42, 0x30, 0x0a, + 0x38, 0x0b, 0x89, 0x80, 0xf3, 0xb6, 0xce, 0x23, 0x50, 0x7a, 0x45, 0xdf, 0x94, 0x8b, 0x10, 0x8d, + 0xdf, 0xcf, 0x40, 0x51, 0x19, 0x0f, 0xde, 0x9e, 0xed, 0xd1, 0x6b, 0x2f, 0xb6, 0x39, 0xeb, 0xd3, + 0x3d, 0xfb, 0x16, 0x80, 0xb2, 0x41, 0x89, 0x9e, 0xdd, 0x9e, 0x92, 0xa3, 0x59, 0xc3, 0xf2, 0xe6, + 0x98, 0xbe, 0xf9, 0x50, 0xdd, 0xe6, 0xa2, 0x94, 0xf0, 0x93, 0xdd, 0x5d, 0xb6, 0xc4, 0xd7, 0xa0, + 0xf6, 0x64, 0xff, 0xf1, 0xfe, 0xc1, 0xb3, 0xfd, 0xa3, 0xb6, 0x61, 0x1c, 0x18, 0x2a, 0x33, 0xbc, + 0xd1, 0xda, 0x3a, 0xea, 0xec, 0x1f, 0x3e, 0xe9, 0xb1, 0x6c, 0xe3, 0x5f, 0x66, 0xa0, 0x96, 0xb2, + 0x5d, 0x7f, 0xb6, 0x53, 0x97, 0x18, 0xfe, 0xdc, 0xfc, 0xe1, 0xcf, 0x5f, 0x36, 0xfc, 0x85, 0xe9, + 0xe1, 0xff, 0xed, 0x0c, 0xd4, 0x52, 0x36, 0x32, 0x29, 0x3d, 0x93, 0x96, 0x9e, 0xdc, 0xe9, 0xb3, + 0x53, 0x3b, 0x7d, 0x13, 0x96, 0xc3, 0xdf, 0xfb, 0x71, 0xc6, 0x21, 0x85, 0x4b, 0xd2, 0xd0, 0x75, + 0x8a, 0x7c, 0x9a, 0x86, 0xae, 0x54, 0x5c, 0xdd, 0x5a, 0xba, 0x3e, 0x1a, 0xd0, 0xed, 0xfa, 0xc6, + 0xe5, 0x16, 0xf4, 0x8a, 0x2e, 0x3c, 0x82, 0xea, 0x38, 0x5e, 0xa6, 0x2f, 0xe7, 0x96, 0x24, 0x39, + 0x5f, 0xd0, 0xce, 0xdf, 0xc9, 0xc0, 0x4a, 0xda, 0xe6, 0xfe, 0xb9, 0x1e, 0xd6, 0x7f, 0x9e, 0x81, + 0xb5, 0x19, 0x4b, 0x7e, 0xa5, 0x63, 0x37, 0xdd, 0xae, 0xec, 0x02, 0xed, 0xca, 0xcd, 0x69, 0xd7, + 0xe5, 0x96, 0xe4, 0xea, 0x16, 0x77, 0xe1, 0x73, 0x97, 0xee, 0x09, 0x57, 0x0c, 0x75, 0x4a, 0x68, + 0x6e, 0x5a, 0xe8, 0x6f, 0x65, 0xe0, 0xf6, 0x55, 0xf6, 0xfe, 0xff, 0xbb, 0x5e, 0x4d, 0xb7, 0xb0, + 0xf9, 0x6e, 0x54, 0x48, 0x50, 0x85, 0x92, 0xfe, 0x6a, 0x95, 0x2e, 0xe4, 0x1e, 0x7a, 0xcf, 0x5d, + 0x95, 0x89, 0x36, 0x84, 0xa9, 0xef, 0xf5, 0x1b, 0x62, 0xec, 0xd8, 0x74, 0x46, 0x7a, 0x0b, 0xa0, + 0x45, 0x71, 0x5d, 0x78, 0xcd, 0x66, 0x73, 0xf7, 0xa0, 0xdb, 0x66, 0x4b, 0x49, 0x27, 0xf6, 0x93, + 0xd0, 0x10, 0x37, 0x0f, 0xa1, 0x18, 0x5f, 0x7c, 0xd8, 0x33, 0xfd, 0x53, 0x4b, 0x9d, 0x44, 0x2e, + 0x43, 0xf9, 0x50, 0x87, 0x50, 0xea, 0x55, 0x1f, 0x75, 0x0f, 0xf6, 0x55, 0xd2, 0x7b, 0xeb, 0xa0, + 0xa7, 0xae, 0x4f, 0x74, 0x9f, 0x3e, 0x52, 0x47, 0x62, 0x8f, 0x8c, 0xd6, 0xe1, 0xce, 0x11, 0x51, + 0x14, 0x9a, 0xbf, 0x99, 0x0f, 0x77, 0xb5, 0xa6, 0xa1, 0xcf, 0x38, 0x01, 0x8a, 0x68, 0xcd, 0x3d, + 0x2d, 0x38, 0x7a, 0x0d, 0x95, 0xfc, 0xb6, 0xcf, 0x55, 0x1e, 0x82, 0x65, 0x79, 0x11, 0xb2, 0x87, + 0xc7, 0xaa, 0x12, 0x69, 0x47, 0x8e, 0x1c, 0x75, 0xef, 0xb2, 0x77, 0x2e, 0x59, 0x01, 0x7f, 0x6c, + 0x06, 0x67, 0xac, 0xd8, 0xfc, 0x57, 0x39, 0xa8, 0x44, 0xa6, 0xf2, 0x65, 0x4c, 0x37, 0xe7, 0xb0, + 0xd2, 0xd9, 0xef, 0xb5, 0x8d, 0xfd, 0xd6, 0xae, 0x26, 0xc9, 0xf1, 0x6b, 0xb0, 0xba, 0xdd, 0xd9, + 0x6d, 0x1f, 0xed, 0x1e, 0xb4, 0xb6, 0x34, 0xb2, 0xcc, 0x6f, 0x02, 0xef, 0xec, 0x1d, 0x1e, 0x18, + 0xbd, 0xa3, 0x4e, 0xf7, 0x68, 0xb3, 0xb5, 0xbf, 0xd9, 0xde, 0x6d, 0x6f, 0xb1, 0x22, 0x7f, 0x05, + 0xee, 0xee, 0x1f, 0xf4, 0x3a, 0x07, 0xfb, 0x47, 0xfb, 0x07, 0x47, 0x07, 0x1b, 0x1f, 0xb5, 0x37, + 0x7b, 0xdd, 0xa3, 0xce, 0xfe, 0x11, 0x4a, 0x7d, 0x64, 0xb4, 0xf0, 0x09, 0x2b, 0xf0, 0xbb, 0x70, + 0x5b, 0x53, 0x75, 0xdb, 0xc6, 0xd3, 0xb6, 0x81, 0x42, 0x9e, 0xec, 0xb7, 0x9e, 0xb6, 0x3a, 0xbb, + 0xad, 0x8d, 0xdd, 0x36, 0x5b, 0xe6, 0x77, 0xa0, 0xa1, 0x29, 0x8c, 0x56, 0xaf, 0x7d, 0xb4, 0xdb, + 0xd9, 0xeb, 0xf4, 0x8e, 0xda, 0xdf, 0xdb, 0x6c, 0xb7, 0xb7, 0xda, 0x5b, 0xac, 0xc6, 0xbf, 0x02, + 0x5f, 0xa6, 0x46, 0xe9, 0x46, 0xa4, 0x5f, 0xf6, 0x49, 0xe7, 0xf0, 0xa8, 0x65, 0x6c, 0xee, 0x74, + 0x9e, 0xb6, 0xd9, 0x0a, 0x7f, 0x0d, 0xbe, 0x74, 0x39, 0xe9, 0x56, 0xc7, 0x68, 0x6f, 0xf6, 0x0e, + 0x8c, 0x8f, 0xd9, 0x1a, 0xff, 0x02, 0x7c, 0x6e, 0xa7, 0xb7, 0xb7, 0x7b, 0xf4, 0xcc, 0x38, 0xd8, + 0x7f, 0x74, 0x44, 0x3f, 0xbb, 0x3d, 0xe3, 0xc9, 0x66, 0xef, 0x89, 0xd1, 0x66, 0xc0, 0x1b, 0x70, + 0xf3, 0x70, 0xe3, 0x68, 0xff, 0xa0, 0x77, 0xd4, 0xda, 0xff, 0x78, 0x63, 0xf7, 0x60, 0xf3, 0xf1, + 0xd1, 0xf6, 0x81, 0xb1, 0xd7, 0xea, 0xb1, 0x2a, 0xff, 0x2a, 0xbc, 0xb6, 0xd9, 0x7d, 0xaa, 0x9b, + 0x79, 0xb0, 0x7d, 0x64, 0x1c, 0x3c, 0xeb, 0x1e, 0x1d, 0x18, 0x47, 0x46, 0x7b, 0x97, 0xfa, 0xdc, + 0x8d, 0xdb, 0x5e, 0xe2, 0xb7, 0xa1, 0xde, 0xd9, 0xef, 0x3e, 0xd9, 0xde, 0xee, 0x6c, 0x76, 0xda, + 0xfb, 0xbd, 0xa3, 0xc3, 0xb6, 0xb1, 0xd7, 0xe9, 0x76, 0x91, 0x8c, 0x55, 0x9a, 0xdf, 0x81, 0x62, + 0xc7, 0x3d, 0xb3, 0x25, 0xad, 0x2f, 0xad, 0x8c, 0x3a, 0xe2, 0x0a, 0x41, 0x5a, 0x16, 0xf6, 0xc0, + 0xa5, 0xef, 0x09, 0xd0, 0xea, 0x5a, 0x36, 0x62, 0x44, 0xf3, 0xf7, 0x73, 0x50, 0x53, 0x22, 0xc2, + 0x08, 0xee, 0x1e, 0xac, 0xea, 0x54, 0x68, 0x27, 0x6d, 0xc2, 0xa6, 0xd1, 0xf4, 0xa1, 0x2e, 0x85, + 0x4a, 0x18, 0xb2, 0x24, 0x8a, 0xdf, 0x84, 0xa2, 0xd9, 0x77, 0x30, 0x0c, 0x54, 0xe7, 0x95, 0x1a, + 0xfa, 0xac, 0xb6, 0x0b, 0xed, 0xa2, 0x22, 0xec, 0x7b, 0xee, 0x66, 0x74, 0xa5, 0x24, 0x85, 0xe3, + 0x9f, 0xc0, 0xad, 0x08, 0x6e, 0xbb, 0x7d, 0xff, 0x62, 0x1c, 0x7d, 0x49, 0xaf, 0x34, 0x37, 0x99, + 0xb0, 0x6d, 0x3b, 0x22, 0x45, 0x68, 0x5c, 0x26, 0x80, 0x3f, 0x02, 0xb0, 0x69, 0xb0, 0xc8, 0x3f, + 0x9a, 0x7f, 0x6f, 0x3a, 0x35, 0x9a, 0x1a, 0xd2, 0x6e, 0x60, 0xf4, 0x1b, 0x37, 0x88, 0x01, 0xda, + 0xdd, 0xc7, 0xfa, 0xc3, 0x7b, 0xcb, 0x46, 0x04, 0x37, 0x1f, 0x00, 0xc4, 0x5c, 0x9c, 0xc1, 0x32, + 0xfa, 0x16, 0xad, 0x60, 0x4f, 0x8c, 0x8e, 0x85, 0xaf, 0xaa, 0xf8, 0x14, 0xe6, 0x11, 0x72, 0xb0, + 0x4c, 0xf3, 0x8f, 0x32, 0x89, 0x38, 0x5c, 0xc5, 0xd9, 0x57, 0xee, 0x40, 0xf3, 0xce, 0x84, 0x30, + 0x12, 0xd6, 0x83, 0xaa, 0x1d, 0x23, 0x0d, 0xf2, 0x43, 0xe0, 0xf6, 0xec, 0x50, 0xe6, 0x17, 0x1c, + 0xca, 0x39, 0xbc, 0xd3, 0x29, 0xfd, 0xc2, 0x6c, 0x4a, 0xff, 0x0e, 0xc0, 0xc0, 0xf1, 0x8e, 0xf5, + 0xb9, 0x62, 0x51, 0xd7, 0xfd, 0x44, 0x98, 0xa6, 0x03, 0xe5, 0xf0, 0x2b, 0x82, 0xa8, 0x63, 0xf4, + 0x1d, 0xc1, 0x28, 0xc1, 0xa9, 0x20, 0xbe, 0x03, 0x2b, 0x22, 0xdd, 0xe6, 0xec, 0x82, 0x6d, 0x9e, + 0xe2, 0x6b, 0x7e, 0x03, 0xd6, 0x66, 0x88, 0x70, 0x10, 0xc7, 0xa6, 0x8c, 0x3e, 0x25, 0x80, 0xbf, + 0x67, 0x8f, 0xeb, 0x9b, 0xff, 0x31, 0x0b, 0xcb, 0x7b, 0xa6, 0x6b, 0x9f, 0x88, 0x40, 0x86, 0xad, + 0x0d, 0xfa, 0x43, 0x31, 0x32, 0xc3, 0xd6, 0x2a, 0x48, 0x67, 0x3d, 0xb2, 0xc9, 0xf3, 0x84, 0x99, + 0xe3, 0x27, 0x5c, 0x4d, 0x13, 0x39, 0x8c, 0xaa, 0xeb, 0x35, 0x84, 0x73, 0xe7, 0xd8, 0x7d, 0xe1, + 0x06, 0xe1, 0x8a, 0x09, 0xc1, 0xb8, 0x7a, 0xa7, 0x78, 0x45, 0xf5, 0x4e, 0x69, 0x76, 0xfc, 0xef, + 0x42, 0x35, 0xe8, 0xfb, 0x42, 0xb8, 0xc1, 0xd0, 0x93, 0xe1, 0x17, 0x28, 0x93, 0x28, 0x2a, 0xa5, + 0xf3, 0x9e, 0xbb, 0xa8, 0xe3, 0xbb, 0xb6, 0x7b, 0xaa, 0x2b, 0xc4, 0x52, 0x38, 0xd4, 0x41, 0xca, + 0xf9, 0xd8, 0x3f, 0x14, 0x94, 0x6f, 0x28, 0x18, 0x11, 0x4c, 0x59, 0x1d, 0x53, 0x8a, 0x81, 0xe7, + 0xdb, 0x42, 0xa5, 0x36, 0x2b, 0x46, 0x02, 0x83, 0xbc, 0x8e, 0xe9, 0x0e, 0x26, 0xe6, 0x40, 0xe8, + 0xe3, 0xef, 0x08, 0x6e, 0xfe, 0xaf, 0x02, 0x80, 0x5a, 0x0d, 0xc1, 0xd0, 0x1e, 0xd3, 0xd1, 0x8b, + 0xad, 0x6b, 0x8a, 0x6b, 0x06, 0xfd, 0xe6, 0xef, 0xa5, 0xca, 0xfd, 0x67, 0x0f, 0x4b, 0x63, 0xf6, + 0xe9, 0x94, 0x10, 0x0e, 0x8e, 0x29, 0x85, 0x2e, 0x9c, 0xa2, 0xf1, 0xcf, 0x1b, 0x49, 0x14, 0x95, + 0xce, 0x99, 0x52, 0xb4, 0x5d, 0x4b, 0xa5, 0x9c, 0xf2, 0x46, 0x04, 0xd3, 0x85, 0xa1, 0xa0, 0x35, + 0x91, 0x9e, 0x21, 0x5c, 0xf1, 0x3c, 0xba, 0x0b, 0x17, 0xa3, 0xf8, 0x1e, 0xd4, 0xc6, 0xe6, 0xc5, + 0x48, 0xb8, 0x72, 0x4f, 0xc8, 0xa1, 0x67, 0xe9, 0x2a, 0xa7, 0xd7, 0x2e, 0x6f, 0xe0, 0x61, 0x92, + 0xdc, 0x48, 0x73, 0xa3, 0x4e, 0xb8, 0x01, 0xad, 0x12, 0x35, 0x8d, 0x1a, 0xe2, 0x1b, 0x00, 0xea, + 0x57, 0xc2, 0x52, 0xcd, 0x64, 0xa1, 0xcc, 0x91, 0x08, 0x84, 0x7f, 0x66, 0x2b, 0xeb, 0xaa, 0x8c, + 0x54, 0xcc, 0x85, 0xb6, 0x78, 0x12, 0x08, 0xbf, 0x3d, 0x32, 0x6d, 0x47, 0x4f, 0x70, 0x8c, 0xe0, + 0x6f, 0xc3, 0x8d, 0x60, 0x72, 0x8c, 0x3a, 0x73, 0x2c, 0x7a, 0xde, 0xbe, 0x78, 0x1e, 0x38, 0x42, + 0x4a, 0xe1, 0xeb, 0x4a, 0x8a, 0xf9, 0x0f, 0x9b, 0x83, 0xc8, 0x0d, 0xa3, 0xaf, 0x9d, 0xe0, 0xaf, + 0xb8, 0x5c, 0x2b, 0x42, 0xe9, 0x5a, 0x36, 0x96, 0x41, 0xf3, 0xa7, 0x50, 0xba, 0xd4, 0x2d, 0xcb, + 0xbf, 0x0c, 0x5f, 0x4c, 0x11, 0x19, 0xea, 0x60, 0x3a, 0xd8, 0xb6, 0x5d, 0xd3, 0xb1, 0x7f, 0xa8, + 0xca, 0x04, 0x72, 0xcd, 0x31, 0xd4, 0x52, 0x03, 0x47, 0x97, 0x37, 0xe9, 0x97, 0xae, 0xf7, 0x61, + 0xb0, 0xac, 0xe0, 0xae, 0xf4, 0x6d, 0x3a, 0x71, 0x89, 0x30, 0x9b, 0xb8, 0xce, 0x3d, 0x96, 0xe5, + 0xd7, 0x81, 0x29, 0x4c, 0xc7, 0x35, 0xc7, 0xe3, 0xd6, 0x78, 0xec, 0x08, 0x96, 0xa3, 0x8b, 0xb1, + 0x31, 0x56, 0x15, 0xfd, 0xb3, 0x7c, 0xf3, 0x7b, 0x70, 0x8b, 0x46, 0xe6, 0xa9, 0xf0, 0xa3, 0x40, + 0x5b, 0xf7, 0xf5, 0x06, 0xac, 0xa9, 0x5f, 0xfb, 0x9e, 0x54, 0x8f, 0xc9, 0xf9, 0xe4, 0xb0, 0xa2, + 0xd0, 0xe8, 0x7b, 0x75, 0x05, 0x5d, 0x77, 0x8d, 0x70, 0x11, 0x5d, 0xb6, 0xf9, 0x87, 0x45, 0xe0, + 0xb1, 0x42, 0xf4, 0x6c, 0xe1, 0x6f, 0x99, 0xd2, 0x4c, 0x64, 0x4a, 0x6b, 0x97, 0x9e, 0xf5, 0xbf, + 0xb8, 0x52, 0xef, 0x26, 0x14, 0xed, 0x00, 0x43, 0x43, 0x5d, 0xae, 0xab, 0x21, 0xbe, 0x0b, 0x30, + 0x16, 0xbe, 0xed, 0x59, 0xa4, 0x41, 0x85, 0xb9, 0xb7, 0x2e, 0x66, 0x1b, 0xb5, 0x7e, 0x18, 0xf1, + 0x18, 0x09, 0x7e, 0x6c, 0x87, 0x82, 0xd4, 0xc9, 0x79, 0x91, 0x1a, 0x9d, 0x44, 0xf1, 0x37, 0xe0, + 0xda, 0xd8, 0xb7, 0xfb, 0x42, 0x4d, 0xc7, 0x93, 0xc0, 0xda, 0xa4, 0x6f, 0x04, 0x96, 0x88, 0x72, + 0xde, 0x23, 0xd4, 0x40, 0xd3, 0xa5, 0x80, 0x29, 0xa0, 0xb3, 0x62, 0x7d, 0x41, 0x5c, 0x15, 0xb4, + 0xd6, 0x8c, 0xf9, 0x0f, 0xf9, 0x7d, 0x60, 0xfa, 0xc1, 0x9e, 0xed, 0xee, 0x0a, 0x77, 0x20, 0x87, + 0xa4, 0xdc, 0x35, 0x63, 0x06, 0x4f, 0x16, 0x4c, 0x7d, 0x89, 0x49, 0x9d, 0x23, 0x55, 0x8c, 0x08, + 0x56, 0x1f, 0x1d, 0x70, 0x3c, 0xbf, 0x2b, 0x7d, 0x5d, 0x99, 0x1b, 0xc1, 0xe8, 0x43, 0x05, 0xd4, + 0xd6, 0x43, 0xdf, 0xb3, 0x26, 0x74, 0xca, 0xa1, 0x8c, 0xd8, 0x34, 0x3a, 0xa6, 0xdc, 0x33, 0x5d, + 0x5d, 0x2e, 0x59, 0x4b, 0x52, 0x46, 0x68, 0x8a, 0x09, 0xbd, 0x20, 0x16, 0xb8, 0xaa, 0x63, 0xc2, + 0x04, 0x4e, 0xd3, 0xc4, 0xa2, 0x58, 0x44, 0x13, 0xcb, 0xa1, 0xfe, 0x5b, 0xbe, 0x67, 0x5b, 0xb1, + 0x2c, 0x55, 0xb9, 0x33, 0x83, 0x4f, 0xd0, 0xc6, 0x32, 0x79, 0x8a, 0x36, 0x96, 0x7b, 0x1d, 0x0a, + 0xde, 0xc9, 0x89, 0xf0, 0xe9, 0xc3, 0x9b, 0x15, 0x43, 0x01, 0xcd, 0x1f, 0x67, 0x00, 0x62, 0x95, + 0xc0, 0x85, 0x10, 0x43, 0xf1, 0xc2, 0xbf, 0x05, 0xd7, 0x92, 0x68, 0x47, 0x17, 0xc2, 0xd2, 0x6a, + 0x88, 0x1f, 0x6c, 0x99, 0x17, 0x01, 0xcb, 0xea, 0x8b, 0xdb, 0x1a, 0xf7, 0x4c, 0x08, 0xaa, 0x2a, + 0xbc, 0x0e, 0x2c, 0x46, 0xd2, 0x6d, 0xbc, 0x80, 0xe5, 0xd3, 0xa4, 0x1f, 0x0b, 0xd3, 0x0f, 0x58, + 0xa1, 0xb9, 0x03, 0x45, 0x75, 0x04, 0x36, 0xe7, 0xf0, 0xfa, 0xe5, 0x2a, 0x51, 0xfe, 0x76, 0x06, + 0x60, 0x4b, 0x55, 0x4d, 0xe3, 0xde, 0x3e, 0xa7, 0x26, 0x60, 0x9e, 0x9f, 0x65, 0x5a, 0x16, 0x55, + 0x9f, 0xe7, 0xa2, 0xaf, 0xfe, 0x20, 0x88, 0xfa, 0x64, 0x86, 0x95, 0x63, 0x6a, 0x25, 0x46, 0xb0, + 0xda, 0x56, 0x36, 0x3d, 0xd7, 0x15, 0x7d, 0xdc, 0x94, 0xa2, 0x6d, 0x25, 0x42, 0x35, 0x7f, 0x94, + 0x85, 0xca, 0xe6, 0xd0, 0x94, 0xea, 0x23, 0x39, 0xdf, 0x81, 0xf2, 0x48, 0x04, 0x81, 0x39, 0x10, + 0x81, 0x3e, 0xf2, 0x99, 0x3e, 0xaf, 0x8d, 0x68, 0xd7, 0x9f, 0xb8, 0xbe, 0x30, 0x2d, 0xf5, 0x65, + 0xa0, 0x88, 0x4b, 0x49, 0x70, 0x65, 0x14, 0x92, 0xbf, 0x84, 0x04, 0x37, 0xfa, 0x8c, 0xaf, 0x63, + 0x06, 0x8a, 0x24, 0x4a, 0xb7, 0x25, 0x51, 0x8d, 0x3d, 0xa8, 0x26, 0x58, 0xf9, 0x2b, 0x50, 0xf3, + 0x1c, 0x4b, 0x04, 0xea, 0x6e, 0x60, 0xfc, 0x39, 0xc5, 0x14, 0x92, 0x0a, 0x37, 0x70, 0x3d, 0x0b, + 0x5f, 0x9f, 0xde, 0x85, 0x60, 0xf3, 0x37, 0xca, 0x50, 0xc5, 0x46, 0xed, 0xa9, 0x3e, 0xcc, 0x4c, + 0x47, 0x1d, 0x4a, 0x9e, 0x96, 0xac, 0x2f, 0x15, 0x7a, 0x09, 0x99, 0xba, 0x18, 0x24, 0x97, 0x2e, + 0x06, 0xb9, 0x0d, 0x15, 0x75, 0xd4, 0x64, 0xb5, 0x94, 0x7d, 0xcc, 0x19, 0x31, 0x02, 0x9d, 0x98, + 0x91, 0x67, 0x91, 0x95, 0x6e, 0xa9, 0x53, 0x9a, 0x9c, 0x91, 0xc0, 0x50, 0x98, 0xa3, 0xbb, 0x5f, + 0xd5, 0x61, 0x8e, 0x02, 0x55, 0x55, 0xce, 0xd8, 0xb9, 0xe8, 0x79, 0xba, 0xb5, 0x1d, 0x2b, 0xbe, + 0x9b, 0x9d, 0xc6, 0xf3, 0x4d, 0x28, 0xe9, 0x69, 0xd1, 0x67, 0x51, 0x5f, 0x99, 0x33, 0x13, 0x9a, + 0x7c, 0x5d, 0xff, 0xd5, 0xd7, 0xa3, 0x8c, 0x90, 0x93, 0x3f, 0x82, 0xaa, 0x29, 0xa5, 0xd9, 0x1f, + 0x8e, 0xb4, 0x55, 0xcd, 0xcd, 0x39, 0x96, 0x4e, 0x0a, 0x6a, 0x45, 0xd4, 0x46, 0x92, 0x93, 0x6f, + 0x40, 0xc5, 0x17, 0x66, 0xea, 0x64, 0xfc, 0x95, 0x2b, 0xc4, 0x18, 0x21, 0xad, 0x11, 0xb3, 0x45, + 0x5f, 0x16, 0x85, 0xc4, 0x97, 0x45, 0xef, 0x42, 0x55, 0xab, 0x8e, 0x81, 0x8f, 0xd4, 0x17, 0x57, + 0x92, 0xa8, 0xc6, 0x4f, 0x33, 0xb0, 0x92, 0xee, 0xde, 0x9f, 0xc5, 0xb7, 0xf0, 0xbe, 0x15, 0x7f, + 0x0b, 0xef, 0x33, 0x7c, 0x57, 0xee, 0xb7, 0x32, 0x00, 0xf1, 0xc8, 0xe1, 0xde, 0xaa, 0xbe, 0xd9, + 0x15, 0x7a, 0xfb, 0x0a, 0xe2, 0x3b, 0xa9, 0x0f, 0x3d, 0xbc, 0xbd, 0xd0, 0x34, 0x24, 0x7e, 0x26, + 0xca, 0xde, 0x1f, 0xc0, 0x4a, 0x1a, 0x4f, 0xd7, 0x05, 0x3a, 0xbb, 0x6d, 0x95, 0xdb, 0xea, 0xec, + 0xb5, 0x1e, 0xb5, 0xf5, 0x35, 0xb5, 0xce, 0xfe, 0x63, 0x96, 0x6d, 0xfc, 0x71, 0x06, 0x2a, 0xd1, + 0xa4, 0xf0, 0xef, 0x26, 0x67, 0x53, 0x15, 0xc8, 0xbc, 0xb5, 0xc8, 0x6c, 0xc6, 0xbf, 0xda, 0xae, + 0xf4, 0x2f, 0x12, 0x93, 0xdb, 0xf0, 0x60, 0x25, 0xfd, 0x70, 0x8e, 0x99, 0x7d, 0x94, 0x36, 0xb3, + 0x6f, 0x2e, 0xf4, 0xca, 0x30, 0xc4, 0xdd, 0xb5, 0x03, 0xa9, 0x2d, 0xf0, 0xfb, 0xd9, 0xf7, 0x32, + 0x8d, 0xbb, 0xb0, 0x9c, 0x7c, 0x34, 0x7b, 0x53, 0xf5, 0xfe, 0x1f, 0xe7, 0x60, 0x25, 0x5d, 0x63, + 0x42, 0x37, 0xdf, 0x54, 0x7d, 0xd3, 0x81, 0x63, 0x25, 0x6e, 0x0a, 0x30, 0x0c, 0xaf, 0x75, 0x10, + 0x4d, 0x88, 0x35, 0xca, 0x9e, 0x79, 0x23, 0xc1, 0xee, 0x26, 0xbf, 0xf7, 0xf9, 0x06, 0x87, 0xf0, + 0xc6, 0x22, 0x1b, 0xf3, 0x8a, 0xfe, 0xf2, 0xd9, 0x8f, 0xb2, 0xbc, 0x96, 0xa8, 0x57, 0xff, 0x09, + 0x7a, 0x90, 0xab, 0x1b, 0x13, 0xd7, 0x72, 0x84, 0x15, 0x61, 0x7f, 0x9a, 0xc4, 0x46, 0x05, 0xe7, + 0x3f, 0xca, 0xf3, 0x15, 0xa8, 0x74, 0x27, 0xc7, 0xba, 0xd8, 0xfc, 0xaf, 0xe5, 0xf9, 0x4d, 0x58, + 0xd3, 0x54, 0x71, 0x6d, 0x27, 0xfb, 0xeb, 0xb8, 0xab, 0xad, 0xb4, 0xd4, 0x78, 0xe9, 0x86, 0xb2, + 0xbf, 0x91, 0xc7, 0x26, 0xd0, 0x45, 0xf8, 0xbf, 0x49, 0x72, 0xa2, 0x8b, 0x41, 0xec, 0x57, 0xf2, + 0x7c, 0x15, 0xa0, 0xdb, 0x8b, 0x5e, 0xf4, 0x6b, 0x79, 0x5e, 0x85, 0x62, 0xb7, 0x47, 0xd2, 0x7e, + 0x9c, 0xe7, 0x37, 0x80, 0xc5, 0x4f, 0x75, 0xc5, 0xeb, 0xdf, 0x51, 0x8d, 0x89, 0x4a, 0x58, 0xff, + 0x6e, 0x1e, 0xfb, 0x15, 0x8e, 0x32, 0xfb, 0x7b, 0x79, 0xce, 0xa0, 0x9a, 0xc8, 0xc9, 0xb2, 0xbf, + 0x9f, 0xe7, 0x1c, 0x6a, 0x7b, 0x76, 0x10, 0xd8, 0xee, 0x40, 0xf7, 0xe0, 0x57, 0xe9, 0xcd, 0xdb, + 0xd1, 0xdd, 0x26, 0xf6, 0xeb, 0x79, 0x7e, 0x0b, 0x78, 0xf2, 0x1c, 0x4a, 0x3f, 0xf8, 0x0d, 0xe2, + 0x56, 0x3b, 0x69, 0xa0, 0x71, 0xff, 0x80, 0xb8, 0x51, 0x13, 0x34, 0xe2, 0x37, 0x69, 0x40, 0x36, + 0xe3, 0x1a, 0x59, 0x8d, 0xff, 0x09, 0x31, 0x87, 0x93, 0xa9, 0x70, 0x3f, 0xcd, 0xdf, 0xff, 0x5d, + 0x3a, 0x47, 0x48, 0x96, 0x9a, 0xf1, 0x65, 0x28, 0x3b, 0x9e, 0x3b, 0x90, 0xea, 0x3b, 0xab, 0x35, + 0xa8, 0x04, 0x43, 0xcf, 0x97, 0x04, 0xd2, 0xe5, 0x4b, 0x97, 0x2e, 0xe9, 0xab, 0xeb, 0x0a, 0x2a, + 0x1a, 0x54, 0x79, 0x59, 0x69, 0x0e, 0x58, 0x35, 0xaa, 0xee, 0xcd, 0x47, 0x15, 0xc8, 0xf4, 0xb1, + 0x80, 0xf0, 0x32, 0x36, 0x2b, 0x22, 0xe9, 0xc4, 0x77, 0x54, 0x25, 0xb2, 0xc0, 0x48, 0x40, 0x7d, + 0x50, 0x71, 0x3c, 0xc4, 0x80, 0xa3, 0xa2, 0xb0, 0xde, 0xf7, 0x6d, 0x75, 0xcd, 0x57, 0x17, 0xf6, + 0x59, 0xd8, 0x8e, 0xa8, 0x76, 0x85, 0x89, 0xfb, 0xff, 0x30, 0x03, 0xcb, 0xe1, 0x15, 0x79, 0x7b, + 0x60, 0xbb, 0xaa, 0x96, 0x39, 0xfc, 0x7a, 0x6d, 0xdf, 0xb1, 0xc7, 0xe1, 0xd7, 0x20, 0x57, 0xa1, + 0x6a, 0xf9, 0xe6, 0xa0, 0xe5, 0x5a, 0x5b, 0xbe, 0x37, 0x56, 0xcd, 0x56, 0x27, 0x8d, 0xaa, 0x86, + 0xfa, 0xb9, 0x38, 0x46, 0xf2, 0xb1, 0xf0, 0x59, 0x9e, 0x8a, 0x06, 0x87, 0xa6, 0x6f, 0xbb, 0x83, + 0xf6, 0xb9, 0x14, 0x6e, 0xa0, 0x6a, 0xa9, 0xab, 0x50, 0x9a, 0x04, 0xa2, 0x6f, 0x06, 0x82, 0x15, + 0x11, 0x38, 0x9e, 0xd8, 0x8e, 0xb4, 0x5d, 0xf5, 0x11, 0xc6, 0xa8, 0x58, 0xba, 0x8c, 0x3d, 0x33, + 0xc7, 0x36, 0xab, 0xdc, 0xff, 0xb7, 0x19, 0xa8, 0x92, 0x5a, 0xc4, 0xb9, 0xf4, 0xd8, 0x8b, 0xab, + 0x42, 0x69, 0x37, 0xfa, 0x1a, 0x5f, 0x11, 0xb2, 0x07, 0xa7, 0x2a, 0x97, 0xae, 0xd5, 0x42, 0xdd, + 0x65, 0x55, 0x1f, 0xe6, 0xcb, 0xf3, 0xcf, 0xc1, 0x0d, 0x43, 0x8c, 0x3c, 0x29, 0x9e, 0x99, 0xb6, + 0x4c, 0xde, 0x5b, 0x2a, 0x60, 0x18, 0xa8, 0x1e, 0x85, 0x17, 0x95, 0x8a, 0x14, 0x06, 0xe2, 0x6b, + 0x43, 0x4c, 0x09, 0x7b, 0x4f, 0x18, 0x1d, 0x17, 0x96, 0x23, 0x92, 0x8f, 0x3c, 0xdb, 0xc5, 0xb7, + 0xd1, 0xfd, 0x6a, 0xc2, 0xd0, 0xa1, 0x0c, 0xa2, 0xe0, 0xfe, 0x3e, 0xdc, 0x9c, 0x7f, 0x94, 0xa0, + 0x6e, 0x5e, 0xd3, 0x27, 0xa0, 0xe9, 0x26, 0xcb, 0x33, 0xdf, 0x56, 0x57, 0x64, 0x2b, 0x50, 0x38, + 0x78, 0xee, 0x92, 0x5a, 0xac, 0x41, 0x6d, 0xdf, 0x4b, 0xf0, 0xb0, 0xdc, 0xfd, 0x7e, 0xea, 0xf4, + 0x27, 0x1e, 0x94, 0xb0, 0x11, 0x4b, 0x89, 0x5b, 0x5a, 0x19, 0x75, 0xae, 0x40, 0xff, 0xc5, 0x43, + 0x7d, 0x95, 0x42, 0x9f, 0xba, 0x58, 0xea, 0xab, 0x14, 0x51, 0x33, 0xf3, 0xea, 0xf3, 0x5c, 0x6e, + 0x5f, 0x38, 0xc2, 0x62, 0x85, 0xfb, 0xef, 0xc1, 0xaa, 0xee, 0x6a, 0x5f, 0x04, 0x41, 0x78, 0xcb, + 0xe9, 0xd0, 0xb7, 0xcf, 0xd4, 0x97, 0x2f, 0x96, 0xa1, 0x7c, 0x28, 0xfc, 0xc0, 0x73, 0xe9, 0xab, + 0x1f, 0x00, 0xc5, 0xee, 0xd0, 0xf4, 0xf1, 0x1d, 0xf7, 0xbf, 0xa6, 0x07, 0xe9, 0xc9, 0x79, 0xb8, + 0x35, 0xe0, 0xfa, 0xd1, 0x1f, 0xbd, 0x31, 0xa5, 0xa9, 0xc9, 0xa5, 0x2f, 0xcc, 0x11, 0xcb, 0xde, + 0xdf, 0x84, 0x0a, 0x5d, 0x92, 0x7a, 0x6c, 0xbb, 0x16, 0x76, 0x7c, 0x43, 0x17, 0xec, 0xd3, 0xd7, + 0x98, 0xce, 0x68, 0x38, 0xca, 0xea, 0xbb, 0xb5, 0x2c, 0xcb, 0x6f, 0x02, 0x6f, 0x4d, 0xa4, 0x37, + 0x32, 0xe9, 0x72, 0xaf, 0x73, 0xa1, 0xbe, 0x71, 0x9c, 0xbb, 0xff, 0x6d, 0xe0, 0x2a, 0x37, 0x67, + 0x89, 0x73, 0xdb, 0x1d, 0x44, 0x5f, 0x15, 0x00, 0xfa, 0x44, 0x88, 0x25, 0xce, 0xc3, 0x1b, 0x6e, + 0x21, 0x10, 0x7e, 0xa8, 0x64, 0xdb, 0x9b, 0xb8, 0xd8, 0xe8, 0xa7, 0x70, 0x5d, 0xa9, 0x18, 0xf6, + 0x82, 0x6e, 0x8e, 0x5e, 0x9a, 0x30, 0x50, 0x37, 0xdc, 0xe4, 0x24, 0x88, 0x68, 0x59, 0x06, 0x1b, + 0x16, 0x05, 0xdb, 0x31, 0x3e, 0x7b, 0xbf, 0x09, 0xd7, 0xe6, 0x64, 0x3c, 0xc8, 0xa8, 0xab, 0xb8, + 0x8f, 0x2d, 0xdd, 0xff, 0x10, 0xd6, 0x94, 0x19, 0xda, 0x57, 0x77, 0xfb, 0xc2, 0x61, 0x7b, 0xd6, + 0xd9, 0xee, 0xa8, 0x91, 0xde, 0x6c, 0xef, 0xee, 0x3e, 0xd9, 0x6d, 0x19, 0x2c, 0x43, 0xfa, 0x70, + 0xd0, 0x3b, 0xda, 0x3c, 0xd8, 0xdf, 0x6f, 0x6f, 0xf6, 0xda, 0x5b, 0x2c, 0xbb, 0x71, 0xff, 0xdf, + 0xff, 0xfc, 0x4e, 0xe6, 0x67, 0x3f, 0xbf, 0x93, 0xf9, 0x6f, 0x3f, 0xbf, 0x93, 0xf9, 0xf1, 0xa7, + 0x77, 0x96, 0x7e, 0xf6, 0xe9, 0x9d, 0xa5, 0xff, 0xf4, 0xe9, 0x9d, 0xa5, 0x4f, 0xd8, 0xf4, 0x3f, + 0xe2, 0x39, 0x2e, 0x52, 0x50, 0xf1, 0xd6, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xc8, 0xe7, 0x97, + 0xc4, 0xa3, 0x67, 0x00, 0x00, } func (m *SmartBlockSnapshotBase) Marshal() (dAtA []byte, err error) { @@ -13703,13 +13694,6 @@ func (m *ObjectType) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if m.HeaderRelationsLayout != 0 { - i = encodeVarintModels(dAtA, i, uint64(m.HeaderRelationsLayout)) - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0x90 - } if len(m.PluralName) > 0 { i -= len(m.PluralName) copy(dAtA[i:], m.PluralName) @@ -18212,9 +18196,6 @@ func (m *ObjectType) Size() (n int) { if l > 0 { n += 2 + l + sovModels(uint64(l)) } - if m.HeaderRelationsLayout != 0 { - n += 2 + sovModels(uint64(m.HeaderRelationsLayout)) - } return n } @@ -28675,25 +28656,6 @@ func (m *ObjectType) Unmarshal(dAtA []byte) error { } m.PluralName = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 18: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field HeaderRelationsLayout", wireType) - } - m.HeaderRelationsLayout = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowModels - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.HeaderRelationsLayout |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } default: iNdEx = preIndex skippy, err := skipModels(dAtA[iNdEx:]) diff --git a/pkg/lib/pb/model/protos/models.proto b/pkg/lib/pb/model/protos/models.proto index 7bf79198c..92874651f 100644 --- a/pkg/lib/pb/model/protos/models.proto +++ b/pkg/lib/pb/model/protos/models.proto @@ -774,7 +774,6 @@ message ObjectType { int64 iconColor = 15; // color of object type icon string iconName = 16; // name of object type icon string pluralName = 17; // name of objectType in plural form (can be localized for bundled types) - int64 headerRelationsLayout = 18; // header relations layout type. line = 0, column = 1 enum Layout { basic = 0; diff --git a/space/internal/components/migration/systemobjectreviser/systemobjectreviser.go b/space/internal/components/migration/systemobjectreviser/systemobjectreviser.go index 0950f9100..fff61b49e 100644 --- a/space/internal/components/migration/systemobjectreviser/systemobjectreviser.go +++ b/space/internal/components/migration/systemobjectreviser/systemobjectreviser.go @@ -39,7 +39,6 @@ var ( bundle.RelationKeyIconName, bundle.RelationKeyPluralName, bundle.RelationKeyRecommendedLayout, - bundle.RelationKeyHeaderRelationsLayout, } customObjectFilterKeys = []domain.RelationKey{ From 0e07eff24e46681e13a2c51b15100e8036d9637d Mon Sep 17 00:00:00 2001 From: Mikhail Rakhmanov Date: Mon, 19 May 2025 18:49:27 +0200 Subject: [PATCH 111/164] GO-5612 Log errors --- .../components/spaceloader/loadingspace.go | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/space/internal/components/spaceloader/loadingspace.go b/space/internal/components/spaceloader/loadingspace.go index 3152a607b..b3fec787e 100644 --- a/space/internal/components/spaceloader/loadingspace.go +++ b/space/internal/components/spaceloader/loadingspace.go @@ -101,14 +101,33 @@ func (ls *loadingSpace) loadRetry(ctx context.Context) { } } +func (ls *loadingSpace) logErrors(ctx context.Context, err error, mandatoryObjects bool, notRetryable bool) { + log := log.With(zap.String("spaceId", ls.ID), zap.Error(err), zap.Bool("notRetryable", notRetryable)) + if mandatoryObjects { + log.WarnCtx(ctx, "space load: mandatory objects error") + if errors.Is(err, context.Canceled) { + log.WarnCtx(ctx, "space load: error: context bug") + } + } else { + log.WarnCtx(ctx, "space load: build space error") + } +} + +func (ls *loadingSpace) isNotRetryable(err error) bool { + return errors.Is(err, objecttree.ErrHasInvalidChanges) || ls.disableRemoteLoad +} + func (ls *loadingSpace) load(ctx context.Context) (ok bool, err error) { sp, err := ls.spaceServiceProvider.open(ctx) if err != nil { - return ls.disableRemoteLoad, err + notRetryable := ls.isNotRetryable(err) + ls.logErrors(ctx, err, false, notRetryable) + return notRetryable, err } err = sp.WaitMandatoryObjects(ctx) if err != nil { - notRetryable := errors.Is(err, objecttree.ErrHasInvalidChanges) || ls.disableRemoteLoad + notRetryable := ls.isNotRetryable(err) + ls.logErrors(ctx, err, true, notRetryable) return notRetryable, err } if ls.latestAclHeadId != "" && !ls.disableRemoteLoad { From b31850c98211ea4455dc79cf419b34618dc3ee46 Mon Sep 17 00:00:00 2001 From: Sergey Date: Mon, 19 May 2025 19:47:29 +0200 Subject: [PATCH 112/164] GO-5585: Refactor and refine logic --- .../block/object/objectcreator/object_type.go | 13 ++++--- core/block/object/objectcreator/relation.go | 9 ++--- .../object/objectcreator/relation_option.go | 23 ++++-------- core/block/object/objectcreator/util.go | 37 +++++++++++++++++-- 4 files changed, 52 insertions(+), 30 deletions(-) diff --git a/core/block/object/objectcreator/object_type.go b/core/block/object/objectcreator/object_type.go index e1139d5c4..968fe2df5 100644 --- a/core/block/object/objectcreator/object_type.go +++ b/core/block/object/objectcreator/object_type.go @@ -3,7 +3,6 @@ package objectcreator import ( "context" "fmt" - "strings" "time" "github.com/anyproto/anytype-heart/core/block/editor/state" @@ -21,12 +20,18 @@ func (s *service) createObjectType(ctx context.Context, space clientspace.Space, return "", nil, fmt.Errorf("create object type: no data") } - uniqueKey, err := getUniqueKeyOrGenerate(coresb.SmartBlockTypeObjectType, details) + uniqueKey, wasGenerated, err := getUniqueKeyOrGenerate(coresb.SmartBlockTypeObjectType, details) if err != nil { return "", nil, fmt.Errorf("getUniqueKeyOrGenerate: %w", err) } object := details.Copy() + var objectKey string + if !wasGenerated { + objectKey = uniqueKey.InternalKey() + } + injectApiObjectKey(object, objectKey) + if !object.Has(bundle.RelationKeyRecommendedLayout) { object.SetInt64(bundle.RelationKeyRecommendedLayout, int64(model.ObjectType_basic)) } @@ -48,10 +53,6 @@ func (s *service) createObjectType(ctx context.Context, space clientspace.Space, object.SetString(bundle.RelationKeyId, id) object.SetInt64(bundle.RelationKeyLayout, int64(model.ObjectType_objectType)) - if strings.TrimSpace(object.GetString(bundle.RelationKeyApiObjectKey)) == "" { - object.SetString(bundle.RelationKeyApiObjectKey, transliterate(object.GetString(bundle.RelationKeyName))) - } - createState := state.NewDocWithUniqueKey("", nil, uniqueKey).(*state.State) createState.SetDetails(object) setOriginalCreatedTimestamp(createState, details) diff --git a/core/block/object/objectcreator/relation.go b/core/block/object/objectcreator/relation.go index 69e25b547..cdeb8bf15 100644 --- a/core/block/object/objectcreator/relation.go +++ b/core/block/object/objectcreator/relation.go @@ -3,7 +3,6 @@ package objectcreator import ( "context" "fmt" - "strings" "time" "github.com/globalsign/mgo/bson" @@ -39,7 +38,11 @@ func (s *service) createRelation(ctx context.Context, space clientspace.Space, d } object = details.Copy() + key := domain.RelationKey(details.GetString(bundle.RelationKeyRelationKey)) + + injectApiObjectKey(object, key.String()) + if key == "" { key = domain.RelationKey(bson.NewObjectId().Hex()) } else if bundle.HasRelation(key) { @@ -53,10 +56,6 @@ func (s *service) createRelation(ctx context.Context, space clientspace.Space, d object.SetString(bundle.RelationKeyId, id) object.SetString(bundle.RelationKeyRelationKey, string(key)) - if strings.TrimSpace(object.GetString(bundle.RelationKeyApiObjectKey)) == "" { - object.SetString(bundle.RelationKeyApiObjectKey, transliterate(object.GetString(bundle.RelationKeyName))) - } - if details.GetInt64(bundle.RelationKeyRelationFormat) == int64(model.RelationFormat_status) { object.SetInt64(bundle.RelationKeyRelationMaxCount, 1) } diff --git a/core/block/object/objectcreator/relation_option.go b/core/block/object/objectcreator/relation_option.go index ae675a104..80c290bae 100644 --- a/core/block/object/objectcreator/relation_option.go +++ b/core/block/object/objectcreator/relation_option.go @@ -6,8 +6,6 @@ import ( "strings" "time" - "github.com/globalsign/mgo/bson" - "github.com/anyproto/anytype-heart/core/block/editor/state" "github.com/anyproto/anytype-heart/core/domain" "github.com/anyproto/anytype-heart/pkg/lib/bundle" @@ -30,7 +28,7 @@ func (s *service) createRelationOption(ctx context.Context, space clientspace.Sp if !details.Has(bundle.RelationKeyCreatedDate) { details.SetInt64(bundle.RelationKeyCreatedDate, time.Now().Unix()) } - uniqueKey, err := getUniqueKeyOrGenerate(coresb.SmartBlockTypeRelationOption, details) + uniqueKey, wasGenerated, err := getUniqueKeyOrGenerate(coresb.SmartBlockTypeRelationOption, details) if err != nil { return "", nil, fmt.Errorf("getUniqueKeyOrGenerate: %w", err) } @@ -39,6 +37,12 @@ func (s *service) createRelationOption(ctx context.Context, space clientspace.Sp object.SetString(bundle.RelationKeyUniqueKey, uniqueKey.Marshal()) object.SetInt64(bundle.RelationKeyLayout, int64(model.ObjectType_relationOption)) + var objectKey string + if !wasGenerated { + objectKey = uniqueKey.InternalKey() + } + injectApiObjectKey(object, objectKey) + if strings.TrimSpace(object.GetString(bundle.RelationKeyApiObjectKey)) == "" { object.SetString(bundle.RelationKeyApiObjectKey, transliterate(object.GetString(bundle.RelationKeyName))) } @@ -48,16 +52,3 @@ func (s *service) createRelationOption(ctx context.Context, space clientspace.Sp setOriginalCreatedTimestamp(createState, details) return s.CreateSmartBlockFromStateInSpace(ctx, space, []domain.TypeKey{bundle.TypeKeyRelationOption}, createState) } - -func getUniqueKeyOrGenerate(sbType coresb.SmartBlockType, details *domain.Details) (domain.UniqueKey, error) { - uniqueKey := details.GetString(bundle.RelationKeyUniqueKey) - if uniqueKey == "" { - newUniqueKey, err := domain.NewUniqueKey(sbType, bson.NewObjectId().Hex()) - if err != nil { - return nil, err - } - details.SetString(bundle.RelationKeyUniqueKey, newUniqueKey.Marshal()) - return newUniqueKey, err - } - return domain.UnmarshalUniqueKey(uniqueKey) -} diff --git a/core/block/object/objectcreator/util.go b/core/block/object/objectcreator/util.go index e73bea0cf..f4ca5ac21 100644 --- a/core/block/object/objectcreator/util.go +++ b/core/block/object/objectcreator/util.go @@ -3,11 +3,42 @@ package objectcreator import ( "strings" + "github.com/anyproto/anytype-heart/core/domain" + "github.com/anyproto/anytype-heart/pkg/lib/bundle" + coresb "github.com/anyproto/anytype-heart/pkg/lib/core/smartblock" + "github.com/globalsign/mgo/bson" "github.com/gosimple/unidecode" "github.com/iancoleman/strcase" ) -func transliterate(in string) string { - out := unidecode.Unidecode(strings.TrimSpace(in)) - return strcase.ToSnake(out) +// injectApiObjectKey sets a value for ApiObjectKey relation in priority: +// - User-provided ApiObjectKey +// - Key from relationKey/uniqueKey +// - Transliterated Name realtion +func injectApiObjectKey(object *domain.Details, key string) { + if strings.TrimSpace(object.GetString(bundle.RelationKeyApiObjectKey)) == "" { + if key == "" { + key = transliterate(object.GetString(bundle.RelationKeyName)) + } + key = strcase.ToSnake(key) + object.SetString(bundle.RelationKeyApiObjectKey, key) + } +} + +func transliterate(in string) string { + return unidecode.Unidecode(strings.TrimSpace(in)) +} + +func getUniqueKeyOrGenerate(sbType coresb.SmartBlockType, details *domain.Details) (uk domain.UniqueKey, wasGenerated bool, err error) { + uniqueKey := details.GetString(bundle.RelationKeyUniqueKey) + if uniqueKey == "" { + newUniqueKey, err := domain.NewUniqueKey(sbType, bson.NewObjectId().Hex()) + if err != nil { + return nil, false, err + } + details.SetString(bundle.RelationKeyUniqueKey, newUniqueKey.Marshal()) + return newUniqueKey, true, err + } + uk, err = domain.UnmarshalUniqueKey(uniqueKey) + return uk, false, err } From a3d3bfba69a55e5f85a09107a4a6c324b59b49a5 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Mon, 19 May 2025 21:18:15 +0200 Subject: [PATCH 113/164] GO-5589: Rename ApiId to ApiObjectKey --- core/api/model/property.go | 2 +- core/api/model/type.go | 2 +- core/api/service/list_test.go | 10 +++++----- core/api/service/object_test.go | 8 ++++---- core/api/service/property.go | 10 +++++----- core/api/service/search_test.go | 8 ++++---- core/api/service/type.go | 10 +++++----- core/api/service/type_test.go | 6 +++--- 8 files changed, 28 insertions(+), 28 deletions(-) diff --git a/core/api/model/property.go b/core/api/model/property.go index 07819218d..784fe876e 100644 --- a/core/api/model/property.go +++ b/core/api/model/property.go @@ -58,7 +58,7 @@ type Property struct { Key string `json:"key" example:"last_modified_date"` // The key of the property Name string `json:"name" example:"Last modified date"` // The name of the property Format PropertyFormat `json:"format" enums:"text,number,select,multi_select,date,files,checkbox,url,email,phone,objects"` // The format of the property - // Rk is internal-only to simplify FromPropertyApiKey lookup on entry, won't be serialized to property responses + // Rk is internal-only to simplify lookup on entry, won't be serialized to property responses RelationKey string `json:"-" swaggerignore:"true"` } diff --git a/core/api/model/type.go b/core/api/model/type.go index f36ff8b06..1a2bf2865 100644 --- a/core/api/model/type.go +++ b/core/api/model/type.go @@ -62,6 +62,6 @@ type Type struct { Archived bool `json:"archived" example:"false"` // Whether the type is archived Layout ObjectLayout `json:"layout" enums:"basic,profile,action,note,bookmark,set,set,collection,participant"` // The layout of the type Properties []Property `json:"properties"` // The properties linked to the type - // Uk is internal-only to simplify FromTypeApiKey lookup on entry, won't be serialized to type responses + // Uk is internal-only to simplify lookup on entry, won't be serialized to type responses UniqueKey string `json:"-" swaggerignore:"true"` } diff --git a/core/api/service/list_test.go b/core/api/service/list_test.go index 1b95b354b..89c522750 100644 --- a/core/api/service/list_test.go +++ b/core/api/service/list_test.go @@ -428,7 +428,7 @@ func TestListService_GetObjectsInList(t *testing.T) { Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyRelationKey.String(), - bundle.RelationKeyApiId.String(), + bundle.RelationKeyApiObjectKey.String(), bundle.RelationKeyName.String(), bundle.RelationKeyRelationFormat.String(), }, @@ -462,7 +462,7 @@ func TestListService_GetObjectsInList(t *testing.T) { Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyUniqueKey.String(), - bundle.RelationKeyApiId.String(), + bundle.RelationKeyApiObjectKey.String(), bundle.RelationKeyName.String(), bundle.RelationKeyPluralName.String(), bundle.RelationKeyIconEmoji.String(), @@ -675,7 +675,7 @@ func TestListService_GetObjectsInList(t *testing.T) { Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyRelationKey.String(), - bundle.RelationKeyApiId.String(), + bundle.RelationKeyApiObjectKey.String(), bundle.RelationKeyName.String(), bundle.RelationKeyRelationFormat.String(), }, @@ -709,7 +709,7 @@ func TestListService_GetObjectsInList(t *testing.T) { Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyUniqueKey.String(), - bundle.RelationKeyApiId.String(), + bundle.RelationKeyApiObjectKey.String(), bundle.RelationKeyName.String(), bundle.RelationKeyPluralName.String(), bundle.RelationKeyIconEmoji.String(), @@ -1132,7 +1132,7 @@ func TestListService_GetObjectsInList(t *testing.T) { Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyRelationKey.String(), - bundle.RelationKeyApiId.String(), + bundle.RelationKeyApiObjectKey.String(), bundle.RelationKeyName.String(), bundle.RelationKeyRelationFormat.String(), }, diff --git a/core/api/service/object_test.go b/core/api/service/object_test.go index 267699b3c..96a0abcad 100644 --- a/core/api/service/object_test.go +++ b/core/api/service/object_test.go @@ -89,7 +89,7 @@ func TestObjectService_ListObjects(t *testing.T) { Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyRelationKey.String(), - bundle.RelationKeyApiId.String(), + bundle.RelationKeyApiObjectKey.String(), bundle.RelationKeyName.String(), bundle.RelationKeyRelationFormat.String(), }, @@ -155,7 +155,7 @@ func TestObjectService_ListObjects(t *testing.T) { Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyUniqueKey.String(), - bundle.RelationKeyApiId.String(), + bundle.RelationKeyApiObjectKey.String(), bundle.RelationKeyName.String(), bundle.RelationKeyPluralName.String(), bundle.RelationKeyIconEmoji.String(), @@ -383,7 +383,7 @@ func TestObjectService_GetObject(t *testing.T) { Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyRelationKey.String(), - bundle.RelationKeyApiId.String(), + bundle.RelationKeyApiObjectKey.String(), bundle.RelationKeyName.String(), bundle.RelationKeyRelationFormat.String(), }, @@ -449,7 +449,7 @@ func TestObjectService_GetObject(t *testing.T) { Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyUniqueKey.String(), - bundle.RelationKeyApiId.String(), + bundle.RelationKeyApiObjectKey.String(), bundle.RelationKeyName.String(), bundle.RelationKeyPluralName.String(), bundle.RelationKeyIconEmoji.String(), diff --git a/core/api/service/property.go b/core/api/service/property.go index 26f553d25..bd20cd621 100644 --- a/core/api/service/property.go +++ b/core/api/service/property.go @@ -129,7 +129,7 @@ func (s *Service) ListProperties(ctx context.Context, spaceId string, offset int Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyRelationKey.String(), - bundle.RelationKeyApiId.String(), + bundle.RelationKeyApiObjectKey.String(), bundle.RelationKeyName.String(), bundle.RelationKeyRelationFormat.String(), }, @@ -199,7 +199,7 @@ func (s *Service) CreateProperty(ctx context.Context, spaceId string, request ap } if request.Key != "" { - details.Fields[bundle.RelationKeyApiId.String()] = pbtypes.String(s.sanitizedString(request.Key)) + details.Fields[bundle.RelationKeyApiObjectKey.String()] = pbtypes.String(s.sanitizedString(request.Key)) } resp := s.mw.ObjectCreateRelation(ctx, &pb.RpcObjectCreateRelationRequest{ @@ -235,7 +235,7 @@ func (s *Service) UpdateProperty(ctx context.Context, spaceId string, propertyId } if request.Key != nil { detailsToUpdate = append(detailsToUpdate, &model.Detail{ - Key: bundle.RelationKeyApiId.String(), + Key: bundle.RelationKeyApiObjectKey.String(), Value: pbtypes.String(s.sanitizedString(*request.Key)), }) } @@ -549,7 +549,7 @@ func (s *Service) getPropertyMapFromStore(ctx context.Context, spaceId string, k Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyRelationKey.String(), - bundle.RelationKeyApiId.String(), + bundle.RelationKeyApiObjectKey.String(), bundle.RelationKeyName.String(), bundle.RelationKeyRelationFormat.String(), }, @@ -580,7 +580,7 @@ func (s *Service) getPropertyFromStruct(details *types.Struct) (string, string, key := util.ToPropertyApiKey(rk) // apiId as key takes precedence over relation key - if apiIDField, exists := details.Fields[bundle.RelationKeyApiId.String()]; exists { + if apiIDField, exists := details.Fields[bundle.RelationKeyApiObjectKey.String()]; exists { if apiId := apiIDField.GetStringValue(); apiId != "" { key = apiId } diff --git a/core/api/service/search_test.go b/core/api/service/search_test.go index 587693235..28d2a7941 100644 --- a/core/api/service/search_test.go +++ b/core/api/service/search_test.go @@ -147,7 +147,7 @@ func TestSearchService_GlobalSearch(t *testing.T) { Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyRelationKey.String(), - bundle.RelationKeyApiId.String(), + bundle.RelationKeyApiObjectKey.String(), bundle.RelationKeyName.String(), bundle.RelationKeyRelationFormat.String(), }, @@ -209,7 +209,7 @@ func TestSearchService_GlobalSearch(t *testing.T) { Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyUniqueKey.String(), - bundle.RelationKeyApiId.String(), + bundle.RelationKeyApiObjectKey.String(), bundle.RelationKeyName.String(), bundle.RelationKeyPluralName.String(), bundle.RelationKeyIconEmoji.String(), @@ -458,7 +458,7 @@ func TestSearchService_Search(t *testing.T) { Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyRelationKey.String(), - bundle.RelationKeyApiId.String(), + bundle.RelationKeyApiObjectKey.String(), bundle.RelationKeyName.String(), bundle.RelationKeyRelationFormat.String(), }, @@ -520,7 +520,7 @@ func TestSearchService_Search(t *testing.T) { Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyUniqueKey.String(), - bundle.RelationKeyApiId.String(), + bundle.RelationKeyApiObjectKey.String(), bundle.RelationKeyName.String(), bundle.RelationKeyPluralName.String(), bundle.RelationKeyIconEmoji.String(), diff --git a/core/api/service/type.go b/core/api/service/type.go index 9be96bf41..cf986d264 100644 --- a/core/api/service/type.go +++ b/core/api/service/type.go @@ -53,7 +53,7 @@ func (s *Service) ListTypes(ctx context.Context, spaceId string, offset int, lim Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyUniqueKey.String(), - bundle.RelationKeyApiId.String(), + bundle.RelationKeyApiObjectKey.String(), bundle.RelationKeyName.String(), bundle.RelationKeyIconEmoji.String(), bundle.RelationKeyIconName.String(), @@ -213,7 +213,7 @@ func (s *Service) getTypeMapFromStore(ctx context.Context, spaceId string, prope Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyUniqueKey.String(), - bundle.RelationKeyApiId.String(), + bundle.RelationKeyApiObjectKey.String(), bundle.RelationKeyName.String(), bundle.RelationKeyPluralName.String(), bundle.RelationKeyIconEmoji.String(), @@ -250,7 +250,7 @@ func (s *Service) getTypeFromStruct(details *types.Struct, propertyMap map[strin key := util.ToTypeApiKey(uk) // apiId as key takes precedence over unique key - if apiIDField, exists := details.Fields[bundle.RelationKeyApiId.String()]; exists { + if apiIDField, exists := details.Fields[bundle.RelationKeyApiObjectKey.String()]; exists { if apiId := apiIDField.GetStringValue(); apiId != "" { key = apiId } @@ -288,7 +288,7 @@ func (s *Service) buildTypeDetails(ctx context.Context, spaceId string, request } if request.Key != "" { - fields[bundle.RelationKeyApiId.String()] = pbtypes.String(s.sanitizedString(request.Key)) + fields[bundle.RelationKeyApiObjectKey.String()] = pbtypes.String(s.sanitizedString(request.Key)) } iconFields, err := s.processIconFields(spaceId, request.Icon) @@ -352,7 +352,7 @@ func (s *Service) buildUpdatedTypeDetails(ctx context.Context, spaceId string, t fields[bundle.RelationKeyRecommendedLayout.String()] = pbtypes.Int64(int64(s.typeLayoutToObjectTypeLayout(*request.Layout))) } if request.Key != nil { - fields[bundle.RelationKeyApiId.String()] = pbtypes.String(s.sanitizedString(*request.Key)) + fields[bundle.RelationKeyApiObjectKey.String()] = pbtypes.String(s.sanitizedString(*request.Key)) } if request.Icon != nil { diff --git a/core/api/service/type_test.go b/core/api/service/type_test.go index 4334a0849..5f2ea4e55 100644 --- a/core/api/service/type_test.go +++ b/core/api/service/type_test.go @@ -54,7 +54,7 @@ func TestObjectService_ListTypes(t *testing.T) { Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyRelationKey.String(), - bundle.RelationKeyApiId.String(), + bundle.RelationKeyApiObjectKey.String(), bundle.RelationKeyName.String(), bundle.RelationKeyRelationFormat.String(), }, @@ -111,7 +111,7 @@ func TestObjectService_ListTypes(t *testing.T) { Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyRelationKey.String(), - bundle.RelationKeyApiId.String(), + bundle.RelationKeyApiObjectKey.String(), bundle.RelationKeyName.String(), bundle.RelationKeyRelationFormat.String(), }, @@ -177,7 +177,7 @@ func TestObjectService_GetType(t *testing.T) { Keys: []string{ bundle.RelationKeyId.String(), bundle.RelationKeyRelationKey.String(), - bundle.RelationKeyApiId.String(), + bundle.RelationKeyApiObjectKey.String(), bundle.RelationKeyName.String(), bundle.RelationKeyRelationFormat.String(), }, From aec13258c640456c705b79648cb0e20d02dda893 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Mon, 19 May 2025 23:18:48 +0200 Subject: [PATCH 114/164] GO-5589: Fix err --- core/api/service/property.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/api/service/property.go b/core/api/service/property.go index bd20cd621..75b544134 100644 --- a/core/api/service/property.go +++ b/core/api/service/property.go @@ -222,7 +222,7 @@ func (s *Service) UpdateProperty(ctx context.Context, spaceId string, propertyId } rel, err := bundle.PickRelation(domain.RelationKey(prop.RelationKey)) - if err != nil && rel.ReadOnly { + if err == nil && rel.ReadOnly { return apimodel.Property{}, ErrPropertyCannotBeUpdated } From dcb7b3ba9791dc9890c5d3a24d0b879a43b53e6d Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Mon, 19 May 2025 23:58:35 +0200 Subject: [PATCH 115/164] GO-5589: Fix lint --- core/api/service/icon.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/api/service/icon.go b/core/api/service/icon.go index 054f90888..9364215c2 100644 --- a/core/api/service/icon.go +++ b/core/api/service/icon.go @@ -24,20 +24,20 @@ func IsEmoji(s string) bool { // GetIcon returns the appropriate Icon implementation. func GetIcon(gatewayUrl string, iconEmoji string, iconImage string, iconName string, iconOption float64) apimodel.Icon { if iconName != "" { - return apimodel.Icon{apimodel.NamedIcon{ + return apimodel.Icon{WrappedIcon: apimodel.NamedIcon{ Format: apimodel.IconFormatIcon, Name: iconName, Color: apimodel.ColorPtr(apimodel.IconOptionToColor[iconOption]), }} } if iconEmoji != "" { - return apimodel.Icon{apimodel.EmojiIcon{ + return apimodel.Icon{WrappedIcon: apimodel.EmojiIcon{ Format: apimodel.IconFormatEmoji, Emoji: iconEmoji, }} } if iconImage != "" { - return apimodel.Icon{apimodel.FileIcon{ + return apimodel.Icon{WrappedIcon: apimodel.FileIcon{ Format: apimodel.IconFormatFile, File: fmt.Sprintf("%s/image/%s", gatewayUrl, iconImage), }} From b37e212f8b06b17f1d1a538a3ea11ed1e12baaa8 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Tue, 20 May 2025 00:37:59 +0200 Subject: [PATCH 116/164] GO-5589: Allow built-in svg as type icons --- core/api/model/icon.go | 830 ++++++++++++++++++++++++++++++++++++- core/api/service/icon.go | 4 +- core/api/service/object.go | 13 +- core/api/service/type.go | 4 +- 4 files changed, 836 insertions(+), 15 deletions(-) diff --git a/core/api/model/icon.go b/core/api/model/icon.go index b0f296c40..c35dd98d5 100644 --- a/core/api/model/icon.go +++ b/core/api/model/icon.go @@ -58,6 +58,813 @@ func (c *Color) UnmarshalJSON(data []byte) error { } } +type IconName string + +const ( + IconNameAccessibility IconName = "accessibility" + IconNameAddCircle IconName = "add-circle" + IconNameAirplane IconName = "airplane" + IconNameAlarm IconName = "alarm" + IconNameAlbums IconName = "albums" + IconNameAlertCircle IconName = "alert-circle" + IconNameAmericanFootball IconName = "american-football" + IconNameAnalytics IconName = "analytics" + IconNameAperture IconName = "aperture" + IconNameApps IconName = "apps" + IconNameArchive IconName = "archive" + IconNameArrowBackCircle IconName = "arrow-back-circle" + IconNameArrowDownCircle IconName = "arrow-down-circle" + IconNameArrowForwardCircle IconName = "arrow-forward-circle" + IconNameArrowRedoCircle IconName = "arrow-redo-circle" + IconNameArrowRedo IconName = "arrow-redo" + IconNameArrowUndoCircle IconName = "arrow-undo-circle" + IconNameArrowUndo IconName = "arrow-undo" + IconNameArrowUpCircle IconName = "arrow-up-circle" + IconNameAtCircle IconName = "at-circle" + IconNameAttach IconName = "attach" + IconNameBackspace IconName = "backspace" + IconNameBagAdd IconName = "bag-add" + IconNameBagCheck IconName = "bag-check" + IconNameBagHandle IconName = "bag-handle" + IconNameBagRemove IconName = "bag-remove" + IconNameBag IconName = "bag" + IconNameBalloon IconName = "balloon" + IconNameBan IconName = "ban" + IconNameBandage IconName = "bandage" + IconNameBarChart IconName = "bar-chart" + IconNameBarbell IconName = "barbell" + IconNameBarcode IconName = "barcode" + IconNameBaseball IconName = "baseball" + IconNameBasket IconName = "basket" + IconNameBasketball IconName = "basketball" + IconNameBatteryCharging IconName = "battery-charging" + IconNameBatteryDead IconName = "battery-dead" + IconNameBatteryFull IconName = "battery-full" + IconNameBatteryHalf IconName = "battery-half" + IconNameBeaker IconName = "beaker" + IconNameBed IconName = "bed" + IconNameBeer IconName = "beer" + IconNameBicycle IconName = "bicycle" + IconNameBinoculars IconName = "binoculars" + IconNameBluetooth IconName = "bluetooth" + IconNameBoat IconName = "boat" + IconNameBody IconName = "body" + IconNameBonfire IconName = "bonfire" + IconNameBook IconName = "book" + IconNameBookmark IconName = "bookmark" + IconNameBookmarks IconName = "bookmarks" + IconNameBowlingBall IconName = "bowling-ball" + IconNameBriefcase IconName = "briefcase" + IconNameBrowsers IconName = "browsers" + IconNameBrush IconName = "brush" + IconNameBug IconName = "bug" + IconNameBuild IconName = "build" + IconNameBulb IconName = "bulb" + IconNameBus IconName = "bus" + IconNameBusiness IconName = "business" + IconNameCafe IconName = "cafe" + IconNameCalculator IconName = "calculator" + IconNameCalendarClear IconName = "calendar-clear" + IconNameCalendarNumber IconName = "calendar-number" + IconNameCalendar IconName = "calendar" + IconNameCall IconName = "call" + IconNameCameraReverse IconName = "camera-reverse" + IconNameCamera IconName = "camera" + IconNameCarSport IconName = "car-sport" + IconNameCar IconName = "car" + IconNameCard IconName = "card" + IconNameCaretBackCircle IconName = "caret-back-circle" + IconNameCaretBack IconName = "caret-back" + IconNameCaretDownCircle IconName = "caret-down-circle" + IconNameCaretDown IconName = "caret-down" + IconNameCaretForwardCircle IconName = "caret-forward-circle" + IconNameCaretForward IconName = "caret-forward" + IconNameCaretUpCircle IconName = "caret-up-circle" + IconNameCaretUp IconName = "caret-up" + IconNameCart IconName = "cart" + IconNameCash IconName = "cash" + IconNameCellular IconName = "cellular" + IconNameChatboxEllipses IconName = "chatbox-ellipses" + IconNameChatbox IconName = "chatbox" + IconNameChatbubbleEllipses IconName = "chatbubble-ellipses" + IconNameChatbubble IconName = "chatbubble" + IconNameChatbubbles IconName = "chatbubbles" + IconNameCheckbox IconName = "checkbox" + IconNameCheckmarkCircle IconName = "checkmark-circle" + IconNameCheckmarkDoneCircle IconName = "checkmark-done-circle" + IconNameChevronBackCircle IconName = "chevron-back-circle" + IconNameChevronDownCircle IconName = "chevron-down-circle" + IconNameChevronForwardCircle IconName = "chevron-forward-circle" + IconNameChevronUpCircle IconName = "chevron-up-circle" + IconNameClipboard IconName = "clipboard" + IconNameCloseCircle IconName = "close-circle" + IconNameCloudCircle IconName = "cloud-circle" + IconNameCloudDone IconName = "cloud-done" + IconNameCloudDownload IconName = "cloud-download" + IconNameCloudOffline IconName = "cloud-offline" + IconNameCloudUpload IconName = "cloud-upload" + IconNameCloud IconName = "cloud" + IconNameCloudyNight IconName = "cloudy-night" + IconNameCloudy IconName = "cloudy" + IconNameCodeSlash IconName = "code-slash" + IconNameCode IconName = "code" + IconNameCog IconName = "cog" + IconNameColorFill IconName = "color-fill" + IconNameColorFilter IconName = "color-filter" + IconNameColorPalette IconName = "color-palette" + IconNameColorWand IconName = "color-wand" + IconNameCompass IconName = "compass" + IconNameConstruct IconName = "construct" + IconNameContact IconName = "contact" + IconNameContract IconName = "contract" + IconNameContrast IconName = "contrast" + IconNameCopy IconName = "copy" + IconNameCreate IconName = "create" + IconNameCrop IconName = "crop" + IconNameCube IconName = "cube" + IconNameCut IconName = "cut" + IconNameDesktop IconName = "desktop" + IconNameDiamond IconName = "diamond" + IconNameDice IconName = "dice" + IconNameDisc IconName = "disc" + IconNameDocumentAttach IconName = "document-attach" + IconNameDocumentLock IconName = "document-lock" + IconNameDocumentText IconName = "document-text" + IconNameDocument IconName = "document" + IconNameDocuments IconName = "documents" + IconNameDownload IconName = "download" + IconNameDuplicate IconName = "duplicate" + IconNameEar IconName = "ear" + IconNameEarth IconName = "earth" + IconNameEasel IconName = "easel" + IconNameEgg IconName = "egg" + IconNameEllipse IconName = "ellipse" + IconNameEllipsisHorizontalCircle IconName = "ellipsis-horizontal-circle" + IconNameEllipsisVerticalCircle IconName = "ellipsis-vertical-circle" + IconNameEnter IconName = "enter" + IconNameExit IconName = "exit" + IconNameExpand IconName = "expand" + IconNameExtensionPuzzle IconName = "extension-puzzle" + IconNameEyeOff IconName = "eye-off" + IconNameEye IconName = "eye" + IconNameEyedrop IconName = "eyedrop" + IconNameFastFood IconName = "fast-food" + IconNameFemale IconName = "female" + IconNameFileTrayFull IconName = "file-tray-full" + IconNameFileTrayStacked IconName = "file-tray-stacked" + IconNameFileTray IconName = "file-tray" + IconNameFilm IconName = "film" + IconNameFilterCircle IconName = "filter-circle" + IconNameFingerPrint IconName = "finger-print" + IconNameFish IconName = "fish" + IconNameFitness IconName = "fitness" + IconNameFlag IconName = "flag" + IconNameFlame IconName = "flame" + IconNameFlashOff IconName = "flash-off" + IconNameFlash IconName = "flash" + IconNameFlashlight IconName = "flashlight" + IconNameFlask IconName = "flask" + IconNameFlower IconName = "flower" + IconNameFolderOpen IconName = "folder-open" + IconNameFolder IconName = "folder" + IconNameFootball IconName = "football" + IconNameFootsteps IconName = "footsteps" + IconNameFunnel IconName = "funnel" + IconNameGameController IconName = "game-controller" + IconNameGift IconName = "gift" + IconNameGitBranch IconName = "git-branch" + IconNameGitCommit IconName = "git-commit" + IconNameGitCompare IconName = "git-compare" + IconNameGitMerge IconName = "git-merge" + IconNameGitNetwork IconName = "git-network" + IconNameGitPullRequest IconName = "git-pull-request" + IconNameGlasses IconName = "glasses" + IconNameGlobe IconName = "globe" + IconNameGolf IconName = "golf" + IconNameGrid IconName = "grid" + IconNameHammer IconName = "hammer" + IconNameHandLeft IconName = "hand-left" + IconNameHandRight IconName = "hand-right" + IconNameHappy IconName = "happy" + IconNameHardwareChip IconName = "hardware-chip" + IconNameHeadset IconName = "headset" + IconNameHeartCircle IconName = "heart-circle" + IconNameHeartDislikeCircle IconName = "heart-dislike-circle" + IconNameHeartDislike IconName = "heart-dislike" + IconNameHeartHalf IconName = "heart-half" + IconNameHeart IconName = "heart" + IconNameHelpBuoy IconName = "help-buoy" + IconNameHelpCircle IconName = "help-circle" + IconNameHome IconName = "home" + IconNameHourglass IconName = "hourglass" + IconNameIceCream IconName = "ice-cream" + IconNameIdCard IconName = "id-card" + IconNameImage IconName = "image" + IconNameImages IconName = "images" + IconNameInfinite IconName = "infinite" + IconNameInformationCircle IconName = "information-circle" + IconNameInvertMode IconName = "invert-mode" + IconNameJournal IconName = "journal" + IconNameKey IconName = "key" + IconNameKeypad IconName = "keypad" + IconNameLanguage IconName = "language" + IconNameLaptop IconName = "laptop" + IconNameLayers IconName = "layers" + IconNameLeaf IconName = "leaf" + IconNameLibrary IconName = "library" + IconNameLink IconName = "link" + IconNameListCircle IconName = "list-circle" + IconNameList IconName = "list" + IconNameLocate IconName = "locate" + IconNameLocation IconName = "location" + IconNameLockClosed IconName = "lock-closed" + IconNameLockOpen IconName = "lock-open" + IconNameLogIn IconName = "log-in" + IconNameLogOut IconName = "log-out" + IconNameLogoAlipay IconName = "logo-alipay" + IconNameLogoAmazon IconName = "logo-amazon" + IconNameLogoAmplify IconName = "logo-amplify" + IconNameLogoAndroid IconName = "logo-android" + IconNameMagnet IconName = "magnet" + IconNameMailOpen IconName = "mail-open" + IconNameMailUnread IconName = "mail-unread" + IconNameMail IconName = "mail" + IconNameMaleFemale IconName = "male-female" + IconNameMale IconName = "male" + IconNameMan IconName = "man" + IconNameMap IconName = "map" + IconNameMedal IconName = "medal" + IconNameMedical IconName = "medical" + IconNameMedkit IconName = "medkit" + IconNameMegaphone IconName = "megaphone" + IconNameMenu IconName = "menu" + IconNameMicCircle IconName = "mic-circle" + IconNameMicOffCircle IconName = "mic-off-circle" + IconNameMicOff IconName = "mic-off" + IconNameMic IconName = "mic" + IconNameMoon IconName = "moon" + IconNameMove IconName = "move" + IconNameMusicalNote IconName = "musical-note" + IconNameMusicalNotes IconName = "musical-notes" + IconNameNavigateCircle IconName = "navigate-circle" + IconNameNavigate IconName = "navigate" + IconNameNewspaper IconName = "newspaper" + IconNameNotificationsCircle IconName = "notifications-circle" + IconNameNotificationsOffCircle IconName = "notifications-off-circle" + IconNameNotificationsOff IconName = "notifications-off" + IconNameNotifications IconName = "notifications" + IconNameNuclear IconName = "nuclear" + IconNameNutrition IconName = "nutrition" + IconNameOptions IconName = "options" + IconNamePaperPlane IconName = "paper-plane" + IconNamePartlySunny IconName = "partly-sunny" + IconNamePauseCircle IconName = "pause-circle" + IconNamePause IconName = "pause" + IconNamePaw IconName = "paw" + IconNamePencil IconName = "pencil" + IconNamePeopleCircle IconName = "people-circle" + IconNamePeople IconName = "people" + IconNamePersonAdd IconName = "person-add" + IconNamePersonCircle IconName = "person-circle" + IconNamePersonRemove IconName = "person-remove" + IconNamePerson IconName = "person" + IconNamePhoneLandscape IconName = "phone-landscape" + IconNamePhonePortrait IconName = "phone-portrait" + IconNamePieChart IconName = "pie-chart" + IconNamePin IconName = "pin" + IconNamePint IconName = "pint" + IconNamePizza IconName = "pizza" + IconNamePlanet IconName = "planet" + IconNamePlayBackCircle IconName = "play-back-circle" + IconNamePlayBack IconName = "play-back" + IconNamePlayCircle IconName = "play-circle" + IconNamePlayForwardCircle IconName = "play-forward-circle" + IconNamePlayForward IconName = "play-forward" + IconNamePlaySkipBackCircle IconName = "play-skip-back-circle" + IconNamePlaySkipBack IconName = "play-skip-back" + IconNamePlaySkipForwardCircle IconName = "play-skip-forward-circle" + IconNamePlaySkipForward IconName = "play-skip-forward" + IconNamePlay IconName = "play" + IconNamePodium IconName = "podium" + IconNamePower IconName = "power" + IconNamePricetag IconName = "pricetag" + IconNamePricetags IconName = "pricetags" + IconNamePrint IconName = "print" + IconNamePrism IconName = "prism" + IconNamePulse IconName = "pulse" + IconNamePush IconName = "push" + IconNameQrCode IconName = "qr-code" + IconNameRadioButtonOff IconName = "radio-button-off" + IconNameRadioButtonOn IconName = "radio-button-on" + IconNameRadio IconName = "radio" + IconNameRainy IconName = "rainy" + IconNameReader IconName = "reader" + IconNameReceipt IconName = "receipt" + IconNameRecording IconName = "recording" + IconNameRefreshCircle IconName = "refresh-circle" + IconNameRefresh IconName = "refresh" + IconNameReloadCircle IconName = "reload-circle" + IconNameReload IconName = "reload" + IconNameRemoveCircle IconName = "remove-circle" + IconNameRepeat IconName = "repeat" + IconNameResize IconName = "resize" + IconNameRestaurant IconName = "restaurant" + IconNameRibbon IconName = "ribbon" + IconNameRocket IconName = "rocket" + IconNameRose IconName = "rose" + IconNameSad IconName = "sad" + IconNameSave IconName = "save" + IconNameScale IconName = "scale" + IconNameScanCircle IconName = "scan-circle" + IconNameScan IconName = "scan" + IconNameSchool IconName = "school" + IconNameSearchCircle IconName = "search-circle" + IconNameSearch IconName = "search" + IconNameSend IconName = "send" + IconNameServer IconName = "server" + IconNameSettings IconName = "settings" + IconNameShapes IconName = "shapes" + IconNameShareSocial IconName = "share-social" + IconNameShare IconName = "share" + IconNameShieldCheckmark IconName = "shield-checkmark" + IconNameShieldHalf IconName = "shield-half" + IconNameShield IconName = "shield" + IconNameShirt IconName = "shirt" + IconNameShuffle IconName = "shuffle" + IconNameSkull IconName = "skull" + IconNameSnow IconName = "snow" + IconNameSparkles IconName = "sparkles" + IconNameSpeedometer IconName = "speedometer" + IconNameSquare IconName = "square" + IconNameStarHalf IconName = "star-half" + IconNameStar IconName = "star" + IconNameStatsChart IconName = "stats-chart" + IconNameStopCircle IconName = "stop-circle" + IconNameStop IconName = "stop" + IconNameStopwatch IconName = "stopwatch" + IconNameStorefront IconName = "storefront" + IconNameSubway IconName = "subway" + IconNameSunny IconName = "sunny" + IconNameSwapHorizontal IconName = "swap-horizontal" + IconNameSwapVertical IconName = "swap-vertical" + IconNameSyncCircle IconName = "sync-circle" + IconNameSync IconName = "sync" + IconNameTabletLandscape IconName = "tablet-landscape" + IconNameTabletPortrait IconName = "tablet-portrait" + IconNameTelescope IconName = "telescope" + IconNameTennisball IconName = "tennisball" + IconNameTerminal IconName = "terminal" + IconNameText IconName = "text" + IconNameThermometer IconName = "thermometer" + IconNameThumbsDown IconName = "thumbs-down" + IconNameThumbsUp IconName = "thumbs-up" + IconNameThunderstorm IconName = "thunderstorm" + IconNameTicket IconName = "ticket" + IconNameTime IconName = "time" + IconNameTimer IconName = "timer" + IconNameToday IconName = "today" + IconNameToggle IconName = "toggle" + IconNameTrailSign IconName = "trail-sign" + IconNameTrain IconName = "train" + IconNameTransgender IconName = "transgender" + IconNameTrashBin IconName = "trash-bin" + IconNameTrash IconName = "trash" + IconNameTrendingDown IconName = "trending-down" + IconNameTrendingUp IconName = "trending-up" + IconNameTriangle IconName = "triangle" + IconNameTrophy IconName = "trophy" + IconNameTv IconName = "tv" + IconNameUmbrella IconName = "umbrella" + IconNameUnlink IconName = "unlink" + IconNameVideocamOff IconName = "videocam-off" + IconNameVideocam IconName = "videocam" + IconNameVolumeHigh IconName = "volume-high" + IconNameVolumeLow IconName = "volume-low" + IconNameVolumeMedium IconName = "volume-medium" + IconNameVolumeMute IconName = "volume-mute" + IconNameVolumeOff IconName = "volume-off" + IconNameWalk IconName = "walk" + IconNameWallet IconName = "wallet" + IconNameWarning IconName = "warning" + IconNameWatch IconName = "watch" + IconNameWater IconName = "water" + IconNameWifi IconName = "wifi" + IconNameWine IconName = "wine" + IconNameWoman IconName = "woman" +) + +var validIconNames = func() map[IconName]struct{} { + m := make(map[IconName]struct{}, 390) + for _, v := range []IconName{ + IconNameAccessibility, + IconNameAddCircle, + IconNameAirplane, + IconNameAlarm, + IconNameAlbums, + IconNameAlertCircle, + IconNameAmericanFootball, + IconNameAnalytics, + IconNameAperture, + IconNameApps, + IconNameArchive, + IconNameArrowBackCircle, + IconNameArrowDownCircle, + IconNameArrowForwardCircle, + IconNameArrowRedoCircle, + IconNameArrowRedo, + IconNameArrowUndoCircle, + IconNameArrowUndo, + IconNameArrowUpCircle, + IconNameAtCircle, + IconNameAttach, + IconNameBackspace, + IconNameBagAdd, + IconNameBagCheck, + IconNameBagHandle, + IconNameBagRemove, + IconNameBag, + IconNameBalloon, + IconNameBan, + IconNameBandage, + IconNameBarChart, + IconNameBarbell, + IconNameBarcode, + IconNameBaseball, + IconNameBasket, + IconNameBasketball, + IconNameBatteryCharging, + IconNameBatteryDead, + IconNameBatteryFull, + IconNameBatteryHalf, + IconNameBeaker, + IconNameBed, + IconNameBeer, + IconNameBicycle, + IconNameBinoculars, + IconNameBluetooth, + IconNameBoat, + IconNameBody, + IconNameBonfire, + IconNameBook, + IconNameBookmark, + IconNameBookmarks, + IconNameBowlingBall, + IconNameBriefcase, + IconNameBrowsers, + IconNameBrush, + IconNameBug, + IconNameBuild, + IconNameBulb, + IconNameBus, + IconNameBusiness, + IconNameCafe, + IconNameCalculator, + IconNameCalendarClear, + IconNameCalendarNumber, + IconNameCalendar, + IconNameCall, + IconNameCameraReverse, + IconNameCamera, + IconNameCarSport, + IconNameCar, + IconNameCard, + IconNameCaretBackCircle, + IconNameCaretBack, + IconNameCaretDownCircle, + IconNameCaretDown, + IconNameCaretForwardCircle, + IconNameCaretForward, + IconNameCaretUpCircle, + IconNameCaretUp, + IconNameCart, + IconNameCash, + IconNameCellular, + IconNameChatboxEllipses, + IconNameChatbox, + IconNameChatbubbleEllipses, + IconNameChatbubble, + IconNameChatbubbles, + IconNameCheckbox, + IconNameCheckmarkCircle, + IconNameCheckmarkDoneCircle, + IconNameChevronBackCircle, + IconNameChevronDownCircle, + IconNameChevronForwardCircle, + IconNameChevronUpCircle, + IconNameClipboard, + IconNameCloseCircle, + IconNameCloudCircle, + IconNameCloudDone, + IconNameCloudDownload, + IconNameCloudOffline, + IconNameCloudUpload, + IconNameCloud, + IconNameCloudyNight, + IconNameCloudy, + IconNameCodeSlash, + IconNameCode, + IconNameCog, + IconNameColorFill, + IconNameColorFilter, + IconNameColorPalette, + IconNameColorWand, + IconNameCompass, + IconNameConstruct, + IconNameContact, + IconNameContract, + IconNameContrast, + IconNameCopy, + IconNameCreate, + IconNameCrop, + IconNameCube, + IconNameCut, + IconNameDesktop, + IconNameDiamond, + IconNameDice, + IconNameDisc, + IconNameDocumentAttach, + IconNameDocumentLock, + IconNameDocumentText, + IconNameDocument, + IconNameDocuments, + IconNameDownload, + IconNameDuplicate, + IconNameEar, + IconNameEarth, + IconNameEasel, + IconNameEgg, + IconNameEllipse, + IconNameEllipsisHorizontalCircle, + IconNameEllipsisVerticalCircle, + IconNameEnter, + IconNameExit, + IconNameExpand, + IconNameExtensionPuzzle, + IconNameEyeOff, + IconNameEye, + IconNameEyedrop, + IconNameFastFood, + IconNameFemale, + IconNameFileTrayFull, + IconNameFileTrayStacked, + IconNameFileTray, + IconNameFilm, + IconNameFilterCircle, + IconNameFingerPrint, + IconNameFish, + IconNameFitness, + IconNameFlag, + IconNameFlame, + IconNameFlashOff, + IconNameFlash, + IconNameFlashlight, + IconNameFlask, + IconNameFlower, + IconNameFolderOpen, + IconNameFolder, + IconNameFootball, + IconNameFootsteps, + IconNameFunnel, + IconNameGameController, + IconNameGift, + IconNameGitBranch, + IconNameGitCommit, + IconNameGitCompare, + IconNameGitMerge, + IconNameGitNetwork, + IconNameGitPullRequest, + IconNameGlasses, + IconNameGlobe, + IconNameGolf, + IconNameGrid, + IconNameHammer, + IconNameHandLeft, + IconNameHandRight, + IconNameHappy, + IconNameHardwareChip, + IconNameHeadset, + IconNameHeartCircle, + IconNameHeartDislikeCircle, + IconNameHeartDislike, + IconNameHeartHalf, + IconNameHeart, + IconNameHelpBuoy, + IconNameHelpCircle, + IconNameHome, + IconNameHourglass, + IconNameIceCream, + IconNameIdCard, + IconNameImage, + IconNameImages, + IconNameInfinite, + IconNameInformationCircle, + IconNameInvertMode, + IconNameJournal, + IconNameKey, + IconNameKeypad, + IconNameLanguage, + IconNameLaptop, + IconNameLayers, + IconNameLeaf, + IconNameLibrary, + IconNameLink, + IconNameListCircle, + IconNameList, + IconNameLocate, + IconNameLocation, + IconNameLockClosed, + IconNameLockOpen, + IconNameLogIn, + IconNameLogOut, + IconNameLogoAlipay, + IconNameLogoAmazon, + IconNameLogoAmplify, + IconNameLogoAndroid, + IconNameMagnet, + IconNameMailOpen, + IconNameMailUnread, + IconNameMail, + IconNameMaleFemale, + IconNameMale, + IconNameMan, + IconNameMap, + IconNameMedal, + IconNameMedical, + IconNameMedkit, + IconNameMegaphone, + IconNameMenu, + IconNameMicCircle, + IconNameMicOffCircle, + IconNameMicOff, + IconNameMic, + IconNameMoon, + IconNameMove, + IconNameMusicalNote, + IconNameMusicalNotes, + IconNameNavigateCircle, + IconNameNavigate, + IconNameNewspaper, + IconNameNotificationsCircle, + IconNameNotificationsOffCircle, + IconNameNotificationsOff, + IconNameNotifications, + IconNameNuclear, + IconNameNutrition, + IconNameOptions, + IconNamePaperPlane, + IconNamePartlySunny, + IconNamePauseCircle, + IconNamePause, + IconNamePaw, + IconNamePencil, + IconNamePeopleCircle, + IconNamePeople, + IconNamePersonAdd, + IconNamePersonCircle, + IconNamePersonRemove, + IconNamePerson, + IconNamePhoneLandscape, + IconNamePhonePortrait, + IconNamePieChart, + IconNamePin, + IconNamePint, + IconNamePizza, + IconNamePlanet, + IconNamePlayBackCircle, + IconNamePlayBack, + IconNamePlayCircle, + IconNamePlayForwardCircle, + IconNamePlayForward, + IconNamePlaySkipBackCircle, + IconNamePlaySkipBack, + IconNamePlaySkipForwardCircle, + IconNamePlaySkipForward, + IconNamePlay, + IconNamePodium, + IconNamePower, + IconNamePricetag, + IconNamePricetags, + IconNamePrint, + IconNamePrism, + IconNamePulse, + IconNamePush, + IconNameQrCode, + IconNameRadioButtonOff, + IconNameRadioButtonOn, + IconNameRadio, + IconNameRainy, + IconNameReader, + IconNameReceipt, + IconNameRecording, + IconNameRefreshCircle, + IconNameRefresh, + IconNameReloadCircle, + IconNameReload, + IconNameRemoveCircle, + IconNameRepeat, + IconNameResize, + IconNameRestaurant, + IconNameRibbon, + IconNameRocket, + IconNameRose, + IconNameSad, + IconNameSave, + IconNameScale, + IconNameScanCircle, + IconNameScan, + IconNameSchool, + IconNameSearchCircle, + IconNameSearch, + IconNameSend, + IconNameServer, + IconNameSettings, + IconNameShapes, + IconNameShareSocial, + IconNameShare, + IconNameShieldCheckmark, + IconNameShieldHalf, + IconNameShield, + IconNameShirt, + IconNameShuffle, + IconNameSkull, + IconNameSnow, + IconNameSparkles, + IconNameSpeedometer, + IconNameSquare, + IconNameStarHalf, + IconNameStar, + IconNameStatsChart, + IconNameStopCircle, + IconNameStop, + IconNameStopwatch, + IconNameStorefront, + IconNameSubway, + IconNameSunny, + IconNameSwapHorizontal, + IconNameSwapVertical, + IconNameSyncCircle, + IconNameSync, + IconNameTabletLandscape, + IconNameTabletPortrait, + IconNameTelescope, + IconNameTennisball, + IconNameTerminal, + IconNameText, + IconNameThermometer, + IconNameThumbsDown, + IconNameThumbsUp, + IconNameThunderstorm, + IconNameTicket, + IconNameTime, + IconNameTimer, + IconNameToday, + IconNameToggle, + IconNameTrailSign, + IconNameTrain, + IconNameTransgender, + IconNameTrashBin, + IconNameTrash, + IconNameTrendingDown, + IconNameTrendingUp, + IconNameTriangle, + IconNameTrophy, + IconNameTv, + IconNameUmbrella, + IconNameUnlink, + IconNameVideocamOff, + IconNameVideocam, + IconNameVolumeHigh, + IconNameVolumeLow, + IconNameVolumeMedium, + IconNameVolumeMute, + IconNameVolumeOff, + IconNameWalk, + IconNameWallet, + IconNameWarning, + IconNameWatch, + IconNameWater, + IconNameWifi, + IconNameWine, + IconNameWoman, + } { + m[v] = struct{}{} + } + return m +}() + +func (n *IconName) UnmarshalJSON(data []byte) error { + var s string + if err := json.Unmarshal(data, &s); err != nil { + return err + } + name := IconName(s) + if _, ok := validIconNames[name]; !ok { + return util.ErrBadInput(fmt.Sprintf("invalid icon name: %q", s)) + } + *n = name + return nil +} + var IconOptionToColor = map[float64]Color{ 1: ColorGrey, 2: ColorYellow, @@ -71,6 +878,19 @@ var IconOptionToColor = map[float64]Color{ 10: ColorLime, } +var ColorToIconOption = map[Color]int64{ + ColorGrey: 1, + ColorYellow: 2, + ColorOrange: 3, + ColorRed: 4, + ColorPink: 5, + ColorPurple: 6, + ColorBlue: 7, + ColorIce: 8, + ColorTeal: 9, + ColorLime: 10, +} + var ColorOptionToColor = map[string]Color{ "grey": ColorGrey, "yellow": ColorYellow, @@ -101,10 +921,6 @@ func StringPtr(s string) *string { return &s } -func ColorPtr(c Color) *Color { - return &c -} - type Icon struct { WrappedIcon `swaggerignore:"true"` } @@ -163,9 +979,9 @@ func (FileIcon) isIcon() {} // TODO: the enum gen for IconFormat through swaggo is bugged; only the last enum (before: "icon") is used type NamedIcon struct { - Format IconFormat `json:"format" enums:"emoji,file,icon"` // The format of the icon - Name string `json:"name" example:"document"` // The name of the icon - Color *Color `json:"color,omitempty" example:"yellow" enums:"grey,yellow,orange,red,pink,purple,blue,ice,teal,lime"` // The color of the icon + Format IconFormat `json:"format" enums:"emoji,file,icon"` // The format of the icon + Name IconName `json:"name" example:"document"` // The name of the icon + Color Color `json:"color" example:"yellow" enums:"grey,yellow,orange,red,pink,purple,blue,ice,teal,lime"` // The color of the icon } func (NamedIcon) isIcon() {} diff --git a/core/api/service/icon.go b/core/api/service/icon.go index 9364215c2..1d77930e1 100644 --- a/core/api/service/icon.go +++ b/core/api/service/icon.go @@ -26,8 +26,8 @@ func GetIcon(gatewayUrl string, iconEmoji string, iconImage string, iconName str if iconName != "" { return apimodel.Icon{WrappedIcon: apimodel.NamedIcon{ Format: apimodel.IconFormatIcon, - Name: iconName, - Color: apimodel.ColorPtr(apimodel.IconOptionToColor[iconOption]), + Name: apimodel.IconName(iconName), + Color: apimodel.IconOptionToColor[iconOption], }} } if iconEmoji != "" { diff --git a/core/api/service/object.go b/core/api/service/object.go index eeb6f6e7d..90036a540 100644 --- a/core/api/service/object.go +++ b/core/api/service/object.go @@ -282,7 +282,7 @@ func (s *Service) buildObjectDetails(ctx context.Context, spaceId string, reques bundle.RelationKeyOrigin.String(): pbtypes.Int64(int64(model.ObjectOrigin_api)), } - iconFields, err := s.processIconFields(spaceId, request.Icon) + iconFields, err := s.processIconFields(spaceId, request.Icon, false) if err != nil { return nil, err } @@ -309,7 +309,7 @@ func (s *Service) buildUpdatedObjectDetails(ctx context.Context, spaceId string, } if request.Icon != nil { - iconFields, err := s.processIconFields(spaceId, *request.Icon) + iconFields, err := s.processIconFields(spaceId, *request.Icon, false) if err != nil { return nil, err } @@ -332,11 +332,16 @@ func (s *Service) buildUpdatedObjectDetails(ctx context.Context, spaceId string, } // processIconFields returns the detail fields corresponding to the given icon. -func (s *Service) processIconFields(spaceId string, icon apimodel.Icon) (map[string]*types.Value, error) { +func (s *Service) processIconFields(spaceId string, icon apimodel.Icon, isType bool) (map[string]*types.Value, error) { iconFields := make(map[string]*types.Value) switch e := icon.WrappedIcon.(type) { case apimodel.NamedIcon: - return nil, util.ErrBadInput("icon name and color are not supported for object") + if isType { + iconFields[bundle.RelationKeyIconName.String()] = pbtypes.String(string(e.Name)) + iconFields[bundle.RelationKeyIconOption.String()] = pbtypes.Int64(apimodel.ColorToIconOption[e.Color]) + } else { + return nil, util.ErrBadInput("icon name and color are not supported for object") + } case apimodel.EmojiIcon: if len(e.Emoji) > 0 && !IsEmoji(e.Emoji) { return nil, util.ErrBadInput("icon emoji is not valid") diff --git a/core/api/service/type.go b/core/api/service/type.go index cf986d264..ea790d49a 100644 --- a/core/api/service/type.go +++ b/core/api/service/type.go @@ -291,7 +291,7 @@ func (s *Service) buildTypeDetails(ctx context.Context, spaceId string, request fields[bundle.RelationKeyApiObjectKey.String()] = pbtypes.String(s.sanitizedString(request.Key)) } - iconFields, err := s.processIconFields(spaceId, request.Icon) + iconFields, err := s.processIconFields(spaceId, request.Icon, true) if err != nil { return nil, err } @@ -356,7 +356,7 @@ func (s *Service) buildUpdatedTypeDetails(ctx context.Context, spaceId string, t } if request.Icon != nil { - iconFields, err := s.processIconFields(spaceId, *request.Icon) + iconFields, err := s.processIconFields(spaceId, *request.Icon, true) if err != nil { return nil, err } From 0c131ae8890ed8ee6d5cf35a16ff3cee60752b0a Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Tue, 20 May 2025 09:44:54 +0200 Subject: [PATCH 117/164] GO-5589: Restrict updating key of bundled types and properties --- core/api/service/property.go | 3 +++ core/api/service/type.go | 11 +++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/core/api/service/property.go b/core/api/service/property.go index 75b544134..928c7ff0b 100644 --- a/core/api/service/property.go +++ b/core/api/service/property.go @@ -234,6 +234,9 @@ func (s *Service) UpdateProperty(ctx context.Context, spaceId string, propertyId }) } if request.Key != nil { + if bundle.HasRelation(domain.RelationKey(prop.RelationKey)) { + return apimodel.Property{}, util.ErrBadInput("property key of bundled properties cannot be changed") + } detailsToUpdate = append(detailsToUpdate, &model.Detail{ Key: bundle.RelationKeyApiObjectKey.String(), Value: pbtypes.String(s.sanitizedString(*request.Key)), diff --git a/core/api/service/type.go b/core/api/service/type.go index ea790d49a..c1235912d 100644 --- a/core/api/service/type.go +++ b/core/api/service/type.go @@ -137,12 +137,12 @@ func (s *Service) CreateType(ctx context.Context, spaceId string, request apimod // UpdateType updates an existing type in a specific space. func (s *Service) UpdateType(ctx context.Context, spaceId string, typeId string, request apimodel.UpdateTypeRequest) (apimodel.Type, error) { - _, err := s.GetType(ctx, spaceId, typeId) + t, err := s.GetType(ctx, spaceId, typeId) if err != nil { return apimodel.Type{}, err } - details, err := s.buildUpdatedTypeDetails(ctx, spaceId, typeId, request) + details, err := s.buildUpdatedTypeDetails(ctx, spaceId, t, request) if err != nil { return apimodel.Type{}, err } @@ -340,7 +340,7 @@ func (s *Service) buildTypeDetails(ctx context.Context, spaceId string, request } // buildUpdatedTypeDetails builds a partial details struct for UpdateTypeRequest. -func (s *Service) buildUpdatedTypeDetails(ctx context.Context, spaceId string, typeId string, request apimodel.UpdateTypeRequest) (*types.Struct, error) { +func (s *Service) buildUpdatedTypeDetails(ctx context.Context, spaceId string, t apimodel.Type, request apimodel.UpdateTypeRequest) (*types.Struct, error) { fields := make(map[string]*types.Value) if request.Name != nil { fields[bundle.RelationKeyName.String()] = pbtypes.String(s.sanitizedString(*request.Name)) @@ -352,6 +352,9 @@ func (s *Service) buildUpdatedTypeDetails(ctx context.Context, spaceId string, t fields[bundle.RelationKeyRecommendedLayout.String()] = pbtypes.Int64(int64(s.typeLayoutToObjectTypeLayout(*request.Layout))) } if request.Key != nil { + if bundle.HasObjectTypeByKey(domain.TypeKey(util.ToTypeApiKey(t.UniqueKey))) { + return nil, util.ErrBadInput("type key of bundled types cannot be changed") + } fields[bundle.RelationKeyApiObjectKey.String()] = pbtypes.String(s.sanitizedString(*request.Key)) } @@ -374,7 +377,7 @@ func (s *Service) buildUpdatedTypeDetails(ctx context.Context, spaceId string, t return nil, err } - currentFields, err := util.GetFieldsByID(s.mw, spaceId, typeId, []string{bundle.RelationKeyRecommendedFeaturedRelations.String()}) + currentFields, err := util.GetFieldsByID(s.mw, spaceId, t.Id, []string{bundle.RelationKeyRecommendedFeaturedRelations.String()}) if err != nil { return nil, err } From e026e93343087aca9d0a899813f50de091dbfb4a Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Tue, 20 May 2025 09:51:19 +0200 Subject: [PATCH 118/164] GO-5589: Fix object create test --- core/api/service/object_test.go | 46 ++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/core/api/service/object_test.go b/core/api/service/object_test.go index 96a0abcad..1c4de7c84 100644 --- a/core/api/service/object_test.go +++ b/core/api/service/object_test.go @@ -653,11 +653,49 @@ func TestObjectService_CreateObject(t *testing.T) { Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL}, }).Once() + // Mock getTypeMapFromStore to properly resolve typeKey for creation + fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{ + SpaceId: mockedSpaceId, + Filters: []*model.BlockContentDataviewFilter{ + { + RelationKey: bundle.RelationKeyResolvedLayout.String(), + Condition: model.BlockContentDataviewFilter_Equal, + Value: pbtypes.Int64(int64(model.ObjectType_objectType)), + }, + { + RelationKey: bundle.RelationKeyIsDeleted.String(), + }, + }, + Keys: []string{ + bundle.RelationKeyId.String(), + bundle.RelationKeyUniqueKey.String(), + bundle.RelationKeyApiObjectKey.String(), + bundle.RelationKeyName.String(), + bundle.RelationKeyPluralName.String(), + bundle.RelationKeyIconEmoji.String(), + bundle.RelationKeyIconName.String(), + bundle.RelationKeyIconOption.String(), + bundle.RelationKeyRecommendedLayout.String(), + bundle.RelationKeyIsArchived.String(), + bundle.RelationKeyRecommendedFeaturedRelations.String(), + bundle.RelationKeyRecommendedRelations.String(), + }, + }).Return(&pb.RpcObjectSearchResponse{ + Records: []*types.Struct{ + { + Fields: map[string]*types.Value{ + bundle.RelationKeyUniqueKey.String(): pbtypes.String("ot-" + mockedTypeKey), + }, + }, + }, + Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL}, + }).Times(1) + // Mock getPropertyMapFromStore, getTypeMapFromStore and getTagMapFromStore fx.mwMock.On("ObjectSearch", mock.Anything, mock.Anything).Return(&pb.RpcObjectSearchResponse{ Records: []*types.Struct{}, Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL}, - }).Times(3) + }).Times(4) // Mock ExportMarkdown fx.mwMock.On("ObjectExport", mock.Anything, &pb.RpcObjectExportRequest{ @@ -691,6 +729,12 @@ func TestObjectService_CreateObject(t *testing.T) { ctx := context.Background() fx := newFixture(t) + // Mock getPropertyMapFromStore, getTypeMapFromStore + fx.mwMock.On("ObjectSearch", mock.Anything, mock.Anything).Return(&pb.RpcObjectSearchResponse{ + Records: []*types.Struct{}, + Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL}, + }).Times(2) + fx.mwMock.On("ObjectCreate", mock.Anything, mock.Anything). Return(&pb.RpcObjectCreateResponse{ Error: &pb.RpcObjectCreateResponseError{Code: pb.RpcObjectCreateResponseError_UNKNOWN_ERROR}, From 0d4a834596b72f39d75495f2bd73df6fc4da1080 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Tue, 20 May 2025 09:58:12 +0200 Subject: [PATCH 119/164] GO-5589: Add tagliatelle for json key lint --- .golangci.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.golangci.yml b/.golangci.yml index cf941da80..3452b8be0 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -49,6 +49,11 @@ linters-settings: excludes: - G602 - G108 + tagliatelle: + case: + use-field-name: true + rules: + json: snake linters: disable-all: true @@ -70,6 +75,7 @@ linters: - govet - unconvert - errorlint + - tagliatelle severity: default-severity: error From 04c85a650a52a90d85e17db4fc0b6f8e990e8539 Mon Sep 17 00:00:00 2001 From: Sergey Date: Tue, 20 May 2025 10:32:47 +0200 Subject: [PATCH 120/164] GO-5585: Fix typo --- core/block/object/objectcreator/util.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/block/object/objectcreator/util.go b/core/block/object/objectcreator/util.go index f4ca5ac21..940b3c41f 100644 --- a/core/block/object/objectcreator/util.go +++ b/core/block/object/objectcreator/util.go @@ -14,7 +14,7 @@ import ( // injectApiObjectKey sets a value for ApiObjectKey relation in priority: // - User-provided ApiObjectKey // - Key from relationKey/uniqueKey -// - Transliterated Name realtion +// - Transliterated Name relation func injectApiObjectKey(object *domain.Details, key string) { if strings.TrimSpace(object.GetString(bundle.RelationKeyApiObjectKey)) == "" { if key == "" { From db6c0ad26b22c9d0e716a97163df2c01340d9b8e Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Tue, 20 May 2025 13:11:23 +0200 Subject: [PATCH 121/164] GO-4844: Enable analytics for routes --- core/api/server/router.go | 101 +++++++++++++------------------------- 1 file changed, 34 insertions(+), 67 deletions(-) diff --git a/core/api/server/router.go b/core/api/server/router.go index ee23aacae..b409b641c 100644 --- a/core/api/server/router.go +++ b/core/api/server/router.go @@ -85,39 +85,6 @@ func (s *Server) NewRouter(mw apicore.ClientCommands, eventService apicore.Event v1.Use(paginator) v1.Use(s.ensureAuthenticated(mw)) { - // // Export - // v1.GET("/spaces/:space_id/objects/:object_id/:format", s.ensureAnalyticsEvent("ObjectExport", eventService), export.GetObjectExportHandler(s.exportService)) - - // // List - // v1.GET("/spaces/:space_id/lists/:list_id/views", s.ensureAnalyticsEvent("ListGetViews", eventService), list.GetListViewsHandler(s.listService)) - // v1.GET("/spaces/:space_id/lists/:list_id/:view_id/objects", s.ensureAnalyticsEvent("ListGetObjects", eventService), list.GetObjectsInListHandler(s.listService)) - // v1.POST("/spaces/:space_id/lists/:list_id/objects", s.ensureAnalyticsEvent("ListAddObject", eventService), list.AddObjectsToListHandler(s.listService)) - // v1.DELETE("/spaces/:space_id/lists/:list_id/objects/:object_id", s.rateLimit(maxWriteRequestsPerSecond), s.ensureAnalyticsEvent("ListRemoveObject", eventService), list.RemoveObjectFromListHandler(s.listService)) - - // // Object - // v1.GET("/spaces/:space_id/objects", s.ensureAnalyticsEvent("ObjectList", eventService), object.GetObjectsHandler(s.objectService)) - // v1.GET("/spaces/:space_id/objects/:object_id", s.ensureAnalyticsEvent("ObjectOpen", eventService), object.GetObjectHandler(s.objectService)) - // v1.DELETE("/spaces/:space_id/objects/:object_id", s.rateLimit(maxWriteRequestsPerSecond), s.ensureAnalyticsEvent("ObjectDelete", eventService), object.DeleteObjectHandler(s.objectService)) - // v1.POST("/spaces/:space_id/objects", s.rateLimit(maxWriteRequestsPerSecond), s.ensureAnalyticsEvent("ObjectCreate", eventService), object.CreateObjectHandler(s.objectService)) - - // // Search - // v1.POST("/search", s.ensureAnalyticsEvent("GlobalSearch", eventService), search.GlobalSearchHandler(s.searchService)) - // v1.POST("/spaces/:space_id/search", s.ensureAnalyticsEvent("Search", eventService), search.SearchHandler(s.searchService)) - - // // Space - // v1.GET("/spaces", s.ensureAnalyticsEvent("SpaceList", eventService), space.GetSpacesHandler(s.spaceService)) - // v1.GET("/spaces/:space_id", s.ensureAnalyticsEvent("SpaceOpen", eventService), space.GetSpaceHandler(s.spaceService)) - // v1.GET("/spaces/:space_id/members", s.ensureAnalyticsEvent("MemberList", eventService), space.GetMembersHandler(s.spaceService)) - // v1.GET("/spaces/:space_id/members/:member_id", s.ensureAnalyticsEvent("MemberOpen", eventService), space.GetMemberHandler(s.spaceService)) - // // v1.PATCH("/spaces/:space_id/members/:member_id", s.rateLimit(maxWriteRequestsPerSecond), s.ensureAnalyticsEvent("MemberUpdate", eventService), space.UpdateMemberHandler(s.spaceService)) - // v1.POST("/spaces", s.rateLimit(maxWriteRequestsPerSecond), s.ensureAnalyticsEvent("SpaceCreate", eventService), space.CreateSpaceHandler(s.spaceService)) - - // // Type - // v1.GET("/spaces/:space_id/types", s.ensureAnalyticsEvent("TypeList", eventService), object.GetTypesHandler(s.objectService)) - // v1.GET("/spaces/:space_id/types/:type_id", s.ensureAnalyticsEvent("TypeOpen", eventService), object.GetTypeHandler(s.objectService)) - // v1.GET("/spaces/:space_id/types/:type_id/templates", s.ensureAnalyticsEvent("TemplateList", eventService), object.GetTemplatesHandler(s.objectService)) - // v1.GET("/spaces/:space_id/types/:type_id/templates/:template_id", s.ensureAnalyticsEvent("TemplateOpen", eventService), object.GetTemplateHandler(s.objectService)) - // Block // TODO: implement create, update and delete block endpoints // v1.POST("/spaces/:space_id/objects/:object_id/blocks", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), object.CreateBlockHandler(s.service)) @@ -125,58 +92,58 @@ func (s *Server) NewRouter(mw apicore.ClientCommands, eventService apicore.Event // v1.DELETE("/spaces/:space_id/objects/:object_id/blocks/:block_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), object.DeleteBlockHandler(s.service)) // List - v1.GET("/spaces/:space_id/lists/:list_id/views", handler.GetListViewsHandler(s.service)) - v1.GET("/spaces/:space_id/lists/:list_id/views/:view_id/objects", handler.GetObjectsInListHandler(s.service)) - v1.POST("/spaces/:space_id/lists/:list_id/objects", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.AddObjectsToListHandler(s.service)) - v1.DELETE("/spaces/:space_id/lists/:list_id/objects/:object_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.RemoveObjectFromListHandler(s.service)) + v1.GET("/spaces/:space_id/lists/:list_id/views", s.ensureAnalyticsEvent("ListGetViews", eventService), handler.GetListViewsHandler(s.service)) + v1.GET("/spaces/:space_id/lists/:list_id/views/:view_id/objects", s.ensureAnalyticsEvent("ListGetObjects", eventService), handler.GetObjectsInListHandler(s.service)) + v1.POST("/spaces/:space_id/lists/:list_id/objects", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), s.ensureAnalyticsEvent("ListAddObject", eventService), handler.AddObjectsToListHandler(s.service)) + v1.DELETE("/spaces/:space_id/lists/:list_id/objects/:object_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), s.ensureAnalyticsEvent("ListRemoveObject", eventService), handler.RemoveObjectFromListHandler(s.service)) // Member - v1.GET("/spaces/:space_id/members", handler.ListMembersHandler(s.service)) - v1.GET("/spaces/:space_id/members/:member_id", handler.GetMemberHandler(s.service)) + v1.GET("/spaces/:space_id/members", s.ensureAnalyticsEvent("MemberList", eventService), handler.ListMembersHandler(s.service)) + v1.GET("/spaces/:space_id/members/:member_id", s.ensureAnalyticsEvent("MemberOpen", eventService), handler.GetMemberHandler(s.service)) // TODO: renable when granular permissions are implementeds // v1.PATCH("/spaces/:space_id/members/:member_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), space.UpdateMemberHandler(s.service)) // Object - v1.GET("/spaces/:space_id/objects", handler.ListObjectsHandler(s.service)) - v1.GET("/spaces/:space_id/objects/:object_id", handler.GetObjectHandler(s.service)) - v1.POST("/spaces/:space_id/objects", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.CreateObjectHandler(s.service)) - v1.PATCH("/spaces/:space_id/objects/:object_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.UpdateObjectHandler(s.service)) - v1.DELETE("/spaces/:space_id/objects/:object_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.DeleteObjectHandler(s.service)) + v1.GET("/spaces/:space_id/objects", s.ensureAnalyticsEvent("ObjectList", eventService), handler.ListObjectsHandler(s.service)) + v1.GET("/spaces/:space_id/objects/:object_id", s.ensureAnalyticsEvent("ObjectOpen", eventService), handler.GetObjectHandler(s.service)) + v1.POST("/spaces/:space_id/objects", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), s.ensureAnalyticsEvent("ObjectCreate", eventService), handler.CreateObjectHandler(s.service)) + v1.PATCH("/spaces/:space_id/objects/:object_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), s.ensureAnalyticsEvent("ObjectUpdate", eventService), handler.UpdateObjectHandler(s.service)) + v1.DELETE("/spaces/:space_id/objects/:object_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), s.ensureAnalyticsEvent("ObjectDelete", eventService), handler.DeleteObjectHandler(s.service)) // Property - v1.GET("/spaces/:space_id/properties", handler.ListPropertiesHandler(s.service)) - v1.GET("/spaces/:space_id/properties/:property_id", handler.GetPropertyHandler(s.service)) - v1.POST("/spaces/:space_id/properties", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.CreatePropertyHandler(s.service)) - v1.PATCH("/spaces/:space_id/properties/:property_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.UpdatePropertyHandler(s.service)) - v1.DELETE("/spaces/:space_id/properties/:property_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.DeletePropertyHandler(s.service)) + v1.GET("/spaces/:space_id/properties", s.ensureAnalyticsEvent("PropertyList", eventService), handler.ListPropertiesHandler(s.service)) + v1.GET("/spaces/:space_id/properties/:property_id", s.ensureAnalyticsEvent("PropertyOpen", eventService), handler.GetPropertyHandler(s.service)) + v1.POST("/spaces/:space_id/properties", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), s.ensureAnalyticsEvent("PropertyCreate", eventService), handler.CreatePropertyHandler(s.service)) + v1.PATCH("/spaces/:space_id/properties/:property_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), s.ensureAnalyticsEvent("PropertyUpdate", eventService), handler.UpdatePropertyHandler(s.service)) + v1.DELETE("/spaces/:space_id/properties/:property_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), s.ensureAnalyticsEvent("PropertyDelete", eventService), handler.DeletePropertyHandler(s.service)) // Search - v1.POST("/search", handler.GlobalSearchHandler(s.service)) - v1.POST("/spaces/:space_id/search", handler.SearchHandler(s.service)) + v1.POST("/search", s.ensureAnalyticsEvent("SearchGlobal", eventService), handler.GlobalSearchHandler(s.service)) + v1.POST("/spaces/:space_id/search", s.ensureAnalyticsEvent("SearchSpace", eventService), handler.SearchHandler(s.service)) // Space - v1.GET("/spaces", handler.ListSpacesHandler(s.service)) - v1.GET("/spaces/:space_id", handler.GetSpaceHandler(s.service)) - v1.POST("/spaces", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.CreateSpaceHandler(s.service)) - v1.PATCH("/spaces/:space_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.UpdateSpaceHandler(s.service)) + v1.GET("/spaces", s.ensureAnalyticsEvent("SpaceList", eventService), handler.ListSpacesHandler(s.service)) + v1.GET("/spaces/:space_id", s.ensureAnalyticsEvent("SpaceOpen", eventService), handler.GetSpaceHandler(s.service)) + v1.POST("/spaces", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), s.ensureAnalyticsEvent("SpaceCreate", eventService), handler.CreateSpaceHandler(s.service)) + v1.PATCH("/spaces/:space_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), s.ensureAnalyticsEvent("SpaceUpdate", eventService), handler.UpdateSpaceHandler(s.service)) // Tag - v1.GET("/spaces/:space_id/properties/:property_id/tags", handler.ListTagsHandler(s.service)) - v1.GET("/spaces/:space_id/properties/:property_id/tags/:tag_id", handler.GetTagHandler(s.service)) - v1.POST("/spaces/:space_id/properties/:property_id/tags", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.CreateTagHandler(s.service)) - v1.PATCH("/spaces/:space_id/properties/:property_id/tags/:tag_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.UpdateTagHandler(s.service)) - v1.DELETE("/spaces/:space_id/properties/:property_id/tags/:tag_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.DeleteTagHandler(s.service)) + v1.GET("/spaces/:space_id/properties/:property_id/tags", s.ensureAnalyticsEvent("TagList", eventService), handler.ListTagsHandler(s.service)) + v1.GET("/spaces/:space_id/properties/:property_id/tags/:tag_id", s.ensureAnalyticsEvent("TagOpen", eventService), handler.GetTagHandler(s.service)) + v1.POST("/spaces/:space_id/properties/:property_id/tags", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), s.ensureAnalyticsEvent("TagCreate", eventService), handler.CreateTagHandler(s.service)) + v1.PATCH("/spaces/:space_id/properties/:property_id/tags/:tag_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), s.ensureAnalyticsEvent("TagUpdate", eventService), handler.UpdateTagHandler(s.service)) + v1.DELETE("/spaces/:space_id/properties/:property_id/tags/:tag_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), s.ensureAnalyticsEvent("TagDelete", eventService), handler.DeleteTagHandler(s.service)) // Template - v1.GET("/spaces/:space_id/types/:type_id/templates", handler.ListTemplatesHandler(s.service)) - v1.GET("/spaces/:space_id/types/:type_id/templates/:template_id", handler.GetTemplateHandler(s.service)) + v1.GET("/spaces/:space_id/types/:type_id/templates", s.ensureAnalyticsEvent("TemplateList", eventService), handler.ListTemplatesHandler(s.service)) + v1.GET("/spaces/:space_id/types/:type_id/templates/:template_id", s.ensureAnalyticsEvent("TemplateOpen", eventService), handler.GetTemplateHandler(s.service)) // Type - v1.GET("/spaces/:space_id/types", handler.ListTypesHandler(s.service)) - v1.GET("/spaces/:space_id/types/:type_id", handler.GetTypeHandler(s.service)) - v1.POST("/spaces/:space_id/types", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.CreateTypeHandler(s.service)) - v1.PATCH("/spaces/:space_id/types/:type_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.UpdateTypeHandler(s.service)) - v1.DELETE("/spaces/:space_id/types/:type_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.DeleteTypeHandler(s.service)) + v1.GET("/spaces/:space_id/types", s.ensureAnalyticsEvent("TypeList", eventService), handler.ListTypesHandler(s.service)) + v1.GET("/spaces/:space_id/types/:type_id", s.ensureAnalyticsEvent("TypeOpen", eventService), handler.GetTypeHandler(s.service)) + v1.POST("/spaces/:space_id/types", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), s.ensureAnalyticsEvent("TypeCreate", eventService), handler.CreateTypeHandler(s.service)) + v1.PATCH("/spaces/:space_id/types/:type_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), s.ensureAnalyticsEvent("TypeUpdate", eventService), handler.UpdateTypeHandler(s.service)) + v1.DELETE("/spaces/:space_id/types/:type_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), s.ensureAnalyticsEvent("TypeDelete", eventService), handler.DeleteTypeHandler(s.service)) } return router From 945323f7ec38e2ea0964cdef8c216dacde708d04 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Tue, 20 May 2025 13:12:02 +0200 Subject: [PATCH 122/164] GO-4844: Log http status for all request kinds --- core/api/server/middleware.go | 7 ++----- core/api/util/analytics.go | 21 ++++++++++++--------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/core/api/server/middleware.go b/core/api/server/middleware.go index b05574fc2..0fa8ebd6b 100644 --- a/core/api/server/middleware.go +++ b/core/api/server/middleware.go @@ -97,11 +97,8 @@ func (s *Server) ensureAnalyticsEvent(code string, eventService apicore.EventSer return func(c *gin.Context) { c.Next() - if c.Writer.Status() != http.StatusOK { - return - } - - payload := util.NewAnalyticsEventForApi(c.Request.Context(), code) + status := c.Writer.Status() + payload := util.NewAnalyticsEventForApi(c.Request.Context(), code, status) eventService.Broadcast(event.NewEventSingleMessage("", &pb.EventMessageValueOfPayloadBroadcast{ PayloadBroadcast: &pb.EventPayloadBroadcast{ Payload: payload, diff --git a/core/api/util/analytics.go b/core/api/util/analytics.go index ed96ccedb..22d0825af 100644 --- a/core/api/util/analytics.go +++ b/core/api/util/analytics.go @@ -10,9 +10,10 @@ type AnalyticsBroadcastEvent struct { Type string `json:"type"` Code string `json:"code"` Param struct { - Origin string `json:"origin"` + Route string `json:"route"` ApiAppName string `json:"apiAppName"` - } + Status int `json:"status"` + } `json:"param"` } // ToJSON returns the event as a JSON string @@ -25,25 +26,27 @@ func (e *AnalyticsBroadcastEvent) ToJSON() string { return string(eventJSON) } -// NewAnalyticsEvent creates a new analytics event with the given code, origin and apiAppName -func NewAnalyticsEvent(code, origin, apiAppName string) *AnalyticsBroadcastEvent { +// NewAnalyticsEvent creates a new analytics event with the given code, route and apiAppName +func NewAnalyticsEvent(code, route, apiAppName string, status int) *AnalyticsBroadcastEvent { return &AnalyticsBroadcastEvent{ Type: "analyticsEvent", Code: code, Param: struct { - Origin string `json:"origin"` + Route string `json:"route"` ApiAppName string `json:"apiAppName"` + Status int `json:"status"` }{ - Origin: origin, + Route: route, ApiAppName: apiAppName, + Status: status, }, } } -// NewAnalyticsEventForApi creates a new analytics event for api with app name from the context -func NewAnalyticsEventForApi(ctx context.Context, code string) string { +// NewAnalyticsEventForApi creates a new analytics event for api with the app name from the context +func NewAnalyticsEventForApi(ctx context.Context, code string, status int) string { // TODO: enable when apiAppName is available in context // apiAppName := ctx.Value("apiAppName").(string) apiAppName := "api-app" - return NewAnalyticsEvent(code, "api", apiAppName).ToJSON() + return NewAnalyticsEvent(code, "api", apiAppName, status).ToJSON() } From a48e74e2a1a4a732c4a19932d235c1b1eb640b66 Mon Sep 17 00:00:00 2001 From: Roman Khafizianov Date: Tue, 20 May 2025 14:29:01 +0200 Subject: [PATCH 123/164] GO-5629 api changes --- cmd/grpcserver/grpc.go | 4 + core/account.go | 16 +- core/application/sessions.go | 4 +- core/session/challenge.go | 4 +- core/session/service.go | 2 +- core/wallet/applink.go | 4 +- docs/proto.md | 4 +- pkg/lib/pb/model/models.pb.go | 1200 +++++++++++++------------- pkg/lib/pb/model/protos/models.proto | 12 +- util/grpcprocess/grpcprocess.go | 94 ++ 10 files changed, 722 insertions(+), 622 deletions(-) create mode 100644 util/grpcprocess/grpcprocess.go diff --git a/cmd/grpcserver/grpc.go b/cmd/grpcserver/grpc.go index 827fd3c39..7b9af97ec 100644 --- a/cmd/grpcserver/grpc.go +++ b/cmd/grpcserver/grpc.go @@ -38,6 +38,7 @@ import ( "github.com/anyproto/anytype-heart/pb/service" "github.com/anyproto/anytype-heart/pkg/lib/logging" "github.com/anyproto/anytype-heart/util/conc" + "github.com/anyproto/anytype-heart/util/grpcprocess" "github.com/anyproto/anytype-heart/util/vcs" ) @@ -180,6 +181,9 @@ func main() { } unaryInterceptors = appendInterceptor(unaryInterceptors, mw) + unaryInterceptors = append(unaryInterceptors, grpcprocess.ProcessInfoInterceptor( + "/anytype.ClientCommands/AccountLocalLinkNewChallenge", + )) server := grpc.NewServer(grpc.MaxRecvMsgSize(20*1024*1024), grpc.UnaryInterceptor(grpc_middleware.ChainUnaryServer(unaryInterceptors...)), diff --git a/core/account.go b/core/account.go index 9e308f918..ded234abc 100644 --- a/core/account.go +++ b/core/account.go @@ -4,7 +4,6 @@ import ( "context" "github.com/anyproto/any-sync/net" - "google.golang.org/grpc/peer" "github.com/anyproto/anytype-heart/core/anytype/config" "github.com/anyproto/anytype-heart/core/application" @@ -13,6 +12,7 @@ import ( "github.com/anyproto/anytype-heart/pb" "github.com/anyproto/anytype-heart/pkg/lib/pb/model" "github.com/anyproto/anytype-heart/space/spacecore/storage/migrator" + "github.com/anyproto/anytype-heart/util/grpcprocess" ) func (mw *Middleware) AccountCreate(cctx context.Context, req *pb.RpcAccountCreateRequest) *pb.RpcAccountCreateResponse { @@ -250,8 +250,7 @@ func (mw *Middleware) AccountChangeJsonApiAddr(ctx context.Context, req *pb.RpcA func (mw *Middleware) AccountLocalLinkNewChallenge(ctx context.Context, request *pb.RpcAccountLocalLinkNewChallengeRequest) *pb.RpcAccountLocalLinkNewChallengeResponse { info := getClientInfo(ctx) - - challengeId, err := mw.applicationService.LinkLocalStartNewChallenge(request.Scope, &info) + challengeId, err := mw.applicationService.LinkLocalStartNewChallenge(request.Scope, &info, request.AppName) code := mapErrorCode(err, errToCode(session.ErrTooManyChallengeRequests, pb.RpcAccountLocalLinkNewChallengeResponseError_TOO_MANY_REQUESTS), errToCode(application.ErrApplicationIsNotRunning, pb.RpcAccountLocalLinkNewChallengeResponseError_ACCOUNT_IS_NOT_RUNNING), @@ -311,6 +310,7 @@ func (mw *Middleware) AccountLocalLinkListApps(_ context.Context, req *pb.RpcAcc appsList[i] = &model.AccountAuthAppInfo{ AppHash: app.AppHash, AppName: app.AppName, + AppKey: app.AppKey, CreatedAt: app.CreatedAt, ExpireAt: app.ExpireAt, Scope: model.AccountAuthLocalApiScope(app.Scope), @@ -338,16 +338,14 @@ func (mw *Middleware) AccountLocalLinkRevokeApp(_ context.Context, req *pb.RpcAc }, } } + func getClientInfo(ctx context.Context) pb.EventAccountLinkChallengeClientInfo { - p, ok := peer.FromContext(ctx) + info, ok := grpcprocess.FromContext(ctx) if !ok { return pb.EventAccountLinkChallengeClientInfo{} } - - // todo: get process info return pb.EventAccountLinkChallengeClientInfo{ - ProcessName: p.Addr.String(), - ProcessPath: "", - SignatureVerified: false, + ProcessName: info.Name, + ProcessPath: info.Path, } } diff --git a/core/application/sessions.go b/core/application/sessions.go index 87790622e..54dfea651 100644 --- a/core/application/sessions.go +++ b/core/application/sessions.go @@ -67,12 +67,12 @@ func (s *Service) ValidateSessionToken(token string) (model.AccountAuthLocalApiS return s.sessions.ValidateToken(s.sessionSigningKey, token) } -func (s *Service) LinkLocalStartNewChallenge(scope model.AccountAuthLocalApiScope, clientInfo *pb.EventAccountLinkChallengeClientInfo) (id string, err error) { +func (s *Service) LinkLocalStartNewChallenge(scope model.AccountAuthLocalApiScope, clientInfo *pb.EventAccountLinkChallengeClientInfo, name string) (id string, err error) { if s.app == nil { return "", ErrApplicationIsNotRunning } - id, value, err := s.sessions.StartNewChallenge(scope, clientInfo) + id, value, err := s.sessions.StartNewChallenge(scope, clientInfo, name) if err != nil { return "", err } diff --git a/core/session/challenge.go b/core/session/challenge.go index 4410a5782..80b2d41c4 100644 --- a/core/session/challenge.go +++ b/core/session/challenge.go @@ -27,7 +27,7 @@ var ( currentChallengesRequests = atomic.NewInt32(0) ) -func (s *service) StartNewChallenge(scope model.AccountAuthLocalApiScope, info *pb.EventAccountLinkChallengeClientInfo) (challengeId string, challengeValue string, err error) { +func (s *service) StartNewChallenge(scope model.AccountAuthLocalApiScope, info *pb.EventAccountLinkChallengeClientInfo, appName string) (challengeId string, challengeValue string, err error) { if currentChallengesRequests.Load() >= maxChallengesRequests { // todo: add limits per process? return "", "", ErrTooManyChallengeRequests @@ -50,6 +50,7 @@ func (s *service) StartNewChallenge(scope model.AccountAuthLocalApiScope, info * value: value, clientInfo: info, scope: scope, + appName: appName, } currentChallengesRequests.Inc() @@ -92,4 +93,5 @@ type challenge struct { value string clientInfo *pb.EventAccountLinkChallengeClientInfo scope model.AccountAuthLocalApiScope + appName string } diff --git a/core/session/service.go b/core/session/service.go index 83c6bc954..4db5908b6 100644 --- a/core/session/service.go +++ b/core/session/service.go @@ -16,7 +16,7 @@ const CName = "session" type Service interface { StartSession(privKey []byte, scope model.AccountAuthLocalApiScope) (string, error) ValidateToken(privKey []byte, token string) (model.AccountAuthLocalApiScope, error) - StartNewChallenge(scope model.AccountAuthLocalApiScope, info *pb.EventAccountLinkChallengeClientInfo) (id string, value string, err error) + StartNewChallenge(scope model.AccountAuthLocalApiScope, info *pb.EventAccountLinkChallengeClientInfo, appName string) (id string, value string, err error) SolveChallenge(challengeId string, challengeSolution string, signingKey []byte) (clientInfo *pb.EventAccountLinkChallengeClientInfo, token string, scope model.AccountAuthLocalApiScope, err error) CloseSession(token string) error diff --git a/core/wallet/applink.go b/core/wallet/applink.go index 686253916..ad9ce4cf3 100644 --- a/core/wallet/applink.go +++ b/core/wallet/applink.go @@ -29,6 +29,7 @@ var ErrAppLinkNotFound = fmt.Errorf("app link file not found in the account dire type AppLinkInfo struct { AppHash string `json:"-"` // filled at read time + AppKey string `json:"app_key"` AppName string `json:"app_name"` CreatedAt int64 `json:"created_at"` ExpireAt int64 `json:"expire_at"` @@ -80,7 +81,7 @@ func generate(dir string, accountPriv crypto.PrivKey, info *AppLinkInfo) (appKey return "", err } appKey = base64.StdEncoding.EncodeToString(key.Bytes()) - + info.AppKey = appKey file, err := buildV1(key.Bytes(), accountPriv, info) if err != nil { return "", err @@ -274,6 +275,7 @@ func buildV1(appKey []byte, accountPriv crypto.PrivKey, info *AppLinkInfo) (file if err != nil { return fileV1{}, err } + // 1. encrypt Info with X25519 sealed-box sealed, err := accountPriv.GetPublic().Encrypt(msg) if err != nil { diff --git a/docs/proto.md b/docs/proto.md index 2d90cdb6f..e297033d6 100644 --- a/docs/proto.md +++ b/docs/proto.md @@ -30556,8 +30556,8 @@ Contains basic information about a user account | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | appHash | [string](#string) | | | -| appName | [string](#string) | | just for info, not secure to rely on | -| appPath | [string](#string) | | for now, it is not verified | +| appName | [string](#string) | | either from process or specified manually when creating | +| appKey | [string](#string) | | | | createdAt | [int64](#int64) | | | | expireAt | [int64](#int64) | | | | scope | [Account.Auth.LocalApiScope](#anytype-model-Account-Auth-LocalApiScope) | | | diff --git a/pkg/lib/pb/model/models.pb.go b/pkg/lib/pb/model/models.pb.go index 6e3751966..cb5a4a74b 100644 --- a/pkg/lib/pb/model/models.pb.go +++ b/pkg/lib/pb/model/models.pb.go @@ -5776,11 +5776,11 @@ var xxx_messageInfo_AccountAuth proto.InternalMessageInfo type AccountAuthAppInfo struct { AppHash string `protobuf:"bytes,1,opt,name=appHash,proto3" json:"appHash,omitempty"` AppName string `protobuf:"bytes,2,opt,name=appName,proto3" json:"appName,omitempty"` - AppPath string `protobuf:"bytes,3,opt,name=appPath,proto3" json:"appPath,omitempty"` - CreatedAt int64 `protobuf:"varint,4,opt,name=createdAt,proto3" json:"createdAt,omitempty"` - ExpireAt int64 `protobuf:"varint,5,opt,name=expireAt,proto3" json:"expireAt,omitempty"` - Scope AccountAuthLocalApiScope `protobuf:"varint,6,opt,name=scope,proto3,enum=anytype.model.AccountAuthLocalApiScope" json:"scope,omitempty"` - IsActive bool `protobuf:"varint,7,opt,name=isActive,proto3" json:"isActive,omitempty"` + AppKey string `protobuf:"bytes,4,opt,name=appKey,proto3" json:"appKey,omitempty"` + CreatedAt int64 `protobuf:"varint,5,opt,name=createdAt,proto3" json:"createdAt,omitempty"` + ExpireAt int64 `protobuf:"varint,6,opt,name=expireAt,proto3" json:"expireAt,omitempty"` + Scope AccountAuthLocalApiScope `protobuf:"varint,7,opt,name=scope,proto3,enum=anytype.model.AccountAuthLocalApiScope" json:"scope,omitempty"` + IsActive bool `protobuf:"varint,8,opt,name=isActive,proto3" json:"isActive,omitempty"` } func (m *AccountAuthAppInfo) Reset() { *m = AccountAuthAppInfo{} } @@ -5830,9 +5830,9 @@ func (m *AccountAuthAppInfo) GetAppName() string { return "" } -func (m *AccountAuthAppInfo) GetAppPath() string { +func (m *AccountAuthAppInfo) GetAppKey() string { if m != nil { - return m.AppPath + return m.AppKey } return "" } @@ -9946,584 +9946,584 @@ var fileDescriptor_98a910b73321e591 = []byte{ 0xbb, 0xb3, 0xa3, 0x55, 0xcf, 0xee, 0xec, 0xae, 0x76, 0xb5, 0xd6, 0xae, 0xc4, 0xee, 0x66, 0x4f, 0x73, 0xa7, 0x5f, 0x2a, 0x72, 0x66, 0xb4, 0x0b, 0x3b, 0x9d, 0x6a, 0xd6, 0x6d, 0xb2, 0xd4, 0xc5, 0x2a, 0xaa, 0xea, 0xb2, 0xa7, 0x5b, 0x48, 0x02, 0xe5, 0x65, 0xc7, 0x7f, 0x4a, 0x10, 0xc7, 0x31, - 0x82, 0xc0, 0xd2, 0x47, 0x80, 0x20, 0x76, 0x90, 0x2f, 0x23, 0x71, 0x1e, 0x40, 0xec, 0xaf, 0x00, - 0xfe, 0x51, 0xf2, 0x15, 0x20, 0x01, 0x12, 0x48, 0x40, 0x3e, 0x12, 0xc4, 0x86, 0xf3, 0x25, 0x04, - 0xf9, 0x08, 0xce, 0xb9, 0xb7, 0x5e, 0x24, 0xbb, 0x87, 0xb3, 0xb6, 0x03, 0x7f, 0x35, 0xef, 0xa9, - 0x73, 0xce, 0x7d, 0x9f, 0x7b, 0x5e, 0xf7, 0x36, 0xbc, 0x32, 0x3e, 0x1d, 0x3c, 0x70, 0xec, 0xe3, - 0x07, 0xe3, 0xe3, 0x07, 0x23, 0xcf, 0x12, 0xce, 0x83, 0xb1, 0xef, 0x49, 0x2f, 0x50, 0x85, 0x60, - 0x9d, 0x4a, 0xbc, 0x66, 0xba, 0x17, 0xf2, 0x62, 0x2c, 0xd6, 0x09, 0xda, 0xb8, 0x3d, 0xf0, 0xbc, - 0x81, 0x23, 0x14, 0xea, 0xf1, 0xe4, 0xe4, 0x41, 0x20, 0xfd, 0x49, 0x5f, 0x2a, 0xe4, 0xe6, 0x4f, + 0x82, 0xc0, 0xd2, 0x47, 0x80, 0xc0, 0x76, 0x90, 0x2f, 0x23, 0x71, 0x1e, 0x40, 0xec, 0xaf, 0x00, + 0xfe, 0x51, 0xf2, 0x15, 0x20, 0x01, 0x12, 0x48, 0x40, 0x10, 0x20, 0x0f, 0xc3, 0xf9, 0x12, 0x82, + 0x7c, 0x04, 0xe7, 0xdc, 0x5b, 0x2f, 0x92, 0xdd, 0xc3, 0x59, 0xdb, 0x41, 0xbe, 0x9a, 0xe7, 0xd4, + 0x39, 0xa7, 0xee, 0xf3, 0xdc, 0xf3, 0xba, 0xd5, 0xf0, 0xca, 0xf8, 0x74, 0xf0, 0xc0, 0xb1, 0x8f, + 0x1f, 0x8c, 0x8f, 0x1f, 0x8c, 0x3c, 0x4b, 0x38, 0x0f, 0xc6, 0xbe, 0x27, 0xbd, 0x40, 0x01, 0xc1, + 0x3a, 0x41, 0xbc, 0x66, 0xba, 0x17, 0xf2, 0x62, 0x2c, 0xd6, 0x09, 0xdb, 0xb8, 0x3d, 0xf0, 0xbc, + 0x81, 0x23, 0x14, 0xe9, 0xf1, 0xe4, 0xe4, 0x41, 0x20, 0xfd, 0x49, 0x5f, 0x2a, 0xe2, 0xe6, 0x4f, 0xf2, 0x70, 0xb3, 0x3b, 0x32, 0x7d, 0xb9, 0xe1, 0x78, 0xfd, 0xd3, 0xae, 0x6b, 0x8e, 0x83, 0xa1, - 0x27, 0x37, 0xcc, 0x40, 0xf0, 0x37, 0xa0, 0x78, 0x8c, 0xc0, 0xa0, 0x9e, 0xb9, 0x9b, 0xbb, 0x57, - 0x7d, 0x78, 0x7d, 0x3d, 0xc5, 0x78, 0x9d, 0x28, 0x0c, 0x8d, 0xc3, 0xdf, 0x82, 0x92, 0x25, 0xa4, - 0x69, 0x3b, 0x41, 0x3d, 0x7b, 0x37, 0x73, 0xaf, 0xfa, 0xf0, 0xd6, 0xba, 0xaa, 0x78, 0x3d, 0xac, - 0x78, 0xbd, 0x4b, 0x15, 0x1b, 0x21, 0x1e, 0x7f, 0x0f, 0xca, 0x27, 0xb6, 0x23, 0x1e, 0x8b, 0x8b, - 0xa0, 0x9e, 0xbb, 0x92, 0x66, 0x23, 0x5b, 0xcf, 0x18, 0x11, 0x32, 0xdf, 0x84, 0x15, 0x71, 0x2e, - 0x7d, 0xd3, 0x10, 0x8e, 0x29, 0x6d, 0xcf, 0x0d, 0xea, 0x79, 0x6a, 0xe1, 0xad, 0xa9, 0x16, 0x86, - 0xdf, 0x89, 0x7c, 0x8a, 0x84, 0xdf, 0x85, 0xaa, 0x77, 0xfc, 0x5d, 0xd1, 0x97, 0xbd, 0x8b, 0xb1, - 0x08, 0xea, 0x85, 0xbb, 0xb9, 0x7b, 0x15, 0x23, 0x09, 0xe2, 0x5f, 0x87, 0x6a, 0xdf, 0x73, 0x1c, - 0xd1, 0x57, 0x75, 0x14, 0xaf, 0xee, 0x56, 0x12, 0x97, 0xbf, 0x03, 0x37, 0x7c, 0x31, 0xf2, 0xce, - 0x84, 0xb5, 0x19, 0x41, 0xa9, 0x9f, 0x65, 0xaa, 0x66, 0xfe, 0x47, 0xde, 0x82, 0x9a, 0xaf, 0xdb, - 0xb7, 0x6b, 0xbb, 0xa7, 0x41, 0xbd, 0x44, 0xdd, 0xfa, 0xfc, 0x25, 0xdd, 0x42, 0x1c, 0x23, 0x4d, - 0xc1, 0x19, 0xe4, 0x4e, 0xc5, 0x45, 0xbd, 0x72, 0x37, 0x73, 0xaf, 0x62, 0xe0, 0x4f, 0xfe, 0x01, - 0xd4, 0x3d, 0xdf, 0x1e, 0xd8, 0xae, 0xe9, 0x6c, 0xfa, 0xc2, 0x94, 0xc2, 0xea, 0xd9, 0x23, 0x11, - 0x48, 0x73, 0x34, 0xae, 0xc3, 0xdd, 0xcc, 0xbd, 0x9c, 0x71, 0xe9, 0x77, 0xfe, 0xb6, 0x9a, 0xa1, - 0x8e, 0x7b, 0xe2, 0xd5, 0xab, 0xba, 0xfb, 0xe9, 0xb6, 0x6c, 0xeb, 0xcf, 0x46, 0x84, 0xd8, 0xfc, - 0x79, 0x16, 0x8a, 0x5d, 0x61, 0xfa, 0xfd, 0x61, 0xe3, 0x57, 0x32, 0x50, 0x34, 0x44, 0x30, 0x71, - 0x24, 0x6f, 0x40, 0x59, 0x8d, 0x6d, 0xc7, 0xaa, 0x67, 0xa8, 0x75, 0x51, 0xf9, 0xb3, 0xac, 0x9d, - 0x75, 0xc8, 0x8f, 0x84, 0x34, 0xeb, 0x39, 0x1a, 0xa1, 0xc6, 0x54, 0xab, 0x54, 0xf5, 0xeb, 0x7b, - 0x42, 0x9a, 0x06, 0xe1, 0x35, 0x7e, 0x96, 0x81, 0x3c, 0x16, 0xf9, 0x6d, 0xa8, 0x0c, 0xed, 0xc1, - 0xd0, 0xb1, 0x07, 0x43, 0xa9, 0x1b, 0x12, 0x03, 0xf8, 0x47, 0xb0, 0x1a, 0x15, 0x0c, 0xd3, 0x1d, - 0x08, 0x6c, 0xd1, 0xbc, 0xc5, 0x4f, 0x1f, 0x8d, 0x69, 0x64, 0x5e, 0x87, 0x12, 0xed, 0x87, 0x8e, - 0x45, 0x2b, 0xba, 0x62, 0x84, 0x45, 0x5c, 0x6e, 0xe1, 0x4c, 0x3d, 0x16, 0x17, 0xf5, 0x3c, 0x7d, - 0x4d, 0x82, 0x78, 0x0b, 0x56, 0xc3, 0xe2, 0x96, 0x1e, 0x8d, 0xc2, 0xd5, 0xa3, 0x31, 0x8d, 0xdf, - 0xfc, 0xc1, 0x1e, 0x14, 0x68, 0x5b, 0xf2, 0x15, 0xc8, 0xda, 0xe1, 0x40, 0x67, 0x6d, 0x8b, 0x3f, - 0x80, 0xe2, 0x89, 0x2d, 0x1c, 0xeb, 0x85, 0x23, 0xac, 0xd1, 0x78, 0x1b, 0x96, 0x7d, 0x11, 0x48, - 0xdf, 0xd6, 0xab, 0x5f, 0x6d, 0xd0, 0x2f, 0xce, 0x93, 0x01, 0xeb, 0x46, 0x02, 0xd1, 0x48, 0x91, - 0x61, 0xb7, 0xfb, 0x43, 0xdb, 0xb1, 0x7c, 0xe1, 0x76, 0x2c, 0xb5, 0x4f, 0x2b, 0x46, 0x12, 0xc4, - 0xef, 0xc1, 0xea, 0xb1, 0xd9, 0x3f, 0x1d, 0xf8, 0xde, 0xc4, 0xc5, 0x0d, 0xe1, 0xf9, 0xd4, 0xed, - 0x8a, 0x31, 0x0d, 0xe6, 0x6f, 0x42, 0xc1, 0x74, 0xec, 0x81, 0x4b, 0x3b, 0x71, 0x65, 0x66, 0xd2, - 0x55, 0x5b, 0x5a, 0x88, 0x61, 0x28, 0x44, 0xbe, 0x03, 0xb5, 0x33, 0xe1, 0x4b, 0xbb, 0x6f, 0x3a, - 0x04, 0xaf, 0x97, 0x88, 0xb2, 0x39, 0x97, 0xf2, 0x69, 0x12, 0xd3, 0x48, 0x13, 0xf2, 0x0e, 0x40, - 0x80, 0x62, 0x92, 0xa6, 0x53, 0xef, 0x85, 0xd7, 0xe6, 0xb2, 0xd9, 0xf4, 0x5c, 0x29, 0x5c, 0xb9, - 0xde, 0x8d, 0xd0, 0x77, 0x96, 0x8c, 0x04, 0x31, 0x7f, 0x0f, 0xf2, 0x52, 0x9c, 0xcb, 0xfa, 0xca, - 0x15, 0x23, 0x1a, 0x32, 0xe9, 0x89, 0x73, 0xb9, 0xb3, 0x64, 0x10, 0x01, 0x12, 0xe2, 0x26, 0xab, - 0xaf, 0x2e, 0x40, 0x88, 0xfb, 0x12, 0x09, 0x91, 0x80, 0x7f, 0x08, 0x45, 0xc7, 0xbc, 0xf0, 0x26, - 0xb2, 0xce, 0x88, 0xf4, 0x4b, 0x57, 0x92, 0xee, 0x12, 0xea, 0xce, 0x92, 0xa1, 0x89, 0xf8, 0x3b, - 0x90, 0xb3, 0xec, 0xb3, 0xfa, 0x1a, 0xd1, 0xde, 0xbd, 0x92, 0x76, 0xcb, 0x3e, 0xdb, 0x59, 0x32, - 0x10, 0x9d, 0x6f, 0x42, 0xf9, 0xd8, 0xf3, 0x4e, 0x47, 0xa6, 0x7f, 0x5a, 0xe7, 0x44, 0xfa, 0xe5, - 0x2b, 0x49, 0x37, 0x34, 0xf2, 0xce, 0x92, 0x11, 0x11, 0x62, 0x97, 0xed, 0xbe, 0xe7, 0xd6, 0xaf, - 0x2d, 0xd0, 0xe5, 0x4e, 0xdf, 0x73, 0xb1, 0xcb, 0x48, 0x80, 0x84, 0x8e, 0xed, 0x9e, 0xd6, 0xaf, - 0x2f, 0x40, 0x88, 0x92, 0x13, 0x09, 0x91, 0x00, 0x9b, 0x6d, 0x99, 0xd2, 0x3c, 0xb3, 0xc5, 0xf3, - 0xfa, 0x8d, 0x05, 0x9a, 0xbd, 0xa5, 0x91, 0xb1, 0xd9, 0x21, 0x21, 0x32, 0x09, 0xb7, 0x66, 0xfd, - 0xe6, 0x02, 0x4c, 0x42, 0x89, 0x8e, 0x4c, 0x42, 0x42, 0xfe, 0x17, 0x61, 0xed, 0x44, 0x98, 0x72, - 0xe2, 0x0b, 0x2b, 0x3e, 0xe8, 0x6e, 0x11, 0xb7, 0xf5, 0xab, 0xe7, 0x7e, 0x9a, 0x6a, 0x67, 0xc9, - 0x98, 0x65, 0xc5, 0x3f, 0x80, 0x82, 0x63, 0x4a, 0x71, 0x5e, 0xaf, 0x13, 0xcf, 0xe6, 0x0b, 0x16, - 0x85, 0x14, 0xe7, 0x3b, 0x4b, 0x86, 0x22, 0xe1, 0xdf, 0x81, 0x55, 0x69, 0x1e, 0x3b, 0xe2, 0xe0, - 0x44, 0x23, 0x04, 0xf5, 0xcf, 0x11, 0x97, 0x37, 0xae, 0x5e, 0xce, 0x69, 0x9a, 0x9d, 0x25, 0x63, - 0x9a, 0x0d, 0xb6, 0x8a, 0x40, 0xf5, 0xc6, 0x02, 0xad, 0x22, 0x7e, 0xd8, 0x2a, 0x22, 0xe1, 0xbb, - 0x50, 0xa5, 0x1f, 0x9b, 0x9e, 0x33, 0x19, 0xb9, 0xf5, 0xcf, 0x13, 0x87, 0x7b, 0x2f, 0xe6, 0xa0, - 0xf0, 0x77, 0x96, 0x8c, 0x24, 0x39, 0x4e, 0x22, 0x15, 0x0d, 0xef, 0x79, 0xfd, 0xf6, 0x02, 0x93, - 0xd8, 0xd3, 0xc8, 0x38, 0x89, 0x21, 0x21, 0x6e, 0xbd, 0xe7, 0xb6, 0x35, 0x10, 0xb2, 0xfe, 0x85, - 0x05, 0xb6, 0xde, 0x33, 0x42, 0xc5, 0xad, 0xa7, 0x88, 0x70, 0x19, 0xf7, 0x87, 0xa6, 0xac, 0xdf, - 0x59, 0x60, 0x19, 0x6f, 0x0e, 0x4d, 0x92, 0x15, 0x48, 0xd0, 0xf8, 0x3e, 0x2c, 0x27, 0xa5, 0x32, - 0xe7, 0x90, 0xf7, 0x85, 0xa9, 0x4e, 0x84, 0xb2, 0x41, 0xbf, 0x11, 0x26, 0x2c, 0x5b, 0xd2, 0x89, - 0x50, 0x36, 0xe8, 0x37, 0xbf, 0x09, 0x45, 0xa5, 0x9b, 0x90, 0xc0, 0x2f, 0x1b, 0xba, 0x84, 0xb8, - 0x96, 0x6f, 0x0e, 0xe8, 0xdc, 0x2a, 0x1b, 0xf4, 0x1b, 0x71, 0x2d, 0xdf, 0x1b, 0x1f, 0xb8, 0x24, - 0xb0, 0xcb, 0x86, 0x2e, 0x35, 0x7e, 0xf6, 0x21, 0x94, 0x74, 0xa3, 0x1a, 0xff, 0x28, 0x03, 0x45, - 0x25, 0x50, 0xf8, 0x37, 0xa1, 0x10, 0xc8, 0x0b, 0x47, 0x50, 0x1b, 0x56, 0x1e, 0xbe, 0xbe, 0x80, - 0x10, 0x5a, 0xef, 0x22, 0x81, 0xa1, 0xe8, 0x9a, 0x06, 0x14, 0xa8, 0xcc, 0x4b, 0x90, 0x33, 0xbc, - 0xe7, 0x6c, 0x89, 0x03, 0x14, 0xd5, 0x64, 0xb1, 0x0c, 0x02, 0xb7, 0xec, 0x33, 0x96, 0x45, 0xe0, - 0x8e, 0x30, 0x2d, 0xe1, 0xb3, 0x1c, 0xaf, 0x41, 0x25, 0x9c, 0x96, 0x80, 0xe5, 0x39, 0x83, 0xe5, - 0xc4, 0x84, 0x07, 0xac, 0xd0, 0xf8, 0xdf, 0x79, 0xc8, 0xe3, 0xfe, 0xe7, 0xaf, 0x40, 0x4d, 0x9a, - 0xfe, 0x40, 0x28, 0x45, 0x38, 0x52, 0x52, 0xd2, 0x40, 0xfe, 0x61, 0xd8, 0x87, 0x2c, 0xf5, 0xe1, - 0xb5, 0x17, 0xca, 0x95, 0x54, 0x0f, 0x12, 0xa7, 0x70, 0x6e, 0xb1, 0x53, 0x78, 0x1b, 0xca, 0x28, - 0xce, 0xba, 0xf6, 0xf7, 0x05, 0x0d, 0xfd, 0xca, 0xc3, 0xfb, 0x2f, 0xae, 0xb2, 0xa3, 0x29, 0x8c, - 0x88, 0x96, 0x77, 0xa0, 0xd2, 0x37, 0x7d, 0x8b, 0x1a, 0x43, 0xb3, 0xb5, 0xf2, 0xf0, 0x2b, 0x2f, - 0x66, 0xb4, 0x19, 0x92, 0x18, 0x31, 0x35, 0x3f, 0x80, 0xaa, 0x25, 0x82, 0xbe, 0x6f, 0x8f, 0x49, - 0xbc, 0xa9, 0xb3, 0xf8, 0xab, 0x2f, 0x66, 0xb6, 0x15, 0x13, 0x19, 0x49, 0x0e, 0xa8, 0x91, 0xf9, - 0x91, 0x7c, 0x2b, 0x91, 0x82, 0x10, 0x03, 0x9a, 0xef, 0x41, 0x39, 0xec, 0x0f, 0x5f, 0x86, 0x32, - 0xfe, 0xdd, 0xf7, 0x5c, 0xc1, 0x96, 0x70, 0x6e, 0xb1, 0xd4, 0x1d, 0x99, 0x8e, 0xc3, 0x32, 0x7c, - 0x05, 0x00, 0x8b, 0x7b, 0xc2, 0xb2, 0x27, 0x23, 0x96, 0x6d, 0xfe, 0x42, 0xb8, 0x5a, 0xca, 0x90, - 0x3f, 0x34, 0x07, 0x48, 0xb1, 0x0c, 0xe5, 0x50, 0x5c, 0xb3, 0x0c, 0xd2, 0x6f, 0x99, 0xc1, 0xf0, - 0xd8, 0x33, 0x7d, 0x8b, 0x65, 0x79, 0x15, 0x4a, 0x2d, 0xbf, 0x3f, 0xb4, 0xcf, 0x04, 0xcb, 0x35, - 0x1f, 0x40, 0x35, 0xd1, 0x5e, 0x64, 0xa1, 0x2b, 0xad, 0x40, 0xa1, 0x65, 0x59, 0xc2, 0x62, 0x19, - 0x24, 0xd0, 0x1d, 0x64, 0xd9, 0xe6, 0x57, 0xa0, 0x12, 0x8d, 0x16, 0xa2, 0xe3, 0xc1, 0xcd, 0x96, - 0xf0, 0x17, 0x82, 0x59, 0x06, 0x57, 0x65, 0xc7, 0x75, 0x6c, 0x57, 0xb0, 0x6c, 0xe3, 0x2f, 0xd1, - 0x52, 0xe5, 0xdf, 0x48, 0x6f, 0x88, 0x57, 0x5f, 0x74, 0xb2, 0xa6, 0x77, 0xc3, 0xe7, 0x13, 0xfd, - 0xdb, 0xb5, 0xa9, 0x71, 0x65, 0xc8, 0x6f, 0x79, 0x32, 0x60, 0x99, 0xc6, 0xff, 0xcc, 0x42, 0x39, - 0x3c, 0x50, 0xd1, 0x26, 0x98, 0xf8, 0x8e, 0x5e, 0xd0, 0xf8, 0x93, 0x5f, 0x87, 0x82, 0xb4, 0xa5, - 0x5e, 0xc6, 0x15, 0x43, 0x15, 0x50, 0x57, 0x4b, 0xce, 0xac, 0x52, 0x60, 0xa7, 0xa7, 0xca, 0x1e, - 0x99, 0x03, 0xb1, 0x63, 0x06, 0x43, 0xad, 0xc2, 0xc6, 0x00, 0xa4, 0x3f, 0x31, 0xcf, 0x70, 0xcd, - 0xd1, 0x77, 0xa5, 0xc5, 0x25, 0x41, 0xfc, 0x6d, 0xc8, 0x63, 0x07, 0xf5, 0xa2, 0xf9, 0x0b, 0x53, - 0x1d, 0xc6, 0x65, 0x72, 0xe8, 0x0b, 0x9c, 0x9e, 0x75, 0xb4, 0xc0, 0x0c, 0x42, 0xe6, 0xaf, 0xc2, - 0x8a, 0xda, 0x84, 0x07, 0xa1, 0xfd, 0x50, 0x22, 0xce, 0x53, 0x50, 0xde, 0xc2, 0xe1, 0x34, 0xa5, - 0xa8, 0x97, 0x17, 0x58, 0xdf, 0xe1, 0xe0, 0xac, 0x77, 0x91, 0xc4, 0x50, 0x94, 0xcd, 0x77, 0x71, - 0x4c, 0x4d, 0x29, 0x70, 0x9a, 0xdb, 0xa3, 0xb1, 0xbc, 0x50, 0x8b, 0x66, 0x5b, 0xc8, 0xfe, 0xd0, - 0x76, 0x07, 0x2c, 0xa3, 0x86, 0x18, 0x27, 0x91, 0x50, 0x7c, 0xdf, 0xf3, 0x59, 0xae, 0xd1, 0x80, - 0x3c, 0xae, 0x51, 0x14, 0x92, 0xae, 0x39, 0x12, 0x7a, 0xa4, 0xe9, 0x77, 0xe3, 0x1a, 0xac, 0xcd, - 0x9c, 0xc7, 0x8d, 0xdf, 0x2d, 0xaa, 0x15, 0x82, 0x14, 0xa4, 0x0b, 0x6a, 0x0a, 0x52, 0xf3, 0x5e, - 0x4a, 0xc6, 0x20, 0x97, 0xb4, 0x8c, 0xf9, 0x10, 0x0a, 0xd8, 0xb1, 0x50, 0xc4, 0x2c, 0x40, 0xbe, - 0x87, 0xe8, 0x86, 0xa2, 0x42, 0x0b, 0xa6, 0x3f, 0x14, 0xfd, 0x53, 0x61, 0x69, 0x59, 0x1f, 0x16, - 0x71, 0xd1, 0xf4, 0x13, 0xea, 0xb9, 0x2a, 0xd0, 0x92, 0xe8, 0x7b, 0x6e, 0x7b, 0xe4, 0x7d, 0xd7, - 0xa6, 0x79, 0xc5, 0x25, 0x11, 0x02, 0xc2, 0xaf, 0x1d, 0x5c, 0x23, 0x7a, 0xda, 0x62, 0x40, 0xa3, - 0x0d, 0x05, 0xaa, 0x1b, 0x77, 0x82, 0x6a, 0xb3, 0xf2, 0x34, 0xbc, 0xba, 0x58, 0x9b, 0x75, 0x93, - 0x1b, 0xbf, 0x9d, 0x85, 0x3c, 0x96, 0xf9, 0x7d, 0x28, 0xf8, 0x68, 0x87, 0xd1, 0x70, 0x5e, 0x66, - 0xb3, 0x29, 0x14, 0xfe, 0x4d, 0xbd, 0x14, 0xb3, 0x0b, 0x2c, 0x96, 0xa8, 0xc6, 0xe4, 0xb2, 0xbc, - 0x0e, 0x85, 0xb1, 0xe9, 0x9b, 0x23, 0xbd, 0x4f, 0x54, 0xa1, 0xf9, 0xa3, 0x0c, 0xe4, 0x11, 0x89, - 0xaf, 0x41, 0xad, 0x2b, 0x7d, 0xfb, 0x54, 0xc8, 0xa1, 0xef, 0x4d, 0x06, 0x43, 0xb5, 0x92, 0x1e, - 0x8b, 0x0b, 0x25, 0x6f, 0x94, 0x40, 0x90, 0xa6, 0x63, 0xf7, 0x59, 0x16, 0x57, 0xd5, 0x86, 0xe7, - 0x58, 0x2c, 0xc7, 0x57, 0xa1, 0xfa, 0xc4, 0xb5, 0x84, 0x1f, 0xf4, 0x3d, 0x5f, 0x58, 0x2c, 0xaf, - 0x77, 0xf7, 0x29, 0x2b, 0xd0, 0x59, 0x26, 0xce, 0x25, 0xd9, 0x42, 0xac, 0xc8, 0xaf, 0xc1, 0xea, - 0x46, 0xda, 0x40, 0x62, 0x25, 0x94, 0x49, 0x7b, 0xc2, 0xc5, 0x45, 0xc6, 0xca, 0x6a, 0x11, 0x7b, - 0xdf, 0xb5, 0x59, 0x05, 0x2b, 0x53, 0xfb, 0x84, 0x41, 0xf3, 0xdf, 0x64, 0x42, 0xc9, 0x51, 0x83, - 0xca, 0xa1, 0xe9, 0x9b, 0x03, 0xdf, 0x1c, 0x63, 0xfb, 0xaa, 0x50, 0x52, 0x07, 0xe7, 0x5b, 0x4a, - 0xba, 0xa9, 0xc2, 0x43, 0x25, 0x1b, 0x55, 0xe1, 0x6d, 0x96, 0x8b, 0x0b, 0xef, 0xb0, 0x3c, 0xd6, - 0xf1, 0xed, 0x89, 0x27, 0x05, 0x2b, 0x90, 0xac, 0xf3, 0x2c, 0xc1, 0x8a, 0x08, 0xec, 0xa1, 0x44, - 0x61, 0x25, 0xec, 0xf3, 0x26, 0xae, 0x9f, 0x63, 0xef, 0x9c, 0x95, 0xb1, 0x19, 0x38, 0x8c, 0xc2, - 0x62, 0x15, 0xfc, 0xb2, 0x3f, 0x19, 0x1d, 0x0b, 0xec, 0x26, 0xe0, 0x97, 0x9e, 0x37, 0x18, 0x38, - 0x82, 0x55, 0x71, 0x0c, 0x12, 0xc2, 0x97, 0x2d, 0x93, 0xa4, 0x35, 0x1d, 0xc7, 0x9b, 0x48, 0x56, - 0x6b, 0xfc, 0x3c, 0x07, 0x79, 0xb4, 0x6e, 0x70, 0xef, 0x0c, 0x51, 0xce, 0xe8, 0xbd, 0x83, 0xbf, - 0xa3, 0x1d, 0x98, 0x8d, 0x77, 0x20, 0xff, 0x40, 0xcf, 0x74, 0x6e, 0x01, 0x29, 0x8b, 0x8c, 0x93, - 0x93, 0xcc, 0x21, 0x3f, 0xb2, 0x47, 0x42, 0xcb, 0x3a, 0xfa, 0x8d, 0xb0, 0x00, 0xcf, 0xe3, 0x02, - 0x39, 0x4f, 0xe8, 0x37, 0xee, 0x1a, 0x13, 0x8f, 0x85, 0x96, 0xa4, 0x3d, 0x90, 0x33, 0xc2, 0xe2, - 0x1c, 0xe9, 0x55, 0x99, 0x2b, 0xbd, 0x3e, 0x0c, 0xa5, 0x57, 0x69, 0x81, 0x5d, 0x4f, 0xcd, 0x4c, - 0x4a, 0xae, 0x58, 0x68, 0x94, 0x17, 0x27, 0x4f, 0x1c, 0x26, 0x5b, 0x7a, 0xd5, 0xc6, 0x07, 0x5d, - 0x59, 0x8d, 0x32, 0xcb, 0xe0, 0x6c, 0xd2, 0x76, 0x55, 0x32, 0xef, 0xa9, 0x6d, 0x09, 0x8f, 0xe5, - 0xe8, 0x20, 0x9c, 0x58, 0xb6, 0xc7, 0xf2, 0xa8, 0x79, 0x1d, 0x6e, 0x6d, 0xb3, 0x42, 0xf3, 0xd5, - 0xc4, 0x91, 0xd4, 0x9a, 0x48, 0x4f, 0xb1, 0xa1, 0xe5, 0x9b, 0x51, 0xab, 0xf1, 0x58, 0x58, 0x2c, - 0xdb, 0xfc, 0xda, 0x1c, 0x31, 0x5b, 0x83, 0xca, 0x93, 0xb1, 0xe3, 0x99, 0xd6, 0x15, 0x72, 0x76, - 0x19, 0x20, 0xb6, 0xaa, 0x1b, 0x3f, 0x6f, 0xc6, 0xc7, 0x39, 0xea, 0xa2, 0x81, 0x37, 0xf1, 0xfb, - 0x82, 0x44, 0x48, 0xc5, 0xd0, 0x25, 0xfe, 0x2d, 0x28, 0xe0, 0xf7, 0xd0, 0x8d, 0x73, 0x7f, 0x21, - 0x5b, 0x6e, 0xfd, 0xa9, 0x2d, 0x9e, 0x1b, 0x8a, 0x90, 0xdf, 0x01, 0x30, 0xfb, 0xd2, 0x3e, 0x13, - 0x08, 0xd4, 0x9b, 0x3d, 0x01, 0xe1, 0xef, 0x26, 0xd5, 0x97, 0xab, 0xfd, 0x90, 0x09, 0xbd, 0x86, - 0x1b, 0x50, 0xc5, 0xad, 0x3b, 0x3e, 0xf0, 0x71, 0xb7, 0xd7, 0x97, 0x89, 0xf0, 0xcd, 0xc5, 0x9a, - 0xf7, 0x28, 0x22, 0x34, 0x92, 0x4c, 0xf8, 0x13, 0x58, 0x56, 0x3e, 0x35, 0xcd, 0xb4, 0x46, 0x4c, - 0xdf, 0x5a, 0x8c, 0xe9, 0x41, 0x4c, 0x69, 0xa4, 0xd8, 0xcc, 0xba, 0x25, 0x0b, 0x2f, 0xed, 0x96, - 0x7c, 0x15, 0x56, 0x7a, 0xe9, 0x5d, 0xa0, 0x8e, 0x8a, 0x29, 0x28, 0x6f, 0xc2, 0xb2, 0x1d, 0xc4, - 0x5e, 0x51, 0xf2, 0x91, 0x94, 0x8d, 0x14, 0xac, 0xf1, 0x1f, 0x8a, 0x90, 0xa7, 0x91, 0x9f, 0xf6, - 0x71, 0x6d, 0xa6, 0x44, 0xfa, 0x83, 0xc5, 0xa7, 0x7a, 0x6a, 0xc7, 0x93, 0x04, 0xc9, 0x25, 0x24, - 0xc8, 0xb7, 0xa0, 0x10, 0x78, 0xbe, 0x0c, 0xa7, 0x77, 0xc1, 0x45, 0xd4, 0xf5, 0x7c, 0x69, 0x28, - 0x42, 0xbe, 0x0d, 0xa5, 0x13, 0xdb, 0x91, 0x38, 0x29, 0x6a, 0xf0, 0xde, 0x58, 0x8c, 0xc7, 0x36, - 0x11, 0x19, 0x21, 0x31, 0xdf, 0x4d, 0x2e, 0xb6, 0x22, 0x71, 0x5a, 0x5f, 0x8c, 0xd3, 0xbc, 0x35, - 0x78, 0x1f, 0x58, 0xdf, 0x3b, 0x13, 0xbe, 0x91, 0x70, 0x4c, 0xaa, 0x43, 0x7a, 0x06, 0xce, 0x1b, - 0x50, 0x1e, 0xda, 0x96, 0x40, 0x3d, 0x87, 0x64, 0x4c, 0xd9, 0x88, 0xca, 0xfc, 0x31, 0x94, 0xc9, - 0x3e, 0x40, 0xa9, 0x58, 0x79, 0xe9, 0xc1, 0x57, 0xa6, 0x4a, 0xc8, 0x00, 0x2b, 0xa2, 0xca, 0xb7, - 0x6d, 0x49, 0xfe, 0xe9, 0xb2, 0x11, 0x95, 0xb1, 0xc1, 0xb4, 0xde, 0x93, 0x0d, 0xae, 0xaa, 0x06, - 0x4f, 0xc3, 0xf9, 0x3b, 0x70, 0x83, 0x60, 0x53, 0x87, 0x24, 0x6e, 0x35, 0x64, 0x3a, 0xff, 0x23, - 0x2a, 0x2c, 0x63, 0x73, 0x20, 0x76, 0xed, 0x91, 0x2d, 0xeb, 0xb5, 0xbb, 0x99, 0x7b, 0x05, 0x23, - 0x06, 0xf0, 0x37, 0x60, 0xcd, 0x12, 0x27, 0xe6, 0xc4, 0x91, 0x3d, 0x31, 0x1a, 0x3b, 0xa6, 0x14, - 0x1d, 0x8b, 0xd6, 0x68, 0xc5, 0x98, 0xfd, 0xc0, 0xdf, 0x84, 0x6b, 0x1a, 0x78, 0x10, 0x45, 0x15, - 0x3a, 0x16, 0xb9, 0xef, 0x2a, 0xc6, 0xbc, 0x4f, 0xcd, 0x3d, 0x2d, 0x86, 0xf1, 0x00, 0x45, 0x3b, - 0x35, 0x14, 0xa0, 0x81, 0x54, 0x27, 0xf2, 0x23, 0xd3, 0x71, 0x84, 0x7f, 0xa1, 0x8c, 0xdc, 0xc7, - 0xa6, 0x7b, 0x6c, 0xba, 0x2c, 0x47, 0x67, 0xac, 0xe9, 0x08, 0xd7, 0x32, 0x7d, 0x75, 0x22, 0x3f, - 0xa2, 0x03, 0xbd, 0xd0, 0xbc, 0x07, 0x79, 0x1a, 0xd2, 0x0a, 0x14, 0x94, 0x95, 0x44, 0x16, 0xb3, - 0xb6, 0x90, 0x48, 0x22, 0xef, 0xe2, 0xf6, 0x63, 0xd9, 0xc6, 0x3f, 0x2e, 0x42, 0x39, 0x1c, 0xbc, - 0x30, 0x86, 0x90, 0x89, 0x63, 0x08, 0xa8, 0xc6, 0x05, 0x4f, 0xed, 0xc0, 0x3e, 0xd6, 0x6a, 0x69, - 0xd9, 0x88, 0x01, 0xa8, 0x09, 0x3d, 0xb7, 0x2d, 0x39, 0xa4, 0x3d, 0x53, 0x30, 0x54, 0x81, 0xdf, - 0x83, 0x55, 0x0b, 0xc7, 0xc1, 0xed, 0x3b, 0x13, 0x4b, 0xf4, 0xf0, 0x14, 0x55, 0x6e, 0x82, 0x69, - 0x30, 0xff, 0x04, 0x40, 0xda, 0x23, 0xb1, 0xed, 0xf9, 0x23, 0x53, 0x6a, 0xdb, 0xe0, 0xeb, 0x2f, - 0xb7, 0xaa, 0xd7, 0x7b, 0x11, 0x03, 0x23, 0xc1, 0x0c, 0x59, 0x63, 0x6d, 0x9a, 0x75, 0xe9, 0x33, - 0xb1, 0xde, 0x8a, 0x18, 0x18, 0x09, 0x66, 0xbc, 0x07, 0xa5, 0x13, 0xcf, 0x1f, 0x4d, 0x1c, 0x53, - 0x9f, 0xb9, 0x1f, 0xbc, 0x24, 0xdf, 0x6d, 0x45, 0x4d, 0xb2, 0x27, 0x64, 0x15, 0xfb, 0xb8, 0x2b, - 0x0b, 0xfa, 0xb8, 0x9b, 0xbf, 0x08, 0x10, 0xb7, 0x90, 0xdf, 0x04, 0xbe, 0xe7, 0xb9, 0x72, 0xd8, - 0x3a, 0x3e, 0xf6, 0x37, 0xc4, 0x89, 0xe7, 0x8b, 0x2d, 0x13, 0x8f, 0xd7, 0x1b, 0xb0, 0x16, 0xc1, - 0x5b, 0x27, 0x52, 0xf8, 0x08, 0xa6, 0x25, 0xd0, 0x1d, 0x7a, 0xbe, 0x54, 0x3a, 0x1e, 0xfd, 0x7c, - 0xd2, 0x65, 0x39, 0x3c, 0xd2, 0x3b, 0xdd, 0x03, 0x96, 0x6f, 0xde, 0x03, 0x88, 0x87, 0x96, 0x6c, - 0x21, 0xfa, 0xf5, 0xd6, 0x43, 0x6d, 0x19, 0x51, 0xe9, 0xe1, 0x3b, 0x2c, 0xd3, 0xfc, 0x69, 0x06, - 0xaa, 0x89, 0x2e, 0xa5, 0x6d, 0xe6, 0x4d, 0x6f, 0xe2, 0x4a, 0x65, 0xa4, 0xd3, 0xcf, 0xa7, 0xa6, - 0x33, 0xc1, 0xc3, 0x7d, 0x0d, 0x6a, 0x54, 0xde, 0xb2, 0x03, 0x69, 0xbb, 0x7d, 0xc9, 0x72, 0x11, - 0x8a, 0x52, 0x0c, 0xf2, 0x11, 0xca, 0xbe, 0xa7, 0x41, 0x05, 0xce, 0x60, 0xf9, 0x50, 0xf8, 0x7d, - 0x11, 0x22, 0x91, 0x32, 0xac, 0x21, 0x11, 0x9a, 0x52, 0x86, 0x4d, 0x39, 0xec, 0x4e, 0x46, 0xac, - 0x8c, 0x4a, 0x25, 0x16, 0x5a, 0x67, 0xc2, 0x47, 0x5d, 0xa6, 0x82, 0xf5, 0x20, 0x00, 0x77, 0x83, - 0xe9, 0x32, 0x08, 0xb1, 0xf7, 0x6c, 0x97, 0x55, 0xa3, 0x82, 0x79, 0xce, 0x96, 0xb1, 0xfd, 0x64, - 0x3a, 0xb0, 0x5a, 0xe3, 0xbf, 0xe7, 0x20, 0x8f, 0x72, 0x1d, 0x6d, 0xdd, 0xa4, 0x10, 0x52, 0x7b, - 0x25, 0x09, 0xfa, 0x6c, 0xa7, 0x11, 0xf2, 0x4e, 0x9e, 0x46, 0xef, 0x43, 0xb5, 0x3f, 0x09, 0xa4, - 0x37, 0xa2, 0xa3, 0x58, 0x47, 0xbb, 0x6e, 0xce, 0x78, 0x8d, 0x68, 0x38, 0x8d, 0x24, 0x2a, 0x7f, - 0x17, 0x8a, 0x27, 0x6a, 0xd5, 0x2b, 0xbf, 0xd1, 0x17, 0x2e, 0x39, 0xad, 0xf5, 0xca, 0xd6, 0xc8, - 0xd8, 0x2f, 0x7b, 0x66, 0xc7, 0x26, 0x41, 0xfa, 0xd4, 0x2d, 0x46, 0xa7, 0xee, 0x2f, 0xc2, 0x8a, - 0xc0, 0x01, 0x3f, 0x74, 0xcc, 0xbe, 0x18, 0x09, 0x37, 0xdc, 0x66, 0xef, 0xbc, 0x44, 0x8f, 0x69, - 0xc6, 0xa8, 0xdb, 0x53, 0xbc, 0x50, 0xf2, 0xb8, 0x1e, 0x1e, 0xfe, 0xa1, 0x61, 0x5f, 0x36, 0x62, - 0x40, 0xf3, 0xcb, 0x5a, 0x5e, 0x96, 0x20, 0xd7, 0x0a, 0xfa, 0xda, 0x03, 0x22, 0x82, 0xbe, 0x32, - 0xaf, 0x36, 0x69, 0x38, 0x58, 0xb6, 0xf9, 0x16, 0x54, 0xa2, 0x1a, 0x70, 0xf1, 0xec, 0x7b, 0xb2, - 0x3b, 0x16, 0x7d, 0xfb, 0xc4, 0x16, 0x96, 0x5a, 0x9f, 0x5d, 0x69, 0xfa, 0x52, 0x39, 0x11, 0xdb, - 0xae, 0xc5, 0xb2, 0x8d, 0xdf, 0x2a, 0x43, 0x51, 0x1d, 0xbe, 0xba, 0xc3, 0x95, 0xa8, 0xc3, 0xdf, - 0x86, 0xb2, 0x37, 0x16, 0xbe, 0x29, 0x3d, 0x5f, 0x7b, 0x6e, 0xde, 0x7d, 0x99, 0xc3, 0x7c, 0xfd, - 0x40, 0x13, 0x1b, 0x11, 0x9b, 0xe9, 0xd5, 0x94, 0x9d, 0x5d, 0x4d, 0xf7, 0x81, 0x85, 0xe7, 0xf6, - 0xa1, 0x8f, 0x74, 0xf2, 0x42, 0xdb, 0xe1, 0x33, 0x70, 0xde, 0x83, 0x4a, 0xdf, 0x73, 0x2d, 0x3b, - 0xf2, 0xe2, 0xac, 0x3c, 0xfc, 0xda, 0x4b, 0xb5, 0x70, 0x33, 0xa4, 0x36, 0x62, 0x46, 0xfc, 0x0d, - 0x28, 0x9c, 0xe1, 0x32, 0xa3, 0xf5, 0x74, 0xf9, 0x22, 0x54, 0x48, 0xfc, 0x53, 0xa8, 0x7e, 0x6f, - 0x62, 0xf7, 0x4f, 0x0f, 0x92, 0x5e, 0xc2, 0xf7, 0x5f, 0xaa, 0x15, 0xdf, 0x8e, 0xe9, 0x8d, 0x24, - 0xb3, 0xc4, 0xd2, 0x2e, 0xfd, 0x09, 0x96, 0x76, 0x79, 0x76, 0x69, 0x1b, 0x50, 0x73, 0x45, 0x20, - 0x85, 0xb5, 0xad, 0x75, 0x35, 0xf8, 0x0c, 0xba, 0x5a, 0x9a, 0x45, 0xf3, 0x4b, 0x50, 0x0e, 0x27, - 0x9c, 0x17, 0x21, 0xbb, 0x8f, 0x46, 0x51, 0x11, 0xb2, 0x07, 0xbe, 0x5a, 0x6d, 0x2d, 0x5c, 0x6d, - 0xcd, 0x3f, 0xca, 0x40, 0x25, 0x1a, 0xf4, 0xb4, 0xe4, 0x6c, 0x7f, 0x6f, 0x62, 0x3a, 0x2c, 0x43, - 0xe6, 0xb2, 0x27, 0x55, 0x89, 0x84, 0xf5, 0x23, 0x0a, 0xd6, 0xfb, 0x2c, 0x47, 0x2a, 0x82, 0x08, - 0x02, 0x96, 0xe7, 0x1c, 0x56, 0x34, 0xf8, 0xc0, 0x57, 0xa8, 0x05, 0x14, 0x7c, 0xf8, 0x35, 0x04, - 0x14, 0x95, 0x46, 0x71, 0x2a, 0x94, 0x80, 0xdc, 0xf7, 0x24, 0x15, 0xca, 0xd8, 0xa8, 0x8e, 0xcb, - 0x2a, 0x58, 0xe7, 0xbe, 0x27, 0x3b, 0x28, 0x12, 0x23, 0xf3, 0xac, 0x1a, 0x56, 0x4f, 0x25, 0x92, - 0x88, 0x2d, 0xc7, 0xe9, 0xb8, 0xac, 0xa6, 0x3f, 0xa8, 0xd2, 0x0a, 0x72, 0x6c, 0x9f, 0x9b, 0x7d, - 0x24, 0x5f, 0x45, 0x09, 0x8b, 0x34, 0xba, 0xcc, 0x70, 0x4b, 0xb6, 0xcf, 0xed, 0x40, 0x06, 0x6c, - 0xad, 0xf9, 0x07, 0x19, 0xa8, 0x26, 0x26, 0x18, 0xcd, 0x3f, 0x42, 0xc4, 0xa3, 0x4c, 0x59, 0x83, - 0x9f, 0xe0, 0x30, 0xfa, 0x56, 0x78, 0x4c, 0xf5, 0x3c, 0xfc, 0x99, 0xc5, 0xfa, 0x7a, 0xde, 0xc8, - 0xf3, 0x7d, 0xef, 0xb9, 0x52, 0x7d, 0x76, 0xcd, 0x40, 0x3e, 0x13, 0xe2, 0x94, 0xe5, 0xb1, 0xab, - 0x9b, 0x13, 0xdf, 0x17, 0xae, 0x02, 0x14, 0xa8, 0x71, 0xe2, 0x5c, 0x95, 0x8a, 0xc8, 0x14, 0x91, - 0xe9, 0x1c, 0x64, 0x25, 0x14, 0x04, 0x1a, 0x5b, 0x41, 0xca, 0x88, 0x80, 0xe8, 0xaa, 0x58, 0xc1, - 0x43, 0x45, 0x79, 0x28, 0x0e, 0x4e, 0xb6, 0xcc, 0x8b, 0xa0, 0x35, 0xf0, 0x18, 0x4c, 0x03, 0xf7, - 0xbd, 0xe7, 0xac, 0xda, 0x98, 0x00, 0xc4, 0x36, 0x19, 0xda, 0xa2, 0xb8, 0x20, 0xa2, 0x18, 0x82, - 0x2e, 0xf1, 0x03, 0x00, 0xfc, 0x45, 0x98, 0xa1, 0x41, 0xfa, 0x12, 0x8a, 0x32, 0xd1, 0x19, 0x09, - 0x16, 0x8d, 0xbf, 0x02, 0x95, 0xe8, 0x03, 0xaf, 0x43, 0x89, 0x54, 0xda, 0xa8, 0xda, 0xb0, 0x88, - 0xfa, 0x99, 0xed, 0x5a, 0xe2, 0x9c, 0xe4, 0x4a, 0xc1, 0x50, 0x05, 0x6c, 0xe5, 0xd0, 0xb6, 0x2c, - 0xe1, 0x86, 0x91, 0x1e, 0x55, 0x9a, 0x17, 0x8f, 0xcf, 0xcf, 0x8d, 0xc7, 0x37, 0x7e, 0x09, 0xaa, - 0x09, 0xa3, 0xf1, 0xd2, 0x6e, 0x27, 0x1a, 0x96, 0x4d, 0x37, 0xec, 0x36, 0x54, 0xc2, 0x1c, 0x90, - 0x80, 0xce, 0xb6, 0x8a, 0x11, 0x03, 0x1a, 0xff, 0x22, 0x8b, 0x9a, 0x2c, 0x76, 0x6d, 0xda, 0xd0, - 0xdb, 0x86, 0x62, 0x20, 0x4d, 0x39, 0x09, 0x93, 0x19, 0x16, 0xdc, 0xa0, 0x5d, 0xa2, 0xd9, 0x59, - 0x32, 0x34, 0x35, 0xff, 0x10, 0x72, 0xd2, 0x1c, 0x68, 0x47, 0xe9, 0xeb, 0x8b, 0x31, 0xe9, 0x99, - 0x83, 0x9d, 0x25, 0x03, 0xe9, 0xf8, 0x2e, 0x94, 0xfb, 0xda, 0xb7, 0xa5, 0x85, 0xe2, 0x82, 0xb6, - 0x58, 0xe8, 0x11, 0xdb, 0x59, 0x32, 0x22, 0x0e, 0xfc, 0x5b, 0x90, 0x47, 0xed, 0x52, 0xe7, 0x7c, - 0x2c, 0x68, 0x63, 0xe2, 0x76, 0xd9, 0x59, 0x32, 0x88, 0x72, 0xa3, 0x04, 0x05, 0x92, 0xc1, 0x8d, - 0x3a, 0x14, 0x55, 0x5f, 0xa7, 0x47, 0xae, 0x71, 0x0b, 0x72, 0x3d, 0x73, 0x80, 0x1a, 0xbe, 0x6d, - 0x05, 0xda, 0x55, 0x82, 0x3f, 0x1b, 0xaf, 0xc4, 0x7e, 0xba, 0xa4, 0x0b, 0x38, 0x93, 0x72, 0x01, - 0x37, 0x8a, 0x90, 0xc7, 0x1a, 0x1b, 0xb7, 0xaf, 0xb2, 0x16, 0x1a, 0xff, 0x34, 0x87, 0x86, 0x85, - 0x14, 0xe7, 0x73, 0xdd, 0xdb, 0x1f, 0x43, 0x65, 0xec, 0x7b, 0x7d, 0x11, 0x04, 0x9e, 0xaf, 0x95, - 0xa3, 0x37, 0x5e, 0x1c, 0x7a, 0x5e, 0x3f, 0x0c, 0x69, 0x8c, 0x98, 0xbc, 0xf9, 0xef, 0xb2, 0x50, - 0x89, 0x3e, 0x28, 0x7b, 0x46, 0x8a, 0x73, 0xe5, 0xca, 0xdc, 0x13, 0xfe, 0xc8, 0xb4, 0x2d, 0x25, - 0x3d, 0x36, 0x87, 0x66, 0xa8, 0xe4, 0x7e, 0xe2, 0x4d, 0xe4, 0xe4, 0x58, 0x28, 0x17, 0xd6, 0x53, - 0x7b, 0x24, 0x3c, 0x96, 0xa7, 0xe0, 0x11, 0x2e, 0xec, 0xbe, 0xe3, 0x4d, 0x2c, 0x56, 0xc0, 0xf2, - 0x23, 0x3a, 0xde, 0xf6, 0xcc, 0x71, 0xa0, 0x64, 0xe6, 0x9e, 0xed, 0x7b, 0xac, 0x84, 0x44, 0xdb, - 0xf6, 0x60, 0x64, 0xb2, 0x32, 0x32, 0xeb, 0x3d, 0xb7, 0x25, 0x0a, 0xe1, 0x0a, 0xaa, 0xa9, 0x07, - 0x63, 0xe1, 0x76, 0xa5, 0x2f, 0x84, 0xdc, 0x33, 0xc7, 0xca, 0xa7, 0x69, 0x08, 0xcb, 0xb2, 0xa5, - 0x92, 0x9f, 0xdb, 0x66, 0x5f, 0x1c, 0x7b, 0xde, 0x29, 0x5b, 0x46, 0x41, 0xd3, 0x71, 0x03, 0x69, - 0x0e, 0x7c, 0x73, 0xa4, 0x64, 0x68, 0x4f, 0x38, 0x82, 0x4a, 0x2b, 0x54, 0xb7, 0x2d, 0x87, 0x93, - 0xe3, 0x47, 0x68, 0xf7, 0xad, 0xaa, 0x38, 0x93, 0x25, 0xc6, 0x02, 0x65, 0xe8, 0x32, 0x94, 0x37, - 0x6c, 0xc7, 0x3e, 0xb6, 0x1d, 0x9b, 0xad, 0x21, 0x6a, 0xfb, 0xbc, 0x6f, 0x3a, 0xb6, 0xe5, 0x9b, - 0xcf, 0x19, 0xc7, 0xc6, 0x3d, 0xf6, 0xbd, 0x53, 0x9b, 0x5d, 0x43, 0x44, 0x32, 0x03, 0xcf, 0xec, - 0xef, 0xb3, 0xeb, 0x14, 0x2b, 0x3b, 0x15, 0xb2, 0x3f, 0x3c, 0x31, 0x8f, 0xd9, 0x8d, 0xd8, 0xa5, - 0x77, 0xb3, 0xb1, 0x06, 0xab, 0x53, 0x51, 0xf9, 0x46, 0x49, 0x5b, 0x9f, 0x8d, 0x1a, 0x54, 0x13, - 0xe1, 0xd2, 0xc6, 0xab, 0x50, 0x0e, 0x83, 0xa9, 0x68, 0xa5, 0xdb, 0x81, 0x72, 0x03, 0xeb, 0x45, - 0x12, 0x95, 0x1b, 0xff, 0x39, 0x03, 0x45, 0x15, 0xc9, 0xe6, 0x1b, 0x51, 0xe6, 0x49, 0x66, 0x81, - 0xe8, 0xa5, 0x22, 0xd2, 0xb1, 0xdf, 0x28, 0xfd, 0xe4, 0x3a, 0x14, 0x1c, 0x32, 0xc7, 0xb5, 0xf8, - 0xa2, 0x42, 0x42, 0xda, 0xe4, 0x52, 0xd2, 0xe6, 0x36, 0x54, 0xcc, 0x89, 0xf4, 0x28, 0x48, 0xa7, - 0x23, 0x18, 0x31, 0xa0, 0xd9, 0x8a, 0xa2, 0xd1, 0xa1, 0x63, 0x92, 0x74, 0xc6, 0x9e, 0x2f, 0x84, - 0x72, 0x3a, 0x92, 0xad, 0x9d, 0xa5, 0x93, 0xc4, 0x1b, 0x8d, 0xcd, 0xbe, 0x24, 0x00, 0x9d, 0xb1, - 0x28, 0x6a, 0x59, 0x1e, 0xf7, 0xc0, 0xe6, 0xd0, 0x94, 0xcd, 0x13, 0x28, 0x1f, 0x7a, 0xc1, 0xf4, - 0x89, 0x5d, 0x82, 0x5c, 0xcf, 0x1b, 0x2b, 0xfd, 0x73, 0xc3, 0x93, 0xa4, 0x7f, 0xaa, 0x03, 0xfa, - 0x44, 0xaa, 0x25, 0x67, 0xd8, 0x83, 0xa1, 0x54, 0x76, 0x7a, 0xc7, 0x75, 0x85, 0xcf, 0x0a, 0x38, - 0xc3, 0x86, 0x18, 0xa3, 0xce, 0xcb, 0x8a, 0x38, 0xa7, 0x04, 0xdf, 0xb6, 0xfd, 0x40, 0xb2, 0x52, - 0xb3, 0x83, 0x67, 0xad, 0x3d, 0xa0, 0x23, 0x92, 0x7e, 0x10, 0xab, 0x25, 0x6c, 0x22, 0x15, 0x37, - 0x85, 0x8b, 0x2b, 0x90, 0x6c, 0x2b, 0x65, 0x18, 0x52, 0x05, 0x59, 0x3c, 0xdf, 0xa8, 0xfc, 0xf1, - 0x24, 0x90, 0xf6, 0xc9, 0x05, 0xcb, 0x35, 0x9f, 0x41, 0x2d, 0x95, 0xe4, 0xc4, 0xaf, 0x03, 0x4b, - 0x01, 0xb0, 0xe9, 0x4b, 0xfc, 0x16, 0x5c, 0x4b, 0x41, 0xf7, 0x6c, 0xcb, 0x22, 0x4f, 0xf0, 0xf4, - 0x87, 0xb0, 0x83, 0x1b, 0x15, 0x28, 0xf5, 0xd5, 0x1c, 0x36, 0x0f, 0xa1, 0x46, 0x93, 0xba, 0x27, - 0xa4, 0x79, 0xe0, 0x3a, 0x17, 0x7f, 0xe2, 0x4c, 0xb4, 0xe6, 0x57, 0xb4, 0xf9, 0x85, 0xd2, 0xe4, - 0xc4, 0xf7, 0x46, 0xc4, 0xab, 0x60, 0xd0, 0x6f, 0xe4, 0x2e, 0x3d, 0xbd, 0x32, 0xb2, 0xd2, 0x6b, - 0xfe, 0x8f, 0x2a, 0x94, 0x5a, 0xfd, 0x3e, 0x1a, 0x8c, 0x33, 0x35, 0xbf, 0x0b, 0xc5, 0xbe, 0xe7, - 0x9e, 0xd8, 0x03, 0x2d, 0xad, 0xa7, 0xf5, 0x46, 0x4d, 0x87, 0xcb, 0xf1, 0xc4, 0x1e, 0x18, 0x1a, - 0x19, 0xc9, 0xf4, 0x69, 0x53, 0xb8, 0x92, 0x4c, 0x89, 0xdc, 0xe8, 0x70, 0x79, 0x00, 0x79, 0xdb, - 0x3d, 0xf1, 0x74, 0xda, 0xe8, 0xe7, 0x2f, 0x21, 0xa2, 0xdc, 0x49, 0x42, 0x6c, 0xfc, 0xd7, 0x0c, - 0x14, 0x55, 0xd5, 0xfc, 0x55, 0x58, 0x11, 0x2e, 0x6e, 0xb5, 0x50, 0xd0, 0xeb, 0x3d, 0x36, 0x05, - 0x45, 0x95, 0x56, 0x43, 0xc4, 0xf1, 0x64, 0xa0, 0x3d, 0x33, 0x49, 0x10, 0x7f, 0x1f, 0x6e, 0xa9, - 0xe2, 0xa1, 0x2f, 0x7c, 0xe1, 0x08, 0x33, 0x10, 0x9b, 0x43, 0xd3, 0x75, 0x85, 0xa3, 0x8f, 0xfd, - 0xcb, 0x3e, 0xf3, 0x26, 0x2c, 0xab, 0x4f, 0xdd, 0xb1, 0xd9, 0x17, 0x81, 0xde, 0x4b, 0x29, 0x18, - 0xff, 0x2a, 0x14, 0x28, 0xab, 0xb6, 0x6e, 0x5d, 0x3d, 0x95, 0x0a, 0xab, 0xe1, 0x45, 0xe7, 0x52, - 0x0b, 0x40, 0x0d, 0x13, 0x9a, 0x64, 0x5a, 0x36, 0x7c, 0xf1, 0xca, 0x71, 0x25, 0xeb, 0x30, 0x41, - 0x84, 0xed, 0xb3, 0x84, 0x23, 0x28, 0xfd, 0x11, 0xcf, 0xcd, 0x2c, 0xc5, 0x5d, 0x52, 0xb0, 0xc6, - 0x7f, 0xc9, 0x43, 0x1e, 0x47, 0x18, 0x91, 0x87, 0xde, 0x48, 0x44, 0xde, 0x67, 0xa5, 0x88, 0xa4, - 0x60, 0xa8, 0xf8, 0x98, 0x2a, 0x01, 0x20, 0x42, 0x53, 0xa2, 0x65, 0x1a, 0x8c, 0x98, 0x63, 0xdf, - 0x3b, 0xb1, 0x9d, 0x18, 0x53, 0xab, 0x48, 0x53, 0x60, 0xfe, 0x35, 0xb8, 0x39, 0x32, 0xfd, 0x53, - 0x21, 0x69, 0x77, 0x3f, 0xf3, 0xfc, 0xd3, 0x00, 0x47, 0xae, 0x63, 0x69, 0xb7, 0xe5, 0x25, 0x5f, - 0xf9, 0x1b, 0xb0, 0xf6, 0x3c, 0x2c, 0x46, 0x75, 0x28, 0xc7, 0xe1, 0xec, 0x07, 0x14, 0xc6, 0x96, - 0x38, 0xb3, 0x89, 0x6f, 0x59, 0xe5, 0xd6, 0x86, 0x65, 0x5c, 0x4a, 0xa6, 0x1a, 0xc8, 0xae, 0xae, - 0x59, 0xc7, 0x9f, 0xd2, 0x50, 0x94, 0x9b, 0x2a, 0xe7, 0x28, 0xe8, 0x58, 0xe4, 0x77, 0xad, 0x18, - 0x31, 0x00, 0x17, 0x1a, 0x55, 0xf9, 0x54, 0x89, 0xdc, 0x9a, 0x32, 0x50, 0x13, 0x20, 0xc4, 0x90, - 0xa2, 0x3f, 0x0c, 0x2b, 0x51, 0x4e, 0xd1, 0x24, 0x88, 0xdf, 0x01, 0x18, 0x98, 0x52, 0x3c, 0x37, - 0x2f, 0x9e, 0xf8, 0x4e, 0x5d, 0xa8, 0x40, 0x4a, 0x0c, 0x41, 0x13, 0xd7, 0xf1, 0xfa, 0xa6, 0xd3, - 0x95, 0x9e, 0x6f, 0x0e, 0xc4, 0xa1, 0x29, 0x87, 0xf5, 0x81, 0x32, 0x71, 0xa7, 0xe1, 0xd8, 0x63, - 0x69, 0x8f, 0xc4, 0xa7, 0x9e, 0x2b, 0xea, 0x43, 0xd5, 0xe3, 0xb0, 0x8c, 0x2d, 0x31, 0x5d, 0xd3, - 0xb9, 0x90, 0x76, 0x1f, 0xfb, 0x62, 0xab, 0x96, 0x24, 0x40, 0xe4, 0x54, 0x10, 0x12, 0xc7, 0xb1, - 0x63, 0xd5, 0xbf, 0xab, 0xfa, 0x1a, 0x01, 0x70, 0x76, 0x85, 0x1c, 0x0a, 0x5f, 0x4c, 0x46, 0x2d, - 0xcb, 0xf2, 0x45, 0x10, 0xd4, 0x4f, 0xd5, 0xec, 0x4e, 0x81, 0x29, 0xf0, 0xdc, 0x9a, 0xc8, 0x61, - 0xe3, 0x0f, 0x33, 0x50, 0x6a, 0x8d, 0xc7, 0xb4, 0xd4, 0xea, 0x50, 0x32, 0xc7, 0xe3, 0x9d, 0x38, - 0x32, 0x19, 0x16, 0xf5, 0x97, 0xfd, 0x38, 0x3e, 0x19, 0x16, 0xf5, 0x17, 0xea, 0x71, 0x2e, 0xfa, - 0x42, 0x1d, 0xbd, 0x0d, 0x95, 0xbe, 0xca, 0xca, 0x6e, 0x29, 0x4f, 0x4e, 0xce, 0x88, 0x01, 0x38, - 0x0c, 0xe2, 0x7c, 0x6c, 0xfb, 0xa2, 0x25, 0x75, 0x38, 0x32, 0x2a, 0x53, 0xba, 0x55, 0xdf, 0x8b, - 0x92, 0x2d, 0x5e, 0xbf, 0x64, 0x77, 0x61, 0xfb, 0xd7, 0x77, 0x71, 0x7c, 0x5b, 0x63, 0xbb, 0x8b, - 0x04, 0x86, 0xa2, 0x53, 0x47, 0x7c, 0x8b, 0x02, 0x5d, 0x64, 0x68, 0xd3, 0x11, 0xaf, 0xca, 0xcd, - 0xb7, 0xa1, 0x96, 0xa2, 0xc1, 0x23, 0x8c, 0x5c, 0xe4, 0xe4, 0x50, 0xa9, 0x42, 0xe9, 0xe3, 0xc0, - 0x73, 0x5b, 0x87, 0x1d, 0x75, 0xa8, 0x6e, 0x4f, 0x1c, 0x87, 0x65, 0x9b, 0x07, 0x00, 0xf1, 0x5e, - 0xc6, 0x03, 0x52, 0x31, 0x63, 0x4b, 0xca, 0x7d, 0xe7, 0x5a, 0xb6, 0x3b, 0xd8, 0xd2, 0xdb, 0x97, - 0x65, 0x10, 0x48, 0x6e, 0x19, 0x61, 0x45, 0x40, 0x52, 0xe0, 0xa8, 0x24, 0x2c, 0x96, 0x6b, 0xfe, - 0xdf, 0x0c, 0x54, 0x13, 0x49, 0x23, 0x7f, 0x8a, 0x89, 0x2e, 0xd8, 0x77, 0x54, 0x90, 0x70, 0xa5, - 0xaa, 0xad, 0x1d, 0x95, 0x71, 0x1d, 0xeb, 0x9c, 0x16, 0xfc, 0xaa, 0x9c, 0x30, 0x09, 0xc8, 0x67, - 0x4a, 0x72, 0x69, 0x3e, 0xd4, 0x9e, 0xac, 0x2a, 0x94, 0x9e, 0xb8, 0xa7, 0xae, 0xf7, 0xdc, 0x55, - 0x9a, 0x09, 0x65, 0x2e, 0xa5, 0x62, 0xb0, 0x61, 0x72, 0x51, 0xae, 0xf9, 0xaf, 0xf3, 0x53, 0x49, - 0x7e, 0x6d, 0x28, 0x2a, 0xf3, 0x89, 0x34, 0xfb, 0xd9, 0xac, 0xac, 0x24, 0xb2, 0x8e, 0xf7, 0x25, - 0x40, 0x86, 0x26, 0x46, 0xbb, 0x26, 0x4a, 0x81, 0xcd, 0xce, 0x8d, 0x4b, 0xa6, 0x18, 0x85, 0xa7, - 0x51, 0x2a, 0x0b, 0x3c, 0xe2, 0xd0, 0xf8, 0x5b, 0x19, 0xb8, 0x3e, 0x0f, 0x25, 0x99, 0x2b, 0x9f, - 0x49, 0xe7, 0xca, 0x77, 0xa7, 0x72, 0xcf, 0xb3, 0xd4, 0x9b, 0x07, 0x2f, 0xd9, 0x88, 0x74, 0x26, - 0x7a, 0xf3, 0x77, 0x33, 0xb0, 0x36, 0xd3, 0xe7, 0x84, 0xe6, 0x06, 0x50, 0x54, 0x2b, 0x4b, 0xa5, - 0x86, 0x45, 0xc9, 0x3a, 0x2a, 0xd8, 0x42, 0x3a, 0x4d, 0xa0, 0xb2, 0x1f, 0x74, 0xb6, 0xbd, 0x32, - 0x1b, 0x70, 0xd6, 0xf0, 0xc8, 0x1c, 0x08, 0xe5, 0x98, 0x56, 0xea, 0xa5, 0x86, 0x14, 0x95, 0x6a, - 0xaf, 0x22, 0x42, 0xac, 0x44, 0x29, 0x67, 0x93, 0xb1, 0x63, 0xf7, 0xb1, 0x58, 0xe6, 0x0d, 0xb8, - 0xa9, 0xae, 0x5c, 0x68, 0x33, 0xfa, 0xa4, 0x37, 0xb4, 0x69, 0x73, 0xb0, 0x0a, 0xd6, 0x73, 0x38, - 0x39, 0x76, 0xec, 0x60, 0xc8, 0xa0, 0x69, 0xc0, 0xb5, 0x39, 0x1d, 0xa4, 0x26, 0x3f, 0xd5, 0xcd, - 0x5f, 0x01, 0xd8, 0x7a, 0x1a, 0x36, 0x9a, 0x65, 0x38, 0x87, 0x95, 0xad, 0xa7, 0x49, 0xee, 0x7a, - 0xf3, 0x3c, 0x45, 0x79, 0x1d, 0xb0, 0x5c, 0xf3, 0x97, 0x33, 0x61, 0x4e, 0x48, 0xe3, 0x2f, 0x43, - 0x4d, 0x35, 0xf8, 0xd0, 0xbc, 0x70, 0x3c, 0xd3, 0xe2, 0x6d, 0x58, 0x09, 0xa2, 0x4b, 0x41, 0x89, - 0x23, 0x7a, 0x5a, 0xf5, 0xe9, 0xa6, 0x90, 0x8c, 0x29, 0xa2, 0xd0, 0x34, 0xcc, 0xc6, 0x81, 0x24, - 0x4e, 0x46, 0xae, 0x49, 0x5b, 0x6e, 0x99, 0xcc, 0x56, 0xb3, 0xf9, 0x55, 0x58, 0xeb, 0xc6, 0xc7, - 0x99, 0xb2, 0x21, 0x70, 0x71, 0xa8, 0xb3, 0x70, 0x2b, 0x5c, 0x1c, 0xba, 0xd8, 0xfc, 0x67, 0x25, - 0x80, 0x38, 0x68, 0x36, 0x67, 0xcf, 0xcf, 0xcb, 0x01, 0x99, 0x09, 0x61, 0xe7, 0x5e, 0x3a, 0x84, - 0xfd, 0x7e, 0x64, 0xca, 0x28, 0x87, 0xfa, 0x74, 0x22, 0x7c, 0xdc, 0xa6, 0x69, 0x03, 0x26, 0x95, - 0x22, 0x55, 0x98, 0x4e, 0x91, 0xba, 0x3b, 0x9b, 0x4f, 0x39, 0x25, 0x8c, 0x62, 0x4f, 0x4d, 0x29, - 0xe5, 0xa9, 0x69, 0x40, 0xd9, 0x17, 0xa6, 0xe5, 0xb9, 0xce, 0x45, 0x18, 0x29, 0x0d, 0xcb, 0xfc, - 0x6d, 0x28, 0x48, 0xba, 0xd7, 0x54, 0xa6, 0xbd, 0xf3, 0x82, 0x89, 0x53, 0xb8, 0x28, 0xd9, 0xec, - 0x40, 0x27, 0x41, 0x2a, 0x3d, 0xa1, 0x6c, 0x24, 0x20, 0x7c, 0x1d, 0xb8, 0x8d, 0x66, 0xab, 0xe3, - 0x08, 0x6b, 0xe3, 0x62, 0x4b, 0x05, 0x30, 0x49, 0x93, 0x29, 0x1b, 0x73, 0xbe, 0x84, 0xf3, 0xbf, - 0x1c, 0xcf, 0x3f, 0x35, 0xf9, 0xcc, 0x0e, 0xb0, 0xa7, 0x35, 0x75, 0x60, 0x85, 0x65, 0xd4, 0x95, - 0xc2, 0x0d, 0xab, 0xc6, 0x92, 0x56, 0x6f, 0x9c, 0x05, 0x70, 0xc9, 0xd7, 0x70, 0x78, 0x95, 0xab, - 0x6a, 0x55, 0x1d, 0x91, 0x11, 0x80, 0x24, 0x79, 0xdf, 0x73, 0xe9, 0xd4, 0x65, 0x5a, 0x92, 0xeb, - 0x32, 0xf6, 0x77, 0xec, 0x4c, 0x7c, 0xd3, 0xa1, 0xaf, 0x6b, 0x4a, 0x92, 0xc7, 0x90, 0xe6, 0xef, - 0x67, 0x23, 0x73, 0xb1, 0x02, 0x85, 0x63, 0x33, 0xb0, 0xfb, 0xea, 0x74, 0xd3, 0x6a, 0x9e, 0x3a, - 0xdd, 0xa4, 0x67, 0x79, 0x2c, 0x8b, 0x96, 0x5f, 0x20, 0x74, 0x00, 0x2b, 0xbe, 0x45, 0xc6, 0xf2, - 0x28, 0x02, 0xc2, 0x95, 0xa4, 0xb2, 0xa4, 0x88, 0x94, 0xdc, 0x91, 0x56, 0x94, 0x7f, 0x4a, 0x8e, - 0x05, 0x3a, 0x62, 0x58, 0x19, 0x71, 0x5c, 0x4f, 0x0a, 0xe5, 0x8c, 0xa5, 0x75, 0xcf, 0x00, 0xd9, - 0x84, 0xd7, 0x22, 0x58, 0x15, 0x4d, 0xb1, 0x90, 0xa9, 0xf2, 0xa0, 0x06, 0x64, 0xa8, 0x2e, 0xe3, - 0xbe, 0x4f, 0x7f, 0x60, 0x35, 0x6c, 0x51, 0x7c, 0x39, 0x8d, 0xad, 0x20, 0x57, 0x93, 0x72, 0x77, - 0x56, 0xf1, 0xe7, 0x19, 0x65, 0xf4, 0x30, 0xac, 0xd5, 0x42, 0xb9, 0xb4, 0x86, 0x2d, 0x8b, 0x54, - 0x3b, 0xc6, 0xd1, 0xd2, 0x1c, 0x9b, 0x68, 0xf6, 0xd9, 0x63, 0xd3, 0x95, 0xec, 0x1a, 0x76, 0x75, - 0x6c, 0x9d, 0xb0, 0xeb, 0x48, 0xd2, 0x1f, 0x9a, 0x92, 0xdd, 0x40, 0x1c, 0xfc, 0xb5, 0x25, 0x7c, - 0x5c, 0x29, 0xec, 0x26, 0xe2, 0x48, 0x73, 0xc0, 0x6e, 0x35, 0x7f, 0x2d, 0xce, 0x00, 0x7f, 0x33, - 0x32, 0xc8, 0x16, 0xd9, 0x3e, 0x68, 0xb2, 0xcd, 0xdb, 0xcb, 0x6d, 0x58, 0xf3, 0xc5, 0xf7, 0x26, - 0x76, 0xea, 0x5e, 0x44, 0xee, 0xea, 0xc4, 0x9b, 0x59, 0x8a, 0xe6, 0x19, 0xac, 0x85, 0x85, 0x67, - 0xb6, 0x1c, 0x92, 0xe7, 0x8c, 0xbf, 0x9d, 0xb8, 0xb8, 0x91, 0x99, 0x7b, 0xe1, 0x2d, 0x62, 0x19, - 0x5f, 0xd4, 0x88, 0x22, 0x23, 0xd9, 0x05, 0x22, 0x23, 0xcd, 0xff, 0x93, 0x0c, 0xb5, 0x2b, 0x13, - 0xd5, 0x8a, 0x4c, 0xd4, 0xd9, 0xd0, 0x7b, 0x1c, 0xec, 0xc8, 0xbe, 0x4c, 0xb0, 0x63, 0x5e, 0x1a, - 0xcb, 0x07, 0x68, 0x31, 0xd1, 0xce, 0x7c, 0xba, 0x40, 0x20, 0x27, 0x85, 0xcb, 0x37, 0x28, 0x90, - 0x6e, 0x76, 0x55, 0x8e, 0x55, 0x61, 0xee, 0x35, 0xaa, 0x64, 0xc4, 0x5c, 0x63, 0x1a, 0x09, 0xaa, - 0x84, 0x1c, 0x2b, 0xce, 0x93, 0x63, 0x07, 0x28, 0xc7, 0x4a, 0xb1, 0x1c, 0x23, 0xef, 0x01, 0xc5, - 0xbd, 0xd4, 0xef, 0x90, 0x3d, 0xed, 0xf1, 0xb2, 0x31, 0x03, 0x47, 0x65, 0x6f, 0x34, 0x71, 0xa4, - 0xad, 0x43, 0x3b, 0xaa, 0x30, 0x7d, 0xcf, 0xb3, 0x32, 0x7b, 0xcf, 0xf3, 0x23, 0x80, 0x40, 0xe0, - 0xee, 0xd8, 0xb2, 0xfb, 0x52, 0x67, 0x62, 0xdd, 0xb9, 0xac, 0x6f, 0x3a, 0x20, 0x95, 0xa0, 0xc0, - 0xf6, 0x8f, 0xcc, 0x73, 0x0a, 0x52, 0xeb, 0x94, 0x91, 0xa8, 0x3c, 0x2d, 0xdd, 0x57, 0x66, 0xa5, - 0xfb, 0xdb, 0xa1, 0x9e, 0x7e, 0xfd, 0xca, 0xf9, 0x5d, 0x4f, 0xe9, 0xe6, 0x75, 0x28, 0x91, 0x15, - 0xe0, 0xf9, 0x74, 0x49, 0xa9, 0x62, 0x84, 0xc5, 0x94, 0x84, 0xbd, 0x99, 0x96, 0xb0, 0x0d, 0x0b, - 0x8a, 0x3a, 0xdc, 0x32, 0xed, 0x1a, 0x09, 0x1d, 0xb5, 0xd9, 0x84, 0xa3, 0x36, 0xca, 0xf7, 0xcd, - 0x25, 0xf3, 0x7d, 0xa7, 0xee, 0x31, 0x16, 0x66, 0xee, 0x31, 0x36, 0x3f, 0x85, 0x82, 0xb2, 0x09, - 0x20, 0x54, 0x47, 0x95, 0x2a, 0x8b, 0x9d, 0x62, 0x19, 0x7e, 0x1d, 0x58, 0x20, 0x48, 0xd7, 0x11, - 0x5d, 0x73, 0x24, 0x48, 0x48, 0x66, 0x79, 0x1d, 0xae, 0x2b, 0xdc, 0x20, 0xfd, 0x85, 0x14, 0x2e, - 0xc7, 0x3e, 0xf6, 0x4d, 0xff, 0x82, 0xe5, 0x9b, 0x1f, 0x51, 0xb2, 0x43, 0xb8, 0xa0, 0xaa, 0xd1, - 0xbd, 0x51, 0x25, 0x96, 0x2d, 0x2d, 0x7d, 0x28, 0x57, 0x46, 0xdb, 0xb7, 0x2a, 0x83, 0x90, 0x0c, - 0x48, 0xf2, 0x80, 0x2d, 0x27, 0xcf, 0xf8, 0x3f, 0xb5, 0xfd, 0xd6, 0xdc, 0x48, 0x68, 0x8c, 0xe9, - 0x94, 0xc0, 0xcc, 0xa2, 0x29, 0x81, 0xcd, 0xc7, 0xb0, 0x6a, 0xa4, 0x65, 0x3a, 0x7f, 0x1f, 0x4a, - 0xde, 0x38, 0xc9, 0xe7, 0x45, 0xeb, 0x32, 0x44, 0x6f, 0xfe, 0x4e, 0x06, 0x96, 0x3b, 0xae, 0x14, - 0xbe, 0x6b, 0x3a, 0xdb, 0x8e, 0x39, 0xe0, 0xef, 0x85, 0x52, 0x6a, 0xbe, 0xb7, 0x25, 0x89, 0x9b, - 0x16, 0x58, 0x8e, 0x0e, 0x2b, 0xf0, 0x1b, 0xb0, 0x26, 0x2c, 0x5b, 0x7a, 0xbe, 0xd2, 0x93, 0xc3, - 0xcc, 0xcd, 0xeb, 0xc0, 0x14, 0xb8, 0x4b, 0x5b, 0xa2, 0xa7, 0xa6, 0xb9, 0x0e, 0xd7, 0x53, 0xd0, - 0x50, 0x09, 0xce, 0xf2, 0xdb, 0x50, 0x8f, 0x4f, 0xa3, 0x2d, 0xcf, 0x95, 0x1d, 0xd7, 0x12, 0xe7, - 0xa4, 0x64, 0xb1, 0x5c, 0xf3, 0x57, 0x23, 0xf5, 0xee, 0xa9, 0xce, 0xeb, 0xf4, 0x3d, 0x2f, 0xbe, - 0x34, 0xac, 0x4b, 0x89, 0xcb, 0xe9, 0xd9, 0x05, 0x2e, 0xa7, 0x7f, 0x14, 0x5f, 0x30, 0x56, 0x07, - 0xc5, 0x2b, 0x73, 0x4f, 0x1f, 0x4a, 0x47, 0xd3, 0xda, 0x7d, 0x57, 0x24, 0x6e, 0x1b, 0xbf, 0xa5, - 0x4d, 0xba, 0xfc, 0x22, 0x5a, 0xb0, 0xca, 0xdc, 0x78, 0x77, 0xfa, 0x56, 0xcb, 0x62, 0x69, 0xa1, - 0x33, 0x8a, 0x2a, 0xbc, 0xb4, 0xa2, 0xfa, 0xcd, 0x29, 0xeb, 0xa9, 0x3c, 0xd7, 0x01, 0x79, 0xc5, - 0x9d, 0xdd, 0x6f, 0x42, 0x69, 0x68, 0x07, 0xd2, 0xf3, 0xd5, 0x3d, 0xf2, 0xd9, 0x7b, 0x6f, 0x89, - 0xd1, 0xda, 0x51, 0x88, 0x94, 0xc3, 0x17, 0x52, 0xf1, 0xef, 0xc0, 0x1a, 0x0d, 0xfc, 0x61, 0xac, - 0x35, 0x04, 0xf5, 0xea, 0xdc, 0xdc, 0xc9, 0x04, 0xab, 0x8d, 0x29, 0x12, 0x63, 0x96, 0x49, 0x63, - 0x00, 0x10, 0xcf, 0xcf, 0x8c, 0x14, 0xfb, 0x0c, 0xf7, 0xc8, 0x6f, 0x42, 0x31, 0x98, 0x1c, 0xc7, - 0xf1, 0x47, 0x5d, 0x6a, 0x9c, 0x43, 0x63, 0x46, 0x3b, 0x38, 0x14, 0xbe, 0x6a, 0xee, 0x95, 0x97, - 0xd9, 0x3f, 0x4a, 0x4e, 0xbc, 0x5a, 0x9c, 0x77, 0x2f, 0x99, 0xbd, 0x88, 0x73, 0x62, 0x05, 0x34, - 0xde, 0x85, 0x6a, 0x62, 0x50, 0x51, 0x32, 0x4f, 0x5c, 0xcb, 0x0b, 0x9d, 0xde, 0xf8, 0x5b, 0x5d, - 0xe6, 0xb3, 0x42, 0xb7, 0x37, 0xfd, 0x6e, 0x18, 0xc0, 0xa6, 0x07, 0xf0, 0x0a, 0x0b, 0xfb, 0x15, - 0xa8, 0x25, 0x54, 0xba, 0xc8, 0x21, 0x9a, 0x06, 0x36, 0xcf, 0xe0, 0xf3, 0x09, 0x76, 0x87, 0xc2, - 0x1f, 0xd9, 0x01, 0x1e, 0x24, 0xca, 0x58, 0x24, 0xd5, 0xda, 0x12, 0xae, 0xb4, 0x65, 0x28, 0x41, - 0xa3, 0x32, 0xff, 0x05, 0x28, 0x8c, 0x85, 0x3f, 0x0a, 0xb4, 0x14, 0x9d, 0x5e, 0x41, 0x73, 0xd9, - 0x06, 0x86, 0xa2, 0x69, 0xfe, 0x93, 0x0c, 0x94, 0xf7, 0x84, 0x34, 0x51, 0x77, 0xe0, 0x7b, 0x53, - 0xb5, 0xcc, 0xc6, 0xcc, 0x43, 0xd4, 0x75, 0x6d, 0xbe, 0xae, 0x77, 0x34, 0xbe, 0x2e, 0xef, 0x2c, - 0xc5, 0x0d, 0x6b, 0x6c, 0x40, 0x49, 0x83, 0x1b, 0xef, 0xc1, 0xea, 0x14, 0x26, 0x8d, 0x8b, 0xd2, - 0xed, 0xbb, 0x17, 0xa3, 0x30, 0xb1, 0x6b, 0xd9, 0x48, 0x03, 0x37, 0x2a, 0x50, 0x1a, 0x2b, 0x82, - 0xe6, 0xef, 0xdf, 0xa0, 0x74, 0x22, 0xfb, 0x04, 0x6d, 0xfa, 0x79, 0x27, 0xeb, 0x1d, 0x00, 0xe5, - 0xaf, 0xa3, 0xa4, 0x13, 0xe5, 0xa4, 0x4e, 0x40, 0xf8, 0x07, 0x51, 0x74, 0x21, 0x3f, 0x57, 0xa9, - 0x4a, 0x32, 0x9f, 0x0e, 0x31, 0xd4, 0xa1, 0x64, 0x07, 0xe4, 0x87, 0xd3, 0x89, 0x5a, 0x61, 0x91, - 0x7f, 0x03, 0x8a, 0xf6, 0x68, 0xec, 0xf9, 0x52, 0x87, 0x1f, 0xae, 0xe4, 0xda, 0x21, 0xcc, 0x9d, - 0x25, 0x43, 0xd3, 0x20, 0xb5, 0x38, 0x27, 0xea, 0xf2, 0x8b, 0xa9, 0xdb, 0xe7, 0x21, 0xb5, 0xa2, - 0xe1, 0xdf, 0x86, 0xda, 0x40, 0xe5, 0xa9, 0x2a, 0xc6, 0x5a, 0x88, 0xbc, 0x7e, 0x15, 0x93, 0x47, - 0x49, 0x82, 0x9d, 0x25, 0x23, 0xcd, 0x01, 0x59, 0xa2, 0x02, 0x2f, 0x02, 0xd9, 0xf3, 0x3e, 0xf6, - 0x6c, 0x97, 0xcc, 0xdd, 0x17, 0xb0, 0x34, 0x92, 0x04, 0xc8, 0x32, 0xc5, 0x81, 0x7f, 0x0d, 0x35, - 0x9e, 0x40, 0xea, 0xab, 0xfc, 0x77, 0xaf, 0xe2, 0xd4, 0x13, 0x81, 0xbe, 0x84, 0x1f, 0x48, 0x7e, - 0x0e, 0x8d, 0xc4, 0x26, 0xd1, 0x95, 0xb4, 0xc6, 0x63, 0xdf, 0x43, 0x9b, 0xb9, 0x46, 0xdc, 0xbe, - 0x76, 0x15, 0xb7, 0xc3, 0x4b, 0xa9, 0x77, 0x96, 0x8c, 0x2b, 0x78, 0xf3, 0x1e, 0x5a, 0x76, 0xba, - 0x0b, 0xbb, 0xc2, 0x3c, 0x0b, 0x1f, 0x02, 0xb8, 0xbf, 0xd0, 0x28, 0x10, 0xc5, 0xce, 0x92, 0x31, - 0xc5, 0x83, 0xff, 0x12, 0xac, 0xa5, 0xea, 0xa4, 0xbb, 0xbf, 0xea, 0x99, 0x80, 0xaf, 0x2e, 0xdc, - 0x0d, 0x24, 0xda, 0x59, 0x32, 0x66, 0x39, 0xf1, 0x09, 0x7c, 0x6e, 0xb6, 0x4b, 0x5b, 0xa2, 0xef, - 0xd8, 0xae, 0xd0, 0x2f, 0x0a, 0xbc, 0xfb, 0x72, 0xa3, 0xa5, 0x89, 0x77, 0x96, 0x8c, 0xcb, 0x39, - 0xf3, 0xbf, 0x0a, 0xb7, 0xc7, 0x73, 0x45, 0x8c, 0x12, 0x5d, 0xfa, 0x41, 0x82, 0xf7, 0x17, 0xac, - 0x79, 0x86, 0x7e, 0x67, 0xc9, 0xb8, 0x92, 0x3f, 0xea, 0xce, 0x64, 0x41, 0xeb, 0x74, 0x7a, 0x55, - 0xa0, 0xd8, 0x74, 0xdf, 0xd9, 0x11, 0xa6, 0x15, 0x45, 0x48, 0x62, 0x40, 0xe3, 0x7f, 0x65, 0xa0, - 0xa8, 0xd7, 0xfb, 0xed, 0x28, 0x47, 0x22, 0x12, 0xdd, 0x31, 0x80, 0x7f, 0x08, 0x15, 0xe1, 0xfb, - 0x9e, 0xbf, 0xe9, 0x59, 0x61, 0x7a, 0xe9, 0xb4, 0x97, 0x59, 0xf1, 0x59, 0x6f, 0x87, 0x68, 0x46, - 0x4c, 0xc1, 0x3f, 0x00, 0x50, 0xfb, 0xbc, 0x17, 0xdf, 0x8a, 0x6a, 0xcc, 0xa7, 0x57, 0x41, 0xb7, - 0x18, 0x3b, 0x76, 0xcb, 0x85, 0x11, 0xaf, 0xb0, 0x18, 0x19, 0x9c, 0x85, 0x84, 0xc1, 0x79, 0x5b, - 0xfb, 0x11, 0xc8, 0xbd, 0xa2, 0xef, 0x06, 0x46, 0x80, 0xc6, 0xef, 0x65, 0xa0, 0xa8, 0x84, 0x07, - 0x6f, 0xcf, 0xf6, 0xe8, 0xb5, 0x17, 0xcb, 0x9c, 0xf5, 0xe9, 0x9e, 0x7d, 0x03, 0x40, 0xc9, 0xa0, - 0x44, 0xcf, 0x6e, 0x4f, 0xf1, 0xd1, 0xa4, 0x61, 0x42, 0x77, 0x8c, 0xdf, 0x7c, 0xa8, 0xee, 0xaf, - 0x91, 0x4b, 0xf8, 0xc9, 0xee, 0x2e, 0x5b, 0xe2, 0x6b, 0x50, 0x7b, 0xb2, 0xff, 0x78, 0xff, 0xe0, - 0xd9, 0xfe, 0x51, 0xdb, 0x30, 0x0e, 0x0c, 0xe5, 0x19, 0xde, 0x68, 0x6d, 0x1d, 0x75, 0xf6, 0x0f, - 0x9f, 0xf4, 0x58, 0xb6, 0xf1, 0x2f, 0x33, 0x50, 0x4b, 0xc9, 0xae, 0x3f, 0xdb, 0xa9, 0x4b, 0x0c, - 0x7f, 0x6e, 0xfe, 0xf0, 0xe7, 0x2f, 0x1b, 0xfe, 0xc2, 0xf4, 0xf0, 0xff, 0x56, 0x06, 0x6a, 0x29, - 0x19, 0x99, 0xe4, 0x9e, 0x49, 0x73, 0x4f, 0x9e, 0xf4, 0xd9, 0xa9, 0x93, 0xbe, 0x09, 0xcb, 0xe1, - 0xef, 0xfd, 0xd8, 0xe3, 0x90, 0x82, 0x25, 0x71, 0xe8, 0x02, 0x49, 0x3e, 0x8d, 0x43, 0x97, 0x48, - 0xae, 0x6e, 0x2d, 0x5d, 0x98, 0x0d, 0xe8, 0x3d, 0x81, 0xc6, 0xe5, 0x12, 0xf4, 0x8a, 0x2e, 0x3c, - 0x82, 0xea, 0x38, 0xde, 0xa6, 0x2f, 0xa7, 0x96, 0x24, 0x29, 0x5f, 0xd0, 0xce, 0xdf, 0xce, 0xc0, - 0x4a, 0x5a, 0xe6, 0xfe, 0xb9, 0x1e, 0xd6, 0x7f, 0x9e, 0x81, 0xb5, 0x19, 0x49, 0x7e, 0xa5, 0x62, - 0x37, 0xdd, 0xae, 0xec, 0x02, 0xed, 0xca, 0xcd, 0x69, 0xd7, 0xe5, 0x92, 0xe4, 0xea, 0x16, 0x77, - 0xe1, 0x73, 0x97, 0x9e, 0x09, 0x57, 0x0c, 0x75, 0x8a, 0x69, 0x6e, 0x9a, 0xe9, 0x6f, 0x66, 0xe0, - 0xf6, 0x55, 0xf2, 0xfe, 0xff, 0xfb, 0xba, 0x9a, 0x6e, 0x61, 0xf3, 0xbd, 0x28, 0x75, 0xa2, 0x0a, - 0x25, 0xfd, 0x4e, 0x97, 0x4e, 0x5d, 0x1f, 0x7a, 0xcf, 0x5d, 0xe5, 0x89, 0x36, 0x84, 0xa9, 0x5f, - 0x32, 0x30, 0xc4, 0xd8, 0xb1, 0x29, 0x46, 0x7a, 0x0b, 0xa0, 0x45, 0x76, 0x5d, 0x78, 0xb1, 0x68, - 0x73, 0xf7, 0xa0, 0xdb, 0x66, 0x4b, 0x49, 0x25, 0xf6, 0xd3, 0x50, 0x10, 0x37, 0x0f, 0xa1, 0x18, - 0x5f, 0xf5, 0xd8, 0x33, 0xfd, 0x53, 0x4b, 0x45, 0x22, 0x97, 0xa1, 0x7c, 0xa8, 0x4d, 0x28, 0x55, - 0xd5, 0xc7, 0xdd, 0x83, 0x7d, 0xe5, 0xf4, 0xde, 0x3a, 0xe8, 0xa9, 0x0b, 0x23, 0xdd, 0xa7, 0x8f, - 0x54, 0x48, 0xec, 0x91, 0xd1, 0x3a, 0xdc, 0x39, 0x22, 0x8c, 0x42, 0xf3, 0x37, 0xf2, 0xe1, 0xa9, - 0xd6, 0x34, 0x74, 0x8c, 0x13, 0xa0, 0x88, 0xd2, 0xdc, 0xd3, 0x8c, 0xa3, 0x6a, 0x28, 0xc9, 0xb9, - 0x7d, 0xae, 0xfc, 0x10, 0x2c, 0xcb, 0x8b, 0x90, 0x3d, 0x3c, 0x56, 0xb9, 0x57, 0x3b, 0x72, 0xe4, - 0xa8, 0x9b, 0xa6, 0xbd, 0x73, 0xc9, 0x0a, 0xf8, 0x63, 0x33, 0x38, 0x63, 0xc5, 0xe6, 0xbf, 0xca, - 0x41, 0x25, 0x12, 0x95, 0x2f, 0x23, 0xba, 0x39, 0x87, 0x95, 0xce, 0x7e, 0xaf, 0x6d, 0xec, 0xb7, - 0x76, 0x35, 0x4a, 0x8e, 0x5f, 0x83, 0xd5, 0xed, 0xce, 0x6e, 0xfb, 0x68, 0xf7, 0xa0, 0xb5, 0xa5, - 0x81, 0x65, 0x7e, 0x13, 0x78, 0x67, 0xef, 0xf0, 0xc0, 0xe8, 0x1d, 0x75, 0xba, 0x47, 0x9b, 0xad, - 0xfd, 0xcd, 0xf6, 0x6e, 0x7b, 0x8b, 0x15, 0xf9, 0x2b, 0x70, 0x77, 0xff, 0xa0, 0xd7, 0x39, 0xd8, - 0x3f, 0xda, 0x3f, 0x38, 0x3a, 0xd8, 0xf8, 0xb8, 0xbd, 0xd9, 0xeb, 0x1e, 0x75, 0xf6, 0x8f, 0x90, - 0xeb, 0x23, 0xa3, 0x85, 0x5f, 0x58, 0x81, 0xdf, 0x85, 0xdb, 0x1a, 0xab, 0xdb, 0x36, 0x9e, 0xb6, - 0x0d, 0x64, 0xf2, 0x64, 0xbf, 0xf5, 0xb4, 0xd5, 0xd9, 0x6d, 0x6d, 0xec, 0xb6, 0xd9, 0x32, 0xbf, - 0x03, 0x0d, 0x8d, 0x61, 0xb4, 0x7a, 0xed, 0xa3, 0xdd, 0xce, 0x5e, 0xa7, 0x77, 0xd4, 0xfe, 0xce, - 0x66, 0xbb, 0xbd, 0xd5, 0xde, 0x62, 0x35, 0xfe, 0x3a, 0x7c, 0x99, 0x1a, 0xa5, 0x1b, 0x91, 0xae, - 0xec, 0xd3, 0xce, 0xe1, 0x51, 0xcb, 0xd8, 0xdc, 0xe9, 0x3c, 0x6d, 0xb3, 0x15, 0xfe, 0x1a, 0x7c, - 0xe9, 0x72, 0xd4, 0xad, 0x8e, 0xd1, 0xde, 0xec, 0x1d, 0x18, 0x9f, 0xb0, 0x35, 0xfe, 0x05, 0xf8, - 0xdc, 0x4e, 0x6f, 0x6f, 0xf7, 0xe8, 0x99, 0x71, 0xb0, 0xff, 0xe8, 0x88, 0x7e, 0x76, 0x7b, 0xc6, - 0x93, 0xcd, 0xde, 0x13, 0xa3, 0xcd, 0x80, 0x37, 0xe0, 0xe6, 0xe1, 0xc6, 0xd1, 0xfe, 0x41, 0xef, - 0xa8, 0xb5, 0xff, 0xc9, 0xc6, 0xee, 0xc1, 0xe6, 0xe3, 0xa3, 0xed, 0x03, 0x63, 0xaf, 0xd5, 0x63, - 0x55, 0xfe, 0x15, 0x78, 0x6d, 0xb3, 0xfb, 0x54, 0x37, 0xf3, 0x60, 0xfb, 0xc8, 0x38, 0x78, 0xd6, - 0x3d, 0x3a, 0x30, 0x8e, 0x8c, 0xf6, 0x2e, 0xf5, 0xb9, 0x1b, 0xb7, 0xbd, 0xc4, 0x6f, 0x43, 0xbd, - 0xb3, 0xdf, 0x7d, 0xb2, 0xbd, 0xdd, 0xd9, 0xec, 0xb4, 0xf7, 0x7b, 0x47, 0x87, 0x6d, 0x63, 0xaf, - 0xd3, 0xed, 0x22, 0x1a, 0xab, 0x34, 0xbf, 0x05, 0xc5, 0x8e, 0x7b, 0x66, 0x4b, 0xda, 0x5f, 0x7a, - 0x31, 0x6a, 0x8b, 0x2b, 0x2c, 0xd2, 0xb6, 0xb0, 0x07, 0x2e, 0xbd, 0xa0, 0x40, 0xbb, 0x6b, 0xd9, - 0x88, 0x01, 0xcd, 0xdf, 0xcb, 0x41, 0x4d, 0xb1, 0x08, 0x2d, 0xb8, 0x7b, 0xb0, 0xaa, 0x5d, 0xa1, - 0x9d, 0xb4, 0x08, 0x9b, 0x06, 0xd3, 0xd3, 0x64, 0x0a, 0x94, 0x10, 0x64, 0x49, 0x10, 0xbf, 0x09, - 0x45, 0xb3, 0xef, 0xa0, 0x19, 0xa8, 0xe2, 0x95, 0xba, 0xf4, 0x59, 0x65, 0x17, 0xca, 0x45, 0x85, - 0xd8, 0xf7, 0xdc, 0xcd, 0xe8, 0x12, 0x4d, 0x0a, 0xc6, 0x3f, 0x85, 0x5b, 0x51, 0xb9, 0xed, 0xf6, - 0xfd, 0x8b, 0x71, 0xf4, 0x76, 0x60, 0x69, 0xae, 0x33, 0x61, 0xdb, 0x76, 0x44, 0x0a, 0xd1, 0xb8, - 0x8c, 0x01, 0x7f, 0x04, 0x60, 0xd3, 0x60, 0x91, 0x7e, 0x34, 0xff, 0xa6, 0x78, 0x6a, 0x34, 0x75, - 0x49, 0xab, 0x81, 0xd1, 0x6f, 0x3c, 0x20, 0x06, 0x28, 0x77, 0x1f, 0xeb, 0xa7, 0x06, 0x97, 0x8d, - 0xa8, 0xdc, 0x7c, 0x00, 0x10, 0x53, 0x71, 0x06, 0xcb, 0xa8, 0x5b, 0xb4, 0x82, 0x3d, 0x31, 0x3a, - 0x16, 0xbe, 0xca, 0x5b, 0x54, 0x90, 0x47, 0x48, 0xc1, 0x32, 0xcd, 0x3f, 0xca, 0x24, 0xec, 0x70, - 0x65, 0x67, 0x5f, 0x79, 0x02, 0xcd, 0x8b, 0x09, 0xa1, 0x25, 0xac, 0x07, 0x55, 0x2b, 0x46, 0xba, - 0xc8, 0x0f, 0x81, 0xdb, 0xb3, 0x43, 0x99, 0x5f, 0x70, 0x28, 0xe7, 0xd0, 0x4e, 0xbb, 0xf4, 0x0b, - 0xb3, 0x2e, 0xfd, 0x3b, 0x00, 0x03, 0xc7, 0x3b, 0xd6, 0x71, 0xc5, 0xa2, 0xce, 0x74, 0x8a, 0x20, - 0x4d, 0x07, 0xca, 0xe1, 0xbb, 0x89, 0xb8, 0xc6, 0xe8, 0xe5, 0xc4, 0xc8, 0xc1, 0xa9, 0x4a, 0x7c, - 0x07, 0x56, 0x44, 0xba, 0xcd, 0xd9, 0x05, 0xdb, 0x3c, 0x45, 0xd7, 0xfc, 0x3a, 0xac, 0xcd, 0x20, - 0xe1, 0x20, 0x8e, 0x4d, 0x19, 0x3d, 0x9e, 0x80, 0xbf, 0x67, 0xc3, 0xf5, 0xcd, 0xff, 0x98, 0x85, - 0xe5, 0x3d, 0xd3, 0xb5, 0x4f, 0x44, 0x20, 0xc3, 0xd6, 0x06, 0xfd, 0xa1, 0x18, 0x99, 0x61, 0x6b, - 0x55, 0x49, 0x7b, 0x3d, 0xb2, 0xc9, 0x78, 0xc2, 0x4c, 0xf8, 0x09, 0x77, 0xd3, 0x44, 0x0e, 0xa3, - 0xfb, 0x04, 0xba, 0x84, 0x73, 0xe7, 0xd8, 0x7d, 0xe1, 0x06, 0xe1, 0x8e, 0x09, 0x8b, 0x71, 0xf6, - 0x4e, 0xf1, 0x8a, 0xec, 0x9d, 0xd2, 0xec, 0xf8, 0xdf, 0x85, 0x6a, 0xd0, 0xf7, 0x85, 0x70, 0x83, - 0xa1, 0x27, 0xc3, 0x37, 0x37, 0x93, 0x20, 0x4a, 0x1e, 0xf4, 0x9e, 0xbb, 0xb8, 0xc6, 0x77, 0x6d, - 0xf7, 0x54, 0xe7, 0xc4, 0xa5, 0x60, 0xb8, 0x06, 0xc9, 0xe7, 0x63, 0x7f, 0x5f, 0x90, 0xbf, 0xa1, - 0x60, 0x44, 0x65, 0xf2, 0xea, 0x98, 0x52, 0x0c, 0x3c, 0xdf, 0x16, 0xca, 0xb5, 0x59, 0x31, 0x12, - 0x10, 0xa4, 0x75, 0x4c, 0x77, 0x30, 0x31, 0x07, 0x42, 0x87, 0xbf, 0xa3, 0x72, 0xf3, 0x0f, 0x0b, - 0x00, 0x6a, 0x37, 0x04, 0x43, 0x7b, 0x4c, 0xa1, 0x17, 0x5b, 0x67, 0x51, 0xd7, 0x0c, 0xfa, 0xcd, - 0xdf, 0x4f, 0x5d, 0x70, 0x98, 0x0d, 0x96, 0xc6, 0xe4, 0xd3, 0x2e, 0x21, 0x1c, 0x1c, 0x53, 0x0a, - 0x9d, 0x38, 0x45, 0xe3, 0x9f, 0x37, 0x92, 0x20, 0x4a, 0x16, 0x34, 0xa5, 0x68, 0xbb, 0x96, 0x72, - 0x39, 0xe5, 0x8d, 0xa8, 0x4c, 0x57, 0xa4, 0x82, 0xd6, 0x44, 0x7a, 0x86, 0x70, 0xc5, 0xf3, 0xe8, - 0xf6, 0x5f, 0x0c, 0xe2, 0x7b, 0x50, 0x1b, 0x9b, 0x17, 0x23, 0xe1, 0xca, 0x3d, 0x21, 0x87, 0x9e, - 0xa5, 0xb3, 0x9c, 0x5e, 0xbb, 0xbc, 0x81, 0x87, 0x49, 0x74, 0x23, 0x4d, 0x8d, 0x6b, 0xc2, 0x0d, - 0x68, 0x97, 0xa8, 0x69, 0xd4, 0x25, 0xbe, 0x01, 0xa0, 0x7e, 0x25, 0x24, 0xd5, 0x8c, 0x17, 0xca, - 0x1c, 0x89, 0x40, 0xf8, 0x67, 0xb6, 0x92, 0xae, 0x4a, 0x48, 0xc5, 0x54, 0x28, 0x8b, 0x27, 0x81, - 0xf0, 0xdb, 0x23, 0xd3, 0x76, 0xf4, 0x04, 0xc7, 0x00, 0xfe, 0x0e, 0xdc, 0x08, 0x26, 0xc7, 0xb8, - 0x66, 0x8e, 0x45, 0xcf, 0xdb, 0x17, 0xcf, 0x03, 0x47, 0x48, 0x29, 0x7c, 0x9d, 0x49, 0x31, 0xff, - 0x63, 0x73, 0x10, 0xa9, 0x61, 0xf4, 0xbe, 0x0b, 0xfe, 0x8a, 0xd3, 0xb5, 0x22, 0x90, 0xce, 0x65, - 0x63, 0x19, 0x14, 0x7f, 0x0a, 0xa4, 0x53, 0xdd, 0xb2, 0xfc, 0xcb, 0xf0, 0xc5, 0x14, 0x92, 0xa1, - 0x02, 0xd3, 0xc1, 0xb6, 0xed, 0x9a, 0x8e, 0xfd, 0x7d, 0x95, 0x26, 0x90, 0x6b, 0x8e, 0xa1, 0x96, - 0x1a, 0x38, 0xba, 0xae, 0x4a, 0xbf, 0x74, 0xbe, 0x0f, 0x83, 0x65, 0x55, 0xee, 0x4a, 0xdf, 0xa6, - 0x88, 0x4b, 0x04, 0xd9, 0xc4, 0x7d, 0xee, 0xb1, 0x2c, 0xbf, 0x0e, 0x4c, 0x41, 0x3a, 0xae, 0x39, - 0x1e, 0xb7, 0xc6, 0x63, 0x47, 0xb0, 0x1c, 0x5d, 0x05, 0x8e, 0xa1, 0xea, 0x9a, 0x03, 0xcb, 0x37, - 0xbf, 0x03, 0xb7, 0x68, 0x64, 0x9e, 0x0a, 0x3f, 0x32, 0xb4, 0x75, 0x5f, 0x6f, 0xc0, 0x9a, 0xfa, - 0xb5, 0xef, 0x49, 0xf5, 0x99, 0x94, 0x4f, 0x0e, 0x2b, 0x0a, 0x8c, 0xba, 0x57, 0x57, 0xd0, 0x05, - 0xdf, 0x08, 0x16, 0xe1, 0x65, 0x9b, 0x7f, 0x50, 0x04, 0x1e, 0x2f, 0x88, 0x9e, 0x2d, 0xfc, 0x2d, - 0x53, 0x9a, 0x09, 0x4f, 0x69, 0xed, 0xd2, 0x58, 0xff, 0x8b, 0x33, 0xf5, 0x6e, 0x42, 0xd1, 0x0e, - 0xd0, 0x34, 0xd4, 0x09, 0xca, 0xba, 0xc4, 0x77, 0x01, 0xc6, 0xc2, 0xb7, 0x3d, 0x8b, 0x56, 0x50, - 0x61, 0xee, 0x3d, 0x93, 0xd9, 0x46, 0xad, 0x1f, 0x46, 0x34, 0x46, 0x82, 0x1e, 0xdb, 0xa1, 0x4a, - 0x2a, 0x72, 0x5e, 0xa4, 0x46, 0x27, 0x41, 0xfc, 0x4d, 0xb8, 0x36, 0xf6, 0xed, 0xbe, 0x50, 0xd3, - 0xf1, 0x24, 0xb0, 0x36, 0xe9, 0x55, 0xc4, 0x12, 0x61, 0xce, 0xfb, 0x84, 0x2b, 0xd0, 0x74, 0xc9, - 0x60, 0x0a, 0x28, 0x56, 0xac, 0xaf, 0xc4, 0xab, 0x14, 0xde, 0x9a, 0x31, 0xff, 0x23, 0xbf, 0x0f, - 0x4c, 0x7f, 0xd8, 0xb3, 0xdd, 0x5d, 0xe1, 0x0e, 0xe4, 0x90, 0x16, 0x77, 0xcd, 0x98, 0x81, 0x93, - 0x04, 0x53, 0x6f, 0x4f, 0xa9, 0x38, 0x52, 0xc5, 0x88, 0xca, 0xea, 0x99, 0x05, 0xc7, 0xf3, 0xbb, - 0xd2, 0xd7, 0xb9, 0xc8, 0x51, 0x19, 0x75, 0xa8, 0x80, 0xda, 0x7a, 0xe8, 0x7b, 0xd6, 0x84, 0xa2, - 0x1c, 0x4a, 0x88, 0x4d, 0x83, 0x63, 0xcc, 0x3d, 0xd3, 0xd5, 0xe9, 0x92, 0xb5, 0x24, 0x66, 0x04, - 0x26, 0x9b, 0xd0, 0x0b, 0x62, 0x86, 0xab, 0xda, 0x26, 0x4c, 0xc0, 0x34, 0x4e, 0xcc, 0x8a, 0x45, - 0x38, 0x31, 0x1f, 0xea, 0xbf, 0xe5, 0x7b, 0xb6, 0x15, 0xf3, 0x52, 0x99, 0x3b, 0x33, 0xf0, 0x04, - 0x6e, 0xcc, 0x93, 0xa7, 0x70, 0x63, 0xbe, 0xd7, 0xa1, 0xe0, 0x9d, 0x9c, 0x08, 0x9f, 0x9e, 0x1a, - 0xad, 0x18, 0xaa, 0xd0, 0xfc, 0x61, 0x06, 0x20, 0x5e, 0x12, 0xb8, 0x11, 0xe2, 0x52, 0xbc, 0xf1, - 0x6f, 0xc1, 0xb5, 0x24, 0xd8, 0xd1, 0x89, 0xb0, 0xb4, 0x1b, 0xe2, 0x0f, 0x5b, 0xe6, 0x45, 0xc0, - 0xb2, 0xfa, 0xaa, 0xba, 0x86, 0x3d, 0x13, 0x82, 0xb2, 0x0a, 0xaf, 0x03, 0x8b, 0x81, 0x74, 0xff, - 0x30, 0x60, 0xf9, 0x34, 0xea, 0x27, 0xc2, 0xf4, 0x03, 0x56, 0x68, 0xee, 0x40, 0x51, 0x85, 0xc0, - 0xe6, 0x04, 0xaf, 0x5f, 0x2e, 0x13, 0xe5, 0x6f, 0x67, 0x00, 0xb6, 0x54, 0x9e, 0x38, 0x9e, 0xed, - 0x73, 0x72, 0x02, 0xe6, 0xe9, 0x59, 0xa6, 0x65, 0x51, 0xbe, 0x7d, 0x2e, 0x7a, 0xe7, 0x08, 0x8b, - 0xb8, 0x9e, 0xcc, 0x30, 0x73, 0x4c, 0xed, 0xc4, 0xa8, 0xac, 0x8e, 0x95, 0x4d, 0xcf, 0x75, 0x45, - 0x1f, 0x0f, 0xa5, 0xe8, 0x58, 0x89, 0x40, 0xcd, 0x1f, 0x64, 0xa1, 0xb2, 0x39, 0x34, 0xa5, 0x7a, - 0x16, 0xe8, 0x5b, 0x50, 0x1e, 0x89, 0x20, 0x30, 0x07, 0x22, 0xd0, 0x21, 0x9f, 0xe9, 0x78, 0x6d, - 0x84, 0xbb, 0xfe, 0xc4, 0xf5, 0x85, 0x69, 0xa9, 0xb7, 0x90, 0x22, 0x2a, 0xc5, 0xc1, 0x95, 0x91, - 0x49, 0xfe, 0x12, 0x1c, 0xdc, 0xe8, 0xe1, 0x62, 0xc7, 0x0c, 0x14, 0x4a, 0xe4, 0x6e, 0x4b, 0x82, - 0x1a, 0x7b, 0x50, 0x4d, 0x90, 0xf2, 0x57, 0xa0, 0xe6, 0x39, 0x96, 0x08, 0xd4, 0x6d, 0xc8, 0xf8, - 0x01, 0xc9, 0x14, 0x90, 0x12, 0x37, 0x70, 0x3f, 0x0b, 0x5f, 0x47, 0xef, 0xc2, 0x62, 0xf3, 0xd7, - 0xcb, 0x50, 0xc5, 0x46, 0xed, 0xa9, 0x3e, 0xcc, 0x4c, 0x47, 0x1d, 0x4a, 0x9e, 0xe6, 0xac, 0xb3, - 0xc7, 0xbd, 0x04, 0x4f, 0x9d, 0x0c, 0x92, 0x4b, 0x27, 0x83, 0x5c, 0x9d, 0x3d, 0x7e, 0x07, 0x60, - 0xe4, 0x59, 0x24, 0xa5, 0x5b, 0x2a, 0x4a, 0x93, 0x33, 0x12, 0x10, 0x32, 0x73, 0x74, 0xf7, 0xab, - 0xda, 0xcc, 0x51, 0x45, 0x95, 0x95, 0x33, 0x76, 0x2e, 0x7a, 0x9e, 0x6e, 0x6d, 0xc7, 0x8a, 0x6f, - 0xa3, 0xa7, 0xe1, 0x7c, 0x13, 0x4a, 0x7a, 0x5a, 0x74, 0x2c, 0xea, 0xf5, 0x39, 0x33, 0xa1, 0xd1, - 0xd7, 0xf5, 0x5f, 0x7d, 0x21, 0xcc, 0x08, 0x29, 0xf9, 0x23, 0xa8, 0x9a, 0x52, 0x9a, 0xfd, 0xe1, - 0x48, 0x4b, 0xd5, 0xdc, 0x9c, 0xb0, 0x74, 0x92, 0x51, 0x2b, 0xc2, 0x36, 0x92, 0x94, 0x7c, 0x03, - 0x2a, 0xbe, 0x30, 0x53, 0x91, 0xf1, 0x57, 0xae, 0x60, 0x63, 0x84, 0xb8, 0x46, 0x4c, 0x16, 0xbd, - 0xa5, 0x0a, 0x89, 0xb7, 0x54, 0xef, 0x42, 0x55, 0x2f, 0x1d, 0x03, 0x3f, 0xa9, 0x37, 0x66, 0x92, - 0xa0, 0xc6, 0x8f, 0x33, 0xb0, 0x92, 0xee, 0xde, 0x9f, 0xc5, 0xeb, 0x7f, 0xdf, 0x88, 0x5f, 0xff, - 0xfb, 0x0c, 0x2f, 0xe9, 0xfd, 0x66, 0x06, 0x20, 0x1e, 0x39, 0x3c, 0x5b, 0xd5, 0x2b, 0x65, 0xa1, - 0xb6, 0xaf, 0x4a, 0x7c, 0x27, 0xf5, 0xb4, 0xc5, 0x3b, 0x0b, 0x4d, 0x43, 0xe2, 0x67, 0x22, 0xed, - 0xfd, 0x01, 0xac, 0xa4, 0xe1, 0x74, 0x5d, 0xa0, 0xb3, 0xdb, 0x56, 0xbe, 0xad, 0xce, 0x5e, 0xeb, - 0x51, 0x5b, 0x5f, 0xcc, 0xeb, 0xec, 0x3f, 0x66, 0xd9, 0xc6, 0x1f, 0x67, 0xa0, 0x12, 0x4d, 0x0a, - 0xff, 0x76, 0x72, 0x36, 0x55, 0x82, 0xcc, 0xdb, 0x8b, 0xcc, 0x66, 0xfc, 0xab, 0xed, 0x4a, 0xff, - 0x22, 0x31, 0xb9, 0x0d, 0x0f, 0x56, 0xd2, 0x1f, 0xe7, 0x88, 0xd9, 0x47, 0x69, 0x31, 0xfb, 0xd6, - 0x42, 0x55, 0x86, 0x26, 0xee, 0xae, 0x1d, 0x48, 0x2d, 0x81, 0x3f, 0xc8, 0xbe, 0x9f, 0x69, 0xdc, - 0x85, 0xe5, 0xe4, 0xa7, 0xd9, 0xbb, 0xb9, 0xf7, 0xff, 0x38, 0x07, 0x2b, 0xe9, 0x1c, 0x13, 0xba, - 0xeb, 0xa7, 0xf2, 0x9b, 0x0e, 0x1c, 0x2b, 0x71, 0x53, 0x80, 0xa1, 0x79, 0xad, 0x8d, 0x68, 0x02, - 0xac, 0x91, 0xf7, 0xcc, 0x1b, 0x09, 0x76, 0x37, 0xf9, 0xc2, 0xe9, 0x9b, 0x1c, 0xc2, 0x3b, 0x9a, - 0x6c, 0xcc, 0x2b, 0xfa, 0xad, 0xb7, 0x1f, 0x64, 0x79, 0x2d, 0x91, 0xaf, 0xfe, 0x23, 0xd4, 0x20, - 0x57, 0x37, 0x26, 0xae, 0xe5, 0x08, 0x2b, 0x82, 0xfe, 0x38, 0x09, 0x8d, 0x12, 0xce, 0x7f, 0x90, - 0xe7, 0x2b, 0x50, 0xe9, 0x4e, 0x8e, 0x75, 0xb2, 0xf9, 0x5f, 0xcb, 0xf3, 0x9b, 0xb0, 0xa6, 0xb1, - 0xe2, 0xdc, 0x4e, 0xf6, 0xd7, 0xf1, 0x54, 0x5b, 0x69, 0xa9, 0xf1, 0xd2, 0x0d, 0x65, 0x7f, 0x23, - 0x8f, 0x4d, 0xa0, 0xab, 0xff, 0x7f, 0x93, 0xf8, 0x44, 0x57, 0xa1, 0xd8, 0x2f, 0xe7, 0xf9, 0x2a, - 0x40, 0xb7, 0x17, 0x55, 0xf4, 0xab, 0x79, 0x5e, 0x85, 0x62, 0xb7, 0x47, 0xdc, 0x7e, 0x98, 0xe7, - 0x37, 0x80, 0xc5, 0x5f, 0x75, 0xc6, 0xeb, 0xdf, 0x51, 0x8d, 0x89, 0x52, 0x58, 0xff, 0x6e, 0x1e, - 0xfb, 0x15, 0x8e, 0x32, 0xfb, 0x7b, 0x79, 0xce, 0xa0, 0x9a, 0xf0, 0xc9, 0xb2, 0xbf, 0x9f, 0xe7, - 0x1c, 0x6a, 0x7b, 0x76, 0x10, 0xd8, 0xee, 0x40, 0xf7, 0xe0, 0x57, 0xa8, 0xe6, 0xed, 0xe8, 0x36, - 0x17, 0xfb, 0xb5, 0x3c, 0xbf, 0x05, 0x3c, 0x19, 0x87, 0xd2, 0x1f, 0x7e, 0x9d, 0xa8, 0xd5, 0x49, - 0x1a, 0x68, 0xd8, 0x3f, 0x20, 0x6a, 0x5c, 0x09, 0x1a, 0xf0, 0x1b, 0x34, 0x20, 0x9b, 0x71, 0x8e, - 0xac, 0x86, 0xff, 0x88, 0x88, 0xc3, 0xc9, 0x54, 0xb0, 0x1f, 0xe7, 0xef, 0xff, 0x0e, 0xc5, 0x11, - 0x92, 0xa9, 0x66, 0x7c, 0x19, 0xca, 0x8e, 0xe7, 0x0e, 0xa4, 0x7a, 0x59, 0xb6, 0x06, 0x95, 0x60, - 0xe8, 0xf9, 0x92, 0x8a, 0x74, 0xdd, 0xd4, 0xa5, 0x67, 0x09, 0xd4, 0x75, 0x05, 0x65, 0x0d, 0x2a, - 0xbf, 0xac, 0x34, 0x07, 0xac, 0x1a, 0x65, 0xf7, 0xe6, 0xa3, 0x0c, 0x64, 0x7a, 0x1e, 0x21, 0xbc, - 0x7e, 0xce, 0x8a, 0x88, 0x3a, 0xf1, 0x1d, 0x95, 0x89, 0x2c, 0xd0, 0x12, 0x50, 0x4f, 0x48, 0x8e, - 0x87, 0x68, 0x70, 0x54, 0x14, 0xd4, 0xfb, 0xae, 0xad, 0x2e, 0x36, 0xeb, 0xc4, 0x3e, 0x0b, 0xdb, - 0x11, 0xe5, 0xae, 0x30, 0x71, 0xff, 0x1f, 0x66, 0x60, 0x39, 0x7c, 0x14, 0xc0, 0x1e, 0xd8, 0xae, - 0xca, 0x65, 0x0e, 0xdf, 0xeb, 0xed, 0x3b, 0xf6, 0x38, 0x7c, 0xff, 0x72, 0x15, 0xaa, 0x96, 0x6f, - 0x0e, 0x5a, 0xae, 0xb5, 0xe5, 0x7b, 0x63, 0xd5, 0x6c, 0x15, 0x69, 0x54, 0x39, 0xd4, 0xcf, 0xc5, - 0x31, 0xa2, 0x8f, 0x85, 0xcf, 0xf2, 0x94, 0x34, 0x38, 0x34, 0x7d, 0xdb, 0x1d, 0xb4, 0xcf, 0xa5, - 0x70, 0x03, 0x95, 0x4b, 0x5d, 0x85, 0xd2, 0x24, 0x10, 0x7d, 0x33, 0x10, 0xac, 0x88, 0x85, 0xe3, - 0x89, 0xed, 0x48, 0xdb, 0x55, 0xcf, 0x4e, 0x46, 0xc9, 0xd2, 0x65, 0xec, 0x99, 0x39, 0xb6, 0x59, - 0xe5, 0xfe, 0xbf, 0xcd, 0x40, 0x95, 0x96, 0x45, 0xec, 0x4b, 0x8f, 0xb5, 0xb8, 0x2a, 0x94, 0x76, - 0xa3, 0xf7, 0x07, 0x8b, 0x90, 0x3d, 0x38, 0x55, 0xbe, 0x74, 0xbd, 0x2c, 0xd4, 0xed, 0x5d, 0xf5, - 0x14, 0x61, 0x9e, 0x7f, 0x0e, 0x6e, 0x18, 0x62, 0xe4, 0x49, 0xf1, 0xcc, 0xb4, 0x65, 0xf2, 0xde, - 0x52, 0x01, 0xcd, 0x40, 0xf5, 0x29, 0xbc, 0xa8, 0x54, 0x24, 0x33, 0x10, 0xab, 0x0d, 0x21, 0x25, - 0xec, 0x3d, 0x41, 0xb4, 0x5d, 0x58, 0x8e, 0x50, 0x3e, 0xf6, 0x6c, 0x17, 0x6b, 0xa3, 0x1b, 0xe5, - 0x04, 0xa1, 0xa0, 0x0c, 0x82, 0xe0, 0xfe, 0x3e, 0xdc, 0x9c, 0x1f, 0x4a, 0x50, 0x77, 0xcd, 0xe9, - 0xd1, 0x6b, 0xba, 0xc9, 0xf2, 0xcc, 0xb7, 0xd5, 0xa5, 0xe0, 0x0a, 0x14, 0x0e, 0x9e, 0xbb, 0xb4, - 0x2c, 0xd6, 0xa0, 0xb6, 0xef, 0x25, 0x68, 0x58, 0xee, 0x7e, 0x3f, 0x15, 0xfd, 0x89, 0x07, 0x25, - 0x6c, 0xc4, 0x52, 0xe2, 0x96, 0x56, 0x46, 0xc5, 0x15, 0xe8, 0xff, 0x96, 0xa8, 0x77, 0x38, 0x74, - 0xd4, 0xc5, 0x52, 0xef, 0x70, 0x44, 0xcd, 0xcc, 0xab, 0x07, 0xc9, 0xdc, 0xbe, 0x70, 0x84, 0xc5, - 0x0a, 0xf7, 0xdf, 0x87, 0x55, 0xdd, 0xd5, 0xbe, 0x08, 0x82, 0xf0, 0x96, 0xd3, 0xa1, 0x6f, 0x9f, - 0xa9, 0xb7, 0x3e, 0x96, 0xa1, 0x7c, 0x28, 0xfc, 0xc0, 0x73, 0xe9, 0x9d, 0x13, 0x80, 0x62, 0x77, - 0x68, 0xfa, 0x58, 0xc7, 0xfd, 0xaf, 0xea, 0x41, 0x7a, 0x72, 0x1e, 0x1e, 0x0d, 0xb8, 0x7f, 0xf4, - 0x33, 0x3f, 0xa6, 0x34, 0x35, 0xba, 0xf4, 0x85, 0x39, 0x62, 0xd9, 0xfb, 0x9b, 0x50, 0xa1, 0x4b, - 0x52, 0x8f, 0x6d, 0xd7, 0xc2, 0x8e, 0x6f, 0xe8, 0x84, 0x7d, 0x7a, 0x7f, 0xea, 0x8c, 0x86, 0xa3, - 0xac, 0x5e, 0xea, 0x65, 0x59, 0x7e, 0x13, 0x78, 0x6b, 0x22, 0xbd, 0x91, 0x49, 0xd7, 0x99, 0x9d, - 0x0b, 0xf5, 0xaa, 0x73, 0xee, 0xfe, 0x37, 0x81, 0x2b, 0xdf, 0x9c, 0x25, 0xce, 0x6d, 0x77, 0x10, - 0xbd, 0xa3, 0x00, 0xf4, 0x28, 0x8a, 0x25, 0xce, 0xc3, 0x1b, 0x6e, 0x61, 0x21, 0x7c, 0x9a, 0x65, - 0xdb, 0x9b, 0xb8, 0xd8, 0xe8, 0xa7, 0x70, 0x5d, 0x2d, 0x31, 0xec, 0x05, 0xdd, 0x95, 0xbd, 0xd4, - 0x61, 0xa0, 0x6e, 0xb8, 0xc9, 0x49, 0x10, 0xe1, 0xb2, 0x0c, 0x36, 0x2c, 0x32, 0xb6, 0x63, 0x78, - 0xf6, 0x7e, 0x13, 0xae, 0xcd, 0xf1, 0x78, 0x90, 0x50, 0x57, 0x76, 0x1f, 0x5b, 0xba, 0xff, 0x11, - 0xac, 0x29, 0x31, 0xb4, 0xaf, 0x6e, 0x33, 0x86, 0xc3, 0xf6, 0xac, 0xb3, 0xdd, 0x51, 0x23, 0xbd, + 0x27, 0x37, 0xcc, 0x40, 0xf0, 0x37, 0xa0, 0x78, 0x8c, 0xc8, 0xa0, 0x9e, 0xb9, 0x9b, 0xbb, 0x57, + 0x7d, 0x78, 0x7d, 0x3d, 0x25, 0x78, 0x9d, 0x38, 0x0c, 0x4d, 0xc3, 0xdf, 0x82, 0x92, 0x25, 0xa4, + 0x69, 0x3b, 0x41, 0x3d, 0x7b, 0x37, 0x73, 0xaf, 0xfa, 0xf0, 0xd6, 0xba, 0x7a, 0xf1, 0x7a, 0xf8, + 0xe2, 0xf5, 0x2e, 0xbd, 0xd8, 0x08, 0xe9, 0xf8, 0x7b, 0x50, 0x3e, 0xb1, 0x1d, 0xf1, 0x58, 0x5c, + 0x04, 0xf5, 0xdc, 0x95, 0x3c, 0x1b, 0xd9, 0x7a, 0xc6, 0x88, 0x88, 0xf9, 0x26, 0xac, 0x88, 0x73, + 0xe9, 0x9b, 0x86, 0x70, 0x4c, 0x69, 0x7b, 0x6e, 0x50, 0xcf, 0x53, 0x0b, 0x6f, 0x4d, 0xb5, 0x30, + 0x7c, 0x4e, 0xec, 0x53, 0x2c, 0xfc, 0x2e, 0x54, 0xbd, 0xe3, 0xef, 0x8a, 0xbe, 0xec, 0x5d, 0x8c, + 0x45, 0x50, 0x2f, 0xdc, 0xcd, 0xdd, 0xab, 0x18, 0x49, 0x14, 0xff, 0x3a, 0x54, 0xfb, 0x9e, 0xe3, + 0x88, 0xbe, 0x7a, 0x47, 0xf1, 0xea, 0x6e, 0x25, 0x69, 0xf9, 0x3b, 0x70, 0xc3, 0x17, 0x23, 0xef, + 0x4c, 0x58, 0x9b, 0x11, 0x96, 0xfa, 0x59, 0xa6, 0xd7, 0xcc, 0x7f, 0xc8, 0x5b, 0x50, 0xf3, 0x75, + 0xfb, 0x76, 0x6d, 0xf7, 0x34, 0xa8, 0x97, 0xa8, 0x5b, 0x9f, 0xbf, 0xa4, 0x5b, 0x48, 0x63, 0xa4, + 0x39, 0x38, 0x83, 0xdc, 0xa9, 0xb8, 0xa8, 0x57, 0xee, 0x66, 0xee, 0x55, 0x0c, 0xfc, 0xc9, 0x3f, + 0x80, 0xba, 0xe7, 0xdb, 0x03, 0xdb, 0x35, 0x9d, 0x4d, 0x5f, 0x98, 0x52, 0x58, 0x3d, 0x7b, 0x24, + 0x02, 0x69, 0x8e, 0xc6, 0x75, 0xb8, 0x9b, 0xb9, 0x97, 0x33, 0x2e, 0x7d, 0xce, 0xdf, 0x56, 0x33, + 0xd4, 0x71, 0x4f, 0xbc, 0x7a, 0x55, 0x77, 0x3f, 0xdd, 0x96, 0x6d, 0xfd, 0xd8, 0x88, 0x08, 0x9b, + 0x3f, 0xcf, 0x42, 0xb1, 0x2b, 0x4c, 0xbf, 0x3f, 0x6c, 0xfc, 0x4a, 0x06, 0x8a, 0x86, 0x08, 0x26, + 0x8e, 0xe4, 0x0d, 0x28, 0xab, 0xb1, 0xed, 0x58, 0xf5, 0x0c, 0xb5, 0x2e, 0x82, 0x3f, 0xcb, 0xda, + 0x59, 0x87, 0xfc, 0x48, 0x48, 0xb3, 0x9e, 0xa3, 0x11, 0x6a, 0x4c, 0xb5, 0x4a, 0xbd, 0x7e, 0x7d, + 0x4f, 0x48, 0xd3, 0x20, 0xba, 0xc6, 0xcf, 0x32, 0x90, 0x47, 0x90, 0xdf, 0x86, 0xca, 0xd0, 0x1e, + 0x0c, 0x1d, 0x7b, 0x30, 0x94, 0xba, 0x21, 0x31, 0x82, 0x7f, 0x04, 0xab, 0x11, 0x60, 0x98, 0xee, + 0x40, 0x60, 0x8b, 0xe6, 0x2d, 0x7e, 0x7a, 0x68, 0x4c, 0x13, 0xf3, 0x3a, 0x94, 0x68, 0x3f, 0x74, + 0x2c, 0x5a, 0xd1, 0x15, 0x23, 0x04, 0x71, 0xb9, 0x85, 0x33, 0xf5, 0x58, 0x5c, 0xd4, 0xf3, 0xf4, + 0x34, 0x89, 0xe2, 0x2d, 0x58, 0x0d, 0xc1, 0x2d, 0x3d, 0x1a, 0x85, 0xab, 0x47, 0x63, 0x9a, 0xbe, + 0xf9, 0x83, 0x3d, 0x28, 0xd0, 0xb6, 0xe4, 0x2b, 0x90, 0xb5, 0xc3, 0x81, 0xce, 0xda, 0x16, 0x7f, + 0x00, 0xc5, 0x13, 0x5b, 0x38, 0xd6, 0x0b, 0x47, 0x58, 0x93, 0xf1, 0x36, 0x2c, 0xfb, 0x22, 0x90, + 0xbe, 0xad, 0x57, 0xbf, 0xda, 0xa0, 0x5f, 0x9c, 0xa7, 0x03, 0xd6, 0x8d, 0x04, 0xa1, 0x91, 0x62, + 0xc3, 0x6e, 0xf7, 0x87, 0xb6, 0x63, 0xf9, 0xc2, 0xed, 0x58, 0x6a, 0x9f, 0x56, 0x8c, 0x24, 0x8a, + 0xdf, 0x83, 0xd5, 0x63, 0xb3, 0x7f, 0x3a, 0xf0, 0xbd, 0x89, 0x8b, 0x1b, 0xc2, 0xf3, 0xa9, 0xdb, + 0x15, 0x63, 0x1a, 0xcd, 0xdf, 0x84, 0x82, 0xe9, 0xd8, 0x03, 0x97, 0x76, 0xe2, 0xca, 0xcc, 0xa4, + 0xab, 0xb6, 0xb4, 0x90, 0xc2, 0x50, 0x84, 0x7c, 0x07, 0x6a, 0x67, 0xc2, 0x97, 0x76, 0xdf, 0x74, + 0x08, 0x5f, 0x2f, 0x11, 0x67, 0x73, 0x2e, 0xe7, 0xd3, 0x24, 0xa5, 0x91, 0x66, 0xe4, 0x1d, 0x80, + 0x00, 0xd5, 0x24, 0x4d, 0xa7, 0xde, 0x0b, 0xaf, 0xcd, 0x15, 0xb3, 0xe9, 0xb9, 0x52, 0xb8, 0x72, + 0xbd, 0x1b, 0x91, 0xef, 0x2c, 0x19, 0x09, 0x66, 0xfe, 0x1e, 0xe4, 0xa5, 0x38, 0x97, 0xf5, 0x95, + 0x2b, 0x46, 0x34, 0x14, 0xd2, 0x13, 0xe7, 0x72, 0x67, 0xc9, 0x20, 0x06, 0x64, 0xc4, 0x4d, 0x56, + 0x5f, 0x5d, 0x80, 0x11, 0xf7, 0x25, 0x32, 0x22, 0x03, 0xff, 0x10, 0x8a, 0x8e, 0x79, 0xe1, 0x4d, + 0x64, 0x9d, 0x11, 0xeb, 0x97, 0xae, 0x64, 0xdd, 0x25, 0xd2, 0x9d, 0x25, 0x43, 0x33, 0xf1, 0x77, + 0x20, 0x67, 0xd9, 0x67, 0xf5, 0x35, 0xe2, 0xbd, 0x7b, 0x25, 0xef, 0x96, 0x7d, 0xb6, 0xb3, 0x64, + 0x20, 0x39, 0xdf, 0x84, 0xf2, 0xb1, 0xe7, 0x9d, 0x8e, 0x4c, 0xff, 0xb4, 0xce, 0x89, 0xf5, 0xcb, + 0x57, 0xb2, 0x6e, 0x68, 0xe2, 0x9d, 0x25, 0x23, 0x62, 0xc4, 0x2e, 0xdb, 0x7d, 0xcf, 0xad, 0x5f, + 0x5b, 0xa0, 0xcb, 0x9d, 0xbe, 0xe7, 0x62, 0x97, 0x91, 0x01, 0x19, 0x1d, 0xdb, 0x3d, 0xad, 0x5f, + 0x5f, 0x80, 0x11, 0x35, 0x27, 0x32, 0x22, 0x03, 0x36, 0xdb, 0x32, 0xa5, 0x79, 0x66, 0x8b, 0xe7, + 0xf5, 0x1b, 0x0b, 0x34, 0x7b, 0x4b, 0x13, 0x63, 0xb3, 0x43, 0x46, 0x14, 0x12, 0x6e, 0xcd, 0xfa, + 0xcd, 0x05, 0x84, 0x84, 0x1a, 0x1d, 0x85, 0x84, 0x8c, 0xfc, 0xcf, 0xc3, 0xda, 0x89, 0x30, 0xe5, + 0xc4, 0x17, 0x56, 0x7c, 0xd0, 0xdd, 0x22, 0x69, 0xeb, 0x57, 0xcf, 0xfd, 0x34, 0xd7, 0xce, 0x92, + 0x31, 0x2b, 0x8a, 0x7f, 0x00, 0x05, 0xc7, 0x94, 0xe2, 0xbc, 0x5e, 0x27, 0x99, 0xcd, 0x17, 0x2c, + 0x0a, 0x29, 0xce, 0x77, 0x96, 0x0c, 0xc5, 0xc2, 0xbf, 0x03, 0xab, 0xd2, 0x3c, 0x76, 0xc4, 0xc1, + 0x89, 0x26, 0x08, 0xea, 0x9f, 0x23, 0x29, 0x6f, 0x5c, 0xbd, 0x9c, 0xd3, 0x3c, 0x3b, 0x4b, 0xc6, + 0xb4, 0x18, 0x6c, 0x15, 0xa1, 0xea, 0x8d, 0x05, 0x5a, 0x45, 0xf2, 0xb0, 0x55, 0xc4, 0xc2, 0x77, + 0xa1, 0x4a, 0x3f, 0x36, 0x3d, 0x67, 0x32, 0x72, 0xeb, 0x9f, 0x27, 0x09, 0xf7, 0x5e, 0x2c, 0x41, + 0xd1, 0xef, 0x2c, 0x19, 0x49, 0x76, 0x9c, 0x44, 0x02, 0x0d, 0xef, 0x79, 0xfd, 0xf6, 0x02, 0x93, + 0xd8, 0xd3, 0xc4, 0x38, 0x89, 0x21, 0x23, 0x6e, 0xbd, 0xe7, 0xb6, 0x35, 0x10, 0xb2, 0xfe, 0x85, + 0x05, 0xb6, 0xde, 0x33, 0x22, 0xc5, 0xad, 0xa7, 0x98, 0x70, 0x19, 0xf7, 0x87, 0xa6, 0xac, 0xdf, + 0x59, 0x60, 0x19, 0x6f, 0x0e, 0x4d, 0xd2, 0x15, 0xc8, 0xd0, 0xf8, 0x3e, 0x2c, 0x27, 0xb5, 0x32, + 0xe7, 0x90, 0xf7, 0x85, 0xa9, 0x4e, 0x84, 0xb2, 0x41, 0xbf, 0x11, 0x27, 0x2c, 0x5b, 0xd2, 0x89, + 0x50, 0x36, 0xe8, 0x37, 0xbf, 0x09, 0x45, 0x65, 0x9b, 0x90, 0xc2, 0x2f, 0x1b, 0x1a, 0x42, 0x5a, + 0xcb, 0x37, 0x07, 0x74, 0x6e, 0x95, 0x0d, 0xfa, 0x8d, 0xb4, 0x96, 0xef, 0x8d, 0x0f, 0x5c, 0x52, + 0xd8, 0x65, 0x43, 0x43, 0x8d, 0x9f, 0x7d, 0x08, 0x25, 0xdd, 0xa8, 0xc6, 0x3f, 0xc8, 0x40, 0x51, + 0x29, 0x14, 0xfe, 0x4d, 0x28, 0x04, 0xf2, 0xc2, 0x11, 0xd4, 0x86, 0x95, 0x87, 0xaf, 0x2f, 0xa0, + 0x84, 0xd6, 0xbb, 0xc8, 0x60, 0x28, 0xbe, 0xa6, 0x01, 0x05, 0x82, 0x79, 0x09, 0x72, 0x86, 0xf7, + 0x9c, 0x2d, 0x71, 0x80, 0xa2, 0x9a, 0x2c, 0x96, 0x41, 0xe4, 0x96, 0x7d, 0xc6, 0xb2, 0x88, 0xdc, + 0x11, 0xa6, 0x25, 0x7c, 0x96, 0xe3, 0x35, 0xa8, 0x84, 0xd3, 0x12, 0xb0, 0x3c, 0x67, 0xb0, 0x9c, + 0x98, 0xf0, 0x80, 0x15, 0x1a, 0xff, 0x2b, 0x0f, 0x79, 0xdc, 0xff, 0xfc, 0x15, 0xa8, 0x49, 0xd3, + 0x1f, 0x08, 0x65, 0x08, 0x47, 0x46, 0x4a, 0x1a, 0xc9, 0x3f, 0x0c, 0xfb, 0x90, 0xa5, 0x3e, 0xbc, + 0xf6, 0x42, 0xbd, 0x92, 0xea, 0x41, 0xe2, 0x14, 0xce, 0x2d, 0x76, 0x0a, 0x6f, 0x43, 0x19, 0xd5, + 0x59, 0xd7, 0xfe, 0xbe, 0xa0, 0xa1, 0x5f, 0x79, 0x78, 0xff, 0xc5, 0xaf, 0xec, 0x68, 0x0e, 0x23, + 0xe2, 0xe5, 0x1d, 0xa8, 0xf4, 0x4d, 0xdf, 0xa2, 0xc6, 0xd0, 0x6c, 0xad, 0x3c, 0xfc, 0xca, 0x8b, + 0x05, 0x6d, 0x86, 0x2c, 0x46, 0xcc, 0xcd, 0x0f, 0xa0, 0x6a, 0x89, 0xa0, 0xef, 0xdb, 0x63, 0x52, + 0x6f, 0xea, 0x2c, 0xfe, 0xea, 0x8b, 0x85, 0x6d, 0xc5, 0x4c, 0x46, 0x52, 0x02, 0x5a, 0x64, 0x7e, + 0xa4, 0xdf, 0x4a, 0x64, 0x20, 0xc4, 0x88, 0xe6, 0x7b, 0x50, 0x0e, 0xfb, 0xc3, 0x97, 0xa1, 0x8c, + 0x7f, 0xf7, 0x3d, 0x57, 0xb0, 0x25, 0x9c, 0x5b, 0x84, 0xba, 0x23, 0xd3, 0x71, 0x58, 0x86, 0xaf, + 0x00, 0x20, 0xb8, 0x27, 0x2c, 0x7b, 0x32, 0x62, 0xd9, 0xe6, 0x2f, 0x84, 0xab, 0xa5, 0x0c, 0xf9, + 0x43, 0x73, 0x80, 0x1c, 0xcb, 0x50, 0x0e, 0xd5, 0x35, 0xcb, 0x20, 0xff, 0x96, 0x19, 0x0c, 0x8f, + 0x3d, 0xd3, 0xb7, 0x58, 0x96, 0x57, 0xa1, 0xd4, 0xf2, 0xfb, 0x43, 0xfb, 0x4c, 0xb0, 0x5c, 0xf3, + 0x01, 0x54, 0x13, 0xed, 0x45, 0x11, 0xfa, 0xa5, 0x15, 0x28, 0xb4, 0x2c, 0x4b, 0x58, 0x2c, 0x83, + 0x0c, 0xba, 0x83, 0x2c, 0xdb, 0xfc, 0x0a, 0x54, 0xa2, 0xd1, 0x42, 0x72, 0x3c, 0xb8, 0xd9, 0x12, + 0xfe, 0x42, 0x34, 0xcb, 0xe0, 0xaa, 0xec, 0xb8, 0x8e, 0xed, 0x0a, 0x96, 0x6d, 0xfc, 0x05, 0x5a, + 0xaa, 0xfc, 0x1b, 0xe9, 0x0d, 0xf1, 0xea, 0x8b, 0x4e, 0xd6, 0xf4, 0x6e, 0xf8, 0x7c, 0xa2, 0x7f, + 0xbb, 0x36, 0x35, 0xae, 0x0c, 0xf9, 0x2d, 0x4f, 0x06, 0x2c, 0xd3, 0xf8, 0x6f, 0x59, 0x28, 0x87, + 0x07, 0x2a, 0xfa, 0x04, 0x13, 0xdf, 0xd1, 0x0b, 0x1a, 0x7f, 0xf2, 0xeb, 0x50, 0x90, 0xb6, 0xd4, + 0xcb, 0xb8, 0x62, 0x28, 0x00, 0x6d, 0xb5, 0xe4, 0xcc, 0x2a, 0x03, 0x76, 0x7a, 0xaa, 0xec, 0x91, + 0x39, 0x10, 0x3b, 0x66, 0x30, 0xd4, 0x26, 0x6c, 0x8c, 0x40, 0xfe, 0x13, 0xf3, 0x0c, 0xd7, 0x1c, + 0x3d, 0x57, 0x56, 0x5c, 0x12, 0xc5, 0xdf, 0x86, 0x3c, 0x76, 0x50, 0x2f, 0x9a, 0x3f, 0x37, 0xd5, + 0x61, 0x5c, 0x26, 0x87, 0xbe, 0xc0, 0xe9, 0x59, 0x47, 0x0f, 0xcc, 0x20, 0x62, 0xfe, 0x2a, 0xac, + 0xa8, 0x4d, 0x78, 0x10, 0xfa, 0x0f, 0x25, 0x92, 0x3c, 0x85, 0xe5, 0x2d, 0x1c, 0x4e, 0x53, 0x8a, + 0x7a, 0x79, 0x81, 0xf5, 0x1d, 0x0e, 0xce, 0x7a, 0x17, 0x59, 0x0c, 0xc5, 0xd9, 0x7c, 0x17, 0xc7, + 0xd4, 0x94, 0x02, 0xa7, 0xb9, 0x3d, 0x1a, 0xcb, 0x0b, 0xb5, 0x68, 0xb6, 0x85, 0xec, 0x0f, 0x6d, + 0x77, 0xc0, 0x32, 0x6a, 0x88, 0x71, 0x12, 0x89, 0xc4, 0xf7, 0x3d, 0x9f, 0xe5, 0x1a, 0x0d, 0xc8, + 0xe3, 0x1a, 0x45, 0x25, 0xe9, 0x9a, 0x23, 0xa1, 0x47, 0x9a, 0x7e, 0x37, 0xae, 0xc1, 0xda, 0xcc, + 0x79, 0xdc, 0xf8, 0xbd, 0xa2, 0x5a, 0x21, 0xc8, 0x41, 0xb6, 0xa0, 0xe6, 0x20, 0x33, 0xef, 0xa5, + 0x74, 0x0c, 0x4a, 0x49, 0xeb, 0x98, 0x0f, 0xa1, 0x80, 0x1d, 0x0b, 0x55, 0xcc, 0x02, 0xec, 0x7b, + 0x48, 0x6e, 0x28, 0x2e, 0xf4, 0x60, 0xfa, 0x43, 0xd1, 0x3f, 0x15, 0x96, 0xd6, 0xf5, 0x21, 0x88, + 0x8b, 0xa6, 0x9f, 0x30, 0xcf, 0x15, 0x40, 0x4b, 0xa2, 0xef, 0xb9, 0xed, 0x91, 0xf7, 0x5d, 0x9b, + 0xe6, 0x15, 0x97, 0x44, 0x88, 0x08, 0x9f, 0x76, 0x70, 0x8d, 0xe8, 0x69, 0x8b, 0x11, 0x8d, 0x36, + 0x14, 0xe8, 0xdd, 0xb8, 0x13, 0x54, 0x9b, 0x55, 0xa4, 0xe1, 0xd5, 0xc5, 0xda, 0xac, 0x9b, 0xdc, + 0xf8, 0x9d, 0x2c, 0xe4, 0x11, 0xe6, 0xf7, 0xa1, 0xe0, 0xa3, 0x1f, 0x46, 0xc3, 0x79, 0x99, 0xcf, + 0xa6, 0x48, 0xf8, 0x37, 0xf5, 0x52, 0xcc, 0x2e, 0xb0, 0x58, 0xa2, 0x37, 0x26, 0x97, 0xe5, 0x75, + 0x28, 0x8c, 0x4d, 0xdf, 0x1c, 0xe9, 0x7d, 0xa2, 0x80, 0xe6, 0x8f, 0x32, 0x90, 0x47, 0x22, 0xbe, + 0x06, 0xb5, 0xae, 0xf4, 0xed, 0x53, 0x21, 0x87, 0xbe, 0x37, 0x19, 0x0c, 0xd5, 0x4a, 0x7a, 0x2c, + 0x2e, 0x94, 0xbe, 0x51, 0x0a, 0x41, 0x9a, 0x8e, 0xdd, 0x67, 0x59, 0x5c, 0x55, 0x1b, 0x9e, 0x63, + 0xb1, 0x1c, 0x5f, 0x85, 0xea, 0x13, 0xd7, 0x12, 0x7e, 0xd0, 0xf7, 0x7c, 0x61, 0xb1, 0xbc, 0xde, + 0xdd, 0xa7, 0xac, 0x40, 0x67, 0x99, 0x38, 0x97, 0xe4, 0x0b, 0xb1, 0x22, 0xbf, 0x06, 0xab, 0x1b, + 0x69, 0x07, 0x89, 0x95, 0x50, 0x27, 0xed, 0x09, 0x17, 0x17, 0x19, 0x2b, 0xab, 0x45, 0xec, 0x7d, + 0xd7, 0x66, 0x15, 0x7c, 0x99, 0xda, 0x27, 0x0c, 0x9a, 0xff, 0x32, 0x13, 0x6a, 0x8e, 0x1a, 0x54, + 0x0e, 0x4d, 0xdf, 0x1c, 0xf8, 0xe6, 0x18, 0xdb, 0x57, 0x85, 0x92, 0x3a, 0x38, 0xdf, 0x52, 0xda, + 0x4d, 0x01, 0x0f, 0x95, 0x6e, 0x54, 0xc0, 0xdb, 0x2c, 0x17, 0x03, 0xef, 0xb0, 0x3c, 0xbe, 0xe3, + 0xdb, 0x13, 0x4f, 0x0a, 0x56, 0x20, 0x5d, 0xe7, 0x59, 0x82, 0x15, 0x11, 0xd9, 0x43, 0x8d, 0xc2, + 0x4a, 0xd8, 0xe7, 0x4d, 0x5c, 0x3f, 0xc7, 0xde, 0x39, 0x2b, 0x63, 0x33, 0x70, 0x18, 0x85, 0xc5, + 0x2a, 0xf8, 0x64, 0x7f, 0x32, 0x3a, 0x16, 0xd8, 0x4d, 0xc0, 0x27, 0x3d, 0x6f, 0x30, 0x70, 0x04, + 0xab, 0xe2, 0x18, 0x24, 0x94, 0x2f, 0x5b, 0x26, 0x4d, 0x6b, 0x3a, 0x8e, 0x37, 0x91, 0xac, 0xd6, + 0xf8, 0x79, 0x0e, 0xf2, 0xe8, 0xdd, 0xe0, 0xde, 0x19, 0xa2, 0x9e, 0xd1, 0x7b, 0x07, 0x7f, 0x47, + 0x3b, 0x30, 0x1b, 0xef, 0x40, 0xfe, 0x81, 0x9e, 0xe9, 0xdc, 0x02, 0x5a, 0x16, 0x05, 0x27, 0x27, + 0x99, 0x43, 0x7e, 0x64, 0x8f, 0x84, 0xd6, 0x75, 0xf4, 0x1b, 0x71, 0x01, 0x9e, 0xc7, 0x05, 0x0a, + 0x9e, 0xd0, 0x6f, 0xdc, 0x35, 0x26, 0x1e, 0x0b, 0x2d, 0x49, 0x7b, 0x20, 0x67, 0x84, 0xe0, 0x1c, + 0xed, 0x55, 0x99, 0xab, 0xbd, 0x3e, 0x0c, 0xb5, 0x57, 0x69, 0x81, 0x5d, 0x4f, 0xcd, 0x4c, 0x6a, + 0xae, 0x58, 0x69, 0x94, 0x17, 0x67, 0x4f, 0x1c, 0x26, 0x5b, 0x7a, 0xd5, 0xc6, 0x07, 0x5d, 0x59, + 0x8d, 0x32, 0xcb, 0xe0, 0x6c, 0xd2, 0x76, 0x55, 0x3a, 0xef, 0xa9, 0x6d, 0x09, 0x8f, 0xe5, 0xe8, + 0x20, 0x9c, 0x58, 0xb6, 0xc7, 0xf2, 0x68, 0x79, 0x1d, 0x6e, 0x6d, 0xb3, 0x42, 0xf3, 0xd5, 0xc4, + 0x91, 0xd4, 0x9a, 0x48, 0x4f, 0x89, 0xa1, 0xe5, 0x9b, 0x51, 0xab, 0xf1, 0x58, 0x58, 0x2c, 0xdb, + 0xfc, 0xda, 0x1c, 0x35, 0x5b, 0x83, 0xca, 0x93, 0xb1, 0xe3, 0x99, 0xd6, 0x15, 0x7a, 0x76, 0x19, + 0x20, 0xf6, 0xaa, 0x1b, 0x3f, 0x6f, 0xc6, 0xc7, 0x39, 0xda, 0xa2, 0x81, 0x37, 0xf1, 0xfb, 0x82, + 0x54, 0x48, 0xc5, 0xd0, 0x10, 0xff, 0x16, 0x14, 0xf0, 0x79, 0x18, 0xc6, 0xb9, 0xbf, 0x90, 0x2f, + 0xb7, 0xfe, 0xd4, 0x16, 0xcf, 0x0d, 0xc5, 0xc8, 0xef, 0x00, 0x98, 0x7d, 0x69, 0x9f, 0x09, 0x44, + 0xea, 0xcd, 0x9e, 0xc0, 0xf0, 0x77, 0x93, 0xe6, 0xcb, 0xd5, 0x71, 0xc8, 0x84, 0x5d, 0xc3, 0x0d, + 0xa8, 0xe2, 0xd6, 0x1d, 0x1f, 0xf8, 0xb8, 0xdb, 0xeb, 0xcb, 0xc4, 0xf8, 0xe6, 0x62, 0xcd, 0x7b, + 0x14, 0x31, 0x1a, 0x49, 0x21, 0xfc, 0x09, 0x2c, 0xab, 0x98, 0x9a, 0x16, 0x5a, 0x23, 0xa1, 0x6f, + 0x2d, 0x26, 0xf4, 0x20, 0xe6, 0x34, 0x52, 0x62, 0x66, 0xc3, 0x92, 0x85, 0x97, 0x0e, 0x4b, 0xbe, + 0x0a, 0x2b, 0xbd, 0xf4, 0x2e, 0x50, 0x47, 0xc5, 0x14, 0x96, 0x37, 0x61, 0xd9, 0x0e, 0xe2, 0xa8, + 0x28, 0xc5, 0x48, 0xca, 0x46, 0x0a, 0xd7, 0xf8, 0xb7, 0x45, 0xc8, 0xd3, 0xc8, 0x4f, 0xc7, 0xb8, + 0x36, 0x53, 0x2a, 0xfd, 0xc1, 0xe2, 0x53, 0x3d, 0xb5, 0xe3, 0x49, 0x83, 0xe4, 0x12, 0x1a, 0xe4, + 0x5b, 0x50, 0x08, 0x3c, 0x5f, 0x86, 0xd3, 0xbb, 0xe0, 0x22, 0xea, 0x7a, 0xbe, 0x34, 0x14, 0x23, + 0xdf, 0x86, 0xd2, 0x89, 0xed, 0x48, 0x9c, 0x14, 0x35, 0x78, 0x6f, 0x2c, 0x26, 0x63, 0x9b, 0x98, + 0x8c, 0x90, 0x99, 0xef, 0x26, 0x17, 0x5b, 0x91, 0x24, 0xad, 0x2f, 0x26, 0x69, 0xde, 0x1a, 0xbc, + 0x0f, 0xac, 0xef, 0x9d, 0x09, 0xdf, 0x48, 0x04, 0x26, 0xd5, 0x21, 0x3d, 0x83, 0xe7, 0x0d, 0x28, + 0x0f, 0x6d, 0x4b, 0xa0, 0x9d, 0x43, 0x3a, 0xa6, 0x6c, 0x44, 0x30, 0x7f, 0x0c, 0x65, 0xf2, 0x0f, + 0x50, 0x2b, 0x56, 0x5e, 0x7a, 0xf0, 0x95, 0xab, 0x12, 0x0a, 0xc0, 0x17, 0xd1, 0xcb, 0xb7, 0x6d, + 0x49, 0xf1, 0xe9, 0xb2, 0x11, 0xc1, 0xd8, 0x60, 0x5a, 0xef, 0xc9, 0x06, 0x57, 0x55, 0x83, 0xa7, + 0xf1, 0xfc, 0x1d, 0xb8, 0x41, 0xb8, 0xa9, 0x43, 0x12, 0xb7, 0x1a, 0x0a, 0x9d, 0xff, 0x10, 0x0d, + 0x96, 0xb1, 0x39, 0x10, 0xbb, 0xf6, 0xc8, 0x96, 0xf5, 0xda, 0xdd, 0xcc, 0xbd, 0x82, 0x11, 0x23, + 0xf8, 0x1b, 0xb0, 0x66, 0x89, 0x13, 0x73, 0xe2, 0xc8, 0x9e, 0x18, 0x8d, 0x1d, 0x53, 0x8a, 0x8e, + 0x45, 0x6b, 0xb4, 0x62, 0xcc, 0x3e, 0xe0, 0x6f, 0xc2, 0x35, 0x8d, 0x3c, 0x88, 0xb2, 0x0a, 0x1d, + 0x8b, 0xc2, 0x77, 0x15, 0x63, 0xde, 0xa3, 0xe6, 0x9e, 0x56, 0xc3, 0x78, 0x80, 0xa2, 0x9f, 0x1a, + 0x2a, 0xd0, 0x40, 0xaa, 0x13, 0xf9, 0x91, 0xe9, 0x38, 0xc2, 0xbf, 0x50, 0x4e, 0xee, 0x63, 0xd3, + 0x3d, 0x36, 0x5d, 0x96, 0xa3, 0x33, 0xd6, 0x74, 0x84, 0x6b, 0x99, 0xbe, 0x3a, 0x91, 0x1f, 0xd1, + 0x81, 0x5e, 0x68, 0xde, 0x83, 0x3c, 0x0d, 0x69, 0x05, 0x0a, 0xca, 0x4b, 0x22, 0x8f, 0x59, 0x7b, + 0x48, 0xa4, 0x91, 0x77, 0x71, 0xfb, 0xb1, 0x6c, 0xe3, 0x1f, 0x16, 0xa1, 0x1c, 0x0e, 0x5e, 0x98, + 0x43, 0xc8, 0xc4, 0x39, 0x04, 0x34, 0xe3, 0x82, 0xa7, 0x76, 0x60, 0x1f, 0x6b, 0xb3, 0xb4, 0x6c, + 0xc4, 0x08, 0xb4, 0x84, 0x9e, 0xdb, 0x96, 0x1c, 0xd2, 0x9e, 0x29, 0x18, 0x0a, 0xe0, 0xf7, 0x60, + 0xd5, 0xc2, 0x71, 0x70, 0xfb, 0xce, 0xc4, 0x12, 0x3d, 0x3c, 0x45, 0x55, 0x98, 0x60, 0x1a, 0xcd, + 0x3f, 0x01, 0x90, 0xf6, 0x48, 0x6c, 0x7b, 0xfe, 0xc8, 0x94, 0xda, 0x37, 0xf8, 0xfa, 0xcb, 0xad, + 0xea, 0xf5, 0x5e, 0x24, 0xc0, 0x48, 0x08, 0x43, 0xd1, 0xf8, 0x36, 0x2d, 0xba, 0xf4, 0x99, 0x44, + 0x6f, 0x45, 0x02, 0x8c, 0x84, 0x30, 0xde, 0x83, 0xd2, 0x89, 0xe7, 0x8f, 0x26, 0x8e, 0xa9, 0xcf, + 0xdc, 0x0f, 0x5e, 0x52, 0xee, 0xb6, 0xe2, 0x26, 0xdd, 0x13, 0x8a, 0x8a, 0x63, 0xdc, 0x95, 0x05, + 0x63, 0xdc, 0xcd, 0x5f, 0x04, 0x88, 0x5b, 0xc8, 0x6f, 0x02, 0xdf, 0xf3, 0x5c, 0x39, 0x6c, 0x1d, + 0x1f, 0xfb, 0x1b, 0xe2, 0xc4, 0xf3, 0xc5, 0x96, 0x89, 0xc7, 0xeb, 0x0d, 0x58, 0x8b, 0xf0, 0xad, + 0x13, 0x29, 0x7c, 0x44, 0xd3, 0x12, 0xe8, 0x0e, 0x3d, 0x5f, 0x2a, 0x1b, 0x8f, 0x7e, 0x3e, 0xe9, + 0xb2, 0x1c, 0x1e, 0xe9, 0x9d, 0xee, 0x01, 0xcb, 0x37, 0xef, 0x01, 0xc4, 0x43, 0x4b, 0xbe, 0x10, + 0xfd, 0x7a, 0xeb, 0xa1, 0xf6, 0x8c, 0x08, 0x7a, 0xf8, 0x0e, 0xcb, 0x34, 0x7f, 0x9a, 0x81, 0x6a, + 0xa2, 0x4b, 0x69, 0x9f, 0x79, 0xd3, 0x9b, 0xb8, 0x52, 0x39, 0xe9, 0xf4, 0xf3, 0xa9, 0xe9, 0x4c, + 0xf0, 0x70, 0x5f, 0x83, 0x1a, 0xc1, 0x5b, 0x76, 0x20, 0x6d, 0xb7, 0x2f, 0x59, 0x2e, 0x22, 0x51, + 0x86, 0x41, 0x3e, 0x22, 0xd9, 0xf7, 0x34, 0xaa, 0xc0, 0x19, 0x2c, 0x1f, 0x0a, 0xbf, 0x2f, 0x42, + 0x22, 0x32, 0x86, 0x35, 0x26, 0x22, 0x53, 0xc6, 0xb0, 0x29, 0x87, 0xdd, 0xc9, 0x88, 0x95, 0xd1, + 0xa8, 0x44, 0xa0, 0x75, 0x26, 0x7c, 0xb4, 0x65, 0x2a, 0xf8, 0x1e, 0x44, 0xe0, 0x6e, 0x30, 0x5d, + 0x06, 0x21, 0xf5, 0x9e, 0xed, 0xb2, 0x6a, 0x04, 0x98, 0xe7, 0x6c, 0x19, 0xdb, 0x4f, 0xae, 0x03, + 0xab, 0x35, 0xfe, 0x4b, 0x0e, 0xf2, 0xa8, 0xd7, 0xd1, 0xd7, 0x4d, 0x2a, 0x21, 0xb5, 0x57, 0x92, + 0xa8, 0xcf, 0x76, 0x1a, 0xa1, 0xec, 0xe4, 0x69, 0xf4, 0x3e, 0x54, 0xfb, 0x93, 0x40, 0x7a, 0x23, + 0x3a, 0x8a, 0x75, 0xb6, 0xeb, 0xe6, 0x4c, 0xd4, 0x88, 0x86, 0xd3, 0x48, 0x92, 0xf2, 0x77, 0xa1, + 0x78, 0xa2, 0x56, 0xbd, 0x8a, 0x1b, 0x7d, 0xe1, 0x92, 0xd3, 0x5a, 0xaf, 0x6c, 0x4d, 0x8c, 0xfd, + 0xb2, 0x67, 0x76, 0x6c, 0x12, 0xa5, 0x4f, 0xdd, 0x62, 0x74, 0xea, 0xfe, 0x22, 0xac, 0x08, 0x1c, + 0xf0, 0x43, 0xc7, 0xec, 0x8b, 0x91, 0x70, 0xc3, 0x6d, 0xf6, 0xce, 0x4b, 0xf4, 0x98, 0x66, 0x8c, + 0xba, 0x3d, 0x25, 0x0b, 0x35, 0x8f, 0xeb, 0xe1, 0xe1, 0x1f, 0x3a, 0xf6, 0x65, 0x23, 0x46, 0x34, + 0xbf, 0xac, 0xf5, 0x65, 0x09, 0x72, 0xad, 0xa0, 0xaf, 0x23, 0x20, 0x22, 0xe8, 0x2b, 0xf7, 0x6a, + 0x93, 0x86, 0x83, 0x65, 0x9b, 0x6f, 0x41, 0x25, 0x7a, 0x03, 0x2e, 0x9e, 0x7d, 0x4f, 0x76, 0xc7, + 0xa2, 0x6f, 0x9f, 0xd8, 0xc2, 0x52, 0xeb, 0xb3, 0x2b, 0x4d, 0x5f, 0xaa, 0x20, 0x62, 0xdb, 0xb5, + 0x58, 0xb6, 0xf1, 0xdb, 0x65, 0x28, 0xaa, 0xc3, 0x57, 0x77, 0xb8, 0x12, 0x75, 0xf8, 0xdb, 0x50, + 0xf6, 0xc6, 0xc2, 0x37, 0xa5, 0xe7, 0xeb, 0xc8, 0xcd, 0xbb, 0x2f, 0x73, 0x98, 0xaf, 0x1f, 0x68, + 0x66, 0x23, 0x12, 0x33, 0xbd, 0x9a, 0xb2, 0xb3, 0xab, 0xe9, 0x3e, 0xb0, 0xf0, 0xdc, 0x3e, 0xf4, + 0x91, 0x4f, 0x5e, 0x68, 0x3f, 0x7c, 0x06, 0xcf, 0x7b, 0x50, 0xe9, 0x7b, 0xae, 0x65, 0x47, 0x51, + 0x9c, 0x95, 0x87, 0x5f, 0x7b, 0xa9, 0x16, 0x6e, 0x86, 0xdc, 0x46, 0x2c, 0x88, 0xbf, 0x01, 0x85, + 0x33, 0x5c, 0x66, 0xb4, 0x9e, 0x2e, 0x5f, 0x84, 0x8a, 0x88, 0x7f, 0x0a, 0xd5, 0xef, 0x4d, 0xec, + 0xfe, 0xe9, 0x41, 0x32, 0x4a, 0xf8, 0xfe, 0x4b, 0xb5, 0xe2, 0xdb, 0x31, 0xbf, 0x91, 0x14, 0x96, + 0x58, 0xda, 0xa5, 0x3f, 0xc1, 0xd2, 0x2e, 0xcf, 0x2e, 0x6d, 0x03, 0x6a, 0xae, 0x08, 0xa4, 0xb0, + 0xb6, 0xb5, 0xad, 0x06, 0x9f, 0xc1, 0x56, 0x4b, 0x8b, 0x68, 0x7e, 0x09, 0xca, 0xe1, 0x84, 0xf3, + 0x22, 0x64, 0xf7, 0xd1, 0x29, 0x2a, 0x42, 0xf6, 0xc0, 0x57, 0xab, 0xad, 0x85, 0xab, 0xad, 0xf9, + 0x47, 0x19, 0xa8, 0x44, 0x83, 0x9e, 0xd6, 0x9c, 0xed, 0xef, 0x4d, 0x4c, 0x87, 0x65, 0xc8, 0x5d, + 0xf6, 0xa4, 0x82, 0x48, 0x59, 0x3f, 0xa2, 0x64, 0xbd, 0xcf, 0x72, 0x64, 0x22, 0x88, 0x20, 0x60, + 0x79, 0xce, 0x61, 0x45, 0xa3, 0x0f, 0x7c, 0x45, 0x5a, 0x40, 0xc5, 0x87, 0x4f, 0x43, 0x44, 0x51, + 0x59, 0x14, 0xa7, 0x42, 0x29, 0xc8, 0x7d, 0x4f, 0x12, 0x50, 0xc6, 0x46, 0x75, 0x5c, 0x56, 0xc1, + 0x77, 0xee, 0x7b, 0xb2, 0x83, 0x2a, 0x31, 0x72, 0xcf, 0xaa, 0xe1, 0xeb, 0x09, 0x22, 0x8d, 0xd8, + 0x72, 0x9c, 0x8e, 0xcb, 0x6a, 0xfa, 0x81, 0x82, 0x56, 0x50, 0x62, 0xfb, 0xdc, 0xec, 0x23, 0xfb, + 0x2a, 0x6a, 0x58, 0xe4, 0xd1, 0x30, 0xc3, 0x2d, 0xd9, 0x3e, 0xb7, 0x03, 0x19, 0xb0, 0xb5, 0xe6, + 0x1f, 0x66, 0xa0, 0x9a, 0x98, 0x60, 0x74, 0xff, 0x88, 0x10, 0x8f, 0x32, 0xe5, 0x0d, 0x7e, 0x82, + 0xc3, 0xe8, 0x5b, 0xe1, 0x31, 0xd5, 0xf3, 0xf0, 0x67, 0x16, 0xdf, 0xd7, 0xf3, 0x46, 0x9e, 0xef, + 0x7b, 0xcf, 0x95, 0xe9, 0xb3, 0x6b, 0x06, 0xf2, 0x99, 0x10, 0xa7, 0x2c, 0x8f, 0x5d, 0xdd, 0x9c, + 0xf8, 0xbe, 0x70, 0x15, 0xa2, 0x40, 0x8d, 0x13, 0xe7, 0x0a, 0x2a, 0xa2, 0x50, 0x24, 0xa6, 0x73, + 0x90, 0x95, 0x50, 0x11, 0x68, 0x6a, 0x85, 0x29, 0x23, 0x01, 0x92, 0x2b, 0xb0, 0x82, 0x87, 0x8a, + 0x8a, 0x50, 0x1c, 0x9c, 0x6c, 0x99, 0x17, 0x41, 0x6b, 0xe0, 0x31, 0x98, 0x46, 0xee, 0x7b, 0xcf, + 0x59, 0xb5, 0x31, 0x01, 0x88, 0x7d, 0x32, 0xf4, 0x45, 0x71, 0x41, 0x44, 0x39, 0x04, 0x0d, 0xf1, + 0x03, 0x00, 0xfc, 0x45, 0x94, 0xa1, 0x43, 0xfa, 0x12, 0x86, 0x32, 0xf1, 0x19, 0x09, 0x11, 0x8d, + 0xbf, 0x04, 0x95, 0xe8, 0x01, 0xaf, 0x43, 0x89, 0x4c, 0xda, 0xe8, 0xb5, 0x21, 0x88, 0xf6, 0x99, + 0xed, 0x5a, 0xe2, 0x9c, 0xf4, 0x4a, 0xc1, 0x50, 0x00, 0xb6, 0x72, 0x68, 0x5b, 0x96, 0x70, 0xc3, + 0x4c, 0x8f, 0x82, 0xe6, 0xe5, 0xe3, 0xf3, 0x73, 0xf3, 0xf1, 0x8d, 0x5f, 0x82, 0x6a, 0xc2, 0x69, + 0xbc, 0xb4, 0xdb, 0x89, 0x86, 0x65, 0xd3, 0x0d, 0xbb, 0x0d, 0x95, 0xb0, 0x06, 0x24, 0xa0, 0xb3, + 0xad, 0x62, 0xc4, 0x88, 0xc6, 0x3f, 0xcd, 0xa2, 0x25, 0x8b, 0x5d, 0x9b, 0x76, 0xf4, 0xb6, 0xa1, + 0x18, 0x48, 0x53, 0x4e, 0xc2, 0x62, 0x86, 0x05, 0x37, 0x68, 0x97, 0x78, 0x76, 0x96, 0x0c, 0xcd, + 0xcd, 0x3f, 0x84, 0x9c, 0x34, 0x07, 0x3a, 0x50, 0xfa, 0xfa, 0x62, 0x42, 0x7a, 0xe6, 0x60, 0x67, + 0xc9, 0x40, 0x3e, 0xbe, 0x0b, 0xe5, 0xbe, 0x8e, 0x6d, 0x69, 0xa5, 0xb8, 0xa0, 0x2f, 0x16, 0x46, + 0xc4, 0x76, 0x96, 0x8c, 0x48, 0x02, 0xff, 0x16, 0xe4, 0xd1, 0xba, 0xd4, 0x35, 0x1f, 0x0b, 0xfa, + 0x98, 0xb8, 0x5d, 0x76, 0x96, 0x0c, 0xe2, 0xdc, 0x28, 0x41, 0x81, 0x74, 0x70, 0xa3, 0x0e, 0x45, + 0xd5, 0xd7, 0xe9, 0x91, 0x6b, 0xdc, 0x82, 0x5c, 0xcf, 0x1c, 0xa0, 0x85, 0x6f, 0x5b, 0x81, 0x0e, + 0x95, 0xe0, 0xcf, 0xc6, 0x2b, 0x71, 0x9c, 0x2e, 0x19, 0x02, 0xce, 0xa4, 0x42, 0xc0, 0x8d, 0x22, + 0xe4, 0xf1, 0x8d, 0x8d, 0xdb, 0x57, 0x79, 0x0b, 0x8d, 0xdf, 0xca, 0xa1, 0x63, 0x21, 0xc5, 0xf9, + 0xdc, 0xf0, 0xf6, 0xc7, 0x50, 0x19, 0xfb, 0x5e, 0x5f, 0x04, 0x81, 0xe7, 0x6b, 0xe3, 0xe8, 0x8d, + 0x17, 0xa7, 0x9e, 0xd7, 0x0f, 0x43, 0x1e, 0x23, 0x66, 0x6f, 0xfe, 0xeb, 0x2c, 0x54, 0xa2, 0x07, + 0xca, 0x9f, 0x91, 0xe2, 0x5c, 0x85, 0x32, 0xf7, 0x84, 0x3f, 0x32, 0x6d, 0x4b, 0x69, 0x8f, 0xcd, + 0xa1, 0x19, 0x1a, 0xb9, 0x9f, 0x78, 0x13, 0x39, 0x39, 0x16, 0x2a, 0x84, 0xf5, 0xd4, 0x1e, 0x09, + 0x8f, 0xe5, 0x29, 0x79, 0x84, 0x0b, 0xbb, 0xef, 0x78, 0x13, 0x8b, 0x15, 0x10, 0x7e, 0x44, 0xc7, + 0xdb, 0x9e, 0x39, 0x0e, 0x94, 0xce, 0xdc, 0xb3, 0x7d, 0x8f, 0x95, 0x90, 0x69, 0xdb, 0x1e, 0x8c, + 0x4c, 0x56, 0x46, 0x61, 0xbd, 0xe7, 0xb6, 0x44, 0x25, 0x5c, 0x41, 0x33, 0xf5, 0x60, 0x2c, 0xdc, + 0xae, 0xf4, 0x85, 0x90, 0x7b, 0xe6, 0x58, 0xc5, 0x34, 0x0d, 0x61, 0x59, 0xb6, 0x54, 0xfa, 0x73, + 0xdb, 0xec, 0x8b, 0x63, 0xcf, 0x3b, 0x65, 0xcb, 0xa8, 0x68, 0x3a, 0x6e, 0x20, 0xcd, 0x81, 0x6f, + 0x8e, 0x94, 0x0e, 0xed, 0x09, 0x47, 0x10, 0xb4, 0x42, 0xef, 0xb6, 0xe5, 0x70, 0x72, 0xfc, 0x08, + 0xfd, 0xbe, 0x55, 0x95, 0x67, 0xb2, 0xc4, 0x58, 0xa0, 0x0e, 0x5d, 0x86, 0xf2, 0x86, 0xed, 0xd8, + 0xc7, 0xb6, 0x63, 0xb3, 0x35, 0x24, 0x6d, 0x9f, 0xf7, 0x4d, 0xc7, 0xb6, 0x7c, 0xf3, 0x39, 0xe3, + 0xd8, 0xb8, 0xc7, 0xbe, 0x77, 0x6a, 0xb3, 0x6b, 0x48, 0x48, 0x6e, 0xe0, 0x99, 0xfd, 0x7d, 0x76, + 0x9d, 0x72, 0x65, 0xa7, 0x42, 0xf6, 0x87, 0x27, 0xe6, 0x31, 0xbb, 0x11, 0x87, 0xf4, 0x6e, 0x36, + 0xd6, 0x60, 0x75, 0x2a, 0x2b, 0xdf, 0x28, 0x69, 0xef, 0xb3, 0x51, 0x83, 0x6a, 0x22, 0x5d, 0xda, + 0x78, 0x15, 0xca, 0x61, 0x32, 0x15, 0xbd, 0x74, 0x3b, 0x50, 0x61, 0x60, 0xbd, 0x48, 0x22, 0xb8, + 0xf1, 0x1f, 0x32, 0x50, 0x54, 0x99, 0x6c, 0xbe, 0x11, 0x55, 0x9e, 0x64, 0x16, 0xc8, 0x5e, 0x2a, + 0x26, 0x9d, 0xfb, 0x8d, 0xca, 0x4f, 0xae, 0x43, 0xc1, 0x21, 0x77, 0x5c, 0xab, 0x2f, 0x02, 0x12, + 0xda, 0x26, 0x97, 0xd2, 0x36, 0xb7, 0xa1, 0x62, 0x4e, 0xa4, 0x47, 0x49, 0x3a, 0x9d, 0xc1, 0x88, + 0x11, 0xcd, 0x56, 0x94, 0x8d, 0x0e, 0x03, 0x93, 0x64, 0x33, 0xf6, 0x7c, 0x21, 0x54, 0xd0, 0x91, + 0x7c, 0xed, 0x2c, 0x9d, 0x24, 0xde, 0x68, 0x6c, 0xf6, 0x25, 0x21, 0xe8, 0x8c, 0x45, 0x55, 0xcb, + 0xf2, 0xb8, 0x07, 0x36, 0x87, 0xa6, 0x6c, 0x9e, 0x40, 0xf9, 0xd0, 0x0b, 0xa6, 0x4f, 0xec, 0x12, + 0xe4, 0x7a, 0xde, 0x58, 0xd9, 0x9f, 0x1b, 0x9e, 0x24, 0xfb, 0x53, 0x1d, 0xd0, 0x27, 0x52, 0x2d, + 0x39, 0xc3, 0x1e, 0x0c, 0xa5, 0xf2, 0xd3, 0x3b, 0xae, 0x2b, 0x7c, 0x56, 0xc0, 0x19, 0x36, 0xc4, + 0x18, 0x6d, 0x5e, 0x56, 0xc4, 0x39, 0x25, 0xfc, 0xb6, 0xed, 0x07, 0x92, 0x95, 0x9a, 0x1d, 0x3c, + 0x6b, 0xed, 0x01, 0x1d, 0x91, 0xf4, 0x83, 0x44, 0x2d, 0x61, 0x13, 0x09, 0xdc, 0x14, 0x2e, 0xae, + 0x40, 0xf2, 0xad, 0x94, 0x63, 0x48, 0x2f, 0xc8, 0xe2, 0xf9, 0x46, 0xf0, 0xc7, 0x93, 0x40, 0xda, + 0x27, 0x17, 0x2c, 0xd7, 0x7c, 0x06, 0xb5, 0x54, 0x91, 0x13, 0xbf, 0x0e, 0x2c, 0x85, 0xc0, 0xa6, + 0x2f, 0xf1, 0x5b, 0x70, 0x2d, 0x85, 0xdd, 0xb3, 0x2d, 0x8b, 0x22, 0xc1, 0xd3, 0x0f, 0xc2, 0x0e, + 0x6e, 0x54, 0xa0, 0xd4, 0x57, 0x73, 0xd8, 0x3c, 0x84, 0x1a, 0x4d, 0xea, 0x9e, 0x90, 0xe6, 0x81, + 0xeb, 0x5c, 0xfc, 0x89, 0x2b, 0xd1, 0x9a, 0x5f, 0xd1, 0xee, 0x17, 0x6a, 0x93, 0x13, 0xdf, 0x1b, + 0x91, 0xac, 0x82, 0x41, 0xbf, 0x51, 0xba, 0xf4, 0xf4, 0xca, 0xc8, 0x4a, 0xaf, 0xf9, 0x5f, 0xab, + 0x50, 0x6a, 0xf5, 0xfb, 0xe8, 0x30, 0xce, 0xbc, 0xf9, 0x5d, 0x28, 0xf6, 0x3d, 0xf7, 0xc4, 0x1e, + 0x68, 0x6d, 0x3d, 0x6d, 0x37, 0x6a, 0x3e, 0x5c, 0x8e, 0x27, 0xf6, 0xc0, 0xd0, 0xc4, 0xc8, 0xa6, + 0x4f, 0x9b, 0xc2, 0x95, 0x6c, 0x4a, 0xe5, 0x46, 0x87, 0xcb, 0x03, 0xc8, 0xdb, 0xee, 0x89, 0xa7, + 0xcb, 0x46, 0x3f, 0x7f, 0x09, 0x13, 0xd5, 0x4e, 0x12, 0x61, 0xe3, 0x3f, 0x65, 0xa0, 0xa8, 0x5e, + 0xcd, 0x5f, 0x85, 0x15, 0xe1, 0xe2, 0x56, 0x0b, 0x15, 0xbd, 0xde, 0x63, 0x53, 0x58, 0x34, 0x69, + 0x35, 0x46, 0x1c, 0x4f, 0x06, 0x3a, 0x32, 0x93, 0x44, 0xf1, 0xf7, 0xe1, 0x96, 0x02, 0x0f, 0x7d, + 0xe1, 0x0b, 0x47, 0x98, 0x81, 0xd8, 0x1c, 0x9a, 0xae, 0x2b, 0x1c, 0x7d, 0xec, 0x5f, 0xf6, 0x98, + 0x37, 0x61, 0x59, 0x3d, 0xea, 0x8e, 0xcd, 0xbe, 0x08, 0xf4, 0x5e, 0x4a, 0xe1, 0xf8, 0x57, 0xa1, + 0x40, 0x55, 0xb5, 0x75, 0xeb, 0xea, 0xa9, 0x54, 0x54, 0x0d, 0x2f, 0x3a, 0x97, 0x5a, 0x00, 0x6a, + 0x98, 0xd0, 0x25, 0xd3, 0xba, 0xe1, 0x8b, 0x57, 0x8e, 0x2b, 0x79, 0x87, 0x09, 0x26, 0x6c, 0x9f, + 0x25, 0x1c, 0x41, 0xe5, 0x8f, 0x78, 0x6e, 0x66, 0x29, 0xef, 0x92, 0xc2, 0x35, 0xfe, 0x63, 0x1e, + 0xf2, 0x38, 0xc2, 0x48, 0x3c, 0xf4, 0x46, 0x22, 0x8a, 0x3e, 0x2b, 0x43, 0x24, 0x85, 0x43, 0xc3, + 0xc7, 0x54, 0x05, 0x00, 0x11, 0x99, 0x52, 0x2d, 0xd3, 0x68, 0xa4, 0x1c, 0xfb, 0xde, 0x89, 0xed, + 0xc4, 0x94, 0xda, 0x44, 0x9a, 0x42, 0xf3, 0xaf, 0xc1, 0xcd, 0x91, 0xe9, 0x9f, 0x0a, 0x49, 0xbb, + 0xfb, 0x99, 0xe7, 0x9f, 0x06, 0x38, 0x72, 0x1d, 0x4b, 0x87, 0x2d, 0x2f, 0x79, 0xca, 0xdf, 0x80, + 0xb5, 0xe7, 0x21, 0x18, 0xbd, 0x43, 0x05, 0x0e, 0x67, 0x1f, 0xa0, 0x32, 0xb6, 0xc4, 0x99, 0x4d, + 0x72, 0xcb, 0xaa, 0xb6, 0x36, 0x84, 0x71, 0x29, 0x99, 0x6a, 0x20, 0xbb, 0xfa, 0xcd, 0x3a, 0xff, + 0x94, 0xc6, 0xa2, 0xde, 0x54, 0x35, 0x47, 0x41, 0xc7, 0xa2, 0xb8, 0x6b, 0xc5, 0x88, 0x11, 0xb8, + 0xd0, 0xe8, 0x95, 0x4f, 0x95, 0xca, 0xad, 0x29, 0x07, 0x35, 0x81, 0x42, 0x0a, 0x29, 0xfa, 0xc3, + 0xf0, 0x25, 0x2a, 0x28, 0x9a, 0x44, 0xf1, 0x3b, 0x00, 0x03, 0x53, 0x8a, 0xe7, 0xe6, 0xc5, 0x13, + 0xdf, 0xa9, 0x0b, 0x95, 0x48, 0x89, 0x31, 0xe8, 0xe2, 0x3a, 0x5e, 0xdf, 0x74, 0xba, 0xd2, 0xf3, + 0xcd, 0x81, 0x38, 0x34, 0xe5, 0xb0, 0x3e, 0x50, 0x2e, 0xee, 0x34, 0x1e, 0x7b, 0x2c, 0xed, 0x91, + 0xf8, 0xd4, 0x73, 0x45, 0x7d, 0xa8, 0x7a, 0x1c, 0xc2, 0xd8, 0x12, 0xd3, 0x35, 0x9d, 0x0b, 0x69, + 0xf7, 0xb1, 0x2f, 0xb6, 0x6a, 0x49, 0x02, 0x45, 0x41, 0x05, 0x21, 0x71, 0x1c, 0x3b, 0x56, 0xfd, + 0xbb, 0xaa, 0xaf, 0x11, 0x02, 0x67, 0x57, 0xc8, 0xa1, 0xf0, 0xc5, 0x64, 0xd4, 0xb2, 0x2c, 0x5f, + 0x04, 0x41, 0xfd, 0x54, 0xcd, 0xee, 0x14, 0xba, 0xf1, 0x5b, 0x59, 0xca, 0x73, 0x0d, 0x1b, 0xff, + 0x3d, 0x03, 0xa5, 0xd6, 0x78, 0x4c, 0x4b, 0xad, 0x0e, 0x25, 0x73, 0x3c, 0xde, 0x89, 0x33, 0x93, + 0x21, 0xa8, 0x9f, 0xec, 0xc7, 0xf9, 0xc9, 0x10, 0xc4, 0xc3, 0xcc, 0x1c, 0x8f, 0xe3, 0xba, 0x60, + 0x0d, 0x61, 0x43, 0xfb, 0xaa, 0x26, 0xbb, 0x25, 0x75, 0xbe, 0x31, 0x46, 0xe0, 0x20, 0x88, 0xf3, + 0xb1, 0xed, 0x8b, 0x28, 0xeb, 0x18, 0xc1, 0x54, 0x6c, 0xd5, 0xf7, 0xc6, 0x61, 0x3a, 0xf1, 0xf5, + 0x4b, 0xf6, 0x16, 0xb6, 0x7e, 0x7d, 0x17, 0x47, 0xb7, 0x35, 0xb6, 0xbb, 0xc8, 0x60, 0x28, 0x3e, + 0x75, 0xc0, 0xb7, 0x28, 0xcd, 0x15, 0xc6, 0xfb, 0x43, 0xb8, 0xf9, 0x36, 0xd4, 0x52, 0x3c, 0x78, + 0x80, 0x51, 0x80, 0x9c, 0xc2, 0x29, 0x55, 0x28, 0x7d, 0x1c, 0x78, 0x6e, 0xeb, 0xb0, 0xa3, 0x8e, + 0xd4, 0xed, 0x89, 0xe3, 0xb0, 0x6c, 0xf3, 0x00, 0x20, 0xde, 0xc9, 0x78, 0x3c, 0x2a, 0x61, 0x6c, + 0x49, 0x05, 0xef, 0x5c, 0xcb, 0x76, 0x07, 0x5b, 0x7a, 0xf3, 0xb2, 0x0c, 0x22, 0x29, 0x28, 0x23, + 0xac, 0x08, 0x49, 0xe6, 0x1b, 0x41, 0xc2, 0x62, 0xb9, 0xe6, 0xff, 0xc9, 0x40, 0x35, 0x51, 0x32, + 0xf2, 0xa7, 0x58, 0xe6, 0x82, 0x7d, 0x47, 0xf3, 0x08, 0xd7, 0xa9, 0x9a, 0x90, 0x08, 0xc6, 0x55, + 0xac, 0x2b, 0x5a, 0xf0, 0xa9, 0x0a, 0xc1, 0x24, 0x30, 0x9f, 0xa9, 0xc4, 0xa5, 0xf9, 0x50, 0xc7, + 0xb1, 0xaa, 0x50, 0x7a, 0xe2, 0x9e, 0xba, 0xde, 0x73, 0x57, 0xd9, 0x25, 0x54, 0xb7, 0x94, 0xca, + 0xc0, 0x86, 0xa5, 0x45, 0xb9, 0xe6, 0xbf, 0xc8, 0x4f, 0x95, 0xf8, 0xb5, 0xa1, 0xa8, 0x9c, 0x27, + 0xb2, 0xeb, 0x67, 0x6b, 0xb2, 0x92, 0xc4, 0x3a, 0xdb, 0x97, 0x40, 0x19, 0x9a, 0x19, 0xbd, 0x9a, + 0xa8, 0x00, 0x36, 0x3b, 0x37, 0x2b, 0x99, 0x12, 0x14, 0x9e, 0x45, 0xa9, 0x1a, 0xf0, 0x48, 0x42, + 0xe3, 0x6f, 0x64, 0xe0, 0xfa, 0x3c, 0x92, 0x64, 0xa5, 0x7c, 0x26, 0x5d, 0x29, 0xdf, 0x9d, 0xaa, + 0x3c, 0xcf, 0x52, 0x6f, 0x1e, 0xbc, 0x64, 0x23, 0xd2, 0x75, 0xe8, 0xcd, 0xdf, 0xcb, 0xc0, 0xda, + 0x4c, 0x9f, 0x13, 0x76, 0x1b, 0x40, 0x51, 0xad, 0x2c, 0x55, 0x18, 0x16, 0x95, 0xea, 0xa8, 0x54, + 0x0b, 0x59, 0x34, 0x81, 0xaa, 0x7d, 0xd0, 0xb5, 0xf6, 0xca, 0x69, 0xc0, 0x59, 0xc3, 0x03, 0x73, + 0x20, 0x54, 0x58, 0x5a, 0x19, 0x97, 0x1a, 0x53, 0x54, 0x86, 0xbd, 0xca, 0x07, 0xb1, 0x12, 0x15, + 0x9c, 0x4d, 0xc6, 0x8e, 0xdd, 0x47, 0xb0, 0xcc, 0x1b, 0x70, 0x53, 0x5d, 0xb8, 0xd0, 0x4e, 0xf4, + 0x49, 0x6f, 0x68, 0xd3, 0xe6, 0x60, 0x15, 0x7c, 0xcf, 0xe1, 0xe4, 0xd8, 0xb1, 0x83, 0x21, 0x83, + 0xa6, 0x01, 0xd7, 0xe6, 0x74, 0x90, 0x9a, 0xfc, 0x54, 0x37, 0x7f, 0x05, 0x60, 0xeb, 0x69, 0xd8, + 0x68, 0x96, 0xe1, 0x1c, 0x56, 0xb6, 0x9e, 0x26, 0xa5, 0xeb, 0xcd, 0xf3, 0x14, 0xb5, 0x75, 0xc0, + 0x72, 0xcd, 0x5f, 0xce, 0x84, 0x15, 0x21, 0x8d, 0xbf, 0x08, 0x35, 0xd5, 0xe0, 0x43, 0xf3, 0xc2, + 0xf1, 0x4c, 0x8b, 0xb7, 0x61, 0x25, 0x88, 0xae, 0x04, 0x25, 0x0e, 0xe8, 0x69, 0xc3, 0xa7, 0x9b, + 0x22, 0x32, 0xa6, 0x98, 0x42, 0xc7, 0x30, 0x1b, 0xa7, 0x91, 0x38, 0xb9, 0xb8, 0x26, 0x6d, 0xb9, + 0x65, 0x72, 0x5a, 0xcd, 0xe6, 0x57, 0x61, 0xad, 0x1b, 0x1f, 0x66, 0xca, 0x83, 0xc0, 0xc5, 0xa1, + 0x4e, 0xc2, 0xad, 0x70, 0x71, 0x68, 0xb0, 0xf9, 0x8f, 0x4b, 0x00, 0x71, 0xca, 0x6c, 0xce, 0x9e, + 0x9f, 0x57, 0x01, 0x32, 0x93, 0xc0, 0xce, 0xbd, 0x74, 0x02, 0xfb, 0xfd, 0xc8, 0x91, 0x51, 0xe1, + 0xf4, 0xe9, 0x32, 0xf8, 0xb8, 0x4d, 0xd3, 0xee, 0x4b, 0xaa, 0x40, 0xaa, 0x30, 0x5d, 0x20, 0x75, + 0x77, 0xb6, 0x9a, 0x72, 0x4a, 0x19, 0xc5, 0x71, 0x9a, 0x52, 0x2a, 0x4e, 0xd3, 0x80, 0xb2, 0x2f, + 0x4c, 0xcb, 0x73, 0x9d, 0x8b, 0x30, 0x4f, 0x1a, 0xc2, 0xfc, 0x6d, 0x28, 0x48, 0xba, 0xd5, 0x54, + 0xa6, 0xbd, 0xf3, 0x82, 0x89, 0x53, 0xb4, 0xa8, 0xd9, 0xec, 0x40, 0x97, 0x40, 0x2a, 0x2b, 0xa1, + 0x6c, 0x24, 0x30, 0x7c, 0x1d, 0xb8, 0x8d, 0x4e, 0xab, 0xe3, 0x08, 0x6b, 0xe3, 0x62, 0x4b, 0xa5, + 0x2f, 0xc9, 0x8e, 0x29, 0x1b, 0x73, 0x9e, 0x84, 0xf3, 0xbf, 0x1c, 0xcf, 0x3f, 0x35, 0xf9, 0xcc, + 0x0e, 0xb0, 0xa7, 0x35, 0x75, 0x60, 0x85, 0x30, 0x5a, 0x4a, 0xe1, 0x86, 0x55, 0x63, 0x49, 0xab, + 0x37, 0xae, 0x01, 0xb8, 0xe4, 0x69, 0x38, 0xbc, 0x2a, 0x50, 0xb5, 0xaa, 0x8e, 0xc8, 0x08, 0x41, + 0x9a, 0xbc, 0xef, 0xb9, 0x74, 0xe6, 0x32, 0xad, 0xc9, 0x35, 0x8c, 0xfd, 0x1d, 0x3b, 0x13, 0xdf, + 0x74, 0xe8, 0xe9, 0x9a, 0xd2, 0xe4, 0x31, 0xa6, 0xf9, 0x07, 0xd9, 0xc8, 0x59, 0xac, 0x40, 0xe1, + 0xd8, 0x0c, 0xec, 0xbe, 0x3a, 0xdd, 0xb4, 0x91, 0xa7, 0x4e, 0x37, 0xe9, 0x59, 0x1e, 0xcb, 0xa2, + 0xdf, 0x17, 0x08, 0x9d, 0xbe, 0x8a, 0xef, 0x90, 0xb1, 0x3c, 0xaa, 0x80, 0x70, 0x25, 0xa9, 0x1a, + 0x29, 0x62, 0xa5, 0x60, 0xa4, 0x15, 0x55, 0x9f, 0x52, 0x58, 0x81, 0x8e, 0x18, 0x56, 0x46, 0x1a, + 0xd7, 0x93, 0x42, 0x85, 0x62, 0x69, 0xdd, 0x33, 0x40, 0x31, 0xe1, 0xa5, 0x08, 0x56, 0x45, 0x47, + 0x2c, 0x14, 0xaa, 0xe2, 0xa7, 0x01, 0xb9, 0xa9, 0xcb, 0xb8, 0xef, 0xd3, 0x0f, 0x58, 0x0d, 0x5b, + 0x14, 0x5f, 0x4d, 0x63, 0x2b, 0x28, 0xd5, 0xa4, 0xca, 0x9d, 0x55, 0xfc, 0x79, 0x46, 0xf5, 0x3c, + 0x0c, 0xdf, 0x6a, 0xa1, 0x5e, 0x5a, 0xc3, 0x96, 0x45, 0x86, 0x1d, 0xe3, 0xe8, 0x67, 0x8e, 0x4d, + 0x74, 0xfa, 0xec, 0xb1, 0xe9, 0x4a, 0x76, 0x0d, 0xbb, 0x3a, 0xb6, 0x4e, 0xd8, 0x75, 0x64, 0xe9, + 0x0f, 0x4d, 0xc9, 0x6e, 0x20, 0x0d, 0xfe, 0xda, 0x12, 0x3e, 0xae, 0x14, 0x76, 0x13, 0x69, 0xa4, + 0x39, 0x60, 0xb7, 0x9a, 0xbf, 0x16, 0xd7, 0x7f, 0xbf, 0x19, 0xb9, 0x63, 0x8b, 0x6c, 0x1f, 0x74, + 0xd8, 0xe6, 0xed, 0xe5, 0x36, 0xac, 0xf9, 0xe2, 0x7b, 0x13, 0x3b, 0x75, 0x2b, 0x22, 0x77, 0x75, + 0xd9, 0xcd, 0x2c, 0x47, 0xf3, 0x0c, 0xd6, 0x42, 0xe0, 0x99, 0x2d, 0x87, 0x14, 0x37, 0xe3, 0x6f, + 0x27, 0xae, 0x6d, 0x64, 0xe6, 0x5e, 0x77, 0x8b, 0x44, 0xc6, 0xd7, 0x34, 0xa2, 0xbc, 0x48, 0x76, + 0x81, 0xbc, 0x48, 0xf3, 0x7f, 0x27, 0x13, 0xed, 0xca, 0x41, 0xb5, 0x22, 0x07, 0x75, 0x36, 0xf1, + 0x1e, 0xa7, 0x3a, 0xb2, 0x2f, 0x93, 0xea, 0x98, 0x57, 0xc4, 0xf2, 0x01, 0xfa, 0x4b, 0xb4, 0x33, + 0x9f, 0x2e, 0x90, 0xc6, 0x49, 0xd1, 0xf2, 0x0d, 0x4a, 0xa3, 0x9b, 0x5d, 0x55, 0x61, 0x55, 0x98, + 0x7b, 0x89, 0x2a, 0x99, 0x2f, 0xd7, 0x94, 0x46, 0x82, 0x2b, 0xa1, 0xc7, 0x8a, 0xf3, 0xf4, 0xd8, + 0x01, 0xea, 0xb1, 0x52, 0xac, 0xc7, 0x28, 0x76, 0x40, 0x59, 0x2f, 0xf5, 0x3b, 0x14, 0x4f, 0x7b, + 0xbc, 0x6c, 0xcc, 0xe0, 0xd1, 0xd8, 0x1b, 0x4d, 0x1c, 0x69, 0x6b, 0x6b, 0x55, 0x01, 0xd3, 0xb7, + 0x3c, 0x2b, 0xb3, 0xb7, 0x3c, 0x3f, 0x02, 0x08, 0x04, 0xee, 0x8e, 0x2d, 0xbb, 0x2f, 0x75, 0x1d, + 0xd6, 0x9d, 0xcb, 0xfa, 0xa6, 0xd3, 0x51, 0x09, 0x0e, 0x6c, 0xff, 0xc8, 0x3c, 0xa7, 0x14, 0xb5, + 0x2e, 0x18, 0x89, 0xe0, 0x69, 0xed, 0xbe, 0x32, 0xab, 0xdd, 0xdf, 0x0e, 0xed, 0xf4, 0xeb, 0x57, + 0xce, 0xef, 0x7a, 0xca, 0x36, 0xaf, 0x43, 0x89, 0xbc, 0x00, 0xcf, 0xa7, 0x2b, 0x4a, 0x15, 0x23, + 0x04, 0x53, 0x1a, 0xf6, 0x66, 0x5a, 0xc3, 0x36, 0x2c, 0x28, 0xea, 0x64, 0xcb, 0x74, 0x60, 0x24, + 0x0c, 0xd3, 0x66, 0x13, 0x61, 0xda, 0xa8, 0xda, 0x37, 0x97, 0xac, 0xf6, 0x9d, 0xba, 0xc5, 0x58, + 0x98, 0xb9, 0xc5, 0xd8, 0xfc, 0x14, 0x0a, 0xca, 0x27, 0x80, 0xd0, 0x1c, 0x55, 0xa6, 0x2c, 0x76, + 0x8a, 0x65, 0xf8, 0x75, 0x60, 0x81, 0x20, 0x5b, 0x47, 0x74, 0xcd, 0x91, 0x20, 0x25, 0x99, 0xe5, + 0x75, 0xb8, 0xae, 0x68, 0x83, 0xf4, 0x13, 0x32, 0xb8, 0x1c, 0xfb, 0xd8, 0x37, 0xfd, 0x0b, 0x96, + 0x6f, 0x7e, 0x44, 0xa5, 0x0e, 0xe1, 0x82, 0xaa, 0x46, 0xb7, 0x46, 0x95, 0x5a, 0xb6, 0xb4, 0xf6, + 0xa1, 0x4a, 0x19, 0xed, 0xdd, 0xaa, 0xfa, 0x41, 0x72, 0x1f, 0x29, 0xfe, 0xb5, 0x9c, 0x3c, 0xe3, + 0xff, 0xd4, 0xf6, 0x5b, 0x73, 0x23, 0x61, 0x31, 0xa6, 0x0b, 0x02, 0x33, 0x8b, 0x16, 0x04, 0x36, + 0x1f, 0xc3, 0xaa, 0x91, 0xd6, 0xe9, 0xfc, 0x7d, 0x28, 0x79, 0xe3, 0xa4, 0x9c, 0x17, 0xad, 0xcb, + 0x90, 0xbc, 0xf9, 0xbb, 0x19, 0x58, 0xee, 0xb8, 0x52, 0xf8, 0xae, 0xe9, 0x6c, 0x3b, 0xe6, 0x80, + 0xbf, 0x17, 0x6a, 0xa9, 0xf9, 0xb1, 0x96, 0x24, 0x6d, 0x5a, 0x61, 0x39, 0x3a, 0xa9, 0xc0, 0x6f, + 0xc0, 0x9a, 0xb0, 0x6c, 0xe9, 0xf9, 0xca, 0x4e, 0x0e, 0xeb, 0x36, 0xaf, 0x03, 0x53, 0xe8, 0x2e, + 0x6d, 0x89, 0x9e, 0x9a, 0xe6, 0x3a, 0x5c, 0x4f, 0x61, 0x43, 0x23, 0x38, 0xcb, 0x6f, 0x43, 0x3d, + 0x3e, 0x8d, 0xb6, 0x3c, 0x57, 0x76, 0x5c, 0x4b, 0x9c, 0x93, 0x91, 0xc5, 0x72, 0xcd, 0x5f, 0x8d, + 0xcc, 0xbb, 0xa7, 0xba, 0xaa, 0xd3, 0xf7, 0xbc, 0xf8, 0xca, 0xb0, 0x86, 0x12, 0x57, 0xd3, 0xb3, + 0x0b, 0x5c, 0x4d, 0xff, 0x28, 0xbe, 0x5e, 0xac, 0x0e, 0x8a, 0x57, 0xe6, 0x9e, 0x3e, 0x54, 0x8c, + 0xa6, 0xad, 0xfb, 0xae, 0x48, 0xdc, 0x35, 0x7e, 0x4b, 0xbb, 0x74, 0xf9, 0x45, 0xac, 0x60, 0x55, + 0xb7, 0xf1, 0xee, 0xf4, 0x9d, 0x96, 0xc5, 0x8a, 0x42, 0x67, 0x0c, 0x55, 0x78, 0x69, 0x43, 0xf5, + 0x9b, 0x53, 0xde, 0x53, 0x79, 0x6e, 0xf8, 0xf1, 0x8a, 0x1b, 0xbb, 0xdf, 0x84, 0xd2, 0xd0, 0x0e, + 0xa4, 0xe7, 0xab, 0x5b, 0xe4, 0xb3, 0xb7, 0xde, 0x12, 0xa3, 0xb5, 0xa3, 0x08, 0xa9, 0x82, 0x2f, + 0xe4, 0xe2, 0xdf, 0x81, 0x35, 0x1a, 0xf8, 0xc3, 0xd8, 0x6a, 0x08, 0xea, 0xd5, 0xb9, 0x95, 0x93, + 0x09, 0x51, 0x1b, 0x53, 0x2c, 0xc6, 0xac, 0x90, 0xc6, 0x00, 0x20, 0x9e, 0x9f, 0x19, 0x2d, 0xf6, + 0x19, 0x6e, 0x91, 0xdf, 0x84, 0x62, 0x30, 0x39, 0x8e, 0xb3, 0x8f, 0x1a, 0x6a, 0x9c, 0x43, 0x63, + 0xc6, 0x3a, 0x38, 0x14, 0xbe, 0x6a, 0xee, 0x95, 0x57, 0xd9, 0x3f, 0x4a, 0x4e, 0xbc, 0x5a, 0x9c, + 0x77, 0x2f, 0x99, 0xbd, 0x48, 0x72, 0x62, 0x05, 0x34, 0xde, 0x85, 0x6a, 0x62, 0x50, 0x51, 0x33, + 0x4f, 0x5c, 0xcb, 0x0b, 0x43, 0xde, 0xf8, 0x5b, 0x5d, 0xe5, 0xb3, 0xc2, 0xa0, 0x37, 0xfd, 0x6e, + 0x18, 0xc0, 0xa6, 0x07, 0xf0, 0x0a, 0x0f, 0xfb, 0x15, 0xa8, 0x25, 0x4c, 0xba, 0x28, 0x1c, 0x9a, + 0x46, 0x36, 0xcf, 0xe0, 0xf3, 0x09, 0x71, 0x87, 0xc2, 0x1f, 0xd9, 0x01, 0x1e, 0x24, 0xca, 0x59, + 0x24, 0xd3, 0xda, 0x12, 0xae, 0xb4, 0x65, 0xa8, 0x41, 0x23, 0x98, 0xff, 0x02, 0x14, 0xc6, 0xc2, + 0x1f, 0x05, 0x5a, 0x8b, 0x4e, 0xaf, 0xa0, 0xb9, 0x62, 0x03, 0x43, 0xf1, 0x34, 0xff, 0x51, 0x06, + 0xca, 0x7b, 0x42, 0x9a, 0x68, 0x3b, 0xf0, 0xbd, 0xa9, 0xb7, 0xcc, 0x66, 0xcc, 0x43, 0xd2, 0x75, + 0xed, 0xbe, 0xae, 0x77, 0x34, 0xbd, 0x86, 0x77, 0x96, 0xe2, 0x86, 0x35, 0x36, 0xa0, 0xa4, 0xd1, + 0x8d, 0xf7, 0x60, 0x75, 0x8a, 0x92, 0xc6, 0x45, 0xd9, 0xf6, 0xdd, 0x8b, 0x51, 0x58, 0xd6, 0xb5, + 0x6c, 0xa4, 0x91, 0x1b, 0x15, 0x28, 0x8d, 0x15, 0x43, 0xf3, 0x0f, 0x6e, 0x50, 0x31, 0x91, 0x7d, + 0x82, 0x3e, 0xfd, 0xbc, 0x93, 0xf5, 0x0e, 0x80, 0x8a, 0xd7, 0x51, 0xc9, 0x89, 0x0a, 0x51, 0x27, + 0x30, 0xfc, 0x83, 0x28, 0xb7, 0x90, 0x9f, 0x6b, 0x54, 0x25, 0x85, 0x4f, 0x27, 0x18, 0xea, 0x50, + 0xb2, 0x03, 0x8a, 0xc3, 0xe9, 0x32, 0xad, 0x10, 0xe4, 0xdf, 0x80, 0xa2, 0x3d, 0x1a, 0x7b, 0xbe, + 0xd4, 0xc9, 0x87, 0x2b, 0xa5, 0x76, 0x88, 0x72, 0x67, 0xc9, 0xd0, 0x3c, 0xc8, 0x2d, 0xce, 0x89, + 0xbb, 0xfc, 0x62, 0xee, 0xf6, 0x79, 0xc8, 0xad, 0x78, 0xf8, 0xb7, 0xa1, 0x36, 0x50, 0x55, 0xaa, + 0x4a, 0xb0, 0x56, 0x22, 0xaf, 0x5f, 0x25, 0xe4, 0x51, 0x92, 0x61, 0x67, 0xc9, 0x48, 0x4b, 0x40, + 0x91, 0x68, 0xc0, 0x8b, 0x40, 0xf6, 0xbc, 0x8f, 0x3d, 0xdb, 0x25, 0x77, 0xf7, 0x05, 0x22, 0x8d, + 0x24, 0x03, 0x8a, 0x4c, 0x49, 0xe0, 0x5f, 0x43, 0x8b, 0x27, 0x90, 0xfa, 0x22, 0xff, 0xdd, 0xab, + 0x24, 0xf5, 0x44, 0xa0, 0xaf, 0xe0, 0x07, 0x92, 0x9f, 0x43, 0x23, 0xb1, 0x49, 0xf4, 0x4b, 0x5a, + 0xe3, 0xb1, 0xef, 0xa1, 0xcf, 0x5c, 0x23, 0x69, 0x5f, 0xbb, 0x4a, 0xda, 0xe1, 0xa5, 0xdc, 0x3b, + 0x4b, 0xc6, 0x15, 0xb2, 0x79, 0x0f, 0x3d, 0x3b, 0xdd, 0x85, 0x5d, 0x61, 0x9e, 0x85, 0x9f, 0x01, + 0xb8, 0xbf, 0xd0, 0x28, 0x10, 0xc7, 0xce, 0x92, 0x31, 0x25, 0x83, 0xff, 0x12, 0xac, 0xa5, 0xde, + 0x49, 0x37, 0x7f, 0xd5, 0x47, 0x02, 0xbe, 0xba, 0x70, 0x37, 0x90, 0x69, 0x67, 0xc9, 0x98, 0x95, + 0xc4, 0x27, 0xf0, 0xb9, 0xd9, 0x2e, 0x6d, 0x89, 0xbe, 0x63, 0xbb, 0x42, 0x7f, 0x4f, 0xe0, 0xdd, + 0x97, 0x1b, 0x2d, 0xcd, 0xbc, 0xb3, 0x64, 0x5c, 0x2e, 0x99, 0xff, 0x65, 0xb8, 0x3d, 0x9e, 0xab, + 0x62, 0x94, 0xea, 0xd2, 0x9f, 0x23, 0x78, 0x7f, 0xc1, 0x37, 0xcf, 0xf0, 0xef, 0x2c, 0x19, 0x57, + 0xca, 0x47, 0xdb, 0x99, 0x3c, 0x68, 0x5d, 0x4c, 0xaf, 0x00, 0xca, 0x4c, 0xf7, 0x9d, 0x1d, 0x61, + 0x5a, 0x51, 0x7e, 0x24, 0x46, 0x34, 0xfe, 0x47, 0x06, 0x8a, 0x7a, 0xbd, 0xdf, 0x8e, 0x2a, 0x24, + 0x22, 0xd5, 0x1d, 0x23, 0xf8, 0x87, 0x50, 0x11, 0xbe, 0xef, 0xf9, 0x9b, 0x9e, 0x15, 0x16, 0x97, + 0x4e, 0x47, 0x99, 0x95, 0x9c, 0xf5, 0x76, 0x48, 0x66, 0xc4, 0x1c, 0xfc, 0x03, 0x00, 0xb5, 0xcf, + 0x7b, 0xf1, 0x9d, 0xa8, 0xc6, 0x7c, 0x7e, 0x95, 0x72, 0x8b, 0xa9, 0xe3, 0xb0, 0x5c, 0x98, 0xef, + 0x0a, 0xc1, 0xc8, 0xe1, 0x2c, 0x24, 0x1c, 0xce, 0xdb, 0x3a, 0x8e, 0x40, 0xe1, 0x15, 0x7d, 0x33, + 0x30, 0x42, 0x34, 0x7e, 0x3f, 0x03, 0x45, 0xa5, 0x3c, 0x78, 0x7b, 0xb6, 0x47, 0xaf, 0xbd, 0x58, + 0xe7, 0xac, 0x4f, 0xf7, 0xec, 0x1b, 0x00, 0x4a, 0x07, 0x25, 0x7a, 0x76, 0x7b, 0x4a, 0x8e, 0x66, + 0x0d, 0xcb, 0xb9, 0x63, 0xfa, 0xe6, 0x43, 0x75, 0x7b, 0x8d, 0x42, 0xc2, 0x4f, 0x76, 0x77, 0xd9, + 0x12, 0x5f, 0x83, 0xda, 0x93, 0xfd, 0xc7, 0xfb, 0x07, 0xcf, 0xf6, 0x8f, 0xda, 0x86, 0x71, 0x60, + 0xa8, 0xc8, 0xf0, 0x46, 0x6b, 0xeb, 0xa8, 0xb3, 0x7f, 0xf8, 0xa4, 0xc7, 0xb2, 0x8d, 0x7f, 0x96, + 0x81, 0x5a, 0x4a, 0x77, 0xfd, 0xd9, 0x4e, 0x5d, 0x62, 0xf8, 0x73, 0xf3, 0x87, 0x3f, 0x7f, 0xd9, + 0xf0, 0x17, 0xa6, 0x87, 0xff, 0xb7, 0x33, 0x50, 0x4b, 0xe9, 0xc8, 0xa4, 0xf4, 0x4c, 0x5a, 0x7a, + 0xf2, 0xa4, 0xcf, 0x4e, 0x9d, 0xf4, 0x4d, 0x58, 0x0e, 0x7f, 0xef, 0xc7, 0x11, 0x87, 0x14, 0x2e, + 0x49, 0x43, 0xd7, 0x47, 0xf2, 0x69, 0x1a, 0xba, 0x42, 0x72, 0x75, 0x6b, 0xe9, 0xba, 0x6c, 0x40, + 0x5f, 0x13, 0x68, 0x5c, 0xae, 0x41, 0xaf, 0xe8, 0xc2, 0x23, 0xa8, 0x8e, 0xe3, 0x6d, 0xfa, 0x72, + 0x66, 0x49, 0x92, 0xf3, 0x05, 0xed, 0xfc, 0x9d, 0x0c, 0xac, 0xa4, 0x75, 0xee, 0xff, 0xd7, 0xc3, + 0xfa, 0x4f, 0x32, 0xb0, 0x36, 0xa3, 0xc9, 0xaf, 0x34, 0xec, 0xa6, 0xdb, 0x95, 0x5d, 0xa0, 0x5d, + 0xb9, 0x39, 0xed, 0xba, 0x5c, 0x93, 0x5c, 0xdd, 0xe2, 0x2e, 0x7c, 0xee, 0xd2, 0x33, 0xe1, 0x8a, + 0xa1, 0x4e, 0x09, 0xcd, 0x4d, 0x0b, 0xfd, 0xcd, 0x0c, 0xdc, 0xbe, 0x4a, 0xdf, 0xff, 0x3f, 0x5f, + 0x57, 0xd3, 0x2d, 0x6c, 0xbe, 0x17, 0x15, 0x4e, 0x54, 0xa1, 0xa4, 0xbf, 0xd2, 0xa5, 0x0b, 0xd7, + 0x87, 0xde, 0x73, 0x57, 0x45, 0xa2, 0x0d, 0x61, 0xea, 0xef, 0x18, 0x18, 0x62, 0xec, 0xd8, 0x94, + 0x23, 0xbd, 0x05, 0xd0, 0x22, 0xbf, 0x2e, 0xbc, 0x56, 0xb4, 0xb9, 0x7b, 0xd0, 0x6d, 0xb3, 0xa5, + 0xa4, 0x11, 0xfb, 0x69, 0xa8, 0x88, 0x9b, 0x87, 0x50, 0x8c, 0x2f, 0x7a, 0xec, 0x99, 0xfe, 0xa9, + 0xa5, 0x32, 0x91, 0xcb, 0x50, 0x3e, 0xd4, 0x2e, 0x94, 0x7a, 0xd5, 0xc7, 0xdd, 0x83, 0x7d, 0x15, + 0xf4, 0xde, 0x3a, 0xe8, 0xa9, 0xeb, 0x22, 0xdd, 0xa7, 0x8f, 0x54, 0x4a, 0xec, 0x91, 0xd1, 0x3a, + 0xdc, 0x39, 0x22, 0x8a, 0x42, 0xf3, 0x37, 0xf2, 0xe1, 0xa9, 0xd6, 0x34, 0x74, 0x8e, 0x13, 0xa0, + 0x88, 0xda, 0xdc, 0xd3, 0x82, 0xa3, 0xd7, 0x50, 0x89, 0x73, 0xfb, 0x5c, 0xc5, 0x21, 0x58, 0x96, + 0x17, 0x21, 0x7b, 0x78, 0xac, 0x2a, 0xaf, 0x76, 0xe4, 0xc8, 0x51, 0xf7, 0x4c, 0x7b, 0xe7, 0x92, + 0x15, 0xf0, 0xc7, 0x66, 0x70, 0xc6, 0x8a, 0xcd, 0x7f, 0x9e, 0x83, 0x4a, 0xa4, 0x2a, 0x5f, 0x46, + 0x75, 0x73, 0x0e, 0x2b, 0x9d, 0xfd, 0x5e, 0xdb, 0xd8, 0x6f, 0xed, 0x6a, 0x92, 0x1c, 0xbf, 0x06, + 0xab, 0xdb, 0x9d, 0xdd, 0xf6, 0xd1, 0xee, 0x41, 0x6b, 0x4b, 0x23, 0xcb, 0xfc, 0x26, 0xf0, 0xce, + 0xde, 0xe1, 0x81, 0xd1, 0x3b, 0xea, 0x74, 0x8f, 0x36, 0x5b, 0xfb, 0x9b, 0xed, 0xdd, 0xf6, 0x16, + 0x2b, 0xf2, 0x57, 0xe0, 0xee, 0xfe, 0x41, 0xaf, 0x73, 0xb0, 0x7f, 0xb4, 0x7f, 0x70, 0x74, 0xb0, + 0xf1, 0x71, 0x7b, 0xb3, 0xd7, 0x3d, 0xea, 0xec, 0x1f, 0xa1, 0xd4, 0x47, 0x46, 0x0b, 0x9f, 0xb0, + 0x02, 0xbf, 0x0b, 0xb7, 0x35, 0x55, 0xb7, 0x6d, 0x3c, 0x6d, 0x1b, 0x28, 0xe4, 0xc9, 0x7e, 0xeb, + 0x69, 0xab, 0xb3, 0xdb, 0xda, 0xd8, 0x6d, 0xb3, 0x65, 0x7e, 0x07, 0x1a, 0x9a, 0xc2, 0x68, 0xf5, + 0xda, 0x47, 0xbb, 0x9d, 0xbd, 0x4e, 0xef, 0xa8, 0xfd, 0x9d, 0xcd, 0x76, 0x7b, 0xab, 0xbd, 0xc5, + 0x6a, 0xfc, 0x75, 0xf8, 0x32, 0x35, 0x4a, 0x37, 0x22, 0xfd, 0xb2, 0x4f, 0x3b, 0x87, 0x47, 0x2d, + 0x63, 0x73, 0xa7, 0xf3, 0xb4, 0xcd, 0x56, 0xf8, 0x6b, 0xf0, 0xa5, 0xcb, 0x49, 0xb7, 0x3a, 0x46, + 0x7b, 0xb3, 0x77, 0x60, 0x7c, 0xc2, 0xd6, 0xf8, 0x17, 0xe0, 0x73, 0x3b, 0xbd, 0xbd, 0xdd, 0xa3, + 0x67, 0xc6, 0xc1, 0xfe, 0xa3, 0x23, 0xfa, 0xd9, 0xed, 0x19, 0x4f, 0x36, 0x7b, 0x4f, 0x8c, 0x36, + 0x03, 0xde, 0x80, 0x9b, 0x87, 0x1b, 0x47, 0xfb, 0x07, 0xbd, 0xa3, 0xd6, 0xfe, 0x27, 0x1b, 0xbb, + 0x07, 0x9b, 0x8f, 0x8f, 0xb6, 0x0f, 0x8c, 0xbd, 0x56, 0x8f, 0x55, 0xf9, 0x57, 0xe0, 0xb5, 0xcd, + 0xee, 0x53, 0xdd, 0xcc, 0x83, 0xed, 0x23, 0xe3, 0xe0, 0x59, 0xf7, 0xe8, 0xc0, 0x38, 0x32, 0xda, + 0xbb, 0xd4, 0xe7, 0x6e, 0xdc, 0xf6, 0x12, 0xbf, 0x0d, 0xf5, 0xce, 0x7e, 0xf7, 0xc9, 0xf6, 0x76, + 0x67, 0xb3, 0xd3, 0xde, 0xef, 0x1d, 0x1d, 0xb6, 0x8d, 0xbd, 0x4e, 0xb7, 0x8b, 0x64, 0xac, 0xd2, + 0xfc, 0x16, 0x14, 0x3b, 0xee, 0x99, 0x2d, 0x69, 0x7f, 0xe9, 0xc5, 0xa8, 0x3d, 0xae, 0x10, 0xa4, + 0x6d, 0x61, 0x0f, 0x5c, 0xfa, 0x7e, 0x02, 0xed, 0xae, 0x65, 0x23, 0x46, 0x34, 0x7f, 0x3f, 0x07, + 0x35, 0x25, 0x22, 0xf4, 0xe0, 0xee, 0xc1, 0xaa, 0x0e, 0x85, 0x76, 0xd2, 0x2a, 0x6c, 0x1a, 0x4d, + 0x1f, 0x26, 0x53, 0xa8, 0x84, 0x22, 0x4b, 0xa2, 0xa8, 0x28, 0xa3, 0xef, 0xa0, 0x1b, 0xa8, 0xf2, + 0x95, 0x1a, 0xfa, 0xac, 0xba, 0x0b, 0xf5, 0xa2, 0x22, 0xec, 0x7b, 0xee, 0x66, 0x74, 0x85, 0x26, + 0x85, 0xe3, 0x9f, 0xc2, 0xad, 0x08, 0x6e, 0xbb, 0x7d, 0xff, 0x62, 0x1c, 0x7d, 0x39, 0xb0, 0x34, + 0x37, 0x98, 0xb0, 0x6d, 0x3b, 0x22, 0x45, 0x68, 0x5c, 0x26, 0x80, 0x3f, 0x02, 0xb0, 0x69, 0xb0, + 0xc8, 0x3e, 0x9a, 0x7f, 0x4f, 0x3c, 0x35, 0x9a, 0x1a, 0xd2, 0x66, 0x60, 0xf4, 0x1b, 0x0f, 0x88, + 0x01, 0xea, 0xdd, 0xc7, 0xfa, 0x43, 0x83, 0xcb, 0x46, 0x04, 0x37, 0x1f, 0x00, 0xc4, 0x5c, 0x9c, + 0xc1, 0x32, 0xda, 0x16, 0xad, 0x60, 0x4f, 0x8c, 0x8e, 0x85, 0xaf, 0xaa, 0x16, 0x15, 0xe6, 0x11, + 0x72, 0xb0, 0x4c, 0xf3, 0x8f, 0x32, 0x09, 0x3f, 0x5c, 0xf9, 0xd9, 0x57, 0x9e, 0x40, 0xf3, 0x72, + 0x42, 0xe8, 0x09, 0xeb, 0x41, 0xd5, 0x86, 0x91, 0x06, 0xf9, 0x21, 0x70, 0x7b, 0x76, 0x28, 0xf3, + 0x0b, 0x0e, 0xe5, 0x1c, 0xde, 0xe9, 0x90, 0x7e, 0x61, 0x36, 0xa4, 0x7f, 0x07, 0x60, 0xe0, 0x78, + 0xc7, 0x3a, 0xaf, 0x58, 0xd4, 0x75, 0x4e, 0x11, 0xa6, 0xe9, 0x40, 0x39, 0xfc, 0x6a, 0x22, 0xae, + 0x31, 0xfa, 0x6e, 0x62, 0x14, 0xe0, 0x54, 0x10, 0xdf, 0x81, 0x15, 0x91, 0x6e, 0x73, 0x76, 0xc1, + 0x36, 0x4f, 0xf1, 0x35, 0xbf, 0x0e, 0x6b, 0x33, 0x44, 0x38, 0x88, 0x63, 0x53, 0x46, 0x9f, 0x4e, + 0xc0, 0xdf, 0xb3, 0xe9, 0xfa, 0xe6, 0xbf, 0xcb, 0xc2, 0xf2, 0x9e, 0xe9, 0xda, 0x27, 0x22, 0x90, + 0x61, 0x6b, 0x83, 0xfe, 0x50, 0x8c, 0xcc, 0xb0, 0xb5, 0x0a, 0xd2, 0x51, 0x8f, 0x6c, 0x32, 0x9f, + 0x30, 0x93, 0x7e, 0xc2, 0xdd, 0x34, 0x91, 0xc3, 0xe8, 0x36, 0x81, 0x86, 0x70, 0xee, 0x1c, 0xbb, + 0x2f, 0xdc, 0x20, 0xdc, 0x31, 0x21, 0x18, 0x57, 0xef, 0x14, 0xaf, 0xa8, 0xde, 0x29, 0xcd, 0x8e, + 0xff, 0x5d, 0xa8, 0x06, 0x7d, 0x5f, 0x08, 0x37, 0x18, 0x7a, 0x32, 0xfc, 0xe2, 0x66, 0x12, 0x45, + 0xa5, 0x83, 0xde, 0x73, 0x17, 0xd7, 0xf8, 0xae, 0xed, 0x9e, 0xea, 0x8a, 0xb8, 0x14, 0x0e, 0xd7, + 0x20, 0xc5, 0x7c, 0xec, 0xef, 0x0b, 0x8a, 0x37, 0x14, 0x8c, 0x08, 0xa6, 0xa8, 0x8e, 0x29, 0xc5, + 0xc0, 0xf3, 0x6d, 0xa1, 0x42, 0x9b, 0x15, 0x23, 0x81, 0x41, 0x5e, 0xc7, 0x74, 0x07, 0x13, 0x73, + 0x20, 0x74, 0xfa, 0x3b, 0x82, 0x9b, 0xff, 0xb3, 0x00, 0xa0, 0x76, 0x43, 0x30, 0xb4, 0xc7, 0x94, + 0x7a, 0xb1, 0x75, 0x0d, 0x75, 0xcd, 0xa0, 0xdf, 0xfc, 0xfd, 0xd4, 0xf5, 0x86, 0xd9, 0x64, 0x69, + 0xcc, 0x3e, 0x1d, 0x12, 0xc2, 0xc1, 0x31, 0xa5, 0xd0, 0x85, 0x53, 0x34, 0xfe, 0x79, 0x23, 0x89, + 0xa2, 0x52, 0x41, 0x53, 0x8a, 0xb6, 0x6b, 0xa9, 0x90, 0x53, 0xde, 0x88, 0x60, 0xba, 0x20, 0x15, + 0xb4, 0x26, 0xd2, 0x33, 0x84, 0x2b, 0x9e, 0x47, 0x77, 0xff, 0x62, 0x14, 0xdf, 0x83, 0xda, 0xd8, + 0xbc, 0x18, 0x09, 0x57, 0xee, 0x09, 0x39, 0xf4, 0x2c, 0x5d, 0xe5, 0xf4, 0xda, 0xe5, 0x0d, 0x3c, + 0x4c, 0x92, 0x1b, 0x69, 0x6e, 0x5c, 0x13, 0x6e, 0x40, 0xbb, 0x44, 0x4d, 0xa3, 0x86, 0xf8, 0x06, + 0x80, 0xfa, 0x95, 0xd0, 0x54, 0x33, 0x51, 0x28, 0x73, 0x24, 0x02, 0xe1, 0x9f, 0xd9, 0x4a, 0xbb, + 0x2a, 0x25, 0x15, 0x73, 0xa1, 0x2e, 0x9e, 0x04, 0xc2, 0x6f, 0x8f, 0x4c, 0xdb, 0xd1, 0x13, 0x1c, + 0x23, 0xf8, 0x3b, 0x70, 0x23, 0x98, 0x1c, 0xe3, 0x9a, 0x39, 0x16, 0x3d, 0x6f, 0x5f, 0x3c, 0x0f, + 0x1c, 0x21, 0xa5, 0xf0, 0x75, 0x25, 0xc5, 0xfc, 0x87, 0xcd, 0x41, 0x64, 0x86, 0xd1, 0xd7, 0x5d, + 0xf0, 0x57, 0x5c, 0xae, 0x15, 0xa1, 0x74, 0x2d, 0x1b, 0xcb, 0xa0, 0xfa, 0x53, 0x28, 0x5d, 0xea, + 0x96, 0xe5, 0x5f, 0x86, 0x2f, 0xa6, 0x88, 0x0c, 0x95, 0x98, 0x0e, 0xb6, 0x6d, 0xd7, 0x74, 0xec, + 0xef, 0xab, 0x32, 0x81, 0x5c, 0x73, 0x0c, 0xb5, 0xd4, 0xc0, 0xd1, 0x65, 0x55, 0xfa, 0xa5, 0xeb, + 0x7d, 0x18, 0x2c, 0x2b, 0xb8, 0x2b, 0x7d, 0x9b, 0x32, 0x2e, 0x11, 0x66, 0x13, 0xf7, 0xb9, 0xc7, + 0xb2, 0xfc, 0x3a, 0x30, 0x85, 0xe9, 0xb8, 0xe6, 0x78, 0xdc, 0x1a, 0x8f, 0x1d, 0xc1, 0x72, 0x74, + 0x11, 0x38, 0xc6, 0xaa, 0x4b, 0x0e, 0x2c, 0xdf, 0xfc, 0x0e, 0xdc, 0xa2, 0x91, 0x79, 0x2a, 0xfc, + 0xc8, 0xd1, 0xd6, 0x7d, 0xbd, 0x01, 0x6b, 0xea, 0xd7, 0xbe, 0x27, 0xd5, 0x63, 0x32, 0x3e, 0x39, + 0xac, 0x28, 0x34, 0xda, 0x5e, 0x5d, 0x41, 0xd7, 0x7b, 0x23, 0x5c, 0x44, 0x97, 0x6d, 0xfe, 0x61, + 0x11, 0x78, 0xbc, 0x20, 0x7a, 0xb6, 0xf0, 0xb7, 0x4c, 0x69, 0x26, 0x22, 0xa5, 0xb5, 0x4b, 0x73, + 0xfd, 0x2f, 0xae, 0xd4, 0xbb, 0x09, 0x45, 0x3b, 0x40, 0xd7, 0x50, 0x97, 0x27, 0x6b, 0x88, 0xef, + 0x02, 0x8c, 0x85, 0x6f, 0x7b, 0x16, 0xad, 0xa0, 0xc2, 0xdc, 0x5b, 0x26, 0xb3, 0x8d, 0x5a, 0x3f, + 0x8c, 0x78, 0x8c, 0x04, 0x3f, 0xb6, 0x43, 0x41, 0x2a, 0x73, 0x5e, 0xa4, 0x46, 0x27, 0x51, 0xfc, + 0x4d, 0xb8, 0x36, 0xf6, 0xed, 0xbe, 0x50, 0xd3, 0xf1, 0x24, 0xb0, 0x36, 0xe9, 0x9b, 0x88, 0x25, + 0xa2, 0x9c, 0xf7, 0x08, 0x57, 0xa0, 0xe9, 0x92, 0xc3, 0x14, 0x50, 0xae, 0x58, 0x5f, 0x88, 0x57, + 0x05, 0xbc, 0x35, 0x63, 0xfe, 0x43, 0x7e, 0x1f, 0x98, 0x7e, 0xb0, 0x67, 0xbb, 0xbb, 0xc2, 0x1d, + 0xc8, 0x21, 0x2d, 0xee, 0x9a, 0x31, 0x83, 0x27, 0x0d, 0xa6, 0xbe, 0x3c, 0xa5, 0xf2, 0x48, 0x15, + 0x23, 0x82, 0xd5, 0x47, 0x16, 0x1c, 0xcf, 0xef, 0x4a, 0x5f, 0x57, 0x22, 0x47, 0x30, 0xda, 0x50, + 0x01, 0xb5, 0xf5, 0xd0, 0xf7, 0xac, 0x09, 0x65, 0x39, 0x94, 0x12, 0x9b, 0x46, 0xc7, 0x94, 0x7b, + 0xa6, 0xab, 0xcb, 0x25, 0x6b, 0x49, 0xca, 0x08, 0x4d, 0x3e, 0xa1, 0x17, 0xc4, 0x02, 0x57, 0xb5, + 0x4f, 0x98, 0xc0, 0x69, 0x9a, 0x58, 0x14, 0x8b, 0x68, 0x62, 0x39, 0xd4, 0x7f, 0xcb, 0xf7, 0x6c, + 0x2b, 0x96, 0xa5, 0x2a, 0x77, 0x66, 0xf0, 0x09, 0xda, 0x58, 0x26, 0x4f, 0xd1, 0xc6, 0x72, 0xaf, + 0x43, 0xc1, 0x3b, 0x39, 0x11, 0x3e, 0x7d, 0x68, 0xb4, 0x62, 0x28, 0xa0, 0xf9, 0xc3, 0x0c, 0x40, + 0xbc, 0x24, 0x70, 0x23, 0xc4, 0x50, 0xbc, 0xf1, 0x6f, 0xc1, 0xb5, 0x24, 0xda, 0xd1, 0x85, 0xb0, + 0xb4, 0x1b, 0xe2, 0x07, 0x5b, 0xe6, 0x45, 0xc0, 0xb2, 0xfa, 0xa2, 0xba, 0xc6, 0x3d, 0x13, 0x82, + 0xaa, 0x0a, 0xaf, 0x03, 0x8b, 0x91, 0x74, 0xfb, 0x30, 0x60, 0xf9, 0x34, 0xe9, 0x27, 0xc2, 0xf4, + 0x03, 0x56, 0x68, 0xee, 0x40, 0x51, 0xa5, 0xc0, 0xe6, 0x24, 0xaf, 0x5f, 0xae, 0x12, 0xe5, 0x6f, + 0x66, 0x00, 0xb6, 0x54, 0x95, 0x38, 0x9e, 0xed, 0x73, 0x6a, 0x02, 0xe6, 0xd9, 0x59, 0xa6, 0x65, + 0x51, 0xb5, 0x7d, 0x2e, 0xfa, 0xca, 0x11, 0x82, 0xb8, 0x9e, 0xcc, 0xb0, 0x72, 0x4c, 0xed, 0xc4, + 0x08, 0x56, 0xc7, 0xca, 0xa6, 0xe7, 0xba, 0xa2, 0x8f, 0x87, 0x52, 0x74, 0xac, 0x44, 0xa8, 0xe6, + 0x0f, 0xb2, 0x50, 0xd9, 0x1c, 0x9a, 0x52, 0x7d, 0x14, 0xe8, 0x5b, 0x50, 0x1e, 0x89, 0x20, 0x30, + 0x07, 0x22, 0xd0, 0x29, 0x9f, 0xe9, 0x7c, 0x6d, 0x44, 0xbb, 0xfe, 0xc4, 0xf5, 0x85, 0x69, 0xa9, + 0x2f, 0x21, 0x45, 0x5c, 0x4a, 0x82, 0x2b, 0x23, 0x97, 0xfc, 0x25, 0x24, 0xb8, 0xd1, 0x67, 0x8b, + 0x1d, 0x33, 0x50, 0x24, 0x51, 0xb8, 0x2d, 0x89, 0x6a, 0xec, 0x41, 0x35, 0xc1, 0xca, 0x5f, 0x81, + 0x9a, 0xe7, 0x58, 0x22, 0x50, 0x77, 0x21, 0xe3, 0xcf, 0x47, 0xa6, 0x90, 0x54, 0xb8, 0x81, 0xfb, + 0x59, 0xf8, 0x3a, 0x7b, 0x17, 0x82, 0xcd, 0x5f, 0x2f, 0x43, 0x15, 0x1b, 0xb5, 0xa7, 0xfa, 0x30, + 0x33, 0x1d, 0x75, 0x28, 0x79, 0x5a, 0xb2, 0xae, 0x1d, 0xf7, 0x12, 0x32, 0x75, 0x31, 0x48, 0x2e, + 0x5d, 0x0c, 0x92, 0xaa, 0x1e, 0xcf, 0x4f, 0x57, 0x8f, 0xdf, 0x01, 0x18, 0x79, 0x16, 0x69, 0xe9, + 0x96, 0xca, 0xd2, 0xe4, 0x8c, 0x04, 0x86, 0xdc, 0x1c, 0xdd, 0xfd, 0xaa, 0x76, 0x73, 0x14, 0xa8, + 0xaa, 0x72, 0xc6, 0xce, 0x45, 0xcf, 0xd3, 0xad, 0xed, 0x58, 0xf1, 0x5d, 0xf4, 0x34, 0x9e, 0x6f, + 0x42, 0x49, 0x4f, 0x8b, 0xce, 0x45, 0xbd, 0x3e, 0x67, 0x26, 0x34, 0xf9, 0xba, 0xfe, 0xab, 0xaf, + 0x83, 0x19, 0x21, 0x27, 0x7f, 0x04, 0x55, 0x53, 0x4a, 0xb3, 0x3f, 0x1c, 0x69, 0xad, 0x9a, 0x9b, + 0x93, 0x96, 0x4e, 0x0a, 0x6a, 0x45, 0xd4, 0x46, 0x92, 0x93, 0x6f, 0x40, 0xc5, 0x17, 0x66, 0x2a, + 0x33, 0xfe, 0xca, 0x15, 0x62, 0x8c, 0x90, 0xd6, 0x88, 0xd9, 0xa2, 0x2f, 0xa9, 0x42, 0xe2, 0x4b, + 0xaa, 0x77, 0xa1, 0xaa, 0x97, 0x8e, 0x81, 0x8f, 0xd4, 0x17, 0x66, 0x92, 0xa8, 0xc6, 0x8f, 0x33, + 0xb0, 0x92, 0xee, 0xde, 0x9f, 0xc5, 0xb7, 0xff, 0xbe, 0x11, 0x7f, 0xfb, 0xef, 0x33, 0x7c, 0x47, + 0xef, 0x37, 0x33, 0x00, 0xf1, 0xc8, 0xe1, 0xd9, 0xaa, 0xbe, 0x51, 0x16, 0x5a, 0xfb, 0x0a, 0xe2, + 0x3b, 0xa9, 0x0f, 0x5b, 0xbc, 0xb3, 0xd0, 0x34, 0x24, 0x7e, 0x26, 0xca, 0xde, 0x1f, 0xc0, 0x4a, + 0x1a, 0x4f, 0xd7, 0x05, 0x3a, 0xbb, 0x6d, 0x15, 0xdb, 0xea, 0xec, 0xb5, 0x1e, 0xb5, 0xf5, 0xb5, + 0xbc, 0xce, 0xfe, 0x63, 0x96, 0x6d, 0xfc, 0x71, 0x06, 0x2a, 0xd1, 0xa4, 0xf0, 0x6f, 0x27, 0x67, + 0x53, 0x15, 0xc8, 0xbc, 0xbd, 0xc8, 0x6c, 0xc6, 0xbf, 0xda, 0xae, 0xf4, 0x2f, 0x12, 0x93, 0xdb, + 0xf0, 0x60, 0x25, 0xfd, 0x70, 0x8e, 0x9a, 0x7d, 0x94, 0x56, 0xb3, 0x6f, 0x2d, 0xf4, 0xca, 0xd0, + 0xc5, 0xdd, 0xb5, 0x03, 0xa9, 0x35, 0xf0, 0x07, 0xd9, 0xf7, 0x33, 0x8d, 0xbb, 0xb0, 0x9c, 0x7c, + 0x34, 0x7b, 0x33, 0xf7, 0xfe, 0x1f, 0xe7, 0x60, 0x25, 0x5d, 0x63, 0x42, 0x37, 0xfd, 0x54, 0x7d, + 0xd3, 0x81, 0x63, 0x25, 0x6e, 0x0a, 0x30, 0x74, 0xaf, 0xb5, 0x13, 0x4d, 0x88, 0x35, 0x8a, 0x9e, + 0x79, 0x23, 0xc1, 0xee, 0x26, 0xbf, 0x6f, 0xfa, 0x26, 0x87, 0xf0, 0x86, 0x26, 0x1b, 0xf3, 0x8a, + 0xfe, 0xd2, 0xdb, 0x0f, 0xb2, 0xbc, 0x96, 0xa8, 0x57, 0xff, 0x11, 0x5a, 0x90, 0xab, 0x1b, 0x13, + 0xd7, 0x72, 0x84, 0x15, 0x61, 0x7f, 0x9c, 0xc4, 0x46, 0x05, 0xe7, 0x3f, 0xc8, 0xf3, 0x15, 0xa8, + 0x74, 0x27, 0xc7, 0xba, 0xd8, 0xfc, 0xaf, 0xe4, 0xf9, 0x4d, 0x58, 0xd3, 0x54, 0x71, 0x6d, 0x27, + 0xfb, 0xab, 0x78, 0xaa, 0xad, 0xb4, 0xd4, 0x78, 0xe9, 0x86, 0xb2, 0xbf, 0x96, 0xc7, 0x26, 0xd0, + 0xc5, 0xff, 0xbf, 0x4e, 0x72, 0xa2, 0x8b, 0x50, 0xec, 0x97, 0xf3, 0x7c, 0x15, 0xa0, 0xdb, 0x8b, + 0x5e, 0xf4, 0xab, 0x79, 0x5e, 0x85, 0x62, 0xb7, 0x47, 0xd2, 0x7e, 0x98, 0xe7, 0x37, 0x80, 0xc5, + 0x4f, 0x75, 0xc5, 0xeb, 0xdf, 0x52, 0x8d, 0x89, 0x4a, 0x58, 0xff, 0x76, 0x1e, 0xfb, 0x15, 0x8e, + 0x32, 0xfb, 0x3b, 0x79, 0xce, 0xa0, 0x9a, 0x88, 0xc9, 0xb2, 0xbf, 0x9b, 0xe7, 0x1c, 0x6a, 0x7b, + 0x76, 0x10, 0xd8, 0xee, 0x40, 0xf7, 0xe0, 0x57, 0xe8, 0xcd, 0xdb, 0xd1, 0x5d, 0x2e, 0xf6, 0x6b, + 0x79, 0x7e, 0x0b, 0x78, 0x32, 0x0f, 0xa5, 0x1f, 0xfc, 0x3a, 0x71, 0xab, 0x93, 0x34, 0xd0, 0xb8, + 0xbf, 0x47, 0xdc, 0xb8, 0x12, 0x34, 0xe2, 0x37, 0x68, 0x40, 0x36, 0xe3, 0x1a, 0x59, 0x8d, 0xff, + 0x11, 0x31, 0x87, 0x93, 0xa9, 0x70, 0x3f, 0xce, 0xdf, 0xff, 0x5d, 0xca, 0x23, 0x24, 0x4b, 0xcd, + 0xf8, 0x32, 0x94, 0x1d, 0xcf, 0x1d, 0x48, 0xf5, 0x5d, 0xd9, 0x1a, 0x54, 0x82, 0xa1, 0xe7, 0x4b, + 0x02, 0xe9, 0xb2, 0xa9, 0x4b, 0x1f, 0x25, 0x50, 0xd7, 0x15, 0x94, 0x37, 0xa8, 0xe2, 0xb2, 0xd2, + 0x1c, 0xb0, 0x6a, 0x54, 0xdd, 0x9b, 0x8f, 0x2a, 0x90, 0xe9, 0xe3, 0x08, 0xe1, 0xe5, 0x73, 0x56, + 0x44, 0xd2, 0x89, 0xef, 0xa8, 0x4a, 0x64, 0x81, 0x9e, 0x80, 0xfa, 0x80, 0xe4, 0x78, 0x88, 0x0e, + 0x47, 0x45, 0x61, 0xbd, 0xef, 0xda, 0xea, 0x5a, 0xb3, 0x2e, 0xec, 0xb3, 0xb0, 0x1d, 0x51, 0xed, + 0x0a, 0x13, 0xf7, 0xff, 0x7e, 0x06, 0x96, 0xc3, 0x4f, 0x02, 0xd8, 0x03, 0xdb, 0x55, 0xb5, 0xcc, + 0xe1, 0xd7, 0x7a, 0xfb, 0x8e, 0x3d, 0x0e, 0xbf, 0x7e, 0xb9, 0x0a, 0x55, 0xcb, 0x37, 0x07, 0x2d, + 0xd7, 0xda, 0xf2, 0xbd, 0xb1, 0x6a, 0xb6, 0xca, 0x34, 0xaa, 0x1a, 0xea, 0xe7, 0xe2, 0x18, 0xc9, + 0xc7, 0xc2, 0x67, 0x79, 0x2a, 0x1a, 0x1c, 0x9a, 0xbe, 0xed, 0x0e, 0xda, 0xe7, 0x52, 0xb8, 0x81, + 0xaa, 0xa5, 0xae, 0x42, 0x69, 0x12, 0x88, 0xbe, 0x19, 0x08, 0x56, 0x44, 0xe0, 0x78, 0x62, 0x3b, + 0xd2, 0x76, 0xd5, 0x47, 0x27, 0xa3, 0x62, 0xe9, 0x32, 0xf6, 0xcc, 0x1c, 0xdb, 0xac, 0x72, 0xff, + 0x5f, 0x65, 0xa0, 0x4a, 0xcb, 0x22, 0x8e, 0xa5, 0xc7, 0x56, 0x5c, 0x15, 0x4a, 0xbb, 0xd1, 0xd7, + 0x07, 0x8b, 0x90, 0x3d, 0x38, 0x55, 0xb1, 0x74, 0xbd, 0x2c, 0xd4, 0xdd, 0x5d, 0xf5, 0x21, 0xc2, + 0x3c, 0xff, 0x1c, 0xdc, 0x30, 0xc4, 0xc8, 0x93, 0xe2, 0x99, 0x69, 0xcb, 0xe4, 0xbd, 0xa5, 0x02, + 0xba, 0x81, 0xea, 0x51, 0x78, 0x51, 0xa9, 0x48, 0x6e, 0x20, 0xbe, 0x36, 0xc4, 0x94, 0xb0, 0xf7, + 0x84, 0xd1, 0x7e, 0x61, 0x39, 0x22, 0xf9, 0xd8, 0xb3, 0x5d, 0x7c, 0x1b, 0xdd, 0x27, 0x27, 0x0c, + 0x25, 0x65, 0x10, 0x05, 0xf7, 0xf7, 0xe1, 0xe6, 0xfc, 0x54, 0x82, 0xba, 0x69, 0x4e, 0x9f, 0xbc, + 0xa6, 0x9b, 0x2c, 0xcf, 0x7c, 0x5b, 0x5d, 0x09, 0xae, 0x40, 0xe1, 0xe0, 0xb9, 0x4b, 0xcb, 0x62, + 0x0d, 0x6a, 0xfb, 0x5e, 0x82, 0x87, 0xe5, 0xee, 0xf7, 0x53, 0xd9, 0x9f, 0x78, 0x50, 0xc2, 0x46, + 0x2c, 0x25, 0x6e, 0x69, 0x65, 0x54, 0x5e, 0x81, 0xfe, 0x6b, 0x89, 0xfa, 0x0a, 0x87, 0xce, 0xba, + 0x58, 0xea, 0x2b, 0x1c, 0x51, 0x33, 0xf3, 0xea, 0x73, 0x64, 0x6e, 0x5f, 0x38, 0xc2, 0x62, 0x85, + 0xfb, 0xef, 0xc3, 0xaa, 0xee, 0x6a, 0x5f, 0x04, 0x41, 0x78, 0xcb, 0xe9, 0xd0, 0xb7, 0xcf, 0xd4, + 0x97, 0x3e, 0x96, 0xa1, 0x7c, 0x28, 0xfc, 0xc0, 0x73, 0xe9, 0x2b, 0x27, 0x00, 0xc5, 0xee, 0xd0, + 0xf4, 0xf1, 0x1d, 0xf7, 0xbf, 0xaa, 0x07, 0xe9, 0xc9, 0x79, 0x78, 0x34, 0xe0, 0xfe, 0xd1, 0x1f, + 0xf9, 0x31, 0xa5, 0xa9, 0xc9, 0xa5, 0x2f, 0xcc, 0x11, 0xcb, 0xde, 0xdf, 0x84, 0x0a, 0x5d, 0x92, + 0x7a, 0x6c, 0xbb, 0x16, 0x76, 0x7c, 0x43, 0x17, 0xec, 0xd3, 0xd7, 0xa7, 0xce, 0x68, 0x38, 0xca, + 0xea, 0x3b, 0xbd, 0x2c, 0xcb, 0x6f, 0x02, 0x6f, 0x4d, 0xa4, 0x37, 0x32, 0xe9, 0x32, 0xb3, 0x73, + 0xa1, 0xbe, 0xe9, 0x9c, 0xbb, 0xff, 0x4d, 0xe0, 0x2a, 0x36, 0x67, 0x89, 0x73, 0xdb, 0x1d, 0x44, + 0x5f, 0x51, 0x00, 0xfa, 0x24, 0x8a, 0x25, 0xce, 0xc3, 0x1b, 0x6e, 0x21, 0x10, 0x7e, 0x98, 0x65, + 0xdb, 0x9b, 0xb8, 0xd8, 0xe8, 0xa7, 0x70, 0x5d, 0x2d, 0x31, 0xec, 0x05, 0xdd, 0x94, 0xbd, 0x34, + 0x60, 0xa0, 0x6e, 0xb8, 0xc9, 0x49, 0x10, 0xd1, 0xb2, 0x0c, 0x36, 0x2c, 0x72, 0xb6, 0x63, 0x7c, + 0xf6, 0x7e, 0x13, 0xae, 0xcd, 0x89, 0x78, 0x90, 0x52, 0x57, 0x7e, 0x1f, 0x5b, 0xba, 0xff, 0x11, + 0xac, 0x29, 0x35, 0xb4, 0xaf, 0xee, 0x32, 0x86, 0xc3, 0xf6, 0xac, 0xb3, 0xdd, 0x51, 0x23, 0xbd, 0xd9, 0xde, 0xdd, 0x7d, 0xb2, 0xdb, 0x32, 0x58, 0x86, 0xd6, 0xc3, 0x41, 0xef, 0x68, 0xf3, 0x60, - 0x7f, 0xbf, 0xbd, 0xd9, 0x6b, 0x6f, 0xb1, 0xec, 0xc6, 0xfd, 0x7f, 0xff, 0xd3, 0x3b, 0x99, 0x9f, - 0xfc, 0xf4, 0x4e, 0xe6, 0xbf, 0xfd, 0xf4, 0x4e, 0xe6, 0x87, 0x3f, 0xbb, 0xb3, 0xf4, 0x93, 0x9f, - 0xdd, 0x59, 0xfa, 0x4f, 0x3f, 0xbb, 0xb3, 0xf4, 0x29, 0x9b, 0xfe, 0xd7, 0x43, 0xc7, 0x45, 0x32, - 0x2a, 0xde, 0xfe, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x1c, 0x18, 0x3c, 0x6a, 0x95, 0x68, 0x00, + 0x7f, 0xbf, 0xbd, 0xd9, 0x6b, 0x6f, 0xb1, 0xec, 0xc6, 0xfd, 0x7f, 0xf3, 0xd3, 0x3b, 0x99, 0x9f, + 0xfc, 0xf4, 0x4e, 0xe6, 0x3f, 0xff, 0xf4, 0x4e, 0xe6, 0x87, 0x3f, 0xbb, 0xb3, 0xf4, 0x93, 0x9f, + 0xdd, 0x59, 0xfa, 0xf7, 0x3f, 0xbb, 0xb3, 0xf4, 0x29, 0x9b, 0xfe, 0xc7, 0x43, 0xc7, 0x45, 0x72, + 0x2a, 0xde, 0xfe, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x8a, 0xe8, 0xda, 0x41, 0x93, 0x68, 0x00, 0x00, } @@ -13539,29 +13539,29 @@ func (m *AccountAuthAppInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0 } i-- - dAtA[i] = 0x38 + dAtA[i] = 0x40 } if m.Scope != 0 { i = encodeVarintModels(dAtA, i, uint64(m.Scope)) i-- - dAtA[i] = 0x30 + dAtA[i] = 0x38 } if m.ExpireAt != 0 { i = encodeVarintModels(dAtA, i, uint64(m.ExpireAt)) i-- - dAtA[i] = 0x28 + dAtA[i] = 0x30 } if m.CreatedAt != 0 { i = encodeVarintModels(dAtA, i, uint64(m.CreatedAt)) i-- - dAtA[i] = 0x20 + dAtA[i] = 0x28 } - if len(m.AppPath) > 0 { - i -= len(m.AppPath) - copy(dAtA[i:], m.AppPath) - i = encodeVarintModels(dAtA, i, uint64(len(m.AppPath))) + if len(m.AppKey) > 0 { + i -= len(m.AppKey) + copy(dAtA[i:], m.AppKey) + i = encodeVarintModels(dAtA, i, uint64(len(m.AppKey))) i-- - dAtA[i] = 0x1a + dAtA[i] = 0x22 } if len(m.AppName) > 0 { i -= len(m.AppName) @@ -18190,7 +18190,7 @@ func (m *AccountAuthAppInfo) Size() (n int) { if l > 0 { n += 1 + l + sovModels(uint64(l)) } - l = len(m.AppPath) + l = len(m.AppKey) if l > 0 { n += 1 + l + sovModels(uint64(l)) } @@ -27636,9 +27636,9 @@ func (m *AccountAuthAppInfo) Unmarshal(dAtA []byte) error { } m.AppName = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 3: + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AppPath", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AppKey", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -27666,9 +27666,9 @@ func (m *AccountAuthAppInfo) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.AppPath = string(dAtA[iNdEx:postIndex]) + m.AppKey = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 4: + case 5: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field CreatedAt", wireType) } @@ -27687,7 +27687,7 @@ func (m *AccountAuthAppInfo) Unmarshal(dAtA []byte) error { break } } - case 5: + case 6: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field ExpireAt", wireType) } @@ -27706,7 +27706,7 @@ func (m *AccountAuthAppInfo) Unmarshal(dAtA []byte) error { break } } - case 6: + case 7: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field Scope", wireType) } @@ -27725,7 +27725,7 @@ func (m *AccountAuthAppInfo) Unmarshal(dAtA []byte) error { break } } - case 7: + case 8: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field IsActive", wireType) } diff --git a/pkg/lib/pb/model/protos/models.proto b/pkg/lib/pb/model/protos/models.proto index 7d3a1d526..5f8951cf6 100644 --- a/pkg/lib/pb/model/protos/models.proto +++ b/pkg/lib/pb/model/protos/models.proto @@ -679,12 +679,12 @@ message Account { message Auth { message AppInfo { string appHash = 1; - string appName = 2; // just for info, not secure to rely on - string appPath = 3; // for now, it is not verified - int64 createdAt = 4; - int64 expireAt = 5; - LocalApiScope scope = 6; - bool isActive = 7; + string appName = 2; // either from process or specified manually when creating + string appKey = 4; + int64 createdAt = 5; + int64 expireAt = 6; + LocalApiScope scope = 7; + bool isActive = 8; } enum LocalApiScope { Limited = 0; // Used in WebClipper; AccountSelect(to be deprecated), ObjectSearch, ObjectShow, ObjectCreate, ObjectCreateFromURL, BlockPreview, BlockPaste, BroadcastPayloadEvent diff --git a/util/grpcprocess/grpcprocess.go b/util/grpcprocess/grpcprocess.go new file mode 100644 index 000000000..32d44569a --- /dev/null +++ b/util/grpcprocess/grpcprocess.go @@ -0,0 +1,94 @@ +package grpcprocess + +import ( + "context" + "fmt" + "net" + "os" + + gnet "github.com/shirou/gopsutil/v3/net" + gproc "github.com/shirou/gopsutil/v3/process" + "google.golang.org/grpc" + "google.golang.org/grpc/peer" +) + +// ---------------- Public API ---------------- // + +// ProcessInfo holds details about the client process. +type ProcessInfo struct { + PID int32 + Name string + Path string +} + +// FromContext retrieves the ProcessInfo stored by the interceptor. +func FromContext(ctx context.Context) (*ProcessInfo, bool) { + pi, ok := ctx.Value(processInfoKey).(*ProcessInfo) + return pi, ok +} + +// ProcessInfoInterceptor returns an interceptor that *only* runs for the +// gRPC methods listed in allowedMethods (exact match on info.FullMethod). +func ProcessInfoInterceptor(allowedMethods ...string) grpc.UnaryServerInterceptor { + allow := make(map[string]struct{}, len(allowedMethods)) + for _, m := range allowedMethods { + allow[m] = struct{}{} + } + + return func( + ctx context.Context, + req interface{}, + info *grpc.UnaryServerInfo, + handler grpc.UnaryHandler, + ) (interface{}, error) { + if _, ok := allow[info.FullMethod]; !ok { + return handler(ctx, req) + } + if _, ok := ctx.Value(processInfoKey).(*ProcessInfo); ok { + // already set + return handler(ctx, req) + } + if p, ok := peer.FromContext(ctx); ok { + if host, port, err := net.SplitHostPort(p.Addr.String()); err == nil { + ip := net.ParseIP(host) + if ip.IsLoopback() { + if pi, err := ResolveProcess(host, port); err == nil { + ctx = context.WithValue(ctx, processInfoKey, pi) + } + } + } + } + return handler(ctx, req) + } +} + +type ctxKey string + +const processInfoKey ctxKey = "processInfo" + +func ResolveProcess(remoteIP, remotePort string) (*ProcessInfo, error) { + conns, err := gnet.Connections("tcp") + if err != nil { + return nil, err + } + + self := int32(os.Getpid()) + for _, c := range conns { + if c.Pid == self || c.Status != "ESTABLISHED" { + continue + } + + if fmt.Sprint(c.Laddr.IP) == remoteIP && + fmt.Sprint(c.Laddr.Port) == remotePort { + + proc, err := gproc.NewProcess(c.Pid) + if err != nil { + return nil, err + } + name, _ := proc.Name() + exe, _ := proc.Exe() + return &ProcessInfo{PID: c.Pid, Name: name, Path: exe}, nil + } + } + return nil, fmt.Errorf("process for %s:%s not found", remoteIP, remotePort) +} From 48feda31794e7fc824306d097a285309c3ceb016 Mon Sep 17 00:00:00 2001 From: Roman Khafizianov Date: Tue, 20 May 2025 15:59:15 +0200 Subject: [PATCH 124/164] GO-5629 remove comment --- util/grpcprocess/grpcprocess.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/util/grpcprocess/grpcprocess.go b/util/grpcprocess/grpcprocess.go index 32d44569a..60ab915e3 100644 --- a/util/grpcprocess/grpcprocess.go +++ b/util/grpcprocess/grpcprocess.go @@ -12,8 +12,6 @@ import ( "google.golang.org/grpc/peer" ) -// ---------------- Public API ---------------- // - // ProcessInfo holds details about the client process. type ProcessInfo struct { PID int32 From b566e0d8c133380471e3e9acf262657ef1c426fd Mon Sep 17 00:00:00 2001 From: Roman Khafizianov Date: Tue, 20 May 2025 16:59:34 +0200 Subject: [PATCH 125/164] GO-5629 revoke session --- core/application/application.go | 6 ++++-- core/application/sessions.go | 15 ++++++++++++++- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/core/application/application.go b/core/application/application.go index 96aa7572e..63248f91d 100644 --- a/core/application/application.go +++ b/core/application/application.go @@ -25,6 +25,7 @@ type Service struct { // memoized private key derived from mnemonic, used for signing session tokens sessionSigningKey []byte + sessionsByAppHash map[string]string rootPath string fulltextPrimaryLanguage string @@ -40,8 +41,9 @@ type Service struct { func New() *Service { s := &Service{ - sessions: session.New(), - traceRecorder: &traceRecorder{}, + sessions: session.New(), + traceRecorder: &traceRecorder{}, + sessionsByAppHash: make(map[string]string), } m := newMigrationManager(s) s.migrationManager = m diff --git a/core/application/sessions.go b/core/application/sessions.go index 54dfea651..6e4057720 100644 --- a/core/application/sessions.go +++ b/core/application/sessions.go @@ -32,11 +32,14 @@ func (s *Service) CreateSession(req *pb.RpcWalletCreateSessionRequest) (token st return "", "", err } log.Infof("appLink auth %s", appLink.AppName) - token, err := s.sessions.StartSession(s.sessionSigningKey, model.AccountAuthLocalApiScope(appLink.Scope)) // nolint:gosec if err != nil { return "", "", err } + s.lock.Lock() + defer s.lock.Unlock() + s.sessionsByAppHash[appLink.AppHash] = token + return token, w.Account().SignKey.GetPublic().Account(), nil } @@ -138,6 +141,16 @@ func (s *Service) LinkLocalRevokeApp(req *pb.RpcAccountLocalLinkRevokeAppRequest return ErrApplicationIsNotRunning } + s.lock.Lock() + defer s.lock.Unlock() + + if token, ok := s.sessionsByAppHash[req.AppHash]; ok { + delete(s.sessionsByAppHash, req.AppHash) + err := s.sessions.CloseSession(token) + if err != nil { + log.Errorf("error while closing session: %v", err) + } + } wallet := s.app.Component(walletComp.CName).(walletComp.Wallet) return wallet.RevokeAppLink(req.AppHash) From 1cdf5f4777d11ad4f22f8c5362726d14114e984f Mon Sep 17 00:00:00 2001 From: Roman Khafizianov Date: Tue, 20 May 2025 17:22:31 +0200 Subject: [PATCH 126/164] GO-5629 fix session revoke --- core/account.go | 18 ++-------------- core/application/sessions.go | 42 ++++++++++++++++++++++++++++++------ 2 files changed, 37 insertions(+), 23 deletions(-) diff --git a/core/account.go b/core/account.go index ded234abc..2012fb90c 100644 --- a/core/account.go +++ b/core/account.go @@ -10,7 +10,6 @@ import ( "github.com/anyproto/anytype-heart/core/session" walletComp "github.com/anyproto/anytype-heart/core/wallet" "github.com/anyproto/anytype-heart/pb" - "github.com/anyproto/anytype-heart/pkg/lib/pb/model" "github.com/anyproto/anytype-heart/space/spacecore/storage/migrator" "github.com/anyproto/anytype-heart/util/grpcprocess" ) @@ -302,22 +301,9 @@ func (mw *Middleware) AccountLocalLinkListApps(_ context.Context, req *pb.RpcAcc code := mapErrorCode(err, errToCode(application.ErrApplicationIsNotRunning, pb.RpcAccountLocalLinkListAppsResponseError_ACCOUNT_IS_NOT_RUNNING), ) - appsList := make([]*model.AccountAuthAppInfo, len(apps)) - for i, app := range apps { - if app.AppName == "" { - app.AppName = app.AppHash - } - appsList[i] = &model.AccountAuthAppInfo{ - AppHash: app.AppHash, - AppName: app.AppName, - AppKey: app.AppKey, - CreatedAt: app.CreatedAt, - ExpireAt: app.ExpireAt, - Scope: model.AccountAuthLocalApiScope(app.Scope), - } - } + return &pb.RpcAccountLocalLinkListAppsResponse{ - App: appsList, + App: apps, Error: &pb.RpcAccountLocalLinkListAppsResponseError{ Code: code, Description: getErrorDescription(err), diff --git a/core/application/sessions.go b/core/application/sessions.go index 6e4057720..35c24c8d4 100644 --- a/core/application/sessions.go +++ b/core/application/sessions.go @@ -127,13 +127,36 @@ func (s *Service) LinkLocalCreateApp(req *pb.RpcAccountLocalLinkCreateAppRequest return } -func (s *Service) LinkLocalListApps() ([]*walletComp.AppLinkInfo, error) { +func (s *Service) LinkLocalListApps() ([]*model.AccountAuthAppInfo, error) { if s.app == nil { return nil, ErrApplicationIsNotRunning } wallet := s.app.Component(walletComp.CName).(walletComp.Wallet) - return wallet.ListAppLinks() + links, err := wallet.ListAppLinks() + if err != nil { + return nil, err + } + appsList := make([]*model.AccountAuthAppInfo, len(links)) + s.lock.RLock() + defer s.lock.RUnlock() + + for i, app := range links { + if app.AppName == "" { + app.AppName = app.AppHash + } + _, isActive := s.sessionsByAppHash[app.AppHash] + appsList[i] = &model.AccountAuthAppInfo{ + AppHash: app.AppHash, + AppName: app.AppName, + AppKey: app.AppKey, + CreatedAt: app.CreatedAt, + ExpireAt: app.ExpireAt, + Scope: model.AccountAuthLocalApiScope(app.Scope), + IsActive: isActive, + } + } + return appsList, nil } func (s *Service) LinkLocalRevokeApp(req *pb.RpcAccountLocalLinkRevokeAppRequest) error { @@ -141,17 +164,22 @@ func (s *Service) LinkLocalRevokeApp(req *pb.RpcAccountLocalLinkRevokeAppRequest return ErrApplicationIsNotRunning } + wallet := s.app.Component(walletComp.CName).(walletComp.Wallet) + err := wallet.RevokeAppLink(req.AppHash) + if err != nil { + return err + } + s.lock.Lock() defer s.lock.Unlock() - if token, ok := s.sessionsByAppHash[req.AppHash]; ok { delete(s.sessionsByAppHash, req.AppHash) - err := s.sessions.CloseSession(token) - if err != nil { + closeErr := s.sessions.CloseSession(token) + if closeErr != nil { log.Errorf("error while closing session: %v", err) } } - wallet := s.app.Component(walletComp.CName).(walletComp.Wallet) - return wallet.RevokeAppLink(req.AppHash) + + return err } From 561cc4337ca22afdcc58e1bb7e3e88cbaca616fc Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Tue, 20 May 2025 18:58:39 +0200 Subject: [PATCH 127/164] GO-5589 GO-4844: Refactor rate limiter and allow diable through env ANYTYPE_API_DISABLE_RATE_LIMIT --- core/api/server/middleware.go | 11 ++++--- core/api/server/middleware_test.go | 24 ++++++++++++-- core/api/server/router.go | 52 ++++++++++++++++-------------- 3 files changed, 56 insertions(+), 31 deletions(-) diff --git a/core/api/server/middleware.go b/core/api/server/middleware.go index 2777011f7..c36f2dc14 100644 --- a/core/api/server/middleware.go +++ b/core/api/server/middleware.go @@ -23,8 +23,8 @@ var ( ErrInvalidToken = errors.New("invalid token") ) -// rateLimit is a middleware that applies a token-bucket rate limiter with rate and burst. -func (s *Server) rateLimit(rate float64, burst int) gin.HandlerFunc { +// newWriteRateLimitMiddleware creates a shared write-rate limiter middleware. +func newWriteRateLimitMiddleware(rate float64, burst int, isRateLimitDisabled bool) gin.HandlerFunc { lmt := tollbooth.NewLimiter(rate, nil) lmt.SetBurst(burst) lmt.SetIPLookup(limiter.IPLookup{ @@ -33,8 +33,11 @@ func (s *Server) rateLimit(rate float64, burst int) gin.HandlerFunc { }) return func(c *gin.Context) { - httpError := tollbooth.LimitByRequest(lmt, c.Writer, c.Request) - if httpError != nil { + if isRateLimitDisabled { + c.Next() + return + } + if httpError := tollbooth.LimitByRequest(lmt, c.Writer, c.Request); httpError != nil { apiErr := util.CodeToAPIError(httpError.StatusCode, httpError.Message) c.AbortWithStatusJSON(httpError.StatusCode, apiErr) return diff --git a/core/api/server/middleware_test.go b/core/api/server/middleware_test.go index f7bf54c9b..b4b7f2f7b 100644 --- a/core/api/server/middleware_test.go +++ b/core/api/server/middleware_test.go @@ -139,9 +139,8 @@ func TestEnsureAuthenticated(t *testing.T) { } func TestRateLimit(t *testing.T) { - fx := newFixture(t) router := gin.New() - router.GET("/", fx.rateLimit(1, 1), func(c *gin.Context) { + router.GET("/", newWriteRateLimitMiddleware(1, 1, false), func(c *gin.Context) { c.String(http.StatusOK, "OK") }) @@ -173,7 +172,7 @@ func TestRateLimit(t *testing.T) { t.Run("burst of size 2 allows two requests", func(t *testing.T) { burstRouter := gin.New() - burstRouter.GET("/", fx.rateLimit(1, 2), func(c *gin.Context) { + burstRouter.GET("/", newWriteRateLimitMiddleware(1, 2, false), func(c *gin.Context) { c.String(http.StatusOK, "OK") }) @@ -198,4 +197,23 @@ func TestRateLimit(t *testing.T) { burstRouter.ServeHTTP(w3, req3) require.Equal(t, http.StatusTooManyRequests, w3.Code) }) + + t.Run("disabled rate limit allows all requests", func(t *testing.T) { + // given + disabledRouter := gin.New() + disabledRouter.GET("/", newWriteRateLimitMiddleware(1, 1, true), func(c *gin.Context) { + c.String(http.StatusOK, "OK") + }) + + // when + for i := 0; i < 5; i++ { + w := httptest.NewRecorder() + req := httptest.NewRequest("GET", "/", nil) + req.RemoteAddr = "1.2.3.4:5678" + disabledRouter.ServeHTTP(w, req) + + // then + require.Equal(t, http.StatusOK, w.Code) + } + }) } diff --git a/core/api/server/router.go b/core/api/server/router.go index 06a22e20a..e682a77f1 100644 --- a/core/api/server/router.go +++ b/core/api/server/router.go @@ -9,7 +9,6 @@ import ( apicore "github.com/anyproto/anytype-heart/core/api/core" _ "github.com/anyproto/anytype-heart/core/api/docs" "github.com/anyproto/anytype-heart/core/api/handler" - "github.com/anyproto/anytype-heart/core/api/pagination" ) @@ -24,8 +23,8 @@ const ( // NewRouter builds and returns a *gin.Engine with all routes configured. func (s *Server) NewRouter(mw apicore.ClientCommands) *gin.Engine { - debug := os.Getenv("ANYTYPE_API_DEBUG") == "1" - if !debug { + isDebug := os.Getenv("ANYTYPE_API_DEBUG") == "1" + if !isDebug { gin.SetMode(gin.ReleaseMode) } @@ -33,9 +32,10 @@ func (s *Server) NewRouter(mw apicore.ClientCommands) *gin.Engine { router.Use(gin.Recovery()) router.Use(s.ensureMetadataHeader()) - if debug { + if isDebug { router.Use(gin.Logger()) } + paginator := pagination.New(pagination.Config{ DefaultPage: defaultPage, DefaultPageSize: defaultPageSize, @@ -43,6 +43,10 @@ func (s *Server) NewRouter(mw apicore.ClientCommands) *gin.Engine { MaxPageSize: maxPageSize, }) + // Shared ratelimiter with option to disable it through env var + isRateLimitDisabled := os.Getenv("ANYTYPE_API_DISABLE_RATE_LIMIT") == "1" + writeRateLimitMW := newWriteRateLimitMiddleware(maxWriteRequestsPerSecond, maxBurstRequests, isRateLimitDisabled) + // Swagger route router.GET("/swagger/*any", func(c *gin.Context) { target := "https://developers.anytype.io/docs/reference" @@ -86,35 +90,35 @@ func (s *Server) NewRouter(mw apicore.ClientCommands) *gin.Engine { { // Block // TODO: implement create, update and delete block endpoints - // v1.POST("/spaces/:space_id/objects/:object_id/blocks", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), object.CreateBlockHandler(s.service)) - // v1.PATCH("/spaces/:space_id/objects/:object_id/blocks/:block_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), object.UpdateBlockHandler(s.service)) - // v1.DELETE("/spaces/:space_id/objects/:object_id/blocks/:block_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), object.DeleteBlockHandler(s.service)) + // v1.POST("/spaces/:space_id/objects/:object_id/blocks", writeRateLimitMW, object.CreateBlockHandler(s.service)) + // v1.PATCH("/spaces/:space_id/objects/:object_id/blocks/:block_id", writeRateLimitMW, object.UpdateBlockHandler(s.service)) + // v1.DELETE("/spaces/:space_id/objects/:object_id/blocks/:block_id", writeRateLimitMW, object.DeleteBlockHandler(s.service)) // List v1.GET("/spaces/:space_id/lists/:list_id/views", handler.GetListViewsHandler(s.service)) v1.GET("/spaces/:space_id/lists/:list_id/views/:view_id/objects", handler.GetObjectsInListHandler(s.service)) - v1.POST("/spaces/:space_id/lists/:list_id/objects", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.AddObjectsToListHandler(s.service)) - v1.DELETE("/spaces/:space_id/lists/:list_id/objects/:object_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.RemoveObjectFromListHandler(s.service)) + v1.POST("/spaces/:space_id/lists/:list_id/objects", writeRateLimitMW, handler.AddObjectsToListHandler(s.service)) + v1.DELETE("/spaces/:space_id/lists/:list_id/objects/:object_id", writeRateLimitMW, handler.RemoveObjectFromListHandler(s.service)) // Member v1.GET("/spaces/:space_id/members", handler.ListMembersHandler(s.service)) v1.GET("/spaces/:space_id/members/:member_id", handler.GetMemberHandler(s.service)) // TODO: renable when granular permissions are implementeds - // v1.PATCH("/spaces/:space_id/members/:member_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), space.UpdateMemberHandler(s.service)) + // v1.PATCH("/spaces/:space_id/members/:member_id", writeRateLimitMW, space.UpdateMemberHandler(s.service)) // Object v1.GET("/spaces/:space_id/objects", handler.ListObjectsHandler(s.service)) v1.GET("/spaces/:space_id/objects/:object_id", handler.GetObjectHandler(s.service)) - v1.POST("/spaces/:space_id/objects", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.CreateObjectHandler(s.service)) - v1.PATCH("/spaces/:space_id/objects/:object_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.UpdateObjectHandler(s.service)) - v1.DELETE("/spaces/:space_id/objects/:object_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.DeleteObjectHandler(s.service)) + v1.POST("/spaces/:space_id/objects", writeRateLimitMW, handler.CreateObjectHandler(s.service)) + v1.PATCH("/spaces/:space_id/objects/:object_id", writeRateLimitMW, handler.UpdateObjectHandler(s.service)) + v1.DELETE("/spaces/:space_id/objects/:object_id", writeRateLimitMW, handler.DeleteObjectHandler(s.service)) // Property v1.GET("/spaces/:space_id/properties", handler.ListPropertiesHandler(s.service)) v1.GET("/spaces/:space_id/properties/:property_id", handler.GetPropertyHandler(s.service)) - v1.POST("/spaces/:space_id/properties", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.CreatePropertyHandler(s.service)) - v1.PATCH("/spaces/:space_id/properties/:property_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.UpdatePropertyHandler(s.service)) - v1.DELETE("/spaces/:space_id/properties/:property_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.DeletePropertyHandler(s.service)) + v1.POST("/spaces/:space_id/properties", writeRateLimitMW, handler.CreatePropertyHandler(s.service)) + v1.PATCH("/spaces/:space_id/properties/:property_id", writeRateLimitMW, handler.UpdatePropertyHandler(s.service)) + v1.DELETE("/spaces/:space_id/properties/:property_id", writeRateLimitMW, handler.DeletePropertyHandler(s.service)) // Search v1.POST("/search", handler.GlobalSearchHandler(s.service)) @@ -123,15 +127,15 @@ func (s *Server) NewRouter(mw apicore.ClientCommands) *gin.Engine { // Space v1.GET("/spaces", handler.ListSpacesHandler(s.service)) v1.GET("/spaces/:space_id", handler.GetSpaceHandler(s.service)) - v1.POST("/spaces", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.CreateSpaceHandler(s.service)) - v1.PATCH("/spaces/:space_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.UpdateSpaceHandler(s.service)) + v1.POST("/spaces", writeRateLimitMW, handler.CreateSpaceHandler(s.service)) + v1.PATCH("/spaces/:space_id", writeRateLimitMW, handler.UpdateSpaceHandler(s.service)) // Tag v1.GET("/spaces/:space_id/properties/:property_id/tags", handler.ListTagsHandler(s.service)) v1.GET("/spaces/:space_id/properties/:property_id/tags/:tag_id", handler.GetTagHandler(s.service)) - v1.POST("/spaces/:space_id/properties/:property_id/tags", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.CreateTagHandler(s.service)) - v1.PATCH("/spaces/:space_id/properties/:property_id/tags/:tag_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.UpdateTagHandler(s.service)) - v1.DELETE("/spaces/:space_id/properties/:property_id/tags/:tag_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.DeleteTagHandler(s.service)) + v1.POST("/spaces/:space_id/properties/:property_id/tags", writeRateLimitMW, handler.CreateTagHandler(s.service)) + v1.PATCH("/spaces/:space_id/properties/:property_id/tags/:tag_id", writeRateLimitMW, handler.UpdateTagHandler(s.service)) + v1.DELETE("/spaces/:space_id/properties/:property_id/tags/:tag_id", writeRateLimitMW, handler.DeleteTagHandler(s.service)) // Template v1.GET("/spaces/:space_id/types/:type_id/templates", handler.ListTemplatesHandler(s.service)) @@ -140,9 +144,9 @@ func (s *Server) NewRouter(mw apicore.ClientCommands) *gin.Engine { // Type v1.GET("/spaces/:space_id/types", handler.ListTypesHandler(s.service)) v1.GET("/spaces/:space_id/types/:type_id", handler.GetTypeHandler(s.service)) - v1.POST("/spaces/:space_id/types", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.CreateTypeHandler(s.service)) - v1.PATCH("/spaces/:space_id/types/:type_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.UpdateTypeHandler(s.service)) - v1.DELETE("/spaces/:space_id/types/:type_id", s.rateLimit(maxWriteRequestsPerSecond, maxBurstRequests), handler.DeleteTypeHandler(s.service)) + v1.POST("/spaces/:space_id/types", writeRateLimitMW, handler.CreateTypeHandler(s.service)) + v1.PATCH("/spaces/:space_id/types/:type_id", writeRateLimitMW, handler.UpdateTypeHandler(s.service)) + v1.DELETE("/spaces/:space_id/types/:type_id", writeRateLimitMW, handler.DeleteTypeHandler(s.service)) } return router From c7d2d9696d7691b57110ad4ba5228ee7acac0a66 Mon Sep 17 00:00:00 2001 From: Grigory Efimov Date: Tue, 20 May 2025 14:03:00 -0300 Subject: [PATCH 128/164] OPS-703 publishAddr has been changed to anytype-publish-server.anytype.io --- core/anytype/config/config.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/anytype/config/config.go b/core/anytype/config/config.go index 1892258a8..c7b3f0248 100644 --- a/core/anytype/config/config.go +++ b/core/anytype/config/config.go @@ -490,7 +490,7 @@ func (c *Config) GetNetworkMode() pb.RpcAccountNetworkMode { func (c *Config) GetPublishServer() publishclient.Config { publishPeerId := "12D3KooWEQPgbxGPvkny8kikS3zqfziM7JsQBnJHXHL9ByCcATs7" - publishAddr := "load-balancer.anytype.io:4940" + publishAddr := "anytype-publish-server.anytype.io:4940" if peerId := os.Getenv("ANYTYPE_PUBLISH_PEERID"); peerId != "" { if addr := os.Getenv("ANYTYPE_PUBLISH_ADDRESS"); addr != "" { From 233c88a5c701116679f1fe711967e7b0006bcbe6 Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Tue, 20 May 2025 19:03:28 +0200 Subject: [PATCH 129/164] GO-5589 GO-4844: Rename to ensureRateLimit --- core/api/server/middleware.go | 4 ++-- core/api/server/middleware_test.go | 6 +++--- core/api/server/router.go | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/core/api/server/middleware.go b/core/api/server/middleware.go index c36f2dc14..1cd9eb2c5 100644 --- a/core/api/server/middleware.go +++ b/core/api/server/middleware.go @@ -23,8 +23,8 @@ var ( ErrInvalidToken = errors.New("invalid token") ) -// newWriteRateLimitMiddleware creates a shared write-rate limiter middleware. -func newWriteRateLimitMiddleware(rate float64, burst int, isRateLimitDisabled bool) gin.HandlerFunc { +// ensureRateLimit creates a shared write-rate limiter middleware. +func ensureRateLimit(rate float64, burst int, isRateLimitDisabled bool) gin.HandlerFunc { lmt := tollbooth.NewLimiter(rate, nil) lmt.SetBurst(burst) lmt.SetIPLookup(limiter.IPLookup{ diff --git a/core/api/server/middleware_test.go b/core/api/server/middleware_test.go index b4b7f2f7b..27c38e389 100644 --- a/core/api/server/middleware_test.go +++ b/core/api/server/middleware_test.go @@ -140,7 +140,7 @@ func TestEnsureAuthenticated(t *testing.T) { func TestRateLimit(t *testing.T) { router := gin.New() - router.GET("/", newWriteRateLimitMiddleware(1, 1, false), func(c *gin.Context) { + router.GET("/", ensureRateLimit(1, 1, false), func(c *gin.Context) { c.String(http.StatusOK, "OK") }) @@ -172,7 +172,7 @@ func TestRateLimit(t *testing.T) { t.Run("burst of size 2 allows two requests", func(t *testing.T) { burstRouter := gin.New() - burstRouter.GET("/", newWriteRateLimitMiddleware(1, 2, false), func(c *gin.Context) { + burstRouter.GET("/", ensureRateLimit(1, 2, false), func(c *gin.Context) { c.String(http.StatusOK, "OK") }) @@ -201,7 +201,7 @@ func TestRateLimit(t *testing.T) { t.Run("disabled rate limit allows all requests", func(t *testing.T) { // given disabledRouter := gin.New() - disabledRouter.GET("/", newWriteRateLimitMiddleware(1, 1, true), func(c *gin.Context) { + disabledRouter.GET("/", ensureRateLimit(1, 1, true), func(c *gin.Context) { c.String(http.StatusOK, "OK") }) diff --git a/core/api/server/router.go b/core/api/server/router.go index e682a77f1..3d91869d4 100644 --- a/core/api/server/router.go +++ b/core/api/server/router.go @@ -45,7 +45,7 @@ func (s *Server) NewRouter(mw apicore.ClientCommands) *gin.Engine { // Shared ratelimiter with option to disable it through env var isRateLimitDisabled := os.Getenv("ANYTYPE_API_DISABLE_RATE_LIMIT") == "1" - writeRateLimitMW := newWriteRateLimitMiddleware(maxWriteRequestsPerSecond, maxBurstRequests, isRateLimitDisabled) + writeRateLimitMW := ensureRateLimit(maxWriteRequestsPerSecond, maxBurstRequests, isRateLimitDisabled) // Swagger route router.GET("/swagger/*any", func(c *gin.Context) { From 8a553e0714ba363edf3e9f9227db6e403e8abe14 Mon Sep 17 00:00:00 2001 From: Roman Khafizianov Date: Tue, 20 May 2025 19:18:23 +0200 Subject: [PATCH 130/164] GO-5629 appLink name refactoring --- core/account.go | 3 +- core/application/sessions.go | 34 +- core/session/challenge.go | 4 +- core/session/service.go | 2 +- core/wallet/applink.go | 28 +- core/wallet/wallet.go | 3 +- docs/proto.md | 1 + pb/events.pb.go | 866 +++++++++++++++++++---------------- pb/protos/events.proto | 1 + 9 files changed, 502 insertions(+), 440 deletions(-) diff --git a/core/account.go b/core/account.go index 2012fb90c..d5d94996b 100644 --- a/core/account.go +++ b/core/account.go @@ -249,7 +249,8 @@ func (mw *Middleware) AccountChangeJsonApiAddr(ctx context.Context, req *pb.RpcA func (mw *Middleware) AccountLocalLinkNewChallenge(ctx context.Context, request *pb.RpcAccountLocalLinkNewChallengeRequest) *pb.RpcAccountLocalLinkNewChallengeResponse { info := getClientInfo(ctx) - challengeId, err := mw.applicationService.LinkLocalStartNewChallenge(request.Scope, &info, request.AppName) + info.Name = request.AppName + challengeId, err := mw.applicationService.LinkLocalStartNewChallenge(request.Scope, &info) code := mapErrorCode(err, errToCode(session.ErrTooManyChallengeRequests, pb.RpcAccountLocalLinkNewChallengeResponseError_TOO_MANY_REQUESTS), errToCode(application.ErrApplicationIsNotRunning, pb.RpcAccountLocalLinkNewChallengeResponseError_ACCOUNT_IS_NOT_RUNNING), diff --git a/core/application/sessions.go b/core/application/sessions.go index 35c24c8d4..75210a2a6 100644 --- a/core/application/sessions.go +++ b/core/application/sessions.go @@ -3,7 +3,6 @@ package application import ( "errors" "fmt" - "time" "github.com/anyproto/anytype-heart/core/event" "github.com/anyproto/anytype-heart/core/session" @@ -70,12 +69,12 @@ func (s *Service) ValidateSessionToken(token string) (model.AccountAuthLocalApiS return s.sessions.ValidateToken(s.sessionSigningKey, token) } -func (s *Service) LinkLocalStartNewChallenge(scope model.AccountAuthLocalApiScope, clientInfo *pb.EventAccountLinkChallengeClientInfo, name string) (id string, err error) { +func (s *Service) LinkLocalStartNewChallenge(scope model.AccountAuthLocalApiScope, clientInfo *pb.EventAccountLinkChallengeClientInfo) (id string, err error) { if s.app == nil { return "", ErrApplicationIsNotRunning } - id, value, err := s.sessions.StartNewChallenge(scope, clientInfo, name) + id, value, err := s.sessions.StartNewChallenge(scope, clientInfo) if err != nil { return "", err } @@ -97,13 +96,21 @@ func (s *Service) LinkLocalSolveChallenge(req *pb.RpcAccountLocalLinkSolveChalle if err != nil { return "", "", err } - wallet := s.app.Component(walletComp.CName).(walletComp.Wallet) - appKey, err = wallet.PersistAppLink(&walletComp.AppLinkInfo{ - AppName: clientInfo.ProcessName, - CreatedAt: time.Now().Unix(), - Scope: int(scope), - }) + wallet := s.app.Component(walletComp.CName).(walletComp.Wallet) + name := clientInfo.Name + if name == "" { + name = clientInfo.ProcessName + } + appInfo, err := wallet.PersistAppLink(name, scope) + if err != nil { + return token, appKey, err + } + + s.lock.Lock() + s.sessionsByAppHash[appInfo.AppHash] = token + s.lock.Unlock() + appKey = appInfo.AppKey s.eventSender.Broadcast(event.NewEventSingleMessage("", &pb.EventMessageValueOfAccountLinkChallengeHide{ AccountLinkChallengeHide: &pb.EventAccountLinkChallengeHide{ Challenge: req.Answer, @@ -118,13 +125,8 @@ func (s *Service) LinkLocalCreateApp(req *pb.RpcAccountLocalLinkCreateAppRequest } wallet := s.app.Component(walletComp.CName).(walletComp.Wallet) - appKey, err = wallet.PersistAppLink(&walletComp.AppLinkInfo{ - AppName: req.App.AppName, - CreatedAt: time.Now().Unix(), - Scope: int(req.App.Scope), - }) - - return + appInfo, err := wallet.PersistAppLink(req.App.AppName, req.App.Scope) + return appInfo.AppKey, err } func (s *Service) LinkLocalListApps() ([]*model.AccountAuthAppInfo, error) { diff --git a/core/session/challenge.go b/core/session/challenge.go index 80b2d41c4..4410a5782 100644 --- a/core/session/challenge.go +++ b/core/session/challenge.go @@ -27,7 +27,7 @@ var ( currentChallengesRequests = atomic.NewInt32(0) ) -func (s *service) StartNewChallenge(scope model.AccountAuthLocalApiScope, info *pb.EventAccountLinkChallengeClientInfo, appName string) (challengeId string, challengeValue string, err error) { +func (s *service) StartNewChallenge(scope model.AccountAuthLocalApiScope, info *pb.EventAccountLinkChallengeClientInfo) (challengeId string, challengeValue string, err error) { if currentChallengesRequests.Load() >= maxChallengesRequests { // todo: add limits per process? return "", "", ErrTooManyChallengeRequests @@ -50,7 +50,6 @@ func (s *service) StartNewChallenge(scope model.AccountAuthLocalApiScope, info * value: value, clientInfo: info, scope: scope, - appName: appName, } currentChallengesRequests.Inc() @@ -93,5 +92,4 @@ type challenge struct { value string clientInfo *pb.EventAccountLinkChallengeClientInfo scope model.AccountAuthLocalApiScope - appName string } diff --git a/core/session/service.go b/core/session/service.go index 4db5908b6..83c6bc954 100644 --- a/core/session/service.go +++ b/core/session/service.go @@ -16,7 +16,7 @@ const CName = "session" type Service interface { StartSession(privKey []byte, scope model.AccountAuthLocalApiScope) (string, error) ValidateToken(privKey []byte, token string) (model.AccountAuthLocalApiScope, error) - StartNewChallenge(scope model.AccountAuthLocalApiScope, info *pb.EventAccountLinkChallengeClientInfo, appName string) (id string, value string, err error) + StartNewChallenge(scope model.AccountAuthLocalApiScope, info *pb.EventAccountLinkChallengeClientInfo) (id string, value string, err error) SolveChallenge(challengeId string, challengeSolution string, signingKey []byte) (clientInfo *pb.EventAccountLinkChallengeClientInfo, token string, scope model.AccountAuthLocalApiScope, err error) CloseSession(token string) error diff --git a/core/wallet/applink.go b/core/wallet/applink.go index ad9ce4cf3..0e8aecd1c 100644 --- a/core/wallet/applink.go +++ b/core/wallet/applink.go @@ -18,6 +18,7 @@ import ( "github.com/anyproto/anytype-heart/pkg/lib/crypto/symmetric" "github.com/anyproto/anytype-heart/pkg/lib/crypto/symmetric/gcm" + "github.com/anyproto/anytype-heart/pkg/lib/pb/model" ) const ( @@ -47,8 +48,8 @@ func (r *wallet) ReadAppLink(appKey string) (*AppLinkInfo, error) { return load(filepath.Join(r.repoPath, appLinkKeysDirectory), appKey, r.accountKey) } -func (r *wallet) PersistAppLink(payload *AppLinkInfo) (appKey string, err error) { - return generate(filepath.Join(r.repoPath, appLinkKeysDirectory), r.accountKey, payload) +func (r *wallet) PersistAppLink(name string, scope model.AccountAuthLocalApiScope) (app *AppLinkInfo, err error) { + return generate(filepath.Join(r.repoPath, appLinkKeysDirectory), r.accountKey, name, scope) } // ListAppLinks returns a list of all app links for this repo directory @@ -72,27 +73,32 @@ func (r *wallet) RevokeAppLink(appHash string) error { return revoke(filepath.Join(r.repoPath, appLinkKeysDirectory), appHash) } -func generate(dir string, accountPriv crypto.PrivKey, info *AppLinkInfo) (appKey string, _ error) { +func generate(dir string, accountPriv crypto.PrivKey, appName string, scope model.AccountAuthLocalApiScope) (info *AppLinkInfo, _ error) { if err := os.MkdirAll(dir, 0o700); err != nil && !os.IsExist(err) { - return "", err + return nil, err } key, err := crypto.NewRandomAES() if err != nil { - return "", err + return nil, err + } + appKey := base64.StdEncoding.EncodeToString(key.Bytes()) + info = &AppLinkInfo{ + AppHash: fmt.Sprintf("%x", sha256.Sum256(key.Bytes())), + AppKey: appKey, + AppName: appName, + Scope: int(scope), } - appKey = base64.StdEncoding.EncodeToString(key.Bytes()) - info.AppKey = appKey file, err := buildV1(key.Bytes(), accountPriv, info) if err != nil { - return "", err + return nil, err } - name := fmt.Sprintf("%x.json", sha256.Sum256(key.Bytes())) + name := fmt.Sprintf("%x.json", info.AppHash) fp, err := os.OpenFile(filepath.Join(dir, name), os.O_CREATE|os.O_EXCL|os.O_WRONLY, 0o600) if err != nil { - return "", err + return nil, err } defer fp.Close() - return appKey, json.NewEncoder(fp).Encode(&file) + return info, json.NewEncoder(fp).Encode(&file) } // load and verify the app link file diff --git a/core/wallet/wallet.go b/core/wallet/wallet.go index a0ea512aa..5d8d0b2d3 100644 --- a/core/wallet/wallet.go +++ b/core/wallet/wallet.go @@ -16,6 +16,7 @@ import ( "github.com/anyproto/anytype-heart/metrics" "github.com/anyproto/anytype-heart/pkg/lib/logging" + "github.com/anyproto/anytype-heart/pkg/lib/pb/model" ) const ( @@ -176,7 +177,7 @@ type Wallet interface { GetAccountEthAddress() EthAddress ReadAppLink(appKey string) (*AppLinkInfo, error) - PersistAppLink(payload *AppLinkInfo) (appKey string, err error) + PersistAppLink(name string, scope model.AccountAuthLocalApiScope) (appInfo *AppLinkInfo, err error) ListAppLinks() ([]*AppLinkInfo, error) RevokeAppLink(appHash string) error diff --git a/docs/proto.md b/docs/proto.md index 1f68c4820..c7843e5bb 100644 --- a/docs/proto.md +++ b/docs/proto.md @@ -26959,6 +26959,7 @@ Event – type of message, that could be sent from a middleware to the correspon | ----- | ---- | ----- | ----------- | | processName | [string](#string) | | | | processPath | [string](#string) | | | +| name | [string](#string) | | | | signatureVerified | [bool](#bool) | | | diff --git a/pb/events.pb.go b/pb/events.pb.go index 6966d8e69..d557329d9 100644 --- a/pb/events.pb.go +++ b/pb/events.pb.go @@ -2241,6 +2241,7 @@ func (m *EventAccountLinkChallenge) GetScope() model.AccountAuthLocalApiScope { type EventAccountLinkChallengeClientInfo struct { ProcessName string `protobuf:"bytes,1,opt,name=processName,proto3" json:"processName,omitempty"` ProcessPath string `protobuf:"bytes,2,opt,name=processPath,proto3" json:"processPath,omitempty"` + Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` SignatureVerified bool `protobuf:"varint,3,opt,name=signatureVerified,proto3" json:"signatureVerified,omitempty"` } @@ -2291,6 +2292,13 @@ func (m *EventAccountLinkChallengeClientInfo) GetProcessPath() string { return "" } +func (m *EventAccountLinkChallengeClientInfo) GetName() string { + if m != nil { + return m.Name + } + return "" +} + func (m *EventAccountLinkChallengeClientInfo) GetSignatureVerified() bool { if m != nil { return m.SignatureVerified @@ -12773,413 +12781,414 @@ func init() { func init() { proto.RegisterFile("pb/protos/events.proto", fileDescriptor_a966342d378ae5f5) } var fileDescriptor_a966342d378ae5f5 = []byte{ - // 6491 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x49, 0x8c, 0x1c, 0xc9, - 0x75, 0x76, 0xed, 0xcb, 0xeb, 0x66, 0xb3, 0x18, 0xe4, 0x90, 0x39, 0x39, 0x3d, 0x1c, 0x4e, 0x0f, - 0xc9, 0xa1, 0x66, 0x38, 0x45, 0x0e, 0xd7, 0x11, 0x67, 0xb8, 0xf4, 0xc6, 0xa9, 0xe2, 0xd2, 0x6c, - 0x45, 0x93, 0xd4, 0x68, 0x24, 0xfc, 0x50, 0x76, 0x65, 0x74, 0x77, 0x8a, 0xd5, 0x99, 0xa5, 0xcc, - 0xec, 0x26, 0x5b, 0xdb, 0xaf, 0x5f, 0xcb, 0xaf, 0xff, 0x07, 0x6c, 0xd8, 0x06, 0x0c, 0xdb, 0xf0, - 0xc5, 0x80, 0x61, 0x01, 0x3e, 0x18, 0x86, 0x01, 0x5f, 0xec, 0x83, 0x17, 0xc0, 0x10, 0x6c, 0x79, - 0x01, 0xa4, 0x9b, 0x2f, 0xb6, 0xe4, 0xd1, 0xc5, 0x17, 0x1f, 0x64, 0x03, 0x86, 0x8f, 0x46, 0x2c, - 0x19, 0x19, 0x91, 0x4b, 0x65, 0xb5, 0x66, 0xe4, 0x05, 0xd6, 0xa9, 0x2b, 0x22, 0xde, 0xfb, 0x5e, - 0x2c, 0xef, 0xbd, 0x88, 0x78, 0x11, 0x19, 0x0d, 0x47, 0x47, 0xeb, 0xe7, 0x46, 0xbe, 0x17, 0x7a, - 0xc1, 0x39, 0xb2, 0x4b, 0xdc, 0x30, 0xe8, 0xb2, 0x14, 0x6a, 0x5a, 0xee, 0x5e, 0xb8, 0x37, 0x22, - 0xe6, 0xc9, 0xd1, 0x93, 0xcd, 0x73, 0x43, 0x67, 0xfd, 0xdc, 0x68, 0xfd, 0xdc, 0xb6, 0x67, 0x93, - 0x61, 0x44, 0xce, 0x12, 0x82, 0xdc, 0x9c, 0xdd, 0xf4, 0xbc, 0xcd, 0x21, 0xe1, 0x65, 0xeb, 0x3b, - 0x1b, 0xe7, 0x82, 0xd0, 0xdf, 0x19, 0x84, 0xbc, 0x74, 0xee, 0x3b, 0xdf, 0x2d, 0x43, 0x7d, 0x99, - 0xc2, 0xa3, 0x0b, 0xd0, 0xda, 0x26, 0x41, 0x60, 0x6d, 0x92, 0xc0, 0x28, 0x9f, 0xa8, 0x9e, 0x99, - 0xba, 0x70, 0xb4, 0x2b, 0x44, 0x75, 0x19, 0x45, 0xf7, 0x3e, 0x2f, 0xc6, 0x92, 0x0e, 0xcd, 0x42, - 0x7b, 0xe0, 0xb9, 0x21, 0x79, 0x16, 0xf6, 0x6d, 0xa3, 0x72, 0xa2, 0x7c, 0xa6, 0x8d, 0xe3, 0x0c, - 0x74, 0x09, 0xda, 0x8e, 0xeb, 0x84, 0x8e, 0x15, 0x7a, 0xbe, 0x51, 0x3d, 0x51, 0xd6, 0x20, 0x59, - 0x25, 0xbb, 0xf3, 0x83, 0x81, 0xb7, 0xe3, 0x86, 0x38, 0x26, 0x44, 0x06, 0x34, 0x43, 0xdf, 0x1a, - 0x90, 0xbe, 0x6d, 0xd4, 0x18, 0x62, 0x94, 0x34, 0xff, 0xe8, 0x32, 0x34, 0x45, 0x1d, 0xd0, 0xf3, - 0xd0, 0x0c, 0x46, 0x9c, 0xea, 0x1b, 0x65, 0x4e, 0x26, 0xd2, 0xe8, 0x26, 0x4c, 0x59, 0x1c, 0x76, - 0x6d, 0xcb, 0x7b, 0x6a, 0x94, 0x99, 0xe0, 0x17, 0x12, 0x6d, 0x11, 0x82, 0xbb, 0x94, 0xa4, 0x57, - 0xc2, 0x2a, 0x07, 0xea, 0xc3, 0x8c, 0x48, 0x2e, 0x91, 0xd0, 0x72, 0x86, 0x81, 0xf1, 0x5d, 0x0e, - 0x72, 0x3c, 0x07, 0x44, 0x90, 0xf5, 0x4a, 0x38, 0xc1, 0x88, 0x3e, 0x05, 0x87, 0x45, 0xce, 0xa2, - 0xe7, 0x6e, 0x38, 0x9b, 0x8f, 0x46, 0xb6, 0x15, 0x12, 0xe3, 0x2f, 0x39, 0xde, 0xc9, 0x1c, 0x3c, - 0x4e, 0xdb, 0xe5, 0xc4, 0xbd, 0x12, 0xce, 0xc2, 0x40, 0xb7, 0xe1, 0x80, 0xc8, 0x16, 0xa0, 0x7f, - 0xc5, 0x41, 0x5f, 0xcc, 0x01, 0x95, 0x68, 0x3a, 0x1b, 0xfa, 0x34, 0x1c, 0x11, 0x19, 0xf7, 0x1c, - 0xf7, 0xc9, 0xe2, 0x96, 0x35, 0x1c, 0x12, 0x77, 0x93, 0x18, 0x7f, 0x3d, 0xbe, 0x8e, 0x1a, 0x71, - 0xaf, 0x84, 0x33, 0x41, 0xd0, 0x26, 0x18, 0x59, 0xf9, 0x3d, 0xc7, 0x26, 0xc6, 0xdf, 0x70, 0x01, - 0x67, 0x26, 0x12, 0xe0, 0xd8, 0x54, 0x48, 0x2e, 0x18, 0x7a, 0x00, 0x1d, 0x6f, 0xfd, 0x73, 0x64, - 0x10, 0xf5, 0xfc, 0x1a, 0x09, 0x8d, 0x0e, 0xc3, 0x7f, 0x39, 0x81, 0xff, 0x80, 0x91, 0x45, 0x63, - 0xd6, 0x5d, 0x23, 0x61, 0xaf, 0x84, 0x53, 0xcc, 0xe8, 0x11, 0x20, 0x2d, 0x6f, 0x7e, 0x9b, 0xb8, - 0xb6, 0x71, 0x81, 0x41, 0xbe, 0x32, 0x1e, 0x92, 0x91, 0xf6, 0x4a, 0x38, 0x03, 0x20, 0x05, 0xfb, - 0xc8, 0x0d, 0x48, 0x68, 0x5c, 0x9c, 0x04, 0x96, 0x91, 0xa6, 0x60, 0x59, 0x2e, 0x1d, 0x44, 0x9e, - 0x8b, 0xc9, 0xd0, 0x0a, 0x1d, 0xcf, 0x15, 0xf5, 0xbd, 0xc4, 0x80, 0x4f, 0x65, 0x03, 0x4b, 0x5a, - 0x59, 0xe3, 0x4c, 0x10, 0xf4, 0xbf, 0xe0, 0xb9, 0x44, 0x3e, 0x26, 0xdb, 0xde, 0x2e, 0x31, 0x2e, - 0x33, 0xf4, 0xd3, 0x45, 0xe8, 0x9c, 0xba, 0x57, 0xc2, 0xd9, 0x30, 0x68, 0x01, 0xa6, 0xa3, 0x02, - 0x06, 0x7b, 0x85, 0xc1, 0xce, 0xe6, 0xc1, 0x0a, 0x30, 0x8d, 0x87, 0x1a, 0x3d, 0x4f, 0x2f, 0x0e, - 0xbd, 0x80, 0x18, 0xf3, 0x99, 0x46, 0x2f, 0x20, 0x18, 0x09, 0x35, 0x7a, 0x85, 0x43, 0x6d, 0x64, - 0x10, 0xfa, 0xce, 0x80, 0x55, 0x90, 0x6a, 0xd1, 0xd5, 0xf1, 0x8d, 0x8c, 0x89, 0x85, 0x2a, 0x65, - 0xc3, 0x20, 0x0c, 0x07, 0x83, 0x9d, 0xf5, 0x60, 0xe0, 0x3b, 0x23, 0x9a, 0x37, 0x6f, 0xdb, 0xc6, - 0x3b, 0xe3, 0x90, 0xd7, 0x14, 0xe2, 0xee, 0xbc, 0x4d, 0x47, 0x27, 0x09, 0x80, 0x3e, 0x0d, 0x48, - 0xcd, 0x12, 0xdd, 0x77, 0x9d, 0xc1, 0x7e, 0x6c, 0x02, 0x58, 0xd9, 0x97, 0x19, 0x30, 0xc8, 0x82, - 0x23, 0x6a, 0xee, 0xaa, 0x17, 0x38, 0xf4, 0xaf, 0x71, 0x83, 0xc1, 0xbf, 0x3e, 0x01, 0x7c, 0xc4, - 0x42, 0x15, 0x2b, 0x0b, 0x2a, 0x29, 0x62, 0x91, 0x9a, 0x36, 0xf1, 0x03, 0xe3, 0xe6, 0xc4, 0x22, - 0x22, 0x96, 0xa4, 0x88, 0x28, 0x3f, 0xd9, 0x45, 0xef, 0xfa, 0xde, 0xce, 0x28, 0x30, 0x6e, 0x4d, - 0xdc, 0x45, 0x9c, 0x21, 0xd9, 0x45, 0x3c, 0x17, 0x5d, 0x81, 0xd6, 0xfa, 0xd0, 0x1b, 0x3c, 0xa1, - 0x83, 0x59, 0x61, 0x90, 0x46, 0x02, 0x72, 0x81, 0x16, 0x8b, 0xe1, 0x93, 0xb4, 0x54, 0x59, 0xd9, - 0xef, 0x25, 0x32, 0x24, 0x21, 0x11, 0x53, 0xe3, 0x0b, 0x99, 0xac, 0x9c, 0x84, 0x2a, 0xab, 0xc2, - 0x81, 0x96, 0x60, 0x6a, 0xc3, 0x19, 0x92, 0xe0, 0xd1, 0x68, 0xe8, 0x59, 0x7c, 0x9e, 0x9c, 0xba, - 0x70, 0x22, 0x13, 0xe0, 0x76, 0x4c, 0x47, 0x51, 0x14, 0x36, 0x74, 0x03, 0xda, 0xdb, 0x96, 0xff, - 0x24, 0xe8, 0xbb, 0x1b, 0x9e, 0x51, 0xcf, 0x9c, 0xe1, 0x38, 0xc6, 0xfd, 0x88, 0xaa, 0x57, 0xc2, - 0x31, 0x0b, 0x9d, 0x27, 0x59, 0xa5, 0xd6, 0x48, 0x78, 0xdb, 0x21, 0x43, 0x3b, 0x30, 0x1a, 0x0c, - 0xe4, 0xa5, 0x4c, 0x90, 0x35, 0x12, 0x76, 0x39, 0x19, 0x9d, 0x27, 0x75, 0x46, 0xf4, 0x1e, 0x1c, - 0x8e, 0x72, 0x16, 0xb7, 0x9c, 0xa1, 0xed, 0x13, 0xb7, 0x6f, 0x07, 0x46, 0x33, 0x73, 0x0a, 0x8a, - 0xf1, 0x14, 0x5a, 0x3a, 0x4d, 0x66, 0x40, 0x50, 0xcf, 0x18, 0x65, 0xab, 0x26, 0x69, 0xb4, 0x32, - 0x3d, 0x63, 0x0c, 0xad, 0x12, 0x53, 0xed, 0xca, 0x02, 0x41, 0x36, 0x1c, 0x8b, 0xf2, 0x17, 0xac, - 0xc1, 0x93, 0x4d, 0xdf, 0xdb, 0x71, 0xed, 0x45, 0x6f, 0xe8, 0xf9, 0x46, 0x3b, 0x73, 0x72, 0x8b, - 0xf1, 0x13, 0xf4, 0xbd, 0x12, 0xce, 0x83, 0x42, 0x8b, 0x30, 0x1d, 0x15, 0x3d, 0x24, 0xcf, 0x42, - 0x03, 0x32, 0xe7, 0xf9, 0x18, 0x9a, 0x12, 0x51, 0x07, 0xa9, 0x32, 0xa9, 0x20, 0x54, 0x25, 0x8c, - 0xa9, 0x02, 0x10, 0x4a, 0xa4, 0x82, 0xd0, 0xb4, 0x0a, 0x42, 0xa7, 0x60, 0xe3, 0x40, 0x01, 0x08, - 0x25, 0x52, 0x41, 0x68, 0x9a, 0x4e, 0xd5, 0xb2, 0xa5, 0x9e, 0xf7, 0x84, 0xea, 0x93, 0x31, 0x93, - 0x39, 0x55, 0x2b, 0xbd, 0x25, 0x08, 0xe9, 0x54, 0x9d, 0x64, 0xa6, 0x2b, 0xa1, 0x28, 0x6f, 0x7e, - 0xe8, 0x6c, 0xba, 0xc6, 0xc1, 0x31, 0xba, 0x4c, 0xd1, 0x18, 0x15, 0x5d, 0x09, 0x69, 0x6c, 0xe8, - 0x96, 0x30, 0xcb, 0x35, 0x12, 0x2e, 0x39, 0xbb, 0xc6, 0xa1, 0xcc, 0x69, 0x28, 0x46, 0x59, 0x72, - 0x76, 0xa5, 0x5d, 0x72, 0x16, 0xb5, 0x69, 0xd1, 0x24, 0x67, 0x3c, 0x57, 0xd0, 0xb4, 0x88, 0x50, - 0x6d, 0x5a, 0x94, 0xa7, 0x36, 0xed, 0x9e, 0x15, 0x92, 0x67, 0xc6, 0xf3, 0x05, 0x4d, 0x63, 0x54, - 0x6a, 0xd3, 0x58, 0x06, 0x9d, 0xdd, 0xa2, 0x8c, 0xc7, 0xc4, 0x0f, 0x9d, 0x81, 0x35, 0xe4, 0x5d, - 0x75, 0x32, 0x73, 0x0e, 0x8a, 0xf1, 0x34, 0x6a, 0x3a, 0xbb, 0x65, 0xc2, 0xa8, 0x0d, 0x7f, 0x68, - 0xad, 0x0f, 0x09, 0xf6, 0x9e, 0x1a, 0xa7, 0x0a, 0x1a, 0x1e, 0x11, 0xaa, 0x0d, 0x8f, 0xf2, 0x54, - 0xdf, 0xf2, 0x49, 0xc7, 0xde, 0x24, 0xa1, 0x71, 0xa6, 0xc0, 0xb7, 0x70, 0x32, 0xd5, 0xb7, 0xf0, - 0x1c, 0xe9, 0x01, 0x96, 0xac, 0xd0, 0xda, 0x75, 0xc8, 0xd3, 0xc7, 0x0e, 0x79, 0x4a, 0x27, 0xf6, - 0xc3, 0x63, 0x3c, 0x40, 0x44, 0xdb, 0x15, 0xc4, 0xd2, 0x03, 0x24, 0x40, 0xa4, 0x07, 0x50, 0xf3, - 0x85, 0x5b, 0x3f, 0x32, 0xc6, 0x03, 0x68, 0xf8, 0xd2, 0xc7, 0xe7, 0x41, 0x21, 0x0b, 0x8e, 0xa6, - 0x8a, 0x1e, 0xf8, 0x36, 0xf1, 0x8d, 0x17, 0x99, 0x90, 0x57, 0x8b, 0x85, 0x30, 0xf2, 0x5e, 0x09, - 0xe7, 0x00, 0xa5, 0x44, 0xac, 0x79, 0x3b, 0xfe, 0x80, 0xd0, 0x7e, 0x7a, 0x65, 0x12, 0x11, 0x92, - 0x3c, 0x25, 0x42, 0x96, 0xa0, 0x5d, 0x78, 0x51, 0x96, 0x50, 0xc1, 0x6c, 0x16, 0x65, 0xd2, 0xc5, - 0x0e, 0xe6, 0x34, 0x93, 0xd4, 0x1d, 0x2f, 0x29, 0xc9, 0xd5, 0x2b, 0xe1, 0xf1, 0xb0, 0x68, 0x0f, - 0x8e, 0x6b, 0x04, 0x7c, 0x9e, 0x57, 0x05, 0xbf, 0xca, 0x04, 0x9f, 0x1b, 0x2f, 0x38, 0xc5, 0xd6, - 0x2b, 0xe1, 0x02, 0x60, 0x34, 0x82, 0x17, 0xb4, 0xce, 0x88, 0x0c, 0x5b, 0xa8, 0xc8, 0x97, 0x98, - 0xdc, 0xb3, 0xe3, 0xe5, 0xea, 0x3c, 0xbd, 0x12, 0x1e, 0x07, 0x49, 0x77, 0x5c, 0x99, 0xc5, 0x74, - 0x24, 0xbf, 0x98, 0xb9, 0xec, 0xc9, 0x11, 0xc7, 0xc7, 0x32, 0x17, 0x2c, 0x53, 0xf3, 0x45, 0x77, - 0x7e, 0x79, 0x52, 0xcd, 0x97, 0xfd, 0x98, 0x07, 0xa5, 0x8d, 0x1d, 0x2d, 0x7a, 0x68, 0xf9, 0x9b, - 0x24, 0xe4, 0x1d, 0xdd, 0xb7, 0x69, 0xa3, 0xbe, 0x32, 0xc9, 0xd8, 0xa5, 0xd8, 0xb4, 0xb1, 0xcb, - 0x04, 0x46, 0x01, 0xcc, 0x6a, 0x14, 0xfd, 0x60, 0xd1, 0x1b, 0x0e, 0xc9, 0x20, 0xea, 0xcd, 0xff, - 0xcd, 0x04, 0xbf, 0x31, 0x5e, 0x70, 0x82, 0xa9, 0x57, 0xc2, 0x63, 0x41, 0x53, 0xed, 0x7d, 0x30, - 0xb4, 0x13, 0x3a, 0x63, 0x4c, 0xa4, 0xab, 0x49, 0xb6, 0x54, 0x7b, 0x53, 0x14, 0x29, 0x5d, 0x55, - 0x28, 0x68, 0x73, 0x8f, 0x4d, 0xa2, 0xab, 0x3a, 0x4f, 0x4a, 0x57, 0xf5, 0x62, 0x3a, 0xbb, 0xed, - 0x04, 0xc4, 0x67, 0x18, 0x77, 0x3c, 0xc7, 0x35, 0x5e, 0xca, 0x9c, 0xdd, 0x1e, 0x05, 0xc4, 0x17, - 0x82, 0x28, 0x15, 0x9d, 0xdd, 0x34, 0x36, 0x0d, 0xe7, 0x1e, 0xd9, 0x08, 0x8d, 0x13, 0x45, 0x38, - 0x94, 0x4a, 0xc3, 0xa1, 0x19, 0x74, 0xa6, 0x90, 0x19, 0x6b, 0x84, 0x8e, 0x0a, 0xb6, 0xdc, 0x4d, - 0x62, 0xbc, 0x9c, 0x39, 0x53, 0x28, 0x70, 0x0a, 0x31, 0x9d, 0x29, 0xb2, 0x40, 0xe8, 0xce, 0x5f, - 0xe6, 0xd3, 0x15, 0x19, 0x87, 0x9e, 0xcb, 0xdc, 0xf9, 0x2b, 0xd0, 0x92, 0x94, 0xee, 0x41, 0xd2, - 0x00, 0xe8, 0x63, 0x50, 0x1b, 0x39, 0xee, 0xa6, 0x61, 0x33, 0xa0, 0xc3, 0x09, 0xa0, 0x55, 0xc7, - 0xdd, 0xec, 0x95, 0x30, 0x23, 0x41, 0xef, 0x00, 0x8c, 0x7c, 0x6f, 0x40, 0x82, 0x60, 0x85, 0x3c, - 0x35, 0x08, 0x63, 0x30, 0x93, 0x0c, 0x9c, 0xa0, 0xbb, 0x42, 0xe8, 0xbc, 0xac, 0xd0, 0xa3, 0x65, - 0x38, 0x20, 0x52, 0xc2, 0xca, 0x37, 0x32, 0x17, 0x7f, 0x11, 0x40, 0x1c, 0x6e, 0xd2, 0xb8, 0xe8, - 0xde, 0x47, 0x64, 0x2c, 0x79, 0x2e, 0x31, 0x36, 0x33, 0xf7, 0x3e, 0x11, 0x08, 0x25, 0xa1, 0x6b, - 0x2c, 0x85, 0x03, 0x2d, 0xc0, 0x74, 0xb8, 0xe5, 0x13, 0xcb, 0x5e, 0x0b, 0xad, 0x70, 0x27, 0x30, - 0xdc, 0xcc, 0x65, 0x1a, 0x2f, 0xec, 0x3e, 0x64, 0x94, 0x74, 0x09, 0xaa, 0xf2, 0xa0, 0x15, 0xe8, - 0xd0, 0x8d, 0xd0, 0x3d, 0x67, 0xdb, 0x09, 0x31, 0xb1, 0x06, 0x5b, 0xc4, 0x36, 0xbc, 0xcc, 0x4d, - 0x14, 0x5d, 0xf6, 0x76, 0x55, 0x3a, 0xba, 0x5a, 0x49, 0xf2, 0xa2, 0x1e, 0xcc, 0xd0, 0xbc, 0xb5, - 0x91, 0x35, 0x20, 0x8f, 0x02, 0x6b, 0x93, 0x18, 0xa3, 0x4c, 0x0d, 0x64, 0x68, 0x31, 0x15, 0x5d, - 0xac, 0xe8, 0x7c, 0x11, 0xd2, 0x3d, 0x6f, 0x60, 0x0d, 0x39, 0xd2, 0xe7, 0xf3, 0x91, 0x62, 0xaa, - 0x08, 0x29, 0xce, 0xd1, 0xda, 0xc8, 0xfb, 0xde, 0x36, 0x76, 0x0b, 0xda, 0x28, 0xe8, 0xb4, 0x36, - 0x8a, 0x3c, 0x8a, 0xe7, 0x7a, 0xa1, 0xb3, 0xe1, 0x0c, 0x84, 0xfd, 0xba, 0xb6, 0xe1, 0x67, 0xe2, - 0xad, 0x28, 0x64, 0xdd, 0x35, 0x1e, 0x59, 0x4a, 0xf1, 0xa2, 0x87, 0x80, 0xd4, 0x3c, 0xa1, 0x54, - 0x01, 0x43, 0x9c, 0x1b, 0x87, 0x28, 0x35, 0x2b, 0x83, 0x9f, 0xd6, 0x72, 0x64, 0xed, 0xd1, 0xed, - 0xed, 0x82, 0xef, 0x59, 0xf6, 0xc0, 0x0a, 0x42, 0x23, 0xcc, 0xac, 0xe5, 0x2a, 0x27, 0xeb, 0x4a, - 0x3a, 0x5a, 0xcb, 0x24, 0x2f, 0xc5, 0xdb, 0x26, 0xdb, 0xeb, 0xc4, 0x0f, 0xb6, 0x9c, 0x91, 0xa8, - 0xe3, 0x4e, 0x26, 0xde, 0x7d, 0x49, 0x16, 0xd7, 0x30, 0xc5, 0x4b, 0x17, 0xe2, 0x2c, 0x4e, 0xbd, - 0xb6, 0xe7, 0x0e, 0xb8, 0x32, 0x0a, 0xd0, 0xa7, 0x99, 0x0b, 0x71, 0xa6, 0x19, 0xdd, 0x98, 0x38, - 0x86, 0xce, 0x86, 0x41, 0xef, 0xc3, 0x11, 0x56, 0x30, 0xbf, 0x13, 0x7a, 0x7c, 0xfd, 0x3b, 0x6f, - 0xdb, 0xc4, 0x36, 0xbe, 0x90, 0xb9, 0x93, 0xe6, 0xf0, 0x09, 0x5a, 0x16, 0x4b, 0xc9, 0xc0, 0x40, - 0x77, 0xe1, 0xe0, 0xe8, 0xc2, 0x48, 0xab, 0xf5, 0xb3, 0xcc, 0x45, 0xf9, 0xea, 0x85, 0xd5, 0x64, - 0x75, 0x93, 0x9c, 0xd4, 0x8c, 0x9d, 0xed, 0x91, 0xe7, 0x87, 0xb7, 0x1d, 0xd7, 0x09, 0xb6, 0x8c, - 0xbd, 0x4c, 0x33, 0xee, 0x33, 0x92, 0x2e, 0xa7, 0xa1, 0x66, 0xac, 0xf2, 0xa0, 0x4b, 0xd0, 0x1c, - 0x6c, 0x59, 0xb4, 0x76, 0xc6, 0x57, 0x79, 0x30, 0xf9, 0x58, 0x82, 0x7f, 0x71, 0xcb, 0x0a, 0x45, - 0xf8, 0x25, 0x22, 0x45, 0xd7, 0x01, 0xe8, 0x4f, 0xd1, 0x82, 0xff, 0x53, 0xce, 0xf4, 0x83, 0x8c, - 0x51, 0xd6, 0x5e, 0x61, 0x40, 0xef, 0xc1, 0xe1, 0x38, 0x45, 0x1d, 0x00, 0x8f, 0x27, 0x7c, 0xad, - 0x9c, 0xe9, 0xc9, 0x15, 0x1c, 0x49, 0xdb, 0x2b, 0xe1, 0x2c, 0x08, 0x3a, 0x01, 0xc7, 0xd9, 0xd1, - 0x61, 0x4b, 0xec, 0xe8, 0xfe, 0x6f, 0x39, 0x33, 0x2c, 0xa6, 0x48, 0x48, 0xf1, 0xd0, 0x09, 0x78, - 0x0c, 0x64, 0x52, 0xa2, 0xcb, 0xc3, 0x7f, 0x52, 0xe2, 0xb7, 0x26, 0x90, 0x98, 0xe0, 0x49, 0x4a, - 0x4c, 0x14, 0x47, 0x9d, 0x2f, 0xd6, 0x32, 0x5f, 0x1f, 0xd3, 0xf9, 0x72, 0xdd, 0xa2, 0x30, 0xa0, - 0x7b, 0x70, 0x90, 0xa6, 0x28, 0x18, 0x11, 0x03, 0xf8, 0xcd, 0x72, 0xa6, 0x0e, 0x2a, 0x95, 0x64, - 0xd4, 0x54, 0x07, 0x13, 0xac, 0x74, 0x09, 0x3b, 0xda, 0x09, 0xb6, 0x96, 0xdd, 0x81, 0xbf, 0xc7, - 0xe2, 0x7a, 0x77, 0xc9, 0x9e, 0x40, 0xfd, 0x7f, 0xe5, 0xcc, 0x5d, 0xcf, 0x6a, 0x92, 0x3c, 0xd6, - 0x91, 0x3c, 0xa8, 0x85, 0x26, 0xd4, 0x77, 0xad, 0xe1, 0x0e, 0x31, 0x7f, 0xa9, 0x01, 0x35, 0x5a, - 0x2d, 0xf3, 0xef, 0xcb, 0x50, 0xa5, 0x9a, 0x38, 0x03, 0x15, 0xc7, 0x36, 0xf8, 0xf1, 0x55, 0xc5, - 0xb1, 0x91, 0x01, 0x4d, 0x8f, 0x6e, 0x1e, 0xe4, 0x61, 0x5a, 0x94, 0x44, 0x73, 0x30, 0x6d, 0x6d, - 0x84, 0xc4, 0x7f, 0x20, 0x8a, 0x1b, 0xac, 0x58, 0xcb, 0xa3, 0xd6, 0x20, 0x0e, 0xe6, 0x44, 0x44, - 0xd1, 0x4c, 0x1c, 0xb6, 0x51, 0xd9, 0x91, 0x0e, 0x44, 0xa4, 0xe8, 0x28, 0x34, 0x82, 0x9d, 0xf5, - 0xbe, 0x1d, 0x18, 0xb5, 0x13, 0xd5, 0x33, 0x6d, 0x2c, 0x52, 0xe8, 0x6d, 0x98, 0xb6, 0xc9, 0x88, - 0xb8, 0x36, 0x71, 0x07, 0x0e, 0x09, 0x8c, 0x3a, 0x3b, 0x12, 0x3c, 0xd6, 0xe5, 0xc7, 0x89, 0xdd, - 0xe8, 0x38, 0xb1, 0xbb, 0xc6, 0x8e, 0x13, 0xb1, 0x46, 0x6c, 0x9e, 0x87, 0x86, 0x18, 0xb0, 0x64, - 0x13, 0x63, 0x71, 0x15, 0x55, 0x9c, 0xb9, 0x01, 0x0d, 0x31, 0x28, 0x49, 0x0e, 0xa5, 0x59, 0x95, - 0x9f, 0xa4, 0x59, 0x55, 0x4d, 0xce, 0x97, 0xe1, 0x60, 0xd2, 0xec, 0x92, 0x02, 0x17, 0xa0, 0xed, - 0x4b, 0xb3, 0xae, 0x24, 0xfc, 0x66, 0x4a, 0x64, 0x57, 0x02, 0xe1, 0x98, 0x2d, 0x57, 0xfc, 0xa7, - 0xe1, 0x58, 0x9e, 0x2d, 0x76, 0xa0, 0xea, 0xd8, 0xfc, 0xe8, 0xb5, 0x8d, 0xe9, 0x4f, 0x0a, 0xe2, - 0x04, 0x94, 0x82, 0xd5, 0xa2, 0x85, 0x45, 0x6a, 0x12, 0xf0, 0xa4, 0xd9, 0x7d, 0x78, 0xf0, 0x47, - 0x30, 0xa5, 0x58, 0x13, 0xea, 0x42, 0x3d, 0xa0, 0x3f, 0xc4, 0xf1, 0xaa, 0x91, 0xd1, 0x41, 0x8c, - 0x10, 0x73, 0xb2, 0xdc, 0x71, 0xff, 0x76, 0x03, 0x9a, 0xe2, 0xc4, 0xcf, 0x5c, 0x81, 0x1a, 0x3b, - 0x7f, 0x3d, 0x02, 0x75, 0xc7, 0xb5, 0xc9, 0x33, 0x86, 0x5d, 0xc7, 0x3c, 0x81, 0xce, 0x43, 0x53, - 0x9c, 0xfe, 0x89, 0x41, 0xc9, 0x3b, 0x4b, 0x8e, 0xc8, 0xcc, 0xf7, 0xa1, 0x19, 0x9d, 0xc3, 0xce, - 0x42, 0x7b, 0xe4, 0x7b, 0x74, 0x4d, 0xd3, 0x8f, 0x86, 0x3a, 0xce, 0x40, 0x6f, 0x42, 0xd3, 0x16, - 0x27, 0xbd, 0x15, 0x31, 0x8d, 0xe4, 0xa8, 0x79, 0x44, 0x67, 0x7e, 0xb5, 0x0c, 0x0d, 0x7e, 0x1c, - 0x6b, 0xee, 0x4a, 0xd5, 0xbd, 0x0c, 0x8d, 0x01, 0xcb, 0x33, 0x92, 0x47, 0xb1, 0x5a, 0x0d, 0xc5, - 0xf9, 0x2e, 0x16, 0xc4, 0x94, 0x2d, 0xe0, 0x0e, 0xb7, 0x32, 0x96, 0x8d, 0x8f, 0x25, 0x16, 0xc4, - 0xff, 0x69, 0x72, 0xff, 0xa4, 0x02, 0x07, 0xf4, 0x53, 0xde, 0x59, 0x68, 0x0f, 0xe4, 0xb9, 0xb1, - 0xe8, 0x5d, 0x99, 0x81, 0x1e, 0x00, 0x0c, 0x86, 0x0e, 0x71, 0x43, 0x76, 0xce, 0x50, 0xc9, 0xdc, - 0xbe, 0x66, 0x1e, 0xfa, 0x76, 0x17, 0x25, 0x1b, 0x56, 0x20, 0xd0, 0x4d, 0xa8, 0x07, 0x03, 0x6f, - 0xc4, 0xdd, 0xdc, 0x8c, 0x12, 0xcf, 0xd0, 0xab, 0x3d, 0xbf, 0x13, 0x6e, 0xf1, 0x25, 0xf2, 0xfc, - 0xc8, 0x59, 0xa3, 0x0c, 0x98, 0xf3, 0x99, 0x5f, 0x01, 0x88, 0xa1, 0xd1, 0x09, 0xb9, 0x23, 0x59, - 0xb1, 0xb6, 0xa3, 0xfa, 0xab, 0x59, 0x0a, 0xc5, 0xaa, 0x15, 0x6e, 0x09, 0xdf, 0xac, 0x66, 0xa1, - 0xb3, 0x70, 0x28, 0x70, 0x36, 0x5d, 0x2b, 0xdc, 0xf1, 0xc9, 0x63, 0xe2, 0x3b, 0x1b, 0x0e, 0xb1, - 0x59, 0xf5, 0x5a, 0x38, 0x5d, 0x60, 0xbe, 0x09, 0x87, 0xd2, 0x27, 0xd8, 0x63, 0x3b, 0xd1, 0xfc, - 0xff, 0x6d, 0x68, 0xf0, 0xe0, 0x84, 0xf9, 0xaf, 0x15, 0xa9, 0xd7, 0xe6, 0x9f, 0x95, 0xa1, 0xce, - 0x0f, 0x69, 0x93, 0x5e, 0xec, 0xb6, 0xaa, 0xd3, 0xd5, 0x8c, 0x9d, 0x7b, 0xd6, 0xa1, 0x75, 0xf7, - 0x2e, 0xd9, 0x7b, 0x4c, 0xe7, 0x2a, 0xa9, 0xe8, 0xb9, 0xfe, 0xe0, 0x0e, 0xb4, 0x22, 0x62, 0xea, - 0x5d, 0x9e, 0x90, 0x3d, 0x21, 0x9c, 0xfe, 0x44, 0x67, 0xc5, 0x9c, 0x27, 0x4d, 0x35, 0x69, 0x4f, - 0x5c, 0x8a, 0x98, 0x18, 0x3f, 0x0b, 0xd5, 0x35, 0x12, 0xa6, 0x9a, 0xb0, 0x7f, 0xb3, 0xcc, 0xad, - 0xed, 0x22, 0xd4, 0xf9, 0x41, 0x79, 0x52, 0x06, 0x82, 0xda, 0x13, 0xb2, 0x17, 0x79, 0x25, 0xf6, - 0x3b, 0x17, 0xe4, 0x4f, 0xab, 0x30, 0xad, 0x1e, 0x0e, 0x9a, 0xcb, 0xb9, 0xd3, 0x38, 0x9b, 0x98, - 0xe3, 0x69, 0x5c, 0x24, 0xa9, 0x67, 0x63, 0x58, 0x4c, 0x35, 0xda, 0x98, 0x27, 0xcc, 0x2e, 0x34, - 0xc4, 0x99, 0x6b, 0x12, 0x49, 0xd2, 0x57, 0x54, 0xfa, 0x3b, 0xd0, 0x92, 0x47, 0xa8, 0x1f, 0x56, - 0xb6, 0x0f, 0x2d, 0x79, 0x56, 0x7a, 0x04, 0xea, 0xa1, 0x17, 0x5a, 0x43, 0x06, 0x57, 0xc5, 0x3c, - 0x41, 0xf5, 0xd2, 0x25, 0xcf, 0xc2, 0x45, 0xe9, 0x79, 0xab, 0x38, 0xce, 0xe0, 0x8e, 0x95, 0xec, - 0xf2, 0xd2, 0x2a, 0x2f, 0x95, 0x19, 0xb1, 0xcc, 0x9a, 0x2a, 0x73, 0x0f, 0x1a, 0xe2, 0x00, 0x55, - 0x96, 0x97, 0x95, 0x72, 0x34, 0x0f, 0xf5, 0x4d, 0x5a, 0x2e, 0x46, 0xfd, 0xf5, 0x84, 0x7d, 0xf3, - 0xb8, 0xc8, 0xa2, 0xe7, 0x86, 0x54, 0x8d, 0xf5, 0xb8, 0x30, 0xe6, 0x9c, 0x74, 0x08, 0x7d, 0x7e, - 0x1a, 0xce, 0x8d, 0x50, 0xa4, 0xcc, 0x6f, 0x97, 0xa1, 0x2d, 0xaf, 0x1f, 0x98, 0xef, 0xe7, 0x19, - 0xcf, 0x3c, 0x1c, 0xf0, 0x05, 0x15, 0x35, 0xd4, 0xc8, 0x84, 0x5e, 0x48, 0xd4, 0x04, 0x2b, 0x34, - 0x58, 0xe7, 0x30, 0xdf, 0xc9, 0x1d, 0xd4, 0x39, 0x98, 0x8e, 0x48, 0xef, 0xc6, 0xaa, 0xa7, 0xe5, - 0x99, 0xa6, 0xe4, 0x4e, 0xcd, 0xdc, 0xe6, 0x06, 0x4c, 0xab, 0x87, 0x90, 0xe6, 0xe3, 0x6c, 0xeb, - 0xb9, 0x49, 0xc5, 0x28, 0x07, 0x9e, 0x95, 0x44, 0xa4, 0x25, 0x6a, 0x42, 0x4c, 0x82, 0x35, 0x06, - 0xf3, 0x18, 0xd4, 0xf9, 0xd5, 0x88, 0x04, 0xb2, 0xf9, 0xeb, 0x03, 0xa8, 0xb3, 0x41, 0x30, 0x2f, - 0x72, 0x03, 0x38, 0x0b, 0x0d, 0x16, 0xe6, 0x8b, 0x2e, 0x8e, 0x1d, 0xc9, 0x1a, 0x31, 0x2c, 0x68, - 0xcc, 0x45, 0x98, 0x52, 0x0e, 0xa5, 0xa9, 0xc6, 0xb2, 0x02, 0xa9, 0x05, 0x51, 0x12, 0x99, 0xd0, - 0xa2, 0x13, 0xb4, 0xf0, 0xb9, 0xb4, 0xfd, 0x32, 0x6d, 0x9e, 0x94, 0x2b, 0x4c, 0x53, 0x1c, 0xc2, - 0xf7, 0x65, 0x2f, 0xc9, 0xb4, 0xf9, 0x19, 0x68, 0xcb, 0xb3, 0x6b, 0xf4, 0x00, 0xa6, 0xc5, 0xd9, - 0x35, 0x0f, 0xbd, 0x51, 0xe2, 0x99, 0x02, 0xed, 0x7a, 0x48, 0x9e, 0x85, 0xec, 0xf8, 0xbb, 0xfb, - 0x70, 0x6f, 0x44, 0xb0, 0x06, 0x60, 0x7e, 0xf3, 0x0c, 0xeb, 0x79, 0x73, 0x04, 0x2d, 0x79, 0x60, - 0x97, 0x1c, 0x85, 0xab, 0xdc, 0x35, 0x56, 0x0a, 0x4f, 0x9b, 0x39, 0x3f, 0x75, 0xc0, 0xcc, 0x83, - 0x9a, 0x2f, 0x40, 0xf5, 0x2e, 0xd9, 0xa3, 0x16, 0xc2, 0x1d, 0xa9, 0xb0, 0x10, 0xee, 0x30, 0xfb, - 0xd0, 0x10, 0x07, 0xe7, 0x49, 0x79, 0xe7, 0xa0, 0xb1, 0xc1, 0xcf, 0xe2, 0x0b, 0x5c, 0xa6, 0x20, - 0x33, 0x6f, 0xc2, 0x94, 0x7a, 0x5c, 0x9e, 0xc4, 0x3b, 0x01, 0x53, 0x03, 0xe5, 0x40, 0x9e, 0x0f, - 0x83, 0x9a, 0x65, 0x12, 0x5d, 0x1d, 0x53, 0x08, 0xcb, 0x99, 0x7a, 0xf8, 0x72, 0x66, 0xb7, 0x8f, - 0xd1, 0xc6, 0xbb, 0x70, 0x30, 0x79, 0x2e, 0x9e, 0x94, 0x74, 0x06, 0x0e, 0xae, 0x27, 0x4e, 0xe1, - 0xb9, 0x0f, 0x4c, 0x66, 0x9b, 0x7d, 0xa8, 0xf3, 0x73, 0xcb, 0x24, 0xc4, 0x79, 0xa8, 0x5b, 0xec, - 0x5c, 0xb4, 0xc2, 0x96, 0x16, 0x66, 0x66, 0x2d, 0x19, 0x2b, 0xe6, 0x84, 0xa6, 0x03, 0x07, 0xf4, - 0xa3, 0xd0, 0x24, 0x64, 0x0f, 0x0e, 0xec, 0x6a, 0x47, 0xae, 0x1c, 0x7a, 0x2e, 0x13, 0x5a, 0x83, - 0xc2, 0x3a, 0xa3, 0xf9, 0xb5, 0x06, 0xd4, 0xd8, 0x59, 0x7e, 0x52, 0xc4, 0x15, 0xa8, 0x85, 0xe4, - 0x59, 0xb4, 0x2e, 0x9e, 0x1b, 0x7b, 0x31, 0x80, 0x07, 0x94, 0x19, 0x3d, 0xfa, 0x38, 0x5d, 0xc4, - 0xef, 0x0d, 0xa3, 0xfd, 0xe2, 0x2b, 0xe3, 0x19, 0xd7, 0x28, 0x29, 0xe6, 0x1c, 0x94, 0x95, 0xd9, - 0x82, 0xb8, 0x7b, 0x52, 0xc0, 0xca, 0x8c, 0x10, 0x73, 0x0e, 0x74, 0x13, 0x9a, 0x83, 0x2d, 0x32, - 0x78, 0x42, 0x6c, 0x71, 0xe9, 0xe4, 0xd4, 0x78, 0xe6, 0x45, 0x4e, 0x8c, 0x23, 0x2e, 0x2a, 0x7b, - 0xc0, 0x46, 0xb7, 0x31, 0x89, 0x6c, 0x36, 0xe2, 0x98, 0x73, 0xa0, 0x65, 0x68, 0x3b, 0x03, 0xcf, - 0x5d, 0xde, 0xf6, 0x3e, 0xe7, 0x88, 0xdb, 0x25, 0xaf, 0x8e, 0x67, 0xef, 0x47, 0xe4, 0x38, 0xe6, - 0x8c, 0x60, 0xfa, 0xdb, 0x74, 0x57, 0xda, 0x9a, 0x14, 0x86, 0x91, 0xe3, 0x98, 0xd3, 0x9c, 0x15, - 0xe3, 0x99, 0x6d, 0xe4, 0xb7, 0xa1, 0xce, 0xba, 0x1c, 0x5d, 0x57, 0x8b, 0x67, 0x14, 0x49, 0xb9, - 0x1e, 0x4b, 0x0c, 0x95, 0xc4, 0x61, 0xfd, 0xaf, 0xe3, 0x4c, 0x4d, 0x82, 0x23, 0xc6, 0x8d, 0xe3, - 0xbc, 0x04, 0x4d, 0x31, 0x14, 0x7a, 0x85, 0x5b, 0x11, 0xc1, 0x8b, 0x50, 0xe7, 0x86, 0x99, 0xdd, - 0x9e, 0x97, 0xa1, 0x2d, 0x3b, 0x73, 0x3c, 0x09, 0xeb, 0x9d, 0x1c, 0x92, 0x6f, 0x55, 0xa0, 0xce, - 0xef, 0x34, 0xa4, 0x5d, 0xad, 0x6a, 0x05, 0xaf, 0x8c, 0xbf, 0x22, 0xa1, 0x9a, 0xc1, 0x6d, 0xb6, - 0x39, 0xa4, 0x6b, 0x79, 0x79, 0x4f, 0xf9, 0x4c, 0x01, 0xf7, 0x6a, 0x44, 0x8f, 0x63, 0xd6, 0x82, - 0xe1, 0x7c, 0x00, 0x6d, 0xc9, 0x85, 0x16, 0xf4, 0x21, 0x3d, 0x3b, 0x76, 0x28, 0x92, 0x22, 0x05, - 0xe0, 0xaf, 0x94, 0xa1, 0xba, 0xe4, 0xec, 0xa6, 0xfa, 0xe1, 0xad, 0xc8, 0xaa, 0x8b, 0xdc, 0xc1, - 0x92, 0xb3, 0xab, 0x19, 0xb5, 0xb9, 0x1c, 0x69, 0xdc, 0x3b, 0x7a, 0xf5, 0x4e, 0x8f, 0x5f, 0x81, - 0xc5, 0x30, 0xbc, 0x62, 0xbf, 0xd0, 0x84, 0x1a, 0xbb, 0x2e, 0x94, 0xe5, 0xa7, 0xf6, 0x46, 0xc5, - 0x15, 0x63, 0x07, 0x12, 0x6c, 0xc2, 0x65, 0xf4, 0xdc, 0x4f, 0x59, 0x61, 0xb1, 0x9f, 0xe2, 0xe7, - 0x2b, 0x6a, 0xdc, 0xe1, 0x0a, 0xd4, 0xb6, 0x9d, 0x6d, 0x22, 0xdc, 0x54, 0x81, 0xc8, 0xfb, 0xce, - 0x36, 0xc1, 0x8c, 0x9e, 0xf2, 0x6d, 0x59, 0xc1, 0x96, 0xf0, 0x50, 0x05, 0x7c, 0x3d, 0x2b, 0xd8, - 0xc2, 0x8c, 0x9e, 0xf2, 0xb9, 0x74, 0x17, 0xd9, 0x98, 0x84, 0x8f, 0x6e, 0x2e, 0x31, 0xa3, 0xa7, - 0x7c, 0x81, 0xf3, 0x05, 0x22, 0x7c, 0x52, 0x01, 0xdf, 0x9a, 0xf3, 0x05, 0x82, 0x19, 0x7d, 0xec, - 0xc2, 0x5b, 0x93, 0x75, 0x8d, 0xe2, 0xc2, 0x1f, 0xc2, 0x4c, 0xa8, 0x1d, 0x7a, 0x8b, 0x3b, 0x6b, - 0x67, 0x0b, 0xc6, 0x45, 0xe3, 0xc1, 0x09, 0x0c, 0x6a, 0x04, 0x6c, 0xcf, 0x9c, 0x6d, 0x04, 0x2f, - 0x42, 0xfd, 0x93, 0x8e, 0x1d, 0x6e, 0xe9, 0xc5, 0x75, 0xcd, 0xe5, 0xd1, 0x61, 0xdb, 0x97, 0xcb, - 0x53, 0x47, 0x9d, 0xe3, 0x2c, 0x41, 0x8d, 0xaa, 0xcf, 0xfe, 0xf4, 0x38, 0xd6, 0xba, 0x0f, 0xe5, - 0x80, 0xd5, 0x8e, 0xe6, 0x38, 0xb3, 0x50, 0xa3, 0x1a, 0x92, 0xd3, 0x25, 0xb3, 0x50, 0xa3, 0x7a, - 0x97, 0x5f, 0x4a, 0x47, 0x5b, 0x2f, 0xad, 0x46, 0xa5, 0xa7, 0x61, 0x46, 0x1f, 0x8e, 0x1c, 0x94, - 0x3f, 0x6e, 0x42, 0x8d, 0xdd, 0xbd, 0x4b, 0x5a, 0xe4, 0x27, 0xe0, 0x00, 0x1f, 0xbf, 0x05, 0xb1, - 0x04, 0xaf, 0x64, 0x46, 0xfc, 0xf5, 0x1b, 0x7d, 0x42, 0x05, 0x04, 0x0b, 0xd6, 0x11, 0x26, 0x5f, - 0x54, 0x30, 0x28, 0x4d, 0x23, 0xdf, 0x91, 0x8b, 0xd7, 0x5a, 0xc1, 0xc5, 0x4f, 0xc6, 0xcb, 0x97, - 0xc0, 0xd1, 0x4a, 0x16, 0x2d, 0x40, 0x8b, 0x4e, 0xad, 0xb4, 0xbb, 0x84, 0xd9, 0x9e, 0x1e, 0xcf, - 0xdf, 0x17, 0xd4, 0x58, 0xf2, 0xd1, 0x89, 0x7d, 0x60, 0xf9, 0x36, 0xab, 0x95, 0xb0, 0xe1, 0x57, - 0xc7, 0x83, 0x2c, 0x46, 0xe4, 0x38, 0xe6, 0x44, 0x77, 0x61, 0xca, 0x26, 0x32, 0x4e, 0x20, 0x8c, - 0xfa, 0x63, 0xe3, 0x81, 0x96, 0x62, 0x06, 0xac, 0x72, 0xd3, 0x3a, 0x45, 0x7b, 0xc3, 0xa0, 0x70, - 0xb1, 0xc1, 0xa0, 0xe2, 0x0b, 0xf6, 0x31, 0xa7, 0x79, 0x0a, 0x0e, 0x68, 0xe3, 0xf6, 0x91, 0xae, - 0x3a, 0xd4, 0xb1, 0xe4, 0x38, 0x57, 0xe5, 0x16, 0xe5, 0x0d, 0x7d, 0xd9, 0x91, 0xbb, 0x23, 0x11, - 0x8c, 0xf7, 0xa0, 0x15, 0x0d, 0x0c, 0xba, 0xa5, 0xd7, 0xe1, 0xb5, 0xe2, 0x3a, 0xc8, 0x31, 0x15, - 0x68, 0x2b, 0xd0, 0x96, 0x23, 0x84, 0xe6, 0x75, 0xb8, 0xd7, 0x8b, 0xe1, 0xe2, 0xd1, 0x15, 0x78, - 0x18, 0xa6, 0x94, 0x81, 0x42, 0x8b, 0x3a, 0xe2, 0x1b, 0xc5, 0x88, 0xea, 0x30, 0xc7, 0xab, 0x1e, - 0x39, 0x62, 0xea, 0xa8, 0x54, 0xe3, 0x51, 0xf9, 0xbd, 0x26, 0xb4, 0xe4, 0x7d, 0xd7, 0x8c, 0x3d, - 0xe6, 0x8e, 0x3f, 0x2c, 0xdc, 0x63, 0x46, 0xfc, 0xdd, 0x47, 0xfe, 0x10, 0x53, 0x0e, 0x3a, 0xc4, - 0xa1, 0x13, 0x4a, 0x53, 0x7d, 0xb5, 0x98, 0xf5, 0x21, 0x25, 0xc7, 0x9c, 0x0b, 0x3d, 0xd0, 0xb5, - 0xbc, 0x36, 0xe6, 0x3e, 0x94, 0x06, 0x92, 0xab, 0xe9, 0x7d, 0x68, 0x3b, 0x74, 0xe9, 0xd7, 0x8b, - 0x67, 0xde, 0xd7, 0x8b, 0xe1, 0xfa, 0x11, 0x0b, 0x8e, 0xb9, 0x69, 0xdd, 0x36, 0xac, 0x5d, 0x6a, - 0xd7, 0x0c, 0xac, 0x31, 0x69, 0xdd, 0x6e, 0xc7, 0x4c, 0x58, 0x45, 0x40, 0xd7, 0xc4, 0xda, 0xa5, - 0x59, 0xe0, 0x59, 0xe2, 0xae, 0x8a, 0xd7, 0x2f, 0xef, 0xa5, 0x66, 0x5a, 0x6e, 0xc6, 0xe7, 0x27, - 0x40, 0x19, 0x3b, 0xdb, 0xd2, 0x11, 0xe4, 0x2b, 0xa3, 0xf6, 0xa4, 0x23, 0xa8, 0xae, 0x8e, 0xcc, - 0x17, 0xa0, 0xfa, 0xc8, 0x1f, 0xe6, 0xcf, 0xd5, 0x6c, 0xb8, 0x73, 0x8a, 0x5f, 0xd1, 0x2d, 0x21, - 0x7f, 0x41, 0x2f, 0xc7, 0x24, 0x17, 0x47, 0xe9, 0xf4, 0x1c, 0xa2, 0xeb, 0x62, 0x42, 0xbf, 0xac, - 0xdb, 0xdb, 0x4b, 0x09, 0x7b, 0xa3, 0x16, 0xb6, 0xea, 0x13, 0x7e, 0xe5, 0x4f, 0x99, 0xc9, 0x27, - 0x9d, 0x27, 0xef, 0x44, 0xeb, 0x8f, 0x7d, 0x79, 0x8a, 0x64, 0xdf, 0x72, 0xac, 0x6f, 0x94, 0xa1, - 0x25, 0xaf, 0x33, 0xa7, 0xa3, 0xf3, 0x2d, 0x27, 0xe8, 0x11, 0xcb, 0x26, 0xbe, 0xb0, 0xdb, 0xd7, - 0x0a, 0xef, 0x49, 0x77, 0xfb, 0x82, 0x03, 0x4b, 0x5e, 0xf3, 0x04, 0xb4, 0xa2, 0xdc, 0x9c, 0x4d, - 0xd9, 0x0f, 0x2b, 0xd0, 0x10, 0x17, 0xa1, 0x93, 0x95, 0xb8, 0x01, 0x8d, 0xa1, 0xb5, 0xe7, 0xed, - 0x44, 0x5b, 0xa6, 0xd3, 0x05, 0x77, 0xab, 0xbb, 0xf7, 0x18, 0x35, 0x16, 0x5c, 0xe8, 0x6d, 0xa8, - 0x0f, 0x9d, 0x6d, 0x27, 0x14, 0xee, 0xe3, 0x54, 0x21, 0x3b, 0xbb, 0x32, 0xc5, 0x79, 0xa8, 0x70, - 0x76, 0xff, 0x31, 0xfa, 0x7a, 0xa5, 0x50, 0xf8, 0x63, 0x46, 0x8d, 0x05, 0x97, 0x79, 0x07, 0x1a, - 0xbc, 0x3a, 0xfb, 0x9b, 0x24, 0xf4, 0x96, 0xc4, 0x9a, 0xce, 0xea, 0x96, 0xb3, 0x2a, 0x3d, 0x0e, - 0x0d, 0x2e, 0x3c, 0x47, 0x6b, 0x7e, 0xf0, 0x3c, 0xdb, 0xef, 0x0c, 0xcd, 0x7b, 0xf1, 0x81, 0xe3, - 0x87, 0x3f, 0xcb, 0x30, 0x1f, 0xc2, 0xc1, 0x25, 0x2b, 0xb4, 0xd6, 0xad, 0x80, 0x60, 0x32, 0xf0, - 0x7c, 0x3b, 0x13, 0xd5, 0xe7, 0x45, 0x22, 0x42, 0x9d, 0x8f, 0x2a, 0xe8, 0x7e, 0x16, 0x3a, 0xfc, - 0xaf, 0x13, 0x3a, 0xfc, 0xfd, 0x5a, 0x4e, 0x3c, 0x6f, 0x92, 0x48, 0x06, 0x55, 0xb8, 0x54, 0x40, - 0xef, 0x9a, 0xbe, 0xf6, 0x3e, 0x59, 0xc0, 0xa9, 0x2d, 0xbe, 0xaf, 0xe9, 0x11, 0xbd, 0x22, 0x5e, - 0x2d, 0xa4, 0x77, 0x2b, 0x19, 0xd2, 0x3b, 0x5d, 0xc0, 0x9d, 0x8a, 0xe9, 0x5d, 0xd3, 0x63, 0x7a, - 0x45, 0xd2, 0xd5, 0xa0, 0xde, 0xff, 0xb0, 0x30, 0xda, 0xaf, 0xe6, 0x84, 0x7d, 0x3e, 0xae, 0x87, - 0x7d, 0xc6, 0x68, 0xcd, 0x4f, 0x2b, 0xee, 0xf3, 0x6b, 0x8d, 0x9c, 0xb8, 0xcf, 0x55, 0x2d, 0xee, - 0x33, 0xa6, 0x66, 0xc9, 0xc0, 0xcf, 0x35, 0x3d, 0xf0, 0x73, 0xb2, 0x80, 0x53, 0x8b, 0xfc, 0x5c, - 0xd5, 0x22, 0x3f, 0x45, 0x42, 0x95, 0xd0, 0xcf, 0x55, 0x2d, 0xf4, 0x53, 0xc4, 0xa8, 0xc4, 0x7e, - 0xae, 0x6a, 0xb1, 0x9f, 0x22, 0x46, 0x25, 0xf8, 0x73, 0x55, 0x0b, 0xfe, 0x14, 0x31, 0x2a, 0xd1, - 0x9f, 0x6b, 0x7a, 0xf4, 0xa7, 0xb8, 0x7f, 0x94, 0x41, 0xff, 0x59, 0xa0, 0xe6, 0x3f, 0x30, 0x50, - 0xf3, 0xf3, 0xd5, 0x9c, 0x00, 0x0c, 0xce, 0x0e, 0xc0, 0x9c, 0xcd, 0x1f, 0xc9, 0xe2, 0x08, 0xcc, - 0xe4, 0xb3, 0x40, 0x3a, 0x04, 0x73, 0x3d, 0x11, 0x82, 0x39, 0x55, 0xc0, 0xac, 0xc7, 0x60, 0xfe, - 0xdb, 0x04, 0x19, 0x7e, 0xa7, 0x31, 0x66, 0x3f, 0xfd, 0x96, 0xba, 0x9f, 0x1e, 0x33, 0x93, 0xa5, - 0x37, 0xd4, 0x37, 0xf4, 0x0d, 0xf5, 0x99, 0x09, 0x78, 0xb5, 0x1d, 0xf5, 0x6a, 0xd6, 0x8e, 0xba, - 0x3b, 0x01, 0x4a, 0xee, 0x96, 0xfa, 0x4e, 0x7a, 0x4b, 0x7d, 0x76, 0x02, 0xbc, 0xcc, 0x3d, 0xf5, - 0x6a, 0xd6, 0x9e, 0x7a, 0x92, 0xda, 0xe5, 0x6e, 0xaa, 0xdf, 0xd6, 0x36, 0xd5, 0xaf, 0x4e, 0xd2, - 0x5d, 0xf1, 0xe4, 0xf0, 0xa9, 0x9c, 0x5d, 0xf5, 0x9b, 0x93, 0xc0, 0x8c, 0x0f, 0x62, 0xff, 0x6c, - 0x5f, 0xac, 0x8b, 0xf9, 0xed, 0x97, 0xa0, 0x15, 0x5d, 0xb4, 0x31, 0x3f, 0x0f, 0xcd, 0xe8, 0xeb, - 0xd7, 0x8c, 0xdb, 0xbd, 0x62, 0x53, 0xc7, 0x57, 0xcf, 0x22, 0x85, 0x6e, 0x40, 0x8d, 0xfe, 0x12, - 0x66, 0xf1, 0xda, 0x64, 0x17, 0x7a, 0xa8, 0x10, 0xcc, 0xf8, 0xcc, 0x7f, 0x39, 0x02, 0xa0, 0x7c, - 0x14, 0x38, 0xa9, 0xd8, 0x77, 0xa9, 0x33, 0x1b, 0x86, 0xc4, 0x67, 0x17, 0xb9, 0x0a, 0x3f, 0x9a, - 0x8b, 0x25, 0x50, 0x6d, 0x09, 0x89, 0x8f, 0x05, 0x3b, 0xba, 0x0f, 0xad, 0x28, 0x90, 0xca, 0xae, - 0x49, 0xe7, 0x29, 0x59, 0x16, 0x54, 0x14, 0xda, 0xc3, 0x12, 0x02, 0xcd, 0x43, 0x2d, 0xf0, 0xfc, - 0x50, 0xdc, 0xa9, 0x7e, 0x63, 0x62, 0xa8, 0x35, 0xcf, 0x0f, 0x31, 0x63, 0xe5, 0x4d, 0x53, 0xde, - 0x5c, 0xd8, 0x4f, 0xd3, 0x34, 0x8f, 0xfd, 0xcf, 0x55, 0xe9, 0x43, 0x17, 0x85, 0x35, 0x72, 0x1d, - 0x3a, 0x37, 0xf9, 0x28, 0xa9, 0x56, 0x89, 0xc4, 0x22, 0x88, 0x8f, 0x04, 0x5f, 0xdf, 0xbc, 0x06, - 0x9d, 0x81, 0xb7, 0x4b, 0x7c, 0x1c, 0x5f, 0x71, 0x12, 0xb7, 0xd0, 0x52, 0xf9, 0xc8, 0x84, 0xd6, - 0x96, 0x63, 0x93, 0xfe, 0x40, 0xf8, 0xbf, 0x16, 0x96, 0x69, 0x74, 0x17, 0x5a, 0x2c, 0xc6, 0x1e, - 0x45, 0xf8, 0xf7, 0x57, 0x49, 0x1e, 0xea, 0x8f, 0x00, 0xa8, 0x20, 0x26, 0xfc, 0xb6, 0x13, 0xb2, - 0x3e, 0x6c, 0x61, 0x99, 0xa6, 0x15, 0x66, 0xf7, 0xc8, 0xd4, 0x0a, 0x37, 0x79, 0x85, 0x93, 0xf9, - 0xe8, 0x12, 0x3c, 0xc7, 0xf2, 0x12, 0x5b, 0x4c, 0x1e, 0xaa, 0x6f, 0xe1, 0xec, 0x42, 0x76, 0x6f, - 0xce, 0xda, 0xe4, 0x5f, 0x58, 0xb1, 0xe0, 0x5d, 0x1d, 0xc7, 0x19, 0xe8, 0x2c, 0x1c, 0xb2, 0xc9, - 0x86, 0xb5, 0x33, 0x0c, 0x1f, 0x92, 0xed, 0xd1, 0xd0, 0x0a, 0x49, 0xdf, 0x66, 0xcf, 0x3e, 0xb4, - 0x71, 0xba, 0x00, 0x9d, 0x87, 0xc3, 0x22, 0x93, 0x9b, 0x31, 0x1d, 0x8d, 0xbe, 0xcd, 0x5e, 0x41, - 0x68, 0xe3, 0xac, 0x22, 0xf3, 0x07, 0x35, 0x3a, 0xe8, 0x4c, 0xb5, 0xdf, 0x85, 0xaa, 0x65, 0xdb, - 0x62, 0xda, 0xbc, 0xb8, 0x4f, 0x03, 0x11, 0x9f, 0xd6, 0x50, 0x04, 0xb4, 0x2a, 0xaf, 0xdc, 0xf1, - 0x89, 0xf3, 0xca, 0x7e, 0xb1, 0xe4, 0x6b, 0x34, 0x02, 0x87, 0x22, 0xee, 0xf0, 0xaf, 0x31, 0xaa, - 0x3f, 0x19, 0xa2, 0xfc, 0x36, 0x43, 0xe0, 0xa0, 0x3b, 0x50, 0x63, 0x35, 0xe4, 0x13, 0xeb, 0xa5, - 0xfd, 0xe2, 0xdd, 0xe7, 0xf5, 0x63, 0x18, 0xe6, 0x80, 0xdf, 0x7d, 0x53, 0x2e, 0x5c, 0x96, 0xf5, - 0x0b, 0x97, 0x0b, 0x50, 0x77, 0x42, 0xb2, 0x9d, 0xbe, 0x7f, 0x3b, 0x56, 0x55, 0x85, 0xe7, 0xe1, - 0xac, 0x63, 0xef, 0x01, 0xbe, 0x9f, 0xfb, 0xc9, 0xc4, 0x2d, 0xa8, 0x51, 0xf6, 0xd4, 0x5a, 0x72, - 0x12, 0xc1, 0x8c, 0xd3, 0xbc, 0x00, 0x35, 0xda, 0xd8, 0x31, 0xad, 0x13, 0xf5, 0xa9, 0xc8, 0xfa, - 0x2c, 0x4c, 0x41, 0xdb, 0x1b, 0x11, 0x9f, 0x19, 0x86, 0xf9, 0x4f, 0x35, 0xe5, 0x52, 0x5c, 0x5f, - 0xd5, 0xb1, 0xcb, 0xfb, 0xf6, 0x9c, 0xaa, 0x96, 0xe1, 0x84, 0x96, 0xbd, 0xb5, 0x7f, 0xb4, 0x94, - 0x9e, 0xe1, 0x84, 0x9e, 0xfd, 0x04, 0x98, 0x29, 0x4d, 0xbb, 0xa7, 0x69, 0xda, 0x95, 0xfd, 0x23, - 0x6a, 0xba, 0x46, 0x8a, 0x74, 0x6d, 0x49, 0xd7, 0xb5, 0xee, 0x64, 0x43, 0x2e, 0xa7, 0xa6, 0x09, - 0xb4, 0xed, 0x33, 0xb9, 0xda, 0xb6, 0xa0, 0x69, 0xdb, 0x7e, 0x45, 0x7f, 0x44, 0xfa, 0xf6, 0xfd, - 0x1a, 0xd4, 0xe8, 0xf4, 0x88, 0x96, 0x55, 0x5d, 0x7b, 0x73, 0x5f, 0x53, 0xab, 0xaa, 0x67, 0x2b, - 0x09, 0x3d, 0xbb, 0xb4, 0x3f, 0xa4, 0x94, 0x8e, 0xad, 0x24, 0x74, 0x6c, 0x9f, 0x78, 0x29, 0xfd, - 0xea, 0x69, 0xfa, 0x75, 0x61, 0x7f, 0x68, 0x9a, 0x6e, 0x59, 0x45, 0xba, 0x75, 0x4b, 0xd7, 0xad, - 0x09, 0x57, 0x6f, 0x6c, 0xad, 0x32, 0x81, 0x5e, 0xbd, 0x97, 0xab, 0x57, 0x37, 0x34, 0xbd, 0xda, - 0x8f, 0xd8, 0x8f, 0x48, 0xa7, 0x2e, 0xf1, 0x45, 0x67, 0xfe, 0x97, 0x6c, 0x59, 0x8b, 0x4e, 0xf3, - 0x32, 0xb4, 0xe3, 0x57, 0x55, 0x32, 0xae, 0xe7, 0x73, 0xb2, 0x48, 0x6a, 0x94, 0x34, 0x2f, 0x42, - 0x3b, 0x7e, 0x29, 0x25, 0xeb, 0xab, 0x39, 0x56, 0x28, 0xbf, 0x9e, 0x62, 0x29, 0x73, 0x19, 0x0e, - 0xa5, 0xdf, 0x71, 0xc8, 0x88, 0xc3, 0x2b, 0x77, 0xcb, 0xa3, 0xaf, 0x57, 0x94, 0x2c, 0xf3, 0x29, - 0xcc, 0x24, 0x5e, 0x66, 0xd8, 0x37, 0x06, 0xba, 0xa8, 0x2c, 0x91, 0xab, 0x89, 0x6f, 0x71, 0xf5, - 0xdb, 0xf2, 0xf1, 0x42, 0xd8, 0x5c, 0x82, 0x99, 0x82, 0xca, 0x4f, 0x72, 0x59, 0xfe, 0xb3, 0x30, - 0x35, 0xae, 0xee, 0x1f, 0xc1, 0x65, 0xfe, 0x10, 0x3a, 0xa9, 0x57, 0x65, 0x92, 0x62, 0x56, 0x01, - 0x36, 0x25, 0x8d, 0x50, 0xda, 0xf3, 0xfb, 0xf8, 0x74, 0x81, 0xf1, 0x61, 0x05, 0xc3, 0xfc, 0xad, - 0x32, 0x1c, 0x4a, 0x3f, 0x29, 0x33, 0xe9, 0xe6, 0xc7, 0x80, 0x26, 0xc3, 0x92, 0x5f, 0x7c, 0x44, - 0x49, 0x74, 0x1f, 0xa6, 0x83, 0xa1, 0x33, 0x20, 0x8b, 0x5b, 0x96, 0xbb, 0x49, 0x02, 0xb1, 0xa3, - 0x29, 0x78, 0x16, 0x66, 0x2d, 0xe6, 0xc0, 0x1a, 0xbb, 0xf9, 0x14, 0xa6, 0x94, 0x42, 0xf4, 0x0e, - 0x54, 0xbc, 0x51, 0xea, 0x5e, 0x63, 0x3e, 0xe6, 0x83, 0xc8, 0xde, 0x70, 0xc5, 0x1b, 0xa5, 0x4d, - 0x52, 0x35, 0xdf, 0xaa, 0x66, 0xbe, 0xe6, 0x5d, 0x38, 0x94, 0x7e, 0xb5, 0x25, 0xd9, 0x3d, 0xa7, - 0x53, 0x51, 0x02, 0xde, 0x4d, 0xc9, 0x2d, 0xff, 0x55, 0x38, 0x98, 0x7c, 0x8b, 0x25, 0xe3, 0x6b, - 0x9c, 0xf8, 0xa3, 0xa6, 0x28, 0x5c, 0x3f, 0xf7, 0x73, 0x65, 0x98, 0xd1, 0x1b, 0x82, 0x8e, 0x02, - 0xd2, 0x73, 0x56, 0x3c, 0x97, 0x74, 0x4a, 0xe8, 0x39, 0x38, 0xa4, 0xe7, 0xcf, 0xdb, 0x76, 0xa7, - 0x9c, 0x26, 0xa7, 0x6e, 0xab, 0x53, 0x41, 0x06, 0x1c, 0x49, 0xf4, 0x10, 0x73, 0xa2, 0x9d, 0x2a, - 0x7a, 0x1e, 0x9e, 0x4b, 0x96, 0x8c, 0x86, 0xd6, 0x80, 0x74, 0x6a, 0xe6, 0x8f, 0x2b, 0x50, 0x7b, - 0x14, 0x10, 0xdf, 0xfc, 0xc7, 0x4a, 0xf4, 0x95, 0xc6, 0x5b, 0x50, 0x63, 0xcf, 0xa4, 0x28, 0x5f, - 0x50, 0x96, 0x13, 0x5f, 0x50, 0x6a, 0x5f, 0xe1, 0xc5, 0x5f, 0x50, 0xbe, 0x05, 0x35, 0xf6, 0x30, - 0xca, 0xfe, 0x39, 0xbf, 0x5e, 0x86, 0x76, 0xfc, 0x48, 0xc9, 0xbe, 0xf9, 0xd5, 0xaf, 0x42, 0x2a, - 0xfa, 0x57, 0x21, 0xaf, 0x41, 0xdd, 0x67, 0xdf, 0x6f, 0x70, 0x2f, 0x93, 0xfc, 0xd6, 0x84, 0x09, - 0xc4, 0x9c, 0xc4, 0x24, 0x30, 0xa5, 0x3e, 0xc1, 0xb2, 0xff, 0x6a, 0x9c, 0x14, 0xef, 0xaf, 0xf5, - 0xed, 0x60, 0xde, 0xf7, 0xad, 0x3d, 0xa1, 0x98, 0x7a, 0xa6, 0x39, 0x0b, 0xb5, 0x55, 0xc7, 0xdd, - 0xcc, 0xfe, 0x70, 0xd5, 0xfc, 0x83, 0x32, 0x34, 0xc5, 0xe5, 0x5d, 0xf3, 0x2a, 0x54, 0x57, 0xc8, - 0x53, 0x5a, 0x11, 0x71, 0x6d, 0x38, 0x55, 0x91, 0xfb, 0xac, 0x15, 0x82, 0x1e, 0x47, 0x64, 0xe6, - 0x35, 0x39, 0x4d, 0xee, 0x9f, 0xf7, 0x2d, 0xa8, 0xb1, 0x97, 0x53, 0xf6, 0xcf, 0xf9, 0x87, 0x2d, - 0x68, 0xf0, 0xaf, 0x3f, 0xcd, 0xdf, 0x6d, 0x41, 0x83, 0xbf, 0xa6, 0x82, 0x6e, 0x40, 0x33, 0xd8, - 0xd9, 0xde, 0xb6, 0xfc, 0x3d, 0x23, 0xfb, 0x8d, 0x60, 0xed, 0xf1, 0x95, 0xee, 0x1a, 0xa7, 0xc5, - 0x11, 0x13, 0xba, 0x0c, 0xb5, 0x81, 0xb5, 0x41, 0x52, 0xc7, 0xb9, 0x59, 0xcc, 0x8b, 0xd6, 0x06, - 0xc1, 0x8c, 0x1c, 0xdd, 0x82, 0x96, 0x18, 0x96, 0x40, 0xc4, 0x73, 0xc6, 0xcb, 0x8d, 0x06, 0x53, - 0x72, 0x99, 0x77, 0xa0, 0x29, 0x2a, 0x83, 0x6e, 0xca, 0x6f, 0x5f, 0x93, 0x91, 0xe7, 0xcc, 0x26, - 0xc8, 0x67, 0x36, 0xe4, 0x57, 0xb0, 0xdf, 0xa9, 0x40, 0x8d, 0x56, 0xee, 0x43, 0x23, 0xa1, 0xe3, - 0x00, 0x43, 0x2b, 0x08, 0x57, 0x77, 0x86, 0x43, 0x62, 0x8b, 0x2f, 0xec, 0x94, 0x1c, 0x74, 0x06, - 0x0e, 0xf2, 0x54, 0xb0, 0xb5, 0xb6, 0x33, 0x18, 0x10, 0xf9, 0x65, 0x69, 0x32, 0x1b, 0xcd, 0x43, - 0x9d, 0xbd, 0xef, 0x29, 0x56, 0x85, 0xaf, 0x17, 0xf6, 0x6c, 0x77, 0xd5, 0x71, 0x45, 0x6d, 0x38, - 0xa7, 0xe9, 0x41, 0x5b, 0xe6, 0x51, 0x23, 0x1c, 0x39, 0xae, 0xeb, 0xb8, 0x9b, 0x42, 0xa3, 0xa3, - 0x24, 0x9d, 0x74, 0xe8, 0x4f, 0x51, 0xdf, 0x3a, 0x16, 0x29, 0x9a, 0xbf, 0x61, 0x39, 0x43, 0x51, - 0xc5, 0x3a, 0x16, 0x29, 0x8a, 0xb4, 0x23, 0xde, 0xa0, 0xa9, 0xb1, 0x06, 0x46, 0x49, 0xf3, 0x83, - 0xb2, 0xfc, 0x00, 0x3c, 0xeb, 0xe3, 0xcc, 0x54, 0x2c, 0x69, 0x56, 0x0d, 0x68, 0xf3, 0x09, 0x41, - 0x09, 0x51, 0x1f, 0x85, 0x86, 0xe7, 0x0e, 0x1d, 0x97, 0x88, 0xd8, 0x91, 0x48, 0x25, 0xfa, 0xb8, - 0x9e, 0xea, 0x63, 0x51, 0xbe, 0x6c, 0x3b, 0xb4, 0x8a, 0x8d, 0xb8, 0x9c, 0xe7, 0xa0, 0xeb, 0xd0, - 0xb4, 0xc9, 0xae, 0x33, 0x20, 0x81, 0xd1, 0x64, 0xaa, 0xf7, 0xca, 0xd8, 0xbe, 0x5d, 0x62, 0xb4, - 0x38, 0xe2, 0x31, 0x43, 0x68, 0xf0, 0x2c, 0xd9, 0xa4, 0xb2, 0xd2, 0xa4, 0xb8, 0xd2, 0x95, 0x31, - 0x95, 0xae, 0x16, 0x54, 0xba, 0x96, 0xac, 0xf4, 0xdc, 0x97, 0x00, 0x62, 0x75, 0x43, 0x53, 0xd0, - 0x7c, 0xe4, 0x3e, 0x71, 0xbd, 0xa7, 0x6e, 0xa7, 0x44, 0x13, 0x0f, 0x36, 0x36, 0xa8, 0x94, 0x4e, - 0x99, 0x26, 0x28, 0x9d, 0xe3, 0x6e, 0x76, 0x2a, 0x08, 0xa0, 0x41, 0x13, 0xc4, 0xee, 0x54, 0xe9, - 0xef, 0xdb, 0x6c, 0xfc, 0x3a, 0x35, 0x74, 0x0c, 0x0e, 0xf7, 0xdd, 0x81, 0xb7, 0x3d, 0xb2, 0x42, - 0x67, 0x7d, 0x48, 0x1e, 0x13, 0x3f, 0x70, 0x3c, 0xb7, 0x53, 0xa7, 0xb3, 0xd7, 0x0a, 0x09, 0x9f, - 0x7a, 0xfe, 0x93, 0x15, 0x42, 0x6c, 0xf1, 0xbc, 0x4b, 0xa7, 0x61, 0xfe, 0x5b, 0x99, 0x9f, 0x06, - 0x9b, 0xb7, 0x60, 0x5a, 0x7b, 0x2c, 0xc9, 0x88, 0x9f, 0x6e, 0x4f, 0xbc, 0xdc, 0x7e, 0x94, 0xc5, - 0x6b, 0x49, 0xbc, 0x94, 0xe1, 0x29, 0xf3, 0x36, 0x80, 0xf2, 0x44, 0xd2, 0x71, 0x80, 0xf5, 0xbd, - 0x90, 0x04, 0xfc, 0x79, 0x24, 0x0a, 0x51, 0xc3, 0x4a, 0x8e, 0x8a, 0x5f, 0xd1, 0xf0, 0xcd, 0x2b, - 0x00, 0xca, 0x03, 0x49, 0xd4, 0xae, 0x68, 0x6a, 0x21, 0x09, 0x96, 0xcc, 0x36, 0xbb, 0xa2, 0x05, - 0xd1, 0x53, 0x48, 0x51, 0x0d, 0x78, 0xf4, 0x4e, 0xad, 0x01, 0xcb, 0x31, 0x97, 0x01, 0xe2, 0xd7, - 0x80, 0xcc, 0xab, 0xd2, 0x75, 0xbf, 0x01, 0x35, 0xdb, 0x0a, 0x2d, 0xe1, 0x35, 0x9f, 0x4f, 0xcc, - 0x5c, 0x31, 0x0b, 0x66, 0x64, 0xe6, 0x6f, 0x96, 0x61, 0x5a, 0x7d, 0xf9, 0xc8, 0x7c, 0x17, 0x6a, - 0xec, 0xe9, 0xa4, 0x9b, 0x30, 0xad, 0x3e, 0x7d, 0x94, 0x7a, 0xe2, 0x9e, 0xe3, 0xa9, 0xac, 0x58, - 0x63, 0x30, 0xfb, 0xb2, 0x4a, 0x1f, 0x1a, 0xea, 0x3c, 0x34, 0xc5, 0x4b, 0x4a, 0xe6, 0x29, 0x68, - 0xc7, 0x0f, 0x27, 0x51, 0xdf, 0xc1, 0xf3, 0xa3, 0x51, 0x16, 0x49, 0xf3, 0x1f, 0x6a, 0x50, 0x67, - 0xc3, 0x69, 0x7e, 0xb5, 0xa2, 0x6a, 0xa8, 0xf9, 0xe3, 0x72, 0xee, 0x5e, 0xf0, 0xa2, 0xf6, 0x54, - 0xc1, 0x4c, 0xea, 0xc1, 0x30, 0xf1, 0x4e, 0x92, 0xee, 0x58, 0xaf, 0x40, 0xd3, 0xe5, 0x9a, 0x29, - 0x5e, 0x0a, 0x98, 0xcd, 0xe4, 0x12, 0xda, 0x8b, 0x23, 0x62, 0x74, 0x09, 0xea, 0xc4, 0xf7, 0x3d, - 0x9f, 0x99, 0xd4, 0x4c, 0xea, 0xe9, 0xad, 0xf8, 0x4d, 0xa6, 0x65, 0x4a, 0x85, 0x39, 0x31, 0xba, - 0x04, 0xcf, 0x05, 0xdc, 0x8a, 0xf8, 0x9a, 0x32, 0x10, 0xdf, 0x55, 0x0b, 0x6f, 0x93, 0x5d, 0x68, - 0x06, 0x70, 0x30, 0xf9, 0xcc, 0x92, 0x09, 0x2d, 0xbe, 0x36, 0x95, 0x06, 0x22, 0xd3, 0x54, 0xf3, - 0xf8, 0xef, 0x95, 0xd8, 0x2f, 0x2a, 0x39, 0x74, 0xbd, 0xf2, 0x94, 0x41, 0x45, 0xc7, 0xc9, 0xdc, - 0x43, 0xea, 0x99, 0x73, 0x9f, 0x88, 0x66, 0x75, 0xc5, 0xda, 0x4b, 0xaa, 0x1b, 0x28, 0xa3, 0x36, - 0xd4, 0x59, 0xeb, 0x3a, 0x15, 0xd5, 0x57, 0x54, 0x73, 0xac, 0xbd, 0x36, 0x77, 0x11, 0x9a, 0x22, - 0x9f, 0xd2, 0xcf, 0xf3, 0x0e, 0xeb, 0x94, 0xd0, 0x34, 0xb4, 0xd6, 0xc8, 0x70, 0xa3, 0xe7, 0x05, - 0x61, 0xa7, 0x8c, 0x0e, 0x40, 0x9b, 0x19, 0xe0, 0x03, 0x77, 0xb8, 0xd7, 0xa9, 0xcc, 0xbd, 0x07, - 0x6d, 0xd9, 0x8d, 0xa8, 0x05, 0xb5, 0x95, 0x9d, 0xe1, 0xb0, 0x53, 0x62, 0xeb, 0xe1, 0xd0, 0xf3, - 0xa3, 0x68, 0xf8, 0xf2, 0x33, 0x3a, 0xb9, 0x75, 0xca, 0x79, 0x2e, 0xa8, 0x82, 0x3a, 0x30, 0x2d, - 0x84, 0xf3, 0x3a, 0x57, 0xcd, 0xbf, 0x2b, 0x43, 0x5b, 0xbe, 0x42, 0x45, 0x17, 0xa3, 0x91, 0x62, - 0xe5, 0x3b, 0x9f, 0xab, 0x09, 0x15, 0xcb, 0x7f, 0xd4, 0x2a, 0xa1, 0x66, 0xa7, 0x61, 0x46, 0xf8, - 0xf9, 0x68, 0xc4, 0xb9, 0xab, 0x4e, 0xe4, 0xce, 0xdd, 0x91, 0xbd, 0xde, 0x61, 0x76, 0xbd, 0xe8, - 0xb9, 0x2e, 0x19, 0x84, 0xac, 0xef, 0x0f, 0xc2, 0xd4, 0x8a, 0x17, 0xae, 0x7a, 0x41, 0x40, 0x5b, - 0xc6, 0x7b, 0x2a, 0x2e, 0xaf, 0xa0, 0x19, 0x80, 0xe8, 0x82, 0x1b, 0xf5, 0xcc, 0xe6, 0x6f, 0x94, - 0xa1, 0xc1, 0xdf, 0xc6, 0x32, 0x7f, 0xb9, 0x0c, 0x0d, 0xf1, 0x1e, 0xd6, 0x6b, 0xd0, 0xf1, 0x3d, - 0x0a, 0x1c, 0xed, 0x62, 0xfa, 0x4b, 0xa2, 0x95, 0xa9, 0x7c, 0xba, 0xb1, 0xf6, 0x14, 0x55, 0x14, - 0xeb, 0x0e, 0x2d, 0x0f, 0x5d, 0x03, 0xe0, 0xef, 0x6d, 0x3d, 0xdc, 0x93, 0xaf, 0x6d, 0x24, 0xef, - 0xb5, 0x89, 0x17, 0xba, 0xd8, 0x09, 0x90, 0x42, 0x6d, 0x6e, 0xc3, 0xa1, 0xd4, 0x63, 0x49, 0x4a, - 0xb0, 0xe7, 0x0c, 0x1c, 0x24, 0x6a, 0x91, 0x1c, 0x8f, 0x64, 0x36, 0x55, 0x69, 0x2d, 0x4b, 0x68, - 0xbd, 0x9e, 0x39, 0xf7, 0x45, 0x38, 0x80, 0x49, 0x30, 0xf2, 0xdc, 0x80, 0xfc, 0xb4, 0xfe, 0x9d, - 0x49, 0xee, 0x3f, 0x26, 0x99, 0xfb, 0x7e, 0x1d, 0xea, 0x6c, 0x05, 0x6d, 0xfe, 0x79, 0x5d, 0xae, - 0xf5, 0x53, 0x3e, 0xec, 0x82, 0x7a, 0x99, 0x49, 0x75, 0x46, 0xda, 0xe2, 0x5b, 0xbf, 0xc4, 0xf4, - 0x36, 0xb4, 0x46, 0xbe, 0xb7, 0xe9, 0xd3, 0x35, 0x7b, 0x2d, 0xf1, 0xce, 0x95, 0xce, 0xb6, 0x2a, - 0xc8, 0xb0, 0x64, 0x50, 0x75, 0xbd, 0xae, 0xeb, 0xfa, 0x2d, 0x68, 0xdb, 0xbe, 0x37, 0x62, 0x9f, - 0xe1, 0x8b, 0x03, 0xc4, 0x13, 0x39, 0xb8, 0x4b, 0x11, 0x5d, 0xaf, 0x84, 0x63, 0x26, 0x6a, 0x2d, - 0x7c, 0xb0, 0xc5, 0xd9, 0xfd, 0x8b, 0x39, 0xec, 0x5c, 0x3d, 0x7a, 0x25, 0x2c, 0xc8, 0x29, 0x23, - 0x79, 0xc6, 0x18, 0x5b, 0x63, 0x19, 0x97, 0x9f, 0x45, 0x8c, 0x9c, 0x1c, 0x5d, 0x87, 0x56, 0x60, - 0xed, 0x12, 0xf6, 0x78, 0x79, 0x7b, 0x6c, 0x57, 0xac, 0x09, 0xb2, 0x5e, 0x09, 0x4b, 0x16, 0xda, - 0xe4, 0x6d, 0x67, 0x93, 0xef, 0x96, 0xc5, 0x0b, 0xea, 0x79, 0x4d, 0xbe, 0x1f, 0xd1, 0xb1, 0xe7, - 0xee, 0xa3, 0x04, 0xdd, 0xdd, 0xf1, 0x69, 0x61, 0x8a, 0x1f, 0x8d, 0xb3, 0x84, 0x39, 0x05, 0x6d, - 0xd9, 0x45, 0x66, 0x4b, 0x5a, 0x65, 0x0b, 0x1a, 0xbc, 0x05, 0x26, 0x40, 0x2b, 0xaa, 0x10, 0x25, - 0x96, 0xe0, 0xe6, 0x0a, 0xb4, 0xa2, 0x41, 0xcb, 0x79, 0x7a, 0x03, 0x41, 0xcd, 0xf6, 0xc4, 0xb2, - 0xb0, 0x8a, 0xd9, 0x6f, 0x3a, 0xa8, 0xea, 0x2b, 0x5f, 0x6d, 0xf9, 0xe4, 0xd5, 0xdc, 0x7c, 0x74, - 0x27, 0x8b, 0x7a, 0x52, 0x1e, 0x70, 0x98, 0x82, 0x26, 0xde, 0x61, 0x2b, 0xf6, 0x4e, 0x99, 0x66, - 0xd3, 0x6d, 0x60, 0xa7, 0x42, 0x9d, 0xf2, 0xa2, 0xe5, 0x0e, 0xc8, 0x90, 0xad, 0xf2, 0xa4, 0xab, - 0xaf, 0x2d, 0xb4, 0x25, 0xf8, 0xc2, 0xec, 0x5f, 0x7c, 0x70, 0xbc, 0xfc, 0xbd, 0x0f, 0x8e, 0x97, - 0x7f, 0xf8, 0xc1, 0xf1, 0xf2, 0x2f, 0xfe, 0xe8, 0x78, 0xe9, 0x7b, 0x3f, 0x3a, 0x5e, 0xfa, 0xdb, - 0x1f, 0x1d, 0x2f, 0xbd, 0x5f, 0x19, 0xad, 0xaf, 0x37, 0xd8, 0xbd, 0x9a, 0x8b, 0xff, 0x1e, 0x00, - 0x00, 0xff, 0xff, 0x32, 0x1a, 0xcc, 0xe1, 0xa5, 0x68, 0x00, 0x00, + // 6503 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x59, 0x8c, 0x1d, 0xc7, + 0x75, 0xf6, 0xdd, 0x97, 0x33, 0xc3, 0xe1, 0x65, 0x91, 0x22, 0x5b, 0xad, 0x11, 0x45, 0x8d, 0x48, + 0x8a, 0x96, 0xa8, 0x4b, 0x8a, 0xab, 0x4c, 0x89, 0xcb, 0x6c, 0xd4, 0xbd, 0x5c, 0x86, 0xe3, 0x1a, + 0x92, 0x96, 0x65, 0xe3, 0x87, 0x7b, 0x6e, 0xd7, 0xcc, 0xb4, 0x79, 0xa7, 0xfb, 0xba, 0xbb, 0x67, + 0xc8, 0xf1, 0xf2, 0xff, 0xfe, 0xbd, 0xfc, 0xfe, 0x03, 0x24, 0xc8, 0x82, 0x20, 0x09, 0xf2, 0x12, + 0x20, 0x48, 0x80, 0x3c, 0x04, 0x41, 0x80, 0xbc, 0x24, 0x01, 0x12, 0x04, 0x08, 0x82, 0xc4, 0x59, + 0x00, 0x1b, 0xc8, 0x43, 0x10, 0x20, 0xb1, 0x23, 0xbf, 0xe4, 0x25, 0x0f, 0x4e, 0x80, 0x20, 0x8f, + 0x41, 0x2d, 0x5d, 0x5d, 0xd5, 0xcb, 0xed, 0x3b, 0x96, 0x9c, 0x05, 0xf1, 0xd3, 0xdc, 0xaa, 0x3a, + 0xe7, 0x3b, 0xb5, 0x9c, 0x73, 0xaa, 0xea, 0x54, 0x75, 0x0d, 0x1c, 0x1d, 0xad, 0x9f, 0x1b, 0xf9, + 0x5e, 0xe8, 0x05, 0xe7, 0xc8, 0x2e, 0x71, 0xc3, 0xa0, 0xcb, 0x52, 0xa8, 0x69, 0xb9, 0x7b, 0xe1, + 0xde, 0x88, 0x98, 0x27, 0x47, 0x4f, 0x36, 0xcf, 0x0d, 0x9d, 0xf5, 0x73, 0xa3, 0xf5, 0x73, 0xdb, + 0x9e, 0x4d, 0x86, 0x11, 0x39, 0x4b, 0x08, 0x72, 0x73, 0x76, 0xd3, 0xf3, 0x36, 0x87, 0x84, 0x97, + 0xad, 0xef, 0x6c, 0x9c, 0x0b, 0x42, 0x7f, 0x67, 0x10, 0xf2, 0xd2, 0xb9, 0xbf, 0xfd, 0x56, 0x19, + 0xea, 0xcb, 0x14, 0x1e, 0x5d, 0x80, 0xd6, 0x36, 0x09, 0x02, 0x6b, 0x93, 0x04, 0x46, 0xf9, 0x44, + 0xf5, 0xcc, 0xd4, 0x85, 0xa3, 0x5d, 0x21, 0xaa, 0xcb, 0x28, 0xba, 0xf7, 0x79, 0x31, 0x96, 0x74, + 0x68, 0x16, 0xda, 0x03, 0xcf, 0x0d, 0xc9, 0xb3, 0xb0, 0x6f, 0x1b, 0x95, 0x13, 0xe5, 0x33, 0x6d, + 0x1c, 0x67, 0xa0, 0x4b, 0xd0, 0x76, 0x5c, 0x27, 0x74, 0xac, 0xd0, 0xf3, 0x8d, 0xea, 0x89, 0xb2, + 0x06, 0xc9, 0x2a, 0xd9, 0x9d, 0x1f, 0x0c, 0xbc, 0x1d, 0x37, 0xc4, 0x31, 0x21, 0x32, 0xa0, 0x19, + 0xfa, 0xd6, 0x80, 0xf4, 0x6d, 0xa3, 0xc6, 0x10, 0xa3, 0xa4, 0xf9, 0x07, 0x97, 0xa1, 0x29, 0xea, + 0x80, 0x9e, 0x87, 0x66, 0x30, 0xe2, 0x54, 0x5f, 0x2f, 0x73, 0x32, 0x91, 0x46, 0x37, 0x61, 0xca, + 0xe2, 0xb0, 0x6b, 0x5b, 0xde, 0x53, 0xa3, 0xcc, 0x04, 0xbf, 0x90, 0x68, 0x8b, 0x10, 0xdc, 0xa5, + 0x24, 0xbd, 0x12, 0x56, 0x39, 0x50, 0x1f, 0x66, 0x44, 0x72, 0x89, 0x84, 0x96, 0x33, 0x0c, 0x8c, + 0x6f, 0x71, 0x90, 0xe3, 0x39, 0x20, 0x82, 0xac, 0x57, 0xc2, 0x09, 0x46, 0xf4, 0x29, 0x38, 0x2c, + 0x72, 0x16, 0x3d, 0x77, 0xc3, 0xd9, 0x7c, 0x34, 0xb2, 0xad, 0x90, 0x18, 0x7f, 0xce, 0xf1, 0x4e, + 0xe6, 0xe0, 0x71, 0xda, 0x2e, 0x27, 0xee, 0x95, 0x70, 0x16, 0x06, 0xba, 0x0d, 0x07, 0x44, 0xb6, + 0x00, 0xfd, 0x0b, 0x0e, 0xfa, 0x62, 0x0e, 0xa8, 0x44, 0xd3, 0xd9, 0xd0, 0xa7, 0xe1, 0x88, 0xc8, + 0xb8, 0xe7, 0xb8, 0x4f, 0x16, 0xb7, 0xac, 0xe1, 0x90, 0xb8, 0x9b, 0xc4, 0xf8, 0xcb, 0xf1, 0x75, + 0xd4, 0x88, 0x7b, 0x25, 0x9c, 0x09, 0x82, 0x36, 0xc1, 0xc8, 0xca, 0xef, 0x39, 0x36, 0x31, 0xfe, + 0x8a, 0x0b, 0x38, 0x33, 0x91, 0x00, 0xc7, 0xa6, 0x42, 0x72, 0xc1, 0xd0, 0x03, 0xe8, 0x78, 0xeb, + 0x9f, 0x23, 0x83, 0xa8, 0xe7, 0xd7, 0x48, 0x68, 0x74, 0x18, 0xfe, 0xcb, 0x09, 0xfc, 0x07, 0x8c, + 0x2c, 0x1a, 0xb3, 0xee, 0x1a, 0x09, 0x7b, 0x25, 0x9c, 0x62, 0x46, 0x8f, 0x00, 0x69, 0x79, 0xf3, + 0xdb, 0xc4, 0xb5, 0x8d, 0x0b, 0x0c, 0xf2, 0x95, 0xf1, 0x90, 0x8c, 0xb4, 0x57, 0xc2, 0x19, 0x00, + 0x29, 0xd8, 0x47, 0x6e, 0x40, 0x42, 0xe3, 0xe2, 0x24, 0xb0, 0x8c, 0x34, 0x05, 0xcb, 0x72, 0xe9, + 0x20, 0xf2, 0x5c, 0x4c, 0x86, 0x56, 0xe8, 0x78, 0xae, 0xa8, 0xef, 0x25, 0x06, 0x7c, 0x2a, 0x1b, + 0x58, 0xd2, 0xca, 0x1a, 0x67, 0x82, 0xa0, 0xff, 0x05, 0xcf, 0x25, 0xf2, 0x31, 0xd9, 0xf6, 0x76, + 0x89, 0x71, 0x99, 0xa1, 0x9f, 0x2e, 0x42, 0xe7, 0xd4, 0xbd, 0x12, 0xce, 0x86, 0x41, 0x0b, 0x30, + 0x1d, 0x15, 0x30, 0xd8, 0x2b, 0x0c, 0x76, 0x36, 0x0f, 0x56, 0x80, 0x69, 0x3c, 0xd4, 0xe8, 0x79, + 0x7a, 0x71, 0xe8, 0x05, 0xc4, 0x98, 0xcf, 0x34, 0x7a, 0x01, 0xc1, 0x48, 0xa8, 0xd1, 0x2b, 0x1c, + 0x6a, 0x23, 0x83, 0xd0, 0x77, 0x06, 0xac, 0x82, 0x54, 0x8b, 0xae, 0x8e, 0x6f, 0x64, 0x4c, 0x2c, + 0x54, 0x29, 0x1b, 0x06, 0x61, 0x38, 0x18, 0xec, 0xac, 0x07, 0x03, 0xdf, 0x19, 0xd1, 0xbc, 0x79, + 0xdb, 0x36, 0xde, 0x19, 0x87, 0xbc, 0xa6, 0x10, 0x77, 0xe7, 0x6d, 0x3a, 0x3a, 0x49, 0x00, 0xf4, + 0x69, 0x40, 0x6a, 0x96, 0xe8, 0xbe, 0xeb, 0x0c, 0xf6, 0x63, 0x13, 0xc0, 0xca, 0xbe, 0xcc, 0x80, + 0x41, 0x16, 0x1c, 0x51, 0x73, 0x57, 0xbd, 0xc0, 0xa1, 0x7f, 0x8d, 0x1b, 0x0c, 0xfe, 0xf5, 0x09, + 0xe0, 0x23, 0x16, 0xaa, 0x58, 0x59, 0x50, 0x49, 0x11, 0x8b, 0xd4, 0xb4, 0x89, 0x1f, 0x18, 0x37, + 0x27, 0x16, 0x11, 0xb1, 0x24, 0x45, 0x44, 0xf9, 0xc9, 0x2e, 0x7a, 0xd7, 0xf7, 0x76, 0x46, 0x81, + 0x71, 0x6b, 0xe2, 0x2e, 0xe2, 0x0c, 0xc9, 0x2e, 0xe2, 0xb9, 0xe8, 0x0a, 0xb4, 0xd6, 0x87, 0xde, + 0xe0, 0x09, 0x1d, 0xcc, 0x0a, 0x83, 0x34, 0x12, 0x90, 0x0b, 0xb4, 0x58, 0x0c, 0x9f, 0xa4, 0xa5, + 0xca, 0xca, 0x7e, 0x2f, 0x91, 0x21, 0x09, 0x89, 0x98, 0x1a, 0x5f, 0xc8, 0x64, 0xe5, 0x24, 0x54, + 0x59, 0x15, 0x0e, 0xb4, 0x04, 0x53, 0x1b, 0xce, 0x90, 0x04, 0x8f, 0x46, 0x43, 0xcf, 0xe2, 0xf3, + 0xe4, 0xd4, 0x85, 0x13, 0x99, 0x00, 0xb7, 0x63, 0x3a, 0x8a, 0xa2, 0xb0, 0xa1, 0x1b, 0xd0, 0xde, + 0xb6, 0xfc, 0x27, 0x41, 0xdf, 0xdd, 0xf0, 0x8c, 0x7a, 0xe6, 0x0c, 0xc7, 0x31, 0xee, 0x47, 0x54, + 0xbd, 0x12, 0x8e, 0x59, 0xe8, 0x3c, 0xc9, 0x2a, 0xb5, 0x46, 0xc2, 0xdb, 0x0e, 0x19, 0xda, 0x81, + 0xd1, 0x60, 0x20, 0x2f, 0x65, 0x82, 0xac, 0x91, 0xb0, 0xcb, 0xc9, 0xe8, 0x3c, 0xa9, 0x33, 0xa2, + 0xf7, 0xe0, 0x70, 0x94, 0xb3, 0xb8, 0xe5, 0x0c, 0x6d, 0x9f, 0xb8, 0x7d, 0x3b, 0x30, 0x9a, 0x99, + 0x53, 0x50, 0x8c, 0xa7, 0xd0, 0xd2, 0x69, 0x32, 0x03, 0x82, 0x7a, 0xc6, 0x28, 0x5b, 0x35, 0x49, + 0xa3, 0x95, 0xe9, 0x19, 0x63, 0x68, 0x95, 0x98, 0x6a, 0x57, 0x16, 0x08, 0xb2, 0xe1, 0x58, 0x94, + 0xbf, 0x60, 0x0d, 0x9e, 0x6c, 0xfa, 0xde, 0x8e, 0x6b, 0x2f, 0x7a, 0x43, 0xcf, 0x37, 0xda, 0x99, + 0x93, 0x5b, 0x8c, 0x9f, 0xa0, 0xef, 0x95, 0x70, 0x1e, 0x14, 0x5a, 0x84, 0xe9, 0xa8, 0xe8, 0x21, + 0x79, 0x16, 0x1a, 0x90, 0x39, 0xcf, 0xc7, 0xd0, 0x94, 0x88, 0x3a, 0x48, 0x95, 0x49, 0x05, 0xa1, + 0x2a, 0x61, 0x4c, 0x15, 0x80, 0x50, 0x22, 0x15, 0x84, 0xa6, 0x55, 0x10, 0x3a, 0x05, 0x1b, 0x07, + 0x0a, 0x40, 0x28, 0x91, 0x0a, 0x42, 0xd3, 0x74, 0xaa, 0x96, 0x2d, 0xf5, 0xbc, 0x27, 0x54, 0x9f, + 0x8c, 0x99, 0xcc, 0xa9, 0x5a, 0xe9, 0x2d, 0x41, 0x48, 0xa7, 0xea, 0x24, 0x33, 0x5d, 0x09, 0x45, + 0x79, 0xf3, 0x43, 0x67, 0xd3, 0x35, 0x0e, 0x8e, 0xd1, 0x65, 0x8a, 0xc6, 0xa8, 0xe8, 0x4a, 0x48, + 0x63, 0x43, 0xb7, 0x84, 0x59, 0xae, 0x91, 0x70, 0xc9, 0xd9, 0x35, 0x0e, 0x65, 0x4e, 0x43, 0x31, + 0xca, 0x92, 0xb3, 0x2b, 0xed, 0x92, 0xb3, 0xa8, 0x4d, 0x8b, 0x26, 0x39, 0xe3, 0xb9, 0x82, 0xa6, + 0x45, 0x84, 0x6a, 0xd3, 0xa2, 0x3c, 0xb5, 0x69, 0xf7, 0xac, 0x90, 0x3c, 0x33, 0x9e, 0x2f, 0x68, + 0x1a, 0xa3, 0x52, 0x9b, 0xc6, 0x32, 0xe8, 0xec, 0x16, 0x65, 0x3c, 0x26, 0x7e, 0xe8, 0x0c, 0xac, + 0x21, 0xef, 0xaa, 0x93, 0x99, 0x73, 0x50, 0x8c, 0xa7, 0x51, 0xd3, 0xd9, 0x2d, 0x13, 0x46, 0x6d, + 0xf8, 0x43, 0x6b, 0x7d, 0x48, 0xb0, 0xf7, 0xd4, 0x38, 0x55, 0xd0, 0xf0, 0x88, 0x50, 0x6d, 0x78, + 0x94, 0xa7, 0xfa, 0x96, 0x4f, 0x3a, 0xf6, 0x26, 0x09, 0x8d, 0x33, 0x05, 0xbe, 0x85, 0x93, 0xa9, + 0xbe, 0x85, 0xe7, 0x48, 0x0f, 0xb0, 0x64, 0x85, 0xd6, 0xae, 0x43, 0x9e, 0x3e, 0x76, 0xc8, 0x53, + 0x3a, 0xb1, 0x1f, 0x1e, 0xe3, 0x01, 0x22, 0xda, 0xae, 0x20, 0x96, 0x1e, 0x20, 0x01, 0x22, 0x3d, + 0x80, 0x9a, 0x2f, 0xdc, 0xfa, 0x91, 0x31, 0x1e, 0x40, 0xc3, 0x97, 0x3e, 0x3e, 0x0f, 0x0a, 0x59, + 0x70, 0x34, 0x55, 0xf4, 0xc0, 0xb7, 0x89, 0x6f, 0xbc, 0xc8, 0x84, 0xbc, 0x5a, 0x2c, 0x84, 0x91, + 0xf7, 0x4a, 0x38, 0x07, 0x28, 0x25, 0x62, 0xcd, 0xdb, 0xf1, 0x07, 0x84, 0xf6, 0xd3, 0x2b, 0x93, + 0x88, 0x90, 0xe4, 0x29, 0x11, 0xb2, 0x04, 0xed, 0xc2, 0x8b, 0xb2, 0x84, 0x0a, 0x66, 0xb3, 0x28, + 0x93, 0x2e, 0x76, 0x30, 0xa7, 0x99, 0xa4, 0xee, 0x78, 0x49, 0x49, 0xae, 0x5e, 0x09, 0x8f, 0x87, + 0x45, 0x7b, 0x70, 0x5c, 0x23, 0xe0, 0xf3, 0xbc, 0x2a, 0xf8, 0x55, 0x26, 0xf8, 0xdc, 0x78, 0xc1, + 0x29, 0xb6, 0x5e, 0x09, 0x17, 0x00, 0xa3, 0x11, 0xbc, 0xa0, 0x75, 0x46, 0x64, 0xd8, 0x42, 0x45, + 0xbe, 0xc4, 0xe4, 0x9e, 0x1d, 0x2f, 0x57, 0xe7, 0xe9, 0x95, 0xf0, 0x38, 0x48, 0xba, 0xe3, 0xca, + 0x2c, 0xa6, 0x23, 0xf9, 0xc5, 0xcc, 0x65, 0x4f, 0x8e, 0x38, 0x3e, 0x96, 0xb9, 0x60, 0x99, 0x9a, + 0x2f, 0xba, 0xf3, 0xcb, 0x93, 0x6a, 0xbe, 0xec, 0xc7, 0x3c, 0x28, 0x6d, 0xec, 0x68, 0xd1, 0x43, + 0xcb, 0xdf, 0x24, 0x21, 0xef, 0xe8, 0xbe, 0x4d, 0x1b, 0xf5, 0xbf, 0x27, 0x19, 0xbb, 0x14, 0x9b, + 0x36, 0x76, 0x99, 0xc0, 0x28, 0x80, 0x59, 0x8d, 0xa2, 0x1f, 0x2c, 0x7a, 0xc3, 0x21, 0x19, 0x44, + 0xbd, 0xf9, 0x7f, 0x98, 0xe0, 0x37, 0xc6, 0x0b, 0x4e, 0x30, 0xf5, 0x4a, 0x78, 0x2c, 0x68, 0xaa, + 0xbd, 0x0f, 0x86, 0x76, 0x42, 0x67, 0x8c, 0x89, 0x74, 0x35, 0xc9, 0x96, 0x6a, 0x6f, 0x8a, 0x22, + 0xa5, 0xab, 0x0a, 0x05, 0x6d, 0xee, 0xb1, 0x49, 0x74, 0x55, 0xe7, 0x49, 0xe9, 0xaa, 0x5e, 0x4c, + 0x67, 0xb7, 0x9d, 0x80, 0xf8, 0x0c, 0xe3, 0x8e, 0xe7, 0xb8, 0xc6, 0x4b, 0x99, 0xb3, 0xdb, 0xa3, + 0x80, 0xf8, 0x42, 0x10, 0xa5, 0xa2, 0xb3, 0x9b, 0xc6, 0xa6, 0xe1, 0xdc, 0x23, 0x1b, 0xa1, 0x71, + 0xa2, 0x08, 0x87, 0x52, 0x69, 0x38, 0x34, 0x83, 0xce, 0x14, 0x32, 0x63, 0x8d, 0xd0, 0x51, 0xc1, + 0x96, 0xbb, 0x49, 0x8c, 0x97, 0x33, 0x67, 0x0a, 0x05, 0x4e, 0x21, 0xa6, 0x33, 0x45, 0x16, 0x08, + 0xdd, 0xf9, 0xcb, 0x7c, 0xba, 0x22, 0xe3, 0xd0, 0x73, 0x99, 0x3b, 0x7f, 0x05, 0x5a, 0x92, 0xd2, + 0x3d, 0x48, 0x1a, 0x00, 0x7d, 0x0c, 0x6a, 0x23, 0xc7, 0xdd, 0x34, 0x6c, 0x06, 0x74, 0x38, 0x01, + 0xb4, 0xea, 0xb8, 0x9b, 0xbd, 0x12, 0x66, 0x24, 0xe8, 0x1d, 0x80, 0x91, 0xef, 0x0d, 0x48, 0x10, + 0xac, 0x90, 0xa7, 0x06, 0x61, 0x0c, 0x66, 0x92, 0x81, 0x13, 0x74, 0x57, 0x08, 0x9d, 0x97, 0x15, + 0x7a, 0xb4, 0x0c, 0x07, 0x44, 0x4a, 0x58, 0xf9, 0x46, 0xe6, 0xe2, 0x2f, 0x02, 0x88, 0xc3, 0x4d, + 0x1a, 0x17, 0xdd, 0xfb, 0x88, 0x8c, 0x25, 0xcf, 0x25, 0xc6, 0x66, 0xe6, 0xde, 0x27, 0x02, 0xa1, + 0x24, 0x74, 0x8d, 0xa5, 0x70, 0xa0, 0x05, 0x98, 0x0e, 0xb7, 0x7c, 0x62, 0xd9, 0x6b, 0xa1, 0x15, + 0xee, 0x04, 0x86, 0x9b, 0xb9, 0x4c, 0xe3, 0x85, 0xdd, 0x87, 0x8c, 0x92, 0x2e, 0x41, 0x55, 0x1e, + 0xb4, 0x02, 0x1d, 0xba, 0x11, 0xba, 0xe7, 0x6c, 0x3b, 0x21, 0x26, 0xd6, 0x60, 0x8b, 0xd8, 0x86, + 0x97, 0xb9, 0x89, 0xa2, 0xcb, 0xde, 0xae, 0x4a, 0x47, 0x57, 0x2b, 0x49, 0x5e, 0xd4, 0x83, 0x19, + 0x9a, 0xb7, 0x36, 0xb2, 0x06, 0xe4, 0x51, 0x60, 0x6d, 0x12, 0x63, 0x94, 0xa9, 0x81, 0x0c, 0x2d, + 0xa6, 0xa2, 0x8b, 0x15, 0x9d, 0x2f, 0x42, 0xba, 0xe7, 0x0d, 0xac, 0x21, 0x47, 0xfa, 0x7c, 0x3e, + 0x52, 0x4c, 0x15, 0x21, 0xc5, 0x39, 0x5a, 0x1b, 0x79, 0xdf, 0xdb, 0xc6, 0x6e, 0x41, 0x1b, 0x05, + 0x9d, 0xd6, 0x46, 0x91, 0x47, 0xf1, 0x5c, 0x2f, 0x74, 0x36, 0x9c, 0x81, 0xb0, 0x5f, 0xd7, 0x36, + 0xfc, 0x4c, 0xbc, 0x15, 0x85, 0xac, 0xbb, 0xc6, 0x23, 0x4b, 0x29, 0x5e, 0xf4, 0x10, 0x90, 0x9a, + 0x27, 0x94, 0x2a, 0x60, 0x88, 0x73, 0xe3, 0x10, 0xa5, 0x66, 0x65, 0xf0, 0xd3, 0x5a, 0x8e, 0xac, + 0x3d, 0xba, 0xbd, 0x5d, 0xf0, 0x3d, 0xcb, 0x1e, 0x58, 0x41, 0x68, 0x84, 0x99, 0xb5, 0x5c, 0xe5, + 0x64, 0x5d, 0x49, 0x47, 0x6b, 0x99, 0xe4, 0xa5, 0x78, 0xdb, 0x64, 0x7b, 0x9d, 0xf8, 0xc1, 0x96, + 0x33, 0x12, 0x75, 0xdc, 0xc9, 0xc4, 0xbb, 0x2f, 0xc9, 0xe2, 0x1a, 0xa6, 0x78, 0xe9, 0x42, 0x9c, + 0xc5, 0xa9, 0xd7, 0xf6, 0xdc, 0x01, 0x57, 0x46, 0x01, 0xfa, 0x34, 0x73, 0x21, 0xce, 0x34, 0xa3, + 0x1b, 0x13, 0xc7, 0xd0, 0xd9, 0x30, 0xe8, 0x7d, 0x38, 0xc2, 0x0a, 0xe6, 0x77, 0x42, 0x8f, 0xaf, + 0x7f, 0xe7, 0x6d, 0x9b, 0xd8, 0xc6, 0x17, 0x32, 0x77, 0xd2, 0x1c, 0x3e, 0x41, 0xcb, 0x62, 0x29, + 0x19, 0x18, 0xe8, 0x2e, 0x1c, 0x1c, 0x5d, 0x18, 0x69, 0xb5, 0x7e, 0x96, 0xb9, 0x28, 0x5f, 0xbd, + 0xb0, 0x9a, 0xac, 0x6e, 0x92, 0x93, 0x9a, 0xb1, 0xb3, 0x3d, 0xf2, 0xfc, 0xf0, 0xb6, 0xe3, 0x3a, + 0xc1, 0x96, 0xb1, 0x97, 0x69, 0xc6, 0x7d, 0x46, 0xd2, 0xe5, 0x34, 0xd4, 0x8c, 0x55, 0x1e, 0x74, + 0x09, 0x9a, 0x83, 0x2d, 0x8b, 0xd6, 0xce, 0xf8, 0x0a, 0x0f, 0x26, 0x1f, 0x4b, 0xf0, 0x2f, 0x6e, + 0x59, 0xa1, 0x08, 0xbf, 0x44, 0xa4, 0xe8, 0x3a, 0x00, 0xfd, 0x29, 0x5a, 0xf0, 0x7f, 0xcb, 0x99, + 0x7e, 0x90, 0x31, 0xca, 0xda, 0x2b, 0x0c, 0xe8, 0x3d, 0x38, 0x1c, 0xa7, 0xa8, 0x03, 0xe0, 0xf1, + 0x84, 0xaf, 0x96, 0x33, 0x3d, 0xb9, 0x82, 0x23, 0x69, 0x7b, 0x25, 0x9c, 0x05, 0x41, 0x27, 0xe0, + 0x38, 0x3b, 0x3a, 0x6c, 0x89, 0x1d, 0xdd, 0xff, 0x2b, 0x67, 0x86, 0xc5, 0x14, 0x09, 0x29, 0x1e, + 0x3a, 0x01, 0x8f, 0x81, 0x4c, 0x4a, 0x74, 0x79, 0xf8, 0x4f, 0x4a, 0xfc, 0xe6, 0x04, 0x12, 0x13, + 0x3c, 0x49, 0x89, 0x89, 0xe2, 0xa8, 0xf3, 0xc5, 0x5a, 0xe6, 0x6b, 0x63, 0x3a, 0x5f, 0xae, 0x5b, + 0x14, 0x06, 0x74, 0x0f, 0x0e, 0xd2, 0x14, 0x05, 0x23, 0x62, 0x00, 0xbf, 0x51, 0xce, 0xd4, 0x41, + 0xa5, 0x92, 0x8c, 0x9a, 0xea, 0x60, 0x82, 0x95, 0x2e, 0x61, 0x47, 0x3b, 0xc1, 0xd6, 0xb2, 0x3b, + 0xf0, 0xf7, 0x58, 0x5c, 0xef, 0x2e, 0xd9, 0x13, 0xa8, 0xff, 0xbf, 0x9c, 0xb9, 0xeb, 0x59, 0x4d, + 0x92, 0xc7, 0x3a, 0x92, 0x07, 0xb5, 0xd0, 0x84, 0xfa, 0xae, 0x35, 0xdc, 0x21, 0xe6, 0xcf, 0x36, + 0xa0, 0x46, 0xab, 0x65, 0xfe, 0x7d, 0x19, 0xaa, 0x54, 0x13, 0x67, 0xa0, 0xe2, 0xd8, 0x06, 0x3f, + 0xbe, 0xaa, 0x38, 0x36, 0x32, 0xa0, 0xe9, 0xd1, 0xcd, 0x83, 0x3c, 0x4c, 0x8b, 0x92, 0x68, 0x0e, + 0xa6, 0xad, 0x8d, 0x90, 0xf8, 0x0f, 0x44, 0x71, 0x83, 0x15, 0x6b, 0x79, 0xd4, 0x1a, 0xc4, 0xc1, + 0x9c, 0x88, 0x28, 0x9a, 0x89, 0xc3, 0x36, 0x2a, 0x3b, 0xd2, 0x81, 0x88, 0x14, 0x1d, 0x85, 0x46, + 0xb0, 0xb3, 0xde, 0xb7, 0x03, 0xa3, 0x76, 0xa2, 0x7a, 0xa6, 0x8d, 0x45, 0x0a, 0xbd, 0x0d, 0xd3, + 0x36, 0x19, 0x11, 0xd7, 0x26, 0xee, 0xc0, 0x21, 0x81, 0x51, 0x67, 0x47, 0x82, 0xc7, 0xba, 0xfc, + 0x38, 0xb1, 0x1b, 0x1d, 0x27, 0x76, 0xd7, 0xd8, 0x71, 0x22, 0xd6, 0x88, 0xcd, 0xf3, 0xd0, 0x10, + 0x03, 0x96, 0x6c, 0x62, 0x2c, 0xae, 0xa2, 0x8a, 0x33, 0x37, 0xa0, 0x21, 0x06, 0x25, 0xc9, 0xa1, + 0x34, 0xab, 0xf2, 0xc3, 0x34, 0xab, 0xaa, 0xc9, 0xf9, 0x32, 0x1c, 0x4c, 0x9a, 0x5d, 0x52, 0xe0, + 0x02, 0xb4, 0x7d, 0x69, 0xd6, 0x95, 0x84, 0xdf, 0x4c, 0x89, 0xec, 0x4a, 0x20, 0x1c, 0xb3, 0xe5, + 0x8a, 0xff, 0x34, 0x1c, 0xcb, 0xb3, 0xc5, 0x0e, 0x54, 0x1d, 0x9b, 0x1f, 0xbd, 0xb6, 0x31, 0xfd, + 0x49, 0x41, 0x9c, 0x80, 0x52, 0xb0, 0x5a, 0xb4, 0xb0, 0x48, 0x4d, 0x02, 0x9e, 0x34, 0xbb, 0x0f, + 0x0f, 0xfe, 0x08, 0xa6, 0x14, 0x6b, 0x42, 0x5d, 0xa8, 0x07, 0xf4, 0x87, 0x38, 0x5e, 0x35, 0x32, + 0x3a, 0x88, 0x11, 0x62, 0x4e, 0x96, 0x3b, 0xee, 0xbf, 0xdf, 0x80, 0xa6, 0x38, 0xf1, 0x33, 0x57, + 0xa0, 0xc6, 0xce, 0x5f, 0x8f, 0x40, 0xdd, 0x71, 0x6d, 0xf2, 0x8c, 0x61, 0xd7, 0x31, 0x4f, 0xa0, + 0xf3, 0xd0, 0x14, 0xa7, 0x7f, 0x62, 0x50, 0xf2, 0xce, 0x92, 0x23, 0x32, 0xf3, 0x7d, 0x68, 0x46, + 0xe7, 0xb0, 0xb3, 0xd0, 0x1e, 0xf9, 0x1e, 0x5d, 0xd3, 0xf4, 0xa3, 0xa1, 0x8e, 0x33, 0xd0, 0x9b, + 0xd0, 0xb4, 0xc5, 0x49, 0x6f, 0x45, 0x4c, 0x23, 0x39, 0x6a, 0x1e, 0xd1, 0x99, 0x5f, 0x29, 0x43, + 0x83, 0x1f, 0xc7, 0x9a, 0xbb, 0x52, 0x75, 0x2f, 0x43, 0x63, 0xc0, 0xf2, 0x8c, 0xe4, 0x51, 0xac, + 0x56, 0x43, 0x71, 0xbe, 0x8b, 0x05, 0x31, 0x65, 0x0b, 0xb8, 0xc3, 0xad, 0x8c, 0x65, 0xe3, 0x63, + 0x89, 0x05, 0xf1, 0x7f, 0x9a, 0xdc, 0xbf, 0xae, 0xc0, 0x01, 0xfd, 0x94, 0x77, 0x16, 0xda, 0x03, + 0x79, 0x6e, 0x2c, 0x7a, 0x57, 0x66, 0xa0, 0x07, 0x00, 0x83, 0xa1, 0x43, 0xdc, 0x90, 0x9d, 0x33, + 0x54, 0x32, 0xb7, 0xaf, 0x99, 0x87, 0xbe, 0xdd, 0x45, 0xc9, 0x86, 0x15, 0x08, 0x74, 0x13, 0xea, + 0xc1, 0xc0, 0x1b, 0x71, 0x37, 0x37, 0xa3, 0xc4, 0x33, 0xf4, 0x6a, 0xcf, 0xef, 0x84, 0x5b, 0x7c, + 0x89, 0x3c, 0x3f, 0x72, 0xd6, 0x28, 0x03, 0xe6, 0x7c, 0xe6, 0xcf, 0x95, 0x01, 0x62, 0x6c, 0x74, + 0x42, 0x6e, 0x49, 0x56, 0xac, 0xed, 0xa8, 0x01, 0x6a, 0x96, 0x42, 0xb1, 0x6a, 0x85, 0x5b, 0xc2, + 0x39, 0xab, 0x59, 0x08, 0x41, 0xcd, 0xa5, 0xcc, 0xfc, 0xca, 0x02, 0xfb, 0x8d, 0xce, 0xc2, 0xa1, + 0xc0, 0xd9, 0x74, 0xad, 0x70, 0xc7, 0x27, 0x8f, 0x89, 0xef, 0x6c, 0x38, 0xc4, 0x66, 0x75, 0x6e, + 0xe1, 0x74, 0x81, 0xf9, 0x26, 0x1c, 0x4a, 0x1f, 0x6b, 0x8f, 0xed, 0x59, 0xf3, 0x27, 0xda, 0xd0, + 0xe0, 0x11, 0x0b, 0xf3, 0x5f, 0x2b, 0x52, 0xd9, 0xcd, 0x3f, 0x2e, 0x43, 0x9d, 0x9f, 0xdc, 0x26, + 0x5d, 0xdb, 0x6d, 0x55, 0xd1, 0xab, 0x19, 0xdb, 0xf9, 0xac, 0x93, 0xec, 0xee, 0x5d, 0xb2, 0xf7, + 0x98, 0x4e, 0x60, 0x52, 0xfb, 0x73, 0x9d, 0xc4, 0x1d, 0x68, 0x45, 0xc4, 0xd4, 0xe5, 0x3c, 0x21, + 0x7b, 0x42, 0x38, 0xfd, 0x89, 0xce, 0x8a, 0x89, 0x50, 0xda, 0x6f, 0xd2, 0xc8, 0xb8, 0x14, 0x31, + 0x5b, 0x7e, 0x16, 0xaa, 0x6b, 0x24, 0x4c, 0x35, 0x61, 0xff, 0xb6, 0x9a, 0x5b, 0xdb, 0x45, 0xa8, + 0xf3, 0xd3, 0xf3, 0xa4, 0x0c, 0x04, 0xb5, 0x27, 0x64, 0x2f, 0x72, 0x55, 0xec, 0x77, 0x2e, 0xc8, + 0x1f, 0x55, 0x61, 0x5a, 0x3d, 0x31, 0x34, 0x97, 0x73, 0xe7, 0x76, 0x36, 0x5b, 0xc7, 0x73, 0xbb, + 0x48, 0x52, 0x77, 0xc7, 0xb0, 0x98, 0x6a, 0xb4, 0x31, 0x4f, 0x98, 0x5d, 0x68, 0x88, 0x83, 0xd8, + 0x24, 0x92, 0xa4, 0xaf, 0xa8, 0xf4, 0x77, 0xa0, 0x25, 0xcf, 0x55, 0x3f, 0xac, 0x6c, 0x1f, 0x5a, + 0xf2, 0x00, 0xf5, 0x08, 0xd4, 0x43, 0x2f, 0xb4, 0x86, 0x0c, 0xae, 0x8a, 0x79, 0x82, 0xea, 0xa5, + 0x4b, 0x9e, 0x85, 0x8b, 0xd2, 0x1d, 0x57, 0x71, 0x9c, 0xc1, 0xbd, 0x2d, 0xd9, 0xe5, 0xa5, 0x55, + 0x5e, 0x2a, 0x33, 0x62, 0x99, 0x35, 0x55, 0xe6, 0x1e, 0x34, 0xc4, 0xa9, 0xaa, 0x2c, 0x2f, 0x2b, + 0xe5, 0x68, 0x1e, 0xea, 0x9b, 0xb4, 0x5c, 0x8c, 0xfa, 0xeb, 0x09, 0xa3, 0xe7, 0xc1, 0x92, 0x45, + 0xcf, 0x0d, 0xa9, 0x1a, 0xeb, 0xc1, 0x62, 0xcc, 0x39, 0xe9, 0x10, 0xfa, 0xfc, 0x88, 0x9c, 0x1b, + 0xa1, 0x48, 0x99, 0xbf, 0x5e, 0x86, 0xb6, 0xbc, 0x93, 0x60, 0xbe, 0x9f, 0x67, 0x3c, 0xf3, 0x70, + 0xc0, 0x17, 0x54, 0xd4, 0x50, 0x23, 0x13, 0x7a, 0x21, 0x51, 0x13, 0xac, 0xd0, 0x60, 0x9d, 0xc3, + 0x7c, 0x27, 0x77, 0x50, 0xe7, 0x60, 0x3a, 0x22, 0xbd, 0x1b, 0xab, 0x9e, 0x96, 0x67, 0x9a, 0x92, + 0x3b, 0x35, 0x9d, 0x9b, 0x1b, 0x30, 0xad, 0x9e, 0x4c, 0x9a, 0x8f, 0xb3, 0xad, 0xe7, 0x26, 0x15, + 0xa3, 0x9c, 0x82, 0x56, 0x12, 0xe1, 0x97, 0xa8, 0x09, 0x31, 0x09, 0xd6, 0x18, 0xcc, 0x63, 0x50, + 0xe7, 0xf7, 0x25, 0x12, 0xc8, 0xe6, 0x2f, 0x0f, 0xa0, 0xce, 0x06, 0xc1, 0xbc, 0xc8, 0x0d, 0xe0, + 0x2c, 0x34, 0x58, 0xec, 0x2f, 0xba, 0x4d, 0x76, 0x24, 0x6b, 0xc4, 0xb0, 0xa0, 0x31, 0x17, 0x61, + 0x4a, 0x39, 0xa9, 0xa6, 0x1a, 0xcb, 0x0a, 0xa4, 0x16, 0x44, 0x49, 0x64, 0x42, 0x8b, 0xce, 0xda, + 0xc2, 0x0f, 0xd3, 0xf6, 0xcb, 0xb4, 0x79, 0x52, 0x2e, 0x3b, 0x4d, 0x71, 0x32, 0xdf, 0x97, 0xbd, + 0x24, 0xd3, 0xe6, 0x67, 0xa0, 0x2d, 0x0f, 0xb4, 0xd1, 0x03, 0x98, 0x16, 0x07, 0xda, 0x3c, 0x1e, + 0x47, 0x89, 0x67, 0x0a, 0xb4, 0xeb, 0x21, 0x79, 0x16, 0xb2, 0x33, 0xf1, 0xee, 0xc3, 0xbd, 0x11, + 0xc1, 0x1a, 0x80, 0xf9, 0x8d, 0x33, 0xac, 0xe7, 0xcd, 0x11, 0xb4, 0xe4, 0x29, 0x5e, 0x72, 0x14, + 0xae, 0x72, 0xd7, 0x58, 0x29, 0x3c, 0x82, 0xe6, 0xfc, 0xd4, 0x01, 0x33, 0x0f, 0x6a, 0xbe, 0x00, + 0xd5, 0xbb, 0x64, 0x8f, 0x5a, 0x08, 0x77, 0xa4, 0xc2, 0x42, 0xb8, 0xc3, 0xec, 0x43, 0x43, 0x9c, + 0xa6, 0x27, 0xe5, 0x9d, 0x83, 0xc6, 0x06, 0x3f, 0xa0, 0x2f, 0x70, 0x99, 0x82, 0xcc, 0xbc, 0x09, + 0x53, 0xea, 0x19, 0x7a, 0x12, 0xef, 0x04, 0x4c, 0x0d, 0x94, 0x53, 0x7a, 0x3e, 0x0c, 0x6a, 0x96, + 0x49, 0x74, 0x75, 0x4c, 0x21, 0x2c, 0x67, 0xea, 0xe1, 0xcb, 0x99, 0xdd, 0x3e, 0x46, 0x1b, 0xef, + 0xc2, 0xc1, 0xe4, 0x61, 0x79, 0x52, 0xd2, 0x19, 0x38, 0xb8, 0x9e, 0x38, 0x9a, 0xe7, 0x3e, 0x30, + 0x99, 0x6d, 0xf6, 0xa1, 0xce, 0x0f, 0x33, 0x93, 0x10, 0xe7, 0xa1, 0x6e, 0xb1, 0xc3, 0xd2, 0x0a, + 0x5b, 0x6f, 0x98, 0x99, 0xb5, 0x64, 0xac, 0x98, 0x13, 0x9a, 0x0e, 0x1c, 0xd0, 0xcf, 0x47, 0x93, + 0x90, 0x3d, 0x38, 0xb0, 0xab, 0x9d, 0xc3, 0x72, 0xe8, 0xb9, 0x4c, 0x68, 0x0d, 0x0a, 0xeb, 0x8c, + 0xe6, 0x57, 0x1b, 0x50, 0x63, 0x07, 0xfc, 0x49, 0x11, 0x57, 0xa0, 0x16, 0x92, 0x67, 0xd1, 0x62, + 0x79, 0x6e, 0xec, 0x6d, 0x01, 0x1e, 0x65, 0x66, 0xf4, 0xe8, 0xe3, 0x74, 0x65, 0xbf, 0x37, 0x8c, + 0x36, 0x91, 0xaf, 0x8c, 0x67, 0x5c, 0xa3, 0xa4, 0x98, 0x73, 0x50, 0x56, 0x66, 0x0b, 0xe2, 0x42, + 0x4a, 0x01, 0x2b, 0x33, 0x42, 0xcc, 0x39, 0xd0, 0x4d, 0x68, 0x0e, 0xb6, 0xc8, 0xe0, 0x09, 0xb1, + 0xc5, 0x4d, 0x94, 0x53, 0xe3, 0x99, 0x17, 0x39, 0x31, 0x8e, 0xb8, 0xa8, 0xec, 0x01, 0x1b, 0xdd, + 0xc6, 0x24, 0xb2, 0xd9, 0x88, 0x63, 0xce, 0x81, 0x96, 0xa1, 0xed, 0x0c, 0x3c, 0x77, 0x79, 0xdb, + 0xfb, 0x9c, 0x23, 0xae, 0x9c, 0xbc, 0x3a, 0x9e, 0xbd, 0x1f, 0x91, 0xe3, 0x98, 0x33, 0x82, 0xe9, + 0x6f, 0xd3, 0xad, 0x6a, 0x6b, 0x52, 0x18, 0x46, 0x8e, 0x63, 0x4e, 0x73, 0x56, 0x8c, 0x67, 0xb6, + 0x91, 0xdf, 0x86, 0x3a, 0xeb, 0x72, 0x74, 0x5d, 0x2d, 0x9e, 0x51, 0x24, 0xe5, 0x7a, 0x2c, 0x31, + 0x54, 0x12, 0x87, 0xf5, 0xbf, 0x8e, 0x33, 0x35, 0x09, 0x8e, 0x18, 0x37, 0x8e, 0xf3, 0x12, 0x34, + 0xc5, 0x50, 0xe8, 0x15, 0x6e, 0x45, 0x04, 0x2f, 0x42, 0x9d, 0x1b, 0x66, 0x76, 0x7b, 0x5e, 0x86, + 0xb6, 0xec, 0xcc, 0xf1, 0x24, 0xac, 0x77, 0x72, 0x48, 0xbe, 0x59, 0x81, 0x3a, 0xbf, 0xe8, 0x90, + 0x76, 0xb5, 0xaa, 0x15, 0xbc, 0x32, 0xfe, 0xde, 0x84, 0x6a, 0x06, 0xb7, 0xd9, 0x8e, 0x91, 0xae, + 0xef, 0xe5, 0xe5, 0xe5, 0x33, 0x05, 0xdc, 0xab, 0x11, 0x3d, 0x8e, 0x59, 0x0b, 0x86, 0xf3, 0x01, + 0xb4, 0x25, 0x17, 0x5a, 0xd0, 0x87, 0xf4, 0xec, 0xd8, 0xa1, 0x48, 0x8a, 0x14, 0x80, 0xbf, 0x50, + 0x86, 0xea, 0x92, 0xb3, 0x9b, 0xea, 0x87, 0xb7, 0x22, 0xab, 0x2e, 0x72, 0x07, 0x4b, 0xce, 0xae, + 0x66, 0xd4, 0xe6, 0x72, 0xa4, 0x71, 0xef, 0xe8, 0xd5, 0x3b, 0x3d, 0x7e, 0x05, 0x16, 0xc3, 0xf0, + 0x8a, 0xfd, 0x74, 0x13, 0x6a, 0xec, 0x0e, 0x51, 0x96, 0x9f, 0xda, 0x1b, 0x15, 0x57, 0x8c, 0x9d, + 0x52, 0xb0, 0x09, 0x97, 0xd1, 0x73, 0x3f, 0x65, 0x85, 0xc5, 0x7e, 0x8a, 0x1f, 0xba, 0xa8, 0xc1, + 0x88, 0x2b, 0x50, 0xdb, 0x76, 0xc4, 0x66, 0xad, 0x50, 0xe4, 0x7d, 0x67, 0x9b, 0x60, 0x46, 0x4f, + 0xf9, 0xb6, 0xac, 0x60, 0x4b, 0x78, 0xa8, 0x02, 0xbe, 0x9e, 0x15, 0x6c, 0x61, 0x46, 0x4f, 0xf9, + 0xd8, 0xe6, 0xb0, 0x31, 0x09, 0x1f, 0xdd, 0x70, 0x8a, 0x0d, 0xe4, 0x15, 0xa8, 0x05, 0xce, 0x17, + 0x88, 0xf0, 0x49, 0x05, 0x7c, 0x6b, 0xce, 0x17, 0x08, 0x66, 0xf4, 0xb1, 0x0b, 0x6f, 0x4d, 0xd6, + 0x35, 0x8a, 0x0b, 0x7f, 0x08, 0x33, 0xa1, 0x76, 0x12, 0x2e, 0x2e, 0xb2, 0x9d, 0x2d, 0x18, 0x17, + 0x8d, 0x07, 0x27, 0x30, 0xa8, 0x11, 0xb0, 0x7d, 0x74, 0xb6, 0x11, 0xbc, 0x08, 0xf5, 0x4f, 0x3a, + 0x76, 0xb8, 0xa5, 0x17, 0xd7, 0x35, 0x97, 0x47, 0x87, 0x6d, 0x5f, 0x2e, 0x4f, 0x1d, 0x75, 0x8e, + 0xb3, 0x04, 0x35, 0xaa, 0x3e, 0xfb, 0xd3, 0xe3, 0x58, 0xeb, 0x3e, 0x94, 0x03, 0x56, 0x3b, 0x9a, + 0xe3, 0xcc, 0x42, 0x8d, 0x6a, 0x48, 0x4e, 0x97, 0xcc, 0x42, 0x8d, 0xea, 0x5d, 0x7e, 0x29, 0x1d, + 0x6d, 0xbd, 0xb4, 0x1a, 0x95, 0x9e, 0x86, 0x19, 0x7d, 0x38, 0x72, 0x50, 0xfe, 0xb0, 0x09, 0x35, + 0x76, 0x21, 0x2f, 0x69, 0x91, 0x9f, 0x80, 0x03, 0x7c, 0xfc, 0x16, 0xc4, 0x12, 0xbc, 0x92, 0x79, + 0x0c, 0xa0, 0x5f, 0xf3, 0x13, 0x2a, 0x20, 0x58, 0xb0, 0x8e, 0x30, 0xf9, 0xa2, 0x82, 0x41, 0x69, + 0x1a, 0xf9, 0x8e, 0x5c, 0xbc, 0xd6, 0x0a, 0x6e, 0x83, 0x32, 0x5e, 0xbe, 0x04, 0x8e, 0x56, 0xb2, + 0x68, 0x01, 0x5a, 0x74, 0x6a, 0xa5, 0xdd, 0x25, 0xcc, 0xf6, 0xf4, 0x78, 0xfe, 0xbe, 0xa0, 0xc6, + 0x92, 0x8f, 0x4e, 0xec, 0x03, 0xcb, 0xb7, 0x59, 0xad, 0x84, 0x0d, 0xbf, 0x3a, 0x1e, 0x64, 0x31, + 0x22, 0xc7, 0x31, 0x27, 0xba, 0x0b, 0x53, 0x36, 0x91, 0x71, 0x02, 0x61, 0xd4, 0x1f, 0x1b, 0x0f, + 0xb4, 0x14, 0x33, 0x60, 0x95, 0x9b, 0xd6, 0x29, 0xda, 0x1b, 0x06, 0x85, 0x8b, 0x0d, 0x06, 0x15, + 0xdf, 0xba, 0x8f, 0x39, 0xcd, 0x53, 0x70, 0x40, 0x1b, 0xb7, 0x8f, 0x74, 0xd5, 0xa1, 0x8e, 0x25, + 0xc7, 0xb9, 0x2a, 0xb7, 0x28, 0x6f, 0xe8, 0xcb, 0x8e, 0xdc, 0x1d, 0x89, 0x60, 0xbc, 0x07, 0xad, + 0x68, 0x60, 0xd0, 0x2d, 0xbd, 0x0e, 0xaf, 0x15, 0xd7, 0x41, 0x8e, 0xa9, 0x40, 0x5b, 0x81, 0xb6, + 0x1c, 0x21, 0x34, 0xaf, 0xc3, 0xbd, 0x5e, 0x0c, 0x17, 0x8f, 0xae, 0xc0, 0xc3, 0x30, 0xa5, 0x0c, + 0x14, 0x5a, 0xd4, 0x11, 0xdf, 0x28, 0x46, 0x54, 0x87, 0x39, 0x5e, 0xf5, 0xc8, 0x11, 0x53, 0x47, + 0xa5, 0x1a, 0x8f, 0xca, 0x6f, 0x37, 0xa1, 0x25, 0x2f, 0xc1, 0x66, 0xec, 0x31, 0x77, 0xfc, 0x61, + 0xe1, 0x1e, 0x33, 0xe2, 0xef, 0x3e, 0xf2, 0x87, 0x98, 0x72, 0xd0, 0x21, 0x0e, 0x9d, 0x50, 0x9a, + 0xea, 0xab, 0xc5, 0xac, 0x0f, 0x29, 0x39, 0xe6, 0x5c, 0xe8, 0x81, 0xae, 0xe5, 0xb5, 0x31, 0x97, + 0xa4, 0x34, 0x90, 0x5c, 0x4d, 0xef, 0x43, 0xdb, 0xa1, 0x4b, 0xbf, 0x5e, 0x3c, 0xf3, 0xbe, 0x5e, + 0x0c, 0xd7, 0x8f, 0x58, 0x70, 0xcc, 0x4d, 0xeb, 0xb6, 0x61, 0xed, 0x52, 0xbb, 0x66, 0x60, 0x8d, + 0x49, 0xeb, 0x76, 0x3b, 0x66, 0xc2, 0x2a, 0x02, 0xba, 0x26, 0xd6, 0x2e, 0xcd, 0x02, 0xcf, 0x12, + 0x77, 0x55, 0xbc, 0x7e, 0x79, 0x2f, 0x35, 0xd3, 0x72, 0x33, 0x3e, 0x3f, 0x01, 0xca, 0xd8, 0xd9, + 0x96, 0x8e, 0x20, 0x5f, 0x19, 0xb5, 0x27, 0x1d, 0x41, 0x75, 0x75, 0x64, 0xbe, 0x00, 0xd5, 0x47, + 0xfe, 0x30, 0x7f, 0xae, 0x66, 0xc3, 0x9d, 0x53, 0xfc, 0x8a, 0x6e, 0x09, 0xf9, 0x0b, 0x7a, 0x39, + 0x26, 0xb9, 0x38, 0x4a, 0xa7, 0xe7, 0x10, 0x5d, 0x17, 0x13, 0xfa, 0x65, 0xdd, 0xde, 0x5e, 0x4a, + 0xd8, 0x1b, 0xb5, 0xb0, 0x55, 0x9f, 0xf0, 0x7b, 0x80, 0xca, 0x4c, 0x3e, 0xe9, 0x3c, 0x79, 0x27, + 0x5a, 0x7f, 0xec, 0xcb, 0x53, 0x24, 0xfb, 0x96, 0x63, 0x7d, 0xbd, 0x0c, 0x2d, 0x79, 0xc7, 0x39, + 0x1d, 0x9d, 0x6f, 0x39, 0x41, 0x8f, 0x58, 0x36, 0xf1, 0x85, 0xdd, 0xbe, 0x56, 0x78, 0x79, 0xba, + 0xdb, 0x17, 0x1c, 0x58, 0xf2, 0x9a, 0x27, 0xa0, 0x15, 0xe5, 0xe6, 0x6c, 0xca, 0xbe, 0x57, 0x81, + 0x86, 0xb8, 0x1d, 0x9d, 0xac, 0xc4, 0x0d, 0x68, 0x0c, 0xad, 0x3d, 0x6f, 0x27, 0xda, 0x32, 0x9d, + 0x2e, 0xb8, 0x70, 0xdd, 0xbd, 0xc7, 0xa8, 0xb1, 0xe0, 0x42, 0x6f, 0x43, 0x7d, 0xe8, 0x6c, 0x3b, + 0xa1, 0x70, 0x1f, 0xa7, 0x0a, 0xd9, 0xd9, 0x3d, 0x2a, 0xce, 0x43, 0x85, 0xb3, 0x4b, 0x91, 0xd1, + 0x27, 0x2d, 0x85, 0xc2, 0x1f, 0x33, 0x6a, 0x2c, 0xb8, 0xcc, 0x3b, 0xd0, 0xe0, 0xd5, 0xd9, 0xdf, + 0x24, 0xa1, 0xb7, 0x24, 0xd6, 0x74, 0x56, 0xb7, 0x9c, 0x55, 0xe9, 0x71, 0x68, 0x70, 0xe1, 0x39, + 0x5a, 0xf3, 0xdd, 0xe7, 0xd9, 0x7e, 0x67, 0x68, 0xde, 0x8b, 0x4f, 0x21, 0x3f, 0xfc, 0x59, 0x86, + 0xf9, 0x10, 0x0e, 0x2e, 0x59, 0xa1, 0xb5, 0x6e, 0x05, 0x04, 0x93, 0x81, 0xe7, 0xdb, 0x99, 0xa8, + 0x3e, 0x2f, 0x12, 0x11, 0xea, 0x7c, 0x54, 0x41, 0xf7, 0xe3, 0xd0, 0xe1, 0x7f, 0x9d, 0xd0, 0xe1, + 0xef, 0xd4, 0x72, 0xe2, 0x79, 0x93, 0x44, 0x32, 0xa8, 0xc2, 0xa5, 0x02, 0x7a, 0xd7, 0xf4, 0xb5, + 0xf7, 0xc9, 0x02, 0x4e, 0x6d, 0xf1, 0x7d, 0x4d, 0x8f, 0xe8, 0x15, 0xf1, 0x6a, 0x21, 0xbd, 0x5b, + 0xc9, 0x90, 0xde, 0xe9, 0x02, 0xee, 0x54, 0x4c, 0xef, 0x9a, 0x1e, 0xd3, 0x2b, 0x92, 0xae, 0x06, + 0xf5, 0xfe, 0x87, 0x85, 0xd1, 0x7e, 0x31, 0x27, 0xec, 0xf3, 0x71, 0x3d, 0xec, 0x33, 0x46, 0x6b, + 0x7e, 0x54, 0x71, 0x9f, 0x5f, 0x6a, 0xe4, 0xc4, 0x7d, 0xae, 0x6a, 0x71, 0x9f, 0x31, 0x35, 0x4b, + 0x06, 0x7e, 0xae, 0xe9, 0x81, 0x9f, 0x93, 0x05, 0x9c, 0x5a, 0xe4, 0xe7, 0xaa, 0x16, 0xf9, 0x29, + 0x12, 0xaa, 0x84, 0x7e, 0xae, 0x6a, 0xa1, 0x9f, 0x22, 0x46, 0x25, 0xf6, 0x73, 0x55, 0x8b, 0xfd, + 0x14, 0x31, 0x2a, 0xc1, 0x9f, 0xab, 0x5a, 0xf0, 0xa7, 0x88, 0x51, 0x89, 0xfe, 0x5c, 0xd3, 0xa3, + 0x3f, 0xc5, 0xfd, 0xa3, 0x0c, 0xfa, 0x8f, 0x03, 0x35, 0xff, 0x81, 0x81, 0x9a, 0x9f, 0xaa, 0xe6, + 0x04, 0x60, 0x70, 0x76, 0x00, 0xe6, 0x6c, 0xfe, 0x48, 0x16, 0x47, 0x60, 0x26, 0x9f, 0x05, 0xd2, + 0x21, 0x98, 0xeb, 0x89, 0x10, 0xcc, 0xa9, 0x02, 0x66, 0x3d, 0x06, 0xf3, 0xdf, 0x26, 0xc8, 0xf0, + 0x9b, 0x8d, 0x31, 0xfb, 0xe9, 0xb7, 0xd4, 0xfd, 0xf4, 0x98, 0x99, 0x2c, 0xbd, 0xa1, 0xbe, 0xa1, + 0x6f, 0xa8, 0xcf, 0x4c, 0xc0, 0xab, 0xed, 0xa8, 0x57, 0xb3, 0x76, 0xd4, 0xdd, 0x09, 0x50, 0x72, + 0xb7, 0xd4, 0x77, 0xd2, 0x5b, 0xea, 0xb3, 0x13, 0xe0, 0x65, 0xee, 0xa9, 0x57, 0xb3, 0xf6, 0xd4, + 0x93, 0xd4, 0x2e, 0x77, 0x53, 0xfd, 0xb6, 0xb6, 0xa9, 0x7e, 0x75, 0x92, 0xee, 0x8a, 0x27, 0x87, + 0x4f, 0xe5, 0xec, 0xaa, 0xdf, 0x9c, 0x04, 0x66, 0x7c, 0x10, 0xfb, 0xc7, 0xfb, 0x62, 0x5d, 0xcc, + 0x6f, 0xbc, 0x04, 0xad, 0xe8, 0xa2, 0x8d, 0xf9, 0x79, 0x68, 0x46, 0x9f, 0xc4, 0x66, 0x5c, 0xf9, + 0x15, 0x9b, 0x3a, 0xbe, 0x7a, 0x16, 0x29, 0x74, 0x03, 0x6a, 0xf4, 0x97, 0x30, 0x8b, 0xd7, 0x26, + 0xbb, 0xd0, 0x43, 0x85, 0x60, 0xc6, 0x67, 0xfe, 0xcb, 0x11, 0x00, 0xe5, 0x4b, 0xc1, 0x49, 0xc5, + 0xbe, 0x4b, 0x9d, 0xd9, 0x30, 0x24, 0x3e, 0xbb, 0xc8, 0x55, 0xf8, 0x25, 0x5d, 0x2c, 0x81, 0x6a, + 0x4b, 0x48, 0x7c, 0x2c, 0xd8, 0xd1, 0x7d, 0x68, 0x45, 0x81, 0x54, 0x76, 0x77, 0x3a, 0x4f, 0xc9, + 0xb2, 0xa0, 0xa2, 0xd0, 0x1e, 0x96, 0x10, 0x68, 0x1e, 0x6a, 0x81, 0xe7, 0x87, 0xe2, 0xa2, 0xf5, + 0x1b, 0x13, 0x43, 0xad, 0x79, 0x7e, 0x88, 0x19, 0x2b, 0x6f, 0x9a, 0xf2, 0x10, 0xc3, 0x7e, 0x9a, + 0xa6, 0x79, 0xec, 0x7f, 0xae, 0x4a, 0x1f, 0xba, 0x28, 0xac, 0x91, 0xeb, 0xd0, 0xb9, 0xc9, 0x47, + 0x49, 0xb5, 0xca, 0xe8, 0x76, 0x64, 0x45, 0xb9, 0x1d, 0xf9, 0x1a, 0x74, 0x06, 0xde, 0x2e, 0xf1, + 0x71, 0x7c, 0xc5, 0x49, 0xdc, 0x42, 0x4b, 0xe5, 0x23, 0x13, 0x5a, 0x5b, 0x8e, 0x4d, 0xfa, 0x03, + 0xe1, 0xff, 0x5a, 0x58, 0xa6, 0xd1, 0x5d, 0x68, 0xb1, 0x18, 0x7b, 0x14, 0xe1, 0xdf, 0x5f, 0x25, + 0x79, 0xa8, 0x3f, 0x02, 0xa0, 0x82, 0x98, 0xf0, 0xdb, 0x4e, 0xc8, 0xfa, 0xb0, 0x85, 0x65, 0x9a, + 0x56, 0x98, 0xdd, 0x23, 0x53, 0x2b, 0xdc, 0xe4, 0x15, 0x4e, 0xe6, 0xa3, 0x4b, 0xf0, 0x1c, 0xcb, + 0x4b, 0x6c, 0x31, 0x79, 0xa8, 0xbe, 0x85, 0xb3, 0x0b, 0xd9, 0xbd, 0x39, 0x6b, 0x93, 0x7f, 0x76, + 0xc5, 0x82, 0x77, 0x75, 0x1c, 0x67, 0xa0, 0xb3, 0x70, 0xc8, 0x26, 0x1b, 0xd6, 0xce, 0x30, 0x7c, + 0x48, 0xb6, 0x47, 0x43, 0x2b, 0x24, 0x7d, 0x9b, 0xbd, 0x05, 0xd1, 0xc6, 0xe9, 0x02, 0x74, 0x1e, + 0x0e, 0x8b, 0x4c, 0x6e, 0xc6, 0x74, 0x34, 0xfa, 0x36, 0x7b, 0x1a, 0xa1, 0x8d, 0xb3, 0x8a, 0xcc, + 0xef, 0xd6, 0xe8, 0xa0, 0x33, 0xd5, 0x7e, 0x17, 0xaa, 0x96, 0x6d, 0x8b, 0x69, 0xf3, 0xe2, 0x3e, + 0x0d, 0x44, 0x7c, 0x6f, 0x43, 0x11, 0xd0, 0xaa, 0xbc, 0x72, 0xc7, 0x27, 0xce, 0x2b, 0xfb, 0xc5, + 0x92, 0x4f, 0xd4, 0x08, 0x1c, 0x8a, 0xb8, 0xc3, 0x3f, 0xd1, 0xa8, 0xfe, 0x70, 0x88, 0xf2, 0x83, + 0x0d, 0x81, 0x83, 0xee, 0x40, 0x8d, 0xd5, 0x90, 0x4f, 0xac, 0x97, 0xf6, 0x8b, 0x77, 0x9f, 0xd7, + 0x8f, 0x61, 0x98, 0x03, 0x7e, 0xf7, 0x4d, 0xb9, 0x70, 0x59, 0xd6, 0x2f, 0x5c, 0x2e, 0x40, 0xdd, + 0x09, 0xc9, 0x76, 0xfa, 0xfe, 0xed, 0x58, 0x55, 0x15, 0x9e, 0x87, 0xb3, 0x8e, 0xbd, 0x07, 0xf8, + 0x7e, 0xee, 0x77, 0x14, 0xb7, 0xa0, 0x46, 0xd9, 0x53, 0x6b, 0xc9, 0x49, 0x04, 0x33, 0x4e, 0xf3, + 0x02, 0xd4, 0x68, 0x63, 0xc7, 0xb4, 0x4e, 0xd4, 0xa7, 0x22, 0xeb, 0xb3, 0x30, 0x05, 0x6d, 0x6f, + 0x44, 0x7c, 0x66, 0x18, 0xe6, 0x3f, 0xd5, 0x94, 0x4b, 0x71, 0x7d, 0x55, 0xc7, 0x2e, 0xef, 0xdb, + 0x73, 0xaa, 0x5a, 0x86, 0x13, 0x5a, 0xf6, 0xd6, 0xfe, 0xd1, 0x52, 0x7a, 0x86, 0x13, 0x7a, 0xf6, + 0x43, 0x60, 0xa6, 0x34, 0xed, 0x9e, 0xa6, 0x69, 0x57, 0xf6, 0x8f, 0xa8, 0xe9, 0x1a, 0x29, 0xd2, + 0xb5, 0x25, 0x5d, 0xd7, 0xba, 0x93, 0x0d, 0xb9, 0x9c, 0x9a, 0x26, 0xd0, 0xb6, 0xcf, 0xe4, 0x6a, + 0xdb, 0x82, 0xa6, 0x6d, 0xfb, 0x15, 0xfd, 0x11, 0xe9, 0xdb, 0x77, 0x6a, 0x50, 0xa3, 0xd3, 0x23, + 0x5a, 0x56, 0x75, 0xed, 0xcd, 0x7d, 0x4d, 0xad, 0xaa, 0x9e, 0xad, 0x24, 0xf4, 0xec, 0xd2, 0xfe, + 0x90, 0x52, 0x3a, 0xb6, 0x92, 0xd0, 0xb1, 0x7d, 0xe2, 0xa5, 0xf4, 0xab, 0xa7, 0xe9, 0xd7, 0x85, + 0xfd, 0xa1, 0x69, 0xba, 0x65, 0x15, 0xe9, 0xd6, 0x2d, 0x5d, 0xb7, 0x26, 0x5c, 0xbd, 0xb1, 0xb5, + 0xca, 0x04, 0x7a, 0xf5, 0x5e, 0xae, 0x5e, 0xdd, 0xd0, 0xf4, 0x6a, 0x3f, 0x62, 0x3f, 0x22, 0x9d, + 0xba, 0xc4, 0x17, 0x9d, 0xf9, 0x9f, 0xb7, 0x65, 0x2d, 0x3a, 0xcd, 0xcb, 0xd0, 0x8e, 0x9f, 0x5a, + 0xc9, 0xb8, 0x9e, 0xcf, 0xc9, 0x22, 0xa9, 0x51, 0xd2, 0xbc, 0x08, 0xed, 0xf8, 0xf9, 0x94, 0xac, + 0x4f, 0xe9, 0x58, 0xa1, 0xfc, 0xa4, 0x8a, 0xa5, 0xcc, 0x65, 0x38, 0x94, 0x7e, 0xdc, 0x21, 0x23, + 0x0e, 0xaf, 0xdc, 0x2d, 0x8f, 0xbe, 0x68, 0x51, 0xb2, 0xcc, 0xa7, 0x30, 0x93, 0x78, 0xae, 0x61, + 0xdf, 0x18, 0xe8, 0xa2, 0xb2, 0x44, 0xae, 0x26, 0x3e, 0xd0, 0xd5, 0x6f, 0xcb, 0xc7, 0x0b, 0x61, + 0x73, 0x09, 0x66, 0x0a, 0x2a, 0x3f, 0xc9, 0x65, 0xf9, 0xcf, 0xc2, 0xd4, 0xb8, 0xba, 0x7f, 0x04, + 0x97, 0xf9, 0x43, 0xe8, 0xa4, 0x9e, 0x9a, 0x49, 0x8a, 0x59, 0x05, 0xd8, 0x94, 0x34, 0x42, 0x69, + 0xcf, 0xef, 0xe3, 0xd3, 0x05, 0xc6, 0x87, 0x15, 0x0c, 0xf3, 0xd7, 0xca, 0x70, 0x28, 0xfd, 0xce, + 0xcc, 0xa4, 0x9b, 0x1f, 0x03, 0x9a, 0x0c, 0x4b, 0x7e, 0xf1, 0x11, 0x25, 0xd1, 0x7d, 0x98, 0x0e, + 0x86, 0xce, 0x80, 0x2c, 0x6e, 0x59, 0xee, 0x26, 0x09, 0xc4, 0x8e, 0xa6, 0xe0, 0xad, 0x98, 0xb5, + 0x98, 0x03, 0x6b, 0xec, 0xe6, 0x53, 0x98, 0x52, 0x0a, 0xd1, 0x3b, 0x50, 0xf1, 0x46, 0xa9, 0x7b, + 0x8d, 0xf9, 0x98, 0x0f, 0x22, 0x7b, 0xc3, 0x15, 0x6f, 0x94, 0x36, 0x49, 0xd5, 0x7c, 0xab, 0x9a, + 0xf9, 0x9a, 0x77, 0xe1, 0x50, 0xfa, 0x29, 0x97, 0x64, 0xf7, 0x9c, 0x4e, 0x45, 0x09, 0x78, 0x37, + 0x25, 0xb7, 0xfc, 0x57, 0xe1, 0x60, 0xf2, 0x81, 0x96, 0x8c, 0xaf, 0x71, 0xe2, 0x8f, 0x9a, 0xa2, + 0x70, 0xfd, 0xdc, 0x4f, 0x96, 0x61, 0x46, 0x6f, 0x08, 0x3a, 0x0a, 0x48, 0xcf, 0x59, 0xf1, 0x5c, + 0xd2, 0x29, 0xa1, 0xe7, 0xe0, 0x90, 0x9e, 0x3f, 0x6f, 0xdb, 0x9d, 0x72, 0x9a, 0x9c, 0xba, 0xad, + 0x4e, 0x05, 0x19, 0x70, 0x24, 0xd1, 0x43, 0xcc, 0x89, 0x76, 0xaa, 0xe8, 0x79, 0x78, 0x2e, 0x59, + 0x32, 0x1a, 0x5a, 0x03, 0xd2, 0xa9, 0x99, 0x3f, 0xa8, 0x40, 0xed, 0x51, 0x40, 0x7c, 0xf3, 0x1f, + 0x2b, 0xd1, 0x57, 0x1a, 0x6f, 0x41, 0x8d, 0xbd, 0x9d, 0xa2, 0x7c, 0x56, 0x59, 0x4e, 0x7c, 0x56, + 0xa9, 0x7d, 0x9a, 0x17, 0x7f, 0x56, 0xf9, 0x16, 0xd4, 0xd8, 0x6b, 0x29, 0xfb, 0xe7, 0xfc, 0x5a, + 0x19, 0xda, 0xf1, 0xcb, 0x25, 0xfb, 0xe6, 0x57, 0xbf, 0x0a, 0xa9, 0xe8, 0x5f, 0x85, 0xbc, 0x06, + 0x75, 0x9f, 0x7d, 0xbf, 0xc1, 0xbd, 0x4c, 0xf2, 0x5b, 0x13, 0x26, 0x10, 0x73, 0x12, 0x93, 0xc0, + 0x94, 0xfa, 0x2e, 0xcb, 0xfe, 0xab, 0x71, 0x52, 0x3c, 0xca, 0xd6, 0xb7, 0x83, 0x79, 0xdf, 0xb7, + 0xf6, 0x84, 0x62, 0xea, 0x99, 0xe6, 0x2c, 0xd4, 0x56, 0x1d, 0x77, 0x33, 0xfb, 0x6b, 0x56, 0xf3, + 0x77, 0xcb, 0xd0, 0x14, 0x97, 0x77, 0xcd, 0xab, 0x50, 0x5d, 0x21, 0x4f, 0x69, 0x45, 0xc4, 0xb5, + 0xe1, 0x54, 0x45, 0xee, 0xb3, 0x56, 0x08, 0x7a, 0x1c, 0x91, 0x99, 0xd7, 0xe4, 0x34, 0xb9, 0x7f, + 0xde, 0xb7, 0xa0, 0xc6, 0x9e, 0x53, 0xd9, 0x3f, 0xe7, 0xef, 0xb5, 0xa0, 0xc1, 0x3f, 0x09, 0x35, + 0x7f, 0xab, 0x05, 0x0d, 0xfe, 0xc4, 0x0a, 0xba, 0x01, 0xcd, 0x60, 0x67, 0x7b, 0xdb, 0xf2, 0xf7, + 0x8c, 0xec, 0x87, 0x83, 0xb5, 0x17, 0x59, 0xba, 0x6b, 0x9c, 0x16, 0x47, 0x4c, 0xe8, 0x32, 0xd4, + 0x06, 0xd6, 0x06, 0x49, 0x1d, 0xe7, 0x66, 0x31, 0x2f, 0x5a, 0x1b, 0x04, 0x33, 0x72, 0x74, 0x0b, + 0x5a, 0x62, 0x58, 0x02, 0x11, 0xcf, 0x19, 0x2f, 0x37, 0x1a, 0x4c, 0xc9, 0x65, 0xde, 0x81, 0xa6, + 0xa8, 0x0c, 0xba, 0x29, 0x3f, 0x88, 0x4d, 0x46, 0x9e, 0x33, 0x9b, 0x20, 0xdf, 0xde, 0x90, 0x9f, + 0xc6, 0xfe, 0x49, 0x05, 0x6a, 0xb4, 0x72, 0x1f, 0x1a, 0x09, 0x1d, 0x07, 0x18, 0x5a, 0x41, 0xb8, + 0xba, 0x33, 0x1c, 0x12, 0x5b, 0x7c, 0x61, 0xa7, 0xe4, 0xa0, 0x33, 0x70, 0x90, 0xa7, 0x82, 0xad, + 0xb5, 0x9d, 0xc1, 0x80, 0xc8, 0x2f, 0x4b, 0x93, 0xd9, 0x68, 0x1e, 0xea, 0xec, 0xd1, 0x4f, 0xb1, + 0x2a, 0x7c, 0xbd, 0xb0, 0x67, 0xbb, 0xab, 0x8e, 0x2b, 0x6a, 0xc3, 0x39, 0x4d, 0x0f, 0xda, 0x32, + 0x8f, 0x1a, 0xe1, 0xc8, 0x71, 0x5d, 0xc7, 0xdd, 0x14, 0x1a, 0x1d, 0x25, 0xe9, 0xa4, 0x43, 0x7f, + 0x8a, 0xfa, 0xd6, 0xb1, 0x48, 0xd1, 0xfc, 0x0d, 0xcb, 0x19, 0x8a, 0x2a, 0xd6, 0xb1, 0x48, 0x51, + 0xa4, 0x1d, 0xf1, 0x30, 0x4d, 0x8d, 0x35, 0x30, 0x4a, 0x9a, 0x1f, 0x94, 0xe5, 0x57, 0xe1, 0x59, + 0x1f, 0x67, 0xa6, 0x62, 0x49, 0xb3, 0x6a, 0x40, 0x9b, 0x4f, 0x08, 0x4a, 0x88, 0xfa, 0x28, 0x34, + 0x3c, 0x77, 0xe8, 0xb8, 0x44, 0xc4, 0x8e, 0x44, 0x2a, 0xd1, 0xc7, 0xf5, 0x54, 0x1f, 0x8b, 0xf2, + 0x65, 0xdb, 0xa1, 0x55, 0x6c, 0xc4, 0xe5, 0x3c, 0x07, 0x5d, 0x87, 0xa6, 0x4d, 0x76, 0x9d, 0x01, + 0x09, 0x8c, 0x26, 0x53, 0xbd, 0x57, 0xc6, 0xf6, 0xed, 0x12, 0xa3, 0xc5, 0x11, 0x8f, 0x19, 0x42, + 0x83, 0x67, 0xc9, 0x26, 0x95, 0x95, 0x26, 0xc5, 0x95, 0xae, 0x8c, 0xa9, 0x74, 0xb5, 0xa0, 0xd2, + 0xb5, 0x64, 0xa5, 0xe7, 0xbe, 0x04, 0x10, 0xab, 0x1b, 0x9a, 0x82, 0xe6, 0x23, 0xf7, 0x89, 0xeb, + 0x3d, 0x75, 0x3b, 0x25, 0x9a, 0x78, 0xb0, 0xb1, 0x41, 0xa5, 0x74, 0xca, 0x34, 0x41, 0xe9, 0x1c, + 0x77, 0xb3, 0x53, 0x41, 0x00, 0x0d, 0x9a, 0x20, 0x76, 0xa7, 0x4a, 0x7f, 0xdf, 0x66, 0xe3, 0xd7, + 0xa9, 0xa1, 0x63, 0x70, 0xb8, 0xef, 0x0e, 0xbc, 0xed, 0x91, 0x15, 0x3a, 0xeb, 0x43, 0xf2, 0x98, + 0xf8, 0x81, 0xe3, 0xb9, 0x9d, 0x3a, 0x9d, 0xbd, 0x56, 0x48, 0xf8, 0xd4, 0xf3, 0x9f, 0xac, 0x10, + 0x62, 0x8b, 0x37, 0x5f, 0x3a, 0x0d, 0xf3, 0xdf, 0xca, 0xfc, 0x34, 0xd8, 0xbc, 0x05, 0xd3, 0xda, + 0x0b, 0x4a, 0x46, 0xfc, 0x9e, 0x7b, 0xe2, 0x39, 0xf7, 0xa3, 0x2c, 0x5e, 0x4b, 0xe2, 0xa5, 0x0c, + 0x4f, 0x99, 0xb7, 0x01, 0x94, 0x77, 0x93, 0x8e, 0x03, 0xac, 0xef, 0x85, 0x24, 0xe0, 0x6f, 0x26, + 0x51, 0x88, 0x1a, 0x56, 0x72, 0x54, 0xfc, 0x8a, 0x86, 0x6f, 0x5e, 0x01, 0x50, 0x5e, 0x4d, 0xa2, + 0x76, 0x45, 0x53, 0x0b, 0x49, 0xb0, 0x64, 0xb6, 0xd9, 0x15, 0x2d, 0x88, 0xde, 0x47, 0x8a, 0x6a, + 0xc0, 0xa3, 0x77, 0x6a, 0x0d, 0x58, 0x8e, 0xb9, 0x0c, 0x10, 0x3f, 0x11, 0x64, 0x5e, 0x95, 0xae, + 0xfb, 0x0d, 0xa8, 0xd9, 0x56, 0x68, 0x09, 0xaf, 0xf9, 0x7c, 0x62, 0xe6, 0x8a, 0x59, 0x30, 0x23, + 0x33, 0x7f, 0xb5, 0x0c, 0xd3, 0xea, 0x73, 0x48, 0xe6, 0xbb, 0x50, 0x63, 0xef, 0x29, 0xdd, 0x84, + 0x69, 0xf5, 0x3d, 0xa4, 0xd4, 0xbb, 0xf7, 0x1c, 0x4f, 0x65, 0xc5, 0x1a, 0x83, 0xd9, 0x97, 0x55, + 0xfa, 0xd0, 0x50, 0xe7, 0xa1, 0x29, 0x9e, 0x57, 0x32, 0x4f, 0x41, 0x3b, 0x7e, 0x4d, 0x89, 0xfa, + 0x0e, 0x9e, 0x1f, 0x8d, 0xb2, 0x48, 0x9a, 0xff, 0x50, 0x83, 0x3a, 0x1b, 0x4e, 0xf3, 0x2b, 0x15, + 0x55, 0x43, 0xcd, 0x1f, 0x94, 0x73, 0xf7, 0x82, 0x17, 0xb5, 0xf7, 0x0b, 0x66, 0x52, 0xaf, 0x88, + 0x89, 0xc7, 0x93, 0x74, 0xc7, 0x7a, 0x05, 0x9a, 0x2e, 0xd7, 0x4c, 0xf1, 0x7c, 0xc0, 0x6c, 0x26, + 0x97, 0xd0, 0x5e, 0x1c, 0x11, 0xa3, 0x4b, 0x50, 0x27, 0xbe, 0xef, 0xf9, 0xcc, 0xa4, 0x66, 0x52, + 0xef, 0x71, 0xc5, 0x0f, 0x35, 0x2d, 0x53, 0x2a, 0xcc, 0x89, 0xd1, 0x25, 0x78, 0x2e, 0xe0, 0x56, + 0xc4, 0xd7, 0x94, 0x81, 0xf8, 0xae, 0x5a, 0x78, 0x9b, 0xec, 0x42, 0x33, 0x80, 0x83, 0xc9, 0xb7, + 0x97, 0x4c, 0x68, 0xf1, 0xb5, 0xa9, 0x34, 0x10, 0x99, 0xa6, 0x9a, 0xc7, 0x7f, 0xaf, 0xc4, 0x7e, + 0x51, 0xc9, 0xa1, 0xeb, 0x95, 0xa7, 0x0c, 0x2a, 0x3a, 0x4e, 0xe6, 0x1e, 0x52, 0xcf, 0x9c, 0xfb, + 0x44, 0x34, 0xab, 0x2b, 0xd6, 0x5e, 0x52, 0xdd, 0x40, 0x19, 0xb5, 0xa1, 0xce, 0x5a, 0xd7, 0xa9, + 0xa8, 0xbe, 0xa2, 0x9a, 0x63, 0xed, 0xb5, 0xb9, 0x8b, 0xd0, 0x14, 0xf9, 0x94, 0x7e, 0x9e, 0x77, + 0x58, 0xa7, 0x84, 0xa6, 0xa1, 0xb5, 0x46, 0x86, 0x1b, 0x3d, 0x2f, 0x08, 0x3b, 0x65, 0x74, 0x00, + 0xda, 0xcc, 0x00, 0x1f, 0xb8, 0xc3, 0xbd, 0x4e, 0x65, 0xee, 0x3d, 0x68, 0xcb, 0x6e, 0x44, 0x2d, + 0xa8, 0xad, 0xec, 0x0c, 0x87, 0x9d, 0x12, 0x5b, 0x0f, 0x87, 0x9e, 0x1f, 0x45, 0xc3, 0x97, 0x9f, + 0xd1, 0xc9, 0xad, 0x53, 0xce, 0x73, 0x41, 0x15, 0xd4, 0x81, 0x69, 0x21, 0x9c, 0xd7, 0xb9, 0x6a, + 0xfe, 0x5d, 0x19, 0xda, 0xf2, 0x69, 0x2a, 0xba, 0x18, 0x8d, 0x14, 0x2b, 0xdf, 0xf9, 0x5c, 0x4d, + 0xa8, 0x58, 0xfe, 0x4b, 0x57, 0x09, 0x35, 0x3b, 0x0d, 0x33, 0xc2, 0xcf, 0x47, 0x23, 0xce, 0x5d, + 0x75, 0x22, 0x77, 0xee, 0x8e, 0xec, 0xf5, 0x0e, 0xb3, 0xeb, 0x45, 0xcf, 0x75, 0xc9, 0x20, 0x64, + 0x7d, 0x7f, 0x10, 0xa6, 0x56, 0xbc, 0x70, 0xd5, 0x0b, 0x02, 0xda, 0x32, 0xde, 0x53, 0x71, 0x79, + 0x05, 0xcd, 0x00, 0x44, 0x17, 0xdc, 0xa8, 0x67, 0x36, 0x7f, 0xa5, 0x0c, 0x0d, 0xfe, 0x60, 0x96, + 0xf9, 0xf3, 0x65, 0x68, 0x88, 0x47, 0xb2, 0x5e, 0x83, 0x8e, 0xef, 0x51, 0xe0, 0x68, 0x17, 0xd3, + 0x5f, 0x12, 0xad, 0x4c, 0xe5, 0xd3, 0x8d, 0xb5, 0xa7, 0xa8, 0xa2, 0x58, 0x77, 0x68, 0x79, 0xe8, + 0x1a, 0x00, 0x7f, 0x84, 0xeb, 0xe1, 0x9e, 0x7c, 0x82, 0x23, 0x79, 0xaf, 0x4d, 0x3c, 0xdb, 0xc5, + 0x4e, 0x80, 0x14, 0x6a, 0x73, 0x1b, 0x0e, 0xa5, 0x5e, 0x50, 0x52, 0x82, 0x3d, 0x67, 0xe0, 0x20, + 0x51, 0x8b, 0xe4, 0x78, 0x24, 0xb3, 0xa9, 0x4a, 0x6b, 0x59, 0x42, 0xeb, 0xf5, 0xcc, 0xb9, 0x2f, + 0xc2, 0x01, 0x4c, 0x82, 0x91, 0xe7, 0x06, 0xe4, 0x47, 0xf5, 0x3f, 0x4e, 0x72, 0xff, 0x5b, 0xc9, + 0xdc, 0x77, 0xea, 0x50, 0x67, 0x2b, 0x68, 0xf3, 0x4f, 0xeb, 0x72, 0xad, 0x9f, 0xf2, 0x61, 0x17, + 0xd4, 0xcb, 0x4c, 0xaa, 0x33, 0xd2, 0x16, 0xdf, 0xfa, 0x25, 0xa6, 0xb7, 0xa1, 0x35, 0xf2, 0xbd, + 0x4d, 0x9f, 0xae, 0xd9, 0x6b, 0x89, 0xc7, 0xaf, 0x74, 0xb6, 0x55, 0x41, 0x86, 0x25, 0x83, 0xaa, + 0xeb, 0x75, 0x5d, 0xd7, 0x6f, 0x41, 0xdb, 0xf6, 0xbd, 0x11, 0xfb, 0x0c, 0x5f, 0x1c, 0x20, 0x9e, + 0xc8, 0xc1, 0x5d, 0x8a, 0xe8, 0x7a, 0x25, 0x1c, 0x33, 0x51, 0x6b, 0xe1, 0x83, 0x2d, 0xce, 0xee, + 0x5f, 0xcc, 0x61, 0xe7, 0xea, 0xd1, 0x2b, 0x61, 0x41, 0x4e, 0x19, 0xc9, 0x33, 0xc6, 0xd8, 0x1a, + 0xcb, 0xb8, 0xfc, 0x2c, 0x62, 0xe4, 0xe4, 0xe8, 0x3a, 0xb4, 0x02, 0x6b, 0x97, 0xb0, 0x17, 0xcd, + 0xdb, 0x63, 0xbb, 0x62, 0x4d, 0x90, 0xf5, 0x4a, 0x58, 0xb2, 0xd0, 0x26, 0x6f, 0x3b, 0x9b, 0x7c, + 0xb7, 0x2c, 0x9e, 0x55, 0xcf, 0x6b, 0xf2, 0xfd, 0x88, 0x8e, 0xbd, 0x81, 0x1f, 0x25, 0xe8, 0xee, + 0x8e, 0x4f, 0x0b, 0x53, 0xfc, 0x68, 0x9c, 0x25, 0xcc, 0x29, 0x68, 0xcb, 0x2e, 0x32, 0x5b, 0xd2, + 0x2a, 0x5b, 0xd0, 0xe0, 0x2d, 0x30, 0x01, 0x5a, 0x51, 0x85, 0x28, 0xb1, 0x04, 0x37, 0x57, 0xa0, + 0x15, 0x0d, 0x5a, 0xce, 0xd3, 0x1b, 0x08, 0x6a, 0xb6, 0x27, 0x96, 0x85, 0x55, 0xcc, 0x7e, 0xd3, + 0x41, 0x55, 0x9f, 0xfe, 0x6a, 0xcb, 0x77, 0xb0, 0xe6, 0xe6, 0xa3, 0x3b, 0x59, 0xd4, 0x93, 0xf2, + 0x80, 0xc3, 0x14, 0x34, 0xf1, 0x0e, 0x5b, 0xb1, 0x77, 0xca, 0x34, 0x9b, 0x6e, 0x03, 0x3b, 0x15, + 0xea, 0x94, 0x17, 0x2d, 0x77, 0x40, 0x86, 0x6c, 0x95, 0x27, 0x5d, 0x7d, 0x6d, 0xa1, 0x2d, 0xc1, + 0x17, 0x66, 0xff, 0xec, 0x83, 0xe3, 0xe5, 0x6f, 0x7f, 0x70, 0xbc, 0xfc, 0xbd, 0x0f, 0x8e, 0x97, + 0x7f, 0xe6, 0xfb, 0xc7, 0x4b, 0xdf, 0xfe, 0xfe, 0xf1, 0xd2, 0xdf, 0x7c, 0xff, 0x78, 0xe9, 0xfd, + 0xca, 0x68, 0x7d, 0xbd, 0xc1, 0xee, 0xd5, 0x5c, 0xfc, 0xf7, 0x00, 0x00, 0x00, 0xff, 0xff, 0x4a, + 0xc2, 0x5b, 0x96, 0xba, 0x68, 0x00, 0x00, } func (m *Event) Marshal() (dAtA []byte, err error) { @@ -15776,6 +15785,13 @@ func (m *EventAccountLinkChallengeClientInfo) MarshalToSizedBuffer(dAtA []byte) _ = i var l int _ = l + if len(m.Name) > 0 { + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintEvents(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x22 + } if m.SignatureVerified { i-- if m.SignatureVerified { @@ -25000,6 +25016,10 @@ func (m *EventAccountLinkChallengeClientInfo) Size() (n int) { if m.SignatureVerified { n += 2 } + l = len(m.Name) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } return n } @@ -33360,6 +33380,38 @@ func (m *EventAccountLinkChallengeClientInfo) Unmarshal(dAtA []byte) error { } } m.SignatureVerified = bool(v != 0) + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipEvents(dAtA[iNdEx:]) diff --git a/pb/protos/events.proto b/pb/protos/events.proto index a88ebfde2..c911e4998 100644 --- a/pb/protos/events.proto +++ b/pb/protos/events.proto @@ -197,6 +197,7 @@ message Event { message ClientInfo { string processName = 1; string processPath = 2; + string name = 4; bool signatureVerified = 3; } string challenge = 1; From 84b221522b015d9a12008b3233139a14250f435a Mon Sep 17 00:00:00 2001 From: Roman Khafizianov Date: Tue, 20 May 2025 19:59:06 +0200 Subject: [PATCH 131/164] GO-5629 fix applink reading --- core/wallet/applink.go | 15 +++++++++------ core/wallet/applink_test.go | 15 +++++++-------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/core/wallet/applink.go b/core/wallet/applink.go index 0e8aecd1c..948c8a803 100644 --- a/core/wallet/applink.go +++ b/core/wallet/applink.go @@ -13,6 +13,7 @@ import ( "os" "path/filepath" "strings" + "time" "github.com/anyproto/any-sync/util/crypto" @@ -83,17 +84,19 @@ func generate(dir string, accountPriv crypto.PrivKey, appName string, scope mode } appKey := base64.StdEncoding.EncodeToString(key.Bytes()) info = &AppLinkInfo{ - AppHash: fmt.Sprintf("%x", sha256.Sum256(key.Bytes())), - AppKey: appKey, - AppName: appName, - Scope: int(scope), + AppHash: fmt.Sprintf("%x", sha256.Sum256(key.Bytes())), + AppKey: appKey, + AppName: appName, + CreatedAt: time.Now().Unix(), + Scope: int(scope), } + fmt.Println("app link info", info) file, err := buildV1(key.Bytes(), accountPriv, info) if err != nil { return nil, err } - name := fmt.Sprintf("%x.json", info.AppHash) - fp, err := os.OpenFile(filepath.Join(dir, name), os.O_CREATE|os.O_EXCL|os.O_WRONLY, 0o600) + name := fmt.Sprintf("%s.json", info.AppHash) + fp, err := os.OpenFile(filepath.Join(dir, name), os.O_CREATE|os.O_EXCL|os.O_WRONLY, 0600) if err != nil { return nil, err } diff --git a/core/wallet/applink_test.go b/core/wallet/applink_test.go index 3204452a9..829519e33 100644 --- a/core/wallet/applink_test.go +++ b/core/wallet/applink_test.go @@ -18,6 +18,7 @@ import ( "github.com/anyproto/anytype-heart/pkg/lib/crypto/symmetric" "github.com/anyproto/anytype-heart/pkg/lib/crypto/symmetric/gcm" + "github.com/anyproto/anytype-heart/pkg/lib/pb/model" ) // make a reproducible test AppLinkInfo @@ -38,7 +39,6 @@ func equalInfos(a, b *AppLinkInfo) bool { // we ignore AppHash because it is filled only on read return a.AppName == b.AppName && a.CreatedAt == b.CreatedAt && - a.ExpireAt == b.ExpireAt && a.Scope == b.Scope } @@ -53,12 +53,11 @@ func TestGenerateLoad_RoundTrip_V1(t *testing.T) { // payload for v1 want := testInfo() - // ───────────────────────── v1 round-trip ───────────── - appKeyV1, err := generate(dir, pk, want) + info, err := generate(dir, pk, want.AppName, model.AccountAuthLocalApiScope(want.Scope)) if err != nil { t.Fatalf("Generate(v1): %v", err) } - gotV1, err := load(dir, appKeyV1, pk) + gotV1, err := load(dir, info.AppKey, pk) if err != nil { t.Fatalf("Load(v1): %v", err) } @@ -112,7 +111,7 @@ func TestNoDuplicateKeys_V0_V1(t *testing.T) { want := testInfo() // Generate keys for both v0 and v1 - appKeyV1, err := generate(dir, pk, want) + appKeyV1, err := generate(dir, pk, want.AppName, model.AccountAuthLocalApiScope(want.Scope)) require.NoError(t, err) appKeyV0, err := writeAppLinkFileV0(pk, dir, want) @@ -143,7 +142,7 @@ func TestList(t *testing.T) { ExpireAt: time.Now().Unix() + 3600, Scope: 1, } - appKey1, err := generate(dir, pk, info1) + info, err := generate(dir, pk, info1.AppName, model.AccountAuthLocalApiScope(info1.Scope)) require.NoError(t, err) // Create v0 entry @@ -176,7 +175,7 @@ func TestList(t *testing.T) { require.NotEmpty(t, app1Entry.AppHash, "v1 entry should have AppHash") // Also verify we can load this entry explicitly with the key - loaded, err := load(dir, appKey1, pk) + loaded, err := load(dir, info.AppKey, pk) require.NoError(t, err) require.Equal(t, info1.AppName, loaded.AppName) @@ -232,7 +231,7 @@ func TestRevoke(t *testing.T) { } // Generate the app link file - _, err = generate(dir, pk, info) + _, err = generate(dir, pk, info.AppName, model.AccountAuthLocalApiScope(info.Scope)) require.NoError(t, err) // List entries to get the app hash From 145daa65d1dc4485093be85e5332a53817a4d38b Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Tue, 20 May 2025 19:59:19 +0200 Subject: [PATCH 132/164] GO-5589: Fix lint --- core/api/service/icon.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/api/service/icon.go b/core/api/service/icon.go index 1d77930e1..6118b2c85 100644 --- a/core/api/service/icon.go +++ b/core/api/service/icon.go @@ -43,5 +43,5 @@ func GetIcon(gatewayUrl string, iconEmoji string, iconImage string, iconName str }} } - return apimodel.Icon{apimodel.NamedIcon{Format: ""}} + return apimodel.Icon{} } From c41fffd581e5a79df2f33da0c254f2d48308e420 Mon Sep 17 00:00:00 2001 From: Roman Khafizianov Date: Tue, 20 May 2025 20:02:46 +0200 Subject: [PATCH 133/164] GO-5629 remove comment --- core/wallet/applink.go | 1 - 1 file changed, 1 deletion(-) diff --git a/core/wallet/applink.go b/core/wallet/applink.go index 948c8a803..3edd5fe7f 100644 --- a/core/wallet/applink.go +++ b/core/wallet/applink.go @@ -90,7 +90,6 @@ func generate(dir string, accountPriv crypto.PrivKey, appName string, scope mode CreatedAt: time.Now().Unix(), Scope: int(scope), } - fmt.Println("app link info", info) file, err := buildV1(key.Bytes(), accountPriv, info) if err != nil { return nil, err From 02006095a6a1266045890614657e9d686f634d8f Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Tue, 20 May 2025 20:29:58 +0200 Subject: [PATCH 134/164] GO-4844: Fix logging error when marshalling analytics event --- core/api/server/middleware.go | 10 +++++++++- core/api/util/analytics.go | 11 +++++------ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/core/api/server/middleware.go b/core/api/server/middleware.go index 2ed54ded4..f93285a8b 100644 --- a/core/api/server/middleware.go +++ b/core/api/server/middleware.go @@ -14,10 +14,13 @@ import ( "github.com/anyproto/anytype-heart/core/api/util" "github.com/anyproto/anytype-heart/core/event" "github.com/anyproto/anytype-heart/pb" + "github.com/anyproto/anytype-heart/pkg/lib/logging" ) const ApiVersion = "2025-05-20" +var log = logging.Logger("api-server") + var ( ErrMissingAuthorizationHeader = errors.New("missing authorization header") ErrInvalidAuthorizationHeader = errors.New("invalid authorization header format") @@ -101,7 +104,12 @@ func (s *Server) ensureAnalyticsEvent(code string, eventService apicore.EventSer c.Next() status := c.Writer.Status() - payload := util.NewAnalyticsEventForApi(c.Request.Context(), code, status) + payload, err := util.NewAnalyticsEventForApi(c.Request.Context(), code, status) + if err != nil { + log.Errorf("failed to create api analytics event: %v", err) + return + } + eventService.Broadcast(event.NewEventSingleMessage("", &pb.EventMessageValueOfPayloadBroadcast{ PayloadBroadcast: &pb.EventPayloadBroadcast{ Payload: payload, diff --git a/core/api/util/analytics.go b/core/api/util/analytics.go index 22d0825af..f3eb48077 100644 --- a/core/api/util/analytics.go +++ b/core/api/util/analytics.go @@ -3,7 +3,7 @@ package util import ( "context" "encoding/json" - "log" + "fmt" ) type AnalyticsBroadcastEvent struct { @@ -17,13 +17,12 @@ type AnalyticsBroadcastEvent struct { } // ToJSON returns the event as a JSON string -func (e *AnalyticsBroadcastEvent) ToJSON() string { +func (e *AnalyticsBroadcastEvent) ToJSON() (string, error) { eventJSON, err := json.Marshal(e) if err != nil { - log.Println("Error marshaling event:", err) - return "{}" + return "", fmt.Errorf("error marshalling analytics event: %w", err) } - return string(eventJSON) + return string(eventJSON), nil } // NewAnalyticsEvent creates a new analytics event with the given code, route and apiAppName @@ -44,7 +43,7 @@ func NewAnalyticsEvent(code, route, apiAppName string, status int) *AnalyticsBro } // NewAnalyticsEventForApi creates a new analytics event for api with the app name from the context -func NewAnalyticsEventForApi(ctx context.Context, code string, status int) string { +func NewAnalyticsEventForApi(ctx context.Context, code string, status int) (string, error) { // TODO: enable when apiAppName is available in context // apiAppName := ctx.Value("apiAppName").(string) apiAppName := "api-app" From 526f5df2293ec7aee0955ad3ac610e632baa19c0 Mon Sep 17 00:00:00 2001 From: Sergey Date: Wed, 21 May 2025 11:41:58 +0200 Subject: [PATCH 135/164] GO-5663: Chats: AddMessage: fix events race condition --- core/block/chats/chatsubscription/manager.go | 1 - core/block/editor/chatobject/chatobject.go | 7 +++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/core/block/chats/chatsubscription/manager.go b/core/block/chats/chatsubscription/manager.go index 74615add1..695fe713d 100644 --- a/core/block/chats/chatsubscription/manager.go +++ b/core/block/chats/chatsubscription/manager.go @@ -157,7 +157,6 @@ func (s *subscriptionManager) Flush() { if s.sessionContext != nil { s.sessionContext.SetMessages(s.chatId, events) s.eventSender.BroadcastToOtherSessions(s.sessionContext.ID(), ev) - s.sessionContext = nil } else if s.IsActive() { s.eventSender.Broadcast(ev) } diff --git a/core/block/editor/chatobject/chatobject.go b/core/block/editor/chatobject/chatobject.go index 8bf0ccd24..701d23ea6 100644 --- a/core/block/editor/chatobject/chatobject.go +++ b/core/block/editor/chatobject/chatobject.go @@ -217,7 +217,14 @@ func (s *storeObject) AddMessage(ctx context.Context, sessionCtx session.Context return "", fmt.Errorf("create chat: %w", err) } + s.subscription.Lock() s.subscription.SetSessionContext(sessionCtx) + s.subscription.Unlock() + defer func() { + s.subscription.Lock() + s.subscription.SetSessionContext(nil) + s.subscription.Unlock() + }() messageId, err := s.storeSource.PushStoreChange(ctx, source.PushStoreChangeParams{ Changes: builder.ChangeSet, State: s.store, From 9e091512a79fdb79bad47cde6fbb4f09d4e7c3fb Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Wed, 21 May 2025 12:19:11 +0200 Subject: [PATCH 136/164] GO-5629: Regenerate wallet mock --- core/wallet/mock_wallet/mock_Wallet.go | 43 ++++++++++++++------------ 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/core/wallet/mock_wallet/mock_Wallet.go b/core/wallet/mock_wallet/mock_Wallet.go index 9e6feb770..0f5021870 100644 --- a/core/wallet/mock_wallet/mock_Wallet.go +++ b/core/wallet/mock_wallet/mock_Wallet.go @@ -10,6 +10,8 @@ import ( mock "github.com/stretchr/testify/mock" + model "github.com/anyproto/anytype-heart/pkg/lib/pb/model" + wallet "github.com/anyproto/anytype-heart/core/wallet" ) @@ -548,27 +550,29 @@ func (_c *MockWallet_Name_Call) RunAndReturn(run func() string) *MockWallet_Name return _c } -// PersistAppLink provides a mock function with given fields: payload -func (_m *MockWallet) PersistAppLink(payload *wallet.AppLinkInfo) (string, error) { - ret := _m.Called(payload) +// PersistAppLink provides a mock function with given fields: name, scope +func (_m *MockWallet) PersistAppLink(name string, scope model.AccountAuthLocalApiScope) (*wallet.AppLinkInfo, error) { + ret := _m.Called(name, scope) if len(ret) == 0 { panic("no return value specified for PersistAppLink") } - var r0 string + var r0 *wallet.AppLinkInfo var r1 error - if rf, ok := ret.Get(0).(func(*wallet.AppLinkInfo) (string, error)); ok { - return rf(payload) + if rf, ok := ret.Get(0).(func(string, model.AccountAuthLocalApiScope) (*wallet.AppLinkInfo, error)); ok { + return rf(name, scope) } - if rf, ok := ret.Get(0).(func(*wallet.AppLinkInfo) string); ok { - r0 = rf(payload) + if rf, ok := ret.Get(0).(func(string, model.AccountAuthLocalApiScope) *wallet.AppLinkInfo); ok { + r0 = rf(name, scope) } else { - r0 = ret.Get(0).(string) + if ret.Get(0) != nil { + r0 = ret.Get(0).(*wallet.AppLinkInfo) + } } - if rf, ok := ret.Get(1).(func(*wallet.AppLinkInfo) error); ok { - r1 = rf(payload) + if rf, ok := ret.Get(1).(func(string, model.AccountAuthLocalApiScope) error); ok { + r1 = rf(name, scope) } else { r1 = ret.Error(1) } @@ -582,24 +586,25 @@ type MockWallet_PersistAppLink_Call struct { } // PersistAppLink is a helper method to define mock.On call -// - payload *wallet.AppLinkInfo -func (_e *MockWallet_Expecter) PersistAppLink(payload interface{}) *MockWallet_PersistAppLink_Call { - return &MockWallet_PersistAppLink_Call{Call: _e.mock.On("PersistAppLink", payload)} +// - name string +// - scope model.AccountAuthLocalApiScope +func (_e *MockWallet_Expecter) PersistAppLink(name interface{}, scope interface{}) *MockWallet_PersistAppLink_Call { + return &MockWallet_PersistAppLink_Call{Call: _e.mock.On("PersistAppLink", name, scope)} } -func (_c *MockWallet_PersistAppLink_Call) Run(run func(payload *wallet.AppLinkInfo)) *MockWallet_PersistAppLink_Call { +func (_c *MockWallet_PersistAppLink_Call) Run(run func(name string, scope model.AccountAuthLocalApiScope)) *MockWallet_PersistAppLink_Call { _c.Call.Run(func(args mock.Arguments) { - run(args[0].(*wallet.AppLinkInfo)) + run(args[0].(string), args[1].(model.AccountAuthLocalApiScope)) }) return _c } -func (_c *MockWallet_PersistAppLink_Call) Return(appKey string, err error) *MockWallet_PersistAppLink_Call { - _c.Call.Return(appKey, err) +func (_c *MockWallet_PersistAppLink_Call) Return(appInfo *wallet.AppLinkInfo, err error) *MockWallet_PersistAppLink_Call { + _c.Call.Return(appInfo, err) return _c } -func (_c *MockWallet_PersistAppLink_Call) RunAndReturn(run func(*wallet.AppLinkInfo) (string, error)) *MockWallet_PersistAppLink_Call { +func (_c *MockWallet_PersistAppLink_Call) RunAndReturn(run func(string, model.AccountAuthLocalApiScope) (*wallet.AppLinkInfo, error)) *MockWallet_PersistAppLink_Call { _c.Call.Return(run) return _c } From f44d59cb7b05c7d83712fd151dd86a79e055537b Mon Sep 17 00:00:00 2001 From: Sergey Date: Wed, 21 May 2025 12:32:43 +0200 Subject: [PATCH 137/164] GO-5664: Fix gomobile build --- core/wallet/mock_wallet/mock_Wallet.go | 43 ++++++++++++++------------ go.mod | 1 - go.sum | 14 +++------ util/grpcprocess/grpcprocess.go | 2 ++ util/grpcprocess/grpcprocess_mobile.go | 38 +++++++++++++++++++++++ 5 files changed, 68 insertions(+), 30 deletions(-) create mode 100644 util/grpcprocess/grpcprocess_mobile.go diff --git a/core/wallet/mock_wallet/mock_Wallet.go b/core/wallet/mock_wallet/mock_Wallet.go index 9e6feb770..0f5021870 100644 --- a/core/wallet/mock_wallet/mock_Wallet.go +++ b/core/wallet/mock_wallet/mock_Wallet.go @@ -10,6 +10,8 @@ import ( mock "github.com/stretchr/testify/mock" + model "github.com/anyproto/anytype-heart/pkg/lib/pb/model" + wallet "github.com/anyproto/anytype-heart/core/wallet" ) @@ -548,27 +550,29 @@ func (_c *MockWallet_Name_Call) RunAndReturn(run func() string) *MockWallet_Name return _c } -// PersistAppLink provides a mock function with given fields: payload -func (_m *MockWallet) PersistAppLink(payload *wallet.AppLinkInfo) (string, error) { - ret := _m.Called(payload) +// PersistAppLink provides a mock function with given fields: name, scope +func (_m *MockWallet) PersistAppLink(name string, scope model.AccountAuthLocalApiScope) (*wallet.AppLinkInfo, error) { + ret := _m.Called(name, scope) if len(ret) == 0 { panic("no return value specified for PersistAppLink") } - var r0 string + var r0 *wallet.AppLinkInfo var r1 error - if rf, ok := ret.Get(0).(func(*wallet.AppLinkInfo) (string, error)); ok { - return rf(payload) + if rf, ok := ret.Get(0).(func(string, model.AccountAuthLocalApiScope) (*wallet.AppLinkInfo, error)); ok { + return rf(name, scope) } - if rf, ok := ret.Get(0).(func(*wallet.AppLinkInfo) string); ok { - r0 = rf(payload) + if rf, ok := ret.Get(0).(func(string, model.AccountAuthLocalApiScope) *wallet.AppLinkInfo); ok { + r0 = rf(name, scope) } else { - r0 = ret.Get(0).(string) + if ret.Get(0) != nil { + r0 = ret.Get(0).(*wallet.AppLinkInfo) + } } - if rf, ok := ret.Get(1).(func(*wallet.AppLinkInfo) error); ok { - r1 = rf(payload) + if rf, ok := ret.Get(1).(func(string, model.AccountAuthLocalApiScope) error); ok { + r1 = rf(name, scope) } else { r1 = ret.Error(1) } @@ -582,24 +586,25 @@ type MockWallet_PersistAppLink_Call struct { } // PersistAppLink is a helper method to define mock.On call -// - payload *wallet.AppLinkInfo -func (_e *MockWallet_Expecter) PersistAppLink(payload interface{}) *MockWallet_PersistAppLink_Call { - return &MockWallet_PersistAppLink_Call{Call: _e.mock.On("PersistAppLink", payload)} +// - name string +// - scope model.AccountAuthLocalApiScope +func (_e *MockWallet_Expecter) PersistAppLink(name interface{}, scope interface{}) *MockWallet_PersistAppLink_Call { + return &MockWallet_PersistAppLink_Call{Call: _e.mock.On("PersistAppLink", name, scope)} } -func (_c *MockWallet_PersistAppLink_Call) Run(run func(payload *wallet.AppLinkInfo)) *MockWallet_PersistAppLink_Call { +func (_c *MockWallet_PersistAppLink_Call) Run(run func(name string, scope model.AccountAuthLocalApiScope)) *MockWallet_PersistAppLink_Call { _c.Call.Run(func(args mock.Arguments) { - run(args[0].(*wallet.AppLinkInfo)) + run(args[0].(string), args[1].(model.AccountAuthLocalApiScope)) }) return _c } -func (_c *MockWallet_PersistAppLink_Call) Return(appKey string, err error) *MockWallet_PersistAppLink_Call { - _c.Call.Return(appKey, err) +func (_c *MockWallet_PersistAppLink_Call) Return(appInfo *wallet.AppLinkInfo, err error) *MockWallet_PersistAppLink_Call { + _c.Call.Return(appInfo, err) return _c } -func (_c *MockWallet_PersistAppLink_Call) RunAndReturn(run func(*wallet.AppLinkInfo) (string, error)) *MockWallet_PersistAppLink_Call { +func (_c *MockWallet_PersistAppLink_Call) RunAndReturn(run func(string, model.AccountAuthLocalApiScope) (*wallet.AppLinkInfo, error)) *MockWallet_PersistAppLink_Call { _c.Call.Return(run) return _c } diff --git a/go.mod b/go.mod index 650058cd7..a82d3adbc 100644 --- a/go.mod +++ b/go.mod @@ -226,7 +226,6 @@ require ( github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/mozillazg/go-unidecode v0.2.0 // indirect github.com/multiformats/go-base36 v0.2.0 // indirect github.com/multiformats/go-multiaddr v0.15.0 // indirect github.com/multiformats/go-multicodec v0.9.0 // indirect diff --git a/go.sum b/go.sum index c728f1089..fcd55431b 100644 --- a/go.sum +++ b/go.sum @@ -78,8 +78,6 @@ github.com/alexbrainman/goissue34681 v0.0.0-20191006012335-3fc7a47baff5/go.mod h github.com/andybalholm/cascadia v1.3.1/go.mod h1:R4bJ1UQfqADjvDa4P6HZHLh/3OxWWEqc0Sk8XGwHqvA= github.com/andybalholm/cascadia v1.3.3 h1:AG2YHrzJIm4BZ19iwJ/DAua6Btl3IwJX+VI4kktS1LM= github.com/andybalholm/cascadia v1.3.3/go.mod h1:xNd9bqTn98Ln4DwST8/nG+H0yuB8Hmgu1YHNnWw0GeA= -github.com/anyproto/any-store v0.2.0 h1:M8Eb0dxuEk62lIGZ3k1nADlaPQzmo6ilWLCCcY9WX10= -github.com/anyproto/any-store v0.2.0/go.mod h1:N59OGYe/uXRNpr6ytfbBpbC+1viDgSbsVNXevOMxJAM= github.com/anyproto/any-store v0.2.1 h1:U5UpUNk2U7pjJFgvw+f0f54pJW94YK4Qyd97eRoWSvc= github.com/anyproto/any-store v0.2.1/go.mod h1:tfmQEKqqtT+zzkTWANTHxWxB1E3OHcn9RHxhdBZ/KSk= github.com/anyproto/any-sync v0.8.0 h1:pSoaQjeu5H6K8aMWBheXhUR+6eNCi9KDHSD6L6Yt29Y= @@ -772,8 +770,6 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/mozillazg/go-unidecode v0.2.0 h1:vFGEzAH9KSwyWmXCOblazEWDh7fOkpmy/Z4ArmamSUc= -github.com/mozillazg/go-unidecode v0.2.0/go.mod h1:zB48+/Z5toiRolOZy9ksLryJ976VIwmDmpQ2quyt1aA= github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/multiformats/go-base32 v0.1.0 h1:pVx9xoSPqEIQG8o+UbAe7DNi51oej1NtK+aGkbLYxPE= @@ -1683,16 +1679,14 @@ honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= lukechampine.com/blake3 v1.4.0 h1:xDbKOZCVbnZsfzM6mHSYcGRHZ3YrLDzqz8XnV4uaD5w= lukechampine.com/blake3 v1.4.0/go.mod h1:MQJNQCTnR+kwOP/JEZSxj3MaQjp80FOFSNMMHXcSeX0= -modernc.org/cc/v4 v4.26.0 h1:QMYvbVduUGH0rrO+5mqF/PSPPRZNpRtg2CLELy7vUpA= -modernc.org/cc/v4 v4.26.0/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0= -modernc.org/ccgo/v4 v4.26.0 h1:gVzXaDzGeBYJ2uXTOpR8FR7OlksDOe9jxnjhIKCsiTc= -modernc.org/ccgo/v4 v4.26.0/go.mod h1:Sem8f7TFUtVXkG2fiaChQtyyfkqhJBg/zjEJBkmuAVY= +modernc.org/cc/v4 v4.26.1 h1:+X5NtzVBn0KgsBCBe+xkDC7twLb/jNVj9FPgiwSQO3s= +modernc.org/cc/v4 v4.26.1/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0= +modernc.org/ccgo/v4 v4.28.0 h1:rjznn6WWehKq7dG4JtLRKxb52Ecv8OUGah8+Z/SfpNU= +modernc.org/ccgo/v4 v4.28.0/go.mod h1:JygV3+9AV6SmPhDasu4JgquwU81XAKLd3OKTUDNOiKE= modernc.org/fileutil v1.3.1 h1:8vq5fe7jdtEvoCf3Zf9Nm0Q05sH6kGx0Op2CPx1wTC8= modernc.org/fileutil v1.3.1/go.mod h1:HxmghZSZVAz/LXcMNwZPA/DRrQZEVP9VX0V4LQGQFOc= modernc.org/gc/v2 v2.6.5 h1:nyqdV8q46KvTpZlsw66kWqwXRHdjIlJOhG6kxiV/9xI= modernc.org/gc/v2 v2.6.5/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito= -modernc.org/libc v1.65.0 h1:e183gLDnAp9VJh6gWKdTy0CThL9Pt7MfcR/0bgb7Y1Y= -modernc.org/libc v1.65.0/go.mod h1:7m9VzGq7APssBTydds2zBcxGREwvIGpuUBaKTXdm2Qs= modernc.org/libc v1.65.6 h1:OhJUhmuJ6MVZdqL5qmnd0/my46DKGFhSX4WOR7ijfyE= modernc.org/libc v1.65.6/go.mod h1:MOiGAM9lrMBT9L8xT1nO41qYl5eg9gCp9/kWhz5L7WA= modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU= diff --git a/util/grpcprocess/grpcprocess.go b/util/grpcprocess/grpcprocess.go index 60ab915e3..cbda054c7 100644 --- a/util/grpcprocess/grpcprocess.go +++ b/util/grpcprocess/grpcprocess.go @@ -1,3 +1,5 @@ +//go:build !gomobile + package grpcprocess import ( diff --git a/util/grpcprocess/grpcprocess_mobile.go b/util/grpcprocess/grpcprocess_mobile.go new file mode 100644 index 000000000..35a0d91cd --- /dev/null +++ b/util/grpcprocess/grpcprocess_mobile.go @@ -0,0 +1,38 @@ +//go:build gomobile + +package grpcprocess + +import ( + "context" + "fmt" + + "google.golang.org/grpc" +) + +// ProcessInfo holds details about the client process. +type ProcessInfo struct { + PID int32 + Name string + Path string +} + +// FromContext retrieves the ProcessInfo stored by the interceptor. +func FromContext(ctx context.Context) (*ProcessInfo, bool) { + return nil, false +} + +// ProcessInfoInterceptor returns an interceptor that *only* runs for the +// gRPC methods listed in allowedMethods (exact match on info.FullMethod). +func ProcessInfoInterceptor(allowedMethods ...string) grpc.UnaryServerInterceptor { + return func( + ctx context.Context, + req interface{}, + info *grpc.UnaryServerInfo, + handler grpc.UnaryHandler, + ) (interface{}, error) { + return handler(ctx, req) + } +} +func ResolveProcess(remoteIP, remotePort string) (*ProcessInfo, error) { + return nil, fmt.Errorf("not supported in gomobile") +} From cb8783bd76d53878cb6eb61d82173d7da0d3d737 Mon Sep 17 00:00:00 2001 From: Mikhail Rakhmanov Date: Wed, 21 May 2025 13:57:50 +0200 Subject: [PATCH 138/164] GO-5667 Update protocol version --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index a82d3adbc..614dba328 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/VividCortex/ewma v1.2.0 github.com/adrium/goheif v0.0.0-20230113233934-ca402e77a786 github.com/anyproto/any-store v0.2.1 - github.com/anyproto/any-sync v0.8.0 + github.com/anyproto/any-sync v0.8.1 github.com/anyproto/anytype-publish-server/publishclient v0.0.0-20250131145601-de288583ff2a github.com/anyproto/anytype-push-server/pushclient v0.0.0-20250402124745-6451298047f7 github.com/anyproto/go-chash v0.1.0 diff --git a/go.sum b/go.sum index fcd55431b..1e7e0cf46 100644 --- a/go.sum +++ b/go.sum @@ -80,8 +80,8 @@ github.com/andybalholm/cascadia v1.3.3 h1:AG2YHrzJIm4BZ19iwJ/DAua6Btl3IwJX+VI4kk github.com/andybalholm/cascadia v1.3.3/go.mod h1:xNd9bqTn98Ln4DwST8/nG+H0yuB8Hmgu1YHNnWw0GeA= github.com/anyproto/any-store v0.2.1 h1:U5UpUNk2U7pjJFgvw+f0f54pJW94YK4Qyd97eRoWSvc= github.com/anyproto/any-store v0.2.1/go.mod h1:tfmQEKqqtT+zzkTWANTHxWxB1E3OHcn9RHxhdBZ/KSk= -github.com/anyproto/any-sync v0.8.0 h1:pSoaQjeu5H6K8aMWBheXhUR+6eNCi9KDHSD6L6Yt29Y= -github.com/anyproto/any-sync v0.8.0/go.mod h1:G6i3PT6pN6lcC5rim5Ed7ppUPuQgU5PyHgiqskrggL0= +github.com/anyproto/any-sync v0.8.1 h1:uK6o/z9GrFsmnnpWoXj9KSrslRGBTPexsaTuvFrZank= +github.com/anyproto/any-sync v0.8.1/go.mod h1:G6i3PT6pN6lcC5rim5Ed7ppUPuQgU5PyHgiqskrggL0= github.com/anyproto/anytype-publish-server/publishclient v0.0.0-20250131145601-de288583ff2a h1:ZZM+0OUCQMWSLSflpkf0ZMVo3V76qEDDIXPpQOClNs0= github.com/anyproto/anytype-publish-server/publishclient v0.0.0-20250131145601-de288583ff2a/go.mod h1:4fkueCZcGniSMXkrwESO8zzERrh/L7WHimRNWecfGM0= github.com/anyproto/anytype-push-server/pushclient v0.0.0-20250402124745-6451298047f7 h1:oKkEnxnN1jeB1Ty20CTMH3w4WkCrV8dOQy1Myetg7XA= From f246ebe45fefcb26798f3d213ff3d11dd88aaf8a Mon Sep 17 00:00:00 2001 From: Sergey Cherepanov Date: Wed, 21 May 2025 14:20:22 +0200 Subject: [PATCH 139/164] GO-5665 async pushapi calls --- core/anytype/config/config.go | 4 +- core/block/chats/chatpush/push.go | 11 +-- core/block/chats/service.go | 23 +++--- core/pushnotification/service.go | 123 ++++++++++++++++++++++-------- 4 files changed, 110 insertions(+), 51 deletions(-) diff --git a/core/anytype/config/config.go b/core/anytype/config/config.go index c7b3f0248..1c90428e4 100644 --- a/core/anytype/config/config.go +++ b/core/anytype/config/config.go @@ -510,8 +510,8 @@ func (c *Config) GetPublishServer() publishclient.Config { } func (c *Config) GetPushConfig() PushConfig { - pushPeerId := "12D3KooWR8Ci1XidFCCXoZppGrUmiy4D1Mjoux9xK6QoZrpbQC3J" - pushAddr := "stage1-anytype-push-server1.toolpad.org:4940" + pushPeerId := "12D3KooWMATrdteJNq2YvYhtq3RDeWxq6RVXDAr36MsGd5RJzXDn" + pushAddr := "anytype-push-server.anytype.io:4941" if peerId := os.Getenv("ANYTYPE_PUSH_PEERID"); peerId != "" { if addr := os.Getenv("ANYTYPE_PUSH_ADDRESS"); addr != "" { diff --git a/core/block/chats/chatpush/push.go b/core/block/chats/chatpush/push.go index de7805344..463195f67 100644 --- a/core/block/chats/chatpush/push.go +++ b/core/block/chats/chatpush/push.go @@ -14,9 +14,10 @@ type Payload struct { } type NewMessagePayload struct { - ChatId string `json:"chatId"` - MsgId string `json:"msgId"` - SpaceName string `json:"spaceName"` - SenderName string `json:"senderName"` - Text string `json:"text"` + ChatId string `json:"chatId"` + MsgId string `json:"msgId"` + SpaceName string `json:"spaceName"` + SenderName string `json:"senderName"` + Text string `json:"text"` + HasAttachments bool `json:"hasAttachments"` } diff --git a/core/block/chats/service.go b/core/block/chats/service.go index 61bef172f..400f8baa9 100644 --- a/core/block/chats/service.go +++ b/core/block/chats/service.go @@ -319,18 +319,16 @@ func (s *service) AddMessage(ctx context.Context, sessionCtx session.Context, ch return err }) if err == nil { - go func() { - err := s.sendPushNotification(spaceId, chatObjectId, messageId, message.Message.Text) - if err != nil { - log.Error("sendPushNotification: ", zap.Error(err)) - } - }() + pushErr := s.sendPushNotification(spaceId, chatObjectId, messageId, message.Message.Text, len(message.Attachments) != 0) + if pushErr != nil { + log.Error("sendPushNotification: ", zap.Error(pushErr)) + } } return messageId, err } -func (s *service) sendPushNotification(spaceId, chatObjectId string, messageId string, messageText string) (err error) { +func (s *service) sendPushNotification(spaceId, chatObjectId, messageId, messageText string, hasAttachments bool) (err error) { accountId := s.accountService.AccountID() spaceName := s.objectStore.GetSpaceName(spaceId) details, err := s.objectStore.SpaceIndex(spaceId).GetDetails(domain.NewParticipantId(spaceId, accountId)) @@ -346,11 +344,12 @@ func (s *service) sendPushNotification(spaceId, chatObjectId string, messageId s SenderId: accountId, Type: chatpush.ChatMessage, NewMessagePayload: &chatpush.NewMessagePayload{ - ChatId: chatObjectId, - MsgId: messageId, - SpaceName: spaceName, - SenderName: senderName, - Text: messageText, + ChatId: chatObjectId, + MsgId: messageId, + SpaceName: spaceName, + SenderName: senderName, + Text: messageText, + HasAttachments: hasAttachments, }, } diff --git a/core/pushnotification/service.go b/core/pushnotification/service.go index dc738e6a7..a7fa0292a 100644 --- a/core/pushnotification/service.go +++ b/core/pushnotification/service.go @@ -7,6 +7,7 @@ import ( "encoding/hex" "fmt" "sync" + "time" "github.com/anyproto/any-sync/app" "github.com/anyproto/any-sync/commonspace/object/acl/list" @@ -33,6 +34,13 @@ type requestSubscribe struct { topics []string } +type PushMessage struct { + SpaceId string + Topics []string + Payload []byte + Deadline time.Time +} + type Service interface { app.ComponentRunnable RegisterToken(ctx context.Context, req *pb.RpcPushNotificationRegisterTokenRequest) (err error) @@ -59,6 +67,8 @@ type service struct { ctx context.Context cancel context.CancelFunc requestsQueue *mb.MB[requestSubscribe] + notifyQueue *mb.MB[PushMessage] + createSpaceQueue *mb.MB[string] } type spaceKeyType string @@ -74,15 +84,14 @@ func (s *service) SubscribeToTopics(ctx context.Context, spaceId string, topics } func (s *service) Run(ctx context.Context) (err error) { - // TODO Temporarliy disabled - return nil - if s.cfg.IsLocalOnlyMode() { return nil } s.started = true s.ctx, s.cancel = context.WithCancel(context.Background()) go s.run() + go s.notifyLoop() + go s.createSpaceLoop() return nil } @@ -93,6 +102,8 @@ func (s *service) Close(ctx context.Context) (err error) { if s.cancel != nil { s.cancel() } + _ = s.createSpaceQueue.Close() + _ = s.notifyQueue.Close() return s.requestsQueue.Close() } @@ -103,6 +114,8 @@ func (s *service) Init(a *app.App) (err error) { s.requestsQueue = mb.New[requestSubscribe](0) s.spaceService = app.MustComponent[space.Service](a) s.eventSender = app.MustComponent[event.Sender](a) + s.notifyQueue = mb.New[PushMessage](0) + s.createSpaceQueue = mb.New[string](0) return } @@ -148,6 +161,10 @@ func (s *service) CreateSpace(ctx context.Context, spaceId string) (err error) { if !s.started { return nil } + return s.createSpaceQueue.Add(ctx, spaceId) +} + +func (s *service) createSpace(ctx context.Context, spaceId string) (err error) { keys, err := s.getSpaceKeys(spaceId) if err != nil { return fmt.Errorf("get space keys: %w", err) @@ -175,36 +192,12 @@ type spaceKeys struct { } func (s *service) Notify(ctx context.Context, spaceId string, topic []string, payload []byte) (err error) { - if !s.started { - return nil - } - - keys, err := s.getSpaceKeys(spaceId) - if err != nil { - return fmt.Errorf("get space keys: %w", err) - } - topics, err := s.makeTopics(keys.signKey, topic) - if err != nil { - return err - } - encryptedJson, err := keys.encryptionKey.Encrypt(payload) - if err != nil { - return err - } - signature, err := s.wallet.GetAccountPrivkey().Sign(encryptedJson) - if err != nil { - return err - } - p := &pushapi.Message{ - KeyId: keys.encryptionKeyId, - Payload: encryptedJson, - Signature: signature, - } - err = s.pushClient.Notify(ctx, &pushapi.NotifyRequest{ - Topics: &pushapi.Topics{Topics: topics}, - Message: p, + return s.notifyQueue.Add(ctx, PushMessage{ + SpaceId: spaceId, + Topics: topic, + Payload: payload, + Deadline: time.Now().Add(time.Minute * 2), }) - return err } func (s *service) loadSubscriptions(ctx context.Context) (err error) { @@ -332,6 +325,72 @@ func (s *service) run() { } } +func (s *service) notifyLoop() { + for { + msg, err := s.notifyQueue.WaitOne(s.ctx) + if err != nil { + return + } + if msg.Deadline.Before(time.Now()) { + continue + } + if err = s.sendNotification(msg); err != nil { + log.Error("failed to send notification", zap.Error(err)) + } + } +} + +func (s *service) sendNotification(msg PushMessage) (err error) { + keys, err := s.getSpaceKeys(msg.SpaceId) + if err != nil { + return fmt.Errorf("get space keys: %w", err) + } + topics, err := s.makeTopics(keys.signKey, msg.Topics) + if err != nil { + return err + } + encryptedJson, err := keys.encryptionKey.Encrypt(msg.Payload) + if err != nil { + return err + } + signature, err := s.wallet.GetAccountPrivkey().Sign(encryptedJson) + if err != nil { + return err + } + p := &pushapi.Message{ + KeyId: keys.encryptionKeyId, + Payload: encryptedJson, + Signature: signature, + } + err = s.pushClient.Notify(s.ctx, &pushapi.NotifyRequest{ + Topics: &pushapi.Topics{Topics: topics}, + Message: p, + }) + return err +} + +func (s *service) createSpaceLoop() { + for { + spaceId, err := s.createSpaceQueue.WaitOne(s.ctx) + if err != nil { + return + } + for { + if err = s.createSpace(s.ctx, spaceId); err != nil { + log.Warn("failed to create space", zap.Error(err)) + select { + case <-time.After(time.Minute): + continue + case <-s.ctx.Done(): + return + } + } else { + break + } + } + } +} + func (s *service) BroadcastKeyUpdate(spaceId string, aclState *list.AclState) error { keys, err := s.getSpaceKeysFromAcl(aclState) if err != nil { From 85119f0b53f84cca192ff6e9109fd7b7afbc821b Mon Sep 17 00:00:00 2001 From: Sergey Date: Wed, 21 May 2025 14:25:00 +0200 Subject: [PATCH 140/164] GO-5639: Prototype: auto read messages when user has been joined space --- core/block/source/sourceimpl/store.go | 8 ++-- core/block/source/sourceimpl/store_apply.go | 47 +++++++++++++++++++-- 2 files changed, 49 insertions(+), 6 deletions(-) diff --git a/core/block/source/sourceimpl/store.go b/core/block/source/sourceimpl/store.go index 4cb0e8b4f..fe73eb2de 100644 --- a/core/block/source/sourceimpl/store.go +++ b/core/block/source/sourceimpl/store.go @@ -196,9 +196,10 @@ func (s *store) ReadStoreDoc(ctx context.Context, storeState *storestate.StoreSt allIsNew = true } applier := &storeApply{ - tx: tx, - allIsNew: allIsNew, - ot: s.ObjectTree, + currentIdentity: s.accountKeysService.Account().SignKey.GetPublic(), + tx: tx, + allIsNew: allIsNew, + ot: s.ObjectTree, } if err = applier.Apply(); err != nil { return errors.Join(tx.Rollback(), err) @@ -290,6 +291,7 @@ func (s *store) update(ctx context.Context, tree objecttree.ObjectTree) error { return err } applier := &storeApply{ + currentIdentity: s.accountKeysService.Account().SignKey.GetPublic(), tx: tx, ot: tree, needFetchPrevOrderId: true, diff --git a/core/block/source/sourceimpl/store_apply.go b/core/block/source/sourceimpl/store_apply.go index 5cede640b..7f8f6ef8b 100644 --- a/core/block/source/sourceimpl/store_apply.go +++ b/core/block/source/sourceimpl/store_apply.go @@ -6,15 +6,19 @@ import ( "github.com/anyproto/any-sync/commonspace/object/tree/objecttree" "github.com/anyproto/any-sync/commonspace/object/tree/treechangeproto" + "github.com/anyproto/any-sync/util/crypto" + "github.com/anyproto/any-sync/util/slice" + "golang.org/x/exp/slices" "github.com/anyproto/anytype-heart/core/block/editor/storestate" "github.com/anyproto/anytype-heart/pb" ) type storeApply struct { - tx *storestate.StoreStateTx - ot objecttree.ObjectTree - allIsNew bool + tx *storestate.StoreStateTx + ot objecttree.ObjectTree + allIsNew bool + currentIdentity crypto.PubKey needFetchPrevOrderId bool } @@ -22,12 +26,47 @@ type storeApply struct { func (a *storeApply) Apply() error { var lastErr error + a.ot.AclList().RLock() + joinedAclRecordId := a.ot.AclList().Head().Id + for _, accState := range a.ot.AclList().AclState().CurrentAccounts() { + if !accState.PubKey.Equals(a.currentIdentity) { + continue + } + noPermissionsIdx := -1 + for i := len(accState.PermissionChanges) - 1; i >= 0; i-- { + permChange := accState.PermissionChanges[i] + if permChange.Permission.NoPermissions() { + noPermissionsIdx = i + break + } + } + + if noPermissionsIdx == -1 || noPermissionsIdx == len(accState.PermissionChanges)-1 { + break + } + + // Get a permission change when user was joined space successfully + permChange := accState.PermissionChanges[noPermissionsIdx+1] + joinedAclRecordId = permChange.RecordId + } + a.ot.AclList().RUnlock() + + var heads []string err := a.ot.IterateRoot(UnmarshalStoreChange, func(change *objecttree.Change) bool { // not a new change - remember and continue if !a.allIsNew && !change.IsNew { return true } + if ok, _ := a.ot.AclList().IsAfter(joinedAclRecordId, change.AclHeadId); ok { + heads = slice.DiscardFromSlice(heads, func(s string) bool { + return slices.Contains(change.PreviousIds, s) + }) + if !slices.Contains(heads, change.Id) { + heads = append(heads, change.Id) + } + } + lastErr = a.applyChange(change) if lastErr != nil { return false @@ -36,6 +75,8 @@ func (a *storeApply) Apply() error { return true }) + fmt.Println("HEADS=", heads) + return errors.Join(err, lastErr) } From dd1a18a68947811f3f7fd24d8709247e443cd65a Mon Sep 17 00:00:00 2001 From: Sergey Date: Wed, 21 May 2025 17:41:48 +0200 Subject: [PATCH 141/164] GO-5673: Chats: fix init for subscription manager when error occurs --- core/block/chats/chatsubscription/service.go | 51 ++++++++---- util/futures/future.go | 59 +++++++++++++ util/futures/future_test.go | 88 ++++++++++++++++++++ 3 files changed, 180 insertions(+), 18 deletions(-) create mode 100644 util/futures/future.go create mode 100644 util/futures/future_test.go diff --git a/core/block/chats/chatsubscription/service.go b/core/block/chats/chatsubscription/service.go index dca5d3714..6f3dfe368 100644 --- a/core/block/chats/chatsubscription/service.go +++ b/core/block/chats/chatsubscription/service.go @@ -18,6 +18,7 @@ import ( "github.com/anyproto/anytype-heart/pkg/lib/localstore/objectstore" "github.com/anyproto/anytype-heart/pkg/lib/logging" "github.com/anyproto/anytype-heart/pkg/lib/pb/model" + "github.com/anyproto/anytype-heart/util/futures" ) const CName = "chatsubscription" @@ -64,12 +65,12 @@ type service struct { identityCache *expirable.LRU[string, *domain.Details] lock sync.Mutex - managers map[string]*subscriptionManager + managers map[string]*futures.Future[*subscriptionManager] } func New() Service { return &service{ - managers: make(map[string]*subscriptionManager), + managers: make(map[string]*futures.Future[*subscriptionManager]), } } @@ -104,7 +105,9 @@ func (s *service) GetManager(chatObjectId string) (Manager, error) { return s.getManager(chatObjectId) } -func (s *service) getManager(chatObjectId string) (*subscriptionManager, error) { +// getManagerFuture returns a future that should be resolved by the first who called this method. +// The idea behind using futures here is to initialize a manager once without blocking the whole service. +func (s *service) getManagerFuture(chatObjectId string) (*futures.Future[*subscriptionManager], error) { s.lock.Lock() mngr, ok := s.managers[chatObjectId] if ok { @@ -112,9 +115,7 @@ func (s *service) getManager(chatObjectId string) (*subscriptionManager, error) return mngr, nil } - mngr = &subscriptionManager{} - mngr.Lock() - defer mngr.Unlock() + mngr = futures.New[*subscriptionManager]() s.managers[chatObjectId] = mngr s.lock.Unlock() @@ -126,7 +127,15 @@ func (s *service) getManager(chatObjectId string) (*subscriptionManager, error) return mngr, nil } -func (s *service) initManager(chatObjectId string, mngr *subscriptionManager) error { +func (s *service) getManager(chatObjectId string) (*subscriptionManager, error) { + fut, err := s.getManagerFuture(chatObjectId) + if err != nil { + return nil, fmt.Errorf("get future: %w", err) + } + return fut.Wait() +} + +func (s *service) initManager(chatObjectId string, mngrFut *futures.Future[*subscriptionManager]) error { spaceId, err := s.spaceIdResolver.ResolveSpaceID(chatObjectId) if err != nil { return fmt.Errorf("resolve space id: %w", err) @@ -139,21 +148,26 @@ func (s *service) initManager(chatObjectId string, mngr *subscriptionManager) er if err != nil { return fmt.Errorf("get repository: %w", err) } - mngr.componentCtx = s.componentCtx - mngr.spaceId = spaceId - mngr.chatId = chatObjectId - mngr.myIdentity = currentIdentity - mngr.myParticipantId = currentParticipantId - mngr.identityCache = s.identityCache - mngr.subscriptions = make(map[string]*subscription) - mngr.spaceIndex = s.objectStore.SpaceIndex(spaceId) - mngr.eventSender = s.eventSender - mngr.repository = repository + mngr := &subscriptionManager{ + componentCtx: s.componentCtx, + spaceId: spaceId, + chatId: chatObjectId, + myIdentity: currentIdentity, + myParticipantId: currentParticipantId, + identityCache: s.identityCache, + subscriptions: make(map[string]*subscription), + spaceIndex: s.objectStore.SpaceIndex(spaceId), + eventSender: s.eventSender, + repository: repository, + } err = mngr.loadChatState(s.componentCtx) if err != nil { - return fmt.Errorf("init chat state: %w", err) + err = fmt.Errorf("init chat state: %w", err) + mngrFut.ResolveErr(err) + return err } + mngrFut.ResolveValue(mngr) return nil } @@ -183,6 +197,7 @@ func (s *service) SubscribeLastMessages(ctx context.Context, req SubscribeLastMe if err != nil { return nil, fmt.Errorf("get manager: %w", err) } + mngr.Lock() defer mngr.Unlock() diff --git a/util/futures/future.go b/util/futures/future.go new file mode 100644 index 000000000..7fbee9410 --- /dev/null +++ b/util/futures/future.go @@ -0,0 +1,59 @@ +package futures + +import ( + "sync" +) + +type Future[T any] struct { + cond *sync.Cond + + ok bool + value T + err error +} + +// New creates a value that should be resolved later. It's necessary to resolve a future eventually, otherwise there is +// a possibility of deadlock, when someone waits for never-resolving future. +func New[T any]() *Future[T] { + return &Future[T]{ + cond: &sync.Cond{ + L: &sync.Mutex{}, + }, + } +} + +func (f *Future[T]) Wait() (T, error) { + f.cond.L.Lock() + for !f.ok { + f.cond.Wait() + } + f.cond.L.Unlock() + + return f.value, f.err +} + +// Resolve sets value or error for future only once, all consequent calls to Resolve have no effect +func (f *Future[T]) Resolve(val T, err error) { + f.cond.L.Lock() + defer f.cond.L.Unlock() + + // Resolve once + if f.ok { + return + } + + f.ok = true + f.value = val + f.err = err + + f.cond.Broadcast() +} + +func (f *Future[T]) ResolveValue(val T) { + f.Resolve(val, nil) +} + +func (f *Future[T]) ResolveErr(err error) { + var defaultValue T + f.Resolve(defaultValue, err) +} diff --git a/util/futures/future_test.go b/util/futures/future_test.go new file mode 100644 index 000000000..7d94ed8e0 --- /dev/null +++ b/util/futures/future_test.go @@ -0,0 +1,88 @@ +package futures + +import ( + "fmt" + "sync" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestFutures(t *testing.T) { + t.Run("synchronously in linear order: has value", func(t *testing.T) { + f := New[int]() + f.ResolveValue(42) + + got, err := f.Wait() + require.NoError(t, err) + assert.Equal(t, 42, got) + }) + + t.Run("synchronously in linear order: has error", func(t *testing.T) { + f := New[int]() + f.ResolveErr(fmt.Errorf("test error")) + + got, err := f.Wait() + require.Error(t, err) + assert.Equal(t, 0, got) + }) + + t.Run("one producer, multiple consumers: has value", func(t *testing.T) { + f := New[int]() + + var wg sync.WaitGroup + for range 10 { + wg.Add(1) + go func() { + defer wg.Done() + got, err := f.Wait() + require.NoError(t, err) + assert.Equal(t, 42, got) + }() + } + + f.ResolveValue(42) + + wg.Wait() + }) + + t.Run("one producer, multiple consumers: has error", func(t *testing.T) { + f := New[int]() + + var wg sync.WaitGroup + for range 10 { + wg.Add(1) + go func() { + defer wg.Done() + got, err := f.Wait() + require.Error(t, err) + assert.Equal(t, 0, got) + }() + } + + f.ResolveErr(fmt.Errorf("test error")) + + wg.Wait() + }) + + t.Run("multiple producers: has first resolved value", func(t *testing.T) { + f := New[int]() + + var wg sync.WaitGroup + for i := range 10 { + wg.Add(1) + go func() { + defer wg.Done() + + f.ResolveValue(i + 1) + }() + } + wg.Wait() + + got, err := f.Wait() + require.NoError(t, err) + + assert.True(t, got >= 1 && got <= 11) + }) +} From 8531c74e62a50926bc3c29b07af1bc93c0a561e3 Mon Sep 17 00:00:00 2001 From: Sergey Date: Wed, 21 May 2025 18:40:09 +0200 Subject: [PATCH 142/164] GO-5663: Fix deadlock --- core/block/chats/chatsubscription/service.go | 30 +++++++------------- 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/core/block/chats/chatsubscription/service.go b/core/block/chats/chatsubscription/service.go index 6f3dfe368..1f7303928 100644 --- a/core/block/chats/chatsubscription/service.go +++ b/core/block/chats/chatsubscription/service.go @@ -107,38 +107,31 @@ func (s *service) GetManager(chatObjectId string) (Manager, error) { // getManagerFuture returns a future that should be resolved by the first who called this method. // The idea behind using futures here is to initialize a manager once without blocking the whole service. -func (s *service) getManagerFuture(chatObjectId string) (*futures.Future[*subscriptionManager], error) { +func (s *service) getManagerFuture(chatObjectId string) *futures.Future[*subscriptionManager] { s.lock.Lock() mngr, ok := s.managers[chatObjectId] if ok { s.lock.Unlock() - return mngr, nil + return mngr } mngr = futures.New[*subscriptionManager]() s.managers[chatObjectId] = mngr s.lock.Unlock() - err := s.initManager(chatObjectId, mngr) - if err != nil { - return nil, fmt.Errorf("init manager: %w", err) - } + mngr.Resolve(s.initManager(chatObjectId)) - return mngr, nil + return mngr } func (s *service) getManager(chatObjectId string) (*subscriptionManager, error) { - fut, err := s.getManagerFuture(chatObjectId) - if err != nil { - return nil, fmt.Errorf("get future: %w", err) - } - return fut.Wait() + return s.getManagerFuture(chatObjectId).Wait() } -func (s *service) initManager(chatObjectId string, mngrFut *futures.Future[*subscriptionManager]) error { +func (s *service) initManager(chatObjectId string) (*subscriptionManager, error) { spaceId, err := s.spaceIdResolver.ResolveSpaceID(chatObjectId) if err != nil { - return fmt.Errorf("resolve space id: %w", err) + return nil, fmt.Errorf("resolve space id: %w", err) } currentIdentity := s.accountService.AccountID() @@ -146,7 +139,7 @@ func (s *service) initManager(chatObjectId string, mngrFut *futures.Future[*subs repository, err := s.repositoryService.Repository(chatObjectId) if err != nil { - return fmt.Errorf("get repository: %w", err) + return nil, fmt.Errorf("get repository: %w", err) } mngr := &subscriptionManager{ componentCtx: s.componentCtx, @@ -164,12 +157,9 @@ func (s *service) initManager(chatObjectId string, mngrFut *futures.Future[*subs err = mngr.loadChatState(s.componentCtx) if err != nil { err = fmt.Errorf("init chat state: %w", err) - mngrFut.ResolveErr(err) - return err + return nil, err } - mngrFut.ResolveValue(mngr) - - return nil + return mngr, nil } type SubscribeLastMessagesRequest struct { From 049b1f4a0d57b101f323248a57a1a2ed586db06a Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Wed, 21 May 2025 22:58:52 +0200 Subject: [PATCH 143/164] GO-5589: Convert property and type keys to snake_case to enforce consistency --- core/api/docs/docs.go | 2 +- core/api/docs/openapi.json | 409 +++++++++++++++++++++++++++++++++- core/api/docs/openapi.yaml | 411 ++++++++++++++++++++++++++++++++++- core/api/model/property.go | 4 +- core/api/model/type.go | 4 +- core/api/service/property.go | 5 +- core/api/service/type.go | 5 +- 7 files changed, 817 insertions(+), 23 deletions(-) diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go index c1a82c302..e77cd9c9e 100644 --- a/core/api/docs/docs.go +++ b/core/api/docs/docs.go @@ -6,7 +6,7 @@ import "github.com/swaggo/swag/v2" const docTemplate = `{ "schemes": {{ marshal .Schemes }}, - "components": {"schemas":{"apimodel.AddObjectsToListRequest":{"properties":{"objects":{"description":"The list of object IDs to add to the list","example":["[\"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ\"]"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateApiKeyResponse":{"properties":{"api_key":{"description":"The api key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.CreateChallengeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for api_key","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object; see ListTypes or GetType endpoints for linked properties","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"some_user_defined_property_key","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"key":{"description":"The key of the type","example":"some_user_defined_type_key","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name","plural_name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file ids of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["emoji","file","icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag ids of the property; see ListTags endpoint for valid values","example":["['tag_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"key":{"example":"creator","type":"string"},"objects":{"description":"The object ids of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The text to search within object names and content; use types field for type filtering","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to include in results (e.g., \"page\", \"task\", \"bookmark\"); see ListTypes endpoint for valid values","example":["page","task","bookmark"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"key":{"example":"status","type":"string"},"select":{"description":"The selected tag id of the property; see ListTags endpoint for valid values","example":"tag_id","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results by","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting options for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The key of the property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","enum":["basic","profile","action","note","bookmark","set","set","collection","participant"],"type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","enum":["basic","profile","action","note"],"type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object; see ListTypes or GetType endpoints for linked properties","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"key":{"description":"The key to set for the property","example":"some_user_defined_property_key","type":"string"},"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"key":{"description":"The key to set for the type","example":"some_user_defined_type_key","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, + "components": {"schemas":{"apimodel.AddObjectsToListRequest":{"properties":{"objects":{"description":"The list of object IDs to add to the list","example":["[\"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ\"]"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.CheckboxPropertyLinkValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"key":{"example":"done","type":"string"}},"type":"object"},"apimodel.CheckboxPropertyValue":{"properties":{"checkbox":{"description":"The checkbox value of the property","example":true,"type":"boolean"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"done","type":"string"},"name":{"description":"The name of the property","example":"Done","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Color":{"description":"The color of the icon","enum":["grey","yellow","orange","red","pink","purple","blue","ice","teal","lime"],"example":"yellow","type":"string","x-enum-varnames":["ColorGrey","ColorYellow","ColorOrange","ColorRed","ColorPink","ColorPurple","ColorBlue","ColorIce","ColorTeal","ColorLime"]},"apimodel.CreateApiKeyResponse":{"properties":{"api_key":{"description":"The api key used to authenticate requests","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"}},"type":"object"},"apimodel.CreateChallengeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for api_key","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"apimodel.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set on the object; see ListTypes or GetType endpoints for linked properties","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"page","type":"string"}},"required":["type_key"],"type":"object"},"apimodel.CreatePropertyRequest":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property; should always be snake_case, otherwise it will be converted to snake_case","example":"some_user_defined_property_key","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","name"],"type":"object"},"apimodel.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"required":["name"],"type":"object"},"apimodel.CreateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name of the tag","example":"In progress","type":"string"}},"required":["color","name"],"type":"object"},"apimodel.CreateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"key":{"description":"The key of the type; should always be snake_case, otherwise it will be converted to snake_case","example":"some_user_defined_type_key","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name of the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"required":["layout","name","plural_name"],"type":"object"},"apimodel.DatePropertyLinkValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"key":{"example":"last_modified_date","type":"string"}},"type":"object"},"apimodel.DatePropertyValue":{"properties":{"date":{"description":"The date value of the property","example":"2025-02-14T12:34:56Z","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmailPropertyLinkValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"key":{"example":"email","type":"string"}},"type":"object"},"apimodel.EmailPropertyValue":{"properties":{"email":{"description":"The email value of the property","example":"example@example.com","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"email","type":"string"},"name":{"description":"The name of the property","example":"Email","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.EmojiIcon":{"properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FileIcon":{"properties":{"file":{"description":"The file of the icon","example":"bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"}},"type":"object"},"apimodel.FilesPropertyLinkValue":{"properties":{"files":{"description":"The file ids of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"key":{"example":"files","type":"string"}},"type":"object"},"apimodel.FilesPropertyValue":{"properties":{"files":{"description":"The file values of the property","example":["['file_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"files","type":"string"},"name":{"description":"The name of the property","example":"Files","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Filter":{"properties":{"condition":{"description":"The filter condition","enum":["equal","not_equal","greater","less","greater_or_equal","less_or_equal","like","not_like","in","not_in","empty","not_empty","all_in","not_all_in","exact_in","not_exact_in","exists"],"example":"contains","type":"string"},"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"apimodel.Icon":{"description":"The icon of the object","oneOf":[{"$ref":"#/components/schemas/apimodel.EmojiIcon"},{"$ref":"#/components/schemas/apimodel.FileIcon"},{"$ref":"#/components/schemas/apimodel.NamedIcon"}],"type":"object"},"apimodel.IconFormat":{"description":"The format of the icon","enum":["emoji","file","icon"],"type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"apimodel.IconName":{"description":"The name of the icon","example":"document","type":"string","x-enum-varnames":["IconNameAccessibility","IconNameAddCircle","IconNameAirplane","IconNameAlarm","IconNameAlbums","IconNameAlertCircle","IconNameAmericanFootball","IconNameAnalytics","IconNameAperture","IconNameApps","IconNameArchive","IconNameArrowBackCircle","IconNameArrowDownCircle","IconNameArrowForwardCircle","IconNameArrowRedoCircle","IconNameArrowRedo","IconNameArrowUndoCircle","IconNameArrowUndo","IconNameArrowUpCircle","IconNameAtCircle","IconNameAttach","IconNameBackspace","IconNameBagAdd","IconNameBagCheck","IconNameBagHandle","IconNameBagRemove","IconNameBag","IconNameBalloon","IconNameBan","IconNameBandage","IconNameBarChart","IconNameBarbell","IconNameBarcode","IconNameBaseball","IconNameBasket","IconNameBasketball","IconNameBatteryCharging","IconNameBatteryDead","IconNameBatteryFull","IconNameBatteryHalf","IconNameBeaker","IconNameBed","IconNameBeer","IconNameBicycle","IconNameBinoculars","IconNameBluetooth","IconNameBoat","IconNameBody","IconNameBonfire","IconNameBook","IconNameBookmark","IconNameBookmarks","IconNameBowlingBall","IconNameBriefcase","IconNameBrowsers","IconNameBrush","IconNameBug","IconNameBuild","IconNameBulb","IconNameBus","IconNameBusiness","IconNameCafe","IconNameCalculator","IconNameCalendarClear","IconNameCalendarNumber","IconNameCalendar","IconNameCall","IconNameCameraReverse","IconNameCamera","IconNameCarSport","IconNameCar","IconNameCard","IconNameCaretBackCircle","IconNameCaretBack","IconNameCaretDownCircle","IconNameCaretDown","IconNameCaretForwardCircle","IconNameCaretForward","IconNameCaretUpCircle","IconNameCaretUp","IconNameCart","IconNameCash","IconNameCellular","IconNameChatboxEllipses","IconNameChatbox","IconNameChatbubbleEllipses","IconNameChatbubble","IconNameChatbubbles","IconNameCheckbox","IconNameCheckmarkCircle","IconNameCheckmarkDoneCircle","IconNameChevronBackCircle","IconNameChevronDownCircle","IconNameChevronForwardCircle","IconNameChevronUpCircle","IconNameClipboard","IconNameCloseCircle","IconNameCloudCircle","IconNameCloudDone","IconNameCloudDownload","IconNameCloudOffline","IconNameCloudUpload","IconNameCloud","IconNameCloudyNight","IconNameCloudy","IconNameCodeSlash","IconNameCode","IconNameCog","IconNameColorFill","IconNameColorFilter","IconNameColorPalette","IconNameColorWand","IconNameCompass","IconNameConstruct","IconNameContact","IconNameContract","IconNameContrast","IconNameCopy","IconNameCreate","IconNameCrop","IconNameCube","IconNameCut","IconNameDesktop","IconNameDiamond","IconNameDice","IconNameDisc","IconNameDocumentAttach","IconNameDocumentLock","IconNameDocumentText","IconNameDocument","IconNameDocuments","IconNameDownload","IconNameDuplicate","IconNameEar","IconNameEarth","IconNameEasel","IconNameEgg","IconNameEllipse","IconNameEllipsisHorizontalCircle","IconNameEllipsisVerticalCircle","IconNameEnter","IconNameExit","IconNameExpand","IconNameExtensionPuzzle","IconNameEyeOff","IconNameEye","IconNameEyedrop","IconNameFastFood","IconNameFemale","IconNameFileTrayFull","IconNameFileTrayStacked","IconNameFileTray","IconNameFilm","IconNameFilterCircle","IconNameFingerPrint","IconNameFish","IconNameFitness","IconNameFlag","IconNameFlame","IconNameFlashOff","IconNameFlash","IconNameFlashlight","IconNameFlask","IconNameFlower","IconNameFolderOpen","IconNameFolder","IconNameFootball","IconNameFootsteps","IconNameFunnel","IconNameGameController","IconNameGift","IconNameGitBranch","IconNameGitCommit","IconNameGitCompare","IconNameGitMerge","IconNameGitNetwork","IconNameGitPullRequest","IconNameGlasses","IconNameGlobe","IconNameGolf","IconNameGrid","IconNameHammer","IconNameHandLeft","IconNameHandRight","IconNameHappy","IconNameHardwareChip","IconNameHeadset","IconNameHeartCircle","IconNameHeartDislikeCircle","IconNameHeartDislike","IconNameHeartHalf","IconNameHeart","IconNameHelpBuoy","IconNameHelpCircle","IconNameHome","IconNameHourglass","IconNameIceCream","IconNameIdCard","IconNameImage","IconNameImages","IconNameInfinite","IconNameInformationCircle","IconNameInvertMode","IconNameJournal","IconNameKey","IconNameKeypad","IconNameLanguage","IconNameLaptop","IconNameLayers","IconNameLeaf","IconNameLibrary","IconNameLink","IconNameListCircle","IconNameList","IconNameLocate","IconNameLocation","IconNameLockClosed","IconNameLockOpen","IconNameLogIn","IconNameLogOut","IconNameLogoAlipay","IconNameLogoAmazon","IconNameLogoAmplify","IconNameLogoAndroid","IconNameMagnet","IconNameMailOpen","IconNameMailUnread","IconNameMail","IconNameMaleFemale","IconNameMale","IconNameMan","IconNameMap","IconNameMedal","IconNameMedical","IconNameMedkit","IconNameMegaphone","IconNameMenu","IconNameMicCircle","IconNameMicOffCircle","IconNameMicOff","IconNameMic","IconNameMoon","IconNameMove","IconNameMusicalNote","IconNameMusicalNotes","IconNameNavigateCircle","IconNameNavigate","IconNameNewspaper","IconNameNotificationsCircle","IconNameNotificationsOffCircle","IconNameNotificationsOff","IconNameNotifications","IconNameNuclear","IconNameNutrition","IconNameOptions","IconNamePaperPlane","IconNamePartlySunny","IconNamePauseCircle","IconNamePause","IconNamePaw","IconNamePencil","IconNamePeopleCircle","IconNamePeople","IconNamePersonAdd","IconNamePersonCircle","IconNamePersonRemove","IconNamePerson","IconNamePhoneLandscape","IconNamePhonePortrait","IconNamePieChart","IconNamePin","IconNamePint","IconNamePizza","IconNamePlanet","IconNamePlayBackCircle","IconNamePlayBack","IconNamePlayCircle","IconNamePlayForwardCircle","IconNamePlayForward","IconNamePlaySkipBackCircle","IconNamePlaySkipBack","IconNamePlaySkipForwardCircle","IconNamePlaySkipForward","IconNamePlay","IconNamePodium","IconNamePower","IconNamePricetag","IconNamePricetags","IconNamePrint","IconNamePrism","IconNamePulse","IconNamePush","IconNameQrCode","IconNameRadioButtonOff","IconNameRadioButtonOn","IconNameRadio","IconNameRainy","IconNameReader","IconNameReceipt","IconNameRecording","IconNameRefreshCircle","IconNameRefresh","IconNameReloadCircle","IconNameReload","IconNameRemoveCircle","IconNameRepeat","IconNameResize","IconNameRestaurant","IconNameRibbon","IconNameRocket","IconNameRose","IconNameSad","IconNameSave","IconNameScale","IconNameScanCircle","IconNameScan","IconNameSchool","IconNameSearchCircle","IconNameSearch","IconNameSend","IconNameServer","IconNameSettings","IconNameShapes","IconNameShareSocial","IconNameShare","IconNameShieldCheckmark","IconNameShieldHalf","IconNameShield","IconNameShirt","IconNameShuffle","IconNameSkull","IconNameSnow","IconNameSparkles","IconNameSpeedometer","IconNameSquare","IconNameStarHalf","IconNameStar","IconNameStatsChart","IconNameStopCircle","IconNameStop","IconNameStopwatch","IconNameStorefront","IconNameSubway","IconNameSunny","IconNameSwapHorizontal","IconNameSwapVertical","IconNameSyncCircle","IconNameSync","IconNameTabletLandscape","IconNameTabletPortrait","IconNameTelescope","IconNameTennisball","IconNameTerminal","IconNameText","IconNameThermometer","IconNameThumbsDown","IconNameThumbsUp","IconNameThunderstorm","IconNameTicket","IconNameTime","IconNameTimer","IconNameToday","IconNameToggle","IconNameTrailSign","IconNameTrain","IconNameTransgender","IconNameTrashBin","IconNameTrash","IconNameTrendingDown","IconNameTrendingUp","IconNameTriangle","IconNameTrophy","IconNameTv","IconNameUmbrella","IconNameUnlink","IconNameVideocamOff","IconNameVideocam","IconNameVolumeHigh","IconNameVolumeLow","IconNameVolumeMedium","IconNameVolumeMute","IconNameVolumeOff","IconNameWalk","IconNameWallet","IconNameWarning","IconNameWatch","IconNameWater","IconNameWifi","IconNameWine","IconNameWoman"]},"apimodel.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"apimodel.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/apimodel.Member"}},"type":"object"},"apimodel.MultiSelectPropertyLinkValue":{"properties":{"key":{"example":"tag","type":"string"},"multi_select":{"description":"The selected tag ids of the property; see ListTags endpoint for valid values","example":["['tag_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.MultiSelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"tag","type":"string"},"multi_select":{"description":"The selected tag values of the property","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Tag","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.NamedIcon":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"format":{"$ref":"#/components/schemas/apimodel.IconFormat"},"name":{"$ref":"#/components/schemas/apimodel.IconName"}},"type":"object"},"apimodel.NumberPropertyLinkValue":{"properties":{"key":{"example":"height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"}},"type":"object"},"apimodel.NumberPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"height","type":"string"},"name":{"description":"The name of the property","example":"Height","type":"string"},"number":{"description":"The number value of the property","example":42,"type":"number"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.Object":{"properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.ObjectLayout"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectLayout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"apimodel.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.ObjectWithBody":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"markdown":{"description":"The markdown body of the object","example":"# This is the title\n...","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/apimodel.PropertyWithValue"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.ObjectsPropertyLinkValue":{"properties":{"key":{"example":"creator","type":"string"},"objects":{"description":"The object ids of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.ObjectsPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"creator","type":"string"},"name":{"description":"The name of the property","example":"Created by","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"objects":{"description":"The object values of the property","example":["['object_id']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.PhonePropertyLinkValue":{"properties":{"key":{"example":"phone","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.PhonePropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"phone","type":"string"},"name":{"description":"The name of the property","example":"Phone","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"phone":{"description":"The phone value of the property","example":"+1234567890","type":"string"}},"type":"object"},"apimodel.Property":{"description":"The property","properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"}},"type":"object"},"apimodel.PropertyFormat":{"description":"The format of the property used for filtering","enum":["text","number","select","multi_select","date","files","checkbox","url","email","phone","objects"],"type":"string","x-enum-varnames":["PropertyFormatText","PropertyFormatNumber","PropertyFormatSelect","PropertyFormatMultiSelect","PropertyFormatDate","PropertyFormatFiles","PropertyFormatCheckbox","PropertyFormatUrl","PropertyFormatEmail","PropertyFormatPhone","PropertyFormatObjects"]},"apimodel.PropertyLink":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"key":{"description":"The key of the property","example":"last_modified_date","type":"string"},"name":{"description":"The name of the property","example":"Last modified date","type":"string"}},"required":["format","key","name"],"type":"object"},"apimodel.PropertyLinkWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyLinkValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyLinkValue"}],"type":"object"},"apimodel.PropertyResponse":{"properties":{"property":{"$ref":"#/components/schemas/apimodel.Property"}},"type":"object"},"apimodel.PropertyWithValue":{"oneOf":[{"$ref":"#/components/schemas/apimodel.TextPropertyValue"},{"$ref":"#/components/schemas/apimodel.NumberPropertyValue"},{"$ref":"#/components/schemas/apimodel.SelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.MultiSelectPropertyValue"},{"$ref":"#/components/schemas/apimodel.DatePropertyValue"},{"$ref":"#/components/schemas/apimodel.FilesPropertyValue"},{"$ref":"#/components/schemas/apimodel.CheckboxPropertyValue"},{"$ref":"#/components/schemas/apimodel.URLPropertyValue"},{"$ref":"#/components/schemas/apimodel.EmailPropertyValue"},{"$ref":"#/components/schemas/apimodel.PhonePropertyValue"},{"$ref":"#/components/schemas/apimodel.ObjectsPropertyValue"}],"type":"object"},"apimodel.SearchRequest":{"properties":{"query":{"description":"The text to search within object names and content; use types field for type filtering","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/apimodel.SortOptions"},"types":{"description":"The types of objects to include in results (e.g., \"page\", \"task\", \"bookmark\"); see ListTypes endpoint for valid values","example":["page","task","bookmark"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.SelectPropertyLinkValue":{"properties":{"key":{"example":"status","type":"string"},"select":{"description":"The selected tag id of the property; see ListTags endpoint for valid values","example":"tag_id","type":"string"}},"type":"object"},"apimodel.SelectPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"status","type":"string"},"name":{"description":"The name of the property","example":"Status","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"select":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.Sort":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","enum":["asc","desc","custom"],"example":"asc","type":"string"}},"type":"object"},"apimodel.SortDirection":{"default":"desc","description":"The direction to sort the search results by","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"apimodel.SortOptions":{"description":"The sorting options for the search results","properties":{"direction":{"$ref":"#/components/schemas/apimodel.SortDirection"},"property_key":{"$ref":"#/components/schemas/apimodel.SortProperty"}},"type":"object"},"apimodel.SortProperty":{"default":"last_modified_date","description":"The key of the property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"apimodel.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"apimodel.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/apimodel.Space"}},"type":"object"},"apimodel.Tag":{"description":"The selected tag value of the property","properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"key":{"description":"The key of the tag","example":"67b0d3e3cda913b84c1299b1","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"},"object":{"description":"The data model of the object","example":"tag","type":"string"}},"type":"object"},"apimodel.TagResponse":{"properties":{"tag":{"$ref":"#/components/schemas/apimodel.Tag"}},"type":"object"},"apimodel.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/apimodel.ObjectWithBody"}},"type":"object"},"apimodel.TextPropertyLinkValue":{"properties":{"key":{"example":"description","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.TextPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"description","type":"string"},"name":{"description":"The name of the property","example":"Description","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"text":{"description":"The text value of the property","example":"Some text...","type":"string"}},"type":"object"},"apimodel.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"page","type":"string"},"layout":{"description":"The layout of the object","enum":["basic","profile","action","note","bookmark","set","set","collection","participant"],"type":"string","x-enum-varnames":["ObjectLayoutBasic","ObjectLayoutProfile","ObjectLayoutAction","ObjectLayoutNote","ObjectLayoutBookmark","ObjectLayoutSet","ObjectLayoutCollection","ObjectLayoutParticipant"]},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"plural_name":{"description":"The plural name of the type","example":"Pages","type":"string"},"properties":{"description":"The properties linked to the type","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.TypeLayout":{"description":"The layout of the type","enum":["basic","profile","action","note"],"type":"string","x-enum-varnames":["TypeLayoutBasic","TypeLayoutProfile","TypeLayoutAction","TypeLayoutNote"]},"apimodel.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/apimodel.Type"}},"type":"object"},"apimodel.URLPropertyLinkValue":{"properties":{"key":{"example":"source","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.URLPropertyValue":{"properties":{"format":{"$ref":"#/components/schemas/apimodel.PropertyFormat"},"id":{"description":"The id of the property","example":"bafyreids36kpw5ppuwm3ce2p4ezb3ab7cihhkq6yfbwzwpp4mln7rcgw7a","type":"string"},"key":{"description":"The key of the property","example":"source","type":"string"},"name":{"description":"The name of the property","example":"Source","type":"string"},"object":{"description":"The data model of the object","example":"property","type":"string"},"url":{"description":"The URL value of the property","example":"https://example.com","type":"string"}},"type":"object"},"apimodel.UpdateObjectRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the object; see ListTypes or GetType endpoints for linked properties","items":{"$ref":"#/components/schemas/apimodel.PropertyLinkWithValue"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.UpdatePropertyRequest":{"properties":{"key":{"description":"The key to set for the property; ; should always be snake_case, otherwise it will be converted to snake_case","example":"some_user_defined_property_key","type":"string"},"name":{"description":"The name to set for the property","example":"Last modified date","type":"string"}},"required":["name"],"type":"object"},"apimodel.UpdateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"apimodel.UpdateTagRequest":{"properties":{"color":{"$ref":"#/components/schemas/apimodel.Color"},"name":{"description":"The name to set for the tag","example":"In progress","type":"string"}},"type":"object"},"apimodel.UpdateTypeRequest":{"properties":{"icon":{"$ref":"#/components/schemas/apimodel.Icon"},"key":{"description":"The key to set for the type; should always be snake_case, otherwise it will be converted to snake_case","example":"some_user_defined_type_key","type":"string"},"layout":{"$ref":"#/components/schemas/apimodel.TypeLayout"},"name":{"description":"The name to set for the type","example":"Page","type":"string"},"plural_name":{"description":"The plural name to set for the type","example":"Pages","type":"string"},"properties":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ The properties to set for the type","items":{"$ref":"#/components/schemas/apimodel.PropertyLink"},"type":"array","uniqueItems":false}},"type":"object"},"apimodel.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/apimodel.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/apimodel.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-apimodel_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Property":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Property"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Tag":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Tag"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-apimodel_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/apimodel.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1000,"type":"integer"}},"type":"object"},"util.ForbiddenError":{"properties":{"code":{"example":"forbidden","type":"string"},"message":{"example":"Forbidden","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":403,"type":"integer"}},"type":"object"},"util.GoneError":{"properties":{"code":{"example":"resource_gone","type":"string"},"message":{"example":"Resource is gone","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":410,"type":"integer"}},"type":"object"},"util.NotFoundError":{"properties":{"code":{"example":"object_not_found","type":"string"},"message":{"example":"Resource not found","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":404,"type":"integer"}},"type":"object"},"util.RateLimitError":{"properties":{"code":{"example":"rate_limit_exceeded","type":"string"},"message":{"example":"Rate limit exceeded","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":429,"type":"integer"}},"type":"object"},"util.ServerError":{"properties":{"code":{"example":"internal_server_error","type":"string"},"message":{"example":"Internal server error","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":500,"type":"integer"}},"type":"object"},"util.UnauthorizedError":{"properties":{"code":{"example":"unauthorized","type":"string"},"message":{"example":"Unauthorized","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":401,"type":"integer"}},"type":"object"},"util.ValidationError":{"properties":{"code":{"example":"bad_request","type":"string"},"message":{"example":"Bad request","type":"string"},"object":{"example":"error","type":"string"},"status":{"example":400,"type":"integer"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}, "info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-api/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"}, "externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"}, "paths": {"/v1/auth/api_keys":{"post":{"description":"After receiving a ` + "`" + `challenge_id` + "`" + ` from the ` + "`" + `/v1/auth/challenges` + "`" + ` endpoint, the client calls this endpoint to provide the corresponding 4-digit code along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ` + "`" + `api_key` + "`" + `. This endpoint is central to the authentication process, as it validates the user's identity and issues a key that can be used for further interactions with the API.","operationId":"create_api_key","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the challenge to solve","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"The 4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateApiKeyResponse"}}},"description":"The API key that can be used in the Authorization header for subsequent requests"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Create API Key","tags":["Auth"]}},"/v1/auth/challenges":{"post":{"description":"Generates a one-time authentication challenge for granting API access to the user's vault. Upon providing a valid ` + "`" + `app_name` + "`" + `, the server issues a unique ` + "`" + `challenge_id` + "`" + ` and displays a 4-digit code within the Anytype Desktop. The ` + "`" + `challenge_id` + "`" + ` must then be used with the ` + "`" + `/v1/auth/api_keys` + "`" + ` endpoint to solve the challenge and retrieve an authentication token. This mechanism ensures that only trusted applications and authorized users gain access.","operationId":"create_auth_challenge","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The name of the app requesting API access","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateChallengeResponse"}}},"description":"The challenge ID associated with the started challenge"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Create Challenge","tags":["Auth"]}},"/v1/search":{"post":{"description":"Executes a global search over all spaces accessible to the authenticated user. The request body must specify the ` + "`" + `query` + "`" + ` text (currently matching only name and snippet of an object), optional filters on types (e.g., \"page\", \"task\"), and sort directives (default: descending by last modified date). Pagination is controlled via ` + "`" + `offset` + "`" + ` and ` + "`" + `limit` + "`" + ` query parameters to facilitate lazy loading in client UIs. The response returns a unified list of matched objects with their metadata and properties.","operationId":"search_global","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["Search"]}},"/v1/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","operationId":"list_spaces","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Space"}}},"description":"The list of spaces accessible by the authenticated user"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["Spaces"]},"post":{"description":"Creates a new space based on a supplied name and description in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new internal.","operationId":"create_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateSpaceRequest"}}},"description":"The space to create","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The created space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["Spaces"]}},"/v1/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","operationId":"get_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The space details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["Spaces"]},"patch":{"description":"Updates the name or description of an existing space. The request body should contain the new name and/or description in JSON format. This endpoint is useful for renaming or rebranding a workspace without needing to recreate it. The updated space’s metadata is returned in the response.","operationId":"update_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateSpaceRequest"}}},"description":"The space details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SpaceResponse"}}},"description":"The updated space"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update space","tags":["Spaces"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Adds one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections, enabling users to dynamically manage their collections without needing to modify the underlying object data.","operationId":"add_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to which objects will be added; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.AddObjectsToListRequest"}}},"description":"The list of object IDs to add to the list; must be retrieved from SearchSpace or GlobalSearch endpoints or obtained from response context","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters and is subject to rate limiting. It is used for dynamically managing collections without affecting the underlying object data.","operationId":"remove_list_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list from which the object will be removed; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to remove from the list; must be retrieved from SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint is essential for applications that need to display lists in various formats (e.g., grid, table) or with different sorting/filtering criteria.","operationId":"get_list_views","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve views for; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_View"}}},"description":"The list of views associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["Lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/views/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","operationId":"get_list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the list belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the list to retrieve objects for; must be retrieved from SearchSpace endpoint with types: ['collection', 'set']","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the view to retrieve objects for; must be retrieved from ListViews endpoint or omitted if you want to get all objects in the list","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects associated with the specified list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["Lists"]}},"/v1/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","operationId":"list_members","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list members for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Member"}}},"description":"The list of members in the space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["Members"]}},"/v1/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","operationId":"get_member","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to get the member from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity; must be retrieved from ListMembers endpoint or obtained from response context","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.MemberResponse"}}},"description":"The member details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["Members"]}},"/v1/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","operationId":"list_objects","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to list objects; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["Objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","operationId":"create_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the object; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateObjectRequest"}}},"description":"The object to create","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["Objects"]}},"/v1/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to delete; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["Objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","operationId":"get_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to retrieve; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"The format to return the object body in","in":"query","name":"format","schema":{"default":"\"md\"","enum":["md"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The retrieved object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["Objects"]},"patch":{"description":"This endpoint updates an existing object in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the details to be updated. The endpoint then returns the full object data, ready for further interactions.","operationId":"update_object","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the object exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the object to update; must be retrieved from ListObjects, SearchSpace or GlobalSearch endpoints or obtained from response context","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateObjectRequest"}}},"description":"The details of the object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.ObjectResponse"}}},"description":"The updated object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update object","tags":["Objects"]}},"/v1/spaces/{space_id}/properties":{"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Retrieves a paginated list of properties available within a specific space. Each property record includes its unique identifier, name and format. This information is essential for clients to understand the available properties for filtering or creating objects.","operationId":"list_properties","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list properties for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Property"}}},"description":"The list of properties in the specified space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List properties","tags":["Properties"]},"post":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Creates a new property in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include property details such as the name and format. The endpoint then returns the full property data, ready for further interactions.","operationId":"create_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the property in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreatePropertyRequest"}}},"description":"The property to create","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The created property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}":{"delete":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint “deletes” a property by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the property’s details after it has been archived. Proper error handling is in place for situations such as when the property isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The deleted property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete property","tags":["Properties"]},"get":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ Fetches detailed information about one specific property by its ID. This includes the property’s unique identifier, name and format. This detailed view assists clients in showing property options to users and in guiding the user interface (such as displaying appropriate input fields or selection options).","operationId":"get_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The requested property"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get property","tags":["Properties"]},"patch":{"description":"⚠ Warning: Properties are experimental and may change in the next update. ⚠ This endpoint updates an existing property in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name to be updated. The endpoint then returns the full property data, ready for further interactions.","operationId":"update_property","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the property belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdatePropertyRequest"}}},"description":"The property to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.PropertyResponse"}}},"description":"The updated property"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update property","tags":["Properties"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags":{"get":{"description":"This endpoint retrieves a paginated list of tags available for a specific property within a space. Each tag record includes its unique identifier, name, and color. This information is essential for clients to display select or multi-select options to users when they are creating or editing objects. The endpoint also supports pagination through offset and limit parameters.","operationId":"list_tags","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to list tags for; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to list tags for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Tag"}}},"description":"The list of tags"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Property not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List tags","tags":["Tags"]},"post":{"description":"This endpoint creates a new tag for a given property id in a space. The creation process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to add new tag options to a property.","operationId":"create_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to create the tag in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to create the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTagRequest"}}},"description":"The tag to create","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The created tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create tag","tags":["Tags"]}},"/v1/spaces/{space_id}/properties/{property_id}/tags/{tag_id}":{"delete":{"description":"This endpoint “deletes” a tag by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the tag’s details after it has been archived. Proper error handling is in place for situations such as when the tag isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to delete the tag from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to delete the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to delete; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The deleted tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete tag","tags":["Tags"]},"get":{"description":"This endpoint retrieves a tag for a given property id. The tag is identified by its unique identifier within the specified space. The response includes the tag's details such as its ID, name, and color. This is useful for clients to display or when editing a specific tag option.","operationId":"get_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve the tag from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to retrieve the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to retrieve; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The retrieved tag"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get tag","tags":["Tags"]},"patch":{"description":"This endpoint updates a tag for a given property id in a space. The update process is subject to rate limiting. The tag is identified by its unique identifier within the specified space. The request must include the tag's name and color. The response includes the tag's details such as its ID, name, and color. This is useful for clients when users want to edit existing tags for a property.","operationId":"update_tag","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to update the tag in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the property to update the tag for; must be retrieved from ListProperties endpoint or obtained from response context","in":"path","name":"property_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the tag to update; must be retrieved from ListTags endpoint or obtained from response context","in":"path","name":"tag_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTagRequest"}}},"description":"The tag to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TagResponse"}}},"description":"The updated tag"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update tag","tags":["Tags"]}},"/v1/spaces/{space_id}/search":{"post":{"description":"Performs a search within a single space (specified by the ` + "`" + `space_id` + "`" + ` path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search ` + "`" + `query` + "`" + `, ` + "`" + `types` + "`" + `, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","operationId":"search_space","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to search in; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.SearchRequest"}}},"description":"The search parameters used to filter and sort the results","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"The list of objects matching the search criteria"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["Search"]}},"/v1/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","operationId":"list_types","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to retrieve types from; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Type"}}},"description":"The list of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["Types"]},"post":{"description":"Creates a new type in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include type details such as the name, icon, and layout. The endpoint then returns the full type data, ready to be used for creating objects.","operationId":"create_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which to create the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.CreateTypeRequest"}}},"description":"The type to create","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The created type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}":{"delete":{"description":"This endpoint “deletes” an type by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the type’s details after it has been archived. Proper error handling is in place for situations such as when the type isn’t found or the deletion cannot be performed because of permission issues.","operationId":"delete_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to delete the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to delete; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The deleted type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete type","tags":["Types"]},"get":{"description":"Fetches detailed information about one specific type by its ID. This includes the type’s unique key, name, icon, and layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","operationId":"get_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space from which to retrieve the type; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["Types"]},"patch":{"description":"This endpoint updates an existing type in the specified space using a JSON payload. The update process is subject to rate limiting. The payload must include the name and properties to be updated. The endpoint then returns the full type data, ready for further interactions.","operationId":"update_type","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space in which the type exists; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to update; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.UpdateTypeRequest"}}},"description":"The type details to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TypeResponse"}}},"description":"The updated type"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update type","tags":["Types"]}},"/v1/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","operationId":"list_templates","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the type belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to retrieve templates for; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-apimodel_Object"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["Templates"]}},"/v1/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","operationId":"get_template","parameters":[{"description":"The version of the API to use","in":"header","name":"Anytype-Version","required":true,"schema":{"default":"2025-05-20","type":"string"}},{"description":"The ID of the space to which the template belongs; must be retrieved from ListSpaces endpoint","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the type to which the template belongs; must be retrieved from ListTypes endpoint or obtained from response context","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the template to retrieve; must be retrieved from ListTemplates endpoint or obtained from response context","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apimodel.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["Templates"]}}}, diff --git a/core/api/docs/openapi.json b/core/api/docs/openapi.json index 4b51d5aba..75acd4100 100644 --- a/core/api/docs/openapi.json +++ b/core/api/docs/openapi.json @@ -158,7 +158,7 @@ "$ref": "#/components/schemas/apimodel.PropertyFormat" }, "key": { - "description": "The key of the property", + "description": "The key of the property; should always be snake_case, otherwise it will be converted to snake_case", "example": "some_user_defined_property_key", "type": "string" }, @@ -215,7 +215,7 @@ "$ref": "#/components/schemas/apimodel.Icon" }, "key": { - "description": "The key of the type", + "description": "The key of the type; should always be snake_case, otherwise it will be converted to snake_case", "example": "some_user_defined_type_key", "type": "string" }, @@ -503,6 +503,403 @@ "IconFormatIcon" ] }, + "apimodel.IconName": { + "description": "The name of the icon", + "example": "document", + "type": "string", + "x-enum-varnames": [ + "IconNameAccessibility", + "IconNameAddCircle", + "IconNameAirplane", + "IconNameAlarm", + "IconNameAlbums", + "IconNameAlertCircle", + "IconNameAmericanFootball", + "IconNameAnalytics", + "IconNameAperture", + "IconNameApps", + "IconNameArchive", + "IconNameArrowBackCircle", + "IconNameArrowDownCircle", + "IconNameArrowForwardCircle", + "IconNameArrowRedoCircle", + "IconNameArrowRedo", + "IconNameArrowUndoCircle", + "IconNameArrowUndo", + "IconNameArrowUpCircle", + "IconNameAtCircle", + "IconNameAttach", + "IconNameBackspace", + "IconNameBagAdd", + "IconNameBagCheck", + "IconNameBagHandle", + "IconNameBagRemove", + "IconNameBag", + "IconNameBalloon", + "IconNameBan", + "IconNameBandage", + "IconNameBarChart", + "IconNameBarbell", + "IconNameBarcode", + "IconNameBaseball", + "IconNameBasket", + "IconNameBasketball", + "IconNameBatteryCharging", + "IconNameBatteryDead", + "IconNameBatteryFull", + "IconNameBatteryHalf", + "IconNameBeaker", + "IconNameBed", + "IconNameBeer", + "IconNameBicycle", + "IconNameBinoculars", + "IconNameBluetooth", + "IconNameBoat", + "IconNameBody", + "IconNameBonfire", + "IconNameBook", + "IconNameBookmark", + "IconNameBookmarks", + "IconNameBowlingBall", + "IconNameBriefcase", + "IconNameBrowsers", + "IconNameBrush", + "IconNameBug", + "IconNameBuild", + "IconNameBulb", + "IconNameBus", + "IconNameBusiness", + "IconNameCafe", + "IconNameCalculator", + "IconNameCalendarClear", + "IconNameCalendarNumber", + "IconNameCalendar", + "IconNameCall", + "IconNameCameraReverse", + "IconNameCamera", + "IconNameCarSport", + "IconNameCar", + "IconNameCard", + "IconNameCaretBackCircle", + "IconNameCaretBack", + "IconNameCaretDownCircle", + "IconNameCaretDown", + "IconNameCaretForwardCircle", + "IconNameCaretForward", + "IconNameCaretUpCircle", + "IconNameCaretUp", + "IconNameCart", + "IconNameCash", + "IconNameCellular", + "IconNameChatboxEllipses", + "IconNameChatbox", + "IconNameChatbubbleEllipses", + "IconNameChatbubble", + "IconNameChatbubbles", + "IconNameCheckbox", + "IconNameCheckmarkCircle", + "IconNameCheckmarkDoneCircle", + "IconNameChevronBackCircle", + "IconNameChevronDownCircle", + "IconNameChevronForwardCircle", + "IconNameChevronUpCircle", + "IconNameClipboard", + "IconNameCloseCircle", + "IconNameCloudCircle", + "IconNameCloudDone", + "IconNameCloudDownload", + "IconNameCloudOffline", + "IconNameCloudUpload", + "IconNameCloud", + "IconNameCloudyNight", + "IconNameCloudy", + "IconNameCodeSlash", + "IconNameCode", + "IconNameCog", + "IconNameColorFill", + "IconNameColorFilter", + "IconNameColorPalette", + "IconNameColorWand", + "IconNameCompass", + "IconNameConstruct", + "IconNameContact", + "IconNameContract", + "IconNameContrast", + "IconNameCopy", + "IconNameCreate", + "IconNameCrop", + "IconNameCube", + "IconNameCut", + "IconNameDesktop", + "IconNameDiamond", + "IconNameDice", + "IconNameDisc", + "IconNameDocumentAttach", + "IconNameDocumentLock", + "IconNameDocumentText", + "IconNameDocument", + "IconNameDocuments", + "IconNameDownload", + "IconNameDuplicate", + "IconNameEar", + "IconNameEarth", + "IconNameEasel", + "IconNameEgg", + "IconNameEllipse", + "IconNameEllipsisHorizontalCircle", + "IconNameEllipsisVerticalCircle", + "IconNameEnter", + "IconNameExit", + "IconNameExpand", + "IconNameExtensionPuzzle", + "IconNameEyeOff", + "IconNameEye", + "IconNameEyedrop", + "IconNameFastFood", + "IconNameFemale", + "IconNameFileTrayFull", + "IconNameFileTrayStacked", + "IconNameFileTray", + "IconNameFilm", + "IconNameFilterCircle", + "IconNameFingerPrint", + "IconNameFish", + "IconNameFitness", + "IconNameFlag", + "IconNameFlame", + "IconNameFlashOff", + "IconNameFlash", + "IconNameFlashlight", + "IconNameFlask", + "IconNameFlower", + "IconNameFolderOpen", + "IconNameFolder", + "IconNameFootball", + "IconNameFootsteps", + "IconNameFunnel", + "IconNameGameController", + "IconNameGift", + "IconNameGitBranch", + "IconNameGitCommit", + "IconNameGitCompare", + "IconNameGitMerge", + "IconNameGitNetwork", + "IconNameGitPullRequest", + "IconNameGlasses", + "IconNameGlobe", + "IconNameGolf", + "IconNameGrid", + "IconNameHammer", + "IconNameHandLeft", + "IconNameHandRight", + "IconNameHappy", + "IconNameHardwareChip", + "IconNameHeadset", + "IconNameHeartCircle", + "IconNameHeartDislikeCircle", + "IconNameHeartDislike", + "IconNameHeartHalf", + "IconNameHeart", + "IconNameHelpBuoy", + "IconNameHelpCircle", + "IconNameHome", + "IconNameHourglass", + "IconNameIceCream", + "IconNameIdCard", + "IconNameImage", + "IconNameImages", + "IconNameInfinite", + "IconNameInformationCircle", + "IconNameInvertMode", + "IconNameJournal", + "IconNameKey", + "IconNameKeypad", + "IconNameLanguage", + "IconNameLaptop", + "IconNameLayers", + "IconNameLeaf", + "IconNameLibrary", + "IconNameLink", + "IconNameListCircle", + "IconNameList", + "IconNameLocate", + "IconNameLocation", + "IconNameLockClosed", + "IconNameLockOpen", + "IconNameLogIn", + "IconNameLogOut", + "IconNameLogoAlipay", + "IconNameLogoAmazon", + "IconNameLogoAmplify", + "IconNameLogoAndroid", + "IconNameMagnet", + "IconNameMailOpen", + "IconNameMailUnread", + "IconNameMail", + "IconNameMaleFemale", + "IconNameMale", + "IconNameMan", + "IconNameMap", + "IconNameMedal", + "IconNameMedical", + "IconNameMedkit", + "IconNameMegaphone", + "IconNameMenu", + "IconNameMicCircle", + "IconNameMicOffCircle", + "IconNameMicOff", + "IconNameMic", + "IconNameMoon", + "IconNameMove", + "IconNameMusicalNote", + "IconNameMusicalNotes", + "IconNameNavigateCircle", + "IconNameNavigate", + "IconNameNewspaper", + "IconNameNotificationsCircle", + "IconNameNotificationsOffCircle", + "IconNameNotificationsOff", + "IconNameNotifications", + "IconNameNuclear", + "IconNameNutrition", + "IconNameOptions", + "IconNamePaperPlane", + "IconNamePartlySunny", + "IconNamePauseCircle", + "IconNamePause", + "IconNamePaw", + "IconNamePencil", + "IconNamePeopleCircle", + "IconNamePeople", + "IconNamePersonAdd", + "IconNamePersonCircle", + "IconNamePersonRemove", + "IconNamePerson", + "IconNamePhoneLandscape", + "IconNamePhonePortrait", + "IconNamePieChart", + "IconNamePin", + "IconNamePint", + "IconNamePizza", + "IconNamePlanet", + "IconNamePlayBackCircle", + "IconNamePlayBack", + "IconNamePlayCircle", + "IconNamePlayForwardCircle", + "IconNamePlayForward", + "IconNamePlaySkipBackCircle", + "IconNamePlaySkipBack", + "IconNamePlaySkipForwardCircle", + "IconNamePlaySkipForward", + "IconNamePlay", + "IconNamePodium", + "IconNamePower", + "IconNamePricetag", + "IconNamePricetags", + "IconNamePrint", + "IconNamePrism", + "IconNamePulse", + "IconNamePush", + "IconNameQrCode", + "IconNameRadioButtonOff", + "IconNameRadioButtonOn", + "IconNameRadio", + "IconNameRainy", + "IconNameReader", + "IconNameReceipt", + "IconNameRecording", + "IconNameRefreshCircle", + "IconNameRefresh", + "IconNameReloadCircle", + "IconNameReload", + "IconNameRemoveCircle", + "IconNameRepeat", + "IconNameResize", + "IconNameRestaurant", + "IconNameRibbon", + "IconNameRocket", + "IconNameRose", + "IconNameSad", + "IconNameSave", + "IconNameScale", + "IconNameScanCircle", + "IconNameScan", + "IconNameSchool", + "IconNameSearchCircle", + "IconNameSearch", + "IconNameSend", + "IconNameServer", + "IconNameSettings", + "IconNameShapes", + "IconNameShareSocial", + "IconNameShare", + "IconNameShieldCheckmark", + "IconNameShieldHalf", + "IconNameShield", + "IconNameShirt", + "IconNameShuffle", + "IconNameSkull", + "IconNameSnow", + "IconNameSparkles", + "IconNameSpeedometer", + "IconNameSquare", + "IconNameStarHalf", + "IconNameStar", + "IconNameStatsChart", + "IconNameStopCircle", + "IconNameStop", + "IconNameStopwatch", + "IconNameStorefront", + "IconNameSubway", + "IconNameSunny", + "IconNameSwapHorizontal", + "IconNameSwapVertical", + "IconNameSyncCircle", + "IconNameSync", + "IconNameTabletLandscape", + "IconNameTabletPortrait", + "IconNameTelescope", + "IconNameTennisball", + "IconNameTerminal", + "IconNameText", + "IconNameThermometer", + "IconNameThumbsDown", + "IconNameThumbsUp", + "IconNameThunderstorm", + "IconNameTicket", + "IconNameTime", + "IconNameTimer", + "IconNameToday", + "IconNameToggle", + "IconNameTrailSign", + "IconNameTrain", + "IconNameTransgender", + "IconNameTrashBin", + "IconNameTrash", + "IconNameTrendingDown", + "IconNameTrendingUp", + "IconNameTriangle", + "IconNameTrophy", + "IconNameTv", + "IconNameUmbrella", + "IconNameUnlink", + "IconNameVideocamOff", + "IconNameVideocam", + "IconNameVolumeHigh", + "IconNameVolumeLow", + "IconNameVolumeMedium", + "IconNameVolumeMute", + "IconNameVolumeOff", + "IconNameWalk", + "IconNameWallet", + "IconNameWarning", + "IconNameWatch", + "IconNameWater", + "IconNameWifi", + "IconNameWine", + "IconNameWoman" + ] + }, "apimodel.Member": { "description": "The member", "properties": { @@ -634,9 +1031,7 @@ "$ref": "#/components/schemas/apimodel.IconFormat" }, "name": { - "description": "The name of the icon", - "example": "document", - "type": "string" + "$ref": "#/components/schemas/apimodel.IconName" } }, "type": "object" @@ -1552,7 +1947,7 @@ "apimodel.UpdatePropertyRequest": { "properties": { "key": { - "description": "The key to set for the property", + "description": "The key to set for the property; ; should always be snake_case, otherwise it will be converted to snake_case", "example": "some_user_defined_property_key", "type": "string" }, @@ -1601,7 +1996,7 @@ "$ref": "#/components/schemas/apimodel.Icon" }, "key": { - "description": "The key to set for the type", + "description": "The key to set for the type; should always be snake_case, otherwise it will be converted to snake_case", "example": "some_user_defined_type_key", "type": "string" }, diff --git a/core/api/docs/openapi.yaml b/core/api/docs/openapi.yaml index 5fa6c8669..b6202c63b 100644 --- a/core/api/docs/openapi.yaml +++ b/core/api/docs/openapi.yaml @@ -123,7 +123,8 @@ components: format: $ref: '#/components/schemas/apimodel.PropertyFormat' key: - description: The key of the property + description: The key of the property; should always be snake_case, otherwise + it will be converted to snake_case example: some_user_defined_property_key type: string name: @@ -164,7 +165,8 @@ components: icon: $ref: '#/components/schemas/apimodel.Icon' key: - description: The key of the type + description: The key of the type; should always be snake_case, otherwise + it will be converted to snake_case example: some_user_defined_type_key type: string layout: @@ -377,6 +379,401 @@ components: - IconFormatEmoji - IconFormatFile - IconFormatIcon + apimodel.IconName: + description: The name of the icon + example: document + type: string + x-enum-varnames: + - IconNameAccessibility + - IconNameAddCircle + - IconNameAirplane + - IconNameAlarm + - IconNameAlbums + - IconNameAlertCircle + - IconNameAmericanFootball + - IconNameAnalytics + - IconNameAperture + - IconNameApps + - IconNameArchive + - IconNameArrowBackCircle + - IconNameArrowDownCircle + - IconNameArrowForwardCircle + - IconNameArrowRedoCircle + - IconNameArrowRedo + - IconNameArrowUndoCircle + - IconNameArrowUndo + - IconNameArrowUpCircle + - IconNameAtCircle + - IconNameAttach + - IconNameBackspace + - IconNameBagAdd + - IconNameBagCheck + - IconNameBagHandle + - IconNameBagRemove + - IconNameBag + - IconNameBalloon + - IconNameBan + - IconNameBandage + - IconNameBarChart + - IconNameBarbell + - IconNameBarcode + - IconNameBaseball + - IconNameBasket + - IconNameBasketball + - IconNameBatteryCharging + - IconNameBatteryDead + - IconNameBatteryFull + - IconNameBatteryHalf + - IconNameBeaker + - IconNameBed + - IconNameBeer + - IconNameBicycle + - IconNameBinoculars + - IconNameBluetooth + - IconNameBoat + - IconNameBody + - IconNameBonfire + - IconNameBook + - IconNameBookmark + - IconNameBookmarks + - IconNameBowlingBall + - IconNameBriefcase + - IconNameBrowsers + - IconNameBrush + - IconNameBug + - IconNameBuild + - IconNameBulb + - IconNameBus + - IconNameBusiness + - IconNameCafe + - IconNameCalculator + - IconNameCalendarClear + - IconNameCalendarNumber + - IconNameCalendar + - IconNameCall + - IconNameCameraReverse + - IconNameCamera + - IconNameCarSport + - IconNameCar + - IconNameCard + - IconNameCaretBackCircle + - IconNameCaretBack + - IconNameCaretDownCircle + - IconNameCaretDown + - IconNameCaretForwardCircle + - IconNameCaretForward + - IconNameCaretUpCircle + - IconNameCaretUp + - IconNameCart + - IconNameCash + - IconNameCellular + - IconNameChatboxEllipses + - IconNameChatbox + - IconNameChatbubbleEllipses + - IconNameChatbubble + - IconNameChatbubbles + - IconNameCheckbox + - IconNameCheckmarkCircle + - IconNameCheckmarkDoneCircle + - IconNameChevronBackCircle + - IconNameChevronDownCircle + - IconNameChevronForwardCircle + - IconNameChevronUpCircle + - IconNameClipboard + - IconNameCloseCircle + - IconNameCloudCircle + - IconNameCloudDone + - IconNameCloudDownload + - IconNameCloudOffline + - IconNameCloudUpload + - IconNameCloud + - IconNameCloudyNight + - IconNameCloudy + - IconNameCodeSlash + - IconNameCode + - IconNameCog + - IconNameColorFill + - IconNameColorFilter + - IconNameColorPalette + - IconNameColorWand + - IconNameCompass + - IconNameConstruct + - IconNameContact + - IconNameContract + - IconNameContrast + - IconNameCopy + - IconNameCreate + - IconNameCrop + - IconNameCube + - IconNameCut + - IconNameDesktop + - IconNameDiamond + - IconNameDice + - IconNameDisc + - IconNameDocumentAttach + - IconNameDocumentLock + - IconNameDocumentText + - IconNameDocument + - IconNameDocuments + - IconNameDownload + - IconNameDuplicate + - IconNameEar + - IconNameEarth + - IconNameEasel + - IconNameEgg + - IconNameEllipse + - IconNameEllipsisHorizontalCircle + - IconNameEllipsisVerticalCircle + - IconNameEnter + - IconNameExit + - IconNameExpand + - IconNameExtensionPuzzle + - IconNameEyeOff + - IconNameEye + - IconNameEyedrop + - IconNameFastFood + - IconNameFemale + - IconNameFileTrayFull + - IconNameFileTrayStacked + - IconNameFileTray + - IconNameFilm + - IconNameFilterCircle + - IconNameFingerPrint + - IconNameFish + - IconNameFitness + - IconNameFlag + - IconNameFlame + - IconNameFlashOff + - IconNameFlash + - IconNameFlashlight + - IconNameFlask + - IconNameFlower + - IconNameFolderOpen + - IconNameFolder + - IconNameFootball + - IconNameFootsteps + - IconNameFunnel + - IconNameGameController + - IconNameGift + - IconNameGitBranch + - IconNameGitCommit + - IconNameGitCompare + - IconNameGitMerge + - IconNameGitNetwork + - IconNameGitPullRequest + - IconNameGlasses + - IconNameGlobe + - IconNameGolf + - IconNameGrid + - IconNameHammer + - IconNameHandLeft + - IconNameHandRight + - IconNameHappy + - IconNameHardwareChip + - IconNameHeadset + - IconNameHeartCircle + - IconNameHeartDislikeCircle + - IconNameHeartDislike + - IconNameHeartHalf + - IconNameHeart + - IconNameHelpBuoy + - IconNameHelpCircle + - IconNameHome + - IconNameHourglass + - IconNameIceCream + - IconNameIdCard + - IconNameImage + - IconNameImages + - IconNameInfinite + - IconNameInformationCircle + - IconNameInvertMode + - IconNameJournal + - IconNameKey + - IconNameKeypad + - IconNameLanguage + - IconNameLaptop + - IconNameLayers + - IconNameLeaf + - IconNameLibrary + - IconNameLink + - IconNameListCircle + - IconNameList + - IconNameLocate + - IconNameLocation + - IconNameLockClosed + - IconNameLockOpen + - IconNameLogIn + - IconNameLogOut + - IconNameLogoAlipay + - IconNameLogoAmazon + - IconNameLogoAmplify + - IconNameLogoAndroid + - IconNameMagnet + - IconNameMailOpen + - IconNameMailUnread + - IconNameMail + - IconNameMaleFemale + - IconNameMale + - IconNameMan + - IconNameMap + - IconNameMedal + - IconNameMedical + - IconNameMedkit + - IconNameMegaphone + - IconNameMenu + - IconNameMicCircle + - IconNameMicOffCircle + - IconNameMicOff + - IconNameMic + - IconNameMoon + - IconNameMove + - IconNameMusicalNote + - IconNameMusicalNotes + - IconNameNavigateCircle + - IconNameNavigate + - IconNameNewspaper + - IconNameNotificationsCircle + - IconNameNotificationsOffCircle + - IconNameNotificationsOff + - IconNameNotifications + - IconNameNuclear + - IconNameNutrition + - IconNameOptions + - IconNamePaperPlane + - IconNamePartlySunny + - IconNamePauseCircle + - IconNamePause + - IconNamePaw + - IconNamePencil + - IconNamePeopleCircle + - IconNamePeople + - IconNamePersonAdd + - IconNamePersonCircle + - IconNamePersonRemove + - IconNamePerson + - IconNamePhoneLandscape + - IconNamePhonePortrait + - IconNamePieChart + - IconNamePin + - IconNamePint + - IconNamePizza + - IconNamePlanet + - IconNamePlayBackCircle + - IconNamePlayBack + - IconNamePlayCircle + - IconNamePlayForwardCircle + - IconNamePlayForward + - IconNamePlaySkipBackCircle + - IconNamePlaySkipBack + - IconNamePlaySkipForwardCircle + - IconNamePlaySkipForward + - IconNamePlay + - IconNamePodium + - IconNamePower + - IconNamePricetag + - IconNamePricetags + - IconNamePrint + - IconNamePrism + - IconNamePulse + - IconNamePush + - IconNameQrCode + - IconNameRadioButtonOff + - IconNameRadioButtonOn + - IconNameRadio + - IconNameRainy + - IconNameReader + - IconNameReceipt + - IconNameRecording + - IconNameRefreshCircle + - IconNameRefresh + - IconNameReloadCircle + - IconNameReload + - IconNameRemoveCircle + - IconNameRepeat + - IconNameResize + - IconNameRestaurant + - IconNameRibbon + - IconNameRocket + - IconNameRose + - IconNameSad + - IconNameSave + - IconNameScale + - IconNameScanCircle + - IconNameScan + - IconNameSchool + - IconNameSearchCircle + - IconNameSearch + - IconNameSend + - IconNameServer + - IconNameSettings + - IconNameShapes + - IconNameShareSocial + - IconNameShare + - IconNameShieldCheckmark + - IconNameShieldHalf + - IconNameShield + - IconNameShirt + - IconNameShuffle + - IconNameSkull + - IconNameSnow + - IconNameSparkles + - IconNameSpeedometer + - IconNameSquare + - IconNameStarHalf + - IconNameStar + - IconNameStatsChart + - IconNameStopCircle + - IconNameStop + - IconNameStopwatch + - IconNameStorefront + - IconNameSubway + - IconNameSunny + - IconNameSwapHorizontal + - IconNameSwapVertical + - IconNameSyncCircle + - IconNameSync + - IconNameTabletLandscape + - IconNameTabletPortrait + - IconNameTelescope + - IconNameTennisball + - IconNameTerminal + - IconNameText + - IconNameThermometer + - IconNameThumbsDown + - IconNameThumbsUp + - IconNameThunderstorm + - IconNameTicket + - IconNameTime + - IconNameTimer + - IconNameToday + - IconNameToggle + - IconNameTrailSign + - IconNameTrain + - IconNameTransgender + - IconNameTrashBin + - IconNameTrash + - IconNameTrendingDown + - IconNameTrendingUp + - IconNameTriangle + - IconNameTrophy + - IconNameTv + - IconNameUmbrella + - IconNameUnlink + - IconNameVideocamOff + - IconNameVideocam + - IconNameVolumeHigh + - IconNameVolumeLow + - IconNameVolumeMedium + - IconNameVolumeMute + - IconNameVolumeOff + - IconNameWalk + - IconNameWallet + - IconNameWarning + - IconNameWatch + - IconNameWater + - IconNameWifi + - IconNameWine + - IconNameWoman apimodel.Member: description: The member properties: @@ -477,9 +874,7 @@ components: format: $ref: '#/components/schemas/apimodel.IconFormat' name: - description: The name of the icon - example: document - type: string + $ref: '#/components/schemas/apimodel.IconName' type: object apimodel.NumberPropertyLinkValue: properties: @@ -1151,7 +1546,8 @@ components: apimodel.UpdatePropertyRequest: properties: key: - description: The key to set for the property + description: The key to set for the property; ; should always be snake_case, + otherwise it will be converted to snake_case example: some_user_defined_property_key type: string name: @@ -1186,7 +1582,8 @@ components: icon: $ref: '#/components/schemas/apimodel.Icon' key: - description: The key to set for the type + description: The key to set for the type; should always be snake_case, otherwise + it will be converted to snake_case example: some_user_defined_type_key type: string layout: diff --git a/core/api/model/property.go b/core/api/model/property.go index 784fe876e..4f90bf63f 100644 --- a/core/api/model/property.go +++ b/core/api/model/property.go @@ -42,13 +42,13 @@ type PropertyResponse struct { } type CreatePropertyRequest struct { - Key string `json:"key" example:"some_user_defined_property_key"` // The key of the property + Key string `json:"key" example:"some_user_defined_property_key"` // The key of the property; should always be snake_case, otherwise it will be converted to snake_case Name string `json:"name" binding:"required" example:"Last modified date"` // The name of the property Format PropertyFormat `json:"format" binding:"required" enums:"text,number,select,multi_select,date,files,checkbox,url,email,phone,objects"` // The format of the property } type UpdatePropertyRequest struct { - Key *string `json:"key,omitempty" example:"some_user_defined_property_key"` // The key to set for the property + Key *string `json:"key,omitempty" example:"some_user_defined_property_key"` // The key to set for the property; ; should always be snake_case, otherwise it will be converted to snake_case Name *string `json:"name,omitempty" binding:"required" example:"Last modified date"` // The name to set for the property } diff --git a/core/api/model/type.go b/core/api/model/type.go index 1a2bf2865..1dca6233d 100644 --- a/core/api/model/type.go +++ b/core/api/model/type.go @@ -35,7 +35,7 @@ type TypeResponse struct { } type CreateTypeRequest struct { - Key string `json:"key" example:"some_user_defined_type_key"` // The key of the type + Key string `json:"key" example:"some_user_defined_type_key"` // The key of the type; should always be snake_case, otherwise it will be converted to snake_case Name string `json:"name" binding:"required" example:"Page"` // The name of the type PluralName string `json:"plural_name" binding:"required" example:"Pages"` // The plural name of the type Icon Icon `json:"icon" oneOf:"EmojiIcon,FileIcon,NamedIcon"` // The icon of the type @@ -44,7 +44,7 @@ type CreateTypeRequest struct { } type UpdateTypeRequest struct { - Key *string `json:"key,omitempty" example:"some_user_defined_type_key"` // The key to set for the type + Key *string `json:"key,omitempty" example:"some_user_defined_type_key"` // The key to set for the type; should always be snake_case, otherwise it will be converted to snake_case Name *string `json:"name,omitempty" example:"Page"` // The name to set for the type PluralName *string `json:"plural_name,omitempty" example:"Pages"` // The plural name to set for the type Icon *Icon `json:"icon,omitempty" oneOf:"EmojiIcon,FileIcon,NamedIcon"` // The icon to set for the type diff --git a/core/api/service/property.go b/core/api/service/property.go index 928c7ff0b..b6eca3652 100644 --- a/core/api/service/property.go +++ b/core/api/service/property.go @@ -9,6 +9,7 @@ import ( "time" "github.com/gogo/protobuf/types" + "github.com/iancoleman/strcase" apimodel "github.com/anyproto/anytype-heart/core/api/model" "github.com/anyproto/anytype-heart/core/api/pagination" @@ -199,7 +200,7 @@ func (s *Service) CreateProperty(ctx context.Context, spaceId string, request ap } if request.Key != "" { - details.Fields[bundle.RelationKeyApiObjectKey.String()] = pbtypes.String(s.sanitizedString(request.Key)) + details.Fields[bundle.RelationKeyApiObjectKey.String()] = pbtypes.String(strcase.ToSnake(s.sanitizedString(request.Key))) } resp := s.mw.ObjectCreateRelation(ctx, &pb.RpcObjectCreateRelationRequest{ @@ -239,7 +240,7 @@ func (s *Service) UpdateProperty(ctx context.Context, spaceId string, propertyId } detailsToUpdate = append(detailsToUpdate, &model.Detail{ Key: bundle.RelationKeyApiObjectKey.String(), - Value: pbtypes.String(s.sanitizedString(*request.Key)), + Value: pbtypes.String(strcase.ToSnake(s.sanitizedString(*request.Key))), }) } diff --git a/core/api/service/type.go b/core/api/service/type.go index c1235912d..7853417b3 100644 --- a/core/api/service/type.go +++ b/core/api/service/type.go @@ -5,6 +5,7 @@ import ( "errors" "github.com/gogo/protobuf/types" + "github.com/iancoleman/strcase" apimodel "github.com/anyproto/anytype-heart/core/api/model" "github.com/anyproto/anytype-heart/core/api/pagination" @@ -288,7 +289,7 @@ func (s *Service) buildTypeDetails(ctx context.Context, spaceId string, request } if request.Key != "" { - fields[bundle.RelationKeyApiObjectKey.String()] = pbtypes.String(s.sanitizedString(request.Key)) + fields[bundle.RelationKeyApiObjectKey.String()] = pbtypes.String(strcase.ToSnake(s.sanitizedString(request.Key))) } iconFields, err := s.processIconFields(spaceId, request.Icon, true) @@ -355,7 +356,7 @@ func (s *Service) buildUpdatedTypeDetails(ctx context.Context, spaceId string, t if bundle.HasObjectTypeByKey(domain.TypeKey(util.ToTypeApiKey(t.UniqueKey))) { return nil, util.ErrBadInput("type key of bundled types cannot be changed") } - fields[bundle.RelationKeyApiObjectKey.String()] = pbtypes.String(s.sanitizedString(*request.Key)) + fields[bundle.RelationKeyApiObjectKey.String()] = pbtypes.String(strcase.ToSnake(s.sanitizedString(*request.Key))) } if request.Icon != nil { From 93c87d21f8c89cf49926e2cb3e4108f950ae853c Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Thu, 22 May 2025 00:30:43 +0200 Subject: [PATCH 144/164] GO-5589: Enforce uniqueness of type and property keys --- core/api/service/property.go | 20 ++++++++++++++++++-- core/api/service/type.go | 32 ++++++++++++++++++++++++++++++-- 2 files changed, 48 insertions(+), 4 deletions(-) diff --git a/core/api/service/property.go b/core/api/service/property.go index b6eca3652..151bda819 100644 --- a/core/api/service/property.go +++ b/core/api/service/property.go @@ -200,7 +200,15 @@ func (s *Service) CreateProperty(ctx context.Context, spaceId string, request ap } if request.Key != "" { - details.Fields[bundle.RelationKeyApiObjectKey.String()] = pbtypes.String(strcase.ToSnake(s.sanitizedString(request.Key))) + apiKey := strcase.ToSnake(s.sanitizedString(request.Key)) + propMap, err := s.getPropertyMapFromStore(ctx, spaceId, false) + if err != nil { + return apimodel.Property{}, err + } + if _, exists := propMap[apiKey]; exists { + return apimodel.Property{}, util.ErrBadInput(fmt.Sprintf("property key %q already exists", apiKey)) + } + details.Fields[bundle.RelationKeyApiObjectKey.String()] = pbtypes.String(apiKey) } resp := s.mw.ObjectCreateRelation(ctx, &pb.RpcObjectCreateRelationRequest{ @@ -235,12 +243,20 @@ func (s *Service) UpdateProperty(ctx context.Context, spaceId string, propertyId }) } if request.Key != nil { + newKey := strcase.ToSnake(s.sanitizedString(*request.Key)) + propMap, err := s.getPropertyMapFromStore(ctx, spaceId, false) + if err != nil { + return apimodel.Property{}, err + } + if existing, exists := propMap[newKey]; exists && existing.Id != propertyId { + return apimodel.Property{}, util.ErrBadInput(fmt.Sprintf("property key %q already exists", newKey)) + } if bundle.HasRelation(domain.RelationKey(prop.RelationKey)) { return apimodel.Property{}, util.ErrBadInput("property key of bundled properties cannot be changed") } detailsToUpdate = append(detailsToUpdate, &model.Detail{ Key: bundle.RelationKeyApiObjectKey.String(), - Value: pbtypes.String(strcase.ToSnake(s.sanitizedString(*request.Key))), + Value: pbtypes.String(newKey), }) } diff --git a/core/api/service/type.go b/core/api/service/type.go index 7853417b3..0f1b04cb5 100644 --- a/core/api/service/type.go +++ b/core/api/service/type.go @@ -3,6 +3,7 @@ package service import ( "context" "errors" + "fmt" "github.com/gogo/protobuf/types" "github.com/iancoleman/strcase" @@ -119,6 +120,21 @@ func (s *Service) GetType(ctx context.Context, spaceId string, typeId string) (a // CreateType creates a new type in a specific space. func (s *Service) CreateType(ctx context.Context, spaceId string, request apimodel.CreateTypeRequest) (apimodel.Type, error) { + if request.Key != "" { + newKey := strcase.ToSnake(s.sanitizedString(request.Key)) + propertyMap, err := s.getPropertyMapFromStore(ctx, spaceId, true) + if err != nil { + return apimodel.Type{}, err + } + typeMap, err := s.getTypeMapFromStore(ctx, spaceId, propertyMap, true) + if err != nil { + return apimodel.Type{}, err + } + if _, exists := typeMap[newKey]; exists { + return apimodel.Type{}, util.ErrBadInput(fmt.Sprintf("type key %q already exists", newKey)) + } + } + details, err := s.buildTypeDetails(ctx, spaceId, request) if err != nil { return apimodel.Type{}, err @@ -267,7 +283,7 @@ func (s *Service) getTypeFromStruct(details *types.Struct, propertyMap map[strin Archived: details.Fields[bundle.RelationKeyIsArchived.String()].GetBoolValue(), Layout: s.otLayoutToObjectLayout(model.ObjectTypeLayout(details.Fields[bundle.RelationKeyRecommendedLayout.String()].GetNumberValue())), Properties: s.getRecommendedPropertiesFromLists(details.Fields[bundle.RelationKeyRecommendedFeaturedRelations.String()].GetListValue(), details.Fields[bundle.RelationKeyRecommendedRelations.String()].GetListValue(), propertyMap), - UniqueKey: uk, + UniqueKey: uk, // internal only for simplified lookup } } @@ -353,10 +369,22 @@ func (s *Service) buildUpdatedTypeDetails(ctx context.Context, spaceId string, t fields[bundle.RelationKeyRecommendedLayout.String()] = pbtypes.Int64(int64(s.typeLayoutToObjectTypeLayout(*request.Layout))) } if request.Key != nil { + newKey := strcase.ToSnake(s.sanitizedString(*request.Key)) + propertyMap, err := s.getPropertyMapFromStore(ctx, spaceId, true) + if err != nil { + return nil, err + } + typeMap, err := s.getTypeMapFromStore(ctx, spaceId, propertyMap, true) + if err != nil { + return nil, err + } + if existing, exists := typeMap[newKey]; exists && existing.Id != t.Id { + return nil, util.ErrBadInput(fmt.Sprintf("type key %q already exists", newKey)) + } if bundle.HasObjectTypeByKey(domain.TypeKey(util.ToTypeApiKey(t.UniqueKey))) { return nil, util.ErrBadInput("type key of bundled types cannot be changed") } - fields[bundle.RelationKeyApiObjectKey.String()] = pbtypes.String(strcase.ToSnake(s.sanitizedString(*request.Key))) + fields[bundle.RelationKeyApiObjectKey.String()] = pbtypes.String(newKey) } if request.Icon != nil { From 054e044c4c815745575066489a54c86f3ac9057c Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Thu, 22 May 2025 00:32:29 +0200 Subject: [PATCH 145/164] GO-5589: Remove unused functions in key.go --- core/api/util/key.go | 24 +----------------------- 1 file changed, 1 insertion(+), 23 deletions(-) diff --git a/core/api/util/key.go b/core/api/util/key.go index 03a9bf763..feeb0507d 100644 --- a/core/api/util/key.go +++ b/core/api/util/key.go @@ -18,7 +18,7 @@ const ( propPrefix = "" typePrefix = "" tagPrefix = "" - internalRelationPrefix = "" // interally, we're using rk instead of uk when working with relations from api, where no "rel-" prefix exists + internalRelationPrefix = "" // internally, we're using rk instead of uk when working with relations from api, where no "rel-" prefix exists internalObjectTypePrefix = "ot-" internalRelationOptionPrefix = "opt-" ) @@ -32,28 +32,15 @@ func ToPropertyApiKey(internalKey string) string { return toApiKey(propPrefix, internalRelationPrefix, internalKey) } -// func FromPropertyApiKey(apiKey string) string { -// return fromApiKey(propPrefix, internalRelationPrefix, apiKey) -// } - func ToTypeApiKey(internalKey string) string { return toApiKey(typePrefix, internalObjectTypePrefix, internalKey) } -// func FromTypeApiKey(apiKey string) string { -// return fromApiKey(typePrefix, internalObjectTypePrefix, apiKey) -// } - func ToTagApiKey(internalKey string) string { return toApiKey(tagPrefix, internalRelationOptionPrefix, internalKey) } -// func FromTagApiKey(apiKey string) string { -// return fromApiKey(tagPrefix, internalRelationOptionPrefix, apiKey) -// } - // IsCustomKey returns true if key is exactly 24 letters and contains at least a digit. -// Non-custom properties never contain a digit. func IsCustomKey(key string) bool { return len(key) == 24 && hex24Pattern.MatchString(key) && digitPattern.MatchString(key) } @@ -69,12 +56,3 @@ func toApiKey(prefix, internalPrefix, internalKey string) string { } return prefix + k } - -// fromApiKey converts an API key back into internal format by stripping the API prefix and re-adding the internal prefix. -func fromApiKey(prefix, internalPrefix, apiKey string) string { - k := strings.TrimPrefix(apiKey, prefix) - if IsCustomKey(k) { - return internalPrefix + k - } - return internalPrefix + strcase.ToLowerCamel(k) -} From 82c4a9ffcbec0fc9937b3058b22a0851278bb5ba Mon Sep 17 00:00:00 2001 From: Sergey Date: Thu, 22 May 2025 12:15:47 +0200 Subject: [PATCH 146/164] GO-5639: Reindex chats db to fix old issues --- core/indexer/reindex.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/indexer/reindex.go b/core/indexer/reindex.go index 821345b47..7bd50e6dd 100644 --- a/core/indexer/reindex.go +++ b/core/indexer/reindex.go @@ -51,7 +51,7 @@ const ( ForceReindexDeletedObjectsCounter int32 = 1 ForceReindexParticipantsCounter int32 = 1 - ForceReindexChatsCounter int32 = 1 + ForceReindexChatsCounter int32 = 2 ) type allDeletedIdsProvider interface { From 75b8e55c4c9f8becf803c72a93a6ba23b03075e8 Mon Sep 17 00:00:00 2001 From: Sergey Date: Thu, 22 May 2025 12:16:53 +0200 Subject: [PATCH 147/164] GO-5639: Read all messages before join automatically --- .../editor/accountobject/accountobject.go | 4 +- core/block/editor/chatobject/chatobject.go | 10 +++- .../editor/chatobject/chatobject_test.go | 15 ++++- core/block/editor/chatobject/reading.go | 60 +++++++++++++++++++ core/block/source/interface.go | 13 +++- core/block/source/mock_source/mock_Store.go | 22 +++---- core/block/source/sourceimpl/store.go | 13 +++- core/block/source/sourceimpl/store_apply.go | 41 ++----------- 8 files changed, 126 insertions(+), 52 deletions(-) diff --git a/core/block/editor/accountobject/accountobject.go b/core/block/editor/accountobject/accountobject.go index 32fbd2f67..c95bbb2d6 100644 --- a/core/block/editor/accountobject/accountobject.go +++ b/core/block/editor/accountobject/accountobject.go @@ -136,7 +136,9 @@ func (a *accountObject) Init(ctx *smartblock.InitContext) error { } storeSource.SetPushChangeHook(a.OnPushChange) a.storeSource = storeSource - err = storeSource.ReadStoreDoc(ctx.Ctx, stateStore, a.onUpdate) + err = storeSource.ReadStoreDoc(ctx.Ctx, stateStore, source.ReadStoreDocParams{ + OnUpdateHook: a.onUpdate, + }) if err != nil { return fmt.Errorf("read store doc: %w", err) } diff --git a/core/block/editor/chatobject/chatobject.go b/core/block/editor/chatobject/chatobject.go index 8bf0ccd24..4dbf142a2 100644 --- a/core/block/editor/chatobject/chatobject.go +++ b/core/block/editor/chatobject/chatobject.go @@ -7,6 +7,7 @@ import ( anystore "github.com/anyproto/any-store" "github.com/anyproto/any-store/anyenc" + "github.com/anyproto/any-sync/commonspace/object/accountdata" "github.com/anyproto/any-sync/commonspace/object/tree/objecttree" "github.com/anyproto/any-sync/util/slice" "go.uber.org/zap" @@ -53,6 +54,7 @@ type StoreObject interface { type AccountService interface { AccountID() string + Keys() *accountdata.AccountKeys } type seenHeadsCollector interface { @@ -148,7 +150,13 @@ func (s *storeObject) Init(ctx *smartblock.InitContext) error { } s.store = stateStore - err = storeSource.ReadStoreDoc(ctx.Ctx, stateStore, s.onUpdate) + err = storeSource.ReadStoreDoc(ctx.Ctx, stateStore, source.ReadStoreDocParams{ + OnUpdateHook: s.onUpdate, + ReadStoreTreeHook: &readStoreTreeHook{ + currentIdentity: s.accountService.Keys().SignKey.GetPublic(), + source: s.storeSource, + }, + }) if err != nil { return fmt.Errorf("read store doc: %w", err) } diff --git a/core/block/editor/chatobject/chatobject_test.go b/core/block/editor/chatobject/chatobject_test.go index 294569b60..e56aa5099 100644 --- a/core/block/editor/chatobject/chatobject_test.go +++ b/core/block/editor/chatobject/chatobject_test.go @@ -7,6 +7,8 @@ import ( "testing" "github.com/anyproto/any-sync/app" + "github.com/anyproto/any-sync/commonspace/object/accountdata" + "github.com/anyproto/any-sync/util/crypto" "github.com/globalsign/mgo/bson" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" @@ -37,15 +39,26 @@ const ( type accountServiceStub struct { accountId string + signKey crypto.PrivKey } func (a *accountServiceStub) AccountID() string { return a.accountId } +func (a *accountServiceStub) Keys() *accountdata.AccountKeys { + return &accountdata.AccountKeys{ + SignKey: a.signKey, + } +} + func (a *accountServiceStub) Name() string { return "accountServiceStub" } -func (a *accountServiceStub) Init(ap *app.App) error { return nil } +func (a *accountServiceStub) Init(ap *app.App) error { + signKey, _, _ := crypto.GenerateRandomEd25519KeyPair() + a.signKey = signKey + return nil +} type stubSeenHeadsCollector struct { heads []string diff --git a/core/block/editor/chatobject/reading.go b/core/block/editor/chatobject/reading.go index 36fcbabaf..6bd968235 100644 --- a/core/block/editor/chatobject/reading.go +++ b/core/block/editor/chatobject/reading.go @@ -4,7 +4,12 @@ import ( "context" "fmt" + "github.com/anyproto/any-sync/commonspace/object/tree/objecttree" + "github.com/anyproto/any-sync/util/crypto" + "github.com/anyproto/any-sync/util/slice" "github.com/anyproto/anytype-heart/core/block/chats/chatmodel" + "github.com/anyproto/anytype-heart/core/block/source" + "golang.org/x/exp/slices" ) func (s *storeObject) MarkReadMessages(ctx context.Context, afterOrderId, beforeOrderId string, lastStateId string, counterType chatmodel.CounterType) error { @@ -116,3 +121,58 @@ func (s *storeObject) markReadMessages(changeIds []string, counterType chatmodel } return nil } + +type readStoreTreeHook struct { + joinedAclRecordId string + headsBeforeJoin []string + currentIdentity crypto.PubKey + source source.Store +} + +func (h *readStoreTreeHook) BeforeIteration(ot objecttree.ObjectTree) { + h.joinedAclRecordId = ot.AclList().Head().Id + for _, accState := range ot.AclList().AclState().CurrentAccounts() { + if !accState.PubKey.Equals(h.currentIdentity) { + continue + } + noPermissionsIdx := -1 + for i := len(accState.PermissionChanges) - 1; i >= 0; i-- { + permChange := accState.PermissionChanges[i] + if permChange.Permission.NoPermissions() { + noPermissionsIdx = i + break + } + } + + if noPermissionsIdx == -1 || noPermissionsIdx == len(accState.PermissionChanges)-1 { + break + } + + // Get a permission change when user was joined space successfully + permChange := accState.PermissionChanges[noPermissionsIdx+1] + h.joinedAclRecordId = permChange.RecordId + } +} + +func (h *readStoreTreeHook) OnIteration(ot objecttree.ObjectTree, change *objecttree.Change) { + if ok, _ := ot.AclList().IsAfter(h.joinedAclRecordId, change.AclHeadId); ok { + h.headsBeforeJoin = slice.DiscardFromSlice(h.headsBeforeJoin, func(s string) bool { + return slices.Contains(change.PreviousIds, s) + }) + if !slices.Contains(h.headsBeforeJoin, change.Id) { + h.headsBeforeJoin = append(h.headsBeforeJoin, change.Id) + } + } +} + +func (h *readStoreTreeHook) AfterDiffManagersInit(ctx context.Context) error { + err := h.source.MarkSeenHeads(ctx, diffManagerMessages, h.headsBeforeJoin) + if err != nil { + return fmt.Errorf("mark read messages: %w", err) + } + h.source.MarkSeenHeads(ctx, diffManagerMentions, h.headsBeforeJoin) + if err != nil { + return fmt.Errorf("mark read mentions: %w", err) + } + return nil +} diff --git a/core/block/source/interface.go b/core/block/source/interface.go index 0761ec311..46dbd12c0 100644 --- a/core/block/source/interface.go +++ b/core/block/source/interface.go @@ -58,9 +58,20 @@ type Service interface { app.Component } +type ReadStoreTreeHook interface { + BeforeIteration(ot objecttree.ObjectTree) + OnIteration(ot objecttree.ObjectTree, change *objecttree.Change) + AfterDiffManagersInit(ctx context.Context) error +} + +type ReadStoreDocParams struct { + OnUpdateHook func() + ReadStoreTreeHook ReadStoreTreeHook +} + type Store interface { Source - ReadStoreDoc(ctx context.Context, stateStore *storestate.StoreState, onUpdateHook func()) (err error) + ReadStoreDoc(ctx context.Context, stateStore *storestate.StoreState, params ReadStoreDocParams) (err error) PushStoreChange(ctx context.Context, params PushStoreChangeParams) (changeId string, err error) SetPushChangeHook(onPushChange PushChangeHook) diff --git a/core/block/source/mock_source/mock_Store.go b/core/block/source/mock_source/mock_Store.go index 86bb1ea0b..3055c9a5d 100644 --- a/core/block/source/mock_source/mock_Store.go +++ b/core/block/source/mock_source/mock_Store.go @@ -590,17 +590,17 @@ func (_c *MockStore_ReadOnly_Call) RunAndReturn(run func() bool) *MockStore_Read return _c } -// ReadStoreDoc provides a mock function with given fields: ctx, stateStore, onUpdateHook -func (_m *MockStore) ReadStoreDoc(ctx context.Context, stateStore *storestate.StoreState, onUpdateHook func()) error { - ret := _m.Called(ctx, stateStore, onUpdateHook) +// ReadStoreDoc provides a mock function with given fields: ctx, stateStore, params +func (_m *MockStore) ReadStoreDoc(ctx context.Context, stateStore *storestate.StoreState, params source.ReadStoreDocParams) error { + ret := _m.Called(ctx, stateStore, params) if len(ret) == 0 { panic("no return value specified for ReadStoreDoc") } var r0 error - if rf, ok := ret.Get(0).(func(context.Context, *storestate.StoreState, func()) error); ok { - r0 = rf(ctx, stateStore, onUpdateHook) + if rf, ok := ret.Get(0).(func(context.Context, *storestate.StoreState, source.ReadStoreDocParams) error); ok { + r0 = rf(ctx, stateStore, params) } else { r0 = ret.Error(0) } @@ -616,14 +616,14 @@ type MockStore_ReadStoreDoc_Call struct { // ReadStoreDoc is a helper method to define mock.On call // - ctx context.Context // - stateStore *storestate.StoreState -// - onUpdateHook func() -func (_e *MockStore_Expecter) ReadStoreDoc(ctx interface{}, stateStore interface{}, onUpdateHook interface{}) *MockStore_ReadStoreDoc_Call { - return &MockStore_ReadStoreDoc_Call{Call: _e.mock.On("ReadStoreDoc", ctx, stateStore, onUpdateHook)} +// - params source.ReadStoreDocParams +func (_e *MockStore_Expecter) ReadStoreDoc(ctx interface{}, stateStore interface{}, params interface{}) *MockStore_ReadStoreDoc_Call { + return &MockStore_ReadStoreDoc_Call{Call: _e.mock.On("ReadStoreDoc", ctx, stateStore, params)} } -func (_c *MockStore_ReadStoreDoc_Call) Run(run func(ctx context.Context, stateStore *storestate.StoreState, onUpdateHook func())) *MockStore_ReadStoreDoc_Call { +func (_c *MockStore_ReadStoreDoc_Call) Run(run func(ctx context.Context, stateStore *storestate.StoreState, params source.ReadStoreDocParams)) *MockStore_ReadStoreDoc_Call { _c.Call.Run(func(args mock.Arguments) { - run(args[0].(context.Context), args[1].(*storestate.StoreState), args[2].(func())) + run(args[0].(context.Context), args[1].(*storestate.StoreState), args[2].(source.ReadStoreDocParams)) }) return _c } @@ -633,7 +633,7 @@ func (_c *MockStore_ReadStoreDoc_Call) Return(err error) *MockStore_ReadStoreDoc return _c } -func (_c *MockStore_ReadStoreDoc_Call) RunAndReturn(run func(context.Context, *storestate.StoreState, func()) error) *MockStore_ReadStoreDoc_Call { +func (_c *MockStore_ReadStoreDoc_Call) RunAndReturn(run func(context.Context, *storestate.StoreState, source.ReadStoreDocParams) error) *MockStore_ReadStoreDoc_Call { _c.Call.Return(run) return _c } diff --git a/core/block/source/sourceimpl/store.go b/core/block/source/sourceimpl/store.go index fe73eb2de..fb1beae5c 100644 --- a/core/block/source/sourceimpl/store.go +++ b/core/block/source/sourceimpl/store.go @@ -128,6 +128,7 @@ func (s *store) InitDiffManager(ctx context.Context, name string, seenHeads []st if err != nil { return fmt.Errorf("init diff manager: %w", err) } + manager.diffManager.Init() err = s.getTechSpace().KeyValueService().SubscribeForKey(s.seenHeadsKey(name), name, func(key string, val keyvalueservice.Value) { s.ObjectTree.Lock() @@ -182,8 +183,8 @@ func (s *store) PushChange(params source.PushChangeParams) (id string, err error return "", nil } -func (s *store) ReadStoreDoc(ctx context.Context, storeState *storestate.StoreState, onUpdateHook func()) (err error) { - s.onUpdateHook = onUpdateHook +func (s *store) ReadStoreDoc(ctx context.Context, storeState *storestate.StoreState, params source.ReadStoreDocParams) (err error) { + s.onUpdateHook = params.OnUpdateHook s.store = storeState tx, err := s.store.NewTx(ctx) @@ -200,6 +201,7 @@ func (s *store) ReadStoreDoc(ctx context.Context, storeState *storestate.StoreSt tx: tx, allIsNew: allIsNew, ot: s.ObjectTree, + hook: params.ReadStoreTreeHook, } if err = applier.Apply(); err != nil { return errors.Join(tx.Rollback(), err) @@ -213,6 +215,13 @@ func (s *store) ReadStoreDoc(ctx context.Context, storeState *storestate.StoreSt if err != nil { return fmt.Errorf("init diff managers: %w", err) } + + if params.ReadStoreTreeHook != nil { + err = params.ReadStoreTreeHook.AfterDiffManagersInit(ctx) + if err != nil { + return fmt.Errorf("after diff managers init hook: %w", err) + } + } return nil } diff --git a/core/block/source/sourceimpl/store_apply.go b/core/block/source/sourceimpl/store_apply.go index 7f8f6ef8b..97cef980c 100644 --- a/core/block/source/sourceimpl/store_apply.go +++ b/core/block/source/sourceimpl/store_apply.go @@ -7,10 +7,9 @@ import ( "github.com/anyproto/any-sync/commonspace/object/tree/objecttree" "github.com/anyproto/any-sync/commonspace/object/tree/treechangeproto" "github.com/anyproto/any-sync/util/crypto" - "github.com/anyproto/any-sync/util/slice" - "golang.org/x/exp/slices" "github.com/anyproto/anytype-heart/core/block/editor/storestate" + "github.com/anyproto/anytype-heart/core/block/source" "github.com/anyproto/anytype-heart/pb" ) @@ -21,50 +20,24 @@ type storeApply struct { currentIdentity crypto.PubKey needFetchPrevOrderId bool + hook source.ReadStoreTreeHook } func (a *storeApply) Apply() error { var lastErr error - a.ot.AclList().RLock() - joinedAclRecordId := a.ot.AclList().Head().Id - for _, accState := range a.ot.AclList().AclState().CurrentAccounts() { - if !accState.PubKey.Equals(a.currentIdentity) { - continue - } - noPermissionsIdx := -1 - for i := len(accState.PermissionChanges) - 1; i >= 0; i-- { - permChange := accState.PermissionChanges[i] - if permChange.Permission.NoPermissions() { - noPermissionsIdx = i - break - } - } - - if noPermissionsIdx == -1 || noPermissionsIdx == len(accState.PermissionChanges)-1 { - break - } - - // Get a permission change when user was joined space successfully - permChange := accState.PermissionChanges[noPermissionsIdx+1] - joinedAclRecordId = permChange.RecordId + if a.hook != nil { + a.hook.BeforeIteration(a.ot) } - a.ot.AclList().RUnlock() - var heads []string err := a.ot.IterateRoot(UnmarshalStoreChange, func(change *objecttree.Change) bool { // not a new change - remember and continue if !a.allIsNew && !change.IsNew { return true } - if ok, _ := a.ot.AclList().IsAfter(joinedAclRecordId, change.AclHeadId); ok { - heads = slice.DiscardFromSlice(heads, func(s string) bool { - return slices.Contains(change.PreviousIds, s) - }) - if !slices.Contains(heads, change.Id) { - heads = append(heads, change.Id) - } + if a.hook != nil { + a.hook.OnIteration(a.ot, change) } lastErr = a.applyChange(change) @@ -75,8 +48,6 @@ func (a *storeApply) Apply() error { return true }) - fmt.Println("HEADS=", heads) - return errors.Join(err, lastErr) } From 9d24d990b334b04b043469ffd881c95dafdd1dbc Mon Sep 17 00:00:00 2001 From: Sergey Date: Thu, 22 May 2025 12:28:46 +0200 Subject: [PATCH 148/164] GO-5639: Add missing error handling --- core/block/editor/chatobject/reading.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/block/editor/chatobject/reading.go b/core/block/editor/chatobject/reading.go index 6bd968235..b7870e510 100644 --- a/core/block/editor/chatobject/reading.go +++ b/core/block/editor/chatobject/reading.go @@ -170,7 +170,7 @@ func (h *readStoreTreeHook) AfterDiffManagersInit(ctx context.Context) error { if err != nil { return fmt.Errorf("mark read messages: %w", err) } - h.source.MarkSeenHeads(ctx, diffManagerMentions, h.headsBeforeJoin) + err = h.source.MarkSeenHeads(ctx, diffManagerMentions, h.headsBeforeJoin) if err != nil { return fmt.Errorf("mark read mentions: %w", err) } From 5cad57ab7087d89946214e8b78fa75408a60f0f1 Mon Sep 17 00:00:00 2001 From: Sergey Date: Thu, 22 May 2025 12:30:00 +0200 Subject: [PATCH 149/164] GO-5639: Clean up --- core/block/source/sourceimpl/store_apply.go | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/core/block/source/sourceimpl/store_apply.go b/core/block/source/sourceimpl/store_apply.go index 97cef980c..8bb335a6b 100644 --- a/core/block/source/sourceimpl/store_apply.go +++ b/core/block/source/sourceimpl/store_apply.go @@ -6,7 +6,6 @@ import ( "github.com/anyproto/any-sync/commonspace/object/tree/objecttree" "github.com/anyproto/any-sync/commonspace/object/tree/treechangeproto" - "github.com/anyproto/any-sync/util/crypto" "github.com/anyproto/anytype-heart/core/block/editor/storestate" "github.com/anyproto/anytype-heart/core/block/source" @@ -14,10 +13,9 @@ import ( ) type storeApply struct { - tx *storestate.StoreStateTx - ot objecttree.ObjectTree - allIsNew bool - currentIdentity crypto.PubKey + tx *storestate.StoreStateTx + ot objecttree.ObjectTree + allIsNew bool needFetchPrevOrderId bool hook source.ReadStoreTreeHook From 701251d0fbb0a48178fe7e7ec76df26f734491c3 Mon Sep 17 00:00:00 2001 From: Sergey Date: Thu, 22 May 2025 13:35:47 +0200 Subject: [PATCH 150/164] GO-5639: Simplify algorithm --- core/block/editor/chatobject/reading.go | 18 ++++++++---------- core/block/source/sourceimpl/store.go | 10 ++++------ 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/core/block/editor/chatobject/reading.go b/core/block/editor/chatobject/reading.go index b7870e510..85af7d9cf 100644 --- a/core/block/editor/chatobject/reading.go +++ b/core/block/editor/chatobject/reading.go @@ -135,22 +135,20 @@ func (h *readStoreTreeHook) BeforeIteration(ot objecttree.ObjectTree) { if !accState.PubKey.Equals(h.currentIdentity) { continue } - noPermissionsIdx := -1 + // Find the first record in which the user has got permissions since the last join + // Example: + // We have acl: [ 1:noPermissions, 2:reader, 3:noPermission, 4:reader, 5:writer ] + // Record with id=4 is one that we need for i := len(accState.PermissionChanges) - 1; i >= 0; i-- { permChange := accState.PermissionChanges[i] + if permChange.Permission.NoPermissions() { - noPermissionsIdx = i break + } else { + h.joinedAclRecordId = permChange.RecordId } } - - if noPermissionsIdx == -1 || noPermissionsIdx == len(accState.PermissionChanges)-1 { - break - } - - // Get a permission change when user was joined space successfully - permChange := accState.PermissionChanges[noPermissionsIdx+1] - h.joinedAclRecordId = permChange.RecordId + break } } diff --git a/core/block/source/sourceimpl/store.go b/core/block/source/sourceimpl/store.go index fb1beae5c..c3fe71ee0 100644 --- a/core/block/source/sourceimpl/store.go +++ b/core/block/source/sourceimpl/store.go @@ -197,11 +197,10 @@ func (s *store) ReadStoreDoc(ctx context.Context, storeState *storestate.StoreSt allIsNew = true } applier := &storeApply{ - currentIdentity: s.accountKeysService.Account().SignKey.GetPublic(), - tx: tx, - allIsNew: allIsNew, - ot: s.ObjectTree, - hook: params.ReadStoreTreeHook, + tx: tx, + allIsNew: allIsNew, + ot: s.ObjectTree, + hook: params.ReadStoreTreeHook, } if err = applier.Apply(); err != nil { return errors.Join(tx.Rollback(), err) @@ -300,7 +299,6 @@ func (s *store) update(ctx context.Context, tree objecttree.ObjectTree) error { return err } applier := &storeApply{ - currentIdentity: s.accountKeysService.Account().SignKey.GetPublic(), tx: tx, ot: tree, needFetchPrevOrderId: true, From 75f41dbeb711c56cb6faec2bc1eb88ca8412d3cd Mon Sep 17 00:00:00 2001 From: Sergey Date: Thu, 22 May 2025 17:39:21 +0200 Subject: [PATCH 151/164] GO-5686: Chats: fix overwritting events in session context --- core/block/chats/chatsubscription/manager.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/block/chats/chatsubscription/manager.go b/core/block/chats/chatsubscription/manager.go index 695fe713d..79c4b6f46 100644 --- a/core/block/chats/chatsubscription/manager.go +++ b/core/block/chats/chatsubscription/manager.go @@ -155,7 +155,7 @@ func (s *subscriptionManager) Flush() { Messages: events, } if s.sessionContext != nil { - s.sessionContext.SetMessages(s.chatId, events) + s.sessionContext.SetMessages(s.chatId, append(s.sessionContext.GetMessages(), events...)) s.eventSender.BroadcastToOtherSessions(s.sessionContext.ID(), ev) } else if s.IsActive() { s.eventSender.Broadcast(ev) From 4a939d4258497d3f0e18fcdfee8a96915452168d Mon Sep 17 00:00:00 2001 From: kirillston Date: Thu, 22 May 2025 18:45:51 +0200 Subject: [PATCH 152/164] GO-5563 Unset layout on type change --- core/block/editor/basic/details.go | 1 + 1 file changed, 1 insertion(+) diff --git a/core/block/editor/basic/details.go b/core/block/editor/basic/details.go index a7e170e64..27c175a6b 100644 --- a/core/block/editor/basic/details.go +++ b/core/block/editor/basic/details.go @@ -350,6 +350,7 @@ func (bs *basic) SetObjectTypesInState(s *state.State, objectTypeKeys []domain.T s.SetObjectTypeKeys(objectTypeKeys) removeInternalFlags(s) + s.Details().Delete(bundle.RelationKeyLayout) toLayout, err := bs.getLayoutForType(objectTypeKeys[0]) if err != nil { From b8e903338152c64bcd103188df4fc2a9d0cefc62 Mon Sep 17 00:00:00 2001 From: Sergey Date: Fri, 23 May 2025 16:46:52 +0200 Subject: [PATCH 153/164] GO-5696: Reindex chats: fix and optimize corner case for last messages preview --- core/block/chats/chatsubscription/manager.go | 63 ++++++++++++--- core/block/chats/chatsubscription/service.go | 5 +- core/block/chats/chatsubscription/state.go | 83 ++++++++++++++++++++ core/block/chats/service.go | 1 + core/indexer/reindex.go | 4 +- 5 files changed, 143 insertions(+), 13 deletions(-) create mode 100644 core/block/chats/chatsubscription/state.go diff --git a/core/block/chats/chatsubscription/manager.go b/core/block/chats/chatsubscription/manager.go index 79c4b6f46..126095448 100644 --- a/core/block/chats/chatsubscription/manager.go +++ b/core/block/chats/chatsubscription/manager.go @@ -48,6 +48,8 @@ type subscriptionManager struct { type subscription struct { id string withDependencies bool + + onlyLastMessage bool } func (s *subscriptionManager) Lock() { @@ -59,11 +61,12 @@ func (s *subscriptionManager) Unlock() { } // subscribe subscribes to messages. It returns true if there was no subscriptionManager with provided id -func (s *subscriptionManager) subscribe(subId string, withDependencies bool) bool { +func (s *subscriptionManager) subscribe(subId string, withDependencies bool, onlyLastMessage bool) bool { if _, ok := s.subscriptions[subId]; !ok { s.subscriptions[subId] = &subscription{ id: subId, withDependencies: withDependencies, + onlyLastMessage: onlyLastMessage, } s.chatStateUpdated = false return true @@ -142,6 +145,47 @@ func (s *subscriptionManager) Flush() { events := slices.Clone(s.eventsBuffer) s.eventsBuffer = s.eventsBuffer[:0] + var subIdsOnlyLastMessage []string + subIdsAllMessages := make([]string, 0, len(s.subscriptions)) + for _, sub := range s.subscriptions { + if sub.onlyLastMessage { + subIdsOnlyLastMessage = append(subIdsOnlyLastMessage, sub.id) + } else { + subIdsAllMessages = append(subIdsAllMessages, sub.id) + } + } + + if len(subIdsAllMessages) == 0 && len(subIdsOnlyLastMessage) > 0 { + state := newMessagesState() + for _, ev := range events { + state.applyEvent(ev) + } + lastMessage, ok := state.getLastMessage() + if ok { + addEvent := state.addEvents[lastMessage.Id] + addEvent.SubIds = subIdsOnlyLastMessage + if s.withDeps() { + s.enrichWithDependencies(addEvent) + } + + // Just rewrite all events and leave only last message. This message already has all updates applied to it + events = []*pb.EventMessage{ + event.NewMessage(s.spaceId, &pb.EventMessageValueOfChatAdd{ + ChatAdd: addEvent, + }), + } + } + } else { + for _, ev := range events { + if ev := ev.GetChatAdd(); ev != nil { + ev.SubIds = subIdsAllMessages + if s.withDeps() { + s.enrichWithDependencies(ev) + } + } + } + } + if s.chatStateUpdated { events = append(events, event.NewMessage(s.spaceId, &pb.EventMessageValueOfChatStateUpdate{ChatStateUpdate: &pb.EventChatUpdateState{ State: s.GetChatState(), @@ -162,6 +206,13 @@ func (s *subscriptionManager) Flush() { } } +func (s *subscriptionManager) enrichWithDependencies(ev *pb.EventChatAdd) { + deps := s.collectMessageDependencies(ev.Message) + for _, dep := range deps { + ev.Dependencies = append(ev.Dependencies, dep.ToProto()) + } +} + func (s *subscriptionManager) getIdentityDetails(identity string) (*domain.Details, error) { cached, ok := s.identityCache.Get(identity) if ok { @@ -185,21 +236,13 @@ func (s *subscriptionManager) Add(prevOrderId string, message *chatmodel.Message Message: message.ChatMessage, OrderId: message.OrderId, AfterOrderId: prevOrderId, - SubIds: s.listSubIds(), - } - - if s.withDeps() { - deps := s.collectMessageDependencies(message) - for _, dep := range deps { - ev.Dependencies = append(ev.Dependencies, dep.ToProto()) - } } s.eventsBuffer = append(s.eventsBuffer, event.NewMessage(s.spaceId, &pb.EventMessageValueOfChatAdd{ ChatAdd: ev, })) } -func (s *subscriptionManager) collectMessageDependencies(message *chatmodel.Message) []*domain.Details { +func (s *subscriptionManager) collectMessageDependencies(message *model.ChatMessage) []*domain.Details { var result []*domain.Details identityDetails, err := s.getIdentityDetails(message.Creator) diff --git a/core/block/chats/chatsubscription/service.go b/core/block/chats/chatsubscription/service.go index 1f7303928..bbf753b1a 100644 --- a/core/block/chats/chatsubscription/service.go +++ b/core/block/chats/chatsubscription/service.go @@ -169,6 +169,7 @@ type SubscribeLastMessagesRequest struct { // If AsyncInit is true, initial messages will be broadcast via events AsyncInit bool WithDependencies bool + OnlyLastMessage bool } type SubscribeLastMessagesResponse struct { @@ -202,7 +203,7 @@ func (s *service) SubscribeLastMessages(ctx context.Context, req SubscribeLastMe return nil, fmt.Errorf("query messages: %w", err) } - mngr.subscribe(req.SubId, req.WithDependencies) + mngr.subscribe(req.SubId, req.WithDependencies, req.OnlyLastMessage) if req.AsyncInit { var previousOrderId string @@ -225,7 +226,7 @@ func (s *service) SubscribeLastMessages(ctx context.Context, req SubscribeLastMe depsPerMessage := map[string][]*domain.Details{} if req.WithDependencies { for _, message := range messages { - deps := mngr.collectMessageDependencies(message) + deps := mngr.collectMessageDependencies(message.ChatMessage) depsPerMessage[message.Id] = deps } } diff --git a/core/block/chats/chatsubscription/state.go b/core/block/chats/chatsubscription/state.go new file mode 100644 index 000000000..a25978977 --- /dev/null +++ b/core/block/chats/chatsubscription/state.go @@ -0,0 +1,83 @@ +package chatsubscription + +import ( + "github.com/anyproto/anytype-heart/pb" + "github.com/anyproto/anytype-heart/pkg/lib/pb/model" +) + +type messagesState struct { + messages map[string]*model.ChatMessage + + addEvents map[string]*pb.EventChatAdd +} + +func newMessagesState() *messagesState { + return &messagesState{ + messages: map[string]*model.ChatMessage{}, + addEvents: map[string]*pb.EventChatAdd{}, + } +} + +func (s *messagesState) getLastMessage() (*model.ChatMessage, bool) { + var lastMessage *model.ChatMessage + for _, m := range s.messages { + if lastMessage == nil || lastMessage.OrderId < m.OrderId { + lastMessage = m + } + } + return lastMessage, lastMessage != nil +} + +func (s *messagesState) applyEvent(ev *pb.EventMessage) { + if v := ev.GetChatAdd(); v != nil { + s.applyAdd(v) + } else if v := ev.GetChatDelete(); v != nil { + s.applyDelete(v) + } else if v := ev.GetChatUpdate(); v != nil { + s.applyUpdate(v) + } else if v := ev.GetChatUpdateMentionReadStatus(); v != nil { + s.applyUpdateMentionReadStatus(v) + } else if v := ev.GetChatUpdateMessageReadStatus(); v != nil { + s.applyUpdateMessageReadStatus(v) + } else if v := ev.GetChatUpdateReactions(); v != nil { + s.applyUpdateReactions(v) + } +} + +func (s *messagesState) applyAdd(ev *pb.EventChatAdd) { + s.messages[ev.Id] = ev.Message + s.addEvents[ev.Id] = ev +} + +func (s *messagesState) applyDelete(ev *pb.EventChatDelete) { + delete(s.messages, ev.Id) +} + +func (s *messagesState) applyUpdate(ev *pb.EventChatUpdate) { + s.messages[ev.Id] = ev.Message +} + +func (s *messagesState) applyUpdateMentionReadStatus(ev *pb.EventChatUpdateMentionReadStatus) { + for _, id := range ev.Ids { + msg, ok := s.messages[id] + if ok { + msg.MentionRead = ev.IsRead + } + } +} + +func (s *messagesState) applyUpdateMessageReadStatus(ev *pb.EventChatUpdateMessageReadStatus) { + for _, id := range ev.Ids { + msg, ok := s.messages[id] + if ok { + msg.Read = ev.IsRead + } + } +} + +func (s *messagesState) applyUpdateReactions(ev *pb.EventChatUpdateReactions) { + msg, ok := s.messages[ev.Id] + if ok { + msg.Reactions = ev.Reactions + } +} diff --git a/core/block/chats/service.go b/core/block/chats/service.go index 400f8baa9..48374d736 100644 --- a/core/block/chats/service.go +++ b/core/block/chats/service.go @@ -283,6 +283,7 @@ func (s *service) onChatAdded(chatObjectId string, subId string, asyncInit bool) Limit: 1, AsyncInit: asyncInit, WithDependencies: true, + OnlyLastMessage: true, }) } diff --git a/core/indexer/reindex.go b/core/indexer/reindex.go index 7bd50e6dd..7083e275a 100644 --- a/core/indexer/reindex.go +++ b/core/indexer/reindex.go @@ -51,7 +51,7 @@ const ( ForceReindexDeletedObjectsCounter int32 = 1 ForceReindexParticipantsCounter int32 = 1 - ForceReindexChatsCounter int32 = 2 + ForceReindexChatsCounter int32 = 3 ) type allDeletedIdsProvider interface { @@ -289,6 +289,8 @@ func (i *indexer) reindexChats(ctx context.Context, space clientspace.Space) err return fmt.Errorf("commit: %w", err) } + i.reindexIdsIgnoreErr(ctx, space, ids...) + return nil } From 2a654c4ca3b2b07d01b47a14e325953e1adc903a Mon Sep 17 00:00:00 2001 From: Sergey Date: Fri, 23 May 2025 16:56:49 +0200 Subject: [PATCH 154/164] GO-5696: Add comment --- core/block/chats/chatsubscription/manager.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/block/chats/chatsubscription/manager.go b/core/block/chats/chatsubscription/manager.go index 126095448..b201e0b3f 100644 --- a/core/block/chats/chatsubscription/manager.go +++ b/core/block/chats/chatsubscription/manager.go @@ -155,6 +155,8 @@ func (s *subscriptionManager) Flush() { } } + // Corner case when we are subscribed only for the last message + // The idea is to prevent sending a lot of events to message preview subscription on cold recovery or reindex. if len(subIdsAllMessages) == 0 && len(subIdsOnlyLastMessage) > 0 { state := newMessagesState() for _, ev := range events { From e97982ba7d580e4d0dc77363b412be3b6b4a5cef Mon Sep 17 00:00:00 2001 From: Sergey Date: Fri, 23 May 2025 17:15:21 +0200 Subject: [PATCH 155/164] GO-5696: Refactor: extract function --- core/block/chats/chatsubscription/manager.go | 43 +++++++++++--------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/core/block/chats/chatsubscription/manager.go b/core/block/chats/chatsubscription/manager.go index b201e0b3f..5345fc4e2 100644 --- a/core/block/chats/chatsubscription/manager.go +++ b/core/block/chats/chatsubscription/manager.go @@ -158,25 +158,7 @@ func (s *subscriptionManager) Flush() { // Corner case when we are subscribed only for the last message // The idea is to prevent sending a lot of events to message preview subscription on cold recovery or reindex. if len(subIdsAllMessages) == 0 && len(subIdsOnlyLastMessage) > 0 { - state := newMessagesState() - for _, ev := range events { - state.applyEvent(ev) - } - lastMessage, ok := state.getLastMessage() - if ok { - addEvent := state.addEvents[lastMessage.Id] - addEvent.SubIds = subIdsOnlyLastMessage - if s.withDeps() { - s.enrichWithDependencies(addEvent) - } - - // Just rewrite all events and leave only last message. This message already has all updates applied to it - events = []*pb.EventMessage{ - event.NewMessage(s.spaceId, &pb.EventMessageValueOfChatAdd{ - ChatAdd: addEvent, - }), - } - } + events = s.getEventsOnlyForLastMessage(events, subIdsOnlyLastMessage) } else { for _, ev := range events { if ev := ev.GetChatAdd(); ev != nil { @@ -208,6 +190,29 @@ func (s *subscriptionManager) Flush() { } } +func (s *subscriptionManager) getEventsOnlyForLastMessage(events []*pb.EventMessage, subIdsOnlyLastMessage []string) []*pb.EventMessage { + state := newMessagesState() + for _, ev := range events { + state.applyEvent(ev) + } + lastMessage, ok := state.getLastMessage() + if ok { + addEvent := state.addEvents[lastMessage.Id] + addEvent.SubIds = subIdsOnlyLastMessage + if s.withDeps() { + s.enrichWithDependencies(addEvent) + } + + // Just rewrite all events and leave only last message. This message already has all updates applied to it + events = []*pb.EventMessage{ + event.NewMessage(s.spaceId, &pb.EventMessageValueOfChatAdd{ + ChatAdd: addEvent, + }), + } + } + return events +} + func (s *subscriptionManager) enrichWithDependencies(ev *pb.EventChatAdd) { deps := s.collectMessageDependencies(ev.Message) for _, dep := range deps { From f13dbf1a441c841cbe32b35954325f62f9290b04 Mon Sep 17 00:00:00 2001 From: Mikhail Rakhmanov Date: Fri, 23 May 2025 18:29:31 +0200 Subject: [PATCH 156/164] GO-5701 Fix state append --- core/block/source/sourceimpl/source.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/block/source/sourceimpl/source.go b/core/block/source/sourceimpl/source.go index 54020eb17..2cf4acf18 100644 --- a/core/block/source/sourceimpl/source.go +++ b/core/block/source/sourceimpl/source.go @@ -569,7 +569,9 @@ func BuildState(spaceId string, initState *state.State, ot objecttree.ReadableOb lastChange = change // that means that we are starting from tree root if change.Id == ot.Id() { - if uniqueKeyInternalKey != "" { + if st != nil { + st = st.NewState() + } else if uniqueKeyInternalKey != "" { st = newState(st, state.NewDocWithInternalKey(ot.Id(), nil, uniqueKeyInternalKey).(*state.State)) } else { st = newState(st, state.NewDoc(ot.Id(), nil).(*state.State)) From 5ad0e65ec5260fb065ede5cfdf36a081e31941c2 Mon Sep 17 00:00:00 2001 From: Sergey Date: Mon, 26 May 2025 09:45:04 +0200 Subject: [PATCH 157/164] GO-5704: Chats: fix panic for treating Update event like an Add --- core/block/chats/chatsubscription/manager.go | 2 +- core/block/chats/chatsubscription/state.go | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/core/block/chats/chatsubscription/manager.go b/core/block/chats/chatsubscription/manager.go index 5345fc4e2..326f1f729 100644 --- a/core/block/chats/chatsubscription/manager.go +++ b/core/block/chats/chatsubscription/manager.go @@ -195,7 +195,7 @@ func (s *subscriptionManager) getEventsOnlyForLastMessage(events []*pb.EventMess for _, ev := range events { state.applyEvent(ev) } - lastMessage, ok := state.getLastMessage() + lastMessage, ok := state.getLastAddedMessage() if ok { addEvent := state.addEvents[lastMessage.Id] addEvent.SubIds = subIdsOnlyLastMessage diff --git a/core/block/chats/chatsubscription/state.go b/core/block/chats/chatsubscription/state.go index a25978977..27fde9e25 100644 --- a/core/block/chats/chatsubscription/state.go +++ b/core/block/chats/chatsubscription/state.go @@ -18,14 +18,20 @@ func newMessagesState() *messagesState { } } -func (s *messagesState) getLastMessage() (*model.ChatMessage, bool) { +func (s *messagesState) getLastAddedMessage() (*model.ChatMessage, bool) { var lastMessage *model.ChatMessage for _, m := range s.messages { if lastMessage == nil || lastMessage.OrderId < m.OrderId { lastMessage = m } } - return lastMessage, lastMessage != nil + + if lastMessage == nil { + return nil, false + } + + _, ok := s.addEvents[lastMessage.Id] + return lastMessage, ok } func (s *messagesState) applyEvent(ev *pb.EventMessage) { From 060457fe7e5cdb80ce0c5b64fa2c158034a916da Mon Sep 17 00:00:00 2001 From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com> Date: Mon, 26 May 2025 19:56:11 +0200 Subject: [PATCH 158/164] GO-5589: Fix embed openapi spec --- core/api/server/router.go | 16 +++------------- core/api/server/router_test.go | 6 +++--- core/api/server/server.go | 5 ++--- core/api/server/server_test.go | 6 +++--- core/api/service.go | 9 ++++++++- 5 files changed, 19 insertions(+), 23 deletions(-) diff --git a/core/api/server/router.go b/core/api/server/router.go index fac63f1ee..1f2a56a39 100644 --- a/core/api/server/router.go +++ b/core/api/server/router.go @@ -23,7 +23,7 @@ const ( // NewRouter builds and returns a *gin.Engine with all routes configured. -func (s *Server) NewRouter(mw apicore.ClientCommands, eventService apicore.EventService) *gin.Engine { +func (s *Server) NewRouter(mw apicore.ClientCommands, eventService apicore.EventService, openapiYAML []byte, openapiJSON []byte) *gin.Engine { isDebug := os.Getenv("ANYTYPE_API_DEBUG") == "1" if !isDebug { gin.SetMode(gin.ReleaseMode) @@ -55,21 +55,11 @@ func (s *Server) NewRouter(mw apicore.ClientCommands, eventService apicore.Event }) router.GET("/docs/openapi.yaml", func(c *gin.Context) { - data, err := os.ReadFile("./core/api/docs/openapi.yaml") - if err != nil { - c.String(http.StatusInternalServerError, "Failed to read OpenAPI spec") - return - } - c.Data(http.StatusOK, "application/x-yaml", data) + c.Data(http.StatusOK, "application/x-yaml", openapiYAML) }) router.GET("/docs/openapi.json", func(c *gin.Context) { - data, err := os.ReadFile("./core/api/docs/openapi.json") - if err != nil { - c.String(http.StatusInternalServerError, "Failed to read OpenAPI spec") - return - } - c.Data(http.StatusOK, "application/json", data) + c.Data(http.StatusOK, "application/json", openapiJSON) }) // Auth routes (no authentication required) diff --git a/core/api/server/router_test.go b/core/api/server/router_test.go index da08efa11..427b805c3 100644 --- a/core/api/server/router_test.go +++ b/core/api/server/router_test.go @@ -16,7 +16,7 @@ func TestRouter_Unauthenticated(t *testing.T) { t.Run("GET /v1/spaces without auth returns 401", func(t *testing.T) { // given fx := newFixture(t) - engine := fx.NewRouter(fx.mwMock, &fx.eventService) + engine := fx.NewRouter(fx.mwMock, &fx.eventService, []byte{}, []byte{}) w := httptest.NewRecorder() req := httptest.NewRequest("GET", "/v1/spaces", nil) @@ -32,7 +32,7 @@ func TestRouter_AuthRoute(t *testing.T) { t.Run("POST /v1/auth/token is accessible without auth", func(t *testing.T) { // given fx := newFixture(t) - engine := fx.NewRouter(fx.mwMock, &fx.eventService) + engine := fx.NewRouter(fx.mwMock, &fx.eventService, []byte{}, []byte{}) w := httptest.NewRecorder() req := httptest.NewRequest("POST", "/v1/auth/token", nil) @@ -48,7 +48,7 @@ func TestRouter_MetadataHeader(t *testing.T) { t.Run("Response includes Anytype-Version header", func(t *testing.T) { // given fx := newFixture(t) - engine := fx.NewRouter(fx.mwMock, &fx.eventService) + engine := fx.NewRouter(fx.mwMock, &fx.eventService, []byte{}, []byte{}) fx.KeyToToken = map[string]ApiSessionEntry{"validKey": {Token: "dummyToken", AppName: "dummyApp"}} fx.mwMock.On("ObjectSearch", mock.Anything, mock.Anything). Return(&pb.RpcObjectSearchResponse{ diff --git a/core/api/server/server.go b/core/api/server/server.go index ebb0673c6..e2c1f07a5 100644 --- a/core/api/server/server.go +++ b/core/api/server/server.go @@ -24,16 +24,15 @@ type Server struct { KeyToToken map[string]ApiSessionEntry // appKey -> token } - // NewServer constructs a new Server with the default config and sets up the routes. -func NewServer(mw apicore.ClientCommands, accountService apicore.AccountService, eventService apicore.EventService) *Server { +func NewServer(mw apicore.ClientCommands, accountService apicore.AccountService, eventService apicore.EventService, openapiYAML []byte, openapiJSON []byte) *Server { gatewayUrl, techSpaceId, err := getAccountInfo(accountService) if err != nil { panic(err) } s := &Server{service: service.NewService(mw, gatewayUrl, techSpaceId)} - s.engine = s.NewRouter(mw, eventService) + s.engine = s.NewRouter(mw, eventService, openapiYAML, openapiJSON) s.KeyToToken = make(map[string]ApiSessionEntry) return s diff --git a/core/api/server/server_test.go b/core/api/server/server_test.go index e7eea73ae..d6e455e02 100644 --- a/core/api/server/server_test.go +++ b/core/api/server/server_test.go @@ -18,8 +18,8 @@ const ( type fixture struct { *Server - eventService mock_apicore.MockEventService - mwMock *mock_apicore.MockClientCommands + eventService mock_apicore.MockEventService + mwMock *mock_apicore.MockClientCommands } func newFixture(t *testing.T) *fixture { @@ -30,7 +30,7 @@ func newFixture(t *testing.T) *fixture { GatewayUrl: mockedGatewayUrl, TechSpaceId: mockedTechSpaceId, }, nil).Once() - server := NewServer(mwMock, accountService, eventService) + server := NewServer(mwMock, accountService, eventService, []byte{}, []byte{}) return &fixture{ Server: server, diff --git a/core/api/service.go b/core/api/service.go index 6fde3f947..037629a60 100644 --- a/core/api/service.go +++ b/core/api/service.go @@ -2,6 +2,7 @@ package api import ( "context" + _ "embed" "errors" "fmt" "net/http" @@ -24,6 +25,12 @@ const ( var ( mwSrv apicore.ClientCommands + + //go:embed docs/openapi.yaml + openapiYAML []byte + + //go:embed docs/openapi.json + openapiJSON []byte ) type Service interface { @@ -88,7 +95,7 @@ func (s *apiService) runServer() { return } - s.srv = server.NewServer(s.mw, s.accountService, s.eventService) + s.srv = server.NewServer(s.mw, s.accountService, s.eventService, openapiJSON, openapiYAML) s.httpSrv = &http.Server{ Addr: s.listenAddr, From 6412b1ecfa72496eb0d2cf0715d7eb374fed4026 Mon Sep 17 00:00:00 2001 From: Sergey Date: Mon, 26 May 2025 20:46:38 +0200 Subject: [PATCH 159/164] API: Fix typo for embedded docs --- core/api/service.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/api/service.go b/core/api/service.go index 037629a60..e695124ab 100644 --- a/core/api/service.go +++ b/core/api/service.go @@ -95,7 +95,7 @@ func (s *apiService) runServer() { return } - s.srv = server.NewServer(s.mw, s.accountService, s.eventService, openapiJSON, openapiYAML) + s.srv = server.NewServer(s.mw, s.accountService, s.eventService, openapiYAML, openapiJSON) s.httpSrv = &http.Server{ Addr: s.listenAddr, From 5811b39a86bae1a7d36a210107fac9718f1e35b5 Mon Sep 17 00:00:00 2001 From: Sergey Date: Tue, 27 May 2025 17:46:37 +0200 Subject: [PATCH 160/164] GO-5717: Rever sub-objects migration --- core/block/editor/smartblock/smartblock.go | 4 + core/block/source/sourceimpl/source.go | 10 + .../source/sub_object_links_migration.go | 237 ++++++++++++++++++ .../source/sub_object_links_migration_test.go | 55 ++++ 4 files changed, 306 insertions(+) create mode 100644 core/block/source/sub_object_links_migration.go create mode 100644 core/block/source/sub_object_links_migration_test.go diff --git a/core/block/editor/smartblock/smartblock.go b/core/block/editor/smartblock/smartblock.go index 099bece0b..27a01f221 100644 --- a/core/block/editor/smartblock/smartblock.go +++ b/core/block/editor/smartblock/smartblock.go @@ -360,6 +360,9 @@ func (sb *smartBlock) Init(ctx *InitContext) (err error) { } } ctx.State.AddBundledRelationLinks(relKeys...) + if ctx.IsNewObject && ctx.State != nil { + source.NewSubObjectsAndProfileLinksMigration(sb.Type(), sb.space, sb.currentParticipantId, sb.spaceIndex).Migrate(ctx.State) + } if err = sb.injectLocalDetails(ctx.State); err != nil { return @@ -848,6 +851,7 @@ func (sb *smartBlock) Apply(s *state.State, flags ...ApplyFlag) (err error) { } func (sb *smartBlock) ResetToVersion(s *state.State) (err error) { + source.NewSubObjectsAndProfileLinksMigration(sb.Type(), sb.space, sb.currentParticipantId, sb.spaceIndex).Migrate(s) s.SetParent(sb.Doc.(*state.State)) sb.storeFileKeys(s) sb.injectLocalDetails(s) diff --git a/core/block/source/sourceimpl/source.go b/core/block/source/sourceimpl/source.go index 2cf4acf18..1a34c975b 100644 --- a/core/block/source/sourceimpl/source.go +++ b/core/block/source/sourceimpl/source.go @@ -284,6 +284,16 @@ func (s *treeSource) buildState() (doc state.Doc, err error) { } st.BlocksInit(st) + // This is temporary migration. We will move it to persistent migration later after several releases. + // The reason is to minimize the number of glitches for users of both old and new versions of Anytype. + // For example, if we persist this migration for Dataview block now, user will see "No query selected" + // error in the old version of Anytype. We want to avoid this as much as possible by making this migration + // temporary, though the applying change to this Dataview block will persist this migration, breaking backward + // compatibility. But in many cases we expect that users update object not so often as they just view them. + // TODO: we can skip migration for non-personal spaces + migration := source.NewSubObjectsAndProfileLinksMigration(s.smartblockType, s.space, s.accountService.MyParticipantId(s.spaceID), s.objectStore) + migration.Migrate(st) + // we need to have required internal relations for all objects, including system st.AddBundledRelationLinks(bundle.RequiredInternalRelations...) if s.Type() == smartblock.SmartBlockTypePage || s.Type() == smartblock.SmartBlockTypeProfilePage { diff --git a/core/block/source/sub_object_links_migration.go b/core/block/source/sub_object_links_migration.go new file mode 100644 index 000000000..14d334408 --- /dev/null +++ b/core/block/source/sub_object_links_migration.go @@ -0,0 +1,237 @@ +package source + +import ( + "context" + "fmt" + "strings" + + "github.com/globalsign/mgo/bson" + "github.com/gogo/protobuf/types" + + "github.com/anyproto/anytype-heart/core/block/editor/state" + "github.com/anyproto/anytype-heart/core/block/simple" + dataview2 "github.com/anyproto/anytype-heart/core/block/simple/dataview" + "github.com/anyproto/anytype-heart/core/domain" + "github.com/anyproto/anytype-heart/pkg/lib/bundle" + "github.com/anyproto/anytype-heart/pkg/lib/core/smartblock" + "github.com/anyproto/anytype-heart/pkg/lib/localstore/addr" + "github.com/anyproto/anytype-heart/pkg/lib/localstore/objectstore/spaceindex" + "github.com/anyproto/anytype-heart/pkg/lib/logging" + "github.com/anyproto/anytype-heart/pkg/lib/pb/model" + "github.com/anyproto/anytype-heart/util/pbtypes" +) + +var log = logging.Logger("anytype-mw-source-migration") + +// Migrate old relation (rel-name, etc.) and object type (ot-page, etc.) IDs to new ones (just ordinary object IDs) +// Those old ids are ids of sub-objects, legacy system for storing types and relations inside workspace object +type subObjectsAndProfileLinksMigration struct { + profileID string + identityObjectID string + sbType smartblock.SmartBlockType + space Space + objectStore spaceindex.Store +} + +func NewSubObjectsAndProfileLinksMigration(sbType smartblock.SmartBlockType, space Space, identityObjectID string, objectStore spaceindex.Store) *subObjectsAndProfileLinksMigration { + return &subObjectsAndProfileLinksMigration{ + space: space, + identityObjectID: identityObjectID, + sbType: sbType, + objectStore: objectStore, + } +} + +func (m *subObjectsAndProfileLinksMigration) replaceLinksInDetails(s *state.State) { + for _, rel := range s.GetRelationLinks() { + if rel.Key == bundle.RelationKeyFeaturedRelations.String() { + continue + } + if rel.Key == bundle.RelationKeySourceObject.String() { + // migrate broken sourceObject after v0.29.11 + // todo: remove this + if s.UniqueKeyInternal() == "" { + continue + } + + internalKey := s.UniqueKeyInternal() + switch m.sbType { + case smartblock.SmartBlockTypeRelation: + if bundle.HasRelation(domain.RelationKey(internalKey)) { + s.SetDetail(bundle.RelationKeySourceObject, domain.String(domain.RelationKey(internalKey).BundledURL())) + } + case smartblock.SmartBlockTypeObjectType: + if bundle.HasObjectTypeByKey(domain.TypeKey(internalKey)) { + s.SetDetail(bundle.RelationKeySourceObject, domain.String(domain.TypeKey(internalKey).BundledURL())) + } + + } + + continue + } + if m.canRelationContainObjectValues(rel.Format) { + rawValue := s.Details().Get(domain.RelationKey(rel.Key)) + + if oldId := rawValue.String(); oldId != "" { + newId := m.migrateId(oldId) + if oldId != newId { + s.SetDetail(domain.RelationKey(rel.Key), domain.String(newId)) + } + } else if ids := rawValue.StringList(); len(ids) > 0 { + changed := false + for i, oldId := range ids { + newId := m.migrateId(oldId) + if oldId != newId { + ids[i] = newId + changed = true + } + } + if changed { + s.SetDetail(domain.RelationKey(rel.Key), domain.StringList(ids)) + } + } + } + } +} + +// Migrate works only in personal space +func (m *subObjectsAndProfileLinksMigration) Migrate(s *state.State) { + if !m.space.IsPersonal() { + return + } + + uk, err := domain.NewUniqueKey(smartblock.SmartBlockTypeProfilePage, "") + if err != nil { + log.Errorf("migration: failed to create unique key for profile: %s", err) + } else { + // this way we will get incorrect profileID for non-personal spaces, but we are not migrating them + id, err := m.space.DeriveObjectID(context.Background(), uk) + if err != nil { + log.Errorf("migration: failed to derive id for profile: %s", err) + } else { + m.profileID = id + } + } + + m.replaceLinksInDetails(s) + + s.Iterate(func(block simple.Block) bool { + if block.Model().GetDataview() != nil { + // Mark block as mutable + dv := s.Get(block.Model().Id).(dataview2.Block) + m.migrateFilters(dv) + } + + if _, ok := block.(simple.ObjectLinkReplacer); ok { + // Mark block as mutable + b := s.Get(block.Model().Id) + replacer := b.(simple.ObjectLinkReplacer) + replacer.ReplaceLinkIds(m.migrateId) + } + + return true + }) +} + +func (m *subObjectsAndProfileLinksMigration) migrateId(oldId string) (newId string) { + if m.profileID != "" && m.identityObjectID != "" { + // we substitute all links to profile object with space member object + if oldId == m.profileID || + strings.HasPrefix(oldId, "_id_") { // we don't need to check the exact accountID here, because we only have links to our own identity + return m.identityObjectID + } + } + uniqueKey, valid := subObjectIdToUniqueKey(oldId) + if !valid { + return oldId + } + + newId, err := m.space.DeriveObjectID(context.Background(), uniqueKey) + if err != nil { + log.With("uniqueKey", uniqueKey.Marshal()).Errorf("failed to derive id: %s", err) + return oldId + } + return newId +} + +// subObjectIdToUniqueKey converts legacy sub-object id to uniqueKey +// if id is not supported subObjectId, it will return nil, false +// suppose to be used only for migration and almost free to use +func subObjectIdToUniqueKey(id string) (uniqueKey domain.UniqueKey, valid bool) { + // historically, we don't have the prefix for the options, + // so we need to handled it this ugly way + if bson.IsObjectIdHex(id) { + return domain.MustUniqueKey(smartblock.SmartBlockTypeRelationOption, id), true + } + // special case: we don't support bundled relations/types in uniqueKeys (GO-2394). So in case we got it, we need to replace the prefix + if strings.HasPrefix(id, addr.BundledObjectTypeURLPrefix) { + id = addr.ObjectTypeKeyToIdPrefix + strings.TrimPrefix(id, addr.BundledObjectTypeURLPrefix) + } else if strings.HasPrefix(id, addr.BundledRelationURLPrefix) { + id = addr.RelationKeyToIdPrefix + strings.TrimPrefix(id, addr.BundledRelationURLPrefix) + } + uniqueKey, err := domain.UnmarshalUniqueKey(id) + if err != nil { + return nil, false + } + return uniqueKey, true +} + +func (m *subObjectsAndProfileLinksMigration) migrateFilters(dv dataview2.Block) { + for _, view := range dv.Model().GetDataview().GetViews() { + for _, filter := range view.GetFilters() { + err := m.migrateFilter(filter) + if err != nil { + log.Errorf("failed to migrate filter %s: %s", filter.Id, err) + } + } + } +} + +func (m *subObjectsAndProfileLinksMigration) migrateFilter(filter *model.BlockContentDataviewFilter) error { + if filter == nil { + return nil + } + if filter.Value == nil || filter.Value.Kind == nil { + log.With("relationKey", filter.RelationKey).Warnf("empty filter value") + return nil + } + relation, err := m.objectStore.GetRelationByKey(filter.RelationKey) + if err != nil { + log.Warnf("migration: failed to get relation by key %s: %s", filter.RelationKey, err) + } + + // TODO: check this logic + // here we use objectstore to get relation, but it may be not yet available + // In case it is missing, lets try to migrate any string/stringlist: it should ignore invalid strings + if relation == nil || m.canRelationContainObjectValues(relation.Format) { + switch v := filter.Value.Kind.(type) { + case *types.Value_StringValue: + filter.Value = pbtypes.String(m.migrateId(v.StringValue)) + case *types.Value_ListValue: + newIDs := make([]string, 0, len(v.ListValue.Values)) + + for _, oldID := range v.ListValue.Values { + if id, ok := oldID.Kind.(*types.Value_StringValue); ok { + newIDs = append(newIDs, m.migrateId(id.StringValue)) + } else { + return fmt.Errorf("migration: failed to migrate filter: invalid list item value kind %t", oldID.Kind) + } + } + + filter.Value = pbtypes.StringList(newIDs) + } + } + return nil +} + +func (m *subObjectsAndProfileLinksMigration) canRelationContainObjectValues(format model.RelationFormat) bool { + switch format { + case + model.RelationFormat_status, + model.RelationFormat_tag, + model.RelationFormat_object: + return true + default: + return false + } +} diff --git a/core/block/source/sub_object_links_migration_test.go b/core/block/source/sub_object_links_migration_test.go new file mode 100644 index 000000000..baa4fbc12 --- /dev/null +++ b/core/block/source/sub_object_links_migration_test.go @@ -0,0 +1,55 @@ +package source + +import ( + "testing" + + "github.com/anyproto/anytype-heart/core/domain" +) + +func TestSubObjectIdToUniqueKey(t *testing.T) { + type args struct { + id string + } + tests := []struct { + name string + args args + wantUk string + wantValid bool + }{ + {"relation", args{"rel-id"}, "rel-id", true}, + {"type", args{"ot-task"}, "ot-task", true}, + {"opt", args{"650832666293ae9ae67e5f9c"}, "opt-650832666293ae9ae67e5f9c", true}, + {"invalid-prefix", args{"aa-task"}, "", false}, + {"no-key", args{"rel"}, "", false}, + {"no-key2", args{"rel-"}, "", false}, + {"no-key2", args{"rel---gdfgfd--gfdgfd-"}, "", false}, + {"invalid", args{"task"}, "", false}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + gotUk, gotValid := subObjectIdToUniqueKey(tt.args.id) + if gotValid != tt.wantValid { + t.Errorf("SubObjectIdToUniqueKey() gotValid = %v, want %v", gotValid, tt.wantValid) + t.Fail() + } + + if !tt.wantValid { + return + } + + wantUk, err := domain.UnmarshalUniqueKey(tt.wantUk) + if err != nil { + t.Errorf("SubObjectIdToUniqueKey() error = %v", err) + t.Fail() + } + if wantUk.Marshal() != gotUk.Marshal() { + t.Errorf("SubObjectIdToUniqueKey() gotUk = %v, want %v", gotUk, tt.wantUk) + t.Fail() + } + if wantUk.SmartblockType() != gotUk.SmartblockType() { + t.Errorf("SubObjectIdToUniqueKey() gotSmartblockType = %v, want %v", gotUk.SmartblockType(), wantUk.SmartblockType()) + t.Fail() + } + }) + } +} From ed3480e4bf0c0aaef9ca4f7f27b5cb186faa2ff7 Mon Sep 17 00:00:00 2001 From: Sergey Date: Wed, 28 May 2025 11:16:01 +0200 Subject: [PATCH 161/164] GO-5718: Chats: create method to read all messages --- clientlibrary/service/service.pb.go | 762 ++-- core/block/chats/chatrepository/repository.go | 26 +- core/block/chats/service.go | 43 +- core/block/editor/chatobject/chatobject.go | 2 +- core/block/editor/chatobject/reading.go | 32 +- core/block/editor/chatobject/reading_test.go | 29 +- .../editor/chatobject/subscription_test.go | 14 +- core/chats.go | 16 + docs/proto.md | 70 + pb/commands.pb.go | 3401 ++++++++++------- pb/protos/commands.proto | 22 + pb/protos/service/service.proto | 1 + pb/service/service.pb.go | 761 ++-- 13 files changed, 3066 insertions(+), 2113 deletions(-) diff --git a/clientlibrary/service/service.pb.go b/clientlibrary/service/service.pb.go index 3fc35e82b..3e38c5be7 100644 --- a/clientlibrary/service/service.pb.go +++ b/clientlibrary/service/service.pb.go @@ -25,372 +25,373 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package func init() { proto.RegisterFile("pb/protos/service/service.proto", fileDescriptor_93a29dc403579097) } var fileDescriptor_93a29dc403579097 = []byte{ - // 5837 bytes of a gzipped FileDescriptorProto + // 5854 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x9d, 0xdd, 0x6f, 0x24, 0x49, - 0x52, 0xc0, 0xcf, 0x3c, 0xb0, 0x50, 0xc7, 0x2d, 0xd0, 0x0b, 0xcb, 0xdd, 0x72, 0x37, 0x33, 0x3b, - 0x1f, 0xf6, 0xcc, 0x78, 0xdc, 0x9e, 0x9d, 0xd9, 0x2f, 0xee, 0x90, 0xa0, 0xc7, 0x1e, 0x7b, 0xfb, - 0xd6, 0xf6, 0x18, 0x77, 0x7b, 0x46, 0xac, 0x84, 0x44, 0xb9, 0x2b, 0xdd, 0x2e, 0x5c, 0x5d, 0x59, - 0x57, 0x95, 0xed, 0x99, 0x3e, 0x04, 0x02, 0x1d, 0x02, 0x81, 0x40, 0x9c, 0xf8, 0x12, 0x3c, 0x21, - 0xf1, 0x17, 0xf0, 0x67, 0xf0, 0x78, 0x8f, 0x3c, 0xa2, 0xdd, 0x17, 0xfe, 0x0c, 0x54, 0x99, 0x59, - 0xf9, 0x11, 0x15, 0x91, 0x55, 0x5e, 0x9e, 0x66, 0xe4, 0xf8, 0x45, 0x44, 0x7e, 0x46, 0x46, 0x66, - 0x65, 0x55, 0x47, 0x37, 0x8b, 0xb3, 0xed, 0xa2, 0xe4, 0x82, 0x57, 0xdb, 0x15, 0x2b, 0xaf, 0xd2, - 0x19, 0x6b, 0xfe, 0x1d, 0xca, 0x3f, 0x0f, 0xde, 0x8a, 0xf3, 0x95, 0x58, 0x15, 0xec, 0xbd, 0x6f, - 0x5b, 0x72, 0xc6, 0x17, 0x8b, 0x38, 0x4f, 0x2a, 0x85, 0xbc, 0xf7, 0xae, 0x95, 0xb0, 0x2b, 0x96, - 0x0b, 0xfd, 0xf7, 0x27, 0xff, 0xfb, 0x93, 0x9f, 0x8b, 0xde, 0xde, 0xc9, 0x52, 0x96, 0x8b, 0x1d, - 0xad, 0x31, 0xf8, 0x22, 0xfa, 0xd6, 0xa8, 0x28, 0xf6, 0x99, 0x78, 0xc9, 0xca, 0x2a, 0xe5, 0xf9, - 0xe0, 0xce, 0x50, 0x3b, 0x18, 0x9e, 0x14, 0xb3, 0xe1, 0xa8, 0x28, 0x86, 0x56, 0x38, 0x3c, 0x61, - 0x3f, 0x5a, 0xb2, 0x4a, 0xbc, 0x77, 0x37, 0x0c, 0x55, 0x05, 0xcf, 0x2b, 0x36, 0x38, 0x8f, 0x7e, - 0x75, 0x54, 0x14, 0x13, 0x26, 0x76, 0x59, 0x5d, 0x81, 0x89, 0x88, 0x05, 0x1b, 0x6c, 0xb4, 0x54, - 0x7d, 0xc0, 0xf8, 0xb8, 0xdf, 0x0d, 0x6a, 0x3f, 0xd3, 0xe8, 0x9b, 0xb5, 0x9f, 0x8b, 0xa5, 0x48, - 0xf8, 0xeb, 0x7c, 0xf0, 0x7e, 0x5b, 0x51, 0x8b, 0x8c, 0xed, 0xdb, 0x21, 0x44, 0x5b, 0x7d, 0x15, - 0xfd, 0xd2, 0xab, 0x38, 0xcb, 0x98, 0xd8, 0x29, 0x59, 0x5d, 0x70, 0x5f, 0x47, 0x89, 0x86, 0x4a, - 0x66, 0xec, 0xde, 0x09, 0x32, 0xda, 0xf0, 0x17, 0xd1, 0xb7, 0x94, 0xe4, 0x84, 0xcd, 0xf8, 0x15, - 0x2b, 0x07, 0xa8, 0x96, 0x16, 0x12, 0x4d, 0xde, 0x82, 0xa0, 0xed, 0x1d, 0x9e, 0x5f, 0xb1, 0x52, - 0xe0, 0xb6, 0xb5, 0x30, 0x6c, 0xdb, 0x42, 0xda, 0xf6, 0x5f, 0xaf, 0x45, 0xdf, 0x1d, 0xcd, 0x66, - 0x7c, 0x99, 0x8b, 0x03, 0x3e, 0x8b, 0xb3, 0x83, 0x34, 0xbf, 0x3c, 0x62, 0xaf, 0x77, 0x2e, 0x6a, - 0x3e, 0x9f, 0xb3, 0xc1, 0x53, 0xbf, 0x55, 0x15, 0x3a, 0x34, 0xec, 0xd0, 0x85, 0x8d, 0xef, 0x0f, - 0xaf, 0xa7, 0xa4, 0xcb, 0xf2, 0xf7, 0x6b, 0xd1, 0x0d, 0x58, 0x96, 0x09, 0xcf, 0xae, 0x98, 0x2d, - 0xcd, 0x47, 0x1d, 0x86, 0x7d, 0xdc, 0x94, 0xe7, 0xe3, 0xeb, 0xaa, 0xe9, 0x12, 0xfd, 0xd9, 0x5a, - 0xf4, 0x1d, 0x58, 0x22, 0xd5, 0xf3, 0xa3, 0xa2, 0x18, 0x3c, 0xee, 0xb0, 0x6a, 0x48, 0x53, 0x8e, - 0x0f, 0xae, 0xa1, 0xa1, 0x8b, 0xf0, 0x27, 0xd1, 0xb7, 0x61, 0x09, 0x0e, 0xd2, 0x4a, 0x8c, 0x8a, - 0xa2, 0x1a, 0x6c, 0x77, 0x98, 0x6b, 0x40, 0xe3, 0xff, 0x71, 0x7f, 0x85, 0x40, 0x0b, 0x9c, 0xb0, - 0x2b, 0x7e, 0xd9, 0xab, 0x05, 0x0c, 0xd9, 0xbb, 0x05, 0x5c, 0x0d, 0x5d, 0x84, 0x2c, 0x7a, 0xc7, - 0x9d, 0xb3, 0x13, 0x56, 0xc9, 0x98, 0xf6, 0x80, 0x9e, 0x96, 0x1a, 0x31, 0x4e, 0x1f, 0xf6, 0x41, - 0xb5, 0xb7, 0x34, 0x1a, 0x68, 0x6f, 0x19, 0xaf, 0x8c, 0xb3, 0xfb, 0xa8, 0x05, 0x87, 0x30, 0xbe, - 0x1e, 0xf4, 0x20, 0xb5, 0xab, 0x3f, 0x8c, 0x7e, 0xf9, 0x15, 0x2f, 0x2f, 0xab, 0x22, 0x9e, 0x31, - 0x1d, 0x8f, 0xee, 0xf9, 0xda, 0x8d, 0x14, 0x86, 0xa4, 0xf5, 0x2e, 0xcc, 0x89, 0x1c, 0x8d, 0xf0, - 0x45, 0xc1, 0xe0, 0x42, 0x60, 0x15, 0x6b, 0x21, 0x15, 0x39, 0x20, 0xa4, 0x6d, 0x5f, 0x46, 0x03, - 0x6b, 0xfb, 0xec, 0x8f, 0xd8, 0x4c, 0x8c, 0x92, 0x04, 0xf6, 0x8a, 0xd5, 0x95, 0xc4, 0x70, 0x94, - 0x24, 0x54, 0xaf, 0xe0, 0xa8, 0x76, 0xf6, 0x3a, 0x7a, 0x17, 0x38, 0x93, 0x43, 0x35, 0x49, 0x06, - 0x5b, 0x61, 0x2b, 0x1a, 0x33, 0x4e, 0x87, 0x7d, 0x71, 0x67, 0xfc, 0x23, 0x9e, 0x4f, 0xd8, 0x82, - 0x5f, 0x31, 0x30, 0xfe, 0x51, 0x6b, 0x8a, 0x24, 0xc6, 0x7f, 0x58, 0x03, 0x19, 0x26, 0x13, 0x96, - 0xb1, 0x99, 0x20, 0x87, 0x89, 0x12, 0x77, 0x0e, 0x13, 0x83, 0x39, 0x33, 0xac, 0x11, 0xee, 0x33, - 0xb1, 0xb3, 0x2c, 0x4b, 0x96, 0x0b, 0xb2, 0x2f, 0x2d, 0xd2, 0xd9, 0x97, 0x1e, 0x8a, 0xd4, 0x67, - 0x9f, 0x89, 0x51, 0x96, 0x91, 0xf5, 0x51, 0xe2, 0xce, 0xfa, 0x18, 0x4c, 0x7b, 0x98, 0x45, 0xbf, - 0xe2, 0xb4, 0x98, 0x18, 0xe7, 0xe7, 0x7c, 0x40, 0xb7, 0x85, 0x94, 0x1b, 0x1f, 0x1b, 0x9d, 0x1c, - 0x52, 0x8d, 0xe7, 0x6f, 0x0a, 0x5e, 0xd2, 0xdd, 0xa2, 0xc4, 0x9d, 0xd5, 0x30, 0x98, 0xf6, 0xf0, - 0x07, 0xd1, 0xdb, 0x3a, 0x40, 0x36, 0x49, 0xc5, 0x5d, 0x34, 0x7a, 0xc2, 0xac, 0xe2, 0x5e, 0x07, - 0xd5, 0x32, 0x7f, 0x98, 0xce, 0xcb, 0x3a, 0xfa, 0xe0, 0xe6, 0xb5, 0xb4, 0xc3, 0xbc, 0xa5, 0xb4, - 0x79, 0x1e, 0xfd, 0x9a, 0x6f, 0x7e, 0x27, 0xce, 0x67, 0x2c, 0x1b, 0x3c, 0x0c, 0xa9, 0x2b, 0xc6, - 0xb8, 0xda, 0xec, 0xc5, 0xda, 0x60, 0xa7, 0x09, 0x1d, 0x4c, 0xef, 0xa0, 0xda, 0x20, 0x94, 0xde, - 0x0d, 0x43, 0x2d, 0xdb, 0xbb, 0x2c, 0x63, 0xa4, 0x6d, 0x25, 0xec, 0xb0, 0x6d, 0x20, 0x6d, 0xbb, + 0x52, 0xc0, 0xcf, 0x3c, 0xb0, 0x50, 0xc7, 0x2d, 0xd0, 0x0b, 0xcb, 0xdd, 0x72, 0x37, 0xdf, 0x63, + 0xcf, 0x8c, 0xc7, 0xed, 0xd9, 0x99, 0xfd, 0xe2, 0x0e, 0x09, 0x7a, 0xec, 0xb1, 0xb7, 0x6f, 0x6d, + 0xaf, 0x71, 0xb7, 0x67, 0xc4, 0x4a, 0x48, 0x94, 0xbb, 0xd2, 0xed, 0xc2, 0xd5, 0x95, 0x75, 0x55, + 0xd9, 0x9e, 0xe9, 0x43, 0x20, 0x10, 0x27, 0x10, 0x08, 0xc4, 0x89, 0x2f, 0xc1, 0x13, 0x12, 0x7f, + 0x01, 0x7f, 0x01, 0xcf, 0x3c, 0xde, 0x23, 0x8f, 0x68, 0xf7, 0x1f, 0x41, 0x95, 0x99, 0x95, 0x1f, + 0x51, 0x11, 0x59, 0xe5, 0xe5, 0x69, 0x46, 0x8e, 0x5f, 0x44, 0xe4, 0x47, 0x64, 0x66, 0x64, 0x56, + 0x56, 0x75, 0x74, 0xb3, 0x38, 0xdb, 0x2e, 0x4a, 0x2e, 0x78, 0xb5, 0x5d, 0xb1, 0xf2, 0x2a, 0x9d, + 0xb1, 0xe6, 0xdf, 0xa1, 0xfc, 0xf3, 0xe0, 0xad, 0x38, 0x5f, 0x89, 0x55, 0xc1, 0xde, 0xfb, 0xb6, + 0x25, 0x67, 0x7c, 0xb1, 0x88, 0xf3, 0xa4, 0x52, 0xc8, 0x7b, 0xef, 0x5a, 0x09, 0xbb, 0x62, 0xb9, + 0xd0, 0x7f, 0x7f, 0xfa, 0x5f, 0x3f, 0xf9, 0xb9, 0xe8, 0xed, 0x9d, 0x2c, 0x65, 0xb9, 0xd8, 0xd1, + 0x1a, 0x83, 0x2f, 0xa2, 0x6f, 0x8d, 0x8a, 0x62, 0x9f, 0x89, 0x97, 0xac, 0xac, 0x52, 0x9e, 0x0f, + 0xee, 0x0e, 0xb5, 0x83, 0xe1, 0x49, 0x31, 0x1b, 0x8e, 0x8a, 0x62, 0x68, 0x85, 0xc3, 0x13, 0xf6, + 0xa3, 0x25, 0xab, 0xc4, 0x7b, 0xf7, 0xc2, 0x50, 0x55, 0xf0, 0xbc, 0x62, 0x83, 0xf3, 0xe8, 0x57, + 0x47, 0x45, 0x31, 0x61, 0x62, 0x97, 0xd5, 0x15, 0x98, 0x88, 0x58, 0xb0, 0xc1, 0x46, 0x4b, 0xd5, + 0x07, 0x8c, 0x8f, 0x07, 0xdd, 0xa0, 0xf6, 0x33, 0x8d, 0xbe, 0x59, 0xfb, 0xb9, 0x58, 0x8a, 0x84, + 0xbf, 0xce, 0x07, 0xb7, 0xdb, 0x8a, 0x5a, 0x64, 0x6c, 0xdf, 0x09, 0x21, 0xda, 0xea, 0xab, 0xe8, + 0x97, 0x5e, 0xc5, 0x59, 0xc6, 0xc4, 0x4e, 0xc9, 0xea, 0x82, 0xfb, 0x3a, 0x4a, 0x34, 0x54, 0x32, + 0x63, 0xf7, 0x6e, 0x90, 0xd1, 0x86, 0xbf, 0x88, 0xbe, 0xa5, 0x24, 0x27, 0x6c, 0xc6, 0xaf, 0x58, + 0x39, 0x40, 0xb5, 0xb4, 0x90, 0x68, 0xf2, 0x16, 0x04, 0x6d, 0xef, 0xf0, 0xfc, 0x8a, 0x95, 0x02, + 0xb7, 0xad, 0x85, 0x61, 0xdb, 0x16, 0xd2, 0xb6, 0xff, 0x7a, 0x2d, 0xfa, 0xee, 0x68, 0x36, 0xe3, + 0xcb, 0x5c, 0x1c, 0xf0, 0x59, 0x9c, 0x1d, 0xa4, 0xf9, 0xe5, 0x11, 0x7b, 0xbd, 0x73, 0x51, 0xf3, + 0xf9, 0x9c, 0x0d, 0x9e, 0xf9, 0xad, 0xaa, 0xd0, 0xa1, 0x61, 0x87, 0x2e, 0x6c, 0x7c, 0x7f, 0x70, + 0x3d, 0x25, 0x5d, 0x96, 0xbf, 0x5f, 0x8b, 0x6e, 0xc0, 0xb2, 0x4c, 0x78, 0x76, 0xc5, 0x6c, 0x69, + 0x3e, 0xec, 0x30, 0xec, 0xe3, 0xa6, 0x3c, 0x1f, 0x5d, 0x57, 0x4d, 0x97, 0xe8, 0xcf, 0xd6, 0xa2, + 0xef, 0xc0, 0x12, 0xa9, 0x9e, 0x1f, 0x15, 0xc5, 0xe0, 0x49, 0x87, 0x55, 0x43, 0x9a, 0x72, 0xbc, + 0x7f, 0x0d, 0x0d, 0x5d, 0x84, 0x3f, 0x89, 0xbe, 0x0d, 0x4b, 0x70, 0x90, 0x56, 0x62, 0x54, 0x14, + 0xd5, 0x60, 0xbb, 0xc3, 0x5c, 0x03, 0x1a, 0xff, 0x4f, 0xfa, 0x2b, 0x04, 0x5a, 0xe0, 0x84, 0x5d, + 0xf1, 0xcb, 0x5e, 0x2d, 0x60, 0xc8, 0xde, 0x2d, 0xe0, 0x6a, 0xe8, 0x22, 0x64, 0xd1, 0x3b, 0xee, + 0x98, 0x9d, 0xb0, 0x4a, 0xce, 0x69, 0x0f, 0xe9, 0x61, 0xa9, 0x11, 0xe3, 0xf4, 0x51, 0x1f, 0x54, + 0x7b, 0x4b, 0xa3, 0x81, 0xf6, 0x96, 0xf1, 0xca, 0x38, 0x7b, 0x80, 0x5a, 0x70, 0x08, 0xe3, 0xeb, + 0x61, 0x0f, 0x52, 0xbb, 0xfa, 0xc3, 0xe8, 0x97, 0x5f, 0xf1, 0xf2, 0xb2, 0x2a, 0xe2, 0x19, 0xd3, + 0xf3, 0xd1, 0x7d, 0x5f, 0xbb, 0x91, 0xc2, 0x29, 0x69, 0xbd, 0x0b, 0x73, 0x66, 0x8e, 0x46, 0xf8, + 0x79, 0xc1, 0xe0, 0x42, 0x60, 0x15, 0x6b, 0x21, 0x35, 0x73, 0x40, 0x48, 0xdb, 0xbe, 0x8c, 0x06, + 0xd6, 0xf6, 0xd9, 0x1f, 0xb1, 0x99, 0x18, 0x25, 0x09, 0xec, 0x15, 0xab, 0x2b, 0x89, 0xe1, 0x28, + 0x49, 0xa8, 0x5e, 0xc1, 0x51, 0xed, 0xec, 0x75, 0xf4, 0x2e, 0x70, 0x26, 0x43, 0x35, 0x49, 0x06, + 0x5b, 0x61, 0x2b, 0x1a, 0x33, 0x4e, 0x87, 0x7d, 0x71, 0x27, 0xfe, 0x11, 0xcf, 0x27, 0x6c, 0xc1, + 0xaf, 0x18, 0x88, 0x7f, 0xd4, 0x9a, 0x22, 0x89, 0xf8, 0x0f, 0x6b, 0x20, 0x61, 0x32, 0x61, 0x19, + 0x9b, 0x09, 0x32, 0x4c, 0x94, 0xb8, 0x33, 0x4c, 0x0c, 0xe6, 0x8c, 0xb0, 0x46, 0xb8, 0xcf, 0xc4, + 0xce, 0xb2, 0x2c, 0x59, 0x2e, 0xc8, 0xbe, 0xb4, 0x48, 0x67, 0x5f, 0x7a, 0x28, 0x52, 0x9f, 0x7d, + 0x26, 0x46, 0x59, 0x46, 0xd6, 0x47, 0x89, 0x3b, 0xeb, 0x63, 0x30, 0xed, 0x61, 0x16, 0xfd, 0x8a, + 0xd3, 0x62, 0x62, 0x9c, 0x9f, 0xf3, 0x01, 0xdd, 0x16, 0x52, 0x6e, 0x7c, 0x6c, 0x74, 0x72, 0x48, + 0x35, 0x5e, 0xbc, 0x29, 0x78, 0x49, 0x77, 0x8b, 0x12, 0x77, 0x56, 0xc3, 0x60, 0xda, 0xc3, 0x1f, + 0x44, 0x6f, 0xeb, 0x09, 0xb2, 0x49, 0x2a, 0xee, 0xa1, 0xb3, 0x27, 0xcc, 0x2a, 0xee, 0x77, 0x50, + 0x2d, 0xf3, 0x87, 0xe9, 0xbc, 0xac, 0x67, 0x1f, 0xdc, 0xbc, 0x96, 0x76, 0x98, 0xb7, 0x94, 0x36, + 0xcf, 0xa3, 0x5f, 0xf3, 0xcd, 0xef, 0xc4, 0xf9, 0x8c, 0x65, 0x83, 0x47, 0x21, 0x75, 0xc5, 0x18, + 0x57, 0x9b, 0xbd, 0x58, 0x3b, 0xd9, 0x69, 0x42, 0x4f, 0xa6, 0x77, 0x51, 0x6d, 0x30, 0x95, 0xde, + 0x0b, 0x43, 0x2d, 0xdb, 0xbb, 0x2c, 0x63, 0xa4, 0x6d, 0x25, 0xec, 0xb0, 0x6d, 0x20, 0x6d, 0xbb, 0x8c, 0x7e, 0xdd, 0x74, 0x73, 0x9d, 0x9c, 0x49, 0x79, 0xbd, 0xe8, 0x6c, 0x12, 0xfd, 0xe8, 0x42, - 0xc6, 0xd7, 0xa3, 0x7e, 0x70, 0xab, 0x3e, 0x3a, 0xa2, 0xe0, 0xf5, 0x01, 0xf1, 0xe4, 0x6e, 0x18, - 0xd2, 0xb6, 0xff, 0x66, 0x2d, 0xfa, 0x9e, 0x96, 0x3d, 0xcf, 0xe3, 0xb3, 0x8c, 0xc9, 0xd5, 0xfd, - 0x88, 0x89, 0xd7, 0xbc, 0xbc, 0x9c, 0xac, 0xf2, 0x19, 0x91, 0x53, 0xe2, 0x70, 0x47, 0x4e, 0x49, - 0x2a, 0xe9, 0xc2, 0xfc, 0xb1, 0x49, 0x9f, 0x76, 0x2e, 0xe2, 0x7c, 0xce, 0x7e, 0x58, 0xf1, 0x7c, - 0x54, 0xa4, 0xa3, 0x24, 0x29, 0x07, 0x43, 0xbc, 0xeb, 0x21, 0x67, 0x4a, 0xb0, 0xdd, 0x9b, 0x77, - 0xf6, 0x30, 0xba, 0x95, 0x05, 0x2f, 0xe0, 0x1e, 0xa6, 0x69, 0x3e, 0xc1, 0x0b, 0x6a, 0x0f, 0xe3, - 0x23, 0x2d, 0xab, 0x87, 0xf5, 0x1a, 0x84, 0x5b, 0x3d, 0x74, 0x17, 0x9d, 0xdb, 0x21, 0xc4, 0xae, - 0x01, 0x4d, 0x43, 0xf1, 0xfc, 0x3c, 0x9d, 0x9f, 0x16, 0x49, 0x3d, 0x87, 0x1e, 0xe0, 0x75, 0x76, - 0x10, 0x62, 0x0d, 0x20, 0x50, 0xed, 0xed, 0xef, 0x6c, 0xaa, 0xaf, 0xe3, 0xd2, 0x5e, 0xc9, 0x17, - 0x07, 0x6c, 0x1e, 0xcf, 0x56, 0x3a, 0x98, 0x7e, 0x18, 0x8a, 0x62, 0x90, 0x36, 0x85, 0xf8, 0xe8, - 0x9a, 0x5a, 0xba, 0x3c, 0xff, 0xbe, 0x16, 0xdd, 0xf5, 0xc6, 0x89, 0x1e, 0x4c, 0xaa, 0xf4, 0xa3, - 0x3c, 0x39, 0x61, 0x95, 0x88, 0x4b, 0x31, 0xf8, 0x7e, 0x60, 0x0c, 0x10, 0x3a, 0xa6, 0x6c, 0x3f, - 0xf8, 0x5a, 0xba, 0xb6, 0xd7, 0x27, 0xf5, 0x2a, 0xa1, 0xe3, 0x8f, 0xdf, 0xeb, 0x52, 0x02, 0xa3, - 0xcf, 0xed, 0x10, 0x62, 0x7b, 0x5d, 0x0a, 0xc6, 0xf9, 0x55, 0x2a, 0xd8, 0x3e, 0xcb, 0x59, 0xd9, - 0xee, 0x75, 0xa5, 0xea, 0x23, 0x44, 0xaf, 0x13, 0xa8, 0x3d, 0x3b, 0x70, 0xbc, 0xa9, 0x8a, 0x83, - 0xb3, 0x03, 0xd7, 0x80, 0x02, 0x88, 0xb3, 0x03, 0x14, 0xb4, 0x11, 0xd5, 0xab, 0x95, 0xc9, 0x68, - 0x36, 0x03, 0x85, 0x6d, 0xe5, 0x34, 0x8f, 0xfa, 0xc1, 0x44, 0x4b, 0x8a, 0xfd, 0xda, 0x48, 0xb0, - 0x25, 0x15, 0xd2, 0xab, 0x25, 0x0d, 0x8a, 0xb6, 0xa4, 0xda, 0x34, 0x05, 0x5a, 0x52, 0x01, 0x3d, - 0x5a, 0xd2, 0x80, 0x36, 0xc9, 0x71, 0xfc, 0xbc, 0x4c, 0xd9, 0x6b, 0x90, 0xe4, 0xb8, 0xca, 0xb5, - 0x98, 0x48, 0x72, 0x10, 0x4c, 0x7b, 0x38, 0x8a, 0x7e, 0x51, 0x0a, 0x7f, 0xc8, 0xd3, 0x7c, 0x70, - 0x13, 0x51, 0xaa, 0x05, 0xc6, 0xea, 0x2d, 0x1a, 0x00, 0x25, 0xae, 0xff, 0xaa, 0x33, 0x8e, 0x7b, - 0x84, 0x12, 0x48, 0x36, 0xd6, 0xbb, 0x30, 0x9b, 0x5d, 0x4a, 0x61, 0x1d, 0x95, 0x27, 0x17, 0x71, - 0x99, 0xe6, 0xf3, 0x01, 0xa6, 0xeb, 0xc8, 0x89, 0xec, 0x12, 0xe3, 0xc0, 0x70, 0xd2, 0x8a, 0xa3, - 0xa2, 0x28, 0xeb, 0x60, 0x8f, 0x0d, 0x27, 0x1f, 0x09, 0x0e, 0xa7, 0x16, 0x8a, 0x7b, 0xdb, 0x65, - 0xb3, 0x2c, 0xcd, 0x83, 0xde, 0x34, 0xd2, 0xc7, 0x9b, 0x45, 0xc1, 0xe0, 0x3d, 0x60, 0xf1, 0x15, - 0x6b, 0x6a, 0x86, 0xb5, 0x8c, 0x0b, 0x04, 0x07, 0x2f, 0x00, 0xed, 0x56, 0x5e, 0x8a, 0x0f, 0xe3, - 0x4b, 0x56, 0x37, 0x30, 0xab, 0x53, 0x85, 0x01, 0xa6, 0xef, 0x11, 0xc4, 0x56, 0x1e, 0x27, 0xb5, - 0xab, 0x65, 0xf4, 0xae, 0x94, 0x1f, 0xc7, 0xa5, 0x48, 0x67, 0x69, 0x11, 0xe7, 0xcd, 0x16, 0x11, - 0x8b, 0x22, 0x2d, 0xca, 0xb8, 0xdc, 0xea, 0x49, 0x6b, 0xb7, 0xff, 0xb2, 0x16, 0xbd, 0x0f, 0xfd, - 0x1e, 0xb3, 0x72, 0x91, 0xca, 0x93, 0x86, 0x4a, 0x47, 0xd8, 0x4f, 0xc2, 0x46, 0x5b, 0x0a, 0xa6, - 0x34, 0x9f, 0x5e, 0x5f, 0xd1, 0xe6, 0x97, 0x13, 0xbd, 0xfb, 0x7a, 0x51, 0x26, 0xad, 0xe3, 0xd0, - 0x49, 0xb3, 0xa5, 0x92, 0x42, 0x22, 0xbf, 0x6c, 0x41, 0x60, 0x86, 0x9f, 0xe6, 0x55, 0x63, 0x1d, - 0x9b, 0xe1, 0x56, 0x1c, 0x9c, 0xe1, 0x1e, 0x66, 0x67, 0xf8, 0xf1, 0xf2, 0x2c, 0x4b, 0xab, 0x8b, - 0x34, 0x9f, 0xeb, 0xcd, 0x84, 0xaf, 0x6b, 0xc5, 0x70, 0x3f, 0xb1, 0xd1, 0xc9, 0x61, 0x4e, 0xf4, - 0x60, 0x21, 0x9d, 0x80, 0x61, 0xb2, 0xd1, 0xc9, 0xd9, 0x3d, 0x9e, 0x95, 0x1e, 0xa4, 0x95, 0x00, - 0x7b, 0x3c, 0x47, 0xb5, 0x96, 0x12, 0x7b, 0xbc, 0x36, 0x65, 0xf7, 0x78, 0x6e, 0x1d, 0x2a, 0x9e, - 0x5d, 0xb1, 0xd3, 0x32, 0x05, 0x7b, 0x3c, 0xaf, 0x7c, 0x0d, 0x43, 0xec, 0xf1, 0x28, 0xd6, 0x06, - 0x2a, 0x4b, 0xec, 0x33, 0x31, 0x11, 0xb1, 0x58, 0x56, 0x20, 0x50, 0x39, 0x36, 0x0c, 0x42, 0x04, - 0x2a, 0x02, 0xd5, 0xde, 0x7e, 0x2f, 0x8a, 0xd4, 0xb9, 0x8c, 0x3c, 0x3b, 0xf3, 0xd7, 0x1e, 0x7d, - 0x60, 0xe3, 0x1d, 0x9c, 0xbd, 0x1f, 0x20, 0x6c, 0x1a, 0xa7, 0xfe, 0x2e, 0x8f, 0x04, 0x07, 0xa8, - 0x86, 0x14, 0x11, 0x69, 0x1c, 0x40, 0x60, 0x41, 0x27, 0x17, 0xfc, 0x35, 0x5e, 0xd0, 0x5a, 0x12, - 0x2e, 0xa8, 0x26, 0xec, 0x93, 0x12, 0x5d, 0x50, 0xec, 0x49, 0x49, 0x53, 0x8c, 0xd0, 0x93, 0x12, - 0xc8, 0xd8, 0x31, 0xe3, 0x1a, 0x7e, 0xc6, 0xf9, 0xe5, 0x22, 0x2e, 0x2f, 0xc1, 0x98, 0xf1, 0x94, - 0x1b, 0x86, 0x18, 0x33, 0x14, 0x6b, 0xc7, 0x8c, 0xeb, 0xb0, 0xde, 0x04, 0x9c, 0x96, 0x19, 0x18, - 0x33, 0x9e, 0x0d, 0x8d, 0x10, 0x63, 0x86, 0x40, 0x6d, 0x74, 0x72, 0xbd, 0x4d, 0x18, 0x3c, 0x16, - 0xf2, 0xd4, 0x27, 0x8c, 0x3a, 0x16, 0x42, 0x30, 0x38, 0x84, 0xf6, 0xcb, 0xb8, 0xb8, 0xc0, 0x87, - 0x90, 0x14, 0x85, 0x87, 0x50, 0x83, 0xc0, 0xfe, 0x9e, 0xb0, 0xb8, 0x9c, 0x5d, 0xe0, 0xfd, 0xad, - 0x64, 0xe1, 0xfe, 0x36, 0x0c, 0xec, 0x6f, 0x25, 0x78, 0x95, 0x8a, 0x8b, 0x43, 0x26, 0x62, 0xbc, - 0xbf, 0x7d, 0x26, 0xdc, 0xdf, 0x2d, 0xd6, 0x66, 0xff, 0xae, 0xc3, 0xc9, 0xf2, 0xac, 0x9a, 0x95, - 0xe9, 0x19, 0x1b, 0x04, 0xac, 0x18, 0x88, 0xc8, 0xfe, 0x49, 0x58, 0xfb, 0xfc, 0xe9, 0x5a, 0x74, - 0xb3, 0xe9, 0x76, 0x5e, 0x55, 0x7a, 0xed, 0xf3, 0xdd, 0x7f, 0x84, 0xf7, 0x2f, 0x81, 0x13, 0xcf, - 0xae, 0x7a, 0xa8, 0x39, 0xb9, 0x01, 0x5e, 0xa4, 0xd3, 0xbc, 0x32, 0x85, 0xfa, 0xa4, 0x8f, 0x75, - 0x47, 0x81, 0xc8, 0x0d, 0x7a, 0x29, 0xda, 0xb4, 0x4c, 0xf7, 0x4f, 0x23, 0x1b, 0x27, 0x15, 0x48, - 0xcb, 0x9a, 0xf6, 0x76, 0x08, 0x22, 0x2d, 0xc3, 0x49, 0x38, 0x14, 0xf6, 0x4b, 0xbe, 0x2c, 0xaa, - 0x8e, 0xa1, 0x00, 0xa0, 0xf0, 0x50, 0x68, 0xc3, 0xda, 0xe7, 0x9b, 0xe8, 0x37, 0xdc, 0xe1, 0xe7, - 0x36, 0xf6, 0x16, 0x3d, 0xa6, 0xb0, 0x26, 0x1e, 0xf6, 0xc5, 0x6d, 0x46, 0xd1, 0x78, 0x16, 0xbb, - 0x4c, 0xc4, 0x69, 0x56, 0x0d, 0xd6, 0x71, 0x1b, 0x8d, 0x9c, 0xc8, 0x28, 0x30, 0x0e, 0xc6, 0xb7, - 0xdd, 0x65, 0x91, 0xa5, 0xb3, 0xf6, 0x43, 0x2b, 0xad, 0x6b, 0xc4, 0xe1, 0xf8, 0xe6, 0x62, 0x30, - 0x5e, 0xd7, 0xa9, 0x9f, 0xfc, 0xcf, 0x74, 0x55, 0x30, 0x3c, 0x5e, 0x7b, 0x48, 0x38, 0x5e, 0x43, - 0x14, 0xd6, 0x67, 0xc2, 0xc4, 0x41, 0xbc, 0xe2, 0x4b, 0x22, 0x5e, 0x1b, 0x71, 0xb8, 0x3e, 0x2e, - 0x66, 0xf7, 0x06, 0xc6, 0xc3, 0x38, 0x17, 0xac, 0xcc, 0xe3, 0x6c, 0x2f, 0x8b, 0xe7, 0xd5, 0x80, - 0x88, 0x31, 0x3e, 0x45, 0xec, 0x0d, 0x68, 0x1a, 0x69, 0xc6, 0x71, 0xb5, 0x17, 0x5f, 0xf1, 0x32, - 0x15, 0x74, 0x33, 0x5a, 0xa4, 0xb3, 0x19, 0x3d, 0x14, 0xf5, 0x36, 0x2a, 0x67, 0x17, 0xe9, 0x15, - 0x4b, 0x02, 0xde, 0x1a, 0xa4, 0x87, 0x37, 0x07, 0x45, 0x3a, 0x6d, 0xc2, 0x97, 0xe5, 0x8c, 0x91, - 0x9d, 0xa6, 0xc4, 0x9d, 0x9d, 0x66, 0x30, 0xed, 0xe1, 0x2f, 0xd6, 0xa2, 0xdf, 0x54, 0x52, 0xf7, - 0x49, 0xd2, 0x6e, 0x5c, 0x5d, 0x9c, 0xf1, 0xb8, 0x4c, 0x06, 0x1f, 0x60, 0x76, 0x50, 0xd4, 0xb8, - 0x7e, 0x72, 0x1d, 0x15, 0xd8, 0xac, 0x75, 0xde, 0x6d, 0x67, 0x1c, 0xda, 0xac, 0x1e, 0x12, 0x6e, - 0x56, 0x88, 0xc2, 0x00, 0x22, 0xe5, 0xea, 0xa0, 0x71, 0x9d, 0xd4, 0xf7, 0x4f, 0x1b, 0x37, 0x3a, - 0x39, 0x18, 0x1f, 0x6b, 0xa1, 0x3f, 0x5a, 0xb6, 0x28, 0x1b, 0xf8, 0x88, 0x19, 0xf6, 0xc5, 0x49, - 0xcf, 0x66, 0x56, 0x84, 0x3d, 0xb7, 0x66, 0xc6, 0xb0, 0x2f, 0x4e, 0x78, 0x76, 0xc2, 0x5a, 0xc8, - 0x33, 0x12, 0xda, 0x86, 0x7d, 0x71, 0x98, 0x7d, 0x69, 0xa6, 0x59, 0x17, 0x1e, 0x06, 0xec, 0xc0, - 0xb5, 0x61, 0xb3, 0x17, 0xab, 0x1d, 0xfe, 0xd5, 0x5a, 0xf4, 0x5d, 0xeb, 0xf1, 0x90, 0x27, 0xe9, - 0xf9, 0x4a, 0x41, 0x2f, 0xe3, 0x6c, 0xc9, 0xaa, 0xc1, 0x13, 0xca, 0x5a, 0x9b, 0x35, 0x25, 0x78, - 0x7a, 0x2d, 0x1d, 0x38, 0x77, 0x46, 0x45, 0x91, 0xad, 0xa6, 0x6c, 0x51, 0x64, 0xe4, 0xdc, 0xf1, - 0x90, 0xf0, 0xdc, 0x81, 0x28, 0xcc, 0xca, 0xa7, 0xbc, 0xce, 0xf9, 0xd1, 0xac, 0x5c, 0x8a, 0xc2, - 0x59, 0x79, 0x83, 0xc0, 0x5c, 0x69, 0xca, 0x77, 0x78, 0x96, 0xb1, 0x99, 0x68, 0xdf, 0x46, 0x31, - 0x9a, 0x96, 0x08, 0xe7, 0x4a, 0x80, 0xb4, 0xa7, 0x72, 0xcd, 0x1e, 0x32, 0x2e, 0xd9, 0xb3, 0xd5, - 0x41, 0x9a, 0x5f, 0x0e, 0xf0, 0xb4, 0xc0, 0x02, 0xc4, 0xa9, 0x1c, 0x0a, 0xc2, 0xbd, 0xea, 0x69, - 0x9e, 0x70, 0x7c, 0xaf, 0x5a, 0x4b, 0xc2, 0x7b, 0x55, 0x4d, 0x40, 0x93, 0x27, 0x8c, 0x32, 0x59, - 0x4b, 0xc2, 0x26, 0x35, 0x81, 0x85, 0x42, 0xfd, 0x44, 0x8a, 0x0c, 0x85, 0xe0, 0x19, 0xd4, 0x46, - 0x27, 0x07, 0xf7, 0x5c, 0xda, 0x01, 0x3a, 0x22, 0x80, 0xf1, 0x3b, 0x41, 0x06, 0x0e, 0xfd, 0x66, - 0x37, 0xbc, 0xc7, 0xc4, 0xec, 0x02, 0x1f, 0xfa, 0x1e, 0x12, 0x1e, 0xfa, 0x10, 0x85, 0x6d, 0x35, - 0xe5, 0x66, 0x37, 0xbf, 0x8e, 0x0f, 0xbc, 0xd6, 0x4e, 0x7e, 0xa3, 0x93, 0x83, 0x6d, 0x35, 0x5e, - 0xd0, 0x6d, 0xa5, 0x64, 0xe1, 0xb6, 0x32, 0x0c, 0x2c, 0xbd, 0x12, 0xc8, 0x43, 0xb2, 0x75, 0x5a, - 0xd1, 0x3b, 0x26, 0xdb, 0xe8, 0xe4, 0xb4, 0x93, 0x7f, 0x32, 0xfb, 0x43, 0x25, 0x3d, 0xe2, 0xf5, - 0xe4, 0x7b, 0x19, 0x67, 0x69, 0x12, 0x0b, 0x36, 0xe5, 0x97, 0x2c, 0xc7, 0xb7, 0x62, 0xba, 0xb4, - 0x8a, 0x1f, 0x7a, 0x0a, 0xe1, 0xad, 0x58, 0x58, 0x11, 0x8e, 0x13, 0x45, 0x9f, 0x56, 0x6c, 0x27, - 0xae, 0x88, 0x10, 0xe9, 0x21, 0xe1, 0x71, 0x02, 0x51, 0x98, 0x08, 0x2b, 0xf9, 0xf3, 0x37, 0x05, - 0x2b, 0x53, 0x96, 0xcf, 0x18, 0x9e, 0x08, 0x43, 0x2a, 0x9c, 0x08, 0x23, 0x34, 0xdc, 0x04, 0xee, - 0xc6, 0x82, 0x3d, 0x5b, 0x4d, 0xd3, 0x05, 0xab, 0x44, 0xbc, 0x28, 0xf0, 0x4d, 0x20, 0x80, 0xc2, - 0x9b, 0xc0, 0x36, 0xdc, 0x3a, 0x73, 0x32, 0x91, 0xb6, 0x7d, 0x3b, 0x0e, 0x12, 0x81, 0xdb, 0x71, - 0x04, 0x0a, 0x1b, 0xd6, 0x02, 0xe8, 0xd3, 0x87, 0x96, 0x95, 0xe0, 0xd3, 0x07, 0x9a, 0x6e, 0x9d, - 0xe4, 0x19, 0x66, 0x52, 0x4f, 0xcd, 0x8e, 0xa2, 0x4f, 0xdc, 0x29, 0xba, 0xd9, 0x8b, 0xc5, 0x8f, - 0x0e, 0x4f, 0x58, 0x16, 0xcb, 0xf5, 0x30, 0x70, 0x3e, 0xd7, 0x30, 0x7d, 0x8e, 0x0e, 0x1d, 0x56, - 0x3b, 0xfc, 0xf3, 0xb5, 0xe8, 0x3d, 0xcc, 0xe3, 0x8b, 0x42, 0xfa, 0x7d, 0xdc, 0x6d, 0x4b, 0x91, - 0xc4, 0xf5, 0xbf, 0xb0, 0x86, 0xbd, 0xc1, 0xd2, 0x88, 0xec, 0xed, 0x40, 0x5d, 0x00, 0x3f, 0x1b, - 0x34, 0xe5, 0x87, 0x1c, 0x71, 0x83, 0x25, 0xc4, 0xdb, 0x8d, 0x96, 0x5f, 0xae, 0x0a, 0x6c, 0xb4, - 0x8c, 0x0d, 0x2d, 0x26, 0x36, 0x5a, 0x08, 0x66, 0x67, 0xa7, 0x5b, 0xbd, 0x57, 0xa9, 0xb8, 0x90, - 0x89, 0x1c, 0x98, 0x9d, 0x5e, 0x59, 0x0d, 0x44, 0xcc, 0x4e, 0x12, 0x86, 0xa9, 0x4e, 0x03, 0xd6, - 0x73, 0x13, 0x8b, 0xe5, 0xc6, 0x90, 0x3b, 0x33, 0xef, 0x77, 0x83, 0x70, 0xbc, 0x36, 0x62, 0xbd, - 0xa7, 0x7a, 0x18, 0xb2, 0x00, 0xf6, 0x55, 0x9b, 0xbd, 0x58, 0xed, 0xf0, 0x4f, 0xa3, 0xef, 0xb4, - 0x2a, 0xb6, 0xc7, 0x62, 0xb1, 0x2c, 0x59, 0x02, 0x6e, 0x8b, 0xb7, 0xcb, 0xdd, 0x80, 0xc4, 0x6d, - 0xf1, 0xa0, 0x42, 0x2b, 0xf9, 0x6f, 0x38, 0x35, 0xac, 0x4c, 0x19, 0x9e, 0x84, 0x4c, 0xfa, 0x6c, - 0x30, 0xf9, 0xa7, 0x75, 0x5a, 0xfb, 0x77, 0x77, 0x74, 0x8d, 0xae, 0xe2, 0x34, 0x93, 0x4f, 0x81, - 0x3f, 0x08, 0x19, 0xf5, 0xd0, 0xe0, 0xfe, 0x9d, 0x54, 0x69, 0x45, 0x66, 0x39, 0xc7, 0x9d, 0x7d, - 0xdf, 0x23, 0x3a, 0x12, 0x20, 0xdb, 0xbe, 0xad, 0x9e, 0xb4, 0x76, 0x2b, 0x9a, 0x25, 0xaf, 0xfe, - 0xb3, 0x3b, 0xc8, 0x31, 0xaf, 0x5a, 0x15, 0x19, 0xe9, 0x5b, 0x3d, 0x69, 0xfb, 0xaa, 0x42, 0xdb, - 0xab, 0x5e, 0x88, 0xb6, 0x3b, 0x4d, 0x81, 0xb5, 0xe8, 0x71, 0x7f, 0x05, 0xed, 0xfe, 0x5f, 0xcd, - 0x81, 0xb7, 0xf2, 0x3f, 0xe3, 0x8b, 0x05, 0xcb, 0x13, 0x96, 0x34, 0x1a, 0x55, 0xbd, 0x31, 0xfb, - 0x94, 0xb6, 0x6b, 0x14, 0x86, 0xae, 0x86, 0x29, 0xd1, 0x6f, 0x7d, 0x0d, 0x4d, 0x5d, 0xb4, 0xff, - 0x5c, 0x8b, 0x1e, 0xa0, 0x45, 0x6b, 0x06, 0xae, 0x57, 0xc4, 0xdf, 0xed, 0xe3, 0x08, 0xd3, 0x34, - 0x45, 0x1d, 0xfd, 0x3f, 0x2c, 0xe8, 0x22, 0xff, 0xdb, 0x5a, 0x74, 0xdb, 0x2a, 0xd6, 0xc3, 0x7b, - 0x87, 0xe7, 0xe7, 0x59, 0x3a, 0x13, 0xf2, 0x51, 0xaf, 0x56, 0xa1, 0x9b, 0x93, 0xd2, 0xe8, 0x6e, - 0xce, 0x80, 0xa6, 0x2e, 0xdb, 0x3f, 0xae, 0x45, 0xb7, 0xdc, 0xe6, 0x94, 0xcf, 0x89, 0xd5, 0xb1, - 0x6b, 0xa3, 0x58, 0x0d, 0x3e, 0xa6, 0xdb, 0x00, 0xe3, 0x4d, 0xb9, 0x3e, 0xb9, 0xb6, 0x9e, 0xdd, - 0xab, 0x7f, 0x96, 0x56, 0x82, 0x97, 0xab, 0xc9, 0x05, 0x7f, 0xdd, 0xbc, 0x7a, 0xe7, 0xaf, 0x16, - 0x1a, 0x18, 0x3a, 0x04, 0xb1, 0x57, 0xc7, 0xc9, 0x96, 0x2b, 0xfb, 0x8a, 0x5e, 0x45, 0xb8, 0x72, - 0x88, 0x0e, 0x57, 0x3e, 0x69, 0xd7, 0xca, 0xa6, 0x56, 0xf6, 0x7d, 0xc2, 0x0d, 0xbc, 0xa8, 0xed, - 0x77, 0x0a, 0xef, 0x77, 0x83, 0x36, 0x63, 0xd6, 0xe2, 0xdd, 0xf4, 0xfc, 0xdc, 0xd4, 0x09, 0x2f, - 0xa9, 0x8b, 0x10, 0x19, 0x33, 0x81, 0xda, 0x4d, 0xdf, 0x5e, 0x9a, 0x31, 0xf9, 0xa8, 0xea, 0xc5, - 0xf9, 0x79, 0xc6, 0xe3, 0x04, 0x6c, 0xfa, 0x6a, 0xf1, 0xd0, 0x95, 0x13, 0x9b, 0x3e, 0x8c, 0xb3, - 0x97, 0x60, 0x6a, 0x69, 0x3d, 0xe7, 0xf2, 0x59, 0x9a, 0xc1, 0x4b, 0xe3, 0x52, 0xd3, 0x08, 0x89, - 0x4b, 0x30, 0x2d, 0xc8, 0x26, 0x66, 0xb5, 0xa8, 0x9e, 0x2b, 0x4d, 0xf9, 0xef, 0xb5, 0x15, 0x1d, - 0x31, 0x91, 0x98, 0x21, 0x98, 0x3d, 0x54, 0xa9, 0x85, 0xa7, 0x85, 0x34, 0x7e, 0xab, 0xad, 0xa5, - 0x24, 0xc4, 0xa1, 0x8a, 0x4f, 0xd8, 0x3d, 0x7c, 0xfd, 0xf7, 0x5d, 0xfe, 0x3a, 0x97, 0x46, 0x6f, - 0xb7, 0x55, 0x1a, 0x19, 0xb1, 0x87, 0x87, 0x8c, 0x36, 0xfc, 0x79, 0xf4, 0x0b, 0xd2, 0x70, 0xc9, - 0x8b, 0xc1, 0x0d, 0x44, 0xa1, 0x74, 0xae, 0x58, 0xdf, 0x24, 0xe5, 0xf6, 0xce, 0x8c, 0x19, 0x1b, - 0xa7, 0x55, 0x3c, 0x87, 0xef, 0x45, 0xd8, 0x1e, 0x97, 0x52, 0xe2, 0xce, 0x4c, 0x9b, 0xf2, 0x47, - 0xc5, 0x11, 0x4f, 0xb4, 0x75, 0xa4, 0x86, 0x46, 0x18, 0x1a, 0x15, 0x2e, 0x64, 0x93, 0xe9, 0xa3, - 0xf8, 0x2a, 0x9d, 0x9b, 0x84, 0x47, 0x85, 0xaf, 0x0a, 0x24, 0xd3, 0x96, 0x19, 0x3a, 0x10, 0x91, - 0x4c, 0x93, 0xb0, 0x13, 0x8c, 0x2d, 0xb3, 0xdf, 0x1c, 0x43, 0x8f, 0xf3, 0x73, 0x5e, 0xa7, 0xde, - 0x07, 0x69, 0x7e, 0x09, 0x83, 0xb1, 0x63, 0x12, 0xe7, 0x89, 0x60, 0xdc, 0x47, 0xcf, 0xee, 0x9a, - 0x9a, 0x33, 0x5a, 0x7b, 0x51, 0x43, 0x69, 0x80, 0x5d, 0x93, 0x39, 0xca, 0x85, 0x1c, 0xb1, 0x6b, - 0x0a, 0xf1, 0xb6, 0x8b, 0x8d, 0xf3, 0x8c, 0xe7, 0xb0, 0x8b, 0xad, 0x85, 0x5a, 0x48, 0x74, 0x71, - 0x0b, 0xb2, 0xf1, 0xb8, 0x11, 0xa9, 0x53, 0xbf, 0x51, 0x96, 0x81, 0x78, 0x6c, 0x54, 0x0d, 0x40, - 0xc4, 0x63, 0x14, 0xd4, 0x7e, 0x4e, 0xa2, 0x6f, 0xd6, 0x4d, 0x7a, 0x5c, 0xb2, 0xab, 0x94, 0xc1, - 0x3b, 0x45, 0x8e, 0x84, 0x98, 0xff, 0x3e, 0x61, 0x67, 0xd6, 0x69, 0x5e, 0x15, 0x59, 0x5c, 0x5d, - 0xe8, 0x5b, 0x26, 0x7e, 0x9d, 0x1b, 0x21, 0xbc, 0x67, 0x72, 0xaf, 0x83, 0xb2, 0x41, 0xbd, 0x91, - 0x99, 0x10, 0xb3, 0x8e, 0xab, 0xb6, 0xc2, 0xcc, 0x46, 0x27, 0x67, 0x1f, 0xe5, 0xec, 0xc7, 0x59, - 0xc6, 0xca, 0x55, 0x23, 0x3b, 0x8c, 0xf3, 0xf4, 0x9c, 0x55, 0x02, 0x3c, 0xca, 0xd1, 0xd4, 0x10, - 0x62, 0xc4, 0xa3, 0x9c, 0x00, 0x6e, 0x77, 0x93, 0xc0, 0xf3, 0x38, 0x4f, 0xd8, 0x1b, 0xb0, 0x9b, - 0x84, 0x76, 0x24, 0x43, 0xec, 0x26, 0x29, 0xd6, 0x3e, 0xd2, 0x78, 0x96, 0xf1, 0xd9, 0xa5, 0x5e, - 0x02, 0xfc, 0x0e, 0x96, 0x12, 0xb8, 0x06, 0xdc, 0x0e, 0x21, 0x76, 0x11, 0x90, 0x82, 0x13, 0x56, - 0x64, 0xf1, 0x0c, 0x5e, 0x2c, 0x53, 0x3a, 0x5a, 0x46, 0x2c, 0x02, 0x90, 0x01, 0xc5, 0xd5, 0x17, - 0xd6, 0xb0, 0xe2, 0x82, 0xfb, 0x6a, 0xb7, 0x43, 0x88, 0x5d, 0x06, 0xa5, 0x60, 0x52, 0x64, 0xa9, - 0x00, 0xd3, 0x40, 0x69, 0x48, 0x09, 0x31, 0x0d, 0x7c, 0x02, 0x98, 0x3c, 0x64, 0xe5, 0x9c, 0xa1, - 0x26, 0xa5, 0x24, 0x68, 0xb2, 0x21, 0xec, 0x2d, 0x7a, 0x55, 0x77, 0x5e, 0xac, 0xc0, 0x2d, 0x7a, - 0x5d, 0x2d, 0x5e, 0xac, 0x88, 0x5b, 0xf4, 0x1e, 0x00, 0x8a, 0x78, 0x1c, 0x57, 0x02, 0x2f, 0xa2, - 0x94, 0x04, 0x8b, 0xd8, 0x10, 0x76, 0x8d, 0x56, 0x45, 0x5c, 0x0a, 0xb0, 0x46, 0xeb, 0x02, 0x38, - 0x57, 0x2b, 0x6e, 0x92, 0x72, 0x1b, 0x49, 0x54, 0xaf, 0x30, 0xb1, 0x97, 0xb2, 0x2c, 0xa9, 0x40, - 0x24, 0xd1, 0xed, 0xde, 0x48, 0x89, 0x48, 0xd2, 0xa6, 0xc0, 0x50, 0xd2, 0xcf, 0x65, 0xb0, 0xda, - 0x81, 0xc7, 0x32, 0xb7, 0x43, 0x88, 0x8d, 0x4f, 0x4d, 0xa1, 0x77, 0xe2, 0xb2, 0x4c, 0xeb, 0xc5, - 0x7f, 0x1d, 0x2f, 0x50, 0x23, 0x27, 0xe2, 0x13, 0xc6, 0x81, 0xe9, 0xd5, 0x04, 0x6e, 0xac, 0x60, - 0x30, 0x74, 0xdf, 0x09, 0x32, 0x36, 0xe3, 0x94, 0x12, 0xe7, 0x6e, 0x00, 0xd6, 0x9a, 0xc8, 0xd5, - 0x80, 0xf5, 0x2e, 0xcc, 0x79, 0x71, 0xd0, 0xb8, 0x38, 0xe4, 0x57, 0x6c, 0xca, 0x9f, 0xbf, 0x49, - 0xab, 0x7a, 0x13, 0xa8, 0x57, 0xee, 0xa7, 0x84, 0x25, 0x0c, 0x26, 0x5e, 0x1c, 0xec, 0x54, 0xb2, - 0x09, 0x04, 0x28, 0xcb, 0x11, 0x7b, 0x8d, 0x26, 0x10, 0xd0, 0xa2, 0xe1, 0x88, 0x04, 0x22, 0xc4, - 0xdb, 0x73, 0x3c, 0xe3, 0x5c, 0x7f, 0xb2, 0x63, 0xca, 0x9b, 0x5c, 0x8e, 0xb2, 0x06, 0x41, 0xe2, - 0x28, 0x25, 0xa8, 0x60, 0xf7, 0x97, 0xc6, 0xbf, 0x9d, 0x62, 0xf7, 0x09, 0x3b, 0xed, 0x69, 0xf6, - 0xa0, 0x07, 0x89, 0xb8, 0xb2, 0x17, 0x5c, 0x28, 0x57, 0xed, 0xfb, 0x2d, 0x0f, 0x7a, 0x90, 0xce, - 0x99, 0xa0, 0x5b, 0xad, 0x67, 0xf1, 0xec, 0x72, 0x5e, 0xf2, 0x65, 0x9e, 0xec, 0xf0, 0x8c, 0x97, - 0xe0, 0x4c, 0xd0, 0x2b, 0x35, 0x40, 0x89, 0x33, 0xc1, 0x0e, 0x15, 0x9b, 0xc1, 0xb9, 0xa5, 0x18, - 0x65, 0xe9, 0x1c, 0xee, 0xa8, 0x3d, 0x43, 0x12, 0x20, 0x32, 0x38, 0x14, 0x44, 0x06, 0x91, 0xda, - 0x71, 0x8b, 0x74, 0x16, 0x67, 0xca, 0xdf, 0x36, 0x6d, 0xc6, 0x03, 0x3b, 0x07, 0x11, 0xa2, 0x80, - 0xd4, 0x73, 0xba, 0x2c, 0xf3, 0x71, 0x2e, 0x38, 0x59, 0xcf, 0x06, 0xe8, 0xac, 0xa7, 0x03, 0x82, - 0xb0, 0x3a, 0x65, 0x6f, 0xea, 0xd2, 0xd4, 0xff, 0x60, 0x61, 0xb5, 0xfe, 0xfb, 0x50, 0xcb, 0x43, - 0x61, 0x15, 0x70, 0xa0, 0x32, 0xda, 0x89, 0x1a, 0x30, 0x01, 0x6d, 0x7f, 0x98, 0xdc, 0xef, 0x06, - 0x71, 0x3f, 0x13, 0xb1, 0xca, 0x58, 0xc8, 0x8f, 0x04, 0xfa, 0xf8, 0x69, 0x40, 0x7b, 0xdc, 0xe2, - 0xd5, 0xe7, 0x82, 0xcd, 0x2e, 0x5b, 0xf7, 0xf5, 0xfc, 0x82, 0x2a, 0x84, 0x38, 0x6e, 0x21, 0x50, - 0xbc, 0x8b, 0xc6, 0x33, 0x9e, 0x87, 0xba, 0xa8, 0x96, 0xf7, 0xe9, 0x22, 0xcd, 0xd9, 0xcd, 0xaf, - 0x91, 0xea, 0x91, 0xa9, 0xba, 0x69, 0x93, 0xb0, 0xe0, 0x42, 0xc4, 0xe6, 0x97, 0x84, 0x6d, 0x4e, - 0x0e, 0x7d, 0x1e, 0xb6, 0x5f, 0x66, 0x68, 0x59, 0x39, 0xa4, 0x5f, 0x66, 0xa0, 0x58, 0xba, 0x92, - 0x6a, 0x8c, 0x74, 0x58, 0xf1, 0xc7, 0xc9, 0xa3, 0x7e, 0xb0, 0xdd, 0xf2, 0x78, 0x3e, 0x77, 0x32, - 0x16, 0x97, 0xca, 0xeb, 0x56, 0xc0, 0x90, 0xc5, 0x88, 0x2d, 0x4f, 0x00, 0x07, 0x21, 0xcc, 0xf3, - 0xbc, 0xc3, 0x73, 0xc1, 0x72, 0x81, 0x85, 0x30, 0xdf, 0x98, 0x06, 0x43, 0x21, 0x8c, 0x52, 0x00, - 0xe3, 0x56, 0x9e, 0x07, 0x31, 0x71, 0x14, 0x2f, 0xd0, 0x8c, 0x4d, 0x9d, 0xf5, 0x28, 0x79, 0x68, - 0xdc, 0x02, 0xce, 0x79, 0xc8, 0xec, 0x7a, 0x99, 0xc6, 0xe5, 0xdc, 0x9c, 0x6e, 0x24, 0x83, 0xc7, - 0xb4, 0x1d, 0x9f, 0x24, 0x1e, 0x32, 0x87, 0x35, 0x40, 0xd8, 0x19, 0x2f, 0xe2, 0xb9, 0xa9, 0x29, - 0x52, 0x03, 0x29, 0x6f, 0x55, 0xf5, 0x7e, 0x37, 0x08, 0xfc, 0xbc, 0x4c, 0x13, 0xc6, 0x03, 0x7e, - 0xa4, 0xbc, 0x8f, 0x1f, 0x08, 0x82, 0xec, 0xad, 0xae, 0xb7, 0xfe, 0xa8, 0x56, 0x9e, 0xe8, 0x7d, - 0xec, 0x90, 0x68, 0x1e, 0xc0, 0x85, 0xb2, 0x37, 0x82, 0x07, 0x73, 0xb4, 0x39, 0xa0, 0x0d, 0xcd, - 0x51, 0x73, 0xfe, 0xda, 0x67, 0x8e, 0x62, 0xb0, 0xf6, 0xf9, 0x63, 0x3d, 0x47, 0x77, 0x63, 0x11, - 0xd7, 0x79, 0xfb, 0xcb, 0x94, 0xbd, 0xd6, 0x1b, 0x61, 0xa4, 0xbe, 0x0d, 0x35, 0x94, 0xef, 0x62, - 0x83, 0x5d, 0xf1, 0x76, 0x6f, 0x3e, 0xe0, 0x5b, 0xef, 0x10, 0x3a, 0x7d, 0x83, 0xad, 0xc2, 0x76, - 0x6f, 0x3e, 0xe0, 0x5b, 0x7f, 0xba, 0xa2, 0xd3, 0x37, 0xf8, 0x7e, 0xc5, 0x76, 0x6f, 0x5e, 0xfb, - 0xfe, 0x49, 0x33, 0x71, 0x5d, 0xe7, 0x75, 0x1e, 0x36, 0x13, 0xe9, 0x15, 0xc3, 0xd2, 0x49, 0xdf, - 0x9e, 0x41, 0x43, 0xe9, 0x24, 0xad, 0xe2, 0x7c, 0xc1, 0x0f, 0x2b, 0xc5, 0x31, 0xaf, 0x52, 0x79, - 0x49, 0xe4, 0x69, 0x0f, 0xa3, 0x0d, 0x1c, 0xda, 0x34, 0x85, 0x94, 0xec, 0xe3, 0x6e, 0x0f, 0xb5, - 0xd7, 0xf3, 0x1f, 0x05, 0xec, 0xb5, 0x6f, 0xe9, 0x6f, 0xf5, 0xa4, 0xed, 0x83, 0x67, 0x8f, 0x69, - 0x1e, 0x19, 0x4e, 0x18, 0xba, 0x4a, 0x18, 0x53, 0xe6, 0x51, 0xb2, 0xfb, 0xec, 0xf4, 0x71, 0x7f, - 0x85, 0x0e, 0xf7, 0xa3, 0x24, 0xe9, 0xe7, 0xde, 0x7d, 0xe6, 0xfe, 0xb8, 0xbf, 0x82, 0x76, 0xff, - 0x97, 0xcd, 0xb6, 0x06, 0xfa, 0xd7, 0x73, 0xf0, 0x49, 0x1f, 0x8b, 0x60, 0x1e, 0x3e, 0xbd, 0x96, - 0x8e, 0x2e, 0xc8, 0xdf, 0x36, 0xfb, 0xf7, 0x06, 0x95, 0xef, 0x48, 0xc9, 0x77, 0xab, 0xf5, 0x94, - 0x0c, 0x8d, 0x2a, 0x0b, 0xc3, 0x89, 0xf9, 0xd1, 0x35, 0xb5, 0x9c, 0xcf, 0x49, 0x7a, 0xb0, 0x7e, - 0x97, 0xd7, 0x29, 0x4f, 0xc8, 0xb2, 0x43, 0xc3, 0x02, 0x7d, 0x7c, 0x5d, 0x35, 0x6a, 0xaa, 0x3a, - 0xb0, 0xfc, 0x96, 0xcf, 0xd3, 0x9e, 0x86, 0xbd, 0xaf, 0xfb, 0x7c, 0x78, 0x3d, 0x25, 0x5d, 0x96, - 0xff, 0x58, 0x8b, 0xee, 0x79, 0xac, 0x7d, 0x9c, 0x01, 0x0e, 0x5d, 0x7e, 0x10, 0xb0, 0x4f, 0x29, - 0x99, 0xc2, 0xfd, 0xf6, 0xd7, 0x53, 0xb6, 0x9f, 0xfd, 0xf3, 0x54, 0xf6, 0xd2, 0x4c, 0xb0, 0xb2, - 0xfd, 0xd9, 0x3f, 0xdf, 0xae, 0xa2, 0x86, 0xf4, 0x67, 0xff, 0x02, 0xb8, 0xf3, 0xd9, 0x3f, 0xc4, - 0x33, 0xfa, 0xd9, 0x3f, 0xd4, 0x5a, 0xf0, 0xb3, 0x7f, 0x61, 0x0d, 0x6a, 0x75, 0x69, 0x8a, 0xa0, - 0x8e, 0xcd, 0x7b, 0x59, 0xf4, 0x4f, 0xd1, 0x9f, 0x5c, 0x47, 0x85, 0x58, 0x5f, 0x15, 0x27, 0xaf, - 0x79, 0xf6, 0x68, 0x53, 0xef, 0xaa, 0xe7, 0x76, 0x6f, 0x5e, 0xfb, 0xfe, 0x91, 0xde, 0x5c, 0x99, - 0xd5, 0x84, 0x97, 0xf2, 0x93, 0x8f, 0x9b, 0xa1, 0xd5, 0xa1, 0xb6, 0xe0, 0xf6, 0xfc, 0xa3, 0x7e, - 0x30, 0x51, 0xdd, 0x9a, 0xd0, 0x9d, 0x3e, 0xec, 0x32, 0x04, 0xba, 0x7c, 0xbb, 0x37, 0x4f, 0x2c, - 0x23, 0xca, 0xb7, 0xea, 0xed, 0x1e, 0xc6, 0xfc, 0xbe, 0x7e, 0xdc, 0x5f, 0x41, 0xbb, 0xbf, 0xd2, - 0x59, 0xab, 0xeb, 0x5e, 0xf6, 0xf3, 0x56, 0x97, 0xa9, 0x89, 0xd7, 0xcd, 0xc3, 0xbe, 0x78, 0x28, - 0x7f, 0x71, 0x97, 0xd0, 0xae, 0xfc, 0x05, 0x5d, 0x46, 0x3f, 0xbc, 0x9e, 0x92, 0x2e, 0xcb, 0x3f, - 0xac, 0x45, 0x37, 0xc9, 0xb2, 0xe8, 0x71, 0xf0, 0x71, 0x5f, 0xcb, 0x60, 0x3c, 0x7c, 0x72, 0x6d, - 0x3d, 0x5d, 0xa8, 0x7f, 0x5e, 0x8b, 0x6e, 0x05, 0x0a, 0xa5, 0x06, 0xc8, 0x35, 0xac, 0xfb, 0x03, - 0xe5, 0xd3, 0xeb, 0x2b, 0x52, 0xcb, 0xbd, 0x8b, 0x4f, 0xda, 0x9f, 0x70, 0x0b, 0xd8, 0x9e, 0xd0, - 0x9f, 0x70, 0xeb, 0xd6, 0x82, 0x67, 0x4c, 0xf1, 0x59, 0xb3, 0xe7, 0x43, 0xcf, 0x98, 0xe4, 0x05, - 0xcd, 0xe0, 0x47, 0x5b, 0x30, 0x0e, 0x73, 0xf2, 0xfc, 0x4d, 0x11, 0xe7, 0x09, 0xed, 0x44, 0xc9, - 0xbb, 0x9d, 0x18, 0x0e, 0x9e, 0xcd, 0xd5, 0xd2, 0x13, 0xde, 0xec, 0xe3, 0x1e, 0x50, 0xfa, 0x06, - 0x09, 0x9e, 0xcd, 0xb5, 0x50, 0xc2, 0x9b, 0xce, 0x1a, 0x43, 0xde, 0x40, 0xb2, 0xf8, 0xb0, 0x0f, - 0x0a, 0x76, 0x08, 0xc6, 0x9b, 0x39, 0xf2, 0x7f, 0x14, 0xb2, 0xd2, 0x3a, 0xf6, 0xdf, 0xea, 0x49, - 0x13, 0x6e, 0x27, 0x4c, 0x7c, 0xc6, 0xe2, 0x84, 0x95, 0x41, 0xb7, 0x86, 0xea, 0xe5, 0xd6, 0xa5, - 0x31, 0xb7, 0x3b, 0x3c, 0x5b, 0x2e, 0x72, 0xdd, 0x99, 0xa4, 0x5b, 0x97, 0xea, 0x76, 0x0b, 0x68, - 0x78, 0x2a, 0x69, 0xdd, 0xca, 0xf4, 0xf2, 0x61, 0xd8, 0x8c, 0x97, 0x55, 0x6e, 0xf6, 0x62, 0xe9, - 0x7a, 0xea, 0x61, 0xd4, 0x51, 0x4f, 0x30, 0x92, 0xb6, 0x7a, 0xd2, 0xf0, 0x78, 0xd0, 0x71, 0x6b, - 0xc6, 0xd3, 0x76, 0x87, 0xad, 0xd6, 0x90, 0x7a, 0xdc, 0x5f, 0x01, 0x1e, 0xc6, 0xea, 0x51, 0x75, - 0x90, 0x56, 0x62, 0x2f, 0xcd, 0xb2, 0xc1, 0x66, 0x60, 0x98, 0x34, 0x50, 0xf0, 0x30, 0x16, 0x81, - 0x89, 0x91, 0xdc, 0x1c, 0x5e, 0xe6, 0x83, 0x2e, 0x3b, 0x92, 0xea, 0x35, 0x92, 0x5d, 0x1a, 0x1c, - 0xa8, 0x39, 0x4d, 0x6d, 0x6a, 0x3b, 0x0c, 0x37, 0x5c, 0xab, 0xc2, 0xdb, 0xbd, 0x79, 0xf0, 0xb4, - 0x5f, 0x52, 0x72, 0x65, 0xb9, 0x4b, 0x99, 0xf0, 0x56, 0x92, 0x7b, 0x1d, 0x14, 0x38, 0x94, 0x54, - 0xd3, 0xe8, 0x55, 0x9a, 0xcc, 0x99, 0x40, 0x1f, 0x54, 0xb9, 0x40, 0xf0, 0x41, 0x15, 0x00, 0x41, - 0xd7, 0xa9, 0xbf, 0x9b, 0xd3, 0xd8, 0x71, 0x82, 0x75, 0x9d, 0x56, 0x76, 0xa8, 0x50, 0xd7, 0xa1, - 0x34, 0x88, 0x06, 0xc6, 0xad, 0xfe, 0xcc, 0xc5, 0xc3, 0x90, 0x19, 0xf0, 0xad, 0x8b, 0xcd, 0x5e, - 0x2c, 0x58, 0x51, 0xac, 0xc3, 0x74, 0x91, 0x0a, 0x6c, 0x45, 0x71, 0x6c, 0xd4, 0x48, 0x68, 0x45, - 0x69, 0xa3, 0x54, 0xf5, 0xea, 0x1c, 0x61, 0x9c, 0x84, 0xab, 0xa7, 0x98, 0x7e, 0xd5, 0x33, 0x6c, - 0xeb, 0xb9, 0x6a, 0x6e, 0x86, 0x8c, 0xb8, 0xd0, 0x9b, 0x65, 0x64, 0x6c, 0x3b, 0xbf, 0xec, 0x60, - 0xc1, 0x50, 0xd4, 0xa1, 0x14, 0xe0, 0xf3, 0x82, 0xe6, 0xb7, 0x20, 0x26, 0x4c, 0x8c, 0x8a, 0x82, - 0xc5, 0x65, 0x9c, 0xcf, 0xd0, 0xcd, 0xa9, 0xf9, 0x6d, 0x07, 0x8f, 0x0c, 0x6d, 0x4e, 0x49, 0x0d, - 0xf0, 0xd4, 0xde, 0x7f, 0xbf, 0x18, 0x99, 0x0a, 0xe6, 0x45, 0x5e, 0xff, 0xf5, 0xe2, 0x07, 0x3d, - 0x48, 0xf8, 0xd4, 0xbe, 0x01, 0xcc, 0xb9, 0xbb, 0x72, 0xfa, 0x41, 0xc0, 0x94, 0x8f, 0x86, 0x36, - 0xc2, 0xb4, 0x0a, 0x18, 0xd4, 0xce, 0xd9, 0xe2, 0xe7, 0x6c, 0x85, 0x0d, 0x6a, 0xf7, 0x90, 0xf0, - 0x73, 0xb6, 0x0a, 0x0d, 0xea, 0x36, 0x0a, 0xf2, 0x4c, 0x77, 0x1f, 0xb4, 0x1e, 0xd0, 0x77, 0xb7, - 0x3e, 0x1b, 0x9d, 0x1c, 0x98, 0x39, 0xbb, 0xe9, 0x95, 0xf7, 0x98, 0x02, 0x29, 0xe8, 0x6e, 0x7a, - 0x85, 0x3f, 0xa5, 0xd8, 0xec, 0xc5, 0xc2, 0x1b, 0x01, 0xb1, 0x60, 0x6f, 0x9a, 0x47, 0xf5, 0x48, - 0x71, 0xa5, 0xbc, 0xf5, 0xac, 0xfe, 0x7e, 0x37, 0x68, 0xef, 0xdf, 0x1e, 0x97, 0x7c, 0xc6, 0xaa, - 0x4a, 0x7f, 0x01, 0xd6, 0xbf, 0xe0, 0xa4, 0x65, 0x43, 0xf0, 0xfd, 0xd7, 0xbb, 0x61, 0xc8, 0xf9, - 0x6c, 0xa3, 0x12, 0xd9, 0xaf, 0x49, 0xad, 0xa3, 0x9a, 0xed, 0x0f, 0x49, 0x6d, 0x74, 0x72, 0x76, - 0x7a, 0x69, 0xa9, 0xfb, 0xf9, 0xa8, 0xfb, 0xa8, 0x3a, 0xf6, 0xe5, 0xa8, 0x07, 0x3d, 0x48, 0xed, - 0xea, 0xb3, 0xe8, 0xad, 0x03, 0x3e, 0x9f, 0xb0, 0x3c, 0x19, 0x7c, 0xcf, 0xbf, 0xc1, 0xcb, 0xe7, - 0xc3, 0xfa, 0xcf, 0xc6, 0xe8, 0x0d, 0x4a, 0x6c, 0xef, 0x20, 0xee, 0xb2, 0xb3, 0xe5, 0x7c, 0x22, - 0x62, 0x01, 0xee, 0x20, 0xca, 0xbf, 0x0f, 0x6b, 0x01, 0x71, 0x07, 0xd1, 0x03, 0x80, 0xbd, 0x69, - 0xc9, 0x18, 0x6a, 0xaf, 0x16, 0x04, 0xed, 0x69, 0xc0, 0x66, 0x11, 0xc6, 0x5e, 0x9d, 0xa8, 0xc3, - 0x3b, 0x83, 0x56, 0x47, 0x4a, 0x89, 0x2c, 0xa2, 0x4d, 0xd9, 0xc1, 0xad, 0xaa, 0x2f, 0xbf, 0xe6, - 0xb3, 0x5c, 0x2c, 0xe2, 0x72, 0x05, 0x06, 0xb7, 0xae, 0xa5, 0x03, 0x10, 0x83, 0x1b, 0x05, 0xed, - 0xac, 0x6d, 0x9a, 0x79, 0x76, 0xb9, 0xcf, 0x4b, 0xbe, 0x14, 0x69, 0xce, 0xe0, 0x17, 0x5d, 0x4c, - 0x83, 0xba, 0x0c, 0x31, 0x6b, 0x29, 0xd6, 0x66, 0xb9, 0x92, 0x50, 0xd7, 0x19, 0xe5, 0xa7, 0xf6, - 0x2b, 0xc1, 0x4b, 0xf8, 0x38, 0x53, 0x59, 0x81, 0x10, 0x91, 0xe5, 0x92, 0x30, 0xe8, 0xfb, 0xe3, - 0x34, 0x9f, 0xa3, 0x7d, 0x7f, 0xec, 0x7e, 0x55, 0xf9, 0x16, 0x0d, 0xd8, 0x09, 0xa5, 0x1a, 0x4d, - 0x4d, 0x00, 0xfd, 0x2a, 0x33, 0xda, 0xe8, 0x2e, 0x41, 0x4c, 0x28, 0x9c, 0x04, 0xae, 0x5e, 0x14, - 0x2c, 0x67, 0x49, 0x73, 0x69, 0x0f, 0x73, 0xe5, 0x11, 0x41, 0x57, 0x90, 0xb4, 0xb1, 0x48, 0xca, - 0x4f, 0x96, 0xf9, 0x71, 0xc9, 0xcf, 0xd3, 0x8c, 0x95, 0x20, 0x16, 0x29, 0x75, 0x47, 0x4e, 0xc4, - 0x22, 0x8c, 0xb3, 0xb7, 0x3f, 0xa4, 0xd4, 0xfb, 0xbd, 0x88, 0x69, 0x19, 0xcf, 0xe0, 0xed, 0x0f, - 0x65, 0xa3, 0x8d, 0x11, 0x27, 0x83, 0x01, 0xdc, 0x49, 0x74, 0x94, 0xeb, 0x7c, 0x25, 0xc7, 0x87, - 0x7e, 0x95, 0x56, 0x7e, 0x6b, 0xb8, 0x02, 0x89, 0x8e, 0x36, 0x87, 0x91, 0x44, 0xa2, 0x13, 0xd6, - 0xb0, 0x4b, 0x89, 0xe4, 0x8e, 0xf4, 0xad, 0x26, 0xb0, 0x94, 0x28, 0x1b, 0x8d, 0x90, 0x58, 0x4a, - 0x5a, 0x10, 0x08, 0x48, 0xcd, 0x34, 0x98, 0xa3, 0x01, 0xc9, 0x48, 0x83, 0x01, 0xc9, 0xa5, 0x6c, - 0xa0, 0x18, 0xe7, 0xa9, 0x48, 0xe3, 0x6c, 0xc2, 0xc4, 0x71, 0x5c, 0xc6, 0x0b, 0x26, 0x58, 0x09, - 0x03, 0x85, 0x46, 0x86, 0x1e, 0x43, 0x04, 0x0a, 0x8a, 0xd5, 0x0e, 0x7f, 0x27, 0x7a, 0xa7, 0x5e, - 0xf7, 0x59, 0xae, 0x7f, 0xe9, 0xea, 0xb9, 0xfc, 0x9d, 0xc2, 0xc1, 0xbb, 0xc6, 0xc6, 0x44, 0x94, - 0x2c, 0x5e, 0x34, 0xb6, 0xdf, 0x36, 0x7f, 0x97, 0xe0, 0xe3, 0xb5, 0x7a, 0x3c, 0x1f, 0x71, 0x91, - 0x9e, 0xd7, 0xdb, 0x6c, 0xfd, 0x02, 0x13, 0x18, 0xcf, 0xae, 0x78, 0x18, 0xf8, 0x14, 0x0b, 0xc6, - 0xd9, 0x38, 0xed, 0x4a, 0x4f, 0x58, 0x91, 0xc1, 0x38, 0xed, 0x69, 0x4b, 0x80, 0x88, 0xd3, 0x28, - 0x68, 0x27, 0xa7, 0x2b, 0x9e, 0xb2, 0x70, 0x65, 0xa6, 0xac, 0x5f, 0x65, 0xa6, 0xde, 0x3b, 0x21, - 0x59, 0xf4, 0xce, 0x21, 0x5b, 0x9c, 0xb1, 0xb2, 0xba, 0x48, 0x0b, 0xea, 0x7b, 0xc8, 0x96, 0xe8, - 0xfc, 0x1e, 0x32, 0x81, 0xda, 0x95, 0xc0, 0x02, 0xe3, 0xea, 0x28, 0x5e, 0x30, 0xf9, 0x61, 0x19, - 0xb0, 0x12, 0x38, 0x46, 0x1c, 0x88, 0x58, 0x09, 0x48, 0xd8, 0x79, 0xbd, 0xcc, 0x32, 0x27, 0x6c, - 0x5e, 0x8f, 0xb0, 0xf2, 0x38, 0x5e, 0x2d, 0x58, 0x2e, 0xb4, 0x49, 0x70, 0x26, 0xef, 0x98, 0xc4, - 0x79, 0xe2, 0x4c, 0xbe, 0x8f, 0x9e, 0x13, 0x9a, 0xbc, 0x86, 0x3f, 0xe6, 0xa5, 0x50, 0x3f, 0x61, - 0x77, 0x5a, 0x66, 0x20, 0x34, 0xf9, 0x8d, 0xea, 0x91, 0x44, 0x68, 0x0a, 0x6b, 0x38, 0xbf, 0x59, - 0xe2, 0x95, 0xe1, 0x25, 0x2b, 0xcd, 0x38, 0x79, 0xbe, 0x88, 0xd3, 0x4c, 0x8f, 0x86, 0xef, 0x07, - 0x6c, 0x13, 0x3a, 0xc4, 0x6f, 0x96, 0xf4, 0xd5, 0x75, 0x7e, 0xe5, 0x25, 0x5c, 0x42, 0xf0, 0x88, - 0xa0, 0xc3, 0x3e, 0xf1, 0x88, 0xa0, 0x5b, 0xcb, 0xee, 0xdc, 0x2d, 0x2b, 0xb9, 0x95, 0x24, 0x76, - 0x78, 0x02, 0xcf, 0x0b, 0x1d, 0x9b, 0x00, 0x24, 0x76, 0xee, 0x41, 0x05, 0x9b, 0x1a, 0x58, 0x6c, - 0x2f, 0xcd, 0xe3, 0x2c, 0xfd, 0x31, 0x4c, 0xeb, 0x1d, 0x3b, 0x0d, 0x41, 0xa4, 0x06, 0x38, 0x89, - 0xb9, 0xda, 0x67, 0x62, 0x9a, 0xd6, 0xa1, 0xff, 0x7e, 0xa0, 0xdd, 0x24, 0xd1, 0xed, 0xca, 0x21, - 0x9d, 0x6f, 0x1f, 0xc3, 0x66, 0x1d, 0x15, 0xc5, 0xa4, 0x5e, 0x55, 0x4f, 0xd8, 0x8c, 0xa5, 0x85, - 0x18, 0x7c, 0x14, 0x6e, 0x2b, 0x80, 0x13, 0x17, 0x2d, 0x7a, 0xa8, 0x39, 0x8f, 0xef, 0xeb, 0x58, - 0x32, 0x51, 0xbf, 0xb2, 0x7b, 0x5a, 0xb1, 0x52, 0x27, 0x1a, 0xfb, 0x4c, 0x80, 0xd9, 0xe9, 0x70, - 0x43, 0x07, 0xac, 0x2b, 0x4a, 0xcc, 0xce, 0xb0, 0x86, 0x3d, 0xec, 0x73, 0x38, 0xfd, 0xed, 0x00, - 0x79, 0xdd, 0xf1, 0x11, 0x69, 0xcc, 0xa1, 0x88, 0xc3, 0x3e, 0x9a, 0xb6, 0xd9, 0x5a, 0xdb, 0xed, - 0x28, 0x5f, 0x8d, 0xe1, 0x95, 0x09, 0xc4, 0x92, 0xc4, 0x88, 0x6c, 0x2d, 0x80, 0x3b, 0x87, 0xe1, - 0x25, 0x8f, 0x93, 0x59, 0x5c, 0x89, 0xe3, 0x78, 0x95, 0xf1, 0x38, 0x91, 0xeb, 0x3a, 0x3c, 0x0c, - 0x6f, 0x98, 0xa1, 0x0b, 0x51, 0x87, 0xe1, 0x14, 0xec, 0x66, 0x67, 0xf2, 0xc7, 0x83, 0xf5, 0x55, - 0x52, 0x98, 0x9d, 0xc9, 0xf2, 0xc2, 0x6b, 0xa4, 0x77, 0xc3, 0x90, 0x7d, 0x05, 0x4e, 0x89, 0x64, - 0x1a, 0x72, 0x0b, 0xd3, 0xf1, 0x12, 0x90, 0xf7, 0x03, 0x84, 0xfd, 0x2c, 0x8b, 0xfa, 0x7b, 0xf3, - 0x53, 0x65, 0x42, 0x7f, 0x21, 0xfe, 0x11, 0xa6, 0xeb, 0x42, 0xde, 0x0d, 0xb5, 0xad, 0x9e, 0xb4, - 0x4d, 0x33, 0x77, 0x2e, 0x62, 0x31, 0x4a, 0x92, 0x43, 0x56, 0x21, 0xef, 0xb3, 0xd7, 0xc2, 0xa1, - 0x95, 0x12, 0x69, 0x66, 0x9b, 0xb2, 0x03, 0xbd, 0x96, 0x3d, 0x4f, 0x52, 0xa1, 0x65, 0xcd, 0x05, - 0xed, 0x47, 0x6d, 0x03, 0x6d, 0x8a, 0xa8, 0x15, 0x4d, 0xdb, 0x58, 0x5e, 0x33, 0x53, 0x3e, 0x9f, - 0x67, 0x4c, 0x43, 0x27, 0x2c, 0x56, 0x1f, 0xc8, 0xdc, 0x6e, 0xdb, 0x42, 0x41, 0x22, 0x96, 0x07, - 0x15, 0x6c, 0x1a, 0x59, 0x63, 0xea, 0x91, 0x54, 0xd3, 0xb0, 0x1b, 0x6d, 0x33, 0x1e, 0x40, 0xa4, - 0x91, 0x28, 0x68, 0x5f, 0xbb, 0xab, 0xc5, 0xfb, 0xac, 0x69, 0x09, 0xf8, 0x05, 0x2e, 0xa9, 0xec, - 0x88, 0x89, 0xd7, 0xee, 0x10, 0xcc, 0xee, 0x13, 0x80, 0x87, 0x67, 0xab, 0x71, 0x02, 0xf7, 0x09, - 0x50, 0x5f, 0x32, 0xc4, 0x3e, 0x81, 0x62, 0xfd, 0xae, 0x33, 0xe7, 0x5e, 0x07, 0x71, 0x65, 0x2b, - 0x87, 0x74, 0x1d, 0x0a, 0x86, 0xba, 0x8e, 0x52, 0xf0, 0x9b, 0xd4, 0x3d, 0x5a, 0x43, 0x9a, 0x14, - 0x3b, 0x57, 0x5b, 0xef, 0xc2, 0x6c, 0xee, 0x5f, 0x0b, 0x4f, 0x58, 0x9c, 0x98, 0x8a, 0x21, 0xba, - 0xae, 0x9c, 0xc8, 0xfd, 0x31, 0x4e, 0x3b, 0xf9, 0xfd, 0x68, 0xa0, 0xaa, 0x51, 0xba, 0x6e, 0x6e, - 0x61, 0x45, 0xac, 0x09, 0x22, 0x50, 0xf9, 0x84, 0x93, 0xb8, 0x79, 0x5d, 0x34, 0xe5, 0xda, 0x81, + 0xc6, 0xd7, 0xe3, 0x7e, 0x70, 0xab, 0x3e, 0x7a, 0x46, 0xc1, 0xeb, 0x03, 0xe6, 0x93, 0x7b, 0x61, + 0x48, 0xdb, 0xfe, 0x9b, 0xb5, 0xe8, 0x7b, 0x5a, 0xf6, 0x22, 0x8f, 0xcf, 0x32, 0x26, 0x57, 0xf7, + 0x23, 0x26, 0x5e, 0xf3, 0xf2, 0x72, 0xb2, 0xca, 0x67, 0x44, 0x4e, 0x89, 0xc3, 0x1d, 0x39, 0x25, + 0xa9, 0xa4, 0x0b, 0xf3, 0xc7, 0x26, 0x7d, 0xda, 0xb9, 0x88, 0xf3, 0x39, 0xfb, 0x61, 0xc5, 0xf3, + 0x51, 0x91, 0x8e, 0x92, 0xa4, 0x1c, 0x0c, 0xf1, 0xae, 0x87, 0x9c, 0x29, 0xc1, 0x76, 0x6f, 0xde, + 0xd9, 0xc3, 0xe8, 0x56, 0x16, 0xbc, 0x80, 0x7b, 0x98, 0xa6, 0xf9, 0x04, 0x2f, 0xa8, 0x3d, 0x8c, + 0x8f, 0xb4, 0xac, 0x1e, 0xd6, 0x6b, 0x10, 0x6e, 0xf5, 0xd0, 0x5d, 0x74, 0xee, 0x84, 0x10, 0xbb, + 0x06, 0x34, 0x0d, 0xc5, 0xf3, 0xf3, 0x74, 0x7e, 0x5a, 0x24, 0xf5, 0x18, 0x7a, 0x88, 0xd7, 0xd9, + 0x41, 0x88, 0x35, 0x80, 0x40, 0xb5, 0xb7, 0xbf, 0xb3, 0xa9, 0xbe, 0x9e, 0x97, 0xf6, 0x4a, 0xbe, + 0x38, 0x60, 0xf3, 0x78, 0xb6, 0xd2, 0x93, 0xe9, 0x07, 0xa1, 0x59, 0x0c, 0xd2, 0xa6, 0x10, 0x1f, + 0x5e, 0x53, 0x4b, 0x97, 0xe7, 0xdf, 0xd7, 0xa2, 0x7b, 0x5e, 0x9c, 0xe8, 0x60, 0x52, 0xa5, 0x1f, + 0xe5, 0xc9, 0x09, 0xab, 0x44, 0x5c, 0x8a, 0xc1, 0xf7, 0x03, 0x31, 0x40, 0xe8, 0x98, 0xb2, 0xfd, + 0xe0, 0x6b, 0xe9, 0xda, 0x5e, 0x9f, 0xd4, 0xab, 0x84, 0x9e, 0x7f, 0xfc, 0x5e, 0x97, 0x12, 0x38, + 0xfb, 0xdc, 0x09, 0x21, 0xb6, 0xd7, 0xa5, 0x60, 0x9c, 0x5f, 0xa5, 0x82, 0xed, 0xb3, 0x9c, 0x95, + 0xed, 0x5e, 0x57, 0xaa, 0x3e, 0x42, 0xf4, 0x3a, 0x81, 0xda, 0xb3, 0x03, 0xc7, 0x9b, 0xaa, 0x38, + 0x38, 0x3b, 0x70, 0x0d, 0x28, 0x80, 0x38, 0x3b, 0x40, 0x41, 0x3b, 0xa3, 0x7a, 0xb5, 0x32, 0x19, + 0xcd, 0x66, 0xa0, 0xb0, 0xad, 0x9c, 0xe6, 0x71, 0x3f, 0x98, 0x68, 0x49, 0xb1, 0x5f, 0x1b, 0x09, + 0xb6, 0xa4, 0x42, 0x7a, 0xb5, 0xa4, 0x41, 0xd1, 0x96, 0x54, 0x9b, 0xa6, 0x40, 0x4b, 0x2a, 0xa0, + 0x47, 0x4b, 0x1a, 0xd0, 0x26, 0x39, 0x8e, 0x9f, 0x97, 0x29, 0x7b, 0x0d, 0x92, 0x1c, 0x57, 0xb9, + 0x16, 0x13, 0x49, 0x0e, 0x82, 0x69, 0x0f, 0x47, 0xd1, 0x2f, 0x4a, 0xe1, 0x0f, 0x79, 0x9a, 0x0f, + 0x6e, 0x22, 0x4a, 0xb5, 0xc0, 0x58, 0xbd, 0x45, 0x03, 0xa0, 0xc4, 0xf5, 0x5f, 0x75, 0xc6, 0x71, + 0x9f, 0x50, 0x02, 0xc9, 0xc6, 0x7a, 0x17, 0x66, 0xb3, 0x4b, 0x29, 0xac, 0x67, 0xe5, 0xc9, 0x45, + 0x5c, 0xa6, 0xf9, 0x7c, 0x80, 0xe9, 0x3a, 0x72, 0x22, 0xbb, 0xc4, 0x38, 0x10, 0x4e, 0x5a, 0x71, + 0x54, 0x14, 0x65, 0x3d, 0xd9, 0x63, 0xe1, 0xe4, 0x23, 0xc1, 0x70, 0x6a, 0xa1, 0xb8, 0xb7, 0x5d, + 0x36, 0xcb, 0xd2, 0x3c, 0xe8, 0x4d, 0x23, 0x7d, 0xbc, 0x59, 0x14, 0x04, 0xef, 0x01, 0x8b, 0xaf, + 0x58, 0x53, 0x33, 0xac, 0x65, 0x5c, 0x20, 0x18, 0xbc, 0x00, 0xb4, 0x5b, 0x79, 0x29, 0x3e, 0x8c, + 0x2f, 0x59, 0xdd, 0xc0, 0xac, 0x4e, 0x15, 0x06, 0x98, 0xbe, 0x47, 0x10, 0x5b, 0x79, 0x9c, 0xd4, + 0xae, 0x96, 0xd1, 0xbb, 0x52, 0x7e, 0x1c, 0x97, 0x22, 0x9d, 0xa5, 0x45, 0x9c, 0x37, 0x5b, 0x44, + 0x6c, 0x16, 0x69, 0x51, 0xc6, 0xe5, 0x56, 0x4f, 0x5a, 0xbb, 0xfd, 0x97, 0xb5, 0xe8, 0x36, 0xf4, + 0x7b, 0xcc, 0xca, 0x45, 0x2a, 0x4f, 0x1a, 0x2a, 0x3d, 0xc3, 0x7e, 0x1c, 0x36, 0xda, 0x52, 0x30, + 0xa5, 0xf9, 0xe4, 0xfa, 0x8a, 0x36, 0xbf, 0x9c, 0xe8, 0xdd, 0xd7, 0xe7, 0x65, 0xd2, 0x3a, 0x0e, + 0x9d, 0x34, 0x5b, 0x2a, 0x29, 0x24, 0xf2, 0xcb, 0x16, 0x04, 0x46, 0xf8, 0x69, 0x5e, 0x35, 0xd6, + 0xb1, 0x11, 0x6e, 0xc5, 0xc1, 0x11, 0xee, 0x61, 0x76, 0x84, 0x1f, 0x2f, 0xcf, 0xb2, 0xb4, 0xba, + 0x48, 0xf3, 0xb9, 0xde, 0x4c, 0xf8, 0xba, 0x56, 0x0c, 0xf7, 0x13, 0x1b, 0x9d, 0x1c, 0xe6, 0x44, + 0x07, 0x0b, 0xe9, 0x04, 0x84, 0xc9, 0x46, 0x27, 0x67, 0xf7, 0x78, 0x56, 0x7a, 0x90, 0x56, 0x02, + 0xec, 0xf1, 0x1c, 0xd5, 0x5a, 0x4a, 0xec, 0xf1, 0xda, 0x94, 0xdd, 0xe3, 0xb9, 0x75, 0xa8, 0x78, + 0x76, 0xc5, 0x4e, 0xcb, 0x14, 0xec, 0xf1, 0xbc, 0xf2, 0x35, 0x0c, 0xb1, 0xc7, 0xa3, 0x58, 0x3b, + 0x51, 0x59, 0x62, 0x9f, 0x89, 0x89, 0x88, 0xc5, 0xb2, 0x02, 0x13, 0x95, 0x63, 0xc3, 0x20, 0xc4, + 0x44, 0x45, 0xa0, 0xda, 0xdb, 0xef, 0x45, 0x91, 0x3a, 0x97, 0x91, 0x67, 0x67, 0xfe, 0xda, 0xa3, + 0x0f, 0x6c, 0xbc, 0x83, 0xb3, 0xdb, 0x01, 0xc2, 0xa6, 0x71, 0xea, 0xef, 0xf2, 0x48, 0x70, 0x80, + 0x6a, 0x48, 0x11, 0x91, 0xc6, 0x01, 0x04, 0x16, 0x74, 0x72, 0xc1, 0x5f, 0xe3, 0x05, 0xad, 0x25, + 0xe1, 0x82, 0x6a, 0xc2, 0x3e, 0x29, 0xd1, 0x05, 0xc5, 0x9e, 0x94, 0x34, 0xc5, 0x08, 0x3d, 0x29, + 0x81, 0x8c, 0x8d, 0x19, 0xd7, 0xf0, 0x73, 0xce, 0x2f, 0x17, 0x71, 0x79, 0x09, 0x62, 0xc6, 0x53, + 0x6e, 0x18, 0x22, 0x66, 0x28, 0xd6, 0xc6, 0x8c, 0xeb, 0xb0, 0xde, 0x04, 0x9c, 0x96, 0x19, 0x88, + 0x19, 0xcf, 0x86, 0x46, 0x88, 0x98, 0x21, 0x50, 0x3b, 0x3b, 0xb9, 0xde, 0x26, 0x0c, 0x1e, 0x0b, + 0x79, 0xea, 0x13, 0x46, 0x1d, 0x0b, 0x21, 0x18, 0x0c, 0xa1, 0xfd, 0x32, 0x2e, 0x2e, 0xf0, 0x10, + 0x92, 0xa2, 0x70, 0x08, 0x35, 0x08, 0xec, 0xef, 0x09, 0x8b, 0xcb, 0xd9, 0x05, 0xde, 0xdf, 0x4a, + 0x16, 0xee, 0x6f, 0xc3, 0xc0, 0xfe, 0x56, 0x82, 0x57, 0xa9, 0xb8, 0x38, 0x64, 0x22, 0xc6, 0xfb, + 0xdb, 0x67, 0xc2, 0xfd, 0xdd, 0x62, 0x6d, 0xf6, 0xef, 0x3a, 0x9c, 0x2c, 0xcf, 0xaa, 0x59, 0x99, + 0x9e, 0xb1, 0x41, 0xc0, 0x8a, 0x81, 0x88, 0xec, 0x9f, 0x84, 0xb5, 0xcf, 0x9f, 0xae, 0x45, 0x37, + 0x9b, 0x6e, 0xe7, 0x55, 0xa5, 0xd7, 0x3e, 0xdf, 0xfd, 0x87, 0x78, 0xff, 0x12, 0x38, 0xf1, 0xec, + 0xaa, 0x87, 0x9a, 0x93, 0x1b, 0xe0, 0x45, 0x3a, 0xcd, 0x2b, 0x53, 0xa8, 0x8f, 0xfb, 0x58, 0x77, + 0x14, 0x88, 0xdc, 0xa0, 0x97, 0xa2, 0x4d, 0xcb, 0x74, 0xff, 0x34, 0xb2, 0x71, 0x52, 0x81, 0xb4, + 0xac, 0x69, 0x6f, 0x87, 0x20, 0xd2, 0x32, 0x9c, 0x84, 0xa1, 0xb0, 0x5f, 0xf2, 0x65, 0x51, 0x75, + 0x84, 0x02, 0x80, 0xc2, 0xa1, 0xd0, 0x86, 0xb5, 0xcf, 0x37, 0xd1, 0x6f, 0xb8, 0xe1, 0xe7, 0x36, + 0xf6, 0x16, 0x1d, 0x53, 0x58, 0x13, 0x0f, 0xfb, 0xe2, 0x36, 0xa3, 0x68, 0x3c, 0x8b, 0x5d, 0x26, + 0xe2, 0x34, 0xab, 0x06, 0xeb, 0xb8, 0x8d, 0x46, 0x4e, 0x64, 0x14, 0x18, 0x07, 0xe7, 0xb7, 0xdd, + 0x65, 0x91, 0xa5, 0xb3, 0xf6, 0x43, 0x2b, 0xad, 0x6b, 0xc4, 0xe1, 0xf9, 0xcd, 0xc5, 0xe0, 0x7c, + 0x5d, 0xa7, 0x7e, 0xf2, 0x3f, 0xd3, 0x55, 0xc1, 0xf0, 0xf9, 0xda, 0x43, 0xc2, 0xf3, 0x35, 0x44, + 0x61, 0x7d, 0x26, 0x4c, 0x1c, 0xc4, 0x2b, 0xbe, 0x24, 0xe6, 0x6b, 0x23, 0x0e, 0xd7, 0xc7, 0xc5, + 0xec, 0xde, 0xc0, 0x78, 0x18, 0xe7, 0x82, 0x95, 0x79, 0x9c, 0xed, 0x65, 0xf1, 0xbc, 0x1a, 0x10, + 0x73, 0x8c, 0x4f, 0x11, 0x7b, 0x03, 0x9a, 0x46, 0x9a, 0x71, 0x5c, 0xed, 0xc5, 0x57, 0xbc, 0x4c, + 0x05, 0xdd, 0x8c, 0x16, 0xe9, 0x6c, 0x46, 0x0f, 0x45, 0xbd, 0x8d, 0xca, 0xd9, 0x45, 0x7a, 0xc5, + 0x92, 0x80, 0xb7, 0x06, 0xe9, 0xe1, 0xcd, 0x41, 0x91, 0x4e, 0x9b, 0xf0, 0x65, 0x39, 0x63, 0x64, + 0xa7, 0x29, 0x71, 0x67, 0xa7, 0x19, 0x4c, 0x7b, 0xf8, 0xc9, 0x5a, 0xf4, 0x9b, 0x4a, 0xea, 0x3e, + 0x49, 0xda, 0x8d, 0xab, 0x8b, 0x33, 0x1e, 0x97, 0xc9, 0xe0, 0x7d, 0xcc, 0x0e, 0x8a, 0x1a, 0xd7, + 0x4f, 0xaf, 0xa3, 0x02, 0x9b, 0xb5, 0xce, 0xbb, 0xed, 0x88, 0x43, 0x9b, 0xd5, 0x43, 0xc2, 0xcd, + 0x0a, 0x51, 0x38, 0x81, 0x48, 0xb9, 0x3a, 0x68, 0x5c, 0x27, 0xf5, 0xfd, 0xd3, 0xc6, 0x8d, 0x4e, + 0x0e, 0xce, 0x8f, 0xb5, 0xd0, 0x8f, 0x96, 0x2d, 0xca, 0x06, 0x1e, 0x31, 0xc3, 0xbe, 0x38, 0xe9, + 0xd9, 0x8c, 0x8a, 0xb0, 0xe7, 0xd6, 0xc8, 0x18, 0xf6, 0xc5, 0x09, 0xcf, 0xce, 0xb4, 0x16, 0xf2, + 0x8c, 0x4c, 0x6d, 0xc3, 0xbe, 0x38, 0xcc, 0xbe, 0x34, 0xd3, 0xac, 0x0b, 0x8f, 0x02, 0x76, 0xe0, + 0xda, 0xb0, 0xd9, 0x8b, 0xd5, 0x0e, 0xff, 0x6a, 0x2d, 0xfa, 0xae, 0xf5, 0x78, 0xc8, 0x93, 0xf4, + 0x7c, 0xa5, 0xa0, 0x97, 0x71, 0xb6, 0x64, 0xd5, 0xe0, 0x29, 0x65, 0xad, 0xcd, 0x9a, 0x12, 0x3c, + 0xbb, 0x96, 0x0e, 0x1c, 0x3b, 0xa3, 0xa2, 0xc8, 0x56, 0x53, 0xb6, 0x28, 0x32, 0x72, 0xec, 0x78, + 0x48, 0x78, 0xec, 0x40, 0x14, 0x66, 0xe5, 0x53, 0x5e, 0xe7, 0xfc, 0x68, 0x56, 0x2e, 0x45, 0xe1, + 0xac, 0xbc, 0x41, 0x60, 0xae, 0x34, 0xe5, 0x3b, 0x3c, 0xcb, 0xd8, 0x4c, 0xb4, 0x6f, 0xa3, 0x18, + 0x4d, 0x4b, 0x84, 0x73, 0x25, 0x40, 0xda, 0x53, 0xb9, 0x66, 0x0f, 0x19, 0x97, 0xec, 0xf9, 0xea, + 0x20, 0xcd, 0x2f, 0x07, 0x78, 0x5a, 0x60, 0x01, 0xe2, 0x54, 0x0e, 0x05, 0xe1, 0x5e, 0xf5, 0x34, + 0x4f, 0x38, 0xbe, 0x57, 0xad, 0x25, 0xe1, 0xbd, 0xaa, 0x26, 0xa0, 0xc9, 0x13, 0x46, 0x99, 0xac, + 0x25, 0x61, 0x93, 0x9a, 0xc0, 0xa6, 0x42, 0xfd, 0x44, 0x8a, 0x9c, 0x0a, 0xc1, 0x33, 0xa8, 0x8d, + 0x4e, 0x0e, 0xee, 0xb9, 0xb4, 0x03, 0x34, 0x22, 0x80, 0xf1, 0xbb, 0x41, 0x06, 0x86, 0x7e, 0xb3, + 0x1b, 0xde, 0x63, 0x62, 0x76, 0x81, 0x87, 0xbe, 0x87, 0x84, 0x43, 0x1f, 0xa2, 0xb0, 0xad, 0xa6, + 0xdc, 0xec, 0xe6, 0xd7, 0xf1, 0xc0, 0x6b, 0xed, 0xe4, 0x37, 0x3a, 0x39, 0xd8, 0x56, 0xe3, 0x05, + 0xdd, 0x56, 0x4a, 0x16, 0x6e, 0x2b, 0xc3, 0xc0, 0xd2, 0x2b, 0x81, 0x3c, 0x24, 0x5b, 0xa7, 0x15, + 0xbd, 0x63, 0xb2, 0x8d, 0x4e, 0x4e, 0x3b, 0xf9, 0x27, 0xb3, 0x3f, 0x54, 0xd2, 0x23, 0x5e, 0x0f, + 0xbe, 0x97, 0x71, 0x96, 0x26, 0xb1, 0x60, 0x53, 0x7e, 0xc9, 0x72, 0x7c, 0x2b, 0xa6, 0x4b, 0xab, + 0xf8, 0xa1, 0xa7, 0x10, 0xde, 0x8a, 0x85, 0x15, 0x61, 0x9c, 0x28, 0xfa, 0xb4, 0x62, 0x3b, 0x71, + 0x45, 0x4c, 0x91, 0x1e, 0x12, 0x8e, 0x13, 0x88, 0xc2, 0x44, 0x58, 0xc9, 0x5f, 0xbc, 0x29, 0x58, + 0x99, 0xb2, 0x7c, 0xc6, 0xf0, 0x44, 0x18, 0x52, 0xe1, 0x44, 0x18, 0xa1, 0xe1, 0x26, 0x70, 0x37, + 0x16, 0xec, 0xf9, 0x6a, 0x9a, 0x2e, 0x58, 0x25, 0xe2, 0x45, 0x81, 0x6f, 0x02, 0x01, 0x14, 0xde, + 0x04, 0xb6, 0xe1, 0xd6, 0x99, 0x93, 0x99, 0x69, 0xdb, 0xb7, 0xe3, 0x20, 0x11, 0xb8, 0x1d, 0x47, + 0xa0, 0xb0, 0x61, 0x2d, 0x80, 0x3e, 0x7d, 0x68, 0x59, 0x09, 0x3e, 0x7d, 0xa0, 0xe9, 0xd6, 0x49, + 0x9e, 0x61, 0x26, 0xf5, 0xd0, 0xec, 0x28, 0xfa, 0xc4, 0x1d, 0xa2, 0x9b, 0xbd, 0x58, 0xfc, 0xe8, + 0xf0, 0x84, 0x65, 0xb1, 0x5c, 0x0f, 0x03, 0xe7, 0x73, 0x0d, 0xd3, 0xe7, 0xe8, 0xd0, 0x61, 0xb5, + 0xc3, 0x3f, 0x5f, 0x8b, 0xde, 0xc3, 0x3c, 0x7e, 0x5e, 0x48, 0xbf, 0x4f, 0xba, 0x6d, 0x29, 0x92, + 0xb8, 0xfe, 0x17, 0xd6, 0xb0, 0x37, 0x58, 0x1a, 0x91, 0xbd, 0x1d, 0xa8, 0x0b, 0xe0, 0x67, 0x83, + 0xa6, 0xfc, 0x90, 0x23, 0x6e, 0xb0, 0x84, 0x78, 0xbb, 0xd1, 0xf2, 0xcb, 0x55, 0x81, 0x8d, 0x96, + 0xb1, 0xa1, 0xc5, 0xc4, 0x46, 0x0b, 0xc1, 0xec, 0xe8, 0x74, 0xab, 0xf7, 0x2a, 0x15, 0x17, 0x32, + 0x91, 0x03, 0xa3, 0xd3, 0x2b, 0xab, 0x81, 0x88, 0xd1, 0x49, 0xc2, 0x30, 0xd5, 0x69, 0xc0, 0x7a, + 0x6c, 0x62, 0x73, 0xb9, 0x31, 0xe4, 0x8e, 0xcc, 0x07, 0xdd, 0x20, 0x8c, 0xd7, 0x46, 0xac, 0xf7, + 0x54, 0x8f, 0x42, 0x16, 0xc0, 0xbe, 0x6a, 0xb3, 0x17, 0xab, 0x1d, 0xfe, 0x69, 0xf4, 0x9d, 0x56, + 0xc5, 0xf6, 0x58, 0x2c, 0x96, 0x25, 0x4b, 0xc0, 0x6d, 0xf1, 0x76, 0xb9, 0x1b, 0x90, 0xb8, 0x2d, + 0x1e, 0x54, 0x68, 0x25, 0xff, 0x0d, 0xa7, 0xc2, 0xca, 0x94, 0xe1, 0x69, 0xc8, 0xa4, 0xcf, 0x06, + 0x93, 0x7f, 0x5a, 0xa7, 0xb5, 0x7f, 0x77, 0xa3, 0x6b, 0x74, 0x15, 0xa7, 0x99, 0x7c, 0x0a, 0xfc, + 0x7e, 0xc8, 0xa8, 0x87, 0x06, 0xf7, 0xef, 0xa4, 0x4a, 0x6b, 0x66, 0x96, 0x63, 0xdc, 0xd9, 0xf7, + 0x3d, 0xa6, 0x67, 0x02, 0x64, 0xdb, 0xb7, 0xd5, 0x93, 0xd6, 0x6e, 0x45, 0xb3, 0xe4, 0xd5, 0x7f, + 0x76, 0x83, 0x1c, 0xf3, 0xaa, 0x55, 0x91, 0x48, 0xdf, 0xea, 0x49, 0xdb, 0x57, 0x15, 0xda, 0x5e, + 0xf5, 0x42, 0xb4, 0xdd, 0x69, 0x0a, 0xac, 0x45, 0x4f, 0xfa, 0x2b, 0x68, 0xf7, 0xff, 0x6a, 0x0e, + 0xbc, 0x95, 0xff, 0x19, 0x5f, 0x2c, 0x58, 0x9e, 0xb0, 0xa4, 0xd1, 0xa8, 0xea, 0x8d, 0xd9, 0x27, + 0xb4, 0x5d, 0xa3, 0x30, 0x74, 0x35, 0x4c, 0x89, 0x7e, 0xeb, 0x6b, 0x68, 0xea, 0xa2, 0xfd, 0xe7, + 0x5a, 0xf4, 0x10, 0x2d, 0x5a, 0x13, 0xb8, 0x5e, 0x11, 0x7f, 0xb7, 0x8f, 0x23, 0x4c, 0xd3, 0x14, + 0x75, 0xf4, 0xff, 0xb0, 0xa0, 0x8b, 0xfc, 0x6f, 0x6b, 0xd1, 0x1d, 0xab, 0x58, 0x87, 0xf7, 0x0e, + 0xcf, 0xcf, 0xb3, 0x74, 0x26, 0xe4, 0xa3, 0x5e, 0xad, 0x42, 0x37, 0x27, 0xa5, 0xd1, 0xdd, 0x9c, + 0x01, 0x4d, 0x5d, 0xb6, 0x7f, 0x5c, 0x8b, 0x6e, 0xb9, 0xcd, 0x29, 0x9f, 0x13, 0xab, 0x63, 0xd7, + 0x46, 0xb1, 0x1a, 0x7c, 0x44, 0xb7, 0x01, 0xc6, 0x9b, 0x72, 0x7d, 0x7c, 0x6d, 0x3d, 0xbb, 0x57, + 0xff, 0x34, 0xad, 0x04, 0x2f, 0x57, 0x93, 0x0b, 0xfe, 0xba, 0x79, 0xf5, 0xce, 0x5f, 0x2d, 0x34, + 0x30, 0x74, 0x08, 0x62, 0xaf, 0x8e, 0x93, 0x2d, 0x57, 0xf6, 0x15, 0xbd, 0x8a, 0x70, 0xe5, 0x10, + 0x1d, 0xae, 0x7c, 0xd2, 0xae, 0x95, 0x4d, 0xad, 0xec, 0xfb, 0x84, 0x1b, 0x78, 0x51, 0xdb, 0xef, + 0x14, 0x3e, 0xe8, 0x06, 0x6d, 0xc6, 0xac, 0xc5, 0xbb, 0xe9, 0xf9, 0xb9, 0xa9, 0x13, 0x5e, 0x52, + 0x17, 0x21, 0x32, 0x66, 0x02, 0xb5, 0x9b, 0xbe, 0xbd, 0x34, 0x63, 0xf2, 0x51, 0xd5, 0xe7, 0xe7, + 0xe7, 0x19, 0x8f, 0x13, 0xb0, 0xe9, 0xab, 0xc5, 0x43, 0x57, 0x4e, 0x6c, 0xfa, 0x30, 0xce, 0x5e, + 0x82, 0xa9, 0xa5, 0xf5, 0x98, 0xcb, 0x67, 0x69, 0x06, 0x2f, 0x8d, 0x4b, 0x4d, 0x23, 0x24, 0x2e, + 0xc1, 0xb4, 0x20, 0x9b, 0x98, 0xd5, 0xa2, 0x7a, 0xac, 0x34, 0xe5, 0xbf, 0xdf, 0x56, 0x74, 0xc4, + 0x44, 0x62, 0x86, 0x60, 0xf6, 0x50, 0xa5, 0x16, 0x9e, 0x16, 0xd2, 0xf8, 0xad, 0xb6, 0x96, 0x92, + 0x10, 0x87, 0x2a, 0x3e, 0x61, 0xf7, 0xf0, 0xf5, 0xdf, 0x77, 0xf9, 0xeb, 0x5c, 0x1a, 0xbd, 0xd3, + 0x56, 0x69, 0x64, 0xc4, 0x1e, 0x1e, 0x32, 0xda, 0xf0, 0x67, 0xd1, 0x2f, 0x48, 0xc3, 0x25, 0x2f, + 0x06, 0x37, 0x10, 0x85, 0xd2, 0xb9, 0x62, 0x7d, 0x93, 0x94, 0xdb, 0x3b, 0x33, 0x26, 0x36, 0x4e, + 0xab, 0x78, 0x0e, 0xdf, 0x8b, 0xb0, 0x3d, 0x2e, 0xa5, 0xc4, 0x9d, 0x99, 0x36, 0xe5, 0x47, 0xc5, + 0x11, 0x4f, 0xb4, 0x75, 0xa4, 0x86, 0x46, 0x18, 0x8a, 0x0a, 0x17, 0xb2, 0xc9, 0xf4, 0x51, 0x7c, + 0x95, 0xce, 0x4d, 0xc2, 0xa3, 0xa6, 0xaf, 0x0a, 0x24, 0xd3, 0x96, 0x19, 0x3a, 0x10, 0x91, 0x4c, + 0x93, 0xb0, 0x33, 0x19, 0x5b, 0x66, 0xbf, 0x39, 0x86, 0x1e, 0xe7, 0xe7, 0xbc, 0x4e, 0xbd, 0x0f, + 0xd2, 0xfc, 0x12, 0x4e, 0xc6, 0x8e, 0x49, 0x9c, 0x27, 0x26, 0xe3, 0x3e, 0x7a, 0x76, 0xd7, 0xd4, + 0x9c, 0xd1, 0xda, 0x8b, 0x1a, 0x4a, 0x03, 0xec, 0x9a, 0xcc, 0x51, 0x2e, 0xe4, 0x88, 0x5d, 0x53, + 0x88, 0xb7, 0x5d, 0x6c, 0x9c, 0x67, 0x3c, 0x87, 0x5d, 0x6c, 0x2d, 0xd4, 0x42, 0xa2, 0x8b, 0x5b, + 0x90, 0x9d, 0x8f, 0x1b, 0x91, 0x3a, 0xf5, 0x1b, 0x65, 0x19, 0x98, 0x8f, 0x8d, 0xaa, 0x01, 0x88, + 0xf9, 0x18, 0x05, 0xb5, 0x9f, 0x93, 0xe8, 0x9b, 0x75, 0x93, 0x1e, 0x97, 0xec, 0x2a, 0x65, 0xf0, + 0x4e, 0x91, 0x23, 0x21, 0xc6, 0xbf, 0x4f, 0xd8, 0x91, 0x75, 0x9a, 0x57, 0x45, 0x16, 0x57, 0x17, + 0xfa, 0x96, 0x89, 0x5f, 0xe7, 0x46, 0x08, 0xef, 0x99, 0xdc, 0xef, 0xa0, 0xec, 0xa4, 0xde, 0xc8, + 0xcc, 0x14, 0xb3, 0x8e, 0xab, 0xb6, 0xa6, 0x99, 0x8d, 0x4e, 0xce, 0x3e, 0xca, 0xd9, 0x8f, 0xb3, + 0x8c, 0x95, 0xab, 0x46, 0x76, 0x18, 0xe7, 0xe9, 0x39, 0xab, 0x04, 0x78, 0x94, 0xa3, 0xa9, 0x21, + 0xc4, 0x88, 0x47, 0x39, 0x01, 0xdc, 0xee, 0x26, 0x81, 0xe7, 0x71, 0x9e, 0xb0, 0x37, 0x60, 0x37, + 0x09, 0xed, 0x48, 0x86, 0xd8, 0x4d, 0x52, 0xac, 0x7d, 0xa4, 0xf1, 0x3c, 0xe3, 0xb3, 0x4b, 0xbd, + 0x04, 0xf8, 0x1d, 0x2c, 0x25, 0x70, 0x0d, 0xb8, 0x13, 0x42, 0xec, 0x22, 0x20, 0x05, 0x27, 0xac, + 0xc8, 0xe2, 0x19, 0xbc, 0x58, 0xa6, 0x74, 0xb4, 0x8c, 0x58, 0x04, 0x20, 0x03, 0x8a, 0xab, 0x2f, + 0xac, 0x61, 0xc5, 0x05, 0xf7, 0xd5, 0xee, 0x84, 0x10, 0xbb, 0x0c, 0x4a, 0xc1, 0xa4, 0xc8, 0x52, + 0x01, 0x86, 0x81, 0xd2, 0x90, 0x12, 0x62, 0x18, 0xf8, 0x04, 0x30, 0x79, 0xc8, 0xca, 0x39, 0x43, + 0x4d, 0x4a, 0x49, 0xd0, 0x64, 0x43, 0xd8, 0x5b, 0xf4, 0xaa, 0xee, 0xbc, 0x58, 0x81, 0x5b, 0xf4, + 0xba, 0x5a, 0xbc, 0x58, 0x11, 0xb7, 0xe8, 0x3d, 0x00, 0x14, 0xf1, 0x38, 0xae, 0x04, 0x5e, 0x44, + 0x29, 0x09, 0x16, 0xb1, 0x21, 0xec, 0x1a, 0xad, 0x8a, 0xb8, 0x14, 0x60, 0x8d, 0xd6, 0x05, 0x70, + 0xae, 0x56, 0xdc, 0x24, 0xe5, 0x76, 0x26, 0x51, 0xbd, 0xc2, 0xc4, 0x5e, 0xca, 0xb2, 0xa4, 0x02, + 0x33, 0x89, 0x6e, 0xf7, 0x46, 0x4a, 0xcc, 0x24, 0x6d, 0x0a, 0x84, 0x92, 0x7e, 0x2e, 0x83, 0xd5, + 0x0e, 0x3c, 0x96, 0xb9, 0x13, 0x42, 0xec, 0xfc, 0xd4, 0x14, 0x7a, 0x27, 0x2e, 0xcb, 0xb4, 0x5e, + 0xfc, 0xd7, 0xf1, 0x02, 0x35, 0x72, 0x62, 0x7e, 0xc2, 0x38, 0x30, 0xbc, 0x9a, 0x89, 0x1b, 0x2b, + 0x18, 0x9c, 0xba, 0xef, 0x06, 0x19, 0x9b, 0x71, 0x4a, 0x89, 0x73, 0x37, 0x00, 0x6b, 0x4d, 0xe4, + 0x6a, 0xc0, 0x7a, 0x17, 0xe6, 0xbc, 0x38, 0x68, 0x5c, 0x1c, 0xf2, 0x2b, 0x36, 0xe5, 0x2f, 0xde, + 0xa4, 0x55, 0xbd, 0x09, 0xd4, 0x2b, 0xf7, 0x33, 0xc2, 0x12, 0x06, 0x13, 0x2f, 0x0e, 0x76, 0x2a, + 0xd9, 0x04, 0x02, 0x94, 0xe5, 0x88, 0xbd, 0x46, 0x13, 0x08, 0x68, 0xd1, 0x70, 0x44, 0x02, 0x11, + 0xe2, 0xed, 0x39, 0x9e, 0x71, 0xae, 0x3f, 0xd9, 0x31, 0xe5, 0x4d, 0x2e, 0x47, 0x59, 0x83, 0x20, + 0x71, 0x94, 0x12, 0x54, 0xb0, 0xfb, 0x4b, 0xe3, 0xdf, 0x0e, 0xb1, 0x07, 0x84, 0x9d, 0xf6, 0x30, + 0x7b, 0xd8, 0x83, 0x44, 0x5c, 0xd9, 0x0b, 0x2e, 0x94, 0xab, 0xf6, 0xfd, 0x96, 0x87, 0x3d, 0x48, + 0xe7, 0x4c, 0xd0, 0xad, 0xd6, 0xf3, 0x78, 0x76, 0x39, 0x2f, 0xf9, 0x32, 0x4f, 0x76, 0x78, 0xc6, + 0x4b, 0x70, 0x26, 0xe8, 0x95, 0x1a, 0xa0, 0xc4, 0x99, 0x60, 0x87, 0x8a, 0xcd, 0xe0, 0xdc, 0x52, + 0x8c, 0xb2, 0x74, 0x0e, 0x77, 0xd4, 0x9e, 0x21, 0x09, 0x10, 0x19, 0x1c, 0x0a, 0x22, 0x41, 0xa4, + 0x76, 0xdc, 0x22, 0x9d, 0xc5, 0x99, 0xf2, 0xb7, 0x4d, 0x9b, 0xf1, 0xc0, 0xce, 0x20, 0x42, 0x14, + 0x90, 0x7a, 0x4e, 0x97, 0x65, 0x3e, 0xce, 0x05, 0x27, 0xeb, 0xd9, 0x00, 0x9d, 0xf5, 0x74, 0x40, + 0x30, 0xad, 0x4e, 0xd9, 0x9b, 0xba, 0x34, 0xf5, 0x3f, 0xd8, 0xb4, 0x5a, 0xff, 0x7d, 0xa8, 0xe5, + 0xa1, 0x69, 0x15, 0x70, 0xa0, 0x32, 0xda, 0x89, 0x0a, 0x98, 0x80, 0xb6, 0x1f, 0x26, 0x0f, 0xba, + 0x41, 0xdc, 0xcf, 0x44, 0xac, 0x32, 0x16, 0xf2, 0x23, 0x81, 0x3e, 0x7e, 0x1a, 0xd0, 0x1e, 0xb7, + 0x78, 0xf5, 0xb9, 0x60, 0xb3, 0xcb, 0xd6, 0x7d, 0x3d, 0xbf, 0xa0, 0x0a, 0x21, 0x8e, 0x5b, 0x08, + 0x14, 0xef, 0xa2, 0xf1, 0x8c, 0xe7, 0xa1, 0x2e, 0xaa, 0xe5, 0x7d, 0xba, 0x48, 0x73, 0x76, 0xf3, + 0x6b, 0xa4, 0x3a, 0x32, 0x55, 0x37, 0x6d, 0x12, 0x16, 0x5c, 0x88, 0xd8, 0xfc, 0x92, 0xb0, 0xcd, + 0xc9, 0xa1, 0xcf, 0xc3, 0xf6, 0xcb, 0x0c, 0x2d, 0x2b, 0x87, 0xf4, 0xcb, 0x0c, 0x14, 0x4b, 0x57, + 0x52, 0xc5, 0x48, 0x87, 0x15, 0x3f, 0x4e, 0x1e, 0xf7, 0x83, 0xed, 0x96, 0xc7, 0xf3, 0xb9, 0x93, + 0xb1, 0xb8, 0x54, 0x5e, 0xb7, 0x02, 0x86, 0x2c, 0x46, 0x6c, 0x79, 0x02, 0x38, 0x98, 0xc2, 0x3c, + 0xcf, 0x3b, 0x3c, 0x17, 0x2c, 0x17, 0xd8, 0x14, 0xe6, 0x1b, 0xd3, 0x60, 0x68, 0x0a, 0xa3, 0x14, + 0x40, 0xdc, 0xca, 0xf3, 0x20, 0x26, 0x8e, 0xe2, 0x05, 0x9a, 0xb1, 0xa9, 0xb3, 0x1e, 0x25, 0x0f, + 0xc5, 0x2d, 0xe0, 0x9c, 0x87, 0xcc, 0xae, 0x97, 0x69, 0x5c, 0xce, 0xcd, 0xe9, 0x46, 0x32, 0x78, + 0x42, 0xdb, 0xf1, 0x49, 0xe2, 0x21, 0x73, 0x58, 0x03, 0x4c, 0x3b, 0xe3, 0x45, 0x3c, 0x37, 0x35, + 0x45, 0x6a, 0x20, 0xe5, 0xad, 0xaa, 0x3e, 0xe8, 0x06, 0x81, 0x9f, 0x97, 0x69, 0xc2, 0x78, 0xc0, + 0x8f, 0x94, 0xf7, 0xf1, 0x03, 0x41, 0x90, 0xbd, 0xd5, 0xf5, 0xd6, 0x1f, 0xd5, 0xca, 0x13, 0xbd, + 0x8f, 0x1d, 0x12, 0xcd, 0x03, 0xb8, 0x50, 0xf6, 0x46, 0xf0, 0x60, 0x8c, 0x36, 0x07, 0xb4, 0xa1, + 0x31, 0x6a, 0xce, 0x5f, 0xfb, 0x8c, 0x51, 0x0c, 0xd6, 0x3e, 0x7f, 0xac, 0xc7, 0xe8, 0x6e, 0x2c, + 0xe2, 0x3a, 0x6f, 0x7f, 0x99, 0xb2, 0xd7, 0x7a, 0x23, 0x8c, 0xd4, 0xb7, 0xa1, 0x86, 0xf2, 0x5d, + 0x6c, 0xb0, 0x2b, 0xde, 0xee, 0xcd, 0x07, 0x7c, 0xeb, 0x1d, 0x42, 0xa7, 0x6f, 0xb0, 0x55, 0xd8, + 0xee, 0xcd, 0x07, 0x7c, 0xeb, 0x4f, 0x57, 0x74, 0xfa, 0x06, 0xdf, 0xaf, 0xd8, 0xee, 0xcd, 0x6b, + 0xdf, 0x7f, 0xd1, 0x0c, 0x5c, 0xd7, 0x79, 0x9d, 0x87, 0xcd, 0x44, 0x7a, 0xc5, 0xb0, 0x74, 0xd2, + 0xb7, 0x67, 0xd0, 0x50, 0x3a, 0x49, 0xab, 0x38, 0x5f, 0xf0, 0xc3, 0x4a, 0x71, 0xcc, 0xab, 0x54, + 0x5e, 0x12, 0x79, 0xd6, 0xc3, 0x68, 0x03, 0x87, 0x36, 0x4d, 0x21, 0x25, 0xfb, 0xb8, 0xdb, 0x43, + 0xed, 0xf5, 0xfc, 0xc7, 0x01, 0x7b, 0xed, 0x5b, 0xfa, 0x5b, 0x3d, 0x69, 0xfb, 0xe0, 0xd9, 0x63, + 0x9a, 0x47, 0x86, 0x13, 0x86, 0xae, 0x12, 0xc6, 0x94, 0x79, 0x94, 0xec, 0x3e, 0x3b, 0x7d, 0xd2, + 0x5f, 0xa1, 0xc3, 0xfd, 0x28, 0x49, 0xfa, 0xb9, 0x77, 0x9f, 0xb9, 0x3f, 0xe9, 0xaf, 0xa0, 0xdd, + 0xff, 0x65, 0xb3, 0xad, 0x81, 0xfe, 0xf5, 0x18, 0x7c, 0xda, 0xc7, 0x22, 0x18, 0x87, 0xcf, 0xae, + 0xa5, 0xa3, 0x0b, 0xf2, 0xb7, 0xcd, 0xfe, 0xbd, 0x41, 0xe5, 0x3b, 0x52, 0xf2, 0xdd, 0x6a, 0x3d, + 0x24, 0x43, 0x51, 0x65, 0x61, 0x38, 0x30, 0x3f, 0xbc, 0xa6, 0x96, 0xf3, 0x39, 0x49, 0x0f, 0xd6, + 0xef, 0xf2, 0x3a, 0xe5, 0x09, 0x59, 0x76, 0x68, 0x58, 0xa0, 0x8f, 0xae, 0xab, 0x46, 0x0d, 0x55, + 0x07, 0x96, 0xdf, 0xf2, 0x79, 0xd6, 0xd3, 0xb0, 0xf7, 0x75, 0x9f, 0x0f, 0xae, 0xa7, 0xa4, 0xcb, + 0xf2, 0x1f, 0x6b, 0xd1, 0x7d, 0x8f, 0xb5, 0x8f, 0x33, 0xc0, 0xa1, 0xcb, 0x0f, 0x02, 0xf6, 0x29, + 0x25, 0x53, 0xb8, 0xdf, 0xfe, 0x7a, 0xca, 0xf6, 0xb3, 0x7f, 0x9e, 0xca, 0x5e, 0x9a, 0x09, 0x56, + 0xb6, 0x3f, 0xfb, 0xe7, 0xdb, 0x55, 0xd4, 0x90, 0xfe, 0xec, 0x5f, 0x00, 0x77, 0x3e, 0xfb, 0x87, + 0x78, 0x46, 0x3f, 0xfb, 0x87, 0x5a, 0x0b, 0x7e, 0xf6, 0x2f, 0xac, 0x41, 0xad, 0x2e, 0x4d, 0x11, + 0xd4, 0xb1, 0x79, 0x2f, 0x8b, 0xfe, 0x29, 0xfa, 0xd3, 0xeb, 0xa8, 0x10, 0xeb, 0xab, 0xe2, 0xe4, + 0x35, 0xcf, 0x1e, 0x6d, 0xea, 0x5d, 0xf5, 0xdc, 0xee, 0xcd, 0x6b, 0xdf, 0x3f, 0xd2, 0x9b, 0x2b, + 0xb3, 0x9a, 0xf0, 0x52, 0x7e, 0xf2, 0x71, 0x33, 0xb4, 0x3a, 0xd4, 0x16, 0xdc, 0x9e, 0x7f, 0xdc, + 0x0f, 0x26, 0xaa, 0x5b, 0x13, 0xba, 0xd3, 0x87, 0x5d, 0x86, 0x40, 0x97, 0x6f, 0xf7, 0xe6, 0x89, + 0x65, 0x44, 0xf9, 0x56, 0xbd, 0xdd, 0xc3, 0x98, 0xdf, 0xd7, 0x4f, 0xfa, 0x2b, 0x68, 0xf7, 0x57, + 0x3a, 0x6b, 0x75, 0xdd, 0xcb, 0x7e, 0xde, 0xea, 0x32, 0x35, 0xf1, 0xba, 0x79, 0xd8, 0x17, 0x0f, + 0xe5, 0x2f, 0xee, 0x12, 0xda, 0x95, 0xbf, 0xa0, 0xcb, 0xe8, 0x07, 0xd7, 0x53, 0xd2, 0x65, 0xf9, + 0x87, 0xb5, 0xe8, 0x26, 0x59, 0x16, 0x1d, 0x07, 0x1f, 0xf5, 0xb5, 0x0c, 0xe2, 0xe1, 0xe3, 0x6b, + 0xeb, 0xe9, 0x42, 0xfd, 0xf3, 0x5a, 0x74, 0x2b, 0x50, 0x28, 0x15, 0x20, 0xd7, 0xb0, 0xee, 0x07, + 0xca, 0x27, 0xd7, 0x57, 0xa4, 0x96, 0x7b, 0x17, 0x9f, 0xb4, 0x3f, 0xe1, 0x16, 0xb0, 0x3d, 0xa1, + 0x3f, 0xe1, 0xd6, 0xad, 0x05, 0xcf, 0x98, 0xe2, 0xb3, 0x66, 0xcf, 0x87, 0x9e, 0x31, 0xc9, 0x0b, + 0x9a, 0xc1, 0x8f, 0xb6, 0x60, 0x1c, 0xe6, 0xe4, 0xc5, 0x9b, 0x22, 0xce, 0x13, 0xda, 0x89, 0x92, + 0x77, 0x3b, 0x31, 0x1c, 0x3c, 0x9b, 0xab, 0xa5, 0x27, 0xbc, 0xd9, 0xc7, 0x3d, 0xa4, 0xf4, 0x0d, + 0x12, 0x3c, 0x9b, 0x6b, 0xa1, 0x84, 0x37, 0x9d, 0x35, 0x86, 0xbc, 0x81, 0x64, 0xf1, 0x51, 0x1f, + 0x14, 0xec, 0x10, 0x8c, 0x37, 0x73, 0xe4, 0xff, 0x38, 0x64, 0xa5, 0x75, 0xec, 0xbf, 0xd5, 0x93, + 0x26, 0xdc, 0x4e, 0x98, 0xf8, 0x94, 0xc5, 0x09, 0x2b, 0x83, 0x6e, 0x0d, 0xd5, 0xcb, 0xad, 0x4b, + 0x63, 0x6e, 0x77, 0x78, 0xb6, 0x5c, 0xe4, 0xba, 0x33, 0x49, 0xb7, 0x2e, 0xd5, 0xed, 0x16, 0xd0, + 0xf0, 0x54, 0xd2, 0xba, 0x95, 0xe9, 0xe5, 0xa3, 0xb0, 0x19, 0x2f, 0xab, 0xdc, 0xec, 0xc5, 0xd2, + 0xf5, 0xd4, 0x61, 0xd4, 0x51, 0x4f, 0x10, 0x49, 0x5b, 0x3d, 0x69, 0x78, 0x3c, 0xe8, 0xb8, 0x35, + 0xf1, 0xb4, 0xdd, 0x61, 0xab, 0x15, 0x52, 0x4f, 0xfa, 0x2b, 0xc0, 0xc3, 0x58, 0x1d, 0x55, 0x07, + 0x69, 0x25, 0xf6, 0xd2, 0x2c, 0x1b, 0x6c, 0x06, 0xc2, 0xa4, 0x81, 0x82, 0x87, 0xb1, 0x08, 0x4c, + 0x44, 0x72, 0x73, 0x78, 0x99, 0x0f, 0xba, 0xec, 0x48, 0xaa, 0x57, 0x24, 0xbb, 0x34, 0x38, 0x50, + 0x73, 0x9a, 0xda, 0xd4, 0x76, 0x18, 0x6e, 0xb8, 0x56, 0x85, 0xb7, 0x7b, 0xf3, 0xe0, 0x69, 0xbf, + 0xa4, 0xe4, 0xca, 0x72, 0x8f, 0x32, 0xe1, 0xad, 0x24, 0xf7, 0x3b, 0x28, 0x70, 0x28, 0xa9, 0x86, + 0xd1, 0xab, 0x34, 0x99, 0x33, 0x81, 0x3e, 0xa8, 0x72, 0x81, 0xe0, 0x83, 0x2a, 0x00, 0x82, 0xae, + 0x53, 0x7f, 0x37, 0xa7, 0xb1, 0xe3, 0x04, 0xeb, 0x3a, 0xad, 0xec, 0x50, 0xa1, 0xae, 0x43, 0x69, + 0x30, 0x1b, 0x18, 0xb7, 0xfa, 0x33, 0x17, 0x8f, 0x42, 0x66, 0xc0, 0xb7, 0x2e, 0x36, 0x7b, 0xb1, + 0x60, 0x45, 0xb1, 0x0e, 0xd3, 0x45, 0x2a, 0xb0, 0x15, 0xc5, 0xb1, 0x51, 0x23, 0xa1, 0x15, 0xa5, + 0x8d, 0x52, 0xd5, 0xab, 0x73, 0x84, 0x71, 0x12, 0xae, 0x9e, 0x62, 0xfa, 0x55, 0xcf, 0xb0, 0xad, + 0xe7, 0xaa, 0xb9, 0x09, 0x19, 0x71, 0xa1, 0x37, 0xcb, 0x48, 0x6c, 0x3b, 0xbf, 0xec, 0x60, 0xc1, + 0xd0, 0xac, 0x43, 0x29, 0xc0, 0xe7, 0x05, 0xcd, 0x6f, 0x41, 0x4c, 0x98, 0x18, 0x15, 0x05, 0x8b, + 0xcb, 0x38, 0x9f, 0xa1, 0x9b, 0x53, 0xf3, 0xdb, 0x0e, 0x1e, 0x19, 0xda, 0x9c, 0x92, 0x1a, 0xe0, + 0xa9, 0xbd, 0xff, 0x7e, 0x31, 0x32, 0x14, 0xcc, 0x8b, 0xbc, 0xfe, 0xeb, 0xc5, 0x0f, 0x7b, 0x90, + 0xf0, 0xa9, 0x7d, 0x03, 0x98, 0x73, 0x77, 0xe5, 0xf4, 0xfd, 0x80, 0x29, 0x1f, 0x0d, 0x6d, 0x84, + 0x69, 0x15, 0x10, 0xd4, 0xce, 0xd9, 0xe2, 0x67, 0x6c, 0x85, 0x05, 0xb5, 0x7b, 0x48, 0xf8, 0x19, + 0x5b, 0x85, 0x82, 0xba, 0x8d, 0x82, 0x3c, 0xd3, 0xdd, 0x07, 0xad, 0x07, 0xf4, 0xdd, 0xad, 0xcf, + 0x46, 0x27, 0x07, 0x46, 0xce, 0x6e, 0x7a, 0xe5, 0x3d, 0xa6, 0x40, 0x0a, 0xba, 0x9b, 0x5e, 0xe1, + 0x4f, 0x29, 0x36, 0x7b, 0xb1, 0xf0, 0x46, 0x40, 0x2c, 0xd8, 0x9b, 0xe6, 0x51, 0x3d, 0x52, 0x5c, + 0x29, 0x6f, 0x3d, 0xab, 0x7f, 0xd0, 0x0d, 0xda, 0xfb, 0xb7, 0xc7, 0x25, 0x9f, 0xb1, 0xaa, 0xd2, + 0x5f, 0x80, 0xf5, 0x2f, 0x38, 0x69, 0xd9, 0x10, 0x7c, 0xff, 0xf5, 0x5e, 0x18, 0x72, 0x3e, 0xdb, + 0xa8, 0x44, 0xf6, 0x6b, 0x52, 0xeb, 0xa8, 0x66, 0xfb, 0x43, 0x52, 0x1b, 0x9d, 0x9c, 0x1d, 0x5e, + 0x5a, 0xea, 0x7e, 0x3e, 0xea, 0x01, 0xaa, 0x8e, 0x7d, 0x39, 0xea, 0x61, 0x0f, 0x52, 0xbb, 0xfa, + 0x34, 0x7a, 0xeb, 0x80, 0xcf, 0x27, 0x2c, 0x4f, 0x06, 0xdf, 0xf3, 0x6f, 0xf0, 0xf2, 0xf9, 0xb0, + 0xfe, 0xb3, 0x31, 0x7a, 0x83, 0x12, 0xdb, 0x3b, 0x88, 0xbb, 0xec, 0x6c, 0x39, 0x9f, 0x88, 0x58, + 0x80, 0x3b, 0x88, 0xf2, 0xef, 0xc3, 0x5a, 0x40, 0xdc, 0x41, 0xf4, 0x00, 0x60, 0x6f, 0x5a, 0x32, + 0x86, 0xda, 0xab, 0x05, 0x41, 0x7b, 0x1a, 0xb0, 0x59, 0x84, 0xb1, 0x57, 0x27, 0xea, 0xf0, 0xce, + 0xa0, 0xd5, 0x91, 0x52, 0x22, 0x8b, 0x68, 0x53, 0x36, 0xb8, 0x55, 0xf5, 0xe5, 0xd7, 0x7c, 0x96, + 0x8b, 0x45, 0x5c, 0xae, 0x40, 0x70, 0xeb, 0x5a, 0x3a, 0x00, 0x11, 0xdc, 0x28, 0x68, 0x47, 0x6d, + 0xd3, 0xcc, 0xb3, 0xcb, 0x7d, 0x5e, 0xf2, 0xa5, 0x48, 0x73, 0x06, 0xbf, 0xe8, 0x62, 0x1a, 0xd4, + 0x65, 0x88, 0x51, 0x4b, 0xb1, 0x36, 0xcb, 0x95, 0x84, 0xba, 0xce, 0x28, 0x3f, 0xb5, 0x5f, 0x09, + 0x5e, 0xc2, 0xc7, 0x99, 0xca, 0x0a, 0x84, 0x88, 0x2c, 0x97, 0x84, 0x41, 0xdf, 0x1f, 0xa7, 0xf9, + 0x1c, 0xed, 0xfb, 0x63, 0xf7, 0xab, 0xca, 0xb7, 0x68, 0xc0, 0x0e, 0x28, 0xd5, 0x68, 0x6a, 0x00, + 0xe8, 0x57, 0x99, 0xd1, 0x46, 0x77, 0x09, 0x62, 0x40, 0xe1, 0x24, 0x70, 0xf5, 0x79, 0xc1, 0x72, + 0x96, 0x34, 0x97, 0xf6, 0x30, 0x57, 0x1e, 0x11, 0x74, 0x05, 0x49, 0x3b, 0x17, 0x49, 0xf9, 0xc9, + 0x32, 0x3f, 0x2e, 0xf9, 0x79, 0x9a, 0xb1, 0x12, 0xcc, 0x45, 0x4a, 0xdd, 0x91, 0x13, 0x73, 0x11, + 0xc6, 0xd9, 0xdb, 0x1f, 0x52, 0xea, 0xfd, 0x5e, 0xc4, 0xb4, 0x8c, 0x67, 0xf0, 0xf6, 0x87, 0xb2, + 0xd1, 0xc6, 0x88, 0x93, 0xc1, 0x00, 0xee, 0x24, 0x3a, 0xca, 0x75, 0xbe, 0x92, 0xf1, 0xa1, 0x5f, + 0xa5, 0x95, 0xdf, 0x1a, 0xae, 0x40, 0xa2, 0xa3, 0xcd, 0x61, 0x24, 0x91, 0xe8, 0x84, 0x35, 0xec, + 0x52, 0x22, 0xb9, 0x23, 0x7d, 0xab, 0x09, 0x2c, 0x25, 0xca, 0x46, 0x23, 0x24, 0x96, 0x92, 0x16, + 0x04, 0x26, 0xa4, 0x66, 0x18, 0xcc, 0xd1, 0x09, 0xc9, 0x48, 0x83, 0x13, 0x92, 0x4b, 0xd9, 0x89, + 0x62, 0x9c, 0xa7, 0x22, 0x8d, 0xb3, 0x09, 0x13, 0xc7, 0x71, 0x19, 0x2f, 0x98, 0x60, 0x25, 0x9c, + 0x28, 0x34, 0x32, 0xf4, 0x18, 0x62, 0xa2, 0xa0, 0x58, 0xed, 0xf0, 0x77, 0xa2, 0x77, 0xea, 0x75, + 0x9f, 0xe5, 0xfa, 0x97, 0xae, 0x5e, 0xc8, 0xdf, 0x29, 0x1c, 0xbc, 0x6b, 0x6c, 0x4c, 0x44, 0xc9, + 0xe2, 0x45, 0x63, 0xfb, 0x6d, 0xf3, 0x77, 0x09, 0x3e, 0x59, 0xab, 0xe3, 0xf9, 0x88, 0x8b, 0xf4, + 0xbc, 0xde, 0x66, 0xeb, 0x17, 0x98, 0x40, 0x3c, 0xbb, 0xe2, 0x61, 0xe0, 0x53, 0x2c, 0x18, 0x67, + 0xe7, 0x69, 0x57, 0x7a, 0xc2, 0x8a, 0x0c, 0xce, 0xd3, 0x9e, 0xb6, 0x04, 0x88, 0x79, 0x1a, 0x05, + 0xed, 0xe0, 0x74, 0xc5, 0x53, 0x16, 0xae, 0xcc, 0x94, 0xf5, 0xab, 0xcc, 0xd4, 0x7b, 0x27, 0x24, + 0x8b, 0xde, 0x39, 0x64, 0x8b, 0x33, 0x56, 0x56, 0x17, 0x69, 0x41, 0x7d, 0x0f, 0xd9, 0x12, 0x9d, + 0xdf, 0x43, 0x26, 0x50, 0xbb, 0x12, 0x58, 0x60, 0x5c, 0x1d, 0xc5, 0x0b, 0x26, 0x3f, 0x2c, 0x03, + 0x56, 0x02, 0xc7, 0x88, 0x03, 0x11, 0x2b, 0x01, 0x09, 0x3b, 0xaf, 0x97, 0x59, 0xe6, 0x84, 0xcd, + 0xeb, 0x08, 0x2b, 0x8f, 0xe3, 0xd5, 0x82, 0xe5, 0x42, 0x9b, 0x04, 0x67, 0xf2, 0x8e, 0x49, 0x9c, + 0x27, 0xce, 0xe4, 0xfb, 0xe8, 0x39, 0x53, 0x93, 0xd7, 0xf0, 0xc7, 0xbc, 0x14, 0xea, 0x27, 0xec, + 0x4e, 0xcb, 0x0c, 0x4c, 0x4d, 0x7e, 0xa3, 0x7a, 0x24, 0x31, 0x35, 0x85, 0x35, 0x9c, 0xdf, 0x2c, + 0xf1, 0xca, 0xf0, 0x92, 0x95, 0x26, 0x4e, 0x5e, 0x2c, 0xe2, 0x34, 0xd3, 0xd1, 0xf0, 0xfd, 0x80, + 0x6d, 0x42, 0x87, 0xf8, 0xcd, 0x92, 0xbe, 0xba, 0xce, 0xaf, 0xbc, 0x84, 0x4b, 0x08, 0x1e, 0x11, + 0x74, 0xd8, 0x27, 0x1e, 0x11, 0x74, 0x6b, 0xd9, 0x9d, 0xbb, 0x65, 0x25, 0xb7, 0x92, 0xc4, 0x0e, + 0x4f, 0xe0, 0x79, 0xa1, 0x63, 0x13, 0x80, 0xc4, 0xce, 0x3d, 0xa8, 0x60, 0x53, 0x03, 0x8b, 0xed, + 0xa5, 0x79, 0x9c, 0xa5, 0x3f, 0x86, 0x69, 0xbd, 0x63, 0xa7, 0x21, 0x88, 0xd4, 0x00, 0x27, 0x31, + 0x57, 0xfb, 0x4c, 0x4c, 0xd3, 0x7a, 0xea, 0x7f, 0x10, 0x68, 0x37, 0x49, 0x74, 0xbb, 0x72, 0x48, + 0xe7, 0xdb, 0xc7, 0xb0, 0x59, 0x47, 0x45, 0x31, 0xa9, 0x57, 0xd5, 0x13, 0x36, 0x63, 0x69, 0x21, + 0x06, 0x1f, 0x86, 0xdb, 0x0a, 0xe0, 0xc4, 0x45, 0x8b, 0x1e, 0x6a, 0xce, 0xe3, 0xfb, 0x7a, 0x2e, + 0x99, 0xa8, 0x5f, 0xd9, 0x3d, 0xad, 0x58, 0xa9, 0x13, 0x8d, 0x7d, 0x26, 0xc0, 0xe8, 0x74, 0xb8, + 0xa1, 0x03, 0xd6, 0x15, 0x25, 0x46, 0x67, 0x58, 0xc3, 0x1e, 0xf6, 0x39, 0x9c, 0xfe, 0x76, 0x80, + 0xbc, 0xee, 0xf8, 0x98, 0x34, 0xe6, 0x50, 0xc4, 0x61, 0x1f, 0x4d, 0xdb, 0x6c, 0xad, 0xed, 0x76, + 0x94, 0xaf, 0xc6, 0xf0, 0xca, 0x04, 0x62, 0x49, 0x62, 0x44, 0xb6, 0x16, 0xc0, 0x9d, 0xc3, 0xf0, + 0x92, 0xc7, 0xc9, 0x2c, 0xae, 0xc4, 0x71, 0xbc, 0xca, 0x78, 0x9c, 0xc8, 0x75, 0x1d, 0x1e, 0x86, + 0x37, 0xcc, 0xd0, 0x85, 0xa8, 0xc3, 0x70, 0x0a, 0x76, 0xb3, 0x33, 0xf9, 0xe3, 0xc1, 0xfa, 0x2a, + 0x29, 0xcc, 0xce, 0x64, 0x79, 0xe1, 0x35, 0xd2, 0x7b, 0x61, 0xc8, 0xbe, 0x02, 0xa7, 0x44, 0x32, + 0x0d, 0xb9, 0x85, 0xe9, 0x78, 0x09, 0xc8, 0xed, 0x00, 0x61, 0x3f, 0xcb, 0xa2, 0xfe, 0xde, 0xfc, + 0x54, 0x99, 0xd0, 0x5f, 0x88, 0x7f, 0x8c, 0xe9, 0xba, 0x90, 0x77, 0x43, 0x6d, 0xab, 0x27, 0x6d, + 0xd3, 0xcc, 0x9d, 0x8b, 0x58, 0x8c, 0x92, 0xe4, 0x90, 0x55, 0xc8, 0xfb, 0xec, 0xb5, 0x70, 0x68, + 0xa5, 0x44, 0x9a, 0xd9, 0xa6, 0x6c, 0xa0, 0xd7, 0xb2, 0x17, 0x49, 0x2a, 0xb4, 0xac, 0xb9, 0xa0, + 0xfd, 0xb8, 0x6d, 0xa0, 0x4d, 0x11, 0xb5, 0xa2, 0x69, 0x3b, 0x97, 0xd7, 0xcc, 0x94, 0xcf, 0xe7, + 0x19, 0xd3, 0xd0, 0x09, 0x8b, 0xd5, 0x07, 0x32, 0xb7, 0xdb, 0xb6, 0x50, 0x90, 0x98, 0xcb, 0x83, + 0x0a, 0x36, 0x8d, 0xac, 0x31, 0xf5, 0x48, 0xaa, 0x69, 0xd8, 0x8d, 0xb6, 0x19, 0x0f, 0x20, 0xd2, + 0x48, 0x14, 0xb4, 0xaf, 0xdd, 0xd5, 0xe2, 0x7d, 0xd6, 0xb4, 0x04, 0xfc, 0x02, 0x97, 0x54, 0x76, + 0xc4, 0xc4, 0x6b, 0x77, 0x08, 0x66, 0xf7, 0x09, 0xc0, 0xc3, 0xf3, 0xd5, 0x38, 0x81, 0xfb, 0x04, + 0xa8, 0x2f, 0x19, 0x62, 0x9f, 0x40, 0xb1, 0x7e, 0xd7, 0x99, 0x73, 0xaf, 0x83, 0xb8, 0xb2, 0x95, + 0x43, 0xba, 0x0e, 0x05, 0x43, 0x5d, 0x47, 0x29, 0xf8, 0x4d, 0xea, 0x1e, 0xad, 0x21, 0x4d, 0x8a, + 0x9d, 0xab, 0xad, 0x77, 0x61, 0x36, 0xf7, 0xaf, 0x85, 0x27, 0x2c, 0x4e, 0x4c, 0xc5, 0x10, 0x5d, + 0x57, 0x4e, 0xe4, 0xfe, 0x18, 0xa7, 0x9d, 0xfc, 0x7e, 0x34, 0x50, 0xd5, 0x28, 0x5d, 0x37, 0xb7, + 0xb0, 0x22, 0xd6, 0x04, 0x31, 0x51, 0xf9, 0x84, 0x93, 0xb8, 0x79, 0x5d, 0x34, 0xe5, 0xda, 0x81, 0x7e, 0x2d, 0xb4, 0x02, 0x89, 0x9b, 0xdf, 0xec, 0x2d, 0x9a, 0x48, 0xdc, 0xba, 0xb5, 0x9c, 0x8f, - 0x11, 0x81, 0x2e, 0xdb, 0x2b, 0xf9, 0x02, 0x96, 0xe9, 0xd3, 0x60, 0xf7, 0x20, 0x1a, 0xc4, 0xc7, + 0x11, 0x81, 0x2e, 0xdb, 0x2b, 0xf9, 0x02, 0x96, 0xe9, 0x93, 0x60, 0xf7, 0x20, 0x1a, 0xc4, 0xc7, 0x88, 0xfa, 0x69, 0xda, 0x35, 0xc8, 0x9c, 0x1d, 0xc8, 0xeb, 0x69, 0xf8, 0xaf, 0xa0, 0x28, 0x21, - 0xb1, 0x06, 0xb5, 0x20, 0xe7, 0x27, 0x5a, 0xc7, 0xaf, 0xca, 0x54, 0xa4, 0xf9, 0x7c, 0xca, 0x79, - 0x06, 0x8f, 0x2c, 0x47, 0xe3, 0xa1, 0x2b, 0xa5, 0x7e, 0xa2, 0xb5, 0x45, 0xd9, 0x25, 0x6e, 0x34, - 0x1e, 0x2d, 0x05, 0x3f, 0x4f, 0xb3, 0x0c, 0x8c, 0x9c, 0xd1, 0x78, 0xd8, 0x48, 0x88, 0x91, 0xe3, - 0x13, 0xce, 0x0f, 0x8b, 0x8e, 0xe5, 0xe9, 0xbf, 0x3e, 0x01, 0xbd, 0x03, 0x75, 0x1c, 0x21, 0xf5, - 0xc3, 0xa2, 0x10, 0x72, 0x7e, 0x28, 0x75, 0x8c, 0xfd, 0x94, 0xcb, 0x26, 0x54, 0x47, 0x20, 0xea, - 0x87, 0x52, 0x29, 0xd8, 0x79, 0x27, 0xf9, 0x78, 0x59, 0x5d, 0xf8, 0x47, 0x06, 0x6a, 0x73, 0xa8, - 0x3e, 0xdb, 0xfa, 0x14, 0xfc, 0xa0, 0x90, 0xcf, 0x0e, 0x3d, 0x98, 0xb8, 0x9e, 0xd6, 0xa9, 0xa4, - 0x0a, 0xf3, 0xec, 0xfd, 0xff, 0xfa, 0xf2, 0xc6, 0xda, 0xcf, 0xbe, 0xbc, 0xb1, 0xf6, 0x3f, 0x5f, - 0xde, 0x58, 0xfb, 0xe9, 0x57, 0x37, 0xbe, 0xf1, 0xb3, 0xaf, 0x6e, 0x7c, 0xe3, 0xbf, 0xbf, 0xba, - 0xf1, 0x8d, 0x2f, 0xde, 0xaa, 0x54, 0x6e, 0x76, 0xf6, 0xf3, 0x45, 0xc9, 0x05, 0x7f, 0xfa, 0x7f, - 0x01, 0x00, 0x00, 0xff, 0xff, 0x94, 0x35, 0x64, 0x61, 0x73, 0x82, 0x00, 0x00, + 0xb1, 0x06, 0xb5, 0x20, 0xfb, 0x1e, 0x72, 0x13, 0x47, 0xa3, 0x2c, 0x1b, 0xdc, 0xc6, 0x43, 0xc3, + 0xfd, 0xc0, 0xc3, 0x9d, 0x10, 0xe2, 0xfc, 0xf0, 0xeb, 0xf8, 0x55, 0x99, 0x8a, 0x34, 0x9f, 0x4f, + 0x39, 0xcf, 0xe0, 0x41, 0xe8, 0x68, 0x3c, 0x74, 0xa5, 0xd4, 0x0f, 0xbf, 0xb6, 0x28, 0xbb, 0x70, + 0x8e, 0xc6, 0xa3, 0xa5, 0xe0, 0xe7, 0x69, 0x96, 0x81, 0x78, 0x1c, 0x8d, 0x87, 0x8d, 0x84, 0x88, + 0x47, 0x9f, 0x70, 0x7e, 0xae, 0x74, 0x2c, 0x9f, 0x29, 0xe8, 0x73, 0xd5, 0xbb, 0x50, 0xc7, 0x11, + 0x52, 0x3f, 0x57, 0x0a, 0x21, 0xe7, 0xe7, 0x57, 0xc7, 0xd8, 0x0f, 0xc4, 0x6c, 0x42, 0x75, 0x04, + 0xa2, 0x7e, 0x7e, 0x95, 0x82, 0x9d, 0x37, 0x9d, 0x8f, 0x97, 0xd5, 0x85, 0x7f, 0x10, 0xa1, 0xb6, + 0x9c, 0xea, 0x63, 0xb0, 0xcf, 0xc0, 0xcf, 0x14, 0xf9, 0xec, 0xd0, 0x83, 0x89, 0x4b, 0x6f, 0x9d, + 0x4a, 0xaa, 0x30, 0xcf, 0x6f, 0xff, 0xf7, 0x97, 0x37, 0xd6, 0x7e, 0xf6, 0xe5, 0x8d, 0xb5, 0xff, + 0xfd, 0xf2, 0xc6, 0xda, 0x4f, 0xbf, 0xba, 0xf1, 0x8d, 0x9f, 0x7d, 0x75, 0xe3, 0x1b, 0xff, 0xf3, + 0xd5, 0x8d, 0x6f, 0x7c, 0xf1, 0x56, 0xa5, 0x32, 0xbe, 0xb3, 0x9f, 0x2f, 0x4a, 0x2e, 0xf8, 0xb3, + 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xf4, 0x6f, 0x9e, 0xb4, 0xc9, 0x82, 0x00, 0x00, } // This is a compile-time assertion to ensure that this generated file @@ -756,6 +757,7 @@ type ClientCommandsHandler interface { ChatSubscribeToMessagePreviews(context.Context, *pb.RpcChatSubscribeToMessagePreviewsRequest) *pb.RpcChatSubscribeToMessagePreviewsResponse ChatUnsubscribeFromMessagePreviews(context.Context, *pb.RpcChatUnsubscribeFromMessagePreviewsRequest) *pb.RpcChatUnsubscribeFromMessagePreviewsResponse ObjectChatAdd(context.Context, *pb.RpcObjectChatAddRequest) *pb.RpcObjectChatAddResponse + ChatReadAll(context.Context, *pb.RpcChatReadAllRequest) *pb.RpcChatReadAllResponse // mock AI RPCs for compatibility between branches. Not implemented in main AIWritingTools(context.Context, *pb.RpcAIWritingToolsRequest) *pb.RpcAIWritingToolsResponse AIAutofill(context.Context, *pb.RpcAIAutofillRequest) *pb.RpcAIAutofillResponse @@ -6609,6 +6611,26 @@ func ObjectChatAdd(b []byte) (resp []byte) { return resp } +func ChatReadAll(b []byte) (resp []byte) { + defer func() { + if PanicHandler != nil { + if r := recover(); r != nil { + resp, _ = (&pb.RpcChatReadAllResponse{Error: &pb.RpcChatReadAllResponseError{Code: pb.RpcChatReadAllResponseError_UNKNOWN_ERROR, Description: "panic recovered"}}).Marshal() + PanicHandler(r) + } + } + }() + + in := new(pb.RpcChatReadAllRequest) + if err := in.Unmarshal(b); err != nil { + resp, _ = (&pb.RpcChatReadAllResponse{Error: &pb.RpcChatReadAllResponseError{Code: pb.RpcChatReadAllResponseError_BAD_INPUT, Description: err.Error()}}).Marshal() + return resp + } + + resp, _ = clientCommandsHandler.ChatReadAll(context.Background(), in).Marshal() + return resp +} + func AIWritingTools(b []byte) (resp []byte) { defer func() { if PanicHandler != nil { @@ -7299,6 +7321,8 @@ func CommandAsync(cmd string, data []byte, callback func(data []byte)) { cd = ChatUnsubscribeFromMessagePreviews(data) case "ObjectChatAdd": cd = ObjectChatAdd(data) + case "ChatReadAll": + cd = ChatReadAll(data) case "AIWritingTools": cd = AIWritingTools(data) case "AIAutofill": @@ -11419,6 +11443,20 @@ func (h *ClientCommandsHandlerProxy) ObjectChatAdd(ctx context.Context, req *pb. call, _ := actualCall(ctx, req) return call.(*pb.RpcObjectChatAddResponse) } +func (h *ClientCommandsHandlerProxy) ChatReadAll(ctx context.Context, req *pb.RpcChatReadAllRequest) *pb.RpcChatReadAllResponse { + actualCall := func(ctx context.Context, req any) (any, error) { + return h.client.ChatReadAll(ctx, req.(*pb.RpcChatReadAllRequest)), nil + } + for _, interceptor := range h.interceptors { + toCall := actualCall + currentInterceptor := interceptor + actualCall = func(ctx context.Context, req any) (any, error) { + return currentInterceptor(ctx, req, "ChatReadAll", toCall) + } + } + call, _ := actualCall(ctx, req) + return call.(*pb.RpcChatReadAllResponse) +} func (h *ClientCommandsHandlerProxy) AIWritingTools(ctx context.Context, req *pb.RpcAIWritingToolsRequest) *pb.RpcAIWritingToolsResponse { actualCall := func(ctx context.Context, req any) (any, error) { return h.client.AIWritingTools(ctx, req.(*pb.RpcAIWritingToolsRequest)), nil diff --git a/core/block/chats/chatrepository/repository.go b/core/block/chats/chatrepository/repository.go index 6c815a924..d25bf5558 100644 --- a/core/block/chats/chatrepository/repository.go +++ b/core/block/chats/chatrepository/repository.go @@ -113,6 +113,7 @@ type Repository interface { GetOldestOrderId(ctx context.Context, counterType chatmodel.CounterType) (string, error) GetReadMessagesAfter(ctx context.Context, afterOrderId string, counterType chatmodel.CounterType) ([]string, error) GetUnreadMessageIdsInRange(ctx context.Context, afterOrderId, beforeOrderId string, lastStateId string, counterType chatmodel.CounterType) ([]string, error) + GetAllUnreadMessages(ctx context.Context, counterType chatmodel.CounterType) ([]string, error) SetReadFlag(ctx context.Context, chatObjectId string, msgIds []string, counterType chatmodel.CounterType, value bool) []string GetMessages(ctx context.Context, req GetMessagesRequest) ([]*chatmodel.Message, error) HasMyReaction(ctx context.Context, myIdentity string, messageId string, emoji string) (bool, error) @@ -289,7 +290,7 @@ func (s *repository) GetUnreadMessageIdsInRange(ctx context.Context, afterOrderI query.Key{Path: []string{chatmodel.OrderKey, "id"}, Filter: query.NewComp(query.CompOpGte, afterOrderId)}, query.Key{Path: []string{chatmodel.OrderKey, "id"}, Filter: query.NewComp(query.CompOpLte, beforeOrderId)}, query.Or{ - query.Not{query.Key{Path: []string{chatmodel.StateIdKey}, Filter: query.Exists{}}}, + query.Not{Filter: query.Key{Path: []string{chatmodel.StateIdKey}, Filter: query.Exists{}}}, query.Key{Path: []string{chatmodel.StateIdKey}, Filter: query.NewComp(query.CompOpLte, lastStateId)}, }, handler.getUnreadFilter(), @@ -311,6 +312,29 @@ func (s *repository) GetUnreadMessageIdsInRange(ctx context.Context, afterOrderI return msgIds, iter.Err() } +func (s *repository) GetAllUnreadMessages(ctx context.Context, counterType chatmodel.CounterType) ([]string, error) { + handler := newReadHandler(counterType) + + qry := query.And{ + handler.getUnreadFilter(), + } + iter, err := s.collection.Find(qry).Iter(ctx) + if err != nil { + return nil, fmt.Errorf("find id: %w", err) + } + defer iter.Close() + + var msgIds []string + for iter.Next() { + doc, err := iter.Doc() + if err != nil { + return nil, fmt.Errorf("get doc: %w", err) + } + msgIds = append(msgIds, doc.Value().GetString("id")) + } + return msgIds, iter.Err() +} + func (r *repository) SetReadFlag(ctx context.Context, chatObjectId string, msgIds []string, counterType chatmodel.CounterType, value bool) []string { handler := newReadHandler(counterType) diff --git a/core/block/chats/service.go b/core/block/chats/service.go index 48374d736..7cba4a227 100644 --- a/core/block/chats/service.go +++ b/core/block/chats/service.go @@ -50,6 +50,8 @@ type Service interface { SubscribeToMessagePreviews(ctx context.Context, subId string) (*SubscribeToMessagePreviewsResponse, error) UnsubscribeFromMessagePreviews(subId string) error + ReadAll(ctx context.Context) error + app.ComponentRunnable } @@ -438,7 +440,12 @@ type ReadMessagesRequest struct { func (s *service) ReadMessages(ctx context.Context, req ReadMessagesRequest) error { return s.chatObjectDo(ctx, req.ChatObjectId, func(sb chatobject.StoreObject) error { - return sb.MarkReadMessages(ctx, req.AfterOrderId, req.BeforeOrderId, req.LastStateId, req.CounterType) + return sb.MarkReadMessages(ctx, chatobject.ReadMessagesRequest{ + AfterOrderId: req.AfterOrderId, + BeforeOrderId: req.BeforeOrderId, + LastStateId: req.LastStateId, + CounterType: req.CounterType, + }) }) } @@ -453,3 +460,37 @@ func (s *service) chatObjectDo(ctx context.Context, chatObjectId string, proc fu defer cancel() return cache.DoWait(s.objectGetter, waitCtx, chatObjectId, proc) } + +func (s *service) ReadAll(ctx context.Context) error { + s.lock.Lock() + chatIds := make([]string, 0, len(s.allChatObjectIds)) + for id := range s.allChatObjectIds { + chatIds = append(chatIds, id) + } + s.lock.Unlock() + + for _, chatId := range chatIds { + err := s.chatObjectDo(ctx, chatId, func(sb chatobject.StoreObject) error { + err := sb.MarkReadMessages(ctx, chatobject.ReadMessagesRequest{ + All: true, + CounterType: chatmodel.CounterTypeMessage, + }) + if err != nil { + return fmt.Errorf("messages: %w", err) + } + err = sb.MarkReadMessages(ctx, chatobject.ReadMessagesRequest{ + All: true, + CounterType: chatmodel.CounterTypeMention, + }) + if err != nil { + return fmt.Errorf("mentions: %w", err) + } + return nil + }) + if err != nil { + return fmt.Errorf("read: %w", err) + } + } + + return nil +} diff --git a/core/block/editor/chatobject/chatobject.go b/core/block/editor/chatobject/chatobject.go index 100c24b0b..9a698b8e0 100644 --- a/core/block/editor/chatobject/chatobject.go +++ b/core/block/editor/chatobject/chatobject.go @@ -48,7 +48,7 @@ type StoreObject interface { EditMessage(ctx context.Context, messageId string, newMessage *chatmodel.Message) error ToggleMessageReaction(ctx context.Context, messageId string, emoji string) error DeleteMessage(ctx context.Context, messageId string) error - MarkReadMessages(ctx context.Context, afterOrderId string, beforeOrderId string, lastStateId string, counterType chatmodel.CounterType) error + MarkReadMessages(ctx context.Context, req ReadMessagesRequest) error MarkMessagesAsUnread(ctx context.Context, afterOrderId string, counterType chatmodel.CounterType) error } diff --git a/core/block/editor/chatobject/reading.go b/core/block/editor/chatobject/reading.go index 85af7d9cf..3f9450eec 100644 --- a/core/block/editor/chatobject/reading.go +++ b/core/block/editor/chatobject/reading.go @@ -12,19 +12,41 @@ import ( "golang.org/x/exp/slices" ) -func (s *storeObject) MarkReadMessages(ctx context.Context, afterOrderId, beforeOrderId string, lastStateId string, counterType chatmodel.CounterType) error { +type ReadMessagesRequest struct { + AfterOrderId string + BeforeOrderId string + LastStateId string + + CounterType chatmodel.CounterType + + // All forces to read all messages + All bool +} + +func (s *storeObject) MarkReadMessages(ctx context.Context, req ReadMessagesRequest) error { // 1. select all messages with orderId < beforeOrderId and addedTime < lastDbState // 2. use the last(by orderId) message id as lastHead // 3. update the MarkSeenHeads // 2. mark messages as read in the DB - msgs, err := s.repository.GetUnreadMessageIdsInRange(ctx, afterOrderId, beforeOrderId, lastStateId, counterType) - if err != nil { - return fmt.Errorf("get message: %w", err) + var msgs []string + + if req.All { + var err error + msgs, err = s.repository.GetAllUnreadMessages(ctx, req.CounterType) + if err != nil { + return fmt.Errorf("get all messages: %w", err) + } + } else { + var err error + msgs, err = s.repository.GetUnreadMessageIdsInRange(ctx, req.AfterOrderId, req.BeforeOrderId, req.LastStateId, req.CounterType) + if err != nil { + return fmt.Errorf("get messages: %w", err) + } } // mark the whole tree as seen from the current message - return s.storeSource.MarkSeenHeads(ctx, counterType.DiffManagerName(), msgs) + return s.storeSource.MarkSeenHeads(ctx, req.CounterType.DiffManagerName(), msgs) } func (s *storeObject) MarkMessagesAsUnread(ctx context.Context, afterOrderId string, counterType chatmodel.CounterType) error { diff --git a/core/block/editor/chatobject/reading_test.go b/core/block/editor/chatobject/reading_test.go index 2278dc186..15495d935 100644 --- a/core/block/editor/chatobject/reading_test.go +++ b/core/block/editor/chatobject/reading_test.go @@ -27,7 +27,12 @@ func TestReadMessages(t *testing.T) { // All messages forced as not read messagesResp := fx.assertReadStatus(t, ctx, "", "", false, false) - err := fx.MarkReadMessages(ctx, "", messagesResp.Messages[2].OrderId, messagesResp.ChatState.LastStateId, chatmodel.CounterTypeMessage) + err := fx.MarkReadMessages(ctx, ReadMessagesRequest{ + AfterOrderId: "", + BeforeOrderId: messagesResp.Messages[2].OrderId, + LastStateId: messagesResp.ChatState.LastStateId, + CounterType: chatmodel.CounterTypeMessage, + }) require.NoError(t, err) fx.assertReadStatus(t, ctx, "", messagesResp.Messages[2].OrderId, true, false) @@ -58,8 +63,12 @@ func TestReadMessagesLoadedInBackground(t *testing.T) { secondMessage, err := fx.GetMessageById(ctx, secondMessageId) require.NoError(t, err) - err = fx.MarkReadMessages(ctx, "", firstMessage.OrderId, firstMessage.StateId, chatmodel.CounterTypeMessage) - require.NoError(t, err) + err = fx.MarkReadMessages(ctx, ReadMessagesRequest{ + AfterOrderId: "", + BeforeOrderId: firstMessage.OrderId, + LastStateId: firstMessage.StateId, + CounterType: chatmodel.CounterTypeMessage, + }) gotResponse, err := fx.GetMessages(ctx, chatrepository.GetMessagesRequest{}) require.NoError(t, err) @@ -97,7 +106,12 @@ func TestReadMentions(t *testing.T) { // All messages forced as not read messagesResp := fx.assertReadStatus(t, ctx, "", "", false, false) - err := fx.MarkReadMessages(ctx, "", messagesResp.Messages[2].OrderId, messagesResp.ChatState.LastStateId, chatmodel.CounterTypeMention) + err := fx.MarkReadMessages(ctx, ReadMessagesRequest{ + AfterOrderId: "", + BeforeOrderId: messagesResp.Messages[2].OrderId, + LastStateId: messagesResp.ChatState.LastStateId, + CounterType: chatmodel.CounterTypeMention, + }) require.NoError(t, err) fx.assertReadStatus(t, ctx, "", messagesResp.Messages[2].OrderId, false, true) @@ -124,7 +138,12 @@ func TestReadMentions(t *testing.T) { // All messages forced as not read messagesResp := fx.assertReadStatus(t, ctx, "", "", false, false) - err = fx.MarkReadMessages(ctx, "", secondMessage.OrderId, messagesResp.ChatState.LastStateId, chatmodel.CounterTypeMention) + err = fx.MarkReadMessages(ctx, ReadMessagesRequest{ + AfterOrderId: "", + BeforeOrderId: secondMessage.OrderId, + LastStateId: messagesResp.ChatState.LastStateId, + CounterType: chatmodel.CounterTypeMention, + }) require.NoError(t, err) fx.assertReadStatus(t, ctx, secondMessage.OrderId, secondMessage.OrderId, false, true) diff --git a/core/block/editor/chatobject/subscription_test.go b/core/block/editor/chatobject/subscription_test.go index 7861e6e86..4f688cc72 100644 --- a/core/block/editor/chatobject/subscription_test.go +++ b/core/block/editor/chatobject/subscription_test.go @@ -281,7 +281,12 @@ func TestSubscriptionMessageCounters(t *testing.T) { fx.events = nil - err = fx.MarkReadMessages(ctx, "", firstMessage.OrderId, secondMessage.StateId, chatmodel.CounterTypeMessage) + err = fx.MarkReadMessages(ctx, ReadMessagesRequest{ + AfterOrderId: "", + BeforeOrderId: firstMessage.OrderId, + LastStateId: secondMessage.StateId, + CounterType: chatmodel.CounterTypeMessage, + }) require.NoError(t, err) wantEvents = []*pb.EventMessage{ @@ -426,7 +431,12 @@ func TestSubscriptionMentionCounters(t *testing.T) { fx.events = nil - err = fx.MarkReadMessages(ctx, "", firstMessage.OrderId, secondMessage.StateId, chatmodel.CounterTypeMention) + err = fx.MarkReadMessages(ctx, ReadMessagesRequest{ + AfterOrderId: "", + BeforeOrderId: firstMessage.OrderId, + LastStateId: secondMessage.StateId, + CounterType: chatmodel.CounterTypeMention, + }) require.NoError(t, err) wantEvents = []*pb.EventMessage{ diff --git a/core/chats.go b/core/chats.go index 764135c73..368decb14 100644 --- a/core/chats.go +++ b/core/chats.go @@ -265,3 +265,19 @@ func messagesToProto(msgs []*chatmodel.Message) []*model.ChatMessage { } return res } + +func (mw *Middleware) ChatReadAll(cctx context.Context, req *pb.RpcChatReadAllRequest) *pb.RpcChatReadAllResponse { + chatService := mustService[chats.Service](mw) + + err := chatService.ReadAll(cctx) + if err != nil { + code := mapErrorCode[pb.RpcChatReadAllResponseErrorCode](err) + return &pb.RpcChatReadAllResponse{ + Error: &pb.RpcChatReadAllResponseError{ + Code: code, + Description: getErrorDescription(err), + }, + } + } + return &pb.RpcChatReadAllResponse{} +} diff --git a/docs/proto.md b/docs/proto.md index c7843e5bb..a3b7a2e90 100644 --- a/docs/proto.md +++ b/docs/proto.md @@ -594,6 +594,10 @@ - [Rpc.Chat.GetMessagesByIds.Request](#anytype-Rpc-Chat-GetMessagesByIds-Request) - [Rpc.Chat.GetMessagesByIds.Response](#anytype-Rpc-Chat-GetMessagesByIds-Response) - [Rpc.Chat.GetMessagesByIds.Response.Error](#anytype-Rpc-Chat-GetMessagesByIds-Response-Error) + - [Rpc.Chat.ReadAll](#anytype-Rpc-Chat-ReadAll) + - [Rpc.Chat.ReadAll.Request](#anytype-Rpc-Chat-ReadAll-Request) + - [Rpc.Chat.ReadAll.Response](#anytype-Rpc-Chat-ReadAll-Response) + - [Rpc.Chat.ReadAll.Response.Error](#anytype-Rpc-Chat-ReadAll-Response-Error) - [Rpc.Chat.ReadMessages](#anytype-Rpc-Chat-ReadMessages) - [Rpc.Chat.ReadMessages.Request](#anytype-Rpc-Chat-ReadMessages-Request) - [Rpc.Chat.ReadMessages.Response](#anytype-Rpc-Chat-ReadMessages-Response) @@ -1504,6 +1508,7 @@ - [Rpc.Chat.EditMessageContent.Response.Error.Code](#anytype-Rpc-Chat-EditMessageContent-Response-Error-Code) - [Rpc.Chat.GetMessages.Response.Error.Code](#anytype-Rpc-Chat-GetMessages-Response-Error-Code) - [Rpc.Chat.GetMessagesByIds.Response.Error.Code](#anytype-Rpc-Chat-GetMessagesByIds-Response-Error-Code) + - [Rpc.Chat.ReadAll.Response.Error.Code](#anytype-Rpc-Chat-ReadAll-Response-Error-Code) - [Rpc.Chat.ReadMessages.ReadType](#anytype-Rpc-Chat-ReadMessages-ReadType) - [Rpc.Chat.ReadMessages.Response.Error.Code](#anytype-Rpc-Chat-ReadMessages-Response-Error-Code) - [Rpc.Chat.SubscribeLastMessages.Response.Error.Code](#anytype-Rpc-Chat-SubscribeLastMessages-Response-Error-Code) @@ -2422,6 +2427,7 @@ | ChatSubscribeToMessagePreviews | [Rpc.Chat.SubscribeToMessagePreviews.Request](#anytype-Rpc-Chat-SubscribeToMessagePreviews-Request) | [Rpc.Chat.SubscribeToMessagePreviews.Response](#anytype-Rpc-Chat-SubscribeToMessagePreviews-Response) | | | ChatUnsubscribeFromMessagePreviews | [Rpc.Chat.UnsubscribeFromMessagePreviews.Request](#anytype-Rpc-Chat-UnsubscribeFromMessagePreviews-Request) | [Rpc.Chat.UnsubscribeFromMessagePreviews.Response](#anytype-Rpc-Chat-UnsubscribeFromMessagePreviews-Response) | | | ObjectChatAdd | [Rpc.Object.ChatAdd.Request](#anytype-Rpc-Object-ChatAdd-Request) | [Rpc.Object.ChatAdd.Response](#anytype-Rpc-Object-ChatAdd-Response) | | +| ChatReadAll | [Rpc.Chat.ReadAll.Request](#anytype-Rpc-Chat-ReadAll-Request) | [Rpc.Chat.ReadAll.Response](#anytype-Rpc-Chat-ReadAll-Response) | | | AIWritingTools | [Rpc.AI.WritingTools.Request](#anytype-Rpc-AI-WritingTools-Request) | [Rpc.AI.WritingTools.Response](#anytype-Rpc-AI-WritingTools-Response) | mock AI RPCs for compatibility between branches. Not implemented in main | | AIAutofill | [Rpc.AI.Autofill.Request](#anytype-Rpc-AI-Autofill-Request) | [Rpc.AI.Autofill.Response](#anytype-Rpc-AI-Autofill-Response) | | | AIListSummary | [Rpc.AI.ListSummary.Request](#anytype-Rpc-AI-ListSummary-Request) | [Rpc.AI.ListSummary.Response](#anytype-Rpc-AI-ListSummary-Response) | | @@ -11044,6 +11050,57 @@ Get marks list in the selected range in text block. + + +### Rpc.Chat.ReadAll + + + + + + + + + +### Rpc.Chat.ReadAll.Request + + + + + + + + + +### Rpc.Chat.ReadAll.Response + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| error | [Rpc.Chat.ReadAll.Response.Error](#anytype-Rpc-Chat-ReadAll-Response-Error) | | | + + + + + + + + +### Rpc.Chat.ReadAll.Response.Error + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| code | [Rpc.Chat.ReadAll.Response.Error.Code](#anytype-Rpc-Chat-ReadAll-Response-Error-Code) | | | +| description | [string](#string) | | | + + + + + + ### Rpc.Chat.ReadMessages @@ -24126,6 +24183,19 @@ Middleware-to-front-end response, that can contain a NULL error or a non-NULL er + + +### Rpc.Chat.ReadAll.Response.Error.Code + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| NULL | 0 | | +| UNKNOWN_ERROR | 1 | | +| BAD_INPUT | 2 | ... | + + + ### Rpc.Chat.ReadMessages.ReadType diff --git a/pb/commands.pb.go b/pb/commands.pb.go index 1ea088b67..c56b15713 100644 --- a/pb/commands.pb.go +++ b/pb/commands.pb.go @@ -10150,6 +10150,34 @@ func (RpcChatUnreadResponseErrorCode) EnumDescriptor() ([]byte, []int) { return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 11, 1, 0, 0} } +type RpcChatReadAllResponseErrorCode int32 + +const ( + RpcChatReadAllResponseError_NULL RpcChatReadAllResponseErrorCode = 0 + RpcChatReadAllResponseError_UNKNOWN_ERROR RpcChatReadAllResponseErrorCode = 1 + RpcChatReadAllResponseError_BAD_INPUT RpcChatReadAllResponseErrorCode = 2 +) + +var RpcChatReadAllResponseErrorCode_name = map[int32]string{ + 0: "NULL", + 1: "UNKNOWN_ERROR", + 2: "BAD_INPUT", +} + +var RpcChatReadAllResponseErrorCode_value = map[string]int32{ + "NULL": 0, + "UNKNOWN_ERROR": 1, + "BAD_INPUT": 2, +} + +func (x RpcChatReadAllResponseErrorCode) String() string { + return proto.EnumName(RpcChatReadAllResponseErrorCode_name, int32(x)) +} + +func (RpcChatReadAllResponseErrorCode) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 12, 1, 0, 0} +} + type RpcPushNotificationRegisterTokenPlatform int32 const ( @@ -76151,6 +76179,174 @@ func (m *RpcChatUnreadResponseError) GetDescription() string { return "" } +type RpcChatReadAll struct { +} + +func (m *RpcChatReadAll) Reset() { *m = RpcChatReadAll{} } +func (m *RpcChatReadAll) String() string { return proto.CompactTextString(m) } +func (*RpcChatReadAll) ProtoMessage() {} +func (*RpcChatReadAll) Descriptor() ([]byte, []int) { + return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 12} +} +func (m *RpcChatReadAll) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RpcChatReadAll) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RpcChatReadAll.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RpcChatReadAll) XXX_Merge(src proto.Message) { + xxx_messageInfo_RpcChatReadAll.Merge(m, src) +} +func (m *RpcChatReadAll) XXX_Size() int { + return m.Size() +} +func (m *RpcChatReadAll) XXX_DiscardUnknown() { + xxx_messageInfo_RpcChatReadAll.DiscardUnknown(m) +} + +var xxx_messageInfo_RpcChatReadAll proto.InternalMessageInfo + +type RpcChatReadAllRequest struct { +} + +func (m *RpcChatReadAllRequest) Reset() { *m = RpcChatReadAllRequest{} } +func (m *RpcChatReadAllRequest) String() string { return proto.CompactTextString(m) } +func (*RpcChatReadAllRequest) ProtoMessage() {} +func (*RpcChatReadAllRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 12, 0} +} +func (m *RpcChatReadAllRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RpcChatReadAllRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RpcChatReadAllRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RpcChatReadAllRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_RpcChatReadAllRequest.Merge(m, src) +} +func (m *RpcChatReadAllRequest) XXX_Size() int { + return m.Size() +} +func (m *RpcChatReadAllRequest) XXX_DiscardUnknown() { + xxx_messageInfo_RpcChatReadAllRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_RpcChatReadAllRequest proto.InternalMessageInfo + +type RpcChatReadAllResponse struct { + Error *RpcChatReadAllResponseError `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` +} + +func (m *RpcChatReadAllResponse) Reset() { *m = RpcChatReadAllResponse{} } +func (m *RpcChatReadAllResponse) String() string { return proto.CompactTextString(m) } +func (*RpcChatReadAllResponse) ProtoMessage() {} +func (*RpcChatReadAllResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 12, 1} +} +func (m *RpcChatReadAllResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RpcChatReadAllResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RpcChatReadAllResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RpcChatReadAllResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_RpcChatReadAllResponse.Merge(m, src) +} +func (m *RpcChatReadAllResponse) XXX_Size() int { + return m.Size() +} +func (m *RpcChatReadAllResponse) XXX_DiscardUnknown() { + xxx_messageInfo_RpcChatReadAllResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_RpcChatReadAllResponse proto.InternalMessageInfo + +func (m *RpcChatReadAllResponse) GetError() *RpcChatReadAllResponseError { + if m != nil { + return m.Error + } + return nil +} + +type RpcChatReadAllResponseError struct { + Code RpcChatReadAllResponseErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=anytype.RpcChatReadAllResponseErrorCode" json:"code,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` +} + +func (m *RpcChatReadAllResponseError) Reset() { *m = RpcChatReadAllResponseError{} } +func (m *RpcChatReadAllResponseError) String() string { return proto.CompactTextString(m) } +func (*RpcChatReadAllResponseError) ProtoMessage() {} +func (*RpcChatReadAllResponseError) Descriptor() ([]byte, []int) { + return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 12, 1, 0} +} +func (m *RpcChatReadAllResponseError) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RpcChatReadAllResponseError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RpcChatReadAllResponseError.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RpcChatReadAllResponseError) XXX_Merge(src proto.Message) { + xxx_messageInfo_RpcChatReadAllResponseError.Merge(m, src) +} +func (m *RpcChatReadAllResponseError) XXX_Size() int { + return m.Size() +} +func (m *RpcChatReadAllResponseError) XXX_DiscardUnknown() { + xxx_messageInfo_RpcChatReadAllResponseError.DiscardUnknown(m) +} + +var xxx_messageInfo_RpcChatReadAllResponseError proto.InternalMessageInfo + +func (m *RpcChatReadAllResponseError) GetCode() RpcChatReadAllResponseErrorCode { + if m != nil { + return m.Code + } + return RpcChatReadAllResponseError_NULL +} + +func (m *RpcChatReadAllResponseError) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + type RpcPushNotification struct { } @@ -76795,6 +76991,7 @@ func init() { proto.RegisterEnum("anytype.RpcChatReadMessagesResponseErrorCode", RpcChatReadMessagesResponseErrorCode_name, RpcChatReadMessagesResponseErrorCode_value) proto.RegisterEnum("anytype.RpcChatUnreadReadType", RpcChatUnreadReadType_name, RpcChatUnreadReadType_value) proto.RegisterEnum("anytype.RpcChatUnreadResponseErrorCode", RpcChatUnreadResponseErrorCode_name, RpcChatUnreadResponseErrorCode_value) + proto.RegisterEnum("anytype.RpcChatReadAllResponseErrorCode", RpcChatReadAllResponseErrorCode_name, RpcChatReadAllResponseErrorCode_value) proto.RegisterEnum("anytype.RpcPushNotificationRegisterTokenPlatform", RpcPushNotificationRegisterTokenPlatform_name, RpcPushNotificationRegisterTokenPlatform_value) proto.RegisterEnum("anytype.RpcPushNotificationRegisterTokenResponseErrorCode", RpcPushNotificationRegisterTokenResponseErrorCode_name, RpcPushNotificationRegisterTokenResponseErrorCode_value) proto.RegisterType((*Rpc)(nil), "anytype.Rpc") @@ -78111,6 +78308,10 @@ func init() { proto.RegisterType((*RpcChatUnreadRequest)(nil), "anytype.Rpc.Chat.Unread.Request") proto.RegisterType((*RpcChatUnreadResponse)(nil), "anytype.Rpc.Chat.Unread.Response") proto.RegisterType((*RpcChatUnreadResponseError)(nil), "anytype.Rpc.Chat.Unread.Response.Error") + proto.RegisterType((*RpcChatReadAll)(nil), "anytype.Rpc.Chat.ReadAll") + proto.RegisterType((*RpcChatReadAllRequest)(nil), "anytype.Rpc.Chat.ReadAll.Request") + proto.RegisterType((*RpcChatReadAllResponse)(nil), "anytype.Rpc.Chat.ReadAll.Response") + proto.RegisterType((*RpcChatReadAllResponseError)(nil), "anytype.Rpc.Chat.ReadAll.Response.Error") proto.RegisterType((*RpcPushNotification)(nil), "anytype.Rpc.PushNotification") proto.RegisterType((*RpcPushNotificationRegisterToken)(nil), "anytype.Rpc.PushNotification.RegisterToken") proto.RegisterType((*RpcPushNotificationRegisterTokenRequest)(nil), "anytype.Rpc.PushNotification.RegisterToken.Request") @@ -78124,1383 +78325,1385 @@ func init() { func init() { proto.RegisterFile("pb/protos/commands.proto", fileDescriptor_8261c968b2e6f45c) } var fileDescriptor_8261c968b2e6f45c = []byte{ - // 22007 bytes of a gzipped FileDescriptorProto + // 22047 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7b, 0x98, 0x24, 0x49, 0x59, 0x2f, 0x3c, 0x95, 0x59, 0x55, 0x5d, 0x1d, 0x7d, 0x99, 0x9a, 0xdc, 0xd9, 0x61, 0x36, 0x76, 0x19, 0x96, 0x61, 0x59, 0xd6, 0x65, 0xe9, 0x85, 0x05, 0x91, 0x5d, 0x16, 0x96, 0xea, 0xea, 0xea, - 0xee, 0xda, 0xad, 0xae, 0x6a, 0xb2, 0xaa, 0x67, 0x18, 0x3d, 0x7c, 0x6d, 0x4e, 0x55, 0x74, 0x77, - 0xee, 0x54, 0x67, 0x16, 0x99, 0xd9, 0x33, 0xdb, 0x7c, 0xcf, 0xf9, 0x8e, 0x88, 0xc0, 0x22, 0x22, - 0xa2, 0x22, 0x22, 0x72, 0x17, 0x10, 0x90, 0xfb, 0x4d, 0x40, 0x2e, 0x22, 0x08, 0xe2, 0x0d, 0x45, - 0xe5, 0x22, 0x3c, 0x82, 0x17, 0xc4, 0x73, 0x8e, 0x7a, 0xf0, 0x53, 0x10, 0x15, 0xfd, 0x9e, 0xb8, - 0x64, 0x66, 0x44, 0x75, 0x65, 0x56, 0x64, 0x75, 0x65, 0xf5, 0xa2, 0xdf, 0x5f, 0x55, 0x19, 0x19, - 0xf9, 0xc6, 0x1b, 0xef, 0xef, 0x8d, 0x88, 0x37, 0x22, 0xde, 0x78, 0x03, 0x9c, 0xee, 0x5d, 0xbc, - 0xb5, 0xe7, 0xd8, 0x9e, 0xed, 0xde, 0xda, 0xb6, 0x77, 0x77, 0x0d, 0xab, 0xe3, 0x2e, 0x90, 0x67, - 0x6d, 0xca, 0xb0, 0xf6, 0xbd, 0xfd, 0x1e, 0x82, 0x37, 0xf4, 0x2e, 0x6d, 0xdf, 0xda, 0x35, 0x2f, - 0xde, 0xda, 0xbb, 0x78, 0xeb, 0xae, 0xdd, 0x41, 0x5d, 0xff, 0x03, 0xf2, 0xc0, 0xb2, 0xc3, 0x9b, - 0xa2, 0x72, 0x75, 0xed, 0xb6, 0xd1, 0x75, 0x3d, 0xdb, 0x41, 0x2c, 0xe7, 0xa9, 0xb0, 0x48, 0x74, - 0x19, 0x59, 0x9e, 0x4f, 0xe1, 0xba, 0x6d, 0xdb, 0xde, 0xee, 0x22, 0xfa, 0xee, 0xe2, 0xde, 0xd6, - 0xad, 0xae, 0xe7, 0xec, 0xb5, 0x3d, 0xf6, 0xf6, 0xfa, 0xfe, 0xb7, 0x1d, 0xe4, 0xb6, 0x1d, 0xb3, - 0xe7, 0xd9, 0x0e, 0xcd, 0x71, 0xf6, 0x43, 0xff, 0x50, 0x00, 0xaa, 0xde, 0x6b, 0xc3, 0x6f, 0x4d, - 0x01, 0xb5, 0xd4, 0xeb, 0xc1, 0x4f, 0x2a, 0x00, 0xac, 0x20, 0xef, 0x1c, 0x72, 0x5c, 0xd3, 0xb6, - 0xe0, 0x71, 0x30, 0xa5, 0xa3, 0x67, 0xec, 0x21, 0xd7, 0xbb, 0x23, 0x7b, 0xff, 0xd7, 0xd5, 0x0c, - 0x7c, 0xbd, 0x02, 0x0a, 0x3a, 0x72, 0x7b, 0xb6, 0xe5, 0x22, 0xed, 0x29, 0x20, 0x87, 0x1c, 0xc7, - 0x76, 0x4e, 0x67, 0xae, 0xcf, 0xdc, 0x34, 0x73, 0xdb, 0xcd, 0x0b, 0xac, 0xfa, 0x0b, 0x7a, 0xaf, - 0xbd, 0x50, 0xea, 0xf5, 0x16, 0x42, 0x4a, 0x0b, 0xfe, 0x47, 0x0b, 0x15, 0xfc, 0x85, 0x4e, 0x3f, - 0xd4, 0x4e, 0x83, 0xa9, 0xcb, 0x34, 0xc3, 0x69, 0xe5, 0xfa, 0xcc, 0x4d, 0xd3, 0xba, 0xff, 0x88, - 0xdf, 0x74, 0x90, 0x67, 0x98, 0x5d, 0xf7, 0xb4, 0x4a, 0xdf, 0xb0, 0x47, 0xf8, 0xda, 0x0c, 0xc8, - 0x11, 0x22, 0x5a, 0x19, 0x64, 0xdb, 0x76, 0x07, 0x91, 0xe2, 0xe7, 0x6f, 0xbb, 0x55, 0xbe, 0xf8, - 0x85, 0xb2, 0xdd, 0x41, 0x3a, 0xf9, 0x58, 0xbb, 0x1e, 0xcc, 0xf8, 0x62, 0x09, 0xd9, 0xe0, 0x93, - 0xce, 0xde, 0x06, 0xb2, 0x38, 0xbf, 0x56, 0x00, 0xd9, 0xfa, 0x46, 0xad, 0x56, 0x3c, 0xa6, 0x9d, - 0x00, 0x73, 0x1b, 0xf5, 0x7b, 0xea, 0x8d, 0xf3, 0xf5, 0xcd, 0x8a, 0xae, 0x37, 0xf4, 0x62, 0x46, - 0x9b, 0x03, 0xd3, 0x8b, 0xa5, 0xa5, 0xcd, 0x6a, 0x7d, 0x7d, 0xa3, 0x55, 0x54, 0xe0, 0x2b, 0x55, - 0x30, 0xdf, 0x44, 0xde, 0x12, 0xba, 0x6c, 0xb6, 0x51, 0xd3, 0x33, 0x3c, 0x04, 0x5f, 0x94, 0x09, - 0x84, 0xa9, 0x6d, 0xe0, 0x42, 0x83, 0x57, 0xac, 0x02, 0x8f, 0x3d, 0x50, 0x01, 0x91, 0xc2, 0x02, - 0xfb, 0x7a, 0x81, 0x4b, 0xd3, 0x79, 0x3a, 0x67, 0x1f, 0x05, 0x66, 0xb8, 0x77, 0xda, 0x3c, 0x00, - 0x8b, 0xa5, 0xf2, 0x3d, 0x2b, 0x7a, 0x63, 0xa3, 0xbe, 0x54, 0x3c, 0x86, 0x9f, 0x97, 0x1b, 0x7a, - 0x85, 0x3d, 0x67, 0xe0, 0x77, 0x32, 0x1c, 0x98, 0x4b, 0x22, 0x98, 0x0b, 0xc3, 0x99, 0x19, 0x00, - 0x28, 0x7c, 0x43, 0x00, 0xce, 0x8a, 0x00, 0xce, 0x63, 0x93, 0x91, 0x4b, 0x1f, 0xa0, 0xe7, 0x28, - 0xa0, 0xd0, 0xdc, 0xd9, 0xf3, 0x3a, 0xf6, 0x15, 0x0b, 0x4e, 0x07, 0xc8, 0xc0, 0xbf, 0xe5, 0x65, - 0xf2, 0x64, 0x51, 0x26, 0x37, 0x1d, 0xac, 0x04, 0xa3, 0x10, 0x21, 0x8d, 0x57, 0x07, 0xd2, 0x28, - 0x09, 0xd2, 0x78, 0x94, 0x2c, 0xa1, 0xf4, 0xe5, 0xf0, 0xcf, 0x8b, 0x20, 0xd7, 0xec, 0x19, 0x6d, - 0x04, 0x7f, 0x47, 0x05, 0xb3, 0x35, 0x64, 0x5c, 0x46, 0xa5, 0x5e, 0xcf, 0xb1, 0x2f, 0x23, 0x58, - 0x0e, 0xf5, 0xf5, 0x34, 0x98, 0x72, 0x71, 0xa6, 0x6a, 0x87, 0xd4, 0x60, 0x5a, 0xf7, 0x1f, 0xb5, - 0x33, 0x00, 0x98, 0x1d, 0x64, 0x79, 0xa6, 0x67, 0x22, 0xf7, 0xb4, 0x72, 0xbd, 0x7a, 0xd3, 0xb4, - 0xce, 0xa5, 0xc0, 0x6f, 0x29, 0xb2, 0x3a, 0x46, 0xb8, 0x58, 0xe0, 0x39, 0x88, 0x90, 0xea, 0xeb, - 0x14, 0x19, 0x1d, 0x1b, 0x4a, 0x2e, 0x99, 0x6c, 0xdf, 0x96, 0x49, 0x2e, 0x5c, 0x9c, 0xa3, 0xde, - 0xd8, 0x6c, 0x6e, 0x94, 0x57, 0x37, 0x9b, 0xeb, 0xa5, 0x72, 0xa5, 0x88, 0xb4, 0x93, 0xa0, 0x48, - 0xfe, 0x6e, 0x56, 0x9b, 0x9b, 0x4b, 0x95, 0x5a, 0xa5, 0x55, 0x59, 0x2a, 0x6e, 0x69, 0x1a, 0x98, - 0xd7, 0x2b, 0x4f, 0xdd, 0xa8, 0x34, 0x5b, 0x9b, 0xcb, 0xa5, 0x6a, 0xad, 0xb2, 0x54, 0xdc, 0xc6, - 0x1f, 0xd7, 0xaa, 0x6b, 0xd5, 0xd6, 0xa6, 0x5e, 0x29, 0x95, 0x57, 0x2b, 0x4b, 0xc5, 0x1d, 0xed, - 0x41, 0xe0, 0xaa, 0x7a, 0x63, 0xb3, 0xb4, 0xbe, 0xae, 0x37, 0xce, 0x55, 0x36, 0xd9, 0x17, 0xcd, - 0xa2, 0x49, 0x0b, 0x6a, 0x6d, 0x36, 0x57, 0x4b, 0x7a, 0xa5, 0xb4, 0x58, 0xab, 0x14, 0xef, 0x85, - 0xcf, 0x56, 0xc1, 0xdc, 0x9a, 0x71, 0x09, 0x35, 0x77, 0x0c, 0x07, 0x19, 0x17, 0xbb, 0x08, 0x3e, - 0x4c, 0x02, 0x4f, 0xf8, 0x3b, 0x3c, 0x5e, 0x15, 0x11, 0xaf, 0x5b, 0x07, 0x08, 0x58, 0x28, 0x22, - 0x02, 0xb0, 0x7f, 0x0e, 0x9a, 0xc1, 0xaa, 0x00, 0xd8, 0xe3, 0x12, 0xd2, 0x4b, 0x86, 0xd8, 0x8f, - 0x3e, 0x00, 0x10, 0x83, 0x7f, 0xa0, 0x82, 0xd9, 0xaa, 0x75, 0xd9, 0xf4, 0x50, 0x79, 0xc7, 0xb0, - 0xb6, 0x11, 0xec, 0xca, 0x34, 0xaa, 0x15, 0x30, 0xd3, 0x43, 0xce, 0xae, 0xe9, 0xe2, 0xb1, 0xcb, - 0x25, 0x95, 0x9b, 0xbf, 0xed, 0xe1, 0x81, 0xb4, 0x88, 0xad, 0xb0, 0xb0, 0x6e, 0x38, 0x9e, 0xd9, - 0x36, 0x7b, 0x86, 0xe5, 0xad, 0x87, 0x99, 0x75, 0xfe, 0x4b, 0xf8, 0x87, 0x09, 0x5b, 0x1f, 0xcf, - 0x6a, 0x04, 0x98, 0xff, 0x91, 0x91, 0x6f, 0x7d, 0x31, 0xe4, 0x92, 0x61, 0xf9, 0xe3, 0x13, 0xc7, - 0xf2, 0x1a, 0x70, 0x75, 0xb5, 0x5e, 0x6e, 0xe8, 0x7a, 0xa5, 0xdc, 0xda, 0x5c, 0xaf, 0xe8, 0x6b, - 0xd5, 0x66, 0xb3, 0xda, 0xa8, 0x37, 0x8b, 0x26, 0xfc, 0x7a, 0x0e, 0xcc, 0xd3, 0x9a, 0xad, 0x20, - 0x0b, 0x39, 0x78, 0x6c, 0x7f, 0x63, 0x46, 0x06, 0xd6, 0xdb, 0x01, 0x30, 0xc9, 0x77, 0xad, 0xfd, - 0x1e, 0x62, 0xa8, 0x5e, 0xd3, 0x87, 0x6a, 0x35, 0xc8, 0xa0, 0x73, 0x99, 0xfb, 0x35, 0x42, 0x1d, - 0x59, 0x23, 0xde, 0x94, 0xe5, 0x34, 0x62, 0x59, 0xd4, 0x88, 0x47, 0x47, 0x42, 0xe8, 0x57, 0x34, - 0xc2, 0x8c, 0xbb, 0x0e, 0x4c, 0x53, 0x5e, 0xcb, 0x66, 0x87, 0xc1, 0x17, 0x26, 0x68, 0x37, 0x80, - 0x39, 0xfa, 0xb0, 0x6c, 0x76, 0xd1, 0x3d, 0x68, 0x9f, 0x19, 0x74, 0x62, 0x62, 0x9f, 0x70, 0xb2, - 0x87, 0x10, 0x4e, 0x6e, 0x64, 0xe1, 0xfc, 0x44, 0x30, 0xb2, 0x54, 0x05, 0xdd, 0xfe, 0xfe, 0xa4, - 0x82, 0x49, 0xa6, 0xdd, 0x2f, 0x79, 0x20, 0x8c, 0x2d, 0x07, 0x86, 0x10, 0x13, 0x7e, 0x57, 0x01, - 0x33, 0x4d, 0xcf, 0xee, 0xe1, 0xfe, 0xd8, 0xb4, 0xb6, 0xe5, 0x06, 0x90, 0x4f, 0xf3, 0x5d, 0x4e, - 0x59, 0x54, 0xb0, 0x47, 0x0d, 0x90, 0x23, 0x57, 0x40, 0x44, 0x8f, 0xf3, 0xad, 0xa0, 0xc7, 0x59, - 0x16, 0x50, 0xb9, 0x2d, 0x11, 0xb5, 0xef, 0xc1, 0xc1, 0xe3, 0x65, 0x59, 0x50, 0xf4, 0xd5, 0xcc, - 0x2b, 0xef, 0x39, 0x0e, 0xb2, 0x3c, 0x39, 0x10, 0xfe, 0x4c, 0xe5, 0x40, 0x58, 0x15, 0x41, 0xb8, - 0x2d, 0x46, 0x99, 0xfd, 0x52, 0xfe, 0x93, 0xb7, 0xf3, 0x8f, 0x05, 0x1a, 0x75, 0x8f, 0xa0, 0x51, - 0x3f, 0x90, 0x5c, 0x34, 0xc9, 0xd4, 0x6a, 0x75, 0x04, 0xad, 0x3a, 0x09, 0x8a, 0xd8, 0xe8, 0x2b, - 0xb7, 0xaa, 0xe7, 0x2a, 0x9b, 0xd5, 0xfa, 0xb9, 0x6a, 0xab, 0x52, 0x44, 0xf0, 0xc5, 0x6a, 0x38, - 0x08, 0x79, 0x2b, 0x64, 0xea, 0x22, 0xa5, 0x19, 0x5f, 0x54, 0x46, 0xeb, 0xff, 0x69, 0x19, 0xe9, - 0xe9, 0x05, 0x87, 0x89, 0x7c, 0xdf, 0x3b, 0x90, 0xa9, 0x64, 0x88, 0xdc, 0x3d, 0x02, 0x22, 0xa7, - 0x80, 0x56, 0xad, 0x9f, 0x2b, 0xd5, 0xaa, 0x4b, 0xb4, 0x9d, 0x6f, 0xb6, 0x2e, 0xac, 0x63, 0x4c, - 0x7e, 0x26, 0x30, 0xf6, 0x74, 0x74, 0xd9, 0xbe, 0x24, 0x69, 0x71, 0x7f, 0x65, 0x24, 0x1b, 0x8d, - 0x96, 0x10, 0xd1, 0x63, 0xfe, 0xb8, 0x92, 0xd4, 0x46, 0x1b, 0x48, 0xee, 0x81, 0x34, 0x8a, 0x1d, - 0xe8, 0x1e, 0xb7, 0x07, 0xf4, 0xa2, 0x03, 0x47, 0xb1, 0x7f, 0xcf, 0x02, 0x40, 0x2b, 0x79, 0xce, - 0x44, 0x57, 0xe0, 0x5a, 0x88, 0x89, 0xa0, 0xb6, 0x99, 0xa1, 0x6a, 0xab, 0x0c, 0x52, 0xdb, 0x57, - 0xf3, 0xf6, 0xd4, 0xa2, 0x88, 0xde, 0x2d, 0x91, 0xe2, 0xc6, 0x9c, 0x44, 0x2f, 0x89, 0xf9, 0x8a, - 0xa2, 0x88, 0xe6, 0xe3, 0x75, 0x60, 0x9a, 0xfc, 0xad, 0x1b, 0xbb, 0x88, 0xb5, 0xa1, 0x30, 0x41, - 0x3b, 0x0b, 0x66, 0x69, 0xc6, 0xb6, 0x6d, 0xe1, 0xfa, 0x64, 0x49, 0x06, 0x21, 0x0d, 0x83, 0xd8, - 0x76, 0x90, 0xe1, 0xd9, 0x0e, 0xa1, 0x91, 0xa3, 0x20, 0x72, 0x49, 0xda, 0x2d, 0xe0, 0x84, 0xe9, - 0x92, 0x56, 0xb5, 0xe1, 0x22, 0x87, 0x32, 0x7b, 0x3a, 0x7f, 0x7d, 0xe6, 0xa6, 0x82, 0x7e, 0xf0, - 0x45, 0x5f, 0x5f, 0x3e, 0x95, 0xa0, 0x2f, 0x87, 0xdf, 0x08, 0x9a, 0x7b, 0x45, 0x50, 0xd1, 0xc7, - 0x24, 0x91, 0x59, 0x32, 0x05, 0xbd, 0x3c, 0x5a, 0xe7, 0x4b, 0xbb, 0xdc, 0x4d, 0xac, 0x56, 0xcb, - 0x64, 0xe1, 0x0c, 0xb1, 0x0e, 0x00, 0xa7, 0xe2, 0xbc, 0xe5, 0x46, 0xbd, 0x55, 0xa9, 0xb7, 0x8a, - 0x5b, 0x03, 0x55, 0x77, 0x1b, 0xbe, 0x2e, 0x0b, 0xb2, 0x77, 0xdb, 0xa6, 0x05, 0x9f, 0x93, 0x11, - 0x74, 0xcf, 0x42, 0xde, 0x15, 0xdb, 0xb9, 0x14, 0xf4, 0x08, 0x61, 0x42, 0xbc, 0x12, 0x84, 0x3a, - 0xab, 0x0e, 0xd5, 0xd9, 0xec, 0x20, 0x9d, 0xfd, 0x69, 0xde, 0x3a, 0xb8, 0x53, 0xd4, 0xd9, 0x1b, - 0x07, 0xc8, 0x1f, 0x33, 0x1f, 0xd1, 0xd3, 0x7c, 0x2a, 0xe8, 0x69, 0xee, 0x12, 0x60, 0x7c, 0xa4, - 0x1c, 0x99, 0x64, 0x00, 0x7e, 0x29, 0xd5, 0x1e, 0x66, 0x10, 0xd4, 0xdb, 0x11, 0x50, 0xef, 0x0c, - 0xe8, 0x7c, 0xcc, 0x83, 0x7d, 0xd4, 0xbd, 0x07, 0xfb, 0xa3, 0x4b, 0xda, 0xd5, 0xe0, 0xc4, 0x52, - 0x75, 0x79, 0xb9, 0xa2, 0x57, 0xea, 0xad, 0xcd, 0x7a, 0xa5, 0x75, 0xbe, 0xa1, 0xdf, 0x53, 0xec, - 0xc2, 0xd7, 0xaa, 0x00, 0x60, 0x09, 0x95, 0x0d, 0xab, 0x8d, 0xba, 0x72, 0x43, 0xc7, 0xdf, 0x29, - 0xc9, 0x3a, 0x9f, 0x90, 0x7e, 0x04, 0x9c, 0xaf, 0x50, 0xe4, 0x5b, 0x65, 0x24, 0xb1, 0x64, 0xa0, - 0xbe, 0xf9, 0x81, 0x30, 0xf9, 0xb9, 0x0a, 0x1c, 0xf7, 0xe9, 0xb1, 0xec, 0x83, 0x17, 0xd5, 0xde, - 0x9e, 0x05, 0xf3, 0x0c, 0x16, 0x7f, 0x95, 0xf4, 0x7e, 0xa9, 0xa9, 0x3f, 0x04, 0x05, 0xb6, 0x28, - 0xea, 0x8f, 0x23, 0xc1, 0xf3, 0xf8, 0xe6, 0xf6, 0x2f, 0x56, 0x93, 0xd9, 0x76, 0x62, 0x4d, 0x22, - 0x54, 0xe2, 0xd7, 0x12, 0xcc, 0x89, 0x63, 0x09, 0x26, 0x53, 0x8b, 0x4f, 0xa6, 0xaa, 0x16, 0x03, - 0xf0, 0x8e, 0x59, 0xf2, 0x39, 0x44, 0x6b, 0x87, 0x9f, 0x51, 0x03, 0x8d, 0x59, 0x42, 0xed, 0xae, - 0x69, 0x21, 0x78, 0xd7, 0x21, 0x15, 0x46, 0x5c, 0x53, 0x97, 0xc7, 0x99, 0x95, 0x1f, 0x81, 0xf3, - 0x6b, 0x92, 0xe3, 0x3c, 0x98, 0xe0, 0x7f, 0xe2, 0xe6, 0xff, 0x15, 0x15, 0x9c, 0xe0, 0x1a, 0xa2, - 0x8e, 0x76, 0xc7, 0xb6, 0x4f, 0xf2, 0xa3, 0x7c, 0xdb, 0xad, 0x8a, 0x98, 0x0e, 0x32, 0xdb, 0x0f, - 0xb0, 0x11, 0x01, 0xeb, 0x9b, 0x03, 0x58, 0x6b, 0x02, 0xac, 0x4f, 0x18, 0x81, 0x66, 0x32, 0x64, - 0xdf, 0x91, 0x2a, 0xb2, 0xd7, 0x80, 0xab, 0xd7, 0x4b, 0x7a, 0xab, 0x5a, 0xae, 0xae, 0x97, 0xf0, - 0x38, 0xca, 0x0d, 0xd9, 0x11, 0xf3, 0x02, 0x11, 0xf4, 0x81, 0xf8, 0x7e, 0x34, 0x0b, 0xae, 0x1b, - 0xdc, 0xd1, 0xb2, 0xd5, 0x7b, 0x53, 0x06, 0xea, 0x25, 0x30, 0xd5, 0x26, 0xd9, 0x29, 0xce, 0xfc, - 0xc6, 0x78, 0x4c, 0x5f, 0x4e, 0x4b, 0xd0, 0xfd, 0x4f, 0xe1, 0xbb, 0x79, 0x85, 0x68, 0x89, 0x0a, - 0xf1, 0xe4, 0x78, 0xf0, 0x0e, 0xf0, 0x1d, 0xa1, 0x1b, 0x9f, 0x0d, 0x74, 0xe3, 0xbc, 0xa0, 0x1b, - 0xe5, 0xc3, 0x91, 0x4f, 0xa6, 0x26, 0xbf, 0xfd, 0x40, 0xe8, 0x00, 0x22, 0xb5, 0xc9, 0x8c, 0x1e, - 0x15, 0x06, 0x76, 0xf7, 0xaf, 0x52, 0x41, 0x7e, 0x09, 0x75, 0x91, 0x27, 0x39, 0xf9, 0xff, 0x7b, - 0x45, 0x76, 0xbb, 0x99, 0xc2, 0x40, 0x69, 0x47, 0x2f, 0xc3, 0x78, 0xe6, 0x2e, 0x72, 0x3d, 0x63, - 0xb7, 0x47, 0x44, 0xad, 0xea, 0x61, 0x02, 0xfc, 0x31, 0x45, 0x66, 0x33, 0x3a, 0xa6, 0x98, 0xff, - 0x1c, 0x8b, 0xda, 0x9f, 0x53, 0x40, 0xa1, 0x89, 0xbc, 0x86, 0xd3, 0x41, 0x0e, 0x6c, 0x86, 0x18, - 0x5d, 0x0f, 0x66, 0x08, 0x28, 0x78, 0x9a, 0x19, 0xe0, 0xc4, 0x27, 0x69, 0x37, 0x82, 0xf9, 0xe0, - 0x91, 0x7c, 0xce, 0xba, 0xf1, 0xbe, 0x54, 0xf8, 0xcd, 0x8c, 0xac, 0x8f, 0x0c, 0x5b, 0xb3, 0x66, - 0xdc, 0x44, 0xb4, 0x52, 0x39, 0x7f, 0x97, 0x58, 0x52, 0xe9, 0xbb, 0x11, 0xbc, 0x53, 0x01, 0x60, - 0xc3, 0x72, 0x7d, 0xb9, 0x3e, 0x32, 0x81, 0x5c, 0xe1, 0x3f, 0x65, 0x92, 0xcd, 0x62, 0xc2, 0x72, - 0x22, 0x24, 0xf6, 0x4b, 0x09, 0xd6, 0x16, 0x22, 0x89, 0xa5, 0x2f, 0xb3, 0x2f, 0x1c, 0x07, 0xf9, - 0xf3, 0x46, 0xb7, 0x8b, 0x3c, 0xf8, 0x4a, 0x15, 0xe4, 0xcb, 0x0e, 0x32, 0x3c, 0x04, 0x51, 0x28, - 0x3a, 0x08, 0x0a, 0x8e, 0x6d, 0x7b, 0xeb, 0x86, 0xb7, 0xc3, 0xe4, 0x16, 0x3c, 0x6b, 0x4f, 0x00, - 0x0f, 0xda, 0xda, 0xeb, 0x76, 0x3d, 0x74, 0x9f, 0xb7, 0xee, 0x98, 0xbb, 0x86, 0xb3, 0x5f, 0x33, - 0xac, 0xed, 0x3d, 0x63, 0x1b, 0x31, 0xf6, 0xa2, 0x5e, 0x33, 0x47, 0xae, 0x5f, 0xe1, 0x3b, 0x9e, - 0xbb, 0x44, 0xa1, 0x7f, 0x9f, 0x20, 0x27, 0xca, 0xe2, 0x02, 0x65, 0x2f, 0xa2, 0xe7, 0x81, 0xa0, - 0xb0, 0x6b, 0xa1, 0x5d, 0xdb, 0x32, 0xdb, 0xbe, 0xb5, 0xea, 0x3f, 0xc3, 0x8f, 0x07, 0x68, 0x2c, - 0x0a, 0x68, 0x2c, 0x48, 0x97, 0x92, 0x0c, 0x8a, 0xe6, 0x08, 0xfd, 0xce, 0x43, 0xc0, 0xb5, 0xb4, - 0x1b, 0xd9, 0x6c, 0x35, 0x36, 0xcb, 0x7a, 0xa5, 0xd4, 0xaa, 0x6c, 0xd6, 0x1a, 0xe5, 0x52, 0x6d, - 0x53, 0xaf, 0xac, 0x37, 0x8a, 0x08, 0xcf, 0xce, 0xa7, 0x74, 0xd4, 0xb6, 0x2f, 0x23, 0x07, 0x3e, - 0x2b, 0x23, 0x07, 0x51, 0x8c, 0x50, 0xe2, 0xe0, 0x53, 0x65, 0xe0, 0xfb, 0x69, 0x69, 0x3f, 0x3c, - 0x26, 0x58, 0xc6, 0x7c, 0x44, 0x8b, 0xf9, 0x0d, 0xa9, 0x3e, 0x26, 0x96, 0xd4, 0x03, 0x00, 0xa4, - 0x7f, 0x54, 0xc0, 0x54, 0xd9, 0xb6, 0x2e, 0x23, 0xc7, 0xe3, 0x27, 0x59, 0x3c, 0x0e, 0x99, 0x3e, - 0x1c, 0x4e, 0x83, 0x29, 0x64, 0x79, 0x8e, 0xdd, 0xf3, 0x67, 0x59, 0xfe, 0x23, 0x7c, 0x63, 0x52, - 0x09, 0xb3, 0x92, 0xa3, 0x97, 0x75, 0x07, 0x17, 0x24, 0xb0, 0xa7, 0xf6, 0xb5, 0x9d, 0xd7, 0x26, - 0xc1, 0x65, 0x30, 0x03, 0xe9, 0xf7, 0x63, 0x5f, 0x55, 0xc1, 0x1c, 0x6d, 0xb7, 0x4d, 0x44, 0xcc, - 0x42, 0xd8, 0xe0, 0xd7, 0x39, 0xfb, 0x84, 0xbf, 0x7a, 0x4c, 0x10, 0x7f, 0xde, 0xe8, 0xf5, 0x82, - 0xc5, 0xf5, 0xd5, 0x63, 0x3a, 0x7b, 0xa6, 0x6a, 0xbe, 0x98, 0x07, 0x59, 0x63, 0xcf, 0xdb, 0x81, - 0xdf, 0x95, 0x9e, 0xf1, 0x0a, 0xfd, 0x08, 0xe3, 0x27, 0x02, 0x92, 0x93, 0x20, 0xe7, 0xd9, 0x97, - 0x90, 0x2f, 0x07, 0xfa, 0x80, 0xe1, 0x30, 0x7a, 0xbd, 0x16, 0x79, 0xc1, 0xe0, 0xf0, 0x9f, 0xb1, - 0x81, 0x65, 0xb4, 0xdb, 0xf6, 0x9e, 0xe5, 0x55, 0xfd, 0x05, 0xf6, 0x30, 0x01, 0x7e, 0x41, 0x6a, - 0x07, 0x4b, 0x82, 0xc1, 0x64, 0x90, 0x5d, 0x1c, 0xa1, 0x29, 0x2d, 0x80, 0x9b, 0x4b, 0xeb, 0xeb, - 0x9b, 0xad, 0xc6, 0x3d, 0x95, 0x7a, 0x68, 0xed, 0x6e, 0x56, 0xeb, 0x9b, 0xad, 0xd5, 0xca, 0x66, - 0x79, 0x43, 0x27, 0x8b, 0x93, 0xa5, 0x72, 0xb9, 0xb1, 0x51, 0x6f, 0x15, 0x11, 0x7c, 0xab, 0x02, - 0x66, 0xcb, 0x5d, 0xdb, 0x0d, 0x10, 0x7e, 0x48, 0x88, 0x70, 0x20, 0xc6, 0x0c, 0x27, 0x46, 0xf8, - 0xaf, 0x19, 0x59, 0x3f, 0x32, 0x5f, 0x20, 0x1c, 0xf9, 0x88, 0x5e, 0xea, 0x8d, 0x52, 0x7e, 0x64, - 0xc3, 0xe9, 0xa5, 0xdf, 0x24, 0x7e, 0xbd, 0x01, 0xa6, 0x4a, 0x54, 0x31, 0xe0, 0x9f, 0x65, 0x40, - 0xbe, 0x6c, 0x5b, 0x5b, 0xe6, 0x36, 0xb6, 0x20, 0x91, 0x65, 0x5c, 0xec, 0xa2, 0x25, 0xc3, 0x33, - 0x2e, 0x9b, 0xe8, 0x0a, 0xa9, 0x40, 0x41, 0xef, 0x4b, 0xc5, 0x4c, 0xb1, 0x14, 0x74, 0x71, 0x6f, - 0x9b, 0x30, 0x55, 0xd0, 0xf9, 0x24, 0x3c, 0x7e, 0xd0, 0xc7, 0x75, 0x07, 0x39, 0xa8, 0x8b, 0x0c, - 0x97, 0xb8, 0x59, 0x59, 0xa8, 0x4b, 0x94, 0xb6, 0xa0, 0x47, 0xbd, 0xd6, 0xce, 0x82, 0x59, 0xfa, - 0x8a, 0xd8, 0x3f, 0x2e, 0x51, 0xe3, 0x82, 0x2e, 0xa4, 0x69, 0x8f, 0x02, 0x39, 0x74, 0x9f, 0xe7, - 0x18, 0xa7, 0x3b, 0x04, 0xaf, 0x07, 0x2d, 0x50, 0x47, 0xf2, 0x05, 0xdf, 0x91, 0x7c, 0xa1, 0x49, - 0xdc, 0xcc, 0x75, 0x9a, 0x0b, 0xfe, 0x9f, 0x42, 0x60, 0xbd, 0x7c, 0x4e, 0x0d, 0x15, 0x43, 0x03, - 0x59, 0xcb, 0xd8, 0x45, 0x4c, 0x2f, 0xc8, 0x7f, 0xed, 0x66, 0x70, 0xdc, 0xb8, 0x6c, 0x78, 0x86, - 0x53, 0xb3, 0xdb, 0x46, 0x97, 0x0c, 0x9b, 0x7e, 0xcb, 0xef, 0x7f, 0x41, 0xf6, 0xbb, 0x3c, 0xdb, - 0x41, 0x24, 0x97, 0xbf, 0xdf, 0xe5, 0x27, 0x60, 0xea, 0x66, 0xdb, 0xb6, 0x08, 0xff, 0xaa, 0x4e, - 0xfe, 0x63, 0xa9, 0x74, 0x4c, 0x17, 0x57, 0x84, 0x50, 0xa9, 0xd3, 0xfd, 0x94, 0xe6, 0xbe, 0xd5, - 0x26, 0x7b, 0x5d, 0x05, 0x3d, 0xea, 0xb5, 0xb6, 0x08, 0x66, 0xd8, 0xee, 0xcb, 0x1a, 0xd6, 0xab, - 0x3c, 0xd1, 0xab, 0xeb, 0x45, 0x37, 0x5d, 0x8a, 0xe7, 0x42, 0x3d, 0xcc, 0xa7, 0xf3, 0x1f, 0x69, - 0x4f, 0x01, 0xd7, 0xb2, 0xc7, 0xf2, 0x9e, 0xeb, 0xd9, 0xbb, 0x14, 0xf4, 0x65, 0xb3, 0x4b, 0x6b, - 0x30, 0x45, 0x6a, 0x10, 0x97, 0x45, 0xbb, 0x0d, 0x9c, 0xec, 0x39, 0x68, 0x0b, 0x39, 0x17, 0x8c, - 0xdd, 0xbd, 0xfb, 0x5a, 0x8e, 0x61, 0xb9, 0x3d, 0xdb, 0xf1, 0x4e, 0x17, 0x08, 0xf3, 0x03, 0xdf, - 0x69, 0xb7, 0x80, 0x13, 0xf7, 0xba, 0xb6, 0x55, 0xea, 0x99, 0x35, 0xd3, 0xf5, 0x90, 0x55, 0xea, - 0x74, 0x9c, 0xd3, 0xd3, 0xa4, 0xac, 0x83, 0x2f, 0xb4, 0x1b, 0xc0, 0xdc, 0xbd, 0xb6, 0x69, 0x35, - 0x3d, 0x07, 0x19, 0xbb, 0x1b, 0x4e, 0xf7, 0x34, 0xa0, 0x1b, 0x44, 0x42, 0x22, 0xeb, 0x7c, 0x0b, - 0x20, 0x4f, 0x21, 0x81, 0x2f, 0xca, 0x49, 0x7b, 0xfd, 0x33, 0x21, 0xc5, 0x5a, 0x8b, 0x8f, 0x06, - 0x53, 0xac, 0xd7, 0x24, 0xe0, 0xcf, 0xdc, 0x76, 0xaa, 0x6f, 0x81, 0x84, 0x51, 0xd1, 0xfd, 0x6c, - 0xda, 0x63, 0x41, 0xbe, 0x4d, 0x44, 0x45, 0xf4, 0x60, 0xe6, 0xb6, 0x6b, 0x07, 0x17, 0x4a, 0xb2, - 0xe8, 0x2c, 0x2b, 0xfc, 0xa2, 0x2a, 0x75, 0x50, 0x20, 0x8e, 0xe3, 0x64, 0x3d, 0xc5, 0x37, 0x94, - 0x11, 0xba, 0xe2, 0x5b, 0xc0, 0x4d, 0xac, 0x9f, 0x65, 0x36, 0xcd, 0xd2, 0xe6, 0xe2, 0x86, 0x3f, - 0xab, 0xc5, 0x96, 0x4e, 0xb3, 0x55, 0xd2, 0x5b, 0x9b, 0xf5, 0xc6, 0x12, 0x9e, 0x0d, 0xdf, 0x0c, - 0x6e, 0x1c, 0x92, 0xbb, 0xd2, 0xda, 0xac, 0x97, 0xd6, 0x2a, 0xc5, 0x2d, 0xd1, 0x5e, 0x6a, 0xb6, - 0x1a, 0xeb, 0x9b, 0xfa, 0x46, 0xbd, 0x5e, 0xad, 0xaf, 0x50, 0x62, 0xd8, 0x40, 0x3d, 0x15, 0x66, - 0x38, 0xaf, 0x57, 0x5b, 0x95, 0xcd, 0x72, 0xa3, 0xbe, 0x5c, 0x5d, 0x29, 0x9a, 0xc3, 0x8c, 0xad, - 0x7b, 0xb5, 0xeb, 0xc1, 0x75, 0x02, 0x27, 0xd5, 0x46, 0x1d, 0x4f, 0xd1, 0xcb, 0xa5, 0x7a, 0xb9, - 0x82, 0xe7, 0xe3, 0x97, 0x34, 0x08, 0xae, 0xa6, 0xe4, 0x36, 0x97, 0xab, 0x35, 0x7e, 0x57, 0xed, - 0xd3, 0x19, 0xed, 0x34, 0xb8, 0x8a, 0x7f, 0xc7, 0xdc, 0x29, 0x8a, 0xbf, 0x95, 0xd1, 0x6e, 0x00, - 0x0f, 0x11, 0xbe, 0xa2, 0x1b, 0x64, 0x9b, 0xd5, 0xa5, 0xcd, 0xb5, 0x6a, 0x73, 0xad, 0xd4, 0x2a, - 0xaf, 0x16, 0x3f, 0x43, 0xa6, 0x2f, 0x81, 0x3d, 0xce, 0x79, 0xef, 0xbf, 0x84, 0xb7, 0x13, 0x4a, - 0xa2, 0xa2, 0x3e, 0x72, 0x20, 0xec, 0xf1, 0x76, 0xf1, 0x27, 0x83, 0x11, 0x67, 0x49, 0x50, 0xa1, - 0x47, 0x27, 0xa0, 0x95, 0x4c, 0x87, 0x5a, 0x23, 0xa8, 0xd0, 0xf5, 0xe0, 0xba, 0x7a, 0x85, 0x22, - 0xa5, 0x57, 0xca, 0x8d, 0x73, 0x15, 0x7d, 0xf3, 0x7c, 0xa9, 0x56, 0xab, 0xb4, 0x36, 0x97, 0xab, - 0x7a, 0xb3, 0x55, 0xdc, 0x82, 0xff, 0xa4, 0x04, 0xcb, 0x52, 0x9c, 0xb4, 0xfe, 0x4c, 0x49, 0xda, - 0xac, 0x63, 0x97, 0x9f, 0xbe, 0x1f, 0xe4, 0x5d, 0xcf, 0xf0, 0xf6, 0x5c, 0xd6, 0xaa, 0x1f, 0x3c, - 0xb8, 0x55, 0x2f, 0x34, 0x49, 0x26, 0x9d, 0x65, 0x86, 0x5f, 0xcc, 0x24, 0x69, 0xa6, 0x63, 0x58, - 0x99, 0x32, 0x47, 0x10, 0xf1, 0x19, 0x00, 0x7d, 0x6d, 0xaf, 0x36, 0x37, 0x4b, 0x35, 0xbd, 0x52, - 0x5a, 0xba, 0x10, 0xac, 0x47, 0x21, 0xed, 0x6a, 0x70, 0x62, 0xa3, 0x5e, 0x5a, 0xac, 0x55, 0x48, - 0x73, 0x69, 0xd4, 0xeb, 0x95, 0x32, 0x96, 0xfb, 0x8f, 0x91, 0xdd, 0x1f, 0x6c, 0x95, 0x13, 0xbe, - 0xb1, 0xe5, 0xc4, 0xc9, 0xff, 0xeb, 0x8a, 0xac, 0x97, 0x5e, 0xa8, 0x61, 0x3c, 0xad, 0xf1, 0xe2, - 0xf0, 0x05, 0x29, 0xa7, 0x38, 0x29, 0x4e, 0x92, 0xe1, 0xf1, 0xc3, 0x23, 0xe0, 0x71, 0x35, 0x38, - 0xc1, 0xe3, 0x41, 0x9c, 0xe3, 0xa2, 0x61, 0xf8, 0xb2, 0x0a, 0xa6, 0xd6, 0xcc, 0x6d, 0xe2, 0xaa, - 0xbd, 0x17, 0x1a, 0x28, 0xf3, 0x40, 0x09, 0x1c, 0x7f, 0x14, 0xb3, 0x23, 0x4c, 0xe6, 0x15, 0xf9, - 0xf5, 0x16, 0xa9, 0x09, 0xfb, 0x17, 0x13, 0xf7, 0x4c, 0x8c, 0xe1, 0x88, 0x9e, 0xe9, 0xf9, 0x4a, - 0x92, 0x9e, 0x69, 0x30, 0xad, 0x44, 0x30, 0x61, 0xd3, 0xc1, 0x41, 0xcf, 0xd8, 0x33, 0x1d, 0xd4, - 0x21, 0x66, 0x22, 0xa9, 0xb7, 0xaa, 0x8b, 0x89, 0x67, 0x9d, 0xc3, 0x81, 0xc9, 0x7b, 0xd9, 0xcc, - 0x82, 0x42, 0x30, 0x9a, 0x90, 0x0d, 0x1f, 0xfc, 0xb2, 0x52, 0x6f, 0x6c, 0xac, 0xac, 0x6e, 0x2e, - 0xeb, 0x95, 0x0a, 0x5b, 0x22, 0xde, 0x86, 0xef, 0x52, 0xc0, 0x1c, 0xab, 0x21, 0xf3, 0x9e, 0x78, - 0x48, 0x24, 0xc8, 0x0c, 0x8e, 0xff, 0xe0, 0xa7, 0x27, 0x2b, 0x22, 0x1c, 0x8f, 0x89, 0x13, 0x61, - 0xac, 0xfb, 0xc4, 0x9b, 0x82, 0x26, 0x74, 0xb7, 0x00, 0xca, 0xe3, 0x13, 0x53, 0x4c, 0x7f, 0x8a, - 0xf2, 0x22, 0x00, 0xf2, 0x4d, 0xd4, 0x45, 0x6d, 0x0f, 0x7e, 0x58, 0x1d, 0xb9, 0x4d, 0x44, 0x99, - 0xdb, 0x6a, 0x22, 0x73, 0x3b, 0x9b, 0x82, 0xb9, 0x9d, 0x1b, 0xdd, 0xdc, 0xce, 0x27, 0x35, 0xb7, - 0xa7, 0xa2, 0xcc, 0xed, 0x98, 0x5e, 0xa3, 0x10, 0xdb, 0x6b, 0xf4, 0x19, 0xea, 0x7a, 0x8d, 0x99, - 0xf4, 0x62, 0x22, 0x53, 0xe6, 0x4f, 0xe4, 0x93, 0x8e, 0xe3, 0x14, 0xf8, 0xa3, 0x35, 0xcf, 0x7f, - 0x32, 0x97, 0x64, 0xdc, 0x1f, 0xc8, 0x71, 0xb2, 0x56, 0xf2, 0x8a, 0x6c, 0x0a, 0x8b, 0x8e, 0xda, - 0xc3, 0xc0, 0x43, 0xc2, 0xe7, 0xcd, 0xca, 0xd3, 0xaa, 0xcd, 0x56, 0x93, 0xd8, 0xe4, 0xe5, 0x86, - 0xae, 0x6f, 0xac, 0xd3, 0xed, 0xaa, 0x53, 0x40, 0x0b, 0xa9, 0xe8, 0x1b, 0x75, 0x6a, 0x81, 0x6f, - 0x8b, 0xd4, 0x97, 0xab, 0xf5, 0xa5, 0xcd, 0x60, 0x54, 0xab, 0x2f, 0x37, 0x8a, 0x3b, 0xda, 0x02, - 0xb8, 0x99, 0xa3, 0x4e, 0x3a, 0x40, 0x5a, 0x42, 0xa9, 0xbe, 0xb4, 0xb9, 0x56, 0xaf, 0xac, 0x35, - 0xea, 0xd5, 0x32, 0x49, 0x6f, 0x56, 0x5a, 0x45, 0x13, 0x9b, 0x82, 0x7d, 0x36, 0x7f, 0xb3, 0x52, - 0xd2, 0xcb, 0xab, 0x15, 0x9d, 0x16, 0x79, 0xaf, 0x76, 0x23, 0x38, 0x5b, 0xaa, 0x37, 0x5a, 0x38, - 0xa5, 0x54, 0xbf, 0xd0, 0xba, 0xb0, 0x5e, 0xd9, 0x5c, 0xd7, 0x1b, 0xe5, 0x4a, 0xb3, 0x89, 0x47, - 0x52, 0x36, 0x43, 0x28, 0x76, 0xb5, 0x27, 0x83, 0x3b, 0x38, 0xd6, 0x2a, 0x2d, 0xe2, 0x1b, 0xb1, - 0xd6, 0x20, 0xee, 0x71, 0x4b, 0x95, 0xcd, 0xd5, 0x52, 0x73, 0xb3, 0x5a, 0x2f, 0x37, 0xd6, 0xd6, - 0x4b, 0xad, 0x2a, 0x1e, 0x70, 0xd7, 0xf5, 0x46, 0xab, 0xb1, 0x79, 0xae, 0xa2, 0x37, 0xab, 0x8d, - 0x7a, 0xd1, 0xc2, 0x55, 0xe6, 0x46, 0x68, 0xdf, 0x52, 0xb2, 0xb5, 0xeb, 0xc0, 0x69, 0x3f, 0xbd, - 0xd6, 0xc0, 0x82, 0xe6, 0xe6, 0x0c, 0x3d, 0xde, 0xce, 0x6a, 0xb6, 0x1a, 0x3a, 0x9d, 0x35, 0xac, - 0x55, 0x57, 0x74, 0x3c, 0xd5, 0x29, 0x3e, 0x23, 0xd5, 0x39, 0xc5, 0xbf, 0x28, 0x20, 0xdb, 0xf4, - 0xec, 0x1e, 0xfc, 0xbe, 0xb0, 0x3b, 0x3c, 0x03, 0x80, 0x43, 0x5c, 0x21, 0x96, 0x0c, 0xcf, 0x60, - 0xab, 0x35, 0x5c, 0x0a, 0xfc, 0x4d, 0xe9, 0xfd, 0xdb, 0xd0, 0xea, 0xb2, 0x7b, 0x11, 0xc3, 0xc7, - 0x77, 0xe4, 0x8e, 0x0b, 0x47, 0x13, 0x9a, 0xc0, 0xa1, 0x3a, 0x08, 0x4e, 0x71, 0xb0, 0x62, 0xf9, - 0xfb, 0x2a, 0x83, 0xb4, 0x07, 0x81, 0xab, 0xfa, 0x94, 0x8f, 0xe8, 0xdc, 0x96, 0xf6, 0x50, 0xf0, - 0x60, 0x4e, 0xfd, 0x2b, 0x6b, 0x8d, 0x73, 0x95, 0x40, 0xd1, 0x97, 0x4a, 0xad, 0x52, 0x71, 0x1b, - 0x7e, 0x4e, 0x05, 0xd9, 0x35, 0xfb, 0x72, 0xff, 0xb6, 0xb9, 0x85, 0xae, 0x70, 0x7b, 0x2b, 0xfe, - 0x23, 0x7c, 0xbd, 0x9a, 0x54, 0xec, 0x6b, 0xd1, 0x2e, 0x32, 0x5f, 0x50, 0x92, 0x88, 0x7d, 0xed, - 0xb0, 0x7e, 0x31, 0x7f, 0x33, 0x8a, 0xd8, 0x23, 0x44, 0x8b, 0xb4, 0xb3, 0xe0, 0x4c, 0xf8, 0xa2, - 0xba, 0x54, 0xa9, 0xb7, 0xaa, 0xcb, 0x17, 0x42, 0xe1, 0x56, 0x75, 0x29, 0xf1, 0x0f, 0xeb, 0xe6, - 0xe2, 0xd7, 0x0a, 0x4e, 0x83, 0x93, 0xe1, 0xbb, 0x95, 0x4a, 0xcb, 0x7f, 0x73, 0x2f, 0x7c, 0x4e, - 0x0e, 0xcc, 0xd2, 0x6e, 0x7f, 0xa3, 0xd7, 0xc1, 0xd6, 0xf7, 0x63, 0x43, 0x74, 0x6f, 0x02, 0xc7, - 0xab, 0xeb, 0xcb, 0xcd, 0xa6, 0x67, 0x3b, 0xc6, 0x36, 0x22, 0xe3, 0x28, 0x95, 0x56, 0x7f, 0x32, - 0x7c, 0xaf, 0xf4, 0xea, 0xbf, 0x38, 0xd4, 0xd0, 0x32, 0x23, 0x50, 0xff, 0xaa, 0xd4, 0x6a, 0xbd, - 0x04, 0xc1, 0x64, 0xe8, 0xdf, 0x3b, 0xe6, 0x36, 0x17, 0x8d, 0xcb, 0xd6, 0xd9, 0xe7, 0x29, 0x60, - 0xba, 0x65, 0xee, 0xa2, 0x67, 0xda, 0x16, 0x72, 0xb5, 0x29, 0xa0, 0xae, 0xac, 0xb5, 0x8a, 0xc7, - 0xf0, 0x1f, 0x3c, 0x2d, 0xca, 0x90, 0x3f, 0x15, 0x5c, 0x00, 0xfe, 0x53, 0x6a, 0x15, 0x55, 0xfc, - 0x67, 0xad, 0xd2, 0x2a, 0x66, 0xf1, 0x9f, 0x7a, 0xa5, 0x55, 0xcc, 0xe1, 0x3f, 0xeb, 0xb5, 0x56, - 0x31, 0x8f, 0xff, 0x54, 0x9b, 0xad, 0xe2, 0x14, 0xfe, 0xb3, 0xd8, 0x6c, 0x15, 0x0b, 0xf8, 0xcf, - 0xb9, 0x66, 0xab, 0x38, 0x8d, 0xff, 0x94, 0x5b, 0xad, 0x22, 0xc0, 0x7f, 0xee, 0x6e, 0xb6, 0x8a, - 0x33, 0xf8, 0x4f, 0xa9, 0xdc, 0x2a, 0xce, 0x92, 0x3f, 0x95, 0x56, 0x71, 0x0e, 0xff, 0x69, 0x36, - 0x5b, 0xc5, 0x79, 0x42, 0xb9, 0xd9, 0x2a, 0x1e, 0x27, 0x65, 0x55, 0x5b, 0xc5, 0x22, 0xfe, 0xb3, - 0xda, 0x6c, 0x15, 0x4f, 0x90, 0xcc, 0xcd, 0x56, 0x51, 0x23, 0x85, 0x36, 0x5b, 0xc5, 0xab, 0x48, - 0x9e, 0x66, 0xab, 0x78, 0x92, 0x14, 0xd1, 0x6c, 0x15, 0xaf, 0x26, 0x6c, 0x54, 0x5a, 0xc5, 0x53, - 0x24, 0x8f, 0xde, 0x2a, 0x3e, 0x88, 0xbc, 0xaa, 0xb7, 0x8a, 0xa7, 0x09, 0x63, 0x95, 0x56, 0xf1, - 0x1a, 0xf2, 0x47, 0x6f, 0x15, 0x21, 0x79, 0x55, 0x6a, 0x15, 0xaf, 0x85, 0x0f, 0x06, 0xd3, 0x2b, - 0xc8, 0xa3, 0x20, 0xc2, 0x22, 0x50, 0x57, 0x90, 0xc7, 0x4f, 0xc4, 0x5f, 0x99, 0x05, 0x0f, 0x62, - 0x8b, 0x37, 0xcb, 0x8e, 0xbd, 0x5b, 0x43, 0xdb, 0x46, 0x7b, 0xbf, 0x72, 0x1f, 0x36, 0xf8, 0xe0, - 0x0b, 0x33, 0xc2, 0x8a, 0x76, 0x2f, 0xec, 0x8d, 0xc8, 0xff, 0x58, 0x03, 0xd9, 0x5f, 0xa3, 0x56, - 0xc5, 0x35, 0xea, 0x28, 0x93, 0x30, 0x2b, 0x33, 0x91, 0xfc, 0x07, 0xbe, 0x31, 0x08, 0x1b, 0x52, - 0x99, 0xbe, 0x0d, 0x29, 0xdc, 0xc2, 0x7a, 0xc8, 0x71, 0x6d, 0xcb, 0xe8, 0x36, 0x99, 0xfb, 0x11, - 0x9d, 0xab, 0xf6, 0x27, 0x6b, 0x4f, 0xf5, 0x1b, 0x15, 0x35, 0xf8, 0x9e, 0x18, 0xb7, 0xbc, 0xd5, - 0x2f, 0xa1, 0x88, 0xf6, 0xf5, 0x99, 0xa0, 0x7d, 0xb5, 0x84, 0xf6, 0xf5, 0x94, 0x43, 0xd0, 0x4e, - 0xd6, 0xd4, 0xaa, 0xa3, 0x4d, 0x45, 0x43, 0xe7, 0x7c, 0x7f, 0xff, 0x4b, 0x85, 0x9f, 0x53, 0xc0, - 0xa9, 0x8a, 0x35, 0x68, 0x2a, 0xc3, 0xab, 0xd1, 0x5b, 0x79, 0x68, 0xd6, 0x45, 0x91, 0xde, 0x31, - 0xb0, 0xda, 0x83, 0x69, 0x46, 0x48, 0xf4, 0xf7, 0x02, 0x89, 0x36, 0x05, 0x89, 0xde, 0x35, 0x3a, - 0xe9, 0x64, 0x02, 0xad, 0x8f, 0xb5, 0xef, 0xca, 0xc2, 0xbf, 0x54, 0xc0, 0x09, 0xea, 0x41, 0x78, - 0x37, 0x9d, 0x39, 0x91, 0xde, 0x5e, 0xb4, 0xbe, 0xba, 0xe1, 0x2c, 0x8b, 0xea, 0x37, 0x97, 0x02, - 0x5f, 0xc7, 0x0b, 0xfc, 0x1e, 0x51, 0xe0, 0x11, 0xfd, 0x78, 0x7f, 0x71, 0x11, 0xb2, 0xfe, 0xad, - 0x40, 0xd6, 0x75, 0x41, 0xd6, 0x77, 0x8c, 0x44, 0xf5, 0x68, 0xc5, 0xfc, 0x8d, 0x2c, 0x78, 0x30, - 0xe5, 0x90, 0x29, 0x02, 0xed, 0x07, 0x4b, 0x56, 0x47, 0x47, 0xae, 0x67, 0x38, 0x9e, 0x10, 0x9a, - 0xa8, 0x6f, 0x6a, 0x9e, 0x49, 0x61, 0x6a, 0xae, 0x0c, 0x9d, 0x9a, 0xc3, 0xf7, 0xf0, 0x06, 0xde, - 0x79, 0x11, 0xd9, 0x52, 0x0c, 0x06, 0x11, 0x35, 0x8c, 0x6a, 0x51, 0x81, 0xe5, 0xf7, 0x83, 0x02, - 0xca, 0xcb, 0x87, 0x2e, 0x21, 0x19, 0xe2, 0xbf, 0x39, 0x5e, 0x4b, 0x3c, 0xcb, 0xbf, 0x13, 0xcd, - 0xc6, 0x62, 0x27, 0xd5, 0x29, 0xd4, 0x73, 0x4f, 0x80, 0x69, 0xd2, 0xe5, 0xd4, 0x4c, 0xeb, 0x12, - 0xfc, 0x0b, 0x15, 0xcc, 0xd6, 0xd1, 0x95, 0xf2, 0x8e, 0xd1, 0xed, 0x22, 0x6b, 0x1b, 0xc1, 0x7b, - 0x05, 0xdb, 0xde, 0xe8, 0xf5, 0xea, 0xe1, 0xfe, 0xb0, 0xff, 0xa8, 0xdd, 0x05, 0x72, 0x6e, 0xdb, - 0x0e, 0x02, 0x64, 0x7c, 0x5f, 0xc4, 0xea, 0x75, 0x69, 0xcf, 0xdb, 0x59, 0x20, 0x65, 0x95, 0x7a, - 0x66, 0x13, 0x7f, 0xa0, 0xd3, 0xef, 0xd8, 0x38, 0xf9, 0xf5, 0x81, 0x9d, 0x71, 0x26, 0xa6, 0x33, - 0x0e, 0x18, 0x5f, 0xe0, 0x99, 0x8e, 0x58, 0x24, 0xb9, 0x1e, 0xcc, 0xb4, 0xfd, 0x2c, 0xc1, 0x29, - 0x3d, 0x3e, 0x09, 0xfe, 0x55, 0xa2, 0xee, 0x5a, 0xaa, 0xf0, 0x64, 0x5a, 0x85, 0xc6, 0x6c, 0x6a, - 0x5e, 0x0d, 0x4e, 0xb4, 0x1a, 0x8d, 0xcd, 0xb5, 0x52, 0xfd, 0x42, 0x18, 0x7b, 0x68, 0x0b, 0xbe, - 0x22, 0x0b, 0xe6, 0x9b, 0x76, 0xf7, 0x32, 0x0a, 0x71, 0xae, 0x0a, 0xee, 0x9f, 0xbc, 0x9c, 0x32, - 0x07, 0xe4, 0xa4, 0x9d, 0x02, 0x79, 0xc3, 0x72, 0xaf, 0x20, 0xdf, 0xfc, 0x67, 0x4f, 0x0c, 0xc6, - 0x8f, 0xf2, 0x1d, 0x81, 0x2e, 0xc2, 0x78, 0xe7, 0x10, 0x49, 0x8a, 0x5c, 0x45, 0x00, 0x79, 0x16, - 0xcc, 0xba, 0xd4, 0x4b, 0xa4, 0xc5, 0x39, 0x03, 0x09, 0x69, 0x84, 0x45, 0xea, 0xa6, 0xa4, 0x32, - 0x16, 0xc9, 0x13, 0x7c, 0x6d, 0xd0, 0x7f, 0x6c, 0x08, 0x10, 0x97, 0x0e, 0xc3, 0x58, 0x32, 0x90, - 0x5f, 0x35, 0xee, 0x49, 0xfc, 0x69, 0x70, 0xd2, 0x3f, 0xdc, 0x5e, 0x5e, 0x2d, 0xd5, 0x6a, 0x95, - 0xfa, 0x4a, 0x65, 0xb3, 0xba, 0x44, 0xf7, 0x93, 0xc3, 0x94, 0x52, 0xab, 0x55, 0x59, 0x5b, 0x6f, - 0x35, 0x37, 0x2b, 0x4f, 0x2b, 0x57, 0x2a, 0x4b, 0xc4, 0x01, 0x9b, 0x9c, 0xa0, 0xf4, 0x5d, 0xe5, - 0x4b, 0xf5, 0xe6, 0xf9, 0x8a, 0x5e, 0xdc, 0x81, 0xff, 0xa8, 0x80, 0x42, 0xcd, 0x24, 0xa7, 0xc2, - 0x5c, 0xde, 0x5a, 0xfa, 0x32, 0xdf, 0x40, 0x6b, 0x22, 0xb2, 0x8f, 0x1f, 0x22, 0x40, 0x9f, 0x5e, - 0xe4, 0x0e, 0x98, 0x6a, 0xf4, 0x7a, 0xec, 0xf4, 0xc5, 0xc3, 0xe2, 0x3a, 0x90, 0x52, 0xaf, 0x57, - 0xb5, 0xb6, 0x6c, 0x1d, 0xe7, 0xe7, 0x4c, 0xd6, 0x86, 0x00, 0xe7, 0x13, 0x47, 0xe3, 0xe6, 0x28, - 0x47, 0x7d, 0x04, 0x5f, 0xa4, 0x82, 0x69, 0xea, 0xd3, 0x50, 0xea, 0xf5, 0xe0, 0x53, 0xc2, 0x16, - 0xc9, 0x84, 0x43, 0x05, 0x2d, 0x2f, 0x9c, 0x8f, 0xf2, 0x70, 0xad, 0x89, 0x70, 0xfd, 0xc0, 0x10, - 0x01, 0x05, 0x7c, 0x44, 0xe0, 0x75, 0x4a, 0x74, 0x03, 0x0c, 0xda, 0xd7, 0x6f, 0x07, 0x80, 0xac, - 0x0b, 0x80, 0xdc, 0x39, 0x62, 0x79, 0x47, 0x8b, 0xc8, 0xdf, 0x28, 0x60, 0x9a, 0xc6, 0x59, 0xc0, - 0x88, 0x3c, 0xac, 0x7f, 0x2c, 0x5c, 0x35, 0xdc, 0x1d, 0x6e, 0x2c, 0xc4, 0x8f, 0xf0, 0x7d, 0x87, - 0x10, 0x7a, 0x50, 0x54, 0x84, 0xf1, 0xf3, 0xa5, 0x11, 0x85, 0x1b, 0x45, 0x37, 0x99, 0x70, 0x9f, - 0x3e, 0x82, 0x70, 0xe7, 0xc0, 0x74, 0x68, 0xad, 0xa8, 0x71, 0xb2, 0x3e, 0x5b, 0x02, 0x33, 0x9c, - 0x75, 0x8a, 0x69, 0x2f, 0xa1, 0x2d, 0x63, 0xaf, 0xcb, 0xd6, 0x00, 0x8a, 0xc7, 0x30, 0x31, 0x52, - 0xa7, 0x86, 0xd5, 0xdd, 0x2f, 0x66, 0xb4, 0x22, 0x98, 0xe5, 0x0d, 0xd1, 0xa2, 0x02, 0xbf, 0x79, - 0x1d, 0x98, 0x3e, 0x6f, 0x3b, 0x97, 0xc8, 0x51, 0x05, 0xf8, 0x01, 0x1a, 0x18, 0xd5, 0x8f, 0xc2, - 0xc3, 0xf5, 0x63, 0xaf, 0x92, 0xf7, 0x4d, 0xf5, 0xa9, 0x2d, 0x0c, 0x8d, 0xb4, 0x73, 0x3d, 0x98, - 0xb9, 0xe2, 0xe7, 0x0e, 0xcd, 0x0b, 0x2e, 0x09, 0xfe, 0xb2, 0x9c, 0xb7, 0xe9, 0xf0, 0x22, 0xd3, - 0xdf, 0x6a, 0x7c, 0xbb, 0x02, 0xf2, 0x2b, 0xc8, 0x2b, 0x75, 0xbb, 0xbc, 0xdc, 0x5e, 0x26, 0x7d, - 0x78, 0x5d, 0xa8, 0x44, 0xa9, 0xdb, 0x8d, 0x1e, 0xc9, 0x39, 0x01, 0xf9, 0x87, 0x2c, 0x85, 0x34, - 0xc9, 0xa3, 0x21, 0x43, 0x0a, 0x4c, 0x5f, 0x62, 0x7f, 0x17, 0x9e, 0x07, 0x79, 0x3d, 0x37, 0x37, - 0x7b, 0x4c, 0x18, 0x14, 0x37, 0x13, 0xef, 0x99, 0xe9, 0xe7, 0xd3, 0xee, 0x01, 0x53, 0x7b, 0x2e, - 0x2a, 0x1b, 0xae, 0x6f, 0x4f, 0x8b, 0x35, 0x6d, 0x5c, 0xbc, 0x17, 0xb5, 0xbd, 0x85, 0xea, 0x6e, - 0xcf, 0x76, 0xbc, 0x0d, 0x9a, 0x31, 0x88, 0x33, 0xcb, 0x9e, 0x75, 0x9f, 0x82, 0x06, 0x41, 0xe1, - 0x8a, 0xe9, 0xed, 0x94, 0x77, 0x0c, 0x8f, 0xed, 0xf0, 0x06, 0xcf, 0xf0, 0x43, 0x23, 0xc0, 0x19, - 0xeb, 0x25, 0x18, 0x1d, 0x03, 0xe3, 0x66, 0x50, 0x24, 0x73, 0x2e, 0xd3, 0xda, 0xa6, 0xfc, 0x07, - 0x0b, 0x5b, 0x07, 0xd2, 0x13, 0x03, 0x3e, 0x06, 0x37, 0xc0, 0x51, 0x00, 0xff, 0x11, 0x15, 0x64, - 0x1b, 0x3d, 0x64, 0x49, 0x1f, 0x0e, 0x0f, 0x70, 0x50, 0xfa, 0x70, 0x78, 0x9f, 0xfc, 0xb9, 0x85, - 0xa0, 0xd2, 0xb8, 0xe4, 0x08, 0x14, 0x6e, 0x05, 0x59, 0xd3, 0xda, 0xb2, 0xd9, 0xd4, 0xfb, 0xda, - 0x08, 0x73, 0x81, 0x98, 0x09, 0x24, 0x23, 0x7c, 0x9f, 0xdc, 0x91, 0x85, 0xb8, 0xb2, 0x93, 0x89, - 0x7b, 0x79, 0x84, 0x91, 0x44, 0x03, 0xf3, 0xe1, 0xbc, 0xb8, 0xd6, 0x28, 0x2d, 0x15, 0x3b, 0xf0, - 0x6f, 0x0b, 0x20, 0x4f, 0xd5, 0x06, 0xbe, 0x44, 0x05, 0x6a, 0xa9, 0xd3, 0x89, 0x00, 0x43, 0x39, - 0x00, 0x86, 0xed, 0x6b, 0x21, 0x3b, 0x5e, 0xe2, 0x3f, 0x8b, 0xd1, 0x54, 0x25, 0xc7, 0x06, 0xd6, - 0x24, 0x4b, 0x9d, 0x4e, 0xf4, 0x61, 0xab, 0xa0, 0x40, 0x45, 0x2c, 0x90, 0xef, 0x21, 0x54, 0xb9, - 0x1e, 0x22, 0xf1, 0x40, 0x12, 0xc9, 0x5f, 0xfa, 0xad, 0xe4, 0x1f, 0x14, 0x30, 0x45, 0x8c, 0xed, - 0x4e, 0x07, 0x96, 0x64, 0xb0, 0xb9, 0x0e, 0x4c, 0xfb, 0xa2, 0xc1, 0x5d, 0x26, 0x1e, 0x0f, 0xc2, - 0x04, 0x71, 0xf9, 0xf0, 0x6e, 0x11, 0x9d, 0xc7, 0xc5, 0xd7, 0x9e, 0x71, 0x11, 0x7d, 0x10, 0x37, - 0x2c, 0x56, 0xe9, 0x2f, 0xf6, 0x57, 0x02, 0x81, 0xaf, 0x09, 0x02, 0xbf, 0x7d, 0x94, 0x22, 0xd3, - 0x17, 0xfa, 0x1f, 0x2b, 0x00, 0xe0, 0xb2, 0x59, 0xb4, 0x83, 0x47, 0x08, 0x31, 0x8c, 0x62, 0xa4, - 0xfb, 0x0a, 0x69, 0xdb, 0x75, 0x60, 0x55, 0xe3, 0xa2, 0x1a, 0x68, 0x45, 0xa0, 0x9a, 0x81, 0x68, - 0xf1, 0x5f, 0xf8, 0x76, 0x29, 0x6b, 0x56, 0xbe, 0xa4, 0xf4, 0xe5, 0xfa, 0xa7, 0x0a, 0x98, 0x6a, - 0x22, 0x0f, 0x77, 0x9d, 0xf0, 0x9c, 0x4c, 0xaf, 0xcf, 0xb5, 0x6d, 0x45, 0xb2, 0x6d, 0x7f, 0x3b, - 0x23, 0x1b, 0x8c, 0x33, 0x94, 0x0c, 0xe3, 0x29, 0x62, 0xd6, 0xf0, 0x7a, 0xa9, 0x60, 0x9c, 0xc3, - 0xa8, 0xa5, 0x2f, 0xdd, 0xb7, 0x2a, 0x81, 0x7b, 0x9b, 0x78, 0x18, 0x99, 0x37, 0xab, 0x33, 0x07, - 0xcd, 0x6a, 0xf9, 0xc3, 0xc8, 0x7c, 0x1d, 0xa3, 0xbd, 0xa9, 0x12, 0x1b, 0x20, 0x63, 0x70, 0x74, - 0x1a, 0x45, 0x5e, 0xcf, 0x56, 0x41, 0x9e, 0xed, 0x78, 0xde, 0x15, 0xbf, 0xe1, 0x39, 0x7c, 0x6a, - 0xf2, 0xfe, 0x11, 0x4c, 0xc1, 0xb8, 0xbd, 0xc4, 0x80, 0x0d, 0x85, 0x63, 0xe3, 0x16, 0x90, 0x23, - 0x57, 0x61, 0xb0, 0x71, 0x2e, 0xf4, 0x51, 0xf3, 0x49, 0x54, 0xf0, 0x5b, 0x9d, 0x66, 0x4a, 0x8c, - 0xc2, 0x18, 0xb6, 0x1f, 0x47, 0x41, 0xe1, 0x1b, 0x1a, 0x00, 0xeb, 0x7b, 0x17, 0xbb, 0xa6, 0xbb, - 0x63, 0x5a, 0xc4, 0xb1, 0x75, 0x96, 0x3d, 0xd2, 0x1b, 0x1d, 0x62, 0x4d, 0xc2, 0x48, 0xa3, 0xa0, - 0x08, 0xd4, 0x3d, 0xc7, 0x64, 0x26, 0x32, 0xfe, 0xab, 0x3d, 0x29, 0x70, 0x11, 0xcf, 0xf6, 0x45, - 0x9b, 0xc2, 0x62, 0x08, 0x39, 0x58, 0xe0, 0x4a, 0x0f, 0x5d, 0xc5, 0xf9, 0x6b, 0x3b, 0x72, 0xe2, - 0xb5, 0x1d, 0x42, 0x08, 0x8a, 0x7c, 0x5f, 0x08, 0x0a, 0x8c, 0xa3, 0x6b, 0x3e, 0x93, 0x46, 0x0a, - 0x54, 0x75, 0xf2, 0x1f, 0x7f, 0x41, 0x7c, 0x1a, 0x89, 0x4b, 0x31, 0x3d, 0xe8, 0x14, 0x26, 0xf0, - 0x7d, 0xde, 0xb4, 0x64, 0x9f, 0xf7, 0xb1, 0x70, 0xee, 0x64, 0x4b, 0x1a, 0xd3, 0x09, 0x24, 0x27, - 0xb0, 0x9b, 0xed, 0x63, 0x17, 0x7e, 0x42, 0x3a, 0xf8, 0x31, 0x27, 0xe3, 0xd8, 0x59, 0x10, 0xe3, - 0x40, 0x09, 0x38, 0xe0, 0x1c, 0x57, 0xe2, 0x7a, 0xe0, 0x61, 0xf4, 0x93, 0xe9, 0xf2, 0xee, 0x68, - 0x36, 0xb6, 0x1f, 0xcb, 0xa3, 0xb1, 0x78, 0x77, 0xa5, 0xdc, 0x2a, 0xa2, 0x83, 0xf1, 0x3d, 0x48, - 0x24, 0x0f, 0x1a, 0xb5, 0x23, 0x5c, 0x48, 0x86, 0xff, 0x53, 0x01, 0x79, 0x66, 0x6e, 0xdc, 0x75, - 0x48, 0x08, 0xe1, 0x2b, 0x47, 0x81, 0x24, 0x36, 0xa4, 0xd2, 0xef, 0x24, 0x05, 0x60, 0x0c, 0x06, - 0xc6, 0x85, 0xd4, 0x00, 0x80, 0xff, 0xac, 0x80, 0x2c, 0x36, 0x83, 0xe4, 0x02, 0xd6, 0x7c, 0x46, - 0xfa, 0x1c, 0x03, 0x27, 0x00, 0x4c, 0x3e, 0x42, 0xbf, 0x17, 0xc1, 0x74, 0x8f, 0x66, 0x0c, 0xc2, - 0x25, 0xdd, 0x20, 0xd1, 0x19, 0x21, 0x3d, 0xfc, 0x8c, 0x9b, 0x72, 0xc6, 0x9d, 0x85, 0x88, 0xe7, - 0x27, 0x19, 0x1c, 0x95, 0x71, 0xc4, 0xb6, 0xd9, 0x82, 0xff, 0xa6, 0x00, 0xa0, 0x23, 0xd7, 0xee, - 0x5e, 0x46, 0x1b, 0x8e, 0x09, 0xaf, 0x0d, 0x01, 0x60, 0xcd, 0x3e, 0x13, 0x36, 0xfb, 0xcf, 0x2a, - 0xb2, 0x27, 0x16, 0x04, 0xcd, 0xf3, 0x89, 0x47, 0x88, 0xff, 0xc9, 0x60, 0x8a, 0xc9, 0x91, 0xd9, - 0x94, 0x72, 0xc2, 0xf7, 0x3f, 0x82, 0x1f, 0x94, 0x3a, 0xf1, 0x20, 0xc3, 0x51, 0x32, 0x00, 0xca, - 0x23, 0x00, 0x70, 0x1c, 0xcc, 0xf8, 0x00, 0x6c, 0xe8, 0xd5, 0x22, 0x82, 0xef, 0x56, 0x89, 0x5b, - 0x18, 0x1d, 0xdc, 0x0e, 0xdf, 0xd3, 0xfc, 0xa5, 0xf4, 0x64, 0x9f, 0x93, 0x47, 0x50, 0x7e, 0x4a, - 0x00, 0xfd, 0xbe, 0xd4, 0xec, 0x5e, 0x82, 0xa1, 0x07, 0x4a, 0x7f, 0x75, 0xb6, 0x02, 0xe6, 0x04, - 0xab, 0x44, 0x3b, 0x0d, 0x4e, 0x0a, 0x09, 0x74, 0xbc, 0xeb, 0x14, 0x8f, 0x69, 0x10, 0x9c, 0x12, - 0xde, 0xb0, 0x07, 0xd4, 0x29, 0x66, 0xe0, 0xbb, 0xbe, 0x9c, 0x09, 0xd6, 0x7b, 0xde, 0x9f, 0x65, - 0xab, 0x6f, 0x9f, 0x12, 0x23, 0xf4, 0xb6, 0x6d, 0xcb, 0x43, 0xf7, 0x71, 0xbe, 0x75, 0x41, 0x42, - 0xac, 0xd5, 0x70, 0x1a, 0x4c, 0x79, 0x0e, 0xef, 0x6f, 0xe7, 0x3f, 0xf2, 0x8a, 0x95, 0x13, 0x15, - 0xab, 0x0e, 0xce, 0x9a, 0x56, 0xbb, 0xbb, 0xd7, 0x41, 0x3a, 0xea, 0x1a, 0x58, 0x86, 0x6e, 0xc9, - 0x5d, 0x42, 0x3d, 0x64, 0x75, 0x90, 0xe5, 0x51, 0x3e, 0xfd, 0xc3, 0xfa, 0x12, 0x39, 0x45, 0x65, - 0x7c, 0x92, 0xa8, 0x8c, 0x8f, 0x18, 0xb4, 0x04, 0x1c, 0xb3, 0x06, 0x78, 0x3b, 0x00, 0xb4, 0x6e, - 0xe7, 0x4c, 0x74, 0x85, 0xa9, 0x61, 0x7f, 0x98, 0xe7, 0x46, 0x90, 0x41, 0xe7, 0x32, 0xc3, 0xaf, - 0x04, 0xea, 0xf7, 0x14, 0x41, 0xfd, 0x6e, 0x91, 0x64, 0x21, 0x99, 0xd6, 0xf5, 0x0e, 0xbf, 0xa9, - 0x74, 0x0d, 0xb8, 0xda, 0x3f, 0x16, 0x51, 0xaf, 0x54, 0x96, 0x9a, 0x9b, 0x1b, 0xeb, 0x2b, 0x7a, - 0x69, 0xa9, 0x52, 0x04, 0x58, 0x3f, 0xa9, 0x5e, 0x06, 0xa7, 0x19, 0xb2, 0xf0, 0x4f, 0x14, 0x90, - 0x23, 0x91, 0x26, 0xe0, 0xd3, 0xc7, 0xa4, 0x39, 0xae, 0xe0, 0xa9, 0x19, 0x8c, 0xbb, 0xf2, 0xf7, - 0x92, 0x31, 0x61, 0x12, 0xae, 0x0e, 0x75, 0x2f, 0x59, 0x0c, 0xa1, 0xf4, 0x67, 0x42, 0xb8, 0x49, - 0x36, 0x77, 0xec, 0x2b, 0xff, 0x95, 0x9b, 0x24, 0xae, 0xff, 0x11, 0x37, 0xc9, 0x01, 0x2c, 0x4c, - 0xbc, 0x49, 0x0e, 0x68, 0x77, 0x31, 0xcd, 0x14, 0x7e, 0x34, 0x17, 0xcc, 0xff, 0x3e, 0xa9, 0x1c, - 0x6a, 0xef, 0xac, 0x04, 0xe6, 0x4c, 0xcb, 0x43, 0x8e, 0x65, 0x74, 0x97, 0xbb, 0xc6, 0xb6, 0x6f, - 0x9f, 0x5e, 0x7b, 0x20, 0xc2, 0x7d, 0x98, 0x47, 0x17, 0xbf, 0xd0, 0xce, 0x00, 0xe0, 0xa1, 0xdd, - 0x5e, 0xd7, 0xf0, 0x42, 0xd5, 0xe3, 0x52, 0x78, 0xed, 0xcb, 0x8a, 0xda, 0xf7, 0x68, 0x70, 0x15, - 0x05, 0xad, 0xb5, 0xdf, 0x43, 0x1b, 0x96, 0xf9, 0x8c, 0x3d, 0x12, 0xd0, 0x9d, 0xea, 0xe8, 0xa0, - 0x57, 0xc2, 0xae, 0x50, 0x5e, 0xdc, 0x15, 0xd2, 0xee, 0x04, 0xd7, 0x90, 0x30, 0xff, 0x24, 0xf8, - 0xfe, 0x79, 0xb3, 0xb3, 0x8d, 0xbc, 0xea, 0xd6, 0x9a, 0xe9, 0xba, 0xa6, 0xb5, 0x4d, 0xa6, 0xe3, - 0x05, 0x3d, 0x3a, 0x03, 0xfc, 0xdf, 0xd2, 0xc1, 0xe2, 0xfc, 0x3e, 0x63, 0x48, 0xb0, 0x38, 0x5b, - 0xdc, 0xb6, 0x0b, 0xdb, 0x69, 0xb0, 0xaa, 0x93, 0x95, 0x58, 0xd5, 0xe1, 0x31, 0xcd, 0x49, 0xae, - 0x0e, 0xbc, 0x46, 0x2a, 0x1a, 0x5d, 0x5c, 0x35, 0xd2, 0xef, 0xfb, 0xbe, 0xa5, 0x82, 0x79, 0x5a, - 0xf4, 0xa2, 0x6d, 0x5f, 0xda, 0x35, 0x9c, 0x4b, 0xf0, 0xa7, 0x0f, 0xb7, 0x0b, 0x1c, 0xbb, 0x7b, - 0x15, 0xb5, 0xa5, 0xdb, 0xa7, 0xbc, 0xd9, 0x7e, 0xe5, 0x85, 0xbf, 0x27, 0x3d, 0x25, 0x11, 0xe4, - 0xe9, 0x57, 0x6a, 0x32, 0xdb, 0x5b, 0x72, 0x67, 0xb2, 0x65, 0x18, 0x4c, 0x1f, 0xf8, 0xdf, 0x0e, - 0x80, 0xf7, 0xc7, 0x11, 0x7e, 0x67, 0x60, 0x9c, 0xb8, 0xc3, 0xaf, 0x8e, 0x86, 0x9d, 0xcf, 0xd7, - 0x08, 0xd8, 0x15, 0x81, 0x7a, 0x29, 0xf0, 0xa0, 0xc4, 0x7f, 0xf9, 0x0a, 0x65, 0xd3, 0x43, 0x33, - 0x82, 0xe5, 0x89, 0xa0, 0x79, 0x52, 0x64, 0xa1, 0xd1, 0x4b, 0x15, 0xd3, 0x2f, 0x49, 0xef, 0xb8, - 0x0d, 0x14, 0x10, 0xe5, 0x6e, 0x32, 0xad, 0x52, 0x6e, 0xbb, 0x4e, 0x9e, 0xcd, 0xf4, 0xd1, 0x7c, - 0x61, 0xce, 0xf7, 0xa7, 0x6c, 0x22, 0x72, 0x4d, 0x70, 0x80, 0xe1, 0x29, 0x90, 0x77, 0xed, 0x3d, - 0xa7, 0x8d, 0xd8, 0x1e, 0x28, 0x7b, 0x1a, 0x61, 0xbf, 0x6e, 0xa8, 0xb9, 0x70, 0xc0, 0x22, 0xc9, - 0x26, 0xb6, 0x48, 0xa2, 0xed, 0xdd, 0x18, 0xfb, 0x01, 0xbe, 0x48, 0x95, 0xdd, 0xd2, 0x11, 0x30, - 0x6b, 0x22, 0xef, 0x81, 0x68, 0x04, 0xfc, 0xba, 0xd4, 0x6e, 0xd0, 0x90, 0x9a, 0x24, 0x53, 0xb9, - 0xc6, 0x08, 0x76, 0xf0, 0xb5, 0xe0, 0x41, 0x7e, 0x0e, 0x66, 0x00, 0x13, 0x83, 0x77, 0x43, 0xaf, - 0x15, 0x55, 0xf8, 0xec, 0x2c, 0x28, 0x52, 0xd6, 0x1a, 0x81, 0x2d, 0x08, 0x5f, 0x96, 0x39, 0x6a, - 0x83, 0x37, 0x7a, 0x06, 0x2b, 0xdc, 0x45, 0x1b, 0x7b, 0xc3, 0x81, 0x20, 0xf8, 0xb0, 0x76, 0x11, - 0x9a, 0x34, 0x42, 0x33, 0x8b, 0x51, 0x3e, 0xf8, 0x96, 0x8c, 0xcc, 0x85, 0x09, 0x72, 0x2c, 0xa6, - 0xdf, 0x2b, 0x7d, 0x3b, 0xeb, 0xc7, 0x5e, 0x5d, 0x76, 0xec, 0xdd, 0x0d, 0xa7, 0x0b, 0xff, 0x5d, - 0xea, 0x3e, 0x9a, 0x88, 0xd9, 0x85, 0x12, 0x3d, 0xbb, 0x20, 0x2b, 0xd2, 0xdd, 0x70, 0x2b, 0xac, - 0x3b, 0xc2, 0xf0, 0xad, 0xdd, 0x08, 0xe6, 0x8d, 0x4e, 0x67, 0xdd, 0xd8, 0x46, 0x65, 0x3c, 0x6d, - 0xb7, 0x3c, 0x16, 0x97, 0xb1, 0x2f, 0x35, 0x76, 0x2a, 0x23, 0xf6, 0x91, 0x53, 0x07, 0xac, 0x52, - 0xf9, 0x65, 0x58, 0x01, 0x44, 0x26, 0xbf, 0x89, 0x0c, 0x7f, 0x78, 0xc8, 0x68, 0xef, 0x18, 0x61, - 0x14, 0x59, 0xf6, 0x24, 0xe9, 0x8b, 0x25, 0xc1, 0x77, 0xfa, 0x9a, 0xf7, 0x6b, 0x0a, 0x98, 0xc2, - 0x78, 0x94, 0x3a, 0x1d, 0xf8, 0x70, 0x21, 0xd8, 0x72, 0xa4, 0x37, 0xdc, 0xf3, 0xa5, 0x5d, 0x13, - 0xfd, 0x1a, 0x52, 0xfa, 0xd1, 0xa7, 0x06, 0x98, 0x10, 0x15, 0x41, 0x88, 0x72, 0x41, 0x93, 0x63, - 0x8b, 0x48, 0x5f, 0x7c, 0x9f, 0x51, 0xc0, 0x9c, 0x3f, 0xcf, 0x58, 0x46, 0x5e, 0x7b, 0x07, 0xde, - 0x2e, 0xbb, 0xce, 0xc5, 0x5a, 0x62, 0xb0, 0x25, 0xdc, 0x85, 0xdf, 0xcd, 0x24, 0x54, 0x79, 0xa1, - 0xe4, 0x88, 0x45, 0xc2, 0x44, 0xba, 0x18, 0x47, 0x30, 0x7d, 0x61, 0x7e, 0x45, 0x01, 0xa0, 0x65, - 0x07, 0x93, 0xe5, 0x43, 0x48, 0xf2, 0x67, 0xa4, 0x77, 0x8b, 0x59, 0xc5, 0xc3, 0x62, 0x93, 0xf7, - 0x1c, 0x92, 0xce, 0x54, 0xc3, 0x4a, 0x9a, 0x48, 0x5b, 0x9f, 0x5e, 0xda, 0xeb, 0x75, 0xcd, 0xb6, - 0xe1, 0xf5, 0x7b, 0x00, 0x46, 0x8b, 0x17, 0x3e, 0x47, 0x49, 0x68, 0x34, 0x06, 0x65, 0x44, 0xc8, - 0x92, 0x06, 0x27, 0x53, 0xfc, 0xe0, 0x64, 0x92, 0x5e, 0x3d, 0x43, 0x88, 0x4f, 0x40, 0x3d, 0x55, - 0x70, 0xbc, 0xd1, 0x43, 0xd6, 0xa2, 0x83, 0x8c, 0x4e, 0xdb, 0xd9, 0xdb, 0xbd, 0xe8, 0xf2, 0xee, - 0xab, 0xf1, 0x3a, 0xca, 0xad, 0x5c, 0x2b, 0xc2, 0xca, 0x35, 0x7c, 0xae, 0xf4, 0x25, 0xcf, 0xdc, - 0xfe, 0x0a, 0xc7, 0xc3, 0x08, 0x43, 0x5d, 0x22, 0xa7, 0xab, 0xbe, 0x45, 0xea, 0x6c, 0x92, 0x45, - 0xea, 0x37, 0x4b, 0x05, 0xa3, 0x94, 0xaa, 0xd7, 0x44, 0x7c, 0xe7, 0xe6, 0x9b, 0xc8, 0x8b, 0x80, - 0xf7, 0x06, 0x30, 0x77, 0x31, 0x7c, 0x13, 0x40, 0x2c, 0x26, 0x0e, 0xf0, 0x68, 0x7d, 0x6b, 0xd2, - 0x15, 0x1a, 0x91, 0x85, 0x08, 0x74, 0x03, 0x04, 0x15, 0x19, 0xb7, 0xb9, 0x44, 0xcb, 0x2d, 0xb1, - 0xe5, 0xa7, 0x8f, 0xc2, 0x27, 0x14, 0x30, 0xd3, 0xdc, 0x31, 0x1c, 0xb4, 0xb8, 0x4f, 0x4e, 0x9f, - 0x4b, 0x1a, 0x25, 0x2f, 0xe4, 0xc5, 0xac, 0x81, 0x6c, 0xd7, 0xb4, 0x2e, 0xf9, 0xfe, 0x8e, 0xf8, - 0x7f, 0x78, 0x25, 0xb3, 0x32, 0xe0, 0x4a, 0xe6, 0x60, 0x9b, 0x24, 0x28, 0x37, 0x62, 0x34, 0x7d, - 0x43, 0x46, 0xe6, 0x4a, 0xe6, 0xa1, 0xe4, 0xd2, 0x17, 0xe3, 0x5f, 0x67, 0x41, 0xbe, 0x89, 0x0c, - 0xa7, 0xbd, 0x03, 0xdf, 0xaf, 0x0c, 0x9c, 0x4a, 0x14, 0xc4, 0xa9, 0xc4, 0x32, 0x98, 0xda, 0x32, - 0xbb, 0x1e, 0x72, 0xa8, 0x0f, 0x38, 0xdf, 0xb5, 0xd3, 0x26, 0xbe, 0xd8, 0xb5, 0xdb, 0x97, 0x16, - 0x98, 0x69, 0xbf, 0xe0, 0x07, 0xb9, 0x5f, 0x58, 0x26, 0x1f, 0xe9, 0xfe, 0xc7, 0xd8, 0x20, 0x74, - 0x6d, 0xc7, 0x8b, 0xba, 0x34, 0x2d, 0x82, 0x4a, 0xd3, 0x76, 0x3c, 0x9d, 0x7e, 0x88, 0x61, 0xde, - 0xda, 0xeb, 0x76, 0x5b, 0xe8, 0x3e, 0xcf, 0x9f, 0xd6, 0xf9, 0xcf, 0xd8, 0x58, 0xb4, 0xb7, 0xb6, - 0x5c, 0x44, 0x17, 0x15, 0x72, 0x3a, 0x7b, 0xd2, 0x4e, 0x82, 0x5c, 0xd7, 0xdc, 0x35, 0xe9, 0x44, - 0x24, 0xa7, 0xd3, 0x07, 0xed, 0x66, 0x50, 0x0c, 0xe7, 0x40, 0x94, 0xd1, 0xd3, 0x79, 0xd2, 0x34, - 0x0f, 0xa4, 0x63, 0x9d, 0xb9, 0x84, 0xf6, 0xdd, 0xd3, 0x53, 0xe4, 0x3d, 0xf9, 0x0f, 0x5f, 0x9b, - 0x74, 0xc3, 0x84, 0x4a, 0x3c, 0x7a, 0x86, 0xeb, 0xa0, 0xb6, 0xed, 0x74, 0x7c, 0xd9, 0x44, 0x4f, - 0x30, 0x58, 0xbe, 0x64, 0xdb, 0x1c, 0x03, 0x0b, 0x4f, 0x5f, 0xd3, 0xde, 0x93, 0xc7, 0xdd, 0x26, - 0x2e, 0xfa, 0xbc, 0xe9, 0xed, 0xac, 0x21, 0xcf, 0x80, 0x7f, 0xad, 0x0e, 0xd4, 0xb8, 0x99, 0xff, - 0x5f, 0xe3, 0x86, 0x68, 0x1c, 0x0d, 0x54, 0xe8, 0xed, 0x39, 0x16, 0x96, 0x23, 0xf3, 0xa3, 0xe5, - 0x52, 0xb4, 0x3b, 0xc1, 0x35, 0xe1, 0x93, 0xbf, 0x94, 0xba, 0xc4, 0xb9, 0xd6, 0x16, 0xf4, 0xe8, - 0x0c, 0xda, 0x3a, 0x78, 0x18, 0x7d, 0xb9, 0xda, 0x5a, 0xab, 0xad, 0x9a, 0xdb, 0x3b, 0x5d, 0x73, - 0x7b, 0xc7, 0x73, 0xab, 0x96, 0xeb, 0x21, 0xa3, 0xd3, 0xd8, 0xd2, 0xe9, 0x75, 0x87, 0x80, 0xd0, - 0x91, 0xc9, 0x2a, 0xfa, 0x88, 0xcb, 0x8d, 0x6e, 0xbc, 0xa6, 0x44, 0xb4, 0x94, 0xc7, 0xe3, 0x96, - 0xe2, 0xee, 0x75, 0x03, 0x4c, 0xaf, 0xeb, 0xc3, 0x34, 0x54, 0xf5, 0xbd, 0x2e, 0x69, 0x2e, 0x24, - 0x73, 0xd2, 0x71, 0x2e, 0x86, 0x93, 0xf4, 0x9b, 0xcd, 0xbf, 0xe7, 0x41, 0x6e, 0xc5, 0x31, 0x7a, - 0x3b, 0xf0, 0xd9, 0x5c, 0xff, 0x3c, 0xae, 0x36, 0x11, 0x68, 0xa7, 0x32, 0x4c, 0x3b, 0xd5, 0x21, - 0xda, 0x99, 0xe5, 0xb4, 0x33, 0x7a, 0xd1, 0xf9, 0x2c, 0x98, 0x6d, 0xdb, 0xdd, 0x2e, 0x6a, 0x63, - 0x79, 0x54, 0x3b, 0x64, 0xb5, 0x67, 0x5a, 0x17, 0xd2, 0xc8, 0x45, 0x20, 0xc8, 0x6b, 0xd2, 0x35, - 0x76, 0xaa, 0xf4, 0x61, 0x02, 0x7c, 0x99, 0x02, 0xb2, 0x95, 0xce, 0x36, 0x12, 0xd6, 0xe1, 0x33, - 0xdc, 0x3a, 0xfc, 0x29, 0x90, 0xf7, 0x0c, 0x67, 0x1b, 0x79, 0xfe, 0x3a, 0x01, 0x7d, 0x0a, 0xee, - 0x27, 0x51, 0xb9, 0xfb, 0x49, 0x7e, 0x00, 0x64, 0xb1, 0xcc, 0x98, 0x5b, 0xfc, 0xc3, 0x06, 0xc1, - 0x4f, 0x64, 0xbf, 0x80, 0x4b, 0x5c, 0x20, 0xb7, 0xda, 0x93, 0x0f, 0xfa, 0xb1, 0xce, 0x1d, 0x8c, - 0x9f, 0x7d, 0x1d, 0x98, 0x36, 0xdb, 0xb6, 0x55, 0xdd, 0x35, 0xb6, 0x11, 0xab, 0x66, 0x98, 0xe0, - 0xbf, 0xad, 0xec, 0xda, 0xf7, 0x9a, 0x6c, 0x51, 0x2b, 0x4c, 0xc0, 0x55, 0xd8, 0x31, 0x3b, 0x1d, - 0x64, 0xb1, 0x96, 0xcd, 0x9e, 0xce, 0x9e, 0x01, 0x59, 0xcc, 0x03, 0xd6, 0x1f, 0x6c, 0x2c, 0x14, - 0x8f, 0x69, 0xb3, 0xb8, 0x59, 0xd1, 0xc6, 0x5b, 0xcc, 0x88, 0x6b, 0xae, 0x32, 0x5e, 0x43, 0xb4, - 0x72, 0x83, 0x1b, 0xd7, 0xa3, 0x40, 0xce, 0xb2, 0x3b, 0x68, 0xe8, 0x20, 0x44, 0x73, 0x69, 0x8f, - 0x03, 0x39, 0xd4, 0xc1, 0xbd, 0x82, 0x4a, 0xb2, 0x9f, 0x89, 0x97, 0xa5, 0x4e, 0x33, 0x27, 0x73, - 0x4d, 0x1a, 0xc4, 0x6d, 0xfa, 0x0d, 0xf0, 0x27, 0xa6, 0xc0, 0x71, 0xda, 0x07, 0x34, 0xf7, 0x2e, - 0x62, 0x52, 0x17, 0x11, 0x7c, 0xfd, 0xe0, 0x81, 0xeb, 0xb8, 0xa8, 0xec, 0x27, 0x41, 0xce, 0xdd, - 0xbb, 0x18, 0x18, 0xa1, 0xf4, 0x81, 0x6f, 0xba, 0xca, 0x58, 0x86, 0x33, 0x75, 0xd4, 0xe1, 0x4c, - 0x18, 0x9a, 0x54, 0xbf, 0xf1, 0x87, 0x03, 0x19, 0x3d, 0xd0, 0xe1, 0x0f, 0x64, 0x83, 0x86, 0xa1, - 0xd3, 0x60, 0xca, 0xd8, 0xf2, 0x90, 0x13, 0x9a, 0x89, 0xec, 0x11, 0x0f, 0x95, 0x17, 0xd1, 0x96, - 0xed, 0x60, 0xb1, 0xd0, 0x58, 0xd6, 0xc1, 0x33, 0xd7, 0x72, 0x81, 0xb0, 0x83, 0x76, 0x0b, 0x38, - 0x61, 0xd9, 0x4b, 0xa8, 0xc7, 0xe4, 0x4c, 0x51, 0x9c, 0x23, 0x2d, 0xe0, 0xe0, 0x8b, 0x03, 0x5d, - 0xc9, 0xfc, 0xc1, 0xae, 0x04, 0x7e, 0x36, 0xe9, 0x9c, 0xb9, 0x0f, 0xe8, 0xb1, 0x59, 0x68, 0xda, - 0x13, 0xc1, 0x6c, 0x87, 0x79, 0x88, 0xb5, 0xcd, 0xa0, 0x95, 0x44, 0x7e, 0x27, 0x64, 0x0e, 0x15, - 0x29, 0xcb, 0x2b, 0xd2, 0x0a, 0x28, 0x90, 0xe3, 0xd8, 0x58, 0x93, 0x72, 0x7d, 0x1e, 0xf9, 0x64, - 0x5a, 0x17, 0x54, 0x8a, 0x13, 0xdb, 0x42, 0x99, 0x7d, 0xa2, 0x07, 0x1f, 0x27, 0x9b, 0x7d, 0xc7, - 0x4b, 0x28, 0xfd, 0xe6, 0xf8, 0x2b, 0x79, 0x70, 0x4d, 0xd9, 0xb1, 0x5d, 0x97, 0x1c, 0xc1, 0xe9, - 0x6f, 0x98, 0x6f, 0x54, 0x84, 0x9b, 0xca, 0x1e, 0xd0, 0xcd, 0x6f, 0x50, 0x83, 0x9a, 0x5c, 0xd3, - 0xf8, 0x4b, 0xe9, 0x48, 0x5b, 0xc1, 0xfe, 0x43, 0x84, 0xd0, 0xff, 0x6b, 0x34, 0x92, 0xf7, 0x64, - 0x64, 0x82, 0x7f, 0x25, 0x94, 0x55, 0xfa, 0xcd, 0xe5, 0x4b, 0x0a, 0xb8, 0xb6, 0x9f, 0x9b, 0x0d, - 0xcb, 0x0d, 0x1a, 0xcc, 0x43, 0x86, 0xb4, 0x17, 0x31, 0x6e, 0x4b, 0xec, 0xc5, 0xe4, 0x11, 0x75, - 0xe7, 0x4a, 0x8b, 0x58, 0x2c, 0x09, 0x0f, 0xf4, 0xc4, 0x5d, 0x4c, 0x9e, 0x98, 0x7c, 0xfa, 0xc2, - 0xfd, 0xc3, 0x2c, 0x38, 0xbe, 0xe2, 0xd8, 0x7b, 0x3d, 0x37, 0xec, 0x81, 0xfe, 0x6c, 0xf0, 0x86, - 0x6c, 0x5e, 0xc6, 0x34, 0xb8, 0x1e, 0xcc, 0x38, 0xcc, 0x9a, 0x0b, 0xb7, 0x67, 0xf9, 0x24, 0xbe, - 0xf7, 0x52, 0x0f, 0xd3, 0x7b, 0x85, 0xfd, 0x4c, 0x56, 0xe8, 0x67, 0xfa, 0x7b, 0x8e, 0xdc, 0x80, - 0x9e, 0xe3, 0xcb, 0x4a, 0xc2, 0x41, 0xb5, 0x4f, 0x44, 0x11, 0xfd, 0x45, 0x19, 0xe4, 0xb7, 0x49, - 0x46, 0xd6, 0x5d, 0x3c, 0x52, 0xae, 0x66, 0x84, 0xb8, 0xce, 0x3e, 0x0d, 0xe5, 0xaa, 0xf2, 0x3a, - 0x9c, 0x68, 0x80, 0x8b, 0xe7, 0x36, 0x7d, 0xa5, 0x7a, 0x6d, 0x16, 0xcc, 0x06, 0xa5, 0x57, 0x3b, - 0xae, 0x10, 0x92, 0x9a, 0xd3, 0xa8, 0x39, 0x19, 0x8d, 0x3a, 0xb0, 0xce, 0x1c, 0x8c, 0x3a, 0x2a, - 0x37, 0xea, 0x0c, 0x1c, 0x5d, 0x66, 0x23, 0x46, 0x17, 0xf8, 0x2c, 0x55, 0xf6, 0xae, 0x4f, 0xb1, - 0x6b, 0x25, 0xb5, 0x79, 0x20, 0x0f, 0x16, 0x92, 0x37, 0x8e, 0x0e, 0xaf, 0x55, 0xfa, 0x4a, 0xf2, - 0x11, 0x05, 0x9c, 0x38, 0xd8, 0x99, 0x3f, 0x54, 0xf4, 0x52, 0xc3, 0x75, 0x72, 0x03, 0x2f, 0x35, - 0xf2, 0x24, 0x6e, 0xd2, 0xc5, 0x06, 0x41, 0x11, 0xec, 0xbd, 0xe1, 0x9d, 0xb8, 0x5c, 0x98, 0x13, - 0x49, 0xa2, 0xe9, 0x0b, 0xf0, 0x67, 0x55, 0x30, 0xdd, 0x44, 0x5e, 0xcd, 0xd8, 0xb7, 0xf7, 0x3c, - 0x68, 0xc8, 0x6e, 0xcf, 0x3d, 0x01, 0xe4, 0xbb, 0xe4, 0x13, 0xd2, 0xc1, 0xf0, 0x91, 0x92, 0xf9, - 0xfd, 0x2d, 0xe2, 0x1b, 0x44, 0x49, 0xeb, 0x2c, 0xbf, 0x18, 0x7d, 0x46, 0x66, 0x77, 0x34, 0xe0, - 0x6e, 0x2c, 0x5b, 0x3b, 0x89, 0xf6, 0x4e, 0xa3, 0x8a, 0x4e, 0x1f, 0x96, 0xe7, 0xaa, 0x60, 0xae, - 0x89, 0xbc, 0xaa, 0xbb, 0x6c, 0x5c, 0xb6, 0x1d, 0xd3, 0x43, 0x70, 0x45, 0x16, 0x9a, 0x33, 0x00, - 0x98, 0xc1, 0x67, 0x2c, 0x4e, 0x16, 0x97, 0x02, 0xdf, 0x92, 0xd4, 0x51, 0x48, 0xe0, 0x63, 0x2c, - 0x20, 0x24, 0xf2, 0xb1, 0x88, 0x2b, 0x3e, 0x7d, 0x20, 0xbe, 0xa0, 0x30, 0x20, 0x4a, 0x4e, 0x7b, - 0xc7, 0xbc, 0x8c, 0x3a, 0x09, 0x81, 0xf0, 0x3f, 0x0b, 0x81, 0x08, 0x08, 0x25, 0x76, 0x5f, 0x11, - 0xf8, 0x18, 0x87, 0xfb, 0x4a, 0x1c, 0xc1, 0x89, 0x84, 0xb5, 0xc2, 0x5d, 0x0f, 0x5b, 0xcf, 0xbc, - 0x4b, 0x56, 0xac, 0xa1, 0xc9, 0xa6, 0xf0, 0x26, 0xdb, 0x48, 0x1d, 0x0b, 0x2d, 0x7b, 0x98, 0x4e, - 0x67, 0xd3, 0xe8, 0x58, 0x06, 0x16, 0x9d, 0xbe, 0xd0, 0xdf, 0xa7, 0x82, 0xab, 0x83, 0x78, 0x2f, - 0x4d, 0xe4, 0x2d, 0x19, 0xee, 0xce, 0x45, 0xdb, 0x70, 0x3a, 0xb0, 0x3c, 0x86, 0x03, 0x87, 0xf0, - 0xf3, 0x3c, 0x08, 0x75, 0x11, 0x84, 0x81, 0xae, 0xa4, 0x03, 0x79, 0x19, 0x47, 0x27, 0x13, 0xeb, - 0xed, 0xfa, 0x8e, 0x00, 0xac, 0xa7, 0x0a, 0x60, 0x3d, 0x69, 0x54, 0x16, 0xd3, 0x07, 0xee, 0xe7, - 0xe9, 0x88, 0xc0, 0x79, 0x3d, 0x5f, 0x90, 0x05, 0x2c, 0xc2, 0xeb, 0x55, 0x8d, 0xf4, 0x7a, 0x1d, - 0x69, 0x8c, 0x18, 0xea, 0xb1, 0x9c, 0xee, 0x18, 0x71, 0x84, 0xde, 0xc8, 0xef, 0x52, 0x41, 0x91, - 0x04, 0xfc, 0xe2, 0x3c, 0xc2, 0xf9, 0xa0, 0xff, 0xf1, 0xe8, 0x1c, 0xf0, 0x3e, 0x9f, 0x4a, 0xea, - 0x7d, 0x0e, 0xdf, 0x99, 0xd4, 0xc7, 0xbc, 0x9f, 0xdb, 0xb1, 0x20, 0x96, 0xc8, 0x85, 0x7c, 0x08, - 0x07, 0xe9, 0x83, 0xf6, 0x93, 0x2a, 0x00, 0xb8, 0x41, 0xb3, 0xb3, 0x11, 0x4f, 0x93, 0x85, 0xeb, - 0x56, 0xde, 0xef, 0x1e, 0x03, 0x75, 0x75, 0x1f, 0x50, 0x94, 0x62, 0x78, 0xea, 0xe2, 0xf5, 0x49, - 0x7d, 0x2b, 0x43, 0xae, 0xc6, 0x02, 0x4b, 0x22, 0x6f, 0xcb, 0xc8, 0xb2, 0xd3, 0x07, 0xe4, 0x57, - 0x15, 0x90, 0x6b, 0xd9, 0x4d, 0xe4, 0x1d, 0xde, 0x14, 0x48, 0x1c, 0x35, 0x80, 0x94, 0x3b, 0x8e, - 0xa8, 0x01, 0x83, 0x08, 0xa5, 0x2f, 0xba, 0xf7, 0x2a, 0x60, 0xb6, 0x65, 0x97, 0x83, 0xc5, 0x29, - 0x79, 0x5f, 0xd5, 0x7f, 0xcd, 0x24, 0x5c, 0xc3, 0xe0, 0x8b, 0x89, 0x10, 0x58, 0xa2, 0xd5, 0x83, - 0x18, 0x7a, 0xe9, 0xcb, 0xed, 0x76, 0x70, 0x7c, 0xc3, 0xea, 0xd8, 0x3a, 0xea, 0xd8, 0x6c, 0xa5, - 0x5b, 0xd3, 0x40, 0x76, 0xcf, 0xea, 0xd8, 0x84, 0xe5, 0x9c, 0x4e, 0xfe, 0xe3, 0x34, 0x07, 0x75, - 0x6c, 0xe6, 0x1b, 0x40, 0xfe, 0xc3, 0xbf, 0x54, 0x41, 0x16, 0x7f, 0x2b, 0x2f, 0xea, 0x77, 0xa9, - 0x09, 0xe3, 0x20, 0x60, 0xf2, 0x63, 0xb1, 0x84, 0xee, 0xe2, 0xd6, 0xfe, 0xd5, 0xbe, 0xfb, 0x0f, - 0xfa, 0xca, 0xe3, 0x44, 0x11, 0xae, 0xf9, 0x6b, 0xa7, 0xc1, 0xd4, 0xc5, 0xae, 0xdd, 0xbe, 0x14, - 0x1e, 0xd7, 0x67, 0x8f, 0xda, 0xcd, 0x20, 0xe7, 0x18, 0xd6, 0x36, 0x62, 0x7b, 0x0a, 0x27, 0xfb, - 0xfa, 0x42, 0xe2, 0xf5, 0xa2, 0xd3, 0x2c, 0xf0, 0x9d, 0x49, 0x22, 0x30, 0x0c, 0xa8, 0x7c, 0x32, - 0x7d, 0x58, 0x1a, 0xe1, 0xe4, 0x59, 0x11, 0xcc, 0x96, 0x4b, 0x75, 0x7a, 0xf9, 0x6a, 0xe3, 0x5c, - 0xa5, 0xa8, 0x12, 0x98, 0xb1, 0x4c, 0x52, 0x84, 0x19, 0x93, 0xff, 0x2f, 0x0b, 0xf3, 0x80, 0xca, - 0x1f, 0x05, 0xcc, 0x9f, 0x51, 0xc0, 0x5c, 0xcd, 0x74, 0xbd, 0x28, 0x6f, 0xff, 0x98, 0x78, 0xbf, - 0x2f, 0x4a, 0x6a, 0x2a, 0x0b, 0xe5, 0x48, 0x07, 0xfa, 0x4d, 0x64, 0x0e, 0xc7, 0x15, 0x31, 0x99, - 0x63, 0x29, 0x84, 0x03, 0xd4, 0x45, 0x49, 0x24, 0x99, 0xd8, 0x50, 0x0a, 0x0b, 0x99, 0xbc, 0xa1, - 0x14, 0x59, 0x76, 0xfa, 0xf2, 0xfd, 0x4b, 0x05, 0x9c, 0xc0, 0xc5, 0xc7, 0x2d, 0x4b, 0x45, 0x8b, - 0x79, 0xe8, 0xb2, 0x54, 0xe2, 0x95, 0xf1, 0x03, 0xbc, 0x8c, 0x63, 0x65, 0x7c, 0x18, 0xd1, 0x09, - 0x8b, 0x39, 0x62, 0x19, 0x76, 0x98, 0x98, 0x63, 0x96, 0x61, 0x47, 0x17, 0x73, 0xfc, 0x52, 0xec, - 0x88, 0x62, 0x3e, 0xb2, 0x05, 0xd6, 0x5f, 0x52, 0x03, 0x31, 0x47, 0xae, 0x6d, 0xc4, 0x88, 0x39, - 0xf1, 0x89, 0x5e, 0xf8, 0xee, 0x11, 0x05, 0x3f, 0xe6, 0xf5, 0x8d, 0x51, 0x60, 0x3a, 0xc2, 0x35, - 0x8e, 0x5f, 0x50, 0xc1, 0x3c, 0xe3, 0x62, 0xf0, 0x94, 0x39, 0x06, 0xa3, 0xc4, 0x53, 0xe6, 0xc4, - 0x67, 0x80, 0x44, 0xce, 0x26, 0x7f, 0x06, 0x28, 0xb6, 0xfc, 0xf4, 0xc1, 0xf9, 0x7a, 0x16, 0x9c, - 0xc2, 0x2c, 0xac, 0xd9, 0x1d, 0x73, 0x6b, 0x9f, 0x72, 0x71, 0xce, 0xe8, 0xee, 0x21, 0x17, 0x7e, - 0x40, 0x91, 0x45, 0xe9, 0xbf, 0x01, 0x60, 0xf7, 0x90, 0x43, 0xe3, 0xb8, 0x31, 0xa0, 0xee, 0x8c, - 0xaa, 0xec, 0xc1, 0x92, 0x82, 0xeb, 0x73, 0x1a, 0x3e, 0x11, 0x9d, 0xa3, 0x87, 0xad, 0xc2, 0xe9, - 0xe0, 0x4d, 0xbf, 0x83, 0x47, 0xe6, 0xa0, 0x83, 0xc7, 0x4d, 0x40, 0x35, 0x3a, 0x9d, 0x00, 0xaa, - 0xfe, 0xcd, 0x6c, 0x52, 0xa6, 0x8e, 0xb3, 0xe0, 0x9c, 0x2e, 0x0a, 0x8f, 0xe6, 0x45, 0xe4, 0x74, - 0x91, 0xa7, 0x2d, 0x80, 0xbc, 0x43, 0x62, 0x12, 0x07, 0x2b, 0xfa, 0x83, 0x33, 0xb3, 0x5c, 0xa2, - 0x69, 0xd7, 0x10, 0xd5, 0xf0, 0xf6, 0x44, 0x92, 0x19, 0xd4, 0x4f, 0x87, 0x76, 0xb2, 0x2e, 0x28, - 0xd8, 0x93, 0x47, 0xa6, 0x3c, 0x99, 0xdd, 0xb0, 0x52, 0xaf, 0xd7, 0xdd, 0x6f, 0xb1, 0xc0, 0x03, - 0x89, 0x76, 0xc3, 0xb8, 0xf8, 0x05, 0xca, 0x81, 0xf8, 0x05, 0x89, 0x77, 0xc3, 0x04, 0x3e, 0xc6, - 0xb1, 0x1b, 0x16, 0x47, 0x30, 0x7d, 0xd1, 0xfe, 0x6d, 0x81, 0x5a, 0xcd, 0xec, 0x36, 0x82, 0x7f, - 0x1c, 0xec, 0x59, 0x0d, 0x44, 0x67, 0x97, 0x41, 0x17, 0x15, 0xc4, 0xde, 0xc2, 0xa2, 0x3d, 0x0e, - 0xe4, 0xb7, 0x6c, 0x67, 0xd7, 0xf0, 0x37, 0xee, 0xfb, 0x4f, 0x8a, 0xb0, 0x1b, 0x00, 0x96, 0x49, - 0x1e, 0x9d, 0xe5, 0xc5, 0xf3, 0x91, 0x67, 0x9a, 0x3d, 0x16, 0xf4, 0x11, 0xff, 0xd5, 0x6e, 0x00, - 0x73, 0x2c, 0xf6, 0x63, 0x1d, 0xb9, 0x1e, 0xea, 0xb0, 0x88, 0x16, 0x62, 0xa2, 0x76, 0x16, 0xcc, - 0xb2, 0x84, 0x65, 0xb3, 0x8b, 0x5c, 0x16, 0xd4, 0x42, 0x48, 0xd3, 0x4e, 0x81, 0xbc, 0xe9, 0xde, - 0xed, 0xda, 0x16, 0x0b, 0xc8, 0xc7, 0x9e, 0xb4, 0x9b, 0xc0, 0x71, 0x96, 0x2f, 0x30, 0x56, 0xe9, - 0x81, 0x9d, 0xfe, 0x64, 0xac, 0x5a, 0x96, 0xbd, 0xee, 0xd8, 0xdb, 0x0e, 0x72, 0x5d, 0x72, 0x6a, - 0xaa, 0xa0, 0x73, 0x29, 0xda, 0x05, 0x70, 0xa2, 0x6b, 0x5a, 0x97, 0x5c, 0x12, 0x23, 0x78, 0x99, - 0xb9, 0x8d, 0xcd, 0x0e, 0x88, 0xdd, 0xcd, 0x35, 0x36, 0x26, 0x07, 0xfe, 0x13, 0xfd, 0x20, 0x15, - 0xed, 0x66, 0x50, 0x64, 0xdc, 0x2c, 0x1a, 0xed, 0x4b, 0xe4, 0x3d, 0x73, 0x47, 0x3d, 0x90, 0xce, - 0x09, 0x83, 0x86, 0xd1, 0x9f, 0x17, 0x84, 0x41, 0x23, 0xe9, 0xbf, 0x24, 0x03, 0x66, 0x85, 0x02, - 0x0c, 0xa0, 0xf9, 0xdd, 0xa2, 0x7b, 0x7e, 0xc7, 0xf4, 0x10, 0x66, 0x8e, 0x9d, 0x75, 0x79, 0xcc, - 0x10, 0xe6, 0xf5, 0x03, 0x1f, 0xea, 0x03, 0x88, 0x61, 0xbe, 0x68, 0x87, 0x47, 0x3c, 0xcb, 0x5c, - 0x66, 0xab, 0x0a, 0x69, 0xf0, 0x99, 0x40, 0x3b, 0x48, 0x8d, 0xf3, 0x02, 0xc9, 0x24, 0xf3, 0x02, - 0xc1, 0x72, 0x33, 0xba, 0x5d, 0xfb, 0x0a, 0xea, 0x04, 0x64, 0x99, 0xae, 0x1e, 0x48, 0x87, 0x9f, - 0x1b, 0x65, 0x5e, 0x98, 0xf8, 0x62, 0x0d, 0xdc, 0xc8, 0xf6, 0xda, 0x6d, 0x84, 0x3a, 0xec, 0xe0, - 0x9a, 0xff, 0x98, 0xf0, 0xca, 0x8d, 0xc4, 0xb3, 0xc8, 0x23, 0xba, 0x73, 0xe3, 0xfd, 0xe1, 0xcd, - 0x27, 0x7b, 0x32, 0x5d, 0x4d, 0xdc, 0xf9, 0xf8, 0x91, 0x3a, 0x15, 0xf8, 0xde, 0xa4, 0xa7, 0x45, - 0x63, 0x31, 0x3d, 0x85, 0x07, 0x77, 0x77, 0xaf, 0x1b, 0x1c, 0x77, 0xa2, 0x4f, 0x09, 0xd1, 0x4b, - 0x74, 0x80, 0xf4, 0x88, 0x90, 0xfb, 0xf8, 0xd5, 0x20, 0x4f, 0x6f, 0x2e, 0x84, 0x2f, 0x99, 0x1f, - 0x08, 0xdd, 0xbc, 0x08, 0xdd, 0x06, 0x98, 0xb5, 0x6c, 0x5c, 0xdc, 0xba, 0xe1, 0x18, 0xbb, 0x6e, - 0xdc, 0xf2, 0x3e, 0xa5, 0x1b, 0xd8, 0x72, 0x75, 0xee, 0xb3, 0xd5, 0x63, 0xba, 0x40, 0x46, 0xfb, - 0xbf, 0xc0, 0xf1, 0x8b, 0x2c, 0x34, 0x87, 0xcb, 0x28, 0x2b, 0xd1, 0xce, 0xaf, 0x7d, 0x94, 0x17, - 0xc5, 0x2f, 0x57, 0x8f, 0xe9, 0xfd, 0xc4, 0xb4, 0x1f, 0x02, 0xf3, 0xf8, 0xb1, 0x63, 0x5f, 0xf1, - 0x19, 0x57, 0xa3, 0x67, 0x00, 0x7d, 0xe4, 0xd7, 0x84, 0x0f, 0x57, 0x8f, 0xe9, 0x7d, 0xa4, 0xb4, - 0x06, 0x00, 0x3b, 0xde, 0x6e, 0x97, 0x11, 0xce, 0x46, 0x77, 0x26, 0x7d, 0x84, 0x57, 0x83, 0x8f, - 0x56, 0x8f, 0xe9, 0x1c, 0x09, 0xad, 0x06, 0xa6, 0xbd, 0xfb, 0x3c, 0x46, 0x2f, 0x17, 0xed, 0x75, - 0xd2, 0x47, 0xaf, 0xe5, 0x7f, 0xb3, 0x7a, 0x4c, 0x0f, 0x09, 0x68, 0x55, 0x50, 0xe8, 0x5d, 0x64, - 0xc4, 0xf2, 0xd1, 0x23, 0x55, 0x1f, 0xb1, 0xf5, 0x8b, 0x01, 0xad, 0xe0, 0x73, 0xcc, 0x58, 0xdb, - 0xbd, 0xcc, 0x68, 0x4d, 0x49, 0x33, 0x56, 0xf6, 0xbf, 0xc1, 0x8c, 0x05, 0x04, 0xb4, 0x2a, 0x98, - 0x76, 0x2d, 0xa3, 0xe7, 0xee, 0xd8, 0x9e, 0x7b, 0xba, 0xd0, 0xe7, 0xa0, 0x1c, 0x4d, 0xad, 0xc9, - 0xbe, 0xd1, 0xc3, 0xaf, 0xb5, 0xc7, 0x81, 0xab, 0xf7, 0x7a, 0x1d, 0xc3, 0x43, 0x95, 0xfb, 0x4c, - 0x37, 0xbc, 0xbd, 0xd2, 0x3f, 0x97, 0x3b, 0xf8, 0xa5, 0xb6, 0xc0, 0x8e, 0x2a, 0x02, 0xd2, 0x2e, - 0x61, 0xff, 0x2e, 0x39, 0x2d, 0x96, 0x3b, 0xa1, 0xf8, 0x44, 0x90, 0xc5, 0xaf, 0x88, 0x59, 0x30, - 0x3f, 0x78, 0x05, 0xbe, 0x5f, 0x77, 0x48, 0x03, 0xc6, 0x1f, 0xf5, 0x59, 0x16, 0xb3, 0x07, 0x2c, - 0x8b, 0xeb, 0xc1, 0x8c, 0xe9, 0xae, 0x99, 0xdb, 0x74, 0x5a, 0xc3, 0x46, 0x7e, 0x3e, 0x89, 0x2e, - 0x03, 0xd5, 0xd1, 0x15, 0x3a, 0xe4, 0x1f, 0xf7, 0x97, 0x81, 0xfc, 0x14, 0x78, 0x23, 0x98, 0xe5, - 0x1b, 0x19, 0xbd, 0x13, 0xda, 0x0c, 0x27, 0x45, 0xec, 0x09, 0xde, 0x00, 0xe6, 0x45, 0x9d, 0xe6, - 0x6c, 0x3f, 0xd5, 0x1f, 0xc4, 0xe0, 0xc3, 0xc0, 0xf1, 0xbe, 0x86, 0xe5, 0x07, 0xfb, 0xc9, 0x84, - 0xc1, 0x7e, 0xae, 0x07, 0x20, 0xd4, 0xe2, 0x81, 0x64, 0x1e, 0x02, 0xa6, 0x03, 0xbd, 0x1c, 0x98, - 0xe1, 0x6b, 0x19, 0x50, 0xf0, 0x95, 0x6d, 0x50, 0x06, 0x6c, 0x53, 0x58, 0xdc, 0xce, 0x9e, 0x6f, - 0x53, 0xf0, 0x69, 0xd8, 0xc0, 0x0b, 0xfd, 0xe9, 0x5b, 0xa6, 0xd7, 0xf5, 0xcf, 0xa4, 0xf6, 0x27, - 0x6b, 0xeb, 0x00, 0x98, 0x04, 0xa3, 0x56, 0x78, 0x48, 0xf5, 0xd1, 0x09, 0xda, 0x03, 0xd5, 0x07, - 0x8e, 0xc6, 0xd9, 0x87, 0xb2, 0x13, 0xa4, 0xd3, 0x20, 0x47, 0x2f, 0x58, 0x38, 0xa6, 0xcd, 0x03, - 0x50, 0x79, 0xda, 0x7a, 0x45, 0xaf, 0x56, 0xea, 0xe5, 0x4a, 0x31, 0x03, 0x5f, 0xae, 0x80, 0xe9, - 0xa0, 0x11, 0x0c, 0xac, 0x64, 0x85, 0xa9, 0xd6, 0xd0, 0x1b, 0x66, 0x0f, 0x36, 0x2a, 0x5e, 0xc9, - 0x9e, 0x00, 0x1e, 0xb4, 0xe7, 0xa2, 0x65, 0xd3, 0x71, 0x3d, 0xdd, 0xbe, 0xb2, 0x6c, 0x3b, 0xa1, - 0x49, 0x44, 0x43, 0x13, 0x47, 0xbd, 0xc6, 0xa6, 0x7e, 0x07, 0x91, 0xd3, 0x8a, 0xc8, 0x61, 0x5b, - 0x36, 0x61, 0x02, 0xa6, 0xeb, 0x39, 0x86, 0xe5, 0xf6, 0x6c, 0x17, 0xe9, 0xf6, 0x15, 0xb7, 0x64, - 0x75, 0xca, 0x76, 0x77, 0x6f, 0xd7, 0x72, 0x99, 0xb1, 0x1e, 0xf5, 0x1a, 0x4b, 0x87, 0xdc, 0x1f, - 0x3d, 0x0f, 0x40, 0xb9, 0x51, 0xab, 0x55, 0xca, 0xad, 0x6a, 0xa3, 0x5e, 0x3c, 0x86, 0xa5, 0xd5, - 0x2a, 0x2d, 0xd6, 0xb0, 0x74, 0x9e, 0x0e, 0x0a, 0x7e, 0x9b, 0x66, 0xf1, 0x89, 0x32, 0x7e, 0x7c, - 0x22, 0xad, 0x04, 0x0a, 0x7e, 0x2b, 0x67, 0x23, 0xc2, 0xc3, 0xfb, 0xcf, 0xa3, 0xef, 0x1a, 0x8e, - 0x47, 0x4c, 0x4b, 0x9f, 0xc8, 0xa2, 0xe1, 0x22, 0x3d, 0xf8, 0xec, 0xec, 0xa3, 0x18, 0x07, 0x1a, - 0x98, 0x2f, 0xd5, 0x6a, 0x9b, 0x0d, 0x7d, 0xb3, 0xde, 0x68, 0xad, 0x56, 0xeb, 0x2b, 0x74, 0x84, - 0xac, 0xae, 0xd4, 0x1b, 0x7a, 0x85, 0x0e, 0x90, 0xcd, 0x62, 0xe6, 0x8e, 0xec, 0xfd, 0x5f, 0x57, - 0x33, 0x8b, 0x05, 0x90, 0xef, 0x11, 0xe9, 0xc2, 0x2f, 0xa9, 0x09, 0x4d, 0x8b, 0x00, 0xa7, 0x88, - 0x1b, 0x96, 0x85, 0xc3, 0x20, 0xca, 0x80, 0xc3, 0xda, 0x67, 0xc1, 0x2c, 0x35, 0x87, 0x5c, 0xb2, - 0xaf, 0x46, 0x90, 0x53, 0x75, 0x21, 0x0d, 0x7e, 0x42, 0x49, 0x60, 0x5c, 0x0c, 0xe4, 0x28, 0x99, - 0x71, 0xf1, 0x47, 0x99, 0xd1, 0xae, 0x23, 0xa9, 0xd6, 0x5b, 0x15, 0xbd, 0x5e, 0xaa, 0xb1, 0x2c, - 0xaa, 0x76, 0x1a, 0x9c, 0xac, 0x37, 0x58, 0x30, 0xce, 0xe6, 0x66, 0xab, 0xb1, 0x59, 0x5d, 0x5b, - 0x6f, 0xe8, 0xad, 0x62, 0x4e, 0x3b, 0x05, 0x34, 0xfa, 0x7f, 0xb3, 0xda, 0xdc, 0x2c, 0x97, 0xea, - 0xe5, 0x4a, 0xad, 0xb2, 0x54, 0xcc, 0x6b, 0x8f, 0x00, 0x0f, 0xa3, 0xd7, 0x5b, 0x35, 0x96, 0x37, - 0xf5, 0xc6, 0xf9, 0x26, 0x46, 0x50, 0xaf, 0xd4, 0x4a, 0x58, 0x91, 0x9a, 0xe1, 0x9d, 0x57, 0x53, - 0xda, 0x55, 0xe0, 0xf8, 0x72, 0xb5, 0x56, 0x21, 0xb7, 0xd1, 0xb2, 0xf2, 0x0a, 0xda, 0x75, 0xe0, - 0x74, 0xb5, 0xde, 0xdc, 0x58, 0x5e, 0xae, 0x96, 0xab, 0x95, 0x7a, 0x6b, 0x73, 0xbd, 0xa2, 0xaf, - 0x55, 0x9b, 0x4d, 0xfc, 0x6d, 0x71, 0x1a, 0x7e, 0x5c, 0x05, 0x79, 0xda, 0x67, 0x62, 0x23, 0x76, - 0xee, 0x9c, 0xd1, 0x35, 0xf1, 0x40, 0xd1, 0xb2, 0x2f, 0x21, 0xab, 0xef, 0x1c, 0x97, 0x87, 0xd3, - 0xfc, 0x93, 0x20, 0xe4, 0x01, 0xfe, 0x98, 0x9a, 0xf0, 0x1c, 0x17, 0x03, 0x82, 0x96, 0xb8, 0x20, - 0x94, 0x16, 0xb1, 0xea, 0xf0, 0x1a, 0x25, 0xc1, 0x39, 0x2e, 0x79, 0xf2, 0xc9, 0xc0, 0xff, 0xc5, - 0x71, 0x81, 0x5f, 0x04, 0xb3, 0x1b, 0xf5, 0xd2, 0x46, 0x6b, 0xb5, 0xa1, 0x57, 0x7f, 0x90, 0xdc, - 0x42, 0x30, 0x07, 0xa6, 0x97, 0x1b, 0xfa, 0x62, 0x75, 0x69, 0xa9, 0x52, 0x2f, 0xe6, 0xb4, 0x07, - 0x81, 0xab, 0x9a, 0x15, 0xfd, 0x5c, 0xb5, 0x5c, 0xd9, 0xdc, 0xa8, 0x97, 0xce, 0x95, 0xaa, 0x35, - 0xd2, 0x47, 0xe4, 0x63, 0x6e, 0xaa, 0x9f, 0x82, 0x3f, 0x92, 0x05, 0x80, 0x56, 0x9d, 0x5c, 0xc2, - 0xc5, 0x5d, 0x90, 0xfe, 0x27, 0x49, 0xa7, 0x7b, 0x21, 0x99, 0x88, 0xf6, 0x5b, 0x05, 0x05, 0x87, - 0xbd, 0x60, 0xeb, 0x9a, 0xc3, 0xe8, 0xd0, 0xbf, 0x3e, 0x35, 0x3d, 0xf8, 0x1c, 0x7e, 0x20, 0xc9, - 0xec, 0x2e, 0x92, 0xb1, 0x89, 0xdc, 0xf4, 0xdc, 0x0f, 0x24, 0x7c, 0x61, 0x06, 0xcc, 0x8b, 0x15, - 0xc3, 0x95, 0x20, 0xc6, 0x94, 0x5c, 0x25, 0xc4, 0x8f, 0x39, 0x23, 0xeb, 0xec, 0x63, 0xd9, 0x70, - 0x0a, 0xfc, 0x96, 0x49, 0x43, 0x32, 0xf8, 0x16, 0x4b, 0x31, 0x83, 0x99, 0xc7, 0x46, 0x47, 0x51, - 0xd1, 0xa6, 0x80, 0xda, 0xba, 0xcf, 0x2b, 0xaa, 0xf0, 0x53, 0x59, 0x30, 0x27, 0xdc, 0xc0, 0x0e, - 0xff, 0x34, 0x23, 0x73, 0xbb, 0x31, 0x77, 0xb7, 0x7b, 0xe6, 0xb0, 0x77, 0xbb, 0x9f, 0x35, 0xc1, - 0x14, 0x4b, 0x23, 0xf2, 0x6d, 0xd4, 0xb1, 0x29, 0x70, 0x1c, 0xcc, 0xac, 0x54, 0x5a, 0x9b, 0xcd, - 0x56, 0x49, 0x6f, 0x55, 0x96, 0x8a, 0x19, 0x3c, 0xf0, 0x55, 0xd6, 0xd6, 0x5b, 0x17, 0x8a, 0x0a, - 0x1e, 0x13, 0x57, 0x36, 0xaa, 0x4b, 0x95, 0xcd, 0x46, 0xbd, 0x76, 0xa1, 0xa8, 0xe2, 0x1e, 0x90, - 0xcb, 0xbb, 0xb9, 0xd6, 0x58, 0xac, 0xd6, 0x2a, 0xc5, 0x2c, 0x6e, 0x36, 0xe4, 0x13, 0x3f, 0x25, - 0x27, 0xfa, 0x46, 0xcb, 0xac, 0x70, 0xf6, 0x57, 0xe1, 0xf0, 0x2e, 0x22, 0x49, 0xae, 0x90, 0x4f, - 0xb4, 0x76, 0x1a, 0xc7, 0x6a, 0xfa, 0x33, 0xe2, 0xcf, 0xaa, 0xa0, 0x48, 0x39, 0xa8, 0xdc, 0xd7, - 0x43, 0x8e, 0x89, 0xac, 0x36, 0x82, 0x97, 0x64, 0x02, 0x02, 0x1f, 0x08, 0x85, 0x49, 0x46, 0x0d, - 0xce, 0x16, 0xa5, 0x0f, 0x7d, 0x66, 0x7c, 0xf6, 0x80, 0x19, 0xff, 0x7b, 0x49, 0x3d, 0x70, 0xfb, - 0xd9, 0x1d, 0xcb, 0x9e, 0xd5, 0xa7, 0x93, 0x78, 0xe0, 0x0e, 0xe1, 0x60, 0x22, 0x71, 0xbe, 0x23, - 0x46, 0xf9, 0xa2, 0x0a, 0x5f, 0xa0, 0x82, 0xe3, 0x4b, 0x86, 0x87, 0x16, 0xf7, 0x5b, 0xfe, 0x3d, - 0xaa, 0x11, 0x77, 0x9f, 0x67, 0x0e, 0xdc, 0x7d, 0x1e, 0x5e, 0xc5, 0xaa, 0xf4, 0x5d, 0xc5, 0x0a, - 0xdf, 0x93, 0xf4, 0xcc, 0x6e, 0x1f, 0x0f, 0x63, 0x0b, 0xc6, 0x9d, 0xec, 0x2c, 0x6e, 0x3c, 0x17, - 0xe9, 0x37, 0xb0, 0xb7, 0x4f, 0x83, 0x22, 0x65, 0x85, 0x73, 0x32, 0xfd, 0x59, 0x15, 0xa8, 0xa5, - 0x4e, 0x07, 0x6e, 0x26, 0x88, 0xe9, 0xe9, 0x47, 0x49, 0x51, 0xc4, 0x28, 0x29, 0xc2, 0x9e, 0x85, - 0xda, 0xef, 0x18, 0x94, 0xf4, 0x34, 0x02, 0xe7, 0x51, 0x1a, 0x1d, 0x46, 0x39, 0xbd, 0xd3, 0x08, - 0xb1, 0xc5, 0x4f, 0xe6, 0x4a, 0x6b, 0x76, 0x8b, 0x6c, 0x45, 0x16, 0x99, 0xf8, 0x9b, 0xfb, 0x93, - 0x1e, 0x2f, 0x10, 0x3c, 0x7a, 0x63, 0xae, 0xb3, 0x4f, 0xef, 0x78, 0xc1, 0x30, 0x0e, 0xd2, 0x47, - 0xe1, 0xbb, 0x0a, 0xc8, 0x36, 0x6d, 0xc7, 0x1b, 0x17, 0x06, 0x49, 0x5d, 0x22, 0x38, 0x09, 0x34, - 0xa3, 0x67, 0xb6, 0xe9, 0xb9, 0x44, 0xc4, 0x97, 0x3f, 0x81, 0xb0, 0xa8, 0xc7, 0xc1, 0x3c, 0xe5, - 0x24, 0xb8, 0x53, 0xe8, 0xdf, 0x14, 0xda, 0x5f, 0xdd, 0x23, 0x8b, 0x08, 0xd9, 0x18, 0x0b, 0x5c, - 0x12, 0x7c, 0x50, 0x84, 0x34, 0xf8, 0x46, 0x1e, 0x97, 0x25, 0x11, 0x97, 0x41, 0xf3, 0xfa, 0xe0, - 0x5a, 0x9e, 0x71, 0xf5, 0x4c, 0x49, 0x22, 0xac, 0xc6, 0x14, 0x9e, 0x3e, 0x22, 0xcf, 0x51, 0x41, - 0x9e, 0xb9, 0x84, 0x8e, 0x15, 0x81, 0xa4, 0x2d, 0x23, 0x10, 0x82, 0x9c, 0xeb, 0xa8, 0x3a, 0xee, - 0x96, 0x11, 0x5f, 0x7e, 0xfa, 0x38, 0xfc, 0x07, 0xf3, 0x75, 0x2e, 0x5d, 0x36, 0xcc, 0xae, 0x71, - 0xb1, 0x9b, 0x20, 0xb2, 0xf9, 0x27, 0x12, 0x9e, 0xee, 0x0c, 0xaa, 0x2a, 0x94, 0x17, 0x21, 0xf1, - 0xef, 0x07, 0xd3, 0x8e, 0xb0, 0x17, 0x8c, 0xad, 0xa8, 0x3e, 0x3f, 0x73, 0xf6, 0x5e, 0x0f, 0x73, - 0x26, 0x3a, 0xca, 0x29, 0xc5, 0xcf, 0x44, 0x8e, 0x9e, 0xcd, 0x94, 0x3a, 0x9d, 0x65, 0x64, 0x78, - 0x7b, 0x0e, 0xea, 0x24, 0x1a, 0x22, 0x9c, 0xbe, 0xed, 0x72, 0x4e, 0x12, 0x42, 0x6c, 0xd1, 0x9a, - 0x88, 0xce, 0xe3, 0x87, 0xf4, 0x06, 0x3e, 0x2f, 0x63, 0xe9, 0x92, 0xde, 0x16, 0x40, 0xd2, 0x10, - 0x20, 0x79, 0xe2, 0x68, 0x4c, 0xa4, 0x0f, 0xc8, 0x4b, 0x55, 0x30, 0x4f, 0xed, 0x84, 0x71, 0x63, - 0xf2, 0xe1, 0x84, 0x2e, 0x64, 0xdc, 0xad, 0x6d, 0x3c, 0x3b, 0x63, 0x81, 0x25, 0x89, 0xc3, 0x99, - 0x1c, 0x1f, 0xe9, 0x23, 0xf3, 0xbf, 0xae, 0x02, 0x80, 0x73, 0x0b, 0xfe, 0x44, 0x3e, 0x8c, 0xf3, - 0x09, 0xdf, 0xc9, 0xe6, 0x1f, 0x4d, 0x21, 0xe8, 0x3c, 0xe7, 0xf2, 0x1b, 0x6c, 0x7b, 0x89, 0x89, - 0x52, 0xa3, 0xca, 0x1f, 0x25, 0xb4, 0x79, 0x99, 0x53, 0xee, 0xd0, 0xc1, 0x7d, 0xc4, 0x5e, 0xee, - 0x93, 0x09, 0x8c, 0xdf, 0x61, 0xac, 0x24, 0x43, 0xad, 0x36, 0xc2, 0xcc, 0xfe, 0x34, 0x38, 0xa9, - 0x57, 0x4a, 0x4b, 0x8d, 0x7a, 0xed, 0x02, 0x7f, 0x85, 0x57, 0x51, 0xe5, 0x27, 0x27, 0xa9, 0xc0, - 0xf6, 0xba, 0x84, 0x7d, 0xa0, 0x28, 0xab, 0xb8, 0xd9, 0x0a, 0xb7, 0xb8, 0x32, 0xbc, 0x57, 0x93, - 0x20, 0x7b, 0x94, 0x28, 0x7c, 0x33, 0x0f, 0x66, 0x74, 0xd4, 0xb6, 0x77, 0x77, 0x91, 0xd5, 0x41, - 0x1d, 0xf8, 0x3a, 0x15, 0xcc, 0x06, 0xbb, 0x8a, 0x4d, 0xe4, 0xc1, 0x1f, 0x0a, 0xb1, 0x39, 0x0b, - 0x66, 0x71, 0xe5, 0x1a, 0xe2, 0x45, 0x02, 0x42, 0x9a, 0x76, 0x0b, 0x38, 0xe1, 0xa3, 0xd0, 0xe8, - 0x9b, 0xc2, 0x1c, 0x7c, 0x21, 0xfa, 0xfd, 0x6c, 0x88, 0x18, 0xdd, 0x15, 0x2d, 0xcc, 0x80, 0xdd, - 0x05, 0x9e, 0xd5, 0x08, 0xb0, 0xfe, 0x20, 0x00, 0xeb, 0x69, 0x02, 0x58, 0x4b, 0x87, 0xa4, 0x7f, - 0x94, 0xa8, 0x7d, 0x48, 0x05, 0x27, 0xfd, 0x8e, 0x78, 0x72, 0x68, 0x7d, 0x92, 0x47, 0xeb, 0xe9, - 0x22, 0x5a, 0x2b, 0x32, 0xd2, 0x1c, 0xc4, 0x72, 0x04, 0x6a, 0x5f, 0x0c, 0x50, 0xfb, 0x61, 0x01, - 0xb5, 0xda, 0x98, 0xca, 0x39, 0x4a, 0xf4, 0x3e, 0xac, 0x82, 0xd3, 0xd8, 0xec, 0x2c, 0xdb, 0xd6, - 0x56, 0xd7, 0x6c, 0x7b, 0xa6, 0xb5, 0x1d, 0xba, 0x38, 0xae, 0xc8, 0xac, 0x6c, 0xf6, 0x63, 0xab, - 0x1c, 0xc4, 0x56, 0xdc, 0x63, 0x90, 0x6d, 0x5b, 0x51, 0x6c, 0x45, 0x0c, 0x61, 0x9c, 0xf3, 0x7e, - 0xa8, 0x39, 0x7c, 0x52, 0xf2, 0xd6, 0x27, 0xc9, 0xc1, 0x51, 0xe2, 0xf7, 0x35, 0x05, 0x9c, 0xd2, - 0x91, 0x6b, 0x77, 0x2f, 0x23, 0xea, 0xcb, 0xea, 0xf3, 0xeb, 0xc2, 0x47, 0x25, 0x6a, 0x7f, 0xf0, - 0xa5, 0x3c, 0x46, 0x4d, 0x11, 0xa3, 0x27, 0x45, 0x6b, 0xfa, 0xa0, 0xa2, 0x23, 0xda, 0xd1, 0x7b, - 0x03, 0xf9, 0x9f, 0x13, 0xe4, 0xbf, 0x78, 0x28, 0xea, 0x13, 0x58, 0x22, 0x00, 0x9c, 0x79, 0xf7, - 0x7c, 0x15, 0x14, 0x89, 0xcf, 0x32, 0x19, 0x3d, 0xd9, 0x1d, 0xc2, 0x0d, 0xf1, 0x34, 0x4b, 0xcf, - 0x57, 0x42, 0xff, 0x34, 0x8b, 0x9f, 0xa0, 0xdd, 0x08, 0xe6, 0xdb, 0x3b, 0xa8, 0x7d, 0xa9, 0x6a, - 0xf9, 0x5e, 0x65, 0xd4, 0x05, 0xa9, 0x2f, 0x55, 0x34, 0x18, 0xee, 0x11, 0xc1, 0x10, 0x17, 0x77, - 0x85, 0xc9, 0x23, 0xcf, 0x54, 0x04, 0x08, 0xbf, 0x15, 0x80, 0x50, 0x17, 0x40, 0xb8, 0x63, 0x24, - 0xaa, 0xc9, 0x84, 0x5f, 0x1f, 0x41, 0xf5, 0x21, 0x38, 0xd5, 0x58, 0x6f, 0x55, 0x1b, 0xf5, 0xcd, - 0x8d, 0x66, 0x65, 0x69, 0x73, 0xd1, 0x6f, 0x00, 0xcd, 0xa2, 0x0a, 0xbf, 0xa1, 0x80, 0x29, 0xca, - 0x96, 0x0b, 0x1f, 0x19, 0x42, 0x30, 0xf4, 0x18, 0x0f, 0x7c, 0xbb, 0x74, 0x50, 0xae, 0x40, 0x10, - 0xac, 0x9c, 0x88, 0xce, 0xe7, 0x09, 0x60, 0x8a, 0x82, 0xec, 0xef, 0xb4, 0x9c, 0x89, 0xb0, 0x9e, - 0x19, 0x19, 0xdd, 0xcf, 0x2e, 0x19, 0xa0, 0x6b, 0x08, 0x1b, 0xe9, 0xb7, 0x81, 0x67, 0x65, 0xe9, - 0xf2, 0xcc, 0x79, 0xd3, 0xdb, 0x21, 0xa7, 0x7c, 0xe0, 0x53, 0x65, 0x06, 0x87, 0x5b, 0x40, 0xee, - 0x32, 0xce, 0x3d, 0xe4, 0xc4, 0x14, 0xcd, 0x04, 0x7f, 0x51, 0x3a, 0x1e, 0xbc, 0xa0, 0x9f, 0x01, - 0x4f, 0x11, 0xe0, 0xac, 0x81, 0x6c, 0xd7, 0x74, 0x3d, 0x36, 0xaf, 0xb9, 0x3d, 0x11, 0x21, 0xff, - 0x4f, 0xd5, 0x43, 0xbb, 0x3a, 0x21, 0x03, 0xef, 0xc6, 0x56, 0x69, 0x98, 0x2a, 0x71, 0x6a, 0xec, - 0x34, 0x98, 0x62, 0xd1, 0x0c, 0xd8, 0xd6, 0x9f, 0xff, 0x28, 0xb9, 0xdd, 0x26, 0x55, 0xdb, 0xf4, - 0x75, 0xe0, 0xff, 0x3d, 0x0e, 0xa6, 0x56, 0x4d, 0xd7, 0xb3, 0x9d, 0x7d, 0xf8, 0xfa, 0x0c, 0x98, - 0x3a, 0x87, 0x1c, 0xd7, 0xb4, 0xad, 0x03, 0x8e, 0x76, 0xd7, 0x83, 0x99, 0x9e, 0x83, 0x2e, 0x9b, - 0xf6, 0x9e, 0xcb, 0x8d, 0xc4, 0x5c, 0x92, 0x06, 0x41, 0xc1, 0xd8, 0xf3, 0x76, 0x6c, 0x27, 0x0c, - 0x82, 0xe6, 0x3f, 0x6b, 0x67, 0x00, 0xa0, 0xff, 0xeb, 0xc6, 0x2e, 0x62, 0xee, 0x83, 0x5c, 0x8a, - 0xa6, 0x81, 0xac, 0x67, 0xee, 0x22, 0x76, 0x2b, 0x02, 0xf9, 0x8f, 0x05, 0x4c, 0x22, 0x0c, 0xb3, - 0x48, 0xce, 0xaa, 0xee, 0x3f, 0xc2, 0xcf, 0xab, 0x60, 0x66, 0x05, 0x79, 0x8c, 0x55, 0x17, 0xbe, - 0x28, 0x23, 0x75, 0x11, 0x19, 0x9e, 0xfb, 0x75, 0x0d, 0xd7, 0xff, 0x2e, 0x30, 0x6b, 0xc4, 0xc4, - 0xf0, 0x8a, 0x06, 0x95, 0xbf, 0x9f, 0x85, 0xc4, 0xeb, 0xf5, 0xaa, 0xf4, 0x00, 0x0d, 0xcb, 0xcc, - 0x36, 0xe7, 0x0f, 0xbe, 0x10, 0xe7, 0x1d, 0xb1, 0xb1, 0x6e, 0x98, 0xec, 0x17, 0xb8, 0xfa, 0x44, - 0x76, 0x47, 0x85, 0xcb, 0x2c, 0xc7, 0x81, 0xab, 0x77, 0x78, 0x4a, 0x8c, 0x8c, 0x1e, 0xe4, 0x96, - 0x8c, 0x92, 0x33, 0x9c, 0x93, 0x09, 0x5c, 0xb6, 0xac, 0x82, 0x99, 0xe6, 0x8e, 0x7d, 0xc5, 0x97, - 0xe3, 0xd3, 0xe5, 0x80, 0xbd, 0x0e, 0x4c, 0x5f, 0xee, 0x03, 0x35, 0x4c, 0xe0, 0xef, 0x77, 0x54, - 0xc5, 0xfb, 0x1d, 0xef, 0x57, 0x93, 0xc2, 0xc4, 0x31, 0x17, 0x01, 0x93, 0x78, 0x25, 0xa3, 0x92, - 0xe0, 0x4a, 0x46, 0xed, 0xf1, 0x60, 0x8a, 0x71, 0xcd, 0xb6, 0x02, 0xe2, 0x01, 0xf6, 0x33, 0xf3, - 0x15, 0xcc, 0x8a, 0x15, 0x4c, 0x86, 0x7c, 0x74, 0xe5, 0xd2, 0x47, 0xfe, 0x77, 0x15, 0x12, 0x23, - 0xcd, 0x07, 0xbe, 0x3c, 0x06, 0xe0, 0xe1, 0x77, 0x32, 0xb2, 0x1b, 0x66, 0x81, 0x04, 0x02, 0x0e, - 0x0e, 0x75, 0xc9, 0xe0, 0x50, 0x72, 0xe9, 0xcb, 0xf3, 0xe5, 0x59, 0x30, 0xbb, 0x64, 0x6e, 0x6d, - 0x05, 0x9d, 0xe4, 0x8b, 0x25, 0x3b, 0xc9, 0x68, 0x67, 0x38, 0x6c, 0xe7, 0xee, 0x39, 0x0e, 0xb2, - 0xfc, 0x4a, 0xb1, 0xe6, 0xd4, 0x97, 0xaa, 0xdd, 0x04, 0x8e, 0xfb, 0xe3, 0x02, 0xdf, 0x51, 0x4e, - 0xeb, 0xfd, 0xc9, 0xf0, 0x5b, 0xd2, 0xde, 0x16, 0xbe, 0x44, 0xf9, 0x2a, 0x45, 0x34, 0xc0, 0x3b, - 0xc1, 0xdc, 0x0e, 0xcd, 0x4d, 0x96, 0xa4, 0xfd, 0xce, 0xf2, 0x54, 0xdf, 0x1d, 0x14, 0x6b, 0xc8, - 0x75, 0x8d, 0x6d, 0xa4, 0x8b, 0x99, 0xfb, 0x9a, 0xaf, 0x9a, 0xe4, 0x46, 0x55, 0x39, 0xc7, 0x0d, - 0x89, 0x9a, 0xa4, 0xaf, 0x1d, 0x5f, 0x3c, 0x0b, 0xb2, 0xcb, 0x66, 0x17, 0xc1, 0x1f, 0x57, 0xc0, - 0xb4, 0x8e, 0xda, 0xb6, 0xd5, 0xc6, 0x4f, 0x9c, 0x6b, 0xec, 0x37, 0x33, 0xb2, 0x37, 0x89, 0x63, - 0x3a, 0x0b, 0x01, 0x8d, 0x88, 0x76, 0x23, 0x77, 0x63, 0x78, 0x2c, 0xa9, 0x09, 0xdc, 0xfb, 0x86, - 0xa7, 0x1e, 0x5b, 0x5b, 0x5d, 0xdb, 0x10, 0x36, 0x65, 0xfa, 0x4d, 0xa1, 0xf0, 0x20, 0x6e, 0xdd, - 0xf6, 0xd6, 0x4d, 0xcb, 0x0a, 0x62, 0xdb, 0x1c, 0x48, 0x17, 0xfd, 0x89, 0x62, 0xc3, 0x03, 0x92, - 0xba, 0xb3, 0xd2, 0x23, 0x34, 0xfb, 0x46, 0x30, 0x7f, 0x71, 0xdf, 0x43, 0x2e, 0xcb, 0xc5, 0x8a, - 0xcd, 0xea, 0x7d, 0xa9, 0xdc, 0xe5, 0x1e, 0x71, 0x61, 0x04, 0x63, 0x0a, 0x4c, 0x26, 0xea, 0xd5, - 0x11, 0x66, 0x80, 0x27, 0x41, 0xb1, 0xde, 0x58, 0xaa, 0x10, 0x4f, 0x6d, 0xdf, 0xf7, 0x75, 0x1b, - 0xfe, 0x8c, 0x0a, 0x66, 0x89, 0x93, 0xa3, 0x8f, 0xc2, 0xc3, 0x24, 0xe6, 0x23, 0xf0, 0x2b, 0xd2, - 0x5e, 0xdc, 0xa4, 0xca, 0x7c, 0x01, 0xd1, 0x82, 0xde, 0x32, 0xbb, 0xfd, 0x82, 0xce, 0xe9, 0x7d, - 0xa9, 0x03, 0x00, 0x51, 0x07, 0x02, 0xf2, 0x21, 0x29, 0x57, 0xee, 0x61, 0xdc, 0x1d, 0x15, 0x2a, - 0xbf, 0xa6, 0x82, 0x19, 0x3c, 0x49, 0xf1, 0x41, 0x69, 0x08, 0xa0, 0xd8, 0x56, 0x77, 0x3f, 0x5c, - 0x16, 0xf1, 0x1f, 0x13, 0x35, 0x92, 0x3f, 0x95, 0x9e, 0xb9, 0x13, 0x11, 0x71, 0xbc, 0x4c, 0x08, - 0xbf, 0x0f, 0x4a, 0xcd, 0xe7, 0x87, 0x30, 0x77, 0x54, 0xf0, 0xbd, 0x36, 0x0f, 0xf2, 0x1b, 0x3d, - 0x82, 0xdc, 0x97, 0x54, 0x99, 0x8b, 0x72, 0x0e, 0x1c, 0xe3, 0xc3, 0x66, 0x56, 0xd7, 0x6e, 0x1b, - 0xdd, 0xf5, 0xf0, 0x24, 0x7b, 0x98, 0xa0, 0xdd, 0xc1, 0x3c, 0xfb, 0xe9, 0x81, 0xec, 0x1b, 0x63, - 0xef, 0x90, 0x21, 0x32, 0xe2, 0x8e, 0x4c, 0xde, 0x02, 0x4e, 0x74, 0x4c, 0xd7, 0xb8, 0xd8, 0x45, - 0x15, 0xab, 0xed, 0xec, 0x53, 0x71, 0xb0, 0x69, 0xd5, 0x81, 0x17, 0xda, 0x93, 0x40, 0xce, 0xf5, - 0xf6, 0xbb, 0x74, 0x9e, 0xc8, 0x9f, 0xb0, 0x8c, 0x2c, 0xaa, 0x89, 0xb3, 0xeb, 0xf4, 0x2b, 0xde, - 0x75, 0x76, 0x4a, 0xce, 0x75, 0x56, 0x7b, 0x2c, 0xc8, 0xdb, 0x8e, 0xb9, 0x6d, 0xd2, 0x6b, 0x21, - 0xe7, 0x0f, 0x84, 0x4a, 0xa6, 0xa6, 0x40, 0x83, 0x64, 0xd1, 0x59, 0x56, 0xed, 0xf1, 0x60, 0xda, - 0xdc, 0x35, 0xb6, 0xd1, 0x3d, 0xa6, 0x45, 0x03, 0x49, 0xcc, 0xdf, 0x76, 0xfa, 0xc0, 0xe1, 0x51, - 0xf6, 0x5e, 0x0f, 0xb3, 0x6a, 0x77, 0x82, 0x6b, 0xda, 0x0e, 0x32, 0x3c, 0x84, 0x05, 0x74, 0xde, - 0xec, 0x6c, 0x23, 0xaf, 0xba, 0xb5, 0x66, 0xba, 0xae, 0x69, 0x6d, 0xb3, 0x9b, 0x5f, 0xa3, 0x33, - 0xc0, 0x0f, 0x2a, 0xb2, 0xd1, 0x20, 0x89, 0x64, 0xa8, 0x4a, 0x8c, 0x70, 0x43, 0x3d, 0x27, 0x45, - 0x55, 0xd2, 0x01, 0xf9, 0x55, 0x52, 0x71, 0x1a, 0xa3, 0xd9, 0x4a, 0x7f, 0xe8, 0xff, 0x63, 0x05, - 0x14, 0x96, 0xec, 0x2b, 0x16, 0x69, 0x26, 0xb7, 0xcb, 0x59, 0xca, 0x03, 0x42, 0x3b, 0x88, 0x77, - 0x9d, 0xc7, 0x9e, 0x06, 0x24, 0xb5, 0xf5, 0x8b, 0x8c, 0x80, 0x21, 0xb6, 0xdd, 0x49, 0x06, 0x10, - 0x88, 0x2b, 0x27, 0x7d, 0xb9, 0xfe, 0xbe, 0x0a, 0xb2, 0x4b, 0x8e, 0xdd, 0x83, 0x6f, 0xcb, 0x24, - 0x70, 0xc4, 0xeb, 0x38, 0x76, 0xaf, 0x45, 0xae, 0x90, 0x0d, 0xf7, 0x9e, 0xf8, 0x34, 0xed, 0x76, - 0x50, 0xe8, 0xd9, 0xae, 0xe9, 0xf9, 0x93, 0x90, 0xf9, 0xdb, 0x1e, 0x3c, 0xb0, 0x2f, 0x58, 0x67, - 0x99, 0xf4, 0x20, 0x3b, 0xee, 0xf3, 0x89, 0x08, 0xb1, 0x5c, 0xb0, 0x18, 0xfd, 0x6b, 0x74, 0xfb, - 0x52, 0xe1, 0x4b, 0x78, 0x24, 0x9f, 0x28, 0x22, 0xf9, 0xf0, 0x01, 0x12, 0x76, 0xec, 0xde, 0x58, - 0x5c, 0x67, 0x5e, 0x11, 0xa0, 0xfa, 0x64, 0x01, 0xd5, 0x9b, 0xa5, 0xca, 0x4c, 0x1f, 0xd1, 0x0f, - 0x66, 0x01, 0x20, 0x46, 0xca, 0x06, 0x9e, 0x3e, 0xc9, 0x59, 0x68, 0xcf, 0xcd, 0x72, 0xb2, 0x2c, - 0x89, 0xb2, 0x7c, 0x64, 0x84, 0x0d, 0x44, 0xc8, 0x47, 0x48, 0xb4, 0x04, 0x72, 0x7b, 0xf8, 0x35, - 0x93, 0xa8, 0x24, 0x09, 0xf2, 0xa8, 0xd3, 0x2f, 0xe1, 0xef, 0x66, 0x40, 0x8e, 0x24, 0x68, 0x67, - 0x00, 0x20, 0x66, 0x01, 0x3d, 0x4c, 0x9b, 0x21, 0x06, 0x00, 0x97, 0x42, 0xb4, 0xd5, 0xec, 0xb0, - 0xd7, 0xd4, 0xe0, 0x0e, 0x13, 0xf0, 0xd7, 0xc4, 0x58, 0x20, 0xb4, 0x98, 0xf9, 0xc0, 0xa5, 0xe0, - 0xaf, 0xc9, 0x53, 0x0d, 0x6d, 0xd1, 0xdb, 0x3d, 0xb2, 0x7a, 0x98, 0x10, 0x7c, 0x5d, 0x0b, 0xee, - 0x84, 0xf5, 0xbf, 0x26, 0x29, 0x78, 0x2a, 0x4d, 0xd4, 0x72, 0x31, 0x2c, 0x22, 0x4f, 0x32, 0xf5, - 0x27, 0xc3, 0xd7, 0x05, 0x6a, 0xb3, 0x24, 0xa8, 0xcd, 0xa3, 0x13, 0x88, 0x37, 0x7d, 0xe5, 0xf9, - 0x5a, 0x0e, 0x4c, 0xd7, 0xed, 0x0e, 0xd3, 0x1d, 0x6e, 0xba, 0xf9, 0xe9, 0x5c, 0xa2, 0xe9, 0x66, - 0x40, 0x23, 0x42, 0x41, 0x9e, 0x22, 0x2a, 0x88, 0x1c, 0x05, 0x5e, 0x3f, 0xb4, 0x45, 0x90, 0x27, - 0xda, 0x7b, 0xf0, 0xb2, 0xd1, 0x38, 0x12, 0x44, 0xb4, 0x3a, 0xfb, 0xf2, 0x3f, 0x9d, 0x8e, 0xfd, - 0x0f, 0x90, 0x23, 0x15, 0x8c, 0xd9, 0x1b, 0x12, 0x2b, 0xaa, 0xc4, 0x57, 0x54, 0x8d, 0xaf, 0x68, - 0xb6, 0xbf, 0xa2, 0x49, 0x56, 0x11, 0xa2, 0x34, 0x24, 0x7d, 0x1d, 0xff, 0xdf, 0x53, 0x00, 0xd4, - 0x8d, 0xcb, 0xe6, 0x36, 0xdd, 0x5b, 0xfe, 0xbc, 0x3f, 0x7b, 0x62, 0xbb, 0xc0, 0x3f, 0xc9, 0x0d, - 0x84, 0xb7, 0x83, 0x29, 0x36, 0xee, 0xb1, 0x8a, 0x3c, 0x44, 0xa8, 0x48, 0x48, 0x85, 0x1a, 0xb5, - 0xf7, 0x79, 0xba, 0x9f, 0x1f, 0x1b, 0x26, 0x5b, 0x7b, 0xdd, 0x6e, 0x0b, 0x7f, 0xcb, 0x2c, 0x34, - 0xff, 0x39, 0x62, 0x07, 0x23, 0xbc, 0x64, 0x9a, 0x06, 0x9d, 0x62, 0x4f, 0xf0, 0x7d, 0xd2, 0xe7, - 0xd4, 0x38, 0x7e, 0xb8, 0x1a, 0x45, 0x34, 0xc1, 0xc7, 0x82, 0x29, 0x3b, 0xd8, 0x0e, 0x57, 0x23, - 0x57, 0xd1, 0xaa, 0xd6, 0x96, 0xad, 0xfb, 0x39, 0x25, 0xb7, 0xce, 0xa4, 0xf8, 0x98, 0xc8, 0x51, - 0xd0, 0x53, 0x2b, 0x7e, 0xa4, 0x54, 0x5c, 0x8f, 0xf3, 0xa6, 0xb7, 0x53, 0x33, 0xad, 0x4b, 0x2e, - 0xfc, 0x61, 0x39, 0x0b, 0x92, 0xc3, 0x5f, 0x49, 0x86, 0xbf, 0x18, 0xa9, 0x2c, 0xd6, 0xb3, 0x83, - 0xa3, 0x32, 0x98, 0xdb, 0x08, 0x00, 0xef, 0x00, 0x79, 0xca, 0x28, 0xeb, 0x44, 0xcf, 0x46, 0xe2, - 0x17, 0x50, 0xd2, 0xd9, 0x17, 0x92, 0x5e, 0x21, 0x49, 0x39, 0x4b, 0x1d, 0xd2, 0xb3, 0x8f, 0x01, - 0x53, 0x4c, 0xd2, 0xda, 0x3c, 0xdf, 0x8a, 0x8b, 0xc7, 0x34, 0x00, 0xf2, 0x6b, 0xf6, 0x65, 0xd4, - 0xb2, 0x8b, 0x19, 0xfc, 0x1f, 0xf3, 0xd7, 0xb2, 0x8b, 0x0a, 0x7c, 0x65, 0x01, 0x14, 0x82, 0x10, - 0x95, 0x7f, 0xac, 0x80, 0x62, 0x99, 0xcc, 0xd0, 0x96, 0x1d, 0x7b, 0x97, 0xd6, 0x48, 0xfe, 0xcc, - 0xc3, 0x4b, 0xa5, 0x1d, 0x44, 0x82, 0xd0, 0x91, 0xfd, 0x85, 0x45, 0x60, 0x49, 0x97, 0x30, 0x15, - 0x7f, 0x09, 0x13, 0xbe, 0x55, 0xca, 0x61, 0x44, 0xb6, 0x94, 0xf4, 0x9b, 0xda, 0xef, 0x29, 0x20, - 0x57, 0xee, 0xda, 0x16, 0xe2, 0x0f, 0xe6, 0x0e, 0x3d, 0x01, 0x3a, 0x78, 0x1f, 0x03, 0x3e, 0x4b, - 0x91, 0xb5, 0x35, 0x42, 0x01, 0xe0, 0xb2, 0x25, 0x65, 0x2b, 0x37, 0x48, 0xc5, 0x92, 0x4e, 0x5f, - 0xa0, 0xdf, 0x50, 0xc0, 0x34, 0x8d, 0x29, 0x57, 0xea, 0x76, 0xe1, 0x83, 0x43, 0xa1, 0x0e, 0x08, - 0xf3, 0x09, 0x3f, 0x24, 0x7d, 0xf0, 0x2c, 0xa8, 0x55, 0x40, 0x3b, 0x41, 0x58, 0xc4, 0x64, 0xe7, - 0xa0, 0xe4, 0x76, 0xe2, 0x86, 0x32, 0x94, 0xbe, 0xa8, 0xff, 0x44, 0xc1, 0x06, 0x80, 0x75, 0x69, - 0xdd, 0x41, 0x97, 0x4d, 0x74, 0x05, 0x5e, 0x1b, 0x0a, 0xfb, 0x60, 0xc0, 0xac, 0x37, 0x49, 0x2f, - 0xe2, 0x70, 0x24, 0x23, 0x37, 0xc2, 0x66, 0xba, 0x61, 0x26, 0xd6, 0x8b, 0xf7, 0x47, 0x31, 0xe3, - 0xc8, 0xe8, 0x7c, 0x76, 0xc9, 0x35, 0x9b, 0x68, 0x2e, 0xd2, 0x17, 0xec, 0xc7, 0xa6, 0x40, 0x61, - 0xc3, 0x72, 0x7b, 0x5d, 0xc3, 0xdd, 0x81, 0xff, 0xa6, 0x82, 0x3c, 0xbd, 0xe2, 0x16, 0x7e, 0xbf, - 0x10, 0x97, 0xe7, 0x19, 0x7b, 0xc8, 0xf1, 0x1d, 0x78, 0xe8, 0x43, 0x68, 0x1f, 0x29, 0x9c, 0x7d, - 0x04, 0x3f, 0xa8, 0xca, 0x4e, 0x52, 0xfd, 0x42, 0xd9, 0x9d, 0xba, 0xd1, 0xa1, 0x60, 0x7a, 0x66, - 0xdb, 0xdb, 0x73, 0x90, 0x3b, 0x30, 0x14, 0x4c, 0x24, 0x95, 0x75, 0xfa, 0x95, 0x1e, 0x7c, 0x0e, - 0x0d, 0x30, 0xc5, 0x12, 0x0f, 0x6c, 0x46, 0x1d, 0x8c, 0x2a, 0x71, 0x0a, 0xe4, 0x0d, 0xc7, 0x33, - 0x5d, 0x8f, 0x6d, 0xcf, 0xb2, 0x27, 0xdc, 0x5d, 0xd2, 0x7f, 0x1b, 0x4e, 0xd7, 0x8f, 0xe0, 0x15, - 0x24, 0xc0, 0x5f, 0x93, 0x9a, 0x3f, 0xc6, 0xd7, 0x3c, 0x19, 0xe4, 0xf7, 0x8c, 0xb0, 0xc2, 0xfd, - 0x20, 0x70, 0x95, 0x5e, 0x6a, 0x55, 0x36, 0x69, 0xc0, 0xa7, 0x20, 0xb6, 0x53, 0x07, 0xbe, 0x47, - 0xe5, 0xd6, 0xef, 0xf6, 0x85, 0x31, 0x82, 0x49, 0x31, 0x1c, 0x23, 0x82, 0x84, 0x98, 0xbd, 0x6e, - 0x61, 0x09, 0x57, 0x95, 0x5e, 0xc2, 0x85, 0xbf, 0x22, 0xbd, 0x17, 0x15, 0x88, 0x72, 0xc8, 0x1a, - 0x60, 0xdc, 0x15, 0x98, 0x1f, 0x91, 0xda, 0x57, 0x1a, 0x56, 0xd2, 0x11, 0xc2, 0xf6, 0x9d, 0x53, - 0x40, 0x29, 0x55, 0xe1, 0x4f, 0x4c, 0x81, 0xd9, 0xf3, 0x8e, 0xe9, 0x99, 0xd6, 0x76, 0xcb, 0xb6, - 0xbb, 0x2e, 0xfc, 0x36, 0xb7, 0x51, 0xf1, 0x78, 0x90, 0x6f, 0xdb, 0xd6, 0x96, 0xb9, 0xcd, 0xc4, - 0x78, 0x46, 0xa8, 0x5c, 0xa9, 0xba, 0xb0, 0xee, 0xd8, 0x97, 0xcd, 0x0e, 0x72, 0xca, 0x24, 0x97, - 0xce, 0x72, 0x63, 0x3d, 0xe6, 0x42, 0xe6, 0x3d, 0xba, 0xff, 0x2b, 0xbe, 0xbc, 0x20, 0x66, 0x0f, - 0x4b, 0xe4, 0x22, 0xe6, 0x55, 0x41, 0xa1, 0x6b, 0x58, 0xdb, 0x7b, 0xfe, 0xcc, 0xbb, 0x7f, 0x17, - 0x35, 0x8a, 0x52, 0x8d, 0x7d, 0xa4, 0x07, 0x9f, 0x13, 0x27, 0x37, 0x6c, 0xea, 0xd3, 0xb6, 0x47, - 0xfe, 0x9f, 0xfd, 0x78, 0x06, 0xcc, 0x70, 0x85, 0x6a, 0x33, 0x60, 0x6a, 0xa9, 0xb2, 0x5c, 0xda, - 0xa8, 0xb5, 0x8a, 0xc7, 0xb0, 0x14, 0x9b, 0x1b, 0x6b, 0x6b, 0x25, 0xbd, 0xfa, 0x83, 0x95, 0x62, - 0x06, 0xbf, 0x5b, 0xd1, 0x4b, 0xf8, 0xb9, 0xa8, 0xe0, 0x87, 0xe6, 0x6a, 0x43, 0x6f, 0x55, 0xea, - 0x45, 0x15, 0xdb, 0xa3, 0x95, 0xa7, 0xad, 0x97, 0xea, 0x4b, 0xc5, 0x2c, 0xfe, 0xbf, 0xb8, 0x51, - 0xab, 0x55, 0x5a, 0xc5, 0x5c, 0x18, 0x44, 0x2f, 0x8f, 0x93, 0xcb, 0xa5, 0xe6, 0x46, 0xa9, 0x56, - 0x9c, 0xc2, 0xc9, 0xcb, 0x1b, 0xf5, 0xfa, 0x85, 0x62, 0x01, 0x17, 0x51, 0x6e, 0xd4, 0x97, 0xab, - 0x4b, 0x95, 0x7a, 0xab, 0x38, 0xad, 0x5d, 0x05, 0x8e, 0x37, 0x5b, 0x7a, 0xa9, 0xba, 0xb2, 0xda, - 0x5a, 0x6e, 0xe8, 0xe7, 0x4b, 0xfa, 0x52, 0x11, 0x68, 0x45, 0x30, 0xbb, 0xae, 0x37, 0x96, 0x2b, - 0x24, 0x5e, 0x4a, 0xa9, 0x56, 0x9c, 0xc1, 0x5f, 0xb5, 0xf4, 0x52, 0xbd, 0x59, 0x2b, 0xb5, 0x2a, - 0xc5, 0xd9, 0xb3, 0x77, 0x83, 0x82, 0x5f, 0x5d, 0x2d, 0x0f, 0x94, 0x4a, 0xbd, 0x78, 0x8c, 0xfc, - 0x36, 0x8b, 0x19, 0xfc, 0xbb, 0x8c, 0xf9, 0xcd, 0x03, 0x65, 0xa9, 0x52, 0x54, 0xf1, 0x6f, 0xb5, - 0x55, 0xcc, 0xe2, 0xdf, 0x75, 0xcc, 0x62, 0x1e, 0x28, 0xab, 0xd5, 0x62, 0x1e, 0xff, 0xb6, 0x56, - 0x8b, 0x53, 0xe2, 0x4d, 0xf7, 0xb1, 0xbd, 0xf0, 0x41, 0xc9, 0x47, 0x18, 0x1a, 0x5e, 0x38, 0x47, - 0x26, 0xff, 0xe1, 0x2b, 0x14, 0x99, 0xbe, 0x2e, 0x9e, 0x7e, 0xb2, 0x46, 0xf3, 0x96, 0xcc, 0x18, - 0x5b, 0x8d, 0x06, 0xc1, 0xa9, 0x4a, 0x7d, 0x69, 0xbd, 0x51, 0xad, 0xb7, 0x68, 0xa8, 0xb3, 0x4a, - 0xa9, 0xbc, 0x4a, 0x70, 0x46, 0x18, 0xc1, 0xb5, 0xc6, 0x52, 0xa5, 0x46, 0x5e, 0x2c, 0x37, 0x36, - 0xea, 0x4b, 0xc5, 0x2d, 0x5c, 0x56, 0x69, 0xa3, 0xb5, 0xba, 0xa9, 0x57, 0x9e, 0xba, 0x51, 0xd5, - 0x2b, 0x4b, 0xc5, 0x6d, 0x4c, 0xa3, 0x56, 0xaa, 0xaf, 0x6c, 0x94, 0x56, 0xd8, 0x7e, 0xe1, 0xc6, - 0xfa, 0x7a, 0x83, 0xec, 0x18, 0xee, 0xc0, 0x7f, 0xc8, 0x82, 0x42, 0x69, 0xcf, 0xb3, 0xb7, 0xcc, - 0x6e, 0x17, 0x3e, 0x47, 0x39, 0x7c, 0x53, 0x2c, 0x09, 0x4d, 0xf1, 0x40, 0x03, 0xf2, 0xcb, 0x0a, - 0x1a, 0x8f, 0x9f, 0xc0, 0xb5, 0xc3, 0xd3, 0xa1, 0x33, 0xb6, 0xca, 0x76, 0x9a, 0xe9, 0x23, 0x75, - 0xc4, 0xb5, 0x58, 0xcb, 0x22, 0x6f, 0xd8, 0xe3, 0xd9, 0x7b, 0xc0, 0x2c, 0x4f, 0x89, 0x84, 0x03, - 0x2b, 0xad, 0xd0, 0x78, 0x61, 0x7e, 0x84, 0x40, 0x1a, 0x2f, 0x8c, 0x1c, 0xbc, 0x50, 0x48, 0x7b, - 0xa9, 0xb6, 0x6a, 0x58, 0x4f, 0x8f, 0x83, 0x99, 0xa5, 0x4a, 0xb3, 0xac, 0x57, 0x89, 0x9f, 0x7a, - 0x31, 0x2b, 0x7a, 0x19, 0xc4, 0x5a, 0x66, 0x62, 0x8d, 0x64, 0x95, 0xf2, 0xbb, 0x52, 0xf6, 0x56, - 0x34, 0xed, 0x64, 0x0a, 0xf9, 0xa2, 0x07, 0x9a, 0x42, 0xc2, 0x17, 0x65, 0xe9, 0x3a, 0x59, 0x73, - 0x6f, 0x77, 0xd7, 0x70, 0xf6, 0x05, 0x7f, 0xb5, 0x51, 0xf5, 0x2e, 0x7a, 0x7c, 0x8f, 0x8d, 0x02, - 0x84, 0x4d, 0xa8, 0x9e, 0x63, 0xef, 0xf6, 0xfc, 0xbe, 0x9a, 0x3d, 0xc1, 0xff, 0x25, 0x3d, 0x73, - 0x2c, 0x55, 0x17, 0xb8, 0xca, 0x8c, 0x30, 0xb4, 0xff, 0x88, 0x22, 0x33, 0x8b, 0x8c, 0x2d, 0xe6, - 0x7b, 0x5d, 0x23, 0xfe, 0x26, 0x0b, 0xae, 0x62, 0x11, 0x5e, 0x82, 0xf5, 0x07, 0x6c, 0xaa, 0xbe, - 0x3a, 0x55, 0xcd, 0x60, 0x06, 0xb5, 0x1a, 0x1a, 0xd4, 0xdc, 0x86, 0x77, 0x56, 0x72, 0xc3, 0xfb, - 0x6d, 0xd2, 0x87, 0x1e, 0x4a, 0xd5, 0x85, 0x01, 0x75, 0x9c, 0xcc, 0xb6, 0xfc, 0xfd, 0x8a, 0xcc, - 0x6a, 0xab, 0x14, 0x87, 0xdf, 0xeb, 0xba, 0xf6, 0x8e, 0x0c, 0x98, 0x17, 0x55, 0x45, 0x7b, 0x1c, - 0x28, 0xf4, 0x58, 0x0a, 0x93, 0xcb, 0xe9, 0x28, 0xe5, 0xd2, 0x83, 0x9c, 0x18, 0x22, 0x64, 0x75, - 0x7a, 0xb6, 0x69, 0x05, 0xeb, 0xf2, 0xfe, 0x33, 0x9e, 0x77, 0x92, 0xa9, 0x83, 0x1f, 0xef, 0x8f, - 0x3c, 0x84, 0xb1, 0x63, 0xb3, 0x5c, 0xec, 0x58, 0x2c, 0x44, 0x0f, 0xed, 0x92, 0x5b, 0x8c, 0xf6, - 0x1c, 0xea, 0xf0, 0xa2, 0xe8, 0x7c, 0xd2, 0xd9, 0x27, 0x83, 0x82, 0x5f, 0x3e, 0xb6, 0xee, 0x1a, - 0xb5, 0x5a, 0x69, 0xad, 0x44, 0x17, 0x2a, 0x1b, 0xeb, 0x95, 0x7a, 0xa9, 0x5a, 0xcc, 0xe0, 0x81, - 0xae, 0xb6, 0xd6, 0x6c, 0x6d, 0x2c, 0x55, 0x1b, 0x45, 0x85, 0x3c, 0xe1, 0x4c, 0xe5, 0xf5, 0xf5, - 0xa2, 0x0a, 0xdf, 0x38, 0x05, 0xa6, 0x56, 0x8c, 0x6e, 0x17, 0x39, 0xfb, 0xf0, 0x1b, 0x0a, 0x28, - 0xfa, 0xb3, 0x83, 0x35, 0xc3, 0x32, 0xb7, 0x90, 0xeb, 0xc5, 0x2f, 0x54, 0xbc, 0x4f, 0xfa, 0x6a, - 0x33, 0x56, 0xc6, 0x42, 0x3f, 0xfd, 0x08, 0x1d, 0xbf, 0x15, 0x64, 0x4d, 0x6b, 0xcb, 0x66, 0xcb, - 0x15, 0xfd, 0xfe, 0x36, 0xfe, 0xc7, 0x64, 0xdb, 0x80, 0x64, 0x94, 0xbc, 0xdd, 0x4c, 0x92, 0x8b, - 0xf4, 0x57, 0x2d, 0xde, 0x91, 0x05, 0x73, 0x3e, 0x13, 0x55, 0xab, 0x83, 0xee, 0xe3, 0xb7, 0x41, - 0x7f, 0x26, 0x2b, 0x1b, 0x60, 0xa8, 0xbf, 0x3e, 0x84, 0x54, 0x84, 0x48, 0x5b, 0x00, 0xb4, 0x0d, - 0x0f, 0x6d, 0xdb, 0x8e, 0x19, 0xac, 0x45, 0x3c, 0x2e, 0x09, 0xb5, 0x32, 0xfd, 0x7a, 0x5f, 0xe7, - 0xe8, 0x68, 0x4f, 0x02, 0x33, 0x28, 0x88, 0xe8, 0xe8, 0x6f, 0x93, 0xc6, 0xe2, 0xc5, 0xe7, 0x87, - 0x7f, 0x22, 0x15, 0xc7, 0x48, 0xa6, 0x9a, 0xc9, 0x30, 0xdb, 0x1c, 0xad, 0xeb, 0xd9, 0xa8, 0xaf, - 0x95, 0xf4, 0xe6, 0x6a, 0xa9, 0x56, 0xab, 0xd6, 0x57, 0x82, 0x80, 0xc5, 0x1a, 0x98, 0x5f, 0x6a, - 0x9c, 0xaf, 0x73, 0x11, 0xa5, 0xb3, 0x70, 0x1d, 0x14, 0x7c, 0x79, 0x0d, 0x3a, 0x45, 0xc5, 0xcb, - 0x8c, 0x9d, 0xa2, 0xe2, 0x92, 0xb0, 0x69, 0x68, 0xb6, 0x03, 0xd7, 0x7a, 0xf2, 0x1f, 0xfe, 0xb6, - 0x01, 0x72, 0xc4, 0x9f, 0x05, 0xbe, 0x8b, 0xcc, 0x8b, 0x7b, 0x5d, 0xa3, 0x8d, 0xe0, 0x6e, 0x82, - 0x95, 0x70, 0xff, 0xae, 0x5d, 0xe5, 0xc0, 0x5d, 0xbb, 0xe4, 0x2f, 0x1b, 0x31, 0x4e, 0x0e, 0xf2, - 0xa1, 0xd1, 0x69, 0x16, 0x31, 0xe4, 0x4f, 0xac, 0x67, 0x13, 0x75, 0xbd, 0x61, 0x6c, 0x46, 0xa8, - 0x64, 0x34, 0x4f, 0x69, 0x5c, 0xa2, 0x12, 0xc7, 0x51, 0xfa, 0x2d, 0xfe, 0x4b, 0x59, 0x90, 0x6b, - 0xf6, 0xba, 0xa6, 0x07, 0x7f, 0x41, 0x19, 0x0b, 0x66, 0xf4, 0x7e, 0x64, 0x75, 0xe8, 0xfd, 0xc8, - 0xa1, 0xbf, 0x64, 0x56, 0xc2, 0x5f, 0xb2, 0x85, 0xee, 0xf3, 0x44, 0x7f, 0xc9, 0xdb, 0xd9, 0xb4, - 0x8d, 0x7a, 0x5b, 0x3e, 0x7c, 0x80, 0x48, 0x49, 0xb5, 0x06, 0xdc, 0x66, 0x71, 0xf6, 0x31, 0x2c, - 0xa8, 0x3e, 0x00, 0xf9, 0xc5, 0x46, 0xab, 0xd5, 0x58, 0x2b, 0x1e, 0x23, 0xd3, 0xaf, 0xc6, 0x3a, - 0x0d, 0x71, 0x5c, 0xad, 0xd7, 0x2b, 0xba, 0x30, 0xe3, 0x12, 0x2f, 0xcb, 0x8c, 0x9d, 0x60, 0x89, - 0x65, 0xa7, 0xa9, 0x5e, 0x72, 0x8b, 0xe0, 0xd1, 0xfc, 0xa4, 0xaf, 0x5c, 0x3f, 0xa7, 0x82, 0xdc, - 0x1a, 0x72, 0xb6, 0x11, 0x7c, 0x46, 0x02, 0x07, 0xbb, 0x2d, 0xd3, 0x71, 0xe9, 0xa5, 0x08, 0xa1, - 0x83, 0x1d, 0x9f, 0xa6, 0xdd, 0x00, 0xe6, 0x5c, 0xd4, 0xb6, 0xad, 0x8e, 0x9f, 0x89, 0xf6, 0x47, - 0x62, 0x22, 0x7c, 0x59, 0x42, 0xc8, 0x08, 0xa3, 0x63, 0xf1, 0x92, 0x4b, 0x02, 0xcc, 0xa0, 0x52, - 0xd3, 0x07, 0xe6, 0x5b, 0x2a, 0xfe, 0xa8, 0xb7, 0x0f, 0x5f, 0x26, 0xed, 0xf9, 0x78, 0x0b, 0xc8, - 0x5f, 0xf4, 0xef, 0x45, 0x53, 0x23, 0xfb, 0x63, 0x96, 0x47, 0x5b, 0x04, 0x27, 0x5c, 0xd4, 0x45, - 0x6d, 0x0f, 0x75, 0x70, 0xd3, 0xd5, 0x87, 0x76, 0x0a, 0x07, 0xb3, 0xc3, 0x3f, 0xe0, 0x01, 0xbc, - 0x53, 0x04, 0xf0, 0xc6, 0x01, 0xa2, 0xc4, 0x15, 0x8a, 0x9e, 0x9b, 0xe0, 0x6a, 0x34, 0xbb, 0x76, - 0x60, 0xf8, 0xfa, 0xcf, 0xf8, 0xdd, 0x8e, 0xb7, 0xdb, 0x25, 0xef, 0xd8, 0xd1, 0x60, 0xff, 0x59, - 0x5b, 0x00, 0x53, 0x86, 0xb5, 0x4f, 0x5e, 0x65, 0x63, 0x6a, 0xed, 0x67, 0x82, 0xaf, 0x0c, 0x90, - 0xbf, 0x4b, 0x40, 0xfe, 0x91, 0x72, 0xec, 0xa6, 0x0f, 0xfc, 0x8f, 0x4d, 0x81, 0xdc, 0xba, 0xe1, - 0x7a, 0x08, 0xfe, 0x1f, 0x55, 0x16, 0xf9, 0x1b, 0xc1, 0xfc, 0x96, 0xdd, 0xde, 0x73, 0x51, 0x47, - 0x6c, 0x94, 0x7d, 0xa9, 0xe3, 0xc0, 0x9c, 0x04, 0x66, 0x67, 0x89, 0x8c, 0xac, 0xef, 0x02, 0x7b, - 0x20, 0x9d, 0x5c, 0xbd, 0xe8, 0xae, 0x1b, 0x8e, 0xd7, 0xd8, 0x22, 0x69, 0xc1, 0xd5, 0x8b, 0x7c, - 0xa2, 0x00, 0x7d, 0x3e, 0x06, 0xfa, 0xa9, 0x68, 0xe8, 0x0b, 0x12, 0xd0, 0x6b, 0x25, 0x50, 0xd8, - 0x32, 0xbb, 0x88, 0x7c, 0x30, 0x4d, 0x3e, 0x18, 0x34, 0x26, 0x11, 0xd9, 0x07, 0x63, 0xd2, 0xb2, - 0xd9, 0x45, 0x7a, 0xf0, 0x99, 0x3f, 0x91, 0x01, 0xe1, 0x44, 0xa6, 0x46, 0x4f, 0xc2, 0x61, 0xc3, - 0xcb, 0x32, 0x76, 0x91, 0xbf, 0xf1, 0x6d, 0xb1, 0x63, 0xe9, 0x1d, 0xc3, 0x33, 0x08, 0x18, 0xb3, - 0x3a, 0xf9, 0x2f, 0xfa, 0x64, 0xab, 0xfd, 0x3e, 0xd9, 0xcf, 0x53, 0x93, 0xf5, 0x88, 0x3e, 0xb3, - 0x11, 0x2d, 0xea, 0xa2, 0x0f, 0x10, 0xb5, 0x14, 0x83, 0x67, 0x0c, 0x4c, 0xdb, 0x70, 0x90, 0xb7, - 0xce, 0x7b, 0x41, 0xe7, 0x74, 0x31, 0x91, 0x1c, 0xc2, 0x71, 0x9b, 0xc6, 0x2e, 0xbd, 0x5a, 0xb1, - 0x8c, 0xdf, 0xb1, 0xc3, 0x15, 0x07, 0xd2, 0xc3, 0xfe, 0x37, 0x37, 0xee, 0xfe, 0x77, 0x50, 0x1d, - 0xd3, 0x6f, 0x86, 0xaf, 0xc9, 0x02, 0xb5, 0xbc, 0xe7, 0x3d, 0xa0, 0xbb, 0xdf, 0xef, 0x4a, 0xfb, - 0x98, 0xb3, 0xfe, 0x6c, 0xcf, 0x3b, 0xda, 0xde, 0x37, 0xa1, 0x96, 0xc8, 0xf9, 0xb2, 0x47, 0xd5, - 0x2d, 0x7d, 0x1d, 0x79, 0x9b, 0x1a, 0x1c, 0x8d, 0x7a, 0x4e, 0xe6, 0xf0, 0xa6, 0x39, 0xa4, 0xfd, - 0x13, 0xd7, 0x33, 0x04, 0xcf, 0x7e, 0xc7, 0x93, 0x15, 0x6e, 0x7f, 0x20, 0xae, 0xad, 0x44, 0x94, - 0xb3, 0x3a, 0x7d, 0x80, 0x2f, 0x97, 0x3e, 0x30, 0x4a, 0xc5, 0x16, 0x7b, 0x8c, 0x27, 0x99, 0x4d, - 0xf5, 0x6a, 0xa9, 0x63, 0xa3, 0x31, 0xc5, 0xa6, 0x0f, 0xd8, 0xdf, 0xf3, 0xc7, 0x74, 0x4a, 0x87, - 0x46, 0x0c, 0xbe, 0x4a, 0x7a, 0x41, 0x9f, 0x56, 0x7b, 0xc8, 0x5e, 0x7d, 0x32, 0x79, 0xcb, 0x39, - 0x8a, 0xc5, 0x16, 0x3c, 0x81, 0xbb, 0xa2, 0x55, 0x90, 0xa7, 0x0b, 0xbf, 0xf0, 0xcd, 0xd2, 0x4d, - 0x04, 0xf7, 0x46, 0xe2, 0xf1, 0x9d, 0xe0, 0x39, 0xc9, 0x9a, 0x83, 0x70, 0xcc, 0x27, 0x9b, 0xe8, - 0x98, 0x8f, 0x18, 0x81, 0x45, 0xa2, 0x1d, 0xd1, 0x3a, 0xa6, 0x3c, 0x9d, 0x4c, 0xd2, 0xc2, 0x06, - 0x32, 0x94, 0x3e, 0xde, 0xcf, 0xcf, 0x81, 0x59, 0x5a, 0x34, 0x3d, 0x5f, 0x08, 0xdf, 0xa3, 0x7c, - 0xef, 0xa0, 0xae, 0xd5, 0xc1, 0xec, 0x15, 0xc2, 0x36, 0x0d, 0x2f, 0xc7, 0x56, 0x2e, 0x6e, 0x8e, - 0x5d, 0xf7, 0xa0, 0xf5, 0xf4, 0x6f, 0x8d, 0x16, 0xbe, 0xc7, 0x32, 0xa6, 0x1b, 0x2c, 0xf4, 0xf0, - 0x44, 0x9e, 0x18, 0x59, 0x7c, 0x92, 0x76, 0x0a, 0xe4, 0x2f, 0x9b, 0xe8, 0x4a, 0xb5, 0xc3, 0xac, - 0x5b, 0xf6, 0x04, 0x7f, 0x5d, 0xda, 0x67, 0x92, 0x87, 0x9b, 0xf1, 0x92, 0xae, 0x16, 0xca, 0x79, - 0x4e, 0x0e, 0x65, 0x6b, 0x02, 0xd1, 0x80, 0x14, 0x7a, 0x4f, 0x3d, 0x0b, 0xe5, 0x5f, 0x4e, 0xa0, - 0x88, 0x51, 0x86, 0xb3, 0x18, 0x84, 0x2f, 0xf6, 0xac, 0x39, 0x15, 0x40, 0x58, 0xfe, 0x58, 0xfa, - 0x7c, 0xb9, 0xc8, 0x70, 0x43, 0x8a, 0x4e, 0x5f, 0xf2, 0xaf, 0x53, 0xc1, 0x74, 0x13, 0x79, 0xcb, - 0x26, 0xea, 0x76, 0x5c, 0xe8, 0x1c, 0xde, 0x34, 0xba, 0x15, 0xe4, 0xb7, 0x08, 0xb1, 0x61, 0x9b, - 0x93, 0x2c, 0x1b, 0x7c, 0x8d, 0x22, 0xeb, 0x07, 0xc4, 0x56, 0xdf, 0x7c, 0x6e, 0xc7, 0x02, 0x93, - 0xdc, 0x69, 0xba, 0xf8, 0x92, 0x27, 0x70, 0x55, 0x92, 0x0a, 0x66, 0xc9, 0xf6, 0x3f, 0xf2, 0x4a, - 0x5d, 0x73, 0xdb, 0xe2, 0x6f, 0x57, 0x1f, 0xb9, 0x85, 0x68, 0x8f, 0x06, 0x39, 0x03, 0x53, 0x63, - 0xee, 0x6e, 0x70, 0x60, 0xe7, 0x49, 0xca, 0xd3, 0x69, 0xc6, 0x04, 0x17, 0x93, 0x84, 0x8a, 0xed, - 0xf3, 0x3c, 0xc1, 0x8b, 0x49, 0x86, 0x16, 0x9e, 0x3e, 0x62, 0x5f, 0x55, 0xc1, 0x49, 0xc6, 0xc0, - 0x39, 0xe4, 0x78, 0x66, 0xdb, 0xe8, 0x52, 0xe4, 0x5e, 0x98, 0x19, 0x07, 0x74, 0xab, 0x60, 0xee, - 0x32, 0x4f, 0x96, 0x41, 0x78, 0x76, 0x20, 0x84, 0x02, 0x03, 0xba, 0xf8, 0x61, 0x82, 0x0b, 0x1e, - 0x04, 0xa9, 0x0a, 0x34, 0x27, 0x78, 0xc1, 0x83, 0x34, 0x13, 0xe9, 0x43, 0xfc, 0x12, 0x16, 0x54, - 0x33, 0xec, 0x3e, 0x3f, 0x2f, 0x8d, 0xed, 0x06, 0x98, 0x21, 0x58, 0xd2, 0x0f, 0xd9, 0x32, 0x44, - 0x8c, 0x12, 0x07, 0xfd, 0x0e, 0xbb, 0xe8, 0x3e, 0xf8, 0x56, 0xe7, 0xe9, 0xc0, 0xf3, 0x00, 0x84, - 0xaf, 0xf8, 0x4e, 0x3a, 0x13, 0xd5, 0x49, 0x2b, 0x72, 0x9d, 0xf4, 0x9b, 0xa4, 0xc3, 0x1c, 0x0e, - 0x66, 0xfb, 0xf0, 0xea, 0x21, 0x17, 0xe0, 0x6e, 0x78, 0xe9, 0xe9, 0xeb, 0xc5, 0x2b, 0x99, 0x5e, - 0x2c, 0xed, 0xf5, 0xba, 0x66, 0x1b, 0xcf, 0xa7, 0x3e, 0x31, 0x96, 0xf9, 0x14, 0xdf, 0x1f, 0xa8, - 0x7d, 0xfd, 0xc1, 0x21, 0x2c, 0xe9, 0x9b, 0xc0, 0x71, 0x5a, 0x44, 0x39, 0x60, 0x2b, 0x47, 0x83, - 0xb8, 0xf5, 0x25, 0x8b, 0x51, 0xdb, 0x25, 0x95, 0x20, 0x10, 0xc2, 0x08, 0x4b, 0x9f, 0xc9, 0x8c, - 0xdd, 0xa4, 0x0a, 0x12, 0xc5, 0xd9, 0x04, 0x8e, 0x64, 0x65, 0xa9, 0xb5, 0xbb, 0xd1, 0xeb, 0x60, - 0xed, 0xf8, 0x62, 0x76, 0x1c, 0x23, 0xc2, 0x53, 0x98, 0xa7, 0xa9, 0x1a, 0xb9, 0xa4, 0x11, 0x16, - 0x19, 0xf4, 0x23, 0x2d, 0x74, 0x9f, 0xb7, 0x7a, 0x8c, 0xfa, 0xa5, 0x6a, 0x37, 0x83, 0xe3, 0x17, - 0x8d, 0xf6, 0xa5, 0x6d, 0xc7, 0xde, 0x23, 0xb7, 0xb6, 0xdb, 0xec, 0xfa, 0xf7, 0xd5, 0x63, 0x7a, - 0xff, 0x0b, 0xed, 0x36, 0xdf, 0x74, 0xc8, 0x0d, 0x33, 0x1d, 0x56, 0x8f, 0x31, 0xe3, 0x41, 0x7b, - 0x4c, 0xd0, 0xe9, 0xe4, 0x63, 0x3b, 0x9d, 0xd5, 0x63, 0x7e, 0xb7, 0xa3, 0x2d, 0x81, 0x42, 0xc7, - 0xbc, 0x4c, 0xb6, 0xaa, 0xc9, 0xac, 0x6b, 0x58, 0xd0, 0xa1, 0x25, 0xf3, 0x32, 0xdd, 0xd8, 0x5e, - 0x3d, 0xa6, 0x07, 0x5f, 0x6a, 0x2b, 0x60, 0x9a, 0x6c, 0x0b, 0x10, 0x32, 0x85, 0x44, 0x01, 0x85, - 0x56, 0x8f, 0xe9, 0xe1, 0xb7, 0xd8, 0xfa, 0xc8, 0x92, 0x73, 0xd7, 0x77, 0xf9, 0xdb, 0xed, 0x99, - 0x44, 0xdb, 0xed, 0x58, 0x16, 0x74, 0xc3, 0xfd, 0x14, 0xc8, 0xb5, 0x89, 0x84, 0x15, 0x26, 0x61, - 0xfa, 0xa8, 0xdd, 0x09, 0xb2, 0xbb, 0x86, 0xe3, 0x4f, 0x9e, 0x6f, 0x1c, 0x4e, 0x77, 0xcd, 0x70, - 0x2e, 0x61, 0x04, 0xf1, 0x57, 0x8b, 0x53, 0x20, 0x47, 0x04, 0x17, 0xfc, 0x81, 0x6f, 0xcb, 0x52, - 0x33, 0xa4, 0x6c, 0x5b, 0x78, 0xd8, 0x6f, 0xd9, 0xfe, 0xe1, 0xf4, 0x5f, 0xcf, 0x8c, 0xc7, 0x82, - 0xbc, 0x8a, 0xbb, 0x4e, 0xc5, 0x32, 0x9f, 0xb1, 0x87, 0xee, 0x41, 0xfb, 0x6c, 0x49, 0x74, 0xd0, - 0x2b, 0xed, 0x0c, 0x00, 0x1e, 0x3b, 0xa9, 0x17, 0x04, 0x31, 0xe5, 0x52, 0xc2, 0xe5, 0x83, 0xdc, - 0x70, 0x47, 0x95, 0x3f, 0x18, 0xc1, 0x74, 0xe9, 0x17, 0x44, 0xf4, 0x0c, 0xbc, 0x6b, 0x5a, 0x5c, - 0x9d, 0xfd, 0xc7, 0x84, 0x9d, 0x52, 0x52, 0xa3, 0x66, 0x08, 0x7b, 0xe9, 0xf7, 0x4d, 0x6f, 0xc9, - 0xd2, 0x1b, 0x25, 0xe8, 0x09, 0xe8, 0xca, 0x7d, 0xa6, 0x1b, 0xde, 0xdf, 0x0c, 0x7f, 0x67, 0x2c, - 0x4a, 0x33, 0x60, 0xc0, 0x51, 0x07, 0x0e, 0x38, 0x07, 0x02, 0x04, 0x65, 0x87, 0x04, 0x08, 0xca, - 0x25, 0x5b, 0x39, 0xfc, 0x28, 0xaf, 0x3f, 0xeb, 0xa2, 0xfe, 0xdc, 0x11, 0x01, 0xd0, 0x20, 0xb9, - 0x8c, 0xc5, 0xbe, 0x79, 0x57, 0xa0, 0x29, 0x4d, 0x41, 0x53, 0xee, 0x1a, 0x9d, 0x91, 0xf4, 0xb5, - 0xe5, 0xc3, 0x59, 0x70, 0x55, 0xc8, 0x4c, 0x1d, 0x5d, 0x61, 0x8a, 0xf2, 0xc7, 0x63, 0x51, 0x94, - 0xe4, 0x8e, 0xce, 0x69, 0x6b, 0xcc, 0xef, 0x4a, 0x9f, 0xdb, 0xef, 0x07, 0x2a, 0x90, 0x4d, 0x84, - 0xb2, 0x9c, 0x02, 0x79, 0xda, 0xc3, 0x30, 0x68, 0xd8, 0x53, 0xc2, 0xee, 0x46, 0xee, 0xb4, 0xbf, - 0x2c, 0x6f, 0x13, 0xd0, 0x1f, 0xb6, 0xae, 0xd1, 0xda, 0x73, 0xac, 0xaa, 0xe5, 0xd9, 0xf0, 0x47, - 0xc7, 0xa2, 0x38, 0x81, 0x37, 0x9c, 0x3a, 0x8a, 0x37, 0xdc, 0x48, 0xab, 0x1c, 0x7e, 0x0d, 0x8e, - 0x64, 0x95, 0x23, 0xa2, 0xf0, 0xf4, 0xf1, 0x7b, 0xa7, 0x0a, 0x4e, 0xb1, 0xc9, 0xd6, 0xa2, 0x68, - 0x21, 0xc2, 0x0b, 0xe3, 0x00, 0xf2, 0xa4, 0x6f, 0x26, 0x31, 0x3f, 0x7a, 0xf2, 0x20, 0x46, 0x29, - 0x88, 0xbd, 0x31, 0x54, 0x98, 0x0e, 0xf6, 0x71, 0x38, 0x16, 0xa4, 0xe4, 0x2e, 0x0a, 0x4d, 0xc0, - 0x46, 0xfa, 0x98, 0xbd, 0x58, 0x05, 0x79, 0x1a, 0x23, 0x01, 0x6e, 0xa4, 0xe2, 0x30, 0x21, 0xde, - 0xcf, 0x22, 0xb1, 0x23, 0x47, 0xb9, 0x49, 0x2d, 0x7e, 0x44, 0x92, 0xbd, 0xb8, 0x81, 0xac, 0x4c, - 0xc0, 0x85, 0x50, 0x01, 0x33, 0x4d, 0xe4, 0x95, 0x0d, 0xc7, 0x31, 0x8d, 0xed, 0x71, 0x79, 0x7c, - 0xcb, 0x7a, 0x0f, 0xc3, 0x6f, 0x67, 0x64, 0xcf, 0xb2, 0x07, 0x0b, 0xe1, 0x3e, 0xab, 0x11, 0x51, - 0xc0, 0x5f, 0x2f, 0x75, 0x5e, 0x7d, 0x18, 0xb5, 0x09, 0x78, 0x6c, 0x2b, 0x60, 0xca, 0x8f, 0x83, - 0x71, 0xab, 0x10, 0x1b, 0x65, 0xc7, 0xdb, 0xf5, 0x8f, 0xc1, 0x90, 0xff, 0x07, 0xe3, 0x2f, 0xc0, - 0x57, 0x24, 0x74, 0x94, 0x8f, 0x0f, 0xe2, 0x91, 0xac, 0x8d, 0x25, 0x71, 0x87, 0x3f, 0xaa, 0xb0, - 0x1d, 0x1f, 0x9a, 0x62, 0xcb, 0x91, 0x35, 0xc3, 0x43, 0xf7, 0xc1, 0xcf, 0xab, 0x60, 0xaa, 0x89, - 0x3c, 0x3c, 0xde, 0x62, 0xf6, 0x0f, 0xad, 0xe1, 0x1a, 0xb7, 0xe2, 0xc1, 0xce, 0xd6, 0x6a, 0x77, - 0x83, 0xe9, 0x9e, 0x63, 0xb7, 0x91, 0xeb, 0xb2, 0xd5, 0x0b, 0xde, 0x51, 0x6d, 0xd0, 0xe8, 0x4f, - 0x58, 0x5b, 0x58, 0xf7, 0xbf, 0xd1, 0xc3, 0xcf, 0x93, 0x9a, 0x01, 0x94, 0x12, 0xab, 0xe0, 0xa4, - 0xcd, 0x80, 0xb8, 0xc2, 0xd3, 0x07, 0xfa, 0x0f, 0x55, 0x30, 0xdb, 0x44, 0x5e, 0x20, 0xc5, 0x04, - 0x9b, 0x1c, 0xd1, 0xf0, 0x0a, 0x50, 0xaa, 0x87, 0x83, 0xf2, 0x9d, 0xd2, 0x17, 0xef, 0x8a, 0xd2, - 0x0c, 0x88, 0x8d, 0x05, 0xcf, 0xb7, 0x48, 0xdd, 0xb7, 0x2b, 0xc7, 0xc1, 0x04, 0x8e, 0xaf, 0x3d, - 0x1c, 0x4c, 0x13, 0x5e, 0x48, 0x83, 0xfd, 0x89, 0x6c, 0xd8, 0x78, 0xbf, 0x90, 0x52, 0xe3, 0x7d, - 0x12, 0xc8, 0xed, 0x1a, 0xce, 0x25, 0xff, 0xf0, 0xed, 0x23, 0xe4, 0x56, 0xbf, 0x5c, 0x9d, 0x7e, - 0x35, 0xd8, 0x4f, 0x33, 0x97, 0xcc, 0x4f, 0xf3, 0xf5, 0x4a, 0xa2, 0x91, 0x90, 0xce, 0x1d, 0xc6, - 0xd8, 0xe4, 0x13, 0x8c, 0x9b, 0x31, 0x65, 0xa7, 0xaf, 0x1c, 0x2f, 0x54, 0x41, 0x01, 0x8f, 0xdb, - 0xc4, 0x1e, 0x3f, 0x7f, 0x78, 0x75, 0x18, 0x6c, 0xe8, 0x27, 0xec, 0x81, 0x7d, 0x89, 0x8c, 0xcf, - 0xbc, 0x4f, 0xd0, 0x03, 0xc7, 0x15, 0x9e, 0x3e, 0x1e, 0xef, 0xa6, 0x78, 0x90, 0xf6, 0x00, 0xdf, - 0xa0, 0x02, 0x75, 0x05, 0x79, 0x93, 0xb6, 0x22, 0xdf, 0x2e, 0x1d, 0x5e, 0x54, 0x10, 0x18, 0xe1, - 0x79, 0x61, 0x05, 0x8d, 0xa7, 0x01, 0xc9, 0xc5, 0x15, 0x95, 0x62, 0x20, 0x7d, 0xd4, 0xde, 0x4f, - 0x51, 0xa3, 0x9b, 0x0b, 0x3f, 0x32, 0x86, 0x5e, 0x75, 0xb2, 0x0b, 0x1f, 0xbe, 0x00, 0x09, 0x8d, - 0xa3, 0x6a, 0x6f, 0x83, 0x0a, 0x4f, 0x1f, 0xb9, 0x97, 0xaa, 0xe4, 0x12, 0xb3, 0xf2, 0x0e, 0x6a, - 0x5f, 0x42, 0x1d, 0xfe, 0xb2, 0xec, 0x51, 0xa1, 0x3b, 0x0d, 0xa6, 0xda, 0x94, 0x1a, 0x01, 0xaf, - 0xa0, 0xfb, 0x8f, 0xe2, 0xcd, 0x42, 0xb1, 0x77, 0x67, 0x89, 0x1d, 0x11, 0xfd, 0x7c, 0x2c, 0xb8, - 0xc8, 0x5d, 0x78, 0x25, 0x51, 0xfc, 0x04, 0xcc, 0x16, 0x3a, 0xcb, 0xa8, 0xb6, 0x6d, 0x0b, 0xfe, - 0xf7, 0xc3, 0xc3, 0x72, 0x1d, 0x98, 0x36, 0xdb, 0xb6, 0x45, 0x42, 0xc0, 0xf9, 0x87, 0x80, 0x82, - 0x04, 0xff, 0x6d, 0x65, 0xd7, 0xbe, 0xd7, 0x64, 0xbb, 0xe6, 0x61, 0xc2, 0xa8, 0xc6, 0x04, 0x66, - 0xfd, 0xa8, 0x8c, 0x89, 0x01, 0x65, 0xa7, 0x0f, 0xd9, 0x27, 0x43, 0xef, 0x36, 0xda, 0x15, 0x3e, - 0x20, 0x56, 0x81, 0x47, 0x19, 0xce, 0xf8, 0x5a, 0x1c, 0xc9, 0x70, 0x16, 0xc3, 0xc0, 0x04, 0x6e, - 0x22, 0x0c, 0x71, 0x4c, 0x7d, 0x0d, 0xf8, 0x10, 0xe8, 0x8c, 0xcf, 0x3c, 0x1c, 0x11, 0x9d, 0xa3, - 0x31, 0x11, 0x3f, 0xc2, 0xc2, 0xd3, 0x33, 0x8b, 0x07, 0xfe, 0x8f, 0x71, 0x80, 0x73, 0xc7, 0x28, - 0xfe, 0x0a, 0xd4, 0x5b, 0x01, 0xbe, 0x55, 0x91, 0x0d, 0x81, 0x72, 0x40, 0x82, 0x98, 0xca, 0x58, - 0x10, 0x7c, 0x93, 0x54, 0x6c, 0x12, 0x99, 0xf2, 0xd3, 0x07, 0xf0, 0x05, 0x2a, 0x98, 0x27, 0x3e, - 0x02, 0x5d, 0x64, 0x38, 0xb4, 0xa3, 0x1c, 0x8b, 0xa3, 0xfc, 0xbb, 0xa5, 0x03, 0xfc, 0x88, 0x72, - 0x08, 0xf9, 0x18, 0x0b, 0x14, 0x72, 0xd1, 0x7d, 0x24, 0x59, 0x98, 0xc8, 0x36, 0x4a, 0x31, 0x60, - 0x81, 0xa9, 0xf8, 0x78, 0xf0, 0x48, 0xe8, 0x91, 0x2b, 0x0a, 0xc3, 0x6f, 0x6c, 0x13, 0xf6, 0xc8, - 0x95, 0x61, 0x22, 0x7d, 0x4c, 0xde, 0xf0, 0x68, 0xb6, 0xe0, 0xdc, 0x32, 0x2e, 0x76, 0x11, 0x7c, - 0x55, 0x36, 0x38, 0xd1, 0xf6, 0x87, 0x63, 0xf1, 0xc0, 0x3c, 0xc4, 0x65, 0x54, 0x1a, 0xc8, 0x3a, - 0xf6, 0x15, 0xba, 0xb4, 0x35, 0xa7, 0x93, 0xff, 0x34, 0x9e, 0x65, 0x77, 0x6f, 0xd7, 0xa2, 0x27, - 0x43, 0xe7, 0x74, 0xff, 0x51, 0xbb, 0x01, 0xcc, 0x5d, 0x31, 0xbd, 0x9d, 0x55, 0x64, 0x74, 0x90, - 0xa3, 0xdb, 0x57, 0x88, 0xc7, 0x5c, 0x41, 0x17, 0x13, 0x45, 0xff, 0x15, 0x09, 0xfb, 0x12, 0x0b, - 0x65, 0x32, 0xc7, 0xdf, 0x92, 0x58, 0x9e, 0xd1, 0x5c, 0xa5, 0xaf, 0x30, 0x1f, 0x50, 0xc1, 0xb4, - 0x6e, 0x5f, 0x61, 0x4a, 0xf2, 0xff, 0x1c, 0xad, 0x8e, 0x24, 0x9e, 0xe8, 0x11, 0xc9, 0x05, 0xec, - 0x4f, 0x7c, 0xa2, 0x17, 0x5b, 0xfc, 0x44, 0x4e, 0x2e, 0xcd, 0xea, 0xf6, 0x95, 0x26, 0xf2, 0x68, - 0x8b, 0x80, 0x9b, 0x63, 0x72, 0xb2, 0x36, 0x5d, 0x4a, 0x90, 0xcd, 0xc3, 0x83, 0xe7, 0xa4, 0xbb, - 0x08, 0x81, 0x80, 0x02, 0x16, 0x27, 0xbd, 0x8b, 0x30, 0x94, 0x83, 0x09, 0xc4, 0x48, 0x51, 0xc1, - 0x8c, 0x6e, 0x5f, 0xc1, 0x43, 0xc3, 0xb2, 0xd9, 0xed, 0x8e, 0x67, 0x84, 0x4c, 0x6a, 0xfc, 0xfb, - 0x62, 0xf0, 0xb9, 0x98, 0xb8, 0xf1, 0x3f, 0x84, 0x81, 0xf4, 0x61, 0x78, 0x1e, 0x6d, 0x2c, 0xfe, - 0x08, 0x6d, 0x8d, 0x07, 0x87, 0x51, 0x1b, 0x44, 0xc0, 0xc6, 0x91, 0x35, 0x88, 0x28, 0x0e, 0x26, - 0xb2, 0x73, 0x32, 0x5f, 0x26, 0xc3, 0xfc, 0x78, 0xdb, 0xc4, 0x7b, 0x93, 0xb9, 0x26, 0xb2, 0x61, - 0x57, 0x60, 0x64, 0x2c, 0x68, 0x24, 0x70, 0x41, 0x94, 0xe0, 0x21, 0x7d, 0x3c, 0x3e, 0xae, 0x82, - 0x59, 0xca, 0xc2, 0x03, 0xc4, 0x0a, 0x18, 0xa9, 0x51, 0xf1, 0x35, 0x38, 0x9a, 0x46, 0x15, 0xc3, - 0xc1, 0x44, 0xee, 0xf3, 0xc7, 0x76, 0xdc, 0x08, 0xc7, 0xc7, 0xa3, 0x10, 0x1c, 0xd9, 0x18, 0x1b, - 0xe3, 0x11, 0xf2, 0x51, 0x8c, 0xb1, 0x23, 0x3a, 0x46, 0xfe, 0xbc, 0xa0, 0x15, 0x8d, 0x13, 0x83, - 0x43, 0x34, 0x85, 0x31, 0xc2, 0x30, 0x62, 0x53, 0x38, 0x22, 0x24, 0xbe, 0xa6, 0x02, 0x40, 0x19, - 0x58, 0xb3, 0x2f, 0x93, 0x8b, 0x34, 0xc7, 0xd0, 0x9d, 0xf5, 0xbb, 0xd5, 0xab, 0x43, 0xdc, 0xea, - 0x13, 0x86, 0x70, 0x49, 0xba, 0x12, 0xc8, 0x49, 0x19, 0x57, 0x72, 0xe2, 0x2b, 0x81, 0xf1, 0xe5, - 0xa7, 0x8f, 0xf1, 0x57, 0xa8, 0x35, 0x17, 0x1e, 0x30, 0xfd, 0xf9, 0xb1, 0xa0, 0xcc, 0xcd, 0xfe, - 0x55, 0x71, 0xf6, 0x7f, 0x08, 0x6c, 0x47, 0xb5, 0x11, 0x87, 0x1d, 0x1c, 0x4d, 0xdf, 0x46, 0x3c, - 0xba, 0x03, 0xa2, 0x3f, 0x92, 0x05, 0xc7, 0x59, 0x27, 0xf2, 0xbd, 0x00, 0x71, 0xc2, 0x73, 0x78, - 0x42, 0x27, 0x39, 0x04, 0xe5, 0x71, 0x2d, 0x48, 0x25, 0x59, 0xca, 0x94, 0x60, 0x6f, 0x22, 0xab, - 0x1b, 0xf9, 0xca, 0x7d, 0x3d, 0xc3, 0xea, 0xc8, 0x87, 0xfb, 0x1d, 0x02, 0xbc, 0xbf, 0xd6, 0xa8, - 0x8a, 0x6b, 0x8d, 0x03, 0x56, 0x26, 0x13, 0xef, 0x5c, 0x13, 0x91, 0x51, 0x76, 0x27, 0xbe, 0x73, - 0x1d, 0x5d, 0x76, 0xfa, 0x28, 0xbd, 0x57, 0x05, 0xd9, 0xa6, 0xed, 0x78, 0xf0, 0xfe, 0x24, 0xad, - 0x93, 0x4a, 0x3e, 0x04, 0xc9, 0x7f, 0xd6, 0xca, 0x20, 0x8b, 0x2b, 0xc7, 0x66, 0x0c, 0xb7, 0xc6, - 0x1f, 0x75, 0x36, 0x3c, 0x83, 0x78, 0x75, 0xe3, 0xf2, 0x17, 0x5a, 0xfb, 0x3d, 0xa4, 0x93, 0x8f, - 0x93, 0xc6, 0xd3, 0xa1, 0xf2, 0x6b, 0x46, 0x1f, 0xc0, 0x48, 0x2d, 0x9e, 0x4e, 0x64, 0xc9, 0xe9, - 0xe3, 0xf6, 0xda, 0xe3, 0xcc, 0xb7, 0x75, 0xd9, 0xec, 0x22, 0x78, 0x3f, 0x75, 0x19, 0xa9, 0x1b, - 0xbb, 0x48, 0xfe, 0x48, 0x4c, 0xac, 0x6b, 0x2b, 0x89, 0x2f, 0xab, 0x86, 0xf1, 0x65, 0x93, 0x36, - 0x28, 0x7a, 0x00, 0x9d, 0xb2, 0x34, 0xe9, 0x06, 0x15, 0x53, 0xf6, 0x44, 0xe2, 0x74, 0x9e, 0x68, - 0x22, 0x8f, 0x1a, 0x95, 0x0d, 0xff, 0x8a, 0xa4, 0xa7, 0x8f, 0x25, 0x62, 0x67, 0x70, 0xa1, 0x8e, - 0xda, 0x77, 0x03, 0xd3, 0x07, 0x78, 0x70, 0xd6, 0x44, 0x70, 0x7e, 0x20, 0x5a, 0x40, 0x22, 0x93, - 0x63, 0x81, 0xe9, 0xed, 0x01, 0x4c, 0xeb, 0x02, 0x4c, 0x77, 0x8e, 0xc8, 0x45, 0xfa, 0x80, 0xfd, - 0x54, 0x0e, 0x1c, 0xa7, 0x93, 0xfe, 0x92, 0xd5, 0x61, 0x11, 0x56, 0xdf, 0xac, 0x1c, 0xf1, 0x66, - 0xdb, 0xc1, 0x10, 0xac, 0x42, 0x2c, 0xe7, 0x5c, 0x5f, 0x2c, 0x67, 0x6d, 0x91, 0x86, 0x73, 0xc5, - 0x9d, 0x28, 0xd9, 0x69, 0x1b, 0x16, 0x66, 0x82, 0xc8, 0x9e, 0x74, 0xb9, 0xc1, 0x77, 0xe2, 0x3d, - 0xa2, 0x53, 0xf2, 0xf7, 0x88, 0xfe, 0x7e, 0xb2, 0x75, 0x3b, 0x52, 0x74, 0x9f, 0xc0, 0x53, 0xb6, - 0x9d, 0x12, 0xac, 0xe8, 0x49, 0x70, 0xf7, 0x5f, 0xc3, 0x9d, 0x2c, 0x8c, 0x20, 0x32, 0xa2, 0x3b, - 0x19, 0x21, 0x70, 0x94, 0xee, 0x64, 0xc3, 0x18, 0x48, 0x1f, 0xc7, 0xdf, 0xcf, 0xb1, 0xdd, 0x7c, - 0xd2, 0x6e, 0xe0, 0x97, 0x95, 0xd4, 0x47, 0xe9, 0xef, 0x64, 0x12, 0xf9, 0x3f, 0x13, 0xbe, 0xe2, - 0x87, 0xe9, 0x24, 0x1e, 0xcd, 0x71, 0xe4, 0x26, 0xb0, 0x6e, 0xa4, 0x10, 0x5f, 0xf4, 0xf3, 0x66, - 0xc7, 0xdb, 0x19, 0xd3, 0x89, 0x8e, 0x2b, 0x98, 0x16, 0x8b, 0x57, 0x4f, 0x1f, 0xe0, 0xbf, 0x66, - 0x12, 0x85, 0x90, 0x0a, 0x44, 0x42, 0xd8, 0x8a, 0x10, 0x71, 0x82, 0xc0, 0x4f, 0xb1, 0xf4, 0x26, - 0xa8, 0xd1, 0xe7, 0xcc, 0x0e, 0xb2, 0x1f, 0x80, 0x1a, 0x4d, 0xf8, 0x1a, 0x9f, 0x46, 0xc7, 0x91, - 0xfb, 0x2f, 0xaa, 0xd1, 0x81, 0x48, 0xc6, 0xa4, 0xd1, 0xb1, 0xf4, 0xd2, 0x97, 0xf1, 0x2b, 0x66, - 0xd9, 0x44, 0xaa, 0x66, 0x5a, 0x97, 0xe0, 0x3f, 0xe5, 0x41, 0xd1, 0x8f, 0x23, 0xec, 0xed, 0xb0, - 0x58, 0x30, 0x1f, 0x96, 0xbe, 0x1b, 0x65, 0x84, 0x78, 0x2f, 0x62, 0x38, 0xa9, 0xdc, 0x81, 0x70, - 0x52, 0x25, 0x30, 0x67, 0x5a, 0x1e, 0x72, 0x2c, 0xa3, 0xbb, 0xdc, 0x35, 0xb6, 0xdd, 0xd3, 0x53, - 0x03, 0x2f, 0xaf, 0xab, 0x72, 0x79, 0x74, 0xf1, 0x0b, 0xfe, 0x02, 0xd1, 0x82, 0x78, 0x81, 0x68, - 0x44, 0xf4, 0xab, 0xe9, 0xe8, 0xe8, 0x57, 0x41, 0x74, 0x2b, 0x30, 0x3c, 0x38, 0xb6, 0xac, 0x6d, - 0x9c, 0x30, 0xdc, 0xdf, 0xad, 0x92, 0x51, 0xd8, 0x82, 0xd0, 0x8f, 0xaf, 0x56, 0x13, 0xad, 0xee, - 0x61, 0x45, 0x58, 0xe8, 0x57, 0x82, 0xc4, 0x16, 0x2a, 0x5f, 0x79, 0xb5, 0xaf, 0xf2, 0x81, 0xc9, - 0x93, 0x95, 0x30, 0x79, 0x78, 0xa5, 0xca, 0xc9, 0xde, 0xe9, 0x2a, 0xbf, 0x58, 0x28, 0x53, 0xdb, - 0x09, 0x9c, 0x46, 0xca, 0x81, 0x13, 0x7e, 0xb4, 0xdb, 0x5e, 0x0f, 0x19, 0x8e, 0x61, 0xb5, 0x11, - 0xfc, 0xa4, 0x32, 0x0e, 0xb3, 0x77, 0x19, 0x14, 0xcc, 0xb6, 0x6d, 0x35, 0xcd, 0x67, 0xfa, 0x97, - 0xcb, 0xc5, 0x07, 0x59, 0x27, 0x12, 0xa9, 0xb2, 0x2f, 0xf4, 0xe0, 0x5b, 0xad, 0x0a, 0xa6, 0xdb, - 0x86, 0xd3, 0xa1, 0x41, 0xf8, 0x72, 0x7d, 0x17, 0x39, 0x45, 0x12, 0x2a, 0xfb, 0x9f, 0xe8, 0xe1, - 0xd7, 0x5a, 0x43, 0x14, 0x62, 0xbe, 0x2f, 0x9a, 0x47, 0x24, 0xb1, 0xa5, 0xf0, 0x23, 0x41, 0xe6, - 0x58, 0x3a, 0x0e, 0xea, 0x1a, 0xf4, 0xd2, 0xf1, 0x29, 0x7a, 0x47, 0x74, 0x90, 0x90, 0x74, 0x79, - 0x80, 0x14, 0x75, 0x00, 0x8d, 0x49, 0x2f, 0x0f, 0x48, 0x71, 0x91, 0xbe, 0x66, 0xbe, 0x2b, 0x0f, - 0xe6, 0x68, 0xaf, 0xc6, 0xc4, 0x09, 0x5f, 0xa0, 0x82, 0x7c, 0x13, 0x79, 0xf7, 0xa0, 0x7d, 0xd8, - 0x3c, 0xfc, 0x98, 0x5c, 0x04, 0xea, 0xa5, 0x20, 0xe0, 0x20, 0xfe, 0x9b, 0x74, 0xdf, 0xde, 0xe7, - 0x6b, 0x81, 0xf2, 0x34, 0xe9, 0x7d, 0xfb, 0xf8, 0xe2, 0xd3, 0xc7, 0xe7, 0xa7, 0x55, 0xa0, 0x96, - 0x3a, 0x1d, 0xd8, 0x3e, 0x3c, 0x14, 0xd7, 0x83, 0x19, 0xbf, 0xcd, 0x84, 0x31, 0x20, 0xf9, 0xa4, - 0xa4, 0x8b, 0xa0, 0x81, 0x6c, 0x4a, 0x9d, 0x89, 0xef, 0x2a, 0xc4, 0x94, 0x9d, 0x3e, 0x28, 0x5f, - 0x98, 0x62, 0x8d, 0x66, 0xd1, 0xb6, 0x2f, 0x91, 0xa3, 0x32, 0xbf, 0xac, 0x82, 0xdc, 0x32, 0xf2, - 0xda, 0x3b, 0xd0, 0x1d, 0x4b, 0x9b, 0xe9, 0xbb, 0xf7, 0x7c, 0x48, 0x50, 0xce, 0xa4, 0xd1, 0x9f, - 0x7d, 0xb6, 0x17, 0x08, 0xcb, 0x93, 0x8e, 0xfe, 0x1c, 0x5b, 0xfa, 0x04, 0x0e, 0xc1, 0x65, 0xc1, - 0x7c, 0xb0, 0x02, 0x46, 0x31, 0x7b, 0x47, 0xe6, 0x01, 0xb7, 0x1e, 0x3a, 0xc4, 0x6e, 0x86, 0x7f, - 0x9c, 0x2c, 0xc4, 0x5a, 0x20, 0x73, 0xb1, 0xe6, 0x29, 0x2f, 0x4c, 0x26, 0x08, 0xbe, 0x26, 0xc7, - 0xe0, 0x04, 0x56, 0x00, 0x54, 0x50, 0x20, 0x0c, 0x2d, 0x99, 0x97, 0x89, 0xeb, 0xa1, 0xb0, 0x50, - 0xf9, 0xac, 0xb1, 0x2c, 0x54, 0xde, 0x29, 0x2e, 0x54, 0x4a, 0x46, 0x4c, 0xf6, 0xd7, 0x29, 0x13, - 0xfa, 0xe2, 0xe0, 0xef, 0xc7, 0xbe, 0x4c, 0x99, 0xc0, 0x17, 0x67, 0x48, 0xf9, 0xe9, 0x23, 0xfa, - 0xc6, 0xff, 0xc6, 0x3a, 0x6b, 0x7f, 0x43, 0x16, 0xfe, 0xcf, 0x13, 0x20, 0x7b, 0x0e, 0xff, 0xf9, - 0xc7, 0xf0, 0x46, 0xad, 0x97, 0x8d, 0x21, 0xb8, 0xc3, 0x93, 0x41, 0x16, 0xd3, 0x67, 0xd3, 0x9e, - 0x9b, 0xe5, 0x76, 0x87, 0x31, 0x23, 0x3a, 0xf9, 0x4e, 0x3b, 0x05, 0xf2, 0xae, 0xbd, 0xe7, 0xb4, - 0xb1, 0xf9, 0x8d, 0x35, 0x86, 0x3d, 0x25, 0x0d, 0x6a, 0x2a, 0x90, 0x5e, 0x18, 0x9f, 0xcb, 0x29, - 0x77, 0xc1, 0x92, 0x2a, 0x5c, 0xb0, 0x94, 0x60, 0xff, 0x41, 0x82, 0xb7, 0xf4, 0x35, 0xe2, 0xcb, - 0xe4, 0xae, 0xc1, 0xce, 0xb8, 0x60, 0x8f, 0x10, 0xcb, 0x61, 0xd5, 0x21, 0xa9, 0xc3, 0xb8, 0x28, - 0xda, 0x20, 0x8e, 0xfc, 0x44, 0x1d, 0xc6, 0x25, 0x78, 0x98, 0xc8, 0x29, 0xf7, 0x3c, 0x73, 0x72, - 0xbd, 0x30, 0x4e, 0x74, 0xb3, 0x82, 0xd2, 0x1f, 0x0a, 0x9d, 0x31, 0x3a, 0xbf, 0x8e, 0x8c, 0xce, - 0x11, 0xb9, 0xbf, 0xfe, 0xa6, 0x4a, 0x22, 0x69, 0xfa, 0x46, 0x90, 0xfc, 0x45, 0x49, 0x89, 0x21, - 0xc2, 0x63, 0xb0, 0x10, 0x47, 0x7a, 0x6e, 0xf4, 0xd0, 0xe2, 0xa2, 0xe8, 0x38, 0xfe, 0x27, 0x1d, - 0x5a, 0x5c, 0x96, 0x91, 0xf4, 0x81, 0xfc, 0x25, 0x7a, 0x31, 0x59, 0xa9, 0xed, 0x99, 0x97, 0xc7, - 0xdc, 0xd2, 0xc4, 0xe1, 0x25, 0x61, 0x34, 0xe1, 0x03, 0x12, 0xa2, 0x1c, 0x4e, 0x3a, 0x9a, 0xb0, - 0x1c, 0x1b, 0xe9, 0xc3, 0xf4, 0x93, 0x00, 0x4b, 0x8f, 0xad, 0xed, 0xbc, 0x41, 0x05, 0x6a, 0x13, - 0x79, 0x10, 0x1d, 0x1e, 0xad, 0xb3, 0x60, 0x96, 0x5b, 0x3a, 0xf0, 0x2f, 0xbc, 0x11, 0xd2, 0x92, - 0x1e, 0x94, 0x0f, 0x44, 0xc6, 0x2f, 0xba, 0x4c, 0xfa, 0xa0, 0xbc, 0x0c, 0x13, 0x13, 0x38, 0x28, - 0xcf, 0x96, 0x7d, 0xbe, 0x57, 0x80, 0x1a, 0xd7, 0x0a, 0xd0, 0xa1, 0x80, 0x3a, 0x8a, 0xa5, 0xa0, - 0xb7, 0x87, 0xc6, 0xc6, 0x84, 0xb0, 0xfa, 0x30, 0x8f, 0x55, 0x43, 0xc4, 0xea, 0x76, 0x19, 0x31, - 0xc9, 0x19, 0x1f, 0x52, 0x13, 0xfc, 0x77, 0x06, 0x70, 0xe9, 0x02, 0x5c, 0x4f, 0x1e, 0x99, 0x8f, - 0xf4, 0x11, 0xfb, 0x05, 0x3a, 0x6e, 0x35, 0xe9, 0xdc, 0x6a, 0x3c, 0xe3, 0x16, 0x9b, 0xb6, 0xa9, - 0xc2, 0xb4, 0x2d, 0xe1, 0xc1, 0x8a, 0xd0, 0x5f, 0xd8, 0x67, 0x6e, 0x18, 0x44, 0xd9, 0x31, 0x1f, - 0xac, 0x18, 0xca, 0x41, 0xfa, 0xe0, 0x7c, 0x53, 0x05, 0x60, 0xc5, 0xb1, 0xf7, 0x7a, 0x0d, 0xa7, - 0x83, 0x1c, 0xf8, 0xe7, 0xe1, 0x4c, 0xed, 0x67, 0xc6, 0x30, 0x53, 0x5b, 0x07, 0x60, 0x3b, 0x20, - 0xce, 0x34, 0xfc, 0xd1, 0x72, 0xf3, 0xb2, 0x90, 0x29, 0x9d, 0xa3, 0x21, 0xde, 0x2d, 0xfc, 0x54, - 0x11, 0xe3, 0xb8, 0x3e, 0x2b, 0x24, 0x37, 0xce, 0x99, 0xda, 0xbb, 0x03, 0xac, 0x5b, 0x02, 0xd6, - 0x4f, 0x39, 0x04, 0x27, 0xe9, 0x63, 0xfe, 0x0f, 0x53, 0x60, 0x86, 0xee, 0xcb, 0x52, 0x99, 0xfe, - 0x4d, 0x08, 0xfa, 0xcf, 0x8f, 0x01, 0xf4, 0x0d, 0x30, 0x6b, 0x87, 0xd4, 0x69, 0x9f, 0xca, 0xaf, - 0x94, 0xc5, 0xc2, 0xce, 0xf1, 0xa5, 0x0b, 0x64, 0xe0, 0x6f, 0xf0, 0xc8, 0xeb, 0x22, 0xf2, 0x77, - 0xc6, 0xc8, 0x9b, 0xa3, 0x38, 0x4e, 0xe8, 0xdf, 0x13, 0x40, 0xbf, 0x21, 0x40, 0x5f, 0x3a, 0x0c, - 0x2b, 0x13, 0xb8, 0x57, 0x41, 0x05, 0x59, 0x72, 0x0c, 0xf2, 0x2d, 0x29, 0x2e, 0xc4, 0x9c, 0x06, - 0x53, 0xa4, 0xc9, 0x06, 0x13, 0x44, 0xff, 0x11, 0xbf, 0x31, 0xb6, 0x3c, 0xe4, 0x04, 0x4b, 0xec, - 0xfe, 0x23, 0xe6, 0xc1, 0x77, 0x3f, 0x77, 0x4f, 0xe7, 0xe9, 0x8e, 0x73, 0x90, 0x30, 0xf2, 0xec, - 0x91, 0x97, 0xf8, 0xd8, 0x0e, 0x46, 0x8e, 0x32, 0x7b, 0x1c, 0xc2, 0x48, 0xfa, 0xc0, 0x7f, 0x31, - 0x0b, 0x4e, 0xd3, 0xe5, 0xbf, 0x65, 0xc7, 0xde, 0xed, 0xbb, 0xc6, 0xcc, 0x3c, 0xbc, 0x2e, 0xdc, - 0x08, 0xe6, 0x3d, 0xc1, 0xf1, 0x9e, 0xe9, 0x44, 0x5f, 0x2a, 0xfc, 0x03, 0xde, 0x79, 0xe6, 0x69, - 0x22, 0x92, 0x8b, 0x31, 0x02, 0x8c, 0xe2, 0x3d, 0xf1, 0x8e, 0x8a, 0x24, 0xa3, 0xdc, 0x6a, 0xa2, - 0x3a, 0xd2, 0xe2, 0x72, 0xa0, 0x53, 0x39, 0x19, 0x9d, 0xfa, 0x60, 0xa0, 0x53, 0x3f, 0x24, 0xe8, - 0xd4, 0xca, 0xe1, 0x45, 0x32, 0x81, 0x25, 0xa6, 0x79, 0x90, 0x5f, 0x36, 0xbb, 0x1e, 0x72, 0xe0, - 0x57, 0xd8, 0x3c, 0xea, 0x55, 0x29, 0x76, 0x2f, 0x4b, 0x20, 0xbf, 0x45, 0x4a, 0x63, 0x06, 0xd9, - 0x2d, 0x72, 0xd8, 0x50, 0x0e, 0x75, 0xf6, 0x6d, 0xd2, 0x20, 0x7f, 0x7d, 0x64, 0xc6, 0x36, 0x01, - 0x4b, 0x10, 0xe4, 0x6f, 0x38, 0x0b, 0x13, 0xb9, 0xdf, 0x2a, 0xaf, 0xa3, 0x5d, 0x3c, 0x82, 0x5c, - 0x4a, 0x0f, 0xe1, 0x22, 0x50, 0xcd, 0x8e, 0x4b, 0x9a, 0xde, 0xb4, 0x8e, 0xff, 0x26, 0x75, 0x39, - 0xea, 0x17, 0x15, 0x65, 0x79, 0xd2, 0x2e, 0x47, 0x52, 0x5c, 0xa4, 0x8f, 0xd9, 0x77, 0x88, 0xbf, - 0x69, 0xaf, 0x6b, 0xb4, 0x11, 0xe6, 0x3e, 0x35, 0xd4, 0xe6, 0x81, 0x62, 0xfa, 0x23, 0xbe, 0x62, - 0xf2, 0xed, 0x34, 0x77, 0x88, 0x76, 0x3a, 0xea, 0x6a, 0x64, 0x20, 0x73, 0x52, 0xf1, 0x23, 0x5b, - 0x8d, 0x8c, 0x65, 0x63, 0x02, 0xb7, 0x97, 0xfa, 0xe7, 0x71, 0x27, 0xda, 0x5a, 0x47, 0xdd, 0xab, - 0x61, 0xc2, 0x1a, 0xdb, 0xd9, 0xdb, 0x51, 0xf6, 0x6a, 0xa2, 0x79, 0x98, 0x00, 0x5a, 0xf3, 0x0c, - 0xad, 0xcf, 0xb1, 0x61, 0x34, 0xe5, 0xed, 0x52, 0xd7, 0x76, 0xbc, 0x64, 0xdb, 0xa5, 0x98, 0x3b, - 0x9d, 0x7c, 0x97, 0xf4, 0xfc, 0x96, 0x78, 0x3c, 0x7b, 0x5c, 0xc3, 0x67, 0x82, 0xf3, 0x5b, 0xc3, - 0x18, 0x48, 0x1f, 0xde, 0xb7, 0x1e, 0xd1, 0xe0, 0x39, 0x6a, 0x73, 0x64, 0x6d, 0x60, 0x6c, 0x43, - 0xe7, 0x28, 0xcd, 0x31, 0x9a, 0x87, 0xf4, 0xf1, 0xfa, 0x7b, 0x6e, 0xe0, 0x7c, 0xd3, 0x04, 0x07, - 0x4e, 0xbf, 0x65, 0xe6, 0x46, 0x6c, 0x99, 0xa3, 0xee, 0x2e, 0x30, 0x59, 0x8f, 0x6f, 0xc0, 0x1c, - 0x65, 0x77, 0x21, 0x86, 0x89, 0xf4, 0x11, 0x7f, 0xb3, 0x0a, 0x72, 0xcd, 0xc9, 0x8f, 0x97, 0xa3, - 0xce, 0x45, 0x88, 0xac, 0x9a, 0x63, 0x1b, 0x2e, 0x47, 0x99, 0x8b, 0x44, 0xb2, 0x30, 0x81, 0xf8, - 0xfd, 0xc7, 0xc1, 0x2c, 0x99, 0x70, 0xfb, 0xbb, 0xad, 0x7f, 0xcf, 0x46, 0xcd, 0xd7, 0xa7, 0xd8, - 0x56, 0xef, 0x06, 0x05, 0x7f, 0x77, 0x88, 0x8d, 0x9c, 0x0b, 0x72, 0xed, 0xd3, 0xe7, 0x52, 0x0f, - 0xbe, 0x3f, 0x94, 0x4f, 0xc4, 0xd8, 0x77, 0x02, 0x47, 0xf5, 0x89, 0x38, 0xd2, 0xdd, 0xc0, 0xdf, - 0x0f, 0x47, 0xd4, 0xff, 0x9e, 0x1e, 0xe6, 0xfd, 0xbb, 0x84, 0xd9, 0x01, 0xbb, 0x84, 0x9f, 0xe4, - 0xb1, 0x6c, 0x8a, 0x58, 0x3e, 0x49, 0x56, 0x84, 0x63, 0x1c, 0x6b, 0xdf, 0x1b, 0xc0, 0x79, 0x4e, - 0x80, 0x73, 0xf1, 0x50, 0xbc, 0x4c, 0xe0, 0xfc, 0x64, 0x36, 0x1c, 0x73, 0x3f, 0x95, 0x62, 0x3b, - 0xee, 0x3b, 0x9c, 0x91, 0x3d, 0x70, 0x38, 0x43, 0x68, 0xe9, 0xb9, 0x43, 0xb6, 0xf4, 0x4f, 0xf1, - 0xda, 0xd1, 0x12, 0xb5, 0xe3, 0xc9, 0xf2, 0x88, 0x8c, 0x6f, 0x64, 0x7e, 0x5f, 0xa0, 0x1e, 0xe7, - 0x05, 0xf5, 0x28, 0x1f, 0x8e, 0x99, 0xf4, 0xf5, 0xe3, 0xb7, 0xfc, 0x09, 0xed, 0x11, 0xb7, 0xf7, - 0x51, 0x37, 0x22, 0x05, 0x21, 0x8e, 0x6d, 0xe4, 0x1e, 0x65, 0x23, 0x72, 0x18, 0x27, 0x13, 0x08, - 0xe9, 0x36, 0x07, 0x66, 0x08, 0x4f, 0xe7, 0xcd, 0xce, 0x36, 0xf2, 0xe0, 0xab, 0xa9, 0xab, 0xa2, - 0x1f, 0x40, 0x73, 0x4c, 0x51, 0x8e, 0xa2, 0x8e, 0xcd, 0x26, 0xf5, 0x17, 0xa0, 0x4c, 0x2e, 0x70, - 0x0c, 0x4e, 0x3a, 0x10, 0xe3, 0x50, 0x0e, 0xd2, 0x87, 0xec, 0x37, 0xa8, 0x33, 0x47, 0xcd, 0xd8, - 0xb7, 0xf7, 0x3c, 0xf8, 0x9c, 0x31, 0x74, 0xd0, 0x8b, 0x20, 0xdf, 0x25, 0xd4, 0xd8, 0xe9, 0x8c, - 0xf8, 0xe9, 0x0e, 0x13, 0x01, 0x2d, 0x5f, 0x67, 0x5f, 0x26, 0x3d, 0xa2, 0x11, 0xca, 0x91, 0xd2, - 0x99, 0xf4, 0x11, 0x8d, 0x21, 0xe5, 0x4f, 0xe4, 0xaa, 0x9e, 0x02, 0x2e, 0xdd, 0xdc, 0x35, 0xbd, - 0x31, 0x05, 0x82, 0xe8, 0x62, 0x5a, 0x7e, 0x20, 0x08, 0xf2, 0x90, 0xf4, 0xe0, 0x29, 0x27, 0x15, - 0xfc, 0xf9, 0xa4, 0x0f, 0x9e, 0xc6, 0x17, 0x9f, 0x3e, 0x26, 0x3f, 0x47, 0x5b, 0xd6, 0x39, 0xea, - 0x83, 0x9b, 0xa2, 0x7b, 0xef, 0xc8, 0x8d, 0x85, 0xb2, 0x76, 0x74, 0x8d, 0x65, 0x60, 0xf9, 0xe9, - 0x03, 0xf3, 0xcb, 0xdf, 0x07, 0x72, 0x4b, 0xe8, 0xe2, 0xde, 0x36, 0xbc, 0x13, 0x14, 0x5a, 0x0e, - 0x42, 0x55, 0x6b, 0xcb, 0xc6, 0xd2, 0xf5, 0xf0, 0x7f, 0x1f, 0x12, 0xf6, 0x84, 0xf1, 0xd8, 0x41, - 0x46, 0x27, 0x3c, 0x86, 0xe6, 0x3f, 0xc2, 0x97, 0x29, 0x20, 0xdb, 0xf4, 0x0c, 0x0f, 0x4e, 0x07, - 0xd8, 0xc2, 0xe7, 0xf0, 0x58, 0xdc, 0x29, 0x62, 0x71, 0xa3, 0x20, 0x0b, 0xc2, 0xc1, 0x02, 0xfe, - 0x3e, 0x02, 0x00, 0x08, 0x0a, 0xf7, 0xba, 0xb6, 0x85, 0x73, 0xf8, 0x27, 0x25, 0xfd, 0x67, 0xf8, - 0xca, 0x40, 0xdc, 0x77, 0x09, 0xe2, 0x7e, 0xa4, 0x5c, 0x11, 0x13, 0x58, 0x69, 0x53, 0xc0, 0x34, - 0x16, 0xed, 0x2a, 0x32, 0x3a, 0x2e, 0x7c, 0x68, 0xa8, 0xfc, 0x11, 0x62, 0x86, 0x1f, 0x91, 0x8e, - 0xe9, 0x49, 0x6b, 0x15, 0x10, 0x8f, 0xf6, 0x17, 0xf0, 0x63, 0x9a, 0x28, 0x62, 0x4c, 0x93, 0x5b, - 0x41, 0xd6, 0xb4, 0xb6, 0x6c, 0xe6, 0xbd, 0x76, 0x6d, 0x04, 0x6d, 0xac, 0x13, 0x3a, 0xc9, 0x28, - 0x19, 0xf0, 0x33, 0x9e, 0xad, 0x89, 0xdc, 0x9d, 0x97, 0xc5, 0xa5, 0xc3, 0xff, 0x7b, 0xa8, 0xb0, - 0x35, 0x0d, 0x64, 0x7b, 0x86, 0xb7, 0xc3, 0x8a, 0x26, 0xff, 0xb1, 0x8d, 0xbc, 0x67, 0x19, 0x96, - 0x6d, 0xed, 0xef, 0x9a, 0xcf, 0x0c, 0xae, 0xe8, 0x15, 0xd2, 0x30, 0xe7, 0xdb, 0xc8, 0x42, 0x8e, - 0xe1, 0xa1, 0xe6, 0xe5, 0x6d, 0x32, 0xc7, 0x2a, 0xe8, 0x7c, 0x52, 0x62, 0xfd, 0xc7, 0x1c, 0x47, - 0xeb, 0xff, 0x96, 0xd9, 0x45, 0x24, 0xe0, 0x13, 0xd3, 0x7f, 0xff, 0x39, 0x91, 0xfe, 0x0f, 0x28, - 0x22, 0x7d, 0x34, 0xfe, 0x4d, 0x01, 0xb3, 0x4d, 0xac, 0x70, 0xcd, 0xbd, 0xdd, 0x5d, 0xc3, 0xd9, - 0x87, 0x0f, 0x0b, 0x51, 0xe1, 0x54, 0x33, 0x23, 0xa8, 0x26, 0xfc, 0x4d, 0xe9, 0xdb, 0xa9, 0x59, - 0xd3, 0xe6, 0x4a, 0x48, 0xdc, 0x0e, 0x1e, 0x03, 0x72, 0x58, 0xbd, 0x7d, 0x7f, 0xbe, 0xd8, 0x86, - 0x40, 0x73, 0x4a, 0x06, 0xc6, 0x1a, 0xca, 0xdb, 0x04, 0x82, 0x72, 0x28, 0xe0, 0x78, 0xd3, 0x33, - 0xda, 0x97, 0x56, 0x6c, 0xc7, 0xde, 0xf3, 0x4c, 0x0b, 0xb9, 0xf0, 0xc1, 0x21, 0x02, 0xbe, 0xfe, - 0x67, 0x42, 0xfd, 0x87, 0xff, 0x91, 0x91, 0x1d, 0x45, 0x83, 0x6e, 0x95, 0x27, 0x1f, 0x11, 0xe7, - 0x4a, 0x6e, 0x5c, 0x94, 0xa1, 0x98, 0xbe, 0xd0, 0xde, 0xa4, 0x82, 0x62, 0xe5, 0xbe, 0x9e, 0xed, - 0x78, 0x35, 0xbb, 0x6d, 0x74, 0x5d, 0xcf, 0x76, 0x10, 0x6c, 0xc4, 0x4a, 0x0d, 0xf7, 0x30, 0x1d, - 0xbb, 0x1d, 0x0e, 0x8e, 0xec, 0x89, 0x57, 0x3b, 0x55, 0xd4, 0xf1, 0xdf, 0x90, 0xde, 0x65, 0xa4, - 0x52, 0xe9, 0xe7, 0x28, 0x42, 0xcf, 0x07, 0x75, 0x69, 0xc9, 0x5c, 0xf1, 0xe5, 0x76, 0x1e, 0xa5, - 0x98, 0x9a, 0xc0, 0x52, 0xb9, 0x02, 0xe6, 0x9a, 0x7b, 0x17, 0x03, 0x22, 0x2e, 0x6f, 0x84, 0xbc, - 0x46, 0x3a, 0x98, 0x05, 0x53, 0x3c, 0x9e, 0x50, 0x84, 0x7c, 0x6f, 0x00, 0x73, 0x2e, 0x9f, 0x8d, - 0xe1, 0x2d, 0x26, 0x4a, 0x06, 0xb1, 0x18, 0x5e, 0x6a, 0xfa, 0x02, 0x7c, 0x9f, 0x02, 0xe6, 0x1a, - 0x3d, 0x64, 0xa1, 0x0e, 0xf5, 0xb1, 0x13, 0x04, 0xf8, 0xb2, 0x84, 0x02, 0x14, 0x08, 0x45, 0x08, - 0x30, 0xf4, 0x87, 0x5d, 0xf2, 0x85, 0x17, 0x26, 0x24, 0x12, 0x5c, 0x5c, 0x69, 0xe9, 0x0b, 0xee, - 0x4b, 0x0a, 0x98, 0xd1, 0xf7, 0xac, 0x75, 0xc7, 0xc6, 0xa3, 0xb1, 0x03, 0x9f, 0x14, 0x76, 0x10, - 0xb7, 0x80, 0x13, 0x9d, 0x3d, 0x87, 0xac, 0x3f, 0x55, 0xad, 0x26, 0x6a, 0xdb, 0x56, 0xc7, 0x25, - 0xf5, 0xc8, 0xe9, 0x07, 0x5f, 0xdc, 0x91, 0xbd, 0xff, 0xeb, 0x6a, 0x06, 0xbe, 0x40, 0x3a, 0x62, - 0x0e, 0xad, 0x3c, 0x57, 0xb4, 0x7c, 0x4f, 0x20, 0x19, 0x17, 0x67, 0x58, 0x09, 0xe9, 0x0b, 0xf7, - 0x73, 0x0a, 0xd0, 0x4a, 0xed, 0xb6, 0xbd, 0x67, 0x79, 0x4d, 0xd4, 0x45, 0x6d, 0xaf, 0xe5, 0x18, - 0x6d, 0xc4, 0xdb, 0xcf, 0x45, 0xa0, 0x76, 0x4c, 0x87, 0xf5, 0xc1, 0xf8, 0x2f, 0x93, 0xe3, 0xcb, - 0xa4, 0x77, 0x1c, 0x69, 0x2d, 0x0f, 0x96, 0x92, 0x40, 0x9c, 0x72, 0xfb, 0x8a, 0x92, 0x05, 0xa5, - 0x2f, 0xd5, 0x4f, 0x29, 0x60, 0xda, 0xef, 0xb1, 0xb7, 0x65, 0x84, 0xf9, 0x73, 0x09, 0x27, 0x23, - 0x01, 0xf1, 0x04, 0x32, 0x7c, 0x57, 0x82, 0x59, 0x45, 0x14, 0xfd, 0x64, 0xa2, 0x2b, 0x25, 0x17, - 0x1d, 0x7e, 0xac, 0x37, 0x36, 0x97, 0x1b, 0xb5, 0xa5, 0x8a, 0x5e, 0x54, 0xe1, 0x57, 0x14, 0x90, - 0x5d, 0x37, 0xad, 0x6d, 0x3e, 0xb0, 0xd9, 0x49, 0x6c, 0x47, 0x76, 0xd0, 0x7d, 0xac, 0xa5, 0xd3, - 0x07, 0xed, 0x36, 0x70, 0xd2, 0xda, 0xdb, 0xbd, 0x88, 0x9c, 0xc6, 0x16, 0x19, 0x65, 0xdd, 0x96, - 0xdd, 0x44, 0x16, 0x35, 0x42, 0x73, 0xfa, 0xc0, 0x77, 0xa2, 0x09, 0x26, 0x31, 0x79, 0xc0, 0x9c, - 0x44, 0x48, 0x3c, 0x60, 0x4a, 0xe1, 0x98, 0x4a, 0x34, 0x6d, 0x18, 0x40, 0x3c, 0x7d, 0x4d, 0xfd, - 0xed, 0x1c, 0xb8, 0xba, 0x64, 0xed, 0x13, 0x9b, 0x82, 0x76, 0xf0, 0xe5, 0x1d, 0xc3, 0xda, 0x46, - 0x64, 0x80, 0x08, 0x24, 0xce, 0x47, 0xfa, 0xcf, 0x88, 0x91, 0xfe, 0x35, 0x1d, 0x4c, 0xd9, 0x4e, - 0x07, 0x39, 0x8b, 0xfb, 0x84, 0xa7, 0xfe, 0x65, 0x67, 0xd6, 0x26, 0x07, 0x15, 0xb1, 0xc0, 0xc8, - 0x2f, 0x34, 0xe8, 0xf7, 0xba, 0x4f, 0xe8, 0xec, 0x2d, 0x60, 0x8a, 0xa5, 0x69, 0xb3, 0xa0, 0xd0, - 0xd0, 0x97, 0x2a, 0xfa, 0x66, 0x75, 0xa9, 0x78, 0x4c, 0xbb, 0x0a, 0x1c, 0xaf, 0xb6, 0x2a, 0x7a, - 0xa9, 0x55, 0x6d, 0xd4, 0x37, 0x49, 0x7a, 0x31, 0x03, 0x9f, 0x97, 0x95, 0xf5, 0xec, 0x8d, 0x67, - 0x66, 0x10, 0xac, 0x3a, 0x98, 0x6a, 0xd3, 0x0c, 0x64, 0x08, 0x9d, 0x49, 0x54, 0x3b, 0x46, 0x90, - 0x26, 0xe8, 0x3e, 0x21, 0xed, 0x0c, 0x00, 0x57, 0x1c, 0xdb, 0xda, 0x0e, 0xcf, 0xb4, 0x15, 0x74, - 0x2e, 0x05, 0x3e, 0x27, 0x03, 0xf2, 0xf4, 0x1b, 0x72, 0xb3, 0x09, 0xf9, 0x17, 0x0a, 0xde, 0x7f, - 0xc6, 0x16, 0x2f, 0x91, 0x57, 0x38, 0xd1, 0x62, 0x8f, 0x58, 0x17, 0xa9, 0x0c, 0xa8, 0x25, 0xcc, - 0xaa, 0x72, 0x2b, 0xc8, 0xd3, 0x6f, 0x99, 0xd7, 0x41, 0x74, 0x94, 0x52, 0x9a, 0x4d, 0xd2, 0x4f, - 0x59, 0x5e, 0xa6, 0xe9, 0x6b, 0xf3, 0x47, 0x15, 0x50, 0xa8, 0x23, 0xaf, 0xbc, 0x83, 0xda, 0x97, - 0xe0, 0x23, 0xc4, 0x05, 0xd0, 0xae, 0x89, 0x2c, 0xef, 0xc2, 0x6e, 0x37, 0x58, 0x00, 0xf5, 0x13, - 0xe0, 0xf3, 0xf9, 0xce, 0xf7, 0x29, 0xa2, 0xfe, 0xdc, 0x3c, 0xa0, 0xae, 0x7e, 0x09, 0x11, 0x2a, - 0x73, 0x0a, 0xe4, 0x1d, 0xe4, 0xee, 0x75, 0xfd, 0x45, 0x34, 0xf6, 0x04, 0x5f, 0x1b, 0x88, 0xb3, - 0x2c, 0x88, 0xf3, 0x56, 0xf9, 0x22, 0x26, 0x10, 0xf6, 0x34, 0x0b, 0xa6, 0xaa, 0x96, 0xe9, 0x99, - 0x46, 0x17, 0xbe, 0x20, 0x0b, 0xe6, 0x9a, 0xc8, 0x5b, 0x37, 0x1c, 0x63, 0x17, 0x79, 0xc8, 0x71, - 0xe1, 0xb7, 0xc5, 0x3e, 0xa1, 0xd7, 0x35, 0xbc, 0x2d, 0xdb, 0xd9, 0xf5, 0x55, 0xd3, 0x7f, 0xc6, - 0xaa, 0x79, 0x19, 0x39, 0x6e, 0xc8, 0x97, 0xff, 0x88, 0xdf, 0x5c, 0xb1, 0x9d, 0x4b, 0x78, 0x10, - 0x64, 0xd3, 0x34, 0xf6, 0x88, 0xe9, 0x75, 0xed, 0xed, 0x1a, 0xba, 0x8c, 0xfc, 0xa8, 0x6a, 0xc1, - 0x33, 0x9e, 0x0b, 0x74, 0xec, 0xba, 0xed, 0xe1, 0x4e, 0xbb, 0x66, 0x6f, 0xd3, 0xb0, 0xb3, 0x05, - 0x5d, 0x4c, 0x0c, 0x73, 0x19, 0x97, 0x11, 0xc9, 0x95, 0xe7, 0x73, 0xb1, 0x44, 0x6d, 0x01, 0x68, - 0xc1, 0x67, 0x2d, 0xd4, 0x45, 0xbb, 0xc8, 0x73, 0xf6, 0xc9, 0xed, 0x12, 0x05, 0x7d, 0xc0, 0x1b, - 0x36, 0x40, 0xcb, 0x4f, 0xd6, 0x99, 0xf4, 0x16, 0x04, 0xc9, 0x1d, 0x6a, 0xb2, 0x2e, 0x43, 0x71, - 0x22, 0xb7, 0x67, 0xa9, 0xd8, 0x9a, 0x79, 0xb9, 0x0a, 0xb2, 0x64, 0xf0, 0x7c, 0x73, 0x46, 0x58, - 0x61, 0xda, 0x45, 0xae, 0x6b, 0x6c, 0x23, 0x7f, 0x85, 0x89, 0x3d, 0x6a, 0xb7, 0x83, 0x5c, 0x97, - 0x60, 0x4a, 0x07, 0x87, 0x87, 0x09, 0x35, 0xc3, 0x06, 0x06, 0xa6, 0x15, 0x8c, 0x04, 0x04, 0x6e, - 0x9d, 0x7e, 0x71, 0xf6, 0x6e, 0x90, 0xa3, 0xf0, 0x4f, 0x83, 0xdc, 0x52, 0x65, 0x71, 0x63, 0xa5, - 0x78, 0x0c, 0xff, 0xf5, 0xf9, 0x9b, 0x06, 0xb9, 0xe5, 0x52, 0xab, 0x54, 0x2b, 0x2a, 0xb8, 0x1e, - 0xd5, 0xfa, 0x72, 0xa3, 0xa8, 0xe2, 0xc4, 0xf5, 0x52, 0xbd, 0x5a, 0x2e, 0x66, 0xb5, 0x19, 0x30, - 0x75, 0xbe, 0xa4, 0xd7, 0xab, 0xf5, 0x95, 0x62, 0x0e, 0xfe, 0x15, 0x8f, 0xdf, 0x1d, 0x22, 0x7e, - 0x37, 0x44, 0xf1, 0x34, 0x08, 0xb2, 0x5f, 0x0c, 0x20, 0x7b, 0x92, 0x00, 0xd9, 0xf7, 0xc9, 0x10, - 0x99, 0x80, 0x3b, 0x53, 0x1e, 0x4c, 0xad, 0x3b, 0x76, 0x1b, 0xb9, 0x2e, 0x7c, 0xa9, 0x02, 0xf2, - 0x65, 0xc3, 0x6a, 0xa3, 0x2e, 0xbc, 0x26, 0x84, 0x8a, 0xba, 0x8a, 0x66, 0x7c, 0x57, 0x51, 0xf8, - 0xcd, 0x8c, 0x6c, 0xef, 0xc7, 0xe8, 0x2e, 0x50, 0x9a, 0x11, 0xf2, 0x91, 0xeb, 0xe5, 0x62, 0x49, - 0x4d, 0xe0, 0x86, 0x1d, 0x05, 0x4c, 0xb3, 0xd5, 0x80, 0x8b, 0x88, 0x9f, 0x87, 0x7f, 0x3b, 0x23, - 0x3b, 0x39, 0xf4, 0x6b, 0x10, 0x90, 0x89, 0x90, 0x87, 0xdc, 0x44, 0x70, 0x18, 0xb5, 0x09, 0x6c, - 0x1e, 0x2a, 0x60, 0x66, 0xc3, 0x72, 0x07, 0x09, 0x45, 0x3e, 0x1c, 0xbf, 0x5f, 0x0d, 0x8e, 0xd0, - 0xa1, 0xc2, 0xf1, 0x0f, 0xa7, 0x97, 0xbe, 0x60, 0xbe, 0x9d, 0x01, 0x27, 0x57, 0x90, 0x85, 0x1c, - 0xb3, 0x4d, 0x6b, 0xe0, 0x4b, 0xe2, 0x49, 0xa2, 0x24, 0x1e, 0x21, 0x70, 0x3e, 0xe8, 0x0b, 0x51, - 0x02, 0xaf, 0x0a, 0x24, 0xf0, 0x14, 0x41, 0x02, 0xb7, 0x48, 0xd2, 0x99, 0xc0, 0xb5, 0xea, 0xd3, - 0x60, 0xb6, 0x6e, 0x7b, 0xe6, 0x96, 0xd9, 0xa6, 0x3e, 0x68, 0xbf, 0xa0, 0x82, 0x6c, 0xcd, 0x74, - 0x3d, 0x58, 0x0a, 0xbb, 0x93, 0xeb, 0xc1, 0x8c, 0x69, 0xb5, 0xbb, 0x7b, 0x1d, 0xa4, 0x23, 0x83, - 0xf6, 0x2b, 0x05, 0x9d, 0x4f, 0x0a, 0xb7, 0xf6, 0x31, 0x5b, 0xaa, 0xbf, 0xb5, 0xff, 0x7b, 0xd2, - 0xcb, 0x30, 0x3c, 0x0b, 0x24, 0x2e, 0x65, 0x84, 0xdd, 0x55, 0x02, 0x73, 0x16, 0x97, 0xd5, 0x37, - 0xd8, 0xfb, 0xef, 0x25, 0xe0, 0xc9, 0xe9, 0xe2, 0x17, 0xf0, 0x03, 0x52, 0x8d, 0x75, 0x18, 0x43, - 0xc9, 0x90, 0x59, 0x1e, 0x61, 0x92, 0xac, 0x81, 0xf9, 0x6a, 0xbd, 0x55, 0xd1, 0xeb, 0xa5, 0x1a, - 0xcb, 0xa2, 0xc2, 0x7f, 0x53, 0x40, 0x4e, 0x47, 0xbd, 0xee, 0x3e, 0x1f, 0x78, 0x9a, 0x39, 0x8a, - 0x67, 0x02, 0x47, 0x71, 0x6d, 0x19, 0x00, 0xa3, 0x8d, 0x0b, 0x26, 0x37, 0x73, 0x29, 0x03, 0xc3, - 0x99, 0x0a, 0x15, 0x2c, 0x05, 0xb9, 0x75, 0xee, 0x4b, 0xf8, 0x42, 0xe9, 0x9d, 0x23, 0x81, 0x1a, - 0xe1, 0x30, 0xa2, 0x4f, 0xf8, 0xa0, 0xd4, 0x66, 0xcf, 0x50, 0x72, 0x47, 0x23, 0xfe, 0xaf, 0x2a, - 0x20, 0xdb, 0xc2, 0xbd, 0x25, 0xd7, 0x71, 0xfe, 0xce, 0x68, 0x3a, 0x8e, 0xc9, 0x44, 0xe8, 0xf8, - 0x5d, 0x60, 0x96, 0xd7, 0x58, 0xe6, 0x2a, 0x11, 0xab, 0xe2, 0xc2, 0x07, 0xa3, 0x68, 0xf8, 0x00, - 0x76, 0x8e, 0x46, 0xc4, 0x9f, 0x7e, 0x24, 0x00, 0x6b, 0x68, 0xf7, 0x22, 0x72, 0xdc, 0x1d, 0xb3, - 0x07, 0xff, 0x5a, 0x05, 0xd3, 0x2b, 0xc8, 0x6b, 0x7a, 0x86, 0xb7, 0xe7, 0xf6, 0x6d, 0x77, 0x5a, - 0x76, 0xd9, 0x68, 0xef, 0x20, 0xd6, 0x1d, 0xf9, 0x8f, 0xf0, 0x3d, 0xaa, 0xac, 0x3f, 0x51, 0x58, - 0xce, 0x42, 0x50, 0x46, 0x04, 0x26, 0x8f, 0x02, 0xd9, 0x8e, 0xe1, 0x19, 0x0c, 0x8b, 0x6b, 0xfa, - 0xb0, 0x08, 0x09, 0xe9, 0x24, 0x1b, 0x7c, 0x87, 0x22, 0xe3, 0x50, 0x24, 0x51, 0x7e, 0x32, 0x10, - 0x3e, 0x90, 0x19, 0x01, 0x85, 0x13, 0x60, 0xae, 0xde, 0x68, 0x6d, 0xd6, 0x1a, 0x2b, 0x2b, 0x15, - 0x9c, 0x5a, 0x54, 0xb5, 0x53, 0x40, 0x5b, 0x2f, 0x5d, 0x58, 0xab, 0xd4, 0x5b, 0x9b, 0xf5, 0xc6, - 0x52, 0x85, 0x7d, 0x99, 0xd5, 0x8e, 0x83, 0x99, 0x72, 0xa9, 0xbc, 0xea, 0x27, 0xe4, 0xb4, 0xd3, - 0xe0, 0xe4, 0x5a, 0x65, 0x6d, 0xb1, 0xa2, 0x37, 0x57, 0xab, 0xeb, 0x9b, 0x98, 0xcc, 0x72, 0x63, - 0xa3, 0xbe, 0x54, 0xcc, 0x6b, 0x10, 0x9c, 0xe2, 0xde, 0x9c, 0xd7, 0x1b, 0xf5, 0x95, 0xcd, 0x66, - 0xab, 0xd4, 0xaa, 0x14, 0xa7, 0xb4, 0xab, 0xc0, 0xf1, 0x72, 0xa9, 0x4e, 0xb2, 0x97, 0x1b, 0xf5, - 0x7a, 0xa5, 0xdc, 0x2a, 0x16, 0xe0, 0x7f, 0x64, 0xc1, 0x4c, 0xd5, 0xad, 0x1b, 0xbb, 0xe8, 0x9c, - 0xd1, 0x35, 0x3b, 0xf0, 0x05, 0xdc, 0xcc, 0xe3, 0x06, 0x30, 0xe7, 0xd0, 0xbf, 0xa8, 0xd3, 0x32, - 0x11, 0x45, 0x73, 0x4e, 0x17, 0x13, 0xf1, 0x9c, 0xdc, 0x22, 0x04, 0xfc, 0x39, 0x39, 0x7d, 0xd2, - 0x16, 0x01, 0xa0, 0xff, 0x5a, 0xe1, 0x1d, 0xb1, 0x67, 0xfb, 0x5b, 0x93, 0xb1, 0x8b, 0x5c, 0xe4, - 0x5c, 0x36, 0xdb, 0xc8, 0xcf, 0xa9, 0x73, 0x5f, 0xc1, 0xaf, 0xa9, 0xb2, 0xfb, 0x8b, 0x1c, 0xa8, - 0x5c, 0x75, 0x22, 0x7a, 0xc3, 0x1f, 0x57, 0x65, 0x76, 0x07, 0xa5, 0x48, 0x26, 0xd3, 0x94, 0x17, - 0x2b, 0xa3, 0x2d, 0xdb, 0xb6, 0x1a, 0x8d, 0xcd, 0xe6, 0x6a, 0x43, 0x6f, 0x15, 0x55, 0x6d, 0x16, - 0x14, 0xf0, 0x63, 0xad, 0x51, 0x5f, 0x29, 0x66, 0xb5, 0xab, 0xc1, 0x89, 0xd5, 0x52, 0x73, 0xb3, - 0x5a, 0x3f, 0x57, 0xaa, 0x55, 0x97, 0x36, 0xcb, 0xab, 0x25, 0xbd, 0x59, 0xcc, 0x69, 0xd7, 0x80, - 0xab, 0x5b, 0xd5, 0x8a, 0xbe, 0xb9, 0x5c, 0x29, 0xb5, 0x36, 0xf4, 0x4a, 0x73, 0xb3, 0xde, 0xd8, - 0xac, 0x97, 0xd6, 0x2a, 0xc5, 0x3c, 0x6e, 0xfe, 0xe4, 0x55, 0xa8, 0x36, 0x53, 0x07, 0x95, 0xb1, - 0x10, 0xa1, 0x8c, 0xd3, 0xfd, 0xca, 0x08, 0x78, 0xb5, 0xd2, 0x2b, 0xcd, 0x8a, 0x7e, 0xae, 0x52, - 0x9c, 0x19, 0xa4, 0x6b, 0xb3, 0xda, 0x49, 0x50, 0xc4, 0x3c, 0x6c, 0x56, 0x9b, 0x7e, 0xce, 0xa5, - 0xe2, 0x1c, 0xfc, 0x54, 0x1e, 0x9c, 0xd2, 0xd1, 0xb6, 0xe9, 0x7a, 0xc8, 0x59, 0x37, 0xf6, 0x77, - 0x91, 0xe5, 0xf9, 0x9d, 0xfc, 0x3f, 0x27, 0x56, 0xc6, 0x35, 0x30, 0xd7, 0xa3, 0x34, 0xd6, 0x90, - 0xb7, 0x63, 0x77, 0xd8, 0x28, 0xfc, 0x88, 0xc8, 0x9e, 0x63, 0x61, 0x9d, 0xcf, 0xae, 0x8b, 0x5f, - 0x73, 0xba, 0xad, 0xc6, 0xe8, 0x76, 0x76, 0x14, 0xdd, 0xd6, 0xae, 0x03, 0xd3, 0x7b, 0x2e, 0x72, - 0x2a, 0xbb, 0x86, 0xd9, 0xf5, 0xef, 0xf8, 0x0c, 0x12, 0xe0, 0x3b, 0xb3, 0xb2, 0x27, 0x56, 0xb8, - 0xba, 0x0c, 0x16, 0x63, 0x44, 0xdf, 0x7a, 0x06, 0x00, 0x56, 0xd9, 0x0d, 0xa7, 0xcb, 0x94, 0x95, - 0x4b, 0xc1, 0xfc, 0x5d, 0x34, 0xbb, 0x5d, 0xd3, 0xda, 0x0e, 0xf6, 0xfd, 0xc3, 0x04, 0xf8, 0x62, - 0x55, 0xe6, 0x04, 0x4b, 0x52, 0xde, 0x92, 0xb5, 0xa6, 0x17, 0x2a, 0x13, 0xee, 0x77, 0x0f, 0x36, - 0x9d, 0xbc, 0x56, 0x04, 0xb3, 0x24, 0x8d, 0xb5, 0xc0, 0xe2, 0x14, 0xee, 0x83, 0x7d, 0x72, 0x6b, - 0x95, 0xd6, 0x6a, 0x63, 0x29, 0x78, 0x57, 0xc0, 0x24, 0x31, 0x33, 0xa5, 0xfa, 0x05, 0xd2, 0x1a, - 0xa7, 0xb5, 0x07, 0x83, 0x6b, 0xb8, 0x0e, 0xbb, 0x54, 0xd3, 0x2b, 0xa5, 0xa5, 0x0b, 0x9b, 0x95, - 0xa7, 0x55, 0x9b, 0xad, 0xa6, 0xd8, 0xb8, 0xfc, 0x76, 0x34, 0x83, 0xf9, 0xad, 0xac, 0x95, 0xaa, - 0x35, 0xd6, 0xbf, 0x2f, 0x37, 0xf4, 0xb5, 0x52, 0xab, 0x38, 0x0b, 0x5f, 0xae, 0x82, 0xe2, 0x0a, - 0xf2, 0xd6, 0x6d, 0xc7, 0x33, 0xba, 0x35, 0xd3, 0xba, 0xb4, 0xe1, 0x74, 0x85, 0xc9, 0xa6, 0x74, - 0x98, 0x0e, 0x71, 0x88, 0x14, 0x08, 0x46, 0xef, 0x88, 0xf7, 0x48, 0xb6, 0x50, 0x99, 0xc2, 0x04, - 0xf8, 0x2c, 0x45, 0x66, 0xb9, 0x5b, 0xbe, 0xd4, 0x64, 0x7a, 0xf2, 0xec, 0x49, 0x8f, 0xcf, 0x03, - 0x50, 0xcb, 0xc3, 0xfb, 0xb3, 0xa0, 0xb0, 0x6c, 0x5a, 0x46, 0xd7, 0x7c, 0xa6, 0x10, 0x1d, 0x33, - 0xec, 0x63, 0x32, 0x31, 0x7d, 0x8c, 0x32, 0xd2, 0xf8, 0xf9, 0xb3, 0xaa, 0xec, 0xf2, 0x02, 0x27, - 0x7b, 0x9f, 0xc9, 0x88, 0xc1, 0xf3, 0x63, 0x8a, 0xcc, 0xf2, 0xc2, 0x70, 0x7a, 0xc9, 0x30, 0xfc, - 0xcc, 0xf7, 0x86, 0x8d, 0xd5, 0xd7, 0xbe, 0x0b, 0x83, 0x54, 0x61, 0x1a, 0xfe, 0x91, 0x0a, 0xe0, - 0x0a, 0xf2, 0xce, 0x21, 0x27, 0x98, 0x0a, 0x90, 0x5e, 0x9f, 0xd9, 0xdb, 0x5c, 0x93, 0x7d, 0x33, - 0x0f, 0xe0, 0x79, 0x11, 0xc0, 0x52, 0x4c, 0xe3, 0x89, 0x20, 0x1d, 0xd1, 0x78, 0xab, 0x20, 0xef, - 0x92, 0xf7, 0x4c, 0xcd, 0x1e, 0x13, 0x3d, 0x5c, 0x12, 0x62, 0x3c, 0x75, 0x4a, 0x58, 0x67, 0x04, - 0xe0, 0x77, 0x82, 0x49, 0xd0, 0x0f, 0x0a, 0xda, 0xb1, 0x7c, 0x68, 0x66, 0x93, 0xe9, 0x8b, 0x93, - 0xae, 0xba, 0x0c, 0xb2, 0x6f, 0xe0, 0xc7, 0x72, 0xe0, 0xe4, 0xa0, 0xea, 0xc0, 0x0f, 0x65, 0x84, - 0x1d, 0x76, 0x44, 0x86, 0xfc, 0x0c, 0xdb, 0x40, 0xc4, 0x0f, 0xda, 0xe3, 0xc0, 0xd5, 0xc1, 0x32, - 0x5c, 0xcb, 0xae, 0xa3, 0x2b, 0x6e, 0x17, 0x79, 0x1e, 0x72, 0x48, 0xd5, 0x0a, 0xfa, 0xe0, 0x97, - 0xda, 0x13, 0xc0, 0x83, 0x4c, 0xcb, 0x35, 0x3b, 0xc8, 0x69, 0x99, 0x3d, 0xb7, 0x64, 0x75, 0x5a, - 0x7b, 0x9e, 0xed, 0x98, 0x06, 0xbb, 0x91, 0xb2, 0xa0, 0x47, 0xbd, 0xd6, 0x6e, 0x06, 0x45, 0xd3, - 0x6d, 0x58, 0x17, 0x6d, 0xc3, 0xe9, 0x98, 0xd6, 0x76, 0xcd, 0x74, 0x3d, 0xe6, 0x01, 0x7c, 0x20, - 0x1d, 0xfe, 0x8d, 0x2a, 0x7b, 0x98, 0x6e, 0x08, 0xac, 0x11, 0x1d, 0xca, 0xf3, 0x55, 0x99, 0xe3, - 0x71, 0xc9, 0x68, 0x27, 0x53, 0x96, 0xe7, 0x4d, 0xda, 0x90, 0x18, 0x3c, 0x82, 0x93, 0xae, 0x85, - 0xa6, 0xfb, 0x86, 0xc0, 0xb9, 0x8a, 0x5e, 0x5d, 0xae, 0x56, 0xb0, 0x59, 0x71, 0x35, 0x38, 0x11, - 0xbe, 0x5b, 0xba, 0xb0, 0xd9, 0xac, 0xd4, 0x5b, 0xc5, 0x02, 0xee, 0xa7, 0x68, 0xf2, 0x72, 0xa9, - 0x5a, 0xab, 0x2c, 0x6d, 0xb6, 0x1a, 0xf8, 0xcd, 0xd2, 0x68, 0xa6, 0x05, 0x7c, 0x4e, 0x16, 0x1c, - 0x27, 0xb2, 0xdd, 0x27, 0x52, 0xc5, 0x42, 0xe9, 0xf3, 0xb5, 0x0d, 0x00, 0x9a, 0xa6, 0xe2, 0x85, - 0x7f, 0x28, 0x7d, 0xe1, 0x26, 0x07, 0x61, 0x5f, 0x19, 0x11, 0x9a, 0xf1, 0x6d, 0x45, 0x26, 0x42, - 0x85, 0x34, 0xd9, 0x64, 0x4a, 0xf1, 0x2f, 0x93, 0x1e, 0x71, 0xa2, 0xc1, 0x27, 0x56, 0x66, 0x99, - 0x7c, 0xfc, 0xb4, 0xf5, 0xaa, 0x4e, 0xd4, 0x61, 0x1e, 0x00, 0x92, 0x42, 0x34, 0x88, 0xea, 0xc1, - 0xc0, 0xf1, 0x2a, 0x4a, 0x0f, 0x4a, 0xe5, 0x56, 0xf5, 0x5c, 0x25, 0x4a, 0x0f, 0x3e, 0xab, 0x82, - 0xc2, 0x0a, 0xf2, 0xf0, 0x9c, 0xca, 0x85, 0x4f, 0x94, 0x58, 0xff, 0xc1, 0x66, 0x4c, 0xd7, 0x6e, - 0x1b, 0xdd, 0x60, 0x19, 0x80, 0x3e, 0xc1, 0xe7, 0x8e, 0x62, 0x82, 0xf8, 0x45, 0x47, 0x8c, 0x57, - 0x3f, 0x00, 0x72, 0x1e, 0x7e, 0xcd, 0x96, 0xa1, 0x1f, 0x1a, 0x39, 0x5c, 0x61, 0x22, 0x4b, 0x86, - 0x67, 0xe8, 0x34, 0x3f, 0x37, 0x3a, 0x49, 0xda, 0x2e, 0x11, 0x8c, 0x7c, 0x2f, 0xda, 0x9f, 0x7f, - 0xa5, 0x82, 0xab, 0x69, 0xfb, 0x28, 0xf5, 0x7a, 0x4d, 0xcf, 0x76, 0x90, 0x8e, 0xda, 0xc8, 0xec, - 0x79, 0x7d, 0xeb, 0x7b, 0x0e, 0x4d, 0xf5, 0x37, 0x9b, 0xd9, 0x23, 0x7c, 0x83, 0x2a, 0x1b, 0xe1, - 0xf7, 0x40, 0x7b, 0xec, 0x2b, 0x2f, 0xa2, 0xb1, 0x7f, 0x52, 0x91, 0x89, 0xd9, 0x9b, 0x90, 0x78, - 0x32, 0xa0, 0x3e, 0x7e, 0x04, 0x40, 0xf9, 0x2b, 0x37, 0x7a, 0xa5, 0x5c, 0xa9, 0xae, 0xe3, 0x41, - 0xe0, 0x21, 0xe0, 0xda, 0xf5, 0x0d, 0xbd, 0xbc, 0x5a, 0x6a, 0x56, 0x36, 0xf5, 0xca, 0x4a, 0xb5, - 0xd9, 0x62, 0x4e, 0x59, 0xf4, 0xab, 0x29, 0xed, 0x3a, 0x70, 0xba, 0xb9, 0xb1, 0xd8, 0x2c, 0xeb, - 0xd5, 0x75, 0x92, 0xae, 0x57, 0xea, 0x95, 0xf3, 0xec, 0x6d, 0x01, 0x7e, 0xa4, 0x08, 0x66, 0xf0, - 0x04, 0xa0, 0x49, 0xe7, 0x05, 0xf0, 0x6f, 0xb3, 0x60, 0x46, 0x47, 0xae, 0xdd, 0xbd, 0x4c, 0xe6, - 0x08, 0x93, 0x9a, 0x7a, 0x7c, 0x4b, 0x95, 0x3d, 0xbf, 0xcd, 0x31, 0xbb, 0xc0, 0x31, 0x1a, 0x3d, - 0xd1, 0x34, 0x2e, 0x1b, 0x66, 0xd7, 0xb8, 0xc8, 0xba, 0x9a, 0x82, 0x1e, 0x26, 0x68, 0x0b, 0x40, - 0xb3, 0xaf, 0x58, 0xc8, 0x69, 0xb6, 0xaf, 0x54, 0xbc, 0x9d, 0x52, 0xa7, 0xe3, 0x20, 0xd7, 0x65, - 0xab, 0x17, 0x03, 0xde, 0x68, 0x37, 0x81, 0xe3, 0x24, 0x95, 0xcb, 0x4c, 0x1d, 0x64, 0xfa, 0x93, - 0x83, 0x9c, 0x25, 0x6b, 0xdf, 0xcf, 0x99, 0xe3, 0x72, 0x86, 0xc9, 0xfc, 0x71, 0x89, 0xbc, 0x78, - 0x4a, 0xe7, 0x7a, 0x30, 0x63, 0x19, 0xbb, 0xa8, 0x72, 0x5f, 0xcf, 0x74, 0x90, 0x4b, 0x1c, 0x63, - 0x54, 0x9d, 0x4f, 0x82, 0x1f, 0x93, 0x3a, 0x6f, 0x2e, 0x27, 0xb1, 0x64, 0xba, 0xbf, 0x32, 0x82, - 0xea, 0x0f, 0xe8, 0x67, 0x54, 0xf8, 0x11, 0x15, 0xcc, 0x32, 0xa6, 0x4a, 0xd6, 0x7e, 0xb5, 0x03, - 0x1f, 0x22, 0x18, 0xbf, 0x06, 0x4e, 0xf3, 0x8d, 0x5f, 0xf2, 0x00, 0x7f, 0x42, 0x95, 0x75, 0x77, - 0x1e, 0x50, 0x71, 0x52, 0x46, 0xb4, 0xe3, 0xe8, 0x96, 0xbd, 0xc7, 0x1c, 0x55, 0x0b, 0x3a, 0x7d, - 0x48, 0x73, 0x51, 0x0f, 0xfe, 0xba, 0x94, 0x33, 0xb5, 0x64, 0x35, 0x8e, 0x08, 0xc0, 0x4f, 0xab, - 0x60, 0x9e, 0x71, 0xd5, 0x64, 0xe7, 0x7c, 0xa4, 0x0e, 0xbc, 0xfd, 0x94, 0xb4, 0x21, 0x38, 0xa0, - 0xfe, 0xac, 0xa4, 0x07, 0x0c, 0x90, 0xbf, 0x21, 0x15, 0x1c, 0x4d, 0xba, 0x22, 0x47, 0x04, 0xe5, - 0xbb, 0xb2, 0x60, 0x66, 0xc3, 0x45, 0x0e, 0xf3, 0xdb, 0x87, 0xaf, 0xcd, 0x02, 0x75, 0x05, 0x09, - 0x1b, 0xa9, 0x2f, 0x92, 0xf6, 0xf0, 0xe5, 0x2b, 0xcb, 0x11, 0xc5, 0x36, 0x52, 0x04, 0x6c, 0x37, - 0x82, 0x79, 0x2a, 0xd2, 0x92, 0xe7, 0x61, 0x23, 0xd1, 0xf7, 0xa6, 0xed, 0x4b, 0x1d, 0xc7, 0x56, - 0x11, 0x29, 0x0b, 0x67, 0x29, 0x63, 0x9e, 0x6a, 0x68, 0x8b, 0xce, 0x67, 0xb3, 0x7a, 0x5f, 0xaa, - 0xf6, 0x68, 0x70, 0x95, 0xdd, 0x43, 0xf4, 0xfc, 0x0a, 0x97, 0x39, 0x47, 0x32, 0x0f, 0x7a, 0x05, - 0xff, 0x56, 0xca, 0x57, 0x57, 0x5e, 0x3a, 0xc9, 0x74, 0xa1, 0x37, 0x1e, 0x93, 0xe4, 0x24, 0x28, - 0xe2, 0x1c, 0x64, 0xff, 0x45, 0xaf, 0x34, 0x1b, 0xb5, 0x73, 0x95, 0xc1, 0xcb, 0x18, 0x39, 0xf8, - 0x3c, 0x15, 0x4c, 0x2f, 0x3a, 0xb6, 0xd1, 0x69, 0x1b, 0xae, 0x07, 0xbf, 0xa3, 0x80, 0xd9, 0x75, - 0x63, 0xbf, 0x6b, 0x1b, 0x1d, 0xe2, 0xdf, 0xdf, 0xd7, 0x17, 0xf4, 0xe8, 0x2b, 0xbf, 0x2f, 0x60, - 0x8f, 0xe2, 0xc1, 0xc0, 0xe0, 0xe8, 0x5e, 0x46, 0xe6, 0x5e, 0xcd, 0x60, 0x9b, 0x4f, 0x19, 0x14, - 0xac, 0xd4, 0xe7, 0x6b, 0x81, 0xe7, 0x29, 0xc2, 0xa2, 0xfc, 0x88, 0x5c, 0xf8, 0x51, 0x19, 0x92, - 0x47, 0xb3, 0x2b, 0x7f, 0x7f, 0x01, 0xe4, 0x97, 0x10, 0xb1, 0xe2, 0x7e, 0x55, 0x01, 0x53, 0x4d, - 0xe4, 0x11, 0x0b, 0xee, 0x76, 0xc1, 0x53, 0xb8, 0x43, 0x32, 0x84, 0x4e, 0xec, 0xfe, 0x33, 0x9e, - 0xac, 0x73, 0xe7, 0xad, 0xc9, 0xff, 0x04, 0x1e, 0x89, 0xb4, 0xdc, 0x05, 0x56, 0xe6, 0xa1, 0x3c, - 0x12, 0x63, 0x49, 0xa5, 0xef, 0x6b, 0xf5, 0x1e, 0x85, 0xb9, 0x56, 0x71, 0xbd, 0xde, 0xab, 0x79, - 0xfd, 0x8c, 0xf5, 0x36, 0x63, 0xcc, 0xc7, 0x38, 0x47, 0x3d, 0x16, 0x4c, 0x51, 0x99, 0xfb, 0xf3, - 0xd1, 0x7e, 0x3f, 0x05, 0x4a, 0x82, 0x9c, 0xbd, 0xf6, 0x73, 0x4a, 0xba, 0xa8, 0x45, 0x17, 0x3e, - 0x91, 0x18, 0x04, 0xb3, 0x75, 0xe4, 0x5d, 0xb1, 0x9d, 0x4b, 0x4d, 0xcf, 0xf0, 0x10, 0xfc, 0x17, - 0x85, 0x5e, 0x97, 0xc7, 0x45, 0x3f, 0xa9, 0x83, 0x13, 0xb4, 0x42, 0x2c, 0x23, 0xe9, 0xbf, 0x69, - 0x45, 0xae, 0x1f, 0x28, 0x04, 0x2e, 0x9f, 0x7e, 0xf0, 0x53, 0xf8, 0xd2, 0x81, 0x41, 0x9f, 0x94, - 0x01, 0x93, 0x06, 0x26, 0x19, 0x9e, 0xc1, 0xe8, 0xfb, 0xf1, 0xe0, 0x47, 0xa5, 0xcc, 0x6a, 0x39, - 0x9a, 0x47, 0xd3, 0x15, 0x7c, 0xf8, 0x91, 0x20, 0x5b, 0xde, 0x31, 0x3c, 0xf8, 0x6e, 0x15, 0x80, - 0x52, 0xa7, 0xb3, 0x46, 0x7d, 0xc0, 0x79, 0x87, 0xb4, 0xb3, 0x60, 0xb6, 0xbd, 0x63, 0x84, 0x37, - 0x67, 0xd0, 0xfe, 0x40, 0x48, 0xd3, 0x1e, 0x17, 0x3a, 0x93, 0x53, 0xa9, 0xc2, 0x3e, 0x98, 0x70, - 0x19, 0x8c, 0x76, 0xe0, 0x68, 0x2e, 0x86, 0xc2, 0x8c, 0x3d, 0x42, 0x87, 0x3f, 0x5f, 0x08, 0xd9, - 0x8b, 0x9e, 0xc3, 0x31, 0xd2, 0xc1, 0x01, 0x9b, 0x30, 0x21, 0xe1, 0x49, 0x6f, 0xb9, 0x80, 0x1e, - 0xf1, 0x7c, 0x4d, 0x24, 0x74, 0xad, 0x56, 0xe9, 0x98, 0xbe, 0x68, 0x59, 0xc0, 0x2c, 0xf8, 0xc2, - 0x4c, 0x32, 0xf8, 0xe2, 0x05, 0xf7, 0x14, 0x30, 0x87, 0x3a, 0xa6, 0x87, 0xfc, 0x5a, 0x32, 0x01, - 0xc6, 0x41, 0x2c, 0x7e, 0x00, 0x9f, 0x2d, 0x1d, 0x74, 0x8d, 0x08, 0xf4, 0x60, 0x8d, 0x22, 0xda, - 0x9f, 0x5c, 0x18, 0x35, 0x39, 0x9a, 0xe9, 0x83, 0xf5, 0x5c, 0x15, 0x5c, 0xdd, 0xb2, 0xb7, 0xb7, - 0xbb, 0xc8, 0x17, 0x13, 0xa2, 0xde, 0x99, 0xd0, 0x18, 0x27, 0x5c, 0x64, 0x27, 0xc8, 0xbe, 0xd7, - 0x0c, 0x8e, 0x92, 0xe1, 0x07, 0xf1, 0xc4, 0x54, 0xec, 0x2c, 0x8a, 0x88, 0x6b, 0x20, 0x9f, 0x11, - 0x28, 0xc8, 0x05, 0x7c, 0x96, 0x26, 0x9b, 0x3e, 0x10, 0x5f, 0x50, 0xc0, 0x1c, 0xbd, 0x17, 0xd1, - 0x57, 0xd0, 0x7b, 0xc6, 0x08, 0x00, 0xfc, 0x4e, 0x46, 0xd6, 0xcf, 0x96, 0xc8, 0x44, 0xe0, 0x24, - 0x42, 0xc4, 0x72, 0x41, 0x55, 0x86, 0x92, 0x9b, 0xc0, 0x4d, 0x9d, 0x59, 0x30, 0xb3, 0x82, 0xfc, - 0x96, 0xe6, 0xc2, 0xf7, 0x27, 0xec, 0x89, 0xce, 0x82, 0x59, 0x72, 0x39, 0x58, 0x83, 0x1d, 0x93, - 0xa4, 0xab, 0x66, 0x42, 0x9a, 0x76, 0x03, 0x98, 0xbb, 0x88, 0xb6, 0x6c, 0x07, 0x35, 0x84, 0xb3, - 0x94, 0x62, 0xe2, 0xe0, 0xf0, 0x74, 0xda, 0x4d, 0xe0, 0x38, 0x73, 0x74, 0x5f, 0xc4, 0x73, 0x7d, - 0xc3, 0xd9, 0x67, 0x07, 0xd3, 0xfa, 0x93, 0xe1, 0x5f, 0xf1, 0x0d, 0x66, 0x51, 0x44, 0xf1, 0x96, - 0x83, 0x62, 0xe7, 0x2a, 0x1d, 0x31, 0x3a, 0x3d, 0x1e, 0x14, 0x98, 0x8e, 0xf8, 0x06, 0x5d, 0x5c, - 0x0f, 0x1a, 0xe4, 0xd5, 0x1e, 0x0f, 0xa6, 0xb1, 0x88, 0x88, 0xdd, 0xc0, 0xba, 0xde, 0xd3, 0x03, - 0x3e, 0x24, 0xef, 0xf5, 0x30, 0x2b, 0xfc, 0xa5, 0x40, 0x67, 0x2a, 0x82, 0xce, 0x3c, 0x26, 0x09, - 0xf3, 0x13, 0xb9, 0x48, 0xbe, 0xc8, 0x95, 0xbf, 0xb8, 0x5f, 0xed, 0xb8, 0x70, 0x2d, 0x99, 0xd6, - 0x9c, 0x01, 0x20, 0x68, 0x7e, 0x7e, 0xe0, 0x0c, 0x2e, 0x45, 0x8c, 0x8d, 0x1f, 0x7b, 0x14, 0xb0, - 0x5f, 0x1c, 0x84, 0x9d, 0xf1, 0x02, 0x2a, 0x79, 0x84, 0x50, 0x86, 0x93, 0xf4, 0xd1, 0xf9, 0xc5, - 0x2c, 0xb8, 0x3a, 0x38, 0xe1, 0x54, 0x33, 0xdc, 0xb0, 0x65, 0x5f, 0x48, 0x06, 0x91, 0x70, 0xa4, - 0x24, 0x68, 0x8e, 0x27, 0x41, 0xce, 0xdd, 0xbb, 0x18, 0x38, 0x02, 0xd2, 0x07, 0xf8, 0x46, 0x35, - 0xd1, 0x58, 0x35, 0x90, 0xbf, 0x31, 0x37, 0xc2, 0x5b, 0xc0, 0x09, 0x6b, 0x6f, 0x37, 0xc0, 0x82, - 0xf4, 0x34, 0xac, 0x67, 0x39, 0xf8, 0x42, 0x6c, 0xb2, 0x59, 0xf9, 0x26, 0x9b, 0x60, 0x24, 0x95, - 0xa9, 0x74, 0xfa, 0xea, 0xf1, 0x99, 0xbe, 0x23, 0x68, 0xe5, 0xc4, 0x4a, 0x41, 0xe1, 0x57, 0x78, - 0xf8, 0xff, 0x29, 0x93, 0xa8, 0xe7, 0x1d, 0x7e, 0x72, 0x2d, 0x41, 0x4f, 0x78, 0x94, 0xc7, 0xd6, - 0x5e, 0x97, 0x03, 0xb0, 0x19, 0x3a, 0xe4, 0x30, 0x50, 0xd7, 0x1d, 0x74, 0xd9, 0x44, 0x57, 0xdc, - 0xbe, 0xfd, 0x0e, 0x2a, 0xb7, 0x0c, 0x2f, 0xb7, 0xbf, 0xc8, 0xca, 0x3a, 0xd4, 0x88, 0x1a, 0x74, - 0xa0, 0xa8, 0x88, 0xb6, 0xf3, 0x74, 0x50, 0xe8, 0xb1, 0x1c, 0xac, 0xed, 0x94, 0x46, 0xa3, 0x8a, - 0x33, 0xb2, 0x54, 0x3d, 0x20, 0x09, 0xff, 0x2e, 0x03, 0x66, 0xb8, 0x37, 0xd1, 0x3b, 0x02, 0x07, - 0x54, 0x4b, 0x89, 0x9f, 0x91, 0xaa, 0xd2, 0x33, 0x52, 0x6d, 0x01, 0xe4, 0x5c, 0xa9, 0x46, 0x4b, - 0xb3, 0x69, 0x4f, 0x04, 0xb3, 0x1d, 0xd4, 0x43, 0x56, 0x07, 0x59, 0x6d, 0x13, 0xb9, 0xa7, 0x73, - 0x44, 0x2c, 0x91, 0x61, 0x1a, 0x84, 0xcc, 0x92, 0xf1, 0xbb, 0x93, 0x61, 0x95, 0xbe, 0x96, 0xfe, - 0x99, 0x02, 0xce, 0x70, 0xad, 0x64, 0xd9, 0xb1, 0x77, 0x13, 0x6b, 0xea, 0xcb, 0xf9, 0xf1, 0x78, - 0x43, 0xd4, 0xd4, 0xbb, 0x62, 0x1b, 0xe5, 0x80, 0xe2, 0x22, 0x1a, 0xfd, 0xfb, 0x03, 0xe9, 0x3e, - 0x4d, 0x90, 0xee, 0xd2, 0x21, 0xe9, 0x4f, 0xe0, 0x40, 0x78, 0x16, 0xcc, 0xea, 0xc8, 0xe8, 0x04, - 0x43, 0xed, 0x9f, 0x70, 0x46, 0xf4, 0x13, 0x41, 0xd6, 0x0b, 0x57, 0xc3, 0x1e, 0x71, 0xb0, 0x32, - 0xfc, 0x97, 0xe4, 0x81, 0x2c, 0x8a, 0x91, 0x8f, 0xa4, 0x1a, 0x4e, 0xbf, 0x05, 0xae, 0xca, 0x58, - 0xe0, 0xd9, 0x41, 0x16, 0xf8, 0xf5, 0x60, 0xa6, 0x6b, 0xb8, 0xb4, 0xc1, 0x04, 0x77, 0xff, 0xf2, - 0x49, 0xe2, 0x2d, 0xfb, 0xb1, 0xa7, 0xed, 0x06, 0x55, 0xed, 0xf0, 0x11, 0x89, 0x3f, 0x2c, 0x75, - 0xb4, 0x6e, 0x58, 0xd9, 0xc9, 0x34, 0xe2, 0xee, 0x11, 0x56, 0xee, 0x4e, 0x01, 0x6d, 0xad, 0xd2, - 0x6c, 0x96, 0x56, 0xc8, 0x89, 0x1b, 0xdf, 0x05, 0xab, 0x73, 0xf6, 0x46, 0x2c, 0x3e, 0x8a, 0xb0, - 0x36, 0x0b, 0x0a, 0x3e, 0x7f, 0xc5, 0x63, 0xf4, 0xc9, 0x22, 0x3b, 0x4e, 0xc5, 0x0c, 0xfc, 0xbc, - 0x0a, 0xf2, 0x1b, 0x96, 0x83, 0x8c, 0x0e, 0xbc, 0x9f, 0xd3, 0xa5, 0xef, 0x17, 0x74, 0xe9, 0xa1, - 0x83, 0x1a, 0x06, 0xfe, 0x26, 0x25, 0x2d, 0x12, 0xc3, 0x91, 0xc5, 0x2e, 0x96, 0x8b, 0xcc, 0x1c, - 0x1e, 0x77, 0xb9, 0x55, 0xf2, 0xe8, 0x52, 0x53, 0xef, 0x03, 0xa4, 0x91, 0xfd, 0x5d, 0x15, 0x14, - 0xd7, 0xf7, 0xdc, 0x1d, 0xe1, 0xd0, 0xf7, 0xaf, 0xaa, 0x60, 0xce, 0x3f, 0x17, 0xd3, 0xb2, 0x2f, - 0x21, 0x0b, 0x3e, 0x43, 0xe8, 0x91, 0x3d, 0x9c, 0xe6, 0xf7, 0xc8, 0xe4, 0x41, 0x5b, 0xe7, 0x42, - 0xc3, 0x28, 0x83, 0x8e, 0xf5, 0xf7, 0x95, 0xb1, 0x20, 0xd0, 0x5f, 0x58, 0x67, 0xdf, 0x86, 0x01, - 0x65, 0xe0, 0x8b, 0xa5, 0xef, 0x39, 0x1a, 0x42, 0x7b, 0x70, 0xf7, 0x2e, 0x77, 0x73, 0x51, 0x22, - 0xd2, 0xe9, 0xa3, 0x7a, 0x3d, 0x28, 0xf8, 0x92, 0xd2, 0xa6, 0x80, 0x5a, 0x6d, 0x34, 0x8b, 0xc7, - 0xb4, 0x19, 0x30, 0x55, 0xb2, 0x3a, 0x8e, 0x6d, 0x76, 0x8a, 0x99, 0xb3, 0x53, 0x20, 0x57, 0xd9, - 0xed, 0x79, 0xfb, 0x67, 0x1f, 0x0e, 0xe6, 0x9a, 0x9e, 0x83, 0x8c, 0xdd, 0x58, 0xdc, 0xee, 0xb8, - 0x1d, 0x4c, 0x59, 0xf6, 0xa6, 0xb1, 0xe7, 0xed, 0x68, 0x0f, 0x39, 0x60, 0x75, 0x30, 0xad, 0x69, - 0xb0, 0x68, 0x9c, 0x5f, 0xbb, 0x93, 0xac, 0x74, 0xe4, 0x2d, 0xbb, 0xb4, 0xe7, 0xed, 0x2c, 0x5e, - 0xf7, 0xe9, 0x3f, 0x3f, 0x93, 0xf9, 0xec, 0x9f, 0x9f, 0xc9, 0x7c, 0xf5, 0xcf, 0xcf, 0x64, 0x7e, - 0xea, 0x2f, 0xce, 0x1c, 0xfb, 0xec, 0x5f, 0x9c, 0x39, 0xf6, 0x85, 0xbf, 0x38, 0x73, 0xec, 0x07, - 0x95, 0xde, 0xc5, 0x8b, 0x79, 0x42, 0xe5, 0xb1, 0xff, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf5, - 0xf9, 0x4f, 0xc5, 0x9b, 0x3a, 0x02, 0x00, + 0xee, 0xda, 0xad, 0xae, 0x6a, 0xb2, 0xaa, 0x67, 0x18, 0xcf, 0xe1, 0xeb, 0x93, 0x53, 0x15, 0xdd, + 0x9d, 0x3b, 0xd5, 0x99, 0x45, 0x66, 0xf6, 0xcc, 0x36, 0xdf, 0x73, 0xbe, 0x23, 0x22, 0xb0, 0x88, + 0x88, 0xa8, 0x88, 0x88, 0xdc, 0x05, 0x04, 0xe4, 0x7e, 0x13, 0x90, 0x8b, 0x08, 0x82, 0x78, 0x43, + 0x51, 0xb9, 0x08, 0x8f, 0xe0, 0x05, 0xf1, 0x9c, 0x83, 0x1e, 0xfc, 0x14, 0x44, 0x45, 0xbf, 0x27, + 0x2e, 0x99, 0x19, 0x51, 0x5d, 0x99, 0x15, 0x59, 0x5d, 0x59, 0xbd, 0xe8, 0xf7, 0x57, 0x55, 0x46, + 0x46, 0xbe, 0xf1, 0xc6, 0xfb, 0x7b, 0x23, 0xe2, 0x8d, 0x88, 0x37, 0xde, 0x00, 0xa7, 0x7b, 0x17, + 0x6f, 0xed, 0x39, 0xb6, 0x67, 0xbb, 0xb7, 0xb6, 0xed, 0xdd, 0x5d, 0xc3, 0xea, 0xb8, 0x0b, 0xe4, + 0x59, 0x9b, 0x32, 0xac, 0x7d, 0x6f, 0xbf, 0x87, 0xe0, 0x0d, 0xbd, 0x4b, 0xdb, 0xb7, 0x76, 0xcd, + 0x8b, 0xb7, 0xf6, 0x2e, 0xde, 0xba, 0x6b, 0x77, 0x50, 0xd7, 0xff, 0x80, 0x3c, 0xb0, 0xec, 0xf0, + 0xa6, 0xa8, 0x5c, 0x5d, 0xbb, 0x6d, 0x74, 0x5d, 0xcf, 0x76, 0x10, 0xcb, 0x79, 0x2a, 0x2c, 0x12, + 0x5d, 0x46, 0x96, 0xe7, 0x53, 0xb8, 0x6e, 0xdb, 0xb6, 0xb7, 0xbb, 0x88, 0xbe, 0xbb, 0xb8, 0xb7, + 0x75, 0xab, 0xeb, 0x39, 0x7b, 0x6d, 0x8f, 0xbd, 0xbd, 0xbe, 0xff, 0x6d, 0x07, 0xb9, 0x6d, 0xc7, + 0xec, 0x79, 0xb6, 0x43, 0x73, 0x9c, 0xfd, 0xf8, 0x3f, 0x14, 0x80, 0xaa, 0xf7, 0xda, 0xf0, 0xdb, + 0x53, 0x40, 0x2d, 0xf5, 0x7a, 0xf0, 0x93, 0x0a, 0x00, 0x2b, 0xc8, 0x3b, 0x87, 0x1c, 0xd7, 0xb4, + 0x2d, 0x78, 0x1c, 0x4c, 0xe9, 0xe8, 0x19, 0x7b, 0xc8, 0xf5, 0xee, 0xc8, 0xde, 0xff, 0x75, 0x35, + 0x03, 0x5f, 0xaf, 0x80, 0x82, 0x8e, 0xdc, 0x9e, 0x6d, 0xb9, 0x48, 0x7b, 0x0a, 0xc8, 0x21, 0xc7, + 0xb1, 0x9d, 0xd3, 0x99, 0xeb, 0x33, 0x37, 0xcd, 0xdc, 0x76, 0xf3, 0x02, 0xab, 0xfe, 0x82, 0xde, + 0x6b, 0x2f, 0x94, 0x7a, 0xbd, 0x85, 0x90, 0xd2, 0x82, 0xff, 0xd1, 0x42, 0x05, 0x7f, 0xa1, 0xd3, + 0x0f, 0xb5, 0xd3, 0x60, 0xea, 0x32, 0xcd, 0x70, 0x5a, 0xb9, 0x3e, 0x73, 0xd3, 0xb4, 0xee, 0x3f, + 0xe2, 0x37, 0x1d, 0xe4, 0x19, 0x66, 0xd7, 0x3d, 0xad, 0xd2, 0x37, 0xec, 0x11, 0xbe, 0x36, 0x03, + 0x72, 0x84, 0x88, 0x56, 0x06, 0xd9, 0xb6, 0xdd, 0x41, 0xa4, 0xf8, 0xf9, 0xdb, 0x6e, 0x95, 0x2f, + 0x7e, 0xa1, 0x6c, 0x77, 0x90, 0x4e, 0x3e, 0xd6, 0xae, 0x07, 0x33, 0xbe, 0x58, 0x42, 0x36, 0xf8, + 0xa4, 0xb3, 0xb7, 0x81, 0x2c, 0xce, 0xaf, 0x15, 0x40, 0xb6, 0xbe, 0x51, 0xab, 0x15, 0x8f, 0x69, + 0x27, 0xc0, 0xdc, 0x46, 0xfd, 0x9e, 0x7a, 0xe3, 0x7c, 0x7d, 0xb3, 0xa2, 0xeb, 0x0d, 0xbd, 0x98, + 0xd1, 0xe6, 0xc0, 0xf4, 0x62, 0x69, 0x69, 0xb3, 0x5a, 0x5f, 0xdf, 0x68, 0x15, 0x15, 0xf8, 0x4a, + 0x15, 0xcc, 0x37, 0x91, 0xb7, 0x84, 0x2e, 0x9b, 0x6d, 0xd4, 0xf4, 0x0c, 0x0f, 0xc1, 0x17, 0x65, + 0x02, 0x61, 0x6a, 0x1b, 0xb8, 0xd0, 0xe0, 0x15, 0xab, 0xc0, 0x63, 0x0f, 0x54, 0x40, 0xa4, 0xb0, + 0xc0, 0xbe, 0x5e, 0xe0, 0xd2, 0x74, 0x9e, 0xce, 0xd9, 0x47, 0x81, 0x19, 0xee, 0x9d, 0x36, 0x0f, + 0xc0, 0x62, 0xa9, 0x7c, 0xcf, 0x8a, 0xde, 0xd8, 0xa8, 0x2f, 0x15, 0x8f, 0xe1, 0xe7, 0xe5, 0x86, + 0x5e, 0x61, 0xcf, 0x19, 0xf8, 0xdd, 0x0c, 0x07, 0xe6, 0x92, 0x08, 0xe6, 0xc2, 0x70, 0x66, 0x06, + 0x00, 0x0a, 0xdf, 0x10, 0x80, 0xb3, 0x22, 0x80, 0xf3, 0xd8, 0x64, 0xe4, 0xd2, 0x07, 0xe8, 0x39, + 0x0a, 0x28, 0x34, 0x77, 0xf6, 0xbc, 0x8e, 0x7d, 0xc5, 0x82, 0xd3, 0x01, 0x32, 0xf0, 0x9b, 0xbc, + 0x4c, 0x9e, 0x2c, 0xca, 0xe4, 0xa6, 0x83, 0x95, 0x60, 0x14, 0x22, 0xa4, 0xf1, 0xea, 0x40, 0x1a, + 0x25, 0x41, 0x1a, 0x8f, 0x92, 0x25, 0x94, 0xbe, 0x1c, 0xfe, 0x69, 0x11, 0xe4, 0x9a, 0x3d, 0xa3, + 0x8d, 0xe0, 0xef, 0xa8, 0x60, 0xb6, 0x86, 0x8c, 0xcb, 0xa8, 0xd4, 0xeb, 0x39, 0xf6, 0x65, 0x04, + 0xcb, 0xa1, 0xbe, 0x9e, 0x06, 0x53, 0x2e, 0xce, 0x54, 0xed, 0x90, 0x1a, 0x4c, 0xeb, 0xfe, 0xa3, + 0x76, 0x06, 0x00, 0xb3, 0x83, 0x2c, 0xcf, 0xf4, 0x4c, 0xe4, 0x9e, 0x56, 0xae, 0x57, 0x6f, 0x9a, + 0xd6, 0xb9, 0x14, 0xf8, 0x6d, 0x45, 0x56, 0xc7, 0x08, 0x17, 0x0b, 0x3c, 0x07, 0x11, 0x52, 0x7d, + 0x9d, 0x22, 0xa3, 0x63, 0x43, 0xc9, 0x25, 0x93, 0xed, 0xdb, 0x32, 0xc9, 0x85, 0x8b, 0x73, 0xd4, + 0x1b, 0x9b, 0xcd, 0x8d, 0xf2, 0xea, 0x66, 0x73, 0xbd, 0x54, 0xae, 0x14, 0x91, 0x76, 0x12, 0x14, + 0xc9, 0xdf, 0xcd, 0x6a, 0x73, 0x73, 0xa9, 0x52, 0xab, 0xb4, 0x2a, 0x4b, 0xc5, 0x2d, 0x4d, 0x03, + 0xf3, 0x7a, 0xe5, 0xa9, 0x1b, 0x95, 0x66, 0x6b, 0x73, 0xb9, 0x54, 0xad, 0x55, 0x96, 0x8a, 0xdb, + 0xf8, 0xe3, 0x5a, 0x75, 0xad, 0xda, 0xda, 0xd4, 0x2b, 0xa5, 0xf2, 0x6a, 0x65, 0xa9, 0xb8, 0xa3, + 0x3d, 0x08, 0x5c, 0x55, 0x6f, 0x6c, 0x96, 0xd6, 0xd7, 0xf5, 0xc6, 0xb9, 0xca, 0x26, 0xfb, 0xa2, + 0x59, 0x34, 0x69, 0x41, 0xad, 0xcd, 0xe6, 0x6a, 0x49, 0xaf, 0x94, 0x16, 0x6b, 0x95, 0xe2, 0xbd, + 0xf0, 0xd9, 0x2a, 0x98, 0x5b, 0x33, 0x2e, 0xa1, 0xe6, 0x8e, 0xe1, 0x20, 0xe3, 0x62, 0x17, 0xc1, + 0x87, 0x49, 0xe0, 0x09, 0x7f, 0x87, 0xc7, 0xab, 0x22, 0xe2, 0x75, 0xeb, 0x00, 0x01, 0x0b, 0x45, + 0x44, 0x00, 0xf6, 0x4f, 0x41, 0x33, 0x58, 0x15, 0x00, 0x7b, 0x5c, 0x42, 0x7a, 0xc9, 0x10, 0xfb, + 0xd1, 0x07, 0x00, 0x62, 0xf0, 0x0f, 0x54, 0x30, 0x5b, 0xb5, 0x2e, 0x9b, 0x1e, 0x2a, 0xef, 0x18, + 0xd6, 0x36, 0x82, 0x5d, 0x99, 0x46, 0xb5, 0x02, 0x66, 0x7a, 0xc8, 0xd9, 0x35, 0x5d, 0x3c, 0x76, + 0xb9, 0xa4, 0x72, 0xf3, 0xb7, 0x3d, 0x3c, 0x90, 0x16, 0xb1, 0x15, 0x16, 0xd6, 0x0d, 0xc7, 0x33, + 0xdb, 0x66, 0xcf, 0xb0, 0xbc, 0xf5, 0x30, 0xb3, 0xce, 0x7f, 0x09, 0xff, 0x30, 0x61, 0xeb, 0xe3, + 0x59, 0x8d, 0x00, 0xf3, 0xdf, 0x33, 0xf2, 0xad, 0x2f, 0x86, 0x5c, 0x32, 0x2c, 0x7f, 0x7c, 0xe2, + 0x58, 0x5e, 0x03, 0xae, 0xae, 0xd6, 0xcb, 0x0d, 0x5d, 0xaf, 0x94, 0x5b, 0x9b, 0xeb, 0x15, 0x7d, + 0xad, 0xda, 0x6c, 0x56, 0x1b, 0xf5, 0x66, 0xd1, 0x84, 0x5f, 0xcf, 0x81, 0x79, 0x5a, 0xb3, 0x15, + 0x64, 0x21, 0x07, 0x8f, 0xed, 0x6f, 0xcc, 0xc8, 0xc0, 0x7a, 0x3b, 0x00, 0x26, 0xf9, 0xae, 0xb5, + 0xdf, 0x43, 0x0c, 0xd5, 0x6b, 0xfa, 0x50, 0xad, 0x06, 0x19, 0x74, 0x2e, 0x73, 0xbf, 0x46, 0xa8, + 0x23, 0x6b, 0xc4, 0x9b, 0xb2, 0x9c, 0x46, 0x2c, 0x8b, 0x1a, 0xf1, 0xe8, 0x48, 0x08, 0xfd, 0x8a, + 0x46, 0x98, 0x71, 0xd7, 0x81, 0x69, 0xca, 0x6b, 0xd9, 0xec, 0x30, 0xf8, 0xc2, 0x04, 0xed, 0x06, + 0x30, 0x47, 0x1f, 0x96, 0xcd, 0x2e, 0xba, 0x07, 0xed, 0x33, 0x83, 0x4e, 0x4c, 0xec, 0x13, 0x4e, + 0xf6, 0x10, 0xc2, 0xc9, 0x8d, 0x2c, 0x9c, 0x9f, 0x08, 0x46, 0x96, 0xaa, 0xa0, 0xdb, 0x3f, 0x98, + 0x54, 0x30, 0xc9, 0xb4, 0xfb, 0x25, 0x0f, 0x84, 0xb1, 0xe5, 0xc0, 0x10, 0x62, 0xc2, 0xef, 0x29, + 0x60, 0xa6, 0xe9, 0xd9, 0x3d, 0xdc, 0x1f, 0x9b, 0xd6, 0xb6, 0xdc, 0x00, 0xf2, 0x69, 0xbe, 0xcb, + 0x29, 0x8b, 0x0a, 0xf6, 0xa8, 0x01, 0x72, 0xe4, 0x0a, 0x88, 0xe8, 0x71, 0xbe, 0x1d, 0xf4, 0x38, + 0xcb, 0x02, 0x2a, 0xb7, 0x25, 0xa2, 0xf6, 0x7d, 0x38, 0x78, 0xbc, 0x2c, 0x0b, 0x8a, 0xbe, 0x9a, + 0x79, 0xe5, 0x3d, 0xc7, 0x41, 0x96, 0x27, 0x07, 0xc2, 0x9f, 0xa9, 0x1c, 0x08, 0xab, 0x22, 0x08, + 0xb7, 0xc5, 0x28, 0xb3, 0x5f, 0xca, 0x7f, 0xf0, 0x76, 0xfe, 0xb1, 0x40, 0xa3, 0xee, 0x11, 0x34, + 0xea, 0x87, 0x92, 0x8b, 0x26, 0x99, 0x5a, 0xad, 0x8e, 0xa0, 0x55, 0x27, 0x41, 0x11, 0x1b, 0x7d, + 0xe5, 0x56, 0xf5, 0x5c, 0x65, 0xb3, 0x5a, 0x3f, 0x57, 0x6d, 0x55, 0x8a, 0x08, 0xbe, 0x58, 0x0d, + 0x07, 0x21, 0x6f, 0x85, 0x4c, 0x5d, 0xa4, 0x34, 0xe3, 0x8b, 0xca, 0x68, 0xfd, 0x3f, 0x2d, 0x23, + 0x3d, 0xbd, 0xe0, 0x30, 0x91, 0xef, 0x7b, 0x07, 0x32, 0x95, 0x0c, 0x91, 0xbb, 0x47, 0x40, 0xe4, + 0x14, 0xd0, 0xaa, 0xf5, 0x73, 0xa5, 0x5a, 0x75, 0x89, 0xb6, 0xf3, 0xcd, 0xd6, 0x85, 0x75, 0x8c, + 0xc9, 0xcf, 0x04, 0xc6, 0x9e, 0x8e, 0x2e, 0xdb, 0x97, 0x24, 0x2d, 0xee, 0xaf, 0x8c, 0x64, 0xa3, + 0xd1, 0x12, 0x22, 0x7a, 0xcc, 0x1f, 0x57, 0x92, 0xda, 0x68, 0x03, 0xc9, 0x3d, 0x90, 0x46, 0xb1, + 0x03, 0xdd, 0xe3, 0xf6, 0x80, 0x5e, 0x74, 0xe0, 0x28, 0xf6, 0x6f, 0x59, 0x00, 0x68, 0x25, 0xcf, + 0x99, 0xe8, 0x0a, 0x5c, 0x0b, 0x31, 0x11, 0xd4, 0x36, 0x33, 0x54, 0x6d, 0x95, 0x41, 0x6a, 0xfb, + 0x6a, 0xde, 0x9e, 0x5a, 0x14, 0xd1, 0xbb, 0x25, 0x52, 0xdc, 0x98, 0x93, 0xe8, 0x25, 0x31, 0x5f, + 0x51, 0x14, 0xd1, 0x7c, 0xbc, 0x0e, 0x4c, 0x93, 0xbf, 0x75, 0x63, 0x17, 0xb1, 0x36, 0x14, 0x26, + 0x68, 0x67, 0xc1, 0x2c, 0xcd, 0xd8, 0xb6, 0x2d, 0x5c, 0x9f, 0x2c, 0xc9, 0x20, 0xa4, 0x61, 0x10, + 0xdb, 0x0e, 0x32, 0x3c, 0xdb, 0x21, 0x34, 0x72, 0x14, 0x44, 0x2e, 0x49, 0xbb, 0x05, 0x9c, 0x30, + 0x5d, 0xd2, 0xaa, 0x36, 0x5c, 0xe4, 0x50, 0x66, 0x4f, 0xe7, 0xaf, 0xcf, 0xdc, 0x54, 0xd0, 0x0f, + 0xbe, 0xe8, 0xeb, 0xcb, 0xa7, 0x12, 0xf4, 0xe5, 0xf0, 0x1b, 0x41, 0x73, 0xaf, 0x08, 0x2a, 0xfa, + 0x98, 0x24, 0x32, 0x4b, 0xa6, 0xa0, 0x97, 0x47, 0xeb, 0x7c, 0x69, 0x97, 0xbb, 0x89, 0xd5, 0x6a, + 0x99, 0x2c, 0x9c, 0x21, 0xd6, 0x01, 0xe0, 0x54, 0x9c, 0xb7, 0xdc, 0xa8, 0xb7, 0x2a, 0xf5, 0x56, + 0x71, 0x6b, 0xa0, 0xea, 0x6e, 0xc3, 0xd7, 0x65, 0x41, 0xf6, 0x6e, 0xdb, 0xb4, 0xe0, 0x73, 0x32, + 0x82, 0xee, 0x59, 0xc8, 0xbb, 0x62, 0x3b, 0x97, 0x82, 0x1e, 0x21, 0x4c, 0x88, 0x57, 0x82, 0x50, + 0x67, 0xd5, 0xa1, 0x3a, 0x9b, 0x1d, 0xa4, 0xb3, 0x3f, 0xcd, 0x5b, 0x07, 0x77, 0x8a, 0x3a, 0x7b, + 0xe3, 0x00, 0xf9, 0x63, 0xe6, 0x23, 0x7a, 0x9a, 0x4f, 0x05, 0x3d, 0xcd, 0x5d, 0x02, 0x8c, 0x8f, + 0x94, 0x23, 0x93, 0x0c, 0xc0, 0x2f, 0xa5, 0xda, 0xc3, 0x0c, 0x82, 0x7a, 0x3b, 0x02, 0xea, 0x9d, + 0x01, 0x9d, 0x8f, 0x79, 0xb0, 0x8f, 0xba, 0xf7, 0x60, 0x7f, 0x74, 0x49, 0xbb, 0x1a, 0x9c, 0x58, + 0xaa, 0x2e, 0x2f, 0x57, 0xf4, 0x4a, 0xbd, 0xb5, 0x59, 0xaf, 0xb4, 0xce, 0x37, 0xf4, 0x7b, 0x8a, + 0x5d, 0xf8, 0x5a, 0x15, 0x00, 0x2c, 0xa1, 0xb2, 0x61, 0xb5, 0x51, 0x57, 0x6e, 0xe8, 0xf8, 0x5b, + 0x25, 0x59, 0xe7, 0x13, 0xd2, 0x8f, 0x80, 0xf3, 0x15, 0x8a, 0x7c, 0xab, 0x8c, 0x24, 0x96, 0x0c, + 0xd4, 0x37, 0x3f, 0x10, 0x26, 0x3f, 0x57, 0x81, 0xe3, 0x3e, 0x3d, 0x96, 0x7d, 0xf0, 0xa2, 0xda, + 0xdb, 0xb3, 0x60, 0x9e, 0xc1, 0xe2, 0xaf, 0x92, 0xde, 0x2f, 0x35, 0xf5, 0x87, 0xa0, 0xc0, 0x16, + 0x45, 0xfd, 0x71, 0x24, 0x78, 0x1e, 0xdf, 0xdc, 0xfe, 0xc5, 0x6a, 0x32, 0xdb, 0x4e, 0xac, 0x49, + 0x84, 0x4a, 0xfc, 0x5a, 0x82, 0x39, 0x71, 0x2c, 0xc1, 0x64, 0x6a, 0xf1, 0xc9, 0x54, 0xd5, 0x62, + 0x00, 0xde, 0x31, 0x4b, 0x3e, 0x87, 0x68, 0xed, 0xf0, 0x33, 0x6a, 0xa0, 0x31, 0x4b, 0xa8, 0xdd, + 0x35, 0x2d, 0x04, 0xef, 0x3a, 0xa4, 0xc2, 0x88, 0x6b, 0xea, 0xf2, 0x38, 0xb3, 0xf2, 0x23, 0x70, + 0x7e, 0x4d, 0x72, 0x9c, 0x07, 0x13, 0xfc, 0x0f, 0xdc, 0xfc, 0xbf, 0xa2, 0x82, 0x13, 0x5c, 0x43, + 0xd4, 0xd1, 0xee, 0xd8, 0xf6, 0x49, 0x7e, 0x94, 0x6f, 0xbb, 0x55, 0x11, 0xd3, 0x41, 0x66, 0xfb, + 0x01, 0x36, 0x22, 0x60, 0x7d, 0x73, 0x00, 0x6b, 0x4d, 0x80, 0xf5, 0x09, 0x23, 0xd0, 0x4c, 0x86, + 0xec, 0x3b, 0x52, 0x45, 0xf6, 0x1a, 0x70, 0xf5, 0x7a, 0x49, 0x6f, 0x55, 0xcb, 0xd5, 0xf5, 0x12, + 0x1e, 0x47, 0xb9, 0x21, 0x3b, 0x62, 0x5e, 0x20, 0x82, 0x3e, 0x10, 0xdf, 0x8f, 0x66, 0xc1, 0x75, + 0x83, 0x3b, 0x5a, 0xb6, 0x7a, 0x6f, 0xca, 0x40, 0xbd, 0x04, 0xa6, 0xda, 0x24, 0x3b, 0xc5, 0x99, + 0xdf, 0x18, 0x8f, 0xe9, 0xcb, 0x69, 0x09, 0xba, 0xff, 0x29, 0x7c, 0x37, 0xaf, 0x10, 0x2d, 0x51, + 0x21, 0x9e, 0x1c, 0x0f, 0xde, 0x01, 0xbe, 0x23, 0x74, 0xe3, 0xb3, 0x81, 0x6e, 0x9c, 0x17, 0x74, + 0xa3, 0x7c, 0x38, 0xf2, 0xc9, 0xd4, 0xe4, 0xb7, 0x1f, 0x08, 0x1d, 0x40, 0xa4, 0x36, 0x99, 0xd1, + 0xa3, 0xc2, 0xc0, 0xee, 0xfe, 0x55, 0x2a, 0xc8, 0x2f, 0xa1, 0x2e, 0xf2, 0x24, 0x27, 0xff, 0x7f, + 0xa7, 0xc8, 0x6e, 0x37, 0x53, 0x18, 0x28, 0xed, 0xe8, 0x65, 0x18, 0xcf, 0xdc, 0x45, 0xae, 0x67, + 0xec, 0xf6, 0x88, 0xa8, 0x55, 0x3d, 0x4c, 0x80, 0x3f, 0xa6, 0xc8, 0x6c, 0x46, 0xc7, 0x14, 0xf3, + 0x1f, 0x63, 0x51, 0xfb, 0x73, 0x0a, 0x28, 0x34, 0x91, 0xd7, 0x70, 0x3a, 0xc8, 0x81, 0xcd, 0x10, + 0xa3, 0xeb, 0xc1, 0x0c, 0x01, 0x05, 0x4f, 0x33, 0x03, 0x9c, 0xf8, 0x24, 0xed, 0x46, 0x30, 0x1f, + 0x3c, 0x92, 0xcf, 0x59, 0x37, 0xde, 0x97, 0x0a, 0xbf, 0x95, 0x91, 0xf5, 0x91, 0x61, 0x6b, 0xd6, + 0x8c, 0x9b, 0x88, 0x56, 0x2a, 0xe7, 0xef, 0x12, 0x4b, 0x2a, 0x7d, 0x37, 0x82, 0x77, 0x2a, 0x00, + 0x6c, 0x58, 0xae, 0x2f, 0xd7, 0x47, 0x26, 0x90, 0x2b, 0xfc, 0xc7, 0x4c, 0xb2, 0x59, 0x4c, 0x58, + 0x4e, 0x84, 0xc4, 0x7e, 0x29, 0xc1, 0xda, 0x42, 0x24, 0xb1, 0xf4, 0x65, 0xf6, 0x85, 0xe3, 0x20, + 0x7f, 0xde, 0xe8, 0x76, 0x91, 0x07, 0x5f, 0xa9, 0x82, 0x7c, 0xd9, 0x41, 0x86, 0x87, 0x20, 0x0a, + 0x45, 0x07, 0x41, 0xc1, 0xb1, 0x6d, 0x6f, 0xdd, 0xf0, 0x76, 0x98, 0xdc, 0x82, 0x67, 0xed, 0x09, + 0xe0, 0x41, 0x5b, 0x7b, 0xdd, 0xae, 0x87, 0xee, 0xf3, 0xd6, 0x1d, 0x73, 0xd7, 0x70, 0xf6, 0x6b, + 0x86, 0xb5, 0xbd, 0x67, 0x6c, 0x23, 0xc6, 0x5e, 0xd4, 0x6b, 0xe6, 0xc8, 0xf5, 0x2b, 0x7c, 0xc7, + 0x73, 0x97, 0x28, 0xf4, 0x1f, 0x10, 0xe4, 0x44, 0x59, 0x5c, 0xa0, 0xec, 0x45, 0xf4, 0x3c, 0x10, + 0x14, 0x76, 0x2d, 0xb4, 0x6b, 0x5b, 0x66, 0xdb, 0xb7, 0x56, 0xfd, 0x67, 0xf8, 0xf1, 0x00, 0x8d, + 0x45, 0x01, 0x8d, 0x05, 0xe9, 0x52, 0x92, 0x41, 0xd1, 0x1c, 0xa1, 0xdf, 0x79, 0x08, 0xb8, 0x96, + 0x76, 0x23, 0x9b, 0xad, 0xc6, 0x66, 0x59, 0xaf, 0x94, 0x5a, 0x95, 0xcd, 0x5a, 0xa3, 0x5c, 0xaa, + 0x6d, 0xea, 0x95, 0xf5, 0x46, 0x11, 0xe1, 0xd9, 0xf9, 0x94, 0x8e, 0xda, 0xf6, 0x65, 0xe4, 0xc0, + 0x67, 0x65, 0xe4, 0x20, 0x8a, 0x11, 0x4a, 0x1c, 0x7c, 0xaa, 0x0c, 0x7c, 0x3f, 0x2d, 0xed, 0x87, + 0xc7, 0x04, 0xcb, 0x98, 0x8f, 0x68, 0x31, 0xbf, 0x21, 0xd5, 0xc7, 0xc4, 0x92, 0x7a, 0x00, 0x80, + 0xf4, 0x0f, 0x0a, 0x98, 0x2a, 0xdb, 0xd6, 0x65, 0xe4, 0x78, 0xfc, 0x24, 0x8b, 0xc7, 0x21, 0xd3, + 0x87, 0xc3, 0x69, 0x30, 0x85, 0x2c, 0xcf, 0xb1, 0x7b, 0xfe, 0x2c, 0xcb, 0x7f, 0x84, 0x6f, 0x4c, + 0x2a, 0x61, 0x56, 0x72, 0xf4, 0xb2, 0xee, 0xe0, 0x82, 0x04, 0xf6, 0xd4, 0xbe, 0xb6, 0xf3, 0xda, + 0x24, 0xb8, 0x0c, 0x66, 0x20, 0xfd, 0x7e, 0xec, 0xab, 0x2a, 0x98, 0xa3, 0xed, 0xb6, 0x89, 0x88, + 0x59, 0x08, 0x1b, 0xfc, 0x3a, 0x67, 0x9f, 0xf0, 0x57, 0x8f, 0x09, 0xe2, 0xcf, 0x1b, 0xbd, 0x5e, + 0xb0, 0xb8, 0xbe, 0x7a, 0x4c, 0x67, 0xcf, 0x54, 0xcd, 0x17, 0xf3, 0x20, 0x6b, 0xec, 0x79, 0x3b, + 0xf0, 0x7b, 0xd2, 0x33, 0x5e, 0xa1, 0x1f, 0x61, 0xfc, 0x44, 0x40, 0x72, 0x12, 0xe4, 0x3c, 0xfb, + 0x12, 0xf2, 0xe5, 0x40, 0x1f, 0x30, 0x1c, 0x46, 0xaf, 0xd7, 0x22, 0x2f, 0x18, 0x1c, 0xfe, 0x33, + 0x36, 0xb0, 0x8c, 0x76, 0xdb, 0xde, 0xb3, 0xbc, 0xaa, 0xbf, 0xc0, 0x1e, 0x26, 0xc0, 0x2f, 0x48, + 0xed, 0x60, 0x49, 0x30, 0x98, 0x0c, 0xb2, 0x8b, 0x23, 0x34, 0xa5, 0x05, 0x70, 0x73, 0x69, 0x7d, + 0x7d, 0xb3, 0xd5, 0xb8, 0xa7, 0x52, 0x0f, 0xad, 0xdd, 0xcd, 0x6a, 0x7d, 0xb3, 0xb5, 0x5a, 0xd9, + 0x2c, 0x6f, 0xe8, 0x64, 0x71, 0xb2, 0x54, 0x2e, 0x37, 0x36, 0xea, 0xad, 0x22, 0x82, 0x6f, 0x55, + 0xc0, 0x6c, 0xb9, 0x6b, 0xbb, 0x01, 0xc2, 0x0f, 0x09, 0x11, 0x0e, 0xc4, 0x98, 0xe1, 0xc4, 0x08, + 0xff, 0x25, 0x23, 0xeb, 0x47, 0xe6, 0x0b, 0x84, 0x23, 0x1f, 0xd1, 0x4b, 0xbd, 0x51, 0xca, 0x8f, + 0x6c, 0x38, 0xbd, 0xf4, 0x9b, 0xc4, 0xaf, 0x37, 0xc0, 0x54, 0x89, 0x2a, 0x06, 0xfc, 0xb3, 0x0c, + 0xc8, 0x97, 0x6d, 0x6b, 0xcb, 0xdc, 0xc6, 0x16, 0x24, 0xb2, 0x8c, 0x8b, 0x5d, 0xb4, 0x64, 0x78, + 0xc6, 0x65, 0x13, 0x5d, 0x21, 0x15, 0x28, 0xe8, 0x7d, 0xa9, 0x98, 0x29, 0x96, 0x82, 0x2e, 0xee, + 0x6d, 0x13, 0xa6, 0x0a, 0x3a, 0x9f, 0x84, 0xc7, 0x0f, 0xfa, 0xb8, 0xee, 0x20, 0x07, 0x75, 0x91, + 0xe1, 0x12, 0x37, 0x2b, 0x0b, 0x75, 0x89, 0xd2, 0x16, 0xf4, 0xa8, 0xd7, 0xda, 0x59, 0x30, 0x4b, + 0x5f, 0x11, 0xfb, 0xc7, 0x25, 0x6a, 0x5c, 0xd0, 0x85, 0x34, 0xed, 0x51, 0x20, 0x87, 0xee, 0xf3, + 0x1c, 0xe3, 0x74, 0x87, 0xe0, 0xf5, 0xa0, 0x05, 0xea, 0x48, 0xbe, 0xe0, 0x3b, 0x92, 0x2f, 0x34, + 0x89, 0x9b, 0xb9, 0x4e, 0x73, 0xc1, 0xff, 0x53, 0x08, 0xac, 0x97, 0xcf, 0xa9, 0xa1, 0x62, 0x68, + 0x20, 0x6b, 0x19, 0xbb, 0x88, 0xe9, 0x05, 0xf9, 0xaf, 0xdd, 0x0c, 0x8e, 0x1b, 0x97, 0x0d, 0xcf, + 0x70, 0x6a, 0x76, 0xdb, 0xe8, 0x92, 0x61, 0xd3, 0x6f, 0xf9, 0xfd, 0x2f, 0xc8, 0x7e, 0x97, 0x67, + 0x3b, 0x88, 0xe4, 0xf2, 0xf7, 0xbb, 0xfc, 0x04, 0x4c, 0xdd, 0x6c, 0xdb, 0x16, 0xe1, 0x5f, 0xd5, + 0xc9, 0x7f, 0x2c, 0x95, 0x8e, 0xe9, 0xe2, 0x8a, 0x10, 0x2a, 0x75, 0xba, 0x9f, 0xd2, 0xdc, 0xb7, + 0xda, 0x64, 0xaf, 0xab, 0xa0, 0x47, 0xbd, 0xd6, 0x16, 0xc1, 0x0c, 0xdb, 0x7d, 0x59, 0xc3, 0x7a, + 0x95, 0x27, 0x7a, 0x75, 0xbd, 0xe8, 0xa6, 0x4b, 0xf1, 0x5c, 0xa8, 0x87, 0xf9, 0x74, 0xfe, 0x23, + 0xed, 0x29, 0xe0, 0x5a, 0xf6, 0x58, 0xde, 0x73, 0x3d, 0x7b, 0x97, 0x82, 0xbe, 0x6c, 0x76, 0x69, + 0x0d, 0xa6, 0x48, 0x0d, 0xe2, 0xb2, 0x68, 0xb7, 0x81, 0x93, 0x3d, 0x07, 0x6d, 0x21, 0xe7, 0x82, + 0xb1, 0xbb, 0x77, 0x5f, 0xcb, 0x31, 0x2c, 0xb7, 0x67, 0x3b, 0xde, 0xe9, 0x02, 0x61, 0x7e, 0xe0, + 0x3b, 0xed, 0x16, 0x70, 0xe2, 0x5e, 0xd7, 0xb6, 0x4a, 0x3d, 0xb3, 0x66, 0xba, 0x1e, 0xb2, 0x4a, + 0x9d, 0x8e, 0x73, 0x7a, 0x9a, 0x94, 0x75, 0xf0, 0x85, 0x76, 0x03, 0x98, 0xbb, 0xd7, 0x36, 0xad, + 0xa6, 0xe7, 0x20, 0x63, 0x77, 0xc3, 0xe9, 0x9e, 0x06, 0x74, 0x83, 0x48, 0x48, 0x64, 0x9d, 0x6f, + 0x01, 0xe4, 0x29, 0x24, 0xf0, 0x45, 0x39, 0x69, 0xaf, 0x7f, 0x26, 0xa4, 0x58, 0x6b, 0xf1, 0xd1, + 0x60, 0x8a, 0xf5, 0x9a, 0x04, 0xfc, 0x99, 0xdb, 0x4e, 0xf5, 0x2d, 0x90, 0x30, 0x2a, 0xba, 0x9f, + 0x4d, 0x7b, 0x2c, 0xc8, 0xb7, 0x89, 0xa8, 0x88, 0x1e, 0xcc, 0xdc, 0x76, 0xed, 0xe0, 0x42, 0x49, + 0x16, 0x9d, 0x65, 0x85, 0x5f, 0x54, 0xa5, 0x0e, 0x0a, 0xc4, 0x71, 0x9c, 0xac, 0xa7, 0xf8, 0x86, + 0x32, 0x42, 0x57, 0x7c, 0x0b, 0xb8, 0x89, 0xf5, 0xb3, 0xcc, 0xa6, 0x59, 0xda, 0x5c, 0xdc, 0xf0, + 0x67, 0xb5, 0xd8, 0xd2, 0x69, 0xb6, 0x4a, 0x7a, 0x6b, 0xb3, 0xde, 0x58, 0xc2, 0xb3, 0xe1, 0x9b, + 0xc1, 0x8d, 0x43, 0x72, 0x57, 0x5a, 0x9b, 0xf5, 0xd2, 0x5a, 0xa5, 0xb8, 0x25, 0xda, 0x4b, 0xcd, + 0x56, 0x63, 0x7d, 0x53, 0xdf, 0xa8, 0xd7, 0xab, 0xf5, 0x15, 0x4a, 0x0c, 0x1b, 0xa8, 0xa7, 0xc2, + 0x0c, 0xe7, 0xf5, 0x6a, 0xab, 0xb2, 0x59, 0x6e, 0xd4, 0x97, 0xab, 0x2b, 0x45, 0x73, 0x98, 0xb1, + 0x75, 0xaf, 0x76, 0x3d, 0xb8, 0x4e, 0xe0, 0xa4, 0xda, 0xa8, 0xe3, 0x29, 0x7a, 0xb9, 0x54, 0x2f, + 0x57, 0xf0, 0x7c, 0xfc, 0x92, 0x06, 0xc1, 0xd5, 0x94, 0xdc, 0xe6, 0x72, 0xb5, 0xc6, 0xef, 0xaa, + 0x7d, 0x3a, 0xa3, 0x9d, 0x06, 0x57, 0xf1, 0xef, 0x98, 0x3b, 0x45, 0xf1, 0xb7, 0x32, 0xda, 0x0d, + 0xe0, 0x21, 0xc2, 0x57, 0x74, 0x83, 0x6c, 0xb3, 0xba, 0xb4, 0xb9, 0x56, 0x6d, 0xae, 0x95, 0x5a, + 0xe5, 0xd5, 0xe2, 0x67, 0xc8, 0xf4, 0x25, 0xb0, 0xc7, 0x39, 0xef, 0xfd, 0x97, 0xf0, 0x76, 0x42, + 0x49, 0x54, 0xd4, 0x47, 0x0e, 0x84, 0x3d, 0xde, 0x2e, 0xfe, 0x64, 0x30, 0xe2, 0x2c, 0x09, 0x2a, + 0xf4, 0xe8, 0x04, 0xb4, 0x92, 0xe9, 0x50, 0x6b, 0x04, 0x15, 0xba, 0x1e, 0x5c, 0x57, 0xaf, 0x50, + 0xa4, 0xf4, 0x4a, 0xb9, 0x71, 0xae, 0xa2, 0x6f, 0x9e, 0x2f, 0xd5, 0x6a, 0x95, 0xd6, 0xe6, 0x72, + 0x55, 0x6f, 0xb6, 0x8a, 0x5b, 0xf0, 0x1f, 0x95, 0x60, 0x59, 0x8a, 0x93, 0xd6, 0x9f, 0x29, 0x49, + 0x9b, 0x75, 0xec, 0xf2, 0xd3, 0x0f, 0x82, 0xbc, 0xeb, 0x19, 0xde, 0x9e, 0xcb, 0x5a, 0xf5, 0x83, + 0x07, 0xb7, 0xea, 0x85, 0x26, 0xc9, 0xa4, 0xb3, 0xcc, 0xf0, 0x8b, 0x99, 0x24, 0xcd, 0x74, 0x0c, + 0x2b, 0x53, 0xe6, 0x08, 0x22, 0x3e, 0x03, 0xa0, 0xaf, 0xed, 0xd5, 0xe6, 0x66, 0xa9, 0xa6, 0x57, + 0x4a, 0x4b, 0x17, 0x82, 0xf5, 0x28, 0xa4, 0x5d, 0x0d, 0x4e, 0x6c, 0xd4, 0x4b, 0x8b, 0xb5, 0x0a, + 0x69, 0x2e, 0x8d, 0x7a, 0xbd, 0x52, 0xc6, 0x72, 0xff, 0x31, 0xb2, 0xfb, 0x83, 0xad, 0x72, 0xc2, + 0x37, 0xb6, 0x9c, 0x38, 0xf9, 0x7f, 0x5d, 0x91, 0xf5, 0xd2, 0x0b, 0x35, 0x8c, 0xa7, 0x35, 0x5e, + 0x1c, 0xbe, 0x20, 0xe5, 0x14, 0x27, 0xc5, 0x49, 0x32, 0x3c, 0xfe, 0xdb, 0x08, 0x78, 0x5c, 0x0d, + 0x4e, 0xf0, 0x78, 0x10, 0xe7, 0xb8, 0x68, 0x18, 0xbe, 0xac, 0x82, 0xa9, 0x35, 0x73, 0x9b, 0xb8, + 0x6a, 0xef, 0x85, 0x06, 0xca, 0x3c, 0x50, 0x02, 0xc7, 0x1f, 0xc5, 0xec, 0x08, 0x93, 0x79, 0x45, + 0x7e, 0xbd, 0x45, 0x6a, 0xc2, 0xfe, 0xc5, 0xc4, 0x3d, 0x13, 0x63, 0x38, 0xa2, 0x67, 0x7a, 0xbe, + 0x92, 0xa4, 0x67, 0x1a, 0x4c, 0x2b, 0x11, 0x4c, 0xd8, 0x74, 0x70, 0xd0, 0x33, 0xf6, 0x4c, 0x07, + 0x75, 0x88, 0x99, 0x48, 0xea, 0xad, 0xea, 0x62, 0xe2, 0x59, 0xe7, 0x70, 0x60, 0xf2, 0x5e, 0x36, + 0xb3, 0xa0, 0x10, 0x8c, 0x26, 0x64, 0xc3, 0x07, 0xbf, 0xac, 0xd4, 0x1b, 0x1b, 0x2b, 0xab, 0x9b, + 0xcb, 0x7a, 0xa5, 0xc2, 0x96, 0x88, 0xb7, 0xe1, 0xbb, 0x14, 0x30, 0xc7, 0x6a, 0xc8, 0xbc, 0x27, + 0x1e, 0x12, 0x09, 0x32, 0x83, 0xe3, 0xdf, 0xf9, 0xe9, 0xc9, 0x8a, 0x08, 0xc7, 0x63, 0xe2, 0x44, + 0x18, 0xeb, 0x3e, 0xf1, 0xa6, 0xa0, 0x09, 0xdd, 0x2d, 0x80, 0xf2, 0xf8, 0xc4, 0x14, 0xd3, 0x9f, + 0xa2, 0xbc, 0x08, 0x80, 0x7c, 0x13, 0x75, 0x51, 0xdb, 0x83, 0x1f, 0x56, 0x47, 0x6e, 0x13, 0x51, + 0xe6, 0xb6, 0x9a, 0xc8, 0xdc, 0xce, 0xa6, 0x60, 0x6e, 0xe7, 0x46, 0x37, 0xb7, 0xf3, 0x49, 0xcd, + 0xed, 0xa9, 0x28, 0x73, 0x3b, 0xa6, 0xd7, 0x28, 0xc4, 0xf6, 0x1a, 0x7d, 0x86, 0xba, 0x5e, 0x63, + 0x26, 0xbd, 0x98, 0xc8, 0x94, 0xf9, 0x13, 0xf9, 0xa4, 0xe3, 0x38, 0x05, 0xfe, 0x68, 0xcd, 0xf3, + 0x9f, 0xcc, 0x25, 0x19, 0xf7, 0x07, 0x72, 0x9c, 0xac, 0x95, 0xbc, 0x22, 0x9b, 0xc2, 0xa2, 0xa3, + 0xf6, 0x30, 0xf0, 0x90, 0xf0, 0x79, 0xb3, 0xf2, 0xb4, 0x6a, 0xb3, 0xd5, 0x24, 0x36, 0x79, 0xb9, + 0xa1, 0xeb, 0x1b, 0xeb, 0x74, 0xbb, 0xea, 0x14, 0xd0, 0x42, 0x2a, 0xfa, 0x46, 0x9d, 0x5a, 0xe0, + 0xdb, 0x22, 0xf5, 0xe5, 0x6a, 0x7d, 0x69, 0x33, 0x18, 0xd5, 0xea, 0xcb, 0x8d, 0xe2, 0x8e, 0xb6, + 0x00, 0x6e, 0xe6, 0xa8, 0x93, 0x0e, 0x90, 0x96, 0x50, 0xaa, 0x2f, 0x6d, 0xae, 0xd5, 0x2b, 0x6b, + 0x8d, 0x7a, 0xb5, 0x4c, 0xd2, 0x9b, 0x95, 0x56, 0xd1, 0xc4, 0xa6, 0x60, 0x9f, 0xcd, 0xdf, 0xac, + 0x94, 0xf4, 0xf2, 0x6a, 0x45, 0xa7, 0x45, 0xde, 0xab, 0xdd, 0x08, 0xce, 0x96, 0xea, 0x8d, 0x16, + 0x4e, 0x29, 0xd5, 0x2f, 0xb4, 0x2e, 0xac, 0x57, 0x36, 0xd7, 0xf5, 0x46, 0xb9, 0xd2, 0x6c, 0xe2, + 0x91, 0x94, 0xcd, 0x10, 0x8a, 0x5d, 0xed, 0xc9, 0xe0, 0x0e, 0x8e, 0xb5, 0x4a, 0x8b, 0xf8, 0x46, + 0xac, 0x35, 0x88, 0x7b, 0xdc, 0x52, 0x65, 0x73, 0xb5, 0xd4, 0xdc, 0xac, 0xd6, 0xcb, 0x8d, 0xb5, + 0xf5, 0x52, 0xab, 0x8a, 0x07, 0xdc, 0x75, 0xbd, 0xd1, 0x6a, 0x6c, 0x9e, 0xab, 0xe8, 0xcd, 0x6a, + 0xa3, 0x5e, 0xb4, 0x70, 0x95, 0xb9, 0x11, 0xda, 0xb7, 0x94, 0x6c, 0xed, 0x3a, 0x70, 0xda, 0x4f, + 0xaf, 0x35, 0xb0, 0xa0, 0xb9, 0x39, 0x43, 0x8f, 0xb7, 0xb3, 0x9a, 0xad, 0x86, 0x4e, 0x67, 0x0d, + 0x6b, 0xd5, 0x15, 0x1d, 0x4f, 0x75, 0x8a, 0xcf, 0x48, 0x75, 0x4e, 0xf1, 0xcf, 0x0a, 0xc8, 0x36, + 0x3d, 0xbb, 0x07, 0x7f, 0x20, 0xec, 0x0e, 0xcf, 0x00, 0xe0, 0x10, 0x57, 0x88, 0x25, 0xc3, 0x33, + 0xd8, 0x6a, 0x0d, 0x97, 0x02, 0x7f, 0x53, 0x7a, 0xff, 0x36, 0xb4, 0xba, 0xec, 0x5e, 0xc4, 0xf0, + 0xf1, 0x5d, 0xb9, 0xe3, 0xc2, 0xd1, 0x84, 0x26, 0x70, 0xa8, 0x0e, 0x82, 0x53, 0x1c, 0xac, 0x58, + 0xfe, 0xbe, 0xca, 0x20, 0xed, 0x41, 0xe0, 0xaa, 0x3e, 0xe5, 0x23, 0x3a, 0xb7, 0xa5, 0x3d, 0x14, + 0x3c, 0x98, 0x53, 0xff, 0xca, 0x5a, 0xe3, 0x5c, 0x25, 0x50, 0xf4, 0xa5, 0x52, 0xab, 0x54, 0xdc, + 0x86, 0x9f, 0x53, 0x41, 0x76, 0xcd, 0xbe, 0xdc, 0xbf, 0x6d, 0x6e, 0xa1, 0x2b, 0xdc, 0xde, 0x8a, + 0xff, 0x08, 0x5f, 0xaf, 0x26, 0x15, 0xfb, 0x5a, 0xb4, 0x8b, 0xcc, 0x17, 0x94, 0x24, 0x62, 0x5f, + 0x3b, 0xac, 0x5f, 0xcc, 0xdf, 0x8c, 0x22, 0xf6, 0x08, 0xd1, 0x22, 0xed, 0x2c, 0x38, 0x13, 0xbe, + 0xa8, 0x2e, 0x55, 0xea, 0xad, 0xea, 0xf2, 0x85, 0x50, 0xb8, 0x55, 0x5d, 0x4a, 0xfc, 0xc3, 0xba, + 0xb9, 0xf8, 0xb5, 0x82, 0xd3, 0xe0, 0x64, 0xf8, 0x6e, 0xa5, 0xd2, 0xf2, 0xdf, 0xdc, 0x0b, 0x9f, + 0x93, 0x03, 0xb3, 0xb4, 0xdb, 0xdf, 0xe8, 0x75, 0xb0, 0xf5, 0xfd, 0xd8, 0x10, 0xdd, 0x9b, 0xc0, + 0xf1, 0xea, 0xfa, 0x72, 0xb3, 0xe9, 0xd9, 0x8e, 0xb1, 0x8d, 0xc8, 0x38, 0x4a, 0xa5, 0xd5, 0x9f, + 0x0c, 0xdf, 0x2b, 0xbd, 0xfa, 0x2f, 0x0e, 0x35, 0xb4, 0xcc, 0x08, 0xd4, 0xbf, 0x2a, 0xb5, 0x5a, + 0x2f, 0x41, 0x30, 0x19, 0xfa, 0xf7, 0x8e, 0xb9, 0xcd, 0x45, 0xe3, 0xb2, 0x75, 0xf6, 0x79, 0x0a, + 0x98, 0x6e, 0x99, 0xbb, 0xe8, 0x99, 0xb6, 0x85, 0x5c, 0x6d, 0x0a, 0xa8, 0x2b, 0x6b, 0xad, 0xe2, + 0x31, 0xfc, 0x07, 0x4f, 0x8b, 0x32, 0xe4, 0x4f, 0x05, 0x17, 0x80, 0xff, 0x94, 0x5a, 0x45, 0x15, + 0xff, 0x59, 0xab, 0xb4, 0x8a, 0x59, 0xfc, 0xa7, 0x5e, 0x69, 0x15, 0x73, 0xf8, 0xcf, 0x7a, 0xad, + 0x55, 0xcc, 0xe3, 0x3f, 0xd5, 0x66, 0xab, 0x38, 0x85, 0xff, 0x2c, 0x36, 0x5b, 0xc5, 0x02, 0xfe, + 0x73, 0xae, 0xd9, 0x2a, 0x4e, 0xe3, 0x3f, 0xe5, 0x56, 0xab, 0x08, 0xf0, 0x9f, 0xbb, 0x9b, 0xad, + 0xe2, 0x0c, 0xfe, 0x53, 0x2a, 0xb7, 0x8a, 0xb3, 0xe4, 0x4f, 0xa5, 0x55, 0x9c, 0xc3, 0x7f, 0x9a, + 0xcd, 0x56, 0x71, 0x9e, 0x50, 0x6e, 0xb6, 0x8a, 0xc7, 0x49, 0x59, 0xd5, 0x56, 0xb1, 0x88, 0xff, + 0xac, 0x36, 0x5b, 0xc5, 0x13, 0x24, 0x73, 0xb3, 0x55, 0xd4, 0x48, 0xa1, 0xcd, 0x56, 0xf1, 0x2a, + 0x92, 0xa7, 0xd9, 0x2a, 0x9e, 0x24, 0x45, 0x34, 0x5b, 0xc5, 0xab, 0x09, 0x1b, 0x95, 0x56, 0xf1, + 0x14, 0xc9, 0xa3, 0xb7, 0x8a, 0x0f, 0x22, 0xaf, 0xea, 0xad, 0xe2, 0x69, 0xc2, 0x58, 0xa5, 0x55, + 0xbc, 0x86, 0xfc, 0xd1, 0x5b, 0x45, 0x48, 0x5e, 0x95, 0x5a, 0xc5, 0x6b, 0xe1, 0x83, 0xc1, 0xf4, + 0x0a, 0xf2, 0x28, 0x88, 0xb0, 0x08, 0xd4, 0x15, 0xe4, 0xf1, 0x13, 0xf1, 0x57, 0x66, 0xc1, 0x83, + 0xd8, 0xe2, 0xcd, 0xb2, 0x63, 0xef, 0xd6, 0xd0, 0xb6, 0xd1, 0xde, 0xaf, 0xdc, 0x87, 0x0d, 0x3e, + 0xf8, 0xc2, 0x8c, 0xb0, 0xa2, 0xdd, 0x0b, 0x7b, 0x23, 0xf2, 0x3f, 0xd6, 0x40, 0xf6, 0xd7, 0xa8, + 0x55, 0x71, 0x8d, 0x3a, 0xca, 0x24, 0xcc, 0xca, 0x4c, 0x24, 0xff, 0x9e, 0x6f, 0x0c, 0xc2, 0x86, + 0x54, 0xa6, 0x6f, 0x43, 0x0a, 0xb7, 0xb0, 0x1e, 0x72, 0x5c, 0xdb, 0x32, 0xba, 0x4d, 0xe6, 0x7e, + 0x44, 0xe7, 0xaa, 0xfd, 0xc9, 0xda, 0x53, 0xfd, 0x46, 0x45, 0x0d, 0xbe, 0x27, 0xc6, 0x2d, 0x6f, + 0xf5, 0x4b, 0x28, 0xa2, 0x7d, 0x7d, 0x26, 0x68, 0x5f, 0x2d, 0xa1, 0x7d, 0x3d, 0xe5, 0x10, 0xb4, + 0x93, 0x35, 0xb5, 0xea, 0x68, 0x53, 0xd1, 0xd0, 0x39, 0xdf, 0xdf, 0xff, 0x52, 0xe1, 0xe7, 0x14, + 0x70, 0xaa, 0x62, 0x0d, 0x9a, 0xca, 0xf0, 0x6a, 0xf4, 0x56, 0x1e, 0x9a, 0x75, 0x51, 0xa4, 0x77, + 0x0c, 0xac, 0xf6, 0x60, 0x9a, 0x11, 0x12, 0xfd, 0xbd, 0x40, 0xa2, 0x4d, 0x41, 0xa2, 0x77, 0x8d, + 0x4e, 0x3a, 0x99, 0x40, 0xeb, 0x63, 0xed, 0xbb, 0xb2, 0xf0, 0x2f, 0x15, 0x70, 0x82, 0x7a, 0x10, + 0xde, 0x4d, 0x67, 0x4e, 0xa4, 0xb7, 0x17, 0xad, 0xaf, 0x6e, 0x38, 0xcb, 0xa2, 0xfa, 0xcd, 0xa5, + 0xc0, 0xd7, 0xf1, 0x02, 0xbf, 0x47, 0x14, 0x78, 0x44, 0x3f, 0xde, 0x5f, 0x5c, 0x84, 0xac, 0x7f, + 0x2b, 0x90, 0x75, 0x5d, 0x90, 0xf5, 0x1d, 0x23, 0x51, 0x3d, 0x5a, 0x31, 0x7f, 0x23, 0x0b, 0x1e, + 0x4c, 0x39, 0x64, 0x8a, 0x40, 0xfb, 0xc1, 0x92, 0xd5, 0xd1, 0x91, 0xeb, 0x19, 0x8e, 0x27, 0x84, + 0x26, 0xea, 0x9b, 0x9a, 0x67, 0x52, 0x98, 0x9a, 0x2b, 0x43, 0xa7, 0xe6, 0xf0, 0x3d, 0xbc, 0x81, + 0x77, 0x5e, 0x44, 0xb6, 0x14, 0x83, 0x41, 0x44, 0x0d, 0xa3, 0x5a, 0x54, 0x60, 0xf9, 0xfd, 0xb0, + 0x80, 0xf2, 0xf2, 0xa1, 0x4b, 0x48, 0x86, 0xf8, 0x6f, 0x8e, 0xd7, 0x12, 0xcf, 0xf2, 0xef, 0x44, + 0xb3, 0xb1, 0xd8, 0x49, 0x75, 0x0a, 0xf5, 0xdc, 0x13, 0x60, 0x9a, 0x74, 0x39, 0x35, 0xd3, 0xba, + 0x04, 0xff, 0x42, 0x05, 0xb3, 0x75, 0x74, 0xa5, 0xbc, 0x63, 0x74, 0xbb, 0xc8, 0xda, 0x46, 0xf0, + 0x5e, 0xc1, 0xb6, 0x37, 0x7a, 0xbd, 0x7a, 0xb8, 0x3f, 0xec, 0x3f, 0x6a, 0x77, 0x81, 0x9c, 0xdb, + 0xb6, 0x83, 0x00, 0x19, 0x3f, 0x10, 0xb1, 0x7a, 0x5d, 0xda, 0xf3, 0x76, 0x16, 0x48, 0x59, 0xa5, + 0x9e, 0xd9, 0xc4, 0x1f, 0xe8, 0xf4, 0x3b, 0x36, 0x4e, 0x7e, 0x7d, 0x60, 0x67, 0x9c, 0x89, 0xe9, + 0x8c, 0x03, 0xc6, 0x17, 0x78, 0xa6, 0x23, 0x16, 0x49, 0xae, 0x07, 0x33, 0x6d, 0x3f, 0x4b, 0x70, + 0x4a, 0x8f, 0x4f, 0x82, 0x7f, 0x95, 0xa8, 0xbb, 0x96, 0x2a, 0x3c, 0x99, 0x56, 0xa1, 0x31, 0x9b, + 0x9a, 0x57, 0x83, 0x13, 0xad, 0x46, 0x63, 0x73, 0xad, 0x54, 0xbf, 0x10, 0xc6, 0x1e, 0xda, 0x82, + 0xaf, 0xc8, 0x82, 0xf9, 0xa6, 0xdd, 0xbd, 0x8c, 0x42, 0x9c, 0xab, 0x82, 0xfb, 0x27, 0x2f, 0xa7, + 0xcc, 0x01, 0x39, 0x69, 0xa7, 0x40, 0xde, 0xb0, 0xdc, 0x2b, 0xc8, 0x37, 0xff, 0xd9, 0x13, 0x83, + 0xf1, 0xa3, 0x7c, 0x47, 0xa0, 0x8b, 0x30, 0xde, 0x39, 0x44, 0x92, 0x22, 0x57, 0x11, 0x40, 0x9e, + 0x05, 0xb3, 0x2e, 0xf5, 0x12, 0x69, 0x71, 0xce, 0x40, 0x42, 0x1a, 0x61, 0x91, 0xba, 0x29, 0xa9, + 0x8c, 0x45, 0xf2, 0x04, 0x5f, 0x1b, 0xf4, 0x1f, 0x1b, 0x02, 0xc4, 0xa5, 0xc3, 0x30, 0x96, 0x0c, + 0xe4, 0x57, 0x8d, 0x7b, 0x12, 0x7f, 0x1a, 0x9c, 0xf4, 0x0f, 0xb7, 0x97, 0x57, 0x4b, 0xb5, 0x5a, + 0xa5, 0xbe, 0x52, 0xd9, 0xac, 0x2e, 0xd1, 0xfd, 0xe4, 0x30, 0xa5, 0xd4, 0x6a, 0x55, 0xd6, 0xd6, + 0x5b, 0xcd, 0xcd, 0xca, 0xd3, 0xca, 0x95, 0xca, 0x12, 0x71, 0xc0, 0x26, 0x27, 0x28, 0x7d, 0x57, + 0xf9, 0x52, 0xbd, 0x79, 0xbe, 0xa2, 0x17, 0x77, 0xe0, 0x3f, 0x28, 0xa0, 0x50, 0x33, 0xc9, 0xa9, + 0x30, 0x97, 0xb7, 0x96, 0xbe, 0xcc, 0x37, 0xd0, 0x9a, 0x88, 0xec, 0xe3, 0x87, 0x08, 0xd0, 0xa7, + 0x17, 0xb9, 0x03, 0xa6, 0x1a, 0xbd, 0x1e, 0x3b, 0x7d, 0xf1, 0xb0, 0xb8, 0x0e, 0xa4, 0xd4, 0xeb, + 0x55, 0xad, 0x2d, 0x5b, 0xc7, 0xf9, 0x39, 0x93, 0xb5, 0x21, 0xc0, 0xf9, 0xc4, 0xd1, 0xb8, 0x39, + 0xca, 0x51, 0x1f, 0xc1, 0x17, 0xa9, 0x60, 0x9a, 0xfa, 0x34, 0x94, 0x7a, 0x3d, 0xf8, 0x94, 0xb0, + 0x45, 0x32, 0xe1, 0x50, 0x41, 0xcb, 0x0b, 0xe7, 0xa3, 0x3c, 0x5c, 0x6b, 0x22, 0x5c, 0x3f, 0x34, + 0x44, 0x40, 0x01, 0x1f, 0x11, 0x78, 0x9d, 0x12, 0xdd, 0x00, 0x83, 0xf6, 0xf5, 0xdb, 0x01, 0x20, + 0xeb, 0x02, 0x20, 0x77, 0x8e, 0x58, 0xde, 0xd1, 0x22, 0xf2, 0x37, 0x0a, 0x98, 0xa6, 0x71, 0x16, + 0x30, 0x22, 0x0f, 0xeb, 0x1f, 0x0b, 0x57, 0x0d, 0x77, 0x87, 0x1b, 0x0b, 0xf1, 0x23, 0x7c, 0xdf, + 0x21, 0x84, 0x1e, 0x14, 0x15, 0x61, 0xfc, 0x7c, 0x69, 0x44, 0xe1, 0x46, 0xd1, 0x4d, 0x26, 0xdc, + 0xa7, 0x8f, 0x20, 0xdc, 0x39, 0x30, 0x1d, 0x5a, 0x2b, 0x6a, 0x9c, 0xac, 0xcf, 0x96, 0xc0, 0x0c, + 0x67, 0x9d, 0x62, 0xda, 0x4b, 0x68, 0xcb, 0xd8, 0xeb, 0xb2, 0x35, 0x80, 0xe2, 0x31, 0x4c, 0x8c, + 0xd4, 0xa9, 0x61, 0x75, 0xf7, 0x8b, 0x19, 0xad, 0x08, 0x66, 0x79, 0x43, 0xb4, 0xa8, 0xc0, 0x6f, + 0x5d, 0x07, 0xa6, 0xcf, 0xdb, 0xce, 0x25, 0x72, 0x54, 0x01, 0x7e, 0x80, 0x06, 0x46, 0xf5, 0xa3, + 0xf0, 0x70, 0xfd, 0xd8, 0xab, 0xe4, 0x7d, 0x53, 0x7d, 0x6a, 0x0b, 0x43, 0x23, 0xed, 0x5c, 0x0f, + 0x66, 0xae, 0xf8, 0xb9, 0x43, 0xf3, 0x82, 0x4b, 0x82, 0xbf, 0x2c, 0xe7, 0x6d, 0x3a, 0xbc, 0xc8, + 0xf4, 0xb7, 0x1a, 0xdf, 0xae, 0x80, 0xfc, 0x0a, 0xf2, 0x4a, 0xdd, 0x2e, 0x2f, 0xb7, 0x97, 0x49, + 0x1f, 0x5e, 0x17, 0x2a, 0x51, 0xea, 0x76, 0xa3, 0x47, 0x72, 0x4e, 0x40, 0xfe, 0x21, 0x4b, 0x21, + 0x4d, 0xf2, 0x68, 0xc8, 0x90, 0x02, 0xd3, 0x97, 0xd8, 0xdf, 0x86, 0xe7, 0x41, 0x5e, 0xcf, 0xcd, + 0xcd, 0x1e, 0x13, 0x06, 0xc5, 0xcd, 0xc4, 0x7b, 0x66, 0xfa, 0xf9, 0xb4, 0x7b, 0xc0, 0xd4, 0x9e, + 0x8b, 0xca, 0x86, 0xeb, 0xdb, 0xd3, 0x62, 0x4d, 0x1b, 0x17, 0xef, 0x45, 0x6d, 0x6f, 0xa1, 0xba, + 0xdb, 0xb3, 0x1d, 0x6f, 0x83, 0x66, 0x0c, 0xe2, 0xcc, 0xb2, 0x67, 0xdd, 0xa7, 0xa0, 0x41, 0x50, + 0xb8, 0x62, 0x7a, 0x3b, 0xe5, 0x1d, 0xc3, 0x63, 0x3b, 0xbc, 0xc1, 0x33, 0xfc, 0xd0, 0x08, 0x70, + 0xc6, 0x7a, 0x09, 0x46, 0xc7, 0xc0, 0xb8, 0x19, 0x14, 0xc9, 0x9c, 0xcb, 0xb4, 0xb6, 0x29, 0xff, + 0xc1, 0xc2, 0xd6, 0x81, 0xf4, 0xc4, 0x80, 0x8f, 0xc1, 0x0d, 0x70, 0x14, 0xc0, 0x7f, 0x44, 0x05, + 0xd9, 0x46, 0x0f, 0x59, 0xd2, 0x87, 0xc3, 0x03, 0x1c, 0x94, 0x3e, 0x1c, 0xde, 0x27, 0x7f, 0x6e, + 0x21, 0xa8, 0x34, 0x2e, 0x39, 0x02, 0x85, 0x5b, 0x41, 0xd6, 0xb4, 0xb6, 0x6c, 0x36, 0xf5, 0xbe, + 0x36, 0xc2, 0x5c, 0x20, 0x66, 0x02, 0xc9, 0x08, 0xdf, 0x27, 0x77, 0x64, 0x21, 0xae, 0xec, 0x64, + 0xe2, 0x5e, 0x1e, 0x61, 0x24, 0xd1, 0xc0, 0x7c, 0x38, 0x2f, 0xae, 0x35, 0x4a, 0x4b, 0xc5, 0x0e, + 0xfc, 0x66, 0x01, 0xe4, 0xa9, 0xda, 0xc0, 0x97, 0xa8, 0x40, 0x2d, 0x75, 0x3a, 0x11, 0x60, 0x28, + 0x07, 0xc0, 0xb0, 0x7d, 0x2d, 0x64, 0xc7, 0x4b, 0xfc, 0x67, 0x31, 0x9a, 0xaa, 0xe4, 0xd8, 0xc0, + 0x9a, 0x64, 0xa9, 0xd3, 0x89, 0x3e, 0x6c, 0x15, 0x14, 0xa8, 0x88, 0x05, 0xf2, 0x3d, 0x84, 0x2a, + 0xd7, 0x43, 0x24, 0x1e, 0x48, 0x22, 0xf9, 0x4b, 0xbf, 0x95, 0xfc, 0xbd, 0x02, 0xa6, 0x88, 0xb1, + 0xdd, 0xe9, 0xc0, 0x92, 0x0c, 0x36, 0xd7, 0x81, 0x69, 0x5f, 0x34, 0xb8, 0xcb, 0xc4, 0xe3, 0x41, + 0x98, 0x20, 0x2e, 0x1f, 0xde, 0x2d, 0xa2, 0xf3, 0xb8, 0xf8, 0xda, 0x33, 0x2e, 0xa2, 0x0f, 0xe2, + 0x86, 0xc5, 0x2a, 0xfd, 0xc5, 0xfe, 0x4a, 0x20, 0xf0, 0x35, 0x41, 0xe0, 0xb7, 0x8f, 0x52, 0x64, + 0xfa, 0x42, 0xff, 0x63, 0x05, 0x00, 0x5c, 0x36, 0x8b, 0x76, 0xf0, 0x08, 0x21, 0x86, 0x51, 0x8c, + 0x74, 0x5f, 0x21, 0x6d, 0xbb, 0x0e, 0xac, 0x6a, 0x5c, 0x54, 0x03, 0xad, 0x08, 0x54, 0x33, 0x10, + 0x2d, 0xfe, 0x0b, 0xdf, 0x2e, 0x65, 0xcd, 0xca, 0x97, 0x94, 0xbe, 0x5c, 0xff, 0x54, 0x01, 0x53, + 0x4d, 0xe4, 0xe1, 0xae, 0x13, 0x9e, 0x93, 0xe9, 0xf5, 0xb9, 0xb6, 0xad, 0x48, 0xb6, 0xed, 0xef, + 0x64, 0x64, 0x83, 0x71, 0x86, 0x92, 0x61, 0x3c, 0x45, 0xcc, 0x1a, 0x5e, 0x2f, 0x15, 0x8c, 0x73, + 0x18, 0xb5, 0xf4, 0xa5, 0xfb, 0x56, 0x25, 0x70, 0x6f, 0x13, 0x0f, 0x23, 0xf3, 0x66, 0x75, 0xe6, + 0xa0, 0x59, 0x2d, 0x7f, 0x18, 0x99, 0xaf, 0x63, 0xb4, 0x37, 0x55, 0x62, 0x03, 0x64, 0x0c, 0x8e, + 0x4e, 0xa3, 0xc8, 0xeb, 0xd9, 0x2a, 0xc8, 0xb3, 0x1d, 0xcf, 0xbb, 0xe2, 0x37, 0x3c, 0x87, 0x4f, + 0x4d, 0xde, 0x3f, 0x82, 0x29, 0x18, 0xb7, 0x97, 0x18, 0xb0, 0xa1, 0x70, 0x6c, 0xdc, 0x02, 0x72, + 0xe4, 0x2a, 0x0c, 0x36, 0xce, 0x85, 0x3e, 0x6a, 0x3e, 0x89, 0x0a, 0x7e, 0xab, 0xd3, 0x4c, 0x89, + 0x51, 0x18, 0xc3, 0xf6, 0xe3, 0x28, 0x28, 0x7c, 0x43, 0x03, 0x60, 0x7d, 0xef, 0x62, 0xd7, 0x74, + 0x77, 0x4c, 0x8b, 0x38, 0xb6, 0xce, 0xb2, 0x47, 0x7a, 0xa3, 0x43, 0xac, 0x49, 0x18, 0x69, 0x14, + 0x14, 0x81, 0xba, 0xe7, 0x98, 0xcc, 0x44, 0xc6, 0x7f, 0xb5, 0x27, 0x05, 0x2e, 0xe2, 0xd9, 0xbe, + 0x68, 0x53, 0x58, 0x0c, 0x21, 0x07, 0x0b, 0x5c, 0xe9, 0xa1, 0xab, 0x38, 0x7f, 0x6d, 0x47, 0x4e, + 0xbc, 0xb6, 0x43, 0x08, 0x41, 0x91, 0xef, 0x0b, 0x41, 0x81, 0x71, 0x74, 0xcd, 0x67, 0xd2, 0x48, + 0x81, 0xaa, 0x4e, 0xfe, 0xe3, 0x2f, 0x88, 0x4f, 0x23, 0x71, 0x29, 0xa6, 0x07, 0x9d, 0xc2, 0x04, + 0xbe, 0xcf, 0x9b, 0x96, 0xec, 0xf3, 0x3e, 0x16, 0xce, 0x9d, 0x6c, 0x49, 0x63, 0x3a, 0x81, 0xe4, + 0x04, 0x76, 0xb3, 0x7d, 0xec, 0xc2, 0x4f, 0x48, 0x07, 0x3f, 0xe6, 0x64, 0x1c, 0x3b, 0x0b, 0x62, + 0x1c, 0x28, 0x01, 0x07, 0x9c, 0xe3, 0x4a, 0x5c, 0x0f, 0x3c, 0x8c, 0x7e, 0x32, 0x5d, 0xde, 0x1d, + 0xcd, 0xc6, 0xf6, 0x63, 0x79, 0x34, 0x16, 0xef, 0xae, 0x94, 0x5b, 0x45, 0x74, 0x30, 0xbe, 0x07, + 0x89, 0xe4, 0x41, 0xa3, 0x76, 0x84, 0x0b, 0xc9, 0xf0, 0x7f, 0x2a, 0x20, 0xcf, 0xcc, 0x8d, 0xbb, + 0x0e, 0x09, 0x21, 0x7c, 0xe5, 0x28, 0x90, 0xc4, 0x86, 0x54, 0xfa, 0x9d, 0xa4, 0x00, 0x8c, 0xc1, + 0xc0, 0xb8, 0x90, 0x1a, 0x00, 0xf0, 0x9f, 0x14, 0x90, 0xc5, 0x66, 0x90, 0x5c, 0xc0, 0x9a, 0xcf, + 0x48, 0x9f, 0x63, 0xe0, 0x04, 0x80, 0xc9, 0x47, 0xe8, 0xf7, 0x22, 0x98, 0xee, 0xd1, 0x8c, 0x41, + 0xb8, 0xa4, 0x1b, 0x24, 0x3a, 0x23, 0xa4, 0x87, 0x9f, 0x71, 0x53, 0xce, 0xb8, 0xb3, 0x10, 0xf1, + 0xfc, 0x24, 0x83, 0xa3, 0x32, 0x8e, 0xd8, 0x36, 0x5b, 0xf0, 0x5f, 0x15, 0x00, 0x74, 0xe4, 0xda, + 0xdd, 0xcb, 0x68, 0xc3, 0x31, 0xe1, 0xb5, 0x21, 0x00, 0xac, 0xd9, 0x67, 0xc2, 0x66, 0xff, 0x59, + 0x45, 0xf6, 0xc4, 0x82, 0xa0, 0x79, 0x3e, 0xf1, 0x08, 0xf1, 0x3f, 0x19, 0x4c, 0x31, 0x39, 0x32, + 0x9b, 0x52, 0x4e, 0xf8, 0xfe, 0x47, 0xf0, 0x83, 0x52, 0x27, 0x1e, 0x64, 0x38, 0x4a, 0x06, 0x40, + 0x79, 0x04, 0x00, 0x8e, 0x83, 0x19, 0x1f, 0x80, 0x0d, 0xbd, 0x5a, 0x44, 0xf0, 0xdd, 0x2a, 0x71, + 0x0b, 0xa3, 0x83, 0xdb, 0xe1, 0x7b, 0x9a, 0xbf, 0x94, 0x9e, 0xec, 0x73, 0xf2, 0x08, 0xca, 0x4f, + 0x09, 0xa0, 0xdf, 0x97, 0x9a, 0xdd, 0x4b, 0x30, 0xf4, 0x40, 0xe9, 0xaf, 0xce, 0x56, 0xc0, 0x9c, + 0x60, 0x95, 0x68, 0xa7, 0xc1, 0x49, 0x21, 0x81, 0x8e, 0x77, 0x9d, 0xe2, 0x31, 0x0d, 0x82, 0x53, + 0xc2, 0x1b, 0xf6, 0x80, 0x3a, 0xc5, 0x0c, 0x7c, 0xd7, 0x97, 0x33, 0xc1, 0x7a, 0xcf, 0xfb, 0xb3, + 0x6c, 0xf5, 0xed, 0x53, 0x62, 0x84, 0xde, 0xb6, 0x6d, 0x79, 0xe8, 0x3e, 0xce, 0xb7, 0x2e, 0x48, + 0x88, 0xb5, 0x1a, 0x4e, 0x83, 0x29, 0xcf, 0xe1, 0xfd, 0xed, 0xfc, 0x47, 0x5e, 0xb1, 0x72, 0xa2, + 0x62, 0xd5, 0xc1, 0x59, 0xd3, 0x6a, 0x77, 0xf7, 0x3a, 0x48, 0x47, 0x5d, 0x03, 0xcb, 0xd0, 0x2d, + 0xb9, 0x4b, 0xa8, 0x87, 0xac, 0x0e, 0xb2, 0x3c, 0xca, 0xa7, 0x7f, 0x58, 0x5f, 0x22, 0xa7, 0xa8, + 0x8c, 0x4f, 0x12, 0x95, 0xf1, 0x11, 0x83, 0x96, 0x80, 0x63, 0xd6, 0x00, 0x6f, 0x07, 0x80, 0xd6, + 0xed, 0x9c, 0x89, 0xae, 0x30, 0x35, 0xec, 0x0f, 0xf3, 0xdc, 0x08, 0x32, 0xe8, 0x5c, 0x66, 0xf8, + 0x95, 0x40, 0xfd, 0x9e, 0x22, 0xa8, 0xdf, 0x2d, 0x92, 0x2c, 0x24, 0xd3, 0xba, 0xde, 0xe1, 0x37, + 0x95, 0xae, 0x01, 0x57, 0xfb, 0xc7, 0x22, 0xea, 0x95, 0xca, 0x52, 0x73, 0x73, 0x63, 0x7d, 0x45, + 0x2f, 0x2d, 0x55, 0x8a, 0x00, 0xeb, 0x27, 0xd5, 0xcb, 0xe0, 0x34, 0x43, 0x16, 0xfe, 0x89, 0x02, + 0x72, 0x24, 0xd2, 0x04, 0x7c, 0xfa, 0x98, 0x34, 0xc7, 0x15, 0x3c, 0x35, 0x83, 0x71, 0x57, 0xfe, + 0x5e, 0x32, 0x26, 0x4c, 0xc2, 0xd5, 0xa1, 0xee, 0x25, 0x8b, 0x21, 0x94, 0xfe, 0x4c, 0x08, 0x37, + 0xc9, 0xe6, 0x8e, 0x7d, 0xe5, 0x3f, 0x73, 0x93, 0xc4, 0xf5, 0x3f, 0xe2, 0x26, 0x39, 0x80, 0x85, + 0x89, 0x37, 0xc9, 0x01, 0xed, 0x2e, 0xa6, 0x99, 0xc2, 0x8f, 0xe6, 0x82, 0xf9, 0xdf, 0x27, 0x95, + 0x43, 0xed, 0x9d, 0x95, 0xc0, 0x9c, 0x69, 0x79, 0xc8, 0xb1, 0x8c, 0xee, 0x72, 0xd7, 0xd8, 0xf6, + 0xed, 0xd3, 0x6b, 0x0f, 0x44, 0xb8, 0x0f, 0xf3, 0xe8, 0xe2, 0x17, 0xda, 0x19, 0x00, 0x3c, 0xb4, + 0xdb, 0xeb, 0x1a, 0x5e, 0xa8, 0x7a, 0x5c, 0x0a, 0xaf, 0x7d, 0x59, 0x51, 0xfb, 0x1e, 0x0d, 0xae, + 0xa2, 0xa0, 0xb5, 0xf6, 0x7b, 0x68, 0xc3, 0x32, 0x9f, 0xb1, 0x47, 0x02, 0xba, 0x53, 0x1d, 0x1d, + 0xf4, 0x4a, 0xd8, 0x15, 0xca, 0x8b, 0xbb, 0x42, 0xda, 0x9d, 0xe0, 0x1a, 0x12, 0xe6, 0x9f, 0x04, + 0xdf, 0x3f, 0x6f, 0x76, 0xb6, 0x91, 0x57, 0xdd, 0x5a, 0x33, 0x5d, 0xd7, 0xb4, 0xb6, 0xc9, 0x74, + 0xbc, 0xa0, 0x47, 0x67, 0x80, 0xff, 0x5b, 0x3a, 0x58, 0x9c, 0xdf, 0x67, 0x0c, 0x09, 0x16, 0x67, + 0x8b, 0xdb, 0x76, 0x61, 0x3b, 0x0d, 0x56, 0x75, 0xb2, 0x12, 0xab, 0x3a, 0x3c, 0xa6, 0x39, 0xc9, + 0xd5, 0x81, 0xd7, 0x48, 0x45, 0xa3, 0x8b, 0xab, 0x46, 0xfa, 0x7d, 0xdf, 0xb7, 0x55, 0x30, 0x4f, + 0x8b, 0x5e, 0xb4, 0xed, 0x4b, 0xbb, 0x86, 0x73, 0x09, 0xfe, 0xf4, 0xe1, 0x76, 0x81, 0x63, 0x77, + 0xaf, 0xa2, 0xb6, 0x74, 0xfb, 0x94, 0x37, 0xdb, 0xaf, 0xbc, 0xf0, 0xf7, 0xa4, 0xa7, 0x24, 0x82, + 0x3c, 0xfd, 0x4a, 0x4d, 0x66, 0x7b, 0x4b, 0xee, 0x4c, 0xb6, 0x0c, 0x83, 0xe9, 0x03, 0xff, 0xdb, + 0x01, 0xf0, 0xfe, 0x38, 0xc2, 0xef, 0x0c, 0x8c, 0x13, 0x77, 0xf8, 0xd5, 0xd1, 0xb0, 0xf3, 0xf9, + 0x1a, 0x01, 0xbb, 0x22, 0x50, 0x2f, 0x05, 0x1e, 0x94, 0xf8, 0x2f, 0x5f, 0xa1, 0x6c, 0x7a, 0x68, + 0x46, 0xb0, 0x3c, 0x11, 0x34, 0x4f, 0x8a, 0x2c, 0x34, 0x7a, 0xa9, 0x62, 0xfa, 0x25, 0xe9, 0x1d, + 0xb7, 0x81, 0x02, 0xa2, 0xdc, 0x4d, 0xa6, 0x55, 0xca, 0x6d, 0xd7, 0xc9, 0xb3, 0x99, 0x3e, 0x9a, + 0x2f, 0xcc, 0xf9, 0xfe, 0x94, 0x4d, 0x44, 0xae, 0x09, 0x0e, 0x30, 0x3c, 0x05, 0xf2, 0xae, 0xbd, + 0xe7, 0xb4, 0x11, 0xdb, 0x03, 0x65, 0x4f, 0x23, 0xec, 0xd7, 0x0d, 0x35, 0x17, 0x0e, 0x58, 0x24, + 0xd9, 0xc4, 0x16, 0x49, 0xb4, 0xbd, 0x1b, 0x63, 0x3f, 0xc0, 0x17, 0xa9, 0xb2, 0x5b, 0x3a, 0x02, + 0x66, 0x4d, 0xe4, 0x3d, 0x10, 0x8d, 0x80, 0x5f, 0x97, 0xda, 0x0d, 0x1a, 0x52, 0x93, 0x64, 0x2a, + 0xd7, 0x18, 0xc1, 0x0e, 0xbe, 0x16, 0x3c, 0xc8, 0xcf, 0xc1, 0x0c, 0x60, 0x62, 0xf0, 0x6e, 0xe8, + 0xb5, 0xa2, 0x0a, 0x9f, 0x9d, 0x05, 0x45, 0xca, 0x5a, 0x23, 0xb0, 0x05, 0xe1, 0xcb, 0x32, 0x47, + 0x6d, 0xf0, 0x46, 0xcf, 0x60, 0x85, 0xbb, 0x68, 0x63, 0x6f, 0x38, 0x10, 0x04, 0x1f, 0xd6, 0x2e, + 0x42, 0x93, 0x46, 0x68, 0x66, 0x31, 0xca, 0x07, 0xdf, 0x92, 0x91, 0xb9, 0x30, 0x41, 0x8e, 0xc5, + 0xf4, 0x7b, 0xa5, 0xef, 0x64, 0xfd, 0xd8, 0xab, 0xcb, 0x8e, 0xbd, 0xbb, 0xe1, 0x74, 0xe1, 0xbf, + 0x49, 0xdd, 0x47, 0x13, 0x31, 0xbb, 0x50, 0xa2, 0x67, 0x17, 0x64, 0x45, 0xba, 0x1b, 0x6e, 0x85, + 0x75, 0x47, 0x18, 0xbe, 0xb5, 0x1b, 0xc1, 0xbc, 0xd1, 0xe9, 0xac, 0x1b, 0xdb, 0xa8, 0x8c, 0xa7, + 0xed, 0x96, 0xc7, 0xe2, 0x32, 0xf6, 0xa5, 0xc6, 0x4e, 0x65, 0xc4, 0x3e, 0x72, 0xea, 0x80, 0x55, + 0x2a, 0xbf, 0x0c, 0x2b, 0x80, 0xc8, 0xe4, 0x37, 0x91, 0xe1, 0x0f, 0x0f, 0x19, 0xed, 0x1d, 0x23, + 0x8c, 0x22, 0xcb, 0x9e, 0x24, 0x7d, 0xb1, 0x24, 0xf8, 0x4e, 0x5f, 0xf3, 0x7e, 0x4d, 0x01, 0x53, + 0x18, 0x8f, 0x52, 0xa7, 0x03, 0x1f, 0x2e, 0x04, 0x5b, 0x8e, 0xf4, 0x86, 0x7b, 0xbe, 0xb4, 0x6b, + 0xa2, 0x5f, 0x43, 0x4a, 0x3f, 0xfa, 0xd4, 0x00, 0x13, 0xa2, 0x22, 0x08, 0x51, 0x2e, 0x68, 0x72, + 0x6c, 0x11, 0xe9, 0x8b, 0xef, 0x33, 0x0a, 0x98, 0xf3, 0xe7, 0x19, 0xcb, 0xc8, 0x6b, 0xef, 0xc0, + 0xdb, 0x65, 0xd7, 0xb9, 0x58, 0x4b, 0x0c, 0xb6, 0x84, 0xbb, 0xf0, 0x7b, 0x99, 0x84, 0x2a, 0x2f, + 0x94, 0x1c, 0xb1, 0x48, 0x98, 0x48, 0x17, 0xe3, 0x08, 0xa6, 0x2f, 0xcc, 0xaf, 0x28, 0x00, 0xb4, + 0xec, 0x60, 0xb2, 0x7c, 0x08, 0x49, 0xfe, 0x8c, 0xf4, 0x6e, 0x31, 0xab, 0x78, 0x58, 0x6c, 0xf2, + 0x9e, 0x43, 0xd2, 0x99, 0x6a, 0x58, 0x49, 0x13, 0x69, 0xeb, 0xd3, 0x4b, 0x7b, 0xbd, 0xae, 0xd9, + 0x36, 0xbc, 0x7e, 0x0f, 0xc0, 0x68, 0xf1, 0xc2, 0xe7, 0x28, 0x09, 0x8d, 0xc6, 0xa0, 0x8c, 0x08, + 0x59, 0xd2, 0xe0, 0x64, 0x8a, 0x1f, 0x9c, 0x4c, 0xd2, 0xab, 0x67, 0x08, 0xf1, 0x09, 0xa8, 0xa7, + 0x0a, 0x8e, 0x37, 0x7a, 0xc8, 0x5a, 0x74, 0x90, 0xd1, 0x69, 0x3b, 0x7b, 0xbb, 0x17, 0x5d, 0xde, + 0x7d, 0x35, 0x5e, 0x47, 0xb9, 0x95, 0x6b, 0x45, 0x58, 0xb9, 0x86, 0xcf, 0x95, 0xbe, 0xe4, 0x99, + 0xdb, 0x5f, 0xe1, 0x78, 0x18, 0x61, 0xa8, 0x4b, 0xe4, 0x74, 0xd5, 0xb7, 0x48, 0x9d, 0x4d, 0xb2, + 0x48, 0xfd, 0x66, 0xa9, 0x60, 0x94, 0x52, 0xf5, 0x9a, 0x88, 0xef, 0xdc, 0x7c, 0x13, 0x79, 0x11, + 0xf0, 0xde, 0x00, 0xe6, 0x2e, 0x86, 0x6f, 0x02, 0x88, 0xc5, 0xc4, 0x01, 0x1e, 0xad, 0x6f, 0x4d, + 0xba, 0x42, 0x23, 0xb2, 0x10, 0x81, 0x6e, 0x80, 0xa0, 0x22, 0xe3, 0x36, 0x97, 0x68, 0xb9, 0x25, + 0xb6, 0xfc, 0xf4, 0x51, 0xf8, 0x84, 0x02, 0x66, 0x9a, 0x3b, 0x86, 0x83, 0x16, 0xf7, 0xc9, 0xe9, + 0x73, 0x49, 0xa3, 0xe4, 0x85, 0xbc, 0x98, 0x35, 0x90, 0xed, 0x9a, 0xd6, 0x25, 0xdf, 0xdf, 0x11, + 0xff, 0x0f, 0xaf, 0x64, 0x56, 0x06, 0x5c, 0xc9, 0x1c, 0x6c, 0x93, 0x04, 0xe5, 0x46, 0x8c, 0xa6, + 0x6f, 0xc8, 0xc8, 0x5c, 0xc9, 0x3c, 0x94, 0x5c, 0xfa, 0x62, 0xfc, 0xeb, 0x2c, 0xc8, 0x37, 0x91, + 0xe1, 0xb4, 0x77, 0xe0, 0xfb, 0x95, 0x81, 0x53, 0x89, 0x82, 0x38, 0x95, 0x58, 0x06, 0x53, 0x5b, + 0x66, 0xd7, 0x43, 0x0e, 0xf5, 0x01, 0xe7, 0xbb, 0x76, 0xda, 0xc4, 0x17, 0xbb, 0x76, 0xfb, 0xd2, + 0x02, 0x33, 0xed, 0x17, 0xfc, 0x20, 0xf7, 0x0b, 0xcb, 0xe4, 0x23, 0xdd, 0xff, 0x18, 0x1b, 0x84, + 0xae, 0xed, 0x78, 0x51, 0x97, 0xa6, 0x45, 0x50, 0x69, 0xda, 0x8e, 0xa7, 0xd3, 0x0f, 0x31, 0xcc, + 0x5b, 0x7b, 0xdd, 0x6e, 0x0b, 0xdd, 0xe7, 0xf9, 0xd3, 0x3a, 0xff, 0x19, 0x1b, 0x8b, 0xf6, 0xd6, + 0x96, 0x8b, 0xe8, 0xa2, 0x42, 0x4e, 0x67, 0x4f, 0xda, 0x49, 0x90, 0xeb, 0x9a, 0xbb, 0x26, 0x9d, + 0x88, 0xe4, 0x74, 0xfa, 0xa0, 0xdd, 0x0c, 0x8a, 0xe1, 0x1c, 0x88, 0x32, 0x7a, 0x3a, 0x4f, 0x9a, + 0xe6, 0x81, 0x74, 0xac, 0x33, 0x97, 0xd0, 0xbe, 0x7b, 0x7a, 0x8a, 0xbc, 0x27, 0xff, 0xe1, 0x6b, + 0x93, 0x6e, 0x98, 0x50, 0x89, 0x47, 0xcf, 0x70, 0x1d, 0xd4, 0xb6, 0x9d, 0x8e, 0x2f, 0x9b, 0xe8, + 0x09, 0x06, 0xcb, 0x97, 0x6c, 0x9b, 0x63, 0x60, 0xe1, 0xe9, 0x6b, 0xda, 0x7b, 0xf2, 0xb8, 0xdb, + 0xc4, 0x45, 0x9f, 0x37, 0xbd, 0x9d, 0x35, 0xe4, 0x19, 0xf0, 0xaf, 0xd5, 0x81, 0x1a, 0x37, 0xf3, + 0xff, 0x6b, 0xdc, 0x10, 0x8d, 0xa3, 0x81, 0x0a, 0xbd, 0x3d, 0xc7, 0xc2, 0x72, 0x64, 0x7e, 0xb4, + 0x5c, 0x8a, 0x76, 0x27, 0xb8, 0x26, 0x7c, 0xf2, 0x97, 0x52, 0x97, 0x38, 0xd7, 0xda, 0x82, 0x1e, + 0x9d, 0x41, 0x5b, 0x07, 0x0f, 0xa3, 0x2f, 0x57, 0x5b, 0x6b, 0xb5, 0x55, 0x73, 0x7b, 0xa7, 0x6b, + 0x6e, 0xef, 0x78, 0x6e, 0xd5, 0x72, 0x3d, 0x64, 0x74, 0x1a, 0x5b, 0x3a, 0xbd, 0xee, 0x10, 0x10, + 0x3a, 0x32, 0x59, 0x45, 0x1f, 0x71, 0xb9, 0xd1, 0x8d, 0xd7, 0x94, 0x88, 0x96, 0xf2, 0x78, 0xdc, + 0x52, 0xdc, 0xbd, 0x6e, 0x80, 0xe9, 0x75, 0x7d, 0x98, 0x86, 0xaa, 0xbe, 0xd7, 0x25, 0xcd, 0x85, + 0x64, 0x4e, 0x3a, 0xce, 0xc5, 0x70, 0x92, 0x7e, 0xb3, 0xf9, 0xb7, 0x3c, 0xc8, 0xad, 0x38, 0x46, + 0x6f, 0x07, 0x3e, 0x9b, 0xeb, 0x9f, 0xc7, 0xd5, 0x26, 0x02, 0xed, 0x54, 0x86, 0x69, 0xa7, 0x3a, + 0x44, 0x3b, 0xb3, 0x9c, 0x76, 0x46, 0x2f, 0x3a, 0x9f, 0x05, 0xb3, 0x6d, 0xbb, 0xdb, 0x45, 0x6d, + 0x2c, 0x8f, 0x6a, 0x87, 0xac, 0xf6, 0x4c, 0xeb, 0x42, 0x1a, 0xb9, 0x08, 0x04, 0x79, 0x4d, 0xba, + 0xc6, 0x4e, 0x95, 0x3e, 0x4c, 0x80, 0x2f, 0x53, 0x40, 0xb6, 0xd2, 0xd9, 0x46, 0xc2, 0x3a, 0x7c, + 0x86, 0x5b, 0x87, 0x3f, 0x05, 0xf2, 0x9e, 0xe1, 0x6c, 0x23, 0xcf, 0x5f, 0x27, 0xa0, 0x4f, 0xc1, + 0xfd, 0x24, 0x2a, 0x77, 0x3f, 0xc9, 0x0f, 0x81, 0x2c, 0x96, 0x19, 0x73, 0x8b, 0x7f, 0xd8, 0x20, + 0xf8, 0x89, 0xec, 0x17, 0x70, 0x89, 0x0b, 0xe4, 0x56, 0x7b, 0xf2, 0x41, 0x3f, 0xd6, 0xb9, 0x83, + 0xf1, 0xb3, 0xaf, 0x03, 0xd3, 0x66, 0xdb, 0xb6, 0xaa, 0xbb, 0xc6, 0x36, 0x62, 0xd5, 0x0c, 0x13, + 0xfc, 0xb7, 0x95, 0x5d, 0xfb, 0x5e, 0x93, 0x2d, 0x6a, 0x85, 0x09, 0xb8, 0x0a, 0x3b, 0x66, 0xa7, + 0x83, 0x2c, 0xd6, 0xb2, 0xd9, 0xd3, 0xd9, 0x33, 0x20, 0x8b, 0x79, 0xc0, 0xfa, 0x83, 0x8d, 0x85, + 0xe2, 0x31, 0x6d, 0x16, 0x37, 0x2b, 0xda, 0x78, 0x8b, 0x19, 0x71, 0xcd, 0x55, 0xc6, 0x6b, 0x88, + 0x56, 0x6e, 0x70, 0xe3, 0x7a, 0x14, 0xc8, 0x59, 0x76, 0x07, 0x0d, 0x1d, 0x84, 0x68, 0x2e, 0xed, + 0x71, 0x20, 0x87, 0x3a, 0xb8, 0x57, 0x50, 0x49, 0xf6, 0x33, 0xf1, 0xb2, 0xd4, 0x69, 0xe6, 0x64, + 0xae, 0x49, 0x83, 0xb8, 0x4d, 0xbf, 0x01, 0xfe, 0xc4, 0x14, 0x38, 0x4e, 0xfb, 0x80, 0xe6, 0xde, + 0x45, 0x4c, 0xea, 0x22, 0x82, 0xaf, 0x1f, 0x3c, 0x70, 0x1d, 0x17, 0x95, 0xfd, 0x24, 0xc8, 0xb9, + 0x7b, 0x17, 0x03, 0x23, 0x94, 0x3e, 0xf0, 0x4d, 0x57, 0x19, 0xcb, 0x70, 0xa6, 0x8e, 0x3a, 0x9c, + 0x09, 0x43, 0x93, 0xea, 0x37, 0xfe, 0x70, 0x20, 0xa3, 0x07, 0x3a, 0xfc, 0x81, 0x6c, 0xd0, 0x30, + 0x74, 0x1a, 0x4c, 0x19, 0x5b, 0x1e, 0x72, 0x42, 0x33, 0x91, 0x3d, 0xe2, 0xa1, 0xf2, 0x22, 0xda, + 0xb2, 0x1d, 0x2c, 0x16, 0x1a, 0xcb, 0x3a, 0x78, 0xe6, 0x5a, 0x2e, 0x10, 0x76, 0xd0, 0x6e, 0x01, + 0x27, 0x2c, 0x7b, 0x09, 0xf5, 0x98, 0x9c, 0x29, 0x8a, 0x73, 0xa4, 0x05, 0x1c, 0x7c, 0x71, 0xa0, + 0x2b, 0x99, 0x3f, 0xd8, 0x95, 0xc0, 0xcf, 0x26, 0x9d, 0x33, 0xf7, 0x01, 0x3d, 0x36, 0x0b, 0x4d, + 0x7b, 0x22, 0x98, 0xed, 0x30, 0x0f, 0xb1, 0xb6, 0x19, 0xb4, 0x92, 0xc8, 0xef, 0x84, 0xcc, 0xa1, + 0x22, 0x65, 0x79, 0x45, 0x5a, 0x01, 0x05, 0x72, 0x1c, 0x1b, 0x6b, 0x52, 0xae, 0xcf, 0x23, 0x9f, + 0x4c, 0xeb, 0x82, 0x4a, 0x71, 0x62, 0x5b, 0x28, 0xb3, 0x4f, 0xf4, 0xe0, 0xe3, 0x64, 0xb3, 0xef, + 0x78, 0x09, 0xa5, 0xdf, 0x1c, 0x7f, 0x25, 0x0f, 0xae, 0x29, 0x3b, 0xb6, 0xeb, 0x92, 0x23, 0x38, + 0xfd, 0x0d, 0xf3, 0x8d, 0x8a, 0x70, 0x53, 0xd9, 0x03, 0xba, 0xf9, 0x0d, 0x6a, 0x50, 0x93, 0x6b, + 0x1a, 0x7f, 0x29, 0x1d, 0x69, 0x2b, 0xd8, 0x7f, 0x88, 0x10, 0xfa, 0x7f, 0x8e, 0x46, 0xf2, 0x9e, + 0x8c, 0x4c, 0xf0, 0xaf, 0x84, 0xb2, 0x4a, 0xbf, 0xb9, 0x7c, 0x49, 0x01, 0xd7, 0xf6, 0x73, 0xb3, + 0x61, 0xb9, 0x41, 0x83, 0x79, 0xc8, 0x90, 0xf6, 0x22, 0xc6, 0x6d, 0x89, 0xbd, 0x98, 0x3c, 0xa2, + 0xee, 0x5c, 0x69, 0x11, 0x8b, 0x25, 0xe1, 0x81, 0x9e, 0xb8, 0x8b, 0xc9, 0x13, 0x93, 0x4f, 0x5f, + 0xb8, 0x7f, 0x98, 0x05, 0xc7, 0x57, 0x1c, 0x7b, 0xaf, 0xe7, 0x86, 0x3d, 0xd0, 0x9f, 0x0d, 0xde, + 0x90, 0xcd, 0xcb, 0x98, 0x06, 0xd7, 0x83, 0x19, 0x87, 0x59, 0x73, 0xe1, 0xf6, 0x2c, 0x9f, 0xc4, + 0xf7, 0x5e, 0xea, 0x61, 0x7a, 0xaf, 0xb0, 0x9f, 0xc9, 0x0a, 0xfd, 0x4c, 0x7f, 0xcf, 0x91, 0x1b, + 0xd0, 0x73, 0x7c, 0x59, 0x49, 0x38, 0xa8, 0xf6, 0x89, 0x28, 0xa2, 0xbf, 0x28, 0x83, 0xfc, 0x36, + 0xc9, 0xc8, 0xba, 0x8b, 0x47, 0xca, 0xd5, 0x8c, 0x10, 0xd7, 0xd9, 0xa7, 0xa1, 0x5c, 0x55, 0x5e, + 0x87, 0x13, 0x0d, 0x70, 0xf1, 0xdc, 0xa6, 0xaf, 0x54, 0xaf, 0xcd, 0x82, 0xd9, 0xa0, 0xf4, 0x6a, + 0xc7, 0x15, 0x42, 0x52, 0x73, 0x1a, 0x35, 0x27, 0xa3, 0x51, 0x07, 0xd6, 0x99, 0x83, 0x51, 0x47, + 0xe5, 0x46, 0x9d, 0x81, 0xa3, 0xcb, 0x6c, 0xc4, 0xe8, 0x02, 0x9f, 0xa5, 0xca, 0xde, 0xf5, 0x29, + 0x76, 0xad, 0xa4, 0x36, 0x0f, 0xe4, 0xc1, 0x42, 0xf2, 0xc6, 0xd1, 0xe1, 0xb5, 0x4a, 0x5f, 0x49, + 0x3e, 0xa2, 0x80, 0x13, 0x07, 0x3b, 0xf3, 0x87, 0x8a, 0x5e, 0x6a, 0xb8, 0x4e, 0x6e, 0xe0, 0xa5, + 0x46, 0x9e, 0xc4, 0x4d, 0xba, 0xd8, 0x20, 0x28, 0x82, 0xbd, 0x37, 0xbc, 0x13, 0x97, 0x0b, 0x73, + 0x22, 0x49, 0x34, 0x7d, 0x01, 0xfe, 0xac, 0x0a, 0xa6, 0x9b, 0xc8, 0xab, 0x19, 0xfb, 0xf6, 0x9e, + 0x07, 0x0d, 0xd9, 0xed, 0xb9, 0x27, 0x80, 0x7c, 0x97, 0x7c, 0x42, 0x3a, 0x18, 0x3e, 0x52, 0x32, + 0xbf, 0xbf, 0x45, 0x7c, 0x83, 0x28, 0x69, 0x9d, 0xe5, 0x17, 0xa3, 0xcf, 0xc8, 0xec, 0x8e, 0x06, + 0xdc, 0x8d, 0x65, 0x6b, 0x27, 0xd1, 0xde, 0x69, 0x54, 0xd1, 0xe9, 0xc3, 0xf2, 0x5c, 0x15, 0xcc, + 0x35, 0x91, 0x57, 0x75, 0x97, 0x8d, 0xcb, 0xb6, 0x63, 0x7a, 0x08, 0xae, 0xc8, 0x42, 0x73, 0x06, + 0x00, 0x33, 0xf8, 0x8c, 0xc5, 0xc9, 0xe2, 0x52, 0xe0, 0x5b, 0x92, 0x3a, 0x0a, 0x09, 0x7c, 0x8c, + 0x05, 0x84, 0x44, 0x3e, 0x16, 0x71, 0xc5, 0xa7, 0x0f, 0xc4, 0x17, 0x14, 0x06, 0x44, 0xc9, 0x69, + 0xef, 0x98, 0x97, 0x51, 0x27, 0x21, 0x10, 0xfe, 0x67, 0x21, 0x10, 0x01, 0xa1, 0xc4, 0xee, 0x2b, + 0x02, 0x1f, 0xe3, 0x70, 0x5f, 0x89, 0x23, 0x38, 0x91, 0xb0, 0x56, 0xb8, 0xeb, 0x61, 0xeb, 0x99, + 0x77, 0xc9, 0x8a, 0x35, 0x34, 0xd9, 0x14, 0xde, 0x64, 0x1b, 0xa9, 0x63, 0xa1, 0x65, 0x0f, 0xd3, + 0xe9, 0x6c, 0x1a, 0x1d, 0xcb, 0xc0, 0xa2, 0xd3, 0x17, 0xfa, 0xfb, 0x54, 0x70, 0x75, 0x10, 0xef, + 0xa5, 0x89, 0xbc, 0x25, 0xc3, 0xdd, 0xb9, 0x68, 0x1b, 0x4e, 0x07, 0x96, 0xc7, 0x70, 0xe0, 0x10, + 0x7e, 0x9e, 0x07, 0xa1, 0x2e, 0x82, 0x30, 0xd0, 0x95, 0x74, 0x20, 0x2f, 0xe3, 0xe8, 0x64, 0x62, + 0xbd, 0x5d, 0xdf, 0x11, 0x80, 0xf5, 0x54, 0x01, 0xac, 0x27, 0x8d, 0xca, 0x62, 0xfa, 0xc0, 0xfd, + 0x3c, 0x1d, 0x11, 0x38, 0xaf, 0xe7, 0x0b, 0xb2, 0x80, 0x45, 0x78, 0xbd, 0xaa, 0x91, 0x5e, 0xaf, + 0x23, 0x8d, 0x11, 0x43, 0x3d, 0x96, 0xd3, 0x1d, 0x23, 0x8e, 0xd0, 0x1b, 0xf9, 0x5d, 0x2a, 0x28, + 0x92, 0x80, 0x5f, 0x9c, 0x47, 0x38, 0x1f, 0xf4, 0x3f, 0x1e, 0x9d, 0x03, 0xde, 0xe7, 0x53, 0x49, + 0xbd, 0xcf, 0xe1, 0x3b, 0x93, 0xfa, 0x98, 0xf7, 0x73, 0x3b, 0x16, 0xc4, 0x12, 0xb9, 0x90, 0x0f, + 0xe1, 0x20, 0x7d, 0xd0, 0x7e, 0x52, 0x05, 0x00, 0x37, 0x68, 0x76, 0x36, 0xe2, 0x69, 0xb2, 0x70, + 0xdd, 0xca, 0xfb, 0xdd, 0x63, 0xa0, 0xae, 0xee, 0x03, 0x8a, 0x52, 0x0c, 0x4f, 0x5d, 0xbc, 0x3e, + 0xa9, 0x6f, 0x65, 0xc8, 0xd5, 0x58, 0x60, 0x49, 0xe4, 0x6d, 0x19, 0x59, 0x76, 0xfa, 0x80, 0xfc, + 0xaa, 0x02, 0x72, 0x2d, 0xbb, 0x89, 0xbc, 0xc3, 0x9b, 0x02, 0x89, 0xa3, 0x06, 0x90, 0x72, 0xc7, + 0x11, 0x35, 0x60, 0x10, 0xa1, 0xf4, 0x45, 0xf7, 0x5e, 0x05, 0xcc, 0xb6, 0xec, 0x72, 0xb0, 0x38, + 0x25, 0xef, 0xab, 0xfa, 0x2f, 0x99, 0x84, 0x6b, 0x18, 0x7c, 0x31, 0x11, 0x02, 0x4b, 0xb4, 0x7a, + 0x10, 0x43, 0x2f, 0x7d, 0xb9, 0xdd, 0x0e, 0x8e, 0x6f, 0x58, 0x1d, 0x5b, 0x47, 0x1d, 0x9b, 0xad, + 0x74, 0x6b, 0x1a, 0xc8, 0xee, 0x59, 0x1d, 0x9b, 0xb0, 0x9c, 0xd3, 0xc9, 0x7f, 0x9c, 0xe6, 0xa0, + 0x8e, 0xcd, 0x7c, 0x03, 0xc8, 0x7f, 0xf8, 0x97, 0x2a, 0xc8, 0xe2, 0x6f, 0xe5, 0x45, 0xfd, 0x2e, + 0x35, 0x61, 0x1c, 0x04, 0x4c, 0x7e, 0x2c, 0x96, 0xd0, 0x5d, 0xdc, 0xda, 0xbf, 0xda, 0x77, 0xff, + 0x41, 0x5f, 0x79, 0x9c, 0x28, 0xc2, 0x35, 0x7f, 0xed, 0x34, 0x98, 0xba, 0xd8, 0xb5, 0xdb, 0x97, + 0xc2, 0xe3, 0xfa, 0xec, 0x51, 0xbb, 0x19, 0xe4, 0x1c, 0xc3, 0xda, 0x46, 0x6c, 0x4f, 0xe1, 0x64, + 0x5f, 0x5f, 0x48, 0xbc, 0x5e, 0x74, 0x9a, 0x05, 0xbe, 0x33, 0x49, 0x04, 0x86, 0x01, 0x95, 0x4f, + 0xa6, 0x0f, 0x4b, 0x23, 0x9c, 0x3c, 0x2b, 0x82, 0xd9, 0x72, 0xa9, 0x4e, 0x2f, 0x5f, 0x6d, 0x9c, + 0xab, 0x14, 0x55, 0x02, 0x33, 0x96, 0x49, 0x8a, 0x30, 0x63, 0xf2, 0xff, 0x69, 0x61, 0x1e, 0x50, + 0xf9, 0xa3, 0x80, 0xf9, 0x33, 0x0a, 0x98, 0xab, 0x99, 0xae, 0x17, 0xe5, 0xed, 0x1f, 0x13, 0xef, + 0xf7, 0x45, 0x49, 0x4d, 0x65, 0xa1, 0x1c, 0xe9, 0x40, 0xbf, 0x89, 0xcc, 0xe1, 0xb8, 0x22, 0x26, + 0x73, 0x2c, 0x85, 0x70, 0x80, 0xba, 0x28, 0x89, 0x24, 0x13, 0x1b, 0x4a, 0x61, 0x21, 0x93, 0x37, + 0x94, 0x22, 0xcb, 0x4e, 0x5f, 0xbe, 0x7f, 0xa9, 0x80, 0x13, 0xb8, 0xf8, 0xb8, 0x65, 0xa9, 0x68, + 0x31, 0x0f, 0x5d, 0x96, 0x4a, 0xbc, 0x32, 0x7e, 0x80, 0x97, 0x71, 0xac, 0x8c, 0x0f, 0x23, 0x3a, + 0x61, 0x31, 0x47, 0x2c, 0xc3, 0x0e, 0x13, 0x73, 0xcc, 0x32, 0xec, 0xe8, 0x62, 0x8e, 0x5f, 0x8a, + 0x1d, 0x51, 0xcc, 0x47, 0xb6, 0xc0, 0xfa, 0x4b, 0x6a, 0x20, 0xe6, 0xc8, 0xb5, 0x8d, 0x18, 0x31, + 0x27, 0x3e, 0xd1, 0x0b, 0xdf, 0x3d, 0xa2, 0xe0, 0xc7, 0xbc, 0xbe, 0x31, 0x0a, 0x4c, 0x47, 0xb8, + 0xc6, 0xf1, 0x0b, 0x2a, 0x98, 0x67, 0x5c, 0x0c, 0x9e, 0x32, 0xc7, 0x60, 0x94, 0x78, 0xca, 0x9c, + 0xf8, 0x0c, 0x90, 0xc8, 0xd9, 0xe4, 0xcf, 0x00, 0xc5, 0x96, 0x9f, 0x3e, 0x38, 0x5f, 0xcf, 0x82, + 0x53, 0x98, 0x85, 0x35, 0xbb, 0x63, 0x6e, 0xed, 0x53, 0x2e, 0xce, 0x19, 0xdd, 0x3d, 0xe4, 0xc2, + 0x0f, 0x28, 0xb2, 0x28, 0xfd, 0x57, 0x00, 0xec, 0x1e, 0x72, 0x68, 0x1c, 0x37, 0x06, 0xd4, 0x9d, + 0x51, 0x95, 0x3d, 0x58, 0x52, 0x70, 0x7d, 0x4e, 0xc3, 0x27, 0xa2, 0x73, 0xf4, 0xb0, 0x55, 0x38, + 0x1d, 0xbc, 0xe9, 0x77, 0xf0, 0xc8, 0x1c, 0x74, 0xf0, 0xb8, 0x09, 0xa8, 0x46, 0xa7, 0x13, 0x40, + 0xd5, 0xbf, 0x99, 0x4d, 0xca, 0xd4, 0x71, 0x16, 0x9c, 0xd3, 0x45, 0xe1, 0xd1, 0xbc, 0x88, 0x9c, + 0x2e, 0xf2, 0xb4, 0x05, 0x90, 0x77, 0x48, 0x4c, 0xe2, 0x60, 0x45, 0x7f, 0x70, 0x66, 0x96, 0x4b, + 0x34, 0xed, 0x1a, 0xa2, 0x1a, 0xde, 0x9e, 0x48, 0x32, 0x83, 0xfa, 0xe9, 0xd0, 0x4e, 0xd6, 0x05, + 0x05, 0x7b, 0xf2, 0xc8, 0x94, 0x27, 0xb3, 0x1b, 0x56, 0xea, 0xf5, 0xba, 0xfb, 0x2d, 0x16, 0x78, + 0x20, 0xd1, 0x6e, 0x18, 0x17, 0xbf, 0x40, 0x39, 0x10, 0xbf, 0x20, 0xf1, 0x6e, 0x98, 0xc0, 0xc7, + 0x38, 0x76, 0xc3, 0xe2, 0x08, 0xa6, 0x2f, 0xda, 0x6f, 0x16, 0xa8, 0xd5, 0xcc, 0x6e, 0x23, 0xf8, + 0x87, 0xc1, 0x9e, 0xd5, 0x40, 0x74, 0x76, 0x19, 0x74, 0x51, 0x41, 0xec, 0x2d, 0x2c, 0xda, 0xe3, + 0x40, 0x7e, 0xcb, 0x76, 0x76, 0x0d, 0x7f, 0xe3, 0xbe, 0xff, 0xa4, 0x08, 0xbb, 0x01, 0x60, 0x99, + 0xe4, 0xd1, 0x59, 0x5e, 0x3c, 0x1f, 0x79, 0xa6, 0xd9, 0x63, 0x41, 0x1f, 0xf1, 0x5f, 0xed, 0x06, + 0x30, 0xc7, 0x62, 0x3f, 0xd6, 0x91, 0xeb, 0xa1, 0x0e, 0x8b, 0x68, 0x21, 0x26, 0x6a, 0x67, 0xc1, + 0x2c, 0x4b, 0x58, 0x36, 0xbb, 0xc8, 0x65, 0x41, 0x2d, 0x84, 0x34, 0xed, 0x14, 0xc8, 0x9b, 0xee, + 0xdd, 0xae, 0x6d, 0xb1, 0x80, 0x7c, 0xec, 0x49, 0xbb, 0x09, 0x1c, 0x67, 0xf9, 0x02, 0x63, 0x95, + 0x1e, 0xd8, 0xe9, 0x4f, 0xc6, 0xaa, 0x65, 0xd9, 0xeb, 0x8e, 0xbd, 0xed, 0x20, 0xd7, 0x25, 0xa7, + 0xa6, 0x0a, 0x3a, 0x97, 0xa2, 0x5d, 0x00, 0x27, 0xba, 0xa6, 0x75, 0xc9, 0x25, 0x31, 0x82, 0x97, + 0x99, 0xdb, 0xd8, 0xec, 0x80, 0xd8, 0xdd, 0x5c, 0x63, 0x63, 0x72, 0xe0, 0x3f, 0xd1, 0x0f, 0x52, + 0xd1, 0x6e, 0x06, 0x45, 0xc6, 0xcd, 0xa2, 0xd1, 0xbe, 0x44, 0xde, 0x33, 0x77, 0xd4, 0x03, 0xe9, + 0x9c, 0x30, 0x68, 0x18, 0xfd, 0x79, 0x41, 0x18, 0x34, 0x92, 0xfe, 0x4b, 0x32, 0x60, 0x56, 0x28, + 0xc0, 0x00, 0x9a, 0xdf, 0x2d, 0xba, 0xe7, 0x77, 0x4c, 0x0f, 0x61, 0xe6, 0xd8, 0x59, 0x97, 0xc7, + 0x0c, 0x61, 0x5e, 0x3f, 0xf0, 0xa1, 0x3e, 0x80, 0x18, 0xe6, 0x8b, 0x76, 0x78, 0xc4, 0xb3, 0xcc, + 0x65, 0xb6, 0xaa, 0x90, 0x06, 0x9f, 0x09, 0xb4, 0x83, 0xd4, 0x38, 0x2f, 0x90, 0x4c, 0x32, 0x2f, + 0x10, 0x2c, 0x37, 0xa3, 0xdb, 0xb5, 0xaf, 0xa0, 0x4e, 0x40, 0x96, 0xe9, 0xea, 0x81, 0x74, 0xf8, + 0xb9, 0x51, 0xe6, 0x85, 0x89, 0x2f, 0xd6, 0xc0, 0x8d, 0x6c, 0xaf, 0xdd, 0x46, 0xa8, 0xc3, 0x0e, + 0xae, 0xf9, 0x8f, 0x09, 0xaf, 0xdc, 0x48, 0x3c, 0x8b, 0x3c, 0xa2, 0x3b, 0x37, 0xde, 0x1f, 0xde, + 0x7c, 0xb2, 0x27, 0xd3, 0xd5, 0xc4, 0x9d, 0x8f, 0x1f, 0xa9, 0x53, 0x81, 0xef, 0x4d, 0x7a, 0x5a, + 0x34, 0x16, 0xd3, 0x53, 0x78, 0x70, 0x77, 0xf7, 0xba, 0xc1, 0x71, 0x27, 0xfa, 0x94, 0x10, 0xbd, + 0x44, 0x07, 0x48, 0x8f, 0x08, 0xb9, 0x8f, 0x5f, 0x0d, 0xf2, 0xf4, 0xe6, 0x42, 0xf8, 0x92, 0xf9, + 0x81, 0xd0, 0xcd, 0x8b, 0xd0, 0x6d, 0x80, 0x59, 0xcb, 0xc6, 0xc5, 0xad, 0x1b, 0x8e, 0xb1, 0xeb, + 0xc6, 0x2d, 0xef, 0x53, 0xba, 0x81, 0x2d, 0x57, 0xe7, 0x3e, 0x5b, 0x3d, 0xa6, 0x0b, 0x64, 0xb4, + 0xff, 0x0b, 0x1c, 0xbf, 0xc8, 0x42, 0x73, 0xb8, 0x8c, 0xb2, 0x12, 0xed, 0xfc, 0xda, 0x47, 0x79, + 0x51, 0xfc, 0x72, 0xf5, 0x98, 0xde, 0x4f, 0x4c, 0xfb, 0x2f, 0x60, 0x1e, 0x3f, 0x76, 0xec, 0x2b, + 0x3e, 0xe3, 0x6a, 0xf4, 0x0c, 0xa0, 0x8f, 0xfc, 0x9a, 0xf0, 0xe1, 0xea, 0x31, 0xbd, 0x8f, 0x94, + 0xd6, 0x00, 0x60, 0xc7, 0xdb, 0xed, 0x32, 0xc2, 0xd9, 0xe8, 0xce, 0xa4, 0x8f, 0xf0, 0x6a, 0xf0, + 0xd1, 0xea, 0x31, 0x9d, 0x23, 0xa1, 0xd5, 0xc0, 0xb4, 0x77, 0x9f, 0xc7, 0xe8, 0xe5, 0xa2, 0xbd, + 0x4e, 0xfa, 0xe8, 0xb5, 0xfc, 0x6f, 0x56, 0x8f, 0xe9, 0x21, 0x01, 0xad, 0x0a, 0x0a, 0xbd, 0x8b, + 0x8c, 0x58, 0x3e, 0x7a, 0xa4, 0xea, 0x23, 0xb6, 0x7e, 0x31, 0xa0, 0x15, 0x7c, 0x8e, 0x19, 0x6b, + 0xbb, 0x97, 0x19, 0xad, 0x29, 0x69, 0xc6, 0xca, 0xfe, 0x37, 0x98, 0xb1, 0x80, 0x80, 0x56, 0x05, + 0xd3, 0xae, 0x65, 0xf4, 0xdc, 0x1d, 0xdb, 0x73, 0x4f, 0x17, 0xfa, 0x1c, 0x94, 0xa3, 0xa9, 0x35, + 0xd9, 0x37, 0x7a, 0xf8, 0xb5, 0xf6, 0x38, 0x70, 0xf5, 0x5e, 0xaf, 0x63, 0x78, 0xa8, 0x72, 0x9f, + 0xe9, 0x86, 0xb7, 0x57, 0xfa, 0xe7, 0x72, 0x07, 0xbf, 0xd4, 0x16, 0xd8, 0x51, 0x45, 0x40, 0xda, + 0x25, 0xec, 0xdf, 0x25, 0xa7, 0xc5, 0x72, 0x27, 0x14, 0x9f, 0x08, 0xb2, 0xf8, 0x15, 0x31, 0x0b, + 0xe6, 0x07, 0xaf, 0xc0, 0xf7, 0xeb, 0x0e, 0x69, 0xc0, 0xf8, 0xa3, 0x3e, 0xcb, 0x62, 0xf6, 0x80, + 0x65, 0x71, 0x3d, 0x98, 0x31, 0xdd, 0x35, 0x73, 0x9b, 0x4e, 0x6b, 0xd8, 0xc8, 0xcf, 0x27, 0xd1, + 0x65, 0xa0, 0x3a, 0xba, 0x42, 0x87, 0xfc, 0xe3, 0xfe, 0x32, 0x90, 0x9f, 0x02, 0x6f, 0x04, 0xb3, + 0x7c, 0x23, 0xa3, 0x77, 0x42, 0x9b, 0xe1, 0xa4, 0x88, 0x3d, 0xc1, 0x1b, 0xc0, 0xbc, 0xa8, 0xd3, + 0x9c, 0xed, 0xa7, 0xfa, 0x83, 0x18, 0x7c, 0x18, 0x38, 0xde, 0xd7, 0xb0, 0xfc, 0x60, 0x3f, 0x99, + 0x30, 0xd8, 0xcf, 0xf5, 0x00, 0x84, 0x5a, 0x3c, 0x90, 0xcc, 0x43, 0xc0, 0x74, 0xa0, 0x97, 0x03, + 0x33, 0x7c, 0x2d, 0x03, 0x0a, 0xbe, 0xb2, 0x0d, 0xca, 0x80, 0x6d, 0x0a, 0x8b, 0xdb, 0xd9, 0xf3, + 0x6d, 0x0a, 0x3e, 0x0d, 0x1b, 0x78, 0xa1, 0x3f, 0x7d, 0xcb, 0xf4, 0xba, 0xfe, 0x99, 0xd4, 0xfe, + 0x64, 0x6d, 0x1d, 0x00, 0x93, 0x60, 0xd4, 0x0a, 0x0f, 0xa9, 0x3e, 0x3a, 0x41, 0x7b, 0xa0, 0xfa, + 0xc0, 0xd1, 0x38, 0xfb, 0x50, 0x76, 0x82, 0x74, 0x1a, 0xe4, 0xe8, 0x05, 0x0b, 0xc7, 0xb4, 0x79, + 0x00, 0x2a, 0x4f, 0x5b, 0xaf, 0xe8, 0xd5, 0x4a, 0xbd, 0x5c, 0x29, 0x66, 0xe0, 0xcb, 0x15, 0x30, + 0x1d, 0x34, 0x82, 0x81, 0x95, 0xac, 0x30, 0xd5, 0x1a, 0x7a, 0xc3, 0xec, 0xc1, 0x46, 0xc5, 0x2b, + 0xd9, 0x13, 0xc0, 0x83, 0xf6, 0x5c, 0xb4, 0x6c, 0x3a, 0xae, 0xa7, 0xdb, 0x57, 0x96, 0x6d, 0x27, + 0x34, 0x89, 0x68, 0x68, 0xe2, 0xa8, 0xd7, 0xd8, 0xd4, 0xef, 0x20, 0x72, 0x5a, 0x11, 0x39, 0x6c, + 0xcb, 0x26, 0x4c, 0xc0, 0x74, 0x3d, 0xc7, 0xb0, 0xdc, 0x9e, 0xed, 0x22, 0xdd, 0xbe, 0xe2, 0x96, + 0xac, 0x4e, 0xd9, 0xee, 0xee, 0xed, 0x5a, 0x2e, 0x33, 0xd6, 0xa3, 0x5e, 0x63, 0xe9, 0x90, 0xfb, + 0xa3, 0xe7, 0x01, 0x28, 0x37, 0x6a, 0xb5, 0x4a, 0xb9, 0x55, 0x6d, 0xd4, 0x8b, 0xc7, 0xb0, 0xb4, + 0x5a, 0xa5, 0xc5, 0x1a, 0x96, 0xce, 0xd3, 0x41, 0xc1, 0x6f, 0xd3, 0x2c, 0x3e, 0x51, 0xc6, 0x8f, + 0x4f, 0xa4, 0x95, 0x40, 0xc1, 0x6f, 0xe5, 0x6c, 0x44, 0x78, 0x78, 0xff, 0x79, 0xf4, 0x5d, 0xc3, + 0xf1, 0x88, 0x69, 0xe9, 0x13, 0x59, 0x34, 0x5c, 0xa4, 0x07, 0x9f, 0x9d, 0x7d, 0x14, 0xe3, 0x40, + 0x03, 0xf3, 0xa5, 0x5a, 0x6d, 0xb3, 0xa1, 0x6f, 0xd6, 0x1b, 0xad, 0xd5, 0x6a, 0x7d, 0x85, 0x8e, + 0x90, 0xd5, 0x95, 0x7a, 0x43, 0xaf, 0xd0, 0x01, 0xb2, 0x59, 0xcc, 0xdc, 0x91, 0xbd, 0xff, 0xeb, + 0x6a, 0x66, 0xb1, 0x00, 0xf2, 0x3d, 0x22, 0x5d, 0xf8, 0x25, 0x35, 0xa1, 0x69, 0x11, 0xe0, 0x14, + 0x71, 0xc3, 0xb2, 0x70, 0x18, 0x44, 0x19, 0x70, 0x58, 0xfb, 0x2c, 0x98, 0xa5, 0xe6, 0x90, 0x4b, + 0xf6, 0xd5, 0x08, 0x72, 0xaa, 0x2e, 0xa4, 0xc1, 0x4f, 0x28, 0x09, 0x8c, 0x8b, 0x81, 0x1c, 0x25, + 0x33, 0x2e, 0xfe, 0x28, 0x33, 0xda, 0x75, 0x24, 0xd5, 0x7a, 0xab, 0xa2, 0xd7, 0x4b, 0x35, 0x96, + 0x45, 0xd5, 0x4e, 0x83, 0x93, 0xf5, 0x06, 0x0b, 0xc6, 0xd9, 0xdc, 0x6c, 0x35, 0x36, 0xab, 0x6b, + 0xeb, 0x0d, 0xbd, 0x55, 0xcc, 0x69, 0xa7, 0x80, 0x46, 0xff, 0x6f, 0x56, 0x9b, 0x9b, 0xe5, 0x52, + 0xbd, 0x5c, 0xa9, 0x55, 0x96, 0x8a, 0x79, 0xed, 0x11, 0xe0, 0x61, 0xf4, 0x7a, 0xab, 0xc6, 0xf2, + 0xa6, 0xde, 0x38, 0xdf, 0xc4, 0x08, 0xea, 0x95, 0x5a, 0x09, 0x2b, 0x52, 0x33, 0xbc, 0xf3, 0x6a, + 0x4a, 0xbb, 0x0a, 0x1c, 0x5f, 0xae, 0xd6, 0x2a, 0xe4, 0x36, 0x5a, 0x56, 0x5e, 0x41, 0xbb, 0x0e, + 0x9c, 0xae, 0xd6, 0x9b, 0x1b, 0xcb, 0xcb, 0xd5, 0x72, 0xb5, 0x52, 0x6f, 0x6d, 0xae, 0x57, 0xf4, + 0xb5, 0x6a, 0xb3, 0x89, 0xbf, 0x2d, 0x4e, 0xc3, 0x8f, 0xab, 0x20, 0x4f, 0xfb, 0x4c, 0x6c, 0xc4, + 0xce, 0x9d, 0x33, 0xba, 0x26, 0x1e, 0x28, 0x5a, 0xf6, 0x25, 0x64, 0xf5, 0x9d, 0xe3, 0xf2, 0x70, + 0x9a, 0x7f, 0x12, 0x84, 0x3c, 0xc0, 0x1f, 0x53, 0x13, 0x9e, 0xe3, 0x62, 0x40, 0xd0, 0x12, 0x17, + 0x84, 0xd2, 0x22, 0x56, 0x1d, 0x5e, 0xa3, 0x24, 0x38, 0xc7, 0x25, 0x4f, 0x3e, 0x19, 0xf8, 0xbf, + 0x38, 0x2e, 0xf0, 0x8b, 0x60, 0x76, 0xa3, 0x5e, 0xda, 0x68, 0xad, 0x36, 0xf4, 0xea, 0x0f, 0x93, + 0x5b, 0x08, 0xe6, 0xc0, 0xf4, 0x72, 0x43, 0x5f, 0xac, 0x2e, 0x2d, 0x55, 0xea, 0xc5, 0x9c, 0xf6, + 0x20, 0x70, 0x55, 0xb3, 0xa2, 0x9f, 0xab, 0x96, 0x2b, 0x9b, 0x1b, 0xf5, 0xd2, 0xb9, 0x52, 0xb5, + 0x46, 0xfa, 0x88, 0x7c, 0xcc, 0x4d, 0xf5, 0x53, 0xf0, 0x47, 0xb2, 0x00, 0xd0, 0xaa, 0x93, 0x4b, + 0xb8, 0xb8, 0x0b, 0xd2, 0xff, 0x24, 0xe9, 0x74, 0x2f, 0x24, 0x13, 0xd1, 0x7e, 0xab, 0xa0, 0xe0, + 0xb0, 0x17, 0x6c, 0x5d, 0x73, 0x18, 0x1d, 0xfa, 0xd7, 0xa7, 0xa6, 0x07, 0x9f, 0xc3, 0x0f, 0x24, + 0x99, 0xdd, 0x45, 0x32, 0x36, 0x91, 0x9b, 0x9e, 0xfb, 0x81, 0x84, 0x2f, 0xcc, 0x80, 0x79, 0xb1, + 0x62, 0xb8, 0x12, 0xc4, 0x98, 0x92, 0xab, 0x84, 0xf8, 0x31, 0x67, 0x64, 0x9d, 0x7d, 0x2c, 0x1b, + 0x4e, 0x81, 0xdf, 0x32, 0x69, 0x48, 0x06, 0xdf, 0x62, 0x29, 0x66, 0x30, 0xf3, 0xd8, 0xe8, 0x28, + 0x2a, 0xda, 0x14, 0x50, 0x5b, 0xf7, 0x79, 0x45, 0x15, 0x7e, 0x2a, 0x0b, 0xe6, 0x84, 0x1b, 0xd8, + 0xe1, 0x9f, 0x66, 0x64, 0x6e, 0x37, 0xe6, 0xee, 0x76, 0xcf, 0x1c, 0xf6, 0x6e, 0xf7, 0xb3, 0x26, + 0x98, 0x62, 0x69, 0x44, 0xbe, 0x8d, 0x3a, 0x36, 0x05, 0x8e, 0x83, 0x99, 0x95, 0x4a, 0x6b, 0xb3, + 0xd9, 0x2a, 0xe9, 0xad, 0xca, 0x52, 0x31, 0x83, 0x07, 0xbe, 0xca, 0xda, 0x7a, 0xeb, 0x42, 0x51, + 0xc1, 0x63, 0xe2, 0xca, 0x46, 0x75, 0xa9, 0xb2, 0xd9, 0xa8, 0xd7, 0x2e, 0x14, 0x55, 0xdc, 0x03, + 0x72, 0x79, 0x37, 0xd7, 0x1a, 0x8b, 0xd5, 0x5a, 0xa5, 0x98, 0xc5, 0xcd, 0x86, 0x7c, 0xe2, 0xa7, + 0xe4, 0x44, 0xdf, 0x68, 0x99, 0x15, 0xce, 0xfe, 0x2a, 0x1c, 0xde, 0x45, 0x24, 0xc9, 0x15, 0xf2, + 0x89, 0xd6, 0x4e, 0xe3, 0x58, 0x4d, 0x7f, 0x46, 0xfc, 0x59, 0x15, 0x14, 0x29, 0x07, 0x95, 0xfb, + 0x7a, 0xc8, 0x31, 0x91, 0xd5, 0x46, 0xf0, 0x92, 0x4c, 0x40, 0xe0, 0x03, 0xa1, 0x30, 0xc9, 0xa8, + 0xc1, 0xd9, 0xa2, 0xf4, 0xa1, 0xcf, 0x8c, 0xcf, 0x1e, 0x30, 0xe3, 0x7f, 0x2f, 0xa9, 0x07, 0x6e, + 0x3f, 0xbb, 0x63, 0xd9, 0xb3, 0xfa, 0x74, 0x12, 0x0f, 0xdc, 0x21, 0x1c, 0x4c, 0x24, 0xce, 0x77, + 0xc4, 0x28, 0x5f, 0x54, 0xe1, 0x0b, 0x54, 0x70, 0x7c, 0xc9, 0xf0, 0xd0, 0xe2, 0x7e, 0xcb, 0xbf, + 0x47, 0x35, 0xe2, 0xee, 0xf3, 0xcc, 0x81, 0xbb, 0xcf, 0xc3, 0xab, 0x58, 0x95, 0xbe, 0xab, 0x58, + 0xe1, 0x7b, 0x92, 0x9e, 0xd9, 0xed, 0xe3, 0x61, 0x6c, 0xc1, 0xb8, 0x93, 0x9d, 0xc5, 0x8d, 0xe7, + 0x22, 0xfd, 0x06, 0xf6, 0xf6, 0x69, 0x50, 0xa4, 0xac, 0x70, 0x4e, 0xa6, 0x3f, 0xab, 0x02, 0xb5, + 0xd4, 0xe9, 0xc0, 0xcd, 0x04, 0x31, 0x3d, 0xfd, 0x28, 0x29, 0x8a, 0x18, 0x25, 0x45, 0xd8, 0xb3, + 0x50, 0xfb, 0x1d, 0x83, 0x92, 0x9e, 0x46, 0xe0, 0x3c, 0x4a, 0xa3, 0xc3, 0x28, 0xa7, 0x77, 0x1a, + 0x21, 0xb6, 0xf8, 0xc9, 0x5c, 0x69, 0xcd, 0x6e, 0x91, 0xad, 0xc8, 0x22, 0x13, 0x7f, 0x73, 0x7f, + 0xd2, 0xe3, 0x05, 0x82, 0x47, 0x6f, 0xcc, 0x75, 0xf6, 0xe9, 0x1d, 0x2f, 0x18, 0xc6, 0x41, 0xfa, + 0x28, 0x7c, 0x4f, 0x01, 0xd9, 0xa6, 0xed, 0x78, 0xe3, 0xc2, 0x20, 0xa9, 0x4b, 0x04, 0x27, 0x81, + 0x66, 0xf4, 0xcc, 0x36, 0x3d, 0x97, 0x88, 0xf8, 0xf2, 0x27, 0x10, 0x16, 0xf5, 0x38, 0x98, 0xa7, + 0x9c, 0x04, 0x77, 0x0a, 0xfd, 0xab, 0x42, 0xfb, 0xab, 0x7b, 0x64, 0x11, 0x21, 0x1b, 0x63, 0x81, + 0x4b, 0x82, 0x0f, 0x8a, 0x90, 0x06, 0xdf, 0xc8, 0xe3, 0xb2, 0x24, 0xe2, 0x32, 0x68, 0x5e, 0x1f, + 0x5c, 0xcb, 0x33, 0xae, 0x9e, 0x29, 0x49, 0x84, 0xd5, 0x98, 0xc2, 0xd3, 0x47, 0xe4, 0x39, 0x2a, + 0xc8, 0x33, 0x97, 0xd0, 0xb1, 0x22, 0x90, 0xb4, 0x65, 0x04, 0x42, 0x90, 0x73, 0x1d, 0x55, 0xc7, + 0xdd, 0x32, 0xe2, 0xcb, 0x4f, 0x1f, 0x87, 0x7f, 0x67, 0xbe, 0xce, 0xa5, 0xcb, 0x86, 0xd9, 0x35, + 0x2e, 0x76, 0x13, 0x44, 0x36, 0xff, 0x44, 0xc2, 0xd3, 0x9d, 0x41, 0x55, 0x85, 0xf2, 0x22, 0x24, + 0xfe, 0x83, 0x60, 0xda, 0x11, 0xf6, 0x82, 0xb1, 0x15, 0xd5, 0xe7, 0x67, 0xce, 0xde, 0xeb, 0x61, + 0xce, 0x44, 0x47, 0x39, 0xa5, 0xf8, 0x99, 0xc8, 0xd1, 0xb3, 0x99, 0x52, 0xa7, 0xb3, 0x8c, 0x0c, + 0x6f, 0xcf, 0x41, 0x9d, 0x44, 0x43, 0x84, 0xd3, 0xb7, 0x5d, 0xce, 0x49, 0x42, 0x88, 0x2d, 0x5a, + 0x13, 0xd1, 0x79, 0xfc, 0x90, 0xde, 0xc0, 0xe7, 0x65, 0x2c, 0x5d, 0xd2, 0xdb, 0x02, 0x48, 0x1a, + 0x02, 0x24, 0x4f, 0x1c, 0x8d, 0x89, 0xf4, 0x01, 0x79, 0xa9, 0x0a, 0xe6, 0xa9, 0x9d, 0x30, 0x6e, + 0x4c, 0x3e, 0x9c, 0xd0, 0x85, 0x8c, 0xbb, 0xb5, 0x8d, 0x67, 0x67, 0x2c, 0xb0, 0x24, 0x71, 0x38, + 0x93, 0xe3, 0x23, 0x7d, 0x64, 0xfe, 0xd7, 0x55, 0x00, 0x70, 0x6e, 0xc1, 0x9f, 0xc8, 0x87, 0x71, + 0x3e, 0xe1, 0x3b, 0xd9, 0xfc, 0xa3, 0x29, 0x04, 0x9d, 0xe7, 0x5c, 0x7e, 0x83, 0x6d, 0x2f, 0x31, + 0x51, 0x6a, 0x54, 0xf9, 0xa3, 0x84, 0x36, 0x2f, 0x73, 0xca, 0x1d, 0x3a, 0xb8, 0x8f, 0xd8, 0xcb, + 0x7d, 0x32, 0x81, 0xf1, 0x3b, 0x8c, 0x95, 0x64, 0xa8, 0xd5, 0x46, 0x98, 0xd9, 0x9f, 0x06, 0x27, + 0xf5, 0x4a, 0x69, 0xa9, 0x51, 0xaf, 0x5d, 0xe0, 0xaf, 0xf0, 0x2a, 0xaa, 0xfc, 0xe4, 0x24, 0x15, + 0xd8, 0x5e, 0x97, 0xb0, 0x0f, 0x14, 0x65, 0x15, 0x37, 0x5b, 0xe1, 0x16, 0x57, 0x86, 0xf7, 0x6a, + 0x12, 0x64, 0x8f, 0x12, 0x85, 0x6f, 0xe5, 0xc1, 0x8c, 0x8e, 0xda, 0xf6, 0xee, 0x2e, 0xb2, 0x3a, + 0xa8, 0x03, 0x5f, 0xa7, 0x82, 0xd9, 0x60, 0x57, 0xb1, 0x89, 0x3c, 0xf8, 0x5f, 0x42, 0x6c, 0xce, + 0x82, 0x59, 0x5c, 0xb9, 0x86, 0x78, 0x91, 0x80, 0x90, 0xa6, 0xdd, 0x02, 0x4e, 0xf8, 0x28, 0x34, + 0xfa, 0xa6, 0x30, 0x07, 0x5f, 0x88, 0x7e, 0x3f, 0x1b, 0x22, 0x46, 0x77, 0x45, 0x0b, 0x33, 0x60, + 0x77, 0x81, 0x67, 0x35, 0x02, 0xac, 0x3f, 0x08, 0xc0, 0x7a, 0x9a, 0x00, 0xd6, 0xd2, 0x21, 0xe9, + 0x1f, 0x25, 0x6a, 0x1f, 0x52, 0xc1, 0x49, 0xbf, 0x23, 0x9e, 0x1c, 0x5a, 0x9f, 0xe4, 0xd1, 0x7a, + 0xba, 0x88, 0xd6, 0x8a, 0x8c, 0x34, 0x07, 0xb1, 0x1c, 0x81, 0xda, 0x17, 0x03, 0xd4, 0xfe, 0x9b, + 0x80, 0x5a, 0x6d, 0x4c, 0xe5, 0x1c, 0x25, 0x7a, 0x1f, 0x56, 0xc1, 0x69, 0x6c, 0x76, 0x96, 0x6d, + 0x6b, 0xab, 0x6b, 0xb6, 0x3d, 0xd3, 0xda, 0x0e, 0x5d, 0x1c, 0x57, 0x64, 0x56, 0x36, 0xfb, 0xb1, + 0x55, 0x0e, 0x62, 0x2b, 0xee, 0x31, 0xc8, 0xb6, 0xad, 0x28, 0xb6, 0x22, 0x86, 0x30, 0xce, 0x79, + 0x3f, 0xd4, 0x1c, 0x3e, 0x29, 0x79, 0xeb, 0x93, 0xe4, 0xe0, 0x28, 0xf1, 0xfb, 0x9a, 0x02, 0x4e, + 0xe9, 0xc8, 0xb5, 0xbb, 0x97, 0x11, 0xf5, 0x65, 0xf5, 0xf9, 0x75, 0xe1, 0xa3, 0x12, 0xb5, 0x3f, + 0xf8, 0x52, 0x1e, 0xa3, 0xa6, 0x88, 0xd1, 0x93, 0xa2, 0x35, 0x7d, 0x50, 0xd1, 0x11, 0xed, 0xe8, + 0xbd, 0x81, 0xfc, 0xcf, 0x09, 0xf2, 0x5f, 0x3c, 0x14, 0xf5, 0x09, 0x2c, 0x11, 0x00, 0xce, 0xbc, + 0x7b, 0xbe, 0x0a, 0x8a, 0xc4, 0x67, 0x99, 0x8c, 0x9e, 0xec, 0x0e, 0xe1, 0x86, 0x78, 0x9a, 0xa5, + 0xe7, 0x2b, 0xa1, 0x7f, 0x9a, 0xc5, 0x4f, 0xd0, 0x6e, 0x04, 0xf3, 0xed, 0x1d, 0xd4, 0xbe, 0x54, + 0xb5, 0x7c, 0xaf, 0x32, 0xea, 0x82, 0xd4, 0x97, 0x2a, 0x1a, 0x0c, 0xf7, 0x88, 0x60, 0x88, 0x8b, + 0xbb, 0xc2, 0xe4, 0x91, 0x67, 0x2a, 0x02, 0x84, 0xdf, 0x0a, 0x40, 0xa8, 0x0b, 0x20, 0xdc, 0x31, + 0x12, 0xd5, 0x64, 0xc2, 0xaf, 0x8f, 0xa0, 0xfa, 0x10, 0x9c, 0x6a, 0xac, 0xb7, 0xaa, 0x8d, 0xfa, + 0xe6, 0x46, 0xb3, 0xb2, 0xb4, 0xb9, 0xe8, 0x37, 0x80, 0x66, 0x51, 0x85, 0xdf, 0x50, 0xc0, 0x14, + 0x65, 0xcb, 0x85, 0x8f, 0x0c, 0x21, 0x18, 0x7a, 0x8c, 0x07, 0xbe, 0x5d, 0x3a, 0x28, 0x57, 0x20, + 0x08, 0x56, 0x4e, 0x44, 0xe7, 0xf3, 0x04, 0x30, 0x45, 0x41, 0xf6, 0x77, 0x5a, 0xce, 0x44, 0x58, + 0xcf, 0x8c, 0x8c, 0xee, 0x67, 0x97, 0x0c, 0xd0, 0x35, 0x84, 0x8d, 0xf4, 0xdb, 0xc0, 0xb3, 0xb2, + 0x74, 0x79, 0xe6, 0xbc, 0xe9, 0xed, 0x90, 0x53, 0x3e, 0xf0, 0xa9, 0x32, 0x83, 0xc3, 0x2d, 0x20, + 0x77, 0x19, 0xe7, 0x1e, 0x72, 0x62, 0x8a, 0x66, 0x82, 0xbf, 0x28, 0x1d, 0x0f, 0x5e, 0xd0, 0xcf, + 0x80, 0xa7, 0x08, 0x70, 0xd6, 0x40, 0xb6, 0x6b, 0xba, 0x1e, 0x9b, 0xd7, 0xdc, 0x9e, 0x88, 0x90, + 0xff, 0xa7, 0xea, 0xa1, 0x5d, 0x9d, 0x90, 0x81, 0x77, 0x63, 0xab, 0x34, 0x4c, 0x95, 0x38, 0x35, + 0x76, 0x1a, 0x4c, 0xb1, 0x68, 0x06, 0x6c, 0xeb, 0xcf, 0x7f, 0x94, 0xdc, 0x6e, 0x93, 0xaa, 0x6d, + 0xfa, 0x3a, 0xf0, 0xff, 0x1e, 0x07, 0x53, 0xab, 0xa6, 0xeb, 0xd9, 0xce, 0x3e, 0x7c, 0x7d, 0x06, + 0x4c, 0x9d, 0x43, 0x8e, 0x6b, 0xda, 0xd6, 0x01, 0x47, 0xbb, 0xeb, 0xc1, 0x4c, 0xcf, 0x41, 0x97, + 0x4d, 0x7b, 0xcf, 0xe5, 0x46, 0x62, 0x2e, 0x49, 0x83, 0xa0, 0x60, 0xec, 0x79, 0x3b, 0xb6, 0x13, + 0x06, 0x41, 0xf3, 0x9f, 0xb5, 0x33, 0x00, 0xd0, 0xff, 0x75, 0x63, 0x17, 0x31, 0xf7, 0x41, 0x2e, + 0x45, 0xd3, 0x40, 0xd6, 0x33, 0x77, 0x11, 0xbb, 0x15, 0x81, 0xfc, 0xc7, 0x02, 0x26, 0x11, 0x86, + 0x59, 0x24, 0x67, 0x55, 0xf7, 0x1f, 0xe1, 0xe7, 0x55, 0x30, 0xb3, 0x82, 0x3c, 0xc6, 0xaa, 0x0b, + 0x5f, 0x94, 0x91, 0xba, 0x88, 0x0c, 0xcf, 0xfd, 0xba, 0x86, 0xeb, 0x7f, 0x17, 0x98, 0x35, 0x62, + 0x62, 0x78, 0x45, 0x83, 0xca, 0xdf, 0xcf, 0x42, 0xe2, 0xf5, 0x7a, 0x55, 0x7a, 0x80, 0x86, 0x65, + 0x66, 0x9b, 0xf3, 0x07, 0x5f, 0x88, 0xf3, 0x8e, 0xd8, 0x58, 0x37, 0x4c, 0xf6, 0x0b, 0x5c, 0x7d, + 0x22, 0xbb, 0xa3, 0xc2, 0x65, 0x96, 0xe3, 0xc0, 0xd5, 0x3b, 0x3c, 0x25, 0x46, 0x46, 0x0f, 0x72, + 0x4b, 0x46, 0xc9, 0x19, 0xce, 0xc9, 0x04, 0x2e, 0x5b, 0x56, 0xc1, 0x4c, 0x73, 0xc7, 0xbe, 0xe2, + 0xcb, 0xf1, 0xe9, 0x72, 0xc0, 0x5e, 0x07, 0xa6, 0x2f, 0xf7, 0x81, 0x1a, 0x26, 0xf0, 0xf7, 0x3b, + 0xaa, 0xe2, 0xfd, 0x8e, 0xf7, 0xab, 0x49, 0x61, 0xe2, 0x98, 0x8b, 0x80, 0x49, 0xbc, 0x92, 0x51, + 0x49, 0x70, 0x25, 0xa3, 0xf6, 0x78, 0x30, 0xc5, 0xb8, 0x66, 0x5b, 0x01, 0xf1, 0x00, 0xfb, 0x99, + 0xf9, 0x0a, 0x66, 0xc5, 0x0a, 0x26, 0x43, 0x3e, 0xba, 0x72, 0xe9, 0x23, 0xff, 0xbb, 0x0a, 0x89, + 0x91, 0xe6, 0x03, 0x5f, 0x1e, 0x03, 0xf0, 0xf0, 0xbb, 0x19, 0xd9, 0x0d, 0xb3, 0x40, 0x02, 0x01, + 0x07, 0x87, 0xba, 0x64, 0x70, 0x28, 0xb9, 0xf4, 0xe5, 0xf9, 0xf2, 0x2c, 0x98, 0x5d, 0x32, 0xb7, + 0xb6, 0x82, 0x4e, 0xf2, 0xc5, 0x92, 0x9d, 0x64, 0xb4, 0x33, 0x1c, 0xb6, 0x73, 0xf7, 0x1c, 0x07, + 0x59, 0x7e, 0xa5, 0x58, 0x73, 0xea, 0x4b, 0xd5, 0x6e, 0x02, 0xc7, 0xfd, 0x71, 0x81, 0xef, 0x28, + 0xa7, 0xf5, 0xfe, 0x64, 0xf8, 0x6d, 0x69, 0x6f, 0x0b, 0x5f, 0xa2, 0x7c, 0x95, 0x22, 0x1a, 0xe0, + 0x9d, 0x60, 0x6e, 0x87, 0xe6, 0x26, 0x4b, 0xd2, 0x7e, 0x67, 0x79, 0xaa, 0xef, 0x0e, 0x8a, 0x35, + 0xe4, 0xba, 0xc6, 0x36, 0xd2, 0xc5, 0xcc, 0x7d, 0xcd, 0x57, 0x4d, 0x72, 0xa3, 0xaa, 0x9c, 0xe3, + 0x86, 0x44, 0x4d, 0xd2, 0xd7, 0x8e, 0x2f, 0x9e, 0x05, 0xd9, 0x65, 0xb3, 0x8b, 0xe0, 0x8f, 0x2b, + 0x60, 0x5a, 0x47, 0x6d, 0xdb, 0x6a, 0xe3, 0x27, 0xce, 0x35, 0xf6, 0x5b, 0x19, 0xd9, 0x9b, 0xc4, + 0x31, 0x9d, 0x85, 0x80, 0x46, 0x44, 0xbb, 0x91, 0xbb, 0x31, 0x3c, 0x96, 0xd4, 0x04, 0xee, 0x7d, + 0xc3, 0x53, 0x8f, 0xad, 0xad, 0xae, 0x6d, 0x08, 0x9b, 0x32, 0xfd, 0xa6, 0x50, 0x78, 0x10, 0xb7, + 0x6e, 0x7b, 0xeb, 0xa6, 0x65, 0x05, 0xb1, 0x6d, 0x0e, 0xa4, 0x8b, 0xfe, 0x44, 0xb1, 0xe1, 0x01, + 0x49, 0xdd, 0x59, 0xe9, 0x11, 0x9a, 0x7d, 0x23, 0x98, 0xbf, 0xb8, 0xef, 0x21, 0x97, 0xe5, 0x62, + 0xc5, 0x66, 0xf5, 0xbe, 0x54, 0xee, 0x72, 0x8f, 0xb8, 0x30, 0x82, 0x31, 0x05, 0x26, 0x13, 0xf5, + 0xea, 0x08, 0x33, 0xc0, 0x93, 0xa0, 0x58, 0x6f, 0x2c, 0x55, 0x88, 0xa7, 0xb6, 0xef, 0xfb, 0xba, + 0x0d, 0x7f, 0x46, 0x05, 0xb3, 0xc4, 0xc9, 0xd1, 0x47, 0xe1, 0x61, 0x12, 0xf3, 0x11, 0xf8, 0x15, + 0x69, 0x2f, 0x6e, 0x52, 0x65, 0xbe, 0x80, 0x68, 0x41, 0x6f, 0x99, 0xdd, 0x7e, 0x41, 0xe7, 0xf4, + 0xbe, 0xd4, 0x01, 0x80, 0xa8, 0x03, 0x01, 0xf9, 0x90, 0x94, 0x2b, 0xf7, 0x30, 0xee, 0x8e, 0x0a, + 0x95, 0x5f, 0x53, 0xc1, 0x0c, 0x9e, 0xa4, 0xf8, 0xa0, 0x34, 0x04, 0x50, 0x6c, 0xab, 0xbb, 0x1f, + 0x2e, 0x8b, 0xf8, 0x8f, 0x89, 0x1a, 0xc9, 0x9f, 0x4a, 0xcf, 0xdc, 0x89, 0x88, 0x38, 0x5e, 0x26, + 0x84, 0xdf, 0x07, 0xa5, 0xe6, 0xf3, 0x43, 0x98, 0x3b, 0x2a, 0xf8, 0x5e, 0x9b, 0x07, 0xf9, 0x8d, + 0x1e, 0x41, 0xee, 0x4b, 0xaa, 0xcc, 0x45, 0x39, 0x07, 0x8e, 0xf1, 0x61, 0x33, 0xab, 0x6b, 0xb7, + 0x8d, 0xee, 0x7a, 0x78, 0x92, 0x3d, 0x4c, 0xd0, 0xee, 0x60, 0x9e, 0xfd, 0xf4, 0x40, 0xf6, 0x8d, + 0xb1, 0x77, 0xc8, 0x10, 0x19, 0x71, 0x47, 0x26, 0x6f, 0x01, 0x27, 0x3a, 0xa6, 0x6b, 0x5c, 0xec, + 0xa2, 0x8a, 0xd5, 0x76, 0xf6, 0xa9, 0x38, 0xd8, 0xb4, 0xea, 0xc0, 0x0b, 0xed, 0x49, 0x20, 0xe7, + 0x7a, 0xfb, 0x5d, 0x3a, 0x4f, 0xe4, 0x4f, 0x58, 0x46, 0x16, 0xd5, 0xc4, 0xd9, 0x75, 0xfa, 0x15, + 0xef, 0x3a, 0x3b, 0x25, 0xe7, 0x3a, 0xab, 0x3d, 0x16, 0xe4, 0x6d, 0xc7, 0xdc, 0x36, 0xe9, 0xb5, + 0x90, 0xf3, 0x07, 0x42, 0x25, 0x53, 0x53, 0xa0, 0x41, 0xb2, 0xe8, 0x2c, 0xab, 0xf6, 0x78, 0x30, + 0x6d, 0xee, 0x1a, 0xdb, 0xe8, 0x1e, 0xd3, 0xa2, 0x81, 0x24, 0xe6, 0x6f, 0x3b, 0x7d, 0xe0, 0xf0, + 0x28, 0x7b, 0xaf, 0x87, 0x59, 0xb5, 0x3b, 0xc1, 0x35, 0x6d, 0x07, 0x19, 0x1e, 0xc2, 0x02, 0x3a, + 0x6f, 0x76, 0xb6, 0x91, 0x57, 0xdd, 0x5a, 0x33, 0x5d, 0xd7, 0xb4, 0xb6, 0xd9, 0xcd, 0xaf, 0xd1, + 0x19, 0xe0, 0x07, 0x15, 0xd9, 0x68, 0x90, 0x44, 0x32, 0x54, 0x25, 0x46, 0xb8, 0xa1, 0x9e, 0x93, + 0xa2, 0x2a, 0xe9, 0x80, 0xfc, 0x2a, 0xa9, 0x38, 0x8d, 0xd1, 0x6c, 0xa5, 0x3f, 0xf4, 0xff, 0xb1, + 0x02, 0x0a, 0x4b, 0xf6, 0x15, 0x8b, 0x34, 0x93, 0xdb, 0xe5, 0x2c, 0xe5, 0x01, 0xa1, 0x1d, 0xc4, + 0xbb, 0xce, 0x63, 0x4f, 0x03, 0x92, 0xda, 0xfa, 0x45, 0x46, 0xc0, 0x10, 0xdb, 0xee, 0x24, 0x03, + 0x08, 0xc4, 0x95, 0x93, 0xbe, 0x5c, 0x7f, 0x5f, 0x05, 0xd9, 0x25, 0xc7, 0xee, 0xc1, 0xb7, 0x65, + 0x12, 0x38, 0xe2, 0x75, 0x1c, 0xbb, 0xd7, 0x22, 0x57, 0xc8, 0x86, 0x7b, 0x4f, 0x7c, 0x9a, 0x76, + 0x3b, 0x28, 0xf4, 0x6c, 0xd7, 0xf4, 0xfc, 0x49, 0xc8, 0xfc, 0x6d, 0x0f, 0x1e, 0xd8, 0x17, 0xac, + 0xb3, 0x4c, 0x7a, 0x90, 0x1d, 0xf7, 0xf9, 0x44, 0x84, 0x58, 0x2e, 0x58, 0x8c, 0xfe, 0x35, 0xba, + 0x7d, 0xa9, 0xf0, 0x25, 0x3c, 0x92, 0x4f, 0x14, 0x91, 0x7c, 0xf8, 0x00, 0x09, 0x3b, 0x76, 0x6f, + 0x2c, 0xae, 0x33, 0xaf, 0x08, 0x50, 0x7d, 0xb2, 0x80, 0xea, 0xcd, 0x52, 0x65, 0xa6, 0x8f, 0xe8, + 0x07, 0xb3, 0x00, 0x10, 0x23, 0x65, 0x03, 0x4f, 0x9f, 0xe4, 0x2c, 0xb4, 0xe7, 0x66, 0x39, 0x59, + 0x96, 0x44, 0x59, 0x3e, 0x32, 0xc2, 0x06, 0x22, 0xe4, 0x23, 0x24, 0x5a, 0x02, 0xb9, 0x3d, 0xfc, + 0x9a, 0x49, 0x54, 0x92, 0x04, 0x79, 0xd4, 0xe9, 0x97, 0xf0, 0x77, 0x33, 0x20, 0x47, 0x12, 0xb4, + 0x33, 0x00, 0x10, 0xb3, 0x80, 0x1e, 0xa6, 0xcd, 0x10, 0x03, 0x80, 0x4b, 0x21, 0xda, 0x6a, 0x76, + 0xd8, 0x6b, 0x6a, 0x70, 0x87, 0x09, 0xf8, 0x6b, 0x62, 0x2c, 0x10, 0x5a, 0xcc, 0x7c, 0xe0, 0x52, + 0xf0, 0xd7, 0xe4, 0xa9, 0x86, 0xb6, 0xe8, 0xed, 0x1e, 0x59, 0x3d, 0x4c, 0x08, 0xbe, 0xae, 0x05, + 0x77, 0xc2, 0xfa, 0x5f, 0x93, 0x14, 0x3c, 0x95, 0x26, 0x6a, 0xb9, 0x18, 0x16, 0x91, 0x27, 0x99, + 0xfa, 0x93, 0xe1, 0xeb, 0x02, 0xb5, 0x59, 0x12, 0xd4, 0xe6, 0xd1, 0x09, 0xc4, 0x9b, 0xbe, 0xf2, + 0x7c, 0x2d, 0x07, 0xa6, 0xeb, 0x76, 0x87, 0xe9, 0x0e, 0x37, 0xdd, 0xfc, 0x74, 0x2e, 0xd1, 0x74, + 0x33, 0xa0, 0x11, 0xa1, 0x20, 0x4f, 0x11, 0x15, 0x44, 0x8e, 0x02, 0xaf, 0x1f, 0xda, 0x22, 0xc8, + 0x13, 0xed, 0x3d, 0x78, 0xd9, 0x68, 0x1c, 0x09, 0x22, 0x5a, 0x9d, 0x7d, 0xf9, 0x1f, 0x4e, 0xc7, + 0xfe, 0x07, 0xc8, 0x91, 0x0a, 0xc6, 0xec, 0x0d, 0x89, 0x15, 0x55, 0xe2, 0x2b, 0xaa, 0xc6, 0x57, + 0x34, 0xdb, 0x5f, 0xd1, 0x24, 0xab, 0x08, 0x51, 0x1a, 0x92, 0xbe, 0x8e, 0xff, 0xef, 0x29, 0x00, + 0xea, 0xc6, 0x65, 0x73, 0x9b, 0xee, 0x2d, 0x7f, 0xde, 0x9f, 0x3d, 0xb1, 0x5d, 0xe0, 0x9f, 0xe4, + 0x06, 0xc2, 0xdb, 0xc1, 0x14, 0x1b, 0xf7, 0x58, 0x45, 0x1e, 0x22, 0x54, 0x24, 0xa4, 0x42, 0x8d, + 0xda, 0xfb, 0x3c, 0xdd, 0xcf, 0x8f, 0x0d, 0x93, 0xad, 0xbd, 0x6e, 0xb7, 0x85, 0xbf, 0x65, 0x16, + 0x9a, 0xff, 0x1c, 0xb1, 0x83, 0x11, 0x5e, 0x32, 0x4d, 0x83, 0x4e, 0xb1, 0x27, 0xf8, 0x3e, 0xe9, + 0x73, 0x6a, 0x1c, 0x3f, 0x5c, 0x8d, 0x22, 0x9a, 0xe0, 0x63, 0xc1, 0x94, 0x1d, 0x6c, 0x87, 0xab, + 0x91, 0xab, 0x68, 0x55, 0x6b, 0xcb, 0xd6, 0xfd, 0x9c, 0x92, 0x5b, 0x67, 0x52, 0x7c, 0x4c, 0xe4, + 0x28, 0xe8, 0xa9, 0x15, 0x3f, 0x52, 0x2a, 0xae, 0xc7, 0x79, 0xd3, 0xdb, 0xa9, 0x99, 0xd6, 0x25, + 0x17, 0xfe, 0x37, 0x39, 0x0b, 0x92, 0xc3, 0x5f, 0x49, 0x86, 0xbf, 0x18, 0xa9, 0x2c, 0xd6, 0xb3, + 0x83, 0xa3, 0x32, 0x98, 0xdb, 0x08, 0x00, 0xef, 0x00, 0x79, 0xca, 0x28, 0xeb, 0x44, 0xcf, 0x46, + 0xe2, 0x17, 0x50, 0xd2, 0xd9, 0x17, 0x92, 0x5e, 0x21, 0x49, 0x39, 0x4b, 0x1d, 0xd2, 0xb3, 0x8f, + 0x01, 0x53, 0x4c, 0xd2, 0xda, 0x3c, 0xdf, 0x8a, 0x8b, 0xc7, 0x34, 0x00, 0xf2, 0x6b, 0xf6, 0x65, + 0xd4, 0xb2, 0x8b, 0x19, 0xfc, 0x1f, 0xf3, 0xd7, 0xb2, 0x8b, 0x0a, 0x7c, 0x65, 0x01, 0x14, 0x82, + 0x10, 0x95, 0x7f, 0xac, 0x80, 0x62, 0x99, 0xcc, 0xd0, 0x96, 0x1d, 0x7b, 0x97, 0xd6, 0x48, 0xfe, + 0xcc, 0xc3, 0x4b, 0xa5, 0x1d, 0x44, 0x82, 0xd0, 0x91, 0xfd, 0x85, 0x45, 0x60, 0x49, 0x97, 0x30, + 0x15, 0x7f, 0x09, 0x13, 0xbe, 0x55, 0xca, 0x61, 0x44, 0xb6, 0x94, 0xf4, 0x9b, 0xda, 0xef, 0x29, + 0x20, 0x57, 0xee, 0xda, 0x16, 0xe2, 0x0f, 0xe6, 0x0e, 0x3d, 0x01, 0x3a, 0x78, 0x1f, 0x03, 0x3e, + 0x4b, 0x91, 0xb5, 0x35, 0x42, 0x01, 0xe0, 0xb2, 0x25, 0x65, 0x2b, 0x37, 0x48, 0xc5, 0x92, 0x4e, + 0x5f, 0xa0, 0xdf, 0x50, 0xc0, 0x34, 0x8d, 0x29, 0x57, 0xea, 0x76, 0xe1, 0x83, 0x43, 0xa1, 0x0e, + 0x08, 0xf3, 0x09, 0x3f, 0x24, 0x7d, 0xf0, 0x2c, 0xa8, 0x55, 0x40, 0x3b, 0x41, 0x58, 0xc4, 0x64, + 0xe7, 0xa0, 0xe4, 0x76, 0xe2, 0x86, 0x32, 0x94, 0xbe, 0xa8, 0xff, 0x44, 0xc1, 0x06, 0x80, 0x75, + 0x69, 0xdd, 0x41, 0x97, 0x4d, 0x74, 0x05, 0x5e, 0x1b, 0x0a, 0xfb, 0x60, 0xc0, 0xac, 0x37, 0x49, + 0x2f, 0xe2, 0x70, 0x24, 0x23, 0x37, 0xc2, 0x66, 0xba, 0x61, 0x26, 0xd6, 0x8b, 0xf7, 0x47, 0x31, + 0xe3, 0xc8, 0xe8, 0x7c, 0x76, 0xc9, 0x35, 0x9b, 0x68, 0x2e, 0xd2, 0x17, 0xec, 0xc7, 0xa6, 0x40, + 0x61, 0xc3, 0x72, 0x7b, 0x5d, 0xc3, 0xdd, 0x81, 0xff, 0xaa, 0x82, 0x3c, 0xbd, 0xe2, 0x16, 0xfe, + 0xa0, 0x10, 0x97, 0xe7, 0x19, 0x7b, 0xc8, 0xf1, 0x1d, 0x78, 0xe8, 0x43, 0x68, 0x1f, 0x29, 0x9c, + 0x7d, 0x04, 0x3f, 0xa8, 0xca, 0x4e, 0x52, 0xfd, 0x42, 0xd9, 0x9d, 0xba, 0xd1, 0xa1, 0x60, 0x7a, + 0x66, 0xdb, 0xdb, 0x73, 0x90, 0x3b, 0x30, 0x14, 0x4c, 0x24, 0x95, 0x75, 0xfa, 0x95, 0x1e, 0x7c, + 0x0e, 0x0d, 0x30, 0xc5, 0x12, 0x0f, 0x6c, 0x46, 0x1d, 0x8c, 0x2a, 0x71, 0x0a, 0xe4, 0x0d, 0xc7, + 0x33, 0x5d, 0x8f, 0x6d, 0xcf, 0xb2, 0x27, 0xdc, 0x5d, 0xd2, 0x7f, 0x1b, 0x4e, 0xd7, 0x8f, 0xe0, + 0x15, 0x24, 0xc0, 0x5f, 0x93, 0x9a, 0x3f, 0xc6, 0xd7, 0x3c, 0x19, 0xe4, 0xf7, 0x8c, 0xb0, 0xc2, + 0xfd, 0x20, 0x70, 0x95, 0x5e, 0x6a, 0x55, 0x36, 0x69, 0xc0, 0xa7, 0x20, 0xb6, 0x53, 0x07, 0xbe, + 0x47, 0xe5, 0xd6, 0xef, 0xf6, 0x85, 0x31, 0x82, 0x49, 0x31, 0x1c, 0x23, 0x82, 0x84, 0x98, 0xbd, + 0x6e, 0x61, 0x09, 0x57, 0x95, 0x5e, 0xc2, 0x85, 0xbf, 0x22, 0xbd, 0x17, 0x15, 0x88, 0x72, 0xc8, + 0x1a, 0x60, 0xdc, 0x15, 0x98, 0x1f, 0x91, 0xda, 0x57, 0x1a, 0x56, 0xd2, 0x11, 0xc2, 0xf6, 0xdd, + 0x53, 0x40, 0x29, 0x55, 0xe1, 0x4f, 0x4c, 0x81, 0xd9, 0xf3, 0x8e, 0xe9, 0x99, 0xd6, 0x76, 0xcb, + 0xb6, 0xbb, 0x2e, 0xfc, 0x0e, 0xb7, 0x51, 0xf1, 0x78, 0x90, 0x6f, 0xdb, 0xd6, 0x96, 0xb9, 0xcd, + 0xc4, 0x78, 0x46, 0xa8, 0x5c, 0xa9, 0xba, 0xb0, 0xee, 0xd8, 0x97, 0xcd, 0x0e, 0x72, 0xca, 0x24, + 0x97, 0xce, 0x72, 0x63, 0x3d, 0xe6, 0x42, 0xe6, 0x3d, 0xba, 0xff, 0x2b, 0xbe, 0xbc, 0x20, 0x66, + 0x0f, 0x4b, 0xe4, 0x22, 0xe6, 0x55, 0x41, 0xa1, 0x6b, 0x58, 0xdb, 0x7b, 0xfe, 0xcc, 0xbb, 0x7f, + 0x17, 0x35, 0x8a, 0x52, 0x8d, 0x7d, 0xa4, 0x07, 0x9f, 0x13, 0x27, 0x37, 0x6c, 0xea, 0xd3, 0xb6, + 0x47, 0xfe, 0x9f, 0xfd, 0x78, 0x06, 0xcc, 0x70, 0x85, 0x6a, 0x33, 0x60, 0x6a, 0xa9, 0xb2, 0x5c, + 0xda, 0xa8, 0xb5, 0x8a, 0xc7, 0xb0, 0x14, 0x9b, 0x1b, 0x6b, 0x6b, 0x25, 0xbd, 0xfa, 0xc3, 0x95, + 0x62, 0x06, 0xbf, 0x5b, 0xd1, 0x4b, 0xf8, 0xb9, 0xa8, 0xe0, 0x87, 0xe6, 0x6a, 0x43, 0x6f, 0x55, + 0xea, 0x45, 0x15, 0xdb, 0xa3, 0x95, 0xa7, 0xad, 0x97, 0xea, 0x4b, 0xc5, 0x2c, 0xfe, 0xbf, 0xb8, + 0x51, 0xab, 0x55, 0x5a, 0xc5, 0x5c, 0x18, 0x44, 0x2f, 0x8f, 0x93, 0xcb, 0xa5, 0xe6, 0x46, 0xa9, + 0x56, 0x9c, 0xc2, 0xc9, 0xcb, 0x1b, 0xf5, 0xfa, 0x85, 0x62, 0x01, 0x17, 0x51, 0x6e, 0xd4, 0x97, + 0xab, 0x4b, 0x95, 0x7a, 0xab, 0x38, 0xad, 0x5d, 0x05, 0x8e, 0x37, 0x5b, 0x7a, 0xa9, 0xba, 0xb2, + 0xda, 0x5a, 0x6e, 0xe8, 0xe7, 0x4b, 0xfa, 0x52, 0x11, 0x68, 0x45, 0x30, 0xbb, 0xae, 0x37, 0x96, + 0x2b, 0x24, 0x5e, 0x4a, 0xa9, 0x56, 0x9c, 0xc1, 0x5f, 0xb5, 0xf4, 0x52, 0xbd, 0x59, 0x2b, 0xb5, + 0x2a, 0xc5, 0xd9, 0xb3, 0x77, 0x83, 0x82, 0x5f, 0x5d, 0x2d, 0x0f, 0x94, 0x4a, 0xbd, 0x78, 0x8c, + 0xfc, 0x36, 0x8b, 0x19, 0xfc, 0xbb, 0x8c, 0xf9, 0xcd, 0x03, 0x65, 0xa9, 0x52, 0x54, 0xf1, 0x6f, + 0xb5, 0x55, 0xcc, 0xe2, 0xdf, 0x75, 0xcc, 0x62, 0x1e, 0x28, 0xab, 0xd5, 0x62, 0x1e, 0xff, 0xb6, + 0x56, 0x8b, 0x53, 0xe2, 0x4d, 0xf7, 0xb1, 0xbd, 0xf0, 0x41, 0xc9, 0x47, 0x18, 0x1a, 0x5e, 0x38, + 0x47, 0x26, 0xff, 0xe1, 0x2b, 0x14, 0x99, 0xbe, 0x2e, 0x9e, 0x7e, 0xb2, 0x46, 0xf3, 0x96, 0xcc, + 0x18, 0x5b, 0x8d, 0x06, 0xc1, 0xa9, 0x4a, 0x7d, 0x69, 0xbd, 0x51, 0xad, 0xb7, 0x68, 0xa8, 0xb3, + 0x4a, 0xa9, 0xbc, 0x4a, 0x70, 0x46, 0x18, 0xc1, 0xb5, 0xc6, 0x52, 0xa5, 0x46, 0x5e, 0x2c, 0x37, + 0x36, 0xea, 0x4b, 0xc5, 0x2d, 0x5c, 0x56, 0x69, 0xa3, 0xb5, 0xba, 0xa9, 0x57, 0x9e, 0xba, 0x51, + 0xd5, 0x2b, 0x4b, 0xc5, 0x6d, 0x4c, 0xa3, 0x56, 0xaa, 0xaf, 0x6c, 0x94, 0x56, 0xd8, 0x7e, 0xe1, + 0xc6, 0xfa, 0x7a, 0x83, 0xec, 0x18, 0xee, 0xc0, 0xbf, 0xcf, 0x82, 0x42, 0x69, 0xcf, 0xb3, 0xb7, + 0xcc, 0x6e, 0x17, 0x3e, 0x47, 0x39, 0x7c, 0x53, 0x2c, 0x09, 0x4d, 0xf1, 0x40, 0x03, 0xf2, 0xcb, + 0x0a, 0x1a, 0x8f, 0x9f, 0xc0, 0xb5, 0xc3, 0xd3, 0xa1, 0x33, 0xb6, 0xca, 0x76, 0x9a, 0xe9, 0x23, + 0x75, 0xc4, 0xb5, 0x58, 0xcb, 0x22, 0x6f, 0xd8, 0xe3, 0xd9, 0x7b, 0xc0, 0x2c, 0x4f, 0x89, 0x84, + 0x03, 0x2b, 0xad, 0xd0, 0x78, 0x61, 0x7e, 0x84, 0x40, 0x1a, 0x2f, 0x8c, 0x1c, 0xbc, 0x50, 0x48, + 0x7b, 0xa9, 0xb6, 0x6a, 0x58, 0x4f, 0x8f, 0x83, 0x99, 0xa5, 0x4a, 0xb3, 0xac, 0x57, 0x89, 0x9f, + 0x7a, 0x31, 0x2b, 0x7a, 0x19, 0xc4, 0x5a, 0x66, 0x62, 0x8d, 0x64, 0x95, 0xf2, 0x7b, 0x52, 0xf6, + 0x56, 0x34, 0xed, 0x64, 0x0a, 0xf9, 0xa2, 0x07, 0x9a, 0x42, 0xc2, 0x17, 0x65, 0xe9, 0x3a, 0x59, + 0x73, 0x6f, 0x77, 0xd7, 0x70, 0xf6, 0x05, 0x7f, 0xb5, 0x51, 0xf5, 0x2e, 0x7a, 0x7c, 0x8f, 0x8d, + 0x02, 0x84, 0x4d, 0xa8, 0x9e, 0x63, 0xef, 0xf6, 0xfc, 0xbe, 0x9a, 0x3d, 0xc1, 0xff, 0x25, 0x3d, + 0x73, 0x2c, 0x55, 0x17, 0xb8, 0xca, 0x8c, 0x30, 0xb4, 0xff, 0x88, 0x22, 0x33, 0x8b, 0x8c, 0x2d, + 0xe6, 0xfb, 0x5d, 0x23, 0xfe, 0x26, 0x0b, 0xae, 0x62, 0x11, 0x5e, 0x82, 0xf5, 0x07, 0x6c, 0xaa, + 0xbe, 0x3a, 0x55, 0xcd, 0x60, 0x06, 0xb5, 0x1a, 0x1a, 0xd4, 0xdc, 0x86, 0x77, 0x56, 0x72, 0xc3, + 0xfb, 0x6d, 0xd2, 0x87, 0x1e, 0x4a, 0xd5, 0x85, 0x01, 0x75, 0x9c, 0xcc, 0xb6, 0xfc, 0xfd, 0x8a, + 0xcc, 0x6a, 0xab, 0x14, 0x87, 0xdf, 0xef, 0xba, 0xf6, 0x8e, 0x0c, 0x98, 0x17, 0x55, 0x45, 0x7b, + 0x1c, 0x28, 0xf4, 0x58, 0x0a, 0x93, 0xcb, 0xe9, 0x28, 0xe5, 0xd2, 0x83, 0x9c, 0x18, 0x22, 0x64, + 0x75, 0x7a, 0xb6, 0x69, 0x05, 0xeb, 0xf2, 0xfe, 0x33, 0x9e, 0x77, 0x92, 0xa9, 0x83, 0x1f, 0xef, + 0x8f, 0x3c, 0x84, 0xb1, 0x63, 0xb3, 0x5c, 0xec, 0x58, 0x2c, 0x44, 0x0f, 0xed, 0x92, 0x5b, 0x8c, + 0xf6, 0x1c, 0xea, 0xf0, 0xa2, 0xe8, 0x7c, 0xd2, 0xd9, 0x27, 0x83, 0x82, 0x5f, 0x3e, 0xb6, 0xee, + 0x1a, 0xb5, 0x5a, 0x69, 0xad, 0x44, 0x17, 0x2a, 0x1b, 0xeb, 0x95, 0x7a, 0xa9, 0x5a, 0xcc, 0xe0, + 0x81, 0xae, 0xb6, 0xd6, 0x6c, 0x6d, 0x2c, 0x55, 0x1b, 0x45, 0x85, 0x3c, 0xe1, 0x4c, 0xe5, 0xf5, + 0xf5, 0xa2, 0x0a, 0xdf, 0x38, 0x05, 0xa6, 0x56, 0x8c, 0x6e, 0x17, 0x39, 0xfb, 0xf0, 0x1b, 0x0a, + 0x28, 0xfa, 0xb3, 0x83, 0x35, 0xc3, 0x32, 0xb7, 0x90, 0xeb, 0xc5, 0x2f, 0x54, 0xbc, 0x4f, 0xfa, + 0x6a, 0x33, 0x56, 0xc6, 0x42, 0x3f, 0xfd, 0x08, 0x1d, 0xbf, 0x15, 0x64, 0x4d, 0x6b, 0xcb, 0x66, + 0xcb, 0x15, 0xfd, 0xfe, 0x36, 0xfe, 0xc7, 0x64, 0xdb, 0x80, 0x64, 0x94, 0xbc, 0xdd, 0x4c, 0x92, + 0x8b, 0xf4, 0x57, 0x2d, 0xde, 0x91, 0x05, 0x73, 0x3e, 0x13, 0x55, 0xab, 0x83, 0xee, 0xe3, 0xb7, + 0x41, 0x7f, 0x26, 0x2b, 0x1b, 0x60, 0xa8, 0xbf, 0x3e, 0x84, 0x54, 0x84, 0x48, 0x5b, 0x00, 0xb4, + 0x0d, 0x0f, 0x6d, 0xdb, 0x8e, 0x19, 0xac, 0x45, 0x3c, 0x2e, 0x09, 0xb5, 0x32, 0xfd, 0x7a, 0x5f, + 0xe7, 0xe8, 0x68, 0x4f, 0x02, 0x33, 0x28, 0x88, 0xe8, 0xe8, 0x6f, 0x93, 0xc6, 0xe2, 0xc5, 0xe7, + 0x87, 0x7f, 0x22, 0x15, 0xc7, 0x48, 0xa6, 0x9a, 0xc9, 0x30, 0xdb, 0x1c, 0xad, 0xeb, 0xd9, 0xa8, + 0xaf, 0x95, 0xf4, 0xe6, 0x6a, 0xa9, 0x56, 0xab, 0xd6, 0x57, 0x82, 0x80, 0xc5, 0x1a, 0x98, 0x5f, + 0x6a, 0x9c, 0xaf, 0x73, 0x11, 0xa5, 0xb3, 0x70, 0x1d, 0x14, 0x7c, 0x79, 0x0d, 0x3a, 0x45, 0xc5, + 0xcb, 0x8c, 0x9d, 0xa2, 0xe2, 0x92, 0xb0, 0x69, 0x68, 0xb6, 0x03, 0xd7, 0x7a, 0xf2, 0x1f, 0xfe, + 0xb6, 0x01, 0x72, 0xc4, 0x9f, 0x05, 0xbe, 0x8b, 0xcc, 0x8b, 0x7b, 0x5d, 0xa3, 0x8d, 0xe0, 0x6e, + 0x82, 0x95, 0x70, 0xff, 0xae, 0x5d, 0xe5, 0xc0, 0x5d, 0xbb, 0xe4, 0x2f, 0x1b, 0x31, 0x4e, 0x0e, + 0xf2, 0xa1, 0xd1, 0x69, 0x16, 0x31, 0xe4, 0x4f, 0xac, 0x67, 0x13, 0x75, 0xbd, 0x61, 0x6c, 0x46, + 0xa8, 0x64, 0x34, 0x4f, 0x69, 0x5c, 0xa2, 0x12, 0xc7, 0x51, 0xfa, 0x2d, 0xfe, 0x4b, 0x59, 0x90, + 0x6b, 0xf6, 0xba, 0xa6, 0x07, 0x7f, 0x41, 0x19, 0x0b, 0x66, 0xf4, 0x7e, 0x64, 0x75, 0xe8, 0xfd, + 0xc8, 0xa1, 0xbf, 0x64, 0x56, 0xc2, 0x5f, 0xb2, 0x85, 0xee, 0xf3, 0x44, 0x7f, 0xc9, 0xdb, 0xd9, + 0xb4, 0x8d, 0x7a, 0x5b, 0x3e, 0x7c, 0x80, 0x48, 0x49, 0xb5, 0x06, 0xdc, 0x66, 0x71, 0xf6, 0x31, + 0x2c, 0xa8, 0x3e, 0x00, 0xf9, 0xc5, 0x46, 0xab, 0xd5, 0x58, 0x2b, 0x1e, 0x23, 0xd3, 0xaf, 0xc6, + 0x3a, 0x0d, 0x71, 0x5c, 0xad, 0xd7, 0x2b, 0xba, 0x30, 0xe3, 0x12, 0x2f, 0xcb, 0x8c, 0x9d, 0x60, + 0x89, 0x65, 0xa7, 0xa9, 0x5e, 0x72, 0x8b, 0xe0, 0xd1, 0xfc, 0xa4, 0xaf, 0x5c, 0x3f, 0xa7, 0x82, + 0xdc, 0x1a, 0x72, 0xb6, 0x11, 0x7c, 0x46, 0x02, 0x07, 0xbb, 0x2d, 0xd3, 0x71, 0xe9, 0xa5, 0x08, + 0xa1, 0x83, 0x1d, 0x9f, 0xa6, 0xdd, 0x00, 0xe6, 0x5c, 0xd4, 0xb6, 0xad, 0x8e, 0x9f, 0x89, 0xf6, + 0x47, 0x62, 0x22, 0x7c, 0x59, 0x42, 0xc8, 0x08, 0xa3, 0x63, 0xf1, 0x92, 0x4b, 0x02, 0xcc, 0xa0, + 0x52, 0xd3, 0x07, 0xe6, 0xdb, 0x2a, 0xfe, 0xa8, 0xb7, 0x0f, 0x5f, 0x26, 0xed, 0xf9, 0x78, 0x0b, + 0xc8, 0x5f, 0xf4, 0xef, 0x45, 0x53, 0x23, 0xfb, 0x63, 0x96, 0x47, 0x5b, 0x04, 0x27, 0x5c, 0xd4, + 0x45, 0x6d, 0x0f, 0x75, 0x70, 0xd3, 0xd5, 0x87, 0x76, 0x0a, 0x07, 0xb3, 0xc3, 0x3f, 0xe0, 0x01, + 0xbc, 0x53, 0x04, 0xf0, 0xc6, 0x01, 0xa2, 0xc4, 0x15, 0x8a, 0x9e, 0x9b, 0xe0, 0x6a, 0x34, 0xbb, + 0x76, 0x60, 0xf8, 0xfa, 0xcf, 0xf8, 0xdd, 0x8e, 0xb7, 0xdb, 0x25, 0xef, 0xd8, 0xd1, 0x60, 0xff, + 0x59, 0x5b, 0x00, 0x53, 0x86, 0xb5, 0x4f, 0x5e, 0x65, 0x63, 0x6a, 0xed, 0x67, 0x82, 0xaf, 0x0c, + 0x90, 0xbf, 0x4b, 0x40, 0xfe, 0x91, 0x72, 0xec, 0xa6, 0x0f, 0xfc, 0x8f, 0x4d, 0x81, 0xdc, 0xba, + 0xe1, 0x7a, 0x08, 0xfe, 0x1f, 0x55, 0x16, 0xf9, 0x1b, 0xc1, 0xfc, 0x96, 0xdd, 0xde, 0x73, 0x51, + 0x47, 0x6c, 0x94, 0x7d, 0xa9, 0xe3, 0xc0, 0x9c, 0x04, 0x66, 0x67, 0x89, 0x8c, 0xac, 0xef, 0x02, + 0x7b, 0x20, 0x9d, 0x5c, 0xbd, 0xe8, 0xae, 0x1b, 0x8e, 0xd7, 0xd8, 0x22, 0x69, 0xc1, 0xd5, 0x8b, + 0x7c, 0xa2, 0x00, 0x7d, 0x3e, 0x06, 0xfa, 0xa9, 0x68, 0xe8, 0x0b, 0x12, 0xd0, 0x6b, 0x25, 0x50, + 0xd8, 0x32, 0xbb, 0x88, 0x7c, 0x30, 0x4d, 0x3e, 0x18, 0x34, 0x26, 0x11, 0xd9, 0x07, 0x63, 0xd2, + 0xb2, 0xd9, 0x45, 0x7a, 0xf0, 0x99, 0x3f, 0x91, 0x01, 0xe1, 0x44, 0xa6, 0x46, 0x4f, 0xc2, 0x61, + 0xc3, 0xcb, 0x32, 0x76, 0x91, 0xbf, 0xf1, 0x6d, 0xb1, 0x63, 0xe9, 0x1d, 0xc3, 0x33, 0x08, 0x18, + 0xb3, 0x3a, 0xf9, 0x2f, 0xfa, 0x64, 0xab, 0xfd, 0x3e, 0xd9, 0xcf, 0x53, 0x93, 0xf5, 0x88, 0x3e, + 0xb3, 0x11, 0x2d, 0xea, 0xa2, 0x0f, 0x10, 0xb5, 0x14, 0x83, 0x67, 0x0c, 0x4c, 0xdb, 0x70, 0x90, + 0xb7, 0xce, 0x7b, 0x41, 0xe7, 0x74, 0x31, 0x91, 0x1c, 0xc2, 0x71, 0x9b, 0xc6, 0x2e, 0xbd, 0x5a, + 0xb1, 0x8c, 0xdf, 0xb1, 0xc3, 0x15, 0x07, 0xd2, 0xc3, 0xfe, 0x37, 0x37, 0xee, 0xfe, 0x77, 0x50, + 0x1d, 0xd3, 0x6f, 0x86, 0xaf, 0xc9, 0x02, 0xb5, 0xbc, 0xe7, 0x3d, 0xa0, 0xbb, 0xdf, 0xef, 0x49, + 0xfb, 0x98, 0xb3, 0xfe, 0x6c, 0xcf, 0x3b, 0xda, 0xde, 0x37, 0xa1, 0x96, 0xc8, 0xf9, 0xb2, 0x47, + 0xd5, 0x2d, 0x7d, 0x1d, 0x79, 0x9b, 0x1a, 0x1c, 0x8d, 0x7a, 0x4e, 0xe6, 0xf0, 0xa6, 0x39, 0xa4, + 0xfd, 0x13, 0xd7, 0x33, 0x04, 0xcf, 0x7e, 0xc7, 0x93, 0x15, 0x6e, 0x7f, 0x20, 0xae, 0xad, 0x44, + 0x94, 0xb3, 0x3a, 0x7d, 0x80, 0x2f, 0x97, 0x3e, 0x30, 0x4a, 0xc5, 0x16, 0x7b, 0x8c, 0x27, 0x99, + 0x4d, 0xf5, 0x6a, 0xa9, 0x63, 0xa3, 0x31, 0xc5, 0xa6, 0x0f, 0xd8, 0xdf, 0xf1, 0xc7, 0x74, 0x4a, + 0x87, 0x46, 0x0c, 0xbe, 0x4a, 0x7a, 0x41, 0x9f, 0x56, 0x7b, 0xc8, 0x5e, 0x7d, 0x32, 0x79, 0xcb, + 0x39, 0x8a, 0xc5, 0x16, 0x3c, 0x81, 0xbb, 0xa2, 0x55, 0x90, 0xa7, 0x0b, 0xbf, 0xf0, 0xcd, 0xd2, + 0x4d, 0x04, 0xf7, 0x46, 0xe2, 0xf1, 0x9d, 0xe0, 0x39, 0xc9, 0x9a, 0x83, 0x70, 0xcc, 0x27, 0x9b, + 0xe8, 0x98, 0x8f, 0x18, 0x81, 0x45, 0xa2, 0x1d, 0xd1, 0x3a, 0xa6, 0x3c, 0x9d, 0x4c, 0xd2, 0xc2, + 0x06, 0x32, 0x94, 0x3e, 0xde, 0xcf, 0xcf, 0x81, 0x59, 0x5a, 0x34, 0x3d, 0x5f, 0x08, 0xdf, 0xa3, + 0x7c, 0xff, 0xa0, 0xae, 0xd5, 0xc1, 0xec, 0x15, 0xc2, 0x36, 0x0d, 0x2f, 0xc7, 0x56, 0x2e, 0x6e, + 0x8e, 0x5d, 0xf7, 0xa0, 0xf5, 0xf4, 0x6f, 0x8d, 0x16, 0xbe, 0xc7, 0x32, 0xa6, 0x1b, 0x2c, 0xf4, + 0xf0, 0x44, 0x9e, 0x18, 0x59, 0x7c, 0x92, 0x76, 0x0a, 0xe4, 0x2f, 0x9b, 0xe8, 0x4a, 0xb5, 0xc3, + 0xac, 0x5b, 0xf6, 0x04, 0x7f, 0x5d, 0xda, 0x67, 0x92, 0x87, 0x9b, 0xf1, 0x92, 0xae, 0x16, 0xca, + 0x79, 0x4e, 0x0e, 0x65, 0x6b, 0x02, 0xd1, 0x80, 0x14, 0x7a, 0x4f, 0x3d, 0x0b, 0xe5, 0x5f, 0x4e, + 0xa0, 0x88, 0x51, 0x86, 0xb3, 0x18, 0x84, 0x2f, 0xf6, 0xac, 0x39, 0x15, 0x40, 0x58, 0xfe, 0x58, + 0xfa, 0x7c, 0xb9, 0xc8, 0x70, 0x43, 0x8a, 0x4e, 0x5f, 0xf2, 0xaf, 0x53, 0xc1, 0x74, 0x13, 0x79, + 0xcb, 0x26, 0xea, 0x76, 0x5c, 0xe8, 0x1c, 0xde, 0x34, 0xba, 0x15, 0xe4, 0xb7, 0x08, 0xb1, 0x61, + 0x9b, 0x93, 0x2c, 0x1b, 0x7c, 0x8d, 0x22, 0xeb, 0x07, 0xc4, 0x56, 0xdf, 0x7c, 0x6e, 0xc7, 0x02, + 0x93, 0xdc, 0x69, 0xba, 0xf8, 0x92, 0x27, 0x70, 0x55, 0x92, 0x0a, 0x66, 0xc9, 0xf6, 0x3f, 0xf2, + 0x4a, 0x5d, 0x73, 0xdb, 0xe2, 0x6f, 0x57, 0x1f, 0xb9, 0x85, 0x68, 0x8f, 0x06, 0x39, 0x03, 0x53, + 0x63, 0xee, 0x6e, 0x70, 0x60, 0xe7, 0x49, 0xca, 0xd3, 0x69, 0xc6, 0x04, 0x17, 0x93, 0x84, 0x8a, + 0xed, 0xf3, 0x3c, 0xc1, 0x8b, 0x49, 0x86, 0x16, 0x9e, 0x3e, 0x62, 0x5f, 0x55, 0xc1, 0x49, 0xc6, + 0xc0, 0x39, 0xe4, 0x78, 0x66, 0xdb, 0xe8, 0x52, 0xe4, 0x5e, 0x98, 0x19, 0x07, 0x74, 0xab, 0x60, + 0xee, 0x32, 0x4f, 0x96, 0x41, 0x78, 0x76, 0x20, 0x84, 0x02, 0x03, 0xba, 0xf8, 0x61, 0x82, 0x0b, + 0x1e, 0x04, 0xa9, 0x0a, 0x34, 0x27, 0x78, 0xc1, 0x83, 0x34, 0x13, 0xe9, 0x43, 0xfc, 0x12, 0x16, + 0x54, 0x33, 0xec, 0x3e, 0x3f, 0x2f, 0x8d, 0xed, 0x06, 0x98, 0x21, 0x58, 0xd2, 0x0f, 0xd9, 0x32, + 0x44, 0x8c, 0x12, 0x07, 0xfd, 0x0e, 0xbb, 0xe8, 0x3e, 0xf8, 0x56, 0xe7, 0xe9, 0xc0, 0xf3, 0x00, + 0x84, 0xaf, 0xf8, 0x4e, 0x3a, 0x13, 0xd5, 0x49, 0x2b, 0x72, 0x9d, 0xf4, 0x9b, 0xa4, 0xc3, 0x1c, + 0x0e, 0x66, 0xfb, 0xf0, 0xea, 0x21, 0x17, 0xe0, 0x6e, 0x78, 0xe9, 0xe9, 0xeb, 0xc5, 0x2b, 0x99, + 0x5e, 0x2c, 0xed, 0xf5, 0xba, 0x66, 0x1b, 0xcf, 0xa7, 0x3e, 0x31, 0x96, 0xf9, 0x14, 0xdf, 0x1f, + 0xa8, 0x7d, 0xfd, 0xc1, 0x21, 0x2c, 0xe9, 0x9b, 0xc0, 0x71, 0x5a, 0x44, 0x39, 0x60, 0x2b, 0x47, + 0x83, 0xb8, 0xf5, 0x25, 0x8b, 0x51, 0xdb, 0x25, 0x95, 0x20, 0x10, 0xc2, 0x08, 0x4b, 0x9f, 0xc9, + 0x8c, 0xdd, 0xa4, 0x0a, 0x12, 0xc5, 0xd9, 0x04, 0x8e, 0x64, 0x65, 0xa9, 0xb5, 0xbb, 0xd1, 0xeb, + 0x60, 0xed, 0xf8, 0x62, 0x76, 0x1c, 0x23, 0xc2, 0x53, 0x98, 0xa7, 0xa9, 0x1a, 0xb9, 0xa4, 0x11, + 0x16, 0x19, 0xf4, 0x23, 0x2d, 0x74, 0x9f, 0xb7, 0x7a, 0x8c, 0xfa, 0xa5, 0x6a, 0x37, 0x83, 0xe3, + 0x17, 0x8d, 0xf6, 0xa5, 0x6d, 0xc7, 0xde, 0x23, 0xb7, 0xb6, 0xdb, 0xec, 0xfa, 0xf7, 0xd5, 0x63, + 0x7a, 0xff, 0x0b, 0xed, 0x36, 0xdf, 0x74, 0xc8, 0x0d, 0x33, 0x1d, 0x56, 0x8f, 0x31, 0xe3, 0x41, + 0x7b, 0x4c, 0xd0, 0xe9, 0xe4, 0x63, 0x3b, 0x9d, 0xd5, 0x63, 0x7e, 0xb7, 0xa3, 0x2d, 0x81, 0x42, + 0xc7, 0xbc, 0x4c, 0xb6, 0xaa, 0xc9, 0xac, 0x6b, 0x58, 0xd0, 0xa1, 0x25, 0xf3, 0x32, 0xdd, 0xd8, + 0x5e, 0x3d, 0xa6, 0x07, 0x5f, 0x6a, 0x2b, 0x60, 0x9a, 0x6c, 0x0b, 0x10, 0x32, 0x85, 0x44, 0x01, + 0x85, 0x56, 0x8f, 0xe9, 0xe1, 0xb7, 0xd8, 0xfa, 0xc8, 0x92, 0x73, 0xd7, 0x77, 0xf9, 0xdb, 0xed, + 0x99, 0x44, 0xdb, 0xed, 0x58, 0x16, 0x74, 0xc3, 0xfd, 0x14, 0xc8, 0xb5, 0x89, 0x84, 0x15, 0x26, + 0x61, 0xfa, 0xa8, 0xdd, 0x09, 0xb2, 0xbb, 0x86, 0xe3, 0x4f, 0x9e, 0x6f, 0x1c, 0x4e, 0x77, 0xcd, + 0x70, 0x2e, 0x61, 0x04, 0xf1, 0x57, 0x8b, 0x53, 0x20, 0x47, 0x04, 0x17, 0xfc, 0x81, 0x6f, 0xcb, + 0x52, 0x33, 0xa4, 0x6c, 0x5b, 0x78, 0xd8, 0x6f, 0xd9, 0xfe, 0xe1, 0xf4, 0x5f, 0xcf, 0x8c, 0xc7, + 0x82, 0xbc, 0x8a, 0xbb, 0x4e, 0xc5, 0x32, 0x9f, 0xb1, 0x87, 0xee, 0x41, 0xfb, 0x6c, 0x49, 0x74, + 0xd0, 0x2b, 0xed, 0x0c, 0x00, 0x1e, 0x3b, 0xa9, 0x17, 0x04, 0x31, 0xe5, 0x52, 0xc2, 0xe5, 0x83, + 0xdc, 0x70, 0x47, 0x95, 0x3f, 0x18, 0xc1, 0x74, 0xe9, 0x17, 0x44, 0xf4, 0x0c, 0xbc, 0x6b, 0x5a, + 0x5c, 0x9d, 0xfd, 0xc7, 0x84, 0x9d, 0x52, 0x52, 0xa3, 0x66, 0x08, 0x7b, 0xe9, 0xf7, 0x4d, 0x6f, + 0xc9, 0xd2, 0x1b, 0x25, 0xe8, 0x09, 0xe8, 0xca, 0x7d, 0xa6, 0x1b, 0xde, 0xdf, 0x0c, 0x7f, 0x67, + 0x2c, 0x4a, 0x33, 0x60, 0xc0, 0x51, 0x07, 0x0e, 0x38, 0x07, 0x02, 0x04, 0x65, 0x87, 0x04, 0x08, + 0xca, 0x25, 0x5b, 0x39, 0xfc, 0x28, 0xaf, 0x3f, 0xeb, 0xa2, 0xfe, 0xdc, 0x11, 0x01, 0xd0, 0x20, + 0xb9, 0x8c, 0xc5, 0xbe, 0x79, 0x57, 0xa0, 0x29, 0x4d, 0x41, 0x53, 0xee, 0x1a, 0x9d, 0x91, 0xf4, + 0xb5, 0xe5, 0xc3, 0x59, 0x70, 0x55, 0xc8, 0x4c, 0x1d, 0x5d, 0x61, 0x8a, 0xf2, 0xc7, 0x63, 0x51, + 0x94, 0xe4, 0x8e, 0xce, 0x69, 0x6b, 0xcc, 0xef, 0x4a, 0x9f, 0xdb, 0xef, 0x07, 0x2a, 0x90, 0x4d, + 0x84, 0xb2, 0x9c, 0x02, 0x79, 0xda, 0xc3, 0x30, 0x68, 0xd8, 0x53, 0xc2, 0xee, 0x46, 0xee, 0xb4, + 0xbf, 0x2c, 0x6f, 0x13, 0xd0, 0x1f, 0xb6, 0xae, 0xd1, 0xda, 0x73, 0xac, 0xaa, 0xe5, 0xd9, 0xf0, + 0x47, 0xc7, 0xa2, 0x38, 0x81, 0x37, 0x9c, 0x3a, 0x8a, 0x37, 0xdc, 0x48, 0xab, 0x1c, 0x7e, 0x0d, + 0x8e, 0x64, 0x95, 0x23, 0xa2, 0xf0, 0xf4, 0xf1, 0x7b, 0xa7, 0x0a, 0x4e, 0xb1, 0xc9, 0xd6, 0xa2, + 0x68, 0x21, 0xc2, 0x0b, 0xe3, 0x00, 0xf2, 0xa4, 0x6f, 0x26, 0x31, 0x3f, 0x7a, 0xf2, 0x20, 0x46, + 0x29, 0x88, 0xbd, 0x31, 0x54, 0x98, 0x0e, 0xf6, 0x71, 0x38, 0x16, 0xa4, 0xe4, 0x2e, 0x0a, 0x4d, + 0xc0, 0x46, 0xfa, 0x98, 0xbd, 0x58, 0x05, 0x79, 0x1a, 0x23, 0x01, 0x6e, 0xa4, 0xe2, 0x30, 0x21, + 0xde, 0xcf, 0x22, 0xb1, 0x23, 0x47, 0xb9, 0x49, 0x2d, 0x7e, 0x44, 0x92, 0xbd, 0xb8, 0x81, 0xac, + 0x4c, 0xc0, 0x85, 0x50, 0x01, 0x33, 0x4d, 0xe4, 0x95, 0x0d, 0xc7, 0x31, 0x8d, 0xed, 0x71, 0x79, + 0x7c, 0xcb, 0x7a, 0x0f, 0xc3, 0xef, 0x64, 0x64, 0xcf, 0xb2, 0x07, 0x0b, 0xe1, 0x3e, 0xab, 0x11, + 0x51, 0xc0, 0x5f, 0x2f, 0x75, 0x5e, 0x7d, 0x18, 0xb5, 0x09, 0x78, 0x6c, 0x2b, 0x60, 0xca, 0x8f, + 0x83, 0x71, 0xab, 0x10, 0x1b, 0x65, 0xc7, 0xdb, 0xf5, 0x8f, 0xc1, 0x90, 0xff, 0x07, 0xe3, 0x2f, + 0xc0, 0x57, 0x24, 0x74, 0x94, 0x8f, 0x0f, 0xe2, 0x91, 0xac, 0x8d, 0x25, 0x71, 0x87, 0x3f, 0xaa, + 0xb0, 0x1d, 0x1f, 0x9a, 0x62, 0xcb, 0x91, 0x35, 0xc3, 0x43, 0xf7, 0xc1, 0xcf, 0xab, 0x60, 0xaa, + 0x89, 0x3c, 0x3c, 0xde, 0x62, 0xf6, 0x0f, 0xad, 0xe1, 0x1a, 0xb7, 0xe2, 0xc1, 0xce, 0xd6, 0x6a, + 0x77, 0x83, 0xe9, 0x9e, 0x63, 0xb7, 0x91, 0xeb, 0xb2, 0xd5, 0x0b, 0xde, 0x51, 0x6d, 0xd0, 0xe8, + 0x4f, 0x58, 0x5b, 0x58, 0xf7, 0xbf, 0xd1, 0xc3, 0xcf, 0x93, 0x9a, 0x01, 0x94, 0x12, 0xab, 0xe0, + 0xa4, 0xcd, 0x80, 0xb8, 0xc2, 0xd3, 0x07, 0xfa, 0x0f, 0x55, 0x30, 0xdb, 0x44, 0x5e, 0x20, 0xc5, + 0x04, 0x9b, 0x1c, 0xd1, 0xf0, 0x0a, 0x50, 0xaa, 0x87, 0x83, 0xf2, 0x9d, 0xd2, 0x17, 0xef, 0x8a, + 0xd2, 0x0c, 0x88, 0x8d, 0x05, 0xcf, 0xb7, 0x48, 0xdd, 0xb7, 0x2b, 0xc7, 0xc1, 0x04, 0x8e, 0xaf, + 0x3d, 0x1c, 0x4c, 0x13, 0x5e, 0x48, 0x83, 0xfd, 0x89, 0x6c, 0xd8, 0x78, 0xbf, 0x90, 0x52, 0xe3, + 0x7d, 0x12, 0xc8, 0xed, 0x1a, 0xce, 0x25, 0xff, 0xf0, 0xed, 0x23, 0xe4, 0x56, 0xbf, 0x5c, 0x9d, + 0x7e, 0x35, 0xd8, 0x4f, 0x33, 0x97, 0xcc, 0x4f, 0xf3, 0xf5, 0x4a, 0xa2, 0x91, 0x90, 0xce, 0x1d, + 0xc6, 0xd8, 0xe4, 0x13, 0x8c, 0x9b, 0x31, 0x65, 0xa7, 0xaf, 0x1c, 0x2f, 0x54, 0x41, 0x01, 0x8f, + 0xdb, 0xc4, 0x1e, 0x3f, 0x7f, 0x78, 0x75, 0x18, 0x6c, 0xe8, 0x27, 0xec, 0x81, 0x7d, 0x89, 0x8c, + 0xcf, 0xbc, 0x4f, 0xd0, 0x03, 0xc7, 0x15, 0x9e, 0x3e, 0x1e, 0xef, 0xa6, 0x78, 0x90, 0xf6, 0x00, + 0xdf, 0xa0, 0x02, 0x75, 0x05, 0x79, 0x93, 0xb6, 0x22, 0xdf, 0x2e, 0x1d, 0x5e, 0x54, 0x10, 0x18, + 0xe1, 0x79, 0x61, 0x05, 0x8d, 0xa7, 0x01, 0xc9, 0xc5, 0x15, 0x95, 0x62, 0x20, 0x7d, 0xd4, 0xde, + 0x4f, 0x51, 0xa3, 0x9b, 0x0b, 0x3f, 0x32, 0x86, 0x5e, 0x75, 0xb2, 0x0b, 0x1f, 0xbe, 0x00, 0x09, + 0x8d, 0xa3, 0x6a, 0x6f, 0x83, 0x0a, 0x4f, 0x1f, 0xb9, 0x97, 0xaa, 0xe4, 0x12, 0xb3, 0xf2, 0x0e, + 0x6a, 0x5f, 0x42, 0x1d, 0xfe, 0xb2, 0xec, 0x51, 0xa1, 0x3b, 0x0d, 0xa6, 0xda, 0x94, 0x1a, 0x01, + 0xaf, 0xa0, 0xfb, 0x8f, 0xe2, 0xcd, 0x42, 0xb1, 0x77, 0x67, 0x89, 0x1d, 0x11, 0xfd, 0x7c, 0x2c, + 0xb8, 0xc8, 0x5d, 0x78, 0x25, 0x51, 0xfc, 0x04, 0xcc, 0x16, 0x3a, 0xcb, 0xa8, 0xb6, 0x6d, 0x0b, + 0xfe, 0xf7, 0xc3, 0xc3, 0x72, 0x1d, 0x98, 0x36, 0xdb, 0xb6, 0x45, 0x42, 0xc0, 0xf9, 0x87, 0x80, + 0x82, 0x04, 0xff, 0x6d, 0x65, 0xd7, 0xbe, 0xd7, 0x64, 0xbb, 0xe6, 0x61, 0xc2, 0xa8, 0xc6, 0x04, + 0x66, 0xfd, 0xa8, 0x8c, 0x89, 0x01, 0x65, 0xa7, 0x0f, 0xd9, 0x27, 0x43, 0xef, 0x36, 0xda, 0x15, + 0x3e, 0x20, 0x56, 0x81, 0x47, 0x19, 0xce, 0xf8, 0x5a, 0x1c, 0xc9, 0x70, 0x16, 0xc3, 0xc0, 0x04, + 0x6e, 0x22, 0x0c, 0x71, 0x4c, 0x7d, 0x0d, 0xf8, 0x10, 0xe8, 0x8c, 0xcf, 0x3c, 0x1c, 0x11, 0x9d, + 0xa3, 0x31, 0x11, 0x3f, 0xc2, 0xc2, 0xd3, 0x33, 0x8b, 0x07, 0xfe, 0x8f, 0x71, 0x80, 0x73, 0xc7, + 0x28, 0xfe, 0x0a, 0xd4, 0x5b, 0x01, 0xbe, 0x55, 0x91, 0x0d, 0x81, 0x72, 0x40, 0x82, 0x98, 0xca, + 0x58, 0x10, 0x7c, 0x93, 0x54, 0x6c, 0x12, 0x99, 0xf2, 0xd3, 0x07, 0xf0, 0x05, 0x2a, 0x98, 0x27, + 0x3e, 0x02, 0x5d, 0x64, 0x38, 0xb4, 0xa3, 0x1c, 0x8b, 0xa3, 0xfc, 0xbb, 0xa5, 0x03, 0xfc, 0x88, + 0x72, 0x08, 0xf9, 0x18, 0x0b, 0x14, 0x72, 0xd1, 0x7d, 0x24, 0x59, 0x98, 0xc8, 0x36, 0x4a, 0x31, + 0x60, 0x81, 0xa9, 0xf8, 0x78, 0xf0, 0x48, 0xe8, 0x91, 0x2b, 0x0a, 0xc3, 0x6f, 0x6c, 0x13, 0xf6, + 0xc8, 0x95, 0x61, 0x22, 0x7d, 0x4c, 0xde, 0xf0, 0x68, 0xb6, 0xe0, 0xdc, 0x32, 0x2e, 0x76, 0x11, + 0x7c, 0x55, 0x36, 0x38, 0xd1, 0xf6, 0x87, 0x63, 0xf1, 0xc0, 0x3c, 0xc4, 0x65, 0x54, 0x1a, 0xc8, + 0x3a, 0xf6, 0x15, 0xba, 0xb4, 0x35, 0xa7, 0x93, 0xff, 0x34, 0x9e, 0x65, 0x77, 0x6f, 0xd7, 0xa2, + 0x27, 0x43, 0xe7, 0x74, 0xff, 0x51, 0xbb, 0x01, 0xcc, 0x5d, 0x31, 0xbd, 0x9d, 0x55, 0x64, 0x74, + 0x90, 0xa3, 0xdb, 0x57, 0x88, 0xc7, 0x5c, 0x41, 0x17, 0x13, 0x45, 0xff, 0x15, 0x09, 0xfb, 0x12, + 0x0b, 0x65, 0x32, 0xc7, 0xdf, 0x92, 0x58, 0x9e, 0xd1, 0x5c, 0xa5, 0xaf, 0x30, 0x1f, 0x50, 0xc1, + 0xb4, 0x6e, 0x5f, 0x61, 0x4a, 0xf2, 0xff, 0x1c, 0xad, 0x8e, 0x24, 0x9e, 0xe8, 0x11, 0xc9, 0x05, + 0xec, 0x4f, 0x7c, 0xa2, 0x17, 0x5b, 0xfc, 0x44, 0x4e, 0x2e, 0xcd, 0xea, 0xf6, 0x95, 0x26, 0xf2, + 0x68, 0x8b, 0x80, 0x9b, 0x63, 0x72, 0xb2, 0x36, 0x5d, 0x4a, 0x90, 0xcd, 0xc3, 0x83, 0xe7, 0xa4, + 0xbb, 0x08, 0x81, 0x80, 0x02, 0x16, 0x27, 0xbd, 0x8b, 0x30, 0x94, 0x83, 0x09, 0xc4, 0x48, 0x51, + 0xc1, 0x8c, 0x6e, 0x5f, 0xc1, 0x43, 0xc3, 0xb2, 0xd9, 0xed, 0x8e, 0x67, 0x84, 0x4c, 0x6a, 0xfc, + 0xfb, 0x62, 0xf0, 0xb9, 0x98, 0xb8, 0xf1, 0x3f, 0x84, 0x81, 0xf4, 0x61, 0x78, 0x1e, 0x6d, 0x2c, + 0xfe, 0x08, 0x6d, 0x8d, 0x07, 0x87, 0x51, 0x1b, 0x44, 0xc0, 0xc6, 0x91, 0x35, 0x88, 0x28, 0x0e, + 0x26, 0xb2, 0x73, 0x32, 0x5f, 0x26, 0xc3, 0xfc, 0x78, 0xdb, 0xc4, 0x7b, 0x93, 0xb9, 0x26, 0xb2, + 0x61, 0x57, 0x60, 0x64, 0x2c, 0x68, 0x24, 0x70, 0x41, 0x94, 0xe0, 0x21, 0x7d, 0x3c, 0x3e, 0xae, + 0x82, 0x59, 0xca, 0xc2, 0x03, 0xc4, 0x0a, 0x18, 0xa9, 0x51, 0xf1, 0x35, 0x38, 0x9a, 0x46, 0x15, + 0xc3, 0xc1, 0x44, 0xee, 0xf3, 0xc7, 0x76, 0xdc, 0x08, 0xc7, 0xc7, 0xa3, 0x10, 0x1c, 0xd9, 0x18, + 0x1b, 0xe3, 0x11, 0xf2, 0x51, 0x8c, 0xb1, 0x23, 0x3a, 0x46, 0xfe, 0xbc, 0xa0, 0x15, 0x8d, 0x13, + 0x83, 0x43, 0x34, 0x85, 0x31, 0xc2, 0x30, 0x62, 0x53, 0x38, 0x22, 0x24, 0xbe, 0xa6, 0x02, 0x40, + 0x19, 0x58, 0xb3, 0x2f, 0x93, 0x8b, 0x34, 0xc7, 0xd0, 0x9d, 0xf5, 0xbb, 0xd5, 0xab, 0x43, 0xdc, + 0xea, 0x13, 0x86, 0x70, 0x49, 0xba, 0x12, 0xc8, 0x49, 0x19, 0x57, 0x72, 0xe2, 0x2b, 0x81, 0xf1, + 0xe5, 0xa7, 0x8f, 0xf1, 0x57, 0xa8, 0x35, 0x17, 0x1e, 0x30, 0xfd, 0xf9, 0xb1, 0xa0, 0xcc, 0xcd, + 0xfe, 0x55, 0x71, 0xf6, 0x7f, 0x08, 0x6c, 0x47, 0xb5, 0x11, 0x87, 0x1d, 0x1c, 0x4d, 0xdf, 0x46, + 0x3c, 0xba, 0x03, 0xa2, 0x3f, 0x92, 0x05, 0xc7, 0x59, 0x27, 0xf2, 0xfd, 0x00, 0x71, 0xc2, 0x73, + 0x78, 0x42, 0x27, 0x39, 0x04, 0xe5, 0x71, 0x2d, 0x48, 0x25, 0x59, 0xca, 0x94, 0x60, 0x6f, 0x22, + 0xab, 0x1b, 0xf9, 0xca, 0x7d, 0x3d, 0xc3, 0xea, 0xc8, 0x87, 0xfb, 0x1d, 0x02, 0xbc, 0xbf, 0xd6, + 0xa8, 0x8a, 0x6b, 0x8d, 0x03, 0x56, 0x26, 0x13, 0xef, 0x5c, 0x13, 0x91, 0x51, 0x76, 0x27, 0xbe, + 0x73, 0x1d, 0x5d, 0x76, 0xfa, 0x28, 0xbd, 0x57, 0x05, 0xd9, 0xa6, 0xed, 0x78, 0xf0, 0xfe, 0x24, + 0xad, 0x93, 0x4a, 0x3e, 0x04, 0xc9, 0x7f, 0xd6, 0xca, 0x20, 0x8b, 0x2b, 0xc7, 0x66, 0x0c, 0xb7, + 0xc6, 0x1f, 0x75, 0x36, 0x3c, 0x83, 0x78, 0x75, 0xe3, 0xf2, 0x17, 0x5a, 0xfb, 0x3d, 0xa4, 0x93, + 0x8f, 0x93, 0xc6, 0xd3, 0xa1, 0xf2, 0x6b, 0x46, 0x1f, 0xc0, 0x48, 0x2d, 0x9e, 0x4e, 0x64, 0xc9, + 0xe9, 0xe3, 0xf6, 0xda, 0xe3, 0xcc, 0xb7, 0x75, 0xd9, 0xec, 0x22, 0x78, 0x3f, 0x75, 0x19, 0xa9, + 0x1b, 0xbb, 0x48, 0xfe, 0x48, 0x4c, 0xac, 0x6b, 0x2b, 0x89, 0x2f, 0xab, 0x86, 0xf1, 0x65, 0x93, + 0x36, 0x28, 0x7a, 0x00, 0x9d, 0xb2, 0x34, 0xe9, 0x06, 0x15, 0x53, 0xf6, 0x44, 0xe2, 0x74, 0x9e, + 0x68, 0x22, 0x8f, 0x1a, 0x95, 0x0d, 0xff, 0x8a, 0xa4, 0xa7, 0x8f, 0x25, 0x62, 0x67, 0x70, 0xa1, + 0x8e, 0xda, 0x77, 0x03, 0xd3, 0x07, 0x78, 0x70, 0xd6, 0x44, 0x70, 0x7e, 0x28, 0x5a, 0x40, 0x22, + 0x93, 0x63, 0x81, 0xe9, 0xed, 0x01, 0x4c, 0xeb, 0x02, 0x4c, 0x77, 0x8e, 0xc8, 0x45, 0xfa, 0x80, + 0xfd, 0x54, 0x0e, 0x1c, 0xa7, 0x93, 0xfe, 0x92, 0xd5, 0x61, 0x11, 0x56, 0xdf, 0xac, 0x1c, 0xf1, + 0x66, 0xdb, 0xc1, 0x10, 0xac, 0x42, 0x2c, 0xe7, 0x5c, 0x5f, 0x2c, 0x67, 0x6d, 0x91, 0x86, 0x73, + 0xc5, 0x9d, 0x28, 0xd9, 0x69, 0x1b, 0x16, 0x66, 0x82, 0xc8, 0x9e, 0x74, 0xb9, 0xc1, 0x77, 0xe2, + 0x3d, 0xa2, 0x53, 0xf2, 0xf7, 0x88, 0xfe, 0x7e, 0xb2, 0x75, 0x3b, 0x52, 0x74, 0x9f, 0xc0, 0x53, + 0xb6, 0x9d, 0x12, 0xac, 0xe8, 0x49, 0x70, 0xf7, 0x9f, 0xc3, 0x9d, 0x2c, 0x8c, 0x20, 0x32, 0xa2, + 0x3b, 0x19, 0x21, 0x70, 0x94, 0xee, 0x64, 0xc3, 0x18, 0x48, 0x1f, 0xc7, 0xdf, 0xcf, 0xb1, 0xdd, + 0x7c, 0xd2, 0x6e, 0xe0, 0x97, 0x95, 0xd4, 0x47, 0xe9, 0xef, 0x66, 0x12, 0xf9, 0x3f, 0x13, 0xbe, + 0xe2, 0x87, 0xe9, 0x24, 0x1e, 0xcd, 0x71, 0xe4, 0x26, 0xb0, 0x6e, 0xa4, 0x10, 0x5f, 0xf4, 0xf3, + 0x66, 0xc7, 0xdb, 0x19, 0xd3, 0x89, 0x8e, 0x2b, 0x98, 0x16, 0x8b, 0x57, 0x4f, 0x1f, 0xe0, 0xbf, + 0x64, 0x12, 0x85, 0x90, 0x0a, 0x44, 0x42, 0xd8, 0x8a, 0x10, 0x71, 0x82, 0xc0, 0x4f, 0xb1, 0xf4, + 0x26, 0xa8, 0xd1, 0xe7, 0xcc, 0x0e, 0xb2, 0x1f, 0x80, 0x1a, 0x4d, 0xf8, 0x1a, 0x9f, 0x46, 0xc7, + 0x91, 0xfb, 0x4f, 0xaa, 0xd1, 0x81, 0x48, 0xc6, 0xa4, 0xd1, 0xb1, 0xf4, 0xd2, 0x97, 0xf1, 0x2b, + 0x66, 0xd9, 0x44, 0xaa, 0x66, 0x5a, 0x97, 0xe0, 0x3f, 0xe6, 0x41, 0xd1, 0x8f, 0x23, 0xec, 0xed, + 0xb0, 0x58, 0x30, 0x1f, 0x96, 0xbe, 0x1b, 0x65, 0x84, 0x78, 0x2f, 0x62, 0x38, 0xa9, 0xdc, 0x81, + 0x70, 0x52, 0x25, 0x30, 0x67, 0x5a, 0x1e, 0x72, 0x2c, 0xa3, 0xbb, 0xdc, 0x35, 0xb6, 0xdd, 0xd3, + 0x53, 0x03, 0x2f, 0xaf, 0xab, 0x72, 0x79, 0x74, 0xf1, 0x0b, 0xfe, 0x02, 0xd1, 0x82, 0x78, 0x81, + 0x68, 0x44, 0xf4, 0xab, 0xe9, 0xe8, 0xe8, 0x57, 0x41, 0x74, 0x2b, 0x30, 0x3c, 0x38, 0xb6, 0xac, + 0x6d, 0x9c, 0x30, 0xdc, 0xdf, 0xad, 0x92, 0x51, 0xd8, 0x82, 0xd0, 0x8f, 0xaf, 0x56, 0x13, 0xad, + 0xee, 0x61, 0x45, 0x58, 0xe8, 0x57, 0x82, 0xc4, 0x16, 0x2a, 0x5f, 0x79, 0xb5, 0xaf, 0xf2, 0x81, + 0xc9, 0x93, 0x95, 0x30, 0x79, 0x78, 0xa5, 0xca, 0xc9, 0xde, 0xe9, 0x2a, 0xbf, 0x58, 0x28, 0x53, + 0xdb, 0x09, 0x9c, 0x46, 0xca, 0x81, 0x13, 0x7e, 0xb4, 0xdb, 0x5e, 0x0f, 0x19, 0x8e, 0x61, 0xb5, + 0x11, 0xfc, 0xa4, 0x32, 0x0e, 0xb3, 0x77, 0x19, 0x14, 0xcc, 0xb6, 0x6d, 0x35, 0xcd, 0x67, 0xfa, + 0x97, 0xcb, 0xc5, 0x07, 0x59, 0x27, 0x12, 0xa9, 0xb2, 0x2f, 0xf4, 0xe0, 0x5b, 0xad, 0x0a, 0xa6, + 0xdb, 0x86, 0xd3, 0xa1, 0x41, 0xf8, 0x72, 0x7d, 0x17, 0x39, 0x45, 0x12, 0x2a, 0xfb, 0x9f, 0xe8, + 0xe1, 0xd7, 0x5a, 0x43, 0x14, 0x62, 0xbe, 0x2f, 0x9a, 0x47, 0x24, 0xb1, 0xa5, 0xf0, 0x23, 0x41, + 0xe6, 0x58, 0x3a, 0x0e, 0xea, 0x1a, 0xf4, 0xd2, 0xf1, 0x29, 0x7a, 0x47, 0x74, 0x90, 0x90, 0x74, + 0x79, 0x80, 0x14, 0x75, 0x00, 0x8d, 0x49, 0x2f, 0x0f, 0x48, 0x71, 0x91, 0xbe, 0x66, 0xbe, 0x2b, + 0x0f, 0xe6, 0x68, 0xaf, 0xc6, 0xc4, 0x09, 0x5f, 0xa0, 0x82, 0x7c, 0x13, 0x79, 0xf7, 0xa0, 0x7d, + 0xd8, 0x3c, 0xfc, 0x98, 0x5c, 0x04, 0xea, 0xa5, 0x20, 0xe0, 0x20, 0xfe, 0x9b, 0x74, 0xdf, 0xde, + 0xe7, 0x6b, 0x81, 0xf2, 0x34, 0xe9, 0x7d, 0xfb, 0xf8, 0xe2, 0xd3, 0xc7, 0xe7, 0xa7, 0x55, 0xa0, + 0x96, 0x3a, 0x1d, 0xd8, 0x3e, 0x3c, 0x14, 0xd7, 0x83, 0x19, 0xbf, 0xcd, 0x84, 0x31, 0x20, 0xf9, + 0xa4, 0xa4, 0x8b, 0xa0, 0x81, 0x6c, 0x4a, 0x9d, 0x89, 0xef, 0x2a, 0xc4, 0x94, 0x9d, 0x3e, 0x28, + 0x5f, 0x98, 0x62, 0x8d, 0x66, 0xd1, 0xb6, 0x2f, 0x91, 0xa3, 0x32, 0xbf, 0xac, 0x82, 0xdc, 0x32, + 0xf2, 0xda, 0x3b, 0xd0, 0x1d, 0x4b, 0x9b, 0xe9, 0xbb, 0xf7, 0x7c, 0x48, 0x50, 0xce, 0xa4, 0xd1, + 0x9f, 0x7d, 0xb6, 0x17, 0x08, 0xcb, 0x93, 0x8e, 0xfe, 0x1c, 0x5b, 0xfa, 0x04, 0x0e, 0xc1, 0x65, + 0xc1, 0x7c, 0xb0, 0x02, 0x46, 0x31, 0x7b, 0x47, 0xe6, 0x01, 0xb7, 0x1e, 0x3a, 0xc4, 0x6e, 0x86, + 0x7f, 0x9c, 0x2c, 0xc4, 0x5a, 0x20, 0x73, 0xb1, 0xe6, 0x29, 0x2f, 0x4c, 0x26, 0x08, 0xbe, 0x26, + 0xc7, 0xe0, 0x04, 0x56, 0x00, 0x54, 0x50, 0x20, 0x0c, 0x2d, 0x99, 0x97, 0x89, 0xeb, 0xa1, 0xb0, + 0x50, 0xf9, 0xac, 0xb1, 0x2c, 0x54, 0xde, 0x29, 0x2e, 0x54, 0x4a, 0x46, 0x4c, 0xf6, 0xd7, 0x29, + 0x13, 0xfa, 0xe2, 0xe0, 0xef, 0xc7, 0xbe, 0x4c, 0x99, 0xc0, 0x17, 0x67, 0x48, 0xf9, 0xe9, 0x23, + 0xfa, 0xc6, 0xff, 0xca, 0x3a, 0x6b, 0x7f, 0x43, 0x16, 0xfe, 0xcf, 0x13, 0x20, 0x7b, 0x0e, 0xff, + 0xf9, 0x87, 0xf0, 0x46, 0xad, 0x97, 0x8d, 0x21, 0xb8, 0xc3, 0x93, 0x41, 0x16, 0xd3, 0x67, 0xd3, + 0x9e, 0x9b, 0xe5, 0x76, 0x87, 0x31, 0x23, 0x3a, 0xf9, 0x4e, 0x3b, 0x05, 0xf2, 0xae, 0xbd, 0xe7, + 0xb4, 0xb1, 0xf9, 0x8d, 0x35, 0x86, 0x3d, 0x25, 0x0d, 0x6a, 0x2a, 0x90, 0x5e, 0x18, 0x9f, 0xcb, + 0x29, 0x77, 0xc1, 0x92, 0x2a, 0x5c, 0xb0, 0x94, 0x60, 0xff, 0x41, 0x82, 0xb7, 0xf4, 0x35, 0xe2, + 0xcb, 0xe4, 0xae, 0xc1, 0xce, 0xb8, 0x60, 0x8f, 0x10, 0xcb, 0x61, 0xd5, 0x21, 0xa9, 0xc3, 0xb8, + 0x28, 0xda, 0x20, 0x8e, 0xfc, 0x44, 0x1d, 0xc6, 0x25, 0x78, 0x98, 0xc8, 0x29, 0xf7, 0x3c, 0x73, + 0x72, 0xbd, 0x30, 0x4e, 0x74, 0xb3, 0x82, 0xd2, 0x1f, 0x0a, 0x9d, 0x31, 0x3a, 0xbf, 0x8e, 0x8c, + 0xce, 0x11, 0xb9, 0xbf, 0xfe, 0xa6, 0x4a, 0x22, 0x69, 0xfa, 0x46, 0x90, 0xfc, 0x45, 0x49, 0x89, + 0x21, 0xc2, 0x63, 0xb0, 0x10, 0x47, 0x7a, 0x6e, 0xf4, 0xd0, 0xe2, 0xa2, 0xe8, 0x38, 0xfe, 0x27, + 0x1d, 0x5a, 0x5c, 0x96, 0x91, 0xf4, 0x81, 0xfc, 0x25, 0x7a, 0x31, 0x59, 0xa9, 0xed, 0x99, 0x97, + 0xc7, 0xdc, 0xd2, 0xc4, 0xe1, 0x25, 0x61, 0x34, 0xe1, 0x03, 0x12, 0xa2, 0x1c, 0x4e, 0x3a, 0x9a, + 0xb0, 0x1c, 0x1b, 0xe9, 0xc3, 0xf4, 0x93, 0x00, 0x4b, 0x8f, 0xad, 0xed, 0xbc, 0x41, 0x05, 0x6a, + 0x13, 0x79, 0x10, 0x1d, 0x1e, 0xad, 0xb3, 0x60, 0x96, 0x5b, 0x3a, 0xf0, 0x2f, 0xbc, 0x11, 0xd2, + 0x92, 0x1e, 0x94, 0x0f, 0x44, 0xc6, 0x2f, 0xba, 0x4c, 0xfa, 0xa0, 0xbc, 0x0c, 0x13, 0x13, 0x38, + 0x28, 0xcf, 0x96, 0x7d, 0xbe, 0x5f, 0x80, 0x1a, 0xd7, 0x0a, 0xd0, 0xa1, 0x80, 0x3a, 0x8a, 0xa5, + 0xa0, 0xb7, 0x87, 0xc6, 0xc6, 0x84, 0xb0, 0xfa, 0x30, 0x8f, 0x55, 0x43, 0xc4, 0xea, 0x76, 0x19, + 0x31, 0xc9, 0x19, 0x1f, 0x52, 0x13, 0xfc, 0x77, 0x06, 0x70, 0xe9, 0x02, 0x5c, 0x4f, 0x1e, 0x99, + 0x8f, 0xf4, 0x11, 0xfb, 0x05, 0x3a, 0x6e, 0x35, 0xe9, 0xdc, 0x6a, 0x3c, 0xe3, 0x16, 0x9b, 0xb6, + 0xa9, 0xc2, 0xb4, 0x2d, 0xe1, 0xc1, 0x8a, 0xd0, 0x5f, 0xd8, 0x67, 0x6e, 0x18, 0x44, 0xd9, 0x31, + 0x1f, 0xac, 0x18, 0xca, 0x41, 0xfa, 0xe0, 0x7c, 0x4b, 0x05, 0x60, 0xc5, 0xb1, 0xf7, 0x7a, 0x0d, + 0xa7, 0x83, 0x1c, 0xf8, 0xe7, 0xe1, 0x4c, 0xed, 0x67, 0xc6, 0x30, 0x53, 0x5b, 0x07, 0x60, 0x3b, + 0x20, 0xce, 0x34, 0xfc, 0xd1, 0x72, 0xf3, 0xb2, 0x90, 0x29, 0x9d, 0xa3, 0x21, 0xde, 0x2d, 0xfc, + 0x54, 0x11, 0xe3, 0xb8, 0x3e, 0x2b, 0x24, 0x37, 0xce, 0x99, 0xda, 0xbb, 0x03, 0xac, 0x5b, 0x02, + 0xd6, 0x4f, 0x39, 0x04, 0x27, 0xe9, 0x63, 0xfe, 0xf7, 0x53, 0x60, 0x86, 0xee, 0xcb, 0x52, 0x99, + 0xfe, 0x4d, 0x08, 0xfa, 0xcf, 0x8f, 0x01, 0xf4, 0x0d, 0x30, 0x6b, 0x87, 0xd4, 0x69, 0x9f, 0xca, + 0xaf, 0x94, 0xc5, 0xc2, 0xce, 0xf1, 0xa5, 0x0b, 0x64, 0xe0, 0x6f, 0xf0, 0xc8, 0xeb, 0x22, 0xf2, + 0x77, 0xc6, 0xc8, 0x9b, 0xa3, 0x38, 0x4e, 0xe8, 0xdf, 0x13, 0x40, 0xbf, 0x21, 0x40, 0x5f, 0x3a, + 0x0c, 0x2b, 0x13, 0xb8, 0x57, 0x41, 0x05, 0x59, 0x72, 0x0c, 0xf2, 0x2d, 0x29, 0x2e, 0xc4, 0x9c, + 0x06, 0x53, 0xa4, 0xc9, 0x06, 0x13, 0x44, 0xff, 0x11, 0xbf, 0x31, 0xb6, 0x3c, 0xe4, 0x04, 0x4b, + 0xec, 0xfe, 0x23, 0xe6, 0xc1, 0x77, 0x3f, 0x77, 0x4f, 0xe7, 0xe9, 0x8e, 0x73, 0x90, 0x30, 0xf2, + 0xec, 0x91, 0x97, 0xf8, 0xd8, 0x0e, 0x46, 0x8e, 0x32, 0x7b, 0x1c, 0xc2, 0x48, 0xfa, 0xc0, 0x7f, + 0x31, 0x0b, 0x4e, 0xd3, 0xe5, 0xbf, 0x65, 0xc7, 0xde, 0xed, 0xbb, 0xc6, 0xcc, 0x3c, 0xbc, 0x2e, + 0xdc, 0x08, 0xe6, 0x3d, 0xc1, 0xf1, 0x9e, 0xe9, 0x44, 0x5f, 0x2a, 0xfc, 0x03, 0xde, 0x79, 0xe6, + 0x69, 0x22, 0x92, 0x8b, 0x31, 0x02, 0x8c, 0xe2, 0x3d, 0xf1, 0x8e, 0x8a, 0x24, 0xa3, 0xdc, 0x6a, + 0xa2, 0x3a, 0xd2, 0xe2, 0x72, 0xa0, 0x53, 0x39, 0x19, 0x9d, 0xfa, 0x60, 0xa0, 0x53, 0xff, 0x45, + 0xd0, 0xa9, 0x95, 0xc3, 0x8b, 0x64, 0x02, 0x4b, 0x4c, 0xf3, 0x20, 0xbf, 0x6c, 0x76, 0x3d, 0xe4, + 0xc0, 0xaf, 0xb0, 0x79, 0xd4, 0xab, 0x52, 0xec, 0x5e, 0x96, 0x40, 0x7e, 0x8b, 0x94, 0xc6, 0x0c, + 0xb2, 0x5b, 0xe4, 0xb0, 0xa1, 0x1c, 0xea, 0xec, 0xdb, 0xa4, 0x41, 0xfe, 0xfa, 0xc8, 0x8c, 0x6d, + 0x02, 0x96, 0x20, 0xc8, 0xdf, 0x70, 0x16, 0x26, 0x72, 0xbf, 0x55, 0x5e, 0x47, 0xbb, 0x78, 0x04, + 0xb9, 0x94, 0x1e, 0xc2, 0x45, 0xa0, 0x9a, 0x1d, 0x97, 0x34, 0xbd, 0x69, 0x1d, 0xff, 0x4d, 0xea, + 0x72, 0xd4, 0x2f, 0x2a, 0xca, 0xf2, 0xa4, 0x5d, 0x8e, 0xa4, 0xb8, 0x48, 0x1f, 0xb3, 0xef, 0x12, + 0x7f, 0xd3, 0x5e, 0xd7, 0x68, 0x23, 0xcc, 0x7d, 0x6a, 0xa8, 0xcd, 0x03, 0xc5, 0xf4, 0x47, 0x7c, + 0xc5, 0xe4, 0xdb, 0x69, 0xee, 0x10, 0xed, 0x74, 0xd4, 0xd5, 0xc8, 0x40, 0xe6, 0xa4, 0xe2, 0x47, + 0xb6, 0x1a, 0x19, 0xcb, 0xc6, 0x04, 0x6e, 0x2f, 0xf5, 0xcf, 0xe3, 0x4e, 0xb4, 0xb5, 0x8e, 0xba, + 0x57, 0xc3, 0x84, 0x35, 0xb6, 0xb3, 0xb7, 0xa3, 0xec, 0xd5, 0x44, 0xf3, 0x30, 0x01, 0xb4, 0xe6, + 0x19, 0x5a, 0x9f, 0x63, 0xc3, 0x68, 0xca, 0xdb, 0xa5, 0xae, 0xed, 0x78, 0xc9, 0xb6, 0x4b, 0x31, + 0x77, 0x3a, 0xf9, 0x2e, 0xe9, 0xf9, 0x2d, 0xf1, 0x78, 0xf6, 0xb8, 0x86, 0xcf, 0x04, 0xe7, 0xb7, + 0x86, 0x31, 0x90, 0x3e, 0xbc, 0x6f, 0x3d, 0xa2, 0xc1, 0x73, 0xd4, 0xe6, 0xc8, 0xda, 0xc0, 0xd8, + 0x86, 0xce, 0x51, 0x9a, 0x63, 0x34, 0x0f, 0xe9, 0xe3, 0xf5, 0x77, 0xdc, 0xc0, 0xf9, 0xa6, 0x09, + 0x0e, 0x9c, 0x7e, 0xcb, 0xcc, 0x8d, 0xd8, 0x32, 0x47, 0xdd, 0x5d, 0x60, 0xb2, 0x1e, 0xdf, 0x80, + 0x39, 0xca, 0xee, 0x42, 0x0c, 0x13, 0xe9, 0x23, 0xfe, 0x66, 0x15, 0xe4, 0x9a, 0x93, 0x1f, 0x2f, + 0x47, 0x9d, 0x8b, 0x10, 0x59, 0x35, 0xc7, 0x36, 0x5c, 0x8e, 0x32, 0x17, 0x89, 0x64, 0x61, 0x02, + 0xf1, 0xfb, 0x8f, 0x83, 0x59, 0x32, 0xe1, 0xf6, 0x77, 0x5b, 0xff, 0x8e, 0x8d, 0x9a, 0xaf, 0x4f, + 0xb1, 0xad, 0xde, 0x0d, 0x0a, 0xfe, 0xee, 0x10, 0x1b, 0x39, 0x17, 0xe4, 0xda, 0xa7, 0xcf, 0xa5, + 0x1e, 0x7c, 0x7f, 0x28, 0x9f, 0x88, 0xb1, 0xef, 0x04, 0x8e, 0xea, 0x13, 0x71, 0xa4, 0xbb, 0x81, + 0xbf, 0x1f, 0x8e, 0xa8, 0xff, 0x3d, 0x3d, 0xcc, 0xfb, 0x77, 0x09, 0xb3, 0x03, 0x76, 0x09, 0x3f, + 0xc9, 0x63, 0xd9, 0x14, 0xb1, 0x7c, 0x92, 0xac, 0x08, 0xc7, 0x38, 0xd6, 0xbe, 0x37, 0x80, 0xf3, + 0x9c, 0x00, 0xe7, 0xe2, 0xa1, 0x78, 0x99, 0xc0, 0xf9, 0xc9, 0x6c, 0x38, 0xe6, 0x7e, 0x2a, 0xc5, + 0x76, 0xdc, 0x77, 0x38, 0x23, 0x7b, 0xe0, 0x70, 0x86, 0xd0, 0xd2, 0x73, 0x87, 0x6c, 0xe9, 0x9f, + 0xe2, 0xb5, 0xa3, 0x25, 0x6a, 0xc7, 0x93, 0xe5, 0x11, 0x19, 0xdf, 0xc8, 0xfc, 0xbe, 0x40, 0x3d, + 0xce, 0x0b, 0xea, 0x51, 0x3e, 0x1c, 0x33, 0xe9, 0xeb, 0xc7, 0x6f, 0xf9, 0x13, 0xda, 0x23, 0x6e, + 0xef, 0xa3, 0x6e, 0x44, 0x0a, 0x42, 0x1c, 0xdb, 0xc8, 0x3d, 0xca, 0x46, 0xe4, 0x30, 0x4e, 0x26, + 0x10, 0xd2, 0x6d, 0x0e, 0xcc, 0x10, 0x9e, 0xce, 0x9b, 0x9d, 0x6d, 0xe4, 0xc1, 0x57, 0x53, 0x57, + 0x45, 0x3f, 0x80, 0xe6, 0x98, 0xa2, 0x1c, 0x45, 0x1d, 0x9b, 0x4d, 0xea, 0x2f, 0x40, 0x99, 0x5c, + 0xe0, 0x18, 0x9c, 0x74, 0x20, 0xc6, 0xa1, 0x1c, 0xa4, 0x0f, 0xd9, 0x6f, 0x50, 0x67, 0x8e, 0x9a, + 0xb1, 0x6f, 0xef, 0x79, 0xf0, 0x39, 0x63, 0xe8, 0xa0, 0x17, 0x41, 0xbe, 0x4b, 0xa8, 0xb1, 0xd3, + 0x19, 0xf1, 0xd3, 0x1d, 0x26, 0x02, 0x5a, 0xbe, 0xce, 0xbe, 0x4c, 0x7a, 0x44, 0x23, 0x94, 0x23, + 0xa5, 0x33, 0xe9, 0x23, 0x1a, 0x43, 0xca, 0x9f, 0xc8, 0x55, 0x3d, 0x05, 0x5c, 0xba, 0xb9, 0x6b, + 0x7a, 0x63, 0x0a, 0x04, 0xd1, 0xc5, 0xb4, 0xfc, 0x40, 0x10, 0xe4, 0x21, 0xe9, 0xc1, 0x53, 0x4e, + 0x2a, 0xf8, 0xf3, 0x49, 0x1f, 0x3c, 0x8d, 0x2f, 0x3e, 0x7d, 0x4c, 0x7e, 0x8e, 0xb6, 0xac, 0x73, + 0xd4, 0x07, 0x37, 0x45, 0xf7, 0xde, 0x91, 0x1b, 0x0b, 0x65, 0xed, 0xe8, 0x1a, 0xcb, 0xc0, 0xf2, + 0xd3, 0x07, 0xe6, 0x97, 0x7f, 0x00, 0xe4, 0x96, 0xd0, 0xc5, 0xbd, 0x6d, 0x78, 0x27, 0x28, 0xb4, + 0x1c, 0x84, 0xaa, 0xd6, 0x96, 0x8d, 0xa5, 0xeb, 0xe1, 0xff, 0x3e, 0x24, 0xec, 0x09, 0xe3, 0xb1, + 0x83, 0x8c, 0x4e, 0x78, 0x0c, 0xcd, 0x7f, 0x84, 0x2f, 0x53, 0x40, 0xb6, 0xe9, 0x19, 0x1e, 0x9c, + 0x0e, 0xb0, 0x85, 0xcf, 0xe1, 0xb1, 0xb8, 0x53, 0xc4, 0xe2, 0x46, 0x41, 0x16, 0x84, 0x83, 0x05, + 0xfc, 0x7d, 0x04, 0x00, 0x10, 0x14, 0xee, 0x75, 0x6d, 0x0b, 0xe7, 0xf0, 0x4f, 0x4a, 0xfa, 0xcf, + 0xf0, 0x95, 0x81, 0xb8, 0xef, 0x12, 0xc4, 0xfd, 0x48, 0xb9, 0x22, 0x26, 0xb0, 0xd2, 0xa6, 0x80, + 0x69, 0x2c, 0xda, 0x55, 0x64, 0x74, 0x5c, 0xf8, 0xd0, 0x50, 0xf9, 0x23, 0xc4, 0x0c, 0x3f, 0x22, + 0x1d, 0xd3, 0x93, 0xd6, 0x2a, 0x20, 0x1e, 0xed, 0x2f, 0xe0, 0xc7, 0x34, 0x51, 0xc4, 0x98, 0x26, + 0xb7, 0x82, 0xac, 0x69, 0x6d, 0xd9, 0xcc, 0x7b, 0xed, 0xda, 0x08, 0xda, 0x58, 0x27, 0x74, 0x92, + 0x51, 0x32, 0xe0, 0x67, 0x3c, 0x5b, 0x13, 0xb9, 0x3b, 0x2f, 0x8b, 0x4b, 0x87, 0xff, 0xf7, 0x50, + 0x61, 0x6b, 0x1a, 0xc8, 0xf6, 0x0c, 0x6f, 0x87, 0x15, 0x4d, 0xfe, 0x63, 0x1b, 0x79, 0xcf, 0x32, + 0x2c, 0xdb, 0xda, 0xdf, 0x35, 0x9f, 0x19, 0x5c, 0xd1, 0x2b, 0xa4, 0x61, 0xce, 0xb7, 0x91, 0x85, + 0x1c, 0xc3, 0x43, 0xcd, 0xcb, 0xdb, 0x64, 0x8e, 0x55, 0xd0, 0xf9, 0xa4, 0xc4, 0xfa, 0x8f, 0x39, + 0x8e, 0xd6, 0xff, 0x2d, 0xb3, 0x8b, 0x48, 0xc0, 0x27, 0xa6, 0xff, 0xfe, 0x73, 0x22, 0xfd, 0x1f, + 0x50, 0x44, 0xfa, 0x68, 0xfc, 0xab, 0x02, 0x66, 0x9b, 0x58, 0xe1, 0x9a, 0x7b, 0xbb, 0xbb, 0x86, + 0xb3, 0x0f, 0x1f, 0x16, 0xa2, 0xc2, 0xa9, 0x66, 0x46, 0x50, 0x4d, 0xf8, 0x9b, 0xd2, 0xb7, 0x53, + 0xb3, 0xa6, 0xcd, 0x95, 0x90, 0xb8, 0x1d, 0x3c, 0x06, 0xe4, 0xb0, 0x7a, 0xfb, 0xfe, 0x7c, 0xb1, + 0x0d, 0x81, 0xe6, 0x94, 0x0c, 0x8c, 0x35, 0x94, 0xb7, 0x09, 0x04, 0xe5, 0x50, 0xc0, 0xf1, 0xa6, + 0x67, 0xb4, 0x2f, 0xad, 0xd8, 0x8e, 0xbd, 0xe7, 0x99, 0x16, 0x72, 0xe1, 0x83, 0x43, 0x04, 0x7c, + 0xfd, 0xcf, 0x84, 0xfa, 0x0f, 0xff, 0x3d, 0x23, 0x3b, 0x8a, 0x06, 0xdd, 0x2a, 0x4f, 0x3e, 0x22, + 0xce, 0x95, 0xdc, 0xb8, 0x28, 0x43, 0x31, 0x7d, 0xa1, 0xbd, 0x49, 0x05, 0xc5, 0xca, 0x7d, 0x3d, + 0xdb, 0xf1, 0x6a, 0x76, 0xdb, 0xe8, 0xba, 0x9e, 0xed, 0x20, 0xd8, 0x88, 0x95, 0x1a, 0xee, 0x61, + 0x3a, 0x76, 0x3b, 0x1c, 0x1c, 0xd9, 0x13, 0xaf, 0x76, 0xaa, 0xa8, 0xe3, 0xbf, 0x21, 0xbd, 0xcb, + 0x48, 0xa5, 0xd2, 0xcf, 0x51, 0x84, 0x9e, 0x0f, 0xea, 0xd2, 0x92, 0xb9, 0xe2, 0xcb, 0xed, 0x3c, + 0x4a, 0x31, 0x35, 0x81, 0xa5, 0x72, 0x05, 0xcc, 0x35, 0xf7, 0x2e, 0x06, 0x44, 0x5c, 0xde, 0x08, + 0x79, 0x8d, 0x74, 0x30, 0x0b, 0xa6, 0x78, 0x3c, 0xa1, 0x08, 0xf9, 0xde, 0x00, 0xe6, 0x5c, 0x3e, + 0x1b, 0xc3, 0x5b, 0x4c, 0x94, 0x0c, 0x62, 0x31, 0xbc, 0xd4, 0xf4, 0x05, 0xf8, 0x3e, 0x05, 0xcc, + 0x35, 0x7a, 0xc8, 0x42, 0x1d, 0xea, 0x63, 0x27, 0x08, 0xf0, 0x65, 0x09, 0x05, 0x28, 0x10, 0x8a, + 0x10, 0x60, 0xe8, 0x0f, 0xbb, 0xe4, 0x0b, 0x2f, 0x4c, 0x48, 0x24, 0xb8, 0xb8, 0xd2, 0xd2, 0x17, + 0xdc, 0x97, 0x14, 0x30, 0xa3, 0xef, 0x59, 0xeb, 0x8e, 0x8d, 0x47, 0x63, 0x07, 0x3e, 0x29, 0xec, + 0x20, 0x6e, 0x01, 0x27, 0x3a, 0x7b, 0x0e, 0x59, 0x7f, 0xaa, 0x5a, 0x4d, 0xd4, 0xb6, 0xad, 0x8e, + 0x4b, 0xea, 0x91, 0xd3, 0x0f, 0xbe, 0xb8, 0x23, 0x7b, 0xff, 0xd7, 0xd5, 0x0c, 0x7c, 0x81, 0x74, + 0xc4, 0x1c, 0x5a, 0x79, 0xae, 0x68, 0xf9, 0x9e, 0x40, 0x32, 0x2e, 0xce, 0xb0, 0x12, 0xd2, 0x17, + 0xee, 0xe7, 0x14, 0xa0, 0x95, 0xda, 0x6d, 0x7b, 0xcf, 0xf2, 0x9a, 0xa8, 0x8b, 0xda, 0x5e, 0xcb, + 0x31, 0xda, 0x88, 0xb7, 0x9f, 0x8b, 0x40, 0xed, 0x98, 0x0e, 0xeb, 0x83, 0xf1, 0x5f, 0x26, 0xc7, + 0x97, 0x49, 0xef, 0x38, 0xd2, 0x5a, 0x1e, 0x2c, 0x25, 0x81, 0x38, 0xe5, 0xf6, 0x15, 0x25, 0x0b, + 0x4a, 0x5f, 0xaa, 0x9f, 0x52, 0xc0, 0xb4, 0xdf, 0x63, 0x6f, 0xcb, 0x08, 0xf3, 0xe7, 0x12, 0x4e, + 0x46, 0x02, 0xe2, 0x09, 0x64, 0xf8, 0xae, 0x04, 0xb3, 0x8a, 0x28, 0xfa, 0xc9, 0x44, 0x57, 0x4a, + 0x2e, 0x3a, 0xfc, 0x58, 0x6f, 0x6c, 0x2e, 0x37, 0x6a, 0x4b, 0x15, 0xbd, 0xa8, 0xc2, 0xaf, 0x28, + 0x20, 0xbb, 0x6e, 0x5a, 0xdb, 0x7c, 0x60, 0xb3, 0x93, 0xd8, 0x8e, 0xec, 0xa0, 0xfb, 0x58, 0x4b, + 0xa7, 0x0f, 0xda, 0x6d, 0xe0, 0xa4, 0xb5, 0xb7, 0x7b, 0x11, 0x39, 0x8d, 0x2d, 0x32, 0xca, 0xba, + 0x2d, 0xbb, 0x89, 0x2c, 0x6a, 0x84, 0xe6, 0xf4, 0x81, 0xef, 0x44, 0x13, 0x4c, 0x62, 0xf2, 0x80, + 0x39, 0x89, 0x90, 0x78, 0xc0, 0x94, 0xc2, 0x31, 0x95, 0x68, 0xda, 0x30, 0x80, 0x78, 0xfa, 0x9a, + 0xfa, 0xdb, 0x39, 0x70, 0x75, 0xc9, 0xda, 0x27, 0x36, 0x05, 0xed, 0xe0, 0xcb, 0x3b, 0x86, 0xb5, + 0x8d, 0xc8, 0x00, 0x11, 0x48, 0x9c, 0x8f, 0xf4, 0x9f, 0x11, 0x23, 0xfd, 0x6b, 0x3a, 0x98, 0xb2, + 0x9d, 0x0e, 0x72, 0x16, 0xf7, 0x09, 0x4f, 0xfd, 0xcb, 0xce, 0xac, 0x4d, 0x0e, 0x2a, 0x62, 0x81, + 0x91, 0x5f, 0x68, 0xd0, 0xef, 0x75, 0x9f, 0xd0, 0xd9, 0x5b, 0xc0, 0x14, 0x4b, 0xd3, 0x66, 0x41, + 0xa1, 0xa1, 0x2f, 0x55, 0xf4, 0xcd, 0xea, 0x52, 0xf1, 0x98, 0x76, 0x15, 0x38, 0x5e, 0x6d, 0x55, + 0xf4, 0x52, 0xab, 0xda, 0xa8, 0x6f, 0x92, 0xf4, 0x62, 0x06, 0x3e, 0x2f, 0x2b, 0xeb, 0xd9, 0x1b, + 0xcf, 0xcc, 0x20, 0x58, 0x75, 0x30, 0xd5, 0xa6, 0x19, 0xc8, 0x10, 0x3a, 0x93, 0xa8, 0x76, 0x8c, + 0x20, 0x4d, 0xd0, 0x7d, 0x42, 0xda, 0x19, 0x00, 0xae, 0x38, 0xb6, 0xb5, 0x1d, 0x9e, 0x69, 0x2b, + 0xe8, 0x5c, 0x0a, 0x7c, 0x4e, 0x06, 0xe4, 0xe9, 0x37, 0xe4, 0x66, 0x13, 0xf2, 0x2f, 0x14, 0xbc, + 0xff, 0x8c, 0x2d, 0x5e, 0x22, 0xaf, 0x70, 0xa2, 0xc5, 0x1e, 0xb1, 0x2e, 0x52, 0x19, 0x50, 0x4b, + 0x98, 0x55, 0xe5, 0x56, 0x90, 0xa7, 0xdf, 0x32, 0xaf, 0x83, 0xe8, 0x28, 0xa5, 0x34, 0x9b, 0xa4, + 0x9f, 0xb2, 0xbc, 0x4c, 0xd3, 0xd7, 0xe6, 0x8f, 0x2a, 0xa0, 0x50, 0x47, 0x5e, 0x79, 0x07, 0xb5, + 0x2f, 0xc1, 0x47, 0x88, 0x0b, 0xa0, 0x5d, 0x13, 0x59, 0xde, 0x85, 0xdd, 0x6e, 0xb0, 0x00, 0xea, + 0x27, 0xc0, 0xe7, 0xf3, 0x9d, 0xef, 0x53, 0x44, 0xfd, 0xb9, 0x79, 0x40, 0x5d, 0xfd, 0x12, 0x22, + 0x54, 0xe6, 0x14, 0xc8, 0x3b, 0xc8, 0xdd, 0xeb, 0xfa, 0x8b, 0x68, 0xec, 0x09, 0xbe, 0x36, 0x10, + 0x67, 0x59, 0x10, 0xe7, 0xad, 0xf2, 0x45, 0x4c, 0x20, 0xec, 0x69, 0x16, 0x4c, 0x55, 0x2d, 0xd3, + 0x33, 0x8d, 0x2e, 0x7c, 0x41, 0x16, 0xcc, 0x35, 0x91, 0xb7, 0x6e, 0x38, 0xc6, 0x2e, 0xf2, 0x90, + 0xe3, 0xc2, 0xef, 0x88, 0x7d, 0x42, 0xaf, 0x6b, 0x78, 0x5b, 0xb6, 0xb3, 0xeb, 0xab, 0xa6, 0xff, + 0x8c, 0x55, 0xf3, 0x32, 0x72, 0xdc, 0x90, 0x2f, 0xff, 0x11, 0xbf, 0xb9, 0x62, 0x3b, 0x97, 0xf0, + 0x20, 0xc8, 0xa6, 0x69, 0xec, 0x11, 0xd3, 0xeb, 0xda, 0xdb, 0x35, 0x74, 0x19, 0xf9, 0x51, 0xd5, + 0x82, 0x67, 0x3c, 0x17, 0xe8, 0xd8, 0x75, 0xdb, 0xc3, 0x9d, 0x76, 0xcd, 0xde, 0xa6, 0x61, 0x67, + 0x0b, 0xba, 0x98, 0x18, 0xe6, 0x32, 0x2e, 0x23, 0x92, 0x2b, 0xcf, 0xe7, 0x62, 0x89, 0xda, 0x02, + 0xd0, 0x82, 0xcf, 0x5a, 0xa8, 0x8b, 0x76, 0x91, 0xe7, 0xec, 0x93, 0xdb, 0x25, 0x0a, 0xfa, 0x80, + 0x37, 0x6c, 0x80, 0x96, 0x9f, 0xac, 0x33, 0xe9, 0x2d, 0x08, 0x92, 0x3b, 0xd4, 0x64, 0x5d, 0x86, + 0xe2, 0x44, 0x6e, 0xcf, 0x52, 0xb1, 0x35, 0xf3, 0x72, 0x15, 0x64, 0xc9, 0xe0, 0xf9, 0xe6, 0x8c, + 0xb0, 0xc2, 0xb4, 0x8b, 0x5c, 0xd7, 0xd8, 0x46, 0xfe, 0x0a, 0x13, 0x7b, 0xd4, 0x6e, 0x07, 0xb9, + 0x2e, 0xc1, 0x94, 0x0e, 0x0e, 0x0f, 0x13, 0x6a, 0x86, 0x0d, 0x0c, 0x4c, 0x2b, 0x18, 0x09, 0x08, + 0xdc, 0x3a, 0xfd, 0xe2, 0xec, 0xdd, 0x20, 0x47, 0xe1, 0x9f, 0x06, 0xb9, 0xa5, 0xca, 0xe2, 0xc6, + 0x4a, 0xf1, 0x18, 0xfe, 0xeb, 0xf3, 0x37, 0x0d, 0x72, 0xcb, 0xa5, 0x56, 0xa9, 0x56, 0x54, 0x70, + 0x3d, 0xaa, 0xf5, 0xe5, 0x46, 0x51, 0xc5, 0x89, 0xeb, 0xa5, 0x7a, 0xb5, 0x5c, 0xcc, 0x6a, 0x33, + 0x60, 0xea, 0x7c, 0x49, 0xaf, 0x57, 0xeb, 0x2b, 0xc5, 0x1c, 0xfc, 0x2b, 0x1e, 0xbf, 0x3b, 0x44, + 0xfc, 0x6e, 0x88, 0xe2, 0x69, 0x10, 0x64, 0xbf, 0x18, 0x40, 0xf6, 0x24, 0x01, 0xb2, 0x1f, 0x90, + 0x21, 0x32, 0x01, 0x77, 0xa6, 0x3c, 0x98, 0x5a, 0x77, 0xec, 0x36, 0x72, 0x5d, 0xf8, 0x52, 0x05, + 0xe4, 0xcb, 0x86, 0xd5, 0x46, 0x5d, 0x78, 0x4d, 0x08, 0x15, 0x75, 0x15, 0xcd, 0xf8, 0xae, 0xa2, + 0xf0, 0x5b, 0x19, 0xd9, 0xde, 0x8f, 0xd1, 0x5d, 0xa0, 0x34, 0x23, 0xe4, 0x23, 0xd7, 0xcb, 0xc5, + 0x92, 0x9a, 0xc0, 0x0d, 0x3b, 0x0a, 0x98, 0x66, 0xab, 0x01, 0x17, 0x11, 0x3f, 0x0f, 0xff, 0x4e, + 0x46, 0x76, 0x72, 0xe8, 0xd7, 0x20, 0x20, 0x13, 0x21, 0x0f, 0xb9, 0x89, 0xe0, 0x30, 0x6a, 0x13, + 0xd8, 0x3c, 0x54, 0xc0, 0xcc, 0x86, 0xe5, 0x0e, 0x12, 0x8a, 0x7c, 0x38, 0x7e, 0xbf, 0x1a, 0x1c, + 0xa1, 0x43, 0x85, 0xe3, 0x1f, 0x4e, 0x2f, 0x7d, 0xc1, 0x7c, 0x27, 0x03, 0x4e, 0xae, 0x20, 0x0b, + 0x39, 0x66, 0x9b, 0xd6, 0xc0, 0x97, 0xc4, 0x93, 0x44, 0x49, 0x3c, 0x42, 0xe0, 0x7c, 0xd0, 0x17, + 0xa2, 0x04, 0x5e, 0x15, 0x48, 0xe0, 0x29, 0x82, 0x04, 0x6e, 0x91, 0xa4, 0x33, 0x81, 0x6b, 0xd5, + 0xa7, 0xc1, 0x6c, 0xdd, 0xf6, 0xcc, 0x2d, 0xb3, 0x4d, 0x7d, 0xd0, 0x7e, 0x41, 0x05, 0xd9, 0x9a, + 0xe9, 0x7a, 0xb0, 0x14, 0x76, 0x27, 0xd7, 0x83, 0x19, 0xd3, 0x6a, 0x77, 0xf7, 0x3a, 0x48, 0x47, + 0x06, 0xed, 0x57, 0x0a, 0x3a, 0x9f, 0x14, 0x6e, 0xed, 0x63, 0xb6, 0x54, 0x7f, 0x6b, 0xff, 0xf7, + 0xa4, 0x97, 0x61, 0x78, 0x16, 0x48, 0x5c, 0xca, 0x08, 0xbb, 0xab, 0x04, 0xe6, 0x2c, 0x2e, 0xab, + 0x6f, 0xb0, 0xf7, 0xdf, 0x4b, 0xc0, 0x93, 0xd3, 0xc5, 0x2f, 0xe0, 0x07, 0xa4, 0x1a, 0xeb, 0x30, + 0x86, 0x92, 0x21, 0xb3, 0x3c, 0xc2, 0x24, 0x59, 0x03, 0xf3, 0xd5, 0x7a, 0xab, 0xa2, 0xd7, 0x4b, + 0x35, 0x96, 0x45, 0x85, 0xff, 0xaa, 0x80, 0x9c, 0x8e, 0x7a, 0xdd, 0x7d, 0x3e, 0xf0, 0x34, 0x73, + 0x14, 0xcf, 0x04, 0x8e, 0xe2, 0xda, 0x32, 0x00, 0x46, 0x1b, 0x17, 0x4c, 0x6e, 0xe6, 0x52, 0x06, + 0x86, 0x33, 0x15, 0x2a, 0x58, 0x0a, 0x72, 0xeb, 0xdc, 0x97, 0xf0, 0x85, 0xd2, 0x3b, 0x47, 0x02, + 0x35, 0xc2, 0x61, 0x44, 0x9f, 0xf0, 0x41, 0xa9, 0xcd, 0x9e, 0xa1, 0xe4, 0x8e, 0x46, 0xfc, 0x5f, + 0x55, 0x40, 0xb6, 0x85, 0x7b, 0x4b, 0xae, 0xe3, 0xfc, 0x9d, 0xd1, 0x74, 0x1c, 0x93, 0x89, 0xd0, + 0xf1, 0xbb, 0xc0, 0x2c, 0xaf, 0xb1, 0xcc, 0x55, 0x22, 0x56, 0xc5, 0x85, 0x0f, 0x46, 0xd1, 0xf0, + 0x01, 0xec, 0x1c, 0x8d, 0x88, 0x3f, 0xfd, 0x48, 0x00, 0xd6, 0xd0, 0xee, 0x45, 0xe4, 0xb8, 0x3b, + 0x66, 0x0f, 0xfe, 0xb5, 0x0a, 0xa6, 0x57, 0x90, 0xd7, 0xf4, 0x0c, 0x6f, 0xcf, 0xed, 0xdb, 0xee, + 0xb4, 0xec, 0xb2, 0xd1, 0xde, 0x41, 0xac, 0x3b, 0xf2, 0x1f, 0xe1, 0x7b, 0x54, 0x59, 0x7f, 0xa2, + 0xb0, 0x9c, 0x85, 0xa0, 0x8c, 0x08, 0x4c, 0x1e, 0x05, 0xb2, 0x1d, 0xc3, 0x33, 0x18, 0x16, 0xd7, + 0xf4, 0x61, 0x11, 0x12, 0xd2, 0x49, 0x36, 0xf8, 0x0e, 0x45, 0xc6, 0xa1, 0x48, 0xa2, 0xfc, 0x64, + 0x20, 0x7c, 0x20, 0x33, 0x02, 0x0a, 0x27, 0xc0, 0x5c, 0xbd, 0xd1, 0xda, 0xac, 0x35, 0x56, 0x56, + 0x2a, 0x38, 0xb5, 0xa8, 0x6a, 0xa7, 0x80, 0xb6, 0x5e, 0xba, 0xb0, 0x56, 0xa9, 0xb7, 0x36, 0xeb, + 0x8d, 0xa5, 0x0a, 0xfb, 0x32, 0xab, 0x1d, 0x07, 0x33, 0xe5, 0x52, 0x79, 0xd5, 0x4f, 0xc8, 0x69, + 0xa7, 0xc1, 0xc9, 0xb5, 0xca, 0xda, 0x62, 0x45, 0x6f, 0xae, 0x56, 0xd7, 0x37, 0x31, 0x99, 0xe5, + 0xc6, 0x46, 0x7d, 0xa9, 0x98, 0xd7, 0x20, 0x38, 0xc5, 0xbd, 0x39, 0xaf, 0x37, 0xea, 0x2b, 0x9b, + 0xcd, 0x56, 0xa9, 0x55, 0x29, 0x4e, 0x69, 0x57, 0x81, 0xe3, 0xe5, 0x52, 0x9d, 0x64, 0x2f, 0x37, + 0xea, 0xf5, 0x4a, 0xb9, 0x55, 0x2c, 0xc0, 0x7f, 0xcf, 0x82, 0x99, 0xaa, 0x5b, 0x37, 0x76, 0xd1, + 0x39, 0xa3, 0x6b, 0x76, 0xe0, 0x0b, 0xb8, 0x99, 0xc7, 0x0d, 0x60, 0xce, 0xa1, 0x7f, 0x51, 0xa7, + 0x65, 0x22, 0x8a, 0xe6, 0x9c, 0x2e, 0x26, 0xe2, 0x39, 0xb9, 0x45, 0x08, 0xf8, 0x73, 0x72, 0xfa, + 0xa4, 0x2d, 0x02, 0x40, 0xff, 0xb5, 0xc2, 0x3b, 0x62, 0xcf, 0xf6, 0xb7, 0x26, 0x63, 0x17, 0xb9, + 0xc8, 0xb9, 0x6c, 0xb6, 0x91, 0x9f, 0x53, 0xe7, 0xbe, 0x82, 0x5f, 0x53, 0x65, 0xf7, 0x17, 0x39, + 0x50, 0xb9, 0xea, 0x44, 0xf4, 0x86, 0x3f, 0xae, 0xca, 0xec, 0x0e, 0x4a, 0x91, 0x4c, 0xa6, 0x29, + 0x2f, 0x56, 0x46, 0x5b, 0xb6, 0x6d, 0x35, 0x1a, 0x9b, 0xcd, 0xd5, 0x86, 0xde, 0x2a, 0xaa, 0xda, + 0x2c, 0x28, 0xe0, 0xc7, 0x5a, 0xa3, 0xbe, 0x52, 0xcc, 0x6a, 0x57, 0x83, 0x13, 0xab, 0xa5, 0xe6, + 0x66, 0xb5, 0x7e, 0xae, 0x54, 0xab, 0x2e, 0x6d, 0x96, 0x57, 0x4b, 0x7a, 0xb3, 0x98, 0xd3, 0xae, + 0x01, 0x57, 0xb7, 0xaa, 0x15, 0x7d, 0x73, 0xb9, 0x52, 0x6a, 0x6d, 0xe8, 0x95, 0xe6, 0x66, 0xbd, + 0xb1, 0x59, 0x2f, 0xad, 0x55, 0x8a, 0x79, 0xdc, 0xfc, 0xc9, 0xab, 0x50, 0x6d, 0xa6, 0x0e, 0x2a, + 0x63, 0x21, 0x42, 0x19, 0xa7, 0xfb, 0x95, 0x11, 0xf0, 0x6a, 0xa5, 0x57, 0x9a, 0x15, 0xfd, 0x5c, + 0xa5, 0x38, 0x33, 0x48, 0xd7, 0x66, 0xb5, 0x93, 0xa0, 0x88, 0x79, 0xd8, 0xac, 0x36, 0xfd, 0x9c, + 0x4b, 0xc5, 0x39, 0xf8, 0xa9, 0x3c, 0x38, 0xa5, 0xa3, 0x6d, 0xd3, 0xf5, 0x90, 0xb3, 0x6e, 0xec, + 0xef, 0x22, 0xcb, 0xf3, 0x3b, 0xf9, 0x7f, 0x4a, 0xac, 0x8c, 0x6b, 0x60, 0xae, 0x47, 0x69, 0xac, + 0x21, 0x6f, 0xc7, 0xee, 0xb0, 0x51, 0xf8, 0x11, 0x91, 0x3d, 0xc7, 0xc2, 0x3a, 0x9f, 0x5d, 0x17, + 0xbf, 0xe6, 0x74, 0x5b, 0x8d, 0xd1, 0xed, 0xec, 0x28, 0xba, 0xad, 0x5d, 0x07, 0xa6, 0xf7, 0x5c, + 0xe4, 0x54, 0x76, 0x0d, 0xb3, 0xeb, 0xdf, 0xf1, 0x19, 0x24, 0xc0, 0x77, 0x66, 0x65, 0x4f, 0xac, + 0x70, 0x75, 0x19, 0x2c, 0xc6, 0x88, 0xbe, 0xf5, 0x0c, 0x00, 0xac, 0xb2, 0x1b, 0x4e, 0x97, 0x29, + 0x2b, 0x97, 0x82, 0xf9, 0xbb, 0x68, 0x76, 0xbb, 0xa6, 0xb5, 0x1d, 0xec, 0xfb, 0x87, 0x09, 0xf0, + 0xc5, 0xaa, 0xcc, 0x09, 0x96, 0xa4, 0xbc, 0x25, 0x6b, 0x4d, 0x2f, 0x54, 0x26, 0xdc, 0xef, 0x1e, + 0x6c, 0x3a, 0x79, 0xad, 0x08, 0x66, 0x49, 0x1a, 0x6b, 0x81, 0xc5, 0x29, 0xdc, 0x07, 0xfb, 0xe4, + 0xd6, 0x2a, 0xad, 0xd5, 0xc6, 0x52, 0xf0, 0xae, 0x80, 0x49, 0x62, 0x66, 0x4a, 0xf5, 0x0b, 0xa4, + 0x35, 0x4e, 0x6b, 0x0f, 0x06, 0xd7, 0x70, 0x1d, 0x76, 0xa9, 0xa6, 0x57, 0x4a, 0x4b, 0x17, 0x36, + 0x2b, 0x4f, 0xab, 0x36, 0x5b, 0x4d, 0xb1, 0x71, 0xf9, 0xed, 0x68, 0x06, 0xf3, 0x5b, 0x59, 0x2b, + 0x55, 0x6b, 0xac, 0x7f, 0x5f, 0x6e, 0xe8, 0x6b, 0xa5, 0x56, 0x71, 0x16, 0xbe, 0x5c, 0x05, 0xc5, + 0x15, 0xe4, 0xad, 0xdb, 0x8e, 0x67, 0x74, 0x6b, 0xa6, 0x75, 0x69, 0xc3, 0xe9, 0x0a, 0x93, 0x4d, + 0xe9, 0x30, 0x1d, 0xe2, 0x10, 0x29, 0x10, 0x8c, 0xde, 0x11, 0xef, 0x91, 0x6c, 0xa1, 0x32, 0x85, + 0x09, 0xf0, 0x59, 0x8a, 0xcc, 0x72, 0xb7, 0x7c, 0xa9, 0xc9, 0xf4, 0xe4, 0xd9, 0x93, 0x1e, 0x9f, + 0x07, 0xa0, 0x96, 0x87, 0xf7, 0x67, 0x41, 0x61, 0xd9, 0xb4, 0x8c, 0xae, 0xf9, 0x4c, 0x21, 0x3a, + 0x66, 0xd8, 0xc7, 0x64, 0x62, 0xfa, 0x18, 0x65, 0xa4, 0xf1, 0xf3, 0x67, 0x55, 0xd9, 0xe5, 0x05, + 0x4e, 0xf6, 0x3e, 0x93, 0x11, 0x83, 0xe7, 0xc7, 0x14, 0x99, 0xe5, 0x85, 0xe1, 0xf4, 0x92, 0x61, + 0xf8, 0x99, 0xef, 0x0f, 0x1b, 0xab, 0xaf, 0x7d, 0x17, 0x06, 0xa9, 0xc2, 0x34, 0xfc, 0x23, 0x15, + 0xc0, 0x15, 0xe4, 0x9d, 0x43, 0x4e, 0x30, 0x15, 0x20, 0xbd, 0x3e, 0xb3, 0xb7, 0xb9, 0x26, 0xfb, + 0x66, 0x1e, 0xc0, 0xf3, 0x22, 0x80, 0xa5, 0x98, 0xc6, 0x13, 0x41, 0x3a, 0xa2, 0xf1, 0x56, 0x41, + 0xde, 0x25, 0xef, 0x99, 0x9a, 0x3d, 0x26, 0x7a, 0xb8, 0x24, 0xc4, 0x78, 0xea, 0x94, 0xb0, 0xce, + 0x08, 0xc0, 0xef, 0x06, 0x93, 0xa0, 0x1f, 0x16, 0xb4, 0x63, 0xf9, 0xd0, 0xcc, 0x26, 0xd3, 0x17, + 0x27, 0x5d, 0x75, 0x19, 0x64, 0xdf, 0xc0, 0x8f, 0xe5, 0xc0, 0xc9, 0x41, 0xd5, 0x81, 0x1f, 0xca, + 0x08, 0x3b, 0xec, 0x88, 0x0c, 0xf9, 0x19, 0xb6, 0x81, 0x88, 0x1f, 0xb4, 0xc7, 0x81, 0xab, 0x83, + 0x65, 0xb8, 0x96, 0x5d, 0x47, 0x57, 0xdc, 0x2e, 0xf2, 0x3c, 0xe4, 0x90, 0xaa, 0x15, 0xf4, 0xc1, + 0x2f, 0xb5, 0x27, 0x80, 0x07, 0x99, 0x96, 0x6b, 0x76, 0x90, 0xd3, 0x32, 0x7b, 0x6e, 0xc9, 0xea, + 0xb4, 0xf6, 0x3c, 0xdb, 0x31, 0x0d, 0x76, 0x23, 0x65, 0x41, 0x8f, 0x7a, 0xad, 0xdd, 0x0c, 0x8a, + 0xa6, 0xdb, 0xb0, 0x2e, 0xda, 0x86, 0xd3, 0x31, 0xad, 0xed, 0x9a, 0xe9, 0x7a, 0xcc, 0x03, 0xf8, + 0x40, 0x3a, 0xfc, 0x1b, 0x55, 0xf6, 0x30, 0xdd, 0x10, 0x58, 0x23, 0x3a, 0x94, 0xe7, 0xab, 0x32, + 0xc7, 0xe3, 0x92, 0xd1, 0x4e, 0xa6, 0x2c, 0xcf, 0x9b, 0xb4, 0x21, 0x31, 0x78, 0x04, 0x27, 0x5d, + 0x0b, 0x4d, 0xf7, 0x0d, 0x81, 0x73, 0x15, 0xbd, 0xba, 0x5c, 0xad, 0x60, 0xb3, 0xe2, 0x6a, 0x70, + 0x22, 0x7c, 0xb7, 0x74, 0x61, 0xb3, 0x59, 0xa9, 0xb7, 0x8a, 0x05, 0xdc, 0x4f, 0xd1, 0xe4, 0xe5, + 0x52, 0xb5, 0x56, 0x59, 0xda, 0x6c, 0x35, 0xf0, 0x9b, 0xa5, 0xd1, 0x4c, 0x0b, 0xf8, 0x9c, 0x2c, + 0x38, 0x4e, 0x64, 0xbb, 0x4f, 0xa4, 0x8a, 0x85, 0xd2, 0xe7, 0x6b, 0x1b, 0x00, 0x34, 0x4d, 0xc5, + 0x0b, 0xff, 0x50, 0xfa, 0xc2, 0x4d, 0x0e, 0xc2, 0xbe, 0x32, 0x22, 0x34, 0xe3, 0x3b, 0x8a, 0x4c, + 0x84, 0x0a, 0x69, 0xb2, 0xc9, 0x94, 0xe2, 0x9f, 0x27, 0x3d, 0xe2, 0x44, 0x83, 0x4f, 0xac, 0xcc, + 0x32, 0xf9, 0xf8, 0x69, 0xeb, 0x55, 0x9d, 0xa8, 0xc3, 0x3c, 0x00, 0x24, 0x85, 0x68, 0x10, 0xd5, + 0x83, 0x81, 0xe3, 0x55, 0x94, 0x1e, 0x94, 0xca, 0xad, 0xea, 0xb9, 0x4a, 0x94, 0x1e, 0x7c, 0x56, + 0x05, 0x85, 0x15, 0xe4, 0xe1, 0x39, 0x95, 0x0b, 0x9f, 0x28, 0xb1, 0xfe, 0x83, 0xcd, 0x98, 0xae, + 0xdd, 0x36, 0xba, 0xc1, 0x32, 0x00, 0x7d, 0x82, 0xcf, 0x1d, 0xc5, 0x04, 0xf1, 0x8b, 0x8e, 0x18, + 0xaf, 0x7e, 0x08, 0xe4, 0x3c, 0xfc, 0x9a, 0x2d, 0x43, 0x3f, 0x34, 0x72, 0xb8, 0xc2, 0x44, 0x96, + 0x0c, 0xcf, 0xd0, 0x69, 0x7e, 0x6e, 0x74, 0x92, 0xb4, 0x5d, 0x22, 0x18, 0xf9, 0x7e, 0xb4, 0x3f, + 0xff, 0x4a, 0x05, 0x57, 0xd3, 0xf6, 0x51, 0xea, 0xf5, 0x9a, 0x9e, 0xed, 0x20, 0x1d, 0xb5, 0x91, + 0xd9, 0xf3, 0xfa, 0xd6, 0xf7, 0x1c, 0x9a, 0xea, 0x6f, 0x36, 0xb3, 0x47, 0xf8, 0x06, 0x55, 0x36, + 0xc2, 0xef, 0x81, 0xf6, 0xd8, 0x57, 0x5e, 0x44, 0x63, 0xff, 0xa4, 0x22, 0x13, 0xb3, 0x37, 0x21, + 0xf1, 0x64, 0x40, 0x7d, 0xfc, 0x08, 0x80, 0xf2, 0x57, 0x6e, 0xf4, 0x4a, 0xb9, 0x52, 0x5d, 0xc7, + 0x83, 0xc0, 0x43, 0xc0, 0xb5, 0xeb, 0x1b, 0x7a, 0x79, 0xb5, 0xd4, 0xac, 0x6c, 0xea, 0x95, 0x95, + 0x6a, 0xb3, 0xc5, 0x9c, 0xb2, 0xe8, 0x57, 0x53, 0xda, 0x75, 0xe0, 0x74, 0x73, 0x63, 0xb1, 0x59, + 0xd6, 0xab, 0xeb, 0x24, 0x5d, 0xaf, 0xd4, 0x2b, 0xe7, 0xd9, 0xdb, 0x02, 0xfc, 0x48, 0x11, 0xcc, + 0xe0, 0x09, 0x40, 0x93, 0xce, 0x0b, 0xe0, 0x37, 0xb3, 0x60, 0x46, 0x47, 0xae, 0xdd, 0xbd, 0x4c, + 0xe6, 0x08, 0x93, 0x9a, 0x7a, 0x7c, 0x5b, 0x95, 0x3d, 0xbf, 0xcd, 0x31, 0xbb, 0xc0, 0x31, 0x1a, + 0x3d, 0xd1, 0x34, 0x2e, 0x1b, 0x66, 0xd7, 0xb8, 0xc8, 0xba, 0x9a, 0x82, 0x1e, 0x26, 0x68, 0x0b, + 0x40, 0xb3, 0xaf, 0x58, 0xc8, 0x69, 0xb6, 0xaf, 0x54, 0xbc, 0x9d, 0x52, 0xa7, 0xe3, 0x20, 0xd7, + 0x65, 0xab, 0x17, 0x03, 0xde, 0x68, 0x37, 0x81, 0xe3, 0x24, 0x95, 0xcb, 0x4c, 0x1d, 0x64, 0xfa, + 0x93, 0x83, 0x9c, 0x25, 0x6b, 0xdf, 0xcf, 0x99, 0xe3, 0x72, 0x86, 0xc9, 0xfc, 0x71, 0x89, 0xbc, + 0x78, 0x4a, 0xe7, 0x7a, 0x30, 0x63, 0x19, 0xbb, 0xa8, 0x72, 0x5f, 0xcf, 0x74, 0x90, 0x4b, 0x1c, + 0x63, 0x54, 0x9d, 0x4f, 0x82, 0x1f, 0x93, 0x3a, 0x6f, 0x2e, 0x27, 0xb1, 0x64, 0xba, 0xbf, 0x32, + 0x82, 0xea, 0x0f, 0xe8, 0x67, 0x54, 0xf8, 0x11, 0x15, 0xcc, 0x32, 0xa6, 0x4a, 0xd6, 0x7e, 0xb5, + 0x03, 0x1f, 0x22, 0x18, 0xbf, 0x06, 0x4e, 0xf3, 0x8d, 0x5f, 0xf2, 0x00, 0x7f, 0x42, 0x95, 0x75, + 0x77, 0x1e, 0x50, 0x71, 0x52, 0x46, 0xb4, 0xe3, 0xe8, 0x96, 0xbd, 0xc7, 0x1c, 0x55, 0x0b, 0x3a, + 0x7d, 0x48, 0x73, 0x51, 0x0f, 0xfe, 0xba, 0x94, 0x33, 0xb5, 0x64, 0x35, 0x8e, 0x08, 0xc0, 0x4f, + 0xab, 0x60, 0x9e, 0x71, 0xd5, 0x64, 0xe7, 0x7c, 0xa4, 0x0e, 0xbc, 0xfd, 0x94, 0xb4, 0x21, 0x38, + 0xa0, 0xfe, 0xac, 0xa4, 0x07, 0x0c, 0x90, 0xbf, 0x21, 0x15, 0x1c, 0x4d, 0xba, 0x22, 0x47, 0x04, + 0xe5, 0xbb, 0xb2, 0x60, 0x66, 0xc3, 0x45, 0x0e, 0xf3, 0xdb, 0x87, 0xaf, 0xcd, 0x02, 0x75, 0x05, + 0x09, 0x1b, 0xa9, 0x2f, 0x92, 0xf6, 0xf0, 0xe5, 0x2b, 0xcb, 0x11, 0xc5, 0x36, 0x52, 0x04, 0x6c, + 0x37, 0x82, 0x79, 0x2a, 0xd2, 0x92, 0xe7, 0x61, 0x23, 0xd1, 0xf7, 0xa6, 0xed, 0x4b, 0x1d, 0xc7, + 0x56, 0x11, 0x29, 0x0b, 0x67, 0x29, 0x63, 0x9e, 0x6a, 0x68, 0x8b, 0xce, 0x67, 0xb3, 0x7a, 0x5f, + 0xaa, 0xf6, 0x68, 0x70, 0x95, 0xdd, 0x43, 0xf4, 0xfc, 0x0a, 0x97, 0x39, 0x47, 0x32, 0x0f, 0x7a, + 0x05, 0xbf, 0x29, 0xe5, 0xab, 0x2b, 0x2f, 0x9d, 0x64, 0xba, 0xd0, 0x1b, 0x8f, 0x49, 0x72, 0x12, + 0x14, 0x71, 0x0e, 0xb2, 0xff, 0xa2, 0x57, 0x9a, 0x8d, 0xda, 0xb9, 0xca, 0xe0, 0x65, 0x8c, 0x1c, + 0x7c, 0x9e, 0x0a, 0xa6, 0x17, 0x1d, 0xdb, 0xe8, 0xb4, 0x0d, 0xd7, 0x83, 0xdf, 0x55, 0xc0, 0xec, + 0xba, 0xb1, 0xdf, 0xb5, 0x8d, 0x0e, 0xf1, 0xef, 0xef, 0xeb, 0x0b, 0x7a, 0xf4, 0x95, 0xdf, 0x17, + 0xb0, 0x47, 0xf1, 0x60, 0x60, 0x70, 0x74, 0x2f, 0x23, 0x73, 0xaf, 0x66, 0xb0, 0xcd, 0xa7, 0x0c, + 0x0a, 0x56, 0xea, 0xf3, 0xb5, 0xc0, 0xf3, 0x14, 0x61, 0x51, 0x7e, 0x44, 0x2e, 0xfc, 0xa8, 0x0c, + 0xc9, 0xa3, 0xd9, 0x95, 0xbf, 0xbf, 0x00, 0xf2, 0x4b, 0x88, 0x58, 0x71, 0xbf, 0xaa, 0x80, 0xa9, + 0x26, 0xf2, 0x88, 0x05, 0x77, 0xbb, 0xe0, 0x29, 0xdc, 0x21, 0x19, 0x42, 0x27, 0x76, 0xff, 0x19, + 0x4f, 0xd6, 0xb9, 0xf3, 0xd6, 0xe4, 0x7f, 0x02, 0x8f, 0x44, 0x5a, 0xee, 0x02, 0x2b, 0xf3, 0x50, + 0x1e, 0x89, 0xb1, 0xa4, 0xd2, 0xf7, 0xb5, 0x7a, 0x8f, 0xc2, 0x5c, 0xab, 0xb8, 0x5e, 0xef, 0xd5, + 0xbc, 0x7e, 0xc6, 0x7a, 0x9b, 0x31, 0xe6, 0x63, 0x9c, 0xa3, 0x1e, 0x0b, 0xa6, 0xa8, 0xcc, 0xfd, + 0xf9, 0x68, 0xbf, 0x9f, 0x02, 0x25, 0x41, 0xce, 0x5e, 0xfb, 0x39, 0x25, 0x5d, 0xd4, 0xa2, 0x0b, + 0x9f, 0x48, 0x0c, 0x82, 0xd9, 0x3a, 0xf2, 0xae, 0xd8, 0xce, 0xa5, 0xa6, 0x67, 0x78, 0x08, 0xfe, + 0xb3, 0x42, 0xaf, 0xcb, 0xe3, 0xa2, 0x9f, 0xd4, 0xc1, 0x09, 0x5a, 0x21, 0x96, 0x91, 0xf4, 0xdf, + 0xb4, 0x22, 0xd7, 0x0f, 0x14, 0x02, 0x97, 0x4f, 0x3f, 0xf8, 0x29, 0x7c, 0xe9, 0xc0, 0xa0, 0x4f, + 0xca, 0x80, 0x49, 0x03, 0x93, 0x0c, 0xcf, 0x60, 0xf4, 0xfd, 0x78, 0xf0, 0xa3, 0x52, 0x66, 0xb5, + 0x1c, 0xcd, 0xa3, 0xe9, 0x0a, 0x3e, 0xf1, 0x28, 0x90, 0x2d, 0xef, 0x18, 0x1e, 0x7c, 0xb7, 0x0a, + 0x40, 0xa9, 0xd3, 0x59, 0xa3, 0x3e, 0xe0, 0xbc, 0x43, 0xda, 0x59, 0x30, 0xdb, 0xde, 0x31, 0xc2, + 0x9b, 0x33, 0x68, 0x7f, 0x20, 0xa4, 0x69, 0x8f, 0x0b, 0x9d, 0xc9, 0xa9, 0x54, 0x61, 0x1f, 0x4c, + 0xb8, 0x0c, 0x46, 0x3b, 0x70, 0x34, 0x17, 0x43, 0x61, 0xc6, 0x1e, 0xa1, 0xc3, 0x9f, 0x2f, 0x84, + 0xec, 0x45, 0xcf, 0xe1, 0x18, 0xe9, 0xe0, 0x80, 0x4d, 0x98, 0x90, 0xf0, 0xa4, 0xb7, 0x5c, 0x40, + 0x8f, 0x78, 0xbe, 0x26, 0x12, 0xba, 0x56, 0xab, 0x74, 0x4c, 0x5f, 0xb4, 0x2c, 0x60, 0x16, 0x7c, + 0x61, 0x26, 0x19, 0x7c, 0xf1, 0x82, 0x7b, 0x0a, 0x98, 0x43, 0x1d, 0xd3, 0x43, 0x7e, 0x2d, 0x99, + 0x00, 0xe3, 0x20, 0x16, 0x3f, 0x80, 0xcf, 0x96, 0x0e, 0xba, 0x46, 0x04, 0x7a, 0xb0, 0x46, 0x11, + 0xed, 0x4f, 0x2e, 0x8c, 0x9a, 0x1c, 0xcd, 0xf4, 0xc1, 0x7a, 0xae, 0x0a, 0xae, 0x6e, 0xd9, 0xdb, + 0xdb, 0x5d, 0xe4, 0x8b, 0x09, 0x51, 0xef, 0x4c, 0x68, 0x8c, 0x13, 0x2e, 0xb2, 0x13, 0x64, 0xdf, + 0x6b, 0x06, 0x47, 0xc9, 0xf0, 0x83, 0x78, 0x62, 0x2a, 0x76, 0x16, 0x45, 0xc4, 0x35, 0x90, 0xcf, + 0x08, 0x14, 0xe4, 0x02, 0x3e, 0x4b, 0x93, 0x4d, 0x1f, 0x88, 0x2f, 0x28, 0x60, 0x8e, 0xde, 0x8b, + 0xe8, 0x2b, 0xe8, 0x3d, 0x63, 0x04, 0x00, 0x7e, 0x37, 0x23, 0xeb, 0x67, 0x4b, 0x64, 0x22, 0x70, + 0x12, 0x21, 0x62, 0xb9, 0xa0, 0x2a, 0x43, 0xc9, 0x4d, 0xe0, 0xa6, 0xce, 0x2c, 0x98, 0x59, 0x41, + 0x7e, 0x4b, 0x73, 0xe1, 0xfb, 0x13, 0xf6, 0x44, 0x67, 0xc1, 0x2c, 0xb9, 0x1c, 0xac, 0xc1, 0x8e, + 0x49, 0xd2, 0x55, 0x33, 0x21, 0x4d, 0xbb, 0x01, 0xcc, 0x5d, 0x44, 0x5b, 0xb6, 0x83, 0x1a, 0xc2, + 0x59, 0x4a, 0x31, 0x71, 0x70, 0x78, 0x3a, 0xed, 0x26, 0x70, 0x9c, 0x39, 0xba, 0x2f, 0xe2, 0xb9, + 0xbe, 0xe1, 0xec, 0xb3, 0x83, 0x69, 0xfd, 0xc9, 0xf0, 0xaf, 0xf8, 0x06, 0xb3, 0x28, 0xa2, 0x78, + 0xcb, 0x41, 0xb1, 0x73, 0x95, 0x8e, 0x18, 0x9d, 0x1e, 0x0f, 0x0a, 0x4c, 0x47, 0x7c, 0x83, 0x2e, + 0xae, 0x07, 0x0d, 0xf2, 0x6a, 0x8f, 0x07, 0xd3, 0x58, 0x44, 0xc4, 0x6e, 0x60, 0x5d, 0xef, 0xe9, + 0x01, 0x1f, 0x92, 0xf7, 0x7a, 0x98, 0x15, 0xfe, 0x52, 0xa0, 0x33, 0x15, 0x41, 0x67, 0x1e, 0x93, + 0x84, 0xf9, 0x89, 0x5c, 0x24, 0x5f, 0xe4, 0xca, 0x5f, 0xdc, 0xaf, 0x76, 0x5c, 0xb8, 0x96, 0x4c, + 0x6b, 0xce, 0x00, 0x10, 0x34, 0x3f, 0x3f, 0x70, 0x06, 0x97, 0x22, 0xc6, 0xc6, 0x8f, 0x3d, 0x0a, + 0xd8, 0x2f, 0x0e, 0xc2, 0xce, 0x78, 0x01, 0x95, 0x3c, 0x42, 0x28, 0xc3, 0x49, 0xfa, 0xe8, 0xfc, + 0x62, 0x16, 0x5c, 0x1d, 0x9c, 0x70, 0xaa, 0x19, 0x6e, 0xd8, 0xb2, 0x2f, 0x24, 0x83, 0x48, 0x38, + 0x52, 0x12, 0x34, 0xc7, 0x93, 0x20, 0xe7, 0xee, 0x5d, 0x0c, 0x1c, 0x01, 0xe9, 0x03, 0x7c, 0xa3, + 0x9a, 0x68, 0xac, 0x1a, 0xc8, 0xdf, 0x98, 0x1b, 0xe1, 0x2d, 0xe0, 0x84, 0xb5, 0xb7, 0x1b, 0x60, + 0x41, 0x7a, 0x1a, 0xd6, 0xb3, 0x1c, 0x7c, 0x21, 0x36, 0xd9, 0xac, 0x7c, 0x93, 0x4d, 0x30, 0x92, + 0xca, 0x54, 0x3a, 0x7d, 0xf5, 0xf8, 0x4c, 0xdf, 0x11, 0xb4, 0x72, 0x62, 0xa5, 0xa0, 0xf0, 0x2b, + 0x3c, 0xfc, 0xff, 0x98, 0x49, 0xd4, 0xf3, 0x0e, 0x3f, 0xb9, 0x96, 0xa0, 0x27, 0x3c, 0xca, 0x63, + 0x6b, 0xaf, 0xcb, 0x01, 0xd8, 0x0c, 0x1d, 0x72, 0x18, 0xa8, 0xeb, 0x0e, 0xba, 0x6c, 0xa2, 0x2b, + 0x6e, 0xdf, 0x7e, 0x07, 0x95, 0x5b, 0x86, 0x97, 0xdb, 0x5f, 0x64, 0x65, 0x1d, 0x6a, 0x44, 0x0d, + 0x3a, 0x50, 0x54, 0x44, 0xdb, 0x79, 0x3a, 0x28, 0xf4, 0x58, 0x0e, 0xd6, 0x76, 0x4a, 0xa3, 0x51, + 0xc5, 0x19, 0x59, 0xaa, 0x1e, 0x90, 0x84, 0x7f, 0x9b, 0x01, 0x33, 0xdc, 0x9b, 0xe8, 0x1d, 0x81, + 0x03, 0xaa, 0xa5, 0xc4, 0xcf, 0x48, 0x55, 0xe9, 0x19, 0xa9, 0xb6, 0x00, 0x72, 0xae, 0x54, 0xa3, + 0xa5, 0xd9, 0xb4, 0x27, 0x82, 0xd9, 0x0e, 0xea, 0x21, 0xab, 0x83, 0xac, 0xb6, 0x89, 0xdc, 0xd3, + 0x39, 0x22, 0x96, 0xc8, 0x30, 0x0d, 0x42, 0x66, 0xc9, 0xf8, 0xdd, 0xc9, 0xb0, 0x4a, 0x5f, 0x4b, + 0xff, 0x4c, 0x01, 0x67, 0xb8, 0x56, 0xb2, 0xec, 0xd8, 0xbb, 0x89, 0x35, 0xf5, 0xe5, 0xfc, 0x78, + 0xbc, 0x21, 0x6a, 0xea, 0x5d, 0xb1, 0x8d, 0x72, 0x40, 0x71, 0x11, 0x8d, 0xfe, 0xfd, 0x81, 0x74, + 0x9f, 0x26, 0x48, 0x77, 0xe9, 0x90, 0xf4, 0x27, 0x70, 0x20, 0x3c, 0x0b, 0x66, 0x75, 0x64, 0x74, + 0x82, 0xa1, 0xf6, 0x4f, 0x38, 0x23, 0xfa, 0x89, 0x20, 0xeb, 0x85, 0xab, 0x61, 0x8f, 0x38, 0x58, + 0x19, 0xfe, 0x4b, 0xf2, 0x40, 0x16, 0xc5, 0xc8, 0x47, 0x52, 0x0d, 0xa7, 0xdf, 0x02, 0x57, 0x65, + 0x2c, 0xf0, 0xec, 0x20, 0x0b, 0xfc, 0x7a, 0x30, 0xd3, 0x35, 0x5c, 0xda, 0x60, 0x82, 0xbb, 0x7f, + 0xf9, 0x24, 0xf1, 0x96, 0xfd, 0xd8, 0xd3, 0x76, 0x83, 0xaa, 0x76, 0xf8, 0x88, 0xc4, 0x1f, 0x96, + 0x3a, 0x5a, 0x37, 0xac, 0xec, 0x64, 0x1a, 0x71, 0xf7, 0x08, 0x2b, 0x77, 0xa7, 0x80, 0xb6, 0x56, + 0x69, 0x36, 0x4b, 0x2b, 0xe4, 0xc4, 0x8d, 0xef, 0x82, 0xd5, 0x39, 0x7b, 0x23, 0x16, 0x1f, 0x45, + 0x58, 0x9b, 0x05, 0x05, 0x9f, 0xbf, 0xe2, 0x31, 0xfa, 0x64, 0x91, 0x1d, 0xa7, 0x62, 0x06, 0x7e, + 0x5e, 0x05, 0xf9, 0x0d, 0xcb, 0x41, 0x46, 0x07, 0xde, 0xcf, 0xe9, 0xd2, 0x0f, 0x0a, 0xba, 0xf4, + 0xd0, 0x41, 0x0d, 0x03, 0x7f, 0x93, 0x92, 0x16, 0x89, 0xe1, 0xc8, 0x62, 0x17, 0xcb, 0x45, 0x66, + 0x0e, 0x8f, 0xbb, 0xdc, 0x2a, 0x79, 0x74, 0xa9, 0xa9, 0xf7, 0x01, 0xd2, 0xc8, 0xfe, 0x98, 0x82, + 0xe1, 0x34, 0x3a, 0xa5, 0xae, 0x70, 0x24, 0xe3, 0x9b, 0xbc, 0x09, 0xf5, 0x64, 0x51, 0xb4, 0x37, + 0x0d, 0x56, 0xee, 0x52, 0x37, 0xca, 0x91, 0xf6, 0xd5, 0x81, 0xb4, 0x4a, 0x82, 0xb4, 0x1e, 0x25, + 0x4b, 0x28, 0xfd, 0x2e, 0xf3, 0x77, 0x55, 0x50, 0x5c, 0xdf, 0x73, 0x77, 0x84, 0xb3, 0xef, 0xbf, + 0xaa, 0x82, 0x39, 0xff, 0x78, 0x50, 0xcb, 0xbe, 0x84, 0x2c, 0xf8, 0x0c, 0x61, 0x60, 0xf2, 0x70, + 0x9a, 0x3f, 0x30, 0x91, 0x07, 0x6d, 0x9d, 0x8b, 0x90, 0xa3, 0x0c, 0x8a, 0x6e, 0xd0, 0x57, 0xc6, + 0x82, 0x40, 0x7f, 0x61, 0x9d, 0x7d, 0x1b, 0xc6, 0xd5, 0x81, 0x2f, 0x96, 0xbe, 0xee, 0x69, 0x08, + 0xed, 0xc1, 0xd8, 0xc8, 0x5d, 0xe0, 0x94, 0x88, 0x74, 0xfa, 0xca, 0x7d, 0x3d, 0x28, 0xf8, 0x92, + 0xd2, 0xa6, 0x80, 0x5a, 0x6d, 0x34, 0x8b, 0xc7, 0xb4, 0x19, 0x30, 0x55, 0xb2, 0x3a, 0x8e, 0x6d, + 0x76, 0x8a, 0x99, 0xb3, 0x53, 0x20, 0x57, 0xd9, 0xed, 0x79, 0xfb, 0x67, 0x1f, 0x0e, 0xe6, 0x9a, + 0x9e, 0x83, 0x8c, 0xdd, 0x58, 0xdc, 0xee, 0xb8, 0x1d, 0x4c, 0x59, 0xf6, 0xa6, 0xb1, 0xe7, 0xed, + 0x68, 0x0f, 0x39, 0x60, 0x7c, 0xb1, 0xc6, 0xd3, 0x60, 0x41, 0x49, 0xbf, 0x76, 0x27, 0x59, 0xf0, + 0xc9, 0x5b, 0x76, 0x69, 0xcf, 0xdb, 0x59, 0xbc, 0xee, 0xd3, 0x7f, 0x7e, 0x26, 0xf3, 0xd9, 0x3f, + 0x3f, 0x93, 0xf9, 0xea, 0x9f, 0x9f, 0xc9, 0xfc, 0xd4, 0x5f, 0x9c, 0x39, 0xf6, 0xd9, 0xbf, 0x38, + 0x73, 0xec, 0x0b, 0x7f, 0x71, 0xe6, 0xd8, 0x0f, 0x2b, 0xbd, 0x8b, 0x17, 0xf3, 0x84, 0xca, 0x63, + 0xff, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x87, 0x1a, 0x01, 0x1f, 0xa2, 0x3b, 0x02, 0x00, } func (m *Rpc) Marshal() (dAtA []byte, err error) { @@ -128076,6 +128279,122 @@ func (m *RpcChatUnreadResponseError) MarshalToSizedBuffer(dAtA []byte) (int, err return len(dAtA) - i, nil } +func (m *RpcChatReadAll) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RpcChatReadAll) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RpcChatReadAll) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *RpcChatReadAllRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RpcChatReadAllRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RpcChatReadAllRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *RpcChatReadAllResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RpcChatReadAllResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RpcChatReadAllResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Error != nil { + { + size, err := m.Error.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintCommands(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *RpcChatReadAllResponseError) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RpcChatReadAllResponseError) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RpcChatReadAllResponseError) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Description) > 0 { + i -= len(m.Description) + copy(dAtA[i:], m.Description) + i = encodeVarintCommands(dAtA, i, uint64(len(m.Description))) + i-- + dAtA[i] = 0x12 + } + if m.Code != 0 { + i = encodeVarintCommands(dAtA, i, uint64(m.Code)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + func (m *RpcPushNotification) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -148911,6 +149230,53 @@ func (m *RpcChatUnreadResponseError) Size() (n int) { return n } +func (m *RpcChatReadAll) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *RpcChatReadAllRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *RpcChatReadAllResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Error != nil { + l = m.Error.Size() + n += 1 + l + sovCommands(uint64(l)) + } + return n +} + +func (m *RpcChatReadAllResponseError) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Code != 0 { + n += 1 + sovCommands(uint64(m.Code)) + } + l = len(m.Description) + if l > 0 { + n += 1 + l + sovCommands(uint64(l)) + } + return n +} + func (m *RpcPushNotification) Size() (n int) { if m == nil { return 0 @@ -280754,6 +281120,293 @@ func (m *RpcChatUnreadResponseError) Unmarshal(dAtA []byte) error { } return nil } +func (m *RpcChatReadAll) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ReadAll: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ReadAll: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipCommands(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCommands + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RpcChatReadAllRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Request: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Request: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipCommands(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCommands + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RpcChatReadAllResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Response: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Response: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthCommands + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthCommands + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Error == nil { + m.Error = &RpcChatReadAllResponseError{} + } + if err := m.Error.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCommands(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCommands + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RpcChatReadAllResponseError) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Error: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Error: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Code", wireType) + } + m.Code = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Code |= RpcChatReadAllResponseErrorCode(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCommands + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCommands + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCommands + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Description = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCommands(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCommands + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *RpcPushNotification) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/pb/protos/commands.proto b/pb/protos/commands.proto index 1f849db12..8c1b4b1e6 100644 --- a/pb/protos/commands.proto +++ b/pb/protos/commands.proto @@ -8508,6 +8508,28 @@ message Rpc { } } } + + + message ReadAll { + message Request {} + + message Response { + Error error = 1; + + message Error { + Code code = 1; + string description = 2; + + enum Code { + NULL = 0; + UNKNOWN_ERROR = 1; + BAD_INPUT = 2; + // ... + } + } + } + } + } message PushNotification { message RegisterToken { diff --git a/pb/protos/service/service.proto b/pb/protos/service/service.proto index 184bcc235..d9e920b12 100644 --- a/pb/protos/service/service.proto +++ b/pb/protos/service/service.proto @@ -408,6 +408,7 @@ service ClientCommands { rpc ChatSubscribeToMessagePreviews (anytype.Rpc.Chat.SubscribeToMessagePreviews.Request) returns (anytype.Rpc.Chat.SubscribeToMessagePreviews.Response); rpc ChatUnsubscribeFromMessagePreviews (anytype.Rpc.Chat.UnsubscribeFromMessagePreviews.Request) returns (anytype.Rpc.Chat.UnsubscribeFromMessagePreviews.Response); rpc ObjectChatAdd (anytype.Rpc.Object.ChatAdd.Request) returns (anytype.Rpc.Object.ChatAdd.Response); + rpc ChatReadAll (anytype.Rpc.Chat.ReadAll.Request) returns (anytype.Rpc.Chat.ReadAll.Response); // mock AI RPCs for compatibility between branches. Not implemented in main rpc AIWritingTools (anytype.Rpc.AI.WritingTools.Request) returns (anytype.Rpc.AI.WritingTools.Response); diff --git a/pb/service/service.pb.go b/pb/service/service.pb.go index f04128e29..19ed0f912 100644 --- a/pb/service/service.pb.go +++ b/pb/service/service.pb.go @@ -26,372 +26,373 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package func init() { proto.RegisterFile("pb/protos/service/service.proto", fileDescriptor_93a29dc403579097) } var fileDescriptor_93a29dc403579097 = []byte{ - // 5837 bytes of a gzipped FileDescriptorProto + // 5854 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x9d, 0xdd, 0x6f, 0x24, 0x49, - 0x52, 0xc0, 0xcf, 0x3c, 0xb0, 0x50, 0xc7, 0x2d, 0xd0, 0x0b, 0xcb, 0xdd, 0x72, 0x37, 0x33, 0x3b, - 0x1f, 0xf6, 0xcc, 0x78, 0xdc, 0x9e, 0x9d, 0xd9, 0x2f, 0xee, 0x90, 0xa0, 0xc7, 0x1e, 0x7b, 0xfb, - 0xd6, 0xf6, 0x18, 0x77, 0x7b, 0x46, 0xac, 0x84, 0x44, 0xb9, 0x2b, 0xdd, 0x2e, 0x5c, 0x5d, 0x59, - 0x57, 0x95, 0xed, 0x99, 0x3e, 0x04, 0x02, 0x1d, 0x02, 0x81, 0x40, 0x9c, 0xf8, 0x12, 0x3c, 0x21, - 0xf1, 0x17, 0xf0, 0x67, 0xf0, 0x78, 0x8f, 0x3c, 0xa2, 0xdd, 0x17, 0xfe, 0x0c, 0x54, 0x99, 0x59, - 0xf9, 0x11, 0x15, 0x91, 0x55, 0x5e, 0x9e, 0x66, 0xe4, 0xf8, 0x45, 0x44, 0x7e, 0x46, 0x46, 0x66, - 0x65, 0x55, 0x47, 0x37, 0x8b, 0xb3, 0xed, 0xa2, 0xe4, 0x82, 0x57, 0xdb, 0x15, 0x2b, 0xaf, 0xd2, - 0x19, 0x6b, 0xfe, 0x1d, 0xca, 0x3f, 0x0f, 0xde, 0x8a, 0xf3, 0x95, 0x58, 0x15, 0xec, 0xbd, 0x6f, - 0x5b, 0x72, 0xc6, 0x17, 0x8b, 0x38, 0x4f, 0x2a, 0x85, 0xbc, 0xf7, 0xae, 0x95, 0xb0, 0x2b, 0x96, - 0x0b, 0xfd, 0xf7, 0x27, 0xff, 0xfb, 0x93, 0x9f, 0x8b, 0xde, 0xde, 0xc9, 0x52, 0x96, 0x8b, 0x1d, - 0xad, 0x31, 0xf8, 0x22, 0xfa, 0xd6, 0xa8, 0x28, 0xf6, 0x99, 0x78, 0xc9, 0xca, 0x2a, 0xe5, 0xf9, - 0xe0, 0xce, 0x50, 0x3b, 0x18, 0x9e, 0x14, 0xb3, 0xe1, 0xa8, 0x28, 0x86, 0x56, 0x38, 0x3c, 0x61, - 0x3f, 0x5a, 0xb2, 0x4a, 0xbc, 0x77, 0x37, 0x0c, 0x55, 0x05, 0xcf, 0x2b, 0x36, 0x38, 0x8f, 0x7e, - 0x75, 0x54, 0x14, 0x13, 0x26, 0x76, 0x59, 0x5d, 0x81, 0x89, 0x88, 0x05, 0x1b, 0x6c, 0xb4, 0x54, - 0x7d, 0xc0, 0xf8, 0xb8, 0xdf, 0x0d, 0x6a, 0x3f, 0xd3, 0xe8, 0x9b, 0xb5, 0x9f, 0x8b, 0xa5, 0x48, - 0xf8, 0xeb, 0x7c, 0xf0, 0x7e, 0x5b, 0x51, 0x8b, 0x8c, 0xed, 0xdb, 0x21, 0x44, 0x5b, 0x7d, 0x15, - 0xfd, 0xd2, 0xab, 0x38, 0xcb, 0x98, 0xd8, 0x29, 0x59, 0x5d, 0x70, 0x5f, 0x47, 0x89, 0x86, 0x4a, - 0x66, 0xec, 0xde, 0x09, 0x32, 0xda, 0xf0, 0x17, 0xd1, 0xb7, 0x94, 0xe4, 0x84, 0xcd, 0xf8, 0x15, - 0x2b, 0x07, 0xa8, 0x96, 0x16, 0x12, 0x4d, 0xde, 0x82, 0xa0, 0xed, 0x1d, 0x9e, 0x5f, 0xb1, 0x52, - 0xe0, 0xb6, 0xb5, 0x30, 0x6c, 0xdb, 0x42, 0xda, 0xf6, 0x5f, 0xaf, 0x45, 0xdf, 0x1d, 0xcd, 0x66, - 0x7c, 0x99, 0x8b, 0x03, 0x3e, 0x8b, 0xb3, 0x83, 0x34, 0xbf, 0x3c, 0x62, 0xaf, 0x77, 0x2e, 0x6a, - 0x3e, 0x9f, 0xb3, 0xc1, 0x53, 0xbf, 0x55, 0x15, 0x3a, 0x34, 0xec, 0xd0, 0x85, 0x8d, 0xef, 0x0f, - 0xaf, 0xa7, 0xa4, 0xcb, 0xf2, 0xf7, 0x6b, 0xd1, 0x0d, 0x58, 0x96, 0x09, 0xcf, 0xae, 0x98, 0x2d, - 0xcd, 0x47, 0x1d, 0x86, 0x7d, 0xdc, 0x94, 0xe7, 0xe3, 0xeb, 0xaa, 0xe9, 0x12, 0xfd, 0xd9, 0x5a, - 0xf4, 0x1d, 0x58, 0x22, 0xd5, 0xf3, 0xa3, 0xa2, 0x18, 0x3c, 0xee, 0xb0, 0x6a, 0x48, 0x53, 0x8e, - 0x0f, 0xae, 0xa1, 0xa1, 0x8b, 0xf0, 0x27, 0xd1, 0xb7, 0x61, 0x09, 0x0e, 0xd2, 0x4a, 0x8c, 0x8a, - 0xa2, 0x1a, 0x6c, 0x77, 0x98, 0x6b, 0x40, 0xe3, 0xff, 0x71, 0x7f, 0x85, 0x40, 0x0b, 0x9c, 0xb0, - 0x2b, 0x7e, 0xd9, 0xab, 0x05, 0x0c, 0xd9, 0xbb, 0x05, 0x5c, 0x0d, 0x5d, 0x84, 0x2c, 0x7a, 0xc7, - 0x9d, 0xb3, 0x13, 0x56, 0xc9, 0x98, 0xf6, 0x80, 0x9e, 0x96, 0x1a, 0x31, 0x4e, 0x1f, 0xf6, 0x41, - 0xb5, 0xb7, 0x34, 0x1a, 0x68, 0x6f, 0x19, 0xaf, 0x8c, 0xb3, 0xfb, 0xa8, 0x05, 0x87, 0x30, 0xbe, - 0x1e, 0xf4, 0x20, 0xb5, 0xab, 0x3f, 0x8c, 0x7e, 0xf9, 0x15, 0x2f, 0x2f, 0xab, 0x22, 0x9e, 0x31, - 0x1d, 0x8f, 0xee, 0xf9, 0xda, 0x8d, 0x14, 0x86, 0xa4, 0xf5, 0x2e, 0xcc, 0x89, 0x1c, 0x8d, 0xf0, - 0x45, 0xc1, 0xe0, 0x42, 0x60, 0x15, 0x6b, 0x21, 0x15, 0x39, 0x20, 0xa4, 0x6d, 0x5f, 0x46, 0x03, - 0x6b, 0xfb, 0xec, 0x8f, 0xd8, 0x4c, 0x8c, 0x92, 0x04, 0xf6, 0x8a, 0xd5, 0x95, 0xc4, 0x70, 0x94, - 0x24, 0x54, 0xaf, 0xe0, 0xa8, 0x76, 0xf6, 0x3a, 0x7a, 0x17, 0x38, 0x93, 0x43, 0x35, 0x49, 0x06, - 0x5b, 0x61, 0x2b, 0x1a, 0x33, 0x4e, 0x87, 0x7d, 0x71, 0x67, 0xfc, 0x23, 0x9e, 0x4f, 0xd8, 0x82, - 0x5f, 0x31, 0x30, 0xfe, 0x51, 0x6b, 0x8a, 0x24, 0xc6, 0x7f, 0x58, 0x03, 0x19, 0x26, 0x13, 0x96, - 0xb1, 0x99, 0x20, 0x87, 0x89, 0x12, 0x77, 0x0e, 0x13, 0x83, 0x39, 0x33, 0xac, 0x11, 0xee, 0x33, - 0xb1, 0xb3, 0x2c, 0x4b, 0x96, 0x0b, 0xb2, 0x2f, 0x2d, 0xd2, 0xd9, 0x97, 0x1e, 0x8a, 0xd4, 0x67, - 0x9f, 0x89, 0x51, 0x96, 0x91, 0xf5, 0x51, 0xe2, 0xce, 0xfa, 0x18, 0x4c, 0x7b, 0x98, 0x45, 0xbf, - 0xe2, 0xb4, 0x98, 0x18, 0xe7, 0xe7, 0x7c, 0x40, 0xb7, 0x85, 0x94, 0x1b, 0x1f, 0x1b, 0x9d, 0x1c, - 0x52, 0x8d, 0xe7, 0x6f, 0x0a, 0x5e, 0xd2, 0xdd, 0xa2, 0xc4, 0x9d, 0xd5, 0x30, 0x98, 0xf6, 0xf0, - 0x07, 0xd1, 0xdb, 0x3a, 0x40, 0x36, 0x49, 0xc5, 0x5d, 0x34, 0x7a, 0xc2, 0xac, 0xe2, 0x5e, 0x07, - 0xd5, 0x32, 0x7f, 0x98, 0xce, 0xcb, 0x3a, 0xfa, 0xe0, 0xe6, 0xb5, 0xb4, 0xc3, 0xbc, 0xa5, 0xb4, - 0x79, 0x1e, 0xfd, 0x9a, 0x6f, 0x7e, 0x27, 0xce, 0x67, 0x2c, 0x1b, 0x3c, 0x0c, 0xa9, 0x2b, 0xc6, - 0xb8, 0xda, 0xec, 0xc5, 0xda, 0x60, 0xa7, 0x09, 0x1d, 0x4c, 0xef, 0xa0, 0xda, 0x20, 0x94, 0xde, - 0x0d, 0x43, 0x2d, 0xdb, 0xbb, 0x2c, 0x63, 0xa4, 0x6d, 0x25, 0xec, 0xb0, 0x6d, 0x20, 0x6d, 0xbb, + 0x52, 0xc0, 0xcf, 0x3c, 0xb0, 0x50, 0xc7, 0x2d, 0xd0, 0x0b, 0xcb, 0xdd, 0x72, 0x37, 0xdf, 0x63, + 0xcf, 0x8c, 0xc7, 0xed, 0xd9, 0x99, 0xfd, 0xe2, 0x0e, 0x09, 0x7a, 0xec, 0xb1, 0xb7, 0x6f, 0x6d, + 0xaf, 0x71, 0xb7, 0x67, 0xc4, 0x4a, 0x48, 0x94, 0xbb, 0xd2, 0xed, 0xc2, 0xd5, 0x95, 0x75, 0x55, + 0xd9, 0x9e, 0xe9, 0x43, 0x20, 0x10, 0x27, 0x10, 0x08, 0xc4, 0x89, 0x2f, 0xc1, 0x13, 0x12, 0x7f, + 0x01, 0x7f, 0x01, 0xcf, 0x3c, 0xde, 0x23, 0x8f, 0x68, 0xf7, 0x1f, 0x41, 0x95, 0x99, 0x95, 0x1f, + 0x51, 0x11, 0x59, 0xe5, 0xe5, 0x69, 0x46, 0x8e, 0x5f, 0x44, 0xe4, 0x47, 0x64, 0x66, 0x64, 0x56, + 0x56, 0x75, 0x74, 0xb3, 0x38, 0xdb, 0x2e, 0x4a, 0x2e, 0x78, 0xb5, 0x5d, 0xb1, 0xf2, 0x2a, 0x9d, + 0xb1, 0xe6, 0xdf, 0xa1, 0xfc, 0xf3, 0xe0, 0xad, 0x38, 0x5f, 0x89, 0x55, 0xc1, 0xde, 0xfb, 0xb6, + 0x25, 0x67, 0x7c, 0xb1, 0x88, 0xf3, 0xa4, 0x52, 0xc8, 0x7b, 0xef, 0x5a, 0x09, 0xbb, 0x62, 0xb9, + 0xd0, 0x7f, 0x7f, 0xfa, 0x5f, 0x3f, 0xf9, 0xb9, 0xe8, 0xed, 0x9d, 0x2c, 0x65, 0xb9, 0xd8, 0xd1, + 0x1a, 0x83, 0x2f, 0xa2, 0x6f, 0x8d, 0x8a, 0x62, 0x9f, 0x89, 0x97, 0xac, 0xac, 0x52, 0x9e, 0x0f, + 0xee, 0x0e, 0xb5, 0x83, 0xe1, 0x49, 0x31, 0x1b, 0x8e, 0x8a, 0x62, 0x68, 0x85, 0xc3, 0x13, 0xf6, + 0xa3, 0x25, 0xab, 0xc4, 0x7b, 0xf7, 0xc2, 0x50, 0x55, 0xf0, 0xbc, 0x62, 0x83, 0xf3, 0xe8, 0x57, + 0x47, 0x45, 0x31, 0x61, 0x62, 0x97, 0xd5, 0x15, 0x98, 0x88, 0x58, 0xb0, 0xc1, 0x46, 0x4b, 0xd5, + 0x07, 0x8c, 0x8f, 0x07, 0xdd, 0xa0, 0xf6, 0x33, 0x8d, 0xbe, 0x59, 0xfb, 0xb9, 0x58, 0x8a, 0x84, + 0xbf, 0xce, 0x07, 0xb7, 0xdb, 0x8a, 0x5a, 0x64, 0x6c, 0xdf, 0x09, 0x21, 0xda, 0xea, 0xab, 0xe8, + 0x97, 0x5e, 0xc5, 0x59, 0xc6, 0xc4, 0x4e, 0xc9, 0xea, 0x82, 0xfb, 0x3a, 0x4a, 0x34, 0x54, 0x32, + 0x63, 0xf7, 0x6e, 0x90, 0xd1, 0x86, 0xbf, 0x88, 0xbe, 0xa5, 0x24, 0x27, 0x6c, 0xc6, 0xaf, 0x58, + 0x39, 0x40, 0xb5, 0xb4, 0x90, 0x68, 0xf2, 0x16, 0x04, 0x6d, 0xef, 0xf0, 0xfc, 0x8a, 0x95, 0x02, + 0xb7, 0xad, 0x85, 0x61, 0xdb, 0x16, 0xd2, 0xb6, 0xff, 0x7a, 0x2d, 0xfa, 0xee, 0x68, 0x36, 0xe3, + 0xcb, 0x5c, 0x1c, 0xf0, 0x59, 0x9c, 0x1d, 0xa4, 0xf9, 0xe5, 0x11, 0x7b, 0xbd, 0x73, 0x51, 0xf3, + 0xf9, 0x9c, 0x0d, 0x9e, 0xf9, 0xad, 0xaa, 0xd0, 0xa1, 0x61, 0x87, 0x2e, 0x6c, 0x7c, 0x7f, 0x70, + 0x3d, 0x25, 0x5d, 0x96, 0xbf, 0x5f, 0x8b, 0x6e, 0xc0, 0xb2, 0x4c, 0x78, 0x76, 0xc5, 0x6c, 0x69, + 0x3e, 0xec, 0x30, 0xec, 0xe3, 0xa6, 0x3c, 0x1f, 0x5d, 0x57, 0x4d, 0x97, 0xe8, 0xcf, 0xd6, 0xa2, + 0xef, 0xc0, 0x12, 0xa9, 0x9e, 0x1f, 0x15, 0xc5, 0xe0, 0x49, 0x87, 0x55, 0x43, 0x9a, 0x72, 0xbc, + 0x7f, 0x0d, 0x0d, 0x5d, 0x84, 0x3f, 0x89, 0xbe, 0x0d, 0x4b, 0x70, 0x90, 0x56, 0x62, 0x54, 0x14, + 0xd5, 0x60, 0xbb, 0xc3, 0x5c, 0x03, 0x1a, 0xff, 0x4f, 0xfa, 0x2b, 0x04, 0x5a, 0xe0, 0x84, 0x5d, + 0xf1, 0xcb, 0x5e, 0x2d, 0x60, 0xc8, 0xde, 0x2d, 0xe0, 0x6a, 0xe8, 0x22, 0x64, 0xd1, 0x3b, 0xee, + 0x98, 0x9d, 0xb0, 0x4a, 0xce, 0x69, 0x0f, 0xe9, 0x61, 0xa9, 0x11, 0xe3, 0xf4, 0x51, 0x1f, 0x54, + 0x7b, 0x4b, 0xa3, 0x81, 0xf6, 0x96, 0xf1, 0xca, 0x38, 0x7b, 0x80, 0x5a, 0x70, 0x08, 0xe3, 0xeb, + 0x61, 0x0f, 0x52, 0xbb, 0xfa, 0xc3, 0xe8, 0x97, 0x5f, 0xf1, 0xf2, 0xb2, 0x2a, 0xe2, 0x19, 0xd3, + 0xf3, 0xd1, 0x7d, 0x5f, 0xbb, 0x91, 0xc2, 0x29, 0x69, 0xbd, 0x0b, 0x73, 0x66, 0x8e, 0x46, 0xf8, + 0x79, 0xc1, 0xe0, 0x42, 0x60, 0x15, 0x6b, 0x21, 0x35, 0x73, 0x40, 0x48, 0xdb, 0xbe, 0x8c, 0x06, + 0xd6, 0xf6, 0xd9, 0x1f, 0xb1, 0x99, 0x18, 0x25, 0x09, 0xec, 0x15, 0xab, 0x2b, 0x89, 0xe1, 0x28, + 0x49, 0xa8, 0x5e, 0xc1, 0x51, 0xed, 0xec, 0x75, 0xf4, 0x2e, 0x70, 0x26, 0x43, 0x35, 0x49, 0x06, + 0x5b, 0x61, 0x2b, 0x1a, 0x33, 0x4e, 0x87, 0x7d, 0x71, 0x27, 0xfe, 0x11, 0xcf, 0x27, 0x6c, 0xc1, + 0xaf, 0x18, 0x88, 0x7f, 0xd4, 0x9a, 0x22, 0x89, 0xf8, 0x0f, 0x6b, 0x20, 0x61, 0x32, 0x61, 0x19, + 0x9b, 0x09, 0x32, 0x4c, 0x94, 0xb8, 0x33, 0x4c, 0x0c, 0xe6, 0x8c, 0xb0, 0x46, 0xb8, 0xcf, 0xc4, + 0xce, 0xb2, 0x2c, 0x59, 0x2e, 0xc8, 0xbe, 0xb4, 0x48, 0x67, 0x5f, 0x7a, 0x28, 0x52, 0x9f, 0x7d, + 0x26, 0x46, 0x59, 0x46, 0xd6, 0x47, 0x89, 0x3b, 0xeb, 0x63, 0x30, 0xed, 0x61, 0x16, 0xfd, 0x8a, + 0xd3, 0x62, 0x62, 0x9c, 0x9f, 0xf3, 0x01, 0xdd, 0x16, 0x52, 0x6e, 0x7c, 0x6c, 0x74, 0x72, 0x48, + 0x35, 0x5e, 0xbc, 0x29, 0x78, 0x49, 0x77, 0x8b, 0x12, 0x77, 0x56, 0xc3, 0x60, 0xda, 0xc3, 0x1f, + 0x44, 0x6f, 0xeb, 0x09, 0xb2, 0x49, 0x2a, 0xee, 0xa1, 0xb3, 0x27, 0xcc, 0x2a, 0xee, 0x77, 0x50, + 0x2d, 0xf3, 0x87, 0xe9, 0xbc, 0xac, 0x67, 0x1f, 0xdc, 0xbc, 0x96, 0x76, 0x98, 0xb7, 0x94, 0x36, + 0xcf, 0xa3, 0x5f, 0xf3, 0xcd, 0xef, 0xc4, 0xf9, 0x8c, 0x65, 0x83, 0x47, 0x21, 0x75, 0xc5, 0x18, + 0x57, 0x9b, 0xbd, 0x58, 0x3b, 0xd9, 0x69, 0x42, 0x4f, 0xa6, 0x77, 0x51, 0x6d, 0x30, 0x95, 0xde, + 0x0b, 0x43, 0x2d, 0xdb, 0xbb, 0x2c, 0x63, 0xa4, 0x6d, 0x25, 0xec, 0xb0, 0x6d, 0x20, 0x6d, 0xbb, 0x8c, 0x7e, 0xdd, 0x74, 0x73, 0x9d, 0x9c, 0x49, 0x79, 0xbd, 0xe8, 0x6c, 0x12, 0xfd, 0xe8, 0x42, - 0xc6, 0xd7, 0xa3, 0x7e, 0x70, 0xab, 0x3e, 0x3a, 0xa2, 0xe0, 0xf5, 0x01, 0xf1, 0xe4, 0x6e, 0x18, - 0xd2, 0xb6, 0xff, 0x66, 0x2d, 0xfa, 0x9e, 0x96, 0x3d, 0xcf, 0xe3, 0xb3, 0x8c, 0xc9, 0xd5, 0xfd, - 0x88, 0x89, 0xd7, 0xbc, 0xbc, 0x9c, 0xac, 0xf2, 0x19, 0x91, 0x53, 0xe2, 0x70, 0x47, 0x4e, 0x49, - 0x2a, 0xe9, 0xc2, 0xfc, 0xb1, 0x49, 0x9f, 0x76, 0x2e, 0xe2, 0x7c, 0xce, 0x7e, 0x58, 0xf1, 0x7c, - 0x54, 0xa4, 0xa3, 0x24, 0x29, 0x07, 0x43, 0xbc, 0xeb, 0x21, 0x67, 0x4a, 0xb0, 0xdd, 0x9b, 0x77, - 0xf6, 0x30, 0xba, 0x95, 0x05, 0x2f, 0xe0, 0x1e, 0xa6, 0x69, 0x3e, 0xc1, 0x0b, 0x6a, 0x0f, 0xe3, - 0x23, 0x2d, 0xab, 0x87, 0xf5, 0x1a, 0x84, 0x5b, 0x3d, 0x74, 0x17, 0x9d, 0xdb, 0x21, 0xc4, 0xae, - 0x01, 0x4d, 0x43, 0xf1, 0xfc, 0x3c, 0x9d, 0x9f, 0x16, 0x49, 0x3d, 0x87, 0x1e, 0xe0, 0x75, 0x76, - 0x10, 0x62, 0x0d, 0x20, 0x50, 0xed, 0xed, 0xef, 0x6c, 0xaa, 0xaf, 0xe3, 0xd2, 0x5e, 0xc9, 0x17, - 0x07, 0x6c, 0x1e, 0xcf, 0x56, 0x3a, 0x98, 0x7e, 0x18, 0x8a, 0x62, 0x90, 0x36, 0x85, 0xf8, 0xe8, - 0x9a, 0x5a, 0xba, 0x3c, 0xff, 0xbe, 0x16, 0xdd, 0xf5, 0xc6, 0x89, 0x1e, 0x4c, 0xaa, 0xf4, 0xa3, - 0x3c, 0x39, 0x61, 0x95, 0x88, 0x4b, 0x31, 0xf8, 0x7e, 0x60, 0x0c, 0x10, 0x3a, 0xa6, 0x6c, 0x3f, - 0xf8, 0x5a, 0xba, 0xb6, 0xd7, 0x27, 0xf5, 0x2a, 0xa1, 0xe3, 0x8f, 0xdf, 0xeb, 0x52, 0x02, 0xa3, - 0xcf, 0xed, 0x10, 0x62, 0x7b, 0x5d, 0x0a, 0xc6, 0xf9, 0x55, 0x2a, 0xd8, 0x3e, 0xcb, 0x59, 0xd9, - 0xee, 0x75, 0xa5, 0xea, 0x23, 0x44, 0xaf, 0x13, 0xa8, 0x3d, 0x3b, 0x70, 0xbc, 0xa9, 0x8a, 0x83, - 0xb3, 0x03, 0xd7, 0x80, 0x02, 0x88, 0xb3, 0x03, 0x14, 0xb4, 0x11, 0xd5, 0xab, 0x95, 0xc9, 0x68, - 0x36, 0x03, 0x85, 0x6d, 0xe5, 0x34, 0x8f, 0xfa, 0xc1, 0x44, 0x4b, 0x8a, 0xfd, 0xda, 0x48, 0xb0, - 0x25, 0x15, 0xd2, 0xab, 0x25, 0x0d, 0x8a, 0xb6, 0xa4, 0xda, 0x34, 0x05, 0x5a, 0x52, 0x01, 0x3d, - 0x5a, 0xd2, 0x80, 0x36, 0xc9, 0x71, 0xfc, 0xbc, 0x4c, 0xd9, 0x6b, 0x90, 0xe4, 0xb8, 0xca, 0xb5, - 0x98, 0x48, 0x72, 0x10, 0x4c, 0x7b, 0x38, 0x8a, 0x7e, 0x51, 0x0a, 0x7f, 0xc8, 0xd3, 0x7c, 0x70, - 0x13, 0x51, 0xaa, 0x05, 0xc6, 0xea, 0x2d, 0x1a, 0x00, 0x25, 0xae, 0xff, 0xaa, 0x33, 0x8e, 0x7b, - 0x84, 0x12, 0x48, 0x36, 0xd6, 0xbb, 0x30, 0x9b, 0x5d, 0x4a, 0x61, 0x1d, 0x95, 0x27, 0x17, 0x71, - 0x99, 0xe6, 0xf3, 0x01, 0xa6, 0xeb, 0xc8, 0x89, 0xec, 0x12, 0xe3, 0xc0, 0x70, 0xd2, 0x8a, 0xa3, - 0xa2, 0x28, 0xeb, 0x60, 0x8f, 0x0d, 0x27, 0x1f, 0x09, 0x0e, 0xa7, 0x16, 0x8a, 0x7b, 0xdb, 0x65, - 0xb3, 0x2c, 0xcd, 0x83, 0xde, 0x34, 0xd2, 0xc7, 0x9b, 0x45, 0xc1, 0xe0, 0x3d, 0x60, 0xf1, 0x15, - 0x6b, 0x6a, 0x86, 0xb5, 0x8c, 0x0b, 0x04, 0x07, 0x2f, 0x00, 0xed, 0x56, 0x5e, 0x8a, 0x0f, 0xe3, - 0x4b, 0x56, 0x37, 0x30, 0xab, 0x53, 0x85, 0x01, 0xa6, 0xef, 0x11, 0xc4, 0x56, 0x1e, 0x27, 0xb5, - 0xab, 0x65, 0xf4, 0xae, 0x94, 0x1f, 0xc7, 0xa5, 0x48, 0x67, 0x69, 0x11, 0xe7, 0xcd, 0x16, 0x11, - 0x8b, 0x22, 0x2d, 0xca, 0xb8, 0xdc, 0xea, 0x49, 0x6b, 0xb7, 0xff, 0xb2, 0x16, 0xbd, 0x0f, 0xfd, - 0x1e, 0xb3, 0x72, 0x91, 0xca, 0x93, 0x86, 0x4a, 0x47, 0xd8, 0x4f, 0xc2, 0x46, 0x5b, 0x0a, 0xa6, - 0x34, 0x9f, 0x5e, 0x5f, 0xd1, 0xe6, 0x97, 0x13, 0xbd, 0xfb, 0x7a, 0x51, 0x26, 0xad, 0xe3, 0xd0, - 0x49, 0xb3, 0xa5, 0x92, 0x42, 0x22, 0xbf, 0x6c, 0x41, 0x60, 0x86, 0x9f, 0xe6, 0x55, 0x63, 0x1d, - 0x9b, 0xe1, 0x56, 0x1c, 0x9c, 0xe1, 0x1e, 0x66, 0x67, 0xf8, 0xf1, 0xf2, 0x2c, 0x4b, 0xab, 0x8b, - 0x34, 0x9f, 0xeb, 0xcd, 0x84, 0xaf, 0x6b, 0xc5, 0x70, 0x3f, 0xb1, 0xd1, 0xc9, 0x61, 0x4e, 0xf4, - 0x60, 0x21, 0x9d, 0x80, 0x61, 0xb2, 0xd1, 0xc9, 0xd9, 0x3d, 0x9e, 0x95, 0x1e, 0xa4, 0x95, 0x00, - 0x7b, 0x3c, 0x47, 0xb5, 0x96, 0x12, 0x7b, 0xbc, 0x36, 0x65, 0xf7, 0x78, 0x6e, 0x1d, 0x2a, 0x9e, - 0x5d, 0xb1, 0xd3, 0x32, 0x05, 0x7b, 0x3c, 0xaf, 0x7c, 0x0d, 0x43, 0xec, 0xf1, 0x28, 0xd6, 0x06, - 0x2a, 0x4b, 0xec, 0x33, 0x31, 0x11, 0xb1, 0x58, 0x56, 0x20, 0x50, 0x39, 0x36, 0x0c, 0x42, 0x04, - 0x2a, 0x02, 0xd5, 0xde, 0x7e, 0x2f, 0x8a, 0xd4, 0xb9, 0x8c, 0x3c, 0x3b, 0xf3, 0xd7, 0x1e, 0x7d, - 0x60, 0xe3, 0x1d, 0x9c, 0xbd, 0x1f, 0x20, 0x6c, 0x1a, 0xa7, 0xfe, 0x2e, 0x8f, 0x04, 0x07, 0xa8, - 0x86, 0x14, 0x11, 0x69, 0x1c, 0x40, 0x60, 0x41, 0x27, 0x17, 0xfc, 0x35, 0x5e, 0xd0, 0x5a, 0x12, - 0x2e, 0xa8, 0x26, 0xec, 0x93, 0x12, 0x5d, 0x50, 0xec, 0x49, 0x49, 0x53, 0x8c, 0xd0, 0x93, 0x12, - 0xc8, 0xd8, 0x31, 0xe3, 0x1a, 0x7e, 0xc6, 0xf9, 0xe5, 0x22, 0x2e, 0x2f, 0xc1, 0x98, 0xf1, 0x94, - 0x1b, 0x86, 0x18, 0x33, 0x14, 0x6b, 0xc7, 0x8c, 0xeb, 0xb0, 0xde, 0x04, 0x9c, 0x96, 0x19, 0x18, - 0x33, 0x9e, 0x0d, 0x8d, 0x10, 0x63, 0x86, 0x40, 0x6d, 0x74, 0x72, 0xbd, 0x4d, 0x18, 0x3c, 0x16, - 0xf2, 0xd4, 0x27, 0x8c, 0x3a, 0x16, 0x42, 0x30, 0x38, 0x84, 0xf6, 0xcb, 0xb8, 0xb8, 0xc0, 0x87, - 0x90, 0x14, 0x85, 0x87, 0x50, 0x83, 0xc0, 0xfe, 0x9e, 0xb0, 0xb8, 0x9c, 0x5d, 0xe0, 0xfd, 0xad, - 0x64, 0xe1, 0xfe, 0x36, 0x0c, 0xec, 0x6f, 0x25, 0x78, 0x95, 0x8a, 0x8b, 0x43, 0x26, 0x62, 0xbc, - 0xbf, 0x7d, 0x26, 0xdc, 0xdf, 0x2d, 0xd6, 0x66, 0xff, 0xae, 0xc3, 0xc9, 0xf2, 0xac, 0x9a, 0x95, - 0xe9, 0x19, 0x1b, 0x04, 0xac, 0x18, 0x88, 0xc8, 0xfe, 0x49, 0x58, 0xfb, 0xfc, 0xe9, 0x5a, 0x74, - 0xb3, 0xe9, 0x76, 0x5e, 0x55, 0x7a, 0xed, 0xf3, 0xdd, 0x7f, 0x84, 0xf7, 0x2f, 0x81, 0x13, 0xcf, - 0xae, 0x7a, 0xa8, 0x39, 0xb9, 0x01, 0x5e, 0xa4, 0xd3, 0xbc, 0x32, 0x85, 0xfa, 0xa4, 0x8f, 0x75, - 0x47, 0x81, 0xc8, 0x0d, 0x7a, 0x29, 0xda, 0xb4, 0x4c, 0xf7, 0x4f, 0x23, 0x1b, 0x27, 0x15, 0x48, - 0xcb, 0x9a, 0xf6, 0x76, 0x08, 0x22, 0x2d, 0xc3, 0x49, 0x38, 0x14, 0xf6, 0x4b, 0xbe, 0x2c, 0xaa, - 0x8e, 0xa1, 0x00, 0xa0, 0xf0, 0x50, 0x68, 0xc3, 0xda, 0xe7, 0x9b, 0xe8, 0x37, 0xdc, 0xe1, 0xe7, - 0x36, 0xf6, 0x16, 0x3d, 0xa6, 0xb0, 0x26, 0x1e, 0xf6, 0xc5, 0x6d, 0x46, 0xd1, 0x78, 0x16, 0xbb, - 0x4c, 0xc4, 0x69, 0x56, 0x0d, 0xd6, 0x71, 0x1b, 0x8d, 0x9c, 0xc8, 0x28, 0x30, 0x0e, 0xc6, 0xb7, - 0xdd, 0x65, 0x91, 0xa5, 0xb3, 0xf6, 0x43, 0x2b, 0xad, 0x6b, 0xc4, 0xe1, 0xf8, 0xe6, 0x62, 0x30, - 0x5e, 0xd7, 0xa9, 0x9f, 0xfc, 0xcf, 0x74, 0x55, 0x30, 0x3c, 0x5e, 0x7b, 0x48, 0x38, 0x5e, 0x43, - 0x14, 0xd6, 0x67, 0xc2, 0xc4, 0x41, 0xbc, 0xe2, 0x4b, 0x22, 0x5e, 0x1b, 0x71, 0xb8, 0x3e, 0x2e, - 0x66, 0xf7, 0x06, 0xc6, 0xc3, 0x38, 0x17, 0xac, 0xcc, 0xe3, 0x6c, 0x2f, 0x8b, 0xe7, 0xd5, 0x80, - 0x88, 0x31, 0x3e, 0x45, 0xec, 0x0d, 0x68, 0x1a, 0x69, 0xc6, 0x71, 0xb5, 0x17, 0x5f, 0xf1, 0x32, - 0x15, 0x74, 0x33, 0x5a, 0xa4, 0xb3, 0x19, 0x3d, 0x14, 0xf5, 0x36, 0x2a, 0x67, 0x17, 0xe9, 0x15, - 0x4b, 0x02, 0xde, 0x1a, 0xa4, 0x87, 0x37, 0x07, 0x45, 0x3a, 0x6d, 0xc2, 0x97, 0xe5, 0x8c, 0x91, - 0x9d, 0xa6, 0xc4, 0x9d, 0x9d, 0x66, 0x30, 0xed, 0xe1, 0x2f, 0xd6, 0xa2, 0xdf, 0x54, 0x52, 0xf7, - 0x49, 0xd2, 0x6e, 0x5c, 0x5d, 0x9c, 0xf1, 0xb8, 0x4c, 0x06, 0x1f, 0x60, 0x76, 0x50, 0xd4, 0xb8, - 0x7e, 0x72, 0x1d, 0x15, 0xd8, 0xac, 0x75, 0xde, 0x6d, 0x67, 0x1c, 0xda, 0xac, 0x1e, 0x12, 0x6e, - 0x56, 0x88, 0xc2, 0x00, 0x22, 0xe5, 0xea, 0xa0, 0x71, 0x9d, 0xd4, 0xf7, 0x4f, 0x1b, 0x37, 0x3a, - 0x39, 0x18, 0x1f, 0x6b, 0xa1, 0x3f, 0x5a, 0xb6, 0x28, 0x1b, 0xf8, 0x88, 0x19, 0xf6, 0xc5, 0x49, - 0xcf, 0x66, 0x56, 0x84, 0x3d, 0xb7, 0x66, 0xc6, 0xb0, 0x2f, 0x4e, 0x78, 0x76, 0xc2, 0x5a, 0xc8, - 0x33, 0x12, 0xda, 0x86, 0x7d, 0x71, 0x98, 0x7d, 0x69, 0xa6, 0x59, 0x17, 0x1e, 0x06, 0xec, 0xc0, - 0xb5, 0x61, 0xb3, 0x17, 0xab, 0x1d, 0xfe, 0xd5, 0x5a, 0xf4, 0x5d, 0xeb, 0xf1, 0x90, 0x27, 0xe9, - 0xf9, 0x4a, 0x41, 0x2f, 0xe3, 0x6c, 0xc9, 0xaa, 0xc1, 0x13, 0xca, 0x5a, 0x9b, 0x35, 0x25, 0x78, - 0x7a, 0x2d, 0x1d, 0x38, 0x77, 0x46, 0x45, 0x91, 0xad, 0xa6, 0x6c, 0x51, 0x64, 0xe4, 0xdc, 0xf1, - 0x90, 0xf0, 0xdc, 0x81, 0x28, 0xcc, 0xca, 0xa7, 0xbc, 0xce, 0xf9, 0xd1, 0xac, 0x5c, 0x8a, 0xc2, - 0x59, 0x79, 0x83, 0xc0, 0x5c, 0x69, 0xca, 0x77, 0x78, 0x96, 0xb1, 0x99, 0x68, 0xdf, 0x46, 0x31, - 0x9a, 0x96, 0x08, 0xe7, 0x4a, 0x80, 0xb4, 0xa7, 0x72, 0xcd, 0x1e, 0x32, 0x2e, 0xd9, 0xb3, 0xd5, - 0x41, 0x9a, 0x5f, 0x0e, 0xf0, 0xb4, 0xc0, 0x02, 0xc4, 0xa9, 0x1c, 0x0a, 0xc2, 0xbd, 0xea, 0x69, - 0x9e, 0x70, 0x7c, 0xaf, 0x5a, 0x4b, 0xc2, 0x7b, 0x55, 0x4d, 0x40, 0x93, 0x27, 0x8c, 0x32, 0x59, - 0x4b, 0xc2, 0x26, 0x35, 0x81, 0x85, 0x42, 0xfd, 0x44, 0x8a, 0x0c, 0x85, 0xe0, 0x19, 0xd4, 0x46, - 0x27, 0x07, 0xf7, 0x5c, 0xda, 0x01, 0x3a, 0x22, 0x80, 0xf1, 0x3b, 0x41, 0x06, 0x0e, 0xfd, 0x66, - 0x37, 0xbc, 0xc7, 0xc4, 0xec, 0x02, 0x1f, 0xfa, 0x1e, 0x12, 0x1e, 0xfa, 0x10, 0x85, 0x6d, 0x35, - 0xe5, 0x66, 0x37, 0xbf, 0x8e, 0x0f, 0xbc, 0xd6, 0x4e, 0x7e, 0xa3, 0x93, 0x83, 0x6d, 0x35, 0x5e, - 0xd0, 0x6d, 0xa5, 0x64, 0xe1, 0xb6, 0x32, 0x0c, 0x2c, 0xbd, 0x12, 0xc8, 0x43, 0xb2, 0x75, 0x5a, - 0xd1, 0x3b, 0x26, 0xdb, 0xe8, 0xe4, 0xb4, 0x93, 0x7f, 0x32, 0xfb, 0x43, 0x25, 0x3d, 0xe2, 0xf5, - 0xe4, 0x7b, 0x19, 0x67, 0x69, 0x12, 0x0b, 0x36, 0xe5, 0x97, 0x2c, 0xc7, 0xb7, 0x62, 0xba, 0xb4, - 0x8a, 0x1f, 0x7a, 0x0a, 0xe1, 0xad, 0x58, 0x58, 0x11, 0x8e, 0x13, 0x45, 0x9f, 0x56, 0x6c, 0x27, - 0xae, 0x88, 0x10, 0xe9, 0x21, 0xe1, 0x71, 0x02, 0x51, 0x98, 0x08, 0x2b, 0xf9, 0xf3, 0x37, 0x05, - 0x2b, 0x53, 0x96, 0xcf, 0x18, 0x9e, 0x08, 0x43, 0x2a, 0x9c, 0x08, 0x23, 0x34, 0xdc, 0x04, 0xee, - 0xc6, 0x82, 0x3d, 0x5b, 0x4d, 0xd3, 0x05, 0xab, 0x44, 0xbc, 0x28, 0xf0, 0x4d, 0x20, 0x80, 0xc2, - 0x9b, 0xc0, 0x36, 0xdc, 0x3a, 0x73, 0x32, 0x91, 0xb6, 0x7d, 0x3b, 0x0e, 0x12, 0x81, 0xdb, 0x71, - 0x04, 0x0a, 0x1b, 0xd6, 0x02, 0xe8, 0xd3, 0x87, 0x96, 0x95, 0xe0, 0xd3, 0x07, 0x9a, 0x6e, 0x9d, - 0xe4, 0x19, 0x66, 0x52, 0x4f, 0xcd, 0x8e, 0xa2, 0x4f, 0xdc, 0x29, 0xba, 0xd9, 0x8b, 0xc5, 0x8f, - 0x0e, 0x4f, 0x58, 0x16, 0xcb, 0xf5, 0x30, 0x70, 0x3e, 0xd7, 0x30, 0x7d, 0x8e, 0x0e, 0x1d, 0x56, - 0x3b, 0xfc, 0xf3, 0xb5, 0xe8, 0x3d, 0xcc, 0xe3, 0x8b, 0x42, 0xfa, 0x7d, 0xdc, 0x6d, 0x4b, 0x91, - 0xc4, 0xf5, 0xbf, 0xb0, 0x86, 0xbd, 0xc1, 0xd2, 0x88, 0xec, 0xed, 0x40, 0x5d, 0x00, 0x3f, 0x1b, - 0x34, 0xe5, 0x87, 0x1c, 0x71, 0x83, 0x25, 0xc4, 0xdb, 0x8d, 0x96, 0x5f, 0xae, 0x0a, 0x6c, 0xb4, - 0x8c, 0x0d, 0x2d, 0x26, 0x36, 0x5a, 0x08, 0x66, 0x67, 0xa7, 0x5b, 0xbd, 0x57, 0xa9, 0xb8, 0x90, - 0x89, 0x1c, 0x98, 0x9d, 0x5e, 0x59, 0x0d, 0x44, 0xcc, 0x4e, 0x12, 0x86, 0xa9, 0x4e, 0x03, 0xd6, - 0x73, 0x13, 0x8b, 0xe5, 0xc6, 0x90, 0x3b, 0x33, 0xef, 0x77, 0x83, 0x70, 0xbc, 0x36, 0x62, 0xbd, - 0xa7, 0x7a, 0x18, 0xb2, 0x00, 0xf6, 0x55, 0x9b, 0xbd, 0x58, 0xed, 0xf0, 0x4f, 0xa3, 0xef, 0xb4, - 0x2a, 0xb6, 0xc7, 0x62, 0xb1, 0x2c, 0x59, 0x02, 0x6e, 0x8b, 0xb7, 0xcb, 0xdd, 0x80, 0xc4, 0x6d, - 0xf1, 0xa0, 0x42, 0x2b, 0xf9, 0x6f, 0x38, 0x35, 0xac, 0x4c, 0x19, 0x9e, 0x84, 0x4c, 0xfa, 0x6c, - 0x30, 0xf9, 0xa7, 0x75, 0x5a, 0xfb, 0x77, 0x77, 0x74, 0x8d, 0xae, 0xe2, 0x34, 0x93, 0x4f, 0x81, - 0x3f, 0x08, 0x19, 0xf5, 0xd0, 0xe0, 0xfe, 0x9d, 0x54, 0x69, 0x45, 0x66, 0x39, 0xc7, 0x9d, 0x7d, - 0xdf, 0x23, 0x3a, 0x12, 0x20, 0xdb, 0xbe, 0xad, 0x9e, 0xb4, 0x76, 0x2b, 0x9a, 0x25, 0xaf, 0xfe, - 0xb3, 0x3b, 0xc8, 0x31, 0xaf, 0x5a, 0x15, 0x19, 0xe9, 0x5b, 0x3d, 0x69, 0xfb, 0xaa, 0x42, 0xdb, - 0xab, 0x5e, 0x88, 0xb6, 0x3b, 0x4d, 0x81, 0xb5, 0xe8, 0x71, 0x7f, 0x05, 0xed, 0xfe, 0x5f, 0xcd, - 0x81, 0xb7, 0xf2, 0x3f, 0xe3, 0x8b, 0x05, 0xcb, 0x13, 0x96, 0x34, 0x1a, 0x55, 0xbd, 0x31, 0xfb, - 0x94, 0xb6, 0x6b, 0x14, 0x86, 0xae, 0x86, 0x29, 0xd1, 0x6f, 0x7d, 0x0d, 0x4d, 0x5d, 0xb4, 0xff, - 0x5c, 0x8b, 0x1e, 0xa0, 0x45, 0x6b, 0x06, 0xae, 0x57, 0xc4, 0xdf, 0xed, 0xe3, 0x08, 0xd3, 0x34, - 0x45, 0x1d, 0xfd, 0x3f, 0x2c, 0xe8, 0x22, 0xff, 0xdb, 0x5a, 0x74, 0xdb, 0x2a, 0xd6, 0xc3, 0x7b, - 0x87, 0xe7, 0xe7, 0x59, 0x3a, 0x13, 0xf2, 0x51, 0xaf, 0x56, 0xa1, 0x9b, 0x93, 0xd2, 0xe8, 0x6e, - 0xce, 0x80, 0xa6, 0x2e, 0xdb, 0x3f, 0xae, 0x45, 0xb7, 0xdc, 0xe6, 0x94, 0xcf, 0x89, 0xd5, 0xb1, - 0x6b, 0xa3, 0x58, 0x0d, 0x3e, 0xa6, 0xdb, 0x00, 0xe3, 0x4d, 0xb9, 0x3e, 0xb9, 0xb6, 0x9e, 0xdd, - 0xab, 0x7f, 0x96, 0x56, 0x82, 0x97, 0xab, 0xc9, 0x05, 0x7f, 0xdd, 0xbc, 0x7a, 0xe7, 0xaf, 0x16, - 0x1a, 0x18, 0x3a, 0x04, 0xb1, 0x57, 0xc7, 0xc9, 0x96, 0x2b, 0xfb, 0x8a, 0x5e, 0x45, 0xb8, 0x72, - 0x88, 0x0e, 0x57, 0x3e, 0x69, 0xd7, 0xca, 0xa6, 0x56, 0xf6, 0x7d, 0xc2, 0x0d, 0xbc, 0xa8, 0xed, - 0x77, 0x0a, 0xef, 0x77, 0x83, 0x36, 0x63, 0xd6, 0xe2, 0xdd, 0xf4, 0xfc, 0xdc, 0xd4, 0x09, 0x2f, - 0xa9, 0x8b, 0x10, 0x19, 0x33, 0x81, 0xda, 0x4d, 0xdf, 0x5e, 0x9a, 0x31, 0xf9, 0xa8, 0xea, 0xc5, - 0xf9, 0x79, 0xc6, 0xe3, 0x04, 0x6c, 0xfa, 0x6a, 0xf1, 0xd0, 0x95, 0x13, 0x9b, 0x3e, 0x8c, 0xb3, - 0x97, 0x60, 0x6a, 0x69, 0x3d, 0xe7, 0xf2, 0x59, 0x9a, 0xc1, 0x4b, 0xe3, 0x52, 0xd3, 0x08, 0x89, - 0x4b, 0x30, 0x2d, 0xc8, 0x26, 0x66, 0xb5, 0xa8, 0x9e, 0x2b, 0x4d, 0xf9, 0xef, 0xb5, 0x15, 0x1d, - 0x31, 0x91, 0x98, 0x21, 0x98, 0x3d, 0x54, 0xa9, 0x85, 0xa7, 0x85, 0x34, 0x7e, 0xab, 0xad, 0xa5, - 0x24, 0xc4, 0xa1, 0x8a, 0x4f, 0xd8, 0x3d, 0x7c, 0xfd, 0xf7, 0x5d, 0xfe, 0x3a, 0x97, 0x46, 0x6f, - 0xb7, 0x55, 0x1a, 0x19, 0xb1, 0x87, 0x87, 0x8c, 0x36, 0xfc, 0x79, 0xf4, 0x0b, 0xd2, 0x70, 0xc9, - 0x8b, 0xc1, 0x0d, 0x44, 0xa1, 0x74, 0xae, 0x58, 0xdf, 0x24, 0xe5, 0xf6, 0xce, 0x8c, 0x19, 0x1b, - 0xa7, 0x55, 0x3c, 0x87, 0xef, 0x45, 0xd8, 0x1e, 0x97, 0x52, 0xe2, 0xce, 0x4c, 0x9b, 0xf2, 0x47, - 0xc5, 0x11, 0x4f, 0xb4, 0x75, 0xa4, 0x86, 0x46, 0x18, 0x1a, 0x15, 0x2e, 0x64, 0x93, 0xe9, 0xa3, - 0xf8, 0x2a, 0x9d, 0x9b, 0x84, 0x47, 0x85, 0xaf, 0x0a, 0x24, 0xd3, 0x96, 0x19, 0x3a, 0x10, 0x91, - 0x4c, 0x93, 0xb0, 0x13, 0x8c, 0x2d, 0xb3, 0xdf, 0x1c, 0x43, 0x8f, 0xf3, 0x73, 0x5e, 0xa7, 0xde, - 0x07, 0x69, 0x7e, 0x09, 0x83, 0xb1, 0x63, 0x12, 0xe7, 0x89, 0x60, 0xdc, 0x47, 0xcf, 0xee, 0x9a, - 0x9a, 0x33, 0x5a, 0x7b, 0x51, 0x43, 0x69, 0x80, 0x5d, 0x93, 0x39, 0xca, 0x85, 0x1c, 0xb1, 0x6b, - 0x0a, 0xf1, 0xb6, 0x8b, 0x8d, 0xf3, 0x8c, 0xe7, 0xb0, 0x8b, 0xad, 0x85, 0x5a, 0x48, 0x74, 0x71, - 0x0b, 0xb2, 0xf1, 0xb8, 0x11, 0xa9, 0x53, 0xbf, 0x51, 0x96, 0x81, 0x78, 0x6c, 0x54, 0x0d, 0x40, - 0xc4, 0x63, 0x14, 0xd4, 0x7e, 0x4e, 0xa2, 0x6f, 0xd6, 0x4d, 0x7a, 0x5c, 0xb2, 0xab, 0x94, 0xc1, - 0x3b, 0x45, 0x8e, 0x84, 0x98, 0xff, 0x3e, 0x61, 0x67, 0xd6, 0x69, 0x5e, 0x15, 0x59, 0x5c, 0x5d, - 0xe8, 0x5b, 0x26, 0x7e, 0x9d, 0x1b, 0x21, 0xbc, 0x67, 0x72, 0xaf, 0x83, 0xb2, 0x41, 0xbd, 0x91, - 0x99, 0x10, 0xb3, 0x8e, 0xab, 0xb6, 0xc2, 0xcc, 0x46, 0x27, 0x67, 0x1f, 0xe5, 0xec, 0xc7, 0x59, - 0xc6, 0xca, 0x55, 0x23, 0x3b, 0x8c, 0xf3, 0xf4, 0x9c, 0x55, 0x02, 0x3c, 0xca, 0xd1, 0xd4, 0x10, - 0x62, 0xc4, 0xa3, 0x9c, 0x00, 0x6e, 0x77, 0x93, 0xc0, 0xf3, 0x38, 0x4f, 0xd8, 0x1b, 0xb0, 0x9b, - 0x84, 0x76, 0x24, 0x43, 0xec, 0x26, 0x29, 0xd6, 0x3e, 0xd2, 0x78, 0x96, 0xf1, 0xd9, 0xa5, 0x5e, - 0x02, 0xfc, 0x0e, 0x96, 0x12, 0xb8, 0x06, 0xdc, 0x0e, 0x21, 0x76, 0x11, 0x90, 0x82, 0x13, 0x56, - 0x64, 0xf1, 0x0c, 0x5e, 0x2c, 0x53, 0x3a, 0x5a, 0x46, 0x2c, 0x02, 0x90, 0x01, 0xc5, 0xd5, 0x17, - 0xd6, 0xb0, 0xe2, 0x82, 0xfb, 0x6a, 0xb7, 0x43, 0x88, 0x5d, 0x06, 0xa5, 0x60, 0x52, 0x64, 0xa9, - 0x00, 0xd3, 0x40, 0x69, 0x48, 0x09, 0x31, 0x0d, 0x7c, 0x02, 0x98, 0x3c, 0x64, 0xe5, 0x9c, 0xa1, - 0x26, 0xa5, 0x24, 0x68, 0xb2, 0x21, 0xec, 0x2d, 0x7a, 0x55, 0x77, 0x5e, 0xac, 0xc0, 0x2d, 0x7a, - 0x5d, 0x2d, 0x5e, 0xac, 0x88, 0x5b, 0xf4, 0x1e, 0x00, 0x8a, 0x78, 0x1c, 0x57, 0x02, 0x2f, 0xa2, - 0x94, 0x04, 0x8b, 0xd8, 0x10, 0x76, 0x8d, 0x56, 0x45, 0x5c, 0x0a, 0xb0, 0x46, 0xeb, 0x02, 0x38, - 0x57, 0x2b, 0x6e, 0x92, 0x72, 0x1b, 0x49, 0x54, 0xaf, 0x30, 0xb1, 0x97, 0xb2, 0x2c, 0xa9, 0x40, - 0x24, 0xd1, 0xed, 0xde, 0x48, 0x89, 0x48, 0xd2, 0xa6, 0xc0, 0x50, 0xd2, 0xcf, 0x65, 0xb0, 0xda, - 0x81, 0xc7, 0x32, 0xb7, 0x43, 0x88, 0x8d, 0x4f, 0x4d, 0xa1, 0x77, 0xe2, 0xb2, 0x4c, 0xeb, 0xc5, - 0x7f, 0x1d, 0x2f, 0x50, 0x23, 0x27, 0xe2, 0x13, 0xc6, 0x81, 0xe9, 0xd5, 0x04, 0x6e, 0xac, 0x60, - 0x30, 0x74, 0xdf, 0x09, 0x32, 0x36, 0xe3, 0x94, 0x12, 0xe7, 0x6e, 0x00, 0xd6, 0x9a, 0xc8, 0xd5, - 0x80, 0xf5, 0x2e, 0xcc, 0x79, 0x71, 0xd0, 0xb8, 0x38, 0xe4, 0x57, 0x6c, 0xca, 0x9f, 0xbf, 0x49, - 0xab, 0x7a, 0x13, 0xa8, 0x57, 0xee, 0xa7, 0x84, 0x25, 0x0c, 0x26, 0x5e, 0x1c, 0xec, 0x54, 0xb2, - 0x09, 0x04, 0x28, 0xcb, 0x11, 0x7b, 0x8d, 0x26, 0x10, 0xd0, 0xa2, 0xe1, 0x88, 0x04, 0x22, 0xc4, - 0xdb, 0x73, 0x3c, 0xe3, 0x5c, 0x7f, 0xb2, 0x63, 0xca, 0x9b, 0x5c, 0x8e, 0xb2, 0x06, 0x41, 0xe2, - 0x28, 0x25, 0xa8, 0x60, 0xf7, 0x97, 0xc6, 0xbf, 0x9d, 0x62, 0xf7, 0x09, 0x3b, 0xed, 0x69, 0xf6, - 0xa0, 0x07, 0x89, 0xb8, 0xb2, 0x17, 0x5c, 0x28, 0x57, 0xed, 0xfb, 0x2d, 0x0f, 0x7a, 0x90, 0xce, - 0x99, 0xa0, 0x5b, 0xad, 0x67, 0xf1, 0xec, 0x72, 0x5e, 0xf2, 0x65, 0x9e, 0xec, 0xf0, 0x8c, 0x97, - 0xe0, 0x4c, 0xd0, 0x2b, 0x35, 0x40, 0x89, 0x33, 0xc1, 0x0e, 0x15, 0x9b, 0xc1, 0xb9, 0xa5, 0x18, - 0x65, 0xe9, 0x1c, 0xee, 0xa8, 0x3d, 0x43, 0x12, 0x20, 0x32, 0x38, 0x14, 0x44, 0x06, 0x91, 0xda, - 0x71, 0x8b, 0x74, 0x16, 0x67, 0xca, 0xdf, 0x36, 0x6d, 0xc6, 0x03, 0x3b, 0x07, 0x11, 0xa2, 0x80, - 0xd4, 0x73, 0xba, 0x2c, 0xf3, 0x71, 0x2e, 0x38, 0x59, 0xcf, 0x06, 0xe8, 0xac, 0xa7, 0x03, 0x82, - 0xb0, 0x3a, 0x65, 0x6f, 0xea, 0xd2, 0xd4, 0xff, 0x60, 0x61, 0xb5, 0xfe, 0xfb, 0x50, 0xcb, 0x43, - 0x61, 0x15, 0x70, 0xa0, 0x32, 0xda, 0x89, 0x1a, 0x30, 0x01, 0x6d, 0x7f, 0x98, 0xdc, 0xef, 0x06, - 0x71, 0x3f, 0x13, 0xb1, 0xca, 0x58, 0xc8, 0x8f, 0x04, 0xfa, 0xf8, 0x69, 0x40, 0x7b, 0xdc, 0xe2, - 0xd5, 0xe7, 0x82, 0xcd, 0x2e, 0x5b, 0xf7, 0xf5, 0xfc, 0x82, 0x2a, 0x84, 0x38, 0x6e, 0x21, 0x50, - 0xbc, 0x8b, 0xc6, 0x33, 0x9e, 0x87, 0xba, 0xa8, 0x96, 0xf7, 0xe9, 0x22, 0xcd, 0xd9, 0xcd, 0xaf, - 0x91, 0xea, 0x91, 0xa9, 0xba, 0x69, 0x93, 0xb0, 0xe0, 0x42, 0xc4, 0xe6, 0x97, 0x84, 0x6d, 0x4e, - 0x0e, 0x7d, 0x1e, 0xb6, 0x5f, 0x66, 0x68, 0x59, 0x39, 0xa4, 0x5f, 0x66, 0xa0, 0x58, 0xba, 0x92, - 0x6a, 0x8c, 0x74, 0x58, 0xf1, 0xc7, 0xc9, 0xa3, 0x7e, 0xb0, 0xdd, 0xf2, 0x78, 0x3e, 0x77, 0x32, - 0x16, 0x97, 0xca, 0xeb, 0x56, 0xc0, 0x90, 0xc5, 0x88, 0x2d, 0x4f, 0x00, 0x07, 0x21, 0xcc, 0xf3, - 0xbc, 0xc3, 0x73, 0xc1, 0x72, 0x81, 0x85, 0x30, 0xdf, 0x98, 0x06, 0x43, 0x21, 0x8c, 0x52, 0x00, - 0xe3, 0x56, 0x9e, 0x07, 0x31, 0x71, 0x14, 0x2f, 0xd0, 0x8c, 0x4d, 0x9d, 0xf5, 0x28, 0x79, 0x68, - 0xdc, 0x02, 0xce, 0x79, 0xc8, 0xec, 0x7a, 0x99, 0xc6, 0xe5, 0xdc, 0x9c, 0x6e, 0x24, 0x83, 0xc7, - 0xb4, 0x1d, 0x9f, 0x24, 0x1e, 0x32, 0x87, 0x35, 0x40, 0xd8, 0x19, 0x2f, 0xe2, 0xb9, 0xa9, 0x29, - 0x52, 0x03, 0x29, 0x6f, 0x55, 0xf5, 0x7e, 0x37, 0x08, 0xfc, 0xbc, 0x4c, 0x13, 0xc6, 0x03, 0x7e, - 0xa4, 0xbc, 0x8f, 0x1f, 0x08, 0x82, 0xec, 0xad, 0xae, 0xb7, 0xfe, 0xa8, 0x56, 0x9e, 0xe8, 0x7d, - 0xec, 0x90, 0x68, 0x1e, 0xc0, 0x85, 0xb2, 0x37, 0x82, 0x07, 0x73, 0xb4, 0x39, 0xa0, 0x0d, 0xcd, - 0x51, 0x73, 0xfe, 0xda, 0x67, 0x8e, 0x62, 0xb0, 0xf6, 0xf9, 0x63, 0x3d, 0x47, 0x77, 0x63, 0x11, - 0xd7, 0x79, 0xfb, 0xcb, 0x94, 0xbd, 0xd6, 0x1b, 0x61, 0xa4, 0xbe, 0x0d, 0x35, 0x94, 0xef, 0x62, - 0x83, 0x5d, 0xf1, 0x76, 0x6f, 0x3e, 0xe0, 0x5b, 0xef, 0x10, 0x3a, 0x7d, 0x83, 0xad, 0xc2, 0x76, - 0x6f, 0x3e, 0xe0, 0x5b, 0x7f, 0xba, 0xa2, 0xd3, 0x37, 0xf8, 0x7e, 0xc5, 0x76, 0x6f, 0x5e, 0xfb, - 0xfe, 0x49, 0x33, 0x71, 0x5d, 0xe7, 0x75, 0x1e, 0x36, 0x13, 0xe9, 0x15, 0xc3, 0xd2, 0x49, 0xdf, - 0x9e, 0x41, 0x43, 0xe9, 0x24, 0xad, 0xe2, 0x7c, 0xc1, 0x0f, 0x2b, 0xc5, 0x31, 0xaf, 0x52, 0x79, - 0x49, 0xe4, 0x69, 0x0f, 0xa3, 0x0d, 0x1c, 0xda, 0x34, 0x85, 0x94, 0xec, 0xe3, 0x6e, 0x0f, 0xb5, - 0xd7, 0xf3, 0x1f, 0x05, 0xec, 0xb5, 0x6f, 0xe9, 0x6f, 0xf5, 0xa4, 0xed, 0x83, 0x67, 0x8f, 0x69, - 0x1e, 0x19, 0x4e, 0x18, 0xba, 0x4a, 0x18, 0x53, 0xe6, 0x51, 0xb2, 0xfb, 0xec, 0xf4, 0x71, 0x7f, - 0x85, 0x0e, 0xf7, 0xa3, 0x24, 0xe9, 0xe7, 0xde, 0x7d, 0xe6, 0xfe, 0xb8, 0xbf, 0x82, 0x76, 0xff, - 0x97, 0xcd, 0xb6, 0x06, 0xfa, 0xd7, 0x73, 0xf0, 0x49, 0x1f, 0x8b, 0x60, 0x1e, 0x3e, 0xbd, 0x96, - 0x8e, 0x2e, 0xc8, 0xdf, 0x36, 0xfb, 0xf7, 0x06, 0x95, 0xef, 0x48, 0xc9, 0x77, 0xab, 0xf5, 0x94, - 0x0c, 0x8d, 0x2a, 0x0b, 0xc3, 0x89, 0xf9, 0xd1, 0x35, 0xb5, 0x9c, 0xcf, 0x49, 0x7a, 0xb0, 0x7e, - 0x97, 0xd7, 0x29, 0x4f, 0xc8, 0xb2, 0x43, 0xc3, 0x02, 0x7d, 0x7c, 0x5d, 0x35, 0x6a, 0xaa, 0x3a, - 0xb0, 0xfc, 0x96, 0xcf, 0xd3, 0x9e, 0x86, 0xbd, 0xaf, 0xfb, 0x7c, 0x78, 0x3d, 0x25, 0x5d, 0x96, - 0xff, 0x58, 0x8b, 0xee, 0x79, 0xac, 0x7d, 0x9c, 0x01, 0x0e, 0x5d, 0x7e, 0x10, 0xb0, 0x4f, 0x29, - 0x99, 0xc2, 0xfd, 0xf6, 0xd7, 0x53, 0xb6, 0x9f, 0xfd, 0xf3, 0x54, 0xf6, 0xd2, 0x4c, 0xb0, 0xb2, - 0xfd, 0xd9, 0x3f, 0xdf, 0xae, 0xa2, 0x86, 0xf4, 0x67, 0xff, 0x02, 0xb8, 0xf3, 0xd9, 0x3f, 0xc4, - 0x33, 0xfa, 0xd9, 0x3f, 0xd4, 0x5a, 0xf0, 0xb3, 0x7f, 0x61, 0x0d, 0x6a, 0x75, 0x69, 0x8a, 0xa0, - 0x8e, 0xcd, 0x7b, 0x59, 0xf4, 0x4f, 0xd1, 0x9f, 0x5c, 0x47, 0x85, 0x58, 0x5f, 0x15, 0x27, 0xaf, - 0x79, 0xf6, 0x68, 0x53, 0xef, 0xaa, 0xe7, 0x76, 0x6f, 0x5e, 0xfb, 0xfe, 0x91, 0xde, 0x5c, 0x99, - 0xd5, 0x84, 0x97, 0xf2, 0x93, 0x8f, 0x9b, 0xa1, 0xd5, 0xa1, 0xb6, 0xe0, 0xf6, 0xfc, 0xa3, 0x7e, - 0x30, 0x51, 0xdd, 0x9a, 0xd0, 0x9d, 0x3e, 0xec, 0x32, 0x04, 0xba, 0x7c, 0xbb, 0x37, 0x4f, 0x2c, - 0x23, 0xca, 0xb7, 0xea, 0xed, 0x1e, 0xc6, 0xfc, 0xbe, 0x7e, 0xdc, 0x5f, 0x41, 0xbb, 0xbf, 0xd2, - 0x59, 0xab, 0xeb, 0x5e, 0xf6, 0xf3, 0x56, 0x97, 0xa9, 0x89, 0xd7, 0xcd, 0xc3, 0xbe, 0x78, 0x28, - 0x7f, 0x71, 0x97, 0xd0, 0xae, 0xfc, 0x05, 0x5d, 0x46, 0x3f, 0xbc, 0x9e, 0x92, 0x2e, 0xcb, 0x3f, - 0xac, 0x45, 0x37, 0xc9, 0xb2, 0xe8, 0x71, 0xf0, 0x71, 0x5f, 0xcb, 0x60, 0x3c, 0x7c, 0x72, 0x6d, - 0x3d, 0x5d, 0xa8, 0x7f, 0x5e, 0x8b, 0x6e, 0x05, 0x0a, 0xa5, 0x06, 0xc8, 0x35, 0xac, 0xfb, 0x03, - 0xe5, 0xd3, 0xeb, 0x2b, 0x52, 0xcb, 0xbd, 0x8b, 0x4f, 0xda, 0x9f, 0x70, 0x0b, 0xd8, 0x9e, 0xd0, - 0x9f, 0x70, 0xeb, 0xd6, 0x82, 0x67, 0x4c, 0xf1, 0x59, 0xb3, 0xe7, 0x43, 0xcf, 0x98, 0xe4, 0x05, - 0xcd, 0xe0, 0x47, 0x5b, 0x30, 0x0e, 0x73, 0xf2, 0xfc, 0x4d, 0x11, 0xe7, 0x09, 0xed, 0x44, 0xc9, - 0xbb, 0x9d, 0x18, 0x0e, 0x9e, 0xcd, 0xd5, 0xd2, 0x13, 0xde, 0xec, 0xe3, 0x1e, 0x50, 0xfa, 0x06, - 0x09, 0x9e, 0xcd, 0xb5, 0x50, 0xc2, 0x9b, 0xce, 0x1a, 0x43, 0xde, 0x40, 0xb2, 0xf8, 0xb0, 0x0f, - 0x0a, 0x76, 0x08, 0xc6, 0x9b, 0x39, 0xf2, 0x7f, 0x14, 0xb2, 0xd2, 0x3a, 0xf6, 0xdf, 0xea, 0x49, - 0x13, 0x6e, 0x27, 0x4c, 0x7c, 0xc6, 0xe2, 0x84, 0x95, 0x41, 0xb7, 0x86, 0xea, 0xe5, 0xd6, 0xa5, - 0x31, 0xb7, 0x3b, 0x3c, 0x5b, 0x2e, 0x72, 0xdd, 0x99, 0xa4, 0x5b, 0x97, 0xea, 0x76, 0x0b, 0x68, - 0x78, 0x2a, 0x69, 0xdd, 0xca, 0xf4, 0xf2, 0x61, 0xd8, 0x8c, 0x97, 0x55, 0x6e, 0xf6, 0x62, 0xe9, - 0x7a, 0xea, 0x61, 0xd4, 0x51, 0x4f, 0x30, 0x92, 0xb6, 0x7a, 0xd2, 0xf0, 0x78, 0xd0, 0x71, 0x6b, - 0xc6, 0xd3, 0x76, 0x87, 0xad, 0xd6, 0x90, 0x7a, 0xdc, 0x5f, 0x01, 0x1e, 0xc6, 0xea, 0x51, 0x75, - 0x90, 0x56, 0x62, 0x2f, 0xcd, 0xb2, 0xc1, 0x66, 0x60, 0x98, 0x34, 0x50, 0xf0, 0x30, 0x16, 0x81, - 0x89, 0x91, 0xdc, 0x1c, 0x5e, 0xe6, 0x83, 0x2e, 0x3b, 0x92, 0xea, 0x35, 0x92, 0x5d, 0x1a, 0x1c, - 0xa8, 0x39, 0x4d, 0x6d, 0x6a, 0x3b, 0x0c, 0x37, 0x5c, 0xab, 0xc2, 0xdb, 0xbd, 0x79, 0xf0, 0xb4, - 0x5f, 0x52, 0x72, 0x65, 0xb9, 0x4b, 0x99, 0xf0, 0x56, 0x92, 0x7b, 0x1d, 0x14, 0x38, 0x94, 0x54, - 0xd3, 0xe8, 0x55, 0x9a, 0xcc, 0x99, 0x40, 0x1f, 0x54, 0xb9, 0x40, 0xf0, 0x41, 0x15, 0x00, 0x41, - 0xd7, 0xa9, 0xbf, 0x9b, 0xd3, 0xd8, 0x71, 0x82, 0x75, 0x9d, 0x56, 0x76, 0xa8, 0x50, 0xd7, 0xa1, - 0x34, 0x88, 0x06, 0xc6, 0xad, 0xfe, 0xcc, 0xc5, 0xc3, 0x90, 0x19, 0xf0, 0xad, 0x8b, 0xcd, 0x5e, - 0x2c, 0x58, 0x51, 0xac, 0xc3, 0x74, 0x91, 0x0a, 0x6c, 0x45, 0x71, 0x6c, 0xd4, 0x48, 0x68, 0x45, - 0x69, 0xa3, 0x54, 0xf5, 0xea, 0x1c, 0x61, 0x9c, 0x84, 0xab, 0xa7, 0x98, 0x7e, 0xd5, 0x33, 0x6c, - 0xeb, 0xb9, 0x6a, 0x6e, 0x86, 0x8c, 0xb8, 0xd0, 0x9b, 0x65, 0x64, 0x6c, 0x3b, 0xbf, 0xec, 0x60, - 0xc1, 0x50, 0xd4, 0xa1, 0x14, 0xe0, 0xf3, 0x82, 0xe6, 0xb7, 0x20, 0x26, 0x4c, 0x8c, 0x8a, 0x82, - 0xc5, 0x65, 0x9c, 0xcf, 0xd0, 0xcd, 0xa9, 0xf9, 0x6d, 0x07, 0x8f, 0x0c, 0x6d, 0x4e, 0x49, 0x0d, - 0xf0, 0xd4, 0xde, 0x7f, 0xbf, 0x18, 0x99, 0x0a, 0xe6, 0x45, 0x5e, 0xff, 0xf5, 0xe2, 0x07, 0x3d, - 0x48, 0xf8, 0xd4, 0xbe, 0x01, 0xcc, 0xb9, 0xbb, 0x72, 0xfa, 0x41, 0xc0, 0x94, 0x8f, 0x86, 0x36, - 0xc2, 0xb4, 0x0a, 0x18, 0xd4, 0xce, 0xd9, 0xe2, 0xe7, 0x6c, 0x85, 0x0d, 0x6a, 0xf7, 0x90, 0xf0, - 0x73, 0xb6, 0x0a, 0x0d, 0xea, 0x36, 0x0a, 0xf2, 0x4c, 0x77, 0x1f, 0xb4, 0x1e, 0xd0, 0x77, 0xb7, - 0x3e, 0x1b, 0x9d, 0x1c, 0x98, 0x39, 0xbb, 0xe9, 0x95, 0xf7, 0x98, 0x02, 0x29, 0xe8, 0x6e, 0x7a, - 0x85, 0x3f, 0xa5, 0xd8, 0xec, 0xc5, 0xc2, 0x1b, 0x01, 0xb1, 0x60, 0x6f, 0x9a, 0x47, 0xf5, 0x48, - 0x71, 0xa5, 0xbc, 0xf5, 0xac, 0xfe, 0x7e, 0x37, 0x68, 0xef, 0xdf, 0x1e, 0x97, 0x7c, 0xc6, 0xaa, - 0x4a, 0x7f, 0x01, 0xd6, 0xbf, 0xe0, 0xa4, 0x65, 0x43, 0xf0, 0xfd, 0xd7, 0xbb, 0x61, 0xc8, 0xf9, - 0x6c, 0xa3, 0x12, 0xd9, 0xaf, 0x49, 0xad, 0xa3, 0x9a, 0xed, 0x0f, 0x49, 0x6d, 0x74, 0x72, 0x76, - 0x7a, 0x69, 0xa9, 0xfb, 0xf9, 0xa8, 0xfb, 0xa8, 0x3a, 0xf6, 0xe5, 0xa8, 0x07, 0x3d, 0x48, 0xed, - 0xea, 0xb3, 0xe8, 0xad, 0x03, 0x3e, 0x9f, 0xb0, 0x3c, 0x19, 0x7c, 0xcf, 0xbf, 0xc1, 0xcb, 0xe7, - 0xc3, 0xfa, 0xcf, 0xc6, 0xe8, 0x0d, 0x4a, 0x6c, 0xef, 0x20, 0xee, 0xb2, 0xb3, 0xe5, 0x7c, 0x22, - 0x62, 0x01, 0xee, 0x20, 0xca, 0xbf, 0x0f, 0x6b, 0x01, 0x71, 0x07, 0xd1, 0x03, 0x80, 0xbd, 0x69, - 0xc9, 0x18, 0x6a, 0xaf, 0x16, 0x04, 0xed, 0x69, 0xc0, 0x66, 0x11, 0xc6, 0x5e, 0x9d, 0xa8, 0xc3, - 0x3b, 0x83, 0x56, 0x47, 0x4a, 0x89, 0x2c, 0xa2, 0x4d, 0xd9, 0xc1, 0xad, 0xaa, 0x2f, 0xbf, 0xe6, - 0xb3, 0x5c, 0x2c, 0xe2, 0x72, 0x05, 0x06, 0xb7, 0xae, 0xa5, 0x03, 0x10, 0x83, 0x1b, 0x05, 0xed, - 0xac, 0x6d, 0x9a, 0x79, 0x76, 0xb9, 0xcf, 0x4b, 0xbe, 0x14, 0x69, 0xce, 0xe0, 0x17, 0x5d, 0x4c, - 0x83, 0xba, 0x0c, 0x31, 0x6b, 0x29, 0xd6, 0x66, 0xb9, 0x92, 0x50, 0xd7, 0x19, 0xe5, 0xa7, 0xf6, - 0x2b, 0xc1, 0x4b, 0xf8, 0x38, 0x53, 0x59, 0x81, 0x10, 0x91, 0xe5, 0x92, 0x30, 0xe8, 0xfb, 0xe3, - 0x34, 0x9f, 0xa3, 0x7d, 0x7f, 0xec, 0x7e, 0x55, 0xf9, 0x16, 0x0d, 0xd8, 0x09, 0xa5, 0x1a, 0x4d, - 0x4d, 0x00, 0xfd, 0x2a, 0x33, 0xda, 0xe8, 0x2e, 0x41, 0x4c, 0x28, 0x9c, 0x04, 0xae, 0x5e, 0x14, - 0x2c, 0x67, 0x49, 0x73, 0x69, 0x0f, 0x73, 0xe5, 0x11, 0x41, 0x57, 0x90, 0xb4, 0xb1, 0x48, 0xca, - 0x4f, 0x96, 0xf9, 0x71, 0xc9, 0xcf, 0xd3, 0x8c, 0x95, 0x20, 0x16, 0x29, 0x75, 0x47, 0x4e, 0xc4, - 0x22, 0x8c, 0xb3, 0xb7, 0x3f, 0xa4, 0xd4, 0xfb, 0xbd, 0x88, 0x69, 0x19, 0xcf, 0xe0, 0xed, 0x0f, - 0x65, 0xa3, 0x8d, 0x11, 0x27, 0x83, 0x01, 0xdc, 0x49, 0x74, 0x94, 0xeb, 0x7c, 0x25, 0xc7, 0x87, - 0x7e, 0x95, 0x56, 0x7e, 0x6b, 0xb8, 0x02, 0x89, 0x8e, 0x36, 0x87, 0x91, 0x44, 0xa2, 0x13, 0xd6, - 0xb0, 0x4b, 0x89, 0xe4, 0x8e, 0xf4, 0xad, 0x26, 0xb0, 0x94, 0x28, 0x1b, 0x8d, 0x90, 0x58, 0x4a, - 0x5a, 0x10, 0x08, 0x48, 0xcd, 0x34, 0x98, 0xa3, 0x01, 0xc9, 0x48, 0x83, 0x01, 0xc9, 0xa5, 0x6c, - 0xa0, 0x18, 0xe7, 0xa9, 0x48, 0xe3, 0x6c, 0xc2, 0xc4, 0x71, 0x5c, 0xc6, 0x0b, 0x26, 0x58, 0x09, - 0x03, 0x85, 0x46, 0x86, 0x1e, 0x43, 0x04, 0x0a, 0x8a, 0xd5, 0x0e, 0x7f, 0x27, 0x7a, 0xa7, 0x5e, - 0xf7, 0x59, 0xae, 0x7f, 0xe9, 0xea, 0xb9, 0xfc, 0x9d, 0xc2, 0xc1, 0xbb, 0xc6, 0xc6, 0x44, 0x94, - 0x2c, 0x5e, 0x34, 0xb6, 0xdf, 0x36, 0x7f, 0x97, 0xe0, 0xe3, 0xb5, 0x7a, 0x3c, 0x1f, 0x71, 0x91, - 0x9e, 0xd7, 0xdb, 0x6c, 0xfd, 0x02, 0x13, 0x18, 0xcf, 0xae, 0x78, 0x18, 0xf8, 0x14, 0x0b, 0xc6, - 0xd9, 0x38, 0xed, 0x4a, 0x4f, 0x58, 0x91, 0xc1, 0x38, 0xed, 0x69, 0x4b, 0x80, 0x88, 0xd3, 0x28, - 0x68, 0x27, 0xa7, 0x2b, 0x9e, 0xb2, 0x70, 0x65, 0xa6, 0xac, 0x5f, 0x65, 0xa6, 0xde, 0x3b, 0x21, - 0x59, 0xf4, 0xce, 0x21, 0x5b, 0x9c, 0xb1, 0xb2, 0xba, 0x48, 0x0b, 0xea, 0x7b, 0xc8, 0x96, 0xe8, - 0xfc, 0x1e, 0x32, 0x81, 0xda, 0x95, 0xc0, 0x02, 0xe3, 0xea, 0x28, 0x5e, 0x30, 0xf9, 0x61, 0x19, - 0xb0, 0x12, 0x38, 0x46, 0x1c, 0x88, 0x58, 0x09, 0x48, 0xd8, 0x79, 0xbd, 0xcc, 0x32, 0x27, 0x6c, - 0x5e, 0x8f, 0xb0, 0xf2, 0x38, 0x5e, 0x2d, 0x58, 0x2e, 0xb4, 0x49, 0x70, 0x26, 0xef, 0x98, 0xc4, - 0x79, 0xe2, 0x4c, 0xbe, 0x8f, 0x9e, 0x13, 0x9a, 0xbc, 0x86, 0x3f, 0xe6, 0xa5, 0x50, 0x3f, 0x61, - 0x77, 0x5a, 0x66, 0x20, 0x34, 0xf9, 0x8d, 0xea, 0x91, 0x44, 0x68, 0x0a, 0x6b, 0x38, 0xbf, 0x59, - 0xe2, 0x95, 0xe1, 0x25, 0x2b, 0xcd, 0x38, 0x79, 0xbe, 0x88, 0xd3, 0x4c, 0x8f, 0x86, 0xef, 0x07, - 0x6c, 0x13, 0x3a, 0xc4, 0x6f, 0x96, 0xf4, 0xd5, 0x75, 0x7e, 0xe5, 0x25, 0x5c, 0x42, 0xf0, 0x88, - 0xa0, 0xc3, 0x3e, 0xf1, 0x88, 0xa0, 0x5b, 0xcb, 0xee, 0xdc, 0x2d, 0x2b, 0xb9, 0x95, 0x24, 0x76, - 0x78, 0x02, 0xcf, 0x0b, 0x1d, 0x9b, 0x00, 0x24, 0x76, 0xee, 0x41, 0x05, 0x9b, 0x1a, 0x58, 0x6c, - 0x2f, 0xcd, 0xe3, 0x2c, 0xfd, 0x31, 0x4c, 0xeb, 0x1d, 0x3b, 0x0d, 0x41, 0xa4, 0x06, 0x38, 0x89, - 0xb9, 0xda, 0x67, 0x62, 0x9a, 0xd6, 0xa1, 0xff, 0x7e, 0xa0, 0xdd, 0x24, 0xd1, 0xed, 0xca, 0x21, - 0x9d, 0x6f, 0x1f, 0xc3, 0x66, 0x1d, 0x15, 0xc5, 0xa4, 0x5e, 0x55, 0x4f, 0xd8, 0x8c, 0xa5, 0x85, - 0x18, 0x7c, 0x14, 0x6e, 0x2b, 0x80, 0x13, 0x17, 0x2d, 0x7a, 0xa8, 0x39, 0x8f, 0xef, 0xeb, 0x58, - 0x32, 0x51, 0xbf, 0xb2, 0x7b, 0x5a, 0xb1, 0x52, 0x27, 0x1a, 0xfb, 0x4c, 0x80, 0xd9, 0xe9, 0x70, - 0x43, 0x07, 0xac, 0x2b, 0x4a, 0xcc, 0xce, 0xb0, 0x86, 0x3d, 0xec, 0x73, 0x38, 0xfd, 0xed, 0x00, - 0x79, 0xdd, 0xf1, 0x11, 0x69, 0xcc, 0xa1, 0x88, 0xc3, 0x3e, 0x9a, 0xb6, 0xd9, 0x5a, 0xdb, 0xed, - 0x28, 0x5f, 0x8d, 0xe1, 0x95, 0x09, 0xc4, 0x92, 0xc4, 0x88, 0x6c, 0x2d, 0x80, 0x3b, 0x87, 0xe1, - 0x25, 0x8f, 0x93, 0x59, 0x5c, 0x89, 0xe3, 0x78, 0x95, 0xf1, 0x38, 0x91, 0xeb, 0x3a, 0x3c, 0x0c, - 0x6f, 0x98, 0xa1, 0x0b, 0x51, 0x87, 0xe1, 0x14, 0xec, 0x66, 0x67, 0xf2, 0xc7, 0x83, 0xf5, 0x55, - 0x52, 0x98, 0x9d, 0xc9, 0xf2, 0xc2, 0x6b, 0xa4, 0x77, 0xc3, 0x90, 0x7d, 0x05, 0x4e, 0x89, 0x64, - 0x1a, 0x72, 0x0b, 0xd3, 0xf1, 0x12, 0x90, 0xf7, 0x03, 0x84, 0xfd, 0x2c, 0x8b, 0xfa, 0x7b, 0xf3, - 0x53, 0x65, 0x42, 0x7f, 0x21, 0xfe, 0x11, 0xa6, 0xeb, 0x42, 0xde, 0x0d, 0xb5, 0xad, 0x9e, 0xb4, - 0x4d, 0x33, 0x77, 0x2e, 0x62, 0x31, 0x4a, 0x92, 0x43, 0x56, 0x21, 0xef, 0xb3, 0xd7, 0xc2, 0xa1, - 0x95, 0x12, 0x69, 0x66, 0x9b, 0xb2, 0x03, 0xbd, 0x96, 0x3d, 0x4f, 0x52, 0xa1, 0x65, 0xcd, 0x05, - 0xed, 0x47, 0x6d, 0x03, 0x6d, 0x8a, 0xa8, 0x15, 0x4d, 0xdb, 0x58, 0x5e, 0x33, 0x53, 0x3e, 0x9f, - 0x67, 0x4c, 0x43, 0x27, 0x2c, 0x56, 0x1f, 0xc8, 0xdc, 0x6e, 0xdb, 0x42, 0x41, 0x22, 0x96, 0x07, - 0x15, 0x6c, 0x1a, 0x59, 0x63, 0xea, 0x91, 0x54, 0xd3, 0xb0, 0x1b, 0x6d, 0x33, 0x1e, 0x40, 0xa4, - 0x91, 0x28, 0x68, 0x5f, 0xbb, 0xab, 0xc5, 0xfb, 0xac, 0x69, 0x09, 0xf8, 0x05, 0x2e, 0xa9, 0xec, - 0x88, 0x89, 0xd7, 0xee, 0x10, 0xcc, 0xee, 0x13, 0x80, 0x87, 0x67, 0xab, 0x71, 0x02, 0xf7, 0x09, - 0x50, 0x5f, 0x32, 0xc4, 0x3e, 0x81, 0x62, 0xfd, 0xae, 0x33, 0xe7, 0x5e, 0x07, 0x71, 0x65, 0x2b, - 0x87, 0x74, 0x1d, 0x0a, 0x86, 0xba, 0x8e, 0x52, 0xf0, 0x9b, 0xd4, 0x3d, 0x5a, 0x43, 0x9a, 0x14, - 0x3b, 0x57, 0x5b, 0xef, 0xc2, 0x6c, 0xee, 0x5f, 0x0b, 0x4f, 0x58, 0x9c, 0x98, 0x8a, 0x21, 0xba, - 0xae, 0x9c, 0xc8, 0xfd, 0x31, 0x4e, 0x3b, 0xf9, 0xfd, 0x68, 0xa0, 0xaa, 0x51, 0xba, 0x6e, 0x6e, - 0x61, 0x45, 0xac, 0x09, 0x22, 0x50, 0xf9, 0x84, 0x93, 0xb8, 0x79, 0x5d, 0x34, 0xe5, 0xda, 0x81, + 0xc6, 0xd7, 0xe3, 0x7e, 0x70, 0xab, 0x3e, 0x7a, 0x46, 0xc1, 0xeb, 0x03, 0xe6, 0x93, 0x7b, 0x61, + 0x48, 0xdb, 0xfe, 0x9b, 0xb5, 0xe8, 0x7b, 0x5a, 0xf6, 0x22, 0x8f, 0xcf, 0x32, 0x26, 0x57, 0xf7, + 0x23, 0x26, 0x5e, 0xf3, 0xf2, 0x72, 0xb2, 0xca, 0x67, 0x44, 0x4e, 0x89, 0xc3, 0x1d, 0x39, 0x25, + 0xa9, 0xa4, 0x0b, 0xf3, 0xc7, 0x26, 0x7d, 0xda, 0xb9, 0x88, 0xf3, 0x39, 0xfb, 0x61, 0xc5, 0xf3, + 0x51, 0x91, 0x8e, 0x92, 0xa4, 0x1c, 0x0c, 0xf1, 0xae, 0x87, 0x9c, 0x29, 0xc1, 0x76, 0x6f, 0xde, + 0xd9, 0xc3, 0xe8, 0x56, 0x16, 0xbc, 0x80, 0x7b, 0x98, 0xa6, 0xf9, 0x04, 0x2f, 0xa8, 0x3d, 0x8c, + 0x8f, 0xb4, 0xac, 0x1e, 0xd6, 0x6b, 0x10, 0x6e, 0xf5, 0xd0, 0x5d, 0x74, 0xee, 0x84, 0x10, 0xbb, + 0x06, 0x34, 0x0d, 0xc5, 0xf3, 0xf3, 0x74, 0x7e, 0x5a, 0x24, 0xf5, 0x18, 0x7a, 0x88, 0xd7, 0xd9, + 0x41, 0x88, 0x35, 0x80, 0x40, 0xb5, 0xb7, 0xbf, 0xb3, 0xa9, 0xbe, 0x9e, 0x97, 0xf6, 0x4a, 0xbe, + 0x38, 0x60, 0xf3, 0x78, 0xb6, 0xd2, 0x93, 0xe9, 0x07, 0xa1, 0x59, 0x0c, 0xd2, 0xa6, 0x10, 0x1f, + 0x5e, 0x53, 0x4b, 0x97, 0xe7, 0xdf, 0xd7, 0xa2, 0x7b, 0x5e, 0x9c, 0xe8, 0x60, 0x52, 0xa5, 0x1f, + 0xe5, 0xc9, 0x09, 0xab, 0x44, 0x5c, 0x8a, 0xc1, 0xf7, 0x03, 0x31, 0x40, 0xe8, 0x98, 0xb2, 0xfd, + 0xe0, 0x6b, 0xe9, 0xda, 0x5e, 0x9f, 0xd4, 0xab, 0x84, 0x9e, 0x7f, 0xfc, 0x5e, 0x97, 0x12, 0x38, + 0xfb, 0xdc, 0x09, 0x21, 0xb6, 0xd7, 0xa5, 0x60, 0x9c, 0x5f, 0xa5, 0x82, 0xed, 0xb3, 0x9c, 0x95, + 0xed, 0x5e, 0x57, 0xaa, 0x3e, 0x42, 0xf4, 0x3a, 0x81, 0xda, 0xb3, 0x03, 0xc7, 0x9b, 0xaa, 0x38, + 0x38, 0x3b, 0x70, 0x0d, 0x28, 0x80, 0x38, 0x3b, 0x40, 0x41, 0x3b, 0xa3, 0x7a, 0xb5, 0x32, 0x19, + 0xcd, 0x66, 0xa0, 0xb0, 0xad, 0x9c, 0xe6, 0x71, 0x3f, 0x98, 0x68, 0x49, 0xb1, 0x5f, 0x1b, 0x09, + 0xb6, 0xa4, 0x42, 0x7a, 0xb5, 0xa4, 0x41, 0xd1, 0x96, 0x54, 0x9b, 0xa6, 0x40, 0x4b, 0x2a, 0xa0, + 0x47, 0x4b, 0x1a, 0xd0, 0x26, 0x39, 0x8e, 0x9f, 0x97, 0x29, 0x7b, 0x0d, 0x92, 0x1c, 0x57, 0xb9, + 0x16, 0x13, 0x49, 0x0e, 0x82, 0x69, 0x0f, 0x47, 0xd1, 0x2f, 0x4a, 0xe1, 0x0f, 0x79, 0x9a, 0x0f, + 0x6e, 0x22, 0x4a, 0xb5, 0xc0, 0x58, 0xbd, 0x45, 0x03, 0xa0, 0xc4, 0xf5, 0x5f, 0x75, 0xc6, 0x71, + 0x9f, 0x50, 0x02, 0xc9, 0xc6, 0x7a, 0x17, 0x66, 0xb3, 0x4b, 0x29, 0xac, 0x67, 0xe5, 0xc9, 0x45, + 0x5c, 0xa6, 0xf9, 0x7c, 0x80, 0xe9, 0x3a, 0x72, 0x22, 0xbb, 0xc4, 0x38, 0x10, 0x4e, 0x5a, 0x71, + 0x54, 0x14, 0x65, 0x3d, 0xd9, 0x63, 0xe1, 0xe4, 0x23, 0xc1, 0x70, 0x6a, 0xa1, 0xb8, 0xb7, 0x5d, + 0x36, 0xcb, 0xd2, 0x3c, 0xe8, 0x4d, 0x23, 0x7d, 0xbc, 0x59, 0x14, 0x04, 0xef, 0x01, 0x8b, 0xaf, + 0x58, 0x53, 0x33, 0xac, 0x65, 0x5c, 0x20, 0x18, 0xbc, 0x00, 0xb4, 0x5b, 0x79, 0x29, 0x3e, 0x8c, + 0x2f, 0x59, 0xdd, 0xc0, 0xac, 0x4e, 0x15, 0x06, 0x98, 0xbe, 0x47, 0x10, 0x5b, 0x79, 0x9c, 0xd4, + 0xae, 0x96, 0xd1, 0xbb, 0x52, 0x7e, 0x1c, 0x97, 0x22, 0x9d, 0xa5, 0x45, 0x9c, 0x37, 0x5b, 0x44, + 0x6c, 0x16, 0x69, 0x51, 0xc6, 0xe5, 0x56, 0x4f, 0x5a, 0xbb, 0xfd, 0x97, 0xb5, 0xe8, 0x36, 0xf4, + 0x7b, 0xcc, 0xca, 0x45, 0x2a, 0x4f, 0x1a, 0x2a, 0x3d, 0xc3, 0x7e, 0x1c, 0x36, 0xda, 0x52, 0x30, + 0xa5, 0xf9, 0xe4, 0xfa, 0x8a, 0x36, 0xbf, 0x9c, 0xe8, 0xdd, 0xd7, 0xe7, 0x65, 0xd2, 0x3a, 0x0e, + 0x9d, 0x34, 0x5b, 0x2a, 0x29, 0x24, 0xf2, 0xcb, 0x16, 0x04, 0x46, 0xf8, 0x69, 0x5e, 0x35, 0xd6, + 0xb1, 0x11, 0x6e, 0xc5, 0xc1, 0x11, 0xee, 0x61, 0x76, 0x84, 0x1f, 0x2f, 0xcf, 0xb2, 0xb4, 0xba, + 0x48, 0xf3, 0xb9, 0xde, 0x4c, 0xf8, 0xba, 0x56, 0x0c, 0xf7, 0x13, 0x1b, 0x9d, 0x1c, 0xe6, 0x44, + 0x07, 0x0b, 0xe9, 0x04, 0x84, 0xc9, 0x46, 0x27, 0x67, 0xf7, 0x78, 0x56, 0x7a, 0x90, 0x56, 0x02, + 0xec, 0xf1, 0x1c, 0xd5, 0x5a, 0x4a, 0xec, 0xf1, 0xda, 0x94, 0xdd, 0xe3, 0xb9, 0x75, 0xa8, 0x78, + 0x76, 0xc5, 0x4e, 0xcb, 0x14, 0xec, 0xf1, 0xbc, 0xf2, 0x35, 0x0c, 0xb1, 0xc7, 0xa3, 0x58, 0x3b, + 0x51, 0x59, 0x62, 0x9f, 0x89, 0x89, 0x88, 0xc5, 0xb2, 0x02, 0x13, 0x95, 0x63, 0xc3, 0x20, 0xc4, + 0x44, 0x45, 0xa0, 0xda, 0xdb, 0xef, 0x45, 0x91, 0x3a, 0x97, 0x91, 0x67, 0x67, 0xfe, 0xda, 0xa3, + 0x0f, 0x6c, 0xbc, 0x83, 0xb3, 0xdb, 0x01, 0xc2, 0xa6, 0x71, 0xea, 0xef, 0xf2, 0x48, 0x70, 0x80, + 0x6a, 0x48, 0x11, 0x91, 0xc6, 0x01, 0x04, 0x16, 0x74, 0x72, 0xc1, 0x5f, 0xe3, 0x05, 0xad, 0x25, + 0xe1, 0x82, 0x6a, 0xc2, 0x3e, 0x29, 0xd1, 0x05, 0xc5, 0x9e, 0x94, 0x34, 0xc5, 0x08, 0x3d, 0x29, + 0x81, 0x8c, 0x8d, 0x19, 0xd7, 0xf0, 0x73, 0xce, 0x2f, 0x17, 0x71, 0x79, 0x09, 0x62, 0xc6, 0x53, + 0x6e, 0x18, 0x22, 0x66, 0x28, 0xd6, 0xc6, 0x8c, 0xeb, 0xb0, 0xde, 0x04, 0x9c, 0x96, 0x19, 0x88, + 0x19, 0xcf, 0x86, 0x46, 0x88, 0x98, 0x21, 0x50, 0x3b, 0x3b, 0xb9, 0xde, 0x26, 0x0c, 0x1e, 0x0b, + 0x79, 0xea, 0x13, 0x46, 0x1d, 0x0b, 0x21, 0x18, 0x0c, 0xa1, 0xfd, 0x32, 0x2e, 0x2e, 0xf0, 0x10, + 0x92, 0xa2, 0x70, 0x08, 0x35, 0x08, 0xec, 0xef, 0x09, 0x8b, 0xcb, 0xd9, 0x05, 0xde, 0xdf, 0x4a, + 0x16, 0xee, 0x6f, 0xc3, 0xc0, 0xfe, 0x56, 0x82, 0x57, 0xa9, 0xb8, 0x38, 0x64, 0x22, 0xc6, 0xfb, + 0xdb, 0x67, 0xc2, 0xfd, 0xdd, 0x62, 0x6d, 0xf6, 0xef, 0x3a, 0x9c, 0x2c, 0xcf, 0xaa, 0x59, 0x99, + 0x9e, 0xb1, 0x41, 0xc0, 0x8a, 0x81, 0x88, 0xec, 0x9f, 0x84, 0xb5, 0xcf, 0x9f, 0xae, 0x45, 0x37, + 0x9b, 0x6e, 0xe7, 0x55, 0xa5, 0xd7, 0x3e, 0xdf, 0xfd, 0x87, 0x78, 0xff, 0x12, 0x38, 0xf1, 0xec, + 0xaa, 0x87, 0x9a, 0x93, 0x1b, 0xe0, 0x45, 0x3a, 0xcd, 0x2b, 0x53, 0xa8, 0x8f, 0xfb, 0x58, 0x77, + 0x14, 0x88, 0xdc, 0xa0, 0x97, 0xa2, 0x4d, 0xcb, 0x74, 0xff, 0x34, 0xb2, 0x71, 0x52, 0x81, 0xb4, + 0xac, 0x69, 0x6f, 0x87, 0x20, 0xd2, 0x32, 0x9c, 0x84, 0xa1, 0xb0, 0x5f, 0xf2, 0x65, 0x51, 0x75, + 0x84, 0x02, 0x80, 0xc2, 0xa1, 0xd0, 0x86, 0xb5, 0xcf, 0x37, 0xd1, 0x6f, 0xb8, 0xe1, 0xe7, 0x36, + 0xf6, 0x16, 0x1d, 0x53, 0x58, 0x13, 0x0f, 0xfb, 0xe2, 0x36, 0xa3, 0x68, 0x3c, 0x8b, 0x5d, 0x26, + 0xe2, 0x34, 0xab, 0x06, 0xeb, 0xb8, 0x8d, 0x46, 0x4e, 0x64, 0x14, 0x18, 0x07, 0xe7, 0xb7, 0xdd, + 0x65, 0x91, 0xa5, 0xb3, 0xf6, 0x43, 0x2b, 0xad, 0x6b, 0xc4, 0xe1, 0xf9, 0xcd, 0xc5, 0xe0, 0x7c, + 0x5d, 0xa7, 0x7e, 0xf2, 0x3f, 0xd3, 0x55, 0xc1, 0xf0, 0xf9, 0xda, 0x43, 0xc2, 0xf3, 0x35, 0x44, + 0x61, 0x7d, 0x26, 0x4c, 0x1c, 0xc4, 0x2b, 0xbe, 0x24, 0xe6, 0x6b, 0x23, 0x0e, 0xd7, 0xc7, 0xc5, + 0xec, 0xde, 0xc0, 0x78, 0x18, 0xe7, 0x82, 0x95, 0x79, 0x9c, 0xed, 0x65, 0xf1, 0xbc, 0x1a, 0x10, + 0x73, 0x8c, 0x4f, 0x11, 0x7b, 0x03, 0x9a, 0x46, 0x9a, 0x71, 0x5c, 0xed, 0xc5, 0x57, 0xbc, 0x4c, + 0x05, 0xdd, 0x8c, 0x16, 0xe9, 0x6c, 0x46, 0x0f, 0x45, 0xbd, 0x8d, 0xca, 0xd9, 0x45, 0x7a, 0xc5, + 0x92, 0x80, 0xb7, 0x06, 0xe9, 0xe1, 0xcd, 0x41, 0x91, 0x4e, 0x9b, 0xf0, 0x65, 0x39, 0x63, 0x64, + 0xa7, 0x29, 0x71, 0x67, 0xa7, 0x19, 0x4c, 0x7b, 0xf8, 0xc9, 0x5a, 0xf4, 0x9b, 0x4a, 0xea, 0x3e, + 0x49, 0xda, 0x8d, 0xab, 0x8b, 0x33, 0x1e, 0x97, 0xc9, 0xe0, 0x7d, 0xcc, 0x0e, 0x8a, 0x1a, 0xd7, + 0x4f, 0xaf, 0xa3, 0x02, 0x9b, 0xb5, 0xce, 0xbb, 0xed, 0x88, 0x43, 0x9b, 0xd5, 0x43, 0xc2, 0xcd, + 0x0a, 0x51, 0x38, 0x81, 0x48, 0xb9, 0x3a, 0x68, 0x5c, 0x27, 0xf5, 0xfd, 0xd3, 0xc6, 0x8d, 0x4e, + 0x0e, 0xce, 0x8f, 0xb5, 0xd0, 0x8f, 0x96, 0x2d, 0xca, 0x06, 0x1e, 0x31, 0xc3, 0xbe, 0x38, 0xe9, + 0xd9, 0x8c, 0x8a, 0xb0, 0xe7, 0xd6, 0xc8, 0x18, 0xf6, 0xc5, 0x09, 0xcf, 0xce, 0xb4, 0x16, 0xf2, + 0x8c, 0x4c, 0x6d, 0xc3, 0xbe, 0x38, 0xcc, 0xbe, 0x34, 0xd3, 0xac, 0x0b, 0x8f, 0x02, 0x76, 0xe0, + 0xda, 0xb0, 0xd9, 0x8b, 0xd5, 0x0e, 0xff, 0x6a, 0x2d, 0xfa, 0xae, 0xf5, 0x78, 0xc8, 0x93, 0xf4, + 0x7c, 0xa5, 0xa0, 0x97, 0x71, 0xb6, 0x64, 0xd5, 0xe0, 0x29, 0x65, 0xad, 0xcd, 0x9a, 0x12, 0x3c, + 0xbb, 0x96, 0x0e, 0x1c, 0x3b, 0xa3, 0xa2, 0xc8, 0x56, 0x53, 0xb6, 0x28, 0x32, 0x72, 0xec, 0x78, + 0x48, 0x78, 0xec, 0x40, 0x14, 0x66, 0xe5, 0x53, 0x5e, 0xe7, 0xfc, 0x68, 0x56, 0x2e, 0x45, 0xe1, + 0xac, 0xbc, 0x41, 0x60, 0xae, 0x34, 0xe5, 0x3b, 0x3c, 0xcb, 0xd8, 0x4c, 0xb4, 0x6f, 0xa3, 0x18, + 0x4d, 0x4b, 0x84, 0x73, 0x25, 0x40, 0xda, 0x53, 0xb9, 0x66, 0x0f, 0x19, 0x97, 0xec, 0xf9, 0xea, + 0x20, 0xcd, 0x2f, 0x07, 0x78, 0x5a, 0x60, 0x01, 0xe2, 0x54, 0x0e, 0x05, 0xe1, 0x5e, 0xf5, 0x34, + 0x4f, 0x38, 0xbe, 0x57, 0xad, 0x25, 0xe1, 0xbd, 0xaa, 0x26, 0xa0, 0xc9, 0x13, 0x46, 0x99, 0xac, + 0x25, 0x61, 0x93, 0x9a, 0xc0, 0xa6, 0x42, 0xfd, 0x44, 0x8a, 0x9c, 0x0a, 0xc1, 0x33, 0xa8, 0x8d, + 0x4e, 0x0e, 0xee, 0xb9, 0xb4, 0x03, 0x34, 0x22, 0x80, 0xf1, 0xbb, 0x41, 0x06, 0x86, 0x7e, 0xb3, + 0x1b, 0xde, 0x63, 0x62, 0x76, 0x81, 0x87, 0xbe, 0x87, 0x84, 0x43, 0x1f, 0xa2, 0xb0, 0xad, 0xa6, + 0xdc, 0xec, 0xe6, 0xd7, 0xf1, 0xc0, 0x6b, 0xed, 0xe4, 0x37, 0x3a, 0x39, 0xd8, 0x56, 0xe3, 0x05, + 0xdd, 0x56, 0x4a, 0x16, 0x6e, 0x2b, 0xc3, 0xc0, 0xd2, 0x2b, 0x81, 0x3c, 0x24, 0x5b, 0xa7, 0x15, + 0xbd, 0x63, 0xb2, 0x8d, 0x4e, 0x4e, 0x3b, 0xf9, 0x27, 0xb3, 0x3f, 0x54, 0xd2, 0x23, 0x5e, 0x0f, + 0xbe, 0x97, 0x71, 0x96, 0x26, 0xb1, 0x60, 0x53, 0x7e, 0xc9, 0x72, 0x7c, 0x2b, 0xa6, 0x4b, 0xab, + 0xf8, 0xa1, 0xa7, 0x10, 0xde, 0x8a, 0x85, 0x15, 0x61, 0x9c, 0x28, 0xfa, 0xb4, 0x62, 0x3b, 0x71, + 0x45, 0x4c, 0x91, 0x1e, 0x12, 0x8e, 0x13, 0x88, 0xc2, 0x44, 0x58, 0xc9, 0x5f, 0xbc, 0x29, 0x58, + 0x99, 0xb2, 0x7c, 0xc6, 0xf0, 0x44, 0x18, 0x52, 0xe1, 0x44, 0x18, 0xa1, 0xe1, 0x26, 0x70, 0x37, + 0x16, 0xec, 0xf9, 0x6a, 0x9a, 0x2e, 0x58, 0x25, 0xe2, 0x45, 0x81, 0x6f, 0x02, 0x01, 0x14, 0xde, + 0x04, 0xb6, 0xe1, 0xd6, 0x99, 0x93, 0x99, 0x69, 0xdb, 0xb7, 0xe3, 0x20, 0x11, 0xb8, 0x1d, 0x47, + 0xa0, 0xb0, 0x61, 0x2d, 0x80, 0x3e, 0x7d, 0x68, 0x59, 0x09, 0x3e, 0x7d, 0xa0, 0xe9, 0xd6, 0x49, + 0x9e, 0x61, 0x26, 0xf5, 0xd0, 0xec, 0x28, 0xfa, 0xc4, 0x1d, 0xa2, 0x9b, 0xbd, 0x58, 0xfc, 0xe8, + 0xf0, 0x84, 0x65, 0xb1, 0x5c, 0x0f, 0x03, 0xe7, 0x73, 0x0d, 0xd3, 0xe7, 0xe8, 0xd0, 0x61, 0xb5, + 0xc3, 0x3f, 0x5f, 0x8b, 0xde, 0xc3, 0x3c, 0x7e, 0x5e, 0x48, 0xbf, 0x4f, 0xba, 0x6d, 0x29, 0x92, + 0xb8, 0xfe, 0x17, 0xd6, 0xb0, 0x37, 0x58, 0x1a, 0x91, 0xbd, 0x1d, 0xa8, 0x0b, 0xe0, 0x67, 0x83, + 0xa6, 0xfc, 0x90, 0x23, 0x6e, 0xb0, 0x84, 0x78, 0xbb, 0xd1, 0xf2, 0xcb, 0x55, 0x81, 0x8d, 0x96, + 0xb1, 0xa1, 0xc5, 0xc4, 0x46, 0x0b, 0xc1, 0xec, 0xe8, 0x74, 0xab, 0xf7, 0x2a, 0x15, 0x17, 0x32, + 0x91, 0x03, 0xa3, 0xd3, 0x2b, 0xab, 0x81, 0x88, 0xd1, 0x49, 0xc2, 0x30, 0xd5, 0x69, 0xc0, 0x7a, + 0x6c, 0x62, 0x73, 0xb9, 0x31, 0xe4, 0x8e, 0xcc, 0x07, 0xdd, 0x20, 0x8c, 0xd7, 0x46, 0xac, 0xf7, + 0x54, 0x8f, 0x42, 0x16, 0xc0, 0xbe, 0x6a, 0xb3, 0x17, 0xab, 0x1d, 0xfe, 0x69, 0xf4, 0x9d, 0x56, + 0xc5, 0xf6, 0x58, 0x2c, 0x96, 0x25, 0x4b, 0xc0, 0x6d, 0xf1, 0x76, 0xb9, 0x1b, 0x90, 0xb8, 0x2d, + 0x1e, 0x54, 0x68, 0x25, 0xff, 0x0d, 0xa7, 0xc2, 0xca, 0x94, 0xe1, 0x69, 0xc8, 0xa4, 0xcf, 0x06, + 0x93, 0x7f, 0x5a, 0xa7, 0xb5, 0x7f, 0x77, 0xa3, 0x6b, 0x74, 0x15, 0xa7, 0x99, 0x7c, 0x0a, 0xfc, + 0x7e, 0xc8, 0xa8, 0x87, 0x06, 0xf7, 0xef, 0xa4, 0x4a, 0x6b, 0x66, 0x96, 0x63, 0xdc, 0xd9, 0xf7, + 0x3d, 0xa6, 0x67, 0x02, 0x64, 0xdb, 0xb7, 0xd5, 0x93, 0xd6, 0x6e, 0x45, 0xb3, 0xe4, 0xd5, 0x7f, + 0x76, 0x83, 0x1c, 0xf3, 0xaa, 0x55, 0x91, 0x48, 0xdf, 0xea, 0x49, 0xdb, 0x57, 0x15, 0xda, 0x5e, + 0xf5, 0x42, 0xb4, 0xdd, 0x69, 0x0a, 0xac, 0x45, 0x4f, 0xfa, 0x2b, 0x68, 0xf7, 0xff, 0x6a, 0x0e, + 0xbc, 0x95, 0xff, 0x19, 0x5f, 0x2c, 0x58, 0x9e, 0xb0, 0xa4, 0xd1, 0xa8, 0xea, 0x8d, 0xd9, 0x27, + 0xb4, 0x5d, 0xa3, 0x30, 0x74, 0x35, 0x4c, 0x89, 0x7e, 0xeb, 0x6b, 0x68, 0xea, 0xa2, 0xfd, 0xe7, + 0x5a, 0xf4, 0x10, 0x2d, 0x5a, 0x13, 0xb8, 0x5e, 0x11, 0x7f, 0xb7, 0x8f, 0x23, 0x4c, 0xd3, 0x14, + 0x75, 0xf4, 0xff, 0xb0, 0xa0, 0x8b, 0xfc, 0x6f, 0x6b, 0xd1, 0x1d, 0xab, 0x58, 0x87, 0xf7, 0x0e, + 0xcf, 0xcf, 0xb3, 0x74, 0x26, 0xe4, 0xa3, 0x5e, 0xad, 0x42, 0x37, 0x27, 0xa5, 0xd1, 0xdd, 0x9c, + 0x01, 0x4d, 0x5d, 0xb6, 0x7f, 0x5c, 0x8b, 0x6e, 0xb9, 0xcd, 0x29, 0x9f, 0x13, 0xab, 0x63, 0xd7, + 0x46, 0xb1, 0x1a, 0x7c, 0x44, 0xb7, 0x01, 0xc6, 0x9b, 0x72, 0x7d, 0x7c, 0x6d, 0x3d, 0xbb, 0x57, + 0xff, 0x34, 0xad, 0x04, 0x2f, 0x57, 0x93, 0x0b, 0xfe, 0xba, 0x79, 0xf5, 0xce, 0x5f, 0x2d, 0x34, + 0x30, 0x74, 0x08, 0x62, 0xaf, 0x8e, 0x93, 0x2d, 0x57, 0xf6, 0x15, 0xbd, 0x8a, 0x70, 0xe5, 0x10, + 0x1d, 0xae, 0x7c, 0xd2, 0xae, 0x95, 0x4d, 0xad, 0xec, 0xfb, 0x84, 0x1b, 0x78, 0x51, 0xdb, 0xef, + 0x14, 0x3e, 0xe8, 0x06, 0x6d, 0xc6, 0xac, 0xc5, 0xbb, 0xe9, 0xf9, 0xb9, 0xa9, 0x13, 0x5e, 0x52, + 0x17, 0x21, 0x32, 0x66, 0x02, 0xb5, 0x9b, 0xbe, 0xbd, 0x34, 0x63, 0xf2, 0x51, 0xd5, 0xe7, 0xe7, + 0xe7, 0x19, 0x8f, 0x13, 0xb0, 0xe9, 0xab, 0xc5, 0x43, 0x57, 0x4e, 0x6c, 0xfa, 0x30, 0xce, 0x5e, + 0x82, 0xa9, 0xa5, 0xf5, 0x98, 0xcb, 0x67, 0x69, 0x06, 0x2f, 0x8d, 0x4b, 0x4d, 0x23, 0x24, 0x2e, + 0xc1, 0xb4, 0x20, 0x9b, 0x98, 0xd5, 0xa2, 0x7a, 0xac, 0x34, 0xe5, 0xbf, 0xdf, 0x56, 0x74, 0xc4, + 0x44, 0x62, 0x86, 0x60, 0xf6, 0x50, 0xa5, 0x16, 0x9e, 0x16, 0xd2, 0xf8, 0xad, 0xb6, 0x96, 0x92, + 0x10, 0x87, 0x2a, 0x3e, 0x61, 0xf7, 0xf0, 0xf5, 0xdf, 0x77, 0xf9, 0xeb, 0x5c, 0x1a, 0xbd, 0xd3, + 0x56, 0x69, 0x64, 0xc4, 0x1e, 0x1e, 0x32, 0xda, 0xf0, 0x67, 0xd1, 0x2f, 0x48, 0xc3, 0x25, 0x2f, + 0x06, 0x37, 0x10, 0x85, 0xd2, 0xb9, 0x62, 0x7d, 0x93, 0x94, 0xdb, 0x3b, 0x33, 0x26, 0x36, 0x4e, + 0xab, 0x78, 0x0e, 0xdf, 0x8b, 0xb0, 0x3d, 0x2e, 0xa5, 0xc4, 0x9d, 0x99, 0x36, 0xe5, 0x47, 0xc5, + 0x11, 0x4f, 0xb4, 0x75, 0xa4, 0x86, 0x46, 0x18, 0x8a, 0x0a, 0x17, 0xb2, 0xc9, 0xf4, 0x51, 0x7c, + 0x95, 0xce, 0x4d, 0xc2, 0xa3, 0xa6, 0xaf, 0x0a, 0x24, 0xd3, 0x96, 0x19, 0x3a, 0x10, 0x91, 0x4c, + 0x93, 0xb0, 0x33, 0x19, 0x5b, 0x66, 0xbf, 0x39, 0x86, 0x1e, 0xe7, 0xe7, 0xbc, 0x4e, 0xbd, 0x0f, + 0xd2, 0xfc, 0x12, 0x4e, 0xc6, 0x8e, 0x49, 0x9c, 0x27, 0x26, 0xe3, 0x3e, 0x7a, 0x76, 0xd7, 0xd4, + 0x9c, 0xd1, 0xda, 0x8b, 0x1a, 0x4a, 0x03, 0xec, 0x9a, 0xcc, 0x51, 0x2e, 0xe4, 0x88, 0x5d, 0x53, + 0x88, 0xb7, 0x5d, 0x6c, 0x9c, 0x67, 0x3c, 0x87, 0x5d, 0x6c, 0x2d, 0xd4, 0x42, 0xa2, 0x8b, 0x5b, + 0x90, 0x9d, 0x8f, 0x1b, 0x91, 0x3a, 0xf5, 0x1b, 0x65, 0x19, 0x98, 0x8f, 0x8d, 0xaa, 0x01, 0x88, + 0xf9, 0x18, 0x05, 0xb5, 0x9f, 0x93, 0xe8, 0x9b, 0x75, 0x93, 0x1e, 0x97, 0xec, 0x2a, 0x65, 0xf0, + 0x4e, 0x91, 0x23, 0x21, 0xc6, 0xbf, 0x4f, 0xd8, 0x91, 0x75, 0x9a, 0x57, 0x45, 0x16, 0x57, 0x17, + 0xfa, 0x96, 0x89, 0x5f, 0xe7, 0x46, 0x08, 0xef, 0x99, 0xdc, 0xef, 0xa0, 0xec, 0xa4, 0xde, 0xc8, + 0xcc, 0x14, 0xb3, 0x8e, 0xab, 0xb6, 0xa6, 0x99, 0x8d, 0x4e, 0xce, 0x3e, 0xca, 0xd9, 0x8f, 0xb3, + 0x8c, 0x95, 0xab, 0x46, 0x76, 0x18, 0xe7, 0xe9, 0x39, 0xab, 0x04, 0x78, 0x94, 0xa3, 0xa9, 0x21, + 0xc4, 0x88, 0x47, 0x39, 0x01, 0xdc, 0xee, 0x26, 0x81, 0xe7, 0x71, 0x9e, 0xb0, 0x37, 0x60, 0x37, + 0x09, 0xed, 0x48, 0x86, 0xd8, 0x4d, 0x52, 0xac, 0x7d, 0xa4, 0xf1, 0x3c, 0xe3, 0xb3, 0x4b, 0xbd, + 0x04, 0xf8, 0x1d, 0x2c, 0x25, 0x70, 0x0d, 0xb8, 0x13, 0x42, 0xec, 0x22, 0x20, 0x05, 0x27, 0xac, + 0xc8, 0xe2, 0x19, 0xbc, 0x58, 0xa6, 0x74, 0xb4, 0x8c, 0x58, 0x04, 0x20, 0x03, 0x8a, 0xab, 0x2f, + 0xac, 0x61, 0xc5, 0x05, 0xf7, 0xd5, 0xee, 0x84, 0x10, 0xbb, 0x0c, 0x4a, 0xc1, 0xa4, 0xc8, 0x52, + 0x01, 0x86, 0x81, 0xd2, 0x90, 0x12, 0x62, 0x18, 0xf8, 0x04, 0x30, 0x79, 0xc8, 0xca, 0x39, 0x43, + 0x4d, 0x4a, 0x49, 0xd0, 0x64, 0x43, 0xd8, 0x5b, 0xf4, 0xaa, 0xee, 0xbc, 0x58, 0x81, 0x5b, 0xf4, + 0xba, 0x5a, 0xbc, 0x58, 0x11, 0xb7, 0xe8, 0x3d, 0x00, 0x14, 0xf1, 0x38, 0xae, 0x04, 0x5e, 0x44, + 0x29, 0x09, 0x16, 0xb1, 0x21, 0xec, 0x1a, 0xad, 0x8a, 0xb8, 0x14, 0x60, 0x8d, 0xd6, 0x05, 0x70, + 0xae, 0x56, 0xdc, 0x24, 0xe5, 0x76, 0x26, 0x51, 0xbd, 0xc2, 0xc4, 0x5e, 0xca, 0xb2, 0xa4, 0x02, + 0x33, 0x89, 0x6e, 0xf7, 0x46, 0x4a, 0xcc, 0x24, 0x6d, 0x0a, 0x84, 0x92, 0x7e, 0x2e, 0x83, 0xd5, + 0x0e, 0x3c, 0x96, 0xb9, 0x13, 0x42, 0xec, 0xfc, 0xd4, 0x14, 0x7a, 0x27, 0x2e, 0xcb, 0xb4, 0x5e, + 0xfc, 0xd7, 0xf1, 0x02, 0x35, 0x72, 0x62, 0x7e, 0xc2, 0x38, 0x30, 0xbc, 0x9a, 0x89, 0x1b, 0x2b, + 0x18, 0x9c, 0xba, 0xef, 0x06, 0x19, 0x9b, 0x71, 0x4a, 0x89, 0x73, 0x37, 0x00, 0x6b, 0x4d, 0xe4, + 0x6a, 0xc0, 0x7a, 0x17, 0xe6, 0xbc, 0x38, 0x68, 0x5c, 0x1c, 0xf2, 0x2b, 0x36, 0xe5, 0x2f, 0xde, + 0xa4, 0x55, 0xbd, 0x09, 0xd4, 0x2b, 0xf7, 0x33, 0xc2, 0x12, 0x06, 0x13, 0x2f, 0x0e, 0x76, 0x2a, + 0xd9, 0x04, 0x02, 0x94, 0xe5, 0x88, 0xbd, 0x46, 0x13, 0x08, 0x68, 0xd1, 0x70, 0x44, 0x02, 0x11, + 0xe2, 0xed, 0x39, 0x9e, 0x71, 0xae, 0x3f, 0xd9, 0x31, 0xe5, 0x4d, 0x2e, 0x47, 0x59, 0x83, 0x20, + 0x71, 0x94, 0x12, 0x54, 0xb0, 0xfb, 0x4b, 0xe3, 0xdf, 0x0e, 0xb1, 0x07, 0x84, 0x9d, 0xf6, 0x30, + 0x7b, 0xd8, 0x83, 0x44, 0x5c, 0xd9, 0x0b, 0x2e, 0x94, 0xab, 0xf6, 0xfd, 0x96, 0x87, 0x3d, 0x48, + 0xe7, 0x4c, 0xd0, 0xad, 0xd6, 0xf3, 0x78, 0x76, 0x39, 0x2f, 0xf9, 0x32, 0x4f, 0x76, 0x78, 0xc6, + 0x4b, 0x70, 0x26, 0xe8, 0x95, 0x1a, 0xa0, 0xc4, 0x99, 0x60, 0x87, 0x8a, 0xcd, 0xe0, 0xdc, 0x52, + 0x8c, 0xb2, 0x74, 0x0e, 0x77, 0xd4, 0x9e, 0x21, 0x09, 0x10, 0x19, 0x1c, 0x0a, 0x22, 0x41, 0xa4, + 0x76, 0xdc, 0x22, 0x9d, 0xc5, 0x99, 0xf2, 0xb7, 0x4d, 0x9b, 0xf1, 0xc0, 0xce, 0x20, 0x42, 0x14, + 0x90, 0x7a, 0x4e, 0x97, 0x65, 0x3e, 0xce, 0x05, 0x27, 0xeb, 0xd9, 0x00, 0x9d, 0xf5, 0x74, 0x40, + 0x30, 0xad, 0x4e, 0xd9, 0x9b, 0xba, 0x34, 0xf5, 0x3f, 0xd8, 0xb4, 0x5a, 0xff, 0x7d, 0xa8, 0xe5, + 0xa1, 0x69, 0x15, 0x70, 0xa0, 0x32, 0xda, 0x89, 0x0a, 0x98, 0x80, 0xb6, 0x1f, 0x26, 0x0f, 0xba, + 0x41, 0xdc, 0xcf, 0x44, 0xac, 0x32, 0x16, 0xf2, 0x23, 0x81, 0x3e, 0x7e, 0x1a, 0xd0, 0x1e, 0xb7, + 0x78, 0xf5, 0xb9, 0x60, 0xb3, 0xcb, 0xd6, 0x7d, 0x3d, 0xbf, 0xa0, 0x0a, 0x21, 0x8e, 0x5b, 0x08, + 0x14, 0xef, 0xa2, 0xf1, 0x8c, 0xe7, 0xa1, 0x2e, 0xaa, 0xe5, 0x7d, 0xba, 0x48, 0x73, 0x76, 0xf3, + 0x6b, 0xa4, 0x3a, 0x32, 0x55, 0x37, 0x6d, 0x12, 0x16, 0x5c, 0x88, 0xd8, 0xfc, 0x92, 0xb0, 0xcd, + 0xc9, 0xa1, 0xcf, 0xc3, 0xf6, 0xcb, 0x0c, 0x2d, 0x2b, 0x87, 0xf4, 0xcb, 0x0c, 0x14, 0x4b, 0x57, + 0x52, 0xc5, 0x48, 0x87, 0x15, 0x3f, 0x4e, 0x1e, 0xf7, 0x83, 0xed, 0x96, 0xc7, 0xf3, 0xb9, 0x93, + 0xb1, 0xb8, 0x54, 0x5e, 0xb7, 0x02, 0x86, 0x2c, 0x46, 0x6c, 0x79, 0x02, 0x38, 0x98, 0xc2, 0x3c, + 0xcf, 0x3b, 0x3c, 0x17, 0x2c, 0x17, 0xd8, 0x14, 0xe6, 0x1b, 0xd3, 0x60, 0x68, 0x0a, 0xa3, 0x14, + 0x40, 0xdc, 0xca, 0xf3, 0x20, 0x26, 0x8e, 0xe2, 0x05, 0x9a, 0xb1, 0xa9, 0xb3, 0x1e, 0x25, 0x0f, + 0xc5, 0x2d, 0xe0, 0x9c, 0x87, 0xcc, 0xae, 0x97, 0x69, 0x5c, 0xce, 0xcd, 0xe9, 0x46, 0x32, 0x78, + 0x42, 0xdb, 0xf1, 0x49, 0xe2, 0x21, 0x73, 0x58, 0x03, 0x4c, 0x3b, 0xe3, 0x45, 0x3c, 0x37, 0x35, + 0x45, 0x6a, 0x20, 0xe5, 0xad, 0xaa, 0x3e, 0xe8, 0x06, 0x81, 0x9f, 0x97, 0x69, 0xc2, 0x78, 0xc0, + 0x8f, 0x94, 0xf7, 0xf1, 0x03, 0x41, 0x90, 0xbd, 0xd5, 0xf5, 0xd6, 0x1f, 0xd5, 0xca, 0x13, 0xbd, + 0x8f, 0x1d, 0x12, 0xcd, 0x03, 0xb8, 0x50, 0xf6, 0x46, 0xf0, 0x60, 0x8c, 0x36, 0x07, 0xb4, 0xa1, + 0x31, 0x6a, 0xce, 0x5f, 0xfb, 0x8c, 0x51, 0x0c, 0xd6, 0x3e, 0x7f, 0xac, 0xc7, 0xe8, 0x6e, 0x2c, + 0xe2, 0x3a, 0x6f, 0x7f, 0x99, 0xb2, 0xd7, 0x7a, 0x23, 0x8c, 0xd4, 0xb7, 0xa1, 0x86, 0xf2, 0x5d, + 0x6c, 0xb0, 0x2b, 0xde, 0xee, 0xcd, 0x07, 0x7c, 0xeb, 0x1d, 0x42, 0xa7, 0x6f, 0xb0, 0x55, 0xd8, + 0xee, 0xcd, 0x07, 0x7c, 0xeb, 0x4f, 0x57, 0x74, 0xfa, 0x06, 0xdf, 0xaf, 0xd8, 0xee, 0xcd, 0x6b, + 0xdf, 0x7f, 0xd1, 0x0c, 0x5c, 0xd7, 0x79, 0x9d, 0x87, 0xcd, 0x44, 0x7a, 0xc5, 0xb0, 0x74, 0xd2, + 0xb7, 0x67, 0xd0, 0x50, 0x3a, 0x49, 0xab, 0x38, 0x5f, 0xf0, 0xc3, 0x4a, 0x71, 0xcc, 0xab, 0x54, + 0x5e, 0x12, 0x79, 0xd6, 0xc3, 0x68, 0x03, 0x87, 0x36, 0x4d, 0x21, 0x25, 0xfb, 0xb8, 0xdb, 0x43, + 0xed, 0xf5, 0xfc, 0xc7, 0x01, 0x7b, 0xed, 0x5b, 0xfa, 0x5b, 0x3d, 0x69, 0xfb, 0xe0, 0xd9, 0x63, + 0x9a, 0x47, 0x86, 0x13, 0x86, 0xae, 0x12, 0xc6, 0x94, 0x79, 0x94, 0xec, 0x3e, 0x3b, 0x7d, 0xd2, + 0x5f, 0xa1, 0xc3, 0xfd, 0x28, 0x49, 0xfa, 0xb9, 0x77, 0x9f, 0xb9, 0x3f, 0xe9, 0xaf, 0xa0, 0xdd, + 0xff, 0x65, 0xb3, 0xad, 0x81, 0xfe, 0xf5, 0x18, 0x7c, 0xda, 0xc7, 0x22, 0x18, 0x87, 0xcf, 0xae, + 0xa5, 0xa3, 0x0b, 0xf2, 0xb7, 0xcd, 0xfe, 0xbd, 0x41, 0xe5, 0x3b, 0x52, 0xf2, 0xdd, 0x6a, 0x3d, + 0x24, 0x43, 0x51, 0x65, 0x61, 0x38, 0x30, 0x3f, 0xbc, 0xa6, 0x96, 0xf3, 0x39, 0x49, 0x0f, 0xd6, + 0xef, 0xf2, 0x3a, 0xe5, 0x09, 0x59, 0x76, 0x68, 0x58, 0xa0, 0x8f, 0xae, 0xab, 0x46, 0x0d, 0x55, + 0x07, 0x96, 0xdf, 0xf2, 0x79, 0xd6, 0xd3, 0xb0, 0xf7, 0x75, 0x9f, 0x0f, 0xae, 0xa7, 0xa4, 0xcb, + 0xf2, 0x1f, 0x6b, 0xd1, 0x7d, 0x8f, 0xb5, 0x8f, 0x33, 0xc0, 0xa1, 0xcb, 0x0f, 0x02, 0xf6, 0x29, + 0x25, 0x53, 0xb8, 0xdf, 0xfe, 0x7a, 0xca, 0xf6, 0xb3, 0x7f, 0x9e, 0xca, 0x5e, 0x9a, 0x09, 0x56, + 0xb6, 0x3f, 0xfb, 0xe7, 0xdb, 0x55, 0xd4, 0x90, 0xfe, 0xec, 0x5f, 0x00, 0x77, 0x3e, 0xfb, 0x87, + 0x78, 0x46, 0x3f, 0xfb, 0x87, 0x5a, 0x0b, 0x7e, 0xf6, 0x2f, 0xac, 0x41, 0xad, 0x2e, 0x4d, 0x11, + 0xd4, 0xb1, 0x79, 0x2f, 0x8b, 0xfe, 0x29, 0xfa, 0xd3, 0xeb, 0xa8, 0x10, 0xeb, 0xab, 0xe2, 0xe4, + 0x35, 0xcf, 0x1e, 0x6d, 0xea, 0x5d, 0xf5, 0xdc, 0xee, 0xcd, 0x6b, 0xdf, 0x3f, 0xd2, 0x9b, 0x2b, + 0xb3, 0x9a, 0xf0, 0x52, 0x7e, 0xf2, 0x71, 0x33, 0xb4, 0x3a, 0xd4, 0x16, 0xdc, 0x9e, 0x7f, 0xdc, + 0x0f, 0x26, 0xaa, 0x5b, 0x13, 0xba, 0xd3, 0x87, 0x5d, 0x86, 0x40, 0x97, 0x6f, 0xf7, 0xe6, 0x89, + 0x65, 0x44, 0xf9, 0x56, 0xbd, 0xdd, 0xc3, 0x98, 0xdf, 0xd7, 0x4f, 0xfa, 0x2b, 0x68, 0xf7, 0x57, + 0x3a, 0x6b, 0x75, 0xdd, 0xcb, 0x7e, 0xde, 0xea, 0x32, 0x35, 0xf1, 0xba, 0x79, 0xd8, 0x17, 0x0f, + 0xe5, 0x2f, 0xee, 0x12, 0xda, 0x95, 0xbf, 0xa0, 0xcb, 0xe8, 0x07, 0xd7, 0x53, 0xd2, 0x65, 0xf9, + 0x87, 0xb5, 0xe8, 0x26, 0x59, 0x16, 0x1d, 0x07, 0x1f, 0xf5, 0xb5, 0x0c, 0xe2, 0xe1, 0xe3, 0x6b, + 0xeb, 0xe9, 0x42, 0xfd, 0xf3, 0x5a, 0x74, 0x2b, 0x50, 0x28, 0x15, 0x20, 0xd7, 0xb0, 0xee, 0x07, + 0xca, 0x27, 0xd7, 0x57, 0xa4, 0x96, 0x7b, 0x17, 0x9f, 0xb4, 0x3f, 0xe1, 0x16, 0xb0, 0x3d, 0xa1, + 0x3f, 0xe1, 0xd6, 0xad, 0x05, 0xcf, 0x98, 0xe2, 0xb3, 0x66, 0xcf, 0x87, 0x9e, 0x31, 0xc9, 0x0b, + 0x9a, 0xc1, 0x8f, 0xb6, 0x60, 0x1c, 0xe6, 0xe4, 0xc5, 0x9b, 0x22, 0xce, 0x13, 0xda, 0x89, 0x92, + 0x77, 0x3b, 0x31, 0x1c, 0x3c, 0x9b, 0xab, 0xa5, 0x27, 0xbc, 0xd9, 0xc7, 0x3d, 0xa4, 0xf4, 0x0d, + 0x12, 0x3c, 0x9b, 0x6b, 0xa1, 0x84, 0x37, 0x9d, 0x35, 0x86, 0xbc, 0x81, 0x64, 0xf1, 0x51, 0x1f, + 0x14, 0xec, 0x10, 0x8c, 0x37, 0x73, 0xe4, 0xff, 0x38, 0x64, 0xa5, 0x75, 0xec, 0xbf, 0xd5, 0x93, + 0x26, 0xdc, 0x4e, 0x98, 0xf8, 0x94, 0xc5, 0x09, 0x2b, 0x83, 0x6e, 0x0d, 0xd5, 0xcb, 0xad, 0x4b, + 0x63, 0x6e, 0x77, 0x78, 0xb6, 0x5c, 0xe4, 0xba, 0x33, 0x49, 0xb7, 0x2e, 0xd5, 0xed, 0x16, 0xd0, + 0xf0, 0x54, 0xd2, 0xba, 0x95, 0xe9, 0xe5, 0xa3, 0xb0, 0x19, 0x2f, 0xab, 0xdc, 0xec, 0xc5, 0xd2, + 0xf5, 0xd4, 0x61, 0xd4, 0x51, 0x4f, 0x10, 0x49, 0x5b, 0x3d, 0x69, 0x78, 0x3c, 0xe8, 0xb8, 0x35, + 0xf1, 0xb4, 0xdd, 0x61, 0xab, 0x15, 0x52, 0x4f, 0xfa, 0x2b, 0xc0, 0xc3, 0x58, 0x1d, 0x55, 0x07, + 0x69, 0x25, 0xf6, 0xd2, 0x2c, 0x1b, 0x6c, 0x06, 0xc2, 0xa4, 0x81, 0x82, 0x87, 0xb1, 0x08, 0x4c, + 0x44, 0x72, 0x73, 0x78, 0x99, 0x0f, 0xba, 0xec, 0x48, 0xaa, 0x57, 0x24, 0xbb, 0x34, 0x38, 0x50, + 0x73, 0x9a, 0xda, 0xd4, 0x76, 0x18, 0x6e, 0xb8, 0x56, 0x85, 0xb7, 0x7b, 0xf3, 0xe0, 0x69, 0xbf, + 0xa4, 0xe4, 0xca, 0x72, 0x8f, 0x32, 0xe1, 0xad, 0x24, 0xf7, 0x3b, 0x28, 0x70, 0x28, 0xa9, 0x86, + 0xd1, 0xab, 0x34, 0x99, 0x33, 0x81, 0x3e, 0xa8, 0x72, 0x81, 0xe0, 0x83, 0x2a, 0x00, 0x82, 0xae, + 0x53, 0x7f, 0x37, 0xa7, 0xb1, 0xe3, 0x04, 0xeb, 0x3a, 0xad, 0xec, 0x50, 0xa1, 0xae, 0x43, 0x69, + 0x30, 0x1b, 0x18, 0xb7, 0xfa, 0x33, 0x17, 0x8f, 0x42, 0x66, 0xc0, 0xb7, 0x2e, 0x36, 0x7b, 0xb1, + 0x60, 0x45, 0xb1, 0x0e, 0xd3, 0x45, 0x2a, 0xb0, 0x15, 0xc5, 0xb1, 0x51, 0x23, 0xa1, 0x15, 0xa5, + 0x8d, 0x52, 0xd5, 0xab, 0x73, 0x84, 0x71, 0x12, 0xae, 0x9e, 0x62, 0xfa, 0x55, 0xcf, 0xb0, 0xad, + 0xe7, 0xaa, 0xb9, 0x09, 0x19, 0x71, 0xa1, 0x37, 0xcb, 0x48, 0x6c, 0x3b, 0xbf, 0xec, 0x60, 0xc1, + 0xd0, 0xac, 0x43, 0x29, 0xc0, 0xe7, 0x05, 0xcd, 0x6f, 0x41, 0x4c, 0x98, 0x18, 0x15, 0x05, 0x8b, + 0xcb, 0x38, 0x9f, 0xa1, 0x9b, 0x53, 0xf3, 0xdb, 0x0e, 0x1e, 0x19, 0xda, 0x9c, 0x92, 0x1a, 0xe0, + 0xa9, 0xbd, 0xff, 0x7e, 0x31, 0x32, 0x14, 0xcc, 0x8b, 0xbc, 0xfe, 0xeb, 0xc5, 0x0f, 0x7b, 0x90, + 0xf0, 0xa9, 0x7d, 0x03, 0x98, 0x73, 0x77, 0xe5, 0xf4, 0xfd, 0x80, 0x29, 0x1f, 0x0d, 0x6d, 0x84, + 0x69, 0x15, 0x10, 0xd4, 0xce, 0xd9, 0xe2, 0x67, 0x6c, 0x85, 0x05, 0xb5, 0x7b, 0x48, 0xf8, 0x19, + 0x5b, 0x85, 0x82, 0xba, 0x8d, 0x82, 0x3c, 0xd3, 0xdd, 0x07, 0xad, 0x07, 0xf4, 0xdd, 0xad, 0xcf, + 0x46, 0x27, 0x07, 0x46, 0xce, 0x6e, 0x7a, 0xe5, 0x3d, 0xa6, 0x40, 0x0a, 0xba, 0x9b, 0x5e, 0xe1, + 0x4f, 0x29, 0x36, 0x7b, 0xb1, 0xf0, 0x46, 0x40, 0x2c, 0xd8, 0x9b, 0xe6, 0x51, 0x3d, 0x52, 0x5c, + 0x29, 0x6f, 0x3d, 0xab, 0x7f, 0xd0, 0x0d, 0xda, 0xfb, 0xb7, 0xc7, 0x25, 0x9f, 0xb1, 0xaa, 0xd2, + 0x5f, 0x80, 0xf5, 0x2f, 0x38, 0x69, 0xd9, 0x10, 0x7c, 0xff, 0xf5, 0x5e, 0x18, 0x72, 0x3e, 0xdb, + 0xa8, 0x44, 0xf6, 0x6b, 0x52, 0xeb, 0xa8, 0x66, 0xfb, 0x43, 0x52, 0x1b, 0x9d, 0x9c, 0x1d, 0x5e, + 0x5a, 0xea, 0x7e, 0x3e, 0xea, 0x01, 0xaa, 0x8e, 0x7d, 0x39, 0xea, 0x61, 0x0f, 0x52, 0xbb, 0xfa, + 0x34, 0x7a, 0xeb, 0x80, 0xcf, 0x27, 0x2c, 0x4f, 0x06, 0xdf, 0xf3, 0x6f, 0xf0, 0xf2, 0xf9, 0xb0, + 0xfe, 0xb3, 0x31, 0x7a, 0x83, 0x12, 0xdb, 0x3b, 0x88, 0xbb, 0xec, 0x6c, 0x39, 0x9f, 0x88, 0x58, + 0x80, 0x3b, 0x88, 0xf2, 0xef, 0xc3, 0x5a, 0x40, 0xdc, 0x41, 0xf4, 0x00, 0x60, 0x6f, 0x5a, 0x32, + 0x86, 0xda, 0xab, 0x05, 0x41, 0x7b, 0x1a, 0xb0, 0x59, 0x84, 0xb1, 0x57, 0x27, 0xea, 0xf0, 0xce, + 0xa0, 0xd5, 0x91, 0x52, 0x22, 0x8b, 0x68, 0x53, 0x36, 0xb8, 0x55, 0xf5, 0xe5, 0xd7, 0x7c, 0x96, + 0x8b, 0x45, 0x5c, 0xae, 0x40, 0x70, 0xeb, 0x5a, 0x3a, 0x00, 0x11, 0xdc, 0x28, 0x68, 0x47, 0x6d, + 0xd3, 0xcc, 0xb3, 0xcb, 0x7d, 0x5e, 0xf2, 0xa5, 0x48, 0x73, 0x06, 0xbf, 0xe8, 0x62, 0x1a, 0xd4, + 0x65, 0x88, 0x51, 0x4b, 0xb1, 0x36, 0xcb, 0x95, 0x84, 0xba, 0xce, 0x28, 0x3f, 0xb5, 0x5f, 0x09, + 0x5e, 0xc2, 0xc7, 0x99, 0xca, 0x0a, 0x84, 0x88, 0x2c, 0x97, 0x84, 0x41, 0xdf, 0x1f, 0xa7, 0xf9, + 0x1c, 0xed, 0xfb, 0x63, 0xf7, 0xab, 0xca, 0xb7, 0x68, 0xc0, 0x0e, 0x28, 0xd5, 0x68, 0x6a, 0x00, + 0xe8, 0x57, 0x99, 0xd1, 0x46, 0x77, 0x09, 0x62, 0x40, 0xe1, 0x24, 0x70, 0xf5, 0x79, 0xc1, 0x72, + 0x96, 0x34, 0x97, 0xf6, 0x30, 0x57, 0x1e, 0x11, 0x74, 0x05, 0x49, 0x3b, 0x17, 0x49, 0xf9, 0xc9, + 0x32, 0x3f, 0x2e, 0xf9, 0x79, 0x9a, 0xb1, 0x12, 0xcc, 0x45, 0x4a, 0xdd, 0x91, 0x13, 0x73, 0x11, + 0xc6, 0xd9, 0xdb, 0x1f, 0x52, 0xea, 0xfd, 0x5e, 0xc4, 0xb4, 0x8c, 0x67, 0xf0, 0xf6, 0x87, 0xb2, + 0xd1, 0xc6, 0x88, 0x93, 0xc1, 0x00, 0xee, 0x24, 0x3a, 0xca, 0x75, 0xbe, 0x92, 0xf1, 0xa1, 0x5f, + 0xa5, 0x95, 0xdf, 0x1a, 0xae, 0x40, 0xa2, 0xa3, 0xcd, 0x61, 0x24, 0x91, 0xe8, 0x84, 0x35, 0xec, + 0x52, 0x22, 0xb9, 0x23, 0x7d, 0xab, 0x09, 0x2c, 0x25, 0xca, 0x46, 0x23, 0x24, 0x96, 0x92, 0x16, + 0x04, 0x26, 0xa4, 0x66, 0x18, 0xcc, 0xd1, 0x09, 0xc9, 0x48, 0x83, 0x13, 0x92, 0x4b, 0xd9, 0x89, + 0x62, 0x9c, 0xa7, 0x22, 0x8d, 0xb3, 0x09, 0x13, 0xc7, 0x71, 0x19, 0x2f, 0x98, 0x60, 0x25, 0x9c, + 0x28, 0x34, 0x32, 0xf4, 0x18, 0x62, 0xa2, 0xa0, 0x58, 0xed, 0xf0, 0x77, 0xa2, 0x77, 0xea, 0x75, + 0x9f, 0xe5, 0xfa, 0x97, 0xae, 0x5e, 0xc8, 0xdf, 0x29, 0x1c, 0xbc, 0x6b, 0x6c, 0x4c, 0x44, 0xc9, + 0xe2, 0x45, 0x63, 0xfb, 0x6d, 0xf3, 0x77, 0x09, 0x3e, 0x59, 0xab, 0xe3, 0xf9, 0x88, 0x8b, 0xf4, + 0xbc, 0xde, 0x66, 0xeb, 0x17, 0x98, 0x40, 0x3c, 0xbb, 0xe2, 0x61, 0xe0, 0x53, 0x2c, 0x18, 0x67, + 0xe7, 0x69, 0x57, 0x7a, 0xc2, 0x8a, 0x0c, 0xce, 0xd3, 0x9e, 0xb6, 0x04, 0x88, 0x79, 0x1a, 0x05, + 0xed, 0xe0, 0x74, 0xc5, 0x53, 0x16, 0xae, 0xcc, 0x94, 0xf5, 0xab, 0xcc, 0xd4, 0x7b, 0x27, 0x24, + 0x8b, 0xde, 0x39, 0x64, 0x8b, 0x33, 0x56, 0x56, 0x17, 0x69, 0x41, 0x7d, 0x0f, 0xd9, 0x12, 0x9d, + 0xdf, 0x43, 0x26, 0x50, 0xbb, 0x12, 0x58, 0x60, 0x5c, 0x1d, 0xc5, 0x0b, 0x26, 0x3f, 0x2c, 0x03, + 0x56, 0x02, 0xc7, 0x88, 0x03, 0x11, 0x2b, 0x01, 0x09, 0x3b, 0xaf, 0x97, 0x59, 0xe6, 0x84, 0xcd, + 0xeb, 0x08, 0x2b, 0x8f, 0xe3, 0xd5, 0x82, 0xe5, 0x42, 0x9b, 0x04, 0x67, 0xf2, 0x8e, 0x49, 0x9c, + 0x27, 0xce, 0xe4, 0xfb, 0xe8, 0x39, 0x53, 0x93, 0xd7, 0xf0, 0xc7, 0xbc, 0x14, 0xea, 0x27, 0xec, + 0x4e, 0xcb, 0x0c, 0x4c, 0x4d, 0x7e, 0xa3, 0x7a, 0x24, 0x31, 0x35, 0x85, 0x35, 0x9c, 0xdf, 0x2c, + 0xf1, 0xca, 0xf0, 0x92, 0x95, 0x26, 0x4e, 0x5e, 0x2c, 0xe2, 0x34, 0xd3, 0xd1, 0xf0, 0xfd, 0x80, + 0x6d, 0x42, 0x87, 0xf8, 0xcd, 0x92, 0xbe, 0xba, 0xce, 0xaf, 0xbc, 0x84, 0x4b, 0x08, 0x1e, 0x11, + 0x74, 0xd8, 0x27, 0x1e, 0x11, 0x74, 0x6b, 0xd9, 0x9d, 0xbb, 0x65, 0x25, 0xb7, 0x92, 0xc4, 0x0e, + 0x4f, 0xe0, 0x79, 0xa1, 0x63, 0x13, 0x80, 0xc4, 0xce, 0x3d, 0xa8, 0x60, 0x53, 0x03, 0x8b, 0xed, + 0xa5, 0x79, 0x9c, 0xa5, 0x3f, 0x86, 0x69, 0xbd, 0x63, 0xa7, 0x21, 0x88, 0xd4, 0x00, 0x27, 0x31, + 0x57, 0xfb, 0x4c, 0x4c, 0xd3, 0x7a, 0xea, 0x7f, 0x10, 0x68, 0x37, 0x49, 0x74, 0xbb, 0x72, 0x48, + 0xe7, 0xdb, 0xc7, 0xb0, 0x59, 0x47, 0x45, 0x31, 0xa9, 0x57, 0xd5, 0x13, 0x36, 0x63, 0x69, 0x21, + 0x06, 0x1f, 0x86, 0xdb, 0x0a, 0xe0, 0xc4, 0x45, 0x8b, 0x1e, 0x6a, 0xce, 0xe3, 0xfb, 0x7a, 0x2e, + 0x99, 0xa8, 0x5f, 0xd9, 0x3d, 0xad, 0x58, 0xa9, 0x13, 0x8d, 0x7d, 0x26, 0xc0, 0xe8, 0x74, 0xb8, + 0xa1, 0x03, 0xd6, 0x15, 0x25, 0x46, 0x67, 0x58, 0xc3, 0x1e, 0xf6, 0x39, 0x9c, 0xfe, 0x76, 0x80, + 0xbc, 0xee, 0xf8, 0x98, 0x34, 0xe6, 0x50, 0xc4, 0x61, 0x1f, 0x4d, 0xdb, 0x6c, 0xad, 0xed, 0x76, + 0x94, 0xaf, 0xc6, 0xf0, 0xca, 0x04, 0x62, 0x49, 0x62, 0x44, 0xb6, 0x16, 0xc0, 0x9d, 0xc3, 0xf0, + 0x92, 0xc7, 0xc9, 0x2c, 0xae, 0xc4, 0x71, 0xbc, 0xca, 0x78, 0x9c, 0xc8, 0x75, 0x1d, 0x1e, 0x86, + 0x37, 0xcc, 0xd0, 0x85, 0xa8, 0xc3, 0x70, 0x0a, 0x76, 0xb3, 0x33, 0xf9, 0xe3, 0xc1, 0xfa, 0x2a, + 0x29, 0xcc, 0xce, 0x64, 0x79, 0xe1, 0x35, 0xd2, 0x7b, 0x61, 0xc8, 0xbe, 0x02, 0xa7, 0x44, 0x32, + 0x0d, 0xb9, 0x85, 0xe9, 0x78, 0x09, 0xc8, 0xed, 0x00, 0x61, 0x3f, 0xcb, 0xa2, 0xfe, 0xde, 0xfc, + 0x54, 0x99, 0xd0, 0x5f, 0x88, 0x7f, 0x8c, 0xe9, 0xba, 0x90, 0x77, 0x43, 0x6d, 0xab, 0x27, 0x6d, + 0xd3, 0xcc, 0x9d, 0x8b, 0x58, 0x8c, 0x92, 0xe4, 0x90, 0x55, 0xc8, 0xfb, 0xec, 0xb5, 0x70, 0x68, + 0xa5, 0x44, 0x9a, 0xd9, 0xa6, 0x6c, 0xa0, 0xd7, 0xb2, 0x17, 0x49, 0x2a, 0xb4, 0xac, 0xb9, 0xa0, + 0xfd, 0xb8, 0x6d, 0xa0, 0x4d, 0x11, 0xb5, 0xa2, 0x69, 0x3b, 0x97, 0xd7, 0xcc, 0x94, 0xcf, 0xe7, + 0x19, 0xd3, 0xd0, 0x09, 0x8b, 0xd5, 0x07, 0x32, 0xb7, 0xdb, 0xb6, 0x50, 0x90, 0x98, 0xcb, 0x83, + 0x0a, 0x36, 0x8d, 0xac, 0x31, 0xf5, 0x48, 0xaa, 0x69, 0xd8, 0x8d, 0xb6, 0x19, 0x0f, 0x20, 0xd2, + 0x48, 0x14, 0xb4, 0xaf, 0xdd, 0xd5, 0xe2, 0x7d, 0xd6, 0xb4, 0x04, 0xfc, 0x02, 0x97, 0x54, 0x76, + 0xc4, 0xc4, 0x6b, 0x77, 0x08, 0x66, 0xf7, 0x09, 0xc0, 0xc3, 0xf3, 0xd5, 0x38, 0x81, 0xfb, 0x04, + 0xa8, 0x2f, 0x19, 0x62, 0x9f, 0x40, 0xb1, 0x7e, 0xd7, 0x99, 0x73, 0xaf, 0x83, 0xb8, 0xb2, 0x95, + 0x43, 0xba, 0x0e, 0x05, 0x43, 0x5d, 0x47, 0x29, 0xf8, 0x4d, 0xea, 0x1e, 0xad, 0x21, 0x4d, 0x8a, + 0x9d, 0xab, 0xad, 0x77, 0x61, 0x36, 0xf7, 0xaf, 0x85, 0x27, 0x2c, 0x4e, 0x4c, 0xc5, 0x10, 0x5d, + 0x57, 0x4e, 0xe4, 0xfe, 0x18, 0xa7, 0x9d, 0xfc, 0x7e, 0x34, 0x50, 0xd5, 0x28, 0x5d, 0x37, 0xb7, + 0xb0, 0x22, 0xd6, 0x04, 0x31, 0x51, 0xf9, 0x84, 0x93, 0xb8, 0x79, 0x5d, 0x34, 0xe5, 0xda, 0x81, 0x7e, 0x2d, 0xb4, 0x02, 0x89, 0x9b, 0xdf, 0xec, 0x2d, 0x9a, 0x48, 0xdc, 0xba, 0xb5, 0x9c, 0x8f, - 0x11, 0x81, 0x2e, 0xdb, 0x2b, 0xf9, 0x02, 0x96, 0xe9, 0xd3, 0x60, 0xf7, 0x20, 0x1a, 0xc4, 0xc7, + 0x11, 0x81, 0x2e, 0xdb, 0x2b, 0xf9, 0x02, 0x96, 0xe9, 0x93, 0x60, 0xf7, 0x20, 0x1a, 0xc4, 0xc7, 0x88, 0xfa, 0x69, 0xda, 0x35, 0xc8, 0x9c, 0x1d, 0xc8, 0xeb, 0x69, 0xf8, 0xaf, 0xa0, 0x28, 0x21, - 0xb1, 0x06, 0xb5, 0x20, 0xe7, 0x27, 0x5a, 0xc7, 0xaf, 0xca, 0x54, 0xa4, 0xf9, 0x7c, 0xca, 0x79, - 0x06, 0x8f, 0x2c, 0x47, 0xe3, 0xa1, 0x2b, 0xa5, 0x7e, 0xa2, 0xb5, 0x45, 0xd9, 0x25, 0x6e, 0x34, - 0x1e, 0x2d, 0x05, 0x3f, 0x4f, 0xb3, 0x0c, 0x8c, 0x9c, 0xd1, 0x78, 0xd8, 0x48, 0x88, 0x91, 0xe3, - 0x13, 0xce, 0x0f, 0x8b, 0x8e, 0xe5, 0xe9, 0xbf, 0x3e, 0x01, 0xbd, 0x03, 0x75, 0x1c, 0x21, 0xf5, - 0xc3, 0xa2, 0x10, 0x72, 0x7e, 0x28, 0x75, 0x8c, 0xfd, 0x94, 0xcb, 0x26, 0x54, 0x47, 0x20, 0xea, - 0x87, 0x52, 0x29, 0xd8, 0x79, 0x27, 0xf9, 0x78, 0x59, 0x5d, 0xf8, 0x47, 0x06, 0x6a, 0x73, 0xa8, - 0x3e, 0xdb, 0xfa, 0x14, 0xfc, 0xa0, 0x90, 0xcf, 0x0e, 0x3d, 0x98, 0xb8, 0x9e, 0xd6, 0xa9, 0xa4, - 0x0a, 0xf3, 0xec, 0xfd, 0xff, 0xfa, 0xf2, 0xc6, 0xda, 0xcf, 0xbe, 0xbc, 0xb1, 0xf6, 0x3f, 0x5f, - 0xde, 0x58, 0xfb, 0xe9, 0x57, 0x37, 0xbe, 0xf1, 0xb3, 0xaf, 0x6e, 0x7c, 0xe3, 0xbf, 0xbf, 0xba, - 0xf1, 0x8d, 0x2f, 0xde, 0xaa, 0x54, 0x6e, 0x76, 0xf6, 0xf3, 0x45, 0xc9, 0x05, 0x7f, 0xfa, 0x7f, - 0x01, 0x00, 0x00, 0xff, 0xff, 0x94, 0x35, 0x64, 0x61, 0x73, 0x82, 0x00, 0x00, + 0xb1, 0x06, 0xb5, 0x20, 0xfb, 0x1e, 0x72, 0x13, 0x47, 0xa3, 0x2c, 0x1b, 0xdc, 0xc6, 0x43, 0xc3, + 0xfd, 0xc0, 0xc3, 0x9d, 0x10, 0xe2, 0xfc, 0xf0, 0xeb, 0xf8, 0x55, 0x99, 0x8a, 0x34, 0x9f, 0x4f, + 0x39, 0xcf, 0xe0, 0x41, 0xe8, 0x68, 0x3c, 0x74, 0xa5, 0xd4, 0x0f, 0xbf, 0xb6, 0x28, 0xbb, 0x70, + 0x8e, 0xc6, 0xa3, 0xa5, 0xe0, 0xe7, 0x69, 0x96, 0x81, 0x78, 0x1c, 0x8d, 0x87, 0x8d, 0x84, 0x88, + 0x47, 0x9f, 0x70, 0x7e, 0xae, 0x74, 0x2c, 0x9f, 0x29, 0xe8, 0x73, 0xd5, 0xbb, 0x50, 0xc7, 0x11, + 0x52, 0x3f, 0x57, 0x0a, 0x21, 0xe7, 0xe7, 0x57, 0xc7, 0xd8, 0x0f, 0xc4, 0x6c, 0x42, 0x75, 0x04, + 0xa2, 0x7e, 0x7e, 0x95, 0x82, 0x9d, 0x37, 0x9d, 0x8f, 0x97, 0xd5, 0x85, 0x7f, 0x10, 0xa1, 0xb6, + 0x9c, 0xea, 0x63, 0xb0, 0xcf, 0xc0, 0xcf, 0x14, 0xf9, 0xec, 0xd0, 0x83, 0x89, 0x4b, 0x6f, 0x9d, + 0x4a, 0xaa, 0x30, 0xcf, 0x6f, 0xff, 0xf7, 0x97, 0x37, 0xd6, 0x7e, 0xf6, 0xe5, 0x8d, 0xb5, 0xff, + 0xfd, 0xf2, 0xc6, 0xda, 0x4f, 0xbf, 0xba, 0xf1, 0x8d, 0x9f, 0x7d, 0x75, 0xe3, 0x1b, 0xff, 0xf3, + 0xd5, 0x8d, 0x6f, 0x7c, 0xf1, 0x56, 0xa5, 0x32, 0xbe, 0xb3, 0x9f, 0x2f, 0x4a, 0x2e, 0xf8, 0xb3, + 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xf4, 0x6f, 0x9e, 0xb4, 0xc9, 0x82, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -762,6 +763,7 @@ type ClientCommandsClient interface { ChatSubscribeToMessagePreviews(ctx context.Context, in *pb.RpcChatSubscribeToMessagePreviewsRequest, opts ...grpc.CallOption) (*pb.RpcChatSubscribeToMessagePreviewsResponse, error) ChatUnsubscribeFromMessagePreviews(ctx context.Context, in *pb.RpcChatUnsubscribeFromMessagePreviewsRequest, opts ...grpc.CallOption) (*pb.RpcChatUnsubscribeFromMessagePreviewsResponse, error) ObjectChatAdd(ctx context.Context, in *pb.RpcObjectChatAddRequest, opts ...grpc.CallOption) (*pb.RpcObjectChatAddResponse, error) + ChatReadAll(ctx context.Context, in *pb.RpcChatReadAllRequest, opts ...grpc.CallOption) (*pb.RpcChatReadAllResponse, error) // mock AI RPCs for compatibility between branches. Not implemented in main AIWritingTools(ctx context.Context, in *pb.RpcAIWritingToolsRequest, opts ...grpc.CallOption) (*pb.RpcAIWritingToolsResponse, error) AIAutofill(ctx context.Context, in *pb.RpcAIAutofillRequest, opts ...grpc.CallOption) (*pb.RpcAIAutofillResponse, error) @@ -3439,6 +3441,15 @@ func (c *clientCommandsClient) ObjectChatAdd(ctx context.Context, in *pb.RpcObje return out, nil } +func (c *clientCommandsClient) ChatReadAll(ctx context.Context, in *pb.RpcChatReadAllRequest, opts ...grpc.CallOption) (*pb.RpcChatReadAllResponse, error) { + out := new(pb.RpcChatReadAllResponse) + err := c.cc.Invoke(ctx, "/anytype.ClientCommands/ChatReadAll", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *clientCommandsClient) AIWritingTools(ctx context.Context, in *pb.RpcAIWritingToolsRequest, opts ...grpc.CallOption) (*pb.RpcAIWritingToolsResponse, error) { out := new(pb.RpcAIWritingToolsResponse) err := c.cc.Invoke(ctx, "/anytype.ClientCommands/AIWritingTools", in, out, opts...) @@ -3842,6 +3853,7 @@ type ClientCommandsServer interface { ChatSubscribeToMessagePreviews(context.Context, *pb.RpcChatSubscribeToMessagePreviewsRequest) *pb.RpcChatSubscribeToMessagePreviewsResponse ChatUnsubscribeFromMessagePreviews(context.Context, *pb.RpcChatUnsubscribeFromMessagePreviewsRequest) *pb.RpcChatUnsubscribeFromMessagePreviewsResponse ObjectChatAdd(context.Context, *pb.RpcObjectChatAddRequest) *pb.RpcObjectChatAddResponse + ChatReadAll(context.Context, *pb.RpcChatReadAllRequest) *pb.RpcChatReadAllResponse // mock AI RPCs for compatibility between branches. Not implemented in main AIWritingTools(context.Context, *pb.RpcAIWritingToolsRequest) *pb.RpcAIWritingToolsResponse AIAutofill(context.Context, *pb.RpcAIAutofillRequest) *pb.RpcAIAutofillResponse @@ -4734,6 +4746,9 @@ func (*UnimplementedClientCommandsServer) ChatUnsubscribeFromMessagePreviews(ctx func (*UnimplementedClientCommandsServer) ObjectChatAdd(ctx context.Context, req *pb.RpcObjectChatAddRequest) *pb.RpcObjectChatAddResponse { return nil } +func (*UnimplementedClientCommandsServer) ChatReadAll(ctx context.Context, req *pb.RpcChatReadAllRequest) *pb.RpcChatReadAllResponse { + return nil +} func (*UnimplementedClientCommandsServer) AIWritingTools(ctx context.Context, req *pb.RpcAIWritingToolsRequest) *pb.RpcAIWritingToolsResponse { return nil } @@ -10032,6 +10047,24 @@ func _ClientCommands_ObjectChatAdd_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } +func _ClientCommands_ChatReadAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(pb.RpcChatReadAllRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClientCommandsServer).ChatReadAll(ctx, in), nil + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/anytype.ClientCommands/ChatReadAll", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClientCommandsServer).ChatReadAll(ctx, req.(*pb.RpcChatReadAllRequest)), nil + } + return interceptor(ctx, in, info, handler) +} + func _ClientCommands_AIWritingTools_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(pb.RpcAIWritingToolsRequest) if err := dec(in); err != nil { @@ -11294,6 +11327,10 @@ var _ClientCommands_serviceDesc = grpc.ServiceDesc{ MethodName: "ObjectChatAdd", Handler: _ClientCommands_ObjectChatAdd_Handler, }, + { + MethodName: "ChatReadAll", + Handler: _ClientCommands_ChatReadAll_Handler, + }, { MethodName: "AIWritingTools", Handler: _ClientCommands_AIWritingTools_Handler, From baebbfb35e928da4c60a509de06c3f7c90878d61 Mon Sep 17 00:00:00 2001 From: Sergey Cherepanov Date: Wed, 28 May 2025 11:53:37 +0200 Subject: [PATCH 162/164] GO-5719 fix nil keys panic --- core/pushnotification/service.go | 1 + 1 file changed, 1 insertion(+) diff --git a/core/pushnotification/service.go b/core/pushnotification/service.go index a7fa0292a..5f229f86f 100644 --- a/core/pushnotification/service.go +++ b/core/pushnotification/service.go @@ -302,6 +302,7 @@ func (s *service) run() { keys, err := s.getSpaceKeys(req.spaceId) if err != nil { log.Error("failed to get space keys", zap.Error(err)) + continue } for _, topic := range req.topics { From 108ab57e3325954d1ceaed0f112196af8926ee7c Mon Sep 17 00:00:00 2001 From: Sergey Date: Wed, 28 May 2025 17:03:56 +0200 Subject: [PATCH 163/164] GO-5727: Subscriptions: improve lock contention --- core/subscription/service.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/core/subscription/service.go b/core/subscription/service.go index b664d9ff1..4f261addf 100644 --- a/core/subscription/service.go +++ b/core/subscription/service.go @@ -225,10 +225,14 @@ func (s *service) SubscribeGroups(req SubscribeGroupsRequest) (*pb.RpcObjectGrou func (s *service) Unsubscribe(subIds ...string) (err error) { s.lock.Lock() + subs := make([]*spaceSubscriptions, 0, len(s.spaceSubs)) for _, spaceSub := range s.spaceSubs { - err = errors.Join(spaceSub.Unsubscribe(subIds...)) + subs = append(subs, spaceSub) } s.lock.Unlock() + for _, spaceSub := range subs { + err = errors.Join(spaceSub.Unsubscribe(subIds...)) + } return err } @@ -614,9 +618,6 @@ type SubscribeGroupsRequest struct { func (s *spaceSubscriptions) SubscribeGroups(req SubscribeGroupsRequest) (*pb.RpcObjectGroupsSubscribeResponse, error) { subId := "" - s.m.Lock() - defer s.m.Unlock() - q := database.Query{ Filters: req.Filters, } @@ -678,6 +679,9 @@ func (s *spaceSubscriptions) SubscribeGroups(req SubscribeGroupsRequest) (*pb.Rp subId = bson.NewObjectId().Hex() } + s.m.Lock() + defer s.m.Unlock() + var sub subscription if colObserver != nil { sub = s.newCollectionGroupSub(subId, domain.RelationKey(req.RelationKey), flt, groups, colObserver) From f4bf6d10f1318aced0c6878bd89e1235589ef96c Mon Sep 17 00:00:00 2001 From: Sergey Date: Thu, 29 May 2025 18:30:45 +0200 Subject: [PATCH 164/164] GO-5725: Dataview view: add endRelationKey field --- core/block/simple/dataview/dataview.go | 2 + core/block/simple/dataview/view_changes.go | 3 + docs/proto.md | 2 + pb/events.pb.go | 869 +++++++------- pb/protos/events.proto | 1 + pkg/lib/pb/model/models.pb.go | 1224 ++++++++++---------- pkg/lib/pb/model/protos/models.proto | 1 + 7 files changed, 1109 insertions(+), 993 deletions(-) diff --git a/core/block/simple/dataview/dataview.go b/core/block/simple/dataview/dataview.go index 04631f88a..0716ead80 100644 --- a/core/block/simple/dataview/dataview.go +++ b/core/block/simple/dataview/dataview.go @@ -187,6 +187,7 @@ func (s *Dataview) SetView(viewID string, view model.BlockContentDataviewView) e v.PageLimit = view.PageLimit v.DefaultTemplateId = view.DefaultTemplateId v.DefaultObjectTypeId = view.DefaultObjectTypeId + v.EndRelationKey = view.EndRelationKey return nil } @@ -209,6 +210,7 @@ func (d *Dataview) SetViewFields(viewID string, view *model.BlockContentDataview v.PageLimit = view.PageLimit v.DefaultTemplateId = view.DefaultTemplateId v.DefaultObjectTypeId = view.DefaultObjectTypeId + v.EndRelationKey = view.EndRelationKey return nil } diff --git a/core/block/simple/dataview/view_changes.go b/core/block/simple/dataview/view_changes.go index 02d683331..542a30fad 100644 --- a/core/block/simple/dataview/view_changes.go +++ b/core/block/simple/dataview/view_changes.go @@ -16,6 +16,7 @@ func diffViewFields(a, b *model.BlockContentDataviewView) *pb.EventBlockDataview a.CardSize == b.CardSize && a.CoverFit == b.CoverFit && a.GroupRelationKey == b.GroupRelationKey && + a.EndRelationKey == b.EndRelationKey && a.GroupBackgroundColors == b.GroupBackgroundColors && a.PageLimit == b.PageLimit && a.DefaultTemplateId == b.DefaultTemplateId && @@ -36,6 +37,7 @@ func diffViewFields(a, b *model.BlockContentDataviewView) *pb.EventBlockDataview PageLimit: b.PageLimit, DefaultTemplateId: b.DefaultTemplateId, DefaultObjectTypeId: b.DefaultObjectTypeId, + EndRelationKey: b.EndRelationKey, } } @@ -237,6 +239,7 @@ func (l *Dataview) ApplyViewUpdate(upd *pb.EventBlockDataviewViewUpdate) { view.PageLimit = f.PageLimit view.DefaultTemplateId = f.DefaultTemplateId view.DefaultObjectTypeId = f.DefaultObjectTypeId + view.EndRelationKey = f.EndRelationKey } { diff --git a/docs/proto.md b/docs/proto.md index c7843e5bb..b2ead3bb1 100644 --- a/docs/proto.md +++ b/docs/proto.md @@ -27306,6 +27306,7 @@ sent when the view have been changed or added | cardSize | [model.Block.Content.Dataview.View.Size](#anytype-model-Block-Content-Dataview-View-Size) | | Gallery card size | | coverFit | [bool](#bool) | | Image fits container | | groupRelationKey | [string](#string) | | Group view by this relationKey | +| endRelationKey | [string](#string) | | | | groupBackgroundColors | [bool](#bool) | | Enable backgrounds in groups | | pageLimit | [int32](#int32) | | Limit of objects shown in widget | | defaultTemplateId | [string](#string) | | Id of template object set default for the view | @@ -31009,6 +31010,7 @@ Bookmark is to keep a web-link and to preview a content. | pageLimit | [int32](#int32) | | Limit of objects shown in widget | | defaultTemplateId | [string](#string) | | Default template that is chosen for new object created within the view | | defaultObjectTypeId | [string](#string) | | Default object type that is chosen for new object created within the view | +| endRelationKey | [string](#string) | | Group view by this relationKey | diff --git a/pb/events.pb.go b/pb/events.pb.go index d557329d9..7b424ab6c 100644 --- a/pb/events.pb.go +++ b/pb/events.pb.go @@ -8364,6 +8364,7 @@ type EventBlockDataviewViewUpdateFields struct { CardSize model.BlockContentDataviewViewSize `protobuf:"varint,5,opt,name=cardSize,proto3,enum=anytype.model.BlockContentDataviewViewSize" json:"cardSize,omitempty"` CoverFit bool `protobuf:"varint,6,opt,name=coverFit,proto3" json:"coverFit,omitempty"` GroupRelationKey string `protobuf:"bytes,7,opt,name=groupRelationKey,proto3" json:"groupRelationKey,omitempty"` + EndRelationKey string `protobuf:"bytes,16,opt,name=endRelationKey,proto3" json:"endRelationKey,omitempty"` GroupBackgroundColors bool `protobuf:"varint,8,opt,name=groupBackgroundColors,proto3" json:"groupBackgroundColors,omitempty"` PageLimit int32 `protobuf:"varint,9,opt,name=pageLimit,proto3" json:"pageLimit,omitempty"` DefaultTemplateId string `protobuf:"bytes,10,opt,name=defaultTemplateId,proto3" json:"defaultTemplateId,omitempty"` @@ -8452,6 +8453,13 @@ func (m *EventBlockDataviewViewUpdateFields) GetGroupRelationKey() string { return "" } +func (m *EventBlockDataviewViewUpdateFields) GetEndRelationKey() string { + if m != nil { + return m.EndRelationKey + } + return "" +} + func (m *EventBlockDataviewViewUpdateFields) GetGroupBackgroundColors() bool { if m != nil { return m.GroupBackgroundColors @@ -12781,414 +12789,414 @@ func init() { func init() { proto.RegisterFile("pb/protos/events.proto", fileDescriptor_a966342d378ae5f5) } var fileDescriptor_a966342d378ae5f5 = []byte{ - // 6503 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x59, 0x8c, 0x1d, 0xc7, - 0x75, 0xf6, 0xdd, 0x97, 0x33, 0xc3, 0xe1, 0x65, 0x91, 0x22, 0x5b, 0xad, 0x11, 0x45, 0x8d, 0x48, - 0x8a, 0x96, 0xa8, 0x4b, 0x8a, 0xab, 0x4c, 0x89, 0xcb, 0x6c, 0xd4, 0xbd, 0x5c, 0x86, 0xe3, 0x1a, - 0x92, 0x96, 0x65, 0xe3, 0x87, 0x7b, 0x6e, 0xd7, 0xcc, 0xb4, 0x79, 0xa7, 0xfb, 0xba, 0xbb, 0x67, - 0xc8, 0xf1, 0xf2, 0xff, 0xfe, 0xbd, 0xfc, 0xfe, 0x03, 0x24, 0xc8, 0x82, 0x20, 0x09, 0xf2, 0x12, - 0x20, 0x48, 0x80, 0x3c, 0x04, 0x41, 0x80, 0xbc, 0x24, 0x01, 0x12, 0x04, 0x08, 0x82, 0xc4, 0x59, - 0x00, 0x1b, 0xc8, 0x43, 0x10, 0x20, 0xb1, 0x23, 0xbf, 0xe4, 0x25, 0x0f, 0x4e, 0x80, 0x20, 0x8f, - 0x41, 0x2d, 0x5d, 0x5d, 0xd5, 0xcb, 0xed, 0x3b, 0x96, 0x9c, 0x05, 0xf1, 0xd3, 0xdc, 0xaa, 0x3a, - 0xe7, 0x3b, 0xb5, 0x9c, 0x73, 0xaa, 0xea, 0x54, 0x75, 0x0d, 0x1c, 0x1d, 0xad, 0x9f, 0x1b, 0xf9, - 0x5e, 0xe8, 0x05, 0xe7, 0xc8, 0x2e, 0x71, 0xc3, 0xa0, 0xcb, 0x52, 0xa8, 0x69, 0xb9, 0x7b, 0xe1, - 0xde, 0x88, 0x98, 0x27, 0x47, 0x4f, 0x36, 0xcf, 0x0d, 0x9d, 0xf5, 0x73, 0xa3, 0xf5, 0x73, 0xdb, - 0x9e, 0x4d, 0x86, 0x11, 0x39, 0x4b, 0x08, 0x72, 0x73, 0x76, 0xd3, 0xf3, 0x36, 0x87, 0x84, 0x97, - 0xad, 0xef, 0x6c, 0x9c, 0x0b, 0x42, 0x7f, 0x67, 0x10, 0xf2, 0xd2, 0xb9, 0xbf, 0xfd, 0x56, 0x19, - 0xea, 0xcb, 0x14, 0x1e, 0x5d, 0x80, 0xd6, 0x36, 0x09, 0x02, 0x6b, 0x93, 0x04, 0x46, 0xf9, 0x44, - 0xf5, 0xcc, 0xd4, 0x85, 0xa3, 0x5d, 0x21, 0xaa, 0xcb, 0x28, 0xba, 0xf7, 0x79, 0x31, 0x96, 0x74, - 0x68, 0x16, 0xda, 0x03, 0xcf, 0x0d, 0xc9, 0xb3, 0xb0, 0x6f, 0x1b, 0x95, 0x13, 0xe5, 0x33, 0x6d, - 0x1c, 0x67, 0xa0, 0x4b, 0xd0, 0x76, 0x5c, 0x27, 0x74, 0xac, 0xd0, 0xf3, 0x8d, 0xea, 0x89, 0xb2, - 0x06, 0xc9, 0x2a, 0xd9, 0x9d, 0x1f, 0x0c, 0xbc, 0x1d, 0x37, 0xc4, 0x31, 0x21, 0x32, 0xa0, 0x19, - 0xfa, 0xd6, 0x80, 0xf4, 0x6d, 0xa3, 0xc6, 0x10, 0xa3, 0xa4, 0xf9, 0x07, 0x97, 0xa1, 0x29, 0xea, - 0x80, 0x9e, 0x87, 0x66, 0x30, 0xe2, 0x54, 0x5f, 0x2f, 0x73, 0x32, 0x91, 0x46, 0x37, 0x61, 0xca, - 0xe2, 0xb0, 0x6b, 0x5b, 0xde, 0x53, 0xa3, 0xcc, 0x04, 0xbf, 0x90, 0x68, 0x8b, 0x10, 0xdc, 0xa5, - 0x24, 0xbd, 0x12, 0x56, 0x39, 0x50, 0x1f, 0x66, 0x44, 0x72, 0x89, 0x84, 0x96, 0x33, 0x0c, 0x8c, - 0x6f, 0x71, 0x90, 0xe3, 0x39, 0x20, 0x82, 0xac, 0x57, 0xc2, 0x09, 0x46, 0xf4, 0x29, 0x38, 0x2c, - 0x72, 0x16, 0x3d, 0x77, 0xc3, 0xd9, 0x7c, 0x34, 0xb2, 0xad, 0x90, 0x18, 0x7f, 0xce, 0xf1, 0x4e, - 0xe6, 0xe0, 0x71, 0xda, 0x2e, 0x27, 0xee, 0x95, 0x70, 0x16, 0x06, 0xba, 0x0d, 0x07, 0x44, 0xb6, - 0x00, 0xfd, 0x0b, 0x0e, 0xfa, 0x62, 0x0e, 0xa8, 0x44, 0xd3, 0xd9, 0xd0, 0xa7, 0xe1, 0x88, 0xc8, - 0xb8, 0xe7, 0xb8, 0x4f, 0x16, 0xb7, 0xac, 0xe1, 0x90, 0xb8, 0x9b, 0xc4, 0xf8, 0xcb, 0xf1, 0x75, - 0xd4, 0x88, 0x7b, 0x25, 0x9c, 0x09, 0x82, 0x36, 0xc1, 0xc8, 0xca, 0xef, 0x39, 0x36, 0x31, 0xfe, - 0x8a, 0x0b, 0x38, 0x33, 0x91, 0x00, 0xc7, 0xa6, 0x42, 0x72, 0xc1, 0xd0, 0x03, 0xe8, 0x78, 0xeb, - 0x9f, 0x23, 0x83, 0xa8, 0xe7, 0xd7, 0x48, 0x68, 0x74, 0x18, 0xfe, 0xcb, 0x09, 0xfc, 0x07, 0x8c, - 0x2c, 0x1a, 0xb3, 0xee, 0x1a, 0x09, 0x7b, 0x25, 0x9c, 0x62, 0x46, 0x8f, 0x00, 0x69, 0x79, 0xf3, - 0xdb, 0xc4, 0xb5, 0x8d, 0x0b, 0x0c, 0xf2, 0x95, 0xf1, 0x90, 0x8c, 0xb4, 0x57, 0xc2, 0x19, 0x00, - 0x29, 0xd8, 0x47, 0x6e, 0x40, 0x42, 0xe3, 0xe2, 0x24, 0xb0, 0x8c, 0x34, 0x05, 0xcb, 0x72, 0xe9, - 0x20, 0xf2, 0x5c, 0x4c, 0x86, 0x56, 0xe8, 0x78, 0xae, 0xa8, 0xef, 0x25, 0x06, 0x7c, 0x2a, 0x1b, - 0x58, 0xd2, 0xca, 0x1a, 0x67, 0x82, 0xa0, 0xff, 0x05, 0xcf, 0x25, 0xf2, 0x31, 0xd9, 0xf6, 0x76, - 0x89, 0x71, 0x99, 0xa1, 0x9f, 0x2e, 0x42, 0xe7, 0xd4, 0xbd, 0x12, 0xce, 0x86, 0x41, 0x0b, 0x30, - 0x1d, 0x15, 0x30, 0xd8, 0x2b, 0x0c, 0x76, 0x36, 0x0f, 0x56, 0x80, 0x69, 0x3c, 0xd4, 0xe8, 0x79, - 0x7a, 0x71, 0xe8, 0x05, 0xc4, 0x98, 0xcf, 0x34, 0x7a, 0x01, 0xc1, 0x48, 0xa8, 0xd1, 0x2b, 0x1c, - 0x6a, 0x23, 0x83, 0xd0, 0x77, 0x06, 0xac, 0x82, 0x54, 0x8b, 0xae, 0x8e, 0x6f, 0x64, 0x4c, 0x2c, - 0x54, 0x29, 0x1b, 0x06, 0x61, 0x38, 0x18, 0xec, 0xac, 0x07, 0x03, 0xdf, 0x19, 0xd1, 0xbc, 0x79, - 0xdb, 0x36, 0xde, 0x19, 0x87, 0xbc, 0xa6, 0x10, 0x77, 0xe7, 0x6d, 0x3a, 0x3a, 0x49, 0x00, 0xf4, - 0x69, 0x40, 0x6a, 0x96, 0xe8, 0xbe, 0xeb, 0x0c, 0xf6, 0x63, 0x13, 0xc0, 0xca, 0xbe, 0xcc, 0x80, - 0x41, 0x16, 0x1c, 0x51, 0x73, 0x57, 0xbd, 0xc0, 0xa1, 0x7f, 0x8d, 0x1b, 0x0c, 0xfe, 0xf5, 0x09, - 0xe0, 0x23, 0x16, 0xaa, 0x58, 0x59, 0x50, 0x49, 0x11, 0x8b, 0xd4, 0xb4, 0x89, 0x1f, 0x18, 0x37, - 0x27, 0x16, 0x11, 0xb1, 0x24, 0x45, 0x44, 0xf9, 0xc9, 0x2e, 0x7a, 0xd7, 0xf7, 0x76, 0x46, 0x81, - 0x71, 0x6b, 0xe2, 0x2e, 0xe2, 0x0c, 0xc9, 0x2e, 0xe2, 0xb9, 0xe8, 0x0a, 0xb4, 0xd6, 0x87, 0xde, - 0xe0, 0x09, 0x1d, 0xcc, 0x0a, 0x83, 0x34, 0x12, 0x90, 0x0b, 0xb4, 0x58, 0x0c, 0x9f, 0xa4, 0xa5, - 0xca, 0xca, 0x7e, 0x2f, 0x91, 0x21, 0x09, 0x89, 0x98, 0x1a, 0x5f, 0xc8, 0x64, 0xe5, 0x24, 0x54, - 0x59, 0x15, 0x0e, 0xb4, 0x04, 0x53, 0x1b, 0xce, 0x90, 0x04, 0x8f, 0x46, 0x43, 0xcf, 0xe2, 0xf3, - 0xe4, 0xd4, 0x85, 0x13, 0x99, 0x00, 0xb7, 0x63, 0x3a, 0x8a, 0xa2, 0xb0, 0xa1, 0x1b, 0xd0, 0xde, - 0xb6, 0xfc, 0x27, 0x41, 0xdf, 0xdd, 0xf0, 0x8c, 0x7a, 0xe6, 0x0c, 0xc7, 0x31, 0xee, 0x47, 0x54, - 0xbd, 0x12, 0x8e, 0x59, 0xe8, 0x3c, 0xc9, 0x2a, 0xb5, 0x46, 0xc2, 0xdb, 0x0e, 0x19, 0xda, 0x81, - 0xd1, 0x60, 0x20, 0x2f, 0x65, 0x82, 0xac, 0x91, 0xb0, 0xcb, 0xc9, 0xe8, 0x3c, 0xa9, 0x33, 0xa2, - 0xf7, 0xe0, 0x70, 0x94, 0xb3, 0xb8, 0xe5, 0x0c, 0x6d, 0x9f, 0xb8, 0x7d, 0x3b, 0x30, 0x9a, 0x99, - 0x53, 0x50, 0x8c, 0xa7, 0xd0, 0xd2, 0x69, 0x32, 0x03, 0x82, 0x7a, 0xc6, 0x28, 0x5b, 0x35, 0x49, - 0xa3, 0x95, 0xe9, 0x19, 0x63, 0x68, 0x95, 0x98, 0x6a, 0x57, 0x16, 0x08, 0xb2, 0xe1, 0x58, 0x94, - 0xbf, 0x60, 0x0d, 0x9e, 0x6c, 0xfa, 0xde, 0x8e, 0x6b, 0x2f, 0x7a, 0x43, 0xcf, 0x37, 0xda, 0x99, - 0x93, 0x5b, 0x8c, 0x9f, 0xa0, 0xef, 0x95, 0x70, 0x1e, 0x14, 0x5a, 0x84, 0xe9, 0xa8, 0xe8, 0x21, - 0x79, 0x16, 0x1a, 0x90, 0x39, 0xcf, 0xc7, 0xd0, 0x94, 0x88, 0x3a, 0x48, 0x95, 0x49, 0x05, 0xa1, - 0x2a, 0x61, 0x4c, 0x15, 0x80, 0x50, 0x22, 0x15, 0x84, 0xa6, 0x55, 0x10, 0x3a, 0x05, 0x1b, 0x07, - 0x0a, 0x40, 0x28, 0x91, 0x0a, 0x42, 0xd3, 0x74, 0xaa, 0x96, 0x2d, 0xf5, 0xbc, 0x27, 0x54, 0x9f, - 0x8c, 0x99, 0xcc, 0xa9, 0x5a, 0xe9, 0x2d, 0x41, 0x48, 0xa7, 0xea, 0x24, 0x33, 0x5d, 0x09, 0x45, - 0x79, 0xf3, 0x43, 0x67, 0xd3, 0x35, 0x0e, 0x8e, 0xd1, 0x65, 0x8a, 0xc6, 0xa8, 0xe8, 0x4a, 0x48, - 0x63, 0x43, 0xb7, 0x84, 0x59, 0xae, 0x91, 0x70, 0xc9, 0xd9, 0x35, 0x0e, 0x65, 0x4e, 0x43, 0x31, - 0xca, 0x92, 0xb3, 0x2b, 0xed, 0x92, 0xb3, 0xa8, 0x4d, 0x8b, 0x26, 0x39, 0xe3, 0xb9, 0x82, 0xa6, - 0x45, 0x84, 0x6a, 0xd3, 0xa2, 0x3c, 0xb5, 0x69, 0xf7, 0xac, 0x90, 0x3c, 0x33, 0x9e, 0x2f, 0x68, - 0x1a, 0xa3, 0x52, 0x9b, 0xc6, 0x32, 0xe8, 0xec, 0x16, 0x65, 0x3c, 0x26, 0x7e, 0xe8, 0x0c, 0xac, - 0x21, 0xef, 0xaa, 0x93, 0x99, 0x73, 0x50, 0x8c, 0xa7, 0x51, 0xd3, 0xd9, 0x2d, 0x13, 0x46, 0x6d, - 0xf8, 0x43, 0x6b, 0x7d, 0x48, 0xb0, 0xf7, 0xd4, 0x38, 0x55, 0xd0, 0xf0, 0x88, 0x50, 0x6d, 0x78, - 0x94, 0xa7, 0xfa, 0x96, 0x4f, 0x3a, 0xf6, 0x26, 0x09, 0x8d, 0x33, 0x05, 0xbe, 0x85, 0x93, 0xa9, - 0xbe, 0x85, 0xe7, 0x48, 0x0f, 0xb0, 0x64, 0x85, 0xd6, 0xae, 0x43, 0x9e, 0x3e, 0x76, 0xc8, 0x53, - 0x3a, 0xb1, 0x1f, 0x1e, 0xe3, 0x01, 0x22, 0xda, 0xae, 0x20, 0x96, 0x1e, 0x20, 0x01, 0x22, 0x3d, - 0x80, 0x9a, 0x2f, 0xdc, 0xfa, 0x91, 0x31, 0x1e, 0x40, 0xc3, 0x97, 0x3e, 0x3e, 0x0f, 0x0a, 0x59, - 0x70, 0x34, 0x55, 0xf4, 0xc0, 0xb7, 0x89, 0x6f, 0xbc, 0xc8, 0x84, 0xbc, 0x5a, 0x2c, 0x84, 0x91, - 0xf7, 0x4a, 0x38, 0x07, 0x28, 0x25, 0x62, 0xcd, 0xdb, 0xf1, 0x07, 0x84, 0xf6, 0xd3, 0x2b, 0x93, - 0x88, 0x90, 0xe4, 0x29, 0x11, 0xb2, 0x04, 0xed, 0xc2, 0x8b, 0xb2, 0x84, 0x0a, 0x66, 0xb3, 0x28, - 0x93, 0x2e, 0x76, 0x30, 0xa7, 0x99, 0xa4, 0xee, 0x78, 0x49, 0x49, 0xae, 0x5e, 0x09, 0x8f, 0x87, - 0x45, 0x7b, 0x70, 0x5c, 0x23, 0xe0, 0xf3, 0xbc, 0x2a, 0xf8, 0x55, 0x26, 0xf8, 0xdc, 0x78, 0xc1, - 0x29, 0xb6, 0x5e, 0x09, 0x17, 0x00, 0xa3, 0x11, 0xbc, 0xa0, 0x75, 0x46, 0x64, 0xd8, 0x42, 0x45, - 0xbe, 0xc4, 0xe4, 0x9e, 0x1d, 0x2f, 0x57, 0xe7, 0xe9, 0x95, 0xf0, 0x38, 0x48, 0xba, 0xe3, 0xca, - 0x2c, 0xa6, 0x23, 0xf9, 0xc5, 0xcc, 0x65, 0x4f, 0x8e, 0x38, 0x3e, 0x96, 0xb9, 0x60, 0x99, 0x9a, - 0x2f, 0xba, 0xf3, 0xcb, 0x93, 0x6a, 0xbe, 0xec, 0xc7, 0x3c, 0x28, 0x6d, 0xec, 0x68, 0xd1, 0x43, - 0xcb, 0xdf, 0x24, 0x21, 0xef, 0xe8, 0xbe, 0x4d, 0x1b, 0xf5, 0xbf, 0x27, 0x19, 0xbb, 0x14, 0x9b, - 0x36, 0x76, 0x99, 0xc0, 0x28, 0x80, 0x59, 0x8d, 0xa2, 0x1f, 0x2c, 0x7a, 0xc3, 0x21, 0x19, 0x44, - 0xbd, 0xf9, 0x7f, 0x98, 0xe0, 0x37, 0xc6, 0x0b, 0x4e, 0x30, 0xf5, 0x4a, 0x78, 0x2c, 0x68, 0xaa, - 0xbd, 0x0f, 0x86, 0x76, 0x42, 0x67, 0x8c, 0x89, 0x74, 0x35, 0xc9, 0x96, 0x6a, 0x6f, 0x8a, 0x22, - 0xa5, 0xab, 0x0a, 0x05, 0x6d, 0xee, 0xb1, 0x49, 0x74, 0x55, 0xe7, 0x49, 0xe9, 0xaa, 0x5e, 0x4c, - 0x67, 0xb7, 0x9d, 0x80, 0xf8, 0x0c, 0xe3, 0x8e, 0xe7, 0xb8, 0xc6, 0x4b, 0x99, 0xb3, 0xdb, 0xa3, - 0x80, 0xf8, 0x42, 0x10, 0xa5, 0xa2, 0xb3, 0x9b, 0xc6, 0xa6, 0xe1, 0xdc, 0x23, 0x1b, 0xa1, 0x71, - 0xa2, 0x08, 0x87, 0x52, 0x69, 0x38, 0x34, 0x83, 0xce, 0x14, 0x32, 0x63, 0x8d, 0xd0, 0x51, 0xc1, - 0x96, 0xbb, 0x49, 0x8c, 0x97, 0x33, 0x67, 0x0a, 0x05, 0x4e, 0x21, 0xa6, 0x33, 0x45, 0x16, 0x08, - 0xdd, 0xf9, 0xcb, 0x7c, 0xba, 0x22, 0xe3, 0xd0, 0x73, 0x99, 0x3b, 0x7f, 0x05, 0x5a, 0x92, 0xd2, - 0x3d, 0x48, 0x1a, 0x00, 0x7d, 0x0c, 0x6a, 0x23, 0xc7, 0xdd, 0x34, 0x6c, 0x06, 0x74, 0x38, 0x01, - 0xb4, 0xea, 0xb8, 0x9b, 0xbd, 0x12, 0x66, 0x24, 0xe8, 0x1d, 0x80, 0x91, 0xef, 0x0d, 0x48, 0x10, - 0xac, 0x90, 0xa7, 0x06, 0x61, 0x0c, 0x66, 0x92, 0x81, 0x13, 0x74, 0x57, 0x08, 0x9d, 0x97, 0x15, - 0x7a, 0xb4, 0x0c, 0x07, 0x44, 0x4a, 0x58, 0xf9, 0x46, 0xe6, 0xe2, 0x2f, 0x02, 0x88, 0xc3, 0x4d, - 0x1a, 0x17, 0xdd, 0xfb, 0x88, 0x8c, 0x25, 0xcf, 0x25, 0xc6, 0x66, 0xe6, 0xde, 0x27, 0x02, 0xa1, - 0x24, 0x74, 0x8d, 0xa5, 0x70, 0xa0, 0x05, 0x98, 0x0e, 0xb7, 0x7c, 0x62, 0xd9, 0x6b, 0xa1, 0x15, - 0xee, 0x04, 0x86, 0x9b, 0xb9, 0x4c, 0xe3, 0x85, 0xdd, 0x87, 0x8c, 0x92, 0x2e, 0x41, 0x55, 0x1e, - 0xb4, 0x02, 0x1d, 0xba, 0x11, 0xba, 0xe7, 0x6c, 0x3b, 0x21, 0x26, 0xd6, 0x60, 0x8b, 0xd8, 0x86, - 0x97, 0xb9, 0x89, 0xa2, 0xcb, 0xde, 0xae, 0x4a, 0x47, 0x57, 0x2b, 0x49, 0x5e, 0xd4, 0x83, 0x19, - 0x9a, 0xb7, 0x36, 0xb2, 0x06, 0xe4, 0x51, 0x60, 0x6d, 0x12, 0x63, 0x94, 0xa9, 0x81, 0x0c, 0x2d, - 0xa6, 0xa2, 0x8b, 0x15, 0x9d, 0x2f, 0x42, 0xba, 0xe7, 0x0d, 0xac, 0x21, 0x47, 0xfa, 0x7c, 0x3e, - 0x52, 0x4c, 0x15, 0x21, 0xc5, 0x39, 0x5a, 0x1b, 0x79, 0xdf, 0xdb, 0xc6, 0x6e, 0x41, 0x1b, 0x05, - 0x9d, 0xd6, 0x46, 0x91, 0x47, 0xf1, 0x5c, 0x2f, 0x74, 0x36, 0x9c, 0x81, 0xb0, 0x5f, 0xd7, 0x36, - 0xfc, 0x4c, 0xbc, 0x15, 0x85, 0xac, 0xbb, 0xc6, 0x23, 0x4b, 0x29, 0x5e, 0xf4, 0x10, 0x90, 0x9a, - 0x27, 0x94, 0x2a, 0x60, 0x88, 0x73, 0xe3, 0x10, 0xa5, 0x66, 0x65, 0xf0, 0xd3, 0x5a, 0x8e, 0xac, - 0x3d, 0xba, 0xbd, 0x5d, 0xf0, 0x3d, 0xcb, 0x1e, 0x58, 0x41, 0x68, 0x84, 0x99, 0xb5, 0x5c, 0xe5, - 0x64, 0x5d, 0x49, 0x47, 0x6b, 0x99, 0xe4, 0xa5, 0x78, 0xdb, 0x64, 0x7b, 0x9d, 0xf8, 0xc1, 0x96, - 0x33, 0x12, 0x75, 0xdc, 0xc9, 0xc4, 0xbb, 0x2f, 0xc9, 0xe2, 0x1a, 0xa6, 0x78, 0xe9, 0x42, 0x9c, - 0xc5, 0xa9, 0xd7, 0xf6, 0xdc, 0x01, 0x57, 0x46, 0x01, 0xfa, 0x34, 0x73, 0x21, 0xce, 0x34, 0xa3, - 0x1b, 0x13, 0xc7, 0xd0, 0xd9, 0x30, 0xe8, 0x7d, 0x38, 0xc2, 0x0a, 0xe6, 0x77, 0x42, 0x8f, 0xaf, - 0x7f, 0xe7, 0x6d, 0x9b, 0xd8, 0xc6, 0x17, 0x32, 0x77, 0xd2, 0x1c, 0x3e, 0x41, 0xcb, 0x62, 0x29, - 0x19, 0x18, 0xe8, 0x2e, 0x1c, 0x1c, 0x5d, 0x18, 0x69, 0xb5, 0x7e, 0x96, 0xb9, 0x28, 0x5f, 0xbd, - 0xb0, 0x9a, 0xac, 0x6e, 0x92, 0x93, 0x9a, 0xb1, 0xb3, 0x3d, 0xf2, 0xfc, 0xf0, 0xb6, 0xe3, 0x3a, - 0xc1, 0x96, 0xb1, 0x97, 0x69, 0xc6, 0x7d, 0x46, 0xd2, 0xe5, 0x34, 0xd4, 0x8c, 0x55, 0x1e, 0x74, - 0x09, 0x9a, 0x83, 0x2d, 0x8b, 0xd6, 0xce, 0xf8, 0x0a, 0x0f, 0x26, 0x1f, 0x4b, 0xf0, 0x2f, 0x6e, - 0x59, 0xa1, 0x08, 0xbf, 0x44, 0xa4, 0xe8, 0x3a, 0x00, 0xfd, 0x29, 0x5a, 0xf0, 0x7f, 0xcb, 0x99, - 0x7e, 0x90, 0x31, 0xca, 0xda, 0x2b, 0x0c, 0xe8, 0x3d, 0x38, 0x1c, 0xa7, 0xa8, 0x03, 0xe0, 0xf1, - 0x84, 0xaf, 0x96, 0x33, 0x3d, 0xb9, 0x82, 0x23, 0x69, 0x7b, 0x25, 0x9c, 0x05, 0x41, 0x27, 0xe0, - 0x38, 0x3b, 0x3a, 0x6c, 0x89, 0x1d, 0xdd, 0xff, 0x2b, 0x67, 0x86, 0xc5, 0x14, 0x09, 0x29, 0x1e, - 0x3a, 0x01, 0x8f, 0x81, 0x4c, 0x4a, 0x74, 0x79, 0xf8, 0x4f, 0x4a, 0xfc, 0xe6, 0x04, 0x12, 0x13, - 0x3c, 0x49, 0x89, 0x89, 0xe2, 0xa8, 0xf3, 0xc5, 0x5a, 0xe6, 0x6b, 0x63, 0x3a, 0x5f, 0xae, 0x5b, - 0x14, 0x06, 0x74, 0x0f, 0x0e, 0xd2, 0x14, 0x05, 0x23, 0x62, 0x00, 0xbf, 0x51, 0xce, 0xd4, 0x41, - 0xa5, 0x92, 0x8c, 0x9a, 0xea, 0x60, 0x82, 0x95, 0x2e, 0x61, 0x47, 0x3b, 0xc1, 0xd6, 0xb2, 0x3b, - 0xf0, 0xf7, 0x58, 0x5c, 0xef, 0x2e, 0xd9, 0x13, 0xa8, 0xff, 0xbf, 0x9c, 0xb9, 0xeb, 0x59, 0x4d, - 0x92, 0xc7, 0x3a, 0x92, 0x07, 0xb5, 0xd0, 0x84, 0xfa, 0xae, 0x35, 0xdc, 0x21, 0xe6, 0xcf, 0x36, - 0xa0, 0x46, 0xab, 0x65, 0xfe, 0x7d, 0x19, 0xaa, 0x54, 0x13, 0x67, 0xa0, 0xe2, 0xd8, 0x06, 0x3f, - 0xbe, 0xaa, 0x38, 0x36, 0x32, 0xa0, 0xe9, 0xd1, 0xcd, 0x83, 0x3c, 0x4c, 0x8b, 0x92, 0x68, 0x0e, - 0xa6, 0xad, 0x8d, 0x90, 0xf8, 0x0f, 0x44, 0x71, 0x83, 0x15, 0x6b, 0x79, 0xd4, 0x1a, 0xc4, 0xc1, - 0x9c, 0x88, 0x28, 0x9a, 0x89, 0xc3, 0x36, 0x2a, 0x3b, 0xd2, 0x81, 0x88, 0x14, 0x1d, 0x85, 0x46, - 0xb0, 0xb3, 0xde, 0xb7, 0x03, 0xa3, 0x76, 0xa2, 0x7a, 0xa6, 0x8d, 0x45, 0x0a, 0xbd, 0x0d, 0xd3, - 0x36, 0x19, 0x11, 0xd7, 0x26, 0xee, 0xc0, 0x21, 0x81, 0x51, 0x67, 0x47, 0x82, 0xc7, 0xba, 0xfc, - 0x38, 0xb1, 0x1b, 0x1d, 0x27, 0x76, 0xd7, 0xd8, 0x71, 0x22, 0xd6, 0x88, 0xcd, 0xf3, 0xd0, 0x10, - 0x03, 0x96, 0x6c, 0x62, 0x2c, 0xae, 0xa2, 0x8a, 0x33, 0x37, 0xa0, 0x21, 0x06, 0x25, 0xc9, 0xa1, - 0x34, 0xab, 0xf2, 0xc3, 0x34, 0xab, 0xaa, 0xc9, 0xf9, 0x32, 0x1c, 0x4c, 0x9a, 0x5d, 0x52, 0xe0, - 0x02, 0xb4, 0x7d, 0x69, 0xd6, 0x95, 0x84, 0xdf, 0x4c, 0x89, 0xec, 0x4a, 0x20, 0x1c, 0xb3, 0xe5, - 0x8a, 0xff, 0x34, 0x1c, 0xcb, 0xb3, 0xc5, 0x0e, 0x54, 0x1d, 0x9b, 0x1f, 0xbd, 0xb6, 0x31, 0xfd, - 0x49, 0x41, 0x9c, 0x80, 0x52, 0xb0, 0x5a, 0xb4, 0xb0, 0x48, 0x4d, 0x02, 0x9e, 0x34, 0xbb, 0x0f, - 0x0f, 0xfe, 0x08, 0xa6, 0x14, 0x6b, 0x42, 0x5d, 0xa8, 0x07, 0xf4, 0x87, 0x38, 0x5e, 0x35, 0x32, - 0x3a, 0x88, 0x11, 0x62, 0x4e, 0x96, 0x3b, 0xee, 0xbf, 0xdf, 0x80, 0xa6, 0x38, 0xf1, 0x33, 0x57, - 0xa0, 0xc6, 0xce, 0x5f, 0x8f, 0x40, 0xdd, 0x71, 0x6d, 0xf2, 0x8c, 0x61, 0xd7, 0x31, 0x4f, 0xa0, - 0xf3, 0xd0, 0x14, 0xa7, 0x7f, 0x62, 0x50, 0xf2, 0xce, 0x92, 0x23, 0x32, 0xf3, 0x7d, 0x68, 0x46, - 0xe7, 0xb0, 0xb3, 0xd0, 0x1e, 0xf9, 0x1e, 0x5d, 0xd3, 0xf4, 0xa3, 0xa1, 0x8e, 0x33, 0xd0, 0x9b, - 0xd0, 0xb4, 0xc5, 0x49, 0x6f, 0x45, 0x4c, 0x23, 0x39, 0x6a, 0x1e, 0xd1, 0x99, 0x5f, 0x29, 0x43, - 0x83, 0x1f, 0xc7, 0x9a, 0xbb, 0x52, 0x75, 0x2f, 0x43, 0x63, 0xc0, 0xf2, 0x8c, 0xe4, 0x51, 0xac, - 0x56, 0x43, 0x71, 0xbe, 0x8b, 0x05, 0x31, 0x65, 0x0b, 0xb8, 0xc3, 0xad, 0x8c, 0x65, 0xe3, 0x63, - 0x89, 0x05, 0xf1, 0x7f, 0x9a, 0xdc, 0xbf, 0xae, 0xc0, 0x01, 0xfd, 0x94, 0x77, 0x16, 0xda, 0x03, - 0x79, 0x6e, 0x2c, 0x7a, 0x57, 0x66, 0xa0, 0x07, 0x00, 0x83, 0xa1, 0x43, 0xdc, 0x90, 0x9d, 0x33, - 0x54, 0x32, 0xb7, 0xaf, 0x99, 0x87, 0xbe, 0xdd, 0x45, 0xc9, 0x86, 0x15, 0x08, 0x74, 0x13, 0xea, - 0xc1, 0xc0, 0x1b, 0x71, 0x37, 0x37, 0xa3, 0xc4, 0x33, 0xf4, 0x6a, 0xcf, 0xef, 0x84, 0x5b, 0x7c, - 0x89, 0x3c, 0x3f, 0x72, 0xd6, 0x28, 0x03, 0xe6, 0x7c, 0xe6, 0xcf, 0x95, 0x01, 0x62, 0x6c, 0x74, - 0x42, 0x6e, 0x49, 0x56, 0xac, 0xed, 0xa8, 0x01, 0x6a, 0x96, 0x42, 0xb1, 0x6a, 0x85, 0x5b, 0xc2, - 0x39, 0xab, 0x59, 0x08, 0x41, 0xcd, 0xa5, 0xcc, 0xfc, 0xca, 0x02, 0xfb, 0x8d, 0xce, 0xc2, 0xa1, - 0xc0, 0xd9, 0x74, 0xad, 0x70, 0xc7, 0x27, 0x8f, 0x89, 0xef, 0x6c, 0x38, 0xc4, 0x66, 0x75, 0x6e, - 0xe1, 0x74, 0x81, 0xf9, 0x26, 0x1c, 0x4a, 0x1f, 0x6b, 0x8f, 0xed, 0x59, 0xf3, 0x27, 0xda, 0xd0, - 0xe0, 0x11, 0x0b, 0xf3, 0x5f, 0x2b, 0x52, 0xd9, 0xcd, 0x3f, 0x2e, 0x43, 0x9d, 0x9f, 0xdc, 0x26, - 0x5d, 0xdb, 0x6d, 0x55, 0xd1, 0xab, 0x19, 0xdb, 0xf9, 0xac, 0x93, 0xec, 0xee, 0x5d, 0xb2, 0xf7, - 0x98, 0x4e, 0x60, 0x52, 0xfb, 0x73, 0x9d, 0xc4, 0x1d, 0x68, 0x45, 0xc4, 0xd4, 0xe5, 0x3c, 0x21, - 0x7b, 0x42, 0x38, 0xfd, 0x89, 0xce, 0x8a, 0x89, 0x50, 0xda, 0x6f, 0xd2, 0xc8, 0xb8, 0x14, 0x31, - 0x5b, 0x7e, 0x16, 0xaa, 0x6b, 0x24, 0x4c, 0x35, 0x61, 0xff, 0xb6, 0x9a, 0x5b, 0xdb, 0x45, 0xa8, - 0xf3, 0xd3, 0xf3, 0xa4, 0x0c, 0x04, 0xb5, 0x27, 0x64, 0x2f, 0x72, 0x55, 0xec, 0x77, 0x2e, 0xc8, - 0x1f, 0x55, 0x61, 0x5a, 0x3d, 0x31, 0x34, 0x97, 0x73, 0xe7, 0x76, 0x36, 0x5b, 0xc7, 0x73, 0xbb, - 0x48, 0x52, 0x77, 0xc7, 0xb0, 0x98, 0x6a, 0xb4, 0x31, 0x4f, 0x98, 0x5d, 0x68, 0x88, 0x83, 0xd8, - 0x24, 0x92, 0xa4, 0xaf, 0xa8, 0xf4, 0x77, 0xa0, 0x25, 0xcf, 0x55, 0x3f, 0xac, 0x6c, 0x1f, 0x5a, - 0xf2, 0x00, 0xf5, 0x08, 0xd4, 0x43, 0x2f, 0xb4, 0x86, 0x0c, 0xae, 0x8a, 0x79, 0x82, 0xea, 0xa5, - 0x4b, 0x9e, 0x85, 0x8b, 0xd2, 0x1d, 0x57, 0x71, 0x9c, 0xc1, 0xbd, 0x2d, 0xd9, 0xe5, 0xa5, 0x55, - 0x5e, 0x2a, 0x33, 0x62, 0x99, 0x35, 0x55, 0xe6, 0x1e, 0x34, 0xc4, 0xa9, 0xaa, 0x2c, 0x2f, 0x2b, - 0xe5, 0x68, 0x1e, 0xea, 0x9b, 0xb4, 0x5c, 0x8c, 0xfa, 0xeb, 0x09, 0xa3, 0xe7, 0xc1, 0x92, 0x45, - 0xcf, 0x0d, 0xa9, 0x1a, 0xeb, 0xc1, 0x62, 0xcc, 0x39, 0xe9, 0x10, 0xfa, 0xfc, 0x88, 0x9c, 0x1b, - 0xa1, 0x48, 0x99, 0xbf, 0x5e, 0x86, 0xb6, 0xbc, 0x93, 0x60, 0xbe, 0x9f, 0x67, 0x3c, 0xf3, 0x70, - 0xc0, 0x17, 0x54, 0xd4, 0x50, 0x23, 0x13, 0x7a, 0x21, 0x51, 0x13, 0xac, 0xd0, 0x60, 0x9d, 0xc3, - 0x7c, 0x27, 0x77, 0x50, 0xe7, 0x60, 0x3a, 0x22, 0xbd, 0x1b, 0xab, 0x9e, 0x96, 0x67, 0x9a, 0x92, - 0x3b, 0x35, 0x9d, 0x9b, 0x1b, 0x30, 0xad, 0x9e, 0x4c, 0x9a, 0x8f, 0xb3, 0xad, 0xe7, 0x26, 0x15, - 0xa3, 0x9c, 0x82, 0x56, 0x12, 0xe1, 0x97, 0xa8, 0x09, 0x31, 0x09, 0xd6, 0x18, 0xcc, 0x63, 0x50, - 0xe7, 0xf7, 0x25, 0x12, 0xc8, 0xe6, 0x2f, 0x0f, 0xa0, 0xce, 0x06, 0xc1, 0xbc, 0xc8, 0x0d, 0xe0, - 0x2c, 0x34, 0x58, 0xec, 0x2f, 0xba, 0x4d, 0x76, 0x24, 0x6b, 0xc4, 0xb0, 0xa0, 0x31, 0x17, 0x61, - 0x4a, 0x39, 0xa9, 0xa6, 0x1a, 0xcb, 0x0a, 0xa4, 0x16, 0x44, 0x49, 0x64, 0x42, 0x8b, 0xce, 0xda, - 0xc2, 0x0f, 0xd3, 0xf6, 0xcb, 0xb4, 0x79, 0x52, 0x2e, 0x3b, 0x4d, 0x71, 0x32, 0xdf, 0x97, 0xbd, - 0x24, 0xd3, 0xe6, 0x67, 0xa0, 0x2d, 0x0f, 0xb4, 0xd1, 0x03, 0x98, 0x16, 0x07, 0xda, 0x3c, 0x1e, - 0x47, 0x89, 0x67, 0x0a, 0xb4, 0xeb, 0x21, 0x79, 0x16, 0xb2, 0x33, 0xf1, 0xee, 0xc3, 0xbd, 0x11, - 0xc1, 0x1a, 0x80, 0xf9, 0x8d, 0x33, 0xac, 0xe7, 0xcd, 0x11, 0xb4, 0xe4, 0x29, 0x5e, 0x72, 0x14, - 0xae, 0x72, 0xd7, 0x58, 0x29, 0x3c, 0x82, 0xe6, 0xfc, 0xd4, 0x01, 0x33, 0x0f, 0x6a, 0xbe, 0x00, - 0xd5, 0xbb, 0x64, 0x8f, 0x5a, 0x08, 0x77, 0xa4, 0xc2, 0x42, 0xb8, 0xc3, 0xec, 0x43, 0x43, 0x9c, - 0xa6, 0x27, 0xe5, 0x9d, 0x83, 0xc6, 0x06, 0x3f, 0xa0, 0x2f, 0x70, 0x99, 0x82, 0xcc, 0xbc, 0x09, - 0x53, 0xea, 0x19, 0x7a, 0x12, 0xef, 0x04, 0x4c, 0x0d, 0x94, 0x53, 0x7a, 0x3e, 0x0c, 0x6a, 0x96, - 0x49, 0x74, 0x75, 0x4c, 0x21, 0x2c, 0x67, 0xea, 0xe1, 0xcb, 0x99, 0xdd, 0x3e, 0x46, 0x1b, 0xef, - 0xc2, 0xc1, 0xe4, 0x61, 0x79, 0x52, 0xd2, 0x19, 0x38, 0xb8, 0x9e, 0x38, 0x9a, 0xe7, 0x3e, 0x30, - 0x99, 0x6d, 0xf6, 0xa1, 0xce, 0x0f, 0x33, 0x93, 0x10, 0xe7, 0xa1, 0x6e, 0xb1, 0xc3, 0xd2, 0x0a, - 0x5b, 0x6f, 0x98, 0x99, 0xb5, 0x64, 0xac, 0x98, 0x13, 0x9a, 0x0e, 0x1c, 0xd0, 0xcf, 0x47, 0x93, - 0x90, 0x3d, 0x38, 0xb0, 0xab, 0x9d, 0xc3, 0x72, 0xe8, 0xb9, 0x4c, 0x68, 0x0d, 0x0a, 0xeb, 0x8c, - 0xe6, 0x57, 0x1b, 0x50, 0x63, 0x07, 0xfc, 0x49, 0x11, 0x57, 0xa0, 0x16, 0x92, 0x67, 0xd1, 0x62, - 0x79, 0x6e, 0xec, 0x6d, 0x01, 0x1e, 0x65, 0x66, 0xf4, 0xe8, 0xe3, 0x74, 0x65, 0xbf, 0x37, 0x8c, - 0x36, 0x91, 0xaf, 0x8c, 0x67, 0x5c, 0xa3, 0xa4, 0x98, 0x73, 0x50, 0x56, 0x66, 0x0b, 0xe2, 0x42, - 0x4a, 0x01, 0x2b, 0x33, 0x42, 0xcc, 0x39, 0xd0, 0x4d, 0x68, 0x0e, 0xb6, 0xc8, 0xe0, 0x09, 0xb1, - 0xc5, 0x4d, 0x94, 0x53, 0xe3, 0x99, 0x17, 0x39, 0x31, 0x8e, 0xb8, 0xa8, 0xec, 0x01, 0x1b, 0xdd, - 0xc6, 0x24, 0xb2, 0xd9, 0x88, 0x63, 0xce, 0x81, 0x96, 0xa1, 0xed, 0x0c, 0x3c, 0x77, 0x79, 0xdb, - 0xfb, 0x9c, 0x23, 0xae, 0x9c, 0xbc, 0x3a, 0x9e, 0xbd, 0x1f, 0x91, 0xe3, 0x98, 0x33, 0x82, 0xe9, - 0x6f, 0xd3, 0xad, 0x6a, 0x6b, 0x52, 0x18, 0x46, 0x8e, 0x63, 0x4e, 0x73, 0x56, 0x8c, 0x67, 0xb6, - 0x91, 0xdf, 0x86, 0x3a, 0xeb, 0x72, 0x74, 0x5d, 0x2d, 0x9e, 0x51, 0x24, 0xe5, 0x7a, 0x2c, 0x31, - 0x54, 0x12, 0x87, 0xf5, 0xbf, 0x8e, 0x33, 0x35, 0x09, 0x8e, 0x18, 0x37, 0x8e, 0xf3, 0x12, 0x34, - 0xc5, 0x50, 0xe8, 0x15, 0x6e, 0x45, 0x04, 0x2f, 0x42, 0x9d, 0x1b, 0x66, 0x76, 0x7b, 0x5e, 0x86, - 0xb6, 0xec, 0xcc, 0xf1, 0x24, 0xac, 0x77, 0x72, 0x48, 0xbe, 0x59, 0x81, 0x3a, 0xbf, 0xe8, 0x90, - 0x76, 0xb5, 0xaa, 0x15, 0xbc, 0x32, 0xfe, 0xde, 0x84, 0x6a, 0x06, 0xb7, 0xd9, 0x8e, 0x91, 0xae, - 0xef, 0xe5, 0xe5, 0xe5, 0x33, 0x05, 0xdc, 0xab, 0x11, 0x3d, 0x8e, 0x59, 0x0b, 0x86, 0xf3, 0x01, - 0xb4, 0x25, 0x17, 0x5a, 0xd0, 0x87, 0xf4, 0xec, 0xd8, 0xa1, 0x48, 0x8a, 0x14, 0x80, 0xbf, 0x50, - 0x86, 0xea, 0x92, 0xb3, 0x9b, 0xea, 0x87, 0xb7, 0x22, 0xab, 0x2e, 0x72, 0x07, 0x4b, 0xce, 0xae, - 0x66, 0xd4, 0xe6, 0x72, 0xa4, 0x71, 0xef, 0xe8, 0xd5, 0x3b, 0x3d, 0x7e, 0x05, 0x16, 0xc3, 0xf0, - 0x8a, 0xfd, 0x74, 0x13, 0x6a, 0xec, 0x0e, 0x51, 0x96, 0x9f, 0xda, 0x1b, 0x15, 0x57, 0x8c, 0x9d, - 0x52, 0xb0, 0x09, 0x97, 0xd1, 0x73, 0x3f, 0x65, 0x85, 0xc5, 0x7e, 0x8a, 0x1f, 0xba, 0xa8, 0xc1, - 0x88, 0x2b, 0x50, 0xdb, 0x76, 0xc4, 0x66, 0xad, 0x50, 0xe4, 0x7d, 0x67, 0x9b, 0x60, 0x46, 0x4f, - 0xf9, 0xb6, 0xac, 0x60, 0x4b, 0x78, 0xa8, 0x02, 0xbe, 0x9e, 0x15, 0x6c, 0x61, 0x46, 0x4f, 0xf9, - 0xd8, 0xe6, 0xb0, 0x31, 0x09, 0x1f, 0xdd, 0x70, 0x8a, 0x0d, 0xe4, 0x15, 0xa8, 0x05, 0xce, 0x17, - 0x88, 0xf0, 0x49, 0x05, 0x7c, 0x6b, 0xce, 0x17, 0x08, 0x66, 0xf4, 0xb1, 0x0b, 0x6f, 0x4d, 0xd6, - 0x35, 0x8a, 0x0b, 0x7f, 0x08, 0x33, 0xa1, 0x76, 0x12, 0x2e, 0x2e, 0xb2, 0x9d, 0x2d, 0x18, 0x17, - 0x8d, 0x07, 0x27, 0x30, 0xa8, 0x11, 0xb0, 0x7d, 0x74, 0xb6, 0x11, 0xbc, 0x08, 0xf5, 0x4f, 0x3a, - 0x76, 0xb8, 0xa5, 0x17, 0xd7, 0x35, 0x97, 0x47, 0x87, 0x6d, 0x5f, 0x2e, 0x4f, 0x1d, 0x75, 0x8e, - 0xb3, 0x04, 0x35, 0xaa, 0x3e, 0xfb, 0xd3, 0xe3, 0x58, 0xeb, 0x3e, 0x94, 0x03, 0x56, 0x3b, 0x9a, - 0xe3, 0xcc, 0x42, 0x8d, 0x6a, 0x48, 0x4e, 0x97, 0xcc, 0x42, 0x8d, 0xea, 0x5d, 0x7e, 0x29, 0x1d, - 0x6d, 0xbd, 0xb4, 0x1a, 0x95, 0x9e, 0x86, 0x19, 0x7d, 0x38, 0x72, 0x50, 0xfe, 0xb0, 0x09, 0x35, - 0x76, 0x21, 0x2f, 0x69, 0x91, 0x9f, 0x80, 0x03, 0x7c, 0xfc, 0x16, 0xc4, 0x12, 0xbc, 0x92, 0x79, - 0x0c, 0xa0, 0x5f, 0xf3, 0x13, 0x2a, 0x20, 0x58, 0xb0, 0x8e, 0x30, 0xf9, 0xa2, 0x82, 0x41, 0x69, - 0x1a, 0xf9, 0x8e, 0x5c, 0xbc, 0xd6, 0x0a, 0x6e, 0x83, 0x32, 0x5e, 0xbe, 0x04, 0x8e, 0x56, 0xb2, - 0x68, 0x01, 0x5a, 0x74, 0x6a, 0xa5, 0xdd, 0x25, 0xcc, 0xf6, 0xf4, 0x78, 0xfe, 0xbe, 0xa0, 0xc6, - 0x92, 0x8f, 0x4e, 0xec, 0x03, 0xcb, 0xb7, 0x59, 0xad, 0x84, 0x0d, 0xbf, 0x3a, 0x1e, 0x64, 0x31, - 0x22, 0xc7, 0x31, 0x27, 0xba, 0x0b, 0x53, 0x36, 0x91, 0x71, 0x02, 0x61, 0xd4, 0x1f, 0x1b, 0x0f, - 0xb4, 0x14, 0x33, 0x60, 0x95, 0x9b, 0xd6, 0x29, 0xda, 0x1b, 0x06, 0x85, 0x8b, 0x0d, 0x06, 0x15, - 0xdf, 0xba, 0x8f, 0x39, 0xcd, 0x53, 0x70, 0x40, 0x1b, 0xb7, 0x8f, 0x74, 0xd5, 0xa1, 0x8e, 0x25, - 0xc7, 0xb9, 0x2a, 0xb7, 0x28, 0x6f, 0xe8, 0xcb, 0x8e, 0xdc, 0x1d, 0x89, 0x60, 0xbc, 0x07, 0xad, - 0x68, 0x60, 0xd0, 0x2d, 0xbd, 0x0e, 0xaf, 0x15, 0xd7, 0x41, 0x8e, 0xa9, 0x40, 0x5b, 0x81, 0xb6, - 0x1c, 0x21, 0x34, 0xaf, 0xc3, 0xbd, 0x5e, 0x0c, 0x17, 0x8f, 0xae, 0xc0, 0xc3, 0x30, 0xa5, 0x0c, - 0x14, 0x5a, 0xd4, 0x11, 0xdf, 0x28, 0x46, 0x54, 0x87, 0x39, 0x5e, 0xf5, 0xc8, 0x11, 0x53, 0x47, - 0xa5, 0x1a, 0x8f, 0xca, 0x6f, 0x37, 0xa1, 0x25, 0x2f, 0xc1, 0x66, 0xec, 0x31, 0x77, 0xfc, 0x61, - 0xe1, 0x1e, 0x33, 0xe2, 0xef, 0x3e, 0xf2, 0x87, 0x98, 0x72, 0xd0, 0x21, 0x0e, 0x9d, 0x50, 0x9a, - 0xea, 0xab, 0xc5, 0xac, 0x0f, 0x29, 0x39, 0xe6, 0x5c, 0xe8, 0x81, 0xae, 0xe5, 0xb5, 0x31, 0x97, - 0xa4, 0x34, 0x90, 0x5c, 0x4d, 0xef, 0x43, 0xdb, 0xa1, 0x4b, 0xbf, 0x5e, 0x3c, 0xf3, 0xbe, 0x5e, - 0x0c, 0xd7, 0x8f, 0x58, 0x70, 0xcc, 0x4d, 0xeb, 0xb6, 0x61, 0xed, 0x52, 0xbb, 0x66, 0x60, 0x8d, - 0x49, 0xeb, 0x76, 0x3b, 0x66, 0xc2, 0x2a, 0x02, 0xba, 0x26, 0xd6, 0x2e, 0xcd, 0x02, 0xcf, 0x12, - 0x77, 0x55, 0xbc, 0x7e, 0x79, 0x2f, 0x35, 0xd3, 0x72, 0x33, 0x3e, 0x3f, 0x01, 0xca, 0xd8, 0xd9, - 0x96, 0x8e, 0x20, 0x5f, 0x19, 0xb5, 0x27, 0x1d, 0x41, 0x75, 0x75, 0x64, 0xbe, 0x00, 0xd5, 0x47, - 0xfe, 0x30, 0x7f, 0xae, 0x66, 0xc3, 0x9d, 0x53, 0xfc, 0x8a, 0x6e, 0x09, 0xf9, 0x0b, 0x7a, 0x39, - 0x26, 0xb9, 0x38, 0x4a, 0xa7, 0xe7, 0x10, 0x5d, 0x17, 0x13, 0xfa, 0x65, 0xdd, 0xde, 0x5e, 0x4a, - 0xd8, 0x1b, 0xb5, 0xb0, 0x55, 0x9f, 0xf0, 0x7b, 0x80, 0xca, 0x4c, 0x3e, 0xe9, 0x3c, 0x79, 0x27, - 0x5a, 0x7f, 0xec, 0xcb, 0x53, 0x24, 0xfb, 0x96, 0x63, 0x7d, 0xbd, 0x0c, 0x2d, 0x79, 0xc7, 0x39, - 0x1d, 0x9d, 0x6f, 0x39, 0x41, 0x8f, 0x58, 0x36, 0xf1, 0x85, 0xdd, 0xbe, 0x56, 0x78, 0x79, 0xba, - 0xdb, 0x17, 0x1c, 0x58, 0xf2, 0x9a, 0x27, 0xa0, 0x15, 0xe5, 0xe6, 0x6c, 0xca, 0xbe, 0x57, 0x81, - 0x86, 0xb8, 0x1d, 0x9d, 0xac, 0xc4, 0x0d, 0x68, 0x0c, 0xad, 0x3d, 0x6f, 0x27, 0xda, 0x32, 0x9d, - 0x2e, 0xb8, 0x70, 0xdd, 0xbd, 0xc7, 0xa8, 0xb1, 0xe0, 0x42, 0x6f, 0x43, 0x7d, 0xe8, 0x6c, 0x3b, - 0xa1, 0x70, 0x1f, 0xa7, 0x0a, 0xd9, 0xd9, 0x3d, 0x2a, 0xce, 0x43, 0x85, 0xb3, 0x4b, 0x91, 0xd1, - 0x27, 0x2d, 0x85, 0xc2, 0x1f, 0x33, 0x6a, 0x2c, 0xb8, 0xcc, 0x3b, 0xd0, 0xe0, 0xd5, 0xd9, 0xdf, - 0x24, 0xa1, 0xb7, 0x24, 0xd6, 0x74, 0x56, 0xb7, 0x9c, 0x55, 0xe9, 0x71, 0x68, 0x70, 0xe1, 0x39, - 0x5a, 0xf3, 0xdd, 0xe7, 0xd9, 0x7e, 0x67, 0x68, 0xde, 0x8b, 0x4f, 0x21, 0x3f, 0xfc, 0x59, 0x86, - 0xf9, 0x10, 0x0e, 0x2e, 0x59, 0xa1, 0xb5, 0x6e, 0x05, 0x04, 0x93, 0x81, 0xe7, 0xdb, 0x99, 0xa8, - 0x3e, 0x2f, 0x12, 0x11, 0xea, 0x7c, 0x54, 0x41, 0xf7, 0xe3, 0xd0, 0xe1, 0x7f, 0x9d, 0xd0, 0xe1, - 0xef, 0xd4, 0x72, 0xe2, 0x79, 0x93, 0x44, 0x32, 0xa8, 0xc2, 0xa5, 0x02, 0x7a, 0xd7, 0xf4, 0xb5, - 0xf7, 0xc9, 0x02, 0x4e, 0x6d, 0xf1, 0x7d, 0x4d, 0x8f, 0xe8, 0x15, 0xf1, 0x6a, 0x21, 0xbd, 0x5b, - 0xc9, 0x90, 0xde, 0xe9, 0x02, 0xee, 0x54, 0x4c, 0xef, 0x9a, 0x1e, 0xd3, 0x2b, 0x92, 0xae, 0x06, - 0xf5, 0xfe, 0x87, 0x85, 0xd1, 0x7e, 0x31, 0x27, 0xec, 0xf3, 0x71, 0x3d, 0xec, 0x33, 0x46, 0x6b, - 0x7e, 0x54, 0x71, 0x9f, 0x5f, 0x6a, 0xe4, 0xc4, 0x7d, 0xae, 0x6a, 0x71, 0x9f, 0x31, 0x35, 0x4b, - 0x06, 0x7e, 0xae, 0xe9, 0x81, 0x9f, 0x93, 0x05, 0x9c, 0x5a, 0xe4, 0xe7, 0xaa, 0x16, 0xf9, 0x29, - 0x12, 0xaa, 0x84, 0x7e, 0xae, 0x6a, 0xa1, 0x9f, 0x22, 0x46, 0x25, 0xf6, 0x73, 0x55, 0x8b, 0xfd, - 0x14, 0x31, 0x2a, 0xc1, 0x9f, 0xab, 0x5a, 0xf0, 0xa7, 0x88, 0x51, 0x89, 0xfe, 0x5c, 0xd3, 0xa3, - 0x3f, 0xc5, 0xfd, 0xa3, 0x0c, 0xfa, 0x8f, 0x03, 0x35, 0xff, 0x81, 0x81, 0x9a, 0x9f, 0xaa, 0xe6, - 0x04, 0x60, 0x70, 0x76, 0x00, 0xe6, 0x6c, 0xfe, 0x48, 0x16, 0x47, 0x60, 0x26, 0x9f, 0x05, 0xd2, - 0x21, 0x98, 0xeb, 0x89, 0x10, 0xcc, 0xa9, 0x02, 0x66, 0x3d, 0x06, 0xf3, 0xdf, 0x26, 0xc8, 0xf0, - 0x9b, 0x8d, 0x31, 0xfb, 0xe9, 0xb7, 0xd4, 0xfd, 0xf4, 0x98, 0x99, 0x2c, 0xbd, 0xa1, 0xbe, 0xa1, - 0x6f, 0xa8, 0xcf, 0x4c, 0xc0, 0xab, 0xed, 0xa8, 0x57, 0xb3, 0x76, 0xd4, 0xdd, 0x09, 0x50, 0x72, - 0xb7, 0xd4, 0x77, 0xd2, 0x5b, 0xea, 0xb3, 0x13, 0xe0, 0x65, 0xee, 0xa9, 0x57, 0xb3, 0xf6, 0xd4, - 0x93, 0xd4, 0x2e, 0x77, 0x53, 0xfd, 0xb6, 0xb6, 0xa9, 0x7e, 0x75, 0x92, 0xee, 0x8a, 0x27, 0x87, - 0x4f, 0xe5, 0xec, 0xaa, 0xdf, 0x9c, 0x04, 0x66, 0x7c, 0x10, 0xfb, 0xc7, 0xfb, 0x62, 0x5d, 0xcc, - 0x6f, 0xbc, 0x04, 0xad, 0xe8, 0xa2, 0x8d, 0xf9, 0x79, 0x68, 0x46, 0x9f, 0xc4, 0x66, 0x5c, 0xf9, - 0x15, 0x9b, 0x3a, 0xbe, 0x7a, 0x16, 0x29, 0x74, 0x03, 0x6a, 0xf4, 0x97, 0x30, 0x8b, 0xd7, 0x26, - 0xbb, 0xd0, 0x43, 0x85, 0x60, 0xc6, 0x67, 0xfe, 0xcb, 0x11, 0x00, 0xe5, 0x4b, 0xc1, 0x49, 0xc5, - 0xbe, 0x4b, 0x9d, 0xd9, 0x30, 0x24, 0x3e, 0xbb, 0xc8, 0x55, 0xf8, 0x25, 0x5d, 0x2c, 0x81, 0x6a, - 0x4b, 0x48, 0x7c, 0x2c, 0xd8, 0xd1, 0x7d, 0x68, 0x45, 0x81, 0x54, 0x76, 0x77, 0x3a, 0x4f, 0xc9, - 0xb2, 0xa0, 0xa2, 0xd0, 0x1e, 0x96, 0x10, 0x68, 0x1e, 0x6a, 0x81, 0xe7, 0x87, 0xe2, 0xa2, 0xf5, - 0x1b, 0x13, 0x43, 0xad, 0x79, 0x7e, 0x88, 0x19, 0x2b, 0x6f, 0x9a, 0xf2, 0x10, 0xc3, 0x7e, 0x9a, - 0xa6, 0x79, 0xec, 0x7f, 0xae, 0x4a, 0x1f, 0xba, 0x28, 0xac, 0x91, 0xeb, 0xd0, 0xb9, 0xc9, 0x47, - 0x49, 0xb5, 0xca, 0xe8, 0x76, 0x64, 0x45, 0xb9, 0x1d, 0xf9, 0x1a, 0x74, 0x06, 0xde, 0x2e, 0xf1, - 0x71, 0x7c, 0xc5, 0x49, 0xdc, 0x42, 0x4b, 0xe5, 0x23, 0x13, 0x5a, 0x5b, 0x8e, 0x4d, 0xfa, 0x03, - 0xe1, 0xff, 0x5a, 0x58, 0xa6, 0xd1, 0x5d, 0x68, 0xb1, 0x18, 0x7b, 0x14, 0xe1, 0xdf, 0x5f, 0x25, - 0x79, 0xa8, 0x3f, 0x02, 0xa0, 0x82, 0x98, 0xf0, 0xdb, 0x4e, 0xc8, 0xfa, 0xb0, 0x85, 0x65, 0x9a, - 0x56, 0x98, 0xdd, 0x23, 0x53, 0x2b, 0xdc, 0xe4, 0x15, 0x4e, 0xe6, 0xa3, 0x4b, 0xf0, 0x1c, 0xcb, - 0x4b, 0x6c, 0x31, 0x79, 0xa8, 0xbe, 0x85, 0xb3, 0x0b, 0xd9, 0xbd, 0x39, 0x6b, 0x93, 0x7f, 0x76, - 0xc5, 0x82, 0x77, 0x75, 0x1c, 0x67, 0xa0, 0xb3, 0x70, 0xc8, 0x26, 0x1b, 0xd6, 0xce, 0x30, 0x7c, - 0x48, 0xb6, 0x47, 0x43, 0x2b, 0x24, 0x7d, 0x9b, 0xbd, 0x05, 0xd1, 0xc6, 0xe9, 0x02, 0x74, 0x1e, - 0x0e, 0x8b, 0x4c, 0x6e, 0xc6, 0x74, 0x34, 0xfa, 0x36, 0x7b, 0x1a, 0xa1, 0x8d, 0xb3, 0x8a, 0xcc, - 0xef, 0xd6, 0xe8, 0xa0, 0x33, 0xd5, 0x7e, 0x17, 0xaa, 0x96, 0x6d, 0x8b, 0x69, 0xf3, 0xe2, 0x3e, - 0x0d, 0x44, 0x7c, 0x6f, 0x43, 0x11, 0xd0, 0xaa, 0xbc, 0x72, 0xc7, 0x27, 0xce, 0x2b, 0xfb, 0xc5, - 0x92, 0x4f, 0xd4, 0x08, 0x1c, 0x8a, 0xb8, 0xc3, 0x3f, 0xd1, 0xa8, 0xfe, 0x70, 0x88, 0xf2, 0x83, - 0x0d, 0x81, 0x83, 0xee, 0x40, 0x8d, 0xd5, 0x90, 0x4f, 0xac, 0x97, 0xf6, 0x8b, 0x77, 0x9f, 0xd7, - 0x8f, 0x61, 0x98, 0x03, 0x7e, 0xf7, 0x4d, 0xb9, 0x70, 0x59, 0xd6, 0x2f, 0x5c, 0x2e, 0x40, 0xdd, - 0x09, 0xc9, 0x76, 0xfa, 0xfe, 0xed, 0x58, 0x55, 0x15, 0x9e, 0x87, 0xb3, 0x8e, 0xbd, 0x07, 0xf8, - 0x7e, 0xee, 0x77, 0x14, 0xb7, 0xa0, 0x46, 0xd9, 0x53, 0x6b, 0xc9, 0x49, 0x04, 0x33, 0x4e, 0xf3, - 0x02, 0xd4, 0x68, 0x63, 0xc7, 0xb4, 0x4e, 0xd4, 0xa7, 0x22, 0xeb, 0xb3, 0x30, 0x05, 0x6d, 0x6f, - 0x44, 0x7c, 0x66, 0x18, 0xe6, 0x3f, 0xd5, 0x94, 0x4b, 0x71, 0x7d, 0x55, 0xc7, 0x2e, 0xef, 0xdb, - 0x73, 0xaa, 0x5a, 0x86, 0x13, 0x5a, 0xf6, 0xd6, 0xfe, 0xd1, 0x52, 0x7a, 0x86, 0x13, 0x7a, 0xf6, - 0x43, 0x60, 0xa6, 0x34, 0xed, 0x9e, 0xa6, 0x69, 0x57, 0xf6, 0x8f, 0xa8, 0xe9, 0x1a, 0x29, 0xd2, - 0xb5, 0x25, 0x5d, 0xd7, 0xba, 0x93, 0x0d, 0xb9, 0x9c, 0x9a, 0x26, 0xd0, 0xb6, 0xcf, 0xe4, 0x6a, - 0xdb, 0x82, 0xa6, 0x6d, 0xfb, 0x15, 0xfd, 0x11, 0xe9, 0xdb, 0x77, 0x6a, 0x50, 0xa3, 0xd3, 0x23, - 0x5a, 0x56, 0x75, 0xed, 0xcd, 0x7d, 0x4d, 0xad, 0xaa, 0x9e, 0xad, 0x24, 0xf4, 0xec, 0xd2, 0xfe, - 0x90, 0x52, 0x3a, 0xb6, 0x92, 0xd0, 0xb1, 0x7d, 0xe2, 0xa5, 0xf4, 0xab, 0xa7, 0xe9, 0xd7, 0x85, - 0xfd, 0xa1, 0x69, 0xba, 0x65, 0x15, 0xe9, 0xd6, 0x2d, 0x5d, 0xb7, 0x26, 0x5c, 0xbd, 0xb1, 0xb5, - 0xca, 0x04, 0x7a, 0xf5, 0x5e, 0xae, 0x5e, 0xdd, 0xd0, 0xf4, 0x6a, 0x3f, 0x62, 0x3f, 0x22, 0x9d, - 0xba, 0xc4, 0x17, 0x9d, 0xf9, 0x9f, 0xb7, 0x65, 0x2d, 0x3a, 0xcd, 0xcb, 0xd0, 0x8e, 0x9f, 0x5a, - 0xc9, 0xb8, 0x9e, 0xcf, 0xc9, 0x22, 0xa9, 0x51, 0xd2, 0xbc, 0x08, 0xed, 0xf8, 0xf9, 0x94, 0xac, - 0x4f, 0xe9, 0x58, 0xa1, 0xfc, 0xa4, 0x8a, 0xa5, 0xcc, 0x65, 0x38, 0x94, 0x7e, 0xdc, 0x21, 0x23, - 0x0e, 0xaf, 0xdc, 0x2d, 0x8f, 0xbe, 0x68, 0x51, 0xb2, 0xcc, 0xa7, 0x30, 0x93, 0x78, 0xae, 0x61, - 0xdf, 0x18, 0xe8, 0xa2, 0xb2, 0x44, 0xae, 0x26, 0x3e, 0xd0, 0xd5, 0x6f, 0xcb, 0xc7, 0x0b, 0x61, - 0x73, 0x09, 0x66, 0x0a, 0x2a, 0x3f, 0xc9, 0x65, 0xf9, 0xcf, 0xc2, 0xd4, 0xb8, 0xba, 0x7f, 0x04, - 0x97, 0xf9, 0x43, 0xe8, 0xa4, 0x9e, 0x9a, 0x49, 0x8a, 0x59, 0x05, 0xd8, 0x94, 0x34, 0x42, 0x69, - 0xcf, 0xef, 0xe3, 0xd3, 0x05, 0xc6, 0x87, 0x15, 0x0c, 0xf3, 0xd7, 0xca, 0x70, 0x28, 0xfd, 0xce, - 0xcc, 0xa4, 0x9b, 0x1f, 0x03, 0x9a, 0x0c, 0x4b, 0x7e, 0xf1, 0x11, 0x25, 0xd1, 0x7d, 0x98, 0x0e, - 0x86, 0xce, 0x80, 0x2c, 0x6e, 0x59, 0xee, 0x26, 0x09, 0xc4, 0x8e, 0xa6, 0xe0, 0xad, 0x98, 0xb5, - 0x98, 0x03, 0x6b, 0xec, 0xe6, 0x53, 0x98, 0x52, 0x0a, 0xd1, 0x3b, 0x50, 0xf1, 0x46, 0xa9, 0x7b, - 0x8d, 0xf9, 0x98, 0x0f, 0x22, 0x7b, 0xc3, 0x15, 0x6f, 0x94, 0x36, 0x49, 0xd5, 0x7c, 0xab, 0x9a, - 0xf9, 0x9a, 0x77, 0xe1, 0x50, 0xfa, 0x29, 0x97, 0x64, 0xf7, 0x9c, 0x4e, 0x45, 0x09, 0x78, 0x37, - 0x25, 0xb7, 0xfc, 0x57, 0xe1, 0x60, 0xf2, 0x81, 0x96, 0x8c, 0xaf, 0x71, 0xe2, 0x8f, 0x9a, 0xa2, - 0x70, 0xfd, 0xdc, 0x4f, 0x96, 0x61, 0x46, 0x6f, 0x08, 0x3a, 0x0a, 0x48, 0xcf, 0x59, 0xf1, 0x5c, - 0xd2, 0x29, 0xa1, 0xe7, 0xe0, 0x90, 0x9e, 0x3f, 0x6f, 0xdb, 0x9d, 0x72, 0x9a, 0x9c, 0xba, 0xad, - 0x4e, 0x05, 0x19, 0x70, 0x24, 0xd1, 0x43, 0xcc, 0x89, 0x76, 0xaa, 0xe8, 0x79, 0x78, 0x2e, 0x59, - 0x32, 0x1a, 0x5a, 0x03, 0xd2, 0xa9, 0x99, 0x3f, 0xa8, 0x40, 0xed, 0x51, 0x40, 0x7c, 0xf3, 0x1f, - 0x2b, 0xd1, 0x57, 0x1a, 0x6f, 0x41, 0x8d, 0xbd, 0x9d, 0xa2, 0x7c, 0x56, 0x59, 0x4e, 0x7c, 0x56, - 0xa9, 0x7d, 0x9a, 0x17, 0x7f, 0x56, 0xf9, 0x16, 0xd4, 0xd8, 0x6b, 0x29, 0xfb, 0xe7, 0xfc, 0x5a, - 0x19, 0xda, 0xf1, 0xcb, 0x25, 0xfb, 0xe6, 0x57, 0xbf, 0x0a, 0xa9, 0xe8, 0x5f, 0x85, 0xbc, 0x06, - 0x75, 0x9f, 0x7d, 0xbf, 0xc1, 0xbd, 0x4c, 0xf2, 0x5b, 0x13, 0x26, 0x10, 0x73, 0x12, 0x93, 0xc0, - 0x94, 0xfa, 0x2e, 0xcb, 0xfe, 0xab, 0x71, 0x52, 0x3c, 0xca, 0xd6, 0xb7, 0x83, 0x79, 0xdf, 0xb7, - 0xf6, 0x84, 0x62, 0xea, 0x99, 0xe6, 0x2c, 0xd4, 0x56, 0x1d, 0x77, 0x33, 0xfb, 0x6b, 0x56, 0xf3, - 0x77, 0xcb, 0xd0, 0x14, 0x97, 0x77, 0xcd, 0xab, 0x50, 0x5d, 0x21, 0x4f, 0x69, 0x45, 0xc4, 0xb5, - 0xe1, 0x54, 0x45, 0xee, 0xb3, 0x56, 0x08, 0x7a, 0x1c, 0x91, 0x99, 0xd7, 0xe4, 0x34, 0xb9, 0x7f, - 0xde, 0xb7, 0xa0, 0xc6, 0x9e, 0x53, 0xd9, 0x3f, 0xe7, 0xef, 0xb5, 0xa0, 0xc1, 0x3f, 0x09, 0x35, - 0x7f, 0xab, 0x05, 0x0d, 0xfe, 0xc4, 0x0a, 0xba, 0x01, 0xcd, 0x60, 0x67, 0x7b, 0xdb, 0xf2, 0xf7, - 0x8c, 0xec, 0x87, 0x83, 0xb5, 0x17, 0x59, 0xba, 0x6b, 0x9c, 0x16, 0x47, 0x4c, 0xe8, 0x32, 0xd4, - 0x06, 0xd6, 0x06, 0x49, 0x1d, 0xe7, 0x66, 0x31, 0x2f, 0x5a, 0x1b, 0x04, 0x33, 0x72, 0x74, 0x0b, - 0x5a, 0x62, 0x58, 0x02, 0x11, 0xcf, 0x19, 0x2f, 0x37, 0x1a, 0x4c, 0xc9, 0x65, 0xde, 0x81, 0xa6, - 0xa8, 0x0c, 0xba, 0x29, 0x3f, 0x88, 0x4d, 0x46, 0x9e, 0x33, 0x9b, 0x20, 0xdf, 0xde, 0x90, 0x9f, - 0xc6, 0xfe, 0x49, 0x05, 0x6a, 0xb4, 0x72, 0x1f, 0x1a, 0x09, 0x1d, 0x07, 0x18, 0x5a, 0x41, 0xb8, - 0xba, 0x33, 0x1c, 0x12, 0x5b, 0x7c, 0x61, 0xa7, 0xe4, 0xa0, 0x33, 0x70, 0x90, 0xa7, 0x82, 0xad, - 0xb5, 0x9d, 0xc1, 0x80, 0xc8, 0x2f, 0x4b, 0x93, 0xd9, 0x68, 0x1e, 0xea, 0xec, 0xd1, 0x4f, 0xb1, - 0x2a, 0x7c, 0xbd, 0xb0, 0x67, 0xbb, 0xab, 0x8e, 0x2b, 0x6a, 0xc3, 0x39, 0x4d, 0x0f, 0xda, 0x32, - 0x8f, 0x1a, 0xe1, 0xc8, 0x71, 0x5d, 0xc7, 0xdd, 0x14, 0x1a, 0x1d, 0x25, 0xe9, 0xa4, 0x43, 0x7f, - 0x8a, 0xfa, 0xd6, 0xb1, 0x48, 0xd1, 0xfc, 0x0d, 0xcb, 0x19, 0x8a, 0x2a, 0xd6, 0xb1, 0x48, 0x51, - 0xa4, 0x1d, 0xf1, 0x30, 0x4d, 0x8d, 0x35, 0x30, 0x4a, 0x9a, 0x1f, 0x94, 0xe5, 0x57, 0xe1, 0x59, - 0x1f, 0x67, 0xa6, 0x62, 0x49, 0xb3, 0x6a, 0x40, 0x9b, 0x4f, 0x08, 0x4a, 0x88, 0xfa, 0x28, 0x34, - 0x3c, 0x77, 0xe8, 0xb8, 0x44, 0xc4, 0x8e, 0x44, 0x2a, 0xd1, 0xc7, 0xf5, 0x54, 0x1f, 0x8b, 0xf2, - 0x65, 0xdb, 0xa1, 0x55, 0x6c, 0xc4, 0xe5, 0x3c, 0x07, 0x5d, 0x87, 0xa6, 0x4d, 0x76, 0x9d, 0x01, - 0x09, 0x8c, 0x26, 0x53, 0xbd, 0x57, 0xc6, 0xf6, 0xed, 0x12, 0xa3, 0xc5, 0x11, 0x8f, 0x19, 0x42, - 0x83, 0x67, 0xc9, 0x26, 0x95, 0x95, 0x26, 0xc5, 0x95, 0xae, 0x8c, 0xa9, 0x74, 0xb5, 0xa0, 0xd2, - 0xb5, 0x64, 0xa5, 0xe7, 0xbe, 0x04, 0x10, 0xab, 0x1b, 0x9a, 0x82, 0xe6, 0x23, 0xf7, 0x89, 0xeb, - 0x3d, 0x75, 0x3b, 0x25, 0x9a, 0x78, 0xb0, 0xb1, 0x41, 0xa5, 0x74, 0xca, 0x34, 0x41, 0xe9, 0x1c, - 0x77, 0xb3, 0x53, 0x41, 0x00, 0x0d, 0x9a, 0x20, 0x76, 0xa7, 0x4a, 0x7f, 0xdf, 0x66, 0xe3, 0xd7, - 0xa9, 0xa1, 0x63, 0x70, 0xb8, 0xef, 0x0e, 0xbc, 0xed, 0x91, 0x15, 0x3a, 0xeb, 0x43, 0xf2, 0x98, - 0xf8, 0x81, 0xe3, 0xb9, 0x9d, 0x3a, 0x9d, 0xbd, 0x56, 0x48, 0xf8, 0xd4, 0xf3, 0x9f, 0xac, 0x10, - 0x62, 0x8b, 0x37, 0x5f, 0x3a, 0x0d, 0xf3, 0xdf, 0xca, 0xfc, 0x34, 0xd8, 0xbc, 0x05, 0xd3, 0xda, - 0x0b, 0x4a, 0x46, 0xfc, 0x9e, 0x7b, 0xe2, 0x39, 0xf7, 0xa3, 0x2c, 0x5e, 0x4b, 0xe2, 0xa5, 0x0c, - 0x4f, 0x99, 0xb7, 0x01, 0x94, 0x77, 0x93, 0x8e, 0x03, 0xac, 0xef, 0x85, 0x24, 0xe0, 0x6f, 0x26, - 0x51, 0x88, 0x1a, 0x56, 0x72, 0x54, 0xfc, 0x8a, 0x86, 0x6f, 0x5e, 0x01, 0x50, 0x5e, 0x4d, 0xa2, - 0x76, 0x45, 0x53, 0x0b, 0x49, 0xb0, 0x64, 0xb6, 0xd9, 0x15, 0x2d, 0x88, 0xde, 0x47, 0x8a, 0x6a, - 0xc0, 0xa3, 0x77, 0x6a, 0x0d, 0x58, 0x8e, 0xb9, 0x0c, 0x10, 0x3f, 0x11, 0x64, 0x5e, 0x95, 0xae, - 0xfb, 0x0d, 0xa8, 0xd9, 0x56, 0x68, 0x09, 0xaf, 0xf9, 0x7c, 0x62, 0xe6, 0x8a, 0x59, 0x30, 0x23, - 0x33, 0x7f, 0xb5, 0x0c, 0xd3, 0xea, 0x73, 0x48, 0xe6, 0xbb, 0x50, 0x63, 0xef, 0x29, 0xdd, 0x84, - 0x69, 0xf5, 0x3d, 0xa4, 0xd4, 0xbb, 0xf7, 0x1c, 0x4f, 0x65, 0xc5, 0x1a, 0x83, 0xd9, 0x97, 0x55, - 0xfa, 0xd0, 0x50, 0xe7, 0xa1, 0x29, 0x9e, 0x57, 0x32, 0x4f, 0x41, 0x3b, 0x7e, 0x4d, 0x89, 0xfa, - 0x0e, 0x9e, 0x1f, 0x8d, 0xb2, 0x48, 0x9a, 0xff, 0x50, 0x83, 0x3a, 0x1b, 0x4e, 0xf3, 0x2b, 0x15, - 0x55, 0x43, 0xcd, 0x1f, 0x94, 0x73, 0xf7, 0x82, 0x17, 0xb5, 0xf7, 0x0b, 0x66, 0x52, 0xaf, 0x88, - 0x89, 0xc7, 0x93, 0x74, 0xc7, 0x7a, 0x05, 0x9a, 0x2e, 0xd7, 0x4c, 0xf1, 0x7c, 0xc0, 0x6c, 0x26, - 0x97, 0xd0, 0x5e, 0x1c, 0x11, 0xa3, 0x4b, 0x50, 0x27, 0xbe, 0xef, 0xf9, 0xcc, 0xa4, 0x66, 0x52, - 0xef, 0x71, 0xc5, 0x0f, 0x35, 0x2d, 0x53, 0x2a, 0xcc, 0x89, 0xd1, 0x25, 0x78, 0x2e, 0xe0, 0x56, - 0xc4, 0xd7, 0x94, 0x81, 0xf8, 0xae, 0x5a, 0x78, 0x9b, 0xec, 0x42, 0x33, 0x80, 0x83, 0xc9, 0xb7, - 0x97, 0x4c, 0x68, 0xf1, 0xb5, 0xa9, 0x34, 0x10, 0x99, 0xa6, 0x9a, 0xc7, 0x7f, 0xaf, 0xc4, 0x7e, - 0x51, 0xc9, 0xa1, 0xeb, 0x95, 0xa7, 0x0c, 0x2a, 0x3a, 0x4e, 0xe6, 0x1e, 0x52, 0xcf, 0x9c, 0xfb, - 0x44, 0x34, 0xab, 0x2b, 0xd6, 0x5e, 0x52, 0xdd, 0x40, 0x19, 0xb5, 0xa1, 0xce, 0x5a, 0xd7, 0xa9, - 0xa8, 0xbe, 0xa2, 0x9a, 0x63, 0xed, 0xb5, 0xb9, 0x8b, 0xd0, 0x14, 0xf9, 0x94, 0x7e, 0x9e, 0x77, - 0x58, 0xa7, 0x84, 0xa6, 0xa1, 0xb5, 0x46, 0x86, 0x1b, 0x3d, 0x2f, 0x08, 0x3b, 0x65, 0x74, 0x00, - 0xda, 0xcc, 0x00, 0x1f, 0xb8, 0xc3, 0xbd, 0x4e, 0x65, 0xee, 0x3d, 0x68, 0xcb, 0x6e, 0x44, 0x2d, - 0xa8, 0xad, 0xec, 0x0c, 0x87, 0x9d, 0x12, 0x5b, 0x0f, 0x87, 0x9e, 0x1f, 0x45, 0xc3, 0x97, 0x9f, - 0xd1, 0xc9, 0xad, 0x53, 0xce, 0x73, 0x41, 0x15, 0xd4, 0x81, 0x69, 0x21, 0x9c, 0xd7, 0xb9, 0x6a, - 0xfe, 0x5d, 0x19, 0xda, 0xf2, 0x69, 0x2a, 0xba, 0x18, 0x8d, 0x14, 0x2b, 0xdf, 0xf9, 0x5c, 0x4d, - 0xa8, 0x58, 0xfe, 0x4b, 0x57, 0x09, 0x35, 0x3b, 0x0d, 0x33, 0xc2, 0xcf, 0x47, 0x23, 0xce, 0x5d, - 0x75, 0x22, 0x77, 0xee, 0x8e, 0xec, 0xf5, 0x0e, 0xb3, 0xeb, 0x45, 0xcf, 0x75, 0xc9, 0x20, 0x64, - 0x7d, 0x7f, 0x10, 0xa6, 0x56, 0xbc, 0x70, 0xd5, 0x0b, 0x02, 0xda, 0x32, 0xde, 0x53, 0x71, 0x79, - 0x05, 0xcd, 0x00, 0x44, 0x17, 0xdc, 0xa8, 0x67, 0x36, 0x7f, 0xa5, 0x0c, 0x0d, 0xfe, 0x60, 0x96, - 0xf9, 0xf3, 0x65, 0x68, 0x88, 0x47, 0xb2, 0x5e, 0x83, 0x8e, 0xef, 0x51, 0xe0, 0x68, 0x17, 0xd3, - 0x5f, 0x12, 0xad, 0x4c, 0xe5, 0xd3, 0x8d, 0xb5, 0xa7, 0xa8, 0xa2, 0x58, 0x77, 0x68, 0x79, 0xe8, - 0x1a, 0x00, 0x7f, 0x84, 0xeb, 0xe1, 0x9e, 0x7c, 0x82, 0x23, 0x79, 0xaf, 0x4d, 0x3c, 0xdb, 0xc5, - 0x4e, 0x80, 0x14, 0x6a, 0x73, 0x1b, 0x0e, 0xa5, 0x5e, 0x50, 0x52, 0x82, 0x3d, 0x67, 0xe0, 0x20, - 0x51, 0x8b, 0xe4, 0x78, 0x24, 0xb3, 0xa9, 0x4a, 0x6b, 0x59, 0x42, 0xeb, 0xf5, 0xcc, 0xb9, 0x2f, - 0xc2, 0x01, 0x4c, 0x82, 0x91, 0xe7, 0x06, 0xe4, 0x47, 0xf5, 0x3f, 0x4e, 0x72, 0xff, 0x5b, 0xc9, - 0xdc, 0x77, 0xea, 0x50, 0x67, 0x2b, 0x68, 0xf3, 0x4f, 0xeb, 0x72, 0xad, 0x9f, 0xf2, 0x61, 0x17, - 0xd4, 0xcb, 0x4c, 0xaa, 0x33, 0xd2, 0x16, 0xdf, 0xfa, 0x25, 0xa6, 0xb7, 0xa1, 0x35, 0xf2, 0xbd, - 0x4d, 0x9f, 0xae, 0xd9, 0x6b, 0x89, 0xc7, 0xaf, 0x74, 0xb6, 0x55, 0x41, 0x86, 0x25, 0x83, 0xaa, - 0xeb, 0x75, 0x5d, 0xd7, 0x6f, 0x41, 0xdb, 0xf6, 0xbd, 0x11, 0xfb, 0x0c, 0x5f, 0x1c, 0x20, 0x9e, - 0xc8, 0xc1, 0x5d, 0x8a, 0xe8, 0x7a, 0x25, 0x1c, 0x33, 0x51, 0x6b, 0xe1, 0x83, 0x2d, 0xce, 0xee, - 0x5f, 0xcc, 0x61, 0xe7, 0xea, 0xd1, 0x2b, 0x61, 0x41, 0x4e, 0x19, 0xc9, 0x33, 0xc6, 0xd8, 0x1a, - 0xcb, 0xb8, 0xfc, 0x2c, 0x62, 0xe4, 0xe4, 0xe8, 0x3a, 0xb4, 0x02, 0x6b, 0x97, 0xb0, 0x17, 0xcd, - 0xdb, 0x63, 0xbb, 0x62, 0x4d, 0x90, 0xf5, 0x4a, 0x58, 0xb2, 0xd0, 0x26, 0x6f, 0x3b, 0x9b, 0x7c, - 0xb7, 0x2c, 0x9e, 0x55, 0xcf, 0x6b, 0xf2, 0xfd, 0x88, 0x8e, 0xbd, 0x81, 0x1f, 0x25, 0xe8, 0xee, - 0x8e, 0x4f, 0x0b, 0x53, 0xfc, 0x68, 0x9c, 0x25, 0xcc, 0x29, 0x68, 0xcb, 0x2e, 0x32, 0x5b, 0xd2, - 0x2a, 0x5b, 0xd0, 0xe0, 0x2d, 0x30, 0x01, 0x5a, 0x51, 0x85, 0x28, 0xb1, 0x04, 0x37, 0x57, 0xa0, - 0x15, 0x0d, 0x5a, 0xce, 0xd3, 0x1b, 0x08, 0x6a, 0xb6, 0x27, 0x96, 0x85, 0x55, 0xcc, 0x7e, 0xd3, - 0x41, 0x55, 0x9f, 0xfe, 0x6a, 0xcb, 0x77, 0xb0, 0xe6, 0xe6, 0xa3, 0x3b, 0x59, 0xd4, 0x93, 0xf2, - 0x80, 0xc3, 0x14, 0x34, 0xf1, 0x0e, 0x5b, 0xb1, 0x77, 0xca, 0x34, 0x9b, 0x6e, 0x03, 0x3b, 0x15, - 0xea, 0x94, 0x17, 0x2d, 0x77, 0x40, 0x86, 0x6c, 0x95, 0x27, 0x5d, 0x7d, 0x6d, 0xa1, 0x2d, 0xc1, - 0x17, 0x66, 0xff, 0xec, 0x83, 0xe3, 0xe5, 0x6f, 0x7f, 0x70, 0xbc, 0xfc, 0xbd, 0x0f, 0x8e, 0x97, - 0x7f, 0xe6, 0xfb, 0xc7, 0x4b, 0xdf, 0xfe, 0xfe, 0xf1, 0xd2, 0xdf, 0x7c, 0xff, 0x78, 0xe9, 0xfd, - 0xca, 0x68, 0x7d, 0xbd, 0xc1, 0xee, 0xd5, 0x5c, 0xfc, 0xf7, 0x00, 0x00, 0x00, 0xff, 0xff, 0x4a, - 0xc2, 0x5b, 0x96, 0xba, 0x68, 0x00, 0x00, + // 6509 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x49, 0x8c, 0x1d, 0x49, + 0x5a, 0xff, 0xdb, 0x97, 0xaf, 0xca, 0xe5, 0xe7, 0x68, 0x2f, 0xd9, 0xd9, 0xd5, 0x6e, 0x77, 0xb5, + 0xed, 0xf6, 0x74, 0xbb, 0x9f, 0xdd, 0x5e, 0x7b, 0xdc, 0xed, 0xa5, 0x36, 0xf7, 0x7b, 0x5e, 0xca, + 0x35, 0x51, 0xb6, 0xa7, 0xa7, 0x67, 0xf4, 0xd7, 0x64, 0xbd, 0x8c, 0xaa, 0xca, 0xf1, 0xab, 0xcc, + 0x37, 0x99, 0x59, 0x65, 0xd7, 0x2c, 0x7f, 0x86, 0x59, 0x18, 0x90, 0x40, 0x2c, 0x42, 0x80, 0xe0, + 0x80, 0x84, 0xe0, 0x86, 0x10, 0x12, 0x17, 0x40, 0x02, 0x21, 0x10, 0x02, 0x06, 0x90, 0x66, 0x24, + 0x0e, 0x5c, 0x60, 0x86, 0x9e, 0x0b, 0x17, 0x0e, 0x73, 0x41, 0x1c, 0x51, 0x2c, 0x19, 0x19, 0x91, + 0xcb, 0xcb, 0x57, 0xd3, 0x3d, 0x2c, 0x62, 0x4e, 0xf5, 0x22, 0xe2, 0xfb, 0x7e, 0x5f, 0x2c, 0xdf, + 0xf7, 0x45, 0xc4, 0x17, 0x91, 0x51, 0x70, 0x74, 0xb4, 0x7e, 0x6e, 0xe4, 0x7b, 0xa1, 0x17, 0x9c, + 0x23, 0xbb, 0xc4, 0x0d, 0x83, 0x2e, 0x4b, 0xa1, 0xa6, 0xe5, 0xee, 0x85, 0x7b, 0x23, 0x62, 0x9e, + 0x1c, 0x3d, 0xd9, 0x3c, 0x37, 0x74, 0xd6, 0xcf, 0x8d, 0xd6, 0xcf, 0x6d, 0x7b, 0x36, 0x19, 0x46, + 0xe4, 0x2c, 0x21, 0xc8, 0xcd, 0xd9, 0x4d, 0xcf, 0xdb, 0x1c, 0x12, 0x5e, 0xb6, 0xbe, 0xb3, 0x71, + 0x2e, 0x08, 0xfd, 0x9d, 0x41, 0xc8, 0x4b, 0xe7, 0xbe, 0xfa, 0xad, 0x32, 0xd4, 0x97, 0x29, 0x3c, + 0xba, 0x00, 0xad, 0x6d, 0x12, 0x04, 0xd6, 0x26, 0x09, 0x8c, 0xf2, 0x89, 0xea, 0x99, 0xa9, 0x0b, + 0x47, 0xbb, 0x42, 0x54, 0x97, 0x51, 0x74, 0xef, 0xf3, 0x62, 0x2c, 0xe9, 0xd0, 0x2c, 0xb4, 0x07, + 0x9e, 0x1b, 0x92, 0x67, 0x61, 0xdf, 0x36, 0x2a, 0x27, 0xca, 0x67, 0xda, 0x38, 0xce, 0x40, 0x97, + 0xa0, 0xed, 0xb8, 0x4e, 0xe8, 0x58, 0xa1, 0xe7, 0x1b, 0xd5, 0x13, 0x65, 0x0d, 0x92, 0x55, 0xb2, + 0x3b, 0x3f, 0x18, 0x78, 0x3b, 0x6e, 0x88, 0x63, 0x42, 0x64, 0x40, 0x33, 0xf4, 0xad, 0x01, 0xe9, + 0xdb, 0x46, 0x8d, 0x21, 0x46, 0x49, 0xf3, 0x4f, 0x2e, 0x43, 0x53, 0xd4, 0x01, 0x3d, 0x0f, 0xcd, + 0x60, 0xc4, 0xa9, 0xbe, 0x5e, 0xe6, 0x64, 0x22, 0x8d, 0x6e, 0xc2, 0x94, 0xc5, 0x61, 0xd7, 0xb6, + 0xbc, 0xa7, 0x46, 0x99, 0x09, 0x7e, 0x21, 0xd1, 0x16, 0x21, 0xb8, 0x4b, 0x49, 0x7a, 0x25, 0xac, + 0x72, 0xa0, 0x3e, 0xcc, 0x88, 0xe4, 0x12, 0x09, 0x2d, 0x67, 0x18, 0x18, 0x7f, 0xc3, 0x41, 0x8e, + 0xe7, 0x80, 0x08, 0xb2, 0x5e, 0x09, 0x27, 0x18, 0xd1, 0xa7, 0xe0, 0x39, 0x91, 0xb3, 0xe8, 0xb9, + 0x1b, 0xce, 0xe6, 0xa3, 0x91, 0x6d, 0x85, 0xc4, 0xf8, 0x16, 0xc7, 0x3b, 0x99, 0x83, 0xc7, 0x69, + 0xbb, 0x9c, 0xb8, 0x57, 0xc2, 0x59, 0x18, 0xe8, 0x36, 0x1c, 0x10, 0xd9, 0x02, 0xf4, 0x6f, 0x39, + 0xe8, 0x8b, 0x39, 0xa0, 0x12, 0x4d, 0x67, 0x43, 0x9f, 0x86, 0xc3, 0x22, 0xe3, 0x9e, 0xe3, 0x3e, + 0x59, 0xdc, 0xb2, 0x86, 0x43, 0xe2, 0x6e, 0x12, 0xe3, 0xef, 0xc6, 0xd7, 0x51, 0x23, 0xee, 0x95, + 0x70, 0x26, 0x08, 0xda, 0x04, 0x23, 0x2b, 0xbf, 0xe7, 0xd8, 0xc4, 0xf8, 0x7b, 0x2e, 0xe0, 0xcc, + 0x44, 0x02, 0x1c, 0x9b, 0x0a, 0xc9, 0x05, 0x43, 0x0f, 0xa0, 0xe3, 0xad, 0x7f, 0x8e, 0x0c, 0xa2, + 0x9e, 0x5f, 0x23, 0xa1, 0xd1, 0x61, 0xf8, 0x2f, 0x27, 0xf0, 0x1f, 0x30, 0xb2, 0x68, 0xcc, 0xba, + 0x6b, 0x24, 0xec, 0x95, 0x70, 0x8a, 0x19, 0x3d, 0x02, 0xa4, 0xe5, 0xcd, 0x6f, 0x13, 0xd7, 0x36, + 0x2e, 0x30, 0xc8, 0x57, 0xc6, 0x43, 0x32, 0xd2, 0x5e, 0x09, 0x67, 0x00, 0xa4, 0x60, 0x1f, 0xb9, + 0x01, 0x09, 0x8d, 0x8b, 0x93, 0xc0, 0x32, 0xd2, 0x14, 0x2c, 0xcb, 0xa5, 0x83, 0xc8, 0x73, 0x31, + 0x19, 0x5a, 0xa1, 0xe3, 0xb9, 0xa2, 0xbe, 0x97, 0x18, 0xf0, 0xa9, 0x6c, 0x60, 0x49, 0x2b, 0x6b, + 0x9c, 0x09, 0x82, 0xfe, 0x1f, 0x1c, 0x49, 0xe4, 0x63, 0xb2, 0xed, 0xed, 0x12, 0xe3, 0x32, 0x43, + 0x3f, 0x5d, 0x84, 0xce, 0xa9, 0x7b, 0x25, 0x9c, 0x0d, 0x83, 0x16, 0x60, 0x3a, 0x2a, 0x60, 0xb0, + 0x57, 0x18, 0xec, 0x6c, 0x1e, 0xac, 0x00, 0xd3, 0x78, 0xa8, 0xd1, 0xf3, 0xf4, 0xe2, 0xd0, 0x0b, + 0x88, 0x31, 0x9f, 0x69, 0xf4, 0x02, 0x82, 0x91, 0x50, 0xa3, 0x57, 0x38, 0xd4, 0x46, 0x06, 0xa1, + 0xef, 0x0c, 0x58, 0x05, 0xa9, 0x16, 0x5d, 0x1d, 0xdf, 0xc8, 0x98, 0x58, 0xa8, 0x52, 0x36, 0x0c, + 0xc2, 0x70, 0x30, 0xd8, 0x59, 0x0f, 0x06, 0xbe, 0x33, 0xa2, 0x79, 0xf3, 0xb6, 0x6d, 0xbc, 0x33, + 0x0e, 0x79, 0x4d, 0x21, 0xee, 0xce, 0xdb, 0x74, 0x74, 0x92, 0x00, 0xe8, 0xd3, 0x80, 0xd4, 0x2c, + 0xd1, 0x7d, 0xd7, 0x19, 0xec, 0xc7, 0x26, 0x80, 0x95, 0x7d, 0x99, 0x01, 0x83, 0x2c, 0x38, 0xac, + 0xe6, 0xae, 0x7a, 0x81, 0x43, 0xff, 0x1a, 0x37, 0x18, 0xfc, 0xeb, 0x13, 0xc0, 0x47, 0x2c, 0x54, + 0xb1, 0xb2, 0xa0, 0x92, 0x22, 0x16, 0xa9, 0x69, 0x13, 0x3f, 0x30, 0x6e, 0x4e, 0x2c, 0x22, 0x62, + 0x49, 0x8a, 0x88, 0xf2, 0x93, 0x5d, 0xf4, 0xae, 0xef, 0xed, 0x8c, 0x02, 0xe3, 0xd6, 0xc4, 0x5d, + 0xc4, 0x19, 0x92, 0x5d, 0xc4, 0x73, 0xd1, 0x15, 0x68, 0xad, 0x0f, 0xbd, 0xc1, 0x13, 0x3a, 0x98, + 0x15, 0x06, 0x69, 0x24, 0x20, 0x17, 0x68, 0xb1, 0x18, 0x3e, 0x49, 0x4b, 0x95, 0x95, 0xfd, 0x5e, + 0x22, 0x43, 0x12, 0x12, 0x31, 0x35, 0xbe, 0x90, 0xc9, 0xca, 0x49, 0xa8, 0xb2, 0x2a, 0x1c, 0x68, + 0x09, 0xa6, 0x36, 0x9c, 0x21, 0x09, 0x1e, 0x8d, 0x86, 0x9e, 0xc5, 0xe7, 0xc9, 0xa9, 0x0b, 0x27, + 0x32, 0x01, 0x6e, 0xc7, 0x74, 0x14, 0x45, 0x61, 0x43, 0x37, 0xa0, 0xbd, 0x6d, 0xf9, 0x4f, 0x82, + 0xbe, 0xbb, 0xe1, 0x19, 0xf5, 0xcc, 0x19, 0x8e, 0x63, 0xdc, 0x8f, 0xa8, 0x7a, 0x25, 0x1c, 0xb3, + 0xd0, 0x79, 0x92, 0x55, 0x6a, 0x8d, 0x84, 0xb7, 0x1d, 0x32, 0xb4, 0x03, 0xa3, 0xc1, 0x40, 0x5e, + 0xca, 0x04, 0x59, 0x23, 0x61, 0x97, 0x93, 0xd1, 0x79, 0x52, 0x67, 0x44, 0xef, 0xc1, 0x73, 0x51, + 0xce, 0xe2, 0x96, 0x33, 0xb4, 0x7d, 0xe2, 0xf6, 0xed, 0xc0, 0x68, 0x66, 0x4e, 0x41, 0x31, 0x9e, + 0x42, 0x4b, 0xa7, 0xc9, 0x0c, 0x08, 0xea, 0x19, 0xa3, 0x6c, 0xd5, 0x24, 0x8d, 0x56, 0xa6, 0x67, + 0x8c, 0xa1, 0x55, 0x62, 0xaa, 0x5d, 0x59, 0x20, 0xc8, 0x86, 0x63, 0x51, 0xfe, 0x82, 0x35, 0x78, + 0xb2, 0xe9, 0x7b, 0x3b, 0xae, 0xbd, 0xe8, 0x0d, 0x3d, 0xdf, 0x68, 0x67, 0x4e, 0x6e, 0x31, 0x7e, + 0x82, 0xbe, 0x57, 0xc2, 0x79, 0x50, 0x68, 0x11, 0xa6, 0xa3, 0xa2, 0x87, 0xe4, 0x59, 0x68, 0x40, + 0xe6, 0x3c, 0x1f, 0x43, 0x53, 0x22, 0xea, 0x20, 0x55, 0x26, 0x15, 0x84, 0xaa, 0x84, 0x31, 0x55, + 0x00, 0x42, 0x89, 0x54, 0x10, 0x9a, 0x56, 0x41, 0xe8, 0x14, 0x6c, 0x1c, 0x28, 0x00, 0xa1, 0x44, + 0x2a, 0x08, 0x4d, 0xd3, 0xa9, 0x5a, 0xb6, 0xd4, 0xf3, 0x9e, 0x50, 0x7d, 0x32, 0x66, 0x32, 0xa7, + 0x6a, 0xa5, 0xb7, 0x04, 0x21, 0x9d, 0xaa, 0x93, 0xcc, 0x74, 0x25, 0x14, 0xe5, 0xcd, 0x0f, 0x9d, + 0x4d, 0xd7, 0x38, 0x38, 0x46, 0x97, 0x29, 0x1a, 0xa3, 0xa2, 0x2b, 0x21, 0x8d, 0x0d, 0xdd, 0x12, + 0x66, 0xb9, 0x46, 0xc2, 0x25, 0x67, 0xd7, 0x38, 0x94, 0x39, 0x0d, 0xc5, 0x28, 0x4b, 0xce, 0xae, + 0xb4, 0x4b, 0xce, 0xa2, 0x36, 0x2d, 0x9a, 0xe4, 0x8c, 0x23, 0x05, 0x4d, 0x8b, 0x08, 0xd5, 0xa6, + 0x45, 0x79, 0x6a, 0xd3, 0xee, 0x59, 0x21, 0x79, 0x66, 0x3c, 0x5f, 0xd0, 0x34, 0x46, 0xa5, 0x36, + 0x8d, 0x65, 0xd0, 0xd9, 0x2d, 0xca, 0x78, 0x4c, 0xfc, 0xd0, 0x19, 0x58, 0x43, 0xde, 0x55, 0x27, + 0x33, 0xe7, 0xa0, 0x18, 0x4f, 0xa3, 0xa6, 0xb3, 0x5b, 0x26, 0x8c, 0xda, 0xf0, 0x87, 0xd6, 0xfa, + 0x90, 0x60, 0xef, 0xa9, 0x71, 0xaa, 0xa0, 0xe1, 0x11, 0xa1, 0xda, 0xf0, 0x28, 0x4f, 0xf5, 0x2d, + 0x9f, 0x74, 0xec, 0x4d, 0x12, 0x1a, 0x67, 0x0a, 0x7c, 0x0b, 0x27, 0x53, 0x7d, 0x0b, 0xcf, 0x91, + 0x1e, 0x60, 0xc9, 0x0a, 0xad, 0x5d, 0x87, 0x3c, 0x7d, 0xec, 0x90, 0xa7, 0x74, 0x62, 0x7f, 0x6e, + 0x8c, 0x07, 0x88, 0x68, 0xbb, 0x82, 0x58, 0x7a, 0x80, 0x04, 0x88, 0xf4, 0x00, 0x6a, 0xbe, 0x70, + 0xeb, 0x87, 0xc7, 0x78, 0x00, 0x0d, 0x5f, 0xfa, 0xf8, 0x3c, 0x28, 0x64, 0xc1, 0xd1, 0x54, 0xd1, + 0x03, 0xdf, 0x26, 0xbe, 0xf1, 0x22, 0x13, 0xf2, 0x6a, 0xb1, 0x10, 0x46, 0xde, 0x2b, 0xe1, 0x1c, + 0xa0, 0x94, 0x88, 0x35, 0x6f, 0xc7, 0x1f, 0x10, 0xda, 0x4f, 0xaf, 0x4c, 0x22, 0x42, 0x92, 0xa7, + 0x44, 0xc8, 0x12, 0xb4, 0x0b, 0x2f, 0xca, 0x12, 0x2a, 0x98, 0xcd, 0xa2, 0x4c, 0xba, 0xd8, 0xc1, + 0x9c, 0x66, 0x92, 0xba, 0xe3, 0x25, 0x25, 0xb9, 0x7a, 0x25, 0x3c, 0x1e, 0x16, 0xed, 0xc1, 0x71, + 0x8d, 0x80, 0xcf, 0xf3, 0xaa, 0xe0, 0x57, 0x99, 0xe0, 0x73, 0xe3, 0x05, 0xa7, 0xd8, 0x7a, 0x25, + 0x5c, 0x00, 0x8c, 0x46, 0xf0, 0x82, 0xd6, 0x19, 0x91, 0x61, 0x0b, 0x15, 0xf9, 0x12, 0x93, 0x7b, + 0x76, 0xbc, 0x5c, 0x9d, 0xa7, 0x57, 0xc2, 0xe3, 0x20, 0xe9, 0x8e, 0x2b, 0xb3, 0x98, 0x8e, 0xe4, + 0x17, 0x33, 0x97, 0x3d, 0x39, 0xe2, 0xf8, 0x58, 0xe6, 0x82, 0x65, 0x6a, 0xbe, 0xe8, 0xce, 0x2f, + 0x4f, 0xaa, 0xf9, 0xb2, 0x1f, 0xf3, 0xa0, 0xb4, 0xb1, 0xa3, 0x45, 0x0f, 0x2d, 0x7f, 0x93, 0x84, + 0xbc, 0xa3, 0xfb, 0x36, 0x6d, 0xd4, 0xff, 0x9f, 0x64, 0xec, 0x52, 0x6c, 0xda, 0xd8, 0x65, 0x02, + 0xa3, 0x00, 0x66, 0x35, 0x8a, 0x7e, 0xb0, 0xe8, 0x0d, 0x87, 0x64, 0x10, 0xf5, 0xe6, 0x4f, 0x30, + 0xc1, 0x6f, 0x8c, 0x17, 0x9c, 0x60, 0xea, 0x95, 0xf0, 0x58, 0xd0, 0x54, 0x7b, 0x1f, 0x0c, 0xed, + 0x84, 0xce, 0x18, 0x13, 0xe9, 0x6a, 0x92, 0x2d, 0xd5, 0xde, 0x14, 0x45, 0x4a, 0x57, 0x15, 0x0a, + 0xda, 0xdc, 0x63, 0x93, 0xe8, 0xaa, 0xce, 0x93, 0xd2, 0x55, 0xbd, 0x98, 0xce, 0x6e, 0x3b, 0x01, + 0xf1, 0x19, 0xc6, 0x1d, 0xcf, 0x71, 0x8d, 0x97, 0x32, 0x67, 0xb7, 0x47, 0x01, 0xf1, 0x85, 0x20, + 0x4a, 0x45, 0x67, 0x37, 0x8d, 0x4d, 0xc3, 0xb9, 0x47, 0x36, 0x42, 0xe3, 0x44, 0x11, 0x0e, 0xa5, + 0xd2, 0x70, 0x68, 0x06, 0x9d, 0x29, 0x64, 0xc6, 0x1a, 0xa1, 0xa3, 0x82, 0x2d, 0x77, 0x93, 0x18, + 0x2f, 0x67, 0xce, 0x14, 0x0a, 0x9c, 0x42, 0x4c, 0x67, 0x8a, 0x2c, 0x10, 0xba, 0xf3, 0x97, 0xf9, + 0x74, 0x45, 0xc6, 0xa1, 0xe7, 0x32, 0x77, 0xfe, 0x0a, 0xb4, 0x24, 0xa5, 0x7b, 0x90, 0x34, 0x00, + 0xfa, 0x18, 0xd4, 0x46, 0x8e, 0xbb, 0x69, 0xd8, 0x0c, 0xe8, 0xb9, 0x04, 0xd0, 0xaa, 0xe3, 0x6e, + 0xf6, 0x4a, 0x98, 0x91, 0xa0, 0x77, 0x00, 0x46, 0xbe, 0x37, 0x20, 0x41, 0xb0, 0x42, 0x9e, 0x1a, + 0x84, 0x31, 0x98, 0x49, 0x06, 0x4e, 0xd0, 0x5d, 0x21, 0x74, 0x5e, 0x56, 0xe8, 0xd1, 0x32, 0x1c, + 0x10, 0x29, 0x61, 0xe5, 0x1b, 0x99, 0x8b, 0xbf, 0x08, 0x20, 0x0e, 0x37, 0x69, 0x5c, 0x74, 0xef, + 0x23, 0x32, 0x96, 0x3c, 0x97, 0x18, 0x9b, 0x99, 0x7b, 0x9f, 0x08, 0x84, 0x92, 0xd0, 0x35, 0x96, + 0xc2, 0x81, 0x16, 0x60, 0x3a, 0xdc, 0xf2, 0x89, 0x65, 0xaf, 0x85, 0x56, 0xb8, 0x13, 0x18, 0x6e, + 0xe6, 0x32, 0x8d, 0x17, 0x76, 0x1f, 0x32, 0x4a, 0xba, 0x04, 0x55, 0x79, 0xd0, 0x0a, 0x74, 0xe8, + 0x46, 0xe8, 0x9e, 0xb3, 0xed, 0x84, 0x98, 0x58, 0x83, 0x2d, 0x62, 0x1b, 0x5e, 0xe6, 0x26, 0x8a, + 0x2e, 0x7b, 0xbb, 0x2a, 0x1d, 0x5d, 0xad, 0x24, 0x79, 0x51, 0x0f, 0x66, 0x68, 0xde, 0xda, 0xc8, + 0x1a, 0x90, 0x47, 0x81, 0xb5, 0x49, 0x8c, 0x51, 0xa6, 0x06, 0x32, 0xb4, 0x98, 0x8a, 0x2e, 0x56, + 0x74, 0xbe, 0x08, 0xe9, 0x9e, 0x37, 0xb0, 0x86, 0x1c, 0xe9, 0xf3, 0xf9, 0x48, 0x31, 0x55, 0x84, + 0x14, 0xe7, 0x68, 0x6d, 0xe4, 0x7d, 0x6f, 0x1b, 0xbb, 0x05, 0x6d, 0x14, 0x74, 0x5a, 0x1b, 0x45, + 0x1e, 0xc5, 0x73, 0xbd, 0xd0, 0xd9, 0x70, 0x06, 0xc2, 0x7e, 0x5d, 0xdb, 0xf0, 0x33, 0xf1, 0x56, + 0x14, 0xb2, 0xee, 0x1a, 0x8f, 0x2c, 0xa5, 0x78, 0xd1, 0x43, 0x40, 0x6a, 0x9e, 0x50, 0xaa, 0x80, + 0x21, 0xce, 0x8d, 0x43, 0x94, 0x9a, 0x95, 0xc1, 0x4f, 0x6b, 0x39, 0xb2, 0xf6, 0xe8, 0xf6, 0x76, + 0xc1, 0xf7, 0x2c, 0x7b, 0x60, 0x05, 0xa1, 0x11, 0x66, 0xd6, 0x72, 0x95, 0x93, 0x75, 0x25, 0x1d, + 0xad, 0x65, 0x92, 0x97, 0xe2, 0x6d, 0x93, 0xed, 0x75, 0xe2, 0x07, 0x5b, 0xce, 0x48, 0xd4, 0x71, + 0x27, 0x13, 0xef, 0xbe, 0x24, 0x8b, 0x6b, 0x98, 0xe2, 0xa5, 0x0b, 0x71, 0x16, 0xa7, 0x5e, 0xdb, + 0x73, 0x07, 0x5c, 0x19, 0x05, 0xe8, 0xd3, 0xcc, 0x85, 0x38, 0xd3, 0x8c, 0x6e, 0x4c, 0x1c, 0x43, + 0x67, 0xc3, 0xa0, 0xf7, 0xe1, 0x30, 0x2b, 0x98, 0xdf, 0x09, 0x3d, 0xbe, 0xfe, 0x9d, 0xb7, 0x6d, + 0x62, 0x1b, 0x5f, 0xc8, 0xdc, 0x49, 0x73, 0xf8, 0x04, 0x2d, 0x8b, 0xa5, 0x64, 0x60, 0xa0, 0xbb, + 0x70, 0x70, 0x74, 0x61, 0xa4, 0xd5, 0xfa, 0x59, 0xe6, 0xa2, 0x7c, 0xf5, 0xc2, 0x6a, 0xb2, 0xba, + 0x49, 0x4e, 0x6a, 0xc6, 0xce, 0xf6, 0xc8, 0xf3, 0xc3, 0xdb, 0x8e, 0xeb, 0x04, 0x5b, 0xc6, 0x5e, + 0xa6, 0x19, 0xf7, 0x19, 0x49, 0x97, 0xd3, 0x50, 0x33, 0x56, 0x79, 0xd0, 0x25, 0x68, 0x0e, 0xb6, + 0x2c, 0x5a, 0x3b, 0xe3, 0x2b, 0x3c, 0x98, 0x7c, 0x2c, 0xc1, 0xbf, 0xb8, 0x65, 0x85, 0x22, 0xfc, + 0x12, 0x91, 0xa2, 0xeb, 0x00, 0xf4, 0xa7, 0x68, 0xc1, 0x4f, 0x96, 0x33, 0xfd, 0x20, 0x63, 0x94, + 0xb5, 0x57, 0x18, 0xd0, 0x7b, 0xf0, 0x5c, 0x9c, 0xa2, 0x0e, 0x80, 0xc7, 0x13, 0xbe, 0x5a, 0xce, + 0xf4, 0xe4, 0x0a, 0x8e, 0xa4, 0xed, 0x95, 0x70, 0x16, 0x04, 0x9d, 0x80, 0xe3, 0xec, 0xe8, 0xb0, + 0x25, 0x76, 0x74, 0x3f, 0x55, 0xce, 0x0c, 0x8b, 0x29, 0x12, 0x52, 0x3c, 0x74, 0x02, 0x1e, 0x03, + 0x99, 0x94, 0xe8, 0xf2, 0xf0, 0x9f, 0x94, 0xf8, 0xcd, 0x09, 0x24, 0x26, 0x78, 0x92, 0x12, 0x13, + 0xc5, 0x51, 0xe7, 0x8b, 0xb5, 0xcc, 0xd7, 0xc6, 0x74, 0xbe, 0x5c, 0xb7, 0x28, 0x0c, 0xe8, 0x1e, + 0x1c, 0xa4, 0x29, 0x0a, 0x46, 0xc4, 0x00, 0x7e, 0xa3, 0x9c, 0xa9, 0x83, 0x4a, 0x25, 0x19, 0x35, + 0xd5, 0xc1, 0x04, 0x2b, 0x5d, 0xc2, 0x8e, 0x76, 0x82, 0xad, 0x65, 0x77, 0xe0, 0xef, 0xb1, 0xb8, + 0xde, 0x5d, 0xb2, 0x27, 0x50, 0x7f, 0xba, 0x9c, 0xb9, 0xeb, 0x59, 0x4d, 0x92, 0xc7, 0x3a, 0x92, + 0x07, 0xb5, 0xd0, 0x84, 0xfa, 0xae, 0x35, 0xdc, 0x21, 0xe6, 0x2f, 0x36, 0xa0, 0x46, 0xab, 0x65, + 0xfe, 0x73, 0x19, 0xaa, 0x54, 0x13, 0x67, 0xa0, 0xe2, 0xd8, 0x06, 0x3f, 0xbe, 0xaa, 0x38, 0x36, + 0x32, 0xa0, 0xe9, 0xd1, 0xcd, 0x83, 0x3c, 0x4c, 0x8b, 0x92, 0x68, 0x0e, 0xa6, 0xad, 0x8d, 0x90, + 0xf8, 0x0f, 0x44, 0x71, 0x83, 0x15, 0x6b, 0x79, 0xd4, 0x1a, 0xc4, 0xc1, 0x9c, 0x88, 0x28, 0x9a, + 0x89, 0xc3, 0x36, 0x2a, 0x3b, 0xd2, 0x81, 0x88, 0x14, 0x1d, 0x85, 0x46, 0xb0, 0xb3, 0xde, 0xb7, + 0x03, 0xa3, 0x76, 0xa2, 0x7a, 0xa6, 0x8d, 0x45, 0x0a, 0xbd, 0x0d, 0xd3, 0x36, 0x19, 0x11, 0xd7, + 0x26, 0xee, 0xc0, 0x21, 0x81, 0x51, 0x67, 0x47, 0x82, 0xc7, 0xba, 0xfc, 0x38, 0xb1, 0x1b, 0x1d, + 0x27, 0x76, 0xd7, 0xd8, 0x71, 0x22, 0xd6, 0x88, 0xcd, 0xf3, 0xd0, 0x10, 0x03, 0x96, 0x6c, 0x62, + 0x2c, 0xae, 0xa2, 0x8a, 0x33, 0x37, 0xa0, 0x21, 0x06, 0x25, 0xc9, 0xa1, 0x34, 0xab, 0xf2, 0xc3, + 0x34, 0xab, 0xaa, 0xc9, 0xf9, 0x32, 0x1c, 0x4c, 0x9a, 0x5d, 0x52, 0xe0, 0x02, 0xb4, 0x7d, 0x69, + 0xd6, 0x95, 0x84, 0xdf, 0x4c, 0x89, 0xec, 0x4a, 0x20, 0x1c, 0xb3, 0xe5, 0x8a, 0xff, 0x34, 0x1c, + 0xcb, 0xb3, 0xc5, 0x0e, 0x54, 0x1d, 0x9b, 0x1f, 0xbd, 0xb6, 0x31, 0xfd, 0x49, 0x41, 0x9c, 0x80, + 0x52, 0xb0, 0x5a, 0xb4, 0xb0, 0x48, 0x4d, 0x02, 0x9e, 0x34, 0xbb, 0x0f, 0x0f, 0xfe, 0x08, 0xa6, + 0x14, 0x6b, 0x42, 0x5d, 0xa8, 0x07, 0xf4, 0x87, 0x38, 0x5e, 0x35, 0x32, 0x3a, 0x88, 0x11, 0x62, + 0x4e, 0x96, 0x3b, 0xee, 0x7f, 0xdc, 0x80, 0xa6, 0x38, 0xf1, 0x33, 0x57, 0xa0, 0xc6, 0xce, 0x5f, + 0x0f, 0x43, 0xdd, 0x71, 0x6d, 0xf2, 0x8c, 0x61, 0xd7, 0x31, 0x4f, 0xa0, 0xf3, 0xd0, 0x14, 0xa7, + 0x7f, 0x62, 0x50, 0xf2, 0xce, 0x92, 0x23, 0x32, 0xf3, 0x7d, 0x68, 0x46, 0xe7, 0xb0, 0xb3, 0xd0, + 0x1e, 0xf9, 0x1e, 0x5d, 0xd3, 0xf4, 0xa3, 0xa1, 0x8e, 0x33, 0xd0, 0x9b, 0xd0, 0xb4, 0xc5, 0x49, + 0x6f, 0x45, 0x4c, 0x23, 0x39, 0x6a, 0x1e, 0xd1, 0x99, 0x5f, 0x29, 0x43, 0x83, 0x1f, 0xc7, 0x9a, + 0xbb, 0x52, 0x75, 0x2f, 0x43, 0x63, 0xc0, 0xf2, 0x8c, 0xe4, 0x51, 0xac, 0x56, 0x43, 0x71, 0xbe, + 0x8b, 0x05, 0x31, 0x65, 0x0b, 0xb8, 0xc3, 0xad, 0x8c, 0x65, 0xe3, 0x63, 0x89, 0x05, 0xf1, 0x7f, + 0x9b, 0xdc, 0x7f, 0xa8, 0xc0, 0x01, 0xfd, 0x94, 0x77, 0x16, 0xda, 0x03, 0x79, 0x6e, 0x2c, 0x7a, + 0x57, 0x66, 0xa0, 0x07, 0x00, 0x83, 0xa1, 0x43, 0xdc, 0x90, 0x9d, 0x33, 0x54, 0x32, 0xb7, 0xaf, + 0x99, 0x87, 0xbe, 0xdd, 0x45, 0xc9, 0x86, 0x15, 0x08, 0x74, 0x13, 0xea, 0xc1, 0xc0, 0x1b, 0x71, + 0x37, 0x37, 0xa3, 0xc4, 0x33, 0xf4, 0x6a, 0xcf, 0xef, 0x84, 0x5b, 0x7c, 0x89, 0x3c, 0x3f, 0x72, + 0xd6, 0x28, 0x03, 0xe6, 0x7c, 0xe6, 0x2f, 0x95, 0x01, 0x62, 0x6c, 0x74, 0x42, 0x6e, 0x49, 0x56, + 0xac, 0xed, 0xa8, 0x01, 0x6a, 0x96, 0x42, 0xb1, 0x6a, 0x85, 0x5b, 0xc2, 0x39, 0xab, 0x59, 0x08, + 0x41, 0xcd, 0xa5, 0xcc, 0xfc, 0xca, 0x02, 0xfb, 0x8d, 0xce, 0xc2, 0xa1, 0xc0, 0xd9, 0x74, 0xad, + 0x70, 0xc7, 0x27, 0x8f, 0x89, 0xef, 0x6c, 0x38, 0xc4, 0x66, 0x75, 0x6e, 0xe1, 0x74, 0x81, 0xf9, + 0x26, 0x1c, 0x4a, 0x1f, 0x6b, 0x8f, 0xed, 0x59, 0xf3, 0x67, 0xda, 0xd0, 0xe0, 0x11, 0x0b, 0xf3, + 0xdf, 0x2b, 0x52, 0xd9, 0xcd, 0xbf, 0x28, 0x43, 0x9d, 0x9f, 0xdc, 0x26, 0x5d, 0xdb, 0x6d, 0x55, + 0xd1, 0xab, 0x19, 0xdb, 0xf9, 0xac, 0x93, 0xec, 0xee, 0x5d, 0xb2, 0xf7, 0x98, 0x4e, 0x60, 0x52, + 0xfb, 0x73, 0x9d, 0xc4, 0x1d, 0x68, 0x45, 0xc4, 0xd4, 0xe5, 0x3c, 0x21, 0x7b, 0x42, 0x38, 0xfd, + 0x89, 0xce, 0x8a, 0x89, 0x50, 0xda, 0x6f, 0xd2, 0xc8, 0xb8, 0x14, 0x31, 0x5b, 0x7e, 0x16, 0xaa, + 0x6b, 0x24, 0x4c, 0x35, 0x61, 0xff, 0xb6, 0x9a, 0x5b, 0xdb, 0x45, 0xa8, 0xf3, 0xd3, 0xf3, 0xa4, + 0x0c, 0x04, 0xb5, 0x27, 0x64, 0x2f, 0x72, 0x55, 0xec, 0x77, 0x2e, 0xc8, 0x9f, 0x55, 0x61, 0x5a, + 0x3d, 0x31, 0x34, 0x97, 0x73, 0xe7, 0x76, 0x36, 0x5b, 0xc7, 0x73, 0xbb, 0x48, 0x52, 0x77, 0xc7, + 0xb0, 0x98, 0x6a, 0xb4, 0x31, 0x4f, 0x98, 0x5d, 0x68, 0x88, 0x83, 0xd8, 0x24, 0x92, 0xa4, 0xaf, + 0xa8, 0xf4, 0x77, 0xa0, 0x25, 0xcf, 0x55, 0x3f, 0xac, 0x6c, 0x1f, 0x5a, 0xf2, 0x00, 0xf5, 0x30, + 0xd4, 0x43, 0x2f, 0xb4, 0x86, 0x0c, 0xae, 0x8a, 0x79, 0x82, 0xea, 0xa5, 0x4b, 0x9e, 0x85, 0x8b, + 0xd2, 0x1d, 0x57, 0x71, 0x9c, 0xc1, 0xbd, 0x2d, 0xd9, 0xe5, 0xa5, 0x55, 0x5e, 0x2a, 0x33, 0x62, + 0x99, 0x35, 0x55, 0xe6, 0x1e, 0x34, 0xc4, 0xa9, 0xaa, 0x2c, 0x2f, 0x2b, 0xe5, 0x68, 0x1e, 0xea, + 0x9b, 0xb4, 0x5c, 0x8c, 0xfa, 0xeb, 0x09, 0xa3, 0xe7, 0xc1, 0x92, 0x45, 0xcf, 0x0d, 0xa9, 0x1a, + 0xeb, 0xc1, 0x62, 0xcc, 0x39, 0xe9, 0x10, 0xfa, 0xfc, 0x88, 0x9c, 0x1b, 0xa1, 0x48, 0x99, 0xbf, + 0x53, 0x86, 0xb6, 0xbc, 0x93, 0x60, 0xbe, 0x9f, 0x67, 0x3c, 0xf3, 0x70, 0xc0, 0x17, 0x54, 0xd4, + 0x50, 0x23, 0x13, 0x7a, 0x21, 0x51, 0x13, 0xac, 0xd0, 0x60, 0x9d, 0xc3, 0x7c, 0x27, 0x77, 0x50, + 0xe7, 0x60, 0x3a, 0x22, 0xbd, 0x1b, 0xab, 0x9e, 0x96, 0x67, 0x9a, 0x92, 0x3b, 0x35, 0x9d, 0x9b, + 0x1b, 0x30, 0xad, 0x9e, 0x4c, 0x9a, 0x8f, 0xb3, 0xad, 0xe7, 0x26, 0x15, 0xa3, 0x9c, 0x82, 0x56, + 0x12, 0xe1, 0x97, 0xa8, 0x09, 0x31, 0x09, 0xd6, 0x18, 0xcc, 0x63, 0x50, 0xe7, 0xf7, 0x25, 0x12, + 0xc8, 0xe6, 0x9f, 0x0f, 0xa0, 0xce, 0x06, 0xc1, 0xbc, 0xc8, 0x0d, 0xe0, 0x2c, 0x34, 0x58, 0xec, + 0x2f, 0xba, 0x4d, 0x76, 0x38, 0x6b, 0xc4, 0xb0, 0xa0, 0x31, 0x17, 0x61, 0x4a, 0x39, 0xa9, 0xa6, + 0x1a, 0xcb, 0x0a, 0xa4, 0x16, 0x44, 0x49, 0x64, 0x42, 0x8b, 0xce, 0xda, 0xc2, 0x0f, 0xd3, 0xf6, + 0xcb, 0xb4, 0x79, 0x52, 0x2e, 0x3b, 0x4d, 0x71, 0x32, 0xdf, 0x97, 0xbd, 0x24, 0xd3, 0xe6, 0x67, + 0xa0, 0x2d, 0x0f, 0xb4, 0xd1, 0x03, 0x98, 0x16, 0x07, 0xda, 0x3c, 0x1e, 0x47, 0x89, 0x67, 0x0a, + 0xb4, 0xeb, 0x21, 0x79, 0x16, 0xb2, 0x33, 0xf1, 0xee, 0xc3, 0xbd, 0x11, 0xc1, 0x1a, 0x80, 0xf9, + 0x8d, 0x33, 0xac, 0xe7, 0xcd, 0x11, 0xb4, 0xe4, 0x29, 0x5e, 0x72, 0x14, 0xae, 0x72, 0xd7, 0x58, + 0x29, 0x3c, 0x82, 0xe6, 0xfc, 0xd4, 0x01, 0x33, 0x0f, 0x6a, 0xbe, 0x00, 0xd5, 0xbb, 0x64, 0x8f, + 0x5a, 0x08, 0x77, 0xa4, 0xc2, 0x42, 0xb8, 0xc3, 0xec, 0x43, 0x43, 0x9c, 0xa6, 0x27, 0xe5, 0x9d, + 0x83, 0xc6, 0x06, 0x3f, 0xa0, 0x2f, 0x70, 0x99, 0x82, 0xcc, 0xbc, 0x09, 0x53, 0xea, 0x19, 0x7a, + 0x12, 0xef, 0x04, 0x4c, 0x0d, 0x94, 0x53, 0x7a, 0x3e, 0x0c, 0x6a, 0x96, 0x49, 0x74, 0x75, 0x4c, + 0x21, 0x2c, 0x67, 0xea, 0xe1, 0xcb, 0x99, 0xdd, 0x3e, 0x46, 0x1b, 0xef, 0xc2, 0xc1, 0xe4, 0x61, + 0x79, 0x52, 0xd2, 0x19, 0x38, 0xb8, 0x9e, 0x38, 0x9a, 0xe7, 0x3e, 0x30, 0x99, 0x6d, 0xf6, 0xa1, + 0xce, 0x0f, 0x33, 0x93, 0x10, 0xe7, 0xa1, 0x6e, 0xb1, 0xc3, 0xd2, 0x0a, 0x5b, 0x6f, 0x98, 0x99, + 0xb5, 0x64, 0xac, 0x98, 0x13, 0x9a, 0x0e, 0x1c, 0xd0, 0xcf, 0x47, 0x93, 0x90, 0x3d, 0x38, 0xb0, + 0xab, 0x9d, 0xc3, 0x72, 0xe8, 0xb9, 0x4c, 0x68, 0x0d, 0x0a, 0xeb, 0x8c, 0xe6, 0x57, 0x1b, 0x50, + 0x63, 0x07, 0xfc, 0x49, 0x11, 0x57, 0xa0, 0x16, 0x92, 0x67, 0xd1, 0x62, 0x79, 0x6e, 0xec, 0x6d, + 0x01, 0x1e, 0x65, 0x66, 0xf4, 0xe8, 0xe3, 0x74, 0x65, 0xbf, 0x37, 0x8c, 0x36, 0x91, 0xaf, 0x8c, + 0x67, 0x5c, 0xa3, 0xa4, 0x98, 0x73, 0x50, 0x56, 0x66, 0x0b, 0xe2, 0x42, 0x4a, 0x01, 0x2b, 0x33, + 0x42, 0xcc, 0x39, 0xd0, 0x4d, 0x68, 0x0e, 0xb6, 0xc8, 0xe0, 0x09, 0xb1, 0xc5, 0x4d, 0x94, 0x53, + 0xe3, 0x99, 0x17, 0x39, 0x31, 0x8e, 0xb8, 0xa8, 0xec, 0x01, 0x1b, 0xdd, 0xc6, 0x24, 0xb2, 0xd9, + 0x88, 0x63, 0xce, 0x81, 0x96, 0xa1, 0xed, 0x0c, 0x3c, 0x77, 0x79, 0xdb, 0xfb, 0x9c, 0x23, 0xae, + 0x9c, 0xbc, 0x3a, 0x9e, 0xbd, 0x1f, 0x91, 0xe3, 0x98, 0x33, 0x82, 0xe9, 0x6f, 0xd3, 0xad, 0x6a, + 0x6b, 0x52, 0x18, 0x46, 0x8e, 0x63, 0x4e, 0x73, 0x56, 0x8c, 0x67, 0xb6, 0x91, 0xdf, 0x86, 0x3a, + 0xeb, 0x72, 0x74, 0x5d, 0x2d, 0x9e, 0x51, 0x24, 0xe5, 0x7a, 0x2c, 0x31, 0x54, 0x12, 0x87, 0xf5, + 0xbf, 0x8e, 0x33, 0x35, 0x09, 0x8e, 0x18, 0x37, 0x8e, 0xf3, 0x12, 0x34, 0xc5, 0x50, 0xe8, 0x15, + 0x6e, 0x45, 0x04, 0x2f, 0x42, 0x9d, 0x1b, 0x66, 0x76, 0x7b, 0x5e, 0x86, 0xb6, 0xec, 0xcc, 0xf1, + 0x24, 0xac, 0x77, 0x72, 0x48, 0xbe, 0x59, 0x81, 0x3a, 0xbf, 0xe8, 0x90, 0x76, 0xb5, 0xaa, 0x15, + 0xbc, 0x32, 0xfe, 0xde, 0x84, 0x6a, 0x06, 0xb7, 0xd9, 0x8e, 0x91, 0xae, 0xef, 0xe5, 0xe5, 0xe5, + 0x33, 0x05, 0xdc, 0xab, 0x11, 0x3d, 0x8e, 0x59, 0x0b, 0x86, 0xf3, 0x01, 0xb4, 0x25, 0x17, 0x5a, + 0xd0, 0x87, 0xf4, 0xec, 0xd8, 0xa1, 0x48, 0x8a, 0x14, 0x80, 0xbf, 0x52, 0x86, 0xea, 0x92, 0xb3, + 0x9b, 0xea, 0x87, 0xb7, 0x22, 0xab, 0x2e, 0x72, 0x07, 0x4b, 0xce, 0xae, 0x66, 0xd4, 0xe6, 0x72, + 0xa4, 0x71, 0xef, 0xe8, 0xd5, 0x3b, 0x3d, 0x7e, 0x05, 0x16, 0xc3, 0xf0, 0x8a, 0xfd, 0x7c, 0x13, + 0x6a, 0xec, 0x0e, 0x51, 0x96, 0x9f, 0xda, 0x1b, 0x15, 0x57, 0x8c, 0x9d, 0x52, 0xb0, 0x09, 0x97, + 0xd1, 0x73, 0x3f, 0x65, 0x85, 0xc5, 0x7e, 0x8a, 0x1f, 0xba, 0xa8, 0xc1, 0x88, 0x2b, 0x50, 0xdb, + 0x76, 0xc4, 0x66, 0xad, 0x50, 0xe4, 0x7d, 0x67, 0x9b, 0x60, 0x46, 0x4f, 0xf9, 0xb6, 0xac, 0x60, + 0x4b, 0x78, 0xa8, 0x02, 0xbe, 0x9e, 0x15, 0x6c, 0x61, 0x46, 0x4f, 0xf9, 0xd8, 0xe6, 0xb0, 0x31, + 0x09, 0x1f, 0xdd, 0x70, 0x8a, 0x0d, 0xe4, 0x15, 0xa8, 0x05, 0xce, 0x17, 0x88, 0xf0, 0x49, 0x05, + 0x7c, 0x6b, 0xce, 0x17, 0x08, 0x66, 0xf4, 0xb1, 0x0b, 0x6f, 0x4d, 0xd6, 0x35, 0x8a, 0x0b, 0x7f, + 0x08, 0x33, 0xa1, 0x76, 0x12, 0x2e, 0x2e, 0xb2, 0x9d, 0x2d, 0x18, 0x17, 0x8d, 0x07, 0x27, 0x30, + 0xa8, 0x11, 0xb0, 0x7d, 0x74, 0xb6, 0x11, 0xbc, 0x08, 0xf5, 0x4f, 0x3a, 0x76, 0xb8, 0xa5, 0x17, + 0xd7, 0x35, 0x97, 0x47, 0x87, 0x6d, 0x5f, 0x2e, 0x4f, 0x1d, 0x75, 0x8e, 0xb3, 0x04, 0x35, 0xaa, + 0x3e, 0xfb, 0xd3, 0xe3, 0x58, 0xeb, 0x3e, 0x94, 0x03, 0x56, 0x3b, 0x9a, 0xe3, 0xcc, 0x42, 0x8d, + 0x6a, 0x48, 0x4e, 0x97, 0xcc, 0x42, 0x8d, 0xea, 0x5d, 0x7e, 0x29, 0x1d, 0x6d, 0xbd, 0xb4, 0x1a, + 0x95, 0x9e, 0x86, 0x19, 0x7d, 0x38, 0x72, 0x50, 0xfe, 0xb4, 0x09, 0x35, 0x76, 0x21, 0x2f, 0x69, + 0x91, 0x9f, 0x80, 0x03, 0x7c, 0xfc, 0x16, 0xc4, 0x12, 0xbc, 0x92, 0x79, 0x0c, 0xa0, 0x5f, 0xf3, + 0x13, 0x2a, 0x20, 0x58, 0xb0, 0x8e, 0x30, 0xf9, 0xa2, 0x82, 0x41, 0x69, 0x1a, 0xf9, 0x8e, 0x5c, + 0xbc, 0xd6, 0x0a, 0x6e, 0x83, 0x32, 0x5e, 0xbe, 0x04, 0x8e, 0x56, 0xb2, 0x68, 0x01, 0x5a, 0x74, + 0x6a, 0xa5, 0xdd, 0x25, 0xcc, 0xf6, 0xf4, 0x78, 0xfe, 0xbe, 0xa0, 0xc6, 0x92, 0x8f, 0x4e, 0xec, + 0x03, 0xcb, 0xb7, 0x59, 0xad, 0x84, 0x0d, 0xbf, 0x3a, 0x1e, 0x64, 0x31, 0x22, 0xc7, 0x31, 0x27, + 0xba, 0x0b, 0x53, 0x36, 0x91, 0x71, 0x02, 0x61, 0xd4, 0x1f, 0x1b, 0x0f, 0xb4, 0x14, 0x33, 0x60, + 0x95, 0x9b, 0xd6, 0x29, 0xda, 0x1b, 0x06, 0x85, 0x8b, 0x0d, 0x06, 0x15, 0xdf, 0xba, 0x8f, 0x39, + 0xcd, 0x53, 0x70, 0x40, 0x1b, 0xb7, 0x8f, 0x74, 0xd5, 0xa1, 0x8e, 0x25, 0xc7, 0xb9, 0x2a, 0xb7, + 0x28, 0x6f, 0xe8, 0xcb, 0x8e, 0xdc, 0x1d, 0x89, 0x60, 0xbc, 0x07, 0xad, 0x68, 0x60, 0xd0, 0x2d, + 0xbd, 0x0e, 0xaf, 0x15, 0xd7, 0x41, 0x8e, 0xa9, 0x40, 0x5b, 0x81, 0xb6, 0x1c, 0x21, 0x34, 0xaf, + 0xc3, 0xbd, 0x5e, 0x0c, 0x17, 0x8f, 0xae, 0xc0, 0xc3, 0x30, 0xa5, 0x0c, 0x14, 0x5a, 0xd4, 0x11, + 0xdf, 0x28, 0x46, 0x54, 0x87, 0x39, 0x5e, 0xf5, 0xc8, 0x11, 0x53, 0x47, 0xa5, 0x1a, 0x8f, 0xca, + 0xef, 0x37, 0xa1, 0x25, 0x2f, 0xc1, 0x66, 0xec, 0x31, 0x77, 0xfc, 0x61, 0xe1, 0x1e, 0x33, 0xe2, + 0xef, 0x3e, 0xf2, 0x87, 0x98, 0x72, 0xd0, 0x21, 0x0e, 0x9d, 0x50, 0x9a, 0xea, 0xab, 0xc5, 0xac, + 0x0f, 0x29, 0x39, 0xe6, 0x5c, 0xe8, 0x81, 0xae, 0xe5, 0xb5, 0x31, 0x97, 0xa4, 0x34, 0x90, 0x5c, + 0x4d, 0xef, 0x43, 0xdb, 0xa1, 0x4b, 0xbf, 0x5e, 0x3c, 0xf3, 0xbe, 0x5e, 0x0c, 0xd7, 0x8f, 0x58, + 0x70, 0xcc, 0x4d, 0xeb, 0xb6, 0x61, 0xed, 0x52, 0xbb, 0x66, 0x60, 0x8d, 0x49, 0xeb, 0x76, 0x3b, + 0x66, 0xc2, 0x2a, 0x02, 0xba, 0x26, 0xd6, 0x2e, 0xcd, 0x02, 0xcf, 0x12, 0x77, 0x55, 0xbc, 0x7e, + 0x79, 0x2f, 0x35, 0xd3, 0x72, 0x33, 0x3e, 0x3f, 0x01, 0xca, 0xd8, 0xd9, 0x96, 0x8e, 0x20, 0x5f, + 0x19, 0xb5, 0x27, 0x1d, 0x41, 0x75, 0x75, 0x64, 0xbe, 0x00, 0xd5, 0x47, 0xfe, 0x30, 0x7f, 0xae, + 0x66, 0xc3, 0x9d, 0x53, 0xfc, 0x8a, 0x6e, 0x09, 0xf9, 0x0b, 0x7a, 0x39, 0x26, 0xb9, 0x38, 0x4a, + 0xa7, 0xe7, 0x10, 0x5d, 0x17, 0x13, 0xfa, 0x65, 0xdd, 0xde, 0x5e, 0x4a, 0xd8, 0x1b, 0xb5, 0xb0, + 0x55, 0x9f, 0xf0, 0x7b, 0x80, 0xca, 0x4c, 0x3e, 0xe9, 0x3c, 0x79, 0x27, 0x5a, 0x7f, 0xec, 0xcb, + 0x53, 0x24, 0xfb, 0x96, 0x63, 0x7d, 0xbd, 0x0c, 0x2d, 0x79, 0xc7, 0x39, 0x1d, 0x9d, 0x6f, 0x39, + 0x41, 0x8f, 0x58, 0x36, 0xf1, 0x85, 0xdd, 0xbe, 0x56, 0x78, 0x79, 0xba, 0xdb, 0x17, 0x1c, 0x58, + 0xf2, 0x9a, 0x27, 0xa0, 0x15, 0xe5, 0xe6, 0x6c, 0xca, 0xbe, 0x57, 0x81, 0x86, 0xb8, 0x1d, 0x9d, + 0xac, 0xc4, 0x0d, 0x68, 0x0c, 0xad, 0x3d, 0x6f, 0x27, 0xda, 0x32, 0x9d, 0x2e, 0xb8, 0x70, 0xdd, + 0xbd, 0xc7, 0xa8, 0xb1, 0xe0, 0x42, 0x6f, 0x43, 0x7d, 0xe8, 0x6c, 0x3b, 0xa1, 0x70, 0x1f, 0xa7, + 0x0a, 0xd9, 0xd9, 0x3d, 0x2a, 0xce, 0x43, 0x85, 0xb3, 0x4b, 0x91, 0xd1, 0x27, 0x2d, 0x85, 0xc2, + 0x1f, 0x33, 0x6a, 0x2c, 0xb8, 0xcc, 0x3b, 0xd0, 0xe0, 0xd5, 0xd9, 0xdf, 0x24, 0xa1, 0xb7, 0x24, + 0xd6, 0x74, 0x56, 0xb7, 0x9c, 0x55, 0xe9, 0x71, 0x68, 0x70, 0xe1, 0x39, 0x5a, 0xf3, 0xdd, 0xe7, + 0xd9, 0x7e, 0x67, 0x68, 0xde, 0x8b, 0x4f, 0x21, 0x3f, 0xfc, 0x59, 0x86, 0xf9, 0x10, 0x0e, 0x2e, + 0x59, 0xa1, 0xb5, 0x6e, 0x05, 0x04, 0x93, 0x81, 0xe7, 0xdb, 0x99, 0xa8, 0x3e, 0x2f, 0x12, 0x11, + 0xea, 0x7c, 0x54, 0x41, 0xf7, 0xe3, 0xd0, 0xe1, 0xff, 0x9c, 0xd0, 0xe1, 0x1f, 0xd4, 0x72, 0xe2, + 0x79, 0x93, 0x44, 0x32, 0xa8, 0xc2, 0xa5, 0x02, 0x7a, 0xd7, 0xf4, 0xb5, 0xf7, 0xc9, 0x02, 0x4e, + 0x6d, 0xf1, 0x7d, 0x4d, 0x8f, 0xe8, 0x15, 0xf1, 0x6a, 0x21, 0xbd, 0x5b, 0xc9, 0x90, 0xde, 0xe9, + 0x02, 0xee, 0x54, 0x4c, 0xef, 0x9a, 0x1e, 0xd3, 0x2b, 0x92, 0xae, 0x06, 0xf5, 0xfe, 0x8f, 0x85, + 0xd1, 0x7e, 0x35, 0x27, 0xec, 0xf3, 0x71, 0x3d, 0xec, 0x33, 0x46, 0x6b, 0x7e, 0x54, 0x71, 0x9f, + 0x5f, 0x6b, 0xe4, 0xc4, 0x7d, 0xae, 0x6a, 0x71, 0x9f, 0x31, 0x35, 0x4b, 0x06, 0x7e, 0xae, 0xe9, + 0x81, 0x9f, 0x93, 0x05, 0x9c, 0x5a, 0xe4, 0xe7, 0xaa, 0x16, 0xf9, 0x29, 0x12, 0xaa, 0x84, 0x7e, + 0xae, 0x6a, 0xa1, 0x9f, 0x22, 0x46, 0x25, 0xf6, 0x73, 0x55, 0x8b, 0xfd, 0x14, 0x31, 0x2a, 0xc1, + 0x9f, 0xab, 0x5a, 0xf0, 0xa7, 0x88, 0x51, 0x89, 0xfe, 0x5c, 0xd3, 0xa3, 0x3f, 0xc5, 0xfd, 0xa3, + 0x0c, 0xfa, 0x8f, 0x03, 0x35, 0xff, 0x85, 0x81, 0x9a, 0x9f, 0xab, 0xe6, 0x04, 0x60, 0x70, 0x76, + 0x00, 0xe6, 0x6c, 0xfe, 0x48, 0x16, 0x47, 0x60, 0x26, 0x9f, 0x05, 0xd2, 0x21, 0x98, 0xeb, 0x89, + 0x10, 0xcc, 0xa9, 0x02, 0x66, 0x3d, 0x06, 0xf3, 0xbf, 0x26, 0xc8, 0xf0, 0xbb, 0x8d, 0x31, 0xfb, + 0xe9, 0xb7, 0xd4, 0xfd, 0xf4, 0x98, 0x99, 0x2c, 0xbd, 0xa1, 0xbe, 0xa1, 0x6f, 0xa8, 0xcf, 0x4c, + 0xc0, 0xab, 0xed, 0xa8, 0x57, 0xb3, 0x76, 0xd4, 0xdd, 0x09, 0x50, 0x72, 0xb7, 0xd4, 0x77, 0xd2, + 0x5b, 0xea, 0xb3, 0x13, 0xe0, 0x65, 0xee, 0xa9, 0x57, 0xb3, 0xf6, 0xd4, 0x93, 0xd4, 0x2e, 0x77, + 0x53, 0xfd, 0xb6, 0xb6, 0xa9, 0x7e, 0x75, 0x92, 0xee, 0x8a, 0x27, 0x87, 0x4f, 0xe5, 0xec, 0xaa, + 0xdf, 0x9c, 0x04, 0x66, 0x7c, 0x10, 0xfb, 0xc7, 0xfb, 0x62, 0x5d, 0xcc, 0xb7, 0x5f, 0x82, 0x56, + 0x74, 0xd1, 0xc6, 0xfc, 0x3c, 0x34, 0xa3, 0x4f, 0x62, 0x33, 0xae, 0xfc, 0x8a, 0x4d, 0x1d, 0x5f, + 0x3d, 0x8b, 0x14, 0xba, 0x01, 0x35, 0xfa, 0x4b, 0x98, 0xc5, 0x6b, 0x93, 0x5d, 0xe8, 0xa1, 0x42, + 0x30, 0xe3, 0x33, 0x7f, 0xe3, 0x08, 0x80, 0xf2, 0xa5, 0xe0, 0xa4, 0x62, 0xdf, 0xa5, 0xce, 0x6c, + 0x18, 0x12, 0x9f, 0x5d, 0xe4, 0x2a, 0xfc, 0x92, 0x2e, 0x96, 0x40, 0xb5, 0x25, 0x24, 0x3e, 0x16, + 0xec, 0xe8, 0x3e, 0xb4, 0xa2, 0x40, 0x2a, 0xbb, 0x3b, 0x9d, 0xa7, 0x64, 0x59, 0x50, 0x51, 0x68, + 0x0f, 0x4b, 0x08, 0x34, 0x0f, 0xb5, 0xc0, 0xf3, 0x43, 0x71, 0xd1, 0xfa, 0x8d, 0x89, 0xa1, 0xd6, + 0x3c, 0x3f, 0xc4, 0x8c, 0x95, 0x37, 0x4d, 0x79, 0x88, 0x61, 0x3f, 0x4d, 0xd3, 0x3c, 0xf6, 0xaf, + 0xd7, 0xa4, 0x0f, 0x5d, 0x14, 0xd6, 0xc8, 0x75, 0xe8, 0xdc, 0xe4, 0xa3, 0xa4, 0x5a, 0x65, 0x74, + 0x3b, 0xb2, 0xa2, 0xdc, 0x8e, 0x7c, 0x0d, 0x3a, 0x03, 0x6f, 0x97, 0xf8, 0x38, 0xbe, 0xe2, 0x24, + 0x6e, 0xa1, 0xa5, 0xf2, 0x91, 0x09, 0xad, 0x2d, 0xc7, 0x26, 0xfd, 0x81, 0xf0, 0x7f, 0x2d, 0x2c, + 0xd3, 0xe8, 0x2e, 0xb4, 0x58, 0x8c, 0x3d, 0x8a, 0xf0, 0xef, 0xaf, 0x92, 0x3c, 0xd4, 0x1f, 0x01, + 0x50, 0x41, 0x4c, 0xf8, 0x6d, 0x27, 0x64, 0x7d, 0xd8, 0xc2, 0x32, 0x4d, 0x2b, 0xcc, 0xee, 0x91, + 0xa9, 0x15, 0x6e, 0xf2, 0x0a, 0x27, 0xf3, 0xd1, 0x69, 0x98, 0x21, 0xae, 0xad, 0x52, 0x76, 0x18, + 0x65, 0x22, 0x17, 0x5d, 0x82, 0x23, 0x8c, 0x37, 0xb1, 0x15, 0xe5, 0x21, 0xfd, 0x16, 0xce, 0x2e, + 0x64, 0xf7, 0xeb, 0xac, 0x4d, 0xfe, 0x79, 0x16, 0x0b, 0xf2, 0xd5, 0x71, 0x9c, 0x81, 0xce, 0xc2, + 0x21, 0x9b, 0x6c, 0x58, 0x3b, 0xc3, 0xf0, 0x21, 0xd9, 0x1e, 0x0d, 0xad, 0x90, 0xf4, 0x6d, 0xf6, + 0x66, 0x44, 0x1b, 0xa7, 0x0b, 0xd0, 0x79, 0x78, 0x4e, 0x64, 0x72, 0x73, 0xa7, 0xa3, 0xd6, 0xb7, + 0xd9, 0x13, 0x0a, 0x6d, 0x9c, 0x55, 0x64, 0x7e, 0x97, 0x29, 0x07, 0x33, 0x81, 0x77, 0xa1, 0x6a, + 0xd9, 0xb6, 0x98, 0x5e, 0x2f, 0xee, 0xd3, 0x90, 0xc4, 0x77, 0x39, 0x14, 0x01, 0xad, 0xca, 0xab, + 0x79, 0x7c, 0x82, 0xbd, 0xb2, 0x5f, 0x2c, 0xf9, 0x94, 0x8d, 0xc0, 0xa1, 0x88, 0x3b, 0xfc, 0x53, + 0x8e, 0xea, 0x0f, 0x87, 0x28, 0x3f, 0xec, 0x10, 0x38, 0xe8, 0x0e, 0xd4, 0x58, 0x0d, 0xf9, 0x04, + 0x7c, 0x69, 0xbf, 0x78, 0xf7, 0x79, 0xfd, 0x18, 0x86, 0x39, 0xe0, 0x77, 0xe4, 0x94, 0x8b, 0x99, + 0x65, 0xfd, 0x62, 0xe6, 0x02, 0xd4, 0x9d, 0x90, 0x6c, 0xa7, 0xef, 0xe9, 0x8e, 0x55, 0x69, 0xe1, + 0xa1, 0x38, 0xeb, 0xd8, 0xfb, 0x82, 0xef, 0xe7, 0x7e, 0x6f, 0x71, 0x0b, 0x6a, 0x94, 0x3d, 0xb5, + 0xe6, 0x9c, 0x44, 0x30, 0xe3, 0x34, 0x2f, 0x40, 0x8d, 0x36, 0x76, 0x4c, 0xeb, 0x44, 0x7d, 0x2a, + 0xb2, 0x3e, 0x0b, 0x53, 0xd0, 0xf6, 0x46, 0xc4, 0x67, 0x86, 0x61, 0xfe, 0x5b, 0x4d, 0xb9, 0x3c, + 0xd7, 0x57, 0x75, 0xec, 0xf2, 0xbe, 0x3d, 0xac, 0xaa, 0x65, 0x38, 0xa1, 0x65, 0x6f, 0xed, 0x1f, + 0x2d, 0xa5, 0x67, 0x38, 0xa1, 0x67, 0x3f, 0x04, 0x66, 0x4a, 0xd3, 0xee, 0x69, 0x9a, 0x76, 0x65, + 0xff, 0x88, 0x9a, 0xae, 0x91, 0x22, 0x5d, 0x5b, 0xd2, 0x75, 0xad, 0x3b, 0xd9, 0x90, 0xcb, 0x29, + 0x6c, 0x02, 0x6d, 0xfb, 0x4c, 0xae, 0xb6, 0x2d, 0x68, 0xda, 0xb6, 0x5f, 0xd1, 0x1f, 0x91, 0xbe, + 0x7d, 0xa7, 0x06, 0x35, 0x3a, 0x8d, 0xa2, 0x65, 0x55, 0xd7, 0xde, 0xdc, 0xd7, 0x14, 0xac, 0xea, + 0xd9, 0x4a, 0x42, 0xcf, 0x2e, 0xed, 0x0f, 0x29, 0xa5, 0x63, 0x2b, 0x09, 0x1d, 0xdb, 0x27, 0x5e, + 0x4a, 0xbf, 0x7a, 0x9a, 0x7e, 0x5d, 0xd8, 0x1f, 0x9a, 0xa6, 0x5b, 0x56, 0x91, 0x6e, 0xdd, 0xd2, + 0x75, 0x6b, 0xc2, 0x55, 0x1e, 0x5b, 0xd3, 0x4c, 0xa0, 0x57, 0xef, 0xe5, 0xea, 0xd5, 0x0d, 0x4d, + 0xaf, 0xf6, 0x23, 0xf6, 0x23, 0xd2, 0xa9, 0x4b, 0x7c, 0x71, 0x9a, 0xff, 0x19, 0x5c, 0xd6, 0xe2, + 0xd4, 0xbc, 0x0c, 0xed, 0xf8, 0x49, 0x96, 0x8c, 0x6b, 0xfc, 0x9c, 0x2c, 0x92, 0x1a, 0x25, 0xcd, + 0x8b, 0xd0, 0x8e, 0x9f, 0x59, 0xc9, 0xfa, 0xe4, 0x8e, 0x15, 0xca, 0x4f, 0xaf, 0x58, 0xca, 0x5c, + 0x86, 0x43, 0xe9, 0x47, 0x20, 0x32, 0xe2, 0xf5, 0xca, 0x1d, 0xf4, 0xe8, 0xcb, 0x17, 0x25, 0xcb, + 0x7c, 0x0a, 0x33, 0x89, 0x67, 0x1d, 0xf6, 0x8d, 0x81, 0x2e, 0x2a, 0x4b, 0xe9, 0x6a, 0xe2, 0x43, + 0x5e, 0xfd, 0x56, 0x7d, 0xbc, 0x60, 0x36, 0x97, 0x60, 0xa6, 0xa0, 0xf2, 0x93, 0x5c, 0xaa, 0xff, + 0x2c, 0x4c, 0x8d, 0xab, 0xfb, 0x47, 0x70, 0xe9, 0x3f, 0x84, 0x4e, 0xea, 0x49, 0x9a, 0xa4, 0x98, + 0x55, 0x80, 0x4d, 0x49, 0x23, 0x94, 0xf6, 0xfc, 0x3e, 0x3e, 0x71, 0x60, 0x7c, 0x58, 0xc1, 0x30, + 0x7f, 0xbb, 0x0c, 0x87, 0xd2, 0xef, 0xd1, 0x4c, 0xba, 0x49, 0x32, 0xa0, 0xc9, 0xb0, 0xe4, 0x97, + 0x21, 0x51, 0x12, 0xdd, 0x87, 0xe9, 0x60, 0xe8, 0x0c, 0xc8, 0xe2, 0x96, 0xe5, 0x6e, 0x92, 0x40, + 0xec, 0x7c, 0x0a, 0xde, 0x94, 0x59, 0x8b, 0x39, 0xb0, 0xc6, 0x6e, 0x3e, 0x85, 0x29, 0xa5, 0x10, + 0xbd, 0x03, 0x15, 0x6f, 0x94, 0xba, 0xff, 0x98, 0x8f, 0xf9, 0x20, 0xb2, 0x37, 0x5c, 0xf1, 0x46, + 0x69, 0x93, 0x54, 0xcd, 0xb7, 0xaa, 0x99, 0xaf, 0x79, 0x17, 0x0e, 0xa5, 0x9f, 0x7c, 0x49, 0x76, + 0xcf, 0xe9, 0x54, 0x34, 0x81, 0x77, 0x53, 0x32, 0x34, 0x70, 0x15, 0x0e, 0x26, 0x1f, 0x72, 0xc9, + 0xf8, 0x6a, 0x27, 0xfe, 0xf8, 0x29, 0x0a, 0xeb, 0xcf, 0xfd, 0x6c, 0x19, 0x66, 0xf4, 0x86, 0xa0, + 0xa3, 0x80, 0xf4, 0x9c, 0x15, 0xcf, 0x25, 0x9d, 0x12, 0x3a, 0x02, 0x87, 0xf4, 0xfc, 0x79, 0xdb, + 0xee, 0x94, 0xd3, 0xe4, 0xd4, 0x6d, 0x75, 0x2a, 0xc8, 0x80, 0xc3, 0x89, 0x1e, 0x62, 0x4e, 0xb4, + 0x53, 0x45, 0xcf, 0xc3, 0x91, 0x64, 0xc9, 0x68, 0x68, 0x0d, 0x48, 0xa7, 0x66, 0xfe, 0xa0, 0x02, + 0xb5, 0x47, 0x01, 0xf1, 0xcd, 0x7f, 0xad, 0x44, 0x5f, 0x73, 0xbc, 0x05, 0x35, 0xf6, 0xc6, 0x8a, + 0xf2, 0xf9, 0x65, 0x39, 0xf1, 0xf9, 0xa5, 0xf6, 0x09, 0x5f, 0xfc, 0xf9, 0xe5, 0x5b, 0x50, 0x63, + 0xaf, 0xaa, 0xec, 0x9f, 0xf3, 0x6b, 0x65, 0x68, 0xc7, 0x2f, 0x9c, 0xec, 0x9b, 0x5f, 0xfd, 0x7a, + 0xa4, 0xa2, 0x7f, 0x3d, 0xf2, 0x1a, 0xd4, 0x7d, 0xf6, 0x9d, 0x07, 0xf7, 0x32, 0xc9, 0x6f, 0x52, + 0x98, 0x40, 0xcc, 0x49, 0x4c, 0x02, 0x53, 0xea, 0xfb, 0x2d, 0xfb, 0xaf, 0xc6, 0x49, 0xf1, 0x78, + 0x5b, 0xdf, 0x0e, 0xe6, 0x7d, 0xdf, 0xda, 0x13, 0x8a, 0xa9, 0x67, 0x9a, 0xb3, 0x50, 0x5b, 0x75, + 0xdc, 0xcd, 0xec, 0xaf, 0x5e, 0xcd, 0x3f, 0x2c, 0x43, 0x53, 0x5c, 0xf2, 0x35, 0xaf, 0x42, 0x75, + 0x85, 0x3c, 0xa5, 0x15, 0x11, 0xd7, 0x8b, 0x53, 0x15, 0xb9, 0xcf, 0x5a, 0x21, 0xe8, 0x71, 0x44, + 0x66, 0x5e, 0x93, 0xd3, 0xe4, 0xfe, 0x79, 0xdf, 0x82, 0x1a, 0x7b, 0x76, 0x65, 0xff, 0x9c, 0x7f, + 0xd4, 0x82, 0x06, 0xff, 0x74, 0xd4, 0xfc, 0xbd, 0x16, 0x34, 0xf8, 0x53, 0x2c, 0xe8, 0x06, 0x34, + 0x83, 0x9d, 0xed, 0x6d, 0xcb, 0xdf, 0x33, 0xb2, 0x1f, 0x18, 0xd6, 0x5e, 0x6e, 0xe9, 0xae, 0x71, + 0x5a, 0x1c, 0x31, 0xa1, 0xcb, 0x50, 0x1b, 0x58, 0x1b, 0x24, 0x75, 0xec, 0x9b, 0xc5, 0xbc, 0x68, + 0x6d, 0x10, 0xcc, 0xc8, 0xd1, 0x2d, 0x68, 0x89, 0x61, 0x09, 0x44, 0xdc, 0x67, 0xbc, 0xdc, 0x68, + 0x30, 0x25, 0x97, 0x79, 0x07, 0x9a, 0xa2, 0x32, 0xe8, 0xa6, 0xfc, 0x70, 0x36, 0x19, 0xa1, 0xce, + 0x6c, 0x82, 0x7c, 0xa3, 0x43, 0x7e, 0x42, 0xfb, 0x97, 0x15, 0xa8, 0xd1, 0xca, 0x7d, 0x68, 0x24, + 0x74, 0x1c, 0x60, 0x68, 0x05, 0xe1, 0xea, 0xce, 0x70, 0x48, 0x6c, 0xf1, 0x25, 0x9e, 0x92, 0x83, + 0xce, 0xc0, 0x41, 0x9e, 0x0a, 0xb6, 0xd6, 0x76, 0x06, 0x03, 0x22, 0xbf, 0x40, 0x4d, 0x66, 0xa3, + 0x79, 0xa8, 0xb3, 0xc7, 0x41, 0xc5, 0xaa, 0xf0, 0xf5, 0xc2, 0x9e, 0xed, 0xae, 0x3a, 0xae, 0xa8, + 0x0d, 0xe7, 0x34, 0x3d, 0x68, 0xcb, 0x3c, 0x6a, 0x84, 0x23, 0xc7, 0x75, 0x1d, 0x77, 0x53, 0x68, + 0x74, 0x94, 0xa4, 0x93, 0x0e, 0xfd, 0x29, 0xea, 0x5b, 0xc7, 0x22, 0x45, 0xf3, 0x37, 0x2c, 0x67, + 0x28, 0xaa, 0x58, 0xc7, 0x22, 0x45, 0x91, 0x76, 0xc4, 0x03, 0x36, 0x35, 0xd6, 0xc0, 0x28, 0x69, + 0x7e, 0x50, 0x96, 0x5f, 0x8f, 0x67, 0x7d, 0xc4, 0x99, 0x8a, 0x39, 0xcd, 0xaa, 0x81, 0x6f, 0x3e, + 0x21, 0x28, 0xa1, 0xec, 0xa3, 0xd0, 0xf0, 0xdc, 0xa1, 0xe3, 0x12, 0x11, 0x63, 0x12, 0xa9, 0x44, + 0x1f, 0xd7, 0x53, 0x7d, 0x2c, 0xca, 0x97, 0x6d, 0x87, 0x56, 0xb1, 0x11, 0x97, 0xf3, 0x1c, 0x74, + 0x1d, 0x9a, 0x36, 0xd9, 0x75, 0x06, 0x24, 0x30, 0x9a, 0x4c, 0xf5, 0x5e, 0x19, 0xdb, 0xb7, 0x4b, + 0x8c, 0x16, 0x47, 0x3c, 0x66, 0x08, 0x0d, 0x9e, 0x25, 0x9b, 0x54, 0x56, 0x9a, 0x14, 0x57, 0xba, + 0x32, 0xa6, 0xd2, 0xd5, 0x82, 0x4a, 0xd7, 0x92, 0x95, 0x9e, 0xfb, 0x12, 0x40, 0xac, 0x6e, 0x68, + 0x0a, 0x9a, 0x8f, 0xdc, 0x27, 0xae, 0xf7, 0xd4, 0xed, 0x94, 0x68, 0xe2, 0xc1, 0xc6, 0x06, 0x95, + 0xd2, 0x29, 0xd3, 0x04, 0xa5, 0x73, 0xdc, 0xcd, 0x4e, 0x05, 0x01, 0x34, 0x68, 0x82, 0xd8, 0x9d, + 0x2a, 0xfd, 0x7d, 0x9b, 0x8d, 0x5f, 0xa7, 0x86, 0x8e, 0xc1, 0x73, 0x7d, 0x77, 0xe0, 0x6d, 0x8f, + 0xac, 0xd0, 0x59, 0x1f, 0x92, 0xc7, 0xc4, 0x0f, 0x1c, 0xcf, 0xed, 0xd4, 0xe9, 0xec, 0xb5, 0x42, + 0xc2, 0xa7, 0x9e, 0xff, 0x64, 0x85, 0x10, 0x5b, 0xbc, 0x0d, 0xd3, 0x69, 0x98, 0xff, 0x51, 0xe6, + 0xa7, 0xc6, 0xe6, 0x2d, 0x98, 0xd6, 0x5e, 0x5a, 0x32, 0xe2, 0x77, 0xdf, 0x13, 0xcf, 0xbe, 0x1f, + 0x65, 0x71, 0x5d, 0x12, 0x2f, 0x65, 0x78, 0xca, 0xbc, 0x0d, 0xa0, 0xbc, 0xaf, 0x74, 0x1c, 0x60, + 0x7d, 0x2f, 0x24, 0x01, 0x7f, 0x5b, 0x89, 0x42, 0xd4, 0xb0, 0x92, 0xa3, 0xe2, 0x57, 0x34, 0x7c, + 0xf3, 0x0a, 0x80, 0xf2, 0xba, 0x12, 0xb5, 0x2b, 0x9a, 0x5a, 0x48, 0x82, 0x25, 0xb3, 0xcd, 0xae, + 0x68, 0x41, 0xf4, 0x8e, 0x52, 0x54, 0x03, 0x1e, 0xbd, 0x53, 0x6b, 0xc0, 0x72, 0xcc, 0x65, 0x80, + 0xf8, 0x29, 0x21, 0xf3, 0xaa, 0x74, 0xdd, 0x6f, 0x40, 0xcd, 0xb6, 0x42, 0x4b, 0x78, 0xcd, 0xe7, + 0x13, 0x33, 0x57, 0xcc, 0x82, 0x19, 0x99, 0xf9, 0x5b, 0x65, 0x98, 0x56, 0x9f, 0x4d, 0x32, 0xdf, + 0x85, 0x1a, 0x7b, 0x77, 0xe9, 0x26, 0x4c, 0xab, 0xef, 0x26, 0xa5, 0xde, 0xc7, 0xe7, 0x78, 0x2a, + 0x2b, 0xd6, 0x18, 0xcc, 0xbe, 0xac, 0xd2, 0x87, 0x86, 0x3a, 0x0f, 0x4d, 0xf1, 0x0c, 0x93, 0x79, + 0x0a, 0xda, 0xf1, 0xab, 0x4b, 0xd4, 0x77, 0xf0, 0xfc, 0x68, 0x94, 0x45, 0xd2, 0xfc, 0x97, 0x1a, + 0xd4, 0xd9, 0x70, 0x9a, 0x5f, 0xa9, 0xa8, 0x1a, 0x6a, 0xfe, 0xa0, 0x9c, 0xbb, 0x17, 0xbc, 0xa8, + 0xbd, 0x73, 0x30, 0x93, 0x7a, 0x6d, 0x4c, 0x3c, 0xb2, 0xa4, 0x3b, 0xd6, 0x2b, 0xd0, 0x74, 0xb9, + 0x66, 0x8a, 0x67, 0x06, 0x66, 0x33, 0xb9, 0x84, 0xf6, 0xe2, 0x88, 0x18, 0x5d, 0x82, 0x3a, 0xf1, + 0x7d, 0xcf, 0x67, 0x26, 0x35, 0x93, 0x7a, 0xb7, 0x2b, 0x7e, 0xd0, 0x69, 0x99, 0x52, 0x61, 0x4e, + 0x8c, 0x2e, 0xc1, 0x91, 0x80, 0x5b, 0x11, 0x5f, 0x53, 0x06, 0xe2, 0xfb, 0x6b, 0xe1, 0x6d, 0xb2, + 0x0b, 0xcd, 0x00, 0x0e, 0x26, 0xdf, 0x68, 0x32, 0xa1, 0xc5, 0xd7, 0xa6, 0xd2, 0x40, 0x64, 0x9a, + 0x6a, 0x1e, 0xff, 0xbd, 0x12, 0xfb, 0x45, 0x25, 0x87, 0xae, 0x57, 0x9e, 0x32, 0xa8, 0xe8, 0xd8, + 0x99, 0x7b, 0x48, 0x3d, 0x73, 0xee, 0x13, 0xd1, 0xac, 0xae, 0x58, 0x7b, 0x49, 0x75, 0x03, 0x65, + 0xd4, 0x86, 0x3a, 0x6b, 0x5d, 0xa7, 0xa2, 0xfa, 0x8a, 0x6a, 0x8e, 0xb5, 0xd7, 0xe6, 0x2e, 0x42, + 0x53, 0xe4, 0x53, 0xfa, 0x79, 0xde, 0x61, 0x9d, 0x12, 0x9a, 0x86, 0xd6, 0x1a, 0x19, 0x6e, 0xf4, + 0xbc, 0x20, 0xec, 0x94, 0xd1, 0x01, 0x68, 0x33, 0x03, 0x7c, 0xe0, 0x0e, 0xf7, 0x3a, 0x95, 0xb9, + 0xf7, 0xa0, 0x2d, 0xbb, 0x11, 0xb5, 0xa0, 0xb6, 0xb2, 0x33, 0x1c, 0x76, 0x4a, 0x6c, 0x3d, 0x1c, + 0x7a, 0x7e, 0x14, 0x0d, 0x5f, 0x7e, 0x46, 0x27, 0xb7, 0x4e, 0x39, 0xcf, 0x05, 0x55, 0x50, 0x07, + 0xa6, 0x85, 0x70, 0x5e, 0xe7, 0xaa, 0xf9, 0x4f, 0x65, 0x68, 0xcb, 0x27, 0xac, 0xe8, 0x62, 0x34, + 0x52, 0xac, 0x7c, 0xe7, 0x73, 0x35, 0xa1, 0x62, 0xf9, 0x2f, 0x62, 0x25, 0xd4, 0xec, 0x34, 0xcc, + 0x08, 0x3f, 0x1f, 0x8d, 0x38, 0x77, 0xd5, 0x89, 0xdc, 0xb9, 0x3b, 0xb2, 0xd7, 0x3b, 0xcc, 0xae, + 0x17, 0x3d, 0xd7, 0x25, 0x83, 0x90, 0xf5, 0xfd, 0x41, 0x98, 0x5a, 0xf1, 0xc2, 0x55, 0x2f, 0x08, + 0x68, 0xcb, 0x78, 0x4f, 0xc5, 0xe5, 0x15, 0x34, 0x03, 0x10, 0x5d, 0x84, 0xa3, 0x9e, 0xd9, 0xfc, + 0xcd, 0x32, 0x34, 0xf8, 0xc3, 0x5a, 0xe6, 0x2f, 0x97, 0xa1, 0x21, 0x1e, 0xd3, 0x7a, 0x0d, 0x3a, + 0xbe, 0x47, 0x81, 0xa3, 0x5d, 0x4c, 0x7f, 0x49, 0xb4, 0x32, 0x95, 0x4f, 0x37, 0xd6, 0x9e, 0xa2, + 0x8a, 0x62, 0xdd, 0xa1, 0xe5, 0xa1, 0x6b, 0x00, 0xfc, 0xb1, 0xae, 0x87, 0x7b, 0xf2, 0xa9, 0x8e, + 0xe4, 0xfd, 0x37, 0xf1, 0xbc, 0x17, 0x3b, 0x29, 0x52, 0xa8, 0xcd, 0x6d, 0x38, 0x94, 0x7a, 0x69, + 0x49, 0x09, 0xf6, 0x9c, 0x81, 0x83, 0x44, 0x2d, 0x92, 0xe3, 0x91, 0xcc, 0xa6, 0x2a, 0xad, 0x65, + 0x09, 0xad, 0xd7, 0x33, 0xe7, 0xbe, 0x08, 0x07, 0x30, 0x09, 0x46, 0x9e, 0x1b, 0x90, 0x1f, 0xd5, + 0xff, 0x42, 0xc9, 0xfd, 0xaf, 0x26, 0x73, 0xdf, 0xa9, 0x43, 0x9d, 0xad, 0xa0, 0xcd, 0xbf, 0xaa, + 0xcb, 0xb5, 0x7e, 0xca, 0x87, 0x5d, 0x50, 0x2f, 0x3d, 0xa9, 0xce, 0x48, 0x5b, 0x7c, 0xeb, 0x97, + 0x9d, 0xde, 0x86, 0xd6, 0xc8, 0xf7, 0x36, 0x7d, 0xba, 0x66, 0xaf, 0x25, 0x1e, 0xc9, 0xd2, 0xd9, + 0x56, 0x05, 0x19, 0x96, 0x0c, 0xaa, 0xae, 0xd7, 0x75, 0x5d, 0xbf, 0x05, 0x6d, 0xdb, 0xf7, 0x46, + 0xec, 0x73, 0x7d, 0x71, 0xd0, 0x78, 0x22, 0x07, 0x77, 0x29, 0xa2, 0xeb, 0x95, 0x70, 0xcc, 0x44, + 0xad, 0x85, 0x0f, 0xb6, 0x38, 0xe3, 0x7f, 0x31, 0x87, 0x9d, 0xab, 0x47, 0xaf, 0x84, 0x05, 0x39, + 0x65, 0x24, 0xcf, 0x18, 0x63, 0x6b, 0x2c, 0xe3, 0xf2, 0xb3, 0x88, 0x91, 0x93, 0xa3, 0xeb, 0xd0, + 0x0a, 0xac, 0x5d, 0xc2, 0x5e, 0x3e, 0x6f, 0x8f, 0xed, 0x8a, 0x35, 0x41, 0xd6, 0x2b, 0x61, 0xc9, + 0x42, 0x9b, 0xbc, 0xed, 0x6c, 0xf2, 0xdd, 0xb2, 0x78, 0x7e, 0x3d, 0xaf, 0xc9, 0xf7, 0x23, 0x3a, + 0xf6, 0x56, 0x7e, 0x94, 0xa0, 0xbb, 0x3b, 0x3e, 0x2d, 0x4c, 0xf1, 0x23, 0x74, 0x96, 0x30, 0xa7, + 0xa0, 0x2d, 0xbb, 0xc8, 0x6c, 0x49, 0xab, 0x6c, 0x41, 0x83, 0xb7, 0xc0, 0x04, 0x68, 0x45, 0x15, + 0xa2, 0xc4, 0x12, 0xdc, 0x5c, 0x81, 0x56, 0x34, 0x68, 0x39, 0x4f, 0x74, 0x20, 0xa8, 0xd9, 0x9e, + 0x58, 0x16, 0x56, 0x31, 0xfb, 0x4d, 0x07, 0x55, 0x7d, 0x22, 0xac, 0x2d, 0xdf, 0xcb, 0x9a, 0x9b, + 0x8f, 0xee, 0x6e, 0x51, 0x4f, 0xca, 0x03, 0x0e, 0x53, 0xd0, 0xc4, 0x3b, 0x6c, 0xc5, 0xde, 0x29, + 0xd3, 0x6c, 0xba, 0x0d, 0xec, 0x54, 0xa8, 0x53, 0x5e, 0xb4, 0xdc, 0x01, 0x19, 0xb2, 0x55, 0x9e, + 0x74, 0xf5, 0xb5, 0x85, 0xb6, 0x04, 0x5f, 0x98, 0xfd, 0xeb, 0x0f, 0x8e, 0x97, 0xbf, 0xfd, 0xc1, + 0xf1, 0xf2, 0xf7, 0x3e, 0x38, 0x5e, 0xfe, 0x85, 0xef, 0x1f, 0x2f, 0x7d, 0xfb, 0xfb, 0xc7, 0x4b, + 0xff, 0xf8, 0xfd, 0xe3, 0xa5, 0xf7, 0x2b, 0xa3, 0xf5, 0xf5, 0x06, 0xbb, 0x7f, 0x73, 0xf1, 0x3f, + 0x03, 0x00, 0x00, 0xff, 0xff, 0xe2, 0x96, 0x7f, 0xf9, 0xe2, 0x68, 0x00, 0x00, } func (m *Event) Marshal() (dAtA []byte, err error) { @@ -20502,6 +20510,15 @@ func (m *EventBlockDataviewViewUpdateFields) MarshalToSizedBuffer(dAtA []byte) ( _ = i var l int _ = l + if len(m.EndRelationKey) > 0 { + i -= len(m.EndRelationKey) + copy(dAtA[i:], m.EndRelationKey) + i = encodeVarintEvents(dAtA, i, uint64(len(m.EndRelationKey))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x82 + } if len(m.DefaultObjectTypeId) > 0 { i -= len(m.DefaultObjectTypeId) copy(dAtA[i:], m.DefaultObjectTypeId) @@ -27003,6 +27020,10 @@ func (m *EventBlockDataviewViewUpdateFields) Size() (n int) { if l > 0 { n += 1 + l + sovEvents(uint64(l)) } + l = len(m.EndRelationKey) + if l > 0 { + n += 2 + l + sovEvents(uint64(l)) + } return n } @@ -46459,6 +46480,38 @@ func (m *EventBlockDataviewViewUpdateFields) Unmarshal(dAtA []byte) error { } m.DefaultObjectTypeId = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 16: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EndRelationKey", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.EndRelationKey = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipEvents(dAtA[iNdEx:]) diff --git a/pb/protos/events.proto b/pb/protos/events.proto index c911e4998..60fdd6de5 100644 --- a/pb/protos/events.proto +++ b/pb/protos/events.proto @@ -817,6 +817,7 @@ message Event { anytype.model.Block.Content.Dataview.View.Size cardSize = 5; // Gallery card size bool coverFit = 6; // Image fits container string groupRelationKey = 7; // Group view by this relationKey + string endRelationKey = 16; bool groupBackgroundColors = 8; // Enable backgrounds in groups int32 pageLimit = 9; // Limit of objects shown in widget string defaultTemplateId = 10; // Id of template object set default for the view diff --git a/pkg/lib/pb/model/models.pb.go b/pkg/lib/pb/model/models.pb.go index c4759d063..e0feb9407 100644 --- a/pkg/lib/pb/model/models.pb.go +++ b/pkg/lib/pb/model/models.pb.go @@ -3996,6 +3996,7 @@ type BlockContentDataviewView struct { PageLimit int32 `protobuf:"varint,13,opt,name=pageLimit,proto3" json:"pageLimit,omitempty"` DefaultTemplateId string `protobuf:"bytes,14,opt,name=defaultTemplateId,proto3" json:"defaultTemplateId,omitempty"` DefaultObjectTypeId string `protobuf:"bytes,15,opt,name=defaultObjectTypeId,proto3" json:"defaultObjectTypeId,omitempty"` + EndRelationKey string `protobuf:"bytes,16,opt,name=endRelationKey,proto3" json:"endRelationKey,omitempty"` } func (m *BlockContentDataviewView) Reset() { *m = BlockContentDataviewView{} } @@ -4136,6 +4137,13 @@ func (m *BlockContentDataviewView) GetDefaultObjectTypeId() string { return "" } +func (m *BlockContentDataviewView) GetEndRelationKey() string { + if m != nil { + return m.EndRelationKey + } + return "" +} + type BlockContentDataviewRelation struct { Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` IsVisible bool `protobuf:"varint,2,opt,name=isVisible,proto3" json:"isVisible,omitempty"` @@ -9943,591 +9951,592 @@ func init() { } var fileDescriptor_98a910b73321e591 = []byte{ - // 9338 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x7d, 0x5b, 0x8c, 0x23, 0xd9, - 0x75, 0x58, 0xf3, 0x4d, 0x1e, 0x36, 0xbb, 0x6f, 0xdf, 0x79, 0x71, 0xa9, 0xf1, 0x64, 0x4c, 0xad, - 0x76, 0x67, 0x47, 0xab, 0x9e, 0xdd, 0xd9, 0x5d, 0xed, 0x6a, 0xad, 0x5d, 0x89, 0xdd, 0xcd, 0x9e, - 0xe6, 0x4e, 0xbf, 0x54, 0xe4, 0xcc, 0x68, 0x17, 0x76, 0x3a, 0xd5, 0xac, 0xdb, 0x64, 0xa9, 0x8b, - 0x55, 0x54, 0xd5, 0x65, 0x4f, 0xb7, 0x90, 0x04, 0x8a, 0x93, 0xd8, 0xf1, 0x9f, 0x12, 0xc4, 0x71, - 0x8c, 0x20, 0xb0, 0xf4, 0x11, 0x20, 0xb0, 0x1d, 0xe4, 0xcb, 0x48, 0x9c, 0x07, 0x90, 0xf8, 0x2b, - 0x80, 0x7f, 0x94, 0x7c, 0x05, 0x48, 0x80, 0x04, 0x12, 0x10, 0x04, 0xc8, 0xc3, 0x70, 0xbe, 0x84, - 0x20, 0x1f, 0xc1, 0x39, 0xf7, 0xd6, 0x8b, 0x64, 0xf7, 0x70, 0xd6, 0x76, 0x90, 0xaf, 0xe6, 0x3d, - 0x75, 0xce, 0xa9, 0xfb, 0x38, 0xf7, 0xdc, 0xf3, 0xba, 0xd5, 0xf0, 0xea, 0xf8, 0x74, 0xf0, 0xc0, - 0xb1, 0x8f, 0x1f, 0x8c, 0x8f, 0x1f, 0x8c, 0x3c, 0x4b, 0x38, 0x0f, 0xc6, 0xbe, 0x27, 0xbd, 0x40, - 0x35, 0x82, 0x75, 0x6a, 0xf1, 0x9a, 0xe9, 0x5e, 0xc8, 0x8b, 0xb1, 0x58, 0x27, 0x68, 0xe3, 0xf6, - 0xc0, 0xf3, 0x06, 0x8e, 0x50, 0xa8, 0xc7, 0x93, 0x93, 0x07, 0x81, 0xf4, 0x27, 0x7d, 0xa9, 0x90, - 0x9b, 0x3f, 0xce, 0xc3, 0xcd, 0xee, 0xc8, 0xf4, 0xe5, 0x86, 0xe3, 0xf5, 0x4f, 0xbb, 0xae, 0x39, - 0x0e, 0x86, 0x9e, 0xdc, 0x30, 0x03, 0xc1, 0xdf, 0x84, 0xe2, 0x31, 0x02, 0x83, 0x7a, 0xe6, 0x6e, - 0xee, 0x5e, 0xf5, 0xe1, 0xf5, 0xf5, 0x14, 0xe3, 0x75, 0xa2, 0x30, 0x34, 0x0e, 0x7f, 0x1b, 0x4a, - 0x96, 0x90, 0xa6, 0xed, 0x04, 0xf5, 0xec, 0xdd, 0xcc, 0xbd, 0xea, 0xc3, 0x5b, 0xeb, 0xea, 0xc5, - 0xeb, 0xe1, 0x8b, 0xd7, 0xbb, 0xf4, 0x62, 0x23, 0xc4, 0xe3, 0xef, 0x43, 0xf9, 0xc4, 0x76, 0xc4, - 0x63, 0x71, 0x11, 0xd4, 0x73, 0x57, 0xd2, 0x6c, 0x64, 0xeb, 0x19, 0x23, 0x42, 0xe6, 0x9b, 0xb0, - 0x22, 0xce, 0xa5, 0x6f, 0x1a, 0xc2, 0x31, 0xa5, 0xed, 0xb9, 0x41, 0x3d, 0x4f, 0x3d, 0xbc, 0x35, - 0xd5, 0xc3, 0xf0, 0x39, 0x91, 0x4f, 0x91, 0xf0, 0xbb, 0x50, 0xf5, 0x8e, 0xbf, 0x23, 0xfa, 0xb2, - 0x77, 0x31, 0x16, 0x41, 0xbd, 0x70, 0x37, 0x77, 0xaf, 0x62, 0x24, 0x41, 0xfc, 0x6b, 0x50, 0xed, - 0x7b, 0x8e, 0x23, 0xfa, 0xea, 0x1d, 0xc5, 0xab, 0x87, 0x95, 0xc4, 0xe5, 0xef, 0xc2, 0x0d, 0x5f, - 0x8c, 0xbc, 0x33, 0x61, 0x6d, 0x46, 0x50, 0x1a, 0x67, 0x99, 0x5e, 0x33, 0xff, 0x21, 0x6f, 0x41, - 0xcd, 0xd7, 0xfd, 0xdb, 0xb5, 0xdd, 0xd3, 0xa0, 0x5e, 0xa2, 0x61, 0x7d, 0xe1, 0x92, 0x61, 0x21, - 0x8e, 0x91, 0xa6, 0xe0, 0x0c, 0x72, 0xa7, 0xe2, 0xa2, 0x5e, 0xb9, 0x9b, 0xb9, 0x57, 0x31, 0xf0, - 0x27, 0xff, 0x10, 0xea, 0x9e, 0x6f, 0x0f, 0x6c, 0xd7, 0x74, 0x36, 0x7d, 0x61, 0x4a, 0x61, 0xf5, - 0xec, 0x91, 0x08, 0xa4, 0x39, 0x1a, 0xd7, 0xe1, 0x6e, 0xe6, 0x5e, 0xce, 0xb8, 0xf4, 0x39, 0x7f, - 0x47, 0xad, 0x50, 0xc7, 0x3d, 0xf1, 0xea, 0x55, 0x3d, 0xfc, 0x74, 0x5f, 0xb6, 0xf5, 0x63, 0x23, - 0x42, 0x6c, 0xfe, 0x2c, 0x0b, 0xc5, 0xae, 0x30, 0xfd, 0xfe, 0xb0, 0xf1, 0xab, 0x19, 0x28, 0x1a, - 0x22, 0x98, 0x38, 0x92, 0x37, 0xa0, 0xac, 0xe6, 0xb6, 0x63, 0xd5, 0x33, 0xd4, 0xbb, 0xa8, 0xfd, - 0x79, 0x64, 0x67, 0x1d, 0xf2, 0x23, 0x21, 0xcd, 0x7a, 0x8e, 0x66, 0xa8, 0x31, 0xd5, 0x2b, 0xf5, - 0xfa, 0xf5, 0x3d, 0x21, 0x4d, 0x83, 0xf0, 0x1a, 0x3f, 0xcd, 0x40, 0x1e, 0x9b, 0xfc, 0x36, 0x54, - 0x86, 0xf6, 0x60, 0xe8, 0xd8, 0x83, 0xa1, 0xd4, 0x1d, 0x89, 0x01, 0xfc, 0x63, 0x58, 0x8d, 0x1a, - 0x86, 0xe9, 0x0e, 0x04, 0xf6, 0x68, 0x9e, 0xf0, 0xd3, 0x43, 0x63, 0x1a, 0x99, 0xd7, 0xa1, 0x44, - 0xfb, 0xa1, 0x63, 0x91, 0x44, 0x57, 0x8c, 0xb0, 0x89, 0xe2, 0x16, 0xae, 0xd4, 0x63, 0x71, 0x51, - 0xcf, 0xd3, 0xd3, 0x24, 0x88, 0xb7, 0x60, 0x35, 0x6c, 0x6e, 0xe9, 0xd9, 0x28, 0x5c, 0x3d, 0x1b, - 0xd3, 0xf8, 0xcd, 0xef, 0xef, 0x41, 0x81, 0xb6, 0x25, 0x5f, 0x81, 0xac, 0x1d, 0x4e, 0x74, 0xd6, - 0xb6, 0xf8, 0x03, 0x28, 0x9e, 0xd8, 0xc2, 0xb1, 0x5e, 0x38, 0xc3, 0x1a, 0x8d, 0xb7, 0x61, 0xd9, - 0x17, 0x81, 0xf4, 0x6d, 0x2d, 0xfd, 0x6a, 0x83, 0xfe, 0xfc, 0x3c, 0x1d, 0xb0, 0x6e, 0x24, 0x10, - 0x8d, 0x14, 0x19, 0x0e, 0xbb, 0x3f, 0xb4, 0x1d, 0xcb, 0x17, 0x6e, 0xc7, 0x52, 0xfb, 0xb4, 0x62, - 0x24, 0x41, 0xfc, 0x1e, 0xac, 0x1e, 0x9b, 0xfd, 0xd3, 0x81, 0xef, 0x4d, 0x5c, 0xdc, 0x10, 0x9e, - 0x4f, 0xc3, 0xae, 0x18, 0xd3, 0x60, 0xfe, 0x16, 0x14, 0x4c, 0xc7, 0x1e, 0xb8, 0xb4, 0x13, 0x57, - 0x66, 0x16, 0x5d, 0xf5, 0xa5, 0x85, 0x18, 0x86, 0x42, 0xe4, 0x3b, 0x50, 0x3b, 0x13, 0xbe, 0xb4, - 0xfb, 0xa6, 0x43, 0xf0, 0x7a, 0x89, 0x28, 0x9b, 0x73, 0x29, 0x9f, 0x26, 0x31, 0x8d, 0x34, 0x21, - 0xef, 0x00, 0x04, 0xa8, 0x26, 0x69, 0x39, 0xf5, 0x5e, 0x78, 0x7d, 0x2e, 0x9b, 0x4d, 0xcf, 0x95, - 0xc2, 0x95, 0xeb, 0xdd, 0x08, 0x7d, 0x67, 0xc9, 0x48, 0x10, 0xf3, 0xf7, 0x21, 0x2f, 0xc5, 0xb9, - 0xac, 0xaf, 0x5c, 0x31, 0xa3, 0x21, 0x93, 0x9e, 0x38, 0x97, 0x3b, 0x4b, 0x06, 0x11, 0x20, 0x21, - 0x6e, 0xb2, 0xfa, 0xea, 0x02, 0x84, 0xb8, 0x2f, 0x91, 0x10, 0x09, 0xf8, 0x47, 0x50, 0x74, 0xcc, - 0x0b, 0x6f, 0x22, 0xeb, 0x8c, 0x48, 0xbf, 0x78, 0x25, 0xe9, 0x2e, 0xa1, 0xee, 0x2c, 0x19, 0x9a, - 0x88, 0xbf, 0x0b, 0x39, 0xcb, 0x3e, 0xab, 0xaf, 0x11, 0xed, 0xdd, 0x2b, 0x69, 0xb7, 0xec, 0xb3, - 0x9d, 0x25, 0x03, 0xd1, 0xf9, 0x26, 0x94, 0x8f, 0x3d, 0xef, 0x74, 0x64, 0xfa, 0xa7, 0x75, 0x4e, - 0xa4, 0x5f, 0xba, 0x92, 0x74, 0x43, 0x23, 0xef, 0x2c, 0x19, 0x11, 0x21, 0x0e, 0xd9, 0xee, 0x7b, - 0x6e, 0xfd, 0xda, 0x02, 0x43, 0xee, 0xf4, 0x3d, 0x17, 0x87, 0x8c, 0x04, 0x48, 0xe8, 0xd8, 0xee, - 0x69, 0xfd, 0xfa, 0x02, 0x84, 0xa8, 0x39, 0x91, 0x10, 0x09, 0xb0, 0xdb, 0x96, 0x29, 0xcd, 0x33, - 0x5b, 0x3c, 0xaf, 0xdf, 0x58, 0xa0, 0xdb, 0x5b, 0x1a, 0x19, 0xbb, 0x1d, 0x12, 0x22, 0x93, 0x70, - 0x6b, 0xd6, 0x6f, 0x2e, 0xc0, 0x24, 0xd4, 0xe8, 0xc8, 0x24, 0x24, 0xe4, 0x7f, 0x1e, 0xd6, 0x4e, - 0x84, 0x29, 0x27, 0xbe, 0xb0, 0xe2, 0x83, 0xee, 0x16, 0x71, 0x5b, 0xbf, 0x7a, 0xed, 0xa7, 0xa9, - 0x76, 0x96, 0x8c, 0x59, 0x56, 0xfc, 0x43, 0x28, 0x38, 0xa6, 0x14, 0xe7, 0xf5, 0x3a, 0xf1, 0x6c, - 0xbe, 0x40, 0x28, 0xa4, 0x38, 0xdf, 0x59, 0x32, 0x14, 0x09, 0xff, 0x36, 0xac, 0x4a, 0xf3, 0xd8, - 0x11, 0x07, 0x27, 0x1a, 0x21, 0xa8, 0xbf, 0x42, 0x5c, 0xde, 0xbc, 0x5a, 0x9c, 0xd3, 0x34, 0x3b, - 0x4b, 0xc6, 0x34, 0x1b, 0xec, 0x15, 0x81, 0xea, 0x8d, 0x05, 0x7a, 0x45, 0xfc, 0xb0, 0x57, 0x44, - 0xc2, 0x77, 0xa1, 0x4a, 0x3f, 0x36, 0x3d, 0x67, 0x32, 0x72, 0xeb, 0x5f, 0x20, 0x0e, 0xf7, 0x5e, - 0xcc, 0x41, 0xe1, 0xef, 0x2c, 0x19, 0x49, 0x72, 0x5c, 0x44, 0x6a, 0x1a, 0xde, 0xf3, 0xfa, 0xed, - 0x05, 0x16, 0xb1, 0xa7, 0x91, 0x71, 0x11, 0x43, 0x42, 0xdc, 0x7a, 0xcf, 0x6d, 0x6b, 0x20, 0x64, - 0xfd, 0xe7, 0x16, 0xd8, 0x7a, 0xcf, 0x08, 0x15, 0xb7, 0x9e, 0x22, 0x42, 0x31, 0xee, 0x0f, 0x4d, - 0x59, 0xbf, 0xb3, 0x80, 0x18, 0x6f, 0x0e, 0x4d, 0xd2, 0x15, 0x48, 0xd0, 0xf8, 0x1e, 0x2c, 0x27, - 0xb5, 0x32, 0xe7, 0x90, 0xf7, 0x85, 0xa9, 0x4e, 0x84, 0xb2, 0x41, 0xbf, 0x11, 0x26, 0x2c, 0x5b, - 0xd2, 0x89, 0x50, 0x36, 0xe8, 0x37, 0xbf, 0x09, 0x45, 0x65, 0x9b, 0x90, 0xc2, 0x2f, 0x1b, 0xba, - 0x85, 0xb8, 0x96, 0x6f, 0x0e, 0xe8, 0xdc, 0x2a, 0x1b, 0xf4, 0x1b, 0x71, 0x2d, 0xdf, 0x1b, 0x1f, - 0xb8, 0xa4, 0xb0, 0xcb, 0x86, 0x6e, 0x35, 0x7e, 0xfa, 0x11, 0x94, 0x74, 0xa7, 0x1a, 0x7f, 0x3f, - 0x03, 0x45, 0xa5, 0x50, 0xf8, 0x37, 0xa0, 0x10, 0xc8, 0x0b, 0x47, 0x50, 0x1f, 0x56, 0x1e, 0xbe, - 0xb1, 0x80, 0x12, 0x5a, 0xef, 0x22, 0x81, 0xa1, 0xe8, 0x9a, 0x06, 0x14, 0xa8, 0xcd, 0x4b, 0x90, - 0x33, 0xbc, 0xe7, 0x6c, 0x89, 0x03, 0x14, 0xd5, 0x62, 0xb1, 0x0c, 0x02, 0xb7, 0xec, 0x33, 0x96, - 0x45, 0xe0, 0x8e, 0x30, 0x2d, 0xe1, 0xb3, 0x1c, 0xaf, 0x41, 0x25, 0x5c, 0x96, 0x80, 0xe5, 0x39, - 0x83, 0xe5, 0xc4, 0x82, 0x07, 0xac, 0xd0, 0xf8, 0x5f, 0x79, 0xc8, 0xe3, 0xfe, 0xe7, 0xaf, 0x42, - 0x4d, 0x9a, 0xfe, 0x40, 0x28, 0x43, 0x38, 0x32, 0x52, 0xd2, 0x40, 0xfe, 0x51, 0x38, 0x86, 0x2c, - 0x8d, 0xe1, 0xf5, 0x17, 0xea, 0x95, 0xd4, 0x08, 0x12, 0xa7, 0x70, 0x6e, 0xb1, 0x53, 0x78, 0x1b, - 0xca, 0xa8, 0xce, 0xba, 0xf6, 0xf7, 0x04, 0x4d, 0xfd, 0xca, 0xc3, 0xfb, 0x2f, 0x7e, 0x65, 0x47, - 0x53, 0x18, 0x11, 0x2d, 0xef, 0x40, 0xa5, 0x6f, 0xfa, 0x16, 0x75, 0x86, 0x56, 0x6b, 0xe5, 0xe1, - 0x97, 0x5f, 0xcc, 0x68, 0x33, 0x24, 0x31, 0x62, 0x6a, 0x7e, 0x00, 0x55, 0x4b, 0x04, 0x7d, 0xdf, - 0x1e, 0x93, 0x7a, 0x53, 0x67, 0xf1, 0x57, 0x5e, 0xcc, 0x6c, 0x2b, 0x26, 0x32, 0x92, 0x1c, 0xd0, - 0x22, 0xf3, 0x23, 0xfd, 0x56, 0x22, 0x03, 0x21, 0x06, 0x34, 0xdf, 0x87, 0x72, 0x38, 0x1e, 0xbe, - 0x0c, 0x65, 0xfc, 0xbb, 0xef, 0xb9, 0x82, 0x2d, 0xe1, 0xda, 0x62, 0xab, 0x3b, 0x32, 0x1d, 0x87, - 0x65, 0xf8, 0x0a, 0x00, 0x36, 0xf7, 0x84, 0x65, 0x4f, 0x46, 0x2c, 0xdb, 0xfc, 0x85, 0x50, 0x5a, - 0xca, 0x90, 0x3f, 0x34, 0x07, 0x48, 0xb1, 0x0c, 0xe5, 0x50, 0x5d, 0xb3, 0x0c, 0xd2, 0x6f, 0x99, - 0xc1, 0xf0, 0xd8, 0x33, 0x7d, 0x8b, 0x65, 0x79, 0x15, 0x4a, 0x2d, 0xbf, 0x3f, 0xb4, 0xcf, 0x04, - 0xcb, 0x35, 0x1f, 0x40, 0x35, 0xd1, 0x5f, 0x64, 0xa1, 0x5f, 0x5a, 0x81, 0x42, 0xcb, 0xb2, 0x84, - 0xc5, 0x32, 0x48, 0xa0, 0x07, 0xc8, 0xb2, 0xcd, 0x2f, 0x43, 0x25, 0x9a, 0x2d, 0x44, 0xc7, 0x83, - 0x9b, 0x2d, 0xe1, 0x2f, 0x04, 0xb3, 0x0c, 0x4a, 0x65, 0xc7, 0x75, 0x6c, 0x57, 0xb0, 0x6c, 0xe3, - 0x2f, 0x90, 0xa8, 0xf2, 0xaf, 0xa7, 0x37, 0xc4, 0x6b, 0x2f, 0x3a, 0x59, 0xd3, 0xbb, 0xe1, 0x0b, - 0x89, 0xf1, 0xed, 0xda, 0xd4, 0xb9, 0x32, 0xe4, 0xb7, 0x3c, 0x19, 0xb0, 0x4c, 0xe3, 0xbf, 0x65, - 0xa1, 0x1c, 0x1e, 0xa8, 0xe8, 0x13, 0x4c, 0x7c, 0x47, 0x0b, 0x34, 0xfe, 0xe4, 0xd7, 0xa1, 0x20, - 0x6d, 0xa9, 0xc5, 0xb8, 0x62, 0xa8, 0x06, 0xda, 0x6a, 0xc9, 0x95, 0x55, 0x06, 0xec, 0xf4, 0x52, - 0xd9, 0x23, 0x73, 0x20, 0x76, 0xcc, 0x60, 0xa8, 0x4d, 0xd8, 0x18, 0x80, 0xf4, 0x27, 0xe6, 0x19, - 0xca, 0x1c, 0x3d, 0x57, 0x56, 0x5c, 0x12, 0xc4, 0xdf, 0x81, 0x3c, 0x0e, 0x50, 0x0b, 0xcd, 0x9f, - 0x9b, 0x1a, 0x30, 0x8a, 0xc9, 0xa1, 0x2f, 0x70, 0x79, 0xd6, 0xd1, 0x03, 0x33, 0x08, 0x99, 0xbf, - 0x06, 0x2b, 0x6a, 0x13, 0x1e, 0x84, 0xfe, 0x43, 0x89, 0x38, 0x4f, 0x41, 0x79, 0x0b, 0xa7, 0xd3, - 0x94, 0xa2, 0x5e, 0x5e, 0x40, 0xbe, 0xc3, 0xc9, 0x59, 0xef, 0x22, 0x89, 0xa1, 0x28, 0x9b, 0xef, - 0xe1, 0x9c, 0x9a, 0x52, 0xe0, 0x32, 0xb7, 0x47, 0x63, 0x79, 0xa1, 0x84, 0x66, 0x5b, 0xc8, 0xfe, - 0xd0, 0x76, 0x07, 0x2c, 0xa3, 0xa6, 0x18, 0x17, 0x91, 0x50, 0x7c, 0xdf, 0xf3, 0x59, 0xae, 0xd1, - 0x80, 0x3c, 0xca, 0x28, 0x2a, 0x49, 0xd7, 0x1c, 0x09, 0x3d, 0xd3, 0xf4, 0xbb, 0x71, 0x0d, 0xd6, - 0x66, 0xce, 0xe3, 0xc6, 0xef, 0x17, 0x95, 0x84, 0x20, 0x05, 0xd9, 0x82, 0x9a, 0x82, 0xcc, 0xbc, - 0x97, 0xd2, 0x31, 0xc8, 0x25, 0xad, 0x63, 0x3e, 0x82, 0x02, 0x0e, 0x2c, 0x54, 0x31, 0x0b, 0x90, - 0xef, 0x21, 0xba, 0xa1, 0xa8, 0xd0, 0x83, 0xe9, 0x0f, 0x45, 0xff, 0x54, 0x58, 0x5a, 0xd7, 0x87, - 0x4d, 0x14, 0x9a, 0x7e, 0xc2, 0x3c, 0x57, 0x0d, 0x12, 0x89, 0xbe, 0xe7, 0xb6, 0x47, 0xde, 0x77, - 0x6c, 0x5a, 0x57, 0x14, 0x89, 0x10, 0x10, 0x3e, 0xed, 0xa0, 0x8c, 0xe8, 0x65, 0x8b, 0x01, 0x8d, - 0x36, 0x14, 0xe8, 0xdd, 0xb8, 0x13, 0x54, 0x9f, 0x55, 0xa4, 0xe1, 0xb5, 0xc5, 0xfa, 0xac, 0xbb, - 0xdc, 0xf8, 0xdd, 0x2c, 0xe4, 0xb1, 0xcd, 0xef, 0x43, 0xc1, 0x47, 0x3f, 0x8c, 0xa6, 0xf3, 0x32, - 0x9f, 0x4d, 0xa1, 0xf0, 0x6f, 0x68, 0x51, 0xcc, 0x2e, 0x20, 0x2c, 0xd1, 0x1b, 0x93, 0x62, 0x79, - 0x1d, 0x0a, 0x63, 0xd3, 0x37, 0x47, 0x7a, 0x9f, 0xa8, 0x46, 0xf3, 0x87, 0x19, 0xc8, 0x23, 0x12, - 0x5f, 0x83, 0x5a, 0x57, 0xfa, 0xf6, 0xa9, 0x90, 0x43, 0xdf, 0x9b, 0x0c, 0x86, 0x4a, 0x92, 0x1e, - 0x8b, 0x0b, 0xa5, 0x6f, 0x94, 0x42, 0x90, 0xa6, 0x63, 0xf7, 0x59, 0x16, 0xa5, 0x6a, 0xc3, 0x73, - 0x2c, 0x96, 0xe3, 0xab, 0x50, 0x7d, 0xe2, 0x5a, 0xc2, 0x0f, 0xfa, 0x9e, 0x2f, 0x2c, 0x96, 0xd7, - 0xbb, 0xfb, 0x94, 0x15, 0xe8, 0x2c, 0x13, 0xe7, 0x92, 0x7c, 0x21, 0x56, 0xe4, 0xd7, 0x60, 0x75, - 0x23, 0xed, 0x20, 0xb1, 0x12, 0xea, 0xa4, 0x3d, 0xe1, 0xa2, 0x90, 0xb1, 0xb2, 0x12, 0x62, 0xef, - 0x3b, 0x36, 0xab, 0xe0, 0xcb, 0xd4, 0x3e, 0x61, 0xd0, 0xfc, 0x17, 0x99, 0x50, 0x73, 0xd4, 0xa0, - 0x72, 0x68, 0xfa, 0xe6, 0xc0, 0x37, 0xc7, 0xd8, 0xbf, 0x2a, 0x94, 0xd4, 0xc1, 0xf9, 0xb6, 0xd2, - 0x6e, 0xaa, 0xf1, 0x50, 0xe9, 0x46, 0xd5, 0x78, 0x87, 0xe5, 0xe2, 0xc6, 0xbb, 0x2c, 0x8f, 0xef, - 0xf8, 0xd6, 0xc4, 0x93, 0x82, 0x15, 0x48, 0xd7, 0x79, 0x96, 0x60, 0x45, 0x04, 0xf6, 0x50, 0xa3, - 0xb0, 0x12, 0x8e, 0x79, 0x13, 0xe5, 0xe7, 0xd8, 0x3b, 0x67, 0x65, 0xec, 0x06, 0x4e, 0xa3, 0xb0, - 0x58, 0x05, 0x9f, 0xec, 0x4f, 0x46, 0xc7, 0x02, 0x87, 0x09, 0xf8, 0xa4, 0xe7, 0x0d, 0x06, 0x8e, - 0x60, 0x55, 0x9c, 0x83, 0x84, 0xf2, 0x65, 0xcb, 0xa4, 0x69, 0x4d, 0xc7, 0xf1, 0x26, 0x92, 0xd5, - 0x1a, 0x3f, 0xcb, 0x41, 0x1e, 0xbd, 0x1b, 0xdc, 0x3b, 0x43, 0xd4, 0x33, 0x7a, 0xef, 0xe0, 0xef, - 0x68, 0x07, 0x66, 0xe3, 0x1d, 0xc8, 0x3f, 0xd4, 0x2b, 0x9d, 0x5b, 0x40, 0xcb, 0x22, 0xe3, 0xe4, - 0x22, 0x73, 0xc8, 0x8f, 0xec, 0x91, 0xd0, 0xba, 0x8e, 0x7e, 0x23, 0x2c, 0xc0, 0xf3, 0xb8, 0x40, - 0xc1, 0x13, 0xfa, 0x8d, 0xbb, 0xc6, 0xc4, 0x63, 0xa1, 0x25, 0x69, 0x0f, 0xe4, 0x8c, 0xb0, 0x39, - 0x47, 0x7b, 0x55, 0xe6, 0x6a, 0xaf, 0x8f, 0x42, 0xed, 0x55, 0x5a, 0x60, 0xd7, 0x53, 0x37, 0x93, - 0x9a, 0x2b, 0x56, 0x1a, 0xe5, 0xc5, 0xc9, 0x13, 0x87, 0xc9, 0x96, 0x96, 0xda, 0xf8, 0xa0, 0x2b, - 0xab, 0x59, 0x66, 0x19, 0x5c, 0x4d, 0xda, 0xae, 0x4a, 0xe7, 0x3d, 0xb5, 0x2d, 0xe1, 0xb1, 0x1c, - 0x1d, 0x84, 0x13, 0xcb, 0xf6, 0x58, 0x1e, 0x2d, 0xaf, 0xc3, 0xad, 0x6d, 0x56, 0x68, 0xbe, 0x96, - 0x38, 0x92, 0x5a, 0x13, 0xe9, 0x29, 0x36, 0x24, 0xbe, 0x19, 0x25, 0x8d, 0xc7, 0xc2, 0x62, 0xd9, - 0xe6, 0x57, 0xe7, 0xa8, 0xd9, 0x1a, 0x54, 0x9e, 0x8c, 0x1d, 0xcf, 0xb4, 0xae, 0xd0, 0xb3, 0xcb, - 0x00, 0xb1, 0x57, 0xdd, 0xf8, 0x59, 0x33, 0x3e, 0xce, 0xd1, 0x16, 0x0d, 0xbc, 0x89, 0xdf, 0x17, - 0xa4, 0x42, 0x2a, 0x86, 0x6e, 0xf1, 0x6f, 0x42, 0x01, 0x9f, 0x87, 0x61, 0x9c, 0xfb, 0x0b, 0xf9, - 0x72, 0xeb, 0x4f, 0x6d, 0xf1, 0xdc, 0x50, 0x84, 0xfc, 0x0e, 0x80, 0xd9, 0x97, 0xf6, 0x99, 0x40, - 0xa0, 0xde, 0xec, 0x09, 0x08, 0x7f, 0x2f, 0x69, 0xbe, 0x5c, 0x1d, 0x87, 0x4c, 0xd8, 0x35, 0xdc, - 0x80, 0x2a, 0x6e, 0xdd, 0xf1, 0x81, 0x8f, 0xbb, 0xbd, 0xbe, 0x4c, 0x84, 0x6f, 0x2d, 0xd6, 0xbd, - 0x47, 0x11, 0xa1, 0x91, 0x64, 0xc2, 0x9f, 0xc0, 0xb2, 0x8a, 0xa9, 0x69, 0xa6, 0x35, 0x62, 0xfa, - 0xf6, 0x62, 0x4c, 0x0f, 0x62, 0x4a, 0x23, 0xc5, 0x66, 0x36, 0x2c, 0x59, 0x78, 0xe9, 0xb0, 0xe4, - 0x6b, 0xb0, 0xd2, 0x4b, 0xef, 0x02, 0x75, 0x54, 0x4c, 0x41, 0x79, 0x13, 0x96, 0xed, 0x20, 0x8e, - 0x8a, 0x52, 0x8c, 0xa4, 0x6c, 0xa4, 0x60, 0x8d, 0x7f, 0x5b, 0x84, 0x3c, 0xcd, 0xfc, 0x74, 0x8c, - 0x6b, 0x33, 0xa5, 0xd2, 0x1f, 0x2c, 0xbe, 0xd4, 0x53, 0x3b, 0x9e, 0x34, 0x48, 0x2e, 0xa1, 0x41, - 0xbe, 0x09, 0x85, 0xc0, 0xf3, 0x65, 0xb8, 0xbc, 0x0b, 0x0a, 0x51, 0xd7, 0xf3, 0xa5, 0xa1, 0x08, - 0xf9, 0x36, 0x94, 0x4e, 0x6c, 0x47, 0xe2, 0xa2, 0xa8, 0xc9, 0x7b, 0x73, 0x31, 0x1e, 0xdb, 0x44, - 0x64, 0x84, 0xc4, 0x7c, 0x37, 0x29, 0x6c, 0x45, 0xe2, 0xb4, 0xbe, 0x18, 0xa7, 0x79, 0x32, 0x78, - 0x1f, 0x58, 0xdf, 0x3b, 0x13, 0xbe, 0x91, 0x08, 0x4c, 0xaa, 0x43, 0x7a, 0x06, 0xce, 0x1b, 0x50, - 0x1e, 0xda, 0x96, 0x40, 0x3b, 0x87, 0x74, 0x4c, 0xd9, 0x88, 0xda, 0xfc, 0x31, 0x94, 0xc9, 0x3f, - 0x40, 0xad, 0x58, 0x79, 0xe9, 0xc9, 0x57, 0xae, 0x4a, 0xc8, 0x00, 0x5f, 0x44, 0x2f, 0xdf, 0xb6, - 0x25, 0xc5, 0xa7, 0xcb, 0x46, 0xd4, 0xc6, 0x0e, 0x93, 0xbc, 0x27, 0x3b, 0x5c, 0x55, 0x1d, 0x9e, - 0x86, 0xf3, 0x77, 0xe1, 0x06, 0xc1, 0xa6, 0x0e, 0x49, 0xdc, 0x6a, 0xc8, 0x74, 0xfe, 0x43, 0x34, - 0x58, 0xc6, 0xe6, 0x40, 0xec, 0xda, 0x23, 0x5b, 0xd6, 0x6b, 0x77, 0x33, 0xf7, 0x0a, 0x46, 0x0c, - 0xe0, 0x6f, 0xc2, 0x9a, 0x25, 0x4e, 0xcc, 0x89, 0x23, 0x7b, 0x62, 0x34, 0x76, 0x4c, 0x29, 0x3a, - 0x16, 0xc9, 0x68, 0xc5, 0x98, 0x7d, 0xc0, 0xdf, 0x82, 0x6b, 0x1a, 0x78, 0x10, 0x65, 0x15, 0x3a, - 0x16, 0x85, 0xef, 0x2a, 0xc6, 0xbc, 0x47, 0xcd, 0x3d, 0xad, 0x86, 0xf1, 0x00, 0x45, 0x3f, 0x35, - 0x54, 0xa0, 0x81, 0x54, 0x27, 0xf2, 0x23, 0xd3, 0x71, 0x84, 0x7f, 0xa1, 0x9c, 0xdc, 0xc7, 0xa6, - 0x7b, 0x6c, 0xba, 0x2c, 0x47, 0x67, 0xac, 0xe9, 0x08, 0xd7, 0x32, 0x7d, 0x75, 0x22, 0x3f, 0xa2, - 0x03, 0xbd, 0xd0, 0xbc, 0x07, 0x79, 0x9a, 0xd2, 0x0a, 0x14, 0x94, 0x97, 0x44, 0x1e, 0xb3, 0xf6, - 0x90, 0x48, 0x23, 0xef, 0xe2, 0xf6, 0x63, 0xd9, 0xc6, 0x3f, 0x28, 0x42, 0x39, 0x9c, 0xbc, 0x30, - 0x87, 0x90, 0x89, 0x73, 0x08, 0x68, 0xc6, 0x05, 0x4f, 0xed, 0xc0, 0x3e, 0xd6, 0x66, 0x69, 0xd9, - 0x88, 0x01, 0x68, 0x09, 0x3d, 0xb7, 0x2d, 0x39, 0xa4, 0x3d, 0x53, 0x30, 0x54, 0x83, 0xdf, 0x83, - 0x55, 0x0b, 0xe7, 0xc1, 0xed, 0x3b, 0x13, 0x4b, 0xf4, 0xf0, 0x14, 0x55, 0x61, 0x82, 0x69, 0x30, - 0xff, 0x14, 0x40, 0xda, 0x23, 0xb1, 0xed, 0xf9, 0x23, 0x53, 0x6a, 0xdf, 0xe0, 0x6b, 0x2f, 0x27, - 0xd5, 0xeb, 0xbd, 0x88, 0x81, 0x91, 0x60, 0x86, 0xac, 0xf1, 0x6d, 0x9a, 0x75, 0xe9, 0x73, 0xb1, - 0xde, 0x8a, 0x18, 0x18, 0x09, 0x66, 0xbc, 0x07, 0xa5, 0x13, 0xcf, 0x1f, 0x4d, 0x1c, 0x53, 0x9f, - 0xb9, 0x1f, 0xbe, 0x24, 0xdf, 0x6d, 0x45, 0x4d, 0xba, 0x27, 0x64, 0x15, 0xc7, 0xb8, 0x2b, 0x0b, - 0xc6, 0xb8, 0x9b, 0xbf, 0x08, 0x10, 0xf7, 0x90, 0xdf, 0x04, 0xbe, 0xe7, 0xb9, 0x72, 0xd8, 0x3a, - 0x3e, 0xf6, 0x37, 0xc4, 0x89, 0xe7, 0x8b, 0x2d, 0x13, 0x8f, 0xd7, 0x1b, 0xb0, 0x16, 0xc1, 0x5b, - 0x27, 0x52, 0xf8, 0x08, 0x26, 0x11, 0xe8, 0x0e, 0x3d, 0x5f, 0x2a, 0x1b, 0x8f, 0x7e, 0x3e, 0xe9, - 0xb2, 0x1c, 0x1e, 0xe9, 0x9d, 0xee, 0x01, 0xcb, 0x37, 0xef, 0x01, 0xc4, 0x53, 0x4b, 0xbe, 0x10, - 0xfd, 0x7a, 0xfb, 0xa1, 0xf6, 0x8c, 0xa8, 0xf5, 0xf0, 0x5d, 0x96, 0x69, 0xfe, 0x24, 0x03, 0xd5, - 0xc4, 0x90, 0xd2, 0x3e, 0xf3, 0xa6, 0x37, 0x71, 0xa5, 0x72, 0xd2, 0xe9, 0xe7, 0x53, 0xd3, 0x99, - 0xe0, 0xe1, 0xbe, 0x06, 0x35, 0x6a, 0x6f, 0xd9, 0x81, 0xb4, 0xdd, 0xbe, 0x64, 0xb9, 0x08, 0x45, - 0x19, 0x06, 0xf9, 0x08, 0x65, 0xdf, 0xd3, 0xa0, 0x02, 0x67, 0xb0, 0x7c, 0x28, 0xfc, 0xbe, 0x08, - 0x91, 0xc8, 0x18, 0xd6, 0x90, 0x08, 0x4d, 0x19, 0xc3, 0xa6, 0x1c, 0x76, 0x27, 0x23, 0x56, 0x46, - 0xa3, 0x12, 0x1b, 0xad, 0x33, 0xe1, 0xa3, 0x2d, 0x53, 0xc1, 0xf7, 0x20, 0x00, 0x77, 0x83, 0xe9, - 0x32, 0x08, 0xb1, 0xf7, 0x6c, 0x97, 0x55, 0xa3, 0x86, 0x79, 0xce, 0x96, 0xb1, 0xff, 0xe4, 0x3a, - 0xb0, 0x5a, 0xe3, 0xbf, 0xe4, 0x20, 0x8f, 0x7a, 0x1d, 0x7d, 0xdd, 0xa4, 0x12, 0x52, 0x7b, 0x25, - 0x09, 0xfa, 0x7c, 0xa7, 0x11, 0xf2, 0x4e, 0x9e, 0x46, 0x1f, 0x40, 0xb5, 0x3f, 0x09, 0xa4, 0x37, - 0xa2, 0xa3, 0x58, 0x67, 0xbb, 0x6e, 0xce, 0x44, 0x8d, 0x68, 0x3a, 0x8d, 0x24, 0x2a, 0x7f, 0x0f, - 0x8a, 0x27, 0x4a, 0xea, 0x55, 0xdc, 0xe8, 0xe7, 0x2e, 0x39, 0xad, 0xb5, 0x64, 0x6b, 0x64, 0x1c, - 0x97, 0x3d, 0xb3, 0x63, 0x93, 0x20, 0x7d, 0xea, 0x16, 0xa3, 0x53, 0xf7, 0x17, 0x61, 0x45, 0xe0, - 0x84, 0x1f, 0x3a, 0x66, 0x5f, 0x8c, 0x84, 0x1b, 0x6e, 0xb3, 0x77, 0x5f, 0x62, 0xc4, 0xb4, 0x62, - 0x34, 0xec, 0x29, 0x5e, 0xa8, 0x79, 0x5c, 0x0f, 0x0f, 0xff, 0xd0, 0xb1, 0x2f, 0x1b, 0x31, 0xa0, - 0xf9, 0x25, 0xad, 0x2f, 0x4b, 0x90, 0x6b, 0x05, 0x7d, 0x1d, 0x01, 0x11, 0x41, 0x5f, 0xb9, 0x57, - 0x9b, 0x34, 0x1d, 0x2c, 0xdb, 0x7c, 0x1b, 0x2a, 0xd1, 0x1b, 0x50, 0x78, 0xf6, 0x3d, 0xd9, 0x1d, - 0x8b, 0xbe, 0x7d, 0x62, 0x0b, 0x4b, 0xc9, 0x67, 0x57, 0x9a, 0xbe, 0x54, 0x41, 0xc4, 0xb6, 0x6b, - 0xb1, 0x6c, 0xe3, 0x77, 0xca, 0x50, 0x54, 0x87, 0xaf, 0x1e, 0x70, 0x25, 0x1a, 0xf0, 0xb7, 0xa0, - 0xec, 0x8d, 0x85, 0x6f, 0x4a, 0xcf, 0xd7, 0x91, 0x9b, 0xf7, 0x5e, 0xe6, 0x30, 0x5f, 0x3f, 0xd0, - 0xc4, 0x46, 0xc4, 0x66, 0x5a, 0x9a, 0xb2, 0xb3, 0xd2, 0x74, 0x1f, 0x58, 0x78, 0x6e, 0x1f, 0xfa, - 0x48, 0x27, 0x2f, 0xb4, 0x1f, 0x3e, 0x03, 0xe7, 0x3d, 0xa8, 0xf4, 0x3d, 0xd7, 0xb2, 0xa3, 0x28, - 0xce, 0xca, 0xc3, 0xaf, 0xbe, 0x54, 0x0f, 0x37, 0x43, 0x6a, 0x23, 0x66, 0xc4, 0xdf, 0x84, 0xc2, - 0x19, 0x8a, 0x19, 0xc9, 0xd3, 0xe5, 0x42, 0xa8, 0x90, 0xf8, 0x67, 0x50, 0xfd, 0xee, 0xc4, 0xee, - 0x9f, 0x1e, 0x24, 0xa3, 0x84, 0x1f, 0xbc, 0x54, 0x2f, 0xbe, 0x15, 0xd3, 0x1b, 0x49, 0x66, 0x09, - 0xd1, 0x2e, 0xfd, 0x09, 0x44, 0xbb, 0x3c, 0x2b, 0xda, 0x06, 0xd4, 0x5c, 0x11, 0x48, 0x61, 0x6d, - 0x6b, 0x5b, 0x0d, 0x3e, 0x87, 0xad, 0x96, 0x66, 0xd1, 0xfc, 0x22, 0x94, 0xc3, 0x05, 0xe7, 0x45, - 0xc8, 0xee, 0xa3, 0x53, 0x54, 0x84, 0xec, 0x81, 0xaf, 0xa4, 0xad, 0x85, 0xd2, 0xd6, 0xfc, 0xa3, - 0x0c, 0x54, 0xa2, 0x49, 0x4f, 0x6b, 0xce, 0xf6, 0x77, 0x27, 0xa6, 0xc3, 0x32, 0xe4, 0x2e, 0x7b, - 0x52, 0xb5, 0x48, 0x59, 0x3f, 0xa2, 0x64, 0xbd, 0xcf, 0x72, 0x64, 0x22, 0x88, 0x20, 0x60, 0x79, - 0xce, 0x61, 0x45, 0x83, 0x0f, 0x7c, 0x85, 0x5a, 0x40, 0xc5, 0x87, 0x4f, 0x43, 0x40, 0x51, 0x59, - 0x14, 0xa7, 0x42, 0x29, 0xc8, 0x7d, 0x4f, 0x52, 0xa3, 0x8c, 0x9d, 0xea, 0xb8, 0xac, 0x82, 0xef, - 0xdc, 0xf7, 0x64, 0x07, 0x55, 0x62, 0xe4, 0x9e, 0x55, 0xc3, 0xd7, 0x53, 0x8b, 0x34, 0x62, 0xcb, - 0x71, 0x3a, 0x2e, 0xab, 0xe9, 0x07, 0xaa, 0xb5, 0x82, 0x1c, 0xdb, 0xe7, 0x66, 0x1f, 0xc9, 0x57, - 0x51, 0xc3, 0x22, 0x8d, 0x6e, 0x33, 0xdc, 0x92, 0xed, 0x73, 0x3b, 0x90, 0x01, 0x5b, 0x6b, 0xfe, - 0x61, 0x06, 0xaa, 0x89, 0x05, 0x46, 0xf7, 0x8f, 0x10, 0xf1, 0x28, 0x53, 0xde, 0xe0, 0xa7, 0x38, - 0x8d, 0xbe, 0x15, 0x1e, 0x53, 0x3d, 0x0f, 0x7f, 0x66, 0xf1, 0x7d, 0x3d, 0x6f, 0xe4, 0xf9, 0xbe, - 0xf7, 0x5c, 0x99, 0x3e, 0xbb, 0x66, 0x20, 0x9f, 0x09, 0x71, 0xca, 0xf2, 0x38, 0xd4, 0xcd, 0x89, - 0xef, 0x0b, 0x57, 0x01, 0x0a, 0xd4, 0x39, 0x71, 0xae, 0x5a, 0x45, 0x64, 0x8a, 0xc8, 0x74, 0x0e, - 0xb2, 0x12, 0x2a, 0x02, 0x8d, 0xad, 0x20, 0x65, 0x44, 0x40, 0x74, 0xd5, 0xac, 0xe0, 0xa1, 0xa2, - 0x22, 0x14, 0x07, 0x27, 0x5b, 0xe6, 0x45, 0xd0, 0x1a, 0x78, 0x0c, 0xa6, 0x81, 0xfb, 0xde, 0x73, - 0x56, 0x6d, 0x4c, 0x00, 0x62, 0x9f, 0x0c, 0x7d, 0x51, 0x14, 0x88, 0x28, 0x87, 0xa0, 0x5b, 0xfc, - 0x00, 0x00, 0x7f, 0x11, 0x66, 0xe8, 0x90, 0xbe, 0x84, 0xa1, 0x4c, 0x74, 0x46, 0x82, 0x45, 0xe3, - 0x2f, 0x41, 0x25, 0x7a, 0xc0, 0xeb, 0x50, 0x22, 0x93, 0x36, 0x7a, 0x6d, 0xd8, 0x44, 0xfb, 0xcc, - 0x76, 0x2d, 0x71, 0x4e, 0x7a, 0xa5, 0x60, 0xa8, 0x06, 0xf6, 0x72, 0x68, 0x5b, 0x96, 0x70, 0xc3, - 0x4c, 0x8f, 0x6a, 0xcd, 0xcb, 0xc7, 0xe7, 0xe7, 0xe6, 0xe3, 0x1b, 0xbf, 0x04, 0xd5, 0x84, 0xd3, - 0x78, 0xe9, 0xb0, 0x13, 0x1d, 0xcb, 0xa6, 0x3b, 0x76, 0x1b, 0x2a, 0x61, 0x0d, 0x48, 0x40, 0x67, - 0x5b, 0xc5, 0x88, 0x01, 0x8d, 0x7f, 0x92, 0x45, 0x4b, 0x16, 0x87, 0x36, 0xed, 0xe8, 0x6d, 0x43, - 0x31, 0x90, 0xa6, 0x9c, 0x84, 0xc5, 0x0c, 0x0b, 0x6e, 0xd0, 0x2e, 0xd1, 0xec, 0x2c, 0x19, 0x9a, - 0x9a, 0x7f, 0x04, 0x39, 0x69, 0x0e, 0x74, 0xa0, 0xf4, 0x8d, 0xc5, 0x98, 0xf4, 0xcc, 0xc1, 0xce, - 0x92, 0x81, 0x74, 0x7c, 0x17, 0xca, 0x7d, 0x1d, 0xdb, 0xd2, 0x4a, 0x71, 0x41, 0x5f, 0x2c, 0x8c, - 0x88, 0xed, 0x2c, 0x19, 0x11, 0x07, 0xfe, 0x4d, 0xc8, 0xa3, 0x75, 0xa9, 0x6b, 0x3e, 0x16, 0xf4, - 0x31, 0x71, 0xbb, 0xec, 0x2c, 0x19, 0x44, 0xb9, 0x51, 0x82, 0x02, 0xe9, 0xe0, 0x46, 0x1d, 0x8a, - 0x6a, 0xac, 0xd3, 0x33, 0xd7, 0xb8, 0x05, 0xb9, 0x9e, 0x39, 0x40, 0x0b, 0xdf, 0xb6, 0x02, 0x1d, - 0x2a, 0xc1, 0x9f, 0x8d, 0x57, 0xe3, 0x38, 0x5d, 0x32, 0x04, 0x9c, 0x49, 0x85, 0x80, 0x1b, 0x45, - 0xc8, 0xe3, 0x1b, 0x1b, 0xb7, 0xaf, 0xf2, 0x16, 0x1a, 0xbf, 0x9d, 0x43, 0xc7, 0x42, 0x8a, 0xf3, - 0xb9, 0xe1, 0xed, 0x4f, 0xa0, 0x32, 0xf6, 0xbd, 0xbe, 0x08, 0x02, 0xcf, 0xd7, 0xc6, 0xd1, 0x9b, - 0x2f, 0x4e, 0x3d, 0xaf, 0x1f, 0x86, 0x34, 0x46, 0x4c, 0xde, 0xfc, 0x57, 0x59, 0xa8, 0x44, 0x0f, - 0x94, 0x3f, 0x23, 0xc5, 0xb9, 0x0a, 0x65, 0xee, 0x09, 0x7f, 0x64, 0xda, 0x96, 0xd2, 0x1e, 0x9b, - 0x43, 0x33, 0x34, 0x72, 0x3f, 0xf5, 0x26, 0x72, 0x72, 0x2c, 0x54, 0x08, 0xeb, 0xa9, 0x3d, 0x12, - 0x1e, 0xcb, 0x53, 0xf2, 0x08, 0x05, 0xbb, 0xef, 0x78, 0x13, 0x8b, 0x15, 0xb0, 0xfd, 0x88, 0x8e, - 0xb7, 0x3d, 0x73, 0x1c, 0x28, 0x9d, 0xb9, 0x67, 0xfb, 0x1e, 0x2b, 0x21, 0xd1, 0xb6, 0x3d, 0x18, - 0x99, 0xac, 0x8c, 0xcc, 0x7a, 0xcf, 0x6d, 0x89, 0x4a, 0xb8, 0x82, 0x66, 0xea, 0xc1, 0x58, 0xb8, - 0x5d, 0xe9, 0x0b, 0x21, 0xf7, 0xcc, 0xb1, 0x8a, 0x69, 0x1a, 0xc2, 0xb2, 0x6c, 0xa9, 0xf4, 0xe7, - 0xb6, 0xd9, 0x17, 0xc7, 0x9e, 0x77, 0xca, 0x96, 0x51, 0xd1, 0x74, 0xdc, 0x40, 0x9a, 0x03, 0xdf, - 0x1c, 0x29, 0x1d, 0xda, 0x13, 0x8e, 0xa0, 0xd6, 0x0a, 0xbd, 0xdb, 0x96, 0xc3, 0xc9, 0xf1, 0x23, - 0xf4, 0xfb, 0x56, 0x55, 0x9e, 0xc9, 0x12, 0x63, 0x81, 0x3a, 0x74, 0x19, 0xca, 0x1b, 0xb6, 0x63, - 0x1f, 0xdb, 0x8e, 0xcd, 0xd6, 0x10, 0xb5, 0x7d, 0xde, 0x37, 0x1d, 0xdb, 0xf2, 0xcd, 0xe7, 0x8c, - 0x63, 0xe7, 0x1e, 0xfb, 0xde, 0xa9, 0xcd, 0xae, 0x21, 0x22, 0xb9, 0x81, 0x67, 0xf6, 0xf7, 0xd8, - 0x75, 0xca, 0x95, 0x9d, 0x0a, 0xd9, 0x1f, 0x9e, 0x98, 0xc7, 0xec, 0x46, 0x1c, 0xd2, 0xbb, 0xd9, - 0x58, 0x83, 0xd5, 0xa9, 0xac, 0x7c, 0xa3, 0xa4, 0xbd, 0xcf, 0x46, 0x0d, 0xaa, 0x89, 0x74, 0x69, - 0xe3, 0x35, 0x28, 0x87, 0xc9, 0x54, 0xf4, 0xd2, 0xed, 0x40, 0x85, 0x81, 0xb5, 0x90, 0x44, 0xed, - 0xc6, 0x7f, 0xc8, 0x40, 0x51, 0x65, 0xb2, 0xf9, 0x46, 0x54, 0x79, 0x92, 0x59, 0x20, 0x7b, 0xa9, - 0x88, 0x74, 0xee, 0x37, 0x2a, 0x3f, 0xb9, 0x0e, 0x05, 0x87, 0xdc, 0x71, 0xad, 0xbe, 0xa8, 0x91, - 0xd0, 0x36, 0xb9, 0x94, 0xb6, 0xb9, 0x0d, 0x15, 0x73, 0x22, 0x3d, 0x4a, 0xd2, 0xe9, 0x0c, 0x46, - 0x0c, 0x68, 0xb6, 0xa2, 0x6c, 0x74, 0x18, 0x98, 0x24, 0x9b, 0xb1, 0xe7, 0x0b, 0xa1, 0x82, 0x8e, - 0xe4, 0x6b, 0x67, 0xe9, 0x24, 0xf1, 0x46, 0x63, 0xb3, 0x2f, 0x09, 0x40, 0x67, 0x2c, 0xaa, 0x5a, - 0x96, 0xc7, 0x3d, 0xb0, 0x39, 0x34, 0x65, 0xf3, 0x04, 0xca, 0x87, 0x5e, 0x30, 0x7d, 0x62, 0x97, - 0x20, 0xd7, 0xf3, 0xc6, 0xca, 0xfe, 0xdc, 0xf0, 0x24, 0xd9, 0x9f, 0xea, 0x80, 0x3e, 0x91, 0x4a, - 0xe4, 0x0c, 0x7b, 0x30, 0x94, 0xca, 0x4f, 0xef, 0xb8, 0xae, 0xf0, 0x59, 0x01, 0x57, 0xd8, 0x10, - 0x63, 0xb4, 0x79, 0x59, 0x11, 0xd7, 0x94, 0xe0, 0xdb, 0xb6, 0x1f, 0x48, 0x56, 0x6a, 0x76, 0xf0, - 0xac, 0xb5, 0x07, 0x74, 0x44, 0xd2, 0x0f, 0x62, 0xb5, 0x84, 0x5d, 0xa4, 0xe6, 0xa6, 0x70, 0x51, - 0x02, 0xc9, 0xb7, 0x52, 0x8e, 0x21, 0xbd, 0x20, 0x8b, 0xe7, 0x1b, 0xb5, 0x3f, 0x99, 0x04, 0xd2, - 0x3e, 0xb9, 0x60, 0xb9, 0xe6, 0x33, 0xa8, 0xa5, 0x8a, 0x9c, 0xf8, 0x75, 0x60, 0x29, 0x00, 0x76, - 0x7d, 0x89, 0xdf, 0x82, 0x6b, 0x29, 0xe8, 0x9e, 0x6d, 0x59, 0x14, 0x09, 0x9e, 0x7e, 0x10, 0x0e, - 0x70, 0xa3, 0x02, 0xa5, 0xbe, 0x5a, 0xc3, 0xe6, 0x21, 0xd4, 0x68, 0x51, 0xf7, 0x84, 0x34, 0x0f, - 0x5c, 0xe7, 0xe2, 0x4f, 0x5c, 0x89, 0xd6, 0xfc, 0xb2, 0x76, 0xbf, 0x50, 0x9b, 0x9c, 0xf8, 0xde, - 0x88, 0x78, 0x15, 0x0c, 0xfa, 0x8d, 0xdc, 0xa5, 0xa7, 0x25, 0x23, 0x2b, 0xbd, 0xe6, 0x7f, 0xad, - 0x42, 0xa9, 0xd5, 0xef, 0xa3, 0xc3, 0x38, 0xf3, 0xe6, 0xf7, 0xa0, 0xd8, 0xf7, 0xdc, 0x13, 0x7b, - 0xa0, 0xb5, 0xf5, 0xb4, 0xdd, 0xa8, 0xe9, 0x50, 0x1c, 0x4f, 0xec, 0x81, 0xa1, 0x91, 0x91, 0x4c, - 0x9f, 0x36, 0x85, 0x2b, 0xc9, 0x94, 0xca, 0x8d, 0x0e, 0x97, 0x07, 0x90, 0xb7, 0xdd, 0x13, 0x4f, - 0x97, 0x8d, 0x7e, 0xe1, 0x12, 0x22, 0xaa, 0x9d, 0x24, 0xc4, 0xc6, 0x7f, 0xca, 0x40, 0x51, 0xbd, - 0x9a, 0xbf, 0x06, 0x2b, 0xc2, 0xc5, 0xad, 0x16, 0x2a, 0x7a, 0xbd, 0xc7, 0xa6, 0xa0, 0x68, 0xd2, - 0x6a, 0x88, 0x38, 0x9e, 0x0c, 0x74, 0x64, 0x26, 0x09, 0xe2, 0x1f, 0xc0, 0x2d, 0xd5, 0x3c, 0xf4, - 0x85, 0x2f, 0x1c, 0x61, 0x06, 0x62, 0x73, 0x68, 0xba, 0xae, 0x70, 0xf4, 0xb1, 0x7f, 0xd9, 0x63, - 0xde, 0x84, 0x65, 0xf5, 0xa8, 0x3b, 0x36, 0xfb, 0x22, 0xd0, 0x7b, 0x29, 0x05, 0xe3, 0x5f, 0x81, - 0x02, 0x55, 0xd5, 0xd6, 0xad, 0xab, 0x97, 0x52, 0x61, 0x35, 0xbc, 0xe8, 0x5c, 0x6a, 0x01, 0xa8, - 0x69, 0x42, 0x97, 0x4c, 0xeb, 0x86, 0x9f, 0xbf, 0x72, 0x5e, 0xc9, 0x3b, 0x4c, 0x10, 0x61, 0xff, - 0x2c, 0xe1, 0x08, 0x2a, 0x7f, 0xc4, 0x73, 0x33, 0x4b, 0x79, 0x97, 0x14, 0xac, 0xf1, 0x1f, 0xf3, - 0x90, 0xc7, 0x19, 0x46, 0xe4, 0xa1, 0x37, 0x12, 0x51, 0xf4, 0x59, 0x19, 0x22, 0x29, 0x18, 0x1a, - 0x3e, 0xa6, 0x2a, 0x00, 0x88, 0xd0, 0x94, 0x6a, 0x99, 0x06, 0x23, 0xe6, 0xd8, 0xf7, 0x4e, 0x6c, - 0x27, 0xc6, 0xd4, 0x26, 0xd2, 0x14, 0x98, 0x7f, 0x15, 0x6e, 0x8e, 0x4c, 0xff, 0x54, 0x48, 0xda, - 0xdd, 0xcf, 0x3c, 0xff, 0x34, 0xc0, 0x99, 0xeb, 0x58, 0x3a, 0x6c, 0x79, 0xc9, 0x53, 0xfe, 0x26, - 0xac, 0x3d, 0x0f, 0x9b, 0xd1, 0x3b, 0x54, 0xe0, 0x70, 0xf6, 0x01, 0x2a, 0x63, 0x4b, 0x9c, 0xd9, - 0xc4, 0xb7, 0xac, 0x6a, 0x6b, 0xc3, 0x36, 0x8a, 0x92, 0xa9, 0x26, 0xb2, 0xab, 0xdf, 0xac, 0xf3, - 0x4f, 0x69, 0x28, 0xea, 0x4d, 0x55, 0x73, 0x14, 0x74, 0x2c, 0x8a, 0xbb, 0x56, 0x8c, 0x18, 0x80, - 0x82, 0x46, 0xaf, 0x7c, 0xaa, 0x54, 0x6e, 0x4d, 0x39, 0xa8, 0x09, 0x10, 0x62, 0x48, 0xd1, 0x1f, - 0x86, 0x2f, 0x51, 0x41, 0xd1, 0x24, 0x88, 0xdf, 0x01, 0x18, 0x98, 0x52, 0x3c, 0x37, 0x2f, 0x9e, - 0xf8, 0x4e, 0x5d, 0xa8, 0x44, 0x4a, 0x0c, 0x41, 0x17, 0xd7, 0xf1, 0xfa, 0xa6, 0xd3, 0x95, 0x9e, - 0x6f, 0x0e, 0xc4, 0xa1, 0x29, 0x87, 0xf5, 0x81, 0x72, 0x71, 0xa7, 0xe1, 0x38, 0x62, 0x69, 0x8f, - 0xc4, 0x67, 0x9e, 0x2b, 0xea, 0x43, 0x35, 0xe2, 0xb0, 0x8d, 0x3d, 0x31, 0x5d, 0xd3, 0xb9, 0x90, - 0x76, 0x1f, 0xc7, 0x62, 0xab, 0x9e, 0x24, 0x40, 0x14, 0x54, 0x10, 0x12, 0xe7, 0xb1, 0x63, 0xd5, - 0xbf, 0xa3, 0xc6, 0x1a, 0x01, 0x70, 0x75, 0x85, 0x1c, 0x0a, 0x5f, 0x4c, 0x46, 0x2d, 0xcb, 0xf2, - 0x45, 0x10, 0xd4, 0x4f, 0xd5, 0xea, 0x4e, 0x81, 0x1b, 0xbf, 0x9d, 0xa5, 0x3c, 0xd7, 0xb0, 0xf1, - 0xdf, 0x33, 0x50, 0x6a, 0x8d, 0xc7, 0x24, 0x6a, 0x75, 0x28, 0x99, 0xe3, 0xf1, 0x4e, 0x9c, 0x99, - 0x0c, 0x9b, 0xfa, 0xc9, 0x7e, 0x9c, 0x9f, 0x0c, 0x9b, 0x78, 0x98, 0x99, 0xe3, 0x71, 0x5c, 0x17, - 0xac, 0x5b, 0xd8, 0xd1, 0xbe, 0xaa, 0xc9, 0x6e, 0x49, 0x9d, 0x6f, 0x8c, 0x01, 0x38, 0x09, 0xe2, - 0x7c, 0x6c, 0xfb, 0x22, 0xca, 0x3a, 0x46, 0x6d, 0x2a, 0xb6, 0xea, 0x7b, 0xe3, 0x30, 0x9d, 0xf8, - 0xc6, 0x25, 0x7b, 0x0b, 0x7b, 0xbf, 0xbe, 0x8b, 0xb3, 0xdb, 0x1a, 0xdb, 0x5d, 0x24, 0x30, 0x14, - 0x9d, 0x3a, 0xe0, 0x5b, 0x94, 0xe6, 0x0a, 0xe3, 0xfd, 0x61, 0xbb, 0xf9, 0x0e, 0xd4, 0x52, 0x34, - 0x78, 0x80, 0x51, 0x80, 0x9c, 0xc2, 0x29, 0x55, 0x28, 0x7d, 0x12, 0x78, 0x6e, 0xeb, 0xb0, 0xa3, - 0x8e, 0xd4, 0xed, 0x89, 0xe3, 0xb0, 0x6c, 0xf3, 0x00, 0x20, 0xde, 0xc9, 0x78, 0x3c, 0x2a, 0x66, - 0x6c, 0x49, 0x05, 0xef, 0x5c, 0xcb, 0x76, 0x07, 0x5b, 0x7a, 0xf3, 0xb2, 0x0c, 0x02, 0x29, 0x28, - 0x23, 0xac, 0x08, 0x48, 0xe6, 0x1b, 0xb5, 0x84, 0xc5, 0x72, 0xcd, 0xff, 0x93, 0x81, 0x6a, 0xa2, - 0x64, 0xe4, 0x4f, 0xb1, 0xcc, 0x05, 0xc7, 0x8e, 0xe6, 0x11, 0xca, 0xa9, 0x5a, 0x90, 0xa8, 0x8d, - 0x52, 0xac, 0x2b, 0x5a, 0xf0, 0xa9, 0x0a, 0xc1, 0x24, 0x20, 0x9f, 0xab, 0xc4, 0xa5, 0xf9, 0x50, - 0xc7, 0xb1, 0xaa, 0x50, 0x7a, 0xe2, 0x9e, 0xba, 0xde, 0x73, 0x57, 0xd9, 0x25, 0x54, 0xb7, 0x94, - 0xca, 0xc0, 0x86, 0xa5, 0x45, 0xb9, 0xe6, 0x3f, 0xcf, 0x4f, 0x95, 0xf8, 0xb5, 0xa1, 0xa8, 0x9c, - 0x27, 0xb2, 0xeb, 0x67, 0x6b, 0xb2, 0x92, 0xc8, 0x3a, 0xdb, 0x97, 0x00, 0x19, 0x9a, 0x18, 0xbd, - 0x9a, 0xa8, 0x00, 0x36, 0x3b, 0x37, 0x2b, 0x99, 0x62, 0x14, 0x9e, 0x45, 0xa9, 0x1a, 0xf0, 0x88, - 0x43, 0xe3, 0xaf, 0x67, 0xe0, 0xfa, 0x3c, 0x94, 0x64, 0xa5, 0x7c, 0x26, 0x5d, 0x29, 0xdf, 0x9d, - 0xaa, 0x3c, 0xcf, 0xd2, 0x68, 0x1e, 0xbc, 0x64, 0x27, 0xd2, 0x75, 0xe8, 0xcd, 0xdf, 0xcf, 0xc0, - 0xda, 0xcc, 0x98, 0x13, 0x76, 0x1b, 0x40, 0x51, 0x49, 0x96, 0x2a, 0x0c, 0x8b, 0x4a, 0x75, 0x54, - 0xaa, 0x85, 0x2c, 0x9a, 0x40, 0xd5, 0x3e, 0xe8, 0x5a, 0x7b, 0xe5, 0x34, 0xe0, 0xaa, 0xe1, 0x81, - 0x39, 0x10, 0x2a, 0x2c, 0xad, 0x8c, 0x4b, 0x0d, 0x29, 0x2a, 0xc3, 0x5e, 0xe5, 0x83, 0x58, 0x89, - 0x0a, 0xce, 0x26, 0x63, 0xc7, 0xee, 0x63, 0xb3, 0xcc, 0x1b, 0x70, 0x53, 0x5d, 0xb8, 0xd0, 0x4e, - 0xf4, 0x49, 0x6f, 0x68, 0xd3, 0xe6, 0x60, 0x15, 0x7c, 0xcf, 0xe1, 0xe4, 0xd8, 0xb1, 0x83, 0x21, - 0x83, 0xa6, 0x01, 0xd7, 0xe6, 0x0c, 0x90, 0xba, 0xfc, 0x54, 0x77, 0x7f, 0x05, 0x60, 0xeb, 0x69, - 0xd8, 0x69, 0x96, 0xe1, 0x1c, 0x56, 0xb6, 0x9e, 0x26, 0xb9, 0xeb, 0xcd, 0xf3, 0x14, 0xb5, 0x75, - 0xc0, 0x72, 0xcd, 0x5f, 0xc9, 0x84, 0x15, 0x21, 0x8d, 0xbf, 0x08, 0x35, 0xd5, 0xe1, 0x43, 0xf3, - 0xc2, 0xf1, 0x4c, 0x8b, 0xb7, 0x61, 0x25, 0x88, 0xae, 0x04, 0x25, 0x0e, 0xe8, 0x69, 0xc3, 0xa7, - 0x9b, 0x42, 0x32, 0xa6, 0x88, 0x42, 0xc7, 0x30, 0x1b, 0xa7, 0x91, 0x38, 0xb9, 0xb8, 0x26, 0x6d, - 0xb9, 0x65, 0x72, 0x5a, 0xcd, 0xe6, 0x57, 0x60, 0xad, 0x1b, 0x1f, 0x66, 0xca, 0x83, 0x40, 0xe1, - 0x50, 0x27, 0xe1, 0x56, 0x28, 0x1c, 0xba, 0xd9, 0xfc, 0x47, 0x25, 0x80, 0x38, 0x65, 0x36, 0x67, - 0xcf, 0xcf, 0xab, 0x00, 0x99, 0x49, 0x60, 0xe7, 0x5e, 0x3a, 0x81, 0xfd, 0x41, 0xe4, 0xc8, 0xa8, - 0x70, 0xfa, 0x74, 0x19, 0x7c, 0xdc, 0xa7, 0x69, 0xf7, 0x25, 0x55, 0x20, 0x55, 0x98, 0x2e, 0x90, - 0xba, 0x3b, 0x5b, 0x4d, 0x39, 0xa5, 0x8c, 0xe2, 0x38, 0x4d, 0x29, 0x15, 0xa7, 0x69, 0x40, 0xd9, - 0x17, 0xa6, 0xe5, 0xb9, 0xce, 0x45, 0x98, 0x27, 0x0d, 0xdb, 0xfc, 0x1d, 0x28, 0x48, 0xba, 0xd5, - 0x54, 0xa6, 0xbd, 0xf3, 0x82, 0x85, 0x53, 0xb8, 0xa8, 0xd9, 0xec, 0x40, 0x97, 0x40, 0x2a, 0x2b, - 0xa1, 0x6c, 0x24, 0x20, 0x7c, 0x1d, 0xb8, 0x8d, 0x4e, 0xab, 0xe3, 0x08, 0x6b, 0xe3, 0x62, 0x4b, - 0xa5, 0x2f, 0xc9, 0x8e, 0x29, 0x1b, 0x73, 0x9e, 0x84, 0xeb, 0xbf, 0x1c, 0xaf, 0x3f, 0x75, 0xf9, - 0xcc, 0x0e, 0x70, 0xa4, 0x35, 0x75, 0x60, 0x85, 0x6d, 0xb4, 0x94, 0xc2, 0x0d, 0xab, 0xe6, 0x92, - 0xa4, 0x37, 0xae, 0x01, 0xb8, 0xe4, 0x69, 0x38, 0xbd, 0x2a, 0x50, 0xb5, 0xaa, 0x8e, 0xc8, 0x08, - 0x40, 0x9a, 0xbc, 0xef, 0xb9, 0x74, 0xe6, 0x32, 0xad, 0xc9, 0x75, 0x1b, 0xc7, 0x3b, 0x76, 0x26, - 0xbe, 0xe9, 0xd0, 0xd3, 0x35, 0xa5, 0xc9, 0x63, 0x48, 0xf3, 0x0f, 0xb2, 0x91, 0xb3, 0x58, 0x81, - 0xc2, 0xb1, 0x19, 0xd8, 0x7d, 0x75, 0xba, 0x69, 0x23, 0x4f, 0x9d, 0x6e, 0xd2, 0xb3, 0x3c, 0x96, - 0x45, 0xbf, 0x2f, 0x10, 0x3a, 0x7d, 0x15, 0xdf, 0x21, 0x63, 0x79, 0x54, 0x01, 0xa1, 0x24, 0xa9, - 0x1a, 0x29, 0x22, 0xa5, 0x60, 0xa4, 0x15, 0x55, 0x9f, 0x52, 0x58, 0x81, 0x8e, 0x18, 0x56, 0x46, - 0x1c, 0xd7, 0x93, 0x42, 0x85, 0x62, 0x49, 0xee, 0x19, 0x20, 0x9b, 0xf0, 0x52, 0x04, 0xab, 0xa2, - 0x23, 0x16, 0x32, 0x55, 0xf1, 0xd3, 0x80, 0xdc, 0xd4, 0x65, 0xdc, 0xf7, 0xe9, 0x07, 0xac, 0x86, - 0x3d, 0x8a, 0xaf, 0xa6, 0xb1, 0x15, 0xe4, 0x6a, 0x52, 0xe5, 0xce, 0x2a, 0xfe, 0x3c, 0xa3, 0x7a, - 0x1e, 0x86, 0x6f, 0xb5, 0x50, 0x2f, 0xad, 0x61, 0xcf, 0x22, 0xc3, 0x8e, 0x71, 0xf4, 0x33, 0xc7, - 0x26, 0x3a, 0x7d, 0xf6, 0xd8, 0x74, 0x25, 0xbb, 0x86, 0x43, 0x1d, 0x5b, 0x27, 0xec, 0x3a, 0x92, - 0xf4, 0x87, 0xa6, 0x64, 0x37, 0x10, 0x07, 0x7f, 0x6d, 0x09, 0x1f, 0x25, 0x85, 0xdd, 0x44, 0x1c, - 0x69, 0x0e, 0xd8, 0xad, 0xe6, 0xaf, 0xc7, 0xf5, 0xdf, 0x6f, 0x45, 0xee, 0xd8, 0x22, 0xdb, 0x07, - 0x1d, 0xb6, 0x79, 0x7b, 0xb9, 0x0d, 0x6b, 0xbe, 0xf8, 0xee, 0xc4, 0x4e, 0xdd, 0x8a, 0xc8, 0x5d, - 0x5d, 0x76, 0x33, 0x4b, 0xd1, 0x3c, 0x83, 0xb5, 0xb0, 0xf1, 0xcc, 0x96, 0x43, 0x8a, 0x9b, 0xf1, - 0x77, 0x12, 0xd7, 0x36, 0x32, 0x73, 0xaf, 0xbb, 0x45, 0x2c, 0xe3, 0x6b, 0x1a, 0x51, 0x5e, 0x24, - 0xbb, 0x40, 0x5e, 0xa4, 0xf9, 0xbf, 0x93, 0x89, 0x76, 0xe5, 0xa0, 0x5a, 0x91, 0x83, 0x3a, 0x9b, - 0x78, 0x8f, 0x53, 0x1d, 0xd9, 0x97, 0x49, 0x75, 0xcc, 0x2b, 0x62, 0xf9, 0x10, 0xfd, 0x25, 0xda, - 0x99, 0x4f, 0x17, 0x48, 0xe3, 0xa4, 0x70, 0xf9, 0x06, 0xa5, 0xd1, 0xcd, 0xae, 0xaa, 0xb0, 0x2a, - 0xcc, 0xbd, 0x44, 0x95, 0xcc, 0x97, 0x6b, 0x4c, 0x23, 0x41, 0x95, 0xd0, 0x63, 0xc5, 0x79, 0x7a, - 0xec, 0x00, 0xf5, 0x58, 0x29, 0xd6, 0x63, 0x14, 0x3b, 0xa0, 0xac, 0x97, 0xfa, 0x1d, 0xb2, 0xa7, - 0x3d, 0x5e, 0x36, 0x66, 0xe0, 0x68, 0xec, 0x8d, 0x26, 0x8e, 0xb4, 0xb5, 0xb5, 0xaa, 0x1a, 0xd3, - 0xb7, 0x3c, 0x2b, 0xb3, 0xb7, 0x3c, 0x3f, 0x06, 0x08, 0x04, 0xee, 0x8e, 0x2d, 0xbb, 0x2f, 0x75, - 0x1d, 0xd6, 0x9d, 0xcb, 0xc6, 0xa6, 0xd3, 0x51, 0x09, 0x0a, 0xec, 0xff, 0xc8, 0x3c, 0xa7, 0x14, - 0xb5, 0x2e, 0x18, 0x89, 0xda, 0xd3, 0xda, 0x7d, 0x65, 0x56, 0xbb, 0xbf, 0x13, 0xda, 0xe9, 0xd7, - 0xaf, 0x5c, 0xdf, 0xf5, 0x94, 0x6d, 0x5e, 0x87, 0x12, 0x79, 0x01, 0x9e, 0x4f, 0x57, 0x94, 0x2a, - 0x46, 0xd8, 0x4c, 0x69, 0xd8, 0x9b, 0x69, 0x0d, 0xdb, 0xb0, 0xa0, 0xa8, 0x93, 0x2d, 0xd3, 0x81, - 0x91, 0x30, 0x4c, 0x9b, 0x4d, 0x84, 0x69, 0xa3, 0x6a, 0xdf, 0x5c, 0xb2, 0xda, 0x77, 0xea, 0x16, - 0x63, 0x61, 0xe6, 0x16, 0x63, 0xf3, 0x33, 0x28, 0x28, 0x9f, 0x00, 0x42, 0x73, 0x54, 0x99, 0xb2, - 0x38, 0x28, 0x96, 0xe1, 0xd7, 0x81, 0x05, 0x82, 0x6c, 0x1d, 0xd1, 0x35, 0x47, 0x82, 0x94, 0x64, - 0x96, 0xd7, 0xe1, 0xba, 0xc2, 0x0d, 0xd2, 0x4f, 0xc8, 0xe0, 0x72, 0xec, 0x63, 0xdf, 0xf4, 0x2f, - 0x58, 0xbe, 0xf9, 0x31, 0x95, 0x3a, 0x84, 0x02, 0x55, 0x8d, 0x6e, 0x8d, 0x2a, 0xb5, 0x6c, 0x69, - 0xed, 0x43, 0x95, 0x32, 0xda, 0xbb, 0x55, 0xf5, 0x83, 0xe4, 0x3e, 0x52, 0xfc, 0x6b, 0x39, 0x79, - 0xc6, 0xff, 0xa9, 0xed, 0xb7, 0xe6, 0x46, 0xc2, 0x62, 0x4c, 0x17, 0x04, 0x66, 0x16, 0x2d, 0x08, - 0x6c, 0x3e, 0x86, 0x55, 0x23, 0xad, 0xd3, 0xf9, 0x07, 0x50, 0xf2, 0xc6, 0x49, 0x3e, 0x2f, 0x92, - 0xcb, 0x10, 0xbd, 0xf9, 0x7b, 0x19, 0x58, 0xee, 0xb8, 0x52, 0xf8, 0xae, 0xe9, 0x6c, 0x3b, 0xe6, - 0x80, 0xbf, 0x1f, 0x6a, 0xa9, 0xf9, 0xb1, 0x96, 0x24, 0x6e, 0x5a, 0x61, 0x39, 0x3a, 0xa9, 0xc0, - 0x6f, 0xc0, 0x9a, 0xb0, 0x6c, 0xe9, 0xf9, 0xca, 0x4e, 0x0e, 0xeb, 0x36, 0xaf, 0x03, 0x53, 0xe0, - 0x2e, 0x6d, 0x89, 0x9e, 0x5a, 0xe6, 0x3a, 0x5c, 0x4f, 0x41, 0x43, 0x23, 0x38, 0xcb, 0x6f, 0x43, - 0x3d, 0x3e, 0x8d, 0xb6, 0x3c, 0x57, 0x76, 0x5c, 0x4b, 0x9c, 0x93, 0x91, 0xc5, 0x72, 0xcd, 0x5f, - 0x8b, 0xcc, 0xbb, 0xa7, 0xba, 0xaa, 0xd3, 0xf7, 0xbc, 0xf8, 0xca, 0xb0, 0x6e, 0x25, 0xae, 0xa6, - 0x67, 0x17, 0xb8, 0x9a, 0xfe, 0x71, 0x7c, 0xbd, 0x58, 0x1d, 0x14, 0xaf, 0xce, 0x3d, 0x7d, 0xa8, - 0x18, 0x4d, 0x5b, 0xf7, 0x5d, 0x91, 0xb8, 0x6b, 0xfc, 0xb6, 0x76, 0xe9, 0xf2, 0x8b, 0x58, 0xc1, - 0xaa, 0x6e, 0xe3, 0xbd, 0xe9, 0x3b, 0x2d, 0x8b, 0x15, 0x85, 0xce, 0x18, 0xaa, 0xf0, 0xd2, 0x86, - 0xea, 0x37, 0xa6, 0xbc, 0xa7, 0xf2, 0xdc, 0xf0, 0xe3, 0x15, 0x37, 0x76, 0xbf, 0x01, 0xa5, 0xa1, - 0x1d, 0x48, 0xcf, 0x57, 0xb7, 0xc8, 0x67, 0x6f, 0xbd, 0x25, 0x66, 0x6b, 0x47, 0x21, 0x52, 0x05, - 0x5f, 0x48, 0xc5, 0xbf, 0x0d, 0x6b, 0x34, 0xf1, 0x87, 0xb1, 0xd5, 0x10, 0xd4, 0xab, 0x73, 0x2b, - 0x27, 0x13, 0xac, 0x36, 0xa6, 0x48, 0x8c, 0x59, 0x26, 0x8d, 0x01, 0x40, 0xbc, 0x3e, 0x33, 0x5a, - 0xec, 0x73, 0xdc, 0x22, 0xbf, 0x09, 0xc5, 0x60, 0x72, 0x1c, 0x67, 0x1f, 0x75, 0xab, 0x71, 0x0e, - 0x8d, 0x19, 0xeb, 0xe0, 0x50, 0xf8, 0xaa, 0xbb, 0x57, 0x5e, 0x65, 0xff, 0x38, 0xb9, 0xf0, 0x4a, - 0x38, 0xef, 0x5e, 0xb2, 0x7a, 0x11, 0xe7, 0x84, 0x04, 0x34, 0xde, 0x83, 0x6a, 0x62, 0x52, 0x51, - 0x33, 0x4f, 0x5c, 0xcb, 0x0b, 0x43, 0xde, 0xf8, 0x5b, 0x5d, 0xe5, 0xb3, 0xc2, 0xa0, 0x37, 0xfd, - 0x6e, 0x18, 0xc0, 0xa6, 0x27, 0xf0, 0x0a, 0x0f, 0xfb, 0x55, 0xa8, 0x25, 0x4c, 0xba, 0x28, 0x1c, - 0x9a, 0x06, 0x36, 0xcf, 0xe0, 0x0b, 0x09, 0x76, 0x87, 0xc2, 0x1f, 0xd9, 0x01, 0x1e, 0x24, 0xca, - 0x59, 0x24, 0xd3, 0xda, 0x12, 0xae, 0xb4, 0x65, 0xa8, 0x41, 0xa3, 0x36, 0xff, 0x05, 0x28, 0x8c, - 0x85, 0x3f, 0x0a, 0xb4, 0x16, 0x9d, 0x96, 0xa0, 0xb9, 0x6c, 0x03, 0x43, 0xd1, 0x34, 0xff, 0x61, - 0x06, 0xca, 0x7b, 0x42, 0x9a, 0x68, 0x3b, 0xf0, 0xbd, 0xa9, 0xb7, 0xcc, 0x66, 0xcc, 0x43, 0xd4, - 0x75, 0xed, 0xbe, 0xae, 0x77, 0x34, 0xbe, 0x6e, 0xef, 0x2c, 0xc5, 0x1d, 0x6b, 0x6c, 0x40, 0x49, - 0x83, 0x1b, 0xef, 0xc3, 0xea, 0x14, 0x26, 0xcd, 0x8b, 0xb2, 0xed, 0xbb, 0x17, 0xa3, 0xb0, 0xac, - 0x6b, 0xd9, 0x48, 0x03, 0x37, 0x2a, 0x50, 0x1a, 0x2b, 0x82, 0xe6, 0x1f, 0xdc, 0xa0, 0x62, 0x22, - 0xfb, 0x04, 0x7d, 0xfa, 0x79, 0x27, 0xeb, 0x1d, 0x00, 0x15, 0xaf, 0xa3, 0x92, 0x13, 0x15, 0xa2, - 0x4e, 0x40, 0xf8, 0x87, 0x51, 0x6e, 0x21, 0x3f, 0xd7, 0xa8, 0x4a, 0x32, 0x9f, 0x4e, 0x30, 0xd4, - 0xa1, 0x64, 0x07, 0x14, 0x87, 0xd3, 0x65, 0x5a, 0x61, 0x93, 0x7f, 0x1d, 0x8a, 0xf6, 0x68, 0xec, - 0xf9, 0x52, 0x27, 0x1f, 0xae, 0xe4, 0xda, 0x21, 0xcc, 0x9d, 0x25, 0x43, 0xd3, 0x20, 0xb5, 0x38, - 0x27, 0xea, 0xf2, 0x8b, 0xa9, 0xdb, 0xe7, 0x21, 0xb5, 0xa2, 0xe1, 0xdf, 0x82, 0xda, 0x40, 0x55, - 0xa9, 0x2a, 0xc6, 0x5a, 0x89, 0xbc, 0x71, 0x15, 0x93, 0x47, 0x49, 0x82, 0x9d, 0x25, 0x23, 0xcd, - 0x01, 0x59, 0xa2, 0x01, 0x2f, 0x02, 0xd9, 0xf3, 0x3e, 0xf1, 0x6c, 0x97, 0xdc, 0xdd, 0x17, 0xb0, - 0x34, 0x92, 0x04, 0xc8, 0x32, 0xc5, 0x81, 0x7f, 0x15, 0x2d, 0x9e, 0x40, 0xea, 0x8b, 0xfc, 0x77, - 0xaf, 0xe2, 0xd4, 0x13, 0x81, 0xbe, 0x82, 0x1f, 0x48, 0x7e, 0x0e, 0x8d, 0xc4, 0x26, 0xd1, 0x2f, - 0x69, 0x8d, 0xc7, 0xbe, 0x87, 0x3e, 0x73, 0x8d, 0xb8, 0x7d, 0xf5, 0x2a, 0x6e, 0x87, 0x97, 0x52, - 0xef, 0x2c, 0x19, 0x57, 0xf0, 0xe6, 0x3d, 0xf4, 0xec, 0xf4, 0x10, 0x76, 0x85, 0x79, 0x16, 0x7e, - 0x06, 0xe0, 0xfe, 0x42, 0xb3, 0x40, 0x14, 0x3b, 0x4b, 0xc6, 0x14, 0x0f, 0xfe, 0x4b, 0xb0, 0x96, - 0x7a, 0x27, 0xdd, 0xfc, 0x55, 0x1f, 0x09, 0xf8, 0xca, 0xc2, 0xc3, 0x40, 0xa2, 0x9d, 0x25, 0x63, - 0x96, 0x13, 0x9f, 0xc0, 0x2b, 0xb3, 0x43, 0xda, 0x12, 0x7d, 0xc7, 0x76, 0x85, 0xfe, 0x9e, 0xc0, - 0x7b, 0x2f, 0x37, 0x5b, 0x9a, 0x78, 0x67, 0xc9, 0xb8, 0x9c, 0x33, 0xff, 0xcb, 0x70, 0x7b, 0x3c, - 0x57, 0xc5, 0x28, 0xd5, 0xa5, 0x3f, 0x47, 0xf0, 0xc1, 0x82, 0x6f, 0x9e, 0xa1, 0xdf, 0x59, 0x32, - 0xae, 0xe4, 0x8f, 0xb6, 0x33, 0x79, 0xd0, 0xba, 0x98, 0x5e, 0x35, 0x28, 0x33, 0xdd, 0x77, 0x76, - 0x84, 0x69, 0x45, 0xf9, 0x91, 0x18, 0xd0, 0xf8, 0x1f, 0x19, 0x28, 0x6a, 0x79, 0xbf, 0x1d, 0x55, - 0x48, 0x44, 0xaa, 0x3b, 0x06, 0xf0, 0x8f, 0xa0, 0x22, 0x7c, 0xdf, 0xf3, 0x37, 0x3d, 0x2b, 0x2c, - 0x2e, 0x9d, 0x8e, 0x32, 0x2b, 0x3e, 0xeb, 0xed, 0x10, 0xcd, 0x88, 0x29, 0xf8, 0x87, 0x00, 0x6a, - 0x9f, 0xf7, 0xe2, 0x3b, 0x51, 0x8d, 0xf9, 0xf4, 0x2a, 0xe5, 0x16, 0x63, 0xc7, 0x61, 0xb9, 0x30, - 0xdf, 0x15, 0x36, 0x23, 0x87, 0xb3, 0x90, 0x70, 0x38, 0x6f, 0xeb, 0x38, 0x02, 0x85, 0x57, 0xf4, - 0xcd, 0xc0, 0x08, 0xd0, 0xf8, 0xd7, 0x19, 0x28, 0x2a, 0xe5, 0xc1, 0xdb, 0xb3, 0x23, 0x7a, 0xfd, - 0xc5, 0x3a, 0x67, 0x7d, 0x7a, 0x64, 0x5f, 0x07, 0x50, 0x3a, 0x28, 0x31, 0xb2, 0xdb, 0x53, 0x7c, - 0x34, 0x69, 0x58, 0xce, 0x1d, 0xe3, 0x37, 0x1f, 0xaa, 0xdb, 0x6b, 0x14, 0x12, 0x7e, 0xb2, 0xbb, - 0xcb, 0x96, 0xf8, 0x1a, 0xd4, 0x9e, 0xec, 0x3f, 0xde, 0x3f, 0x78, 0xb6, 0x7f, 0xd4, 0x36, 0x8c, - 0x03, 0x43, 0x45, 0x86, 0x37, 0x5a, 0x5b, 0x47, 0x9d, 0xfd, 0xc3, 0x27, 0x3d, 0x96, 0x6d, 0xfc, - 0xd3, 0x0c, 0xd4, 0x52, 0xba, 0xeb, 0xcf, 0x76, 0xe9, 0x12, 0xd3, 0x9f, 0x9b, 0x3f, 0xfd, 0xf9, - 0xcb, 0xa6, 0xbf, 0x30, 0x3d, 0xfd, 0xbf, 0x93, 0x81, 0x5a, 0x4a, 0x47, 0x26, 0xb9, 0x67, 0xd2, - 0xdc, 0x93, 0x27, 0x7d, 0x76, 0xea, 0xa4, 0x6f, 0xc2, 0x72, 0xf8, 0x7b, 0x3f, 0x8e, 0x38, 0xa4, - 0x60, 0x49, 0x1c, 0xba, 0x3e, 0x92, 0x4f, 0xe3, 0xd0, 0x15, 0x92, 0xab, 0x7b, 0x4b, 0xd7, 0x65, - 0x03, 0xfa, 0x9a, 0x40, 0xe3, 0x72, 0x0d, 0x7a, 0xc5, 0x10, 0x1e, 0x41, 0x75, 0x1c, 0x6f, 0xd3, - 0x97, 0x33, 0x4b, 0x92, 0x94, 0x2f, 0xe8, 0xe7, 0xef, 0x66, 0x60, 0x25, 0xad, 0x73, 0xff, 0xbf, - 0x9e, 0xd6, 0x7f, 0x9c, 0x81, 0xb5, 0x19, 0x4d, 0x7e, 0xa5, 0x61, 0x37, 0xdd, 0xaf, 0xec, 0x02, - 0xfd, 0xca, 0xcd, 0xe9, 0xd7, 0xe5, 0x9a, 0xe4, 0xea, 0x1e, 0x77, 0xe1, 0x95, 0x4b, 0xcf, 0x84, - 0x2b, 0xa6, 0x3a, 0xc5, 0x34, 0x37, 0xcd, 0xf4, 0xb7, 0x32, 0x70, 0xfb, 0x2a, 0x7d, 0xff, 0xff, - 0x5c, 0xae, 0xa6, 0x7b, 0xd8, 0x7c, 0x3f, 0x2a, 0x9c, 0xa8, 0x42, 0x49, 0x7f, 0xa5, 0x4b, 0x17, - 0xae, 0x0f, 0xbd, 0xe7, 0xae, 0x8a, 0x44, 0x1b, 0xc2, 0xd4, 0xdf, 0x31, 0x30, 0xc4, 0xd8, 0xb1, - 0x29, 0x47, 0x7a, 0x0b, 0xa0, 0x45, 0x7e, 0x5d, 0x78, 0xad, 0x68, 0x73, 0xf7, 0xa0, 0xdb, 0x66, - 0x4b, 0x49, 0x23, 0xf6, 0xb3, 0x50, 0x11, 0x37, 0x0f, 0xa1, 0x18, 0x5f, 0xf4, 0xd8, 0x33, 0xfd, - 0x53, 0x4b, 0x65, 0x22, 0x97, 0xa1, 0x7c, 0xa8, 0x5d, 0x28, 0xf5, 0xaa, 0x4f, 0xba, 0x07, 0xfb, - 0x2a, 0xe8, 0xbd, 0x75, 0xd0, 0x53, 0xd7, 0x45, 0xba, 0x4f, 0x1f, 0xa9, 0x94, 0xd8, 0x23, 0xa3, - 0x75, 0xb8, 0x73, 0x44, 0x18, 0x85, 0xe6, 0x6f, 0xe6, 0xc3, 0x53, 0xad, 0x69, 0xe8, 0x1c, 0x27, - 0x40, 0x11, 0xb5, 0xb9, 0xa7, 0x19, 0x47, 0xaf, 0xa1, 0x12, 0xe7, 0xf6, 0xb9, 0x8a, 0x43, 0xb0, - 0x2c, 0x2f, 0x42, 0xf6, 0xf0, 0x58, 0x55, 0x5e, 0xed, 0xc8, 0x91, 0xa3, 0xee, 0x99, 0xf6, 0xce, - 0x25, 0x2b, 0xe0, 0x8f, 0xcd, 0xe0, 0x8c, 0x15, 0x9b, 0xff, 0x2c, 0x07, 0x95, 0x48, 0x55, 0xbe, - 0x8c, 0xea, 0xe6, 0x1c, 0x56, 0x3a, 0xfb, 0xbd, 0xb6, 0xb1, 0xdf, 0xda, 0xd5, 0x28, 0x39, 0x7e, - 0x0d, 0x56, 0xb7, 0x3b, 0xbb, 0xed, 0xa3, 0xdd, 0x83, 0xd6, 0x96, 0x06, 0x96, 0xf9, 0x4d, 0xe0, - 0x9d, 0xbd, 0xc3, 0x03, 0xa3, 0x77, 0xd4, 0xe9, 0x1e, 0x6d, 0xb6, 0xf6, 0x37, 0xdb, 0xbb, 0xed, - 0x2d, 0x56, 0xe4, 0xaf, 0xc2, 0xdd, 0xfd, 0x83, 0x5e, 0xe7, 0x60, 0xff, 0x68, 0xff, 0xe0, 0xe8, - 0x60, 0xe3, 0x93, 0xf6, 0x66, 0xaf, 0x7b, 0xd4, 0xd9, 0x3f, 0x42, 0xae, 0x8f, 0x8c, 0x16, 0x3e, - 0x61, 0x05, 0x7e, 0x17, 0x6e, 0x6b, 0xac, 0x6e, 0xdb, 0x78, 0xda, 0x36, 0x90, 0xc9, 0x93, 0xfd, - 0xd6, 0xd3, 0x56, 0x67, 0xb7, 0xb5, 0xb1, 0xdb, 0x66, 0xcb, 0xfc, 0x0e, 0x34, 0x34, 0x86, 0xd1, - 0xea, 0xb5, 0x8f, 0x76, 0x3b, 0x7b, 0x9d, 0xde, 0x51, 0xfb, 0xdb, 0x9b, 0xed, 0xf6, 0x56, 0x7b, - 0x8b, 0xd5, 0xf8, 0x1b, 0xf0, 0x25, 0xea, 0x94, 0xee, 0x44, 0xfa, 0x65, 0x9f, 0x75, 0x0e, 0x8f, - 0x5a, 0xc6, 0xe6, 0x4e, 0xe7, 0x69, 0x9b, 0xad, 0xf0, 0xd7, 0xe1, 0x8b, 0x97, 0xa3, 0x6e, 0x75, - 0x8c, 0xf6, 0x66, 0xef, 0xc0, 0xf8, 0x94, 0xad, 0xf1, 0x9f, 0x83, 0x57, 0x76, 0x7a, 0x7b, 0xbb, - 0x47, 0xcf, 0x8c, 0x83, 0xfd, 0x47, 0x47, 0xf4, 0xb3, 0xdb, 0x33, 0x9e, 0x6c, 0xf6, 0x9e, 0x18, - 0x6d, 0x06, 0xbc, 0x01, 0x37, 0x0f, 0x37, 0x8e, 0xf6, 0x0f, 0x7a, 0x47, 0xad, 0xfd, 0x4f, 0x37, - 0x76, 0x0f, 0x36, 0x1f, 0x1f, 0x6d, 0x1f, 0x18, 0x7b, 0xad, 0x1e, 0xab, 0xf2, 0x2f, 0xc3, 0xeb, - 0x9b, 0xdd, 0xa7, 0xba, 0x9b, 0x07, 0xdb, 0x47, 0xc6, 0xc1, 0xb3, 0xee, 0xd1, 0x81, 0x71, 0x64, - 0xb4, 0x77, 0x69, 0xcc, 0xdd, 0xb8, 0xef, 0x25, 0x7e, 0x1b, 0xea, 0x9d, 0xfd, 0xee, 0x93, 0xed, - 0xed, 0xce, 0x66, 0xa7, 0xbd, 0xdf, 0x3b, 0x3a, 0x6c, 0x1b, 0x7b, 0x9d, 0x6e, 0x17, 0xd1, 0x58, - 0xa5, 0xf9, 0x4d, 0x28, 0x76, 0xdc, 0x33, 0x5b, 0xd2, 0xfe, 0xd2, 0xc2, 0xa8, 0x3d, 0xae, 0xb0, - 0x49, 0xdb, 0xc2, 0x1e, 0xb8, 0xf4, 0xfd, 0x04, 0xda, 0x5d, 0xcb, 0x46, 0x0c, 0x68, 0xfe, 0x72, - 0x0e, 0x6a, 0x8a, 0x45, 0xe8, 0xc1, 0xdd, 0x83, 0x55, 0x1d, 0x0a, 0xed, 0xa4, 0x55, 0xd8, 0x34, - 0x98, 0x3e, 0x4c, 0xa6, 0x40, 0x09, 0x45, 0x96, 0x04, 0x51, 0x51, 0x46, 0xdf, 0x41, 0x37, 0x50, - 0xe5, 0x2b, 0x75, 0xeb, 0xf3, 0xea, 0x2e, 0xd4, 0x8b, 0x0a, 0xb1, 0xef, 0xb9, 0x9b, 0xd1, 0x15, - 0x9a, 0x14, 0x8c, 0x7f, 0x06, 0xb7, 0xa2, 0x76, 0xdb, 0xed, 0xfb, 0x17, 0xe3, 0xe8, 0xcb, 0x81, - 0xa5, 0xb9, 0xc1, 0x84, 0x6d, 0xdb, 0x11, 0x29, 0x44, 0xe3, 0x32, 0x06, 0xfc, 0x6b, 0x00, 0x36, - 0x4d, 0x16, 0xd9, 0x47, 0xea, 0xce, 0xda, 0x2b, 0x33, 0x71, 0xc0, 0x10, 0xc1, 0x48, 0x20, 0xe3, - 0x91, 0x30, 0x40, 0x4d, 0xfb, 0x58, 0x7f, 0x5a, 0x70, 0xd9, 0x88, 0xda, 0xcd, 0x3f, 0xca, 0x24, - 0x1c, 0x69, 0xe5, 0x28, 0x5f, 0x79, 0x84, 0xcc, 0x4b, 0xea, 0xa0, 0x2b, 0xab, 0x67, 0x45, 0x5b, - 0x36, 0xba, 0xc9, 0x0f, 0x81, 0xdb, 0xb3, 0x73, 0x91, 0x5f, 0x70, 0x2e, 0xe6, 0xd0, 0x4e, 0xc7, - 0xe4, 0x0b, 0xb3, 0x31, 0xf9, 0x3b, 0x00, 0x03, 0xc7, 0x3b, 0xd6, 0x89, 0xc1, 0xa2, 0x2e, 0x54, - 0x8a, 0x20, 0x4d, 0x07, 0xca, 0xe1, 0x67, 0x0f, 0x51, 0x48, 0xe8, 0xc3, 0x87, 0x51, 0x84, 0x52, - 0xb5, 0xf8, 0x0e, 0xac, 0x88, 0x74, 0x9f, 0xb3, 0x0b, 0xf6, 0x79, 0x8a, 0xae, 0xf9, 0x35, 0x58, - 0x9b, 0x41, 0xc2, 0x49, 0x1c, 0x9b, 0x32, 0xfa, 0xf6, 0x01, 0xfe, 0x9e, 0xcd, 0xb7, 0x37, 0xff, - 0x5d, 0x16, 0x96, 0xf7, 0x4c, 0xd7, 0x3e, 0x11, 0x81, 0x0c, 0x7b, 0x1b, 0xf4, 0x87, 0x62, 0x64, - 0x86, 0xbd, 0x55, 0x2d, 0x1d, 0xb6, 0xc8, 0x26, 0x13, 0x02, 0x33, 0xf9, 0x23, 0xdc, 0x0e, 0x13, - 0x39, 0x8c, 0xae, 0x03, 0xe8, 0x16, 0xae, 0x9d, 0x63, 0xf7, 0x85, 0x1b, 0x84, 0x22, 0x1f, 0x36, - 0xe3, 0xf2, 0x9b, 0xe2, 0x15, 0xe5, 0x37, 0xa5, 0xd9, 0xf9, 0xbf, 0x0b, 0xd5, 0xa0, 0xef, 0x0b, - 0xe1, 0x06, 0x43, 0x4f, 0x86, 0x9f, 0xcc, 0x4c, 0x82, 0xa8, 0xf6, 0xcf, 0x7b, 0xee, 0xe2, 0x96, - 0xdf, 0xb5, 0xdd, 0x53, 0x5d, 0xd2, 0x96, 0x82, 0xa1, 0x0c, 0x52, 0xd0, 0xc6, 0xfe, 0x9e, 0xa0, - 0x80, 0x41, 0xc1, 0x88, 0xda, 0x14, 0x96, 0x31, 0xa5, 0x18, 0x78, 0xbe, 0x2d, 0x54, 0x6c, 0xb2, - 0x62, 0x24, 0x20, 0x48, 0xeb, 0x98, 0xee, 0x60, 0x62, 0x0e, 0x84, 0xce, 0x5f, 0x47, 0xed, 0xe6, - 0xff, 0x2c, 0x00, 0xec, 0x89, 0xd1, 0xb1, 0xf0, 0x83, 0xa1, 0x3d, 0xa6, 0xdc, 0x89, 0xad, 0x8b, - 0xa0, 0x6b, 0x06, 0xfd, 0xe6, 0x1f, 0xa4, 0xee, 0x27, 0xcc, 0x66, 0x3b, 0x63, 0xf2, 0xe9, 0x98, - 0x0e, 0x4e, 0x8e, 0x29, 0x85, 0xae, 0x7c, 0xa2, 0xf9, 0xcf, 0x1b, 0x49, 0x10, 0xd5, 0xfa, 0x99, - 0x52, 0xb4, 0x5d, 0x4b, 0xc5, 0x8c, 0xf2, 0x46, 0xd4, 0xa6, 0x1b, 0x4e, 0x41, 0x6b, 0x22, 0x3d, - 0x43, 0xb8, 0xe2, 0x79, 0x74, 0x79, 0x2f, 0x06, 0xf1, 0x3d, 0xa8, 0x8d, 0xcd, 0x8b, 0x91, 0x70, - 0xe5, 0x9e, 0x90, 0x43, 0xcf, 0xd2, 0x65, 0x4a, 0xaf, 0x5f, 0xde, 0xc1, 0xc3, 0x24, 0xba, 0x91, - 0xa6, 0x46, 0x99, 0x70, 0x03, 0xda, 0x25, 0x6a, 0x19, 0x75, 0x8b, 0x6f, 0x00, 0xa8, 0x5f, 0x09, - 0x55, 0x33, 0x13, 0x46, 0x32, 0x47, 0x22, 0x10, 0xfe, 0x99, 0xad, 0xd4, 0xa3, 0xd2, 0x39, 0x31, - 0x15, 0x2a, 0xd3, 0x49, 0x20, 0xfc, 0xf6, 0xc8, 0xb4, 0x1d, 0xbd, 0xc0, 0x31, 0x80, 0xbf, 0x0b, - 0x37, 0x82, 0xc9, 0x31, 0xca, 0xcc, 0xb1, 0xe8, 0x79, 0xfb, 0xe2, 0x79, 0xe0, 0x08, 0x29, 0x85, - 0xaf, 0x4b, 0x21, 0xe6, 0x3f, 0x6c, 0x0e, 0x22, 0x3b, 0x8a, 0x3e, 0xcf, 0x82, 0xbf, 0xe2, 0x7a, - 0xab, 0x08, 0xa4, 0x8b, 0xd1, 0x58, 0x86, 0x33, 0x58, 0x56, 0x20, 0x5d, 0xab, 0x96, 0xe5, 0x5f, - 0x82, 0x9f, 0x4f, 0x21, 0x19, 0x2a, 0xb3, 0x1c, 0x6c, 0xdb, 0xae, 0xe9, 0xd8, 0xdf, 0x53, 0x79, - 0xfe, 0x5c, 0x73, 0x0c, 0xb5, 0xd4, 0xc4, 0xd1, 0x6d, 0x53, 0xfa, 0xa5, 0x0b, 0x76, 0x18, 0x2c, - 0xab, 0x76, 0x57, 0xfa, 0x36, 0xa5, 0x4c, 0x22, 0xc8, 0x26, 0xee, 0x73, 0x8f, 0x65, 0xf9, 0x75, - 0x60, 0x0a, 0xd2, 0x71, 0xcd, 0xf1, 0xb8, 0x35, 0x1e, 0x3b, 0x82, 0xe5, 0xe8, 0x26, 0x6f, 0x0c, - 0x55, 0xb7, 0x14, 0x58, 0xbe, 0xf9, 0x6d, 0xb8, 0x45, 0x33, 0xf3, 0x54, 0xf8, 0x91, 0xa7, 0xac, - 0xc7, 0x7a, 0x03, 0xd6, 0xd4, 0xaf, 0x7d, 0x4f, 0xaa, 0xc7, 0x64, 0x3d, 0x72, 0x58, 0x51, 0x60, - 0x34, 0x9e, 0xba, 0x82, 0xee, 0xe7, 0x46, 0xb0, 0x08, 0x2f, 0xdb, 0xfc, 0xc3, 0x22, 0xf0, 0x58, - 0x20, 0x7a, 0xb6, 0xf0, 0xb7, 0x4c, 0x69, 0x26, 0x42, 0x9d, 0xb5, 0x4b, 0x93, 0xf5, 0x2f, 0x2e, - 0xb5, 0xbb, 0x09, 0x45, 0x3b, 0x40, 0xdf, 0x4e, 0xd7, 0x17, 0xeb, 0x16, 0xdf, 0x05, 0x18, 0x0b, - 0xdf, 0xf6, 0x2c, 0x92, 0xa0, 0xc2, 0xdc, 0x6b, 0x22, 0xb3, 0x9d, 0x5a, 0x3f, 0x8c, 0x68, 0x8c, - 0x04, 0x3d, 0xf6, 0x43, 0xb5, 0x54, 0xea, 0xbb, 0x48, 0x9d, 0x4e, 0x82, 0xf8, 0x5b, 0x70, 0x6d, - 0xec, 0xdb, 0x7d, 0xa1, 0x96, 0xe3, 0x49, 0x60, 0x6d, 0xd2, 0x47, 0x0d, 0x4b, 0x84, 0x39, 0xef, - 0x11, 0x4a, 0xa0, 0xe9, 0x92, 0xc7, 0x13, 0x50, 0xb2, 0x57, 0xdf, 0x68, 0x57, 0x15, 0xb8, 0x35, - 0x63, 0xfe, 0x43, 0x7e, 0x1f, 0x98, 0x7e, 0xb0, 0x67, 0xbb, 0xbb, 0xc2, 0x1d, 0xc8, 0x21, 0x09, - 0x77, 0xcd, 0x98, 0x81, 0x93, 0x06, 0x53, 0x9f, 0x8e, 0x52, 0x89, 0xa0, 0x8a, 0x11, 0xb5, 0xd5, - 0x57, 0x12, 0x1c, 0xcf, 0xef, 0x4a, 0x5f, 0x97, 0x12, 0x47, 0x6d, 0x34, 0x82, 0x02, 0xea, 0xeb, - 0xa1, 0xef, 0x59, 0x13, 0x4a, 0x53, 0x28, 0x25, 0x36, 0x0d, 0x8e, 0x31, 0xf7, 0x4c, 0x57, 0xd7, - 0x3b, 0xd6, 0x92, 0x98, 0x11, 0x98, 0x9c, 0x3a, 0x2f, 0x88, 0x19, 0xae, 0x6a, 0xa7, 0x2e, 0x01, - 0xd3, 0x38, 0x31, 0x2b, 0x16, 0xe1, 0xc4, 0x7c, 0x68, 0xfc, 0x96, 0xef, 0xd9, 0x56, 0xcc, 0x4b, - 0x95, 0xde, 0xcc, 0xc0, 0x13, 0xb8, 0x31, 0x4f, 0x9e, 0xc2, 0x8d, 0xf9, 0x5e, 0x87, 0x82, 0x77, - 0x72, 0x22, 0x7c, 0xfa, 0x52, 0x68, 0xc5, 0x50, 0x8d, 0xe6, 0x0f, 0x32, 0x00, 0xb1, 0x48, 0xe0, - 0x46, 0x88, 0x5b, 0xf1, 0xc6, 0xbf, 0x05, 0xd7, 0x92, 0x60, 0x47, 0x57, 0xb2, 0xd2, 0x6e, 0x88, - 0x1f, 0x6c, 0x99, 0x17, 0x01, 0xcb, 0xea, 0x9b, 0xe6, 0x1a, 0xf6, 0x4c, 0x08, 0x2a, 0x0b, 0xbc, - 0x0e, 0x2c, 0x06, 0xd2, 0xf5, 0xc1, 0x80, 0xe5, 0xd3, 0xa8, 0x9f, 0x0a, 0xd3, 0x0f, 0x58, 0xa1, - 0xb9, 0x03, 0x45, 0x95, 0xc3, 0x9a, 0x93, 0x7d, 0x7e, 0xb9, 0x52, 0x92, 0xbf, 0x91, 0x01, 0xd8, - 0x52, 0x65, 0xde, 0x78, 0xb6, 0xcf, 0x49, 0xea, 0xcf, 0xb3, 0xb3, 0x4c, 0xcb, 0xa2, 0x72, 0xf9, - 0x5c, 0xf4, 0x99, 0x22, 0x6c, 0xa2, 0x3c, 0x99, 0x61, 0xe9, 0x97, 0xda, 0x89, 0x51, 0x5b, 0x1d, - 0x2b, 0x9b, 0x9e, 0xeb, 0x8a, 0x3e, 0x1e, 0x4a, 0xd1, 0xb1, 0x12, 0x81, 0x9a, 0xdf, 0xcf, 0x42, - 0x65, 0x73, 0x68, 0x4a, 0xf5, 0x55, 0x9f, 0x6f, 0x42, 0x79, 0x24, 0x82, 0xc0, 0x1c, 0x88, 0x40, - 0xe7, 0x6c, 0xa6, 0x13, 0xae, 0x11, 0xee, 0xfa, 0x13, 0xd7, 0x17, 0xa6, 0xa5, 0x3e, 0x65, 0x14, - 0x51, 0x29, 0x0e, 0xae, 0x8c, 0x7c, 0xea, 0x97, 0xe0, 0xe0, 0x46, 0xdf, 0x1d, 0x76, 0xcc, 0x40, - 0xa1, 0x44, 0xf1, 0xb2, 0x24, 0xa8, 0xb1, 0x07, 0xd5, 0x04, 0x29, 0x7f, 0x15, 0x6a, 0x9e, 0x63, - 0x89, 0x40, 0x5d, 0x66, 0x8c, 0xbf, 0xff, 0x98, 0x02, 0x52, 0xe5, 0x05, 0xee, 0x67, 0xe1, 0xeb, - 0xf4, 0x5b, 0xd8, 0x6c, 0xfe, 0x46, 0x19, 0xaa, 0xd8, 0xa9, 0x3d, 0x35, 0x86, 0x99, 0xe5, 0xa8, - 0x43, 0xc9, 0xd3, 0x9c, 0x75, 0xf1, 0xb7, 0x97, 0xe0, 0xa9, 0xab, 0x39, 0x72, 0xe9, 0x6a, 0x8e, - 0x54, 0xf9, 0x77, 0x7e, 0xba, 0xfc, 0xfb, 0x0e, 0xc0, 0xc8, 0xb3, 0x48, 0x4b, 0xb7, 0x54, 0x9a, - 0x25, 0x67, 0x24, 0x20, 0xe4, 0xa7, 0xe8, 0xe1, 0x57, 0xb5, 0x9f, 0xa2, 0x9a, 0xaa, 0xac, 0x66, - 0xec, 0x5c, 0xf4, 0x3c, 0xdd, 0xdb, 0x8e, 0x15, 0x5f, 0x26, 0x4f, 0xc3, 0xf9, 0x26, 0x94, 0xf4, - 0xb2, 0xe8, 0x64, 0xd2, 0x1b, 0x73, 0x56, 0x42, 0xa3, 0xaf, 0xeb, 0xbf, 0xfa, 0x3e, 0x97, 0x11, - 0x52, 0xf2, 0x47, 0x50, 0x35, 0xa5, 0x34, 0xfb, 0xc3, 0x91, 0xd6, 0xaa, 0xb9, 0x39, 0x79, 0xe5, - 0x24, 0xa3, 0x56, 0x84, 0x6d, 0x24, 0x29, 0xf9, 0x06, 0x54, 0x7c, 0x61, 0xa6, 0x52, 0xdb, 0xaf, - 0x5e, 0xc1, 0xc6, 0x08, 0x71, 0x8d, 0x98, 0x2c, 0xfa, 0x14, 0x2a, 0x24, 0x3e, 0x85, 0x7a, 0x17, - 0xaa, 0x5a, 0x74, 0x0c, 0x7c, 0xa4, 0x3e, 0x11, 0x93, 0x04, 0x35, 0x7e, 0x94, 0x81, 0x95, 0xf4, - 0xf0, 0xfe, 0x2c, 0x3e, 0xde, 0xf7, 0xf5, 0xf8, 0xe3, 0x7d, 0x9f, 0xe3, 0x43, 0x78, 0xbf, 0x95, - 0x01, 0x88, 0x67, 0x0e, 0xcf, 0x56, 0xf5, 0x91, 0xb1, 0xd0, 0xda, 0x57, 0x2d, 0xbe, 0x93, 0xfa, - 0x32, 0xc5, 0xbb, 0x0b, 0x2d, 0x43, 0xe2, 0x67, 0xa2, 0x6e, 0xfd, 0x01, 0xac, 0xa4, 0xe1, 0x54, - 0xef, 0xdf, 0xd9, 0x6d, 0xab, 0xe0, 0x54, 0x67, 0xaf, 0xf5, 0xa8, 0xad, 0xef, 0xd5, 0x75, 0xf6, - 0x1f, 0xb3, 0x6c, 0xe3, 0x8f, 0x33, 0x50, 0x89, 0x16, 0x85, 0x7f, 0x2b, 0xb9, 0x9a, 0xaa, 0xc2, - 0xe5, 0x9d, 0x45, 0x56, 0x33, 0xfe, 0xd5, 0x76, 0xa5, 0x7f, 0x91, 0x58, 0xdc, 0x86, 0x07, 0x2b, - 0xe9, 0x87, 0x73, 0xd4, 0xec, 0xa3, 0xb4, 0x9a, 0x7d, 0x7b, 0xa1, 0x57, 0x86, 0x2e, 0xee, 0xae, - 0x1d, 0x48, 0xad, 0x81, 0x3f, 0xcc, 0x7e, 0x90, 0x69, 0xdc, 0x85, 0xe5, 0xe4, 0xa3, 0xd9, 0xab, - 0xb5, 0xf7, 0xff, 0x38, 0x07, 0x2b, 0xe9, 0x22, 0x11, 0xba, 0xaa, 0xa7, 0x0a, 0x94, 0x0e, 0x1c, - 0x2b, 0x51, 0xea, 0xcf, 0xf8, 0x2a, 0x54, 0xb5, 0x13, 0x4d, 0x80, 0x35, 0x0a, 0x7f, 0x79, 0x23, - 0xc1, 0xee, 0x26, 0x3f, 0x50, 0xfa, 0x16, 0x87, 0xf0, 0x8a, 0x25, 0x1b, 0xf3, 0x8a, 0xfe, 0x54, - 0xdb, 0xf7, 0xb3, 0xbc, 0x96, 0x28, 0x38, 0xff, 0x21, 0x5a, 0x90, 0xab, 0x1b, 0x13, 0xd7, 0x72, - 0x84, 0x15, 0x41, 0x7f, 0x94, 0x84, 0x46, 0x15, 0xe3, 0xdf, 0xcf, 0xf3, 0x15, 0xa8, 0x74, 0x27, - 0xc7, 0xba, 0x5a, 0xfc, 0xaf, 0xe4, 0xf9, 0x4d, 0x58, 0xd3, 0x58, 0x71, 0x71, 0x26, 0xfb, 0x65, - 0x3c, 0xd5, 0x56, 0x5a, 0x6a, 0xbe, 0x74, 0x47, 0xd9, 0x5f, 0xcd, 0x63, 0x17, 0xe8, 0xe6, 0xfe, - 0x5f, 0x23, 0x3e, 0xd1, 0x4d, 0x26, 0xf6, 0x2b, 0x79, 0xbe, 0x0a, 0xd0, 0xed, 0x45, 0x2f, 0xfa, - 0xb5, 0x3c, 0xaf, 0x42, 0xb1, 0xdb, 0x23, 0x6e, 0x3f, 0xc8, 0xf3, 0x1b, 0xc0, 0xe2, 0xa7, 0xba, - 0x64, 0xf5, 0x6f, 0xaa, 0xce, 0x44, 0x35, 0xa8, 0x7f, 0x2b, 0x8f, 0xe3, 0x0a, 0x67, 0x99, 0xfd, - 0xed, 0x3c, 0x67, 0x50, 0x4d, 0x04, 0x55, 0xd9, 0xdf, 0xc9, 0x73, 0x0e, 0xb5, 0x3d, 0x3b, 0x08, - 0x6c, 0x77, 0xa0, 0x47, 0xf0, 0xab, 0xf4, 0xe6, 0xed, 0xe8, 0x32, 0x16, 0xfb, 0xf5, 0x3c, 0xbf, - 0x05, 0x3c, 0x99, 0x48, 0xd2, 0x0f, 0x7e, 0x83, 0xa8, 0xd5, 0x49, 0x1a, 0x68, 0xd8, 0xdf, 0x25, - 0x6a, 0x94, 0x04, 0x0d, 0xf8, 0x4d, 0x9a, 0x90, 0xcd, 0xb8, 0xc8, 0x55, 0xc3, 0x7f, 0x48, 0xc4, - 0xe1, 0x62, 0x2a, 0xd8, 0x8f, 0xf2, 0xf7, 0x7f, 0x8f, 0x12, 0x01, 0xc9, 0x5a, 0x31, 0xbe, 0x0c, - 0x65, 0xc7, 0x73, 0x07, 0x52, 0x7d, 0x18, 0xb6, 0x06, 0x95, 0x60, 0xe8, 0xf9, 0x92, 0x9a, 0x74, - 0x5b, 0xd4, 0xa5, 0xaf, 0x0a, 0xa8, 0xfb, 0x06, 0xca, 0x1b, 0x54, 0x81, 0x55, 0x69, 0x0e, 0x58, - 0x35, 0x2a, 0xcf, 0xcd, 0x47, 0x25, 0xc4, 0xf4, 0x75, 0x83, 0xf0, 0xf6, 0x38, 0x2b, 0x22, 0xea, - 0xc4, 0x77, 0x54, 0x29, 0xb1, 0x40, 0x4f, 0x40, 0x7d, 0x01, 0x72, 0x3c, 0x44, 0x87, 0xa3, 0xa2, - 0xa0, 0xde, 0x77, 0x6c, 0x75, 0x2f, 0x59, 0x57, 0xe6, 0x59, 0xd8, 0x8f, 0xa8, 0xf8, 0x84, 0x89, - 0xfb, 0x7f, 0x2f, 0x03, 0xcb, 0xe1, 0x9d, 0x7e, 0x7b, 0x60, 0xbb, 0xaa, 0x18, 0x39, 0xfc, 0xdc, - 0x6e, 0xdf, 0xb1, 0xc7, 0xe1, 0xe7, 0x2b, 0x57, 0xa1, 0x6a, 0xf9, 0xe6, 0xa0, 0xe5, 0x5a, 0x5b, - 0xbe, 0x37, 0x56, 0xdd, 0x56, 0xa9, 0x42, 0x55, 0x04, 0xfd, 0x5c, 0x1c, 0x23, 0xfa, 0x58, 0xf8, - 0x2c, 0x4f, 0x55, 0x7f, 0x43, 0xd3, 0xb7, 0xdd, 0x41, 0xfb, 0x5c, 0x0a, 0x37, 0x50, 0xc5, 0xd0, - 0x55, 0x28, 0x4d, 0x02, 0xd1, 0x37, 0x03, 0xc1, 0x8a, 0xd8, 0x38, 0x9e, 0xd8, 0x8e, 0xb4, 0x5d, - 0xf5, 0xd5, 0xc8, 0xa8, 0xda, 0xb9, 0x8c, 0x23, 0x33, 0xc7, 0x36, 0xab, 0xdc, 0xff, 0x97, 0x19, - 0xa8, 0x92, 0x58, 0xc4, 0xc1, 0xf0, 0xd8, 0x8a, 0xab, 0x42, 0x69, 0x37, 0xfa, 0x7c, 0x60, 0x11, - 0xb2, 0x07, 0xa7, 0x2a, 0x18, 0xae, 0xc5, 0x42, 0x5d, 0xbe, 0x55, 0x5f, 0x12, 0xcc, 0xf3, 0x57, - 0xe0, 0x86, 0x21, 0x46, 0x9e, 0x14, 0xcf, 0x4c, 0x5b, 0x26, 0x2f, 0x1e, 0x15, 0xd0, 0x0d, 0x54, - 0x8f, 0xc2, 0x9b, 0x46, 0x45, 0x72, 0x03, 0xf1, 0xb5, 0x21, 0xa4, 0x84, 0xa3, 0x27, 0x88, 0xf6, - 0x0b, 0xcb, 0x11, 0xca, 0x27, 0x9e, 0xed, 0xe2, 0xdb, 0xe8, 0x42, 0x38, 0x41, 0x28, 0xab, 0x82, - 0x20, 0xb8, 0xbf, 0x0f, 0x37, 0xe7, 0xe7, 0x02, 0xd4, 0x55, 0x71, 0xfa, 0x66, 0x35, 0x5d, 0x45, - 0x79, 0xe6, 0xdb, 0xea, 0x4e, 0x6f, 0x05, 0x0a, 0x07, 0xcf, 0x5d, 0x12, 0x8b, 0x35, 0xa8, 0xed, - 0x7b, 0x09, 0x1a, 0x96, 0xbb, 0xff, 0x3e, 0x40, 0x1c, 0xb0, 0x53, 0x9f, 0xf6, 0x22, 0x19, 0x22, - 0xe5, 0xfb, 0x68, 0x22, 0x02, 0xed, 0xd2, 0x3d, 0xb3, 0xe5, 0xd0, 0x9b, 0x84, 0x79, 0x32, 0x96, - 0xbd, 0xdf, 0x4f, 0xe5, 0x7d, 0xe2, 0xd9, 0x0c, 0x7b, 0xbf, 0x94, 0xb8, 0x9f, 0x95, 0x51, 0x19, - 0x05, 0xfa, 0x7f, 0x25, 0xea, 0xfb, 0x1b, 0x3a, 0xdf, 0x62, 0xa9, 0xef, 0x6f, 0x44, 0xe3, 0xcb, - 0xab, 0x0f, 0x91, 0xb9, 0x7d, 0xe1, 0x08, 0x8b, 0x15, 0xee, 0x7f, 0x00, 0xab, 0x7a, 0x8e, 0xfa, - 0x22, 0x08, 0xc2, 0xfb, 0x4d, 0x87, 0xbe, 0x7d, 0xa6, 0xbe, 0xf1, 0xb1, 0x0c, 0xe5, 0x43, 0xe1, - 0x07, 0x9e, 0x4b, 0xdf, 0x37, 0x01, 0x28, 0x76, 0x87, 0xa6, 0x8f, 0xef, 0xb8, 0xff, 0x15, 0x3d, - 0xbb, 0x4f, 0xce, 0xc3, 0x33, 0x05, 0x37, 0x9e, 0xfe, 0xbc, 0x8f, 0x29, 0x4d, 0x8d, 0x2e, 0x7d, - 0x61, 0x8e, 0x58, 0xf6, 0xfe, 0x26, 0x54, 0xe8, 0x7a, 0xd4, 0x63, 0xdb, 0xb5, 0x70, 0xe4, 0x1b, - 0xba, 0x54, 0x9f, 0xbe, 0x3b, 0x75, 0x46, 0xf3, 0x58, 0x56, 0x5f, 0xe8, 0x65, 0x59, 0x7e, 0x13, - 0x78, 0x6b, 0x22, 0xbd, 0x91, 0x49, 0xd7, 0x98, 0x9d, 0x0b, 0xf5, 0x35, 0xe7, 0xdc, 0xfd, 0x6f, - 0x00, 0x57, 0x41, 0x3d, 0x4b, 0x9c, 0xdb, 0xee, 0x20, 0xfa, 0x7e, 0x02, 0xd0, 0xc7, 0x50, 0x2c, - 0x71, 0x1e, 0xde, 0x6d, 0x0b, 0x1b, 0xe1, 0x27, 0x59, 0xb6, 0xbd, 0x89, 0x8b, 0x9d, 0x7e, 0x0a, - 0xd7, 0x95, 0x6c, 0xe2, 0x28, 0xe8, 0x8e, 0xec, 0xa5, 0x91, 0x06, 0x75, 0xb7, 0x4d, 0x4e, 0x82, - 0x08, 0x97, 0x65, 0xb0, 0x63, 0x91, 0x97, 0x1e, 0xc3, 0xb3, 0xf7, 0x9b, 0x70, 0x6d, 0x4e, 0xa8, - 0x84, 0x4e, 0x03, 0xe5, 0x30, 0xb2, 0xa5, 0xfb, 0x1f, 0xc3, 0x9a, 0xd2, 0x5f, 0xfb, 0xea, 0x16, - 0x63, 0x38, 0x6d, 0xcf, 0x3a, 0xdb, 0x1d, 0x35, 0xd3, 0x9b, 0xed, 0xdd, 0xdd, 0x27, 0xbb, 0x2d, - 0x83, 0x65, 0x48, 0x90, 0x0e, 0x7a, 0x47, 0x9b, 0x07, 0xfb, 0xfb, 0xed, 0xcd, 0x5e, 0x7b, 0x8b, - 0x65, 0x37, 0xee, 0xff, 0x9b, 0x9f, 0xdc, 0xc9, 0xfc, 0xf8, 0x27, 0x77, 0x32, 0xff, 0xf9, 0x27, - 0x77, 0x32, 0x3f, 0xf8, 0xe9, 0x9d, 0xa5, 0x1f, 0xff, 0xf4, 0xce, 0xd2, 0xbf, 0xff, 0xe9, 0x9d, - 0xa5, 0xcf, 0xd8, 0xf4, 0xbf, 0x1c, 0x3a, 0x2e, 0x92, 0x37, 0xf2, 0xce, 0xff, 0x0d, 0x00, 0x00, - 0xff, 0xff, 0xaf, 0xf5, 0x35, 0xc0, 0x8d, 0x68, 0x00, 0x00, + // 9349 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x7d, 0x5b, 0x6c, 0x23, 0x59, + 0x76, 0x98, 0xf8, 0x26, 0x0f, 0x45, 0xe9, 0xea, 0xf6, 0x8b, 0xc3, 0x6d, 0x77, 0xda, 0xdc, 0xd9, + 0x99, 0x9e, 0xde, 0x59, 0xf5, 0x4c, 0xcf, 0xcc, 0xce, 0xec, 0x78, 0x67, 0x76, 0x29, 0x89, 0x6a, + 0x71, 0x5a, 0xaf, 0x2d, 0xb2, 0xbb, 0x77, 0x06, 0x76, 0x94, 0x12, 0xeb, 0x8a, 0xac, 0x55, 0xb1, + 0x8a, 0x5b, 0x75, 0xa9, 0x96, 0x16, 0x49, 0xb0, 0x71, 0x12, 0x3b, 0x46, 0x7e, 0x36, 0x41, 0x1c, + 0xc7, 0x08, 0x02, 0xef, 0x7e, 0x04, 0x30, 0x6c, 0x07, 0xf9, 0x32, 0x12, 0xe7, 0x01, 0x24, 0xfe, + 0x0a, 0xe0, 0x9f, 0x45, 0xbe, 0x02, 0x24, 0x40, 0x82, 0x5d, 0x20, 0x08, 0x90, 0x87, 0xe1, 0x7c, + 0x39, 0x41, 0x3e, 0x82, 0x73, 0xee, 0xad, 0x17, 0x49, 0xa9, 0xd9, 0x63, 0x3b, 0xc8, 0x97, 0x78, + 0x4f, 0x9d, 0x73, 0xea, 0x3e, 0xce, 0x3d, 0xf7, 0xbc, 0x6e, 0x09, 0x5e, 0x1d, 0x9f, 0x0e, 0x1e, + 0x38, 0xf6, 0xf1, 0x83, 0xf1, 0xf1, 0x83, 0x91, 0x67, 0x09, 0xe7, 0xc1, 0xd8, 0xf7, 0xa4, 0x17, + 0xa8, 0x46, 0xb0, 0x4e, 0x2d, 0x5e, 0x33, 0xdd, 0x0b, 0x79, 0x31, 0x16, 0xeb, 0x04, 0x6d, 0xdc, + 0x1e, 0x78, 0xde, 0xc0, 0x11, 0x0a, 0xf5, 0x78, 0x72, 0xf2, 0x20, 0x90, 0xfe, 0xa4, 0x2f, 0x15, + 0x72, 0xf3, 0xc7, 0x79, 0xb8, 0xd9, 0x1d, 0x99, 0xbe, 0xdc, 0x70, 0xbc, 0xfe, 0x69, 0xd7, 0x35, + 0xc7, 0xc1, 0xd0, 0x93, 0x1b, 0x66, 0x20, 0xf8, 0x9b, 0x50, 0x3c, 0x46, 0x60, 0x50, 0xcf, 0xdc, + 0xcd, 0xdd, 0xab, 0x3e, 0xbc, 0xbe, 0x9e, 0x62, 0xbc, 0x4e, 0x14, 0x86, 0xc6, 0xe1, 0x6f, 0x43, + 0xc9, 0x12, 0xd2, 0xb4, 0x9d, 0xa0, 0x9e, 0xbd, 0x9b, 0xb9, 0x57, 0x7d, 0x78, 0x6b, 0x5d, 0xbd, + 0x78, 0x3d, 0x7c, 0xf1, 0x7a, 0x97, 0x5e, 0x6c, 0x84, 0x78, 0xfc, 0x7d, 0x28, 0x9f, 0xd8, 0x8e, + 0x78, 0x2c, 0x2e, 0x82, 0x7a, 0xee, 0x4a, 0x9a, 0x8d, 0x6c, 0x3d, 0x63, 0x44, 0xc8, 0x7c, 0x13, + 0x56, 0xc4, 0xb9, 0xf4, 0x4d, 0x43, 0x38, 0xa6, 0xb4, 0x3d, 0x37, 0xa8, 0xe7, 0xa9, 0x87, 0xb7, + 0xa6, 0x7a, 0x18, 0x3e, 0x27, 0xf2, 0x29, 0x12, 0x7e, 0x17, 0xaa, 0xde, 0xf1, 0x77, 0x44, 0x5f, + 0xf6, 0x2e, 0xc6, 0x22, 0xa8, 0x17, 0xee, 0xe6, 0xee, 0x55, 0x8c, 0x24, 0x88, 0x7f, 0x0d, 0xaa, + 0x7d, 0xcf, 0x71, 0x44, 0x5f, 0xbd, 0xa3, 0x78, 0xf5, 0xb0, 0x92, 0xb8, 0xfc, 0x5d, 0xb8, 0xe1, + 0x8b, 0x91, 0x77, 0x26, 0xac, 0xcd, 0x08, 0x4a, 0xe3, 0x2c, 0xd3, 0x6b, 0xe6, 0x3f, 0xe4, 0x2d, + 0xa8, 0xf9, 0xba, 0x7f, 0xbb, 0xb6, 0x7b, 0x1a, 0xd4, 0x4b, 0x34, 0xac, 0x2f, 0x5c, 0x32, 0x2c, + 0xc4, 0x31, 0xd2, 0x14, 0x9c, 0x41, 0xee, 0x54, 0x5c, 0xd4, 0x2b, 0x77, 0x33, 0xf7, 0x2a, 0x06, + 0xfe, 0xe4, 0x1f, 0x42, 0xdd, 0xf3, 0xed, 0x81, 0xed, 0x9a, 0xce, 0xa6, 0x2f, 0x4c, 0x29, 0xac, + 0x9e, 0x3d, 0x12, 0x81, 0x34, 0x47, 0xe3, 0x3a, 0xdc, 0xcd, 0xdc, 0xcb, 0x19, 0x97, 0x3e, 0xe7, + 0xef, 0xa8, 0x15, 0xea, 0xb8, 0x27, 0x5e, 0xbd, 0xaa, 0x87, 0x9f, 0xee, 0xcb, 0xb6, 0x7e, 0x6c, + 0x44, 0x88, 0xcd, 0x3f, 0xce, 0x42, 0xb1, 0x2b, 0x4c, 0xbf, 0x3f, 0x6c, 0xfc, 0x72, 0x06, 0x8a, + 0x86, 0x08, 0x26, 0x8e, 0xe4, 0x0d, 0x28, 0xab, 0xb9, 0xed, 0x58, 0xf5, 0x0c, 0xf5, 0x2e, 0x6a, + 0x7f, 0x1e, 0xd9, 0x59, 0x87, 0xfc, 0x48, 0x48, 0xb3, 0x9e, 0xa3, 0x19, 0x6a, 0x4c, 0xf5, 0x4a, + 0xbd, 0x7e, 0x7d, 0x4f, 0x48, 0xd3, 0x20, 0xbc, 0xc6, 0x4f, 0x33, 0x90, 0xc7, 0x26, 0xbf, 0x0d, + 0x95, 0xa1, 0x3d, 0x18, 0x3a, 0xf6, 0x60, 0x28, 0x75, 0x47, 0x62, 0x00, 0xff, 0x18, 0x56, 0xa3, + 0x86, 0x61, 0xba, 0x03, 0x81, 0x3d, 0x9a, 0x27, 0xfc, 0xf4, 0xd0, 0x98, 0x46, 0xe6, 0x75, 0x28, + 0xd1, 0x7e, 0xe8, 0x58, 0x24, 0xd1, 0x15, 0x23, 0x6c, 0xa2, 0xb8, 0x85, 0x2b, 0xf5, 0x58, 0x5c, + 0xd4, 0xf3, 0xf4, 0x34, 0x09, 0xe2, 0x2d, 0x58, 0x0d, 0x9b, 0x5b, 0x7a, 0x36, 0x0a, 0x57, 0xcf, + 0xc6, 0x34, 0x7e, 0xf3, 0x37, 0xf7, 0xa0, 0x40, 0xdb, 0x92, 0xaf, 0x40, 0xd6, 0x0e, 0x27, 0x3a, + 0x6b, 0x5b, 0xfc, 0x01, 0x14, 0x4f, 0x6c, 0xe1, 0x58, 0x2f, 0x9c, 0x61, 0x8d, 0xc6, 0xdb, 0xb0, + 0xec, 0x8b, 0x40, 0xfa, 0xb6, 0x96, 0x7e, 0xb5, 0x41, 0x7f, 0x76, 0x9e, 0x0e, 0x58, 0x37, 0x12, + 0x88, 0x46, 0x8a, 0x0c, 0x87, 0xdd, 0x1f, 0xda, 0x8e, 0xe5, 0x0b, 0xb7, 0x63, 0xa9, 0x7d, 0x5a, + 0x31, 0x92, 0x20, 0x7e, 0x0f, 0x56, 0x8f, 0xcd, 0xfe, 0xe9, 0xc0, 0xf7, 0x26, 0x2e, 0x6e, 0x08, + 0xcf, 0xa7, 0x61, 0x57, 0x8c, 0x69, 0x30, 0x7f, 0x0b, 0x0a, 0xa6, 0x63, 0x0f, 0x5c, 0xda, 0x89, + 0x2b, 0x33, 0x8b, 0xae, 0xfa, 0xd2, 0x42, 0x0c, 0x43, 0x21, 0xf2, 0x1d, 0xa8, 0x9d, 0x09, 0x5f, + 0xda, 0x7d, 0xd3, 0x21, 0x78, 0xbd, 0x44, 0x94, 0xcd, 0xb9, 0x94, 0x4f, 0x93, 0x98, 0x46, 0x9a, + 0x90, 0x77, 0x00, 0x02, 0x54, 0x93, 0xb4, 0x9c, 0x7a, 0x2f, 0xbc, 0x3e, 0x97, 0xcd, 0xa6, 0xe7, + 0x4a, 0xe1, 0xca, 0xf5, 0x6e, 0x84, 0xbe, 0xb3, 0x64, 0x24, 0x88, 0xf9, 0xfb, 0x90, 0x97, 0xe2, + 0x5c, 0xd6, 0x57, 0xae, 0x98, 0xd1, 0x90, 0x49, 0x4f, 0x9c, 0xcb, 0x9d, 0x25, 0x83, 0x08, 0x90, + 0x10, 0x37, 0x59, 0x7d, 0x75, 0x01, 0x42, 0xdc, 0x97, 0x48, 0x88, 0x04, 0xfc, 0x23, 0x28, 0x3a, + 0xe6, 0x85, 0x37, 0x91, 0x75, 0x46, 0xa4, 0x5f, 0xbc, 0x92, 0x74, 0x97, 0x50, 0x77, 0x96, 0x0c, + 0x4d, 0xc4, 0xdf, 0x85, 0x9c, 0x65, 0x9f, 0xd5, 0xd7, 0x88, 0xf6, 0xee, 0x95, 0xb4, 0x5b, 0xf6, + 0xd9, 0xce, 0x92, 0x81, 0xe8, 0x7c, 0x13, 0xca, 0xc7, 0x9e, 0x77, 0x3a, 0x32, 0xfd, 0xd3, 0x3a, + 0x27, 0xd2, 0x2f, 0x5d, 0x49, 0xba, 0xa1, 0x91, 0x77, 0x96, 0x8c, 0x88, 0x10, 0x87, 0x6c, 0xf7, + 0x3d, 0xb7, 0x7e, 0x6d, 0x81, 0x21, 0x77, 0xfa, 0x9e, 0x8b, 0x43, 0x46, 0x02, 0x24, 0x74, 0x6c, + 0xf7, 0xb4, 0x7e, 0x7d, 0x01, 0x42, 0xd4, 0x9c, 0x48, 0x88, 0x04, 0xd8, 0x6d, 0xcb, 0x94, 0xe6, + 0x99, 0x2d, 0x9e, 0xd7, 0x6f, 0x2c, 0xd0, 0xed, 0x2d, 0x8d, 0x8c, 0xdd, 0x0e, 0x09, 0x91, 0x49, + 0xb8, 0x35, 0xeb, 0x37, 0x17, 0x60, 0x12, 0x6a, 0x74, 0x64, 0x12, 0x12, 0xf2, 0x3f, 0x0f, 0x6b, + 0x27, 0xc2, 0x94, 0x13, 0x5f, 0x58, 0xf1, 0x41, 0x77, 0x8b, 0xb8, 0xad, 0x5f, 0xbd, 0xf6, 0xd3, + 0x54, 0x3b, 0x4b, 0xc6, 0x2c, 0x2b, 0xfe, 0x21, 0x14, 0x1c, 0x53, 0x8a, 0xf3, 0x7a, 0x9d, 0x78, + 0x36, 0x5f, 0x20, 0x14, 0x52, 0x9c, 0xef, 0x2c, 0x19, 0x8a, 0x84, 0x7f, 0x1b, 0x56, 0xa5, 0x79, + 0xec, 0x88, 0x83, 0x13, 0x8d, 0x10, 0xd4, 0x5f, 0x21, 0x2e, 0x6f, 0x5e, 0x2d, 0xce, 0x69, 0x9a, + 0x9d, 0x25, 0x63, 0x9a, 0x0d, 0xf6, 0x8a, 0x40, 0xf5, 0xc6, 0x02, 0xbd, 0x22, 0x7e, 0xd8, 0x2b, + 0x22, 0xe1, 0xbb, 0x50, 0xa5, 0x1f, 0x9b, 0x9e, 0x33, 0x19, 0xb9, 0xf5, 0x2f, 0x10, 0x87, 0x7b, + 0x2f, 0xe6, 0xa0, 0xf0, 0x77, 0x96, 0x8c, 0x24, 0x39, 0x2e, 0x22, 0x35, 0x0d, 0xef, 0x79, 0xfd, + 0xf6, 0x02, 0x8b, 0xd8, 0xd3, 0xc8, 0xb8, 0x88, 0x21, 0x21, 0x6e, 0xbd, 0xe7, 0xb6, 0x35, 0x10, + 0xb2, 0xfe, 0x33, 0x0b, 0x6c, 0xbd, 0x67, 0x84, 0x8a, 0x5b, 0x4f, 0x11, 0xa1, 0x18, 0xf7, 0x87, + 0xa6, 0xac, 0xdf, 0x59, 0x40, 0x8c, 0x37, 0x87, 0x26, 0xe9, 0x0a, 0x24, 0x68, 0x7c, 0x0f, 0x96, + 0x93, 0x5a, 0x99, 0x73, 0xc8, 0xfb, 0xc2, 0x54, 0x27, 0x42, 0xd9, 0xa0, 0xdf, 0x08, 0x13, 0x96, + 0x2d, 0xe9, 0x44, 0x28, 0x1b, 0xf4, 0x9b, 0xdf, 0x84, 0xa2, 0xb2, 0x4d, 0x48, 0xe1, 0x97, 0x0d, + 0xdd, 0x42, 0x5c, 0xcb, 0x37, 0x07, 0x74, 0x6e, 0x95, 0x0d, 0xfa, 0x8d, 0xb8, 0x96, 0xef, 0x8d, + 0x0f, 0x5c, 0x52, 0xd8, 0x65, 0x43, 0xb7, 0x1a, 0x7f, 0xf3, 0x63, 0x28, 0xe9, 0x4e, 0x35, 0xfe, + 0x41, 0x06, 0x8a, 0x4a, 0xa1, 0xf0, 0x6f, 0x40, 0x21, 0x90, 0x17, 0x8e, 0xa0, 0x3e, 0xac, 0x3c, + 0x7c, 0x63, 0x01, 0x25, 0xb4, 0xde, 0x45, 0x02, 0x43, 0xd1, 0x35, 0x0d, 0x28, 0x50, 0x9b, 0x97, + 0x20, 0x67, 0x78, 0xcf, 0xd9, 0x12, 0x07, 0x28, 0xaa, 0xc5, 0x62, 0x19, 0x04, 0x6e, 0xd9, 0x67, + 0x2c, 0x8b, 0xc0, 0x1d, 0x61, 0x5a, 0xc2, 0x67, 0x39, 0x5e, 0x83, 0x4a, 0xb8, 0x2c, 0x01, 0xcb, + 0x73, 0x06, 0xcb, 0x89, 0x05, 0x0f, 0x58, 0xa1, 0xf1, 0x3f, 0xf3, 0x90, 0xc7, 0xfd, 0xcf, 0x5f, + 0x85, 0x9a, 0x34, 0xfd, 0x81, 0x50, 0x86, 0x70, 0x64, 0xa4, 0xa4, 0x81, 0xfc, 0xa3, 0x70, 0x0c, + 0x59, 0x1a, 0xc3, 0xeb, 0x2f, 0xd4, 0x2b, 0xa9, 0x11, 0x24, 0x4e, 0xe1, 0xdc, 0x62, 0xa7, 0xf0, + 0x36, 0x94, 0x51, 0x9d, 0x75, 0xed, 0xef, 0x09, 0x9a, 0xfa, 0x95, 0x87, 0xf7, 0x5f, 0xfc, 0xca, + 0x8e, 0xa6, 0x30, 0x22, 0x5a, 0xde, 0x81, 0x4a, 0xdf, 0xf4, 0x2d, 0xea, 0x0c, 0xad, 0xd6, 0xca, + 0xc3, 0x2f, 0xbf, 0x98, 0xd1, 0x66, 0x48, 0x62, 0xc4, 0xd4, 0xfc, 0x00, 0xaa, 0x96, 0x08, 0xfa, + 0xbe, 0x3d, 0x26, 0xf5, 0xa6, 0xce, 0xe2, 0xaf, 0xbc, 0x98, 0xd9, 0x56, 0x4c, 0x64, 0x24, 0x39, + 0xa0, 0x45, 0xe6, 0x47, 0xfa, 0xad, 0x44, 0x06, 0x42, 0x0c, 0x68, 0xbe, 0x0f, 0xe5, 0x70, 0x3c, + 0x7c, 0x19, 0xca, 0xf8, 0x77, 0xdf, 0x73, 0x05, 0x5b, 0xc2, 0xb5, 0xc5, 0x56, 0x77, 0x64, 0x3a, + 0x0e, 0xcb, 0xf0, 0x15, 0x00, 0x6c, 0xee, 0x09, 0xcb, 0x9e, 0x8c, 0x58, 0xb6, 0xf9, 0x73, 0xa1, + 0xb4, 0x94, 0x21, 0x7f, 0x68, 0x0e, 0x90, 0x62, 0x19, 0xca, 0xa1, 0xba, 0x66, 0x19, 0xa4, 0xdf, + 0x32, 0x83, 0xe1, 0xb1, 0x67, 0xfa, 0x16, 0xcb, 0xf2, 0x2a, 0x94, 0x5a, 0x7e, 0x7f, 0x68, 0x9f, + 0x09, 0x96, 0x6b, 0x3e, 0x80, 0x6a, 0xa2, 0xbf, 0xc8, 0x42, 0xbf, 0xb4, 0x02, 0x85, 0x96, 0x65, + 0x09, 0x8b, 0x65, 0x90, 0x40, 0x0f, 0x90, 0x65, 0x9b, 0x5f, 0x86, 0x4a, 0x34, 0x5b, 0x88, 0x8e, + 0x07, 0x37, 0x5b, 0xc2, 0x5f, 0x08, 0x66, 0x19, 0x94, 0xca, 0x8e, 0xeb, 0xd8, 0xae, 0x60, 0xd9, + 0xc6, 0x5f, 0x20, 0x51, 0xe5, 0x5f, 0x4f, 0x6f, 0x88, 0xd7, 0x5e, 0x74, 0xb2, 0xa6, 0x77, 0xc3, + 0x17, 0x12, 0xe3, 0xdb, 0xb5, 0xa9, 0x73, 0x65, 0xc8, 0x6f, 0x79, 0x32, 0x60, 0x99, 0xc6, 0x7f, + 0xcd, 0x42, 0x39, 0x3c, 0x50, 0xd1, 0x27, 0x98, 0xf8, 0x8e, 0x16, 0x68, 0xfc, 0xc9, 0xaf, 0x43, + 0x41, 0xda, 0x52, 0x8b, 0x71, 0xc5, 0x50, 0x0d, 0xb4, 0xd5, 0x92, 0x2b, 0xab, 0x0c, 0xd8, 0xe9, + 0xa5, 0xb2, 0x47, 0xe6, 0x40, 0xec, 0x98, 0xc1, 0x50, 0x9b, 0xb0, 0x31, 0x00, 0xe9, 0x4f, 0xcc, + 0x33, 0x94, 0x39, 0x7a, 0xae, 0xac, 0xb8, 0x24, 0x88, 0xbf, 0x03, 0x79, 0x1c, 0xa0, 0x16, 0x9a, + 0x3f, 0x37, 0x35, 0x60, 0x14, 0x93, 0x43, 0x5f, 0xe0, 0xf2, 0xac, 0xa3, 0x07, 0x66, 0x10, 0x32, + 0x7f, 0x0d, 0x56, 0xd4, 0x26, 0x3c, 0x08, 0xfd, 0x87, 0x12, 0x71, 0x9e, 0x82, 0xf2, 0x16, 0x4e, + 0xa7, 0x29, 0x45, 0xbd, 0xbc, 0x80, 0x7c, 0x87, 0x93, 0xb3, 0xde, 0x45, 0x12, 0x43, 0x51, 0x36, + 0xdf, 0xc3, 0x39, 0x35, 0xa5, 0xc0, 0x65, 0x6e, 0x8f, 0xc6, 0xf2, 0x42, 0x09, 0xcd, 0xb6, 0x90, + 0xfd, 0xa1, 0xed, 0x0e, 0x58, 0x46, 0x4d, 0x31, 0x2e, 0x22, 0xa1, 0xf8, 0xbe, 0xe7, 0xb3, 0x5c, + 0xa3, 0x01, 0x79, 0x94, 0x51, 0x54, 0x92, 0xae, 0x39, 0x12, 0x7a, 0xa6, 0xe9, 0x77, 0xe3, 0x1a, + 0xac, 0xcd, 0x9c, 0xc7, 0x8d, 0xdf, 0x2b, 0x2a, 0x09, 0x41, 0x0a, 0xb2, 0x05, 0x35, 0x05, 0x99, + 0x79, 0x2f, 0xa5, 0x63, 0x90, 0x4b, 0x5a, 0xc7, 0x7c, 0x04, 0x05, 0x1c, 0x58, 0xa8, 0x62, 0x16, + 0x20, 0xdf, 0x43, 0x74, 0x43, 0x51, 0xa1, 0x07, 0xd3, 0x1f, 0x8a, 0xfe, 0xa9, 0xb0, 0xb4, 0xae, + 0x0f, 0x9b, 0x28, 0x34, 0xfd, 0x84, 0x79, 0xae, 0x1a, 0x24, 0x12, 0x7d, 0xcf, 0x6d, 0x8f, 0xbc, + 0xef, 0xd8, 0xb4, 0xae, 0x28, 0x12, 0x21, 0x20, 0x7c, 0xda, 0x41, 0x19, 0xd1, 0xcb, 0x16, 0x03, + 0x1a, 0x6d, 0x28, 0xd0, 0xbb, 0x71, 0x27, 0xa8, 0x3e, 0xab, 0x48, 0xc3, 0x6b, 0x8b, 0xf5, 0x59, + 0x77, 0xb9, 0xf1, 0x3b, 0x59, 0xc8, 0x63, 0x9b, 0xdf, 0x87, 0x82, 0x8f, 0x7e, 0x18, 0x4d, 0xe7, + 0x65, 0x3e, 0x9b, 0x42, 0xe1, 0xdf, 0xd0, 0xa2, 0x98, 0x5d, 0x40, 0x58, 0xa2, 0x37, 0x26, 0xc5, + 0xf2, 0x3a, 0x14, 0xc6, 0xa6, 0x6f, 0x8e, 0xf4, 0x3e, 0x51, 0x8d, 0xe6, 0x0f, 0x33, 0x90, 0x47, + 0x24, 0xbe, 0x06, 0xb5, 0xae, 0xf4, 0xed, 0x53, 0x21, 0x87, 0xbe, 0x37, 0x19, 0x0c, 0x95, 0x24, + 0x3d, 0x16, 0x17, 0x4a, 0xdf, 0x28, 0x85, 0x20, 0x4d, 0xc7, 0xee, 0xb3, 0x2c, 0x4a, 0xd5, 0x86, + 0xe7, 0x58, 0x2c, 0xc7, 0x57, 0xa1, 0xfa, 0xc4, 0xb5, 0x84, 0x1f, 0xf4, 0x3d, 0x5f, 0x58, 0x2c, + 0xaf, 0x77, 0xf7, 0x29, 0x2b, 0xd0, 0x59, 0x26, 0xce, 0x25, 0xf9, 0x42, 0xac, 0xc8, 0xaf, 0xc1, + 0xea, 0x46, 0xda, 0x41, 0x62, 0x25, 0xd4, 0x49, 0x7b, 0xc2, 0x45, 0x21, 0x63, 0x65, 0x25, 0xc4, + 0xde, 0x77, 0x6c, 0x56, 0xc1, 0x97, 0xa9, 0x7d, 0xc2, 0xa0, 0xf9, 0x2f, 0x32, 0xa1, 0xe6, 0xa8, + 0x41, 0xe5, 0xd0, 0xf4, 0xcd, 0x81, 0x6f, 0x8e, 0xb1, 0x7f, 0x55, 0x28, 0xa9, 0x83, 0xf3, 0x6d, + 0xa5, 0xdd, 0x54, 0xe3, 0xa1, 0xd2, 0x8d, 0xaa, 0xf1, 0x0e, 0xcb, 0xc5, 0x8d, 0x77, 0x59, 0x1e, + 0xdf, 0xf1, 0xad, 0x89, 0x27, 0x05, 0x2b, 0x90, 0xae, 0xf3, 0x2c, 0xc1, 0x8a, 0x08, 0xec, 0xa1, + 0x46, 0x61, 0x25, 0x1c, 0xf3, 0x26, 0xca, 0xcf, 0xb1, 0x77, 0xce, 0xca, 0xd8, 0x0d, 0x9c, 0x46, + 0x61, 0xb1, 0x0a, 0x3e, 0xd9, 0x9f, 0x8c, 0x8e, 0x05, 0x0e, 0x13, 0xf0, 0x49, 0xcf, 0x1b, 0x0c, + 0x1c, 0xc1, 0xaa, 0x38, 0x07, 0x09, 0xe5, 0xcb, 0x96, 0x49, 0xd3, 0x9a, 0x8e, 0xe3, 0x4d, 0x24, + 0xab, 0x35, 0xfe, 0x38, 0x07, 0x79, 0xf4, 0x6e, 0x70, 0xef, 0x0c, 0x51, 0xcf, 0xe8, 0xbd, 0x83, + 0xbf, 0xa3, 0x1d, 0x98, 0x8d, 0x77, 0x20, 0xff, 0x50, 0xaf, 0x74, 0x6e, 0x01, 0x2d, 0x8b, 0x8c, + 0x93, 0x8b, 0xcc, 0x21, 0x3f, 0xb2, 0x47, 0x42, 0xeb, 0x3a, 0xfa, 0x8d, 0xb0, 0x00, 0xcf, 0xe3, + 0x02, 0x05, 0x4f, 0xe8, 0x37, 0xee, 0x1a, 0x13, 0x8f, 0x85, 0x96, 0xa4, 0x3d, 0x90, 0x33, 0xc2, + 0xe6, 0x1c, 0xed, 0x55, 0x99, 0xab, 0xbd, 0x3e, 0x0a, 0xb5, 0x57, 0x69, 0x81, 0x5d, 0x4f, 0xdd, + 0x4c, 0x6a, 0xae, 0x58, 0x69, 0x94, 0x17, 0x27, 0x4f, 0x1c, 0x26, 0x5b, 0x5a, 0x6a, 0xe3, 0x83, + 0xae, 0xac, 0x66, 0x99, 0x65, 0x70, 0x35, 0x69, 0xbb, 0x2a, 0x9d, 0xf7, 0xd4, 0xb6, 0x84, 0xc7, + 0x72, 0x74, 0x10, 0x4e, 0x2c, 0xdb, 0x63, 0x79, 0xb4, 0xbc, 0x0e, 0xb7, 0xb6, 0x59, 0xa1, 0xf9, + 0x5a, 0xe2, 0x48, 0x6a, 0x4d, 0xa4, 0xa7, 0xd8, 0x90, 0xf8, 0x66, 0x94, 0x34, 0x1e, 0x0b, 0x8b, + 0x65, 0x9b, 0x5f, 0x9d, 0xa3, 0x66, 0x6b, 0x50, 0x79, 0x32, 0x76, 0x3c, 0xd3, 0xba, 0x42, 0xcf, + 0x2e, 0x03, 0xc4, 0x5e, 0x75, 0xe3, 0x87, 0x5f, 0x8c, 0x8f, 0x73, 0xb4, 0x45, 0x03, 0x6f, 0xe2, + 0xf7, 0x05, 0xa9, 0x90, 0x8a, 0xa1, 0x5b, 0xfc, 0x9b, 0x50, 0xc0, 0xe7, 0x61, 0x18, 0xe7, 0xfe, + 0x42, 0xbe, 0xdc, 0xfa, 0x53, 0x5b, 0x3c, 0x37, 0x14, 0x21, 0xbf, 0x03, 0x60, 0xf6, 0xa5, 0x7d, + 0x26, 0x10, 0xa8, 0x37, 0x7b, 0x02, 0xc2, 0xdf, 0x4b, 0x9a, 0x2f, 0x57, 0xc7, 0x21, 0x13, 0x76, + 0x0d, 0x37, 0xa0, 0x8a, 0x5b, 0x77, 0x7c, 0xe0, 0xe3, 0x6e, 0xaf, 0x2f, 0x13, 0xe1, 0x5b, 0x8b, + 0x75, 0xef, 0x51, 0x44, 0x68, 0x24, 0x99, 0xf0, 0x27, 0xb0, 0xac, 0x62, 0x6a, 0x9a, 0x69, 0x8d, + 0x98, 0xbe, 0xbd, 0x18, 0xd3, 0x83, 0x98, 0xd2, 0x48, 0xb1, 0x99, 0x0d, 0x4b, 0x16, 0x5e, 0x3a, + 0x2c, 0xf9, 0x1a, 0xac, 0xf4, 0xd2, 0xbb, 0x40, 0x1d, 0x15, 0x53, 0x50, 0xde, 0x84, 0x65, 0x3b, + 0x88, 0xa3, 0xa2, 0x14, 0x23, 0x29, 0x1b, 0x29, 0x58, 0xe3, 0x7f, 0x15, 0x21, 0x4f, 0x33, 0x3f, + 0x1d, 0xe3, 0xda, 0x4c, 0xa9, 0xf4, 0x07, 0x8b, 0x2f, 0xf5, 0xd4, 0x8e, 0x27, 0x0d, 0x92, 0x4b, + 0x68, 0x90, 0x6f, 0x42, 0x21, 0xf0, 0x7c, 0x19, 0x2e, 0xef, 0x82, 0x42, 0xd4, 0xf5, 0x7c, 0x69, + 0x28, 0x42, 0xbe, 0x0d, 0xa5, 0x13, 0xdb, 0x91, 0xb8, 0x28, 0x6a, 0xf2, 0xde, 0x5c, 0x8c, 0xc7, + 0x36, 0x11, 0x19, 0x21, 0x31, 0xdf, 0x4d, 0x0a, 0x5b, 0x91, 0x38, 0xad, 0x2f, 0xc6, 0x69, 0x9e, + 0x0c, 0xde, 0x07, 0xd6, 0xf7, 0xce, 0x84, 0x6f, 0x24, 0x02, 0x93, 0xea, 0x90, 0x9e, 0x81, 0xf3, + 0x06, 0x94, 0x87, 0xb6, 0x25, 0xd0, 0xce, 0x21, 0x1d, 0x53, 0x36, 0xa2, 0x36, 0x7f, 0x0c, 0x65, + 0xf2, 0x0f, 0x50, 0x2b, 0x56, 0x5e, 0x7a, 0xf2, 0x95, 0xab, 0x12, 0x32, 0xc0, 0x17, 0xd1, 0xcb, + 0xb7, 0x6d, 0x49, 0xf1, 0xe9, 0xb2, 0x11, 0xb5, 0xb1, 0xc3, 0x24, 0xef, 0xc9, 0x0e, 0x57, 0x55, + 0x87, 0xa7, 0xe1, 0xfc, 0x5d, 0xb8, 0x41, 0xb0, 0xa9, 0x43, 0x12, 0xb7, 0x1a, 0x32, 0x9d, 0xff, + 0x10, 0x0d, 0x96, 0xb1, 0x39, 0x10, 0xbb, 0xf6, 0xc8, 0x96, 0xf5, 0xda, 0xdd, 0xcc, 0xbd, 0x82, + 0x11, 0x03, 0xf8, 0x9b, 0xb0, 0x66, 0x89, 0x13, 0x73, 0xe2, 0xc8, 0x9e, 0x18, 0x8d, 0x1d, 0x53, + 0x8a, 0x8e, 0x45, 0x32, 0x5a, 0x31, 0x66, 0x1f, 0xf0, 0xb7, 0xe0, 0x9a, 0x06, 0x1e, 0x44, 0x59, + 0x85, 0x8e, 0x45, 0xe1, 0xbb, 0x8a, 0x31, 0xef, 0x11, 0x6e, 0x13, 0xe1, 0x5a, 0xc9, 0xd1, 0x31, + 0xb5, 0x4d, 0xd2, 0xd0, 0xe6, 0x9e, 0x56, 0xd7, 0x78, 0xd0, 0xa2, 0x3f, 0x1b, 0x2a, 0xda, 0x40, + 0xaa, 0x93, 0xfb, 0x91, 0xe9, 0x38, 0xc2, 0xbf, 0x50, 0xce, 0xf0, 0x63, 0xd3, 0x3d, 0x36, 0x5d, + 0x96, 0xa3, 0xb3, 0xd8, 0x74, 0x84, 0x6b, 0x99, 0xbe, 0x3a, 0xb9, 0x1f, 0xd1, 0xc1, 0x5f, 0x68, + 0xde, 0x83, 0x3c, 0x4d, 0x7d, 0x05, 0x0a, 0xca, 0x9b, 0x22, 0xcf, 0x5a, 0x7b, 0x52, 0xa4, 0xb9, + 0x77, 0x71, 0x9b, 0xb2, 0x6c, 0xe3, 0x1f, 0x16, 0xa1, 0x1c, 0x76, 0x24, 0xcc, 0x35, 0x64, 0xe2, + 0x5c, 0x03, 0x9a, 0x7b, 0xc1, 0x53, 0x3b, 0xb0, 0x8f, 0xb5, 0xf9, 0x5a, 0x36, 0x62, 0x00, 0x5a, + 0x4c, 0xcf, 0x6d, 0x4b, 0x0e, 0x69, 0x6f, 0x15, 0x0c, 0xd5, 0xe0, 0xf7, 0x60, 0xd5, 0xc2, 0xf9, + 0x72, 0xfb, 0xce, 0xc4, 0x12, 0x3d, 0x3c, 0x6d, 0x55, 0x38, 0x61, 0x1a, 0xcc, 0x3f, 0x05, 0x90, + 0xf6, 0x48, 0x6c, 0x7b, 0xfe, 0xc8, 0x94, 0xda, 0x87, 0xf8, 0xda, 0xcb, 0x49, 0xff, 0x7a, 0x2f, + 0x62, 0x60, 0x24, 0x98, 0x21, 0x6b, 0x7c, 0x9b, 0x66, 0x5d, 0xfa, 0x5c, 0xac, 0xb7, 0x22, 0x06, + 0x46, 0x82, 0x19, 0xef, 0x41, 0xe9, 0xc4, 0xf3, 0x47, 0x13, 0xc7, 0xd4, 0x67, 0xf3, 0x87, 0x2f, + 0xc9, 0x77, 0x5b, 0x51, 0x93, 0x8e, 0x0a, 0x59, 0xc5, 0xb1, 0xf0, 0xca, 0x82, 0xb1, 0xf0, 0xe6, + 0xcf, 0x03, 0xc4, 0x3d, 0xe4, 0x37, 0x81, 0xef, 0x79, 0xae, 0x1c, 0xb6, 0x8e, 0x8f, 0xfd, 0x0d, + 0x71, 0xe2, 0xf9, 0x62, 0xcb, 0xc4, 0x63, 0xf8, 0x06, 0xac, 0x45, 0xf0, 0xd6, 0x89, 0x14, 0x3e, + 0x82, 0x49, 0x04, 0xba, 0x43, 0xcf, 0x97, 0xca, 0x16, 0xa4, 0x9f, 0x4f, 0xba, 0x2c, 0x87, 0x47, + 0x7f, 0xa7, 0x7b, 0xc0, 0xf2, 0xcd, 0x7b, 0x00, 0xf1, 0xd4, 0x92, 0xcf, 0x44, 0xbf, 0xde, 0x7e, + 0xa8, 0x3d, 0x28, 0x6a, 0x3d, 0x7c, 0x97, 0x65, 0x9a, 0x3f, 0xc9, 0x40, 0x35, 0x31, 0xa4, 0xb4, + 0x6f, 0xbd, 0xe9, 0x4d, 0x5c, 0xa9, 0x9c, 0x79, 0xfa, 0xf9, 0xd4, 0x74, 0x26, 0x68, 0x04, 0xac, + 0x41, 0x8d, 0xda, 0x5b, 0x76, 0x20, 0x6d, 0xb7, 0x2f, 0x59, 0x2e, 0x42, 0x51, 0x06, 0x44, 0x3e, + 0x42, 0xd9, 0xf7, 0x34, 0xa8, 0xc0, 0x19, 0x2c, 0x1f, 0x0a, 0xbf, 0x2f, 0x42, 0x24, 0x32, 0x9a, + 0x35, 0x24, 0x42, 0x53, 0x46, 0xb3, 0x29, 0x87, 0xdd, 0xc9, 0x88, 0x95, 0xd1, 0xf8, 0xc4, 0x46, + 0xeb, 0x4c, 0xf8, 0x68, 0xf3, 0x54, 0xf0, 0x3d, 0x08, 0xc0, 0xdd, 0x60, 0xba, 0x0c, 0x42, 0xec, + 0x3d, 0xdb, 0x65, 0xd5, 0xa8, 0x61, 0x9e, 0xb3, 0x65, 0xec, 0x3f, 0xb9, 0x18, 0xac, 0xd6, 0xf8, + 0xcf, 0x39, 0xc8, 0xa3, 0xfe, 0x47, 0x9f, 0x38, 0xb9, 0x9d, 0xd5, 0x5e, 0x49, 0x82, 0x3e, 0xdf, + 0xa9, 0x85, 0xbc, 0x93, 0xa7, 0xd6, 0x07, 0x50, 0xed, 0x4f, 0x02, 0xe9, 0x8d, 0xe8, 0xc8, 0xd6, + 0x59, 0xb1, 0x9b, 0x33, 0xd1, 0x25, 0x9a, 0x4e, 0x23, 0x89, 0xca, 0xdf, 0x83, 0xe2, 0x89, 0x92, + 0x7a, 0x15, 0x5f, 0xfa, 0x99, 0x4b, 0x4e, 0x75, 0x2d, 0xd9, 0x1a, 0x19, 0xc7, 0x65, 0xcf, 0xec, + 0xd8, 0x24, 0x48, 0x9f, 0xce, 0xc5, 0xe8, 0x74, 0xfe, 0x79, 0x58, 0x11, 0x38, 0xe1, 0x87, 0x8e, + 0xd9, 0x17, 0x23, 0xe1, 0x86, 0xdb, 0xec, 0xdd, 0x97, 0x18, 0x31, 0xad, 0x18, 0x0d, 0x7b, 0x8a, + 0x17, 0x6a, 0x1e, 0xd7, 0x43, 0x23, 0x21, 0x0c, 0x00, 0x94, 0x8d, 0x18, 0xd0, 0xfc, 0x92, 0xd6, + 0x97, 0x25, 0xc8, 0xb5, 0x82, 0xbe, 0x8e, 0x94, 0x88, 0xa0, 0xaf, 0xdc, 0xb0, 0x4d, 0x9a, 0x0e, + 0x96, 0x6d, 0xbe, 0x0d, 0x95, 0xe8, 0x0d, 0x28, 0x3c, 0xfb, 0x9e, 0xec, 0x8e, 0x45, 0xdf, 0x3e, + 0xb1, 0x85, 0xa5, 0xe4, 0xb3, 0x2b, 0x4d, 0x5f, 0xaa, 0x60, 0x63, 0xdb, 0xb5, 0x58, 0xb6, 0xf1, + 0xdb, 0x65, 0x28, 0xaa, 0x43, 0x5a, 0x0f, 0xb8, 0x12, 0x0d, 0xf8, 0x5b, 0x50, 0xf6, 0xc6, 0xc2, + 0x37, 0xa5, 0xe7, 0xeb, 0x08, 0xcf, 0x7b, 0x2f, 0x73, 0xe8, 0xaf, 0x1f, 0x68, 0x62, 0x23, 0x62, + 0x33, 0x2d, 0x4d, 0xd9, 0x59, 0x69, 0xba, 0x0f, 0x2c, 0x3c, 0xdf, 0x0f, 0x7d, 0xa4, 0x93, 0x17, + 0xda, 0x5f, 0x9f, 0x81, 0xf3, 0x1e, 0x54, 0xfa, 0x9e, 0x6b, 0xd9, 0x51, 0xb4, 0x67, 0xe5, 0xe1, + 0x57, 0x5f, 0xaa, 0x87, 0x9b, 0x21, 0xb5, 0x11, 0x33, 0xe2, 0x6f, 0x42, 0xe1, 0x0c, 0xc5, 0x8c, + 0xe4, 0xe9, 0x72, 0x21, 0x54, 0x48, 0xfc, 0x33, 0xa8, 0x7e, 0x77, 0x62, 0xf7, 0x4f, 0x0f, 0x92, + 0xd1, 0xc4, 0x0f, 0x5e, 0xaa, 0x17, 0xdf, 0x8a, 0xe9, 0x8d, 0x24, 0xb3, 0x84, 0x68, 0x97, 0xfe, + 0x04, 0xa2, 0x5d, 0x9e, 0x15, 0x6d, 0x03, 0x6a, 0xae, 0x08, 0xa4, 0xb0, 0xb6, 0xb5, 0x4d, 0x07, + 0x9f, 0xc3, 0xa6, 0x4b, 0xb3, 0x68, 0x7e, 0x11, 0xca, 0xe1, 0x82, 0xf3, 0x22, 0x64, 0xf7, 0xd1, + 0x79, 0x2a, 0x42, 0xf6, 0xc0, 0x57, 0xd2, 0xd6, 0x42, 0x69, 0x6b, 0xfe, 0x61, 0x06, 0x2a, 0xd1, + 0xa4, 0xa7, 0x35, 0x67, 0xfb, 0xbb, 0x13, 0xd3, 0x61, 0x19, 0x72, 0xab, 0x3d, 0xa9, 0x5a, 0xa4, + 0xac, 0x1f, 0x51, 0x52, 0xdf, 0x67, 0x39, 0x32, 0x11, 0x44, 0x10, 0xb0, 0x3c, 0xe7, 0xb0, 0xa2, + 0xc1, 0x07, 0xbe, 0x42, 0x2d, 0xa0, 0xe2, 0xc3, 0xa7, 0x21, 0xa0, 0xa8, 0x2c, 0x8a, 0x53, 0xa1, + 0x14, 0xe4, 0xbe, 0x27, 0xa9, 0x51, 0xc6, 0x4e, 0x75, 0x5c, 0x56, 0xc1, 0x77, 0xee, 0x7b, 0xb2, + 0x83, 0x2a, 0x31, 0x72, 0xe3, 0xaa, 0xe1, 0xeb, 0xa9, 0x45, 0x1a, 0xb1, 0xe5, 0x38, 0x1d, 0x97, + 0xd5, 0xf4, 0x03, 0xd5, 0x5a, 0x41, 0x8e, 0xed, 0x73, 0xb3, 0x8f, 0xe4, 0xab, 0xa8, 0x61, 0x91, + 0x46, 0xb7, 0x19, 0x6e, 0xc9, 0xf6, 0xb9, 0x1d, 0xc8, 0x80, 0xad, 0x35, 0xff, 0x20, 0x03, 0xd5, + 0xc4, 0x02, 0xa3, 0x9b, 0x48, 0x88, 0x78, 0x94, 0x29, 0xaf, 0xf1, 0x53, 0x9c, 0x46, 0xdf, 0x0a, + 0x8f, 0xa9, 0x9e, 0x87, 0x3f, 0xb3, 0xf8, 0xbe, 0x9e, 0x37, 0xf2, 0x7c, 0xdf, 0x7b, 0xae, 0x4c, + 0x9f, 0x5d, 0x33, 0x90, 0xcf, 0x84, 0x38, 0x65, 0x79, 0x1c, 0xea, 0xe6, 0xc4, 0xf7, 0x85, 0xab, + 0x00, 0x05, 0xea, 0x9c, 0x38, 0x57, 0xad, 0x22, 0x32, 0x45, 0x64, 0x3a, 0x07, 0x59, 0x09, 0x15, + 0x81, 0xc6, 0x56, 0x90, 0x32, 0x22, 0x20, 0xba, 0x6a, 0x56, 0xf0, 0x50, 0x51, 0x91, 0x8c, 0x83, + 0x93, 0x2d, 0xf3, 0x22, 0x68, 0x0d, 0x3c, 0x06, 0xd3, 0xc0, 0x7d, 0xef, 0x39, 0xab, 0x36, 0x26, + 0x00, 0xb1, 0xef, 0x86, 0x3e, 0x2b, 0x0a, 0x44, 0x94, 0x6b, 0xd0, 0x2d, 0x7e, 0x00, 0x80, 0xbf, + 0x08, 0x33, 0x74, 0x5c, 0x5f, 0xc2, 0xa0, 0x26, 0x3a, 0x23, 0xc1, 0xa2, 0xf1, 0x97, 0xa0, 0x12, + 0x3d, 0xe0, 0x75, 0x28, 0x91, 0xe9, 0x1b, 0xbd, 0x36, 0x6c, 0xa2, 0x7d, 0x66, 0xbb, 0x96, 0x38, + 0x27, 0xbd, 0x52, 0x30, 0x54, 0x03, 0x7b, 0x39, 0xb4, 0x2d, 0x4b, 0xb8, 0x61, 0x46, 0x48, 0xb5, + 0xe6, 0xe5, 0xed, 0xf3, 0x73, 0xf3, 0xf6, 0x8d, 0x5f, 0x80, 0x6a, 0xc2, 0xb9, 0xbc, 0x74, 0xd8, + 0x89, 0x8e, 0x65, 0xd3, 0x1d, 0xbb, 0x0d, 0x95, 0xb0, 0x56, 0x24, 0xa0, 0xb3, 0xad, 0x62, 0xc4, + 0x80, 0xc6, 0x3f, 0xc9, 0xa2, 0x25, 0x8b, 0x43, 0x9b, 0x76, 0x08, 0xb7, 0xa1, 0x18, 0x48, 0x53, + 0x4e, 0xc2, 0xa2, 0x87, 0x05, 0x37, 0x68, 0x97, 0x68, 0x76, 0x96, 0x0c, 0x4d, 0xcd, 0x3f, 0x82, + 0x9c, 0x34, 0x07, 0x3a, 0xa0, 0xfa, 0xc6, 0x62, 0x4c, 0x7a, 0xe6, 0x60, 0x67, 0xc9, 0x40, 0x3a, + 0xbe, 0x0b, 0xe5, 0xbe, 0x8e, 0x81, 0x69, 0xa5, 0xb8, 0xa0, 0xcf, 0x16, 0x46, 0xce, 0x76, 0x96, + 0x8c, 0x88, 0x03, 0xff, 0x26, 0xe4, 0xd1, 0xba, 0xd4, 0xb5, 0x21, 0x0b, 0xfa, 0xa2, 0xb8, 0x5d, + 0x76, 0x96, 0x0c, 0xa2, 0xdc, 0x28, 0x41, 0x81, 0x74, 0x70, 0xa3, 0x0e, 0x45, 0x35, 0xd6, 0xe9, + 0x99, 0x6b, 0xdc, 0x82, 0x5c, 0xcf, 0x1c, 0xa0, 0x85, 0x6f, 0x5b, 0x81, 0x0e, 0xa9, 0xe0, 0xcf, + 0xc6, 0xab, 0x71, 0x3c, 0x2f, 0x19, 0x2a, 0xce, 0xa4, 0x42, 0xc5, 0x8d, 0x22, 0xe4, 0xf1, 0x8d, + 0x8d, 0xdb, 0x57, 0x79, 0x0b, 0x8d, 0xdf, 0xca, 0xa1, 0x63, 0x21, 0xc5, 0xf9, 0xdc, 0x30, 0xf8, + 0x27, 0x50, 0x19, 0xfb, 0x5e, 0x5f, 0x04, 0x81, 0xe7, 0x6b, 0xe3, 0xe8, 0xcd, 0x17, 0xa7, 0xa8, + 0xd7, 0x0f, 0x43, 0x1a, 0x23, 0x26, 0x6f, 0xfe, 0xab, 0x2c, 0x54, 0xa2, 0x07, 0xca, 0x9f, 0x91, + 0xe2, 0x5c, 0x85, 0x3c, 0xf7, 0x84, 0x3f, 0x32, 0x6d, 0x4b, 0x69, 0x8f, 0xcd, 0xa1, 0x19, 0x1a, + 0xb9, 0x9f, 0x7a, 0x13, 0x39, 0x39, 0x16, 0x2a, 0xd4, 0xf5, 0xd4, 0x1e, 0x09, 0x8f, 0xe5, 0x29, + 0xc9, 0x84, 0x82, 0xdd, 0x77, 0xbc, 0x89, 0xc5, 0x0a, 0xd8, 0x7e, 0x44, 0xc7, 0xdb, 0x9e, 0x39, + 0x0e, 0x94, 0xce, 0xdc, 0xb3, 0x7d, 0x8f, 0x95, 0x90, 0x68, 0xdb, 0x1e, 0x8c, 0x4c, 0x56, 0x46, + 0x66, 0xbd, 0xe7, 0xb6, 0x44, 0x25, 0x5c, 0x41, 0x33, 0xf5, 0x60, 0x2c, 0xdc, 0xae, 0xf4, 0x85, + 0x90, 0x7b, 0xe6, 0x58, 0xc5, 0x3e, 0x0d, 0x61, 0x59, 0xb6, 0x54, 0xfa, 0x73, 0xdb, 0xec, 0x8b, + 0x63, 0xcf, 0x3b, 0x65, 0xcb, 0xa8, 0x68, 0x3a, 0x6e, 0x20, 0xcd, 0x81, 0x6f, 0x8e, 0x94, 0x0e, + 0xed, 0x09, 0x47, 0x50, 0x6b, 0x85, 0xde, 0x6d, 0xcb, 0xe1, 0xe4, 0xf8, 0x11, 0xfa, 0x7d, 0xab, + 0x2a, 0x1f, 0x65, 0x89, 0xb1, 0x40, 0x1d, 0xba, 0x0c, 0xe5, 0x0d, 0xdb, 0xb1, 0x8f, 0x6d, 0xc7, + 0x66, 0x6b, 0x88, 0xda, 0x3e, 0xef, 0x9b, 0x8e, 0x6d, 0xf9, 0xe6, 0x73, 0xc6, 0xb1, 0x73, 0x8f, + 0x7d, 0xef, 0xd4, 0x66, 0xd7, 0x10, 0x91, 0xdc, 0xc0, 0x33, 0xfb, 0x7b, 0xec, 0x3a, 0xe5, 0xd4, + 0x4e, 0x85, 0xec, 0x0f, 0x4f, 0xcc, 0x63, 0x76, 0x23, 0x0e, 0xfd, 0xdd, 0x6c, 0xac, 0xc1, 0xea, + 0x54, 0xf6, 0xbe, 0x51, 0xd2, 0xde, 0x67, 0xa3, 0x06, 0xd5, 0x44, 0x5a, 0xb5, 0xf1, 0x1a, 0x94, + 0xc3, 0xa4, 0x2b, 0x7a, 0xf3, 0x76, 0xa0, 0xc2, 0xc5, 0x5a, 0x48, 0xa2, 0x76, 0xe3, 0xdf, 0x67, + 0xa0, 0xa8, 0x32, 0xde, 0x7c, 0x23, 0xaa, 0x50, 0xc9, 0x2c, 0x90, 0xe5, 0x54, 0x44, 0x3a, 0x47, + 0x1c, 0x95, 0xa9, 0x5c, 0x87, 0x82, 0x43, 0x6e, 0xbb, 0x56, 0x5f, 0xd4, 0x48, 0x68, 0x9b, 0x5c, + 0x4a, 0xdb, 0xdc, 0x86, 0x8a, 0x39, 0x91, 0x1e, 0x25, 0xf3, 0x74, 0xa6, 0x23, 0x06, 0x34, 0x5b, + 0x51, 0xd6, 0x3a, 0x0c, 0x60, 0x92, 0xcd, 0xd8, 0xf3, 0x85, 0x50, 0xc1, 0x49, 0xf2, 0xb5, 0xb3, + 0x74, 0x92, 0x78, 0xa3, 0xb1, 0xd9, 0x97, 0x04, 0xa0, 0x33, 0x16, 0x55, 0x2d, 0xcb, 0xe3, 0x1e, + 0xd8, 0x1c, 0x9a, 0xb2, 0x79, 0x02, 0xe5, 0x43, 0x2f, 0x98, 0x3e, 0xb1, 0x4b, 0x90, 0xeb, 0x79, + 0x63, 0x65, 0x7f, 0x6e, 0x78, 0x92, 0xec, 0x4f, 0x75, 0x40, 0x9f, 0x48, 0x25, 0x72, 0x86, 0x3d, + 0x18, 0x4a, 0xe5, 0xa7, 0x77, 0x5c, 0x57, 0xf8, 0xac, 0x80, 0x2b, 0x6c, 0x88, 0x31, 0xda, 0xbc, + 0xac, 0x88, 0x6b, 0x4a, 0xf0, 0x6d, 0xdb, 0x0f, 0x24, 0x2b, 0x35, 0x3b, 0x78, 0xd6, 0xda, 0x03, + 0x3a, 0x22, 0xe9, 0x07, 0xb1, 0x5a, 0xc2, 0x2e, 0x52, 0x73, 0x53, 0xb8, 0x28, 0x81, 0xe4, 0x5b, + 0x29, 0xc7, 0x90, 0x5e, 0x90, 0xc5, 0xf3, 0x8d, 0xda, 0x9f, 0x4c, 0x02, 0x69, 0x9f, 0x5c, 0xb0, + 0x5c, 0xf3, 0x19, 0xd4, 0x52, 0xc5, 0x50, 0xfc, 0x3a, 0xb0, 0x14, 0x00, 0xbb, 0xbe, 0xc4, 0x6f, + 0xc1, 0xb5, 0x14, 0x74, 0xcf, 0xb6, 0x2c, 0x8a, 0x18, 0x4f, 0x3f, 0x08, 0x07, 0xb8, 0x51, 0x81, + 0x52, 0x5f, 0xad, 0x61, 0xf3, 0x10, 0x6a, 0xb4, 0xa8, 0x7b, 0x42, 0x9a, 0x07, 0xae, 0x73, 0xf1, + 0x27, 0xae, 0x58, 0x6b, 0x7e, 0x59, 0xbb, 0x5f, 0xa8, 0x4d, 0x4e, 0x7c, 0x6f, 0x44, 0xbc, 0x0a, + 0x06, 0xfd, 0x46, 0xee, 0xd2, 0xd3, 0x92, 0x91, 0x95, 0x5e, 0xf3, 0xbf, 0x54, 0xa1, 0xd4, 0xea, + 0xf7, 0xd1, 0x61, 0x9c, 0x79, 0xf3, 0x7b, 0x50, 0xec, 0x7b, 0xee, 0x89, 0x3d, 0xd0, 0xda, 0x7a, + 0xda, 0x6e, 0xd4, 0x74, 0x28, 0x8e, 0x27, 0xf6, 0xc0, 0xd0, 0xc8, 0x48, 0xa6, 0x4f, 0x9b, 0xc2, + 0x95, 0x64, 0x4a, 0xe5, 0x46, 0x87, 0xcb, 0x03, 0xc8, 0xdb, 0xee, 0x89, 0xa7, 0xcb, 0x4b, 0xbf, + 0x70, 0x09, 0x11, 0xd5, 0x58, 0x12, 0x62, 0xe3, 0x3f, 0x66, 0xa0, 0xa8, 0x5e, 0xad, 0xe2, 0x45, + 0xb8, 0xd5, 0x42, 0x45, 0xaf, 0xf7, 0xd8, 0x14, 0x14, 0x4d, 0x5a, 0x0d, 0x11, 0xc7, 0x93, 0x81, + 0x8e, 0xcc, 0x24, 0x41, 0xfc, 0x03, 0xb8, 0xa5, 0x9a, 0x87, 0xbe, 0xf0, 0x85, 0x23, 0xcc, 0x40, + 0x6c, 0x0e, 0x4d, 0xd7, 0x15, 0x8e, 0x3e, 0xf6, 0x2f, 0x7b, 0xcc, 0x9b, 0xb0, 0xac, 0x1e, 0x75, + 0xc7, 0x66, 0x5f, 0x04, 0x7a, 0x2f, 0xa5, 0x60, 0xfc, 0x2b, 0x50, 0xa0, 0xea, 0xdb, 0xba, 0x75, + 0xf5, 0x52, 0x2a, 0xac, 0x86, 0x17, 0x9d, 0x4b, 0x2d, 0x00, 0x35, 0x4d, 0xe8, 0x92, 0x69, 0xdd, + 0xf0, 0xb3, 0x57, 0xce, 0x2b, 0x79, 0x87, 0x09, 0x22, 0xec, 0x9f, 0x25, 0x1c, 0x41, 0x65, 0x92, + 0x78, 0x6e, 0x66, 0x29, 0x3f, 0x93, 0x82, 0x35, 0xfe, 0x43, 0x1e, 0xf2, 0x38, 0xc3, 0x88, 0x3c, + 0xf4, 0x46, 0x22, 0x8a, 0x52, 0x2b, 0x43, 0x24, 0x05, 0x43, 0xc3, 0xc7, 0x54, 0x85, 0x02, 0x11, + 0x9a, 0x52, 0x2d, 0xd3, 0x60, 0xc4, 0x1c, 0xfb, 0xde, 0x89, 0xed, 0xc4, 0x98, 0xda, 0x44, 0x9a, + 0x02, 0xf3, 0xaf, 0xc2, 0xcd, 0x91, 0xe9, 0x9f, 0x0a, 0x49, 0xbb, 0xfb, 0x99, 0xe7, 0x9f, 0x06, + 0x38, 0x73, 0x1d, 0x4b, 0x87, 0x37, 0x2f, 0x79, 0xca, 0xdf, 0x84, 0xb5, 0xe7, 0x61, 0x33, 0x7a, + 0x87, 0x0a, 0x30, 0xce, 0x3e, 0x40, 0x65, 0x6c, 0x89, 0x33, 0x9b, 0xf8, 0x96, 0x55, 0x0d, 0x6e, + 0xd8, 0x46, 0x51, 0x32, 0xd5, 0x44, 0x76, 0xf5, 0x9b, 0x75, 0x9e, 0x2a, 0x0d, 0x45, 0xbd, 0xa9, + 0x6a, 0x93, 0x82, 0x8e, 0x45, 0xf1, 0xd9, 0x8a, 0x11, 0x03, 0x50, 0xd0, 0xe8, 0x95, 0x4f, 0x95, + 0xca, 0xad, 0x29, 0x07, 0x35, 0x01, 0x42, 0x0c, 0x29, 0xfa, 0xc3, 0xf0, 0x25, 0x2a, 0x78, 0x9a, + 0x04, 0xf1, 0x3b, 0x00, 0x03, 0x53, 0x8a, 0xe7, 0xe6, 0xc5, 0x13, 0xdf, 0xa9, 0x0b, 0x95, 0x70, + 0x89, 0x21, 0xe8, 0xe2, 0x3a, 0x5e, 0xdf, 0x74, 0xba, 0xd2, 0xf3, 0xcd, 0x81, 0x38, 0x34, 0xe5, + 0xb0, 0x3e, 0x50, 0x2e, 0xee, 0x34, 0x1c, 0x47, 0x2c, 0xed, 0x91, 0xf8, 0xcc, 0x73, 0x45, 0x7d, + 0xa8, 0x46, 0x1c, 0xb6, 0xb1, 0x27, 0xa6, 0x6b, 0x3a, 0x17, 0xd2, 0xee, 0xe3, 0x58, 0x6c, 0xd5, + 0x93, 0x04, 0x88, 0x82, 0x0a, 0x42, 0xe2, 0x3c, 0x76, 0xac, 0xfa, 0x77, 0xd4, 0x58, 0x23, 0x00, + 0xae, 0xae, 0x90, 0x43, 0xe1, 0x8b, 0xc9, 0xa8, 0x65, 0x59, 0xbe, 0x08, 0x82, 0xfa, 0xa9, 0x5a, + 0xdd, 0x29, 0x70, 0xe3, 0xb7, 0xb2, 0x94, 0x0f, 0x1b, 0x36, 0xfe, 0x5b, 0x06, 0x4a, 0xad, 0xf1, + 0x98, 0x44, 0xad, 0x0e, 0x25, 0x73, 0x3c, 0xde, 0x89, 0x33, 0x98, 0x61, 0x53, 0x3f, 0xd9, 0x8f, + 0xf3, 0x98, 0x61, 0x13, 0x0f, 0x33, 0x73, 0x3c, 0x8e, 0xeb, 0x87, 0x75, 0x0b, 0x3b, 0xda, 0x57, + 0xb5, 0xdb, 0x2d, 0xa9, 0xf3, 0x92, 0x31, 0x00, 0x27, 0x41, 0x9c, 0x8f, 0x6d, 0x5f, 0x44, 0xd9, + 0xc9, 0xa8, 0x4d, 0x45, 0x59, 0x7d, 0x6f, 0x1c, 0xa6, 0x1d, 0xdf, 0xb8, 0x64, 0x6f, 0x61, 0xef, + 0xd7, 0x77, 0x71, 0x76, 0x5b, 0x63, 0xbb, 0x8b, 0x04, 0x86, 0xa2, 0x53, 0x07, 0x7c, 0x8b, 0xd2, + 0x61, 0x61, 0x5e, 0x20, 0x6c, 0x37, 0xdf, 0x81, 0x5a, 0x8a, 0x06, 0x0f, 0x30, 0x0a, 0xa4, 0x53, + 0x38, 0xa5, 0x0a, 0xa5, 0x4f, 0x02, 0xcf, 0x6d, 0x1d, 0x76, 0xd4, 0x91, 0xba, 0x3d, 0x71, 0x1c, + 0x96, 0x6d, 0x1e, 0x00, 0xc4, 0x3b, 0x19, 0x8f, 0x47, 0xc5, 0x8c, 0x2d, 0xa9, 0xe0, 0x9d, 0x6b, + 0xd9, 0xee, 0x60, 0x4b, 0x6f, 0x5e, 0x96, 0x41, 0x20, 0x05, 0x65, 0x84, 0x15, 0x01, 0xc9, 0x7c, + 0xa3, 0x96, 0xb0, 0x58, 0xae, 0xf9, 0x7f, 0x32, 0x50, 0x4d, 0x94, 0x96, 0xfc, 0x29, 0x96, 0xc3, + 0xe0, 0xd8, 0xd1, 0x3c, 0x42, 0x39, 0x55, 0x0b, 0x12, 0xb5, 0x51, 0x8a, 0x75, 0xe5, 0x0b, 0x3e, + 0x55, 0x21, 0x98, 0x04, 0xe4, 0x73, 0x95, 0xc2, 0x34, 0x1f, 0xea, 0x38, 0x56, 0x15, 0x4a, 0x4f, + 0xdc, 0x53, 0xd7, 0x7b, 0xee, 0x2a, 0xbb, 0x84, 0xea, 0x9b, 0x52, 0x99, 0xda, 0xb0, 0x04, 0x29, + 0xd7, 0xfc, 0xe7, 0xf9, 0xa9, 0x52, 0xc0, 0x36, 0x14, 0x95, 0xf3, 0x44, 0x76, 0xfd, 0x6c, 0xed, + 0x56, 0x12, 0x59, 0x67, 0x05, 0x13, 0x20, 0x43, 0x13, 0xa3, 0x57, 0x13, 0x15, 0xca, 0x66, 0xe7, + 0x66, 0x2f, 0x53, 0x8c, 0xc2, 0xb3, 0x28, 0x55, 0x2b, 0x1e, 0x71, 0x68, 0xfc, 0xf5, 0x0c, 0x5c, + 0x9f, 0x87, 0x92, 0xac, 0xa8, 0xcf, 0xa4, 0x2b, 0xea, 0xbb, 0x53, 0x15, 0xea, 0x59, 0x1a, 0xcd, + 0x83, 0x97, 0xec, 0x44, 0xba, 0x5e, 0xbd, 0xf9, 0x7b, 0x19, 0x58, 0x9b, 0x19, 0x73, 0xc2, 0x6e, + 0x03, 0x28, 0x2a, 0xc9, 0x52, 0x05, 0x64, 0x51, 0x49, 0x8f, 0x4a, 0xb5, 0x90, 0x45, 0x13, 0xa8, + 0x1a, 0x09, 0x5d, 0x93, 0xaf, 0x9c, 0x06, 0x5c, 0x35, 0x3c, 0x30, 0x07, 0x42, 0x85, 0xa5, 0x95, + 0x71, 0xa9, 0x21, 0x45, 0x65, 0xd8, 0xab, 0xbc, 0x11, 0x2b, 0x51, 0x61, 0xda, 0x64, 0xec, 0xd8, + 0x7d, 0x6c, 0x96, 0x79, 0x03, 0x6e, 0xaa, 0x8b, 0x19, 0xda, 0x89, 0x3e, 0xe9, 0x0d, 0x6d, 0xda, + 0x1c, 0xac, 0x82, 0xef, 0x39, 0x9c, 0x1c, 0x3b, 0x76, 0x30, 0x64, 0xd0, 0x34, 0xe0, 0xda, 0x9c, + 0x01, 0x52, 0x97, 0x9f, 0xea, 0xee, 0xaf, 0x00, 0x6c, 0x3d, 0x0d, 0x3b, 0xcd, 0x32, 0x9c, 0xc3, + 0xca, 0xd6, 0xd3, 0x24, 0x77, 0xbd, 0x79, 0x9e, 0xa2, 0xb6, 0x0e, 0x58, 0xae, 0xf9, 0x4b, 0x99, + 0xb0, 0x72, 0xa4, 0xf1, 0x17, 0xa1, 0xa6, 0x3a, 0x7c, 0x68, 0x5e, 0x38, 0x9e, 0x69, 0xf1, 0x36, + 0xac, 0x04, 0xd1, 0xd5, 0xa1, 0xc4, 0x01, 0x3d, 0x6d, 0xf8, 0x74, 0x53, 0x48, 0xc6, 0x14, 0x51, + 0xe8, 0x18, 0x66, 0xe3, 0x34, 0x12, 0x27, 0x17, 0xd7, 0xa4, 0x2d, 0xb7, 0x4c, 0x4e, 0xab, 0xd9, + 0xfc, 0x0a, 0xac, 0x75, 0xe3, 0xc3, 0x4c, 0x79, 0x10, 0x28, 0x1c, 0xea, 0x24, 0xdc, 0x0a, 0x85, + 0x43, 0x37, 0x9b, 0xff, 0xa8, 0x04, 0x10, 0xa7, 0xd6, 0xe6, 0xec, 0xf9, 0x79, 0x95, 0x22, 0x33, + 0x89, 0xee, 0xdc, 0x4b, 0x27, 0xba, 0x3f, 0x88, 0x1c, 0x19, 0x15, 0x4e, 0x9f, 0x2e, 0x97, 0x8f, + 0xfb, 0x34, 0xed, 0xbe, 0xa4, 0x0a, 0xa9, 0x0a, 0xd3, 0x85, 0x54, 0x77, 0x67, 0xab, 0x2e, 0xa7, + 0x94, 0x51, 0x1c, 0xa7, 0x29, 0xa5, 0xe2, 0x34, 0x0d, 0x28, 0xfb, 0xc2, 0xb4, 0x3c, 0xd7, 0xb9, + 0x08, 0xf3, 0xa9, 0x61, 0x9b, 0xbf, 0x03, 0x05, 0x49, 0xb7, 0x9f, 0xca, 0xb4, 0x77, 0x5e, 0xb0, + 0x70, 0x0a, 0x17, 0x35, 0x9b, 0x1d, 0xe8, 0x52, 0x49, 0x65, 0x25, 0x94, 0x8d, 0x04, 0x84, 0xaf, + 0x03, 0xb7, 0xd1, 0x69, 0x75, 0x1c, 0x61, 0x6d, 0x5c, 0x6c, 0xa9, 0x34, 0x27, 0xd9, 0x31, 0x65, + 0x63, 0xce, 0x93, 0x70, 0xfd, 0x97, 0xe3, 0xf5, 0xa7, 0x2e, 0x9f, 0xd9, 0x01, 0x8e, 0xb4, 0xa6, + 0x0e, 0xac, 0xb0, 0x8d, 0x96, 0x52, 0xb8, 0x61, 0xd5, 0x5c, 0x92, 0xf4, 0xc6, 0xb5, 0x02, 0x97, + 0x3c, 0x0d, 0xa7, 0x57, 0x05, 0xaa, 0x56, 0xd5, 0x11, 0x19, 0x01, 0x48, 0x93, 0xf7, 0x3d, 0x97, + 0xce, 0x5c, 0xa6, 0x35, 0xb9, 0x6e, 0xe3, 0x78, 0xc7, 0xce, 0xc4, 0x37, 0x1d, 0x7a, 0xba, 0xa6, + 0x34, 0x79, 0x0c, 0x69, 0xfe, 0x7e, 0x36, 0x72, 0x16, 0x2b, 0x50, 0x38, 0x36, 0x03, 0xbb, 0xaf, + 0x4e, 0x37, 0x6d, 0xe4, 0xa9, 0xd3, 0x4d, 0x7a, 0x96, 0xc7, 0xb2, 0xe8, 0xf7, 0x05, 0x42, 0xa7, + 0xaf, 0xe2, 0xbb, 0x66, 0x2c, 0x8f, 0x2a, 0x20, 0x94, 0x24, 0x55, 0x4b, 0x45, 0xa4, 0x14, 0x8c, + 0xb4, 0xa2, 0x2a, 0x55, 0x0a, 0x2b, 0xd0, 0x11, 0xc3, 0xca, 0x88, 0xe3, 0x7a, 0x52, 0xa8, 0x50, + 0x2c, 0xc9, 0x3d, 0x03, 0x64, 0x13, 0x5e, 0x9e, 0x60, 0x55, 0x74, 0xc4, 0x42, 0xa6, 0x2a, 0x7e, + 0x1a, 0x90, 0x9b, 0xba, 0x8c, 0xfb, 0x3e, 0xfd, 0x80, 0xd5, 0xb0, 0x47, 0xf1, 0x15, 0x36, 0xb6, + 0x82, 0x5c, 0x4d, 0xaa, 0xf0, 0x59, 0xc5, 0x9f, 0x67, 0x54, 0xf7, 0xc3, 0xf0, 0xad, 0x16, 0xea, + 0xa5, 0x35, 0xec, 0x59, 0x64, 0xd8, 0x31, 0x8e, 0x7e, 0xe6, 0xd8, 0x44, 0xa7, 0xcf, 0x1e, 0x9b, + 0xae, 0x64, 0xd7, 0x70, 0xa8, 0x63, 0xeb, 0x84, 0x5d, 0x47, 0x92, 0xfe, 0xd0, 0x94, 0xec, 0x06, + 0xe2, 0xe0, 0xaf, 0x2d, 0xe1, 0xa3, 0xa4, 0xb0, 0x9b, 0x88, 0x23, 0xcd, 0x01, 0xbb, 0xd5, 0xfc, + 0xd5, 0xb8, 0x4e, 0xfc, 0xad, 0xc8, 0x1d, 0x5b, 0x64, 0xfb, 0xa0, 0xc3, 0x36, 0x6f, 0x2f, 0xb7, + 0x61, 0xcd, 0x17, 0xdf, 0x9d, 0xd8, 0xa9, 0xdb, 0x13, 0xb9, 0xab, 0xcb, 0x73, 0x66, 0x29, 0x9a, + 0x67, 0xb0, 0x16, 0x36, 0x9e, 0xd9, 0x72, 0x48, 0x71, 0x33, 0xfe, 0x4e, 0xe2, 0x7a, 0x47, 0x66, + 0xee, 0xb5, 0xb8, 0x88, 0x65, 0x7c, 0x9d, 0x23, 0xca, 0x8b, 0x64, 0x17, 0xc8, 0x8b, 0x34, 0xff, + 0x77, 0x32, 0xd1, 0xae, 0x1c, 0x54, 0x2b, 0x72, 0x50, 0x67, 0x13, 0xef, 0x71, 0xaa, 0x23, 0xfb, + 0x32, 0xa9, 0x8e, 0x79, 0xc5, 0x2e, 0x1f, 0xa2, 0xbf, 0x44, 0x3b, 0xf3, 0xe9, 0x02, 0x69, 0x9c, + 0x14, 0x2e, 0xdf, 0xa0, 0x34, 0xba, 0xd9, 0x55, 0x95, 0x58, 0x85, 0xb9, 0x97, 0xad, 0x92, 0xf9, + 0x72, 0x8d, 0x69, 0x24, 0xa8, 0x12, 0x7a, 0xac, 0x38, 0x4f, 0x8f, 0x1d, 0xa0, 0x1e, 0x2b, 0xc5, + 0x7a, 0x8c, 0x62, 0x07, 0x94, 0xf5, 0x52, 0xbf, 0x43, 0xf6, 0xb4, 0xc7, 0xcb, 0xc6, 0x0c, 0x1c, + 0x8d, 0xbd, 0xd1, 0xc4, 0x91, 0xb6, 0xb6, 0x56, 0x55, 0x63, 0xfa, 0x36, 0x68, 0x65, 0xf6, 0x36, + 0xe8, 0xc7, 0x00, 0x81, 0xc0, 0xdd, 0xb1, 0x65, 0xf7, 0xa5, 0xae, 0xd7, 0xba, 0x73, 0xd9, 0xd8, + 0x74, 0x3a, 0x2a, 0x41, 0x81, 0xfd, 0x1f, 0x99, 0xe7, 0x94, 0xa2, 0xd6, 0x85, 0x25, 0x51, 0x7b, + 0x5a, 0xbb, 0xaf, 0xcc, 0x6a, 0xf7, 0x77, 0x42, 0x3b, 0xfd, 0xfa, 0x95, 0xeb, 0xbb, 0x9e, 0xb2, + 0xcd, 0xeb, 0x50, 0x22, 0x2f, 0xc0, 0xf3, 0xe9, 0x2a, 0x53, 0xc5, 0x08, 0x9b, 0x29, 0x0d, 0x7b, + 0x33, 0xad, 0x61, 0x1b, 0x16, 0x14, 0x75, 0xb2, 0x65, 0x3a, 0x30, 0x12, 0x86, 0x69, 0xb3, 0x89, + 0x30, 0x6d, 0x54, 0x15, 0x9c, 0x4b, 0x56, 0x05, 0x4f, 0xdd, 0x76, 0x2c, 0xcc, 0xdc, 0x76, 0x6c, + 0x7e, 0x06, 0x05, 0xe5, 0x13, 0x40, 0x68, 0x8e, 0x2a, 0x53, 0x16, 0x07, 0xc5, 0x32, 0xfc, 0x3a, + 0xb0, 0x40, 0x90, 0xad, 0x23, 0xba, 0xe6, 0x48, 0x90, 0x92, 0xcc, 0xf2, 0x3a, 0x5c, 0x57, 0xb8, + 0x41, 0xfa, 0x09, 0x19, 0x5c, 0x8e, 0x7d, 0xec, 0x9b, 0xfe, 0x05, 0xcb, 0x37, 0x3f, 0xa6, 0x52, + 0x87, 0x50, 0xa0, 0xaa, 0xd1, 0xed, 0x52, 0xa5, 0x96, 0x2d, 0xad, 0x7d, 0xa8, 0x52, 0x46, 0x7b, + 0xb7, 0xaa, 0xce, 0x90, 0xdc, 0x47, 0x8a, 0x7f, 0x2d, 0x27, 0xcf, 0xf8, 0x3f, 0xb5, 0xfd, 0xd6, + 0xdc, 0x48, 0x58, 0x8c, 0xe9, 0xc2, 0xc1, 0xcc, 0xa2, 0x85, 0x83, 0xcd, 0xc7, 0xb0, 0x6a, 0xa4, + 0x75, 0x3a, 0xff, 0x00, 0x4a, 0xde, 0x38, 0xc9, 0xe7, 0x45, 0x72, 0x19, 0xa2, 0x37, 0x7f, 0x37, + 0x03, 0xcb, 0x1d, 0x57, 0x0a, 0xdf, 0x35, 0x9d, 0x6d, 0xc7, 0x1c, 0xf0, 0xf7, 0x43, 0x2d, 0x35, + 0x3f, 0xd6, 0x92, 0xc4, 0x4d, 0x2b, 0x2c, 0x47, 0x27, 0x15, 0xf8, 0x0d, 0x58, 0x13, 0x96, 0x2d, + 0x3d, 0x5f, 0xd9, 0xc9, 0x61, 0x7d, 0xe7, 0x75, 0x60, 0x0a, 0xdc, 0xa5, 0x2d, 0xd1, 0x53, 0xcb, + 0x5c, 0x87, 0xeb, 0x29, 0x68, 0x68, 0x04, 0x67, 0xf9, 0x6d, 0xa8, 0xc7, 0xa7, 0xd1, 0x96, 0xe7, + 0xca, 0x8e, 0x6b, 0x89, 0x73, 0x32, 0xb2, 0x58, 0xae, 0xf9, 0x2b, 0x91, 0x79, 0xf7, 0x54, 0x57, + 0x7f, 0xfa, 0x9e, 0x17, 0x5f, 0x2d, 0xd6, 0xad, 0xc4, 0x15, 0xf6, 0xec, 0x02, 0x57, 0xd8, 0x3f, + 0x8e, 0xaf, 0x21, 0xab, 0x83, 0xe2, 0xd5, 0xb9, 0xa7, 0x0f, 0x15, 0xad, 0x69, 0xeb, 0xbe, 0x2b, + 0x12, 0x77, 0x92, 0xdf, 0xd6, 0x2e, 0x5d, 0x7e, 0x11, 0x2b, 0x58, 0xd5, 0x6d, 0xbc, 0x37, 0x7d, + 0xf7, 0x65, 0xb1, 0xe2, 0xd1, 0x19, 0x43, 0x15, 0x5e, 0xda, 0x50, 0xfd, 0xc6, 0x94, 0xf7, 0x54, + 0x9e, 0x1b, 0x7e, 0xbc, 0xe2, 0x66, 0xef, 0x37, 0xa0, 0x34, 0xb4, 0x03, 0xe9, 0xf9, 0xea, 0xb6, + 0xf9, 0xec, 0xed, 0xb8, 0xc4, 0x6c, 0xed, 0x28, 0x44, 0xaa, 0xf4, 0x0b, 0xa9, 0xf8, 0xb7, 0x61, + 0x8d, 0x26, 0xfe, 0x30, 0xb6, 0x1a, 0x82, 0x7a, 0x75, 0x6e, 0x85, 0x65, 0x82, 0xd5, 0xc6, 0x14, + 0x89, 0x31, 0xcb, 0xa4, 0x31, 0x00, 0x88, 0xd7, 0x67, 0x46, 0x8b, 0x7d, 0x8e, 0xdb, 0xe6, 0x37, + 0xa1, 0x18, 0x4c, 0x8e, 0xe3, 0xec, 0xa3, 0x6e, 0x35, 0xce, 0xa1, 0x31, 0x63, 0x1d, 0x1c, 0x0a, + 0x5f, 0x75, 0xf7, 0xca, 0x2b, 0xef, 0x1f, 0x27, 0x17, 0x5e, 0x09, 0xe7, 0xdd, 0x4b, 0x56, 0x2f, + 0xe2, 0x9c, 0x90, 0x80, 0xc6, 0x7b, 0x50, 0x4d, 0x4c, 0x2a, 0x6a, 0xe6, 0x89, 0x6b, 0x79, 0x61, + 0xc8, 0x1b, 0x7f, 0xab, 0x2b, 0x7f, 0x56, 0x18, 0xf4, 0xa6, 0xdf, 0x0d, 0x03, 0xd8, 0xf4, 0x04, + 0x5e, 0xe1, 0x61, 0xbf, 0x0a, 0xb5, 0x84, 0x49, 0x17, 0x85, 0x43, 0xd3, 0xc0, 0xe6, 0x19, 0x7c, + 0x21, 0xc1, 0xee, 0x50, 0xf8, 0x23, 0x3b, 0xc0, 0x83, 0x44, 0x39, 0x8b, 0x64, 0x5a, 0x5b, 0xc2, + 0x95, 0xb6, 0x0c, 0x35, 0x68, 0xd4, 0xe6, 0x3f, 0x07, 0x85, 0xb1, 0xf0, 0x47, 0x81, 0xd6, 0xa2, + 0xd3, 0x12, 0x34, 0x97, 0x6d, 0x60, 0x28, 0x9a, 0xe6, 0x6f, 0x66, 0xa0, 0xbc, 0x27, 0xa4, 0x89, + 0xb6, 0x03, 0xdf, 0x9b, 0x7a, 0xcb, 0x6c, 0xc6, 0x3c, 0x44, 0x5d, 0xd7, 0xee, 0xeb, 0x7a, 0x47, + 0xe3, 0xeb, 0xf6, 0xce, 0x52, 0xdc, 0xb1, 0xc6, 0x06, 0x94, 0x34, 0xb8, 0xf1, 0x3e, 0xac, 0x4e, + 0x61, 0xd2, 0xbc, 0x28, 0xdb, 0xbe, 0x7b, 0x31, 0x0a, 0xcb, 0xba, 0x96, 0x8d, 0x34, 0x70, 0xa3, + 0x02, 0xa5, 0xb1, 0x22, 0x68, 0xfe, 0xfe, 0x0d, 0x2a, 0x26, 0xb2, 0x4f, 0xd0, 0xa7, 0x9f, 0x77, + 0xb2, 0xde, 0x01, 0x50, 0xf1, 0x3a, 0x2a, 0x39, 0x51, 0x21, 0xea, 0x04, 0x84, 0x7f, 0x18, 0xe5, + 0x16, 0xf2, 0x73, 0x8d, 0xaa, 0x24, 0xf3, 0xe9, 0x04, 0x43, 0x1d, 0x4a, 0x76, 0x40, 0x71, 0x38, + 0x5d, 0xa6, 0x15, 0x36, 0xf9, 0xd7, 0xa1, 0x68, 0x8f, 0xc6, 0x9e, 0x2f, 0x75, 0xf2, 0xe1, 0x4a, + 0xae, 0x1d, 0xc2, 0xdc, 0x59, 0x32, 0x34, 0x0d, 0x52, 0x8b, 0x73, 0xa2, 0x2e, 0xbf, 0x98, 0xba, + 0x7d, 0x1e, 0x52, 0x2b, 0x1a, 0xfe, 0x2d, 0xa8, 0x0d, 0x54, 0x95, 0xaa, 0x62, 0xac, 0x95, 0xc8, + 0x1b, 0x57, 0x31, 0x79, 0x94, 0x24, 0xd8, 0x59, 0x32, 0xd2, 0x1c, 0x90, 0x25, 0x1a, 0xf0, 0x22, + 0x90, 0x3d, 0xef, 0x13, 0xcf, 0x76, 0xc9, 0xdd, 0x7d, 0x01, 0x4b, 0x23, 0x49, 0x80, 0x2c, 0x53, + 0x1c, 0xf8, 0x57, 0xd1, 0xe2, 0x09, 0xa4, 0xbe, 0xf0, 0x7f, 0xf7, 0x2a, 0x4e, 0x3d, 0x11, 0xe8, + 0xab, 0xfa, 0x81, 0xe4, 0xe7, 0xd0, 0x48, 0x6c, 0x12, 0xfd, 0x92, 0xd6, 0x78, 0xec, 0x7b, 0xe8, + 0x33, 0xd7, 0x88, 0xdb, 0x57, 0xaf, 0xe2, 0x76, 0x78, 0x29, 0xf5, 0xce, 0x92, 0x71, 0x05, 0x6f, + 0xde, 0x43, 0xcf, 0x4e, 0x0f, 0x61, 0x57, 0x98, 0x67, 0xe1, 0xe7, 0x02, 0xee, 0x2f, 0x34, 0x0b, + 0x44, 0xb1, 0xb3, 0x64, 0x4c, 0xf1, 0xe0, 0xbf, 0x00, 0x6b, 0xa9, 0x77, 0xd2, 0x0d, 0x61, 0xf5, + 0x31, 0x81, 0xaf, 0x2c, 0x3c, 0x0c, 0x24, 0xda, 0x59, 0x32, 0x66, 0x39, 0xf1, 0x09, 0xbc, 0x32, + 0x3b, 0xa4, 0x2d, 0xd1, 0x77, 0x6c, 0x57, 0xe8, 0xef, 0x0e, 0xbc, 0xf7, 0x72, 0xb3, 0xa5, 0x89, + 0x77, 0x96, 0x8c, 0xcb, 0x39, 0xf3, 0xbf, 0x0c, 0xb7, 0xc7, 0x73, 0x55, 0x8c, 0x52, 0x5d, 0xfa, + 0xb3, 0x05, 0x1f, 0x2c, 0xf8, 0xe6, 0x19, 0xfa, 0x9d, 0x25, 0xe3, 0x4a, 0xfe, 0x68, 0x3b, 0x93, + 0x07, 0xad, 0x8b, 0xee, 0x55, 0x83, 0x32, 0xd3, 0x7d, 0x67, 0x47, 0x98, 0x56, 0x94, 0x1f, 0x89, + 0x01, 0x8d, 0xff, 0x9e, 0x81, 0xa2, 0x96, 0xf7, 0xdb, 0x51, 0x85, 0x44, 0xa4, 0xba, 0x63, 0x00, + 0xff, 0x08, 0x2a, 0xc2, 0xf7, 0x3d, 0x7f, 0xd3, 0xb3, 0xc2, 0xe2, 0xd2, 0xe9, 0x28, 0xb3, 0xe2, + 0xb3, 0xde, 0x0e, 0xd1, 0x8c, 0x98, 0x82, 0x7f, 0x08, 0xa0, 0xf6, 0x79, 0x2f, 0xbe, 0x3b, 0xd5, + 0x98, 0x4f, 0xaf, 0x52, 0x6e, 0x31, 0x76, 0x1c, 0x96, 0x0b, 0xf3, 0x5d, 0x61, 0x33, 0x72, 0x38, + 0x0b, 0x09, 0x87, 0xf3, 0xb6, 0x8e, 0x23, 0x50, 0x78, 0x45, 0xdf, 0x20, 0x8c, 0x00, 0x8d, 0x7f, + 0x9d, 0x81, 0xa2, 0x52, 0x1e, 0xbc, 0x3d, 0x3b, 0xa2, 0xd7, 0x5f, 0xac, 0x73, 0xd6, 0xa7, 0x47, + 0xf6, 0x75, 0x00, 0xa5, 0x83, 0x12, 0x23, 0xbb, 0x3d, 0xc5, 0x47, 0x93, 0x86, 0xe5, 0xdc, 0x31, + 0x7e, 0xf3, 0xa1, 0xba, 0xe5, 0x46, 0x21, 0xe1, 0x27, 0xbb, 0xbb, 0x6c, 0x89, 0xaf, 0x41, 0xed, + 0xc9, 0xfe, 0xe3, 0xfd, 0x83, 0x67, 0xfb, 0x47, 0x6d, 0xc3, 0x38, 0x30, 0x54, 0x64, 0x78, 0xa3, + 0xb5, 0x75, 0xd4, 0xd9, 0x3f, 0x7c, 0xd2, 0x63, 0xd9, 0xc6, 0x3f, 0xcd, 0x40, 0x2d, 0xa5, 0xbb, + 0xfe, 0x6c, 0x97, 0x2e, 0x31, 0xfd, 0xb9, 0xf9, 0xd3, 0x9f, 0xbf, 0x6c, 0xfa, 0x0b, 0xd3, 0xd3, + 0xff, 0xdb, 0x19, 0xa8, 0xa5, 0x74, 0x64, 0x92, 0x7b, 0x26, 0xcd, 0x3d, 0x79, 0xd2, 0x67, 0xa7, + 0x4e, 0xfa, 0x26, 0x2c, 0x87, 0xbf, 0xf7, 0xe3, 0x88, 0x43, 0x0a, 0x96, 0xc4, 0xa1, 0x6b, 0x26, + 0xf9, 0x34, 0x0e, 0x5d, 0x35, 0xb9, 0xba, 0xb7, 0x74, 0xad, 0x36, 0xa0, 0xaf, 0x0e, 0x34, 0x2e, + 0xd7, 0xa0, 0x57, 0x0c, 0xe1, 0x11, 0x54, 0xc7, 0xf1, 0x36, 0x7d, 0x39, 0xb3, 0x24, 0x49, 0xf9, + 0x82, 0x7e, 0xfe, 0x4e, 0x06, 0x56, 0xd2, 0x3a, 0xf7, 0xff, 0xeb, 0x69, 0xfd, 0xc7, 0x19, 0x58, + 0x9b, 0xd1, 0xe4, 0x57, 0x1a, 0x76, 0xd3, 0xfd, 0xca, 0x2e, 0xd0, 0xaf, 0xdc, 0x9c, 0x7e, 0x5d, + 0xae, 0x49, 0xae, 0xee, 0x71, 0x17, 0x5e, 0xb9, 0xf4, 0x4c, 0xb8, 0x62, 0xaa, 0x53, 0x4c, 0x73, + 0xd3, 0x4c, 0x7f, 0x23, 0x03, 0xb7, 0xaf, 0xd2, 0xf7, 0xff, 0xcf, 0xe5, 0x6a, 0xba, 0x87, 0xcd, + 0xf7, 0xa3, 0xc2, 0x89, 0x2a, 0x94, 0xf4, 0xd7, 0xbc, 0x74, 0xe1, 0xfa, 0xd0, 0x7b, 0xee, 0xaa, + 0x48, 0xb4, 0x21, 0x4c, 0xfd, 0xbd, 0x03, 0x43, 0x8c, 0x1d, 0x9b, 0x72, 0xa4, 0xb7, 0x00, 0x5a, + 0xe4, 0xd7, 0x85, 0xd7, 0x8a, 0x36, 0x77, 0x0f, 0xba, 0x6d, 0xb6, 0x94, 0x34, 0x62, 0x3f, 0x0b, + 0x15, 0x71, 0xf3, 0x10, 0x8a, 0xf1, 0x45, 0x8f, 0x3d, 0xd3, 0x3f, 0xb5, 0x54, 0x26, 0x72, 0x19, + 0xca, 0x87, 0xda, 0x85, 0x52, 0xaf, 0xfa, 0xa4, 0x7b, 0xb0, 0xaf, 0x82, 0xde, 0x5b, 0x07, 0x3d, + 0x75, 0x5d, 0xa4, 0xfb, 0xf4, 0x91, 0x4a, 0x89, 0x3d, 0x32, 0x5a, 0x87, 0x3b, 0x47, 0x84, 0x51, + 0x68, 0xfe, 0x7a, 0x3e, 0x3c, 0xd5, 0x9a, 0x86, 0xce, 0x71, 0x02, 0x14, 0x51, 0x9b, 0x7b, 0x9a, + 0x71, 0xf4, 0x1a, 0x2a, 0x71, 0x6e, 0x9f, 0xab, 0x38, 0x04, 0xcb, 0xf2, 0x22, 0x64, 0x0f, 0x8f, + 0x55, 0xe5, 0xd5, 0x8e, 0x1c, 0x39, 0xea, 0x3e, 0x6a, 0xef, 0x5c, 0xb2, 0x02, 0xfe, 0xd8, 0x0c, + 0xce, 0x58, 0xb1, 0xf9, 0xcf, 0x72, 0x50, 0x89, 0x54, 0xe5, 0xcb, 0xa8, 0x6e, 0xce, 0x61, 0xa5, + 0xb3, 0xdf, 0x6b, 0x1b, 0xfb, 0xad, 0x5d, 0x8d, 0x92, 0xe3, 0xd7, 0x60, 0x75, 0xbb, 0xb3, 0xdb, + 0x3e, 0xda, 0x3d, 0x68, 0x6d, 0x69, 0x60, 0x99, 0xdf, 0x04, 0xde, 0xd9, 0x3b, 0x3c, 0x30, 0x7a, + 0x47, 0x9d, 0xee, 0xd1, 0x66, 0x6b, 0x7f, 0xb3, 0xbd, 0xdb, 0xde, 0x62, 0x45, 0xfe, 0x2a, 0xdc, + 0xdd, 0x3f, 0xe8, 0x75, 0x0e, 0xf6, 0x8f, 0xf6, 0x0f, 0x8e, 0x0e, 0x36, 0x3e, 0x69, 0x6f, 0xf6, + 0xba, 0x47, 0x9d, 0xfd, 0x23, 0xe4, 0xfa, 0xc8, 0x68, 0xe1, 0x13, 0x56, 0xe0, 0x77, 0xe1, 0xb6, + 0xc6, 0xea, 0xb6, 0x8d, 0xa7, 0x6d, 0x03, 0x99, 0x3c, 0xd9, 0x6f, 0x3d, 0x6d, 0x75, 0x76, 0x5b, + 0x1b, 0xbb, 0x6d, 0xb6, 0xcc, 0xef, 0x40, 0x43, 0x63, 0x18, 0xad, 0x5e, 0xfb, 0x68, 0xb7, 0xb3, + 0xd7, 0xe9, 0x1d, 0xb5, 0xbf, 0xbd, 0xd9, 0x6e, 0x6f, 0xb5, 0xb7, 0x58, 0x8d, 0xbf, 0x01, 0x5f, + 0xa2, 0x4e, 0xe9, 0x4e, 0xa4, 0x5f, 0xf6, 0x59, 0xe7, 0xf0, 0xa8, 0x65, 0x6c, 0xee, 0x74, 0x9e, + 0xb6, 0xd9, 0x0a, 0x7f, 0x1d, 0xbe, 0x78, 0x39, 0xea, 0x56, 0xc7, 0x68, 0x6f, 0xf6, 0x0e, 0x8c, + 0x4f, 0xd9, 0x1a, 0xff, 0x19, 0x78, 0x65, 0xa7, 0xb7, 0xb7, 0x7b, 0xf4, 0xcc, 0x38, 0xd8, 0x7f, + 0x74, 0x44, 0x3f, 0xbb, 0x3d, 0xe3, 0xc9, 0x66, 0xef, 0x89, 0xd1, 0x66, 0xc0, 0x1b, 0x70, 0xf3, + 0x70, 0xe3, 0x68, 0xff, 0xa0, 0x77, 0xd4, 0xda, 0xff, 0x74, 0x63, 0xf7, 0x60, 0xf3, 0xf1, 0xd1, + 0xf6, 0x81, 0xb1, 0xd7, 0xea, 0xb1, 0x2a, 0xff, 0x32, 0xbc, 0xbe, 0xd9, 0x7d, 0xaa, 0xbb, 0x79, + 0xb0, 0x7d, 0x64, 0x1c, 0x3c, 0xeb, 0x1e, 0x1d, 0x18, 0x47, 0x46, 0x7b, 0x97, 0xc6, 0xdc, 0x8d, + 0xfb, 0x5e, 0xe2, 0xb7, 0xa1, 0xde, 0xd9, 0xef, 0x3e, 0xd9, 0xde, 0xee, 0x6c, 0x76, 0xda, 0xfb, + 0xbd, 0xa3, 0xc3, 0xb6, 0xb1, 0xd7, 0xe9, 0x76, 0x11, 0x8d, 0x55, 0x9a, 0xdf, 0x84, 0x62, 0xc7, + 0x3d, 0xb3, 0x25, 0xed, 0x2f, 0x2d, 0x8c, 0xda, 0xe3, 0x0a, 0x9b, 0xb4, 0x2d, 0xec, 0x81, 0x4b, + 0xdf, 0x59, 0xa0, 0xdd, 0xb5, 0x6c, 0xc4, 0x80, 0xe6, 0x2f, 0xe6, 0xa0, 0xa6, 0x58, 0x84, 0x1e, + 0xdc, 0x3d, 0x58, 0xd5, 0xa1, 0xd0, 0x4e, 0x5a, 0x85, 0x4d, 0x83, 0xe9, 0x03, 0x66, 0x0a, 0x94, + 0x50, 0x64, 0x49, 0x10, 0x15, 0x65, 0xf4, 0x1d, 0x74, 0x03, 0x55, 0xbe, 0x52, 0xb7, 0x3e, 0xaf, + 0xee, 0x42, 0xbd, 0xa8, 0x10, 0xfb, 0x9e, 0xbb, 0x19, 0x5d, 0xa1, 0x49, 0xc1, 0xf8, 0x67, 0x70, + 0x2b, 0x6a, 0xb7, 0xdd, 0xbe, 0x7f, 0x31, 0x8e, 0xbe, 0x30, 0x58, 0x9a, 0x1b, 0x4c, 0xd8, 0xb6, + 0x1d, 0x91, 0x42, 0x34, 0x2e, 0x63, 0xc0, 0xbf, 0x06, 0x60, 0xd3, 0x64, 0x91, 0x7d, 0xa4, 0xee, + 0xac, 0xbd, 0x32, 0x13, 0x07, 0x0c, 0x11, 0x8c, 0x04, 0x32, 0x1e, 0x09, 0x03, 0xd4, 0xb4, 0x8f, + 0xf5, 0x27, 0x08, 0x97, 0x8d, 0xa8, 0xdd, 0xfc, 0xc3, 0x4c, 0xc2, 0x91, 0x56, 0x8e, 0xf2, 0x95, + 0x47, 0xc8, 0xbc, 0xa4, 0x0e, 0xba, 0xb2, 0x7a, 0x56, 0xb4, 0x65, 0xa3, 0x9b, 0xfc, 0x10, 0xb8, + 0x3d, 0x3b, 0x17, 0xf9, 0x05, 0xe7, 0x62, 0x0e, 0xed, 0x74, 0x4c, 0xbe, 0x30, 0x1b, 0x93, 0xbf, + 0x03, 0x30, 0x70, 0xbc, 0x63, 0x9d, 0x18, 0x2c, 0xea, 0x42, 0xa5, 0x08, 0xd2, 0x74, 0xa0, 0x1c, + 0x7e, 0x1e, 0x11, 0x85, 0x84, 0x3e, 0x90, 0x18, 0x45, 0x28, 0x55, 0x8b, 0xef, 0xc0, 0x8a, 0x48, + 0xf7, 0x39, 0xbb, 0x60, 0x9f, 0xa7, 0xe8, 0x9a, 0x5f, 0x83, 0xb5, 0x19, 0x24, 0x9c, 0xc4, 0xb1, + 0x29, 0xa3, 0x6f, 0x24, 0xe0, 0xef, 0xd9, 0x7c, 0x7b, 0xf3, 0xdf, 0x66, 0x61, 0x79, 0xcf, 0x74, + 0xed, 0x13, 0x11, 0xc8, 0xb0, 0xb7, 0x41, 0x7f, 0x28, 0x46, 0x66, 0xd8, 0x5b, 0xd5, 0xd2, 0x61, + 0x8b, 0x6c, 0x32, 0x21, 0x30, 0x93, 0x3f, 0xc2, 0xed, 0x30, 0x91, 0xc3, 0xe8, 0x3a, 0x80, 0x6e, + 0xe1, 0xda, 0x39, 0x76, 0x5f, 0xb8, 0x41, 0x28, 0xf2, 0x61, 0x33, 0x2e, 0xbf, 0x29, 0x5e, 0x51, + 0x7e, 0x53, 0x9a, 0x9d, 0xff, 0xbb, 0x50, 0x0d, 0xfa, 0xbe, 0x10, 0x6e, 0x30, 0xf4, 0x64, 0xf8, + 0x69, 0xcd, 0x24, 0x88, 0x6a, 0xff, 0xbc, 0xe7, 0x2e, 0x6e, 0xf9, 0x5d, 0xdb, 0x3d, 0xd5, 0x25, + 0x6d, 0x29, 0x18, 0xca, 0x20, 0x05, 0x6d, 0xec, 0xef, 0x09, 0x0a, 0x18, 0x14, 0x8c, 0xa8, 0x4d, + 0x61, 0x19, 0x53, 0x8a, 0x81, 0xe7, 0xdb, 0x42, 0xc5, 0x26, 0x2b, 0x46, 0x02, 0x82, 0xb4, 0x8e, + 0xe9, 0x0e, 0x26, 0xe6, 0x40, 0xe8, 0xfc, 0x75, 0xd4, 0x6e, 0xfe, 0x8f, 0x02, 0xc0, 0x9e, 0x18, + 0x1d, 0x0b, 0x3f, 0x18, 0xda, 0x63, 0xca, 0x9d, 0xd8, 0xba, 0x08, 0xba, 0x66, 0xd0, 0x6f, 0xfe, + 0x41, 0xea, 0x7e, 0xc2, 0x6c, 0xb6, 0x33, 0x26, 0x9f, 0x8e, 0xe9, 0xe0, 0xe4, 0x98, 0x52, 0xe8, + 0xca, 0x27, 0x9a, 0xff, 0xbc, 0x91, 0x04, 0x51, 0xad, 0x9f, 0x29, 0x45, 0xdb, 0xb5, 0x54, 0xcc, + 0x28, 0x6f, 0x44, 0x6d, 0xba, 0xe1, 0x14, 0xb4, 0x26, 0xd2, 0x33, 0x84, 0x2b, 0x9e, 0x47, 0x97, + 0xf7, 0x62, 0x10, 0xdf, 0x83, 0xda, 0xd8, 0xbc, 0x18, 0x09, 0x57, 0xee, 0x09, 0x39, 0xf4, 0x2c, + 0x5d, 0xa6, 0xf4, 0xfa, 0xe5, 0x1d, 0x3c, 0x4c, 0xa2, 0x1b, 0x69, 0x6a, 0x94, 0x09, 0x37, 0xa0, + 0x5d, 0xa2, 0x96, 0x51, 0xb7, 0xf8, 0x06, 0x80, 0xfa, 0x95, 0x50, 0x35, 0x33, 0x61, 0x24, 0x73, + 0x24, 0x02, 0xe1, 0x9f, 0xd9, 0x4a, 0x3d, 0x2a, 0x9d, 0x13, 0x53, 0xa1, 0x32, 0x9d, 0x04, 0xc2, + 0x6f, 0x8f, 0x4c, 0xdb, 0xd1, 0x0b, 0x1c, 0x03, 0xf8, 0xbb, 0x70, 0x23, 0x98, 0x1c, 0xa3, 0xcc, + 0x1c, 0x8b, 0x9e, 0xb7, 0x2f, 0x9e, 0x07, 0x8e, 0x90, 0x52, 0xf8, 0xba, 0x14, 0x62, 0xfe, 0xc3, + 0xe6, 0x20, 0xb2, 0xa3, 0xe8, 0x33, 0x2e, 0xf8, 0x2b, 0xae, 0xb7, 0x8a, 0x40, 0xba, 0x18, 0x8d, + 0x65, 0x38, 0x83, 0x65, 0x05, 0xd2, 0xb5, 0x6a, 0x59, 0xfe, 0x25, 0xf8, 0xd9, 0x14, 0x92, 0xa1, + 0x32, 0xcb, 0xc1, 0xb6, 0xed, 0x9a, 0x8e, 0xfd, 0x3d, 0x95, 0xe7, 0xcf, 0x35, 0xc7, 0x50, 0x4b, + 0x4d, 0x1c, 0xdd, 0x36, 0xa5, 0x5f, 0xba, 0x60, 0x87, 0xc1, 0xb2, 0x6a, 0x77, 0xa5, 0x6f, 0x53, + 0xca, 0x24, 0x82, 0x6c, 0xe2, 0x3e, 0xf7, 0x58, 0x96, 0x5f, 0x07, 0xa6, 0x20, 0x1d, 0xd7, 0x1c, + 0x8f, 0x5b, 0xe3, 0xb1, 0x23, 0x58, 0x8e, 0x6e, 0xf2, 0xc6, 0x50, 0x75, 0x4b, 0x81, 0xe5, 0x9b, + 0xdf, 0x86, 0x5b, 0x34, 0x33, 0x4f, 0x85, 0x1f, 0x79, 0xca, 0x7a, 0xac, 0x37, 0x60, 0x4d, 0xfd, + 0xda, 0xf7, 0xa4, 0x7a, 0x4c, 0xd6, 0x23, 0x87, 0x15, 0x05, 0x46, 0xe3, 0xa9, 0x2b, 0xe8, 0x7e, + 0x6e, 0x04, 0x8b, 0xf0, 0xb2, 0xcd, 0x3f, 0x28, 0x02, 0x8f, 0x05, 0xa2, 0x67, 0x0b, 0x7f, 0xcb, + 0x94, 0x66, 0x22, 0xd4, 0x59, 0xbb, 0x34, 0x59, 0xff, 0xe2, 0x52, 0xbb, 0x9b, 0x50, 0xb4, 0x03, + 0xf4, 0xed, 0x74, 0x7d, 0xb1, 0x6e, 0xf1, 0x5d, 0x80, 0xb1, 0xf0, 0x6d, 0xcf, 0x22, 0x09, 0x2a, + 0xcc, 0xbd, 0x26, 0x32, 0xdb, 0xa9, 0xf5, 0xc3, 0x88, 0xc6, 0x48, 0xd0, 0x63, 0x3f, 0x54, 0x4b, + 0xa5, 0xbe, 0x8b, 0xd4, 0xe9, 0x24, 0x88, 0xbf, 0x05, 0xd7, 0xc6, 0xbe, 0xdd, 0x17, 0x6a, 0x39, + 0x9e, 0x04, 0xd6, 0x26, 0x7d, 0xfc, 0xb0, 0x44, 0x98, 0xf3, 0x1e, 0xa1, 0x04, 0x9a, 0x2e, 0x79, + 0x3c, 0x01, 0x25, 0x7b, 0xf5, 0x8d, 0x76, 0x55, 0x81, 0x5b, 0x33, 0xe6, 0x3f, 0xe4, 0xf7, 0x81, + 0xe9, 0x07, 0x7b, 0xb6, 0xbb, 0x2b, 0xdc, 0x81, 0x1c, 0x92, 0x70, 0xd7, 0x8c, 0x19, 0x38, 0x69, + 0x30, 0xf5, 0x89, 0x29, 0x95, 0x08, 0xaa, 0x18, 0x51, 0x5b, 0x7d, 0x4d, 0xc1, 0xf1, 0xfc, 0xae, + 0xf4, 0x75, 0x29, 0x71, 0xd4, 0x46, 0x23, 0x28, 0xa0, 0xbe, 0x1e, 0xfa, 0x9e, 0x35, 0xa1, 0x34, + 0x85, 0x52, 0x62, 0xd3, 0xe0, 0x18, 0x73, 0xcf, 0x74, 0x75, 0xbd, 0x63, 0x2d, 0x89, 0x19, 0x81, + 0xc9, 0xa9, 0xf3, 0x82, 0x98, 0xe1, 0xaa, 0x76, 0xea, 0x12, 0x30, 0x8d, 0x13, 0xb3, 0x62, 0x11, + 0x4e, 0xcc, 0x87, 0xc6, 0x6f, 0xf9, 0x9e, 0x6d, 0xc5, 0xbc, 0x54, 0xe9, 0xcd, 0x0c, 0x3c, 0x81, + 0x1b, 0xf3, 0xe4, 0x29, 0xdc, 0x98, 0xef, 0x75, 0x28, 0x78, 0x27, 0x27, 0xc2, 0xa7, 0x2f, 0x8a, + 0x56, 0x0c, 0xd5, 0x68, 0xfe, 0x20, 0x03, 0x10, 0x8b, 0x04, 0x6e, 0x84, 0xb8, 0x15, 0x6f, 0xfc, + 0x5b, 0x70, 0x2d, 0x09, 0x76, 0x74, 0x25, 0x2b, 0xed, 0x86, 0xf8, 0xc1, 0x96, 0x79, 0x11, 0xb0, + 0xac, 0xbe, 0x69, 0xae, 0x61, 0xcf, 0x84, 0xa0, 0xb2, 0xc0, 0xeb, 0xc0, 0x62, 0x20, 0x5d, 0x1f, + 0x0c, 0x58, 0x3e, 0x8d, 0xfa, 0xa9, 0x30, 0xfd, 0x80, 0x15, 0x9a, 0x3b, 0x50, 0x54, 0x39, 0xac, + 0x39, 0xd9, 0xe7, 0x97, 0x2b, 0x25, 0xf9, 0x1b, 0x19, 0x80, 0x2d, 0x55, 0xe6, 0x8d, 0x67, 0xfb, + 0x9c, 0xa4, 0xfe, 0x3c, 0x3b, 0xcb, 0xb4, 0x2c, 0x2a, 0x97, 0xcf, 0x45, 0x9f, 0x33, 0xc2, 0x26, + 0xca, 0x93, 0x19, 0x96, 0x7e, 0xa9, 0x9d, 0x18, 0xb5, 0xd5, 0xb1, 0xb2, 0xe9, 0xb9, 0xae, 0xe8, + 0xe3, 0xa1, 0x14, 0x1d, 0x2b, 0x11, 0xa8, 0xf9, 0xfd, 0x2c, 0x54, 0x36, 0x87, 0xa6, 0x54, 0x5f, + 0xff, 0xf9, 0x26, 0x94, 0x47, 0x22, 0x08, 0xcc, 0x81, 0x08, 0x74, 0xce, 0x66, 0x3a, 0xe1, 0x1a, + 0xe1, 0xae, 0x3f, 0x71, 0x7d, 0x61, 0x5a, 0xea, 0x93, 0x47, 0x11, 0x95, 0xe2, 0xe0, 0xca, 0xc8, + 0xa7, 0x7e, 0x09, 0x0e, 0x6e, 0xf4, 0x7d, 0x62, 0xc7, 0x0c, 0x14, 0x4a, 0x14, 0x2f, 0x4b, 0x82, + 0x1a, 0x7b, 0x50, 0x4d, 0x90, 0xf2, 0x57, 0xa1, 0xe6, 0x39, 0x96, 0x08, 0xd4, 0x65, 0xc6, 0xf8, + 0x3b, 0x91, 0x29, 0x20, 0x55, 0x5e, 0xe0, 0x7e, 0x16, 0xbe, 0x4e, 0xbf, 0x85, 0xcd, 0xe6, 0xaf, + 0x95, 0xa1, 0x8a, 0x9d, 0xda, 0x53, 0x63, 0x98, 0x59, 0x8e, 0x3a, 0x94, 0x3c, 0xcd, 0x59, 0x17, + 0x7f, 0x7b, 0x09, 0x9e, 0xba, 0x9a, 0x23, 0x97, 0xae, 0xe6, 0x48, 0x95, 0x7f, 0xe7, 0xa7, 0xcb, + 0xbf, 0xef, 0x00, 0x8c, 0x3c, 0x8b, 0xb4, 0x74, 0x4b, 0xa5, 0x59, 0x72, 0x46, 0x02, 0x42, 0x7e, + 0x8a, 0x1e, 0x7e, 0x55, 0xfb, 0x29, 0xaa, 0xa9, 0xca, 0x6a, 0xc6, 0xce, 0x45, 0xcf, 0xd3, 0xbd, + 0xed, 0x58, 0xf1, 0x65, 0xf2, 0x34, 0x9c, 0x6f, 0x42, 0x49, 0x2f, 0x8b, 0x4e, 0x26, 0xbd, 0x31, + 0x67, 0x25, 0x34, 0xfa, 0xba, 0xfe, 0xab, 0xef, 0x73, 0x19, 0x21, 0x25, 0x7f, 0x04, 0x55, 0x53, + 0x4a, 0xb3, 0x3f, 0x1c, 0x69, 0xad, 0x9a, 0x9b, 0x93, 0x57, 0x4e, 0x32, 0x6a, 0x45, 0xd8, 0x46, + 0x92, 0x92, 0x6f, 0x40, 0xc5, 0x17, 0x66, 0x2a, 0xb5, 0xfd, 0xea, 0x15, 0x6c, 0x8c, 0x10, 0xd7, + 0x88, 0xc9, 0xa2, 0x4f, 0xa6, 0x42, 0xe2, 0x93, 0xa9, 0x77, 0xa1, 0xaa, 0x45, 0xc7, 0xc0, 0x47, + 0xea, 0x53, 0x32, 0x49, 0x50, 0xe3, 0x47, 0x19, 0x58, 0x49, 0x0f, 0xef, 0xcf, 0xe2, 0x23, 0x7f, + 0x5f, 0x8f, 0x3f, 0xf2, 0xf7, 0x39, 0x3e, 0x98, 0xf7, 0x1b, 0x19, 0x80, 0x78, 0xe6, 0xf0, 0x6c, + 0x55, 0x1f, 0x23, 0x0b, 0xad, 0x7d, 0xd5, 0xe2, 0x3b, 0xa9, 0x2f, 0x53, 0xbc, 0xbb, 0xd0, 0x32, + 0x24, 0x7e, 0x26, 0xea, 0xd6, 0x1f, 0xc0, 0x4a, 0x1a, 0x4e, 0xf5, 0xfe, 0x9d, 0xdd, 0xb6, 0x0a, + 0x4e, 0x75, 0xf6, 0x5a, 0x8f, 0xda, 0xfa, 0x5e, 0x5d, 0x67, 0xff, 0x31, 0xcb, 0x36, 0xfe, 0x28, + 0x03, 0x95, 0x68, 0x51, 0xf8, 0xb7, 0x92, 0xab, 0xa9, 0x2a, 0x5c, 0xde, 0x59, 0x64, 0x35, 0xe3, + 0x5f, 0x6d, 0x57, 0xfa, 0x17, 0x89, 0xc5, 0x6d, 0x78, 0xb0, 0x92, 0x7e, 0x38, 0x47, 0xcd, 0x3e, + 0x4a, 0xab, 0xd9, 0xb7, 0x17, 0x7a, 0x65, 0xe8, 0xe2, 0xee, 0xda, 0x81, 0xd4, 0x1a, 0xf8, 0xc3, + 0xec, 0x07, 0x99, 0xc6, 0x5d, 0x58, 0x4e, 0x3e, 0x9a, 0xbd, 0x5a, 0x7b, 0xff, 0x8f, 0x72, 0xb0, + 0x92, 0x2e, 0x12, 0xa1, 0xab, 0x7a, 0xaa, 0x40, 0xe9, 0xc0, 0xb1, 0x12, 0xa5, 0xfe, 0x8c, 0xaf, + 0x42, 0x55, 0x3b, 0xd1, 0x04, 0x58, 0xa3, 0xf0, 0x97, 0x37, 0x12, 0xec, 0x6e, 0xf2, 0x43, 0xa6, + 0x6f, 0x71, 0x08, 0xaf, 0x58, 0xb2, 0x31, 0xaf, 0xe8, 0x4f, 0xba, 0x7d, 0x3f, 0xcb, 0x6b, 0x89, + 0x82, 0xf3, 0x1f, 0xa2, 0x05, 0xb9, 0xba, 0x31, 0x71, 0x2d, 0x47, 0x58, 0x11, 0xf4, 0x47, 0x49, + 0x68, 0x54, 0x31, 0xfe, 0xfd, 0x3c, 0x5f, 0x81, 0x4a, 0x77, 0x72, 0xac, 0xab, 0xc5, 0xff, 0x4a, + 0x9e, 0xdf, 0x84, 0x35, 0x8d, 0x15, 0x17, 0x67, 0xb2, 0x5f, 0xc4, 0x53, 0x6d, 0xa5, 0xa5, 0xe6, + 0x4b, 0x77, 0x94, 0xfd, 0xd5, 0x3c, 0x76, 0x81, 0x6e, 0xee, 0xff, 0x35, 0xe2, 0x13, 0xdd, 0x64, + 0x62, 0xbf, 0x94, 0xe7, 0xab, 0x00, 0xdd, 0x5e, 0xf4, 0xa2, 0x5f, 0xc9, 0xf3, 0x2a, 0x14, 0xbb, + 0x3d, 0xe2, 0xf6, 0x83, 0x3c, 0xbf, 0x01, 0x2c, 0x7e, 0xaa, 0x4b, 0x56, 0xff, 0x96, 0xea, 0x4c, + 0x54, 0x83, 0xfa, 0xb7, 0xf3, 0x38, 0xae, 0x70, 0x96, 0xd9, 0xdf, 0xc9, 0x73, 0x06, 0xd5, 0x44, + 0x50, 0x95, 0xfd, 0xdd, 0x3c, 0xe7, 0x50, 0xdb, 0xb3, 0x83, 0xc0, 0x76, 0x07, 0x7a, 0x04, 0xbf, + 0x4c, 0x6f, 0xde, 0x8e, 0x2e, 0x63, 0xb1, 0x5f, 0xcd, 0xf3, 0x5b, 0xc0, 0x93, 0x89, 0x24, 0xfd, + 0xe0, 0xd7, 0x88, 0x5a, 0x9d, 0xa4, 0x81, 0x86, 0xfd, 0x3d, 0xa2, 0x46, 0x49, 0xd0, 0x80, 0x5f, + 0xa7, 0x09, 0xd9, 0x8c, 0x8b, 0x5c, 0x35, 0xfc, 0x87, 0x44, 0x1c, 0x2e, 0xa6, 0x82, 0xfd, 0x28, + 0x7f, 0xff, 0x77, 0x29, 0x11, 0x90, 0xac, 0x15, 0xe3, 0xcb, 0x50, 0x76, 0x3c, 0x77, 0x20, 0xd5, + 0x07, 0x64, 0x6b, 0x50, 0x09, 0x86, 0x9e, 0x2f, 0xa9, 0x49, 0xb7, 0x45, 0x5d, 0xfa, 0xaa, 0x80, + 0xba, 0x6f, 0xa0, 0xbc, 0x41, 0x15, 0x58, 0x95, 0xe6, 0x80, 0x55, 0xa3, 0xf2, 0xdc, 0x7c, 0x54, + 0x42, 0x4c, 0x5f, 0x37, 0x08, 0x6f, 0x8f, 0xb3, 0x22, 0xa2, 0x4e, 0x7c, 0x47, 0x95, 0x12, 0x0b, + 0xf4, 0x04, 0xd4, 0x97, 0x22, 0xc7, 0x43, 0x74, 0x38, 0x2a, 0x0a, 0xea, 0x7d, 0xc7, 0x56, 0xf7, + 0x92, 0x75, 0x65, 0x9e, 0x85, 0xfd, 0x88, 0x8a, 0x4f, 0x98, 0xb8, 0xff, 0xf7, 0x33, 0xb0, 0x1c, + 0xde, 0xe9, 0xb7, 0x07, 0xb6, 0xab, 0x8a, 0x91, 0xc3, 0xcf, 0xf2, 0xf6, 0x1d, 0x7b, 0x1c, 0x7e, + 0xe6, 0x72, 0x15, 0xaa, 0x96, 0x6f, 0x0e, 0x5a, 0xae, 0xb5, 0xe5, 0x7b, 0x63, 0xd5, 0x6d, 0x95, + 0x2a, 0x54, 0x45, 0xd0, 0xcf, 0xc5, 0x31, 0xa2, 0x8f, 0x85, 0xcf, 0xf2, 0x54, 0xf5, 0x37, 0x34, + 0x7d, 0xdb, 0x1d, 0xb4, 0xcf, 0xa5, 0x70, 0x03, 0x55, 0x0c, 0x5d, 0x85, 0xd2, 0x24, 0x10, 0x7d, + 0x33, 0x10, 0xac, 0x88, 0x8d, 0xe3, 0x89, 0xed, 0x48, 0xdb, 0x55, 0x5f, 0x97, 0x8c, 0xaa, 0x9d, + 0xcb, 0x38, 0x32, 0x73, 0x6c, 0xb3, 0xca, 0xfd, 0x7f, 0x99, 0x81, 0x2a, 0x89, 0x45, 0x1c, 0x0c, + 0x8f, 0xad, 0xb8, 0x2a, 0x94, 0x76, 0xa3, 0xcf, 0x0c, 0x16, 0x21, 0x7b, 0x70, 0xaa, 0x82, 0xe1, + 0x5a, 0x2c, 0xd4, 0xe5, 0x5b, 0xf5, 0xc5, 0xc1, 0x3c, 0x7f, 0x05, 0x6e, 0x18, 0x62, 0xe4, 0x49, + 0xf1, 0xcc, 0xb4, 0x65, 0xf2, 0xe2, 0x51, 0x01, 0xdd, 0x40, 0xf5, 0x28, 0xbc, 0x69, 0x54, 0x24, + 0x37, 0x10, 0x5f, 0x1b, 0x42, 0x4a, 0x38, 0x7a, 0x82, 0x68, 0xbf, 0xb0, 0x1c, 0xa1, 0x7c, 0xe2, + 0xd9, 0x2e, 0xbe, 0x8d, 0x2e, 0x84, 0x13, 0x84, 0xb2, 0x2a, 0x08, 0x82, 0xfb, 0xfb, 0x70, 0x73, + 0x7e, 0x2e, 0x40, 0x5d, 0x15, 0xa7, 0x6f, 0x5b, 0xd3, 0x55, 0x94, 0x67, 0xbe, 0xad, 0xee, 0xf4, + 0x56, 0xa0, 0x70, 0xf0, 0xdc, 0x25, 0xb1, 0x58, 0x83, 0xda, 0xbe, 0x97, 0xa0, 0x61, 0xb9, 0xfb, + 0xef, 0x03, 0xc4, 0x01, 0x3b, 0xf5, 0x69, 0x2f, 0x92, 0x21, 0x52, 0xbe, 0x8f, 0x26, 0x22, 0xd0, + 0x2e, 0xdd, 0x33, 0x5b, 0x0e, 0xbd, 0x49, 0x98, 0x27, 0x63, 0xd9, 0xfb, 0xfd, 0x54, 0xde, 0x27, + 0x9e, 0xcd, 0xb0, 0xf7, 0x4b, 0x89, 0xfb, 0x59, 0x19, 0x95, 0x51, 0xa0, 0xff, 0x6b, 0xa2, 0xbe, + 0xbf, 0xa1, 0xf3, 0x2d, 0x96, 0xfa, 0xfe, 0x46, 0x34, 0xbe, 0xbc, 0xfa, 0x10, 0x99, 0xdb, 0x17, + 0x8e, 0xb0, 0x58, 0xe1, 0xfe, 0x07, 0xb0, 0xaa, 0xe7, 0xa8, 0x2f, 0x82, 0x20, 0xbc, 0xdf, 0x74, + 0xe8, 0xdb, 0x67, 0xea, 0x1b, 0x1f, 0xcb, 0x50, 0x3e, 0x14, 0x7e, 0xe0, 0xb9, 0xf4, 0x7d, 0x13, + 0x80, 0x62, 0x77, 0x68, 0xfa, 0xf8, 0x8e, 0xfb, 0x5f, 0xd1, 0xb3, 0xfb, 0xe4, 0x3c, 0x3c, 0x53, + 0x70, 0xe3, 0xe9, 0xcf, 0xfb, 0x98, 0xd2, 0xd4, 0xe8, 0xd2, 0x17, 0xe6, 0x88, 0x65, 0xef, 0x6f, + 0x42, 0x85, 0xae, 0x47, 0x3d, 0xb6, 0x5d, 0x0b, 0x47, 0xbe, 0xa1, 0x4b, 0xf5, 0xe9, 0xbb, 0x53, + 0x67, 0x34, 0x8f, 0x65, 0xf5, 0x25, 0x5f, 0x96, 0xe5, 0x37, 0x81, 0xb7, 0x26, 0xd2, 0x1b, 0x99, + 0x74, 0x8d, 0xd9, 0xb9, 0x50, 0x5f, 0x7d, 0xce, 0xdd, 0xff, 0x06, 0x70, 0x15, 0xd4, 0xb3, 0xc4, + 0xb9, 0xed, 0x0e, 0xa2, 0xef, 0x27, 0x00, 0x7d, 0x0c, 0xc5, 0x12, 0xe7, 0xe1, 0xdd, 0xb6, 0xb0, + 0x11, 0x7e, 0x92, 0x65, 0xdb, 0x9b, 0xb8, 0xd8, 0xe9, 0xa7, 0x70, 0x5d, 0xc9, 0x26, 0x8e, 0x82, + 0xee, 0xc8, 0x5e, 0x1a, 0x69, 0x50, 0x77, 0xdb, 0xe4, 0x24, 0x88, 0x70, 0x59, 0x06, 0x3b, 0x16, + 0x79, 0xe9, 0x31, 0x3c, 0x7b, 0xbf, 0x09, 0xd7, 0xe6, 0x84, 0x4a, 0xe8, 0x34, 0x50, 0x0e, 0x23, + 0x5b, 0xba, 0xff, 0x31, 0xac, 0x29, 0xfd, 0xb5, 0xaf, 0x6e, 0x31, 0x86, 0xd3, 0xf6, 0xac, 0xb3, + 0xdd, 0x51, 0x33, 0xbd, 0xd9, 0xde, 0xdd, 0x7d, 0xb2, 0xdb, 0x32, 0x58, 0x86, 0x04, 0xe9, 0xa0, + 0x77, 0xb4, 0x79, 0xb0, 0xbf, 0xdf, 0xde, 0xec, 0xb5, 0xb7, 0x58, 0x76, 0xe3, 0xfe, 0xbf, 0xf9, + 0xc9, 0x9d, 0xcc, 0x8f, 0x7f, 0x72, 0x27, 0xf3, 0x9f, 0x7e, 0x72, 0x27, 0xf3, 0x83, 0x9f, 0xde, + 0x59, 0xfa, 0xf1, 0x4f, 0xef, 0x2c, 0xfd, 0xbb, 0x9f, 0xde, 0x59, 0xfa, 0x8c, 0x4d, 0xff, 0x6b, + 0xa2, 0xe3, 0x22, 0x79, 0x23, 0xef, 0xfc, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdc, 0x1f, 0xcd, + 0xb8, 0xb5, 0x68, 0x00, 0x00, } func (m *SmartBlockSnapshotBase) Marshal() (dAtA []byte, err error) { @@ -12077,6 +12086,15 @@ func (m *BlockContentDataviewView) MarshalToSizedBuffer(dAtA []byte) (int, error _ = i var l int _ = l + if len(m.EndRelationKey) > 0 { + i -= len(m.EndRelationKey) + copy(dAtA[i:], m.EndRelationKey) + i = encodeVarintModels(dAtA, i, uint64(len(m.EndRelationKey))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x82 + } if len(m.DefaultObjectTypeId) > 0 { i -= len(m.DefaultObjectTypeId) copy(dAtA[i:], m.DefaultObjectTypeId) @@ -17602,6 +17620,10 @@ func (m *BlockContentDataviewView) Size() (n int) { if l > 0 { n += 1 + l + sovModels(uint64(l)) } + l = len(m.EndRelationKey) + if l > 0 { + n += 2 + l + sovModels(uint64(l)) + } return n } @@ -23975,6 +23997,38 @@ func (m *BlockContentDataviewView) Unmarshal(dAtA []byte) error { } m.DefaultObjectTypeId = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 16: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EndRelationKey", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModels + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthModels + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthModels + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.EndRelationKey = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipModels(dAtA[iNdEx:]) diff --git a/pkg/lib/pb/model/protos/models.proto b/pkg/lib/pb/model/protos/models.proto index a5a4bf4ca..bdf88f5f3 100644 --- a/pkg/lib/pb/model/protos/models.proto +++ b/pkg/lib/pb/model/protos/models.proto @@ -363,6 +363,7 @@ message Block { int32 pageLimit = 13; // Limit of objects shown in widget string defaultTemplateId = 14; // Default template that is chosen for new object created within the view string defaultObjectTypeId = 15; // Default object type that is chosen for new object created within the view + string endRelationKey = 16; // Group view by this relationKey enum Type { Table = 0;